perf: i18n (#4740)

* feat: login limit time config

* doc

* perf: code

* i18n update

* update lock

* fix: ts

* update package
This commit is contained in:
Archer 2025-05-05 16:16:59 +08:00 committed by GitHub
parent fdd4e9edbd
commit 864eff47c7
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
229 changed files with 1128 additions and 1293 deletions

View File

@ -16,9 +16,6 @@ usageMatchRegex:
# the `{key}` will be placed by a proper keypath matching regex, # the `{key}` will be placed by a proper keypath matching regex,
# you can ignore it and use your own matching rules as well # you can ignore it and use your own matching rules as well
- "[^\\w\\d]t\\(['\"`]({key})['\"`]" - "[^\\w\\d]t\\(['\"`]({key})['\"`]"
- "[^\\w\\d]commonT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]fileT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]workflowT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]i18nT\\(['\"`]({key})['\"`]" - "[^\\w\\d]i18nT\\(['\"`]({key})['\"`]"
# A RegEx to set a custom scope range. This scope will be used as a prefix when detecting keys # A RegEx to set a custom scope range. This scope will be used as a prefix when detecting keys

View File

@ -17,7 +17,10 @@ weight: 792
## ⚙️ 优化 ## ⚙️ 优化
1. Chat log list 优化,避免大数据时超出内存限制。 1. Chat log list 优化,避免大数据时超出内存限制。
2. 预加载 token 计算 worker避免主任务中并发创建导致线程阻塞。
## 🐛 修复 ## 🐛 修复
1. 应用列表/知识库列表,删除行权限展示问题。
2. 打开知识库搜索参数后,重排选项自动被打开。

1
env.d.ts vendored
View File

@ -35,6 +35,7 @@ declare global {
ALLOWED_ORIGINS?: string; ALLOWED_ORIGINS?: string;
SHOW_COUPON?: string; SHOW_COUPON?: string;
CONFIG_JSON_PATH?: string; CONFIG_JSON_PATH?: string;
PASSWORD_LOGIN_LOCK_SECONDS?: string;
} }
} }
} }

View File

@ -19,32 +19,32 @@ export const DatasetTypeMap = {
[DatasetTypeEnum.dataset]: { [DatasetTypeEnum.dataset]: {
icon: 'core/dataset/commonDatasetOutline', icon: 'core/dataset/commonDatasetOutline',
label: i18nT('dataset:common_dataset'), label: i18nT('dataset:common_dataset'),
collectionLabel: i18nT('common:common.File') collectionLabel: i18nT('common:File')
}, },
[DatasetTypeEnum.websiteDataset]: { [DatasetTypeEnum.websiteDataset]: {
icon: 'core/dataset/websiteDatasetOutline', icon: 'core/dataset/websiteDatasetOutline',
label: i18nT('dataset:website_dataset'), label: i18nT('dataset:website_dataset'),
collectionLabel: i18nT('common:common.Website') collectionLabel: i18nT('common:Website')
}, },
[DatasetTypeEnum.externalFile]: { [DatasetTypeEnum.externalFile]: {
icon: 'core/dataset/externalDatasetOutline', icon: 'core/dataset/externalDatasetOutline',
label: i18nT('dataset:external_file'), label: i18nT('dataset:external_file'),
collectionLabel: i18nT('common:common.File') collectionLabel: i18nT('common:File')
}, },
[DatasetTypeEnum.apiDataset]: { [DatasetTypeEnum.apiDataset]: {
icon: 'core/dataset/externalDatasetOutline', icon: 'core/dataset/externalDatasetOutline',
label: i18nT('dataset:api_file'), label: i18nT('dataset:api_file'),
collectionLabel: i18nT('common:common.File') collectionLabel: i18nT('common:File')
}, },
[DatasetTypeEnum.feishu]: { [DatasetTypeEnum.feishu]: {
icon: 'core/dataset/feishuDatasetOutline', icon: 'core/dataset/feishuDatasetOutline',
label: i18nT('dataset:feishu_dataset'), label: i18nT('dataset:feishu_dataset'),
collectionLabel: i18nT('common:common.File') collectionLabel: i18nT('common:File')
}, },
[DatasetTypeEnum.yuque]: { [DatasetTypeEnum.yuque]: {
icon: 'core/dataset/yuqueDatasetOutline', icon: 'core/dataset/yuqueDatasetOutline',
label: i18nT('dataset:yuque_dataset'), label: i18nT('dataset:yuque_dataset'),
collectionLabel: i18nT('common:common.File') collectionLabel: i18nT('common:File')
} }
}; };

View File

@ -21,7 +21,7 @@ export async function dispatchDatasetConcat(
props: DatasetConcatProps props: DatasetConcatProps
): Promise<DatasetConcatResponse> { ): Promise<DatasetConcatResponse> {
const { const {
params: { limit = 6000, ...quoteMap } params: { limit = 5000, ...quoteMap }
} = props as DatasetConcatProps; } = props as DatasetConcatProps;
const quoteList = Object.values(quoteMap).filter((list) => Array.isArray(list)); const quoteList = Object.values(quoteMap).filter((list) => Array.isArray(list));

View File

@ -118,7 +118,7 @@ const DateRangePicker = ({
mr={2} mr={2}
onClick={() => setShowSelected(false)} onClick={() => setShowSelected(false)}
> >
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button <Button
size={'sm'} size={'sm'}
@ -127,7 +127,7 @@ const DateRangePicker = ({
setShowSelected(false); setShowSelected(false);
}} }}
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</Flex> </Flex>
} }

View File

@ -14,7 +14,7 @@ const EmptyTip = ({ text, iconSize = '48px', ...props }: Props) => {
<Flex mt={5} flexDirection={'column'} alignItems={'center'} py={'10vh'} {...props}> <Flex mt={5} flexDirection={'column'} alignItems={'center'} py={'10vh'} {...props}>
<MyIcon name="empty" w={iconSize} h={iconSize} color={'transparent'} /> <MyIcon name="empty" w={iconSize} h={iconSize} color={'transparent'} />
<Box mt={2} color={'myGray.500'} fontSize={'sm'}> <Box mt={2} color={'myGray.500'} fontSize={'sm'}>
{text || t('common:common.empty.Common Tip')} {text || t('common:no_more_data')}
</Box> </Box>
</Flex> </Flex>
); );

View File

@ -67,7 +67,7 @@ const EditFolderModal = ({
<MyModal isOpen onClose={onClose} iconSrc="common/folderFill" title={typeMap.title}> <MyModal isOpen onClose={onClose} iconSrc="common/folderFill" title={typeMap.title}>
<ModalBody> <ModalBody>
<Box> <Box>
<FormLabel mb={1}>{t('common:common.Input name')}</FormLabel> <FormLabel mb={1}>{t('common:input_name')}</FormLabel>
<Input <Input
{...register('name', { required: true })} {...register('name', { required: true })}
bg={'myGray.50'} bg={'myGray.50'}
@ -76,13 +76,13 @@ const EditFolderModal = ({
/> />
</Box> </Box>
<Box mt={4}> <Box mt={4}>
<FormLabel mb={1}>{t('common:common.Input folder description')}</FormLabel> <FormLabel mb={1}>{t('common:folder_description')}</FormLabel>
<Textarea {...register('intro')} bg={'myGray.50'} maxLength={200} /> <Textarea {...register('intro')} bg={'myGray.50'} maxLength={200} />
</Box> </Box>
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button isLoading={loading} onClick={handleSubmit(onSave)} px={6}> <Button isLoading={loading} onClick={handleSubmit(onSave)} px={6}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -87,11 +87,11 @@ const PopoverConfirm = ({
<HStack mt={1} justifyContent={'flex-end'}> <HStack mt={1} justifyContent={'flex-end'}>
{showCancel && ( {showCancel && (
<Button variant={'whiteBase'} size="sm" onClick={onClose}> <Button variant={'whiteBase'} size="sm" onClick={onClose}>
{cancelText || t('common:common.Cancel')} {cancelText || t('common:Cancel')}
</Button> </Button>
)} )}
<Button isLoading={loading} variant={map.variant} size="sm" onClick={onclickConfirm}> <Button isLoading={loading} variant={map.variant} size="sm" onClick={onclickConfirm}>
{confirmText || t('common:common.Confirm')} {confirmText || t('common:Confirm')}
</Button> </Button>
</HStack> </HStack>
</PopoverContent> </PopoverContent>

View File

@ -47,7 +47,7 @@ export const cronString2Label = (
) => { ) => {
const cronField = cronString2Fields(cronString); const cronField = cronString2Fields(cronString);
if (!cronField) { if (!cronField) {
return t('common:common.Not open'); return t('common:not_open');
} }
if (cronField[0] === 'month') { if (cronField[0] === 'month') {
@ -82,7 +82,7 @@ export const cronString2Label = (
}); });
} }
return t('common:common.Not open'); return t('common:not_open');
}; };
const CronSelector = ({ const CronSelector = ({

View File

@ -136,11 +136,7 @@ export const MultipleRowSelect = ({
); );
})} })}
{list.length === 0 && ( {list.length === 0 && (
<EmptyTip <EmptyTip text={emptyTip ?? t('common:no_select_data')} pt={1} pb={3} />
text={emptyTip ?? t('common:common.MultipleRowSelect.No data')}
pt={1}
pb={3}
/>
)} )}
</Box> </Box>
{children.length > 0 && <RenderList list={children} index={index + 1} />} {children.length > 0 && <RenderList list={children} index={index + 1} />}
@ -331,11 +327,7 @@ export const MultipleRowArraySelect = ({
); );
})} })}
{list.length === 0 && ( {list.length === 0 && (
<EmptyTip <EmptyTip text={emptyTip ?? t('common:no_select_data')} pt={1} pb={3} />
text={emptyTip ?? t('common:common.MultipleRowSelect.No data')}
pt={1}
pb={3}
/>
)} )}
</Box> </Box>
{children.length > 0 && <RenderList list={children} index={index + 1} />} {children.length > 0 && <RenderList list={children} index={index + 1} />}

View File

