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
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,
# you can ignore it and use your own matching rules as well
- "[^\\w\\d]t\\(['\"`]({key})['\"`]"
- "[^\\w\\d]commonT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]fileT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]workflowT\\(['\"`]({key})['\"`]"
- "[^\\w\\d]i18nT\\(['\"`]({key})['\"`]"
# 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 优化,避免大数据时超出内存限制。
2. 预加载 token 计算 worker避免主任务中并发创建导致线程阻塞。
## 🐛 修复
1. 应用列表/知识库列表,删除行权限展示问题。
2. 打开知识库搜索参数后,重排选项自动被打开。

1
env.d.ts vendored
View File

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

View File

@@ -19,32 +19,32 @@ export const DatasetTypeMap = {
[DatasetTypeEnum.dataset]: {
icon: 'core/dataset/commonDatasetOutline',
label: i18nT('dataset:common_dataset'),
collectionLabel: i18nT('common:common.File')
collectionLabel: i18nT('common:File')
},
[DatasetTypeEnum.websiteDataset]: {
icon: 'core/dataset/websiteDatasetOutline',
label: i18nT('dataset:website_dataset'),
collectionLabel: i18nT('common:common.Website')
collectionLabel: i18nT('common:Website')
},
[DatasetTypeEnum.externalFile]: {
icon: 'core/dataset/externalDatasetOutline',
label: i18nT('dataset:external_file'),
collectionLabel: i18nT('common:common.File')
collectionLabel: i18nT('common:File')
},
[DatasetTypeEnum.apiDataset]: {
icon: 'core/dataset/externalDatasetOutline',
label: i18nT('dataset:api_file'),
collectionLabel: i18nT('common:common.File')
collectionLabel: i18nT('common:File')
},
[DatasetTypeEnum.feishu]: {
icon: 'core/dataset/feishuDatasetOutline',
label: i18nT('dataset:feishu_dataset'),
collectionLabel: i18nT('common:common.File')
collectionLabel: i18nT('common:File')
},
[DatasetTypeEnum.yuque]: {
icon: 'core/dataset/yuqueDatasetOutline',
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
): Promise<DatasetConcatResponse> {
const {
params: { limit = 6000, ...quoteMap }
params: { limit = 5000, ...quoteMap }
} = props as DatasetConcatProps;
const quoteList = Object.values(quoteMap).filter((list) => Array.isArray(list));

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -5,7 +5,7 @@ import { isProduction } from '@fastgpt/global/common/system/constants';
export const useBeforeunload = (props?: { callback?: () => any; tip?: string }) => {
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(() => {
const listen = isProduction

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -26,22 +26,19 @@
"Name": "Name",
"None": "None",
"Operation": "Operation",
"Rename": "Rename",
"Required_input": "Required",
"Resume": "Resume",
"Running": "Running",
"Select_all": "Select all",
"Submit": "Submit",
"UnKnow": "Unknown",
"Warning": "Warning",
"add_new": "Add New",
"add_new": "add_new",
"add_new_param": "Add new param",
"all_quotes": "All quotes",
"app.templateMarket.templateTags.Image_generation": "Image generation",
"app.templateMarket.templateTags.Office_services": "Office Services",
"app.templateMarket.templateTags.Roleplay": "role play",
"app.templateMarket.templateTags.Web_search": "Search online",
"app.templateMarket.templateTags.Writing": "Writing",
"templateTags.Image_generation": "Image generation",
"templateTags.Office_services": "Office Services",
"templateTags.Roleplay": "role play",
"templateTags.Web_search": "Search online",
"templateTags.Writing": "Writing",
"back": "Back",
"bill_already_processed": "Order has been processed",
"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.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/",
"common.Action": "Action",
"common.Add": "Add",
"common.Add New": "Add New",
"common.Add Success": "Added Successfully",
"common.Add_new_input": "Add new input",
"common.All": "All",
"common.Cancel": "Cancel",
"common.Choose": "Choose",
"common.Close": "Close",
"common.Code": "Code",
"common.Config": "Configuration",
"common.Confirm": "Confirm",
"common.Confirm Create": "Confirm Creation",
"common.Confirm Import": "Confirm Import",
"common.Confirm Move": "Move Here",
"common.Confirm Update": "Confirm Update",
"common.Confirm to leave the page": "Confirm to Leave This Page?",
"common.Continue_Adding": "Continue adding",
"common.Copy": "Copy",
"common.Copy Successful": "Copied Successfully",
"common.Create Failed": "Creation Failed",
"common.Create Success": "Created Successfully",
"common.Create Time": "Creation Time",
"common.Creating": "Creating",
"common.Custom Title": "Custom Title",
"common.Delete": "Delete",
"common.Delete Failed": "Deletion Failed",
"common.Delete Success": "Deleted Successfully",
"common.Delete Warning": "Deletion 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": "Expiration Time",
"common.File": "File",
"common.Finish": "Finish",
"common.FullScreen": "FullScreen",
"common.FullScreenLight": "FullScreenLight",
"common.Import": "Import",
"common.Import failed": "Import Failed",
"common.Import success": "Imported Successfully",
"common.Input": "Input",
"common.Input folder description": "Folder Description",
"common.Input name": "Enter a Name",
"common.Intro": "Introduction",
"common.Last Step": "Previous",
"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 Data Available",
"common.Name": "Name",
"common.Next Step": "Next",
"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": "Parameters",
"common.Parse": "Analysis",
"common.Password inconsistency": "Passwords Do Not Match",
"common.Permission": "Permission",
"common.Permission_tip": "Individual permissions are greater than group permissions",
"common.Please Input Name": "Please Enter a Name",
"common.Preview": "Preview",
"common.Read document": "Read Document",
"common.Read intro": "Read Introduction",
"common.Remove": "Remove",
"common.Rename": "Rename",
"common.Request Error": "Request Error",
"common.Reset": "Reset",
"common.Restart": "Restart",
"common.Role": "Permission",
"common.Root folder": "Root Folder",
"common.Run": "Run",
"common.Save": "Save",
"common.Save Failed": "Save Failed",
"common.Save Success": "Saved Successfully",
"common.Save_and_exit": "Save and Exit",
"common.Search": "Search",
"common.Select File Failed": "File Selection Failed",
"common.Select template": "Select Template",
"common.Set Avatar": "Click to Set Avatar",
"common.Set Name": "Enter a Name",
"common.Setting": "Setting",
"common.Status": "Status",
"common.Submit failed": "Submission Failed",
"common.Success": "Success",
"common.Sync success": "Synced Successfully",
"common.Team": "Team",
"common.Team Tags Set": "Tags",
"common.Un used": "Unused",
"common.UnKnow": "Unknown",
"common.UnKnow Source": "Unknown Source",
"common.Unlimited": "Unlimited",
"common.Update": "Update",
"common.Update Failed": "Update Failed",
"common.Update Success": "Updated Successfully",
"common.Username": "Username",
"common.Waiting": "Waiting",
"common.Warning": "Warning",
"common.Website": "Website",
"common.all_result": "Full Results",
"common.avatar.Select Avatar": "Click to Select Avatar",
"common.avatar.Select Failed": "Avatar Selection Failed",
"common.base_config": "Basic Configuration",
"common.choosable": "Choosable",
"common.confirm.Common Tip": "Confirm",
"common.copy_to_clipboard": "Copy to Clipboard",
"common.course.Read Course": "Read Course",
"common.empty.Common Tip": "No Data Available",
"common.error.Select avatar failed": "Avatar Selection Failed",
"common.error.unKnow": "An Unexpected Error Occurred",
"common.export_to_json": "Export to JSON",
"common.failed": "Failed",
"common.folder.Drag Tip": "Click to Drag",
"common.folder.Move Success": "Moved Successfully",
"common.folder.Move to": "Move to",
"common.folder.No Folder": "No Subdirectories, Place Here",
"common.folder.Open folder": "Open Folder",
"common.folder.Root Path": "Root",
"common.folder.empty": "No More Items in This Directory",
"common.folder.open_dataset": "Open Dataset",
"common.have_done": "Completed",
"common.input.Repeat Value": "Duplicate Value",
"common.is_requesting": "Requesting...",
"common.jsonEditor.Parse error": "Possible JSON Error, Please Check Carefully",
"common.json_config": "JSON Configuration",
"common.link.UnValid": "Invalid Link",
"common.month": "Month",
"common.name_is_empty": "Name Cannot Be Empty",
"common.no_intro": "No Introduction Available",
"common.not_support": "Not Supported",
"common.page_center": "Page Center",
"common.redo_tip": "Redo ctrl shift z",
"common.redo_tip_mac": "Redo ⌘ shift z",
"common.request_end": "All Loaded",
"common.request_more": "Click to Load More",
"common.speech.error tip": "Speech to Text Failed",
"common.speech.not support": "Your Browser Does Not Support Speech Input",
"common.submit_success": "Submitted Successfully",
"common.submitted": "Submitted",
"common.support": "Support",
"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 ⌘ +",
"Action": "Action",
"Add": "Add",
"Add Success": "Added Successfully",
"Add_new_input": "Add new input",
"All": "All",
"Cancel": "Cancel",
"Choose": "Choose",
"Close": "Close",
"Code": "Code",
"Config": "Configuration",
"Confirm": "Confirm",
"comfirn_create": "Confirm Creation",
"comfirm_import": "comfirm_import",
"confirm_move": "Move Here",
"confirm_update": "confirm_update",
"comfirm_leave_page": "Confirm to Leave This Page?",
"Continue_Adding": "Continue adding",
"Copy": "Copy",
"Copy Successful": "Copied Successfully",
"create_failed": "Creation Failed",
"create_success": "Created Successfully",
"create_time": "Creation Time",
"Creating": "Creating",
"custom_title": "Custom Title",
"Delete": "Delete",
"delete_failed": "Deletion Failed",
"delete_success": "Deleted Successfully",
"delete_warning": "Deletion Warning",
"delete_folder": "Delete Folder",
"Detail": "Detail",
"Documents": "Documents",
"Done": "Done",
"Edit": "Edit",
"Error": "Error",
"Exit": "Exit",
"exit_directly": "exit_directly",
"expired_time": "Expiration Time",
"File": "File",
"Finish": "Finish",
"FullScreen": "FullScreen",
"FullScreenLight": "FullScreenLight",
"Import": "Import",
"import_failed": "Import Failed",
"import_success": "Imported Successfully",
"Input": "Input",
"folder_description": "Folder Description",
"input_name": "Enter a Name",
"Intro": "Introduction",
"last_step": "Previous",
"last_use_time": "Last Use Time",
"load_failed": "load_failed",
"Loading": "Loading...",
"More": "More",
"no_select_data": "No Data Available",
"next_step": "Next",
"no_more_data": "No More Data",
"not_open": "Not Open",
"OK": "OK",
"Open": "Open",
"Other": "Other",
"Output": "Output",
"Params": "Parameters",
"Parse": "Analysis",
"psw_inconsistency": "Passwords Do Not Match",
"Permission": "Permission",
"Permission_tip": "Individual permissions are greater than group permissions",
"Please Input Name": "Please Enter a Name",
"Preview": "Preview",
"read_doc": "Read Document",
"Remove": "Remove",
"Rename": "Rename",
"request_error": "request_error",
"Reset": "Reset",
"Restart": "Restart",
"Role": "Permission",
"root_folder": "Root Folder",
"Run": "Run",
"Save": "Save",
"save_failed": "save_failed",
"save_success": "Saved Successfully",
"Save_and_exit": "Save and Exit",
"Search": "Search",
"select_file_failed": "File Selection Failed",
"select_template": "Select Template",
"set_avatar": "Click to set_avatar",
"Setting": "Setting",
"Status": "Status",
"submit_failed": "Submission Failed",
"Success": "Success",
"sync_success": "Synced Successfully",
"Team": "Team",
"un_used": "Unused",
"UnKnow": "Unknown",
"unknow_source": "Unknown Source",
"Unlimited": "Unlimited",
"Update": "Update",
"update_failed": "Update Failed",
"update_success": "Updated Successfully",
"Username": "Username",
"Waiting": "Waiting",
"Warning": "Warning",
"Website": "Website",
"all_result": "Full Results",
"click_select_avatar": "Click to Select Avatar",
"base_config": "Basic Configuration",
"choosable": "Choosable",
"action_confirm": "Confirm",
"copy_to_clipboard": "Copy to Clipboard",
"read_course": "Read Course",
"error.unKnow": "An Unexpected Error Occurred",
"export_to_json": "Export to JSON",
"failed": "Failed",
"click_drag_tip": "Click to Drag",
"move_success": "Moved Successfully",
"move_to": "Move to",
"no_child_folder": "No Subdirectories, Place Here",
"open_folder": "Open Folder",
"folder.empty": "No More Items in This Directory",
"folder.open_dataset": "Open Dataset",
"have_done": "Completed",
"input.Repeat Value": "Duplicate Value",
"is_requesting": "Requesting...",
"jsonEditor.Parse error": "Possible JSON Error, Please Check Carefully",
"json_config": "JSON Configuration",
"link.UnValid": "Invalid Link",
"month": "Month",
"name_is_empty": "Name Cannot Be Empty",
"no_intro": "No Introduction Available",
"not_support": "Not Supported",
"page_center": "Page Center",
"redo_tip": "Redo ctrl shift z",
"redo_tip_mac": "Redo ⌘ shift z",
"request_end": "All Loaded",
"request_more": "Click to Load More",
"speech.error tip": "Speech to Text Failed",
"speech.not support": "Your Browser Does Not Support Speech Input",
"submit_success": "Submitted Successfully",
"submitted": "Submitted",
"support": "Support",
"system.Help Chatbot": "Help Chatbot",
"system.Use Helper": "Use Helper",
"ui.textarea.Magnifying": "Magnifying",
"undo_tip": "Undo ctrl z",
"undo_tip_mac": "Undo ⌘ z ",
"upload_file": "Upload File",
"zoomin_tip": "Zoom Out ctrl -",
"zoomin_tip_mac": "Zoom Out ⌘ -",
"zoomout_tip": "Zoom In ctrl +",
"zoomout_tip_mac": "Zoom In ⌘ +",
"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.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.retry": "Regenerate",
"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.Collection": "Dataset",
"core.dataset.Create dataset": "Create a {{name}}",
@@ -573,21 +560,15 @@
"core.dataset.externalFile": "External File Library",
"core.dataset.file": "File",
"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 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.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 text": "Custom Text",
"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.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.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.import_success": "Import Successful, Please Wait for Training",
"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.Local file": "Local File",
@@ -595,7 +576,6 @@
"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.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 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",
@@ -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_description": "Description",
"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.laf.Select laf function": "Select LAF Function",
"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_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.",
"tag.Add New": "Add New",
"tag.Add_new_tag": "Add New Tag",
"tag.add_new": "add_new",
"tag.Add_new_tag": "add_new Tag",
"tag.Edit_tag": "Edit Tag",
"tag.add": "Create",
"tag.cancel": "Cancel",

View File

@@ -14,7 +14,7 @@
"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)",
"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.desc": "Connect to WeChat Official Account directly via API",
"official_account.edit_modal_title": "Edit WeChat Official Account Integration",

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

61
pnpm-lock.yaml generated
View File

@@ -34,7 +34,7 @@ importers:
version: 10.1.4(socks@2.8.4)
next-i18next:
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:
specifier: 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)
'@chakra-ui/next-js':
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':
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)
@@ -394,7 +394,7 @@ importers:
version: 4.17.21
next-i18next:
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:
specifier: ^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)
'@chakra-ui/next-js':
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':
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)
@@ -519,9 +519,6 @@ importers:
echarts-gl:
specifier: 2.0.9
version: 2.0.9(echarts@5.4.1)
formidable:
specifier: ^2.1.1
version: 2.1.2
framer-motion:
specifier: 9.1.7
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)
next-i18next:
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:
specifier: ^0.2.0
version: 0.2.0
@@ -628,9 +625,6 @@ importers:
'@svgr/webpack':
specifier: ^6.5.1
version: 6.5.1
'@types/formidable':
specifier: ^2.0.5
version: 2.0.6
'@types/js-yaml':
specifier: ^4.0.9
version: 4.0.9
@@ -665,8 +659,8 @@ importers:
specifier: 8.56.0
version: 8.56.0
eslint-config-next:
specifier: 14.2.24
version: 14.2.24(eslint@8.56.0)(typescript@5.8.2)
specifier: 14.2.26
version: 14.2.26(eslint@8.56.0)(typescript@5.8.2)
typescript:
specifier: ^5.1.3
version: 5.8.2
@@ -2589,8 +2583,8 @@ packages:
'@next/env@14.2.26':
resolution: {integrity: sha512-vO//GJ/YBco+H7xdQhzJxF7ub3SUwft76jwaeOyVVQFHCi5DCnkP16WHB+JBylo4vOKPoZBlR94Z8xBxNBdNJA==}
'@next/eslint-plugin-next@14.2.24':
resolution: {integrity: sha512-FDL3qs+5DML0AJz56DCVr+KnFYivxeAX73En8QbPw9GjJZ6zbfvqDy+HrarHFzbsIASn7y8y5ySJ/lllSruNVQ==}
'@next/eslint-plugin-next@14.2.26':
resolution: {integrity: sha512-SPEj1O5DAVTPaWD9XPupelfT2APNIgcDYD2OzEm328BEmHaglhmYNUvxhzfJYDr12AgAfW4V3UHSV93qaeELJA==}
'@next/swc-darwin-arm64@14.2.26':
resolution: {integrity: sha512-zDJY8gsKEseGAxG+C2hTMT0w9Nk9N1Sk1qV7vXYz9MEiyRoF5ogQX2+vplyUMIfygnjn9/A04I6yrUTRTuRiyQ==}
@@ -3379,9 +3373,6 @@ packages:
'@types/express@5.0.1':
resolution: {integrity: sha512-UZUw8vjpWFXuDnjFTh7/5c2TWDlQqeXHi6hcN7F2XSVT5P+WmUnnbFS3KA6Jnc6IsEqI2qCVu2bK0R0J4A8ZQQ==}
'@types/formidable@2.0.6':
resolution: {integrity: sha512-L4HcrA05IgQyNYJj6kItuIkXrInJvsXTPC5B1i64FggWKKqSL+4hgt7asiSNva75AoLQjq29oPxFfU4GAQ6Z2w==}
'@types/geojson@7946.0.16':
resolution: {integrity: sha512-6C8nqWur3j98U6+lXDfTUWIfgvZU+EumvpHKcYjujKH7woYyLj2sUmff0tRhrqM7BohUw7Pz3ZB1jj2gW9Fvmg==}
@@ -5242,8 +5233,8 @@ packages:
resolution: {integrity: sha512-/veY75JbMK4j1yjvuUxuVsiS/hr/4iHs9FTT6cgTexxdE0Ly/glccBAkloH/DofkjRbZU3bnoj38mOmhkZ0lHw==}
engines: {node: '>=12'}
eslint-config-next@14.2.24:
resolution: {integrity: sha512-9r1ujK++Pgpfixr5+DQ6rXDIQmSzuDbBlAQYMkJRMz9KWqovX7ESUTC0EAyBfOCl3ubkoeplw+aoXDuih3A8fw==}
eslint-config-next@14.2.26:
resolution: {integrity: sha512-KZNh1xvWG1ZDFD2f2WkvvnMpp7Sjsl6xJXCsvfEe8GH1FLXn6GtXo7lY9S8xDcn6oBWmKA0hSrlrp1DNQ9QDnQ==}
peerDependencies:
eslint: ^7.23.0 || ^8.0.0
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)
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:
'@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
@@ -12092,7 +12083,7 @@ snapshots:
'@next/env@14.2.26': {}
'@next/eslint-plugin-next@14.2.24':
'@next/eslint-plugin-next@14.2.26':
dependencies:
glob: 10.3.10
@@ -12837,10 +12828,6 @@ snapshots:
'@types/express-serve-static-core': 5.0.6
'@types/serve-static': 1.15.7
'@types/formidable@2.0.6':
dependencies:
'@types/node': 20.17.24
'@types/geojson@7946.0.16': {}
'@types/graceful-fs@4.1.9':
@@ -15081,16 +15068,16 @@ snapshots:
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:
'@next/eslint-plugin-next': 14.2.24
'@next/eslint-plugin-next': 14.2.26
'@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/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.2)
eslint: 8.56.0
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-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-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@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-hooks: 5.0.0-canary-7118f5dd7-20230705(eslint@8.56.0)
@@ -15109,7 +15096,7 @@ snapshots:
transitivePeerDependencies:
- 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:
'@nolyfill/is-core-module': 1.0.39
debug: 4.4.0(supports-color@5.5.0)
@@ -15120,22 +15107,22 @@ snapshots:
stable-hash: 0.0.5
tinyglobby: 0.2.12
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:
- 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:
debug: 3.2.7
optionalDependencies:
'@typescript-eslint/parser': 6.21.0(eslint@8.56.0)(typescript@5.8.2)
eslint: 8.56.0
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:
- 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:
'@rtsao/scc': 1.1.0
array-includes: 3.1.8
@@ -15146,7 +15133,7 @@ snapshots:
doctrine: 2.1.0
eslint: 8.56.0
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
is-core-module: 2.16.1
is-glob: 4.0.3
@@ -18092,7 +18079,7 @@ snapshots:
transitivePeerDependencies:
- 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:
'@babel/runtime': 7.26.10
'@types/hoist-non-react-statics': 3.3.6

