mirror of
https://github.com/langgenius/dify.git
synced 2026-09-05 00:31:19 +08:00
fix(dataset): align New RAG document views
This commit is contained in:
parent
e5d4f37469
commit
b4a8f7f180
@ -439,7 +439,8 @@ describe('DocumentDetailPage', () => {
|
||||
queryClient.invalidateQueries.mockResolvedValue(undefined)
|
||||
})
|
||||
|
||||
it('loads the document, revisions, chunks, and task status through generated contracts', () => {
|
||||
it('loads the document, revisions, chunks, and task status through generated contracts', async () => {
|
||||
const user = userEvent.setup()
|
||||
render(<DocumentDetailPage documentId="document-1" knowledgeSpaceId="space-1" />)
|
||||
|
||||
expect(documentOptions).toHaveBeenCalledWith(
|
||||
@ -466,6 +467,19 @@ describe('DocumentDetailPage', () => {
|
||||
params: { control_space_id: 'space-1' },
|
||||
query: { limit: 100 },
|
||||
})
|
||||
await user.click(
|
||||
screen.getByRole('button', {
|
||||
name: /dataset\.newKnowledge\.documentActions/,
|
||||
}),
|
||||
)
|
||||
expect(screen.getAllByRole('menuitem')).toHaveLength(5)
|
||||
expect(screen.getByRole('menuitem', { name: 'common.operation.rename' })).toBeInTheDocument()
|
||||
expect(
|
||||
screen.queryByRole('menuitem', { name: 'dataset.newKnowledge.reindexDocument' }),
|
||||
).not.toBeInTheDocument()
|
||||
expect(
|
||||
screen.getByRole('menuitem', { name: 'dataset.newKnowledge.removeSource' }),
|
||||
).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('does not construct a chunks request while the document is loading', () => {
|
||||
|
||||
@ -692,8 +692,16 @@ describe('DocumentsPage', () => {
|
||||
})
|
||||
expect(rowActions).toBeEnabled()
|
||||
await user.click(rowActions)
|
||||
const rowMenuItems = await screen.findAllByRole('menuitem')
|
||||
expect(rowMenuItems).toHaveLength(6)
|
||||
expect(rowMenuItems[0]).toHaveAccessibleName('common.operation.rename')
|
||||
expect(rowMenuItems[1]).toHaveAccessibleName('dataset.newKnowledge.reindexDocument')
|
||||
expect(rowMenuItems[2]).toHaveAccessibleName('dataset.newKnowledge.disableSource')
|
||||
expect(rowMenuItems[3]).toHaveAccessibleName('dataset.batchAction.archive')
|
||||
expect(rowMenuItems[4]).toHaveAccessibleName('dataset.newKnowledge.downloadDocuments')
|
||||
expect(rowMenuItems[5]).toHaveAccessibleName('dataset.newKnowledge.removeSource')
|
||||
await user.click(
|
||||
await screen.findByRole('menuitem', { name: 'dataset.newKnowledge.downloadDocuments' }),
|
||||
screen.getByRole('menuitem', { name: 'dataset.newKnowledge.downloadDocuments' }),
|
||||
)
|
||||
expect(toastMock.info).toHaveBeenCalledWith('dataset.newKnowledge.documentActionsUnavailable')
|
||||
|
||||
@ -816,6 +824,30 @@ describe('DocumentsPage', () => {
|
||||
).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('opens the upload form when files are dropped on a populated document page', () => {
|
||||
documentsQuery.data = { pages: [{ items: [document()] }] }
|
||||
const droppedFile = new File(['# handbook'], 'handbook.md', { type: 'text/markdown' })
|
||||
|
||||
render(<DocumentsPage knowledgeSpaceId="space-1" />)
|
||||
|
||||
const documentSurface = screen
|
||||
.getByRole('heading', { name: 'dataset.newKnowledge.documents' })
|
||||
.closest('section')
|
||||
expect(documentSurface).not.toBeNull()
|
||||
fireEvent.drop(documentSurface!, {
|
||||
dataTransfer: {
|
||||
dropEffect: 'copy',
|
||||
files: [droppedFile],
|
||||
types: ['Files'],
|
||||
},
|
||||
})
|
||||
|
||||
expect(
|
||||
screen.getByRole('heading', { name: 'dataset.newKnowledge.addDocument' }),
|
||||
).toBeInTheDocument()
|
||||
expect(screen.getByText('handbook.md')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('keeps direct-upload actions unavailable until the deployment is verified', () => {
|
||||
systemFeaturesStateMock.uploadEnabled = false
|
||||
|
||||
@ -1884,7 +1916,7 @@ describe('DocumentsPage', () => {
|
||||
await waitFor(() => expect(screen.getByRole('table').parentElement).toHaveFocus())
|
||||
})
|
||||
|
||||
it('re-indexes selected documents and disables backend-dependent actions', async () => {
|
||||
it('re-indexes selected documents and keeps the designed bulk action order', async () => {
|
||||
const user = userEvent.setup()
|
||||
documentsQuery.data = {
|
||||
pages: [{ items: [document({ id: 'one', title: 'One.pdf' }), document({ id: 'two' })] }],
|
||||
@ -1908,25 +1940,24 @@ describe('DocumentsPage', () => {
|
||||
expect(reindex).toBeEnabled()
|
||||
const orderedActions = within(actions).getAllByRole('button')
|
||||
expect(orderedActions[0]).toHaveAccessibleName('dataset.newKnowledge.reindexDocuments')
|
||||
expect(orderedActions[1]).toHaveAccessibleName('dataset.newKnowledge.clearDocumentSelection')
|
||||
expect(actions.firstElementChild).toBe(orderedActions[0])
|
||||
expect(orderedActions[1]!.nextElementSibling).toHaveTextContent(
|
||||
expect(orderedActions[1]).toHaveAccessibleName('dataset.newKnowledge.downloadDocuments')
|
||||
expect(orderedActions[2]).toHaveAccessibleName('dataset.newKnowledge.deleteDocuments')
|
||||
expect(orderedActions[3]).toHaveAccessibleName('dataset.newKnowledge.clearDocumentSelection')
|
||||
expect(actions.firstElementChild).toHaveTextContent(
|
||||
'dataset.newKnowledge.documentsSelected:{"count":1}',
|
||||
)
|
||||
expect(
|
||||
within(actions).getByText(
|
||||
'dataset.newKnowledge.downloadDocuments / dataset.newKnowledge.deleteDocuments · dataset.cornerLabel.unavailable',
|
||||
),
|
||||
).toBeVisible()
|
||||
const download = within(actions).getByRole('button', {
|
||||
name: 'dataset.newKnowledge.downloadDocuments',
|
||||
})
|
||||
const remove = within(actions).getByRole('button', {
|
||||
name: 'dataset.newKnowledge.deleteDocuments',
|
||||
})
|
||||
expect(download).toBeDisabled()
|
||||
expect(remove).toBeDisabled()
|
||||
expect(toastMock.info).not.toHaveBeenCalled()
|
||||
expect(download).toBeEnabled()
|
||||
expect(remove).toBeEnabled()
|
||||
await user.click(download)
|
||||
await user.click(remove)
|
||||
expect(toastMock.info).toHaveBeenCalledTimes(2)
|
||||
expect(toastMock.info).toHaveBeenCalledWith('dataset.newKnowledge.documentActionsUnavailable')
|
||||
await user.dblClick(reindex)
|
||||
expect(reindexMutation.mutateAsync).toHaveBeenCalledOnce()
|
||||
expect(reindexMutation.mutateAsync).toHaveBeenCalledWith({
|
||||
|
||||
@ -96,6 +96,25 @@ describe('KnowledgeSpaceShell', () => {
|
||||
expect(screen.getByText('source content')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('lets users collapse and restore the knowledge detail sidebar', async () => {
|
||||
const user = userEvent.setup()
|
||||
queryMock.data = {
|
||||
control_space_id: 'space-1',
|
||||
state: 'active',
|
||||
technical_summary: { name: 'Support knowledge' },
|
||||
}
|
||||
|
||||
render(<KnowledgeSpaceShell knowledgeSpaceId="space-1">source content</KnowledgeSpaceShell>)
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'layout.sidebar.collapseSidebar' }))
|
||||
expect(screen.getByRole('button', { name: 'layout.sidebar.expandSidebar' })).toBeInTheDocument()
|
||||
|
||||
await user.click(screen.getByRole('button', { name: 'layout.sidebar.expandSidebar' }))
|
||||
expect(
|
||||
screen.getByRole('button', { name: 'layout.sidebar.collapseSidebar' }),
|
||||
).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('polls provisioning spaces without mounting data-plane children', () => {
|
||||
queryMock.data = {
|
||||
control_space_id: 'space-1',
|
||||
|
||||
69
web/features/new-rag/document-actions-dropdown.tsx
Normal file
69
web/features/new-rag/document-actions-dropdown.tsx
Normal file
@ -0,0 +1,69 @@
|
||||
'use client'
|
||||
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuTrigger,
|
||||
} from '@langgenius/dify-ui/dropdown-menu'
|
||||
import { toast } from '@langgenius/dify-ui/toast'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
|
||||
export function DocumentActionsDropdown({
|
||||
className,
|
||||
documentTitle,
|
||||
showReindex = true,
|
||||
}: {
|
||||
className?: string
|
||||
documentTitle: string
|
||||
showReindex?: boolean
|
||||
}) {
|
||||
const { t } = useTranslation('dataset')
|
||||
const { t: tCommon } = useTranslation('common')
|
||||
const unavailable = () => toast.info(t(($) => $['newKnowledge.documentActionsUnavailable']))
|
||||
|
||||
return (
|
||||
<DropdownMenu modal={false}>
|
||||
<DropdownMenuTrigger
|
||||
aria-label={t(($) => $['newKnowledge.documentActions'], { name: documentTitle })}
|
||||
className={cn(
|
||||
'ml-auto flex size-7 items-center justify-end rounded-md text-text-tertiary outline-hidden hover:bg-state-base-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid',
|
||||
className,
|
||||
)}
|
||||
>
|
||||
<span aria-hidden className="i-ri-more-fill size-4" />
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent placement="bottom-end" sideOffset={4} popupClassName="w-[200px]">
|
||||
<DropdownMenuItem className="gap-2 px-3" onClick={unavailable}>
|
||||
<span aria-hidden className="i-ri-edit-line size-4" />
|
||||
{tCommon(($) => $['operation.rename'])}
|
||||
</DropdownMenuItem>
|
||||
{showReindex && (
|
||||
<DropdownMenuItem className="gap-2 px-3" onClick={unavailable}>
|
||||
<span aria-hidden className="i-ri-loop-left-line size-4" />
|
||||
{t(($) => $['newKnowledge.reindexDocument'])}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
<DropdownMenuItem className="gap-2 px-3" onClick={unavailable}>
|
||||
<span aria-hidden className="i-ri-indeterminate-circle-line size-4" />
|
||||
{t(($) => $['newKnowledge.disableSource'])}
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem className="gap-2 px-3" onClick={unavailable}>
|
||||
<span aria-hidden className="i-ri-archive-2-line size-4" />
|
||||
{t(($) => $['batchAction.archive'])}
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem className="gap-2 px-3" onClick={unavailable}>
|
||||
<span aria-hidden className="i-ri-download-line size-4" />
|
||||
{t(($) => $['newKnowledge.downloadDocuments'])}
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuItem variant="destructive" className="gap-2 px-3" onClick={unavailable}>
|
||||
<span aria-hidden className="i-ri-delete-bin-line size-4" />
|
||||
{t(($) => $['newKnowledge.removeSource'])}
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
)
|
||||
}
|
||||
@ -13,6 +13,7 @@ import {
|
||||
import { useEffect, useRef } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import Link from '@/next/link'
|
||||
import { DocumentActionsDropdown } from './document-actions-dropdown'
|
||||
|
||||
export function DocumentDetailHeader({
|
||||
backPath,
|
||||
@ -126,6 +127,7 @@ export function DocumentDetailHeader({
|
||||
<Button
|
||||
aria-busy={reindexing || taskIsActive}
|
||||
aria-describedby={reindexDisabledReasonId}
|
||||
className="gap-1 pl-3"
|
||||
disabled={reindexDisabled}
|
||||
loading={reindexing}
|
||||
onClick={onReindex}
|
||||
@ -133,6 +135,11 @@ export function DocumentDetailHeader({
|
||||
<span aria-hidden className="i-ri-refresh-line size-4" />
|
||||
{t(($) => $['newKnowledge.reindexDocument'])}
|
||||
</Button>
|
||||
<DocumentActionsDropdown
|
||||
className="size-8 justify-center"
|
||||
documentTitle={document.title}
|
||||
showReindex={false}
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
{isFetchNextRevisionPageError && (
|
||||
|
||||
@ -6,13 +6,6 @@ import type { LogicalDocument } from './document-models'
|
||||
import { Button } from '@langgenius/dify-ui/button'
|
||||
import { Checkbox } from '@langgenius/dify-ui/checkbox'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import {
|
||||
DropdownMenu,
|
||||
DropdownMenuContent,
|
||||
DropdownMenuItem,
|
||||
DropdownMenuSeparator,
|
||||
DropdownMenuTrigger,
|
||||
} from '@langgenius/dify-ui/dropdown-menu'
|
||||
import {
|
||||
Select,
|
||||
SelectContent,
|
||||
@ -29,6 +22,7 @@ import Loading from '@/app/components/base/loading'
|
||||
import { SearchInput } from '@/app/components/base/search-input'
|
||||
import { useFormatTimeFromNow } from '@/hooks/use-format-time-from-now'
|
||||
import Link from '@/next/link'
|
||||
import { DocumentActionsDropdown } from './document-actions-dropdown'
|
||||
import { sourceName } from './document-model'
|
||||
|
||||
export type DocumentFilter = DocumentDisplayStatus | 'all'
|
||||
@ -44,6 +38,14 @@ const statusIconClass: Record<DocumentDisplayStatus, string> = {
|
||||
disabled: 'i-ri-indeterminate-circle-line text-text-tertiary',
|
||||
}
|
||||
|
||||
const statusTextClass: Record<DocumentDisplayStatus, string> = {
|
||||
ready: 'font-normal text-text-secondary',
|
||||
queued: 'font-normal text-text-tertiary',
|
||||
processing: 'font-medium text-text-accent',
|
||||
failed: 'font-medium text-text-destructive',
|
||||
disabled: 'font-medium text-text-tertiary',
|
||||
}
|
||||
|
||||
function TaskTrigger({
|
||||
activeTaskCount,
|
||||
attentionTaskBadge,
|
||||
@ -62,7 +64,12 @@ function TaskTrigger({
|
||||
const { t } = useTranslation('dataset')
|
||||
return (
|
||||
<>
|
||||
<Button aria-label={tasksButtonLabel} data-has-error={hasTaskError} onClick={onOpenTasks}>
|
||||
<Button
|
||||
aria-label={tasksButtonLabel}
|
||||
className="gap-1 pl-3"
|
||||
data-has-error={hasTaskError}
|
||||
onClick={onOpenTasks}
|
||||
>
|
||||
<span
|
||||
aria-hidden
|
||||
className={cn(
|
||||
@ -126,13 +133,8 @@ const DocumentRow = memo(
|
||||
const updatedTime = Date.parse(document.updatedAt)
|
||||
|
||||
return (
|
||||
<tr
|
||||
className={cn(
|
||||
'border-t border-divider-subtle',
|
||||
status === 'disabled' && !statusPending && 'opacity-60',
|
||||
)}
|
||||
>
|
||||
<td className="w-10 py-3 pr-3">
|
||||
<tr className="h-12 border-t border-divider-subtle">
|
||||
<td className="w-10 align-middle">
|
||||
<Checkbox
|
||||
checked={selected}
|
||||
disabled={selectionDisabled || status === 'disabled'}
|
||||
@ -141,7 +143,7 @@ const DocumentRow = memo(
|
||||
onCheckedChange={() => onSelectedChange(document.id)}
|
||||
/>
|
||||
</td>
|
||||
<td className="min-w-0 py-3 pr-3 sm:min-w-72 sm:pr-6">
|
||||
<td className="min-w-0 pr-3 align-middle sm:min-w-72 sm:pr-6">
|
||||
<div className="flex min-w-0 items-center gap-2.5">
|
||||
<span
|
||||
aria-hidden
|
||||
@ -149,19 +151,19 @@ const DocumentRow = memo(
|
||||
/>
|
||||
<Link
|
||||
id={titleId}
|
||||
className="truncate rounded system-xs-medium text-text-primary hover:text-text-accent focus-visible:ring-2 focus-visible:ring-state-accent-solid focus-visible:outline-hidden"
|
||||
className="truncate rounded text-[13px] leading-[17px] font-medium text-text-primary hover:text-text-accent focus-visible:ring-2 focus-visible:ring-state-accent-solid focus-visible:outline-hidden"
|
||||
href={documentHref}
|
||||
>
|
||||
{document.title}
|
||||
</Link>
|
||||
{revision !== undefined && (
|
||||
<span className="shrink-0 rounded border border-divider-regular px-1 system-2xs-medium text-text-tertiary">
|
||||
<span className="flex min-h-4 min-w-4 shrink-0 items-center justify-center rounded-[5px] border border-divider-regular px-1 system-2xs-medium text-text-tertiary">
|
||||
v{revision}
|
||||
</span>
|
||||
)}
|
||||
</div>
|
||||
</td>
|
||||
<td className="hidden w-52 py-3 pr-6 system-xs-regular text-text-secondary lg:table-cell">
|
||||
<td className="hidden w-[210px] pr-6 align-middle system-xs-regular text-text-secondary lg:table-cell">
|
||||
{sourcePending ? (
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<span
|
||||
@ -176,7 +178,7 @@ const DocumentRow = memo(
|
||||
</span>
|
||||
)}
|
||||
</td>
|
||||
<td className="w-24 py-3 pr-2 sm:w-56 sm:pr-6">
|
||||
<td className="w-24 pr-2 align-middle sm:w-[240px] sm:pr-6">
|
||||
{statusPending ? (
|
||||
<span className="inline-flex items-center gap-2">
|
||||
<span
|
||||
@ -188,45 +190,26 @@ const DocumentRow = memo(
|
||||
) : (
|
||||
<span
|
||||
className={cn(
|
||||
'inline-flex items-center gap-1.5 system-xs-regular',
|
||||
status === 'failed' ? 'text-text-destructive' : 'text-text-secondary',
|
||||
'inline-flex items-center gap-1.5 text-xs leading-4',
|
||||
statusTextClass[status],
|
||||
)}
|
||||
>
|
||||
<span aria-hidden className={cn('size-3.5', statusIconClass[status])} />
|
||||
<span
|
||||
aria-hidden
|
||||
className={cn(
|
||||
status === 'processing' ? 'size-4' : 'size-3.5',
|
||||
statusIconClass[status],
|
||||
)}
|
||||
/>
|
||||
{t(($) => $[`newKnowledge.documentStatus.${status}`])}
|
||||
</span>
|
||||
)}
|
||||
</td>
|
||||
<td className="hidden w-40 py-3 pr-6 system-xs-regular text-text-tertiary lg:table-cell">
|
||||
<td className="hidden w-[150px] pr-6 align-middle system-xs-regular text-text-tertiary lg:table-cell">
|
||||
{Number.isNaN(updatedTime) ? document.updatedAt : formatTimeFromNow(updatedTime)}
|
||||
</td>
|
||||
<td className="w-10 py-3 text-right">
|
||||
<DropdownMenu modal={false}>
|
||||
<DropdownMenuTrigger
|
||||
aria-label={t(($) => $['newKnowledge.documentActions'], { name: document.title })}
|
||||
className="flex size-7 items-center justify-center rounded-md text-text-tertiary outline-hidden hover:bg-state-base-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid"
|
||||
>
|
||||
<span aria-hidden className="i-ri-more-fill size-4" />
|
||||
</DropdownMenuTrigger>
|
||||
<DropdownMenuContent placement="bottom-end" sideOffset={4} popupClassName="w-44">
|
||||
<DropdownMenuItem
|
||||
className="gap-2 px-3"
|
||||
onClick={() => toast.info(t(($) => $['newKnowledge.documentActionsUnavailable']))}
|
||||
>
|
||||
<span aria-hidden className="i-ri-download-line size-4" />
|
||||
{t(($) => $['newKnowledge.downloadDocuments'])}
|
||||
</DropdownMenuItem>
|
||||
<DropdownMenuSeparator />
|
||||
<DropdownMenuItem
|
||||
variant="destructive"
|
||||
className="gap-2 px-3"
|
||||
onClick={() => toast.info(t(($) => $['newKnowledge.documentActionsUnavailable']))}
|
||||
>
|
||||
<span aria-hidden className="i-ri-delete-bin-line size-4" />
|
||||
{t(($) => $['newKnowledge.deleteDocuments'])}
|
||||
</DropdownMenuItem>
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<td className="w-10 align-middle">
|
||||
<DocumentActionsDropdown documentTitle={document.title} />
|
||||
</td>
|
||||
</tr>
|
||||
)
|
||||
@ -239,7 +222,6 @@ export function DocumentsEmpty({
|
||||
canEdit,
|
||||
hasTaskError,
|
||||
onAddDocument,
|
||||
onDropFiles,
|
||||
onOpenTasks,
|
||||
readOnlyReasonId,
|
||||
tasksButtonLabel,
|
||||
@ -251,7 +233,6 @@ export function DocumentsEmpty({
|
||||
canEdit: boolean
|
||||
hasTaskError: boolean
|
||||
onAddDocument: () => void
|
||||
onDropFiles: (files: File[]) => void
|
||||
onOpenTasks: () => void
|
||||
readOnlyReasonId?: string
|
||||
tasksButtonLabel: string
|
||||
@ -262,28 +243,18 @@ export function DocumentsEmpty({
|
||||
const tasksVisible = activeTaskCount > 0 || Boolean(attentionTaskBadge) || hasTaskError
|
||||
|
||||
return (
|
||||
<div
|
||||
className="flex min-h-96 flex-1 flex-col items-center justify-center px-6 text-center"
|
||||
onDragOver={(event) => {
|
||||
event.preventDefault()
|
||||
event.dataTransfer.dropEffect = canEdit ? 'copy' : 'none'
|
||||
}}
|
||||
onDrop={(event) => {
|
||||
event.preventDefault()
|
||||
if (canEdit) onDropFiles([...event.dataTransfer.files])
|
||||
}}
|
||||
>
|
||||
<div className="flex min-h-96 flex-1 flex-col items-center justify-center gap-4 p-6 text-center">
|
||||
<span className="flex size-12 items-center justify-center rounded-xl bg-background-section text-text-accent">
|
||||
<span aria-hidden className="i-ri-file-text-fill size-6" />
|
||||
</span>
|
||||
<h2 className="mt-4 system-md-semibold text-text-primary">
|
||||
<h2 className="text-base leading-normal font-semibold text-text-primary">
|
||||
{t(($) => $['newKnowledge.documentsEmptyTitle'])}
|
||||
</h2>
|
||||
<p className="mt-2 max-w-lg system-xs-regular text-text-tertiary">
|
||||
<p className="max-w-[460px] text-[13px] leading-normal font-normal text-text-tertiary">
|
||||
{t(($) => $['newKnowledge.documentsEmptyDescription'])}
|
||||
</p>
|
||||
<Button
|
||||
className="mt-4"
|
||||
className="gap-1 pl-3"
|
||||
variant="primary"
|
||||
aria-busy={uploading}
|
||||
disabled={!canEdit}
|
||||
@ -295,12 +266,12 @@ export function DocumentsEmpty({
|
||||
{t(($) => $['newKnowledge.addDocument'])}
|
||||
</Button>
|
||||
{canEdit && (
|
||||
<p className="mt-2 system-2xs-regular text-text-quaternary">
|
||||
<p className="system-xs-regular text-text-quaternary">
|
||||
{t(($) => $['newKnowledge.documentsDropHint'])}
|
||||
</p>
|
||||
)}
|
||||
{tasksVisible && (
|
||||
<div className="mt-4 flex flex-wrap items-center justify-center gap-2">
|
||||
<div className="flex flex-wrap items-center justify-center gap-2">
|
||||
<TaskTrigger
|
||||
activeTaskCount={activeTaskCount}
|
||||
attentionTaskBadge={attentionTaskBadge}
|
||||
@ -417,7 +388,7 @@ export function DocumentsList({
|
||||
|
||||
return (
|
||||
<>
|
||||
<div className="mt-5 flex flex-col gap-2 xl:flex-row xl:items-center">
|
||||
<div className="mt-4 flex flex-col gap-2 xl:flex-row xl:items-center">
|
||||
<Select<DocumentFilter>
|
||||
disabled={statusPending}
|
||||
value={filter}
|
||||
@ -471,11 +442,15 @@ export function DocumentsList({
|
||||
tasksLiveStatus={tasksLiveStatus}
|
||||
/>
|
||||
)}
|
||||
<Button onClick={() => toast.info(t(($) => $['newKnowledge.filtersUnavailable']))}>
|
||||
<span aria-hidden className="i-ri-price-tag-3-line size-4" />
|
||||
<Button
|
||||
className="gap-1 pl-3"
|
||||
onClick={() => toast.info(t(($) => $['newKnowledge.filtersUnavailable']))}
|
||||
>
|
||||
<span aria-hidden className="i-ri-file-text-line size-4" />
|
||||
{t(($) => $['newKnowledge.metadata'])}
|
||||
</Button>
|
||||
<Button
|
||||
className="gap-1 pl-3"
|
||||
variant="primary"
|
||||
aria-busy={uploading}
|
||||
disabled={!canUpload}
|
||||
@ -496,9 +471,9 @@ export function DocumentsList({
|
||||
tabIndex={-1}
|
||||
>
|
||||
<table className="w-full table-fixed border-collapse text-left lg:min-w-[900px] lg:table-auto">
|
||||
<thead className="system-2xs-medium text-text-tertiary uppercase">
|
||||
<tr>
|
||||
<th className="pb-2 font-medium">
|
||||
<thead className="text-[11px] leading-4 font-medium tracking-[0.3px] text-text-tertiary">
|
||||
<tr className="h-9">
|
||||
<th className="w-10 py-2.5 font-medium">
|
||||
<Checkbox
|
||||
checked={allSelected}
|
||||
indeterminate={someSelected && !allSelected}
|
||||
@ -514,15 +489,19 @@ export function DocumentsList({
|
||||
onCheckedChange={onSelectAll}
|
||||
/>
|
||||
</th>
|
||||
<th className="pb-2 font-medium">{t(($) => $['newKnowledge.documentColumn'])}</th>
|
||||
<th className="hidden pb-2 font-medium lg:table-cell">
|
||||
<th className="py-2.5 pr-6 font-medium">
|
||||
{t(($) => $['newKnowledge.documentColumn'])}
|
||||
</th>
|
||||
<th className="hidden w-[210px] py-2.5 pr-6 font-medium lg:table-cell">
|
||||
{t(($) => $['newKnowledge.sourceColumn'])}
|
||||
</th>
|
||||
<th className="pb-2 font-medium">{t(($) => $['newKnowledge.statusColumn'])}</th>
|
||||
<th className="hidden pb-2 font-medium lg:table-cell">
|
||||
<th className="w-24 py-2.5 pr-2 font-medium sm:w-[240px] sm:pr-6">
|
||||
{t(($) => $['newKnowledge.statusColumn'])}
|
||||
</th>
|
||||
<th className="hidden w-[150px] py-2.5 pr-6 font-medium lg:table-cell">
|
||||
{t(($) => $['newKnowledge.updatedColumn'])}
|
||||
</th>
|
||||
<th aria-label={t(($) => $['newKnowledge.actionsColumn'])} />
|
||||
<th className="w-10 py-2.5" aria-label={t(($) => $['newKnowledge.actionsColumn'])} />
|
||||
</tr>
|
||||
</thead>
|
||||
<tbody>
|
||||
@ -589,7 +568,7 @@ export function DocumentsList({
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
<p className="mt-3 flex items-center gap-1.5 system-xs-regular text-text-tertiary">
|
||||
<p className="mt-4 flex min-h-4 items-center gap-1.5 system-xs-regular text-text-tertiary">
|
||||
<span aria-hidden className="i-ri-information-2-line size-3.5" />
|
||||
{t(($) => $['newKnowledge.lastReadyRevisionHint'])}
|
||||
</p>
|
||||
@ -672,14 +651,18 @@ export function DocumentBulkActions({
|
||||
}) {
|
||||
const { t } = useTranslation('dataset')
|
||||
return (
|
||||
<div className="pointer-events-none fixed inset-x-0 bottom-[calc(1.75rem+env(safe-area-inset-bottom,0px))] z-20 flex justify-center pr-[calc(1rem+env(safe-area-inset-right,0px))] pl-[calc(1rem+env(safe-area-inset-left,0px))]">
|
||||
<div className="pointer-events-none fixed right-0 bottom-[calc(1.75rem+env(safe-area-inset-bottom,0px))] left-0 z-20 flex justify-center pr-[calc(1rem+env(safe-area-inset-right,0px))] pl-[calc(1rem+env(safe-area-inset-left,0px))] sm:left-[var(--new-rag-sidebar-width,0px)]">
|
||||
<div
|
||||
aria-label={t(($) => $['newKnowledge.bulkDocumentActions'])}
|
||||
className="pointer-events-auto flex max-w-full min-w-0 items-center gap-2 overflow-x-auto rounded-[14px] border border-divider-subtle bg-components-panel-bg px-3 py-2.5 shadow-xl"
|
||||
className="pointer-events-auto flex max-w-full min-w-0 items-center gap-2 overflow-x-auto rounded-[14px] border border-divider-subtle bg-components-panel-bg py-2.5 pr-2.5 pl-4 shadow-[0_12px_32px_-6px_rgba(15,23,41,0.16),0_2px_6px_rgba(15,23,41,0.06)]"
|
||||
role="group"
|
||||
onBlurCapture={onBlurCapture}
|
||||
onFocusCapture={onFocusCapture}
|
||||
>
|
||||
<span className="shrink-0 system-sm-medium text-text-primary">
|
||||
{t(($) => $['newKnowledge.documentsSelected'], { count: selectedCount })}
|
||||
</span>
|
||||
<span aria-hidden className="h-5 w-px shrink-0 bg-divider-regular" />
|
||||
<Button
|
||||
aria-describedby={disabled ? 'document-reindex-unavailable' : undefined}
|
||||
aria-busy={reindexing}
|
||||
@ -691,18 +674,6 @@ export function DocumentBulkActions({
|
||||
>
|
||||
{t(($) => $['newKnowledge.reindexDocuments'])}
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="small"
|
||||
aria-label={t(($) => $['newKnowledge.clearDocumentSelection'])}
|
||||
className="size-7 shrink-0 px-0"
|
||||
onClick={onClear}
|
||||
>
|
||||
<span aria-hidden className="i-ri-close-line size-4" />
|
||||
</Button>
|
||||
<span className="shrink-0 px-1 system-xs-medium text-text-primary">
|
||||
{t(($) => $['newKnowledge.documentsSelected'], { count: selectedCount })}
|
||||
</span>
|
||||
{disabled && disabledReason && (
|
||||
<span
|
||||
id="document-reindex-unavailable"
|
||||
@ -714,33 +685,55 @@ export function DocumentBulkActions({
|
||||
{disabledReason}
|
||||
</span>
|
||||
)}
|
||||
<span
|
||||
id="document-actions-unavailable"
|
||||
className="max-w-44 shrink-0 system-2xs-regular text-text-tertiary"
|
||||
>
|
||||
{t(($) => $['newKnowledge.downloadDocuments'])}
|
||||
{' / '}
|
||||
{t(($) => $['newKnowledge.deleteDocuments'])}
|
||||
{' · '}
|
||||
{t(($) => $['cornerLabel.unavailable'])}
|
||||
</span>
|
||||
<Button
|
||||
aria-describedby="document-actions-unavailable"
|
||||
className="shrink-0"
|
||||
size="small"
|
||||
disabled
|
||||
onClick={() => toast.info(t(($) => $['newKnowledge.documentActionsUnavailable']))}
|
||||
>
|
||||
{t(($) => $['newKnowledge.downloadDocuments'])}
|
||||
</Button>
|
||||
<Button
|
||||
aria-describedby="document-actions-unavailable"
|
||||
className="shrink-0"
|
||||
size="small"
|
||||
disabled
|
||||
tone="destructive"
|
||||
onClick={() => toast.info(t(($) => $['newKnowledge.documentActionsUnavailable']))}
|
||||
>
|
||||
{t(($) => $['newKnowledge.deleteDocuments'])}
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
size="small"
|
||||
aria-label={t(($) => $['newKnowledge.clearDocumentSelection'])}
|
||||
className="size-[26px] shrink-0 px-0"
|
||||
onClick={onClear}
|
||||
>
|
||||
<span aria-hidden className="i-ri-close-line size-3.5" />
|
||||
</Button>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export function DocumentDropOverlay() {
|
||||
const { t } = useTranslation('dataset')
|
||||
|
||||
return (
|
||||
<div
|
||||
className="pointer-events-none absolute inset-0 z-30 flex flex-col items-center justify-center rounded-lg border-2 border-dashed border-divider-regular bg-[rgba(255,255,255,0.5)] text-center backdrop-blur-[5px]"
|
||||
role="status"
|
||||
>
|
||||
<div className="flex w-[228px] items-center justify-center gap-5 rounded-xl border border-dashed border-divider-regular bg-components-panel-bg px-8 py-7 shadow-xs">
|
||||
<span aria-hidden className="i-ri-file-word-2-fill size-6 text-text-accent" />
|
||||
<span aria-hidden className="i-ri-file-pdf-2-fill size-6 text-text-destructive" />
|
||||
<span aria-hidden className="i-ri-file-excel-fill size-6 text-text-success" />
|
||||
<span aria-hidden className="i-ri-file-text-fill size-6 text-text-tertiary" />
|
||||
</div>
|
||||
<p className="mt-4 system-md-semibold text-text-primary">
|
||||
{t(($) => $['newKnowledge.dropFilesHere'])}
|
||||
</p>
|
||||
<p className="mt-2 system-xs-regular text-text-tertiary">
|
||||
{t(($) => $['newKnowledge.documentUploadFormats'])}
|
||||
</p>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
|
||||
import { Button } from '@langgenius/dify-ui/button'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import { toast } from '@langgenius/dify-ui/toast'
|
||||
import { useMemo, useRef, useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import {
|
||||
@ -16,6 +17,13 @@ function fileSize(size: number) {
|
||||
return `${(size / (1024 * 1024)).toFixed(1)} MB`
|
||||
}
|
||||
|
||||
function fileIconClass(extension: string) {
|
||||
if (extension === 'PDF') return 'i-ri-file-pdf-2-fill text-text-destructive'
|
||||
if (extension === 'DOC' || extension === 'DOCX') return 'i-ri-file-word-2-fill text-text-accent'
|
||||
if (extension === 'XLS' || extension === 'XLSX') return 'i-ri-file-excel-fill text-text-success'
|
||||
return 'i-ri-file-text-fill text-text-tertiary'
|
||||
}
|
||||
|
||||
export function DocumentUploadForm({
|
||||
initialFiles = [],
|
||||
onCancel,
|
||||
@ -52,7 +60,7 @@ export function DocumentUploadForm({
|
||||
return (
|
||||
<form
|
||||
aria-labelledby="new-knowledge-documents-title"
|
||||
className="mx-auto flex w-full max-w-[640px] flex-1 flex-col pt-8"
|
||||
className="mt-4 flex w-full max-w-[640px] flex-1 flex-col"
|
||||
onSubmit={(event) => {
|
||||
event.preventDefault()
|
||||
if (!validFiles.length || uploading) return
|
||||
@ -73,7 +81,7 @@ export function DocumentUploadForm({
|
||||
}}
|
||||
/>
|
||||
<button
|
||||
className="flex min-h-44 w-full flex-col items-center justify-center rounded-xl border border-dashed border-divider-regular bg-background-section px-6 py-9 text-center outline-hidden transition-colors hover:border-state-accent-solid hover:bg-state-accent-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid disabled:cursor-not-allowed disabled:opacity-50"
|
||||
className="flex w-full flex-col items-center justify-center gap-2 rounded-xl border-[1.5px] border-dashed border-divider-regular bg-background-section px-6 py-9 text-center outline-hidden transition-colors hover:border-state-accent-solid hover:bg-state-accent-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid disabled:cursor-not-allowed disabled:opacity-50"
|
||||
disabled={uploading}
|
||||
type="button"
|
||||
onClick={() => inputRef.current?.click()}
|
||||
@ -86,80 +94,85 @@ export function DocumentUploadForm({
|
||||
if (!uploading) addFiles([...event.dataTransfer.files])
|
||||
}}
|
||||
>
|
||||
<span className="flex size-11 items-center justify-center rounded-xl bg-background-default-subtle">
|
||||
<span aria-hidden className="i-ri-file-upload-line size-[22px] text-text-tertiary" />
|
||||
<span className="flex size-11 items-center justify-center rounded-[10px] bg-background-default-subtle">
|
||||
<span aria-hidden className="i-ri-file-text-fill size-[22px] text-text-accent" />
|
||||
</span>
|
||||
<span className="mt-3 system-sm-medium text-text-primary">
|
||||
{t(($) => $['newKnowledge.uploadFiles'])}
|
||||
<span className="system-md-medium text-text-primary">
|
||||
{t(($) => $['newKnowledge.uploadDropZoneTitle'])}
|
||||
</span>
|
||||
<span className="mt-1 system-xs-regular text-text-tertiary">
|
||||
{t(($) => $['newKnowledge.documentsDropHint'])}
|
||||
</span>
|
||||
<span className="mt-1 system-2xs-regular text-text-quaternary">
|
||||
PDF, DOCX, Markdown, HTML, XLSX, TXT · 15 MB
|
||||
<span className="system-xs-regular text-text-quaternary">
|
||||
{t(($) => $['newKnowledge.documentUploadFormats'])}
|
||||
</span>
|
||||
</button>
|
||||
|
||||
{files.length > 0 && (
|
||||
<section className="mt-6" aria-label={t(($) => $['newKnowledge.uploadDocuments'])}>
|
||||
<div className="flex items-center justify-between">
|
||||
<h3 className="system-sm-semibold text-text-primary">
|
||||
{t(($) => $['newKnowledge.uploadDocuments'])}
|
||||
</h3>
|
||||
<span className="system-xs-regular text-text-tertiary">
|
||||
{validFiles.length} / {files.length}
|
||||
</span>
|
||||
</div>
|
||||
<ul className="mt-3 space-y-2">
|
||||
<section className="mt-4" aria-label={t(($) => $['newKnowledge.uploadDocuments'])}>
|
||||
<h3 className="system-sm-semibold text-text-primary">
|
||||
{t(($) => $['newKnowledge.selectedFiles'], {
|
||||
total: files.length,
|
||||
valid: validFiles.length,
|
||||
})}
|
||||
</h3>
|
||||
<ul className="mt-2 space-y-1">
|
||||
{files.map((file, index) => {
|
||||
const issue = documentUploadIssue(file)
|
||||
const extension = documentUploadFileExtension(file.name).toLocaleUpperCase()
|
||||
const previewAvailable = !issue && (extension === 'DOC' || extension === 'DOCX')
|
||||
return (
|
||||
<li
|
||||
key={`${file.name}:${file.size}:${file.lastModified}`}
|
||||
className={cn(
|
||||
'flex min-h-16 items-center gap-3 rounded-xl border px-3 py-2.5',
|
||||
'flex min-h-12 items-center overflow-hidden rounded-lg border-[0.5px] shadow-xs',
|
||||
issue
|
||||
? 'border-state-destructive-border bg-state-destructive-hover'
|
||||
: 'border-divider-subtle bg-background-default',
|
||||
: 'border-components-panel-border bg-components-panel-on-panel-item-bg',
|
||||
)}
|
||||
>
|
||||
<span
|
||||
className={cn(
|
||||
'flex size-10 shrink-0 items-center justify-center rounded-lg',
|
||||
issue
|
||||
? 'bg-state-destructive-hover text-text-destructive'
|
||||
: 'bg-background-section text-text-accent',
|
||||
)}
|
||||
>
|
||||
<span aria-hidden className="i-ri-file-text-fill size-5" />
|
||||
<span className="flex shrink-0 items-start p-3">
|
||||
<span aria-hidden className={cn('size-6', fileIconClass(extension))} />
|
||||
</span>
|
||||
<span className="min-w-0 flex-1 text-left">
|
||||
<span className="min-w-0 flex-1 py-1 pr-2 text-left">
|
||||
<span className="block truncate system-xs-medium text-text-primary">
|
||||
{file.name}
|
||||
</span>
|
||||
<span className="mt-0.5 block system-2xs-regular text-text-tertiary">
|
||||
<span className="mt-0.5 flex min-h-3 items-center gap-1 system-2xs-medium text-text-tertiary">
|
||||
{extension || 'FILE'} · {fileSize(file.size)}
|
||||
{issue && (
|
||||
<>
|
||||
<span aria-hidden className="text-text-quaternary">
|
||||
·
|
||||
</span>
|
||||
<span className="truncate text-text-destructive">
|
||||
{t(($) => $[`newKnowledge.documentUploadExclusion.${issue}`])}
|
||||
</span>
|
||||
</>
|
||||
)}
|
||||
</span>
|
||||
{issue && (
|
||||
<span className="mt-0.5 block system-2xs-regular text-text-destructive">
|
||||
{t(($) => $[`newKnowledge.documentUploadExclusion.${issue}`])}
|
||||
</span>
|
||||
)}
|
||||
</span>
|
||||
<button
|
||||
aria-label={`${tCommon(($) => $['operation.remove'])} · ${file.name}`}
|
||||
className="flex size-8 shrink-0 items-center justify-center rounded-lg text-text-tertiary outline-hidden hover:bg-state-base-hover hover:text-text-secondary focus-visible:ring-2 focus-visible:ring-state-accent-solid"
|
||||
disabled={uploading}
|
||||
type="button"
|
||||
onClick={() =>
|
||||
setFiles((current) =>
|
||||
current.filter((_, currentIndex) => currentIndex !== index),
|
||||
)
|
||||
}
|
||||
>
|
||||
<span aria-hidden className="i-ri-close-line size-4" />
|
||||
</button>
|
||||
<span className="flex shrink-0 items-center gap-1 py-2 pr-3">
|
||||
{previewAvailable && (
|
||||
<Button
|
||||
size="small"
|
||||
type="button"
|
||||
onClick={() => toast.info(t(($) => $['newKnowledge.previewUnavailable']))}
|
||||
>
|
||||
{t(($) => $['newKnowledge.preview'])}
|
||||
</Button>
|
||||
)}
|
||||
<button
|
||||
aria-label={`${tCommon(($) => $['operation.remove'])} · ${file.name}`}
|
||||
className="flex size-7 shrink-0 items-center justify-center rounded-md text-text-tertiary outline-hidden hover:bg-state-base-hover hover:text-text-secondary focus-visible:ring-2 focus-visible:ring-state-accent-solid"
|
||||
disabled={uploading}
|
||||
type="button"
|
||||
onClick={() =>
|
||||
setFiles((current) =>
|
||||
current.filter((_, currentIndex) => currentIndex !== index),
|
||||
)
|
||||
}
|
||||
>
|
||||
<span aria-hidden className="i-ri-delete-bin-line size-4" />
|
||||
</button>
|
||||
</span>
|
||||
</li>
|
||||
)
|
||||
})}
|
||||
@ -167,18 +180,19 @@ export function DocumentUploadForm({
|
||||
</section>
|
||||
)}
|
||||
|
||||
<div className="mt-8 flex justify-end gap-2 border-t border-divider-subtle pt-4">
|
||||
<div className="mt-4 flex justify-end gap-3 pt-5">
|
||||
<Button disabled={uploading} type="button" onClick={onCancel}>
|
||||
{tCommon(($) => $['operation.cancel'])}
|
||||
</Button>
|
||||
<Button
|
||||
aria-label={t(($) => $['newKnowledge.addDocument'])}
|
||||
aria-busy={uploading}
|
||||
disabled={!validFiles.length || uploading}
|
||||
loading={uploading}
|
||||
type="submit"
|
||||
variant="primary"
|
||||
>
|
||||
{t(($) => $['newKnowledge.addDocument'])}
|
||||
{t(($) => $['newKnowledge.addAndProcess'])}
|
||||
</Button>
|
||||
</div>
|
||||
</form>
|
||||
|
||||
@ -27,7 +27,12 @@ import { knowledgeFsUploadEnabledAtom } from '@/context/system-features-state'
|
||||
import { consoleClient, consoleQuery } from '@/service/client'
|
||||
import { DatasetACLPermission, hasPermission } from '@/utils/permission'
|
||||
import { useAuxiliaryTaskReadGuard } from './auxiliary-task-read-guard'
|
||||
import { DocumentBulkActions, DocumentsEmpty, DocumentsList } from './document-list'
|
||||
import {
|
||||
DocumentBulkActions,
|
||||
DocumentDropOverlay,
|
||||
DocumentsEmpty,
|
||||
DocumentsList,
|
||||
} from './document-list'
|
||||
import {
|
||||
ACTIVE_TASK_STATES,
|
||||
documentDisplayStatus,
|
||||
@ -203,6 +208,8 @@ export function DocumentsPage({ knowledgeSpaceId }: { knowledgeSpaceId: string }
|
||||
const [selectedDocumentIds, setSelectedDocumentIds] = useState<Set<string>>(() => new Set())
|
||||
const [uploadFormOpen, setUploadFormOpen] = useState(false)
|
||||
const [uploadFormInitialFiles, setUploadFormInitialFiles] = useState<File[]>([])
|
||||
const [isFileDragActive, setIsFileDragActive] = useState(false)
|
||||
const fileDragDepthRef = useRef(0)
|
||||
const [tasksOpen, setTasksOpen] = useState(false)
|
||||
const [writePermissionRevoked, setWritePermissionRevoked] = useState(false)
|
||||
const [writePermissionRecoveryGeneration, setWritePermissionRecoveryGeneration] = useState<
|
||||
@ -318,6 +325,14 @@ export function DocumentsPage({ knowledgeSpaceId }: { knowledgeSpaceId: string }
|
||||
)
|
||||
const canWrite = hasWorkspaceWritePermission && !permissionDenied && !writePermissionRevoked
|
||||
const canUpload = canWrite && uploadAvailable
|
||||
const openUploadForm = useCallback((files: File[] = []) => {
|
||||
writePermissionFocusRecoveryRequestedRef.current = true
|
||||
writePermissionFocusOriginRef.current = document.activeElement as HTMLElement | null
|
||||
fileDragDepthRef.current = 0
|
||||
setIsFileDragActive(false)
|
||||
setUploadFormInitialFiles(files)
|
||||
setUploadFormOpen(true)
|
||||
}, [])
|
||||
const documentWriteRestrictionReasonId = permissionPending
|
||||
? 'documents-permission-pending'
|
||||
: permissionQueryError
|
||||
@ -1865,9 +1880,39 @@ export function DocumentsPage({ knowledgeSpaceId }: { knowledgeSpaceId: string }
|
||||
<section
|
||||
ref={documentsSectionRef}
|
||||
className={cn(
|
||||
'flex min-h-full flex-col px-4 pt-6 sm:px-8 sm:pt-7',
|
||||
bulkActionsVisible ? 'pb-[calc(7rem+env(safe-area-inset-bottom,0px))]' : 'pb-6 sm:pb-7',
|
||||
'relative flex min-h-full flex-col px-4 pt-6 sm:px-8',
|
||||
bulkActionsVisible ? 'pb-[calc(7rem+env(safe-area-inset-bottom,0px))]' : 'pb-6',
|
||||
)}
|
||||
onDragEnter={(event) => {
|
||||
const types = Array.from(event.dataTransfer.types ?? [])
|
||||
if (types.length && !types.includes('Files')) return
|
||||
event.preventDefault()
|
||||
if (!canUpload || uploadFormOpen || uploading) return
|
||||
fileDragDepthRef.current += 1
|
||||
setIsFileDragActive(true)
|
||||
}}
|
||||
onDragLeave={() => {
|
||||
if (!fileDragDepthRef.current) return
|
||||
fileDragDepthRef.current -= 1
|
||||
if (!fileDragDepthRef.current) setIsFileDragActive(false)
|
||||
}}
|
||||
onDragOver={(event) => {
|
||||
const types = Array.from(event.dataTransfer.types ?? [])
|
||||
if (types.length && !types.includes('Files')) return
|
||||
event.preventDefault()
|
||||
if (!uploadFormOpen)
|
||||
event.dataTransfer.dropEffect = canUpload && !uploading ? 'copy' : 'none'
|
||||
}}
|
||||
onDrop={(event) => {
|
||||
const types = Array.from(event.dataTransfer.types ?? [])
|
||||
if (types.length && !types.includes('Files')) return
|
||||
event.preventDefault()
|
||||
fileDragDepthRef.current = 0
|
||||
setIsFileDragActive(false)
|
||||
if (!canUpload || uploadFormOpen || uploading) return
|
||||
const files = [...event.dataTransfer.files]
|
||||
if (files.length) openUploadForm(files)
|
||||
}}
|
||||
onBlurCapture={(event) => {
|
||||
if (!event.currentTarget.contains(event.relatedTarget as Node | null)) {
|
||||
documentSurfaceHadFocusRef.current = false
|
||||
@ -1897,7 +1942,7 @@ export function DocumentsPage({ knowledgeSpaceId }: { knowledgeSpaceId: string }
|
||||
<h2
|
||||
ref={documentsTitleRef}
|
||||
id="new-knowledge-documents-title"
|
||||
className="title-xl-semi-bold text-text-primary"
|
||||
className="title-xl-semi-bold leading-6 text-text-primary"
|
||||
tabIndex={-1}
|
||||
>
|
||||
{t(($) =>
|
||||
@ -2130,18 +2175,7 @@ export function DocumentsPage({ knowledgeSpaceId }: { knowledgeSpaceId: string }
|
||||
attentionTaskBadge={attentionTaskBadge}
|
||||
canEdit={canUpload}
|
||||
hasTaskError={hasTaskError}
|
||||
onAddDocument={() => {
|
||||
writePermissionFocusRecoveryRequestedRef.current = true
|
||||
writePermissionFocusOriginRef.current = document.activeElement as HTMLElement | null
|
||||
setUploadFormInitialFiles([])
|
||||
setUploadFormOpen(true)
|
||||
}}
|
||||
onDropFiles={(files) => {
|
||||
writePermissionFocusRecoveryRequestedRef.current = true
|
||||
writePermissionFocusOriginRef.current = document.activeElement as HTMLElement | null
|
||||
setUploadFormInitialFiles(files)
|
||||
setUploadFormOpen(true)
|
||||
}}
|
||||
onAddDocument={() => openUploadForm()}
|
||||
onOpenTasks={() => setTasksOpen(true)}
|
||||
readOnlyReasonId={documentUploadRestrictionReasonId}
|
||||
tasksButtonLabel={tasksButtonLabel}
|
||||
@ -2169,12 +2203,7 @@ export function DocumentsPage({ knowledgeSpaceId }: { knowledgeSpaceId: string }
|
||||
isFetchNextPageError={documentsQuery.isFetchNextPageError}
|
||||
isFetchingNextDocumentPage={isFetchingNextDocumentPage}
|
||||
isFetchingNextPage={isFetchingNextResultsPage}
|
||||
onAddDocument={() => {
|
||||
writePermissionFocusRecoveryRequestedRef.current = true
|
||||
writePermissionFocusOriginRef.current = document.activeElement as HTMLElement | null
|
||||
setUploadFormInitialFiles([])
|
||||
setUploadFormOpen(true)
|
||||
}}
|
||||
onAddDocument={() => openUploadForm()}
|
||||
onFilterChange={setFilter}
|
||||
onLoadMore={loadMoreResults}
|
||||
onOpenTasks={() => setTasksOpen(true)}
|
||||
@ -2204,6 +2233,7 @@ export function DocumentsPage({ knowledgeSpaceId }: { knowledgeSpaceId: string }
|
||||
uploading={uploading}
|
||||
/>
|
||||
)}
|
||||
{isFileDragActive && canUpload && !uploadFormOpen && <DocumentDropOverlay />}
|
||||
</section>
|
||||
{bulkActionsVisible && (
|
||||
<DocumentBulkActions
|
||||
|
||||
@ -1,12 +1,17 @@
|
||||
'use client'
|
||||
|
||||
import type { ReactNode } from 'react'
|
||||
import type { CSSProperties, ReactNode } from 'react'
|
||||
import { Button } from '@langgenius/dify-ui/button'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import { DialogTrigger } from '@langgenius/dify-ui/dialog'
|
||||
import { toast } from '@langgenius/dify-ui/toast'
|
||||
import { useQuery } from '@tanstack/react-query'
|
||||
import { useState } from 'react'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import SidebarLeftArrowIcon from '@/app/components/base/icons/src/vender/SidebarLeftArrowIcon'
|
||||
import Loading from '@/app/components/base/loading'
|
||||
import { DetailSidebarToggleButton } from '@/app/components/detail-sidebar/toggle-button'
|
||||
import { gotoAnythingDialogHandle } from '@/app/components/goto-anything/dialog-handle'
|
||||
import useDocumentTitle from '@/hooks/use-document-title'
|
||||
import Link from '@/next/link'
|
||||
import { usePathname } from '@/next/navigation'
|
||||
@ -33,6 +38,8 @@ export function KnowledgeSpaceShell({
|
||||
const { t } = useTranslation('dataset')
|
||||
const { t: tCommon } = useTranslation('common')
|
||||
const { t: tHit } = useTranslation('datasetHitTesting')
|
||||
const { t: tApp } = useTranslation('app')
|
||||
const [sidebarExpanded, setSidebarExpanded] = useState(true)
|
||||
const pathname = usePathname()
|
||||
const knowledgeSpaceQuery = useQuery({
|
||||
...consoleQuery.knowledgeFs.spaces.byControlSpaceId.get.queryOptions({
|
||||
@ -95,44 +102,97 @@ export function KnowledgeSpaceShell({
|
||||
const documentsActive = pathname === documentsPath || pathname.startsWith(`${documentsPath}/`)
|
||||
const showDeferredPage = () => toast.info(t(($) => $['cornerLabel.unavailable']))
|
||||
const navItemClassName =
|
||||
'flex h-8 shrink-0 items-center gap-2 rounded-lg px-3 system-sm-medium outline-hidden hover:bg-state-base-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid'
|
||||
'flex h-8 shrink-0 items-center gap-2 rounded-lg pr-1 pl-3 system-sm-medium outline-hidden hover:bg-state-base-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid'
|
||||
const navIcon = (className: string) => (
|
||||
<span aria-hidden className="flex size-5 shrink-0 items-center justify-center">
|
||||
<span className={cn('size-[18px]', className)} />
|
||||
</span>
|
||||
)
|
||||
|
||||
return (
|
||||
<div className="flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-background-body p-1">
|
||||
<div
|
||||
className="flex min-h-0 min-w-0 flex-1 flex-col overflow-hidden bg-background-body p-1"
|
||||
style={
|
||||
{
|
||||
'--new-rag-sidebar-width': sidebarExpanded ? '248px' : '64px',
|
||||
} as CSSProperties
|
||||
}
|
||||
>
|
||||
<div className="flex min-h-0 min-w-0 flex-1 flex-col gap-1 overflow-hidden sm:flex-row">
|
||||
<aside className="flex shrink-0 flex-col overflow-hidden rounded-lg bg-components-panel-bg shadow-xs sm:w-60">
|
||||
<div className="flex h-12 min-w-0 items-center px-1 pr-2">
|
||||
<Link
|
||||
href={newKnowledgeListPath}
|
||||
aria-label={t(($) => $['newKnowledge.backToList'])}
|
||||
className="flex h-8 w-10 shrink-0 items-center justify-center rounded-lg text-text-tertiary outline-hidden hover:bg-state-base-hover focus-visible:ring-2 focus-visible:ring-state-accent-solid"
|
||||
>
|
||||
<span aria-hidden className="i-ri-arrow-left-s-line size-4" />
|
||||
<span aria-hidden className="i-ri-home-5-line size-4" />
|
||||
</Link>
|
||||
<span aria-hidden className="text-text-quaternary">
|
||||
/
|
||||
</span>
|
||||
<span className="truncate px-1.5 system-sm-semibold-uppercase text-text-secondary">
|
||||
{t(($) => $.knowledge)}
|
||||
</span>
|
||||
<aside
|
||||
className={cn(
|
||||
'flex shrink-0 flex-col overflow-hidden rounded-lg bg-components-panel-bg shadow-xs transition-[width] motion-reduce:transition-none',
|
||||
sidebarExpanded ? 'sm:w-60' : 'sm:w-14',
|
||||
)}
|
||||
>
|
||||
<div
|
||||
className={cn(
|
||||
'flex h-12 min-w-0 items-center',
|
||||
sidebarExpanded ? 'py-2 pr-2 pl-1' : 'justify-center px-3 pt-2 pb-1',
|
||||
)}
|
||||
>
|
||||
{sidebarExpanded && (
|
||||
<>
|
||||
<div className="flex min-w-0 flex-1 items-center gap-px">
|
||||
<Link
|
||||
href={newKnowledgeListPath}
|
||||
aria-label={t(($) => $['newKnowledge.backToList'])}
|
||||
className="flex shrink-0 items-center rounded-lg py-2 pr-1.5 pl-0.5 text-text-tertiary outline-hidden transition-colors hover:bg-state-base-hover hover:text-text-secondary focus-visible:ring-2 focus-visible:ring-state-accent-solid"
|
||||
>
|
||||
<span aria-hidden className="i-ri-arrow-left-s-line size-4" />
|
||||
<span aria-hidden className="i-ri-home-5-line size-4" />
|
||||
</Link>
|
||||
<span aria-hidden className="system-md-regular text-text-quaternary">
|
||||
/
|
||||
</span>
|
||||
<span className="truncate px-1.5 py-2 system-sm-semibold-uppercase text-text-secondary">
|
||||
{t(($) => $.knowledge)}
|
||||
</span>
|
||||
</div>
|
||||
<DialogTrigger
|
||||
handle={gotoAnythingDialogHandle}
|
||||
render={
|
||||
<button
|
||||
type="button"
|
||||
aria-label={tApp(($) => $['gotoAnything.searchTitle'])}
|
||||
className="flex size-8 shrink-0 items-center justify-center overflow-hidden rounded-[10px] text-text-tertiary outline-hidden transition-colors hover:bg-state-base-hover hover:text-text-secondary focus-visible:ring-2 focus-visible:ring-state-accent-solid"
|
||||
>
|
||||
<span aria-hidden className="i-custom-vender-main-nav-quick-search size-4" />
|
||||
</button>
|
||||
}
|
||||
/>
|
||||
</>
|
||||
)}
|
||||
<DetailSidebarToggleButton
|
||||
expand={sidebarExpanded}
|
||||
onToggle={() => setSidebarExpanded((expanded) => !expanded)}
|
||||
icon={<SidebarLeftArrowIcon aria-hidden className="size-4" />}
|
||||
className="size-8 rounded-[10px] border-0 bg-transparent px-0 text-text-tertiary shadow-none hover:border-0 hover:bg-state-base-hover hover:text-text-secondary"
|
||||
/>
|
||||
</div>
|
||||
<div className="flex min-w-0 items-center px-1 py-2">
|
||||
<div className="flex min-w-0 flex-1 items-center gap-2 rounded-xl p-2">
|
||||
<div
|
||||
className={cn(
|
||||
'flex min-w-0 flex-1 items-center rounded-xl p-2',
|
||||
sidebarExpanded ? 'gap-2' : 'justify-center',
|
||||
)}
|
||||
>
|
||||
<KnowledgeSpaceIcon
|
||||
icon={knowledgeSpaceQuery.data.technical_summary?.icon}
|
||||
size="medium"
|
||||
/>
|
||||
<div className="min-w-0 flex-1">
|
||||
<h1 className="truncate system-md-semibold text-text-secondary">
|
||||
{knowledgeSpaceName}
|
||||
</h1>
|
||||
<p className="mt-0.5 truncate system-2xs-medium-uppercase text-text-tertiary">
|
||||
{t(($) => $['chunkingMode.parentChild'])} ·{' '}
|
||||
{t(($) => $['indexingTechnique.high_quality'])} ·{' '}
|
||||
{t(($) => $['retrieval.semantic_search.title'])}
|
||||
</p>
|
||||
</div>
|
||||
{sidebarExpanded && (
|
||||
<div className="min-w-0 flex-1">
|
||||
<h1 className="truncate system-md-semibold text-text-secondary">
|
||||
{knowledgeSpaceName}
|
||||
</h1>
|
||||
<p className="mt-0.5 truncate system-2xs-medium-uppercase text-text-tertiary">
|
||||
{t(($) => $['chunkingMode.parentChild'])} ·{' '}
|
||||
{t(($) => $['indexingTechnique.high_quality'])} ·{' '}
|
||||
{t(($) => $['retrieval.semantic_search.title'])}
|
||||
</p>
|
||||
</div>
|
||||
)}
|
||||
</div>
|
||||
</div>
|
||||
<nav
|
||||
@ -140,72 +200,103 @@ export function KnowledgeSpaceShell({
|
||||
aria-label={knowledgeSpaceName}
|
||||
>
|
||||
<Button
|
||||
aria-label={t(($) => $['newKnowledge.overview'])}
|
||||
variant="ghost"
|
||||
className={cn(navItemClassName, 'justify-start text-text-secondary')}
|
||||
className={cn(
|
||||
navItemClassName,
|
||||
sidebarExpanded ? 'justify-start' : 'justify-center px-0',
|
||||
'text-text-secondary',
|
||||
)}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
<span aria-hidden className="i-ri-layout-grid-line size-4" />
|
||||
{t(($) => $['newKnowledge.overview'])}
|
||||
{navIcon('i-ri-layout-grid-line')}
|
||||
{sidebarExpanded && t(($) => $['newKnowledge.overview'])}
|
||||
</Button>
|
||||
<Link
|
||||
href={sourcesPath}
|
||||
aria-label={t(($) => $['newKnowledge.sourceColumn'])}
|
||||
aria-current={sourcesActive ? 'page' : undefined}
|
||||
className={cn(
|
||||
navItemClassName,
|
||||
sourcesActive ? 'bg-state-base-active text-text-accent' : 'text-text-secondary',
|
||||
sidebarExpanded ? 'justify-start' : 'justify-center px-0',
|
||||
sourcesActive
|
||||
? 'bg-state-base-active font-semibold text-text-accent'
|
||||
: 'text-text-secondary',
|
||||
)}
|
||||
>
|
||||
<span aria-hidden className="i-ri-book-open-line size-4" />
|
||||
{t(($) => $['newKnowledge.sourceColumn'])}
|
||||
{navIcon('i-ri-book-open-line')}
|
||||
{sidebarExpanded && t(($) => $['newKnowledge.sourceColumn'])}
|
||||
</Link>
|
||||
<Link
|
||||
href={documentsPath}
|
||||
aria-label={t(($) => $['newKnowledge.documentColumn'])}
|
||||
aria-current={documentsActive ? 'page' : undefined}
|
||||
className={cn(
|
||||
navItemClassName,
|
||||
documentsActive ? 'bg-state-base-active text-text-accent' : 'text-text-secondary',
|
||||
sidebarExpanded ? 'justify-start' : 'justify-center px-0',
|
||||
documentsActive
|
||||
? 'bg-state-base-active font-semibold text-text-accent'
|
||||
: 'text-text-secondary',
|
||||
)}
|
||||
>
|
||||
<span aria-hidden className="i-ri-file-text-line size-4" />
|
||||
{t(($) => $['newKnowledge.documentColumn'])}
|
||||
{navIcon('i-ri-file-text-line')}
|
||||
{sidebarExpanded && t(($) => $['newKnowledge.documentColumn'])}
|
||||
</Link>
|
||||
<Button
|
||||
variant="ghost"
|
||||
className={cn(navItemClassName, 'justify-start text-text-secondary')}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
<span aria-hidden className="i-ri-search-eye-line size-4" />
|
||||
{tHit(($) => $.title)}
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
className={cn(navItemClassName, 'justify-start text-text-secondary')}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
<span aria-hidden className="i-ri-shield-check-line size-4" />
|
||||
{t(($) => $['newKnowledge.quality'])}
|
||||
</Button>
|
||||
<Button
|
||||
variant="ghost"
|
||||
className={cn(navItemClassName, 'justify-start text-text-secondary')}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
<span aria-hidden className="i-ri-equalizer-2-line size-4" />
|
||||
{tCommon(($) => $['datasetMenus.settings'])}
|
||||
</Button>
|
||||
<span className="hidden flex-1 sm:block" />
|
||||
<Button
|
||||
aria-label={tHit(($) => $.title)}
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
navItemClassName,
|
||||
'justify-start border-[0.5px] border-components-panel-border text-text-secondary',
|
||||
sidebarExpanded ? 'justify-start' : 'justify-center px-0',
|
||||
'text-text-secondary',
|
||||
)}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
<span aria-hidden className="i-custom-vender-workflow-agent size-4" />
|
||||
{t(($) => $['newKnowledge.apiAgentAccess'])}
|
||||
{navIcon('i-ri-search-eye-line')}
|
||||
{sidebarExpanded && tHit(($) => $.title)}
|
||||
</Button>
|
||||
<Button
|
||||
aria-label={t(($) => $['newKnowledge.quality'])}
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
navItemClassName,
|
||||
sidebarExpanded ? 'justify-start' : 'justify-center px-0',
|
||||
'text-text-secondary',
|
||||
)}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
{navIcon('i-ri-shield-check-line')}
|
||||
{sidebarExpanded && t(($) => $['newKnowledge.quality'])}
|
||||
</Button>
|
||||
<Button
|
||||
aria-label={tCommon(($) => $['datasetMenus.settings'])}
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
navItemClassName,
|
||||
sidebarExpanded ? 'justify-start' : 'justify-center px-0',
|
||||
'text-text-secondary',
|
||||
)}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
{navIcon('i-ri-equalizer-2-line')}
|
||||
{sidebarExpanded && tCommon(($) => $['datasetMenus.settings'])}
|
||||
</Button>
|
||||
</nav>
|
||||
<div className={cn('shrink-0 py-2', sidebarExpanded ? 'px-3' : 'px-2')}>
|
||||
<Button
|
||||
aria-label={t(($) => $['newKnowledge.apiAgentAccess'])}
|
||||
variant="ghost"
|
||||
className={cn(
|
||||
navItemClassName,
|
||||
'w-full border-[0.5px] border-components-panel-border text-text-secondary',
|
||||
sidebarExpanded ? 'justify-start' : 'justify-center px-0',
|
||||
)}
|
||||
onClick={showDeferredPage}
|
||||
>
|
||||
{navIcon('i-custom-vender-workflow-agent')}
|
||||
{sidebarExpanded && t(($) => $['newKnowledge.apiAgentAccess'])}
|
||||
</Button>
|
||||
</div>
|
||||
</aside>
|
||||
<section className="min-h-0 min-w-0 flex-1 overflow-auto rounded-lg bg-components-panel-bg shadow-xs">
|
||||
{children}
|
||||
|
||||
@ -413,7 +413,7 @@ export function ProcessingTasksDrawer({
|
||||
<DrawerCloseButton
|
||||
ref={drawerCloseButtonRef}
|
||||
aria-label={tCommon(($) => $['operation.close'])}
|
||||
className="size-6 rounded-md"
|
||||
className="size-[26px] rounded-md"
|
||||
/>
|
||||
</div>
|
||||
<DrawerDescription className="mt-1 system-xs-regular text-text-tertiary">
|
||||
@ -514,7 +514,7 @@ export function ProcessingTasksDrawer({
|
||||
<Loading />
|
||||
</div>
|
||||
) : orderedTasks.length ? (
|
||||
<ul className="divide-y divide-divider-subtle">
|
||||
<ul>
|
||||
{orderedTasks.map((task) => {
|
||||
const title =
|
||||
documentTitles.get(task.documentId) ??
|
||||
@ -541,10 +541,10 @@ export function ProcessingTasksDrawer({
|
||||
}
|
||||
/>
|
||||
<div className="min-w-0 flex-1">
|
||||
<p className="truncate system-xs-medium text-text-primary">
|
||||
<p className="truncate system-sm-medium text-text-primary">
|
||||
{t(($) => $['newKnowledge.processDocument'], { name: title })}
|
||||
</p>
|
||||
<p className="mt-0.5 truncate system-2xs-regular text-text-tertiary">
|
||||
<p className="mt-[3px] truncate system-xs-regular text-text-tertiary">
|
||||
{t(($) => $[`newKnowledge.processingTaskState.${task.state}`], {
|
||||
progress: task.progressPercent,
|
||||
})}
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "مطلوب نموذج إعادة الترتيب لخلط المعرفة الداخلية والخارجية.",
|
||||
"multimodal": "متعدد الوسائط",
|
||||
"newKnowledge.actionsColumn": "الإجراءات",
|
||||
"newKnowledge.addAndProcess": "إضافة ومعالجة",
|
||||
"newKnowledge.addDocument": "أضف وثيقة",
|
||||
"newKnowledge.addSource": "أضف المصدر",
|
||||
"newKnowledge.addSourceDescription": "قم بتوصيل مصدر بقاعدة المعرفة هذه - تتم مزامنته تلقائيًا ويظل محدثًا.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "تم تجاوز حصة مساحة العمل",
|
||||
"newKnowledge.documentUploadExclusion.target": "لم يعد هدف المستند صالحًا",
|
||||
"newKnowledge.documentUploadFailed": "لم نتمكن من تحميل هذه المستندات. حاول ثانية.",
|
||||
"newKnowledge.documentUploadFormats": "PDF، DOCX، Markdown، HTML، XLSX، TXT — حتى 15 ميغابايت لكل ملف",
|
||||
"newKnowledge.documentUploadPartial": "بدأت معالجة {{accepted}} مستندًا؛ تعذرت إضافة {{excluded}}: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "لم يتم قبول أي مستند: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "بدأت معالجة المستندات.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "تم تحديد وثائق {{count}}",
|
||||
"newKnowledge.documentsUnavailable": "— مستندات",
|
||||
"newKnowledge.downloadDocuments": "تحميل",
|
||||
"newKnowledge.dropFilesHere": "أفلت الملفات هنا",
|
||||
"newKnowledge.editSource": "تحرير",
|
||||
"newKnowledge.emptyChunk": "مقطع فارغ",
|
||||
"newKnowledge.emptyDescription": "أضف مستنداتك ليتمكن الوكلاء من قراءتها مباشرة — من دون إعداد الفهرسة.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "تحديد كل المصادر",
|
||||
"newKnowledge.selectChunk": "حدد مقطعًا لفحص محتواه.",
|
||||
"newKnowledge.selectFilesAndFolders": "حدد الملفات والمجلدات للمزامنة",
|
||||
"newKnowledge.selectedFiles": "الملفات المحددة ({{valid}} من {{total}} صالحة)",
|
||||
"newKnowledge.skippedFailed": "تم التخطي (فشل)",
|
||||
"newKnowledge.skippedOffDomain": "تم التخطي (خارج النطاق)",
|
||||
"newKnowledge.sourceActions": "إجراءات {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "تم التحديث",
|
||||
"newKnowledge.uploadCharactersUnavailable": "الأحرف: —",
|
||||
"newKnowledge.uploadDocuments": "تحميل المستندات",
|
||||
"newKnowledge.uploadDropZoneTitle": "اسحب الملفات وأفلتها هنا، أو انقر للتصفح",
|
||||
"newKnowledge.uploadFiles": "رفع الملفات",
|
||||
"newKnowledge.uploadFilesDescription": "أضف ملفات من جهازك — ستتم فهرستها بمجرد إنشائها.",
|
||||
"newKnowledge.uploadingFiles": "جارٍ الرفع…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Das Rerank-Modell ist für die Mischung von internem und externem Wissen erforderlich.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Aktionen",
|
||||
"newKnowledge.addAndProcess": "Hinzufügen und verarbeiten",
|
||||
"newKnowledge.addDocument": "Dokument hinzufügen",
|
||||
"newKnowledge.addSource": "Quelle hinzufügen",
|
||||
"newKnowledge.addSourceDescription": "Verbinden Sie eine Quelle mit dieser Wissensdatenbank – sie wird automatisch synchronisiert und bleibt aktuell.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "Arbeitsbereichskontingent überschritten",
|
||||
"newKnowledge.documentUploadExclusion.target": "Dokumentziel ist nicht mehr gültig",
|
||||
"newKnowledge.documentUploadFailed": "Wir konnten diese Dokumente nicht hochladen. Versuchen Sie es erneut.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — bis zu 15 MB pro Datei",
|
||||
"newKnowledge.documentUploadPartial": "{{accepted}} Dokumente wurden gestartet; {{excluded}} konnten nicht hinzugefügt werden: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Keine Dokumente wurden akzeptiert: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Die Dokumentenverarbeitung wurde gestartet.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} Dokumente ausgewählt",
|
||||
"newKnowledge.documentsUnavailable": "— Dokumente",
|
||||
"newKnowledge.downloadDocuments": "Herunterladen",
|
||||
"newKnowledge.dropFilesHere": "Dateien hier ablegen",
|
||||
"newKnowledge.editSource": "Bearbeiten",
|
||||
"newKnowledge.emptyChunk": "Leerer Abschnitt",
|
||||
"newKnowledge.emptyDescription": "Fügen Sie Ihre Dokumente hinzu, damit Agents sie direkt lesen können — ohne eine Indizierung einzurichten.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Alle Quellen auswählen",
|
||||
"newKnowledge.selectChunk": "Wählen Sie einen Abschnitt aus, um seinen Inhalt zu prüfen.",
|
||||
"newKnowledge.selectFilesAndFolders": "Dateien und Ordner zum Synchronisieren auswählen",
|
||||
"newKnowledge.selectedFiles": "Ausgewählte Dateien ({{valid}} von {{total}} gültig)",
|
||||
"newKnowledge.skippedFailed": "Übersprungen (fehlgeschlagen)",
|
||||
"newKnowledge.skippedOffDomain": "Übersprungen (außerhalb der Domain)",
|
||||
"newKnowledge.sourceActions": "Aktionen für {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Aktualisiert",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Zeichen: —",
|
||||
"newKnowledge.uploadDocuments": "Dokumente hochladen",
|
||||
"newKnowledge.uploadDropZoneTitle": "Dateien hierher ziehen oder zum Durchsuchen klicken",
|
||||
"newKnowledge.uploadFiles": "Dateien hochladen",
|
||||
"newKnowledge.uploadFilesDescription": "Fügen Sie Dateien von Ihrem Computer hinzu — sie werden beim Erstellen sofort indiziert.",
|
||||
"newKnowledge.uploadingFiles": "Wird hochgeladen…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "The Rerank model is required for mixture of internal and external knowledge.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Actions",
|
||||
"newKnowledge.addAndProcess": "Add & process",
|
||||
"newKnowledge.addDocument": "Add document",
|
||||
"newKnowledge.addSource": "Add source",
|
||||
"newKnowledge.addSourceDescription": "Connect a source to this knowledge base — it syncs automatically and stays fresh.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "workspace quota exceeded",
|
||||
"newKnowledge.documentUploadExclusion.target": "document target is no longer valid",
|
||||
"newKnowledge.documentUploadFailed": "We couldn't upload these documents. Try again.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — up to 15 MB each",
|
||||
"newKnowledge.documentUploadPartial": "{{accepted}} documents started; {{excluded}} could not be added: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "No documents were accepted: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Document processing started.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} documents selected",
|
||||
"newKnowledge.documentsUnavailable": "— documents",
|
||||
"newKnowledge.downloadDocuments": "Download",
|
||||
"newKnowledge.dropFilesHere": "Drop files here",
|
||||
"newKnowledge.editSource": "Edit",
|
||||
"newKnowledge.emptyChunk": "Empty chunk",
|
||||
"newKnowledge.emptyDescription": "Add your documents and agents can read them directly — no indexing to configure.",
|
||||
@ -299,7 +302,7 @@
|
||||
"newKnowledge.loadingSyncPolicy": "Loading sync policy",
|
||||
"newKnowledge.manualUpload": "Manual upload",
|
||||
"newKnowledge.maxPages": "Maximum pages",
|
||||
"newKnowledge.metadata": "Metadata",
|
||||
"newKnowledge.metadata": "Meta Data",
|
||||
"newKnowledge.mimeType": "File type",
|
||||
"newKnowledge.moreProviders": "More providers",
|
||||
"newKnowledge.name": "Knowledge name",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Select all sources",
|
||||
"newKnowledge.selectChunk": "Select a chunk to inspect its content.",
|
||||
"newKnowledge.selectFilesAndFolders": "Select files & folders to sync",
|
||||
"newKnowledge.selectedFiles": "Selected files ({{valid}} of {{total}} valid)",
|
||||
"newKnowledge.skippedFailed": "Skipped (failed)",
|
||||
"newKnowledge.skippedOffDomain": "Skipped (off-domain)",
|
||||
"newKnowledge.sourceActions": "Actions for {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Updated",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Characters: —",
|
||||
"newKnowledge.uploadDocuments": "Upload documents",
|
||||
"newKnowledge.uploadDropZoneTitle": "Drag & drop files here, or click to browse",
|
||||
"newKnowledge.uploadFiles": "Upload files",
|
||||
"newKnowledge.uploadFilesDescription": "Add files from your computer — they're indexed as soon as you create.",
|
||||
"newKnowledge.uploadingFiles": "Uploading…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "El modelo de Rerank es necesario para la mezcla de conocimiento interno y externo.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Acciones",
|
||||
"newKnowledge.addAndProcess": "Agregar y procesar",
|
||||
"newKnowledge.addDocument": "Agregar documento",
|
||||
"newKnowledge.addSource": "Agregar fuente",
|
||||
"newKnowledge.addSourceDescription": "Conecte una fuente a esta base de conocimientos: se sincroniza automáticamente y se mantiene actualizada.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "se superó la cuota del espacio de trabajo",
|
||||
"newKnowledge.documentUploadExclusion.target": "el destino del documento ya no es válido",
|
||||
"newKnowledge.documentUploadFailed": "No pudimos cargar estos documentos. Intentar otra vez.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — hasta 15 MB cada uno",
|
||||
"newKnowledge.documentUploadPartial": "Se inició el procesamiento de {{accepted}} documentos; no se pudieron añadir {{excluded}}: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "No se aceptó ningún documento: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Se inició el procesamiento de documentos.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Documentos {{count}} seleccionados",
|
||||
"newKnowledge.documentsUnavailable": "— documentos",
|
||||
"newKnowledge.downloadDocuments": "Descargar",
|
||||
"newKnowledge.dropFilesHere": "Suelta los archivos aquí",
|
||||
"newKnowledge.editSource": "Editar",
|
||||
"newKnowledge.emptyChunk": "Fragmento vacío",
|
||||
"newKnowledge.emptyDescription": "Añade tus documentos y los agentes podrán leerlos directamente, sin configurar la indexación.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Seleccionar todos los orígenes",
|
||||
"newKnowledge.selectChunk": "Selecciona un fragmento para revisar su contenido.",
|
||||
"newKnowledge.selectFilesAndFolders": "Selecciona archivos y carpetas para sincronizar",
|
||||
"newKnowledge.selectedFiles": "Archivos seleccionados ({{valid}} de {{total}} válidos)",
|
||||
"newKnowledge.skippedFailed": "Omitido (fallido)",
|
||||
"newKnowledge.skippedOffDomain": "Omitido (fuera del dominio)",
|
||||
"newKnowledge.sourceActions": "Acciones para {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Actualizado",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Caracteres: —",
|
||||
"newKnowledge.uploadDocuments": "Subir documentos",
|
||||
"newKnowledge.uploadDropZoneTitle": "Arrastra y suelta archivos aquí, o haz clic para explorar",
|
||||
"newKnowledge.uploadFiles": "Subir archivos",
|
||||
"newKnowledge.uploadFilesDescription": "Añade archivos desde tu ordenador; se indexarán en cuanto los crees.",
|
||||
"newKnowledge.uploadingFiles": "Subiendo…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "مدل Rerank برای آمیختگی دانش درونی و بیرونی مورد نیاز است.",
|
||||
"multimodal": "چندوجهی",
|
||||
"newKnowledge.actionsColumn": "اقدامات",
|
||||
"newKnowledge.addAndProcess": "افزودن و پردازش",
|
||||
"newKnowledge.addDocument": "سند اضافه کنید",
|
||||
"newKnowledge.addSource": "اضافه کردن منبع",
|
||||
"newKnowledge.addSourceDescription": "منبعی را به این پایگاه دانش متصل کنید - به طور خودکار همگامسازی میشود و تازه میماند.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "سهمیه فضای کاری رد شده است",
|
||||
"newKnowledge.documentUploadExclusion.target": "هدف سند دیگر معتبر نیست",
|
||||
"newKnowledge.documentUploadFailed": "ما نتوانستیم این اسناد را آپلود کنیم. دوباره امتحان کنید.",
|
||||
"newKnowledge.documentUploadFormats": "PDF، DOCX، Markdown، HTML، XLSX، TXT — حداکثر ۱۵ مگابایت برای هر فایل",
|
||||
"newKnowledge.documentUploadPartial": "پردازش {{accepted}} سند آغاز شد؛ {{excluded}} سند افزوده نشد: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "هیچ سندی پذیرفته نشد: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "پردازش اسناد آغاز شد.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "اسناد {{count}} انتخاب شد",
|
||||
"newKnowledge.documentsUnavailable": "— سند",
|
||||
"newKnowledge.downloadDocuments": "دانلود کنید",
|
||||
"newKnowledge.dropFilesHere": "فایلها را اینجا رها کنید",
|
||||
"newKnowledge.editSource": "ویرایش",
|
||||
"newKnowledge.emptyChunk": "قطعه خالی",
|
||||
"newKnowledge.emptyDescription": "اسناد خود را اضافه کنید تا عاملها بتوانند مستقیماً آنها را بخوانند — بدون نیاز به تنظیم نمایهسازی.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "انتخاب همه منابع",
|
||||
"newKnowledge.selectChunk": "یک قطعه را برای بررسی محتوای آن انتخاب کنید.",
|
||||
"newKnowledge.selectFilesAndFolders": "فایلها و پوشهها را برای همگامسازی انتخاب کنید",
|
||||
"newKnowledge.selectedFiles": "فایلهای انتخابشده ({{valid}} از {{total}} معتبر)",
|
||||
"newKnowledge.skippedFailed": "رد شد (ناموفق)",
|
||||
"newKnowledge.skippedOffDomain": "رد شد (خارج از دامنه)",
|
||||
"newKnowledge.sourceActions": "اقدامات برای {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "به روز شد",
|
||||
"newKnowledge.uploadCharactersUnavailable": "نویسهها: —",
|
||||
"newKnowledge.uploadDocuments": "اسناد را بارگذاری کنید",
|
||||
"newKnowledge.uploadDropZoneTitle": "فایلها را اینجا بکشید و رها کنید یا برای انتخاب کلیک کنید",
|
||||
"newKnowledge.uploadFiles": "بارگذاری فایلها",
|
||||
"newKnowledge.uploadFilesDescription": "فایلها را از رایانه اضافه کنید — بهمحض ایجاد نمایهسازی میشوند.",
|
||||
"newKnowledge.uploadingFiles": "در حال بارگذاری…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Le modèle Rerank est nécessaire pour mélanger les connaissances internes et externes.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Actions",
|
||||
"newKnowledge.addAndProcess": "Ajouter et traiter",
|
||||
"newKnowledge.addDocument": "Ajouter un document",
|
||||
"newKnowledge.addSource": "Ajouter une source",
|
||||
"newKnowledge.addSourceDescription": "Connectez une source à cette base de connaissances : elle se synchronise automatiquement et reste à jour.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "quota de l’espace de travail dépassé",
|
||||
"newKnowledge.documentUploadExclusion.target": "la cible du document n’est plus valide",
|
||||
"newKnowledge.documentUploadFailed": "Nous n'avons pas pu télécharger ces documents. Essayer à nouveau.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — jusqu’à 15 Mo chacun",
|
||||
"newKnowledge.documentUploadPartial": "Le traitement de {{accepted}} documents a démarré ; {{excluded}} n’ont pas pu être ajoutés : {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Aucun document n’a été accepté : {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Le traitement du document a commencé.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Documents {{count}} sélectionnés",
|
||||
"newKnowledge.documentsUnavailable": "— documents",
|
||||
"newKnowledge.downloadDocuments": "Télécharger",
|
||||
"newKnowledge.dropFilesHere": "Déposez les fichiers ici",
|
||||
"newKnowledge.editSource": "Modifier",
|
||||
"newKnowledge.emptyChunk": "Segment vide",
|
||||
"newKnowledge.emptyDescription": "Ajoutez vos documents et les agents pourront les lire directement, sans indexation à configurer.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Sélectionner toutes les sources",
|
||||
"newKnowledge.selectChunk": "Sélectionnez un segment pour examiner son contenu.",
|
||||
"newKnowledge.selectFilesAndFolders": "Sélectionnez les fichiers et dossiers à synchroniser",
|
||||
"newKnowledge.selectedFiles": "Fichiers sélectionnés ({{valid}} sur {{total}} valides)",
|
||||
"newKnowledge.skippedFailed": "Ignoré (échec)",
|
||||
"newKnowledge.skippedOffDomain": "Ignoré (hors domaine)",
|
||||
"newKnowledge.sourceActions": "Actions pour {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Mis à jour",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Caractères : —",
|
||||
"newKnowledge.uploadDocuments": "Télécharger des documents",
|
||||
"newKnowledge.uploadDropZoneTitle": "Glissez-déposez les fichiers ici ou cliquez pour parcourir",
|
||||
"newKnowledge.uploadFiles": "Importer des fichiers",
|
||||
"newKnowledge.uploadFilesDescription": "Ajoutez des fichiers depuis votre ordinateur : ils sont indexés dès leur création.",
|
||||
"newKnowledge.uploadingFiles": "Téléversement…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "आंतरिक और बाहरी ज्ञान के मिश्रण के लिए रीरैंक मॉडल की आवश्यकता होती है।",
|
||||
"multimodal": "बहु-मोडल",
|
||||
"newKnowledge.actionsColumn": "क्रियाएँ",
|
||||
"newKnowledge.addAndProcess": "जोड़ें और प्रोसेस करें",
|
||||
"newKnowledge.addDocument": "दस्तावेज़ जोड़ें",
|
||||
"newKnowledge.addSource": "स्रोत जोड़ें",
|
||||
"newKnowledge.addSourceDescription": "इस ज्ञानकोष से एक स्रोत कनेक्ट करें - यह स्वचालित रूप से समन्वयित होता है और ताज़ा रहता है।",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "कार्यस्थान कोटा पार हो गया",
|
||||
"newKnowledge.documentUploadExclusion.target": "दस्तावेज़ लक्ष्य अब मान्य नहीं है",
|
||||
"newKnowledge.documentUploadFailed": "हम ये दस्तावेज़ अपलोड नहीं कर सके. पुनः प्रयास करें।",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — प्रत्येक अधिकतम 15 MB",
|
||||
"newKnowledge.documentUploadPartial": "{{accepted}} दस्तावेज़ों की प्रोसेसिंग शुरू हुई; {{excluded}} जोड़े नहीं जा सके: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "कोई दस्तावेज़ स्वीकार नहीं किया गया: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "दस्तावेज़ प्रसंस्करण शुरू हुआ.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} दस्तावेज़ चयनित",
|
||||
"newKnowledge.documentsUnavailable": "— दस्तावेज़",
|
||||
"newKnowledge.downloadDocuments": "डाउनलोड करें",
|
||||
"newKnowledge.dropFilesHere": "फ़ाइलें यहाँ छोड़ें",
|
||||
"newKnowledge.editSource": "संपादित करें",
|
||||
"newKnowledge.emptyChunk": "खाली खंड",
|
||||
"newKnowledge.emptyDescription": "अपने दस्तावेज़ जोड़ें ताकि एजेंट उन्हें सीधे पढ़ सकें — इंडेक्सिंग कॉन्फ़िगर करने की ज़रूरत नहीं।",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "सभी स्रोत चुनें",
|
||||
"newKnowledge.selectChunk": "सामग्री देखने के लिए कोई खंड चुनें।",
|
||||
"newKnowledge.selectFilesAndFolders": "सिंक करने के लिए फ़ाइलें और फ़ोल्डर चुनें",
|
||||
"newKnowledge.selectedFiles": "चुनी गई फ़ाइलें ({{total}} में से {{valid}} मान्य)",
|
||||
"newKnowledge.skippedFailed": "छोड़ा गया (विफल)",
|
||||
"newKnowledge.skippedOffDomain": "छोड़ा गया (डोमेन से बाहर)",
|
||||
"newKnowledge.sourceActions": "{{name}} के लिए कार्रवाइयां",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "अद्यतन किया गया",
|
||||
"newKnowledge.uploadCharactersUnavailable": "वर्ण: —",
|
||||
"newKnowledge.uploadDocuments": "दस्तावेज़ अपलोड करें",
|
||||
"newKnowledge.uploadDropZoneTitle": "फ़ाइलें यहाँ खींचकर छोड़ें, या ब्राउज़ करने के लिए क्लिक करें",
|
||||
"newKnowledge.uploadFiles": "फ़ाइलें अपलोड करें",
|
||||
"newKnowledge.uploadFilesDescription": "अपने कंप्यूटर से फ़ाइलें जोड़ें — बनाते ही वे इंडेक्स हो जाएँगी।",
|
||||
"newKnowledge.uploadingFiles": "अपलोड हो रहा है…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Model Rerank diperlukan untuk campuran pengetahuan internal dan eksternal.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Tindakan",
|
||||
"newKnowledge.addAndProcess": "Tambahkan & proses",
|
||||
"newKnowledge.addDocument": "Tambahkan dokumen",
|
||||
"newKnowledge.addSource": "Tambahkan sumber",
|
||||
"newKnowledge.addSourceDescription": "Hubungkan sumber ke basis pengetahuan ini — sumber tersebut akan disinkronkan secara otomatis dan tetap segar.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "kuota ruang kerja terlampaui",
|
||||
"newKnowledge.documentUploadExclusion.target": "target dokumen tidak lagi valid",
|
||||
"newKnowledge.documentUploadFailed": "Kami tidak dapat mengunggah dokumen-dokumen ini. Coba lagi.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — maksimal 15 MB per file",
|
||||
"newKnowledge.documentUploadPartial": "Pemrosesan {{accepted}} dokumen dimulai; {{excluded}} tidak dapat ditambahkan: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Tidak ada dokumen yang diterima: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Pemrosesan dokumen dimulai.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Dokumen {{count}} dipilih",
|
||||
"newKnowledge.documentsUnavailable": "— dokumen",
|
||||
"newKnowledge.downloadDocuments": "Unduh",
|
||||
"newKnowledge.dropFilesHere": "Letakkan file di sini",
|
||||
"newKnowledge.editSource": "Sunting",
|
||||
"newKnowledge.emptyChunk": "Potongan kosong",
|
||||
"newKnowledge.emptyDescription": "Tambahkan dokumen agar agen dapat membacanya langsung — tanpa perlu mengatur pengindeksan.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Pilih semua sumber",
|
||||
"newKnowledge.selectChunk": "Pilih potongan untuk memeriksa isinya.",
|
||||
"newKnowledge.selectFilesAndFolders": "Pilih file dan folder untuk disinkronkan",
|
||||
"newKnowledge.selectedFiles": "File terpilih ({{valid}} dari {{total}} valid)",
|
||||
"newKnowledge.skippedFailed": "Dilewati (gagal)",
|
||||
"newKnowledge.skippedOffDomain": "Dilewati (di luar domain)",
|
||||
"newKnowledge.sourceActions": "Tindakan untuk {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Diperbarui",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Karakter: —",
|
||||
"newKnowledge.uploadDocuments": "Unggah dokumen",
|
||||
"newKnowledge.uploadDropZoneTitle": "Seret & letakkan file di sini, atau klik untuk memilih",
|
||||
"newKnowledge.uploadFiles": "Unggah file",
|
||||
"newKnowledge.uploadFilesDescription": "Tambahkan file dari komputer — file akan diindeks segera setelah dibuat.",
|
||||
"newKnowledge.uploadingFiles": "Mengunggah…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Il modello Rerank è necessario per la combinazione di conoscenze interne ed esterne.",
|
||||
"multimodal": "Multimodale",
|
||||
"newKnowledge.actionsColumn": "Azioni",
|
||||
"newKnowledge.addAndProcess": "Aggiungi ed elabora",
|
||||
"newKnowledge.addDocument": "Aggiungi documento",
|
||||
"newKnowledge.addSource": "Aggiungi fonte",
|
||||
"newKnowledge.addSourceDescription": "Collega una fonte a questa knowledge base: si sincronizza automaticamente e rimane aggiornata.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "quota dell'area di lavoro superata",
|
||||
"newKnowledge.documentUploadExclusion.target": "la destinazione del documento non è più valida",
|
||||
"newKnowledge.documentUploadFailed": "Non è stato possibile caricare questi documenti. Riprova.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — fino a 15 MB ciascuno",
|
||||
"newKnowledge.documentUploadPartial": "Elaborazione avviata per {{accepted}} documenti; impossibile aggiungerne {{excluded}}: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Nessun documento è stato accettato: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "È iniziata l'elaborazione del documento.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Documenti {{count}} selezionati",
|
||||
"newKnowledge.documentsUnavailable": "— documenti",
|
||||
"newKnowledge.downloadDocuments": "Scarica",
|
||||
"newKnowledge.dropFilesHere": "Trascina qui i file",
|
||||
"newKnowledge.editSource": "Modifica",
|
||||
"newKnowledge.emptyChunk": "Segmento vuoto",
|
||||
"newKnowledge.emptyDescription": "Aggiungi i tuoi documenti e gli agenti potranno leggerli direttamente, senza configurare l’indicizzazione.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Seleziona tutte le origini",
|
||||
"newKnowledge.selectChunk": "Seleziona un segmento per esaminarne il contenuto.",
|
||||
"newKnowledge.selectFilesAndFolders": "Seleziona file e cartelle da sincronizzare",
|
||||
"newKnowledge.selectedFiles": "File selezionati ({{valid}} di {{total}} validi)",
|
||||
"newKnowledge.skippedFailed": "Ignorato (errore)",
|
||||
"newKnowledge.skippedOffDomain": "Ignorato (fuori dominio)",
|
||||
"newKnowledge.sourceActions": "Azioni per {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Aggiornato",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Caratteri: —",
|
||||
"newKnowledge.uploadDocuments": "Carica documenti",
|
||||
"newKnowledge.uploadDropZoneTitle": "Trascina qui i file oppure fai clic per sfogliare",
|
||||
"newKnowledge.uploadFiles": "Carica file",
|
||||
"newKnowledge.uploadFilesDescription": "Aggiungi file dal computer: vengono indicizzati appena li crei.",
|
||||
"newKnowledge.uploadingFiles": "Caricamento…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "内部と外部のナレッジベースを混在させる場合、Rerank モデルが必要です。",
|
||||
"multimodal": "マルチモーダル",
|
||||
"newKnowledge.actionsColumn": "アクション",
|
||||
"newKnowledge.addAndProcess": "追加して処理",
|
||||
"newKnowledge.addDocument": "ドキュメントの追加",
|
||||
"newKnowledge.addSource": "ソースを追加",
|
||||
"newKnowledge.addSourceDescription": "ソースをこのナレッジ ベースに接続すると、自動的に同期され、最新の状態が保たれます。",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "ワークスペースのクォータを超えています",
|
||||
"newKnowledge.documentUploadExclusion.target": "ドキュメントの対象が無効になっています",
|
||||
"newKnowledge.documentUploadFailed": "これらの書類をアップロードできませんでした。もう一度やり直してください。",
|
||||
"newKnowledge.documentUploadFormats": "PDF、DOCX、Markdown、HTML、XLSX、TXT — 1ファイル最大15 MB",
|
||||
"newKnowledge.documentUploadPartial": "{{accepted}} 件のドキュメントの処理を開始しました。{{excluded}} 件は追加できませんでした:{{details}}",
|
||||
"newKnowledge.documentUploadRejected": "ドキュメントを受け付けられませんでした:{{details}}",
|
||||
"newKnowledge.documentUploadStarted": "文書処理が開始されました。",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} ドキュメントが選択されました",
|
||||
"newKnowledge.documentsUnavailable": "— 件のドキュメント",
|
||||
"newKnowledge.downloadDocuments": "ダウンロード",
|
||||
"newKnowledge.dropFilesHere": "ここにファイルをドロップ",
|
||||
"newKnowledge.editSource": "編集",
|
||||
"newKnowledge.emptyChunk": "空のチャンク",
|
||||
"newKnowledge.emptyDescription": "ドキュメントを追加すると、エージェントが直接読み取れます。インデックス設定は不要です。",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "すべてのソースを選択",
|
||||
"newKnowledge.selectChunk": "内容を確認するチャンクを選択してください。",
|
||||
"newKnowledge.selectFilesAndFolders": "同期するファイルとフォルダーを選択",
|
||||
"newKnowledge.selectedFiles": "選択したファイル({{total}}件中{{valid}}件が有効)",
|
||||
"newKnowledge.skippedFailed": "スキップ(失敗)",
|
||||
"newKnowledge.skippedOffDomain": "スキップ(ドメイン外)",
|
||||
"newKnowledge.sourceActions": "{{name}} のアクション",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "更新されました",
|
||||
"newKnowledge.uploadCharactersUnavailable": "文字数:—",
|
||||
"newKnowledge.uploadDocuments": "書類のアップロード",
|
||||
"newKnowledge.uploadDropZoneTitle": "ここにファイルをドラッグ&ドロップするか、クリックして選択",
|
||||
"newKnowledge.uploadFiles": "ファイルをアップロード",
|
||||
"newKnowledge.uploadFilesDescription": "コンピューターからファイルを追加すると、作成時にすぐインデックス化されます。",
|
||||
"newKnowledge.uploadingFiles": "アップロード中…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "리랭크 모델은 내부 및 외부 지식의 혼합에 필요합니다.",
|
||||
"multimodal": "멀티모달",
|
||||
"newKnowledge.actionsColumn": "작업",
|
||||
"newKnowledge.addAndProcess": "추가 및 처리",
|
||||
"newKnowledge.addDocument": "문서 추가",
|
||||
"newKnowledge.addSource": "소스 추가",
|
||||
"newKnowledge.addSourceDescription": "이 지식 베이스에 소스를 연결하세요. 자동으로 동기화되고 최신 상태로 유지됩니다.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "워크스페이스 할당량을 초과했습니다",
|
||||
"newKnowledge.documentUploadExclusion.target": "문서 대상이 더 이상 유효하지 않습니다",
|
||||
"newKnowledge.documentUploadFailed": "이 문서를 업로드할 수 없습니다. 다시 시도해 보세요.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — 파일당 최대 15 MB",
|
||||
"newKnowledge.documentUploadPartial": "문서 {{accepted}}개의 처리를 시작했습니다. {{excluded}}개는 추가하지 못했습니다: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "수락된 문서가 없습니다: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "문서 처리가 시작되었습니다.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} 문서가 선택됨",
|
||||
"newKnowledge.documentsUnavailable": "문서 —개",
|
||||
"newKnowledge.downloadDocuments": "다운로드",
|
||||
"newKnowledge.dropFilesHere": "여기에 파일을 놓으세요",
|
||||
"newKnowledge.editSource": "편집",
|
||||
"newKnowledge.emptyChunk": "빈 청크",
|
||||
"newKnowledge.emptyDescription": "문서를 추가하면 에이전트가 직접 읽을 수 있습니다. 인덱싱 설정은 필요하지 않습니다.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "모든 소스 선택",
|
||||
"newKnowledge.selectChunk": "내용을 확인할 청크를 선택하세요.",
|
||||
"newKnowledge.selectFilesAndFolders": "동기화할 파일과 폴더 선택",
|
||||
"newKnowledge.selectedFiles": "선택한 파일 ({{total}}개 중 {{valid}}개 유효)",
|
||||
"newKnowledge.skippedFailed": "건너뜀(실패)",
|
||||
"newKnowledge.skippedOffDomain": "건너뜀(도메인 외부)",
|
||||
"newKnowledge.sourceActions": "{{name}}에 대한 작업",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "업데이트됨",
|
||||
"newKnowledge.uploadCharactersUnavailable": "문자 수: —",
|
||||
"newKnowledge.uploadDocuments": "문서 업로드",
|
||||
"newKnowledge.uploadDropZoneTitle": "파일을 여기로 끌어다 놓거나 클릭하여 찾아보기",
|
||||
"newKnowledge.uploadFiles": "파일 업로드",
|
||||
"newKnowledge.uploadFilesDescription": "컴퓨터에서 파일을 추가하면 생성 즉시 인덱싱됩니다.",
|
||||
"newKnowledge.uploadingFiles": "업로드 중…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "The Rerank model is required for mixture of internal and external knowledge.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Acties",
|
||||
"newKnowledge.addAndProcess": "Toevoegen en verwerken",
|
||||
"newKnowledge.addDocument": "Document toevoegen",
|
||||
"newKnowledge.addSource": "Bron toevoegen",
|
||||
"newKnowledge.addSourceDescription": "Verbind een bron met deze kennisbank: deze synchroniseert automatisch en blijft actueel.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "werkruimtequotum overschreden",
|
||||
"newKnowledge.documentUploadExclusion.target": "documentdoel is niet meer geldig",
|
||||
"newKnowledge.documentUploadFailed": "We konden deze documenten niet uploaden. Probeer het opnieuw.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — maximaal 15 MB per bestand",
|
||||
"newKnowledge.documentUploadPartial": "Verwerking van {{accepted}} documenten gestart; {{excluded}} konden niet worden toegevoegd: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Er zijn geen documenten geaccepteerd: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Documentverwerking gestart.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}}-documenten geselecteerd",
|
||||
"newKnowledge.documentsUnavailable": "— documenten",
|
||||
"newKnowledge.downloadDocuments": "Downloaden",
|
||||
"newKnowledge.dropFilesHere": "Zet bestanden hier neer",
|
||||
"newKnowledge.editSource": "Bewerken",
|
||||
"newKnowledge.emptyChunk": "Leeg fragment",
|
||||
"newKnowledge.emptyDescription": "Voeg je documenten toe zodat agents ze direct kunnen lezen, zonder indexering te configureren.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Alle bronnen selecteren",
|
||||
"newKnowledge.selectChunk": "Selecteer een fragment om de inhoud te bekijken.",
|
||||
"newKnowledge.selectFilesAndFolders": "Selecteer bestanden en mappen om te synchroniseren",
|
||||
"newKnowledge.selectedFiles": "Geselecteerde bestanden ({{valid}} van {{total}} geldig)",
|
||||
"newKnowledge.skippedFailed": "Overgeslagen (mislukt)",
|
||||
"newKnowledge.skippedOffDomain": "Overgeslagen (buiten domein)",
|
||||
"newKnowledge.sourceActions": "Acties voor {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Bijgewerkt",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Tekens: —",
|
||||
"newKnowledge.uploadDocuments": "Documenten uploaden",
|
||||
"newKnowledge.uploadDropZoneTitle": "Sleep bestanden hierheen of klik om te bladeren",
|
||||
"newKnowledge.uploadFiles": "Bestanden uploaden",
|
||||
"newKnowledge.uploadFilesDescription": "Voeg bestanden van je computer toe; ze worden geïndexeerd zodra je ze aanmaakt.",
|
||||
"newKnowledge.uploadingFiles": "Uploaden…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Model Rerank jest wymagany do połączenia wiedzy wewnętrznej i zewnętrznej.",
|
||||
"multimodal": "Multimodalny",
|
||||
"newKnowledge.actionsColumn": "Działania",
|
||||
"newKnowledge.addAndProcess": "Dodaj i przetwórz",
|
||||
"newKnowledge.addDocument": "Dodaj dokument",
|
||||
"newKnowledge.addSource": "Dodaj źródło",
|
||||
"newKnowledge.addSourceDescription": "Podłącz źródło do tej bazy wiedzy — synchronizuje się ona automatycznie i pozostaje aktualna.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "przekroczono limit obszaru roboczego",
|
||||
"newKnowledge.documentUploadExclusion.target": "miejsce docelowe dokumentu jest już nieprawidłowe",
|
||||
"newKnowledge.documentUploadFailed": "Nie mogliśmy przesłać tych dokumentów. Spróbuj ponownie.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — do 15 MB każdy",
|
||||
"newKnowledge.documentUploadPartial": "Rozpoczęto przetwarzanie {{accepted}} dokumentów; nie udało się dodać {{excluded}}: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Nie zaakceptowano żadnych dokumentów: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Rozpoczęto przetwarzanie dokumentu.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Wybrano dokumenty {{count}}",
|
||||
"newKnowledge.documentsUnavailable": "— dokumentów",
|
||||
"newKnowledge.downloadDocuments": "Pobierz",
|
||||
"newKnowledge.dropFilesHere": "Upuść pliki tutaj",
|
||||
"newKnowledge.editSource": "Edytuj",
|
||||
"newKnowledge.emptyChunk": "Pusty fragment",
|
||||
"newKnowledge.emptyDescription": "Dodaj dokumenty, aby agenci mogli je czytać bezpośrednio — bez konfigurowania indeksowania.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Wybierz wszystkie źródła",
|
||||
"newKnowledge.selectChunk": "Wybierz fragment, aby sprawdzić jego zawartość.",
|
||||
"newKnowledge.selectFilesAndFolders": "Wybierz pliki i foldery do synchronizacji",
|
||||
"newKnowledge.selectedFiles": "Wybrane pliki ({{valid}} z {{total}} prawidłowych)",
|
||||
"newKnowledge.skippedFailed": "Pominięto (błąd)",
|
||||
"newKnowledge.skippedOffDomain": "Pominięto (poza domeną)",
|
||||
"newKnowledge.sourceActions": "Działania dla {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Zaktualizowano",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Znaki: —",
|
||||
"newKnowledge.uploadDocuments": "Prześlij dokumenty",
|
||||
"newKnowledge.uploadDropZoneTitle": "Przeciągnij i upuść pliki tutaj lub kliknij, aby przeglądać",
|
||||
"newKnowledge.uploadFiles": "Prześlij pliki",
|
||||
"newKnowledge.uploadFilesDescription": "Dodaj pliki z komputera — zostaną zindeksowane od razu po utworzeniu.",
|
||||
"newKnowledge.uploadingFiles": "Przesyłanie…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "O modelo de Reclassificação é necessário para a mistura de conhecimento interno e externo.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Ações",
|
||||
"newKnowledge.addAndProcess": "Adicionar e processar",
|
||||
"newKnowledge.addDocument": "Adicionar documento",
|
||||
"newKnowledge.addSource": "Adicionar fonte",
|
||||
"newKnowledge.addSourceDescription": "Conecte uma fonte a esta base de conhecimento — ela sincroniza automaticamente e permanece atualizada.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "cota do espaço de trabalho excedida",
|
||||
"newKnowledge.documentUploadExclusion.target": "o destino do documento não é mais válido",
|
||||
"newKnowledge.documentUploadFailed": "Não foi possível fazer upload desses documentos. Tente novamente.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — até 15 MB cada",
|
||||
"newKnowledge.documentUploadPartial": "O processamento de {{accepted}} documentos foi iniciado; não foi possível adicionar {{excluded}}: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Nenhum documento foi aceito: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "O processamento do documento foi iniciado.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Documentos {{count}} selecionados",
|
||||
"newKnowledge.documentsUnavailable": "— documentos",
|
||||
"newKnowledge.downloadDocuments": "Baixar",
|
||||
"newKnowledge.dropFilesHere": "Solte os arquivos aqui",
|
||||
"newKnowledge.editSource": "Editar",
|
||||
"newKnowledge.emptyChunk": "Trecho vazio",
|
||||
"newKnowledge.emptyDescription": "Adicione seus documentos para que os agentes possam lê-los diretamente, sem configurar a indexação.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Selecionar todas as origens",
|
||||
"newKnowledge.selectChunk": "Selecione um trecho para inspecionar seu conteúdo.",
|
||||
"newKnowledge.selectFilesAndFolders": "Selecione arquivos e pastas para sincronizar",
|
||||
"newKnowledge.selectedFiles": "Arquivos selecionados ({{valid}} de {{total}} válidos)",
|
||||
"newKnowledge.skippedFailed": "Ignorado (falha)",
|
||||
"newKnowledge.skippedOffDomain": "Ignorado (fora do domínio)",
|
||||
"newKnowledge.sourceActions": "Ações para {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Atualizado",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Caracteres: —",
|
||||
"newKnowledge.uploadDocuments": "Carregar documentos",
|
||||
"newKnowledge.uploadDropZoneTitle": "Arraste e solte arquivos aqui ou clique para procurar",
|
||||
"newKnowledge.uploadFiles": "Enviar arquivos",
|
||||
"newKnowledge.uploadFilesDescription": "Adicione arquivos do seu computador; eles são indexados assim que você os cria.",
|
||||
"newKnowledge.uploadingFiles": "Enviando…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Modelul Rerank este necesar pentru amestecul de cunoștințe interne și externe.",
|
||||
"multimodal": "Multimodal",
|
||||
"newKnowledge.actionsColumn": "Acțiuni",
|
||||
"newKnowledge.addAndProcess": "Adaugă și procesează",
|
||||
"newKnowledge.addDocument": "Adăugați document",
|
||||
"newKnowledge.addSource": "Adăugați sursa",
|
||||
"newKnowledge.addSourceDescription": "Conectați o sursă la această bază de cunoștințe — se sincronizează automat și rămâne actuală.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "cota spațiului de lucru a fost depășită",
|
||||
"newKnowledge.documentUploadExclusion.target": "destinația documentului nu mai este validă",
|
||||
"newKnowledge.documentUploadFailed": "Nu am putut încărca aceste documente. Încearcă din nou.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — până la 15 MB fiecare",
|
||||
"newKnowledge.documentUploadPartial": "Procesarea a {{accepted}} documente a început; {{excluded}} nu au putut fi adăugate: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Nu a fost acceptat niciun document: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Procesarea documentelor a început.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} documente selectate",
|
||||
"newKnowledge.documentsUnavailable": "— documente",
|
||||
"newKnowledge.downloadDocuments": "Descărcați",
|
||||
"newKnowledge.dropFilesHere": "Plasează fișierele aici",
|
||||
"newKnowledge.editSource": "Edita",
|
||||
"newKnowledge.emptyChunk": "Fragment gol",
|
||||
"newKnowledge.emptyDescription": "Adaugă documentele, iar agenții le pot citi direct — fără indexare de configurat.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Selectează toate sursele",
|
||||
"newKnowledge.selectChunk": "Selectează un fragment pentru a-i verifica conținutul.",
|
||||
"newKnowledge.selectFilesAndFolders": "Selectează fișierele și folderele de sincronizat",
|
||||
"newKnowledge.selectedFiles": "Fișiere selectate ({{valid}} din {{total}} valide)",
|
||||
"newKnowledge.skippedFailed": "Omis (eșuat)",
|
||||
"newKnowledge.skippedOffDomain": "Omis (în afara domeniului)",
|
||||
"newKnowledge.sourceActions": "Acțiuni pentru {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Actualizat",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Caractere: —",
|
||||
"newKnowledge.uploadDocuments": "Încărcați documente",
|
||||
"newKnowledge.uploadDropZoneTitle": "Trage și plasează fișierele aici sau fă clic pentru a naviga",
|
||||
"newKnowledge.uploadFiles": "Încarcă fișiere",
|
||||
"newKnowledge.uploadFilesDescription": "Adaugă fișiere de pe computer — sunt indexate imediat ce le creezi.",
|
||||
"newKnowledge.uploadingFiles": "Se încarcă…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Модель Rerank необходима для смешивания внутренних и внешних знаний.",
|
||||
"multimodal": "Мультимодальный",
|
||||
"newKnowledge.actionsColumn": "Действия",
|
||||
"newKnowledge.addAndProcess": "Добавить и обработать",
|
||||
"newKnowledge.addDocument": "Добавить документ",
|
||||
"newKnowledge.addSource": "Добавить источник",
|
||||
"newKnowledge.addSourceDescription": "Подключите источник к этой базе знаний — она синхронизируется автоматически и остается актуальной.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "превышена квота рабочей области",
|
||||
"newKnowledge.documentUploadExclusion.target": "назначение документа больше недействительно",
|
||||
"newKnowledge.documentUploadFailed": "Нам не удалось загрузить эти документы. Попробуйте еще раз.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — до 15 МБ каждый",
|
||||
"newKnowledge.documentUploadPartial": "Начата обработка {{accepted}} документов; не удалось добавить {{excluded}}: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Ни один документ не принят: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Началась обработка документов.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} выбраны документы",
|
||||
"newKnowledge.documentsUnavailable": "— документов",
|
||||
"newKnowledge.downloadDocuments": "Скачать",
|
||||
"newKnowledge.dropFilesHere": "Перетащите файлы сюда",
|
||||
"newKnowledge.editSource": "Править",
|
||||
"newKnowledge.emptyChunk": "Пустой фрагмент",
|
||||
"newKnowledge.emptyDescription": "Добавьте документы, и агенты смогут читать их напрямую — без настройки индексации.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Выбрать все источники",
|
||||
"newKnowledge.selectChunk": "Выберите фрагмент, чтобы просмотреть его содержимое.",
|
||||
"newKnowledge.selectFilesAndFolders": "Выберите файлы и папки для синхронизации",
|
||||
"newKnowledge.selectedFiles": "Выбранные файлы ({{valid}} из {{total}} допустимы)",
|
||||
"newKnowledge.skippedFailed": "Пропущено (ошибка)",
|
||||
"newKnowledge.skippedOffDomain": "Пропущено (вне домена)",
|
||||
"newKnowledge.sourceActions": "Действия для {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Обновлено",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Символы: —",
|
||||
"newKnowledge.uploadDocuments": "Загрузить документы",
|
||||
"newKnowledge.uploadDropZoneTitle": "Перетащите файлы сюда или нажмите для выбора",
|
||||
"newKnowledge.uploadFiles": "Загрузить файлы",
|
||||
"newKnowledge.uploadFilesDescription": "Добавьте файлы с компьютера — они будут проиндексированы сразу после создания.",
|
||||
"newKnowledge.uploadingFiles": "Загрузка…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Model za ponovno razvrščanje je potreben za mešanico notranjega in zunanjega znanja.",
|
||||
"multimodal": "Multimodalen",
|
||||
"newKnowledge.actionsColumn": "Dejanja",
|
||||
"newKnowledge.addAndProcess": "Dodaj in obdelaj",
|
||||
"newKnowledge.addDocument": "Dodaj dokument",
|
||||
"newKnowledge.addSource": "Dodaj vir",
|
||||
"newKnowledge.addSourceDescription": "Povežite vir s to bazo znanja — samodejno se sinhronizira in ostane sveža.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "kvota delovnega prostora je presežena",
|
||||
"newKnowledge.documentUploadExclusion.target": "cilj dokumenta ni več veljaven",
|
||||
"newKnowledge.documentUploadFailed": "Teh dokumentov nismo mogli naložiti. poskusi ponovno",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — do 15 MB na datoteko",
|
||||
"newKnowledge.documentUploadPartial": "Obdelava {{accepted}} dokumentov se je začela; {{excluded}} jih ni bilo mogoče dodati: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Noben dokument ni bil sprejet: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Začela se je obdelava dokumentov.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Izbrani dokumenti {{count}}",
|
||||
"newKnowledge.documentsUnavailable": "— dokumentov",
|
||||
"newKnowledge.downloadDocuments": "Prenos",
|
||||
"newKnowledge.dropFilesHere": "Spustite datoteke sem",
|
||||
"newKnowledge.editSource": "Uredi",
|
||||
"newKnowledge.emptyChunk": "Prazen del",
|
||||
"newKnowledge.emptyDescription": "Dodajte dokumente in agenti jih lahko berejo neposredno — brez nastavljanja indeksiranja.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Izberi vse vire",
|
||||
"newKnowledge.selectChunk": "Izberite del za pregled njegove vsebine.",
|
||||
"newKnowledge.selectFilesAndFolders": "Izberite datoteke in mape za sinhronizacijo",
|
||||
"newKnowledge.selectedFiles": "Izbrane datoteke ({{valid}} od {{total}} veljavnih)",
|
||||
"newKnowledge.skippedFailed": "Preskočeno (neuspešno)",
|
||||
"newKnowledge.skippedOffDomain": "Preskočeno (zunaj domene)",
|
||||
"newKnowledge.sourceActions": "Dejanja za {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Posodobljeno",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Znaki: —",
|
||||
"newKnowledge.uploadDocuments": "Nalaganje dokumentov",
|
||||
"newKnowledge.uploadDropZoneTitle": "Povlecite in spustite datoteke sem ali kliknite za brskanje",
|
||||
"newKnowledge.uploadFiles": "Naloži datoteke",
|
||||
"newKnowledge.uploadFilesDescription": "Dodajte datoteke iz računalnika — indeksirajo se takoj ob ustvarjanju.",
|
||||
"newKnowledge.uploadingFiles": "Nalaganje…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "โมเดล Rerank จําเป็นสําหรับการผสมผสานระหว่างความรู้ภายในและภายนอก",
|
||||
"multimodal": "หลายรูปแบบ",
|
||||
"newKnowledge.actionsColumn": "การดำเนินการ",
|
||||
"newKnowledge.addAndProcess": "เพิ่มและประมวลผล",
|
||||
"newKnowledge.addDocument": "เพิ่มเอกสาร",
|
||||
"newKnowledge.addSource": "เพิ่มแหล่งที่มา",
|
||||
"newKnowledge.addSourceDescription": "เชื่อมต่อแหล่งข้อมูลกับฐานความรู้นี้ โดยจะซิงค์โดยอัตโนมัติและมีความสดใหม่อยู่เสมอ",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "เกินโควตาพื้นที่ทำงาน",
|
||||
"newKnowledge.documentUploadExclusion.target": "เป้าหมายเอกสารไม่ถูกต้องอีกต่อไป",
|
||||
"newKnowledge.documentUploadFailed": "เราไม่สามารถอัปโหลดเอกสารเหล่านี้ได้ ลองอีกครั้ง",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — สูงสุดไฟล์ละ 15 MB",
|
||||
"newKnowledge.documentUploadPartial": "เริ่มประมวลผลเอกสาร {{accepted}} รายการแล้ว; เพิ่มไม่ได้ {{excluded}} รายการ: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "ไม่มีเอกสารที่ได้รับการยอมรับ: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "การประมวลผลเอกสารเริ่มต้นขึ้น",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "เลือกเอกสาร {{count}} แล้ว",
|
||||
"newKnowledge.documentsUnavailable": "— เอกสาร",
|
||||
"newKnowledge.downloadDocuments": "ดาวน์โหลด",
|
||||
"newKnowledge.dropFilesHere": "วางไฟล์ที่นี่",
|
||||
"newKnowledge.editSource": "แก้ไข",
|
||||
"newKnowledge.emptyChunk": "ส่วนข้อมูลว่าง",
|
||||
"newKnowledge.emptyDescription": "เพิ่มเอกสารของคุณ แล้วเอเจนต์จะอ่านได้โดยตรง โดยไม่ต้องตั้งค่าการทำดัชนี",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "เลือกแหล่งที่มาทั้งหมด",
|
||||
"newKnowledge.selectChunk": "เลือกส่วนข้อมูลเพื่อตรวจสอบเนื้อหา",
|
||||
"newKnowledge.selectFilesAndFolders": "เลือกไฟล์และโฟลเดอร์ที่จะซิงค์",
|
||||
"newKnowledge.selectedFiles": "ไฟล์ที่เลือก (ใช้ได้ {{valid}} จาก {{total}} ไฟล์)",
|
||||
"newKnowledge.skippedFailed": "ข้าม (ล้มเหลว)",
|
||||
"newKnowledge.skippedOffDomain": "ข้าม (นอกโดเมน)",
|
||||
"newKnowledge.sourceActions": "การดำเนินการสำหรับ {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "อัปเดตแล้ว",
|
||||
"newKnowledge.uploadCharactersUnavailable": "อักขระ: —",
|
||||
"newKnowledge.uploadDocuments": "อัพโหลดเอกสาร",
|
||||
"newKnowledge.uploadDropZoneTitle": "ลากและวางไฟล์ที่นี่ หรือคลิกเพื่อเรียกดู",
|
||||
"newKnowledge.uploadFiles": "อัปโหลดไฟล์",
|
||||
"newKnowledge.uploadFilesDescription": "เพิ่มไฟล์จากคอมพิวเตอร์ ไฟล์จะถูกทำดัชนีทันทีที่สร้าง",
|
||||
"newKnowledge.uploadingFiles": "กำลังอัปโหลด…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Yeniden Sıralama modeli, iç ve dış bilgilerin karışımı için gereklidir.",
|
||||
"multimodal": "Çok Modlu",
|
||||
"newKnowledge.actionsColumn": "Eylemler",
|
||||
"newKnowledge.addAndProcess": "Ekle ve işle",
|
||||
"newKnowledge.addDocument": "Belge ekle",
|
||||
"newKnowledge.addSource": "Kaynak ekle",
|
||||
"newKnowledge.addSourceDescription": "Bir kaynağı bu bilgi tabanına bağlayın; otomatik olarak senkronize edilir ve güncel kalır.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "çalışma alanı kotası aşıldı",
|
||||
"newKnowledge.documentUploadExclusion.target": "belge hedefi artık geçerli değil",
|
||||
"newKnowledge.documentUploadFailed": "Bu belgeleri yükleyemedik. Tekrar deneyin.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — dosya başına en fazla 15 MB",
|
||||
"newKnowledge.documentUploadPartial": "{{accepted}} belgenin işlenmesi başladı; {{excluded}} belge eklenemedi: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Hiçbir belge kabul edilmedi: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Evrak işlemleri başlatıldı.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "{{count}} belgeleri seçildi",
|
||||
"newKnowledge.documentsUnavailable": "— belge",
|
||||
"newKnowledge.downloadDocuments": "İndir",
|
||||
"newKnowledge.dropFilesHere": "Dosyaları buraya bırakın",
|
||||
"newKnowledge.editSource": "Düzenle",
|
||||
"newKnowledge.emptyChunk": "Boş parça",
|
||||
"newKnowledge.emptyDescription": "Belgelerinizi ekleyin; ajanlar indeksleme yapılandırmadan belgeleri doğrudan okuyabilsin.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Tüm kaynakları seç",
|
||||
"newKnowledge.selectChunk": "İçeriğini incelemek için bir parça seçin.",
|
||||
"newKnowledge.selectFilesAndFolders": "Senkronize edilecek dosya ve klasörleri seçin",
|
||||
"newKnowledge.selectedFiles": "Seçilen dosyalar ({{total}} dosyadan {{valid}} tanesi geçerli)",
|
||||
"newKnowledge.skippedFailed": "Atlandı (başarısız)",
|
||||
"newKnowledge.skippedOffDomain": "Atlandı (alan adı dışında)",
|
||||
"newKnowledge.sourceActions": "{{name}} için eylemler",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Güncellendi",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Karakterler: —",
|
||||
"newKnowledge.uploadDocuments": "Belgeleri yükleyin",
|
||||
"newKnowledge.uploadDropZoneTitle": "Dosyaları buraya sürükleyip bırakın veya göz atmak için tıklayın",
|
||||
"newKnowledge.uploadFiles": "Dosya yükle",
|
||||
"newKnowledge.uploadFilesDescription": "Bilgisayarınızdan dosya ekleyin; oluşturduğunuz anda indekslenirler.",
|
||||
"newKnowledge.uploadingFiles": "Yükleniyor…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Модель Rerank необхідна для поєднання внутрішніх і зовнішніх знань.",
|
||||
"multimodal": "Мультимодальний",
|
||||
"newKnowledge.actionsColumn": "Дії",
|
||||
"newKnowledge.addAndProcess": "Додати й обробити",
|
||||
"newKnowledge.addDocument": "Додати документ",
|
||||
"newKnowledge.addSource": "Додати джерело",
|
||||
"newKnowledge.addSourceDescription": "Підключіть джерело до цієї бази знань — вона автоматично синхронізується та залишається актуальною.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "перевищено квоту робочої області",
|
||||
"newKnowledge.documentUploadExclusion.target": "ціль документа більше недійсна",
|
||||
"newKnowledge.documentUploadFailed": "Нам не вдалося завантажити ці документи. Спробуйте знову.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — до 15 МБ кожен",
|
||||
"newKnowledge.documentUploadPartial": "Розпочато обробку {{accepted}} документів; не вдалося додати {{excluded}}: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Жодного документа не прийнято: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Розпочато обробку документів.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Вибрані документи {{count}}",
|
||||
"newKnowledge.documentsUnavailable": "— документів",
|
||||
"newKnowledge.downloadDocuments": "Завантажити",
|
||||
"newKnowledge.dropFilesHere": "Перетягніть файли сюди",
|
||||
"newKnowledge.editSource": "Редагувати",
|
||||
"newKnowledge.emptyChunk": "Порожній фрагмент",
|
||||
"newKnowledge.emptyDescription": "Додайте документи, і агенти зможуть читати їх безпосередньо — без налаштування індексації.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Вибрати всі джерела",
|
||||
"newKnowledge.selectChunk": "Виберіть фрагмент, щоб переглянути його вміст.",
|
||||
"newKnowledge.selectFilesAndFolders": "Виберіть файли й папки для синхронізації",
|
||||
"newKnowledge.selectedFiles": "Вибрані файли ({{valid}} з {{total}} дійсні)",
|
||||
"newKnowledge.skippedFailed": "Пропущено (помилка)",
|
||||
"newKnowledge.skippedOffDomain": "Пропущено (поза доменом)",
|
||||
"newKnowledge.sourceActions": "Дії для {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Оновлено",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Символи: —",
|
||||
"newKnowledge.uploadDocuments": "Завантажити документи",
|
||||
"newKnowledge.uploadDropZoneTitle": "Перетягніть файли сюди або натисніть, щоб вибрати",
|
||||
"newKnowledge.uploadFiles": "Завантажити файли",
|
||||
"newKnowledge.uploadFilesDescription": "Додайте файли з комп’ютера — вони індексуються одразу після створення.",
|
||||
"newKnowledge.uploadingFiles": "Завантаження…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Mô hình Rerank là cần thiết cho sự kết hợp giữa kiến thức bên trong và bên ngoài.",
|
||||
"multimodal": "Đa phương thức",
|
||||
"newKnowledge.actionsColumn": "Hành động",
|
||||
"newKnowledge.addAndProcess": "Thêm và xử lý",
|
||||
"newKnowledge.addDocument": "Thêm tài liệu",
|
||||
"newKnowledge.addSource": "Thêm nguồn",
|
||||
"newKnowledge.addSourceDescription": "Kết nối nguồn với cơ sở kiến thức này — nguồn này tự động đồng bộ hóa và luôn cập nhật.",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "đã vượt quá hạn mức không gian làm việc",
|
||||
"newKnowledge.documentUploadExclusion.target": "đích tài liệu không còn hợp lệ",
|
||||
"newKnowledge.documentUploadFailed": "Chúng tôi không thể tải lên những tài liệu này. Hãy thử lại.",
|
||||
"newKnowledge.documentUploadFormats": "PDF, DOCX, Markdown, HTML, XLSX, TXT — tối đa 15 MB mỗi tệp",
|
||||
"newKnowledge.documentUploadPartial": "Đã bắt đầu xử lý {{accepted}} tài liệu; không thể thêm {{excluded}} tài liệu: {{details}}",
|
||||
"newKnowledge.documentUploadRejected": "Không có tài liệu nào được chấp nhận: {{details}}",
|
||||
"newKnowledge.documentUploadStarted": "Quá trình xử lý tài liệu bắt đầu.",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "Đã chọn tài liệu {{count}}",
|
||||
"newKnowledge.documentsUnavailable": "— tài liệu",
|
||||
"newKnowledge.downloadDocuments": "Tải xuống",
|
||||
"newKnowledge.dropFilesHere": "Thả tệp vào đây",
|
||||
"newKnowledge.editSource": "Chỉnh sửa",
|
||||
"newKnowledge.emptyChunk": "Đoạn trống",
|
||||
"newKnowledge.emptyDescription": "Thêm tài liệu để tác nhân có thể đọc trực tiếp — không cần cấu hình lập chỉ mục.",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "Chọn tất cả nguồn",
|
||||
"newKnowledge.selectChunk": "Chọn một đoạn để xem nội dung.",
|
||||
"newKnowledge.selectFilesAndFolders": "Chọn tệp và thư mục để đồng bộ",
|
||||
"newKnowledge.selectedFiles": "Tệp đã chọn ({{valid}}/{{total}} hợp lệ)",
|
||||
"newKnowledge.skippedFailed": "Đã bỏ qua (thất bại)",
|
||||
"newKnowledge.skippedOffDomain": "Đã bỏ qua (ngoài miền)",
|
||||
"newKnowledge.sourceActions": "Hành động dành cho {{name}}",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "Đã cập nhật",
|
||||
"newKnowledge.uploadCharactersUnavailable": "Ký tự: —",
|
||||
"newKnowledge.uploadDocuments": "Tải tài liệu lên",
|
||||
"newKnowledge.uploadDropZoneTitle": "Kéo và thả tệp vào đây hoặc nhấp để duyệt",
|
||||
"newKnowledge.uploadFiles": "Tải tệp lên",
|
||||
"newKnowledge.uploadFilesDescription": "Thêm tệp từ máy tính — tệp sẽ được lập chỉ mục ngay khi tạo.",
|
||||
"newKnowledge.uploadingFiles": "Đang tải lên…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "混合使用内部和外部知识时需要配置 Rerank 模型。",
|
||||
"multimodal": "多模态",
|
||||
"newKnowledge.actionsColumn": "行动",
|
||||
"newKnowledge.addAndProcess": "添加并处理",
|
||||
"newKnowledge.addDocument": "添加文档",
|
||||
"newKnowledge.addSource": "添加来源",
|
||||
"newKnowledge.addSourceDescription": "将来源连接到该知识库 - 它会自动同步并保持最新。",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "超出工作区配额",
|
||||
"newKnowledge.documentUploadExclusion.target": "文档目标已失效",
|
||||
"newKnowledge.documentUploadFailed": "无法上传这些文档,请重试。",
|
||||
"newKnowledge.documentUploadFormats": "PDF、DOCX、Markdown、HTML、XLSX、TXT — 每个文件不超过 15 MB",
|
||||
"newKnowledge.documentUploadPartial": "已开始处理 {{accepted}} 个文档;{{excluded}} 个无法添加:{{details}}",
|
||||
"newKnowledge.documentUploadRejected": "未接受任何文档:{{details}}",
|
||||
"newKnowledge.documentUploadStarted": "文档处理已开始。",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "已选择 {{count}} 个文档",
|
||||
"newKnowledge.documentsUnavailable": "— 篇文档",
|
||||
"newKnowledge.downloadDocuments": "下载",
|
||||
"newKnowledge.dropFilesHere": "在此处放置文件",
|
||||
"newKnowledge.editSource": "编辑",
|
||||
"newKnowledge.emptyChunk": "空分段",
|
||||
"newKnowledge.emptyDescription": "添加文档后,智能体即可直接读取,无需配置索引。",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "选择所有来源",
|
||||
"newKnowledge.selectChunk": "选择一个分段以查看其内容。",
|
||||
"newKnowledge.selectFilesAndFolders": "选择要同步的文件和文件夹",
|
||||
"newKnowledge.selectedFiles": "已选文件({{total}} 个中 {{valid}} 个有效)",
|
||||
"newKnowledge.skippedFailed": "已跳过(失败)",
|
||||
"newKnowledge.skippedOffDomain": "已跳过(域外)",
|
||||
"newKnowledge.sourceActions": "{{name}} 的操作",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "更新时间",
|
||||
"newKnowledge.uploadCharactersUnavailable": "字符数:—",
|
||||
"newKnowledge.uploadDocuments": "上传文档",
|
||||
"newKnowledge.uploadDropZoneTitle": "将文件拖放到此处,或点击浏览",
|
||||
"newKnowledge.uploadFiles": "上传文件",
|
||||
"newKnowledge.uploadFilesDescription": "从电脑添加文件,创建后会立即建立索引。",
|
||||
"newKnowledge.uploadingFiles": "正在上传…",
|
||||
|
||||
@ -132,6 +132,7 @@
|
||||
"mixtureInternalAndExternalTip": "Rerank 模型是內部和外部知識的混合所必需的。",
|
||||
"multimodal": "多模態",
|
||||
"newKnowledge.actionsColumn": "行動",
|
||||
"newKnowledge.addAndProcess": "新增並處理",
|
||||
"newKnowledge.addDocument": "新增文件",
|
||||
"newKnowledge.addSource": "新增來源",
|
||||
"newKnowledge.addSourceDescription": "將來源連接到該知識庫 - 它會自動同步並保持最新。",
|
||||
@ -250,6 +251,7 @@
|
||||
"newKnowledge.documentUploadExclusion.quota": "超出工作區配額",
|
||||
"newKnowledge.documentUploadExclusion.target": "文件目標已失效",
|
||||
"newKnowledge.documentUploadFailed": "無法上傳這些文件,請再試一次。",
|
||||
"newKnowledge.documentUploadFormats": "PDF、DOCX、Markdown、HTML、XLSX、TXT — 每個檔案不超過 15 MB",
|
||||
"newKnowledge.documentUploadPartial": "已開始處理 {{accepted}} 個文件;{{excluded}} 個無法新增:{{details}}",
|
||||
"newKnowledge.documentUploadRejected": "未接受任何文件:{{details}}",
|
||||
"newKnowledge.documentUploadStarted": "文件處理已開始。",
|
||||
@ -268,6 +270,7 @@
|
||||
"newKnowledge.documentsSelected": "已選取 {{count}} 個文件",
|
||||
"newKnowledge.documentsUnavailable": "— 份文件",
|
||||
"newKnowledge.downloadDocuments": "下載",
|
||||
"newKnowledge.dropFilesHere": "將檔案拖放到此處",
|
||||
"newKnowledge.editSource": "編輯",
|
||||
"newKnowledge.emptyChunk": "空分段",
|
||||
"newKnowledge.emptyDescription": "加入文件後,智慧代理即可直接讀取,無需設定索引。",
|
||||
@ -379,6 +382,7 @@
|
||||
"newKnowledge.selectAllSources": "選擇所有來源",
|
||||
"newKnowledge.selectChunk": "選取一個分段以查看其內容。",
|
||||
"newKnowledge.selectFilesAndFolders": "選擇要同步的檔案與資料夾",
|
||||
"newKnowledge.selectedFiles": "已選檔案({{total}} 個中 {{valid}} 個有效)",
|
||||
"newKnowledge.skippedFailed": "已略過(失敗)",
|
||||
"newKnowledge.skippedOffDomain": "已略過(網域外)",
|
||||
"newKnowledge.sourceActions": "{{name}} 的操作",
|
||||
@ -437,6 +441,7 @@
|
||||
"newKnowledge.updatedColumn": "更新時間",
|
||||
"newKnowledge.uploadCharactersUnavailable": "字元數:—",
|
||||
"newKnowledge.uploadDocuments": "上傳文件",
|
||||
"newKnowledge.uploadDropZoneTitle": "將檔案拖放到此處,或點擊瀏覽",
|
||||
"newKnowledge.uploadFiles": "上傳檔案",
|
||||
"newKnowledge.uploadFilesDescription": "從電腦加入檔案,建立後會立即建立索引。",
|
||||
"newKnowledge.uploadingFiles": "正在上傳…",
|
||||
|
||||
Loading…
Reference in New Issue
Block a user