@ -180,7 +180,7 @@ const MultipleSelect = <T = any,>({
> >
{isSelectAll ? ( {isSelectAll ? (
<Box fontSize={'mini'} color={'myGray.900'}> <Box fontSize={'mini'} color={'myGray.900'}>
{t('common:common.All')} {t('common:All')}
</Box> </Box>
) : ( ) : (
list list
@ -249,7 +249,7 @@ const MultipleSelect = <T = any,>({
{...menuItemStyles} {...menuItemStyles}
> >
<Checkbox isChecked={isSelectAll} /> <Checkbox isChecked={isSelectAll} />
<Box flex={'1 0 0'}>{t('common:common.All')}</Box> <Box flex={'1 0 0'}>{t('common:All')}</Box>
</MenuItem> </MenuItem>
<MyDivider my={1} /> <MyDivider my={1} />

View File

@ -43,7 +43,7 @@ const CodeEditor = (props: Props) => {
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button mr={2} onClick={onClose} px={6}> <Button mr={2} onClick={onClose} px={6}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -101,7 +101,7 @@ const CustomPromptEditor = ({
px={2} px={2}
onClick={() => setValue(defaultPrompt)} onClick={() => setValue(defaultPrompt)}
> >
{t('common:common.Reset')} {t('common:Reset')}
</Button> </Button>
</HStack> </HStack>
@ -137,7 +137,7 @@ const CustomPromptEditor = ({
<ModalFooter> <ModalFooter>
<Flex gap={3}> <Flex gap={3}>
<Button variant={'whiteBase'} fontWeight={'medium'} onClick={onClose} w={20}> <Button variant={'whiteBase'} fontWeight={'medium'} onClick={onClose} w={20}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button <Button
fontWeight={'medium'} fontWeight={'medium'}
@ -147,7 +147,7 @@ const CustomPromptEditor = ({
}} }}
w={20} w={20}
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</Flex> </Flex>
</ModalFooter> </ModalFooter>

View File

@ -178,7 +178,7 @@ const JSONEditor = ({
} catch (error) { } catch (error) {
toast({ toast({
status: 'warning', status: 'warning',
title: t('common:common.jsonEditor.Parse error') title: t('common:jsonEditor.Parse error')
}); });
} }
}, [value]); }, [value]);

View File

@ -86,7 +86,7 @@ const PromptEditor = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button mr={2} onClick={onClose} px={6}> <Button mr={2} onClick={onClose} px={6}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -42,7 +42,7 @@ export const workflowNodeTemplateList = [
}, },
{ {
type: FlowNodeTemplateTypeEnum.other, type: FlowNodeTemplateTypeEnum.other,
label: i18nT('common:common.Other'), label: i18nT('common:Other'),
list: [] list: []
}, },
{ {
@ -59,7 +59,7 @@ export const systemPluginTemplateList: TGroupType[] = [
}, },
{ {
typeId: FlowNodeTemplateTypeEnum.search, typeId: FlowNodeTemplateTypeEnum.search,
typeName: i18nT('common:common.Search') typeName: i18nT('common:Search')
}, },
{ {
typeId: FlowNodeTemplateTypeEnum.multimodal, typeId: FlowNodeTemplateTypeEnum.multimodal,
@ -71,7 +71,7 @@ export const systemPluginTemplateList: TGroupType[] = [
}, },
{ {
typeId: FlowNodeTemplateTypeEnum.other, typeId: FlowNodeTemplateTypeEnum.other,
typeName: i18nT('common:common.Other') typeName: i18nT('common:Other')
} }
]; ];
export const defaultGroup: PluginGroupSchemaType = { export const defaultGroup: PluginGroupSchemaType = {
@ -84,27 +84,27 @@ export const defaultGroup: PluginGroupSchemaType = {
export const defaultTemplateTypes: TemplateTypeSchemaType[] = [ export const defaultTemplateTypes: TemplateTypeSchemaType[] = [
{ {
typeName: i18nT('common:app.templateMarket.templateTags.Writing'), typeName: i18nT('common:templateTags.Writing'),
typeId: AppTemplateTypeEnum.writing, typeId: AppTemplateTypeEnum.writing,
typeOrder: 0 typeOrder: 0
}, },
{ {
typeName: i18nT('common:app.templateMarket.templateTags.Image_generation'), typeName: i18nT('common:templateTags.Image_generation'),
typeId: AppTemplateTypeEnum.imageGeneration, typeId: AppTemplateTypeEnum.imageGeneration,
typeOrder: 1 typeOrder: 1
}, },
{ {
typeName: i18nT('common:app.templateMarket.templateTags.Web_search'), typeName: i18nT('common:templateTags.Web_search'),
typeId: AppTemplateTypeEnum.webSearch, typeId: AppTemplateTypeEnum.webSearch,
typeOrder: 2 typeOrder: 2
}, },
{ {
typeName: i18nT('common:app.templateMarket.templateTags.Roleplay'), typeName: i18nT('common:templateTags.Roleplay'),
typeId: AppTemplateTypeEnum.roleplay, typeId: AppTemplateTypeEnum.roleplay,
typeOrder: 3 typeOrder: 3
}, },
{ {
typeName: i18nT('common:app.templateMarket.templateTags.Office_services'), typeName: i18nT('common:templateTags.Office_services'),
typeId: AppTemplateTypeEnum.officeServices, typeId: AppTemplateTypeEnum.officeServices,
typeOrder: 4 typeOrder: 4
} }

View File

@ -5,7 +5,7 @@ import { isProduction } from '@fastgpt/global/common/system/constants';
export const useBeforeunload = (props?: { callback?: () => any; tip?: string }) => { export const useBeforeunload = (props?: { callback?: () => any; tip?: string }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { tip = t('common:common.Confirm to leave the page'), callback } = props || {}; const { tip = t('common:comfirm_leave_page'), callback } = props || {};
useEffect(() => { useEffect(() => {
const listen = isProduction const listen = isProduction

View File

@ -18,12 +18,12 @@ export const useConfirm = (props?: {
const map = useMemo(() => { const map = useMemo(() => {
const map = { const map = {
common: { common: {
title: t('common:common.confirm.Common Tip'), title: t('common:action_confirm'),
variant: 'primary', variant: 'primary',
iconSrc: 'common/confirm/commonTip' iconSrc: 'common/confirm/commonTip'
}, },
delete: { delete: {
title: t('common:common.Delete Warning'), title: t('common:delete_warning'),
variant: 'dangerFill', variant: 'dangerFill',
iconSrc: 'common/confirm/deleteTip' iconSrc: 'common/confirm/deleteTip'
} }
@ -60,8 +60,8 @@ export const useConfirm = (props?: {
const ConfirmModal = useMemoizedFn( const ConfirmModal = useMemoizedFn(
({ ({
closeText = t('common:common.Cancel'), closeText = t('common:Cancel'),
confirmText = t('common:common.Confirm'), confirmText = t('common:Confirm'),
isLoading, isLoading,
bg, bg,
countDown = 0 countDown = 0

View File

@ -20,7 +20,7 @@ export const useCopyData = () => {
const copyData = useCallback( const copyData = useCallback(
async ( async (
data: string, data: string,
title: string | null | undefined = t('common:common.Copy Successful'), title: string | null | undefined = t('common:Copy Successful'),
duration = 1000 duration = 1000
) => { ) => {
data = data.trim(); data = data.trim();
@ -59,7 +59,7 @@ export const ManualCopyModal = () => {
isOpen={!!copyContent} isOpen={!!copyContent}
iconSrc="copy" iconSrc="copy"
iconColor="primary.600" iconColor="primary.600"
title={t('common:common.Copy')} title={t('common:Copy')}
maxW={['90vw', '500px']} maxW={['90vw', '500px']}
w={'100%'} w={'100%'}
onClose={() => setCopyContent(undefined)} onClose={() => setCopyContent(undefined)}

View File

@ -87,7 +87,7 @@ export const useEditTextarea = ({
({ ({
maxLength = 30, maxLength = 30,
iconSrc = 'modal/edit', iconSrc = 'modal/edit',
closeBtnText = t('common:common.Close') closeBtnText = t('common:Close')
}: { }: {
maxLength?: number; maxLength?: number;
iconSrc?: string; iconSrc?: string;
@ -118,7 +118,7 @@ export const useEditTextarea = ({
</Button> </Button>
)} )}
<Button onClick={onclickConfirm} px={6}> <Button onClick={onclickConfirm} px={6}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -212,13 +212,13 @@ export function useLinkedScroll<
<MyBox ref={ref} h={'100%'} overflow={'auto'} isLoading={isLoading} {...props}> <MyBox ref={ref} h={'100%'} overflow={'auto'} isLoading={isLoading} {...props}>
{hasMorePrev && prevLoading && ( {hasMorePrev && prevLoading && (
<Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}> <Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}>
{t('common:common.is_requesting')} {t('common:is_requesting')}
</Box> </Box>
)} )}
{children} {children}
{hasMoreNext && nextLoading && ( {hasMoreNext && nextLoading && (
<Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}> <Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}>
{t('common:common.is_requesting')} {t('common:is_requesting')}
</Box> </Box>
)} )}
</MyBox> </MyBox>

View File

@ -190,9 +190,9 @@ export function usePagination<DataT, ResT = {}>(
} & BoxProps) => { } & BoxProps) => {
const ref = ScrollContainerRef || DefaultRef; const ref = ScrollContainerRef || DefaultRef;
const loadText = (() => { const loadText = (() => {
if (isLoading) return t('common:common.is_requesting'); if (isLoading) return t('common:is_requesting');
if (noMore) return t('common:common.request_end'); if (noMore) return t('common:request_end');
return t('common:common.request_more'); return t('common:request_more');
})(); })();
const scroll = useScroll(ref); const scroll = useScroll(ref);
@ -219,7 +219,7 @@ export function usePagination<DataT, ResT = {}>(
<Box {...props} ref={ref} overflow={'overlay'}> <Box {...props} ref={ref} overflow={'overlay'}>
{scrollLoadType === 'top' && total > 0 && isLoading && ( {scrollLoadType === 'top' && total > 0 && isLoading && (
<Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}> <Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}>
{t('common:common.is_requesting')} {t('common:is_requesting')}
</Box> </Box>
)} )}
{children} {children}
@ -229,9 +229,9 @@ export function usePagination<DataT, ResT = {}>(
fontSize={'xs'} fontSize={'xs'}
color={'blackAlpha.500'} color={'blackAlpha.500'}
textAlign={'center'} textAlign={'center'}
cursor={loadText === t('common:common.request_more') ? 'pointer' : 'default'} cursor={loadText === t('common:request_more') ? 'pointer' : 'default'}
onClick={() => { onClick={() => {
if (loadText !== t('common:common.request_more')) return; if (loadText !== t('common:request_more')) return;
fetchData(pageNum + 1); fetchData(pageNum + 1);
}} }}
> >

View File

@ -126,7 +126,7 @@ export function useVirtualScrollPagination<
{children} {children}
{noMore && list.length > 0 && ( {noMore && list.length > 0 && (
<Box py={4} textAlign={'center'} color={'myGray.600'} fontSize={'xs'}> <Box py={4} textAlign={'center'} color={'myGray.600'} fontSize={'xs'}>
{t('common:common.No more data')} {t('common:no_more_data')}
</Box> </Box>
)} )}
</Box> </Box>
@ -282,9 +282,9 @@ export function useScrollPagination<
} & BoxProps) => { } & BoxProps) => {
const ref = ScrollContainerRef || ScrollRef; const ref = ScrollContainerRef || ScrollRef;
const loadText = useMemo(() => { const loadText = useMemo(() => {
if (isLoading || isLoadingProp) return t('common:common.is_requesting'); if (isLoading || isLoadingProp) return t('common:is_requesting');
if (noMore) return t('common:common.request_end'); if (noMore) return t('common:request_end');
return t('common:common.request_more'); return t('common:request_more');
}, [isLoading, noMore]); }, [isLoading, noMore]);
const scroll = useScroll(ref); const scroll = useScroll(ref);
@ -317,7 +317,7 @@ export function useScrollPagination<
> >
{scrollLoadType === 'top' && total > 0 && isLoading && ( {scrollLoadType === 'top' && total > 0 && isLoading && (
<Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}> <Box mt={2} fontSize={'xs'} color={'blackAlpha.500'} textAlign={'center'}>
{t('common:common.is_requesting')} {t('common:is_requesting')}
</Box> </Box>
)} )}
{children} {children}
@ -327,9 +327,9 @@ export function useScrollPagination<
fontSize={'xs'} fontSize={'xs'}
color={'blackAlpha.500'} color={'blackAlpha.500'}
textAlign={'center'} textAlign={'center'}
cursor={loadText === t('common:common.request_more') ? 'pointer' : 'default'} cursor={loadText === t('common:request_more') ? 'pointer' : 'default'}
onClick={() => { onClick={() => {
if (loadText !== t('common:common.request_more')) return; if (loadText !== t('common:request_more')) return;
loadData(false); loadData(false);
}} }}
> >

View File

@ -6,7 +6,7 @@
"MCP_tools_url_placeholder": "After filling in the MCP address, click Analysis", "MCP_tools_url_placeholder": "After filling in the MCP address, click Analysis",
"Role_setting": "Permission", "Role_setting": "Permission",
"Run": "Execute", "Run": "Execute",
"Team Tags Set": "Team tags", "team_tags_set": "Team tags",
"Team_Tags": "Team tags", "Team_Tags": "Team tags",
"ai_point_price": "Billing", "ai_point_price": "Billing",
"ai_settings": "AI Configuration", "ai_settings": "AI Configuration",

View File

@ -26,22 +26,19 @@
"Name": "Name", "Name": "Name",
"None": "None", "None": "None",
"Operation": "Operation", "Operation": "Operation",
"Rename": "Rename",
"Required_input": "Required", "Required_input": "Required",
"Resume": "Resume", "Resume": "Resume",
"Running": "Running", "Running": "Running",
"Select_all": "Select all", "Select_all": "Select all",
"Submit": "Submit", "Submit": "Submit",
"UnKnow": "Unknown", "add_new": "add_new",
"Warning": "Warning",
"add_new": "Add New",
"add_new_param": "Add new param", "add_new_param": "Add new param",
"all_quotes": "All quotes", "all_quotes": "All quotes",
"app.templateMarket.templateTags.Image_generation": "Image generation", "templateTags.Image_generation": "Image generation",
"app.templateMarket.templateTags.Office_services": "Office Services", "templateTags.Office_services": "Office Services",
"app.templateMarket.templateTags.Roleplay": "role play", "templateTags.Roleplay": "role play",
"app.templateMarket.templateTags.Web_search": "Search online", "templateTags.Web_search": "Search online",
"app.templateMarket.templateTags.Writing": "Writing", "templateTags.Writing": "Writing",
"back": "Back", "back": "Back",
"bill_already_processed": "Order has been processed", "bill_already_processed": "Order has been processed",
"bill_expired": "Order expired", "bill_expired": "Order expired",
@ -120,165 +117,155 @@
"code_error.user_error.bin_visitor_guest": "You Are Currently a Guest, Unauthorized to Operate", "code_error.user_error.bin_visitor_guest": "You Are Currently a Guest, Unauthorized to Operate",
"code_error.user_error.un_auth_user": "User Not Found", "code_error.user_error.un_auth_user": "User Not Found",
"commercial_function_tip": "Please Upgrade to the Commercial Version to Use This Feature: https://doc.fastgpt.cn/docs/commercial/intro/", "commercial_function_tip": "Please Upgrade to the Commercial Version to Use This Feature: https://doc.fastgpt.cn/docs/commercial/intro/",
"common.Action": "Action", "Action": "Action",
"common.Add": "Add", "Add": "Add",
"common.Add New": "Add New", "Add Success": "Added Successfully",
"common.Add Success": "Added Successfully", "Add_new_input": "Add new input",
"common.Add_new_input": "Add new input", "All": "All",
"common.All": "All", "Cancel": "Cancel",
"common.Cancel": "Cancel", "Choose": "Choose",
"common.Choose": "Choose", "Close": "Close",
"common.Close": "Close", "Code": "Code",
"common.Code": "Code", "Config": "Configuration",
"common.Config": "Configuration", "Confirm": "Confirm",
"common.Confirm": "Confirm", "comfirn_create": "Confirm Creation",
"common.Confirm Create": "Confirm Creation", "comfirm_import": "comfirm_import",
"common.Confirm Import": "Confirm Import", "confirm_move": "Move Here",
"common.Confirm Move": "Move Here", "confirm_update": "confirm_update",
"common.Confirm Update": "Confirm Update", "comfirm_leave_page": "Confirm to Leave This Page?",
"common.Confirm to leave the page": "Confirm to Leave This Page?", "Continue_Adding": "Continue adding",
"common.Continue_Adding": "Continue adding", "Copy": "Copy",
"common.Copy": "Copy", "Copy Successful": "Copied Successfully",
"common.Copy Successful": "Copied Successfully", "create_failed": "Creation Failed",
"common.Create Failed": "Creation Failed", "create_success": "Created Successfully",
"common.Create Success": "Created Successfully", "create_time": "Creation Time",
"common.Create Time": "Creation Time", "Creating": "Creating",
"common.Creating": "Creating", "custom_title": "Custom Title",
"common.Custom Title": "Custom Title", "Delete": "Delete",
"common.Delete": "Delete", "delete_failed": "Deletion Failed",
"common.Delete Failed": "Deletion Failed", "delete_success": "Deleted Successfully",
"common.Delete Success": "Deleted Successfully", "delete_warning": "Deletion Warning",
"common.Delete Warning": "Deletion Warning", "delete_folder": "Delete Folder",
"common.Delete folder": "Delete Folder", "Detail": "Detail",
"common.Detail": "Detail", "Documents": "Documents",
"common.Documents": "Documents", "Done": "Done",
"common.Done": "Done", "Edit": "Edit",
"common.Edit": "Edit", "Error": "Error",
"common.Error": "Error", "Exit": "Exit",
"common.Exit": "Exit", "exit_directly": "exit_directly",
"common.Exit Directly": "Exit Directly", "expired_time": "Expiration Time",
"common.Expired Time": "Expiration Time", "File": "File",
"common.File": "File", "Finish": "Finish",
"common.Finish": "Finish", "FullScreen": "FullScreen",
"common.FullScreen": "FullScreen", "FullScreenLight": "FullScreenLight",
"common.FullScreenLight": "FullScreenLight", "Import": "Import",
"common.Import": "Import", "import_failed": "Import Failed",
"common.Import failed": "Import Failed", "import_success": "Imported Successfully",
"common.Import success": "Imported Successfully", "Input": "Input",
"common.Input": "Input", "folder_description": "Folder Description",
"common.Input folder description": "Folder Description", "input_name": "Enter a Name",
"common.Input name": "Enter a Name", "Intro": "Introduction",
"common.Intro": "Introduction", "last_step": "Previous",
"common.Last Step": "Previous", "last_use_time": "Last Use Time",
"common.Last use time": "Last Use Time", "load_failed": "load_failed",
"common.Load Failed": "Load Failed", "Loading": "Loading...",
"common.Loading": "Loading...", "More": "More",
"common.More": "More", "no_select_data": "No Data Available",
"common.Move": "Move", "next_step": "Next",
"common.MultipleRowSelect.No data": "No Data Available", "no_more_data": "No More Data",
"common.Name": "Name", "not_open": "Not Open",
"common.Next Step": "Next", "OK": "OK",
"common.No more data": "No More Data", "Open": "Open",
"common.Not open": "Not Open", "Other": "Other",
"common.OK": "OK", "Output": "Output",
"common.Open": "Open", "Params": "Parameters",
"common.Other": "Other", "Parse": "Analysis",
"common.Output": "Output", "psw_inconsistency": "Passwords Do Not Match",
"common.Params": "Parameters", "Permission": "Permission",
"common.Parse": "Analysis", "Permission_tip": "Individual permissions are greater than group permissions",
"common.Password inconsistency": "Passwords Do Not Match", "Please Input Name": "Please Enter a Name",
"common.Permission": "Permission", "Preview": "Preview",
"common.Permission_tip": "Individual permissions are greater than group permissions", "read_doc": "Read Document",
"common.Please Input Name": "Please Enter a Name", "Remove": "Remove",
"common.Preview": "Preview", "Rename": "Rename",
"common.Read document": "Read Document", "request_error": "request_error",
"common.Read intro": "Read Introduction", "Reset": "Reset",
"common.Remove": "Remove", "Restart": "Restart",
"common.Rename": "Rename", "Role": "Permission",
"common.Request Error": "Request Error", "root_folder": "Root Folder",
"common.Reset": "Reset", "Run": "Run",
"common.Restart": "Restart", "Save": "Save",
"common.Role": "Permission", "save_failed": "save_failed",
"common.Root folder": "Root Folder", "save_success": "Saved Successfully",
"common.Run": "Run", "Save_and_exit": "Save and Exit",
"common.Save": "Save", "Search": "Search",
"common.Save Failed": "Save Failed", "select_file_failed": "File Selection Failed",
"common.Save Success": "Saved Successfully", "select_template": "Select Template",
"common.Save_and_exit": "Save and Exit", "set_avatar": "Click to set_avatar",
"common.Search": "Search", "Setting": "Setting",
"common.Select File Failed": "File Selection Failed", "Status": "Status",
"common.Select template": "Select Template", "submit_failed": "Submission Failed",
"common.Set Avatar": "Click to Set Avatar", "Success": "Success",
"common.Set Name": "Enter a Name", "sync_success": "Synced Successfully",
"common.Setting": "Setting", "Team": "Team",
"common.Status": "Status", "un_used": "Unused",
"common.Submit failed": "Submission Failed", "UnKnow": "Unknown",
"common.Success": "Success", "unknow_source": "Unknown Source",
"common.Sync success": "Synced Successfully", "Unlimited": "Unlimited",
"common.Team": "Team", "Update": "Update",
"common.Team Tags Set": "Tags", "update_failed": "Update Failed",
"common.Un used": "Unused", "update_success": "Updated Successfully",
"common.UnKnow": "Unknown", "Username": "Username",
"common.UnKnow Source": "Unknown Source", "Waiting": "Waiting",
"common.Unlimited": "Unlimited", "Warning": "Warning",
"common.Update": "Update", "Website": "Website",
"common.Update Failed": "Update Failed", "all_result": "Full Results",
"common.Update Success": "Updated Successfully", "click_select_avatar": "Click to Select Avatar",
"common.Username": "Username", "base_config": "Basic Configuration",
"common.Waiting": "Waiting", "choosable": "Choosable",
"common.Warning": "Warning", "action_confirm": "Confirm",
"common.Website": "Website", "copy_to_clipboard": "Copy to Clipboard",
"common.all_result": "Full Results", "read_course": "Read Course",
"common.avatar.Select Avatar": "Click to Select Avatar", "error.unKnow": "An Unexpected Error Occurred",
"common.avatar.Select Failed": "Avatar Selection Failed", "export_to_json": "Export to JSON",
"common.base_config": "Basic Configuration", "failed": "Failed",
"common.choosable": "Choosable", "click_drag_tip": "Click to Drag",
"common.confirm.Common Tip": "Confirm", "move_success": "Moved Successfully",
"common.copy_to_clipboard": "Copy to Clipboard", "move_to": "Move to",
"common.course.Read Course": "Read Course", "no_child_folder": "No Subdirectories, Place Here",
"common.empty.Common Tip": "No Data Available", "open_folder": "Open Folder",
"common.error.Select avatar failed": "Avatar Selection Failed", "folder.empty": "No More Items in This Directory",
"common.error.unKnow": "An Unexpected Error Occurred", "folder.open_dataset": "Open Dataset",
"common.export_to_json": "Export to JSON", "have_done": "Completed",
"common.failed": "Failed", "input.Repeat Value": "Duplicate Value",
"common.folder.Drag Tip": "Click to Drag", "is_requesting": "Requesting...",
"common.folder.Move Success": "Moved Successfully", "jsonEditor.Parse error": "Possible JSON Error, Please Check Carefully",
"common.folder.Move to": "Move to", "json_config": "JSON Configuration",
"common.folder.No Folder": "No Subdirectories, Place Here", "link.UnValid": "Invalid Link",
"common.folder.Open folder": "Open Folder", "month": "Month",
"common.folder.Root Path": "Root", "name_is_empty": "Name Cannot Be Empty",
"common.folder.empty": "No More Items in This Directory", "no_intro": "No Introduction Available",
"common.folder.open_dataset": "Open Dataset", "not_support": "Not Supported",
"common.have_done": "Completed", "page_center": "Page Center",
"common.input.Repeat Value": "Duplicate Value", "redo_tip": "Redo ctrl shift z",
"common.is_requesting": "Requesting...", "redo_tip_mac": "Redo ⌘ shift z",
"common.jsonEditor.Parse error": "Possible JSON Error, Please Check Carefully", "request_end": "All Loaded",
"common.json_config": "JSON Configuration", "request_more": "Click to Load More",
"common.link.UnValid": "Invalid Link", "speech.error tip": "Speech to Text Failed",
"common.month": "Month", "speech.not support": "Your Browser Does Not Support Speech Input",
"common.name_is_empty": "Name Cannot Be Empty", "submit_success": "Submitted Successfully",
"common.no_intro": "No Introduction Available", "submitted": "Submitted",
"common.not_support": "Not Supported", "support": "Support",
"common.page_center": "Page Center", "system.Help Chatbot": "Help Chatbot",
"common.redo_tip": "Redo ctrl shift z", "system.Use Helper": "Use Helper",
"common.redo_tip_mac": "Redo ⌘ shift z", "ui.textarea.Magnifying": "Magnifying",
"common.request_end": "All Loaded", "undo_tip": "Undo ctrl z",
"common.request_more": "Click to Load More", "undo_tip_mac": "Undo ⌘ z ",
"common.speech.error tip": "Speech to Text Failed", "upload_file": "Upload File",
"common.speech.not support": "Your Browser Does Not Support Speech Input", "zoomin_tip": "Zoom Out ctrl -",
"common.submit_success": "Submitted Successfully", "zoomin_tip_mac": "Zoom Out ⌘ -",
"common.submitted": "Submitted", "zoomout_tip": "Zoom In ctrl +",
"common.support": "Support", "zoomout_tip_mac": "Zoom In ⌘ +",
"common.system.Help Chatbot": "Help Chatbot",
"common.system.Use Helper": "Use Helper",
"common.ui.textarea.Magnifying": "Magnifying",
"common.undo_tip": "Undo ctrl z",
"common.undo_tip_mac": "Undo ⌘ z ",
"common.upload_file": "Upload File",
"common.zoomin_tip": "Zoom Out ctrl -",
"common.zoomin_tip_mac": "Zoom Out ⌘ -",
"common.zoomout_tip": "Zoom In ctrl +",
"common.zoomout_tip_mac": "Zoom In ⌘ +",
"comon.Continue_Adding": "Continue Adding", "comon.Continue_Adding": "Continue Adding",
"compliance.chat": "The content is generated by third-party AI and cannot be guaranteed to be true and accurate. It is for reference only.", "compliance.chat": "The content is generated by third-party AI and cannot be guaranteed to be true and accurate. It is for reference only.",
"compliance.compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.", "compliance.compliance.dataset": "Please ensure that your content strictly complies with relevant laws and regulations and avoid containing any illegal or infringing content. \nPlease be careful when uploading materials that may contain sensitive information.",
@ -506,7 +493,7 @@
"core.chat.response.user_select_result": "User Selection Result", "core.chat.response.user_select_result": "User Selection Result",
"core.chat.retry": "Regenerate", "core.chat.retry": "Regenerate",
"core.chat.tts.Stop Speech": "Stop", "core.chat.tts.Stop Speech": "Stop",
"core.common.tip.leave page": "Content has been modified, confirm to leave the page?", "core.tip.leave page": "Content has been modified, confirm to leave the page?",
"core.dataset.Choose Dataset": "Associate Dataset", "core.dataset.Choose Dataset": "Associate Dataset",
"core.dataset.Collection": "Dataset", "core.dataset.Collection": "Dataset",
"core.dataset.Create dataset": "Create a {{name}}", "core.dataset.Create dataset": "Create a {{name}}",
@ -573,21 +560,15 @@
"core.dataset.externalFile": "External File Library", "core.dataset.externalFile": "External File Library",
"core.dataset.file": "File", "core.dataset.file": "File",
"core.dataset.folder": "Directory", "core.dataset.folder": "Directory",
"core.dataset.import.Auto mode Estimated Price Tips": "Requires calling the file processing model, which consumes a lot of tokens: {{price}} points/1K tokens",
"core.dataset.import.Chunk Range": "Range: {{min}}~{{max}}", "core.dataset.import.Chunk Range": "Range: {{min}}~{{max}}",
"core.dataset.import.Chunk Split Tip": "Segment the text according to certain rules and convert it into a format that can be semantically searched. Suitable for most scenarios. No additional model processing is required, and the cost is low.", "core.dataset.import.Chunk Split Tip": "Segment the text according to certain rules and convert it into a format that can be semantically searched. Suitable for most scenarios. No additional model processing is required, and the cost is low.",
"core.dataset.import.Continue upload": "Continue upload", "core.dataset.import.Continue upload": "Continue upload",
"core.dataset.import.Custom process": "Custom Rules",
"core.dataset.import.Custom process desc": "Customize segmentation and preprocessing rules",
"core.dataset.import.Custom prompt": "Custom Prompt", "core.dataset.import.Custom prompt": "Custom Prompt",
"core.dataset.import.Custom text": "Custom Text", "core.dataset.import.Custom text": "Custom Text",
"core.dataset.import.Custom text desc": "Manually enter a piece of text as a dataset", "core.dataset.import.Custom text desc": "Manually enter a piece of text as a dataset",
"core.dataset.import.Data process params": "Data Processing Parameters", "core.dataset.import.Data process params": "Data Processing Parameters",
"core.dataset.import.Down load csv template": "Click to Download CSV Template", "core.dataset.import.Down load csv template": "Click to Download CSV Template",
"core.dataset.import.Embedding Estimated Price Tips": "Only use the index model, consuming a small amount of AI points: {{price}} points/1K tokens", "core.dataset.import.import_success": "Import Successful, Please Wait for Training",
"core.dataset.import.Ideal chunk length": "Ideal Chunk Length",
"core.dataset.import.Ideal chunk length Tips": "Segment according to ending symbols and combine multiple segments into one chunk. This value determines the estimated size of the chunk.",
"core.dataset.import.Import success": "Import Successful, Please Wait for Training",
"core.dataset.import.Link name": "Web Link", "core.dataset.import.Link name": "Web Link",
"core.dataset.import.Link name placeholder": "Only supports static links. If the data is empty after uploading, the link may not be readable\nEach line one, up to 10 links at a time", "core.dataset.import.Link name placeholder": "Only supports static links. If the data is empty after uploading, the link may not be readable\nEach line one, up to 10 links at a time",
"core.dataset.import.Local file": "Local File", "core.dataset.import.Local file": "Local File",
@ -595,7 +576,6 @@
"core.dataset.import.Preview chunks": "Preview Chunks (limit 15)", "core.dataset.import.Preview chunks": "Preview Chunks (limit 15)",
"core.dataset.import.Preview raw text": "Preview Raw Text (up to 3000 characters)", "core.dataset.import.Preview raw text": "Preview Raw Text (up to 3000 characters)",
"core.dataset.import.Process way": "Processing Method", "core.dataset.import.Process way": "Processing Method",
"core.dataset.import.QA Estimated Price Tips": "Requires calling the file processing model, which consumes a lot of AI points: {{price}} points/1K tokens",
"core.dataset.import.QA Import": "QA Split", "core.dataset.import.QA Import": "QA Split",
"core.dataset.import.QA Import Tip": "According to certain rules, split the text into larger paragraphs and call AI to generate Q&A pairs for the paragraph. It has very high retrieval accuracy but may lose a lot of content details.", "core.dataset.import.QA Import Tip": "According to certain rules, split the text into larger paragraphs and call AI to generate Q&A pairs for the paragraph. It has very high retrieval accuracy but may lose a lot of content details.",
"core.dataset.import.Select file": "Select File", "core.dataset.import.Select file": "Select File",
@ -741,7 +721,7 @@
"core.module.input.placeholder.Classify background": "For example:\n1. AIGC (Artificial Intelligence Generated Content) refers to the use of artificial intelligence technology to automatically or semi-automatically generate digital content, such as text, images, music, videos, etc.\n2. AIGC technology includes but is not limited to natural language processing, computer vision, machine learning, and deep learning. These technologies can create new content or modify existing content to meet specific creative, educational, entertainment, or informational needs.", "core.module.input.placeholder.Classify background": "For example:\n1. AIGC (Artificial Intelligence Generated Content) refers to the use of artificial intelligence technology to automatically or semi-automatically generate digital content, such as text, images, music, videos, etc.\n2. AIGC technology includes but is not limited to natural language processing, computer vision, machine learning, and deep learning. These technologies can create new content or modify existing content to meet specific creative, educational, entertainment, or informational needs.",
"core.module.input_description": "Description", "core.module.input_description": "Description",
"core.module.input_form": "Input form", "core.module.input_form": "Input form",
"core.module.input_name": "Input name", "core.module.input_name": "input_name",
"core.module.input_type": "Input type", "core.module.input_type": "Input type",
"core.module.laf.Select laf function": "Select LAF Function", "core.module.laf.Select laf function": "Select LAF Function",
"core.module.output.description.Ai response content": "Will be triggered after the stream reply is completed", "core.module.output.description.Ai response content": "Will be triggered after the stream reply is completed",

View File

@ -128,8 +128,8 @@
"sync_collection_failed": "Synchronization collection error, please check whether the source file can be accessed normally", "sync_collection_failed": "Synchronization collection error, please check whether the source file can be accessed normally",
"sync_schedule": "Timing synchronization", "sync_schedule": "Timing synchronization",
"sync_schedule_tip": "Only existing collections will be synchronized. \nIncludes linked collections and all collections in the API knowledge base. \nThe system will poll for updates every day, and the specific update time cannot be determined.", "sync_schedule_tip": "Only existing collections will be synchronized. \nIncludes linked collections and all collections in the API knowledge base. \nThe system will poll for updates every day, and the specific update time cannot be determined.",
"tag.Add New": "Add New", "tag.add_new": "add_new",
"tag.Add_new_tag": "Add New Tag", "tag.Add_new_tag": "add_new Tag",
"tag.Edit_tag": "Edit Tag", "tag.Edit_tag": "Edit Tag",
"tag.add": "Create", "tag.add": "Create",
"tag.cancel": "Cancel", "tag.cancel": "Cancel",

View File

@ -14,7 +14,7 @@
"key_alias": "Key alias, for display only", "key_alias": "Key alias, for display only",
"key_tips": "You can use the API key to access specific interfaces (cannot access the application, use the in-app API key for that)", "key_tips": "You can use the API key to access specific interfaces (cannot access the application, use the in-app API key for that)",
"link_name": "Share Link Name", "link_name": "Share Link Name",
"new_feishu_bot": "Add New Feishu Bot", "new_feishu_bot": "add_new Feishu Bot",
"official_account.create_modal_title": "Create WeChat Official Account Integration", "official_account.create_modal_title": "Create WeChat Official Account Integration",
"official_account.desc": "Connect to WeChat Official Account directly via API", "official_account.desc": "Connect to WeChat Official Account directly via API",
"official_account.edit_modal_title": "Edit WeChat Official Account Integration", "official_account.edit_modal_title": "Edit WeChat Official Account Integration",

View File

@ -8,7 +8,7 @@
"Quote_prompt_setting": "Quote prompt", "Quote_prompt_setting": "Quote prompt",
"Variable.Variable type": "Variable type", "Variable.Variable type": "Variable type",
"Variable_name": "Variable name", "Variable_name": "Variable name",
"add_new_input": "Add New Input", "add_new_input": "add_new Input",
"add_new_output": "New output", "add_new_output": "New output",
"append_application_reply_to_history_as_new_context": "Append the application's reply to the history as new context", "append_application_reply_to_history_as_new_context": "Append the application's reply to the history as new context",
"application_call": "Application Call", "application_call": "Application Call",
@ -145,7 +145,7 @@
"reasoning_text": "Thinking text", "reasoning_text": "Thinking text",
"regex": "Regex", "regex": "Regex",
"reply_text": "Reply Text", "reply_text": "Reply Text",
"request_error": "Request Error", "request_error": "request_error",
"response.Code log": "Code Log", "response.Code log": "Code Log",
"response.Custom inputs": "Custom Inputs", "response.Custom inputs": "Custom Inputs",
"response.Custom outputs": "Custom Outputs", "response.Custom outputs": "Custom Outputs",

View File

@ -10,7 +10,7 @@
"MCP_tools_url_placeholder": "填入 MCP 地址后,点击解析", "MCP_tools_url_placeholder": "填入 MCP 地址后,点击解析",
"Role_setting": "权限设置", "Role_setting": "权限设置",
"Run": "运行", "Run": "运行",
"Team Tags Set": "团队标签", "team_tags_set": "团队标签",
"Team_Tags": "团队标签", "Team_Tags": "团队标签",
"ai_point_price": "AI积分计费", "ai_point_price": "AI积分计费",
"ai_settings": "AI 配置", "ai_settings": "AI 配置",

View File

@ -22,26 +22,21 @@
"Folder": "文件夹", "Folder": "文件夹",
"Instructions": "使用说明", "Instructions": "使用说明",
"Login": "登录", "Login": "登录",
"Move": "移动",
"Name": "名称",
"None": "无", "None": "无",
"Operation": "操作", "Operation": "操作",
"Rename": "重命名",
"Required_input": "必填", "Required_input": "必填",
"Resume": "恢复", "Resume": "恢复",
"Running": "运行中", "Running": "运行中",
"Select_all": "全选", "Select_all": "全选",
"Submit": "提交", "Submit": "提交",
"UnKnow": "未知",
"Warning": "提示",
"add_new": "新增", "add_new": "新增",
"add_new_param": "新增参数", "add_new_param": "新增参数",
"all_quotes": "全部引用", "all_quotes": "全部引用",
"app.templateMarket.templateTags.Image_generation": "图片生成", "templateTags.Image_generation": "图片生成",
"app.templateMarket.templateTags.Office_services": "办公服务", "templateTags.Office_services": "办公服务",
"app.templateMarket.templateTags.Roleplay": "角色扮演", "templateTags.Roleplay": "角色扮演",
"app.templateMarket.templateTags.Web_search": "联网搜索", "templateTags.Web_search": "联网搜索",
"app.templateMarket.templateTags.Writing": "文本创作", "templateTags.Writing": "文本创作",
"back": "返回", "back": "返回",
"bill_already_processed": "订单已处理", "bill_already_processed": "订单已处理",
"bill_expired": "订单已过期", "bill_expired": "订单已过期",
@ -120,165 +115,157 @@
"code_error.user_error.bin_visitor_guest": "您当前身份为游客,无权操作", "code_error.user_error.bin_visitor_guest": "您当前身份为游客,无权操作",
"code_error.user_error.un_auth_user": "找不到该用户", "code_error.user_error.un_auth_user": "找不到该用户",
"commercial_function_tip": "请升级商业版后使用该功能https://doc.fastgpt.cn/docs/commercial/intro/", "commercial_function_tip": "请升级商业版后使用该功能https://doc.fastgpt.cn/docs/commercial/intro/",
"common.Action": "操作", "Action": "操作",
"common.Add": "添加", "Add": "添加",
"common.Add New": "新增", "Add Success": "添加成功",
"common.Add Success": "添加成功", "Add_new_input": "新增输入",
"common.Add_new_input": "新增输入", "All": "全部",
"common.All": "全部", "Cancel": "取消",
"common.Cancel": "取消", "Choose": "选择",
"common.Choose": "选择", "Close": "关闭",
"common.Close": "关闭", "Code": "源码",
"common.Code": "源码", "Config": "配置",
"common.Config": "配置", "Confirm": "确认",
"common.Confirm": "确认", "comfirn_create": "确认创建",
"common.Confirm Create": "确认创建", "comfirm_import": "确认导入",
"common.Confirm Import": "确认导入", "confirm_move": "移动到这",
"common.Confirm Move": "移动到这", "confirm_update": "确认更新",
"common.Confirm Update": "确认更新", "comfirm_leave_page": "确认离开该页面?",
"common.Confirm to leave the page": "确认离开该页面?", "Continue_Adding": "继续添加",
"common.Continue_Adding": "继续添加", "Copy": "复制",
"common.Copy": "复制", "Copy Successful": "复制成功",
"common.Copy Successful": "复制成功", "create_failed": "创建异常",
"common.Create Failed": "创建异常", "create_success": "创建成功",
"common.Create Success": "创建成功", "create_time": "创建时间",
"common.Create Time": "创建时间", "Creating": "创建中",
"common.Creating": "创建中", "custom_title": "自定义标题",
"common.Custom Title": "自定义标题", "Delete": "删除",
"common.Delete": "删除", "delete_failed": "删除失败",
"common.Delete Failed": "删除失败", "delete_success": "删除成功",
"common.Delete Success": "删除成功", "delete_warning": "删除警告",
"common.Delete Warning": "删除警告", "delete_folder": "删除文件夹",
"common.Delete folder": "删除文件夹", "Detail": "详情",
"common.Detail": "详情", "Documents": "文档",
"common.Documents": "文档", "Done": "完成",
"common.Done": "完成", "Edit": "编辑",
"common.Edit": "编辑", "Error": "错误",
"common.Error": "错误", "Exit": "退出",
"common.Exit": "退出", "exit_directly": "直接退出",
"common.Exit Directly": "直接退出", "expired_time": "过期时间",
"common.Expired Time": "过期时间", "File": "文件",
"common.File": "文件", "Finish": "完成",
"common.Finish": "完成", "FullScreen": "全屏",
"common.FullScreen": "全屏", "FullScreenLight": "全屏预览",
"common.FullScreenLight": "全屏预览", "Import": "导入",
"common.Import": "导入", "import_failed": "导入失败",
"common.Import failed": "导入失败", "import_success": "导入成功",
"common.Import success": "导入成功", "Input": "输入",
"common.Input": "输入", "folder_description": "文件夹描述",
"common.Input folder description": "文件夹描述", "input_name": "取个名字",
"common.Input name": "取个名字", "Intro": "介绍",
"common.Intro": "介绍", "last_step": "上一步",
"common.Last Step": "上一步", "last_use_time": "最后使用时间",
"common.Last use time": "最后使用时间", "load_failed": "加载失败",
"common.Load Failed": "加载失败", "Loading": "加载中...",
"common.Loading": "加载中...", "More": "更多",
"common.More": "更多", "Move": "移动",
"common.Move": "移动", "no_select_data": "没有可选值",
"common.MultipleRowSelect.No data": "没有可选值", "Name": "名称",
"common.Name": "名称", "next_step": "下一步",
"common.Next Step": "下一步", "no_more_data": "没有更多了~",
"common.No more data": "没有更多了~", "not_open": "未开启",
"common.Not open": "未开启", "OK": "好的",
"common.OK": "好的", "Open": "打开",
"common.Open": "打开", "Other": "其他",
"common.Other": "其他", "Output": "输出",
"common.Output": "输出", "Params": "参数",
"common.Params": "参数", "Parse": "解析",
"common.Parse": "解析", "psw_inconsistency": "两次密码不一致",
"common.Password inconsistency": "两次密码不一致", "Permission": "权限",
"common.Permission": "权限", "Permission_tip": "个人权限大于群组权限",
"common.Permission_tip": "个人权限大于群组权限", "Please Input Name": "请输入名称",
"common.Please Input Name": "请输入名称", "Preview": "预览",
"common.Preview": "预览", "read_doc": "查看文档",
"common.Read document": "查看文档", "Remove": "移除",
"common.Read intro": "查看说明", "Rename": "重命名",
"common.Remove": "移除", "request_error": "请求异常",
"common.Rename": "重命名", "Reset": "恢复默认",
"common.Request Error": "请求异常", "Restart": "重新开始",
"common.Reset": "恢复默认", "Role": "权限",
"common.Restart": "重新开始", "root_folder": "根目录",
"common.Role": "权限", "Run": "运行",
"common.Root folder": "根目录", "Save": "保存",
"common.Run": "运行", "save_failed": "保存异常",
"common.Save": "保存", "save_success": "保存成功",
"common.Save Failed": "保存异常", "Save_and_exit": "保存并退出",
"common.Save Success": "保存成功", "Search": "搜索",
"common.Save_and_exit": "保存并退出", "select_file_failed": "选择文件异常",
"common.Search": "搜索", "select_template": "选择模板",
"common.Select File Failed": "选择文件异常", "set_avatar": "点击设置头像",
"common.Select template": "选择模板", "Setting": "设置",
"common.Set Avatar": "点击设置头像", "Status": "状态",
"common.Set Name": "取个名字", "submit_failed": "提交失败",
"common.Setting": "设置", "Success": "成功",
"common.Status": "状态", "sync_success": "同步成功",
"common.Submit failed": "提交失败", "Team": "团队",
"common.Success": "成功", "un_used": "未使用",
"common.Sync success": "同步成功", "UnKnow": "未知",
"common.Team": "团队", "unknow_source": "未知来源",
"common.Team Tags Set": "标签", "Unlimited": "无限制",
"common.Un used": "未使用", "Update": "更新",
"common.UnKnow": "未知", "update_failed": "更新异常",
"common.UnKnow Source": "未知来源", "update_success": "更新成功",
"common.Unlimited": "无限制", "Username": "用户名",
"common.Update": "更新", "Waiting": "等待中",
"common.Update Failed": "更新异常", "Warning": "警告",
"common.Update Success": "更新成功", "Website": "网站",
"common.Username": "用户名", "all_result": "完整结果",
"common.Waiting": "等待中", "click_select_avatar": "点击选择头像",
"common.Warning": "警告", "base_config": "基础配置",
"common.Website": "网站", "choosable": "可选",
"common.all_result": "完整结果", "action_confirm": "操作确认",
"common.avatar.Select Avatar": "点击选择头像", "copy_to_clipboard": "复制到剪贴板",
"common.avatar.Select Failed": "选择头像异常", "read_course": "查看教程",
"common.base_config": "基础配置", "error.unKnow": "出现了点意外~",
"common.choosable": "可选", "export_to_json": "导出为 JSON",
"common.confirm.Common Tip": "操作确认", "failed": "失败",
"common.copy_to_clipboard": "复制到剪贴板", "click_drag_tip": "点我可拖动",
"common.course.Read Course": "查看教程", "move_success": "移动成功",
"common.empty.Common Tip": "没有什么数据噢~", "move_to": "移动到",
"common.error.Select avatar failed": "头像选择异常", "no_child_folder": "没有子目录了,就放这里吧",
"common.error.unKnow": "出现了点意外~", "open_folder": "打开文件夹",
"common.export_to_json": "导出为 JSON", "folder.empty": "这个目录已经没东西可选了~",
"common.failed": "失败", "folder.open_dataset": "打开知识库",
"common.folder.Drag Tip": "点我可拖动", "have_done": "已完成",
"common.folder.Move Success": "移动成功", "input.Repeat Value": "有重复的值",
"common.folder.Move to": "移动到", "is_requesting": "请求中……",
"common.folder.No Folder": "没有子目录了,就放这里吧", "jsonEditor.Parse error": "JSON 可能有误,请仔细检查",
"common.folder.Open folder": "打开文件夹", "json_config": "JSON 配置",
"common.folder.Root Path": "根目录", "link.UnValid": "无效的链接",
"common.folder.empty": "这个目录已经没东西可选了~", "month": "月",
"common.folder.open_dataset": "打开知识库", "name_is_empty": "名称不能为空",
"common.have_done": "已完成", "no_intro": "暂无介绍",
"common.input.Repeat Value": "有重复的值", "not_support": "不支持",
"common.is_requesting": "请求中……", "page_center": "页面居中",
"common.jsonEditor.Parse error": "JSON 可能有误,请仔细检查", "redo_tip": "恢复 ctrl shift z",
"common.json_config": "JSON 配置", "redo_tip_mac": "恢复 ⌘ shift z",
"common.link.UnValid": "无效的链接", "request_end": "已加载全部",
"common.month": "月", "request_more": "点击加载更多",
"common.name_is_empty": "名称不能为空", "speech.error tip": "语音转文字失败",
"common.no_intro": "暂无介绍", "speech.not support": "您的浏览器不支持语音输入",
"common.not_support": "不支持", "submit_success": "提交成功",
"common.page_center": "页面居中", "submitted": "已提交",
"common.redo_tip": "恢复 ctrl shift z", "support": "支持",
"common.redo_tip_mac": "恢复 ⌘ shift z", "system.Help Chatbot": "机器人助手",
"common.request_end": "已加载全部", "system.Use Helper": "使用帮助",
"common.request_more": "点击加载更多", "ui.textarea.Magnifying": "放大",
"common.speech.error tip": "语音转文字失败", "undo_tip": "撤销 ctrl z",
"common.speech.not support": "您的浏览器不支持语音输入", "undo_tip_mac": "撤销 ⌘ z ",
"common.submit_success": "提交成功", "upload_file": "上传文件",
"common.submitted": "已提交", "zoomin_tip": "缩小 ctrl -",
"common.support": "支持", "zoomin_tip_mac": "缩小 ⌘ -",
"common.system.Help Chatbot": "机器人助手", "zoomout_tip": "放大 ctrl +",
"common.system.Use Helper": "使用帮助", "zoomout_tip_mac": "放大 ⌘ +",
"common.ui.textarea.Magnifying": "放大",
"common.undo_tip": "撤销 ctrl z",
"common.undo_tip_mac": "撤销 ⌘ z ",
"common.upload_file": "上传文件",
"common.zoomin_tip": "缩小 ctrl -",
"common.zoomin_tip_mac": "缩小 ⌘ -",
"common.zoomout_tip": "放大 ctrl +",
"common.zoomout_tip_mac": "放大 ⌘ +",
"comon.Continue_Adding": "继续添加", "comon.Continue_Adding": "继续添加",
"compliance.chat": "内容由第三方 AI 生成,无法确保真实准确,仅供参考", "compliance.chat": "内容由第三方 AI 生成,无法确保真实准确,仅供参考",
"compliance.dataset": "请确保您的内容严格遵守相关法律法规,避免包含任何违法或侵权的内容。请谨慎上传可能涉及敏感信息的资料。", "compliance.dataset": "请确保您的内容严格遵守相关法律法规,避免包含任何违法或侵权的内容。请谨慎上传可能涉及敏感信息的资料。",
@ -505,7 +492,7 @@
"core.chat.response.user_select_result": "用户选择结果", "core.chat.response.user_select_result": "用户选择结果",
"core.chat.retry": "重新生成", "core.chat.retry": "重新生成",
"core.chat.tts.Stop Speech": "停止", "core.chat.tts.Stop Speech": "停止",
"core.common.tip.leave page": "内容已修改,确认离开页面吗?", "core.tip.leave page": "内容已修改,确认离开页面吗?",
"core.dataset.Choose Dataset": "关联知识库", "core.dataset.Choose Dataset": "关联知识库",
"core.dataset.Collection": "数据集", "core.dataset.Collection": "数据集",
"core.dataset.Create dataset": "创建一个{{name}}", "core.dataset.Create dataset": "创建一个{{name}}",
@ -573,21 +560,15 @@
"core.dataset.externalFile": "外部文件库", "core.dataset.externalFile": "外部文件库",
"core.dataset.file": "文件", "core.dataset.file": "文件",
"core.dataset.folder": "目录", "core.dataset.folder": "目录",
"core.dataset.import.Auto mode Estimated Price Tips": "需调用文本理解模型需要消耗较多AI 积分:{{price}} 积分/1K tokens",
"core.dataset.import.Chunk Range": "范围:{{min}}~{{max}}", "core.dataset.import.Chunk Range": "范围:{{min}}~{{max}}",
"core.dataset.import.Chunk Split Tip": "将文本按一定的规则进行分段处理后,转成可进行语义搜索的格式,适合绝大多数场景。不需要调用模型额外处理,成本低。", "core.dataset.import.Chunk Split Tip": "将文本按一定的规则进行分段处理后,转成可进行语义搜索的格式,适合绝大多数场景。不需要调用模型额外处理,成本低。",
"core.dataset.import.Continue upload": "继续上传", "core.dataset.import.Continue upload": "继续上传",
"core.dataset.import.Custom process": "自定义规则",
"core.dataset.import.Custom process desc": "自定义设置数据处理规则",
"core.dataset.import.Custom prompt": "自定义提示词", "core.dataset.import.Custom prompt": "自定义提示词",
"core.dataset.import.Custom text": "自定义文本", "core.dataset.import.Custom text": "自定义文本",
"core.dataset.import.Custom text desc": "手动输入一段文本作为数据集", "core.dataset.import.Custom text desc": "手动输入一段文本作为数据集",
"core.dataset.import.Data process params": "数据处理参数", "core.dataset.import.Data process params": "数据处理参数",
"core.dataset.import.Down load csv template": "点击下载 CSV 模板", "core.dataset.import.Down load csv template": "点击下载 CSV 模板",
"core.dataset.import.Embedding Estimated Price Tips": "仅使用索引模型,消耗少量 AI 积分:{{price}} 积分/1K tokens", "core.dataset.import.import_success": "导入成功,请等待训练",
"core.dataset.import.Ideal chunk length": "理想分块长度",
"core.dataset.import.Ideal chunk length Tips": "按结束符号进行分段,并将多个分段组成一个分块,该值决定了分块的预估大小。",
"core.dataset.import.Import success": "导入成功,请等待训练",
"core.dataset.import.Link name": "网络链接", "core.dataset.import.Link name": "网络链接",
"core.dataset.import.Link name placeholder": "仅支持静态链接,如果上传后数据为空,可能该链接无法被读取\n每行一个每次最多 10 个链接", "core.dataset.import.Link name placeholder": "仅支持静态链接,如果上传后数据为空,可能该链接无法被读取\n每行一个每次最多 10 个链接",
"core.dataset.import.Local file": "本地文件", "core.dataset.import.Local file": "本地文件",
@ -595,7 +576,6 @@
"core.dataset.import.Preview chunks": "预览分段(最多 15 段)", "core.dataset.import.Preview chunks": "预览分段(最多 15 段)",
"core.dataset.import.Preview raw text": "预览源文本(最多 3000 字)", "core.dataset.import.Preview raw text": "预览源文本(最多 3000 字)",
"core.dataset.import.Process way": "处理方式", "core.dataset.import.Process way": "处理方式",
"core.dataset.import.QA Estimated Price Tips": "需调用文本理解模型,需要消耗较多 AI 积分:{{price}} 积分/1K tokens",
"core.dataset.import.QA Import": "QA 拆分", "core.dataset.import.QA Import": "QA 拆分",
"core.dataset.import.QA Import Tip": "根据一定规则,将文本拆成一段较大的段落,调用 AI 为该段落生成问答对。有非常高的检索精度,但是会丢失很多内容细节。", "core.dataset.import.QA Import Tip": "根据一定规则,将文本拆成一段较大的段落,调用 AI 为该段落生成问答对。有非常高的检索精度,但是会丢失很多内容细节。",
"core.dataset.import.Select file": "选择文件", "core.dataset.import.Select file": "选择文件",

View File

@ -129,7 +129,7 @@
"sync_collection_failed": "同步集合错误,请检查是否能正常访问源文件", "sync_collection_failed": "同步集合错误,请检查是否能正常访问源文件",
"sync_schedule": "定时同步", "sync_schedule": "定时同步",
"sync_schedule_tip": "仅会同步已存在的集合。包括链接集合以及 API 知识库里所有集合。系统会每天进行轮询更新,无法确定具体的更新时间。", "sync_schedule_tip": "仅会同步已存在的集合。包括链接集合以及 API 知识库里所有集合。系统会每天进行轮询更新,无法确定具体的更新时间。",
"tag.Add New": "新建", "tag.add_new": "新建",
"tag.Add_new_tag": "新建标签", "tag.Add_new_tag": "新建标签",
"tag.Edit_tag": "编辑标签", "tag.Edit_tag": "编辑标签",
"tag.add": "创建", "tag.add": "创建",

View File

@ -6,7 +6,7 @@
"MCP_tools_url_placeholder": "填入 MCP 地址後,點擊解析", "MCP_tools_url_placeholder": "填入 MCP 地址後,點擊解析",
"Role_setting": "權限設定", "Role_setting": "權限設定",
"Run": "執行", "Run": "執行",
"Team Tags Set": "團隊標籤", "team_tags_set": "團隊標籤",
"Team_Tags": "團隊標籤", "Team_Tags": "團隊標籤",
"ai_point_price": "AI 積分計費", "ai_point_price": "AI 積分計費",
"ai_settings": "AI 設定", "ai_settings": "AI 設定",

View File

@ -22,26 +22,20 @@
"Folder": "資料夾", "Folder": "資料夾",
"Instructions": "使用說明", "Instructions": "使用說明",
"Login": "登入", "Login": "登入",
"Move": "移動",
"Name": "名稱",
"None": "無", "None": "無",
"Operation": "操作", "Operation": "操作",
"Rename": "重新命名",
"Required_input": "必填", "Required_input": "必填",
"Resume": "繼續", "Resume": "繼續",
"Running": "執行中", "Running": "執行中",
"Select_all": "全選", "Select_all": "全選",
"Submit": "送出", "Submit": "送出",
"UnKnow": "未知",
"Warning": "警告",
"add_new": "新增",
"add_new_param": "新增參數", "add_new_param": "新增參數",
"all_quotes": "全部引用", "all_quotes": "全部引用",
"app.templateMarket.templateTags.Image_generation": "圖片生成", "templateTags.Image_generation": "圖片生成",
"app.templateMarket.templateTags.Office_services": "辦公服務", "templateTags.Office_services": "辦公服務",
"app.templateMarket.templateTags.Roleplay": "角色扮演", "templateTags.Roleplay": "角色扮演",
"app.templateMarket.templateTags.Web_search": "聯網搜索", "templateTags.Web_search": "聯網搜索",
"app.templateMarket.templateTags.Writing": "文字創作", "templateTags.Writing": "文字創作",
"back": "返回", "back": "返回",
"bill_already_processed": "訂單已處理", "bill_already_processed": "訂單已處理",
"bill_expired": "訂單已過期", "bill_expired": "訂單已過期",
@ -119,165 +113,158 @@
"code_error.user_error.bin_visitor_guest": "您目前身份為訪客,無權操作", "code_error.user_error.bin_visitor_guest": "您目前身份為訪客,無權操作",
"code_error.user_error.un_auth_user": "找不到此使用者", "code_error.user_error.un_auth_user": "找不到此使用者",
"commercial_function_tip": "請升級為商業版後使用此功能https://doc.fastgpt.cn/docs/commercial/intro/", "commercial_function_tip": "請升級為商業版後使用此功能https://doc.fastgpt.cn/docs/commercial/intro/",
"common.Action": "操作", "Action": "操作",
"common.Add": "新增", "Add": "新增",
"common.Add New": "新增", "add_new": "新增",
"common.Add Success": "新增成功", "Add Success": "新增成功",
"common.Add_new_input": "新增輸入", "Add_new_input": "新增輸入",
"common.All": "全部", "All": "全部",
"common.Cancel": "取消", "Cancel": "取消",
"common.Choose": "選擇", "Choose": "選擇",
"common.Close": "關閉", "Close": "關閉",
"common.Code": "原始碼", "Code": "原始碼",
"common.Config": "設定", "Config": "設定",
"common.Confirm": "確認", "Confirm": "確認",
"common.Confirm Create": "確認建立", "comfirn_create": "確認建立",
"common.Confirm Import": "確認匯入", "comfirm_import": "確認匯入",
"common.Confirm Move": "移動至此", "confirm_move": "移動至此",
"common.Confirm Update": "確認更新", "confirm_update": "確認更新",
"common.Confirm to leave the page": "確認離開此頁面?", "comfirm_leave_page": "確認離開此頁面?",
"common.Continue_Adding": "繼續新增", "Continue_Adding": "繼續新增",
"common.Copy": "複製", "Copy": "複製",
"common.Copy Successful": "複製成功", "Copy Successful": "複製成功",
"common.Create Failed": "建立失敗", "create_failed": "建立失敗",
"common.Create Success": "建立成功", "create_success": "建立成功",
"common.Create Time": "建立時間", "create_time": "建立時間",
"common.Creating": "建立中", "Creating": "建立中",
"common.Custom Title": "自訂標題", "custom_title": "自訂標題",
"common.Delete": "刪除", "Delete": "刪除",
"common.Delete Failed": "刪除失敗", "delete_failed": "刪除失敗",
"common.Delete Success": "刪除成功", "delete_success": "刪除成功",
"common.Delete Warning": "刪除警告", "delete_warning": "刪除警告",
"common.Delete folder": "刪除資料夾", "delete_folder": "刪除資料夾",
"common.Detail": "詳細資料", "Detail": "詳細資料",
"common.Documents": "文件", "Documents": "文件",
"common.Done": "完成", "Done": "完成",
"common.Edit": "編輯", "Edit": "編輯",
"common.Error": "錯誤", "Error": "錯誤",
"common.Exit": "離開", "Exit": "離開",
"common.Exit Directly": "直接離開", "exit_directly": "直接離開",
"common.Expired Time": "到期時間", "expired_time": "到期時間",
"common.File": "檔案", "File": "檔案",
"common.Finish": "完成", "Finish": "完成",
"common.FullScreen": "全屏", "FullScreen": "全屏",
"common.FullScreenLight": "全屏預覽", "FullScreenLight": "全屏預覽",
"common.Import": "匯入", "Import": "匯入",
"common.Import failed": "匯入失敗", "import_failed": "匯入失敗",
"common.Import success": "匯入成功", "import_success": "匯入成功",
"common.Input": "輸入", "Input": "輸入",
"common.Input folder description": "資料夾描述", "folder_description": "資料夾描述",
"common.Input name": "輸入名稱", "input_name": "輸入名稱",
"common.Intro": "介紹", "Intro": "介紹",
"common.Last Step": "上一步", "last_step": "上一步",
"common.Last use time": "最後使用時間", "last_use_time": "最後使用時間",
"common.Load Failed": "載入失敗", "load_failed": "載入失敗",
"common.Loading": "載入中...", "Loading": "載入中...",
"common.More": "更多", "More": "更多",
"common.Move": "移動", "Move": "移動",
"common.MultipleRowSelect.No data": "沒有可選擇的資料", "no_select_data": "沒有可選擇的資料",
"common.Name": "名稱", "Name": "名稱",
"common.Next Step": "下一步", "next_step": "下一步",
"common.No more data": "沒有更多資料了", "no_more_data": "沒有更多資料了",
"common.Not open": "未開啟", "not_open": "未開啟",
"common.OK": "確定", "OK": "確定",
"common.Open": "開啟", "Open": "開啟",
"common.Other": "其他", "Other": "其他",
"common.Output": "輸出", "Output": "輸出",
"common.Params": "參數", "Params": "參數",
"common.Parse": "解析", "Parse": "解析",
"common.Password inconsistency": "兩次密碼不一致", "psw_inconsistency": "兩次密碼不一致",
"common.Permission": "權限", "Permission": "權限",
"common.Permission_tip": "個人權限大於群組權限", "Permission_tip": "個人權限大於群組權限",
"common.Please Input Name": "請輸入名稱", "Please Input Name": "請輸入名稱",
"common.Preview": "預覽", "Preview": "預覽",
"common.Read document": "閱讀文件", "read_doc": "閱讀文件",
"common.Read intro": "閱讀說明", "Remove": "移除",
"common.Remove": "移除", "Rename": "重新命名",
"common.Rename": "重新命名", "request_error": "請求錯誤",
"common.Request Error": "請求錯誤", "Reset": "恢復預設",
"common.Reset": "恢復預設", "Restart": "重新開始",
"common.Restart": "重新開始", "Role": "權限",
"common.Role": "權限", "root_folder": "根目錄",
"common.Root folder": "根目錄", "Run": "執行",
"common.Run": "執行", "Save": "儲存",
"common.Save": "儲存", "save_failed": "儲存失敗",
"common.Save Failed": "儲存失敗", "save_success": "儲存成功",
"common.Save Success": "儲存成功", "Save_and_exit": "儲存並離開",
"common.Save_and_exit": "儲存並離開", "Search": "搜尋",
"common.Search": "搜尋", "select_file_failed": "選擇檔案失敗",
"common.Select File Failed": "選擇檔案失敗", "select_template": "選擇範本",
"common.Select template": "選擇範本", "set_avatar": "點選設定頭像",
"common.Set Avatar": "點選設定頭像", "Setting": "設定",
"common.Set Name": "輸入名稱", "Status": "狀態",
"common.Setting": "設定", "submit_failed": "送出失敗",
"common.Status": "狀態", "Success": "成功",
"common.Submit failed": "送出失敗", "sync_success": "同步成功",
"common.Success": "成功", "Team": "團隊",
"common.Sync success": "同步成功", "un_used": "未使用",
"common.Team": "團隊", "UnKnow": "未知",
"common.Team Tags Set": "標籤", "unknow_source": "未知來源",
"common.Un used": "未使用", "Unlimited": "無限制",
"common.UnKnow": "未知", "Update": "更新",
"common.UnKnow Source": "未知來源", "update_failed": "更新失敗",
"common.Unlimited": "無限制", "update_success": "更新成功",
"common.Update": "更新", "Username": "使用者名稱",
"common.Update Failed": "更新失敗", "Waiting": "等待中",
"common.Update Success": "更新成功", "Warning": "警告",
"common.Username": "使用者名稱", "Website": "網站",
"common.Waiting": "等待中", "all_result": "完整結果",
"common.Warning": "警告", "click_select_avatar": "點選選擇頭像",
"common.Website": "網站", "base_config": "基本設定",
"common.all_result": "完整結果", "choosable": "可選擇",
"common.avatar.Select Avatar": "點選選擇頭像", "action_confirm": "確認",
"common.avatar.Select Failed": "選擇頭像失敗", "copy_to_clipboard": "複製到剪貼簿",
"common.base_config": "基本設定", "read_course": "閱讀教學",
"common.choosable": "可選擇", "error.unKnow": "發生未預期的錯誤",
"common.confirm.Common Tip": "確認", "export_to_json": "匯出為 JSON",
"common.copy_to_clipboard": "複製到剪貼簿", "failed": "失敗",
"common.course.Read Course": "閱讀教學", "click_drag_tip": "點選可拖曳",
"common.empty.Common Tip": "沒有資料", "move_success": "移動成功",
"common.error.Select avatar failed": "選擇頭像失敗", "move_to": "移動至",
"common.error.unKnow": "發生未預期的錯誤", "no_child_folder": "無子目錄,放置在此",
"common.export_to_json": "匯出為 JSON", "open_folder": "開啟資料夾",
"common.failed": "失敗", "folder.empty": "此目錄中沒有更多項目了",
"common.folder.Drag Tip": "點選可拖曳", "folder.open_dataset": "開啟知識庫",
"common.folder.Move Success": "移動成功", "have_done": "已完成",
"common.folder.Move to": "移動至", "input.Repeat Value": "重複的值",
"common.folder.No Folder": "無子目錄,放置在此", "is_requesting": "請求中...",
"common.folder.Open folder": "開啟資料夾", "jsonEditor.Parse error": "可能有 JSON 錯誤,請仔細檢查",
"common.folder.Root Path": "根目錄", "json_config": "JSON 設定",
"common.folder.empty": "此目錄中沒有更多項目了", "link.UnValid": "無效的連結",
"common.folder.open_dataset": "開啟知識庫", "month": "月",
"common.have_done": "已完成", "name_is_empty": "名稱不能為空",
"common.input.Repeat Value": "重複的值", "no_intro": "暫無介紹",
"common.is_requesting": "請求中...", "not_support": "不支援",
"common.jsonEditor.Parse error": "可能有 JSON 錯誤,請仔細檢查", "page_center": "頁面置中",
"common.json_config": "JSON 設定", "redo_tip": "重做 ctrl shift z",
"common.link.UnValid": "無效的連結", "redo_tip_mac": "重做 ⌘ shift z",
"common.month": "月", "request_end": "已載入全部",
"common.name_is_empty": "名稱不能為空", "request_more": "點選載入更多",
"common.no_intro": "暫無介紹", "speech.error tip": "語音轉文字失敗",
"common.not_support": "不支援", "speech.not support": "您的瀏覽器不支援語音輸入",
"common.page_center": "頁面置中", "submit_success": "送出成功",
"common.redo_tip": "重做 ctrl shift z", "submitted": "已送出",
"common.redo_tip_mac": "重做 ⌘ shift z", "support": "支援",
"common.request_end": "已載入全部", "system.Help Chatbot": "機器人助手",
"common.request_more": "點選載入更多", "system.Use Helper": "使用說明",
"common.speech.error tip": "語音轉文字失敗", "ui.textarea.Magnifying": "放大",
"common.speech.not support": "您的瀏覽器不支援語音輸入", "undo_tip": "復原 ctrl z",
"common.submit_success": "送出成功", "undo_tip_mac": "復原 ⌘ z ",
"common.submitted": "已送出", "upload_file": "上傳檔案",
"common.support": "支援", "zoomin_tip": "縮小 ctrl -",
"common.system.Help Chatbot": "機器人助手", "zoomin_tip_mac": "縮小 ⌘ -",
"common.system.Use Helper": "使用說明", "zoomout_tip": "放大 ctrl +",
"common.ui.textarea.Magnifying": "放大", "zoomout_tip_mac": "放大 ⌘ +",
"common.undo_tip": "復原 ctrl z",
"common.undo_tip_mac": "復原 ⌘ z ",
"common.upload_file": "上傳檔案",
"common.zoomin_tip": "縮小 ctrl -",
"common.zoomin_tip_mac": "縮小 ⌘ -",
"common.zoomout_tip": "放大 ctrl +",
"common.zoomout_tip_mac": "放大 ⌘ +",
"comon.Continue_Adding": "繼續新增", "comon.Continue_Adding": "繼續新增",
"compliance.chat": "內容由第三方 AI 產生,無法保證其真實性與準確性,僅供參考。", "compliance.chat": "內容由第三方 AI 產生,無法保證其真實性與準確性,僅供參考。",
"compliance.compliance.dataset": "請確保您的內容嚴格遵守相關法律法規,避免包含任何違法或侵權的內容。\n在上傳可能涉及敏感資訊的資料時請務必謹慎。", "compliance.compliance.dataset": "請確保您的內容嚴格遵守相關法律法規,避免包含任何違法或侵權的內容。\n在上傳可能涉及敏感資訊的資料時請務必謹慎。",
@ -505,7 +492,7 @@
"core.chat.response.user_select_result": "使用者選擇結果", "core.chat.response.user_select_result": "使用者選擇結果",
"core.chat.retry": "重新產生", "core.chat.retry": "重新產生",
"core.chat.tts.Stop Speech": "停止", "core.chat.tts.Stop Speech": "停止",
"core.common.tip.leave page": "內容已修改,確認離開頁面嗎?", "core.tip.leave page": "內容已修改,確認離開頁面嗎?",
"core.dataset.Choose Dataset": "關聯知識庫", "core.dataset.Choose Dataset": "關聯知識庫",
"core.dataset.Collection": "資料集", "core.dataset.Collection": "資料集",
"core.dataset.Create dataset": "建立一個{{name}}", "core.dataset.Create dataset": "建立一個{{name}}",
@ -572,21 +559,15 @@
"core.dataset.externalFile": "外部檔案庫", "core.dataset.externalFile": "外部檔案庫",
"core.dataset.file": "檔案", "core.dataset.file": "檔案",
"core.dataset.folder": "目錄", "core.dataset.folder": "目錄",
"core.dataset.import.Auto mode Estimated Price Tips": "需要呼叫檔案處理模型,將消耗較多 AI 點數:{{price}} 點數/1K tokens",
"core.dataset.import.Chunk Range": "範圍:{{min}}~{{max}}", "core.dataset.import.Chunk Range": "範圍:{{min}}~{{max}}",
"core.dataset.import.Chunk Split Tip": "將文字依照特定規則進行分段處理後,轉換成可進行語意搜尋的格式,適合大多數場景。不需要呼叫模型額外處理,成本較低。", "core.dataset.import.Chunk Split Tip": "將文字依照特定規則進行分段處理後,轉換成可進行語意搜尋的格式,適合大多數場景。不需要呼叫模型額外處理,成本較低。",
"core.dataset.import.Continue upload": "繼續上傳", "core.dataset.import.Continue upload": "繼續上傳",
"core.dataset.import.Custom process": "自訂規則",
"core.dataset.import.Custom process desc": "自訂設定資料處理規則",
"core.dataset.import.Custom prompt": "自訂提示詞", "core.dataset.import.Custom prompt": "自訂提示詞",
"core.dataset.import.Custom text": "自訂文字", "core.dataset.import.Custom text": "自訂文字",
"core.dataset.import.Custom text desc": "手動輸入一段文字作為資料集", "core.dataset.import.Custom text desc": "手動輸入一段文字作為資料集",
"core.dataset.import.Data process params": "資料處理參數", "core.dataset.import.Data process params": "資料處理參數",
"core.dataset.import.Down load csv template": "點選下載 CSV 範本", "core.dataset.import.Down load csv template": "點選下載 CSV 範本",
"core.dataset.import.Embedding Estimated Price Tips": "僅使用索引模型,消耗少量 AI 點數:{{price}} 點數/1K tokens", "core.dataset.import.import_success": "匯入成功,請等待訓練",
"core.dataset.import.Ideal chunk length": "理想分割長度",
"core.dataset.import.Ideal chunk length Tips": "依照結束符號進行分段,並將多個分段組合成一個區塊。此值決定了區塊的預估大小。",
"core.dataset.import.Import success": "匯入成功,請等待訓練",
"core.dataset.import.Link name": "網路連結", "core.dataset.import.Link name": "網路連結",
"core.dataset.import.Link name placeholder": "僅支援靜態連結。如果上傳後資料為空,可能該連結無法被讀取\n每行一個每次最多 10 個連結", "core.dataset.import.Link name placeholder": "僅支援靜態連結。如果上傳後資料為空,可能該連結無法被讀取\n每行一個每次最多 10 個連結",
"core.dataset.import.Local file": "本機檔案", "core.dataset.import.Local file": "本機檔案",
@ -594,7 +575,6 @@
"core.dataset.import.Preview chunks": "預覽分段(最多 15 段)", "core.dataset.import.Preview chunks": "預覽分段(最多 15 段)",
"core.dataset.import.Preview raw text": "預覽原始文字(最多 3000 字)", "core.dataset.import.Preview raw text": "預覽原始文字(最多 3000 字)",
"core.dataset.import.Process way": "處理方式", "core.dataset.import.Process way": "處理方式",
"core.dataset.import.QA Estimated Price Tips": "需要呼叫檔案處理模型,將消耗較多 AI 點數:{{price}} 點數/1K tokens",
"core.dataset.import.QA Import": "問答拆分", "core.dataset.import.QA Import": "問答拆分",
"core.dataset.import.QA Import Tip": "依照特定規則,將文字拆分為較大的段落,呼叫 AI 為該段落產生問答。具有非常高的檢索準確度,但可能會遺失許多內容細節。", "core.dataset.import.QA Import Tip": "依照特定規則,將文字拆分為較大的段落,呼叫 AI 為該段落產生問答。具有非常高的檢索準確度,但可能會遺失許多內容細節。",
"core.dataset.import.Select file": "選擇檔案", "core.dataset.import.Select file": "選擇檔案",

View File

@ -128,7 +128,7 @@
"sync_collection_failed": "同步集合錯誤,請檢查是否能正常存取來原始檔", "sync_collection_failed": "同步集合錯誤,請檢查是否能正常存取來原始檔",
"sync_schedule": "定時同步", "sync_schedule": "定時同步",
"sync_schedule_tip": "只會同步已存在的集合。\n包括連結集合以及 API 知識庫裡所有集合。\n系統會每天進行輪詢更新無法確定特定的更新時間。", "sync_schedule_tip": "只會同步已存在的集合。\n包括連結集合以及 API 知識庫裡所有集合。\n系統會每天進行輪詢更新無法確定特定的更新時間。",
"tag.Add New": "新增", "tag.add_new": "新增",
"tag.Add_new_tag": "新增標籤", "tag.Add_new_tag": "新增標籤",
"tag.Edit_tag": "編輯標籤", "tag.Edit_tag": "編輯標籤",
"tag.add": "建立", "tag.add": "建立",

61
pnpm-lock.yaml generated
View File

@ -34,7 +34,7 @@ importers:
version: 10.1.4(socks@2.8.4) version: 10.1.4(socks@2.8.4)
next-i18next: next-i18next:
specifier: 15.4.2 specifier: 15.4.2
version: 15.4.2(i18next@23.16.8)(next@14.2.26(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 15.4.2(i18next@23.16.8)(next@14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
prettier: prettier:
specifier: 3.2.4 specifier: 3.2.4
version: 3.2.4 version: 3.2.4
@ -331,7 +331,7 @@ importers:
version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/next-js': '@chakra-ui/next-js':
specifier: 2.4.2 specifier: 2.4.2
version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.26(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1)
'@chakra-ui/react': '@chakra-ui/react':
specifier: 2.10.7 specifier: 2.10.7
version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -394,7 +394,7 @@ importers:
version: 4.17.21 version: 4.17.21
next-i18next: next-i18next:
specifier: 15.4.2 specifier: 15.4.2
version: 15.4.2(i18next@23.16.8)(next@14.2.26(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 15.4.2(i18next@23.16.8)(next@14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
papaparse: papaparse:
specifier: ^5.4.1 specifier: ^5.4.1
version: 5.4.1 version: 5.4.1
@ -455,7 +455,7 @@ importers:
version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 2.1.1(@chakra-ui/system@2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1))(react@18.3.1)
'@chakra-ui/next-js': '@chakra-ui/next-js':
specifier: 2.4.2 specifier: 2.4.2
version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.26(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1) version: 2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1)
'@chakra-ui/react': '@chakra-ui/react':
specifier: 2.10.7 specifier: 2.10.7
version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -519,9 +519,6 @@ importers:
echarts-gl: echarts-gl:
specifier: 2.0.9 specifier: 2.0.9
version: 2.0.9(echarts@5.4.1) version: 2.0.9(echarts@5.4.1)
formidable:
specifier: ^2.1.1
version: 2.1.2
framer-motion: framer-motion:
specifier: 9.1.7 specifier: 9.1.7
version: 9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1) version: 9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
@ -560,7 +557,7 @@ importers:
version: 14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1) version: 14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1)
next-i18next: next-i18next:
specifier: 15.4.2 specifier: 15.4.2
version: 15.4.2(i18next@23.16.8)(next@14.2.26(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1) version: 15.4.2(i18next@23.16.8)(next@14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1)
nprogress: nprogress:
specifier: ^0.2.0 specifier: ^0.2.0
version: 0.2.0 version: 0.2.0
@ -628,9 +625,6 @@ importers:
'@svgr/webpack': '@svgr/webpack':
specifier: ^6.5.1 specifier: ^6.5.1
version: 6.5.1 version: 6.5.1
'@types/formidable':
specifier: ^2.0.5
version: 2.0.6
'@types/js-yaml': '@types/js-yaml':
specifier: ^4.0.9 specifier: ^4.0.9
version: 4.0.9 version: 4.0.9
@ -665,8 +659,8 @@ importers:
specifier: 8.56.0 specifier: 8.56.0
version: 8.56.0 version: 8.56.0
eslint-config-next: eslint-config-next:
specifier: 14.2.24 specifier: 14.2.26
version: 14.2.24(eslint@8.56.0)(typescript@5.8.2) version: 14.2.26(eslint@8.56.0)(typescript@5.8.2)
typescript: typescript:
specifier: ^5.1.3 specifier: ^5.1.3
version: 5.8.2 version: 5.8.2
@ -2589,8 +2583,8 @@ packages:
'@next/env@14.2.26': '@next/env@14.2.26':
resolution: {integrity: sha512-vO//GJ/YBco+H7xdQhzJxF7ub3SUwft76jwaeOyVVQFHCi5DCnkP16WHB+JBylo4vOKPoZBlR94Z8xBxNBdNJA==} resolution: {integrity: sha512-vO//GJ/YBco+H7xdQhzJxF7ub3SUwft76jwaeOyVVQFHCi5DCnkP16WHB+JBylo4vOKPoZBlR94Z8xBxNBdNJA==}
'@next/eslint-plugin-next@14.2.24': '@next/eslint-plugin-next@14.2.26':
resolution: {integrity: sha512-FDL3qs+5DML0AJz56DCVr+KnFYivxeAX73En8QbPw9GjJZ6zbfvqDy+HrarHFzbsIASn7y8y5ySJ/lllSruNVQ==} resolution: {integrity: sha512-SPEj1O5DAVTPaWD9XPupelfT2APNIgcDYD2OzEm328BEmHaglhmYNUvxhzfJYDr12AgAfW4V3UHSV93qaeELJA==}
'@next/swc-darwin-arm64@14.2.26': '@next/swc-darwin-arm64@14.2.26':
resolution: {integrity: sha512-zDJY8gsKEseGAxG+C2hTMT0w9Nk9N1Sk1qV7vXYz9MEiyRoF5ogQX2+vplyUMIfygnjn9/A04I6yrUTRTuRiyQ==} resolution: {integrity: sha512-zDJY8gsKEseGAxG+C2hTMT0w9Nk9N1Sk1qV7vXYz9MEiyRoF5ogQX2+vplyUMIfygnjn9/A04I6yrUTRTuRiyQ==}
@ -3379,9 +3373,6 @@ packages:
'@types/express@5.0.1': '@types/express@5.0.1':
resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==} resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==}
'@types/formidable@2.0.6':
resolution: {integrity: sha512-L4HcrA05IgQyNYJj6kItuIkXrInJvsXTPC5B1i64FggWKKqSL+4hgt7asiSNva75AoLQjq29oPxFfU4GAQ6Z2w==}
'@types/geojson@7946.0.16': '@types/geojson@7946.0.16':
resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==} resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
@ -5242,8 +5233,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==} resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'} engines: {node: '>=12'}
eslint-config-next@14.2.24: eslint-config-next@14.2.26:
resolution: {integrity: sha512-9r1ujK++Pgpfixr5+DQ6rXDIQmSzuDbBlAQYMkJRMz9KWqovX7ESUTC0EAyBfOCl3ubkoeplw+aoXDuih3A8fw==} resolution: {integrity: sha512-KZNh1xvWG1ZDFD2f2WkvvnMpp7Sjsl6xJXCsvfEe8GH1FLXn6GtXo7lY9S8xDcn6oBWmKA0hSrlrp1DNQ9QDnQ==}
peerDependencies: peerDependencies:
eslint: ^7.23.0 || ^8.0.0 eslint: ^7.23.0 || ^8.0.0
typescript: '>=3.3.1' typescript: '>=3.3.1'
@ -11008,7 +10999,7 @@ snapshots:
'@chakra-ui/system': 2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1) '@chakra-ui/system': 2.6.1(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(react@18.3.1)
react: 18.3.1 react: 18.3.1
'@chakra-ui/next-js@2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.26(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1)': '@chakra-ui/next-js@2.4.2(@chakra-ui/react@2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(next@14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react@18.3.1)':
dependencies: dependencies:
'@chakra-ui/react': 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1) '@chakra-ui/react': 2.10.7(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@emotion/styled@11.11.0(@emotion/react@11.11.1(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(react@18.3.1))(@types/react@18.3.1)(framer-motion@9.1.7(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react-dom@18.3.1(react@18.3.1))(react@18.3.1)
'@emotion/cache': 11.14.0 '@emotion/cache': 11.14.0
@ -12092,7 +12083,7 @@ snapshots:
'@next/env@14.2.26': {} '@next/env@14.2.26': {}
'@next/eslint-plugin-next@14.2.24': '@next/eslint-plugin-next@14.2.26':
dependencies: dependencies:
glob: 10.3.10 glob: 10.3.10
@ -12837,10 +12828,6 @@ snapshots:
'@types/express-serve-static-core': 5.0.6 '@types/express-serve-static-core': 5.0.6
'@types/serve-static': 1.15.7 '@types/serve-static': 1.15.7
'@types/formidable@2.0.6':
dependencies:
'@types/node': 20.17.24
'@types/geojson@7946.0.16': {} '@types/geojson@7946.0.16': {}
'@types/graceful-fs@4.1.9': '@types/graceful-fs@4.1.9':
@ -15081,16 +15068,16 @@ snapshots:
escape-string-regexp@5.0.0: {} escape-string-regexp@5.0.0: {}
eslint-config-next@14.2.24(eslint@8.56.0)(typescript@5.8.2): eslint-config-next@14.2.26(eslint@8.56.0)(typescript@5.8.2):
dependencies: dependencies:
'@next/eslint-plugin-next': 14.2.24 '@next/eslint-plugin-next': 14.2.26
'@rushstack/eslint-patch': 1.11.0 '@rushstack/eslint-patch': 1.11.0
'@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0)(typescript@5.8.2) '@typescript-eslint/eslint-plugin': 6.21.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0)(typescript@5.8.2)
'@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.2) '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.2)
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0) eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.31.0)(eslint@8.56.0)
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0)
eslint-plugin-jsx-a11y: 6.10.2(eslint@8.56.0) eslint-plugin-jsx-a11y: 6.10.2(eslint@8.56.0)
eslint-plugin-react: 7.37.4(eslint@8.56.0) eslint-plugin-react: 7.37.4(eslint@8.56.0)
eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.56.0) eslint-plugin-react-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.56.0)
@ -15109,7 +15096,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0): eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0)(eslint@8.56.0):
dependencies: dependencies:
'@nolyfill/is-core-module': 1.0.39 '@nolyfill/is-core-module': 1.0.39
debug: 4.4.0(supports-color@5.5.0) debug: 4.4.0(supports-color@5.5.0)
@ -15120,22 +15107,22 @@ snapshots:
stable-hash: 0.0.5 stable-hash: 0.0.5
tinyglobby: 0.2.12 tinyglobby: 0.2.12
optionalDependencies: optionalDependencies:
eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) eslint-plugin-import: 2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0): eslint-module-utils@2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0)(eslint@8.56.0))(eslint@8.56.0):
dependencies: dependencies:
debug: 3.2.7 debug: 3.2.7
optionalDependencies: optionalDependencies:
'@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.2) '@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.2)
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0) eslint-import-resolver-typescript: 3.9.0(eslint-plugin-import@2.31.0)(eslint@8.56.0)
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0): eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-typescript@3.9.0)(eslint@8.56.0):
dependencies: dependencies:
'@rtsao/scc': 1.1.0 '@rtsao/scc': 1.1.0
array-includes: 3.1.8 array-includes: 3.1.8
@ -15146,7 +15133,7 @@ snapshots:
doctrine: 2.1.0 doctrine: 2.1.0
eslint: 8.56.0 eslint: 8.56.0
eslint-import-resolver-node: 0.3.9 eslint-import-resolver-node: 0.3.9
eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint@8.56.0))(eslint@8.56.0))(eslint@8.56.0) eslint-module-utils: 2.12.0(@typescript-eslint/parser@6.21.0(eslint@8.56.0)(typescript@5.8.2))(eslint-import-resolver-node@0.3.9)(eslint-import-resolver-typescript@3.9.0(eslint-plugin-import@2.31.0)(eslint@8.56.0))(eslint@8.56.0)
hasown: 2.0.2 hasown: 2.0.2
is-core-module: 2.16.1 is-core-module: 2.16.1
is-glob: 4.0.3 is-glob: 4.0.3
@ -18092,7 +18079,7 @@ snapshots:
transitivePeerDependencies: transitivePeerDependencies:
- supports-color - supports-color
next-i18next@15.4.2(i18next@23.16.8)(next@14.2.26(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1): next-i18next@15.4.2(i18next@23.16.8)(next@14.2.26(@babel/core@7.26.10)(react-dom@18.3.1(react@18.3.1))(react@18.3.1)(sass@1.85.1))(react-i18next@14.1.2(i18next@23.16.8)(react-dom@18.3.1(react@18.3.1))(react@18.3.1))(react@18.3.1):
dependencies: dependencies:
'@babel/runtime': 7.26.10 '@babel/runtime': 7.26.10
'@types/hoist-non-react-statics': 3.3.6 '@types/hoist-non-react-statics': 3.3.6

View File

@ -61,6 +61,8 @@ WORKFLOW_MAX_RUN_TIMES=500
WORKFLOW_MAX_LOOP_TIMES=50 WORKFLOW_MAX_LOOP_TIMES=50
# 启用内网 IP 检查 # 启用内网 IP 检查
CHECK_INTERNAL_IP=false CHECK_INTERNAL_IP=false
# 密码错误锁时长:s
PASSWORD_LOGIN_LOCK_SECONDS=
# 特殊配置 # 特殊配置
# 自定义跨域,不配置时,默认都允许跨域(逗号分割) # 自定义跨域,不配置时,默认都允许跨域(逗号分割)

View File

@ -33,7 +33,6 @@
"dayjs": "^1.11.7", "dayjs": "^1.11.7",
"echarts": "5.4.1", "echarts": "5.4.1",
"echarts-gl": "2.0.9", "echarts-gl": "2.0.9",
"formidable": "^2.1.1",
"framer-motion": "9.1.7", "framer-motion": "9.1.7",
"hyperdown": "^2.4.29", "hyperdown": "^2.4.29",
"i18next": "23.16.8", "i18next": "23.16.8",
@ -71,7 +70,6 @@
}, },
"devDependencies": { "devDependencies": {
"@svgr/webpack": "^6.5.1", "@svgr/webpack": "^6.5.1",
"@types/formidable": "^2.0.5",
"@types/js-yaml": "^4.0.9", "@types/js-yaml": "^4.0.9",
"@types/jsonwebtoken": "^9.0.3", "@types/jsonwebtoken": "^9.0.3",
"@types/lodash": "^4.14.191", "@types/lodash": "^4.14.191",
@ -83,7 +81,7 @@
"@types/react-syntax-highlighter": "^15.5.6", "@types/react-syntax-highlighter": "^15.5.6",
"@types/request-ip": "^0.0.37", "@types/request-ip": "^0.0.37",
"eslint": "8.56.0", "eslint": "8.56.0",
"eslint-config-next": "14.2.24", "eslint-config-next": "14.2.26",
"typescript": "^5.1.3", "typescript": "^5.1.3",
"vitest": "^3.0.2" "vitest": "^3.0.2"
} }

View File

@ -22,7 +22,7 @@ const CommunityModal = ({ onClose }: { onClose: () => void }) => {
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} onClick={onClose}> <Button variant={'whiteBase'} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -328,7 +328,7 @@ const CodeLight = ({
<Box flex={1}>{codeBoxName}</Box> <Box flex={1}>{codeBoxName}</Box>
<Flex cursor={'pointer'} onClick={() => copyData(String(children))} alignItems={'center'}> <Flex cursor={'pointer'} onClick={() => copyData(String(children))} alignItems={'center'}>
<Icon name={'copy'} width={15} height={15}></Icon> <Icon name={'copy'} width={15} height={15}></Icon>
<Box ml={1}>{t('common:common.Copy')}</Box> <Box ml={1}>{t('common:Copy')}</Box>
</Flex> </Flex>
</Flex> </Flex>
<SyntaxHighlighter style={codeLight as any} language={match?.[1]} PreTag="pre"> <SyntaxHighlighter style={codeLight as any} language={match?.[1]} PreTag="pre">

View File

@ -173,7 +173,7 @@ const IframeHtmlCodeBlock = ({
</Flex> </Flex>
</Box> </Box>
<StyledButton <StyledButton
label={t('common:common.Code')} label={t('common:Code')}
iconName="code" iconName="code"
onClick={() => setViewMode('source')} onClick={() => setViewMode('source')}
isActive={viewMode === 'source'} isActive={viewMode === 'source'}
@ -181,7 +181,7 @@ const IframeHtmlCodeBlock = ({
isMobile={isMobile} isMobile={isMobile}
/> />
<StyledButton <StyledButton
label={t('common:common.Preview')} label={t('common:Preview')}
iconName="preview" iconName="preview"
onClick={() => setViewMode('iframe')} onClick={() => setViewMode('iframe')}
isActive={viewMode === 'iframe'} isActive={viewMode === 'iframe'}
@ -189,7 +189,7 @@ const IframeHtmlCodeBlock = ({
isMobile={isMobile} isMobile={isMobile}
/> />
<StyledButton <StyledButton
label={t('common:common.FullScreen')} label={t('common:FullScreen')}
iconName="fullScreen" iconName="fullScreen"
onClick={onOpen} onClick={onOpen}
viewMode={viewMode} viewMode={viewMode}
@ -221,7 +221,7 @@ const IframeHtmlCodeBlock = ({
height="60px" height="60px"
> >
<Box fontSize="lg" color="myGray.900"> <Box fontSize="lg" color="myGray.900">
{t('common:common.FullScreenLight')} {t('common:FullScreenLight')}
</Box> </Box>
<ModalCloseButton zIndex={1} position={'relative'} top={0} right={0} /> <ModalCloseButton zIndex={1} position={'relative'} top={0} right={0} />
</ModalHeader> </ModalHeader>

View File

@ -56,7 +56,7 @@ const EditResourceModal = ({
<Box> <Box>
<FormLabel mb={1}>{t('common:core.app.Name and avatar')}</FormLabel> <FormLabel mb={1}>{t('common:core.app.Name and avatar')}</FormLabel>
<HStack spacing={4}> <HStack spacing={4}>
<MyTooltip label={t('common:common.Set Avatar')}> <MyTooltip label={t('common:set_avatar')}>
<Avatar <Avatar
flex={'0 0 2rem'} flex={'0 0 2rem'}
src={avatar} src={avatar}
@ -76,13 +76,13 @@ const EditResourceModal = ({
</HStack> </HStack>
</Box> </Box>
<Box mt={4}> <Box mt={4}>
<FormLabel mb={1}>{t('common:common.Intro')}</FormLabel> <FormLabel mb={1}>{t('common:Intro')}</FormLabel>
<Textarea {...register('intro')} bg={'myGray.50'} maxLength={200} /> <Textarea {...register('intro')} bg={'myGray.50'} maxLength={200} />
</Box> </Box>
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button isLoading={loading} onClick={handleSubmit(onSave)} px={6}> <Button isLoading={loading} onClick={handleSubmit(onSave)} px={6}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>

View File

@ -11,13 +11,7 @@ const ParentPaths = (props: {
fontSize?: string; fontSize?: string;
}) => { }) => {
const { t } = useTranslation(); const { t } = useTranslation();
const { const { paths = [], rootName = t('common:root_folder'), FirstPathDom, onClick, fontSize } = props;
paths = [],
rootName = t('common:common.folder.Root Path'),
FirstPathDom,
onClick,
fontSize
} = props;
const concatPaths = useMemo( const concatPaths = useMemo(
() => [ () => [
{ {

View File

@ -74,7 +74,7 @@ const MyTextarea = React.forwardRef<HTMLTextAreaElement, Props>(function MyTexta
onClose(); onClose();
}} }}
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>
@ -134,7 +134,7 @@ const Editor = React.memo(function Editor({
cursor={'pointer'} cursor={'pointer'}
onClick={onOpenModal} onClick={onOpenModal}
> >
<MyTooltip label={t('common:common.ui.textarea.Magnifying')}> <MyTooltip label={t('common:ui.textarea.Magnifying')}>
<MyIcon name={'common/fullScreenLight'} w={'14px'} color={'myGray.600'} /> <MyIcon name={'common/fullScreenLight'} w={'14px'} color={'myGray.600'} />
</MyTooltip> </MyTooltip>
</Box> </Box>

View File

@ -31,7 +31,7 @@ const TagTextarea = ({ defaultValues, onUpdate, ...props }: Props) => {
if (tags.includes(value)) { if (tags.includes(value)) {
return toast({ return toast({
status: 'warning', status: 'warning',
title: t('common:common.input.Repeat Value') title: t('common:input.Repeat Value')
}); });
} }
setTags([...tags, value]); setTags([...tags, value]);

View File

@ -51,7 +51,7 @@ const MoveModal = ({ moveResourceId, title, server, onConfirm, onClose, moveHint
setFolderList([ setFolderList([
{ {
id: rootId, id: rootId,
name: t('common:common.folder.Root Path'), name: t('common:root_folder'),
open: true, open: true,
children: data.map((item) => ({ children: data.map((item) => ({
id: item.id, id: item.id,
@ -158,7 +158,7 @@ const MoveModal = ({ moveResourceId, title, server, onConfirm, onClose, moveHint
onSuccess: () => { onSuccess: () => {
onClose(); onClose();
}, },
successToast: t('common:common.folder.Move Success') successToast: t('common:move_success')
} }
); );
@ -181,7 +181,7 @@ const MoveModal = ({ moveResourceId, title, server, onConfirm, onClose, moveHint
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button isLoading={confirming} isDisabled={!selectedId} onClick={onConfirmSelect}> <Button isLoading={confirming} isDisabled={!selectedId} onClick={onConfirmSelect}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -16,7 +16,7 @@ const FolderPath = (props: {
const { t } = useTranslation(); const { t } = useTranslation();
const { const {
paths, paths,
rootName = t('common:common.folder.Root Path'), rootName = t('common:root_folder'),
FirstPathDom, FirstPathDom,
onClick, onClick,
fontSize, fontSize,

View File

@ -40,7 +40,7 @@ const SelectOneResource = ({
id: rootId, id: rootId,
open: true, open: true,
avatar: FolderImgUrl, avatar: FolderImgUrl,
name: t('common:common.folder.Root Path'), name: t('common:root_folder'),
isFolder: true, isFolder: true,
children: dataList children: dataList
}; };

View File

@ -90,7 +90,7 @@ const FolderSlideCard = ({
mt={4} mt={4}
onClick={onMove} onClick={onMove}
> >
{t('common:common.Move')} {t('common:Move')}
</Button> </Button>
{managePer.permission.isOwner && ( {managePer.permission.isOwner && (
<Button <Button
@ -107,7 +107,7 @@ const FolderSlideCard = ({
openConfirm(onDelete)(); openConfirm(onDelete)();
}} }}
> >
{t('common:common.Delete folder')} {t('common:delete_folder')}
</Button> </Button>
)} )}
</Box> </Box>
@ -150,7 +150,7 @@ const FolderSlideCard = ({
onClick={onOpenManageModal} onClick={onOpenManageModal}
/> />
</MyTooltip> </MyTooltip>
<MyTooltip label={t('common:common.Add')}> <MyTooltip label={t('common:Add')}>
<MyIcon <MyIcon
w="1rem" w="1rem"
name="support/permission/collaborator" name="support/permission/collaborator"

View File

@ -220,8 +220,8 @@ const AIChatSettingsModal = ({
</Td> </Td>
<Td pt={0} pb={2}> <Td pt={0} pb={2}>
{selectedModel?.toolChoice || selectedModel?.functionCall {selectedModel?.toolChoice || selectedModel?.functionCall
? t('common:common.support') ? t('common:support')
: t('common:common.not_support')} : t('common:not_support')}
</Td> </Td>
</Tr> </Tr>
</Tbody> </Tbody>
@ -470,10 +470,10 @@ const AIChatSettingsModal = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} onClick={onClose}> <Button variant={'whiteBase'} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button ml={4} onClick={handleSubmit(onSuccess)}> <Button ml={4} onClick={handleSubmit(onSuccess)}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -34,7 +34,7 @@ const ModelTable = () => {
const { t } = useTranslation(); const { t } = useTranslation();
const [provider, setProvider] = useState<ModelProviderIdType | ''>(''); const [provider, setProvider] = useState<ModelProviderIdType | ''>('');
const providerList = useRef<{ label: any; value: ModelProviderIdType | '' }[]>([ const providerList = useRef<{ label: any; value: ModelProviderIdType | '' }[]>([
{ label: t('common:common.All'), value: '' }, { label: t('common:All'), value: '' },
...ModelProviderList.map((item) => ({ ...ModelProviderList.map((item) => ({
label: ( label: (
<HStack> <HStack>
@ -48,7 +48,7 @@ const ModelTable = () => {
const [modelType, setModelType] = useState<ModelTypeEnum | ''>(''); const [modelType, setModelType] = useState<ModelTypeEnum | ''>('');
const selectModelTypeList = useRef<{ label: string; value: ModelTypeEnum | '' }[]>([ const selectModelTypeList = useRef<{ label: string; value: ModelTypeEnum | '' }[]>([
{ label: t('common:common.All'), value: '' }, { label: t('common:All'), value: '' },
...modelTypeList.map((item) => ({ label: t(item.label), value: item.value })) ...modelTypeList.map((item) => ({ label: t(item.label), value: item.value }))
]); ]);
@ -65,14 +65,14 @@ const ModelTable = () => {
typeof item.inputPrice === 'number' ? ( typeof item.inputPrice === 'number' ? (
<Box> <Box>
<Flex> <Flex>
{`${t('common:common.Input')}:`} {`${t('common:Input')}:`}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}>
{item.inputPrice || 0} {item.inputPrice || 0}
</Box> </Box>
{`${t('common:support.wallet.subscription.point')} / 1K Tokens`} {`${t('common:support.wallet.subscription.point')} / 1K Tokens`}
</Flex> </Flex>
<Flex> <Flex>
{`${t('common:common.Output')}:`} {`${t('common:Output')}:`}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}>
{item.outputPrice || 0} {item.outputPrice || 0}
</Box> </Box>
@ -94,7 +94,7 @@ const ModelTable = () => {
typeLabel: t('common:model.type.embedding'), typeLabel: t('common:model.type.embedding'),
priceLabel: ( priceLabel: (
<Flex color={'myGray.700'}> <Flex color={'myGray.700'}>
{`${t('common:common.Input')}: `} {`${t('common:Input')}: `}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}>
{item.charsPointsPrice || 0} {item.charsPointsPrice || 0}
</Box> </Box>
@ -134,7 +134,7 @@ const ModelTable = () => {
typeLabel: t('common:model.type.reRank'), typeLabel: t('common:model.type.reRank'),
priceLabel: item.charsPointsPrice ? ( priceLabel: item.charsPointsPrice ? (
<Flex color={'myGray.700'}> <Flex color={'myGray.700'}>
{`${t('common:common.Input')}: `} {`${t('common:Input')}: `}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}>
{item.charsPointsPrice} {item.charsPointsPrice}
</Box> </Box>

View File

@ -78,7 +78,7 @@ const DatasetParamsModal = ({
defaultValues: { defaultValues: {
searchMode, searchMode,
embeddingWeight: embeddingWeight || 0.5, embeddingWeight: embeddingWeight || 0.5,
usingReRank: usingReRank || true, usingReRank: !!usingReRank,
rerankModel: rerankModel || defaultModels?.rerank?.model, rerankModel: rerankModel || defaultModels?.rerank?.model,
rerankWeight: rerankWeight || 0.5, rerankWeight: rerankWeight || 0.5,
limit, limit,
@ -393,7 +393,7 @@ const DatasetParamsModal = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={3} onClick={onClose}> <Button variant={'whiteBase'} mr={3} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button <Button
onClick={() => { onClick={() => {
@ -401,7 +401,7 @@ const DatasetParamsModal = ({
handleSubmit(onSuccess)(); handleSubmit(onSuccess)();
}} }}
> >
{t('common:common.Done')} {t('common:Done')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -199,7 +199,7 @@ export const DatasetSelectModal = ({
})() })()
)} )}
</Grid> </Grid>
{unSelectedDatasets.length === 0 && <EmptyTip text={t('common:common.folder.empty')} />} {unSelectedDatasets.length === 0 && <EmptyTip text={t('common:folder.empty')} />}
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
@ -209,7 +209,7 @@ export const DatasetSelectModal = ({
onChange(selectedDatasets); onChange(selectedDatasets);
}} }}
> >
{t('common:common.Done')} {t('common:Done')}
</Button> </Button>
</ModalFooter> </ModalFooter>

View File

@ -188,7 +188,7 @@ const FileSelect = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button onClick={onClose} px={8}> <Button onClick={onClose} px={8}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -16,7 +16,6 @@ import type { ChatInputGuideConfigType } from '@fastgpt/global/core/app/type.d';
import MyModal from '@fastgpt/web/components/common/MyModal'; import MyModal from '@fastgpt/web/components/common/MyModal';
import MyInput from '@/components/MyInput'; import MyInput from '@/components/MyInput';
import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip'; import QuestionTip from '@fastgpt/web/components/common/MyTooltip/QuestionTip';
import { useI18n } from '@/web/context/I18n';
import { fileDownload } from '@/web/common/file/utils'; import { fileDownload } from '@/web/common/file/utils';
import { getDocPath } from '@/web/common/system/doc'; import { getDocPath } from '@/web/common/system/doc';
import { import {
@ -151,7 +150,7 @@ const InputGuideConfig = ({
cursor={'pointer'} cursor={'pointer'}
> >
<MyIcon name={'book'} w={'17px'} ml={4} mr={1} color={'myGray.600'} /> <MyIcon name={'book'} w={'17px'} ml={4} mr={1} color={'myGray.600'} />
{t('common:common.Documents')} {t('common:Documents')}
</Flex> </Flex>
<Box flex={'1 0 0'} /> <Box flex={'1 0 0'} />
</Flex> </Flex>
@ -180,7 +179,6 @@ const InputGuideConfig = ({
export default React.memo(InputGuideConfig); export default React.memo(InputGuideConfig);
const LexiconConfigModal = ({ appId, onClose }: { appId: string; onClose: () => void }) => { const LexiconConfigModal = ({ appId, onClose }: { appId: string; onClose: () => void }) => {
const { commonT } = useI18n();
const { t } = useTranslation(); const { t } = useTranslation();
const { toast } = useToast(); const { toast } = useToast();
const { File, onOpen: onOpenSelectFile } = useSelectFile({ const { File, onOpen: onOpenSelectFile } = useSelectFile({
@ -236,7 +234,7 @@ const LexiconConfigModal = ({ appId, onClose }: { appId: string; onClose: () =>
} else { } else {
toast({ toast({
status: 'success', status: 'success',
title: t('common:common.Add Success') title: t('common:Add Success')
}); });
} }
fetchData(1); fetchData(1);
@ -315,7 +313,7 @@ const LexiconConfigModal = ({ appId, onClose }: { appId: string; onClose: () =>
bg={'myGray.50'} bg={'myGray.50'}
w={'full'} w={'full'}
h={9} h={9}
placeholder={commonT('common.Search')} placeholder={t('common:Search')}
onChange={(e) => setSearchKey(e.target.value)} onChange={(e) => setSearchKey(e.target.value)}
/> />
</Box> </Box>
@ -325,7 +323,7 @@ const LexiconConfigModal = ({ appId, onClose }: { appId: string; onClose: () =>
size={'sm'} size={'sm'}
leftIcon={<MyIcon name={'common/importLight'} boxSize={4} />} leftIcon={<MyIcon name={'common/importLight'} boxSize={4} />}
> >
{commonT('common.Import')} {t('common:Import')}
</Button> </Button>
<Box <Box
cursor={'pointer'} cursor={'pointer'}
@ -355,7 +353,7 @@ const LexiconConfigModal = ({ appId, onClose }: { appId: string; onClose: () =>
setSelectedRows([]); setSelectedRows([]);
}} }}
> >
{commonT('common.Delete')} {t('common:Delete')}
</Button> </Button>
<Button <Button
variant={'whiteBase'} variant={'whiteBase'}
@ -383,7 +381,7 @@ const LexiconConfigModal = ({ appId, onClose }: { appId: string; onClose: () =>
size={'sm'} size={'sm'}
leftIcon={<MyIcon name={'common/addLight'} boxSize={4} />} leftIcon={<MyIcon name={'common/addLight'} boxSize={4} />}
> >
{commonT('common.Add')} {t('common:Add')}
</Button> </Button>
</Flex> </Flex>
</Flex> </Flex>

View File

@ -146,7 +146,7 @@ const QGConfigModal = ({
leftIcon={<MyIcon name={'edit'} w={'14px'} />} leftIcon={<MyIcon name={'edit'} w={'14px'} />}
onClick={onOpenCustomPrompt} onClick={onOpenCustomPrompt}
> >
{t('common:common.Edit')} {t('common:Edit')}
</Button> </Button>
</Flex> </Flex>
<Box <Box

View File

@ -147,7 +147,7 @@ const VariableEdit = ({
onChange(onChangeVariable); onChange(onChangeVariable);
toast({ toast({
status: 'success', status: 'success',
title: t('common:common.Add Success') title: t('common:Add Success')
}); });
reset({ reset({
...addVariable(), ...addVariable(),
@ -194,7 +194,7 @@ const VariableEdit = ({
reset(addVariable()); reset(addVariable());
}} }}
> >
{t('common:common.Add New')} {t('common:add_new')}
</Button> </Button>
</Flex> </Flex>
{/* Form render */} {/* Form render */}

View File

@ -1,7 +1,6 @@
import { Box, Flex } from '@chakra-ui/react'; import { Box, Flex } from '@chakra-ui/react';
import React from 'react'; import React from 'react';
import MyIcon from '@fastgpt/web/components/common/Icon'; import MyIcon from '@fastgpt/web/components/common/Icon';
import { useI18n } from '@/web/context/I18n';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { queryChatInputGuideList } from '@/web/core/chat/inputGuide/api'; import { queryChatInputGuideList } from '@/web/core/chat/inputGuide/api';
import MyTooltip from '@fastgpt/web/components/common/MyTooltip'; import MyTooltip from '@fastgpt/web/components/common/MyTooltip';

View File

@ -80,7 +80,7 @@ const ChatController = ({
} }
})} })}
> >
<MyTooltip label={t('common:common.Copy')}> <MyTooltip label={t('common:Copy')}>
<MyIcon <MyIcon
{...controlIconStyle} {...controlIconStyle}
name={'copy'} name={'copy'}
@ -100,7 +100,7 @@ const ChatController = ({
/> />
</MyTooltip> </MyTooltip>
)} )}
<MyTooltip label={t('common:common.Delete')}> <MyTooltip label={t('common:Delete')}>
<MyIcon <MyIcon
{...controlIconStyle} {...controlIconStyle}
name={'delete'} name={'delete'}
@ -132,7 +132,7 @@ const ChatController = ({
} }
if (isPlayingChat && audioLoading) { if (isPlayingChat && audioLoading) {
return ( return (
<MyTooltip label={t('common:common.Loading')}> <MyTooltip label={t('common:Loading')}>
<MyIcon {...controlIconStyle} name={'common/loading'} /> <MyIcon {...controlIconStyle} name={'common/loading'} />
</MyTooltip> </MyTooltip>
); );

View File

@ -381,7 +381,7 @@ const ChatItem = (props: Props) => {
right={0} right={0}
transform={'translateX(100%)'} transform={'translateX(100%)'}
> >
<MyTooltip label={t('common:common.Copy')}> <MyTooltip label={t('common:Copy')}>
<MyIcon <MyIcon
w={'1rem'} w={'1rem'}
cursor="pointer" cursor="pointer"

View File

@ -54,7 +54,7 @@ const FeedbackModal = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={2} onClick={onClose}> <Button variant={'whiteBase'} mr={2} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button isLoading={isLoading} onClick={mutate}> <Button isLoading={isLoading} onClick={mutate}>
{t('common:core.chat.Feedback Submit')} {t('common:core.chat.Feedback Submit')}

View File

@ -118,7 +118,7 @@ const SelectMarkCollection = ({
}); });
}} }}
> >
{t('common:common.Last Step')} {t('common:last_step')}
</Button> </Button>
</ModalFooter> </ModalFooter>
} }

View File

@ -86,7 +86,7 @@ const VariablePopover = ({
)} )}
<Flex w={'full'} justifyContent={'flex-end'}> <Flex w={'full'} justifyContent={'flex-end'}>
<Button size={'sm'} onClick={onClose}> <Button size={'sm'} onClick={onClose}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</Flex> </Flex>
</Box> </Box>

View File

@ -841,7 +841,7 @@ const ChatBox = ({
return { return {
status: chatContent.status || ChatStatusEnum.loading, status: chatContent.status || ChatStatusEnum.loading,
name: t(chatContent.moduleName || ('' as any)) || t('common:common.Loading') name: t(chatContent.moduleName || ('' as any)) || t('common:Loading')
}; };
}, [chatRecords, isChatting, t]); }, [chatRecords, isChatting, t]);

View File

@ -267,7 +267,7 @@ const RenderInput = () => {
})(); })();
}} }}
> >
{isDisabledInput ? t('common:common.Restart') : t('common:common.Run')} {isDisabledInput ? t('common:Restart') : t('common:Run')}
</Button> </Button>
</Flex> </Flex>
)} )}

View File

@ -72,7 +72,7 @@ const RawSourceBox = ({
className={props.className ?? 'textEllipsis'} className={props.className ?? 'textEllipsis'}
wordBreak={'break-all'} wordBreak={'break-all'}
> >
{sourceName || t('common:common.UnKnow Source')} {sourceName || t('common:unknow_source')}
</Box> </Box>
</Box> </Box>
</MyTooltip> </MyTooltip>

View File

@ -103,7 +103,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
color={'primary.500'} color={'primary.500'}
fontSize={'sm'} fontSize={'sm'}
> >
{t('common:common.Read document')} {t('common:read_doc')}
</Link> </Link>
)} )}
</Flex> </Flex>
@ -153,12 +153,12 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
<Th>{t('common:support.outlink.Usage points')}</Th> <Th>{t('common:support.outlink.Usage points')}</Th>
{feConfigs?.isPlus && ( {feConfigs?.isPlus && (
<> <>
<Th>{t('common:common.Expired Time')}</Th> <Th>{t('common:expired_time')}</Th>
</> </>
)} )}
<Th>{t('common:common.Create Time')}</Th> <Th>{t('common:create_time')}</Th>
<Th>{t('common:common.Last use time')}</Th> <Th>{t('common:last_use_time')}</Th>
<Th /> <Th />
</Tr> </Tr>
</Thead> </Thead>
@ -171,7 +171,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
{Math.round(usagePoints)}/ {Math.round(usagePoints)}/
{feConfigs?.isPlus && limit?.maxUsagePoints && limit?.maxUsagePoints > -1 {feConfigs?.isPlus && limit?.maxUsagePoints && limit?.maxUsagePoints > -1
? `${limit?.maxUsagePoints}` ? `${limit?.maxUsagePoints}`
: t('common:common.Unlimited')} : t('common:Unlimited')}
</Td> </Td>
{feConfigs?.isPlus && ( {feConfigs?.isPlus && (
<> <>
@ -186,7 +186,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
<Td whiteSpace={'pre-wrap'}> <Td whiteSpace={'pre-wrap'}>
{lastUsedTime {lastUsedTime
? dayjs(lastUsedTime).format('YYYY/MM/DD\nHH:mm:ss') ? dayjs(lastUsedTime).format('YYYY/MM/DD\nHH:mm:ss')
: t('common:common.Un used')} : t('common:un_used')}
</Td> </Td>
<Td> <Td>
<MyMenu <MyMenu
@ -204,7 +204,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
{ {
children: [ children: [
{ {
label: t('common:common.Edit'), label: t('common:Edit'),
icon: 'edit', icon: 'edit',
onClick: () => onClick: () =>
setEditData({ setEditData({
@ -215,7 +215,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
}) })
}, },
{ {
label: t('common:common.Delete'), label: t('common:Delete'),
icon: 'delete', icon: 'delete',
type: 'danger', type: 'danger',
onClick: () => openConfirm(() => onclickRemove(_id))() onClick: () => openConfirm(() => onclickRemove(_id))()
@ -279,7 +279,7 @@ const ApiKeyTable = ({ tips, appId }: { tips: string; appId?: string }) => {
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant="whiteBase" onClick={() => setApiKey('')}> <Button variant="whiteBase" onClick={() => setApiKey('')}>
{t('common:common.OK')} {t('common:OK')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>
@ -340,7 +340,7 @@ function EditKeyModal({
placeholder={t('publish:key_alias') || 'key_alias'} placeholder={t('publish:key_alias') || 'key_alias'}
maxLength={100} maxLength={100}
{...register('name', { {...register('name', {
required: t('common:common.name_is_empty') || 'name_is_empty' required: t('common:name_is_empty') || 'name_is_empty'
})} })}
/> />
</Flex> </Flex>
@ -364,7 +364,7 @@ function EditKeyModal({
/> />
</Flex> </Flex>
<Flex alignItems={'center'} mt={4}> <Flex alignItems={'center'} mt={4}>
<FormLabel flex={'0 0 90px'}>{t('common:common.Expired Time')}</FormLabel> <FormLabel flex={'0 0 90px'}>{t('common:expired_time')}</FormLabel>
<Input <Input
type="datetime-local" type="datetime-local"
defaultValue={ defaultValue={
@ -383,14 +383,14 @@ function EditKeyModal({
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={3} onClick={onClose}> <Button variant={'whiteBase'} mr={3} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button <Button
isLoading={creating || updating} isLoading={creating || updating}
onClick={submitShareChat((data) => (isEdit ? onclickUpdate(data) : onclickCreate(data)))} onClick={submitShareChat((data) => (isEdit ? onclickUpdate(data) : onclickCreate(data)))}
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -91,8 +91,8 @@ const LafAccountModal = ({
initUserInfo(); initUserInfo();
onClose(); onClose();
}, },
successToast: t('common:common.Update Success'), successToast: t('common:update_success'),
errorToast: t('common:common.Update Failed') errorToast: t('common:update_failed')
}); });
return ( return (
@ -180,11 +180,11 @@ const LafAccountModal = ({
onClose(); onClose();
}} }}
> >
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
{appid && ( {appid && (
<Button ml={3} isLoading={isUpdating} onClick={handleSubmit((data) => onSubmit(data))}> <Button ml={3} isLoading={isUpdating} onClick={handleSubmit((data) => onSubmit(data))}>
{t('common:common.Update')} {t('common:Update')}
</Button> </Button>
)} )}
</ModalFooter> </ModalFooter>

View File

@ -166,9 +166,9 @@ export function ChangeOwnerModal({
<ModalFooter> <ModalFooter>
<HStack> <HStack>
<Button onClick={onClose} variant={'whiteBase'}> <Button onClick={onClose} variant={'whiteBase'}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button onClick={onConfirm}>{t('common:common.Confirm')}</Button> <Button onClick={onConfirm}>{t('common:Confirm')}</Button>
</HStack> </HStack>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -90,7 +90,7 @@ const ConfigPerModal = ({
leftIcon={<MyIcon w="4" name="support/permission/collaborator" />} leftIcon={<MyIcon w="4" name="support/permission/collaborator" />}
onClick={onOpenAddMember} onClick={onOpenAddMember}
> >
{t('common:common.Add')} {t('common:Add')}
</Button> </Button>
</Flex> </Flex>
</Flex> </Flex>

View File

@ -27,7 +27,7 @@ function ManageModal({ onClose }: ManageModalProps) {
const { runAsync: onDelete, loading: isDeleting } = useRequest2(onDelOneCollaborator); const { runAsync: onDelete, loading: isDeleting } = useRequest2(onDelOneCollaborator);
const { runAsync: onUpdate, loading: isUpdating } = useRequest2(onUpdateCollaborators, { const { runAsync: onUpdate, loading: isUpdating } = useRequest2(onUpdateCollaborators, {
successToast: t('common.Update Success'), successToast: t('common:update_success'),
errorToast: 'Error' errorToast: 'Error'
}); });

View File

@ -122,7 +122,7 @@ function MemberModal({
permission: addOnly ? undefined : selectedPermission! permission: addOnly ? undefined : selectedPermission!
} as UpdateClbPermissionProps<ValueOf<typeof addOnly>>), } as UpdateClbPermissionProps<ValueOf<typeof addOnly>>),
{ {
successToast: t('common:common.Add Success'), successToast: t('common:Add Success'),
onSuccess() { onSuccess() {
onClose(); onClose();
} }
@ -255,7 +255,7 @@ function MemberModal({
onPathClick(parentId); onPathClick(parentId);
} }
}} }}
rootName={t('common:common.Team')} rootName={t('common:Team')}
/> />
</Box> </Box>
)} )}
@ -452,7 +452,7 @@ function MemberModal({
</HStack> </HStack>
)} )}
<Button isLoading={isUpdating} ml="4" h={'32px'} onClick={onConfirm}> <Button isLoading={isUpdating} ml="4" h={'32px'} onClick={onConfirm}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -239,7 +239,7 @@ function PermissionSelect({
}} }}
> >
<MyIcon name="delete" w="20px" color="red.600" /> <MyIcon name="delete" w="20px" color="red.600" />
<Box color="red.600">{t('common:common.Remove')}</Box> <Box color="red.600">{t('common:Remove')}</Box>
</HStack> </HStack>
</> </>
)} )}

View File

@ -17,8 +17,8 @@ import MemberListCard, { type MemberListCardProps } from './MemberListCard';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest'; import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { useSystemStore } from '@/web/common/system/useSystemStore'; import { useSystemStore } from '@/web/common/system/useSystemStore';
import { useConfirm } from '@fastgpt/web/hooks/useConfirm'; import { useConfirm } from '@fastgpt/web/hooks/useConfirm';
import { useI18n } from '@/web/context/I18n';
import type { RequireOnlyOne } from '@fastgpt/global/common/type/utils'; import type { RequireOnlyOne } from '@fastgpt/global/common/type/utils';
import { useTranslation } from 'next-i18next';
const MemberModal = dynamic(() => import('./MemberModal')); const MemberModal = dynamic(() => import('./MemberModal'));
const ManageModal = dynamic(() => import('./ManageModal')); const ManageModal = dynamic(() => import('./ManageModal'));
@ -89,6 +89,7 @@ const CollaboratorContextProvider = ({
hasParent?: boolean; hasParent?: boolean;
addPermissionOnly?: boolean; addPermissionOnly?: boolean;
}) => { }) => {
const { t } = useTranslation();
const onUpdateCollaboratorsThen = async (props: UpdateClbPermissionProps) => { const onUpdateCollaboratorsThen = async (props: UpdateClbPermissionProps) => {
await onUpdateCollaborators(props); await onUpdateCollaborators(props);
refetchCollaboratorList(); refetchCollaboratorList();
@ -101,7 +102,6 @@ const CollaboratorContextProvider = ({
}; };
const { feConfigs } = useSystemStore(); const { feConfigs } = useSystemStore();
const { commonT } = useI18n();
const { const {
data: collaboratorList = [], data: collaboratorList = [],
@ -187,7 +187,7 @@ const CollaboratorContextProvider = ({
onOpenAddMember(); onOpenAddMember();
}, },
undefined, undefined,
commonT('permission.Remove InheritPermission Confirm') t('common:permission.Remove InheritPermission Confirm')
)(); )();
} else { } else {
onOpenAddMember(); onOpenAddMember();
@ -200,7 +200,7 @@ const CollaboratorContextProvider = ({
onOpenManageModal(); onOpenManageModal();
}, },
undefined, undefined,
commonT('permission.Remove InheritPermission Confirm') t('common:permission.Remove InheritPermission Confirm')
)(); )();
} else { } else {
onOpenManageModal(); onOpenManageModal();

View File

@ -1,8 +1,8 @@
import { useI18n } from '@/web/context/I18n';
import { Box, BoxProps } from '@chakra-ui/react'; import { Box, BoxProps } from '@chakra-ui/react';
import { useConfirm } from '@fastgpt/web/hooks/useConfirm'; import { useConfirm } from '@fastgpt/web/hooks/useConfirm';
import { useToast } from '@fastgpt/web/hooks/useToast'; import { useToast } from '@fastgpt/web/hooks/useToast';
import React from 'react'; import React from 'react';
import { useTranslation } from 'next-i18next';
const ResumeInherit = ({ const ResumeInherit = ({
onResume, onResume,
@ -10,13 +10,13 @@ const ResumeInherit = ({
}: BoxProps & { }: BoxProps & {
onResume?: () => Promise<any> | any; onResume?: () => Promise<any> | any;
}) => { }) => {
const { commonT } = useI18n(); const { t } = useTranslation();
const { toast } = useToast(); const { toast } = useToast();
const { ConfirmModal: CommonConfirmModal, openConfirm: openCommonConfirm } = useConfirm({}); const { ConfirmModal: CommonConfirmModal, openConfirm: openCommonConfirm } = useConfirm({});
return onResume ? ( return onResume ? (
<Box display={'inline'} fontSize={'sm'} {...props}> <Box display={'inline'} fontSize={'sm'} {...props}>
{commonT('permission.No InheritPermission')} {t('common:permission.No InheritPermission')}
<Box <Box
display={'inline'} display={'inline'}
textDecoration={'underline'} textDecoration={'underline'}
@ -27,16 +27,16 @@ const ResumeInherit = ({
() => () =>
onResume()?.then(() => { onResume()?.then(() => {
toast({ toast({
title: commonT('permission.Resume InheritPermission Success'), title: t('common:permission.Resume InheritPermission Success'),
status: 'success' status: 'success'
}); });
}), }),
undefined, undefined,
commonT('permission.Resume InheritPermission Confirm') t('common:permission.Resume InheritPermission Confirm')
)(); )();
}} }}
> >
{commonT('click_to_resume')} {t('common:click_to_resume')}
</Box> </Box>
<CommonConfirmModal /> <CommonConfirmModal />

View File

@ -115,14 +115,14 @@ const UpdateContactModal = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button mr={3} variant={'whiteBase'} onClick={onClose}> <Button mr={3} variant={'whiteBase'} onClick={onClose}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button <Button
isLoading={isLoading} isLoading={isLoading}
isDisabled={!account || !verifyCode} isDisabled={!account || !verifyCode}
onClick={handleSubmit((data) => onSubmit(data))} onClick={handleSubmit((data) => onSubmit(data))}
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -59,7 +59,7 @@ const SendCodeAuthModal = ({
</ModalBody> </ModalBody>
<ModalFooter gap={2}> <ModalFooter gap={2}>
<Button isLoading={onSending} variant={'whiteBase'} onClick={onClose}> <Button isLoading={onSending} variant={'whiteBase'} onClick={onClose}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button <Button
isLoading={onSending} isLoading={onSending}
@ -74,7 +74,7 @@ const SendCodeAuthModal = ({
} }
)} )}
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -63,7 +63,7 @@ const TeamTagsAsync = ({ onClose }: { onClose: () => void }) => {
initUserInfo(); initUserInfo();
onClose(); onClose();
}, },
errorToast: t('common:common.Create Failed') errorToast: t('common:create_failed')
}); });
const { mutate: onclickTagAsync, isLoading: isSyncing } = useRequest({ const { mutate: onclickTagAsync, isLoading: isSyncing } = useRequest({
mutationFn: (data: FormType) => loadTeamTagsByDomain(data.teamDomain), mutationFn: (data: FormType) => loadTeamTagsByDomain(data.teamDomain),
@ -187,7 +187,7 @@ const TeamTagsAsync = ({ onClose }: { onClose: () => void }) => {
</ModalBody> </ModalBody>
<ModalFooter mb={2}> <ModalFooter mb={2}>
<Button variant={'whiteBase'} mr={3} onClick={onClose}> <Button variant={'whiteBase'} mr={3} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button isLoading={isUpdating} onClick={handleSubmit((data) => onclickUpdate(data))}> <Button isLoading={isUpdating} onClick={handleSubmit((data) => onclickUpdate(data))}>
{t('common:user.team.Tags Async')} {t('common:user.team.Tags Async')}

View File

@ -37,16 +37,11 @@ const NotSufficientModal = ({ type }: { type: NotSufficientModalType }) => {
return ( return (
<> <>
<MyModal <MyModal isOpen iconSrc="common/confirm/deleteTip" title={t('common:Warning')} w={'420px'}>
isOpen
iconSrc="common/confirm/deleteTip"
title={t('common:common.Warning')}
w={'420px'}
>
<ModalBody>{textMap[type]}</ModalBody> <ModalBody>{textMap[type]}</ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={2} onClick={onClose}> <Button variant={'whiteBase'} mr={2} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button <Button
onClick={() => { onClick={() => {

View File

@ -112,7 +112,7 @@ const AccountContainer = ({
: []), : []),
{ {
icon: 'common/settingLight', icon: 'common/settingLight',
label: t('common:common.Setting'), label: t('common:Setting'),
value: TabEnum.setting value: TabEnum.setting
}, },
{ {

View File

@ -22,7 +22,7 @@ const RedeemCouponModal = ({
onSuccess(); onSuccess();
onClose(); onClose();
}, },
successToast: t('common:common.Success') successToast: t('common:Success')
}); });
return ( return (

View File

@ -153,7 +153,7 @@ export const ModelEditModal = ({
onSuccess: () => { onSuccess: () => {
onClose(); onClose();
}, },
successToast: t('common:common.Success') successToast: t('common:Success')
} }
); );
@ -741,10 +741,10 @@ export const ModelEditModal = ({
</Button> </Button>
)} )}
<Button variant={'whiteBase'} mr={4} onClick={onClose}> <Button variant={'whiteBase'} mr={4} onClick={onClose}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button isLoading={updatingModel} onClick={handleSubmit(updateModel)}> <Button isLoading={updatingModel} onClick={handleSubmit(updateModel)}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -158,7 +158,7 @@ const EditChannelModal = ({
onSuccess(); onSuccess();
onClose(); onClose();
}, },
successToast: isEdit ? t('common:common.Update Success') : t('common:common.Create Success'), successToast: isEdit ? t('common:update_success') : t('common:create_success'),
manual: true manual: true
} }
); );
@ -285,10 +285,10 @@ const EditChannelModal = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'outline'} onClick={onClose} mr={4}> <Button variant={'outline'} onClick={onClose} mr={4}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button variant={'primary'} onClick={handleSubmit(onSubmit)}> <Button variant={'primary'} onClick={handleSubmit(onSubmit)}>
{isEdit ? t('common:common.Update') : t('common:new_create')} {isEdit ? t('common:Update') : t('common:new_create')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -59,11 +59,11 @@ const ModelTest = ({
colorSchema: 'blue' colorSchema: 'blue'
}, },
success: { success: {
label: t('common:common.Success'), label: t('common:Success'),
colorSchema: 'green' colorSchema: 'green'
}, },
error: { error: {
label: t('common:common.failed'), label: t('common:failed'),
colorSchema: 'red' colorSchema: 'red'
} }
}); });
@ -246,7 +246,7 @@ const ModelTest = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button mr={4} variant={'whiteBase'} onClick={onClose}> <Button mr={4} variant={'whiteBase'} onClick={onClose}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button isLoading={isTesting} variant={'primary'} onClick={onStartTest}> <Button isLoading={isTesting} variant={'primary'} onClick={onStartTest}>
{t('account_model:start_test', { num: testModelList.length })} {t('account_model:start_test', { num: testModelList.length })}

View File

@ -215,7 +215,7 @@ const ChannelTable = ({ Tab }: { Tab: React.ReactNode }) => {
{ {
type: 'danger', type: 'danger',
icon: 'delete', icon: 'delete',
label: t('common:common.Delete'), label: t('common:Delete'),
onClick: () => onClick: () =>
openConfirm( openConfirm(
() => onDeleteChannel(item.id), () => onDeleteChannel(item.id),

View File

@ -89,7 +89,7 @@ const ChannelLog = ({ Tab }: { Tab: React.ReactNode }) => {
); );
return [ return [
{ {
label: t('common:common.All'), label: t('common:All'),
value: '' value: ''
}, },
...res ...res
@ -118,7 +118,7 @@ const ChannelLog = ({ Tab }: { Tab: React.ReactNode }) => {
.sort((a, b) => a.order - b.order); .sort((a, b) => a.order - b.order);
return [ return [
{ {
label: t('common:common.All'), label: t('common:All'),
value: '' value: ''
}, },
...res ...res
@ -229,9 +229,9 @@ const ChannelLog = ({ Tab }: { Tab: React.ReactNode }) => {
<MySelect<'all' | 'success' | 'error'> <MySelect<'all' | 'success' | 'error'>
bg={'myGray.50'} bg={'myGray.50'}
list={[ list={[
{ label: t('common:common.All'), value: 'all' }, { label: t('common:All'), value: 'all' },
{ label: t('common:common.Success'), value: 'success' }, { label: t('common:Success'), value: 'success' },
{ label: t('common:common.failed'), value: 'error' } { label: t('common:failed'), value: 'error' }
]} ]}
value={filterProps.code_type} value={filterProps.code_type}
onChange={(val) => setFilterProps({ ...filterProps, code_type: val })} onChange={(val) => setFilterProps({ ...filterProps, code_type: val })}

View File

@ -67,7 +67,7 @@ const ModelTable = ({ Tab }: { Tab: React.ReactNode }) => {
const [provider, setProvider] = useState<ModelProviderIdType | ''>(''); const [provider, setProvider] = useState<ModelProviderIdType | ''>('');
const providerList = useRef<{ label: any; value: ModelProviderIdType | '' }[]>([ const providerList = useRef<{ label: any; value: ModelProviderIdType | '' }[]>([
{ label: t('common:common.All'), value: '' }, { label: t('common:All'), value: '' },
...ModelProviderList.map((item) => ({ ...ModelProviderList.map((item) => ({
label: ( label: (
<HStack> <HStack>
@ -81,7 +81,7 @@ const ModelTable = ({ Tab }: { Tab: React.ReactNode }) => {
const [modelType, setModelType] = useState<ModelTypeEnum | ''>(''); const [modelType, setModelType] = useState<ModelTypeEnum | ''>('');
const selectModelTypeList = useRef<{ label: string; value: ModelTypeEnum | '' }[]>([ const selectModelTypeList = useRef<{ label: string; value: ModelTypeEnum | '' }[]>([
{ label: t('common:common.All'), value: '' }, { label: t('common:All'), value: '' },
...modelTypeList.map((item) => ({ label: t(item.label), value: item.value })) ...modelTypeList.map((item) => ({ label: t(item.label), value: item.value }))
]); ]);
@ -110,14 +110,14 @@ const ModelTable = ({ Tab }: { Tab: React.ReactNode }) => {
typeof item.inputPrice === 'number' ? ( typeof item.inputPrice === 'number' ? (
<Box> <Box>
<Flex> <Flex>
{`${t('common:common.Input')}:`} {`${t('common:Input')}:`}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}>
{item.inputPrice || 0} {item.inputPrice || 0}
</Box> </Box>
{`${t('common:support.wallet.subscription.point')} / 1K Tokens`} {`${t('common:support.wallet.subscription.point')} / 1K Tokens`}
</Flex> </Flex>
<Flex> <Flex>
{`${t('common:common.Output')}:`} {`${t('common:Output')}:`}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5} ml={2}>
{item.outputPrice || 0} {item.outputPrice || 0}
</Box> </Box>
@ -141,7 +141,7 @@ const ModelTable = ({ Tab }: { Tab: React.ReactNode }) => {
typeLabel: t('common:model.type.embedding'), typeLabel: t('common:model.type.embedding'),
priceLabel: ( priceLabel: (
<Flex color={'myGray.700'}> <Flex color={'myGray.700'}>
{`${t('common:common.Input')}: `} {`${t('common:Input')}: `}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}>
{item.charsPointsPrice || 0} {item.charsPointsPrice || 0}
</Box> </Box>
@ -187,7 +187,7 @@ const ModelTable = ({ Tab }: { Tab: React.ReactNode }) => {
typeLabel: t('common:model.type.reRank'), typeLabel: t('common:model.type.reRank'),
priceLabel: item.charsPointsPrice ? ( priceLabel: item.charsPointsPrice ? (
<Flex color={'myGray.700'}> <Flex color={'myGray.700'}>
{`${t('common:common.Input')}: `} {`${t('common:Input')}: `}
<Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}> <Box fontWeight={'bold'} color={'myGray.900'} mr={0.5}>
{item.charsPointsPrice} {item.charsPointsPrice}
</Box> </Box>
@ -254,7 +254,7 @@ const ModelTable = ({ Tab }: { Tab: React.ReactNode }) => {
const { runAsync: onTestModel, loading: testingModel } = useRequest2(getTestModel, { const { runAsync: onTestModel, loading: testingModel } = useRequest2(getTestModel, {
manual: true, manual: true,
successToast: t('common:common.Success') successToast: t('common:Success')
}); });
const { runAsync: updateModel, loading: updatingModel } = useRequest2(putSystemModel, { const { runAsync: updateModel, loading: updatingModel } = useRequest2(putSystemModel, {
onSuccess: refreshModels onSuccess: refreshModels
@ -540,7 +540,7 @@ const JsonConfigModal = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={4} onClick={onClose}> <Button variant={'whiteBase'} mr={4} onClick={onClose}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button <Button
onClick={() => onClick={() =>
@ -549,7 +549,7 @@ const JsonConfigModal = ({
})() })()
} }
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
@ -591,7 +591,7 @@ const DefaultModelModal = ({
onSuccess(); onSuccess();
onClose(); onClose();
}, },
successToast: t('common:common.Update Success') successToast: t('common:update_success')
}); });
return ( return (
@ -745,7 +745,7 @@ const DefaultModelModal = ({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={4} onClick={onClose}> <Button variant={'whiteBase'} mr={4} onClick={onClose}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button <Button
isLoading={loading} isLoading={loading}
@ -761,7 +761,7 @@ const DefaultModelModal = ({
}) })
} }
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -67,8 +67,8 @@ function EditModal({
onSuccess(); onSuccess();
onClose(); onClose();
}, },
successToast: t('common:common.Create Success'), successToast: t('common:create_success'),
errorToast: t('common:common.Create Failed') errorToast: t('common:create_failed')
}); });
const { mutate: onclickUpdate, isLoading: updating } = useRequest({ const { mutate: onclickUpdate, isLoading: updating } = useRequest({
mutationFn: async (data: EditTeamFormDataType) => { mutationFn: async (data: EditTeamFormDataType) => {
@ -82,8 +82,8 @@ function EditModal({
onSuccess(); onSuccess();
onClose(); onClose();
}, },
successToast: t('common:common.Update Success'), successToast: t('common:update_success'),
errorToast: t('common:common.Update Failed') errorToast: t('common:update_failed')
}); });
const { isOpen: isOpenContact, onClose: onCloseContact, onOpen: onOpenContact } = useDisclosure(); const { isOpen: isOpenContact, onClose: onCloseContact, onOpen: onOpenContact } = useDisclosure();
@ -101,7 +101,7 @@ function EditModal({
{t('account_team:set_name_avatar')} {t('account_team:set_name_avatar')}
</Box> </Box>
<Flex mt={3} alignItems={'center'}> <Flex mt={3} alignItems={'center'}>
<MyTooltip label={t('common:common.Set Avatar')}> <MyTooltip label={t('common:set_avatar')}>
<Avatar <Avatar
flexShrink={0} flexShrink={0}
src={avatar} src={avatar}
@ -120,7 +120,7 @@ function EditModal({
maxLength={100} maxLength={100}
placeholder={t('user:team.Team Name')} placeholder={t('user:team.Team Name')}
{...register('name', { {...register('name', {
required: t('common:common.Please Input Name') required: t('common:Please Input Name')
})} })}
/> />
</Flex> </Flex>
@ -153,7 +153,7 @@ function EditModal({
onOpenContact(); onOpenContact();
}} }}
> >
{t('common:common.Setting')} {t('common:Setting')}
</Button> </Button>
</HStack> </HStack>
</ModalBody> </ModalBody>
@ -163,10 +163,10 @@ function EditModal({
<> <>
<Box flex={1} /> <Box flex={1} />
<Button variant={'whiteBase'} mr={3} onClick={onClose}> <Button variant={'whiteBase'} mr={3} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button isLoading={updating} onClick={handleSubmit((data) => onclickUpdate(data))}> <Button isLoading={updating} onClick={handleSubmit((data) => onclickUpdate(data))}>
{t('common:common.Confirm Update')} {t('common:confirm_update')}
</Button> </Button>
</> </>
) : ( ) : (
@ -175,7 +175,7 @@ function EditModal({
isLoading={creating} isLoading={creating}
onClick={handleSubmit((data) => onclickCreate(data))} onClick={handleSubmit((data) => onclickCreate(data))}
> >
{t('common:common.Confirm Create')} {t('common:comfirn_create')}
</Button> </Button>
)} )}
</ModalFooter> </ModalFooter>

View File

@ -118,7 +118,7 @@ function GroupInfoModal({
} }
})} })}
> >
{editGroup ? t('common:common.Save') : t('common:new_create')} {editGroup ? t('common:Save') : t('common:new_create')}
</Button> </Button>
</ModalFooter> </ModalFooter>
<AvatarSelect onSelect={onSelectAvatar} /> <AvatarSelect onSelect={onSelectAvatar} />

View File

@ -294,10 +294,10 @@ function GroupEditModal({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={3} onClick={onClose}> <Button variant={'whiteBase'} mr={3} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button isLoading={isLoading} onClick={onUpdate}> <Button isLoading={isLoading} onClick={onUpdate}>
{t('common:common.Save')} {t('common:Save')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -180,10 +180,10 @@ export function ChangeOwnerModal({
<ModalFooter> <ModalFooter>
<HStack> <HStack>
<Button onClick={onClose} variant={'whiteBase'}> <Button onClick={onClose} variant={'whiteBase'}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button isLoading={loading} isDisabled={!selectedMember} onClick={onConfirm}> <Button isLoading={loading} isDisabled={!selectedMember} onClick={onConfirm}>
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</HStack> </HStack>
</ModalFooter> </ModalFooter>

View File

@ -116,7 +116,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) {
<Th bg="myGray.100">{t('account_team:owner')}</Th> <Th bg="myGray.100">{t('account_team:owner')}</Th>
<Th bg="myGray.100">{t('account_team:member')}</Th> <Th bg="myGray.100">{t('account_team:member')}</Th>
<Th bg="myGray.100" borderRightRadius="6px"> <Th bg="myGray.100" borderRightRadius="6px">
{t('common:common.Action')} {t('common:Action')}
</Th> </Th>
</Tr> </Tr>
</Thead> </Thead>
@ -185,7 +185,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) {
type: 'primary' as MenuItemType type: 'primary' as MenuItemType
}, },
{ {
label: t('common:common.Delete'), label: t('common:Delete'),
icon: 'delete', icon: 'delete',
onClick: () => { onClick: () => {
openDeleteGroupModal(() => delDeleteGroup(group._id))(); openDeleteGroupModal(() => delDeleteGroup(group._id))();

View File

@ -49,7 +49,7 @@ function CreateInvitationModal({
const { runAsync: createInvitationLink, loading } = useRequest2(postCreateInvitationLink, { const { runAsync: createInvitationLink, loading } = useRequest2(postCreateInvitationLink, {
manual: true, manual: true,
errorToast: t('common:common.Create Failed'), errorToast: t('common:create_failed'),
onSuccess: (data) => { onSuccess: (data) => {
onSuccess(data); onSuccess(data);
onClose(); onClose();
@ -100,10 +100,10 @@ function CreateInvitationModal({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button isLoading={loading} onClick={() => onClose()} variant="outline"> <Button isLoading={loading} onClick={() => onClose()} variant="outline">
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button isLoading={loading} onClick={handleSubmit(createInvitationLink)} ml="4"> <Button isLoading={loading} onClick={handleSubmit(createInvitationLink)} ml="4">
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -27,7 +27,7 @@ function Invite({ invitelinkid }: { invitelinkid: string }) {
() => postAcceptInvitationLink(invitelinkid), () => postAcceptInvitationLink(invitelinkid),
{ {
manual: true, manual: true,
successToast: t('common:common.Success'), successToast: t('common:Success'),
onSuccess: async () => { onSuccess: async () => {
onSwitchTeam(invitationInfo!.teamId); onSwitchTeam(invitationInfo!.teamId);
onClose(); onClose();

View File

@ -110,7 +110,7 @@ const InviteModal = ({ onClose }: { onClose: () => void }) => {
<Th bgColor="myGray.100">{t('account_team:used_times_limit')}</Th> <Th bgColor="myGray.100">{t('account_team:used_times_limit')}</Th>
<Th bgColor="myGray.100">{t('account_team:invited')}</Th> <Th bgColor="myGray.100">{t('account_team:invited')}</Th>
<Th bgColor="myGray.100" borderRightRadius="6px"> <Th bgColor="myGray.100" borderRightRadius="6px">
{t('common:common.Action')} {t('common:Action')}
</Th> </Th>
</Tr> </Tr>
</Thead> </Thead>
@ -213,7 +213,7 @@ const InviteModal = ({ onClose }: { onClose: () => void }) => {
</Box> </Box>
<Flex gap={2} mt={2} justifyContent={'flex-end'}> <Flex gap={2} mt={2} justifyContent={'flex-end'}>
<Button variant="outline" onClick={onClosePopover}> <Button variant="outline" onClick={onClosePopover}>
{t('common:common.Cancel')} {t('common:Cancel')}
</Button> </Button>
<Button <Button
isLoading={forbiding} isLoading={forbiding}

View File

@ -66,7 +66,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) {
// Member status selector // Member status selector
const statusOptions = [ const statusOptions = [
{ {
label: t('common:common.All'), label: t('common:All'),
value: undefined value: undefined
}, },
{ {
@ -147,7 +147,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) {
}); });
const { runAsync: onRestore } = useRequest2(postRestoreMember, { const { runAsync: onRestore } = useRequest2(postRestoreMember, {
onSuccess: onRefreshMembers, onSuccess: onRefreshMembers,
successToast: t('common:common.Success'), successToast: t('common:Success'),
errorToast: t('common:user.team.invite.Reject') errorToast: t('common:user.team.invite.Reject')
}); });
@ -276,7 +276,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) {
</Th> </Th>
<Th bgColor="myGray.100">{t('account_team:join_update_time')}</Th> <Th bgColor="myGray.100">{t('account_team:join_update_time')}</Th>
<Th borderRightRadius="6px" bgColor="myGray.100"> <Th borderRightRadius="6px" bgColor="myGray.100">
{t('common:common.Action')} {t('common:Action')}
</Th> </Th>
</Tr> </Tr>
</Thead> </Thead>

View File

@ -62,7 +62,7 @@ function OrgInfoModal({
}); });
}, },
{ {
successToast: t('common:common.Create Success'), successToast: t('common:create_success'),
onSuccess: () => { onSuccess: () => {
onClose(); onClose();
onSuccess(); onSuccess();
@ -81,7 +81,7 @@ function OrgInfoModal({
}); });
}, },
{ {
successToast: t('common:common.Update Success'), successToast: t('common:update_success'),
onSuccess: () => { onSuccess: () => {
onClose(); onClose();
onSuccess(); onSuccess();
@ -155,7 +155,7 @@ function OrgInfoModal({
} }
})} })}
> >
{isEdit ? t('common:common.Save') : t('common:new_create')} {isEdit ? t('common:Save') : t('common:new_create')}
</Button> </Button>
</ModalFooter> </ModalFooter>
<AvatarSelect onSelect={onSelectAvatar} /> <AvatarSelect onSelect={onSelectAvatar} />

View File

@ -79,7 +79,7 @@ function OrgMemberManageModal({
}); });
}, },
{ {
successToast: t('common:common.Update Success'), successToast: t('common:update_success'),
onSuccess() { onSuccess() {
refetchOrgs(); refetchOrgs();
onClose(); onClose();
@ -193,10 +193,10 @@ function OrgMemberManageModal({
</ModalBody> </ModalBody>
<ModalFooter> <ModalFooter>
<Button variant={'whiteBase'} mr={3} onClick={onClose}> <Button variant={'whiteBase'} mr={3} onClick={onClose}>
{t('common:common.Close')} {t('common:Close')}
</Button> </Button>
<Button isLoading={isLoading} onClick={onUpdate}> <Button isLoading={isLoading} onClick={onUpdate}>
{t('common:common.Save')} {t('common:Save')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -51,7 +51,7 @@ function OrgMoveModal({
}); });
}} }}
> >
{t('common:common.Confirm')} {t('common:Confirm')}
</Button> </Button>
</ModalFooter> </ModalFooter>
</MyModal> </MyModal>

View File

@ -150,7 +150,7 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) {
{t('common:Name')} {t('common:Name')}
</Th> </Th>
<Th bg="myGray.100" borderRightRadius="6px"> <Th bg="myGray.100" borderRightRadius="6px">
{t('common:common.Action')} {t('common:Action')}
</Th> </Th>
</Tr> </Tr>
</Thead> </Thead>
@ -298,13 +298,13 @@ function OrgTable({ Tabs }: { Tabs: React.ReactNode }) {
)} )}
</HStack> </HStack>
{currentOrg?.path !== '' && ( {currentOrg?.path !== '' && (
<Box fontSize={'xs'}>{currentOrg?.description || t('common:common.no_intro')}</Box> <Box fontSize={'xs'}>{currentOrg?.description || t('common:no_intro')}</Box>
)} )}
<Divider my={'20px'} /> <Divider my={'20px'} />
<Box fontWeight={500} fontSize="sm" color="myGray.900"> <Box fontWeight={500} fontSize="sm" color="myGray.900">
{t('common:common.Action')} {t('common:Action')}
</Box> </Box>
{isTeamAdmin && ( {isTeamAdmin && (
<VStack gap="13px" w="100%"> <VStack gap="13px" w="100%">

Some files were not shown because too many files have changed in this diff Show More