View File

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

View File

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

View File

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

View File

@@ -328,7 +328,7 @@ const CodeLight = ({
<Box flex={1}>{codeBoxName}</Box>
<Flex cursor={'pointer'} onClick={() => copyData(String(children))} alignItems={'center'}>
<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>
<SyntaxHighlighter style={codeLight as any} language={match?.[1]} PreTag="pre">

View File

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

View File

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

View File

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

View File

@@ -74,7 +74,7 @@ const MyTextarea = React.forwardRef<HTMLTextAreaElement, Props>(function MyTexta
onClose();
}}
>
{t('common:common.Confirm')}
{t('common:Confirm')}
</Button>
</ModalFooter>
</MyModal>
@@ -134,7 +134,7 @@ const Editor = React.memo(function Editor({
cursor={'pointer'}
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'} />
</MyTooltip>
</Box>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -1,7 +1,6 @@
import { Box, Flex } from '@chakra-ui/react';
import React from 'react';
import MyIcon from '@fastgpt/web/components/common/Icon';
import { useI18n } from '@/web/context/I18n';
import { useRequest2 } from '@fastgpt/web/hooks/useRequest';
import { queryChatInputGuideList } from '@/web/core/chat/inputGuide/api';
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
{...controlIconStyle}
name={'copy'}
@@ -100,7 +100,7 @@ const ChatController = ({
/>
</MyTooltip>
)}
<MyTooltip label={t('common:common.Delete')}>
<MyTooltip label={t('common:Delete')}>
<MyIcon
{...controlIconStyle}
name={'delete'}
@@ -132,7 +132,7 @@ const ChatController = ({
}
if (isPlayingChat && audioLoading) {
return (
<MyTooltip label={t('common:common.Loading')}>
<MyTooltip label={t('common:Loading')}>
<MyIcon {...controlIconStyle} name={'common/loading'} />
</MyTooltip>
);

View File

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

View File

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

View File

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

View File

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

View File

@@ -841,7 +841,7 @@ const ChatBox = ({
return {
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]);

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>
</Flex>
)}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -239,7 +239,7 @@ function PermissionSelect({
}}
>
<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>
</>
)}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -158,7 +158,7 @@ const EditChannelModal = ({
onSuccess();
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
}
);
@@ -285,10 +285,10 @@ const EditChannelModal = ({
</ModalBody>
<ModalFooter>
<Button variant={'outline'} onClick={onClose} mr={4}>
{t('common:common.Cancel')}
{t('common:Cancel')}
</Button>
<Button variant={'primary'} onClick={handleSubmit(onSubmit)}>
{isEdit ? t('common:common.Update') : t('common:new_create')}
{isEdit ? t('common:Update') : t('common:new_create')}
</Button>
</ModalFooter>
</MyModal>

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@@ -180,10 +180,10 @@ export function ChangeOwnerModal({
<ModalFooter>
<HStack>
<Button onClick={onClose} variant={'whiteBase'}>
{t('common:common.Cancel')}
{t('common:Cancel')}
</Button>
<Button isLoading={loading} isDisabled={!selectedMember} onClick={onConfirm}>
{t('common:common.Confirm')}
{t('common:Confirm')}
</Button>
</HStack>
</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:member')}</Th>
<Th bg="myGray.100" borderRightRadius="6px">
{t('common:common.Action')}
{t('common:Action')}
</Th>
</Tr>
</Thead>
@@ -185,7 +185,7 @@ function MemberTable({ Tabs }: { Tabs: React.ReactNode }) {
type: 'primary' as MenuItemType
},
{
label: t('common:common.Delete'),
label: t('common:Delete'),
icon: 'delete',
onClick: () => {
openDeleteGroupModal(() => delDeleteGroup(group._id))();

View File

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

View File

@@ -27,7 +27,7 @@ function Invite({ invitelinkid }: { invitelinkid: string }) {
() => postAcceptInvitationLink(invitelinkid),
{
manual: true,
successToast: t('common:common.Success'),
successToast: t('common:Success'),
onSuccess: async () => {
onSwitchTeam(invitationInfo!.teamId);
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:invited')}</Th>
<Th bgColor="myGray.100" borderRightRadius="6px">
{t('common:common.Action')}
{t('common:Action')}
</Th>
</Tr>
</Thead>
@@ -213,7 +213,7 @@ const InviteModal = ({ onClose }: { onClose: () => void }) => {
</Box>
<Flex gap={2} mt={2} justifyContent={'flex-end'}>
<Button variant="outline" onClick={onClosePopover}>
{t('common:common.Cancel')}
{t('common:Cancel')}
</Button>
<Button
isLoading={forbiding}

View File

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

View File

@@ -62,7 +62,7 @@ function OrgInfoModal({
});
},
{
successToast: t('common:common.Create Success'),
successToast: t('common:create_success'),
onSuccess: () => {
onClose();
onSuccess();
@@ -81,7 +81,7 @@ function OrgInfoModal({
});
},
{
successToast: t('common:common.Update Success'),
successToast: t('common:update_success'),
onSuccess: () => {
onClose();
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>
</ModalFooter>
<AvatarSelect onSelect={onSelectAvatar} />

View File

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

View File

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

View File

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

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