mirror of
https://github.com/langgenius/dify.git
synced 2026-05-06 02:18:08 +08:00
Merge branch 'main' into feat/rag-2
This commit is contained in:
@ -6,7 +6,7 @@ LABEL maintainer="takatost@gmail.com"
|
||||
# RUN sed -i 's/dl-cdn.alpinelinux.org/mirrors.aliyun.com/g' /etc/apk/repositories
|
||||
|
||||
RUN apk add --no-cache tzdata
|
||||
RUN npm install -g pnpm@10.13.1
|
||||
RUN corepack enable
|
||||
ENV PNPM_HOME="/pnpm"
|
||||
ENV PATH="$PNPM_HOME:$PATH"
|
||||
|
||||
@ -19,6 +19,9 @@ WORKDIR /app/web
|
||||
COPY package.json .
|
||||
COPY pnpm-lock.yaml .
|
||||
|
||||
# Use packageManager from package.json
|
||||
RUN corepack install
|
||||
|
||||
# if you located in China, you can use taobao registry to speed up
|
||||
# RUN pnpm install --frozen-lockfile --registry https://registry.npmmirror.com/
|
||||
|
||||
|
||||
@ -8,7 +8,6 @@ import {
|
||||
} from '@heroicons/react/24/outline'
|
||||
import { RiCloseLine, RiEditFill } from '@remixicon/react'
|
||||
import { get } from 'lodash-es'
|
||||
import InfiniteScroll from 'react-infinite-scroll-component'
|
||||
import dayjs from 'dayjs'
|
||||
import utc from 'dayjs/plugin/utc'
|
||||
import timezone from 'dayjs/plugin/timezone'
|
||||
@ -111,7 +110,8 @@ const statusTdRender = (statusCount: StatusCount) => {
|
||||
|
||||
const getFormattedChatList = (messages: ChatMessage[], conversationId: string, timezone: string, format: string) => {
|
||||
const newChatList: IChatItem[] = []
|
||||
messages.forEach((item: ChatMessage) => {
|
||||
try {
|
||||
messages.forEach((item: ChatMessage) => {
|
||||
const questionFiles = item.message_files?.filter((file: any) => file.belongs_to === 'user') || []
|
||||
newChatList.push({
|
||||
id: `question-${item.id}`,
|
||||
@ -178,7 +178,13 @@ const getFormattedChatList = (messages: ChatMessage[], conversationId: string, t
|
||||
parentMessageId: `question-${item.id}`,
|
||||
})
|
||||
})
|
||||
return newChatList
|
||||
|
||||
return newChatList
|
||||
}
|
||||
catch (error) {
|
||||
console.error('getFormattedChatList processing failed:', error)
|
||||
throw error
|
||||
}
|
||||
}
|
||||
|
||||
type IDetailPanel = {
|
||||
@ -188,6 +194,9 @@ type IDetailPanel = {
|
||||
}
|
||||
|
||||
function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
const MIN_ITEMS_FOR_SCROLL_LOADING = 8
|
||||
const SCROLL_THRESHOLD_PX = 50
|
||||
const SCROLL_DEBOUNCE_MS = 200
|
||||
const { userProfile: { timezone } } = useAppContext()
|
||||
const { formatTime } = useTimestamp()
|
||||
const { onClose, appDetail } = useContext(DrawerContext)
|
||||
@ -204,13 +213,19 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
const { t } = useTranslation()
|
||||
const [hasMore, setHasMore] = useState(true)
|
||||
const [varValues, setVarValues] = useState<Record<string, string>>({})
|
||||
const isLoadingRef = useRef(false)
|
||||
|
||||
const [allChatItems, setAllChatItems] = useState<IChatItem[]>([])
|
||||
const [chatItemTree, setChatItemTree] = useState<ChatItemInTree[]>([])
|
||||
const [threadChatItems, setThreadChatItems] = useState<IChatItem[]>([])
|
||||
|
||||
const fetchData = useCallback(async () => {
|
||||
if (isLoadingRef.current)
|
||||
return
|
||||
|
||||
try {
|
||||
isLoadingRef.current = true
|
||||
|
||||
if (!hasMore)
|
||||
return
|
||||
|
||||
@ -218,8 +233,11 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
conversation_id: detail.id,
|
||||
limit: 10,
|
||||
}
|
||||
if (allChatItems[0]?.id)
|
||||
params.first_id = allChatItems[0]?.id.replace('question-', '')
|
||||
// Use the oldest answer item ID for pagination
|
||||
const answerItems = allChatItems.filter(item => item.isAnswer)
|
||||
const oldestAnswerItem = answerItems[answerItems.length - 1]
|
||||
if (oldestAnswerItem?.id)
|
||||
params.first_id = oldestAnswerItem.id
|
||||
const messageRes = await fetchChatMessages({
|
||||
url: `/apps/${appDetail?.id}/chat-messages`,
|
||||
params,
|
||||
@ -249,15 +267,20 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
}
|
||||
setChatItemTree(tree)
|
||||
|
||||
setThreadChatItems(getThreadMessages(tree, newAllChatItems.at(-1)?.id))
|
||||
const lastMessageId = newAllChatItems.length > 0 ? newAllChatItems[newAllChatItems.length - 1].id : undefined
|
||||
setThreadChatItems(getThreadMessages(tree, lastMessageId))
|
||||
}
|
||||
catch (err) {
|
||||
console.error(err)
|
||||
console.error('fetchData execution failed:', err)
|
||||
}
|
||||
finally {
|
||||
isLoadingRef.current = false
|
||||
}
|
||||
}, [allChatItems, detail.id, hasMore, timezone, t, appDetail, detail?.model_config?.configs?.introduction])
|
||||
|
||||
const switchSibling = useCallback((siblingMessageId: string) => {
|
||||
setThreadChatItems(getThreadMessages(chatItemTree, siblingMessageId))
|
||||
const newThreadChatItems = getThreadMessages(chatItemTree, siblingMessageId)
|
||||
setThreadChatItems(newThreadChatItems)
|
||||
}, [chatItemTree])
|
||||
|
||||
const handleAnnotationEdited = useCallback((query: string, answer: string, index: number) => {
|
||||
@ -344,13 +367,217 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
|
||||
const fetchInitiated = useRef(false)
|
||||
|
||||
// Only load initial messages, don't auto-load more
|
||||
useEffect(() => {
|
||||
if (appDetail?.id && detail.id && appDetail?.mode !== 'completion' && !fetchInitiated.current) {
|
||||
// Mark as initialized, but don't auto-load more messages
|
||||
fetchInitiated.current = true
|
||||
// Still call fetchData to get initial messages
|
||||
fetchData()
|
||||
}
|
||||
}, [appDetail?.id, detail.id, appDetail?.mode, fetchData])
|
||||
|
||||
const [isLoading, setIsLoading] = useState(false)
|
||||
|
||||
const loadMoreMessages = useCallback(async () => {
|
||||
if (isLoading || !hasMore || !appDetail?.id || !detail.id)
|
||||
return
|
||||
|
||||
setIsLoading(true)
|
||||
|
||||
try {
|
||||
const params: ChatMessagesRequest = {
|
||||
conversation_id: detail.id,
|
||||
limit: 10,
|
||||
}
|
||||
|
||||
// Use the earliest response item as the first_id
|
||||
const answerItems = allChatItems.filter(item => item.isAnswer)
|
||||
const oldestAnswerItem = answerItems[answerItems.length - 1]
|
||||
if (oldestAnswerItem?.id) {
|
||||
params.first_id = oldestAnswerItem.id
|
||||
}
|
||||
else if (allChatItems.length > 0 && allChatItems[0]?.id) {
|
||||
const firstId = allChatItems[0].id.replace('question-', '').replace('answer-', '')
|
||||
params.first_id = firstId
|
||||
}
|
||||
|
||||
const messageRes = await fetchChatMessages({
|
||||
url: `/apps/${appDetail.id}/chat-messages`,
|
||||
params,
|
||||
})
|
||||
|
||||
if (!messageRes.data || messageRes.data.length === 0) {
|
||||
setHasMore(false)
|
||||
return
|
||||
}
|
||||
|
||||
if (messageRes.data.length > 0) {
|
||||
const varValues = messageRes.data.at(-1)!.inputs
|
||||
setVarValues(varValues)
|
||||
}
|
||||
|
||||
setHasMore(messageRes.has_more)
|
||||
|
||||
const newItems = getFormattedChatList(
|
||||
messageRes.data,
|
||||
detail.id,
|
||||
timezone!,
|
||||
t('appLog.dateTimeFormat') as string,
|
||||
)
|
||||
|
||||
// Check for duplicate messages
|
||||
const existingIds = new Set(allChatItems.map(item => item.id))
|
||||
const uniqueNewItems = newItems.filter(item => !existingIds.has(item.id))
|
||||
|
||||
if (uniqueNewItems.length === 0) {
|
||||
if (allChatItems.length > 1) {
|
||||
const nextId = allChatItems[1].id.replace('question-', '').replace('answer-', '')
|
||||
|
||||
const retryParams = {
|
||||
...params,
|
||||
first_id: nextId,
|
||||
}
|
||||
|
||||
const retryRes = await fetchChatMessages({
|
||||
url: `/apps/${appDetail.id}/chat-messages`,
|
||||
params: retryParams,
|
||||
})
|
||||
|
||||
if (retryRes.data && retryRes.data.length > 0) {
|
||||
const retryItems = getFormattedChatList(
|
||||
retryRes.data,
|
||||
detail.id,
|
||||
timezone!,
|
||||
t('appLog.dateTimeFormat') as string,
|
||||
)
|
||||
|
||||
const retryUniqueItems = retryItems.filter(item => !existingIds.has(item.id))
|
||||
if (retryUniqueItems.length > 0) {
|
||||
const newAllChatItems = [
|
||||
...retryUniqueItems,
|
||||
...allChatItems,
|
||||
]
|
||||
|
||||
setAllChatItems(newAllChatItems)
|
||||
|
||||
let tree = buildChatItemTree(newAllChatItems)
|
||||
if (retryRes.has_more === false && detail?.model_config?.configs?.introduction) {
|
||||
tree = [{
|
||||
id: 'introduction',
|
||||
isAnswer: true,
|
||||
isOpeningStatement: true,
|
||||
content: detail?.model_config?.configs?.introduction ?? 'hello',
|
||||
feedbackDisabled: true,
|
||||
children: tree,
|
||||
}]
|
||||
}
|
||||
setChatItemTree(tree)
|
||||
setHasMore(retryRes.has_more)
|
||||
setThreadChatItems(getThreadMessages(tree, newAllChatItems.at(-1)?.id))
|
||||
return
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
const newAllChatItems = [
|
||||
...uniqueNewItems,
|
||||
...allChatItems,
|
||||
]
|
||||
|
||||
setAllChatItems(newAllChatItems)
|
||||
|
||||
let tree = buildChatItemTree(newAllChatItems)
|
||||
if (messageRes.has_more === false && detail?.model_config?.configs?.introduction) {
|
||||
tree = [{
|
||||
id: 'introduction',
|
||||
isAnswer: true,
|
||||
isOpeningStatement: true,
|
||||
content: detail?.model_config?.configs?.introduction ?? 'hello',
|
||||
feedbackDisabled: true,
|
||||
children: tree,
|
||||
}]
|
||||
}
|
||||
setChatItemTree(tree)
|
||||
|
||||
setThreadChatItems(getThreadMessages(tree, newAllChatItems.at(-1)?.id))
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error)
|
||||
setHasMore(false)
|
||||
}
|
||||
finally {
|
||||
setIsLoading(false)
|
||||
}
|
||||
}, [allChatItems, detail.id, hasMore, isLoading, timezone, t, appDetail])
|
||||
|
||||
useEffect(() => {
|
||||
const scrollableDiv = document.getElementById('scrollableDiv')
|
||||
const outerDiv = scrollableDiv?.parentElement
|
||||
const chatContainer = document.querySelector('.mx-1.mb-1.grow.overflow-auto') as HTMLElement
|
||||
|
||||
let scrollContainer: HTMLElement | null = null
|
||||
|
||||
if (outerDiv && outerDiv.scrollHeight > outerDiv.clientHeight) {
|
||||
scrollContainer = outerDiv
|
||||
}
|
||||
else if (scrollableDiv && scrollableDiv.scrollHeight > scrollableDiv.clientHeight) {
|
||||
scrollContainer = scrollableDiv
|
||||
}
|
||||
else if (chatContainer && chatContainer.scrollHeight > chatContainer.clientHeight) {
|
||||
scrollContainer = chatContainer
|
||||
}
|
||||
else {
|
||||
const possibleContainers = document.querySelectorAll('.overflow-auto, .overflow-y-auto')
|
||||
for (let i = 0; i < possibleContainers.length; i++) {
|
||||
const container = possibleContainers[i] as HTMLElement
|
||||
if (container.scrollHeight > container.clientHeight) {
|
||||
scrollContainer = container
|
||||
break
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (!scrollContainer)
|
||||
return
|
||||
|
||||
let lastLoadTime = 0
|
||||
const throttleDelay = 200
|
||||
|
||||
const handleScroll = () => {
|
||||
const currentScrollTop = scrollContainer!.scrollTop
|
||||
const scrollHeight = scrollContainer!.scrollHeight
|
||||
const clientHeight = scrollContainer!.clientHeight
|
||||
|
||||
const distanceFromTop = currentScrollTop
|
||||
const distanceFromBottom = scrollHeight - currentScrollTop - clientHeight
|
||||
|
||||
const now = Date.now()
|
||||
|
||||
const isNearTop = distanceFromTop < 30
|
||||
// eslint-disable-next-line sonarjs/no-unused-vars
|
||||
const _distanceFromBottom = distanceFromBottom < 30
|
||||
if (isNearTop && hasMore && !isLoading && (now - lastLoadTime > throttleDelay)) {
|
||||
lastLoadTime = now
|
||||
loadMoreMessages()
|
||||
}
|
||||
}
|
||||
|
||||
scrollContainer.addEventListener('scroll', handleScroll, { passive: true })
|
||||
|
||||
const handleWheel = (e: WheelEvent) => {
|
||||
if (e.deltaY < 0)
|
||||
handleScroll()
|
||||
}
|
||||
scrollContainer.addEventListener('wheel', handleWheel, { passive: true })
|
||||
|
||||
return () => {
|
||||
scrollContainer!.removeEventListener('scroll', handleScroll)
|
||||
scrollContainer!.removeEventListener('wheel', handleWheel)
|
||||
}
|
||||
}, [hasMore, isLoading, loadMoreMessages])
|
||||
|
||||
const isChatMode = appDetail?.mode !== 'completion'
|
||||
const isAdvanced = appDetail?.mode === 'advanced-chat'
|
||||
|
||||
@ -378,6 +605,36 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
return () => cancelAnimationFrame(raf)
|
||||
}, [])
|
||||
|
||||
// Add scroll listener to ensure loading is triggered
|
||||
useEffect(() => {
|
||||
if (threadChatItems.length >= MIN_ITEMS_FOR_SCROLL_LOADING && hasMore) {
|
||||
const scrollableDiv = document.getElementById('scrollableDiv')
|
||||
|
||||
if (scrollableDiv) {
|
||||
let loadingTimeout: NodeJS.Timeout | null = null
|
||||
|
||||
const handleScroll = () => {
|
||||
const { scrollTop } = scrollableDiv
|
||||
|
||||
// Trigger loading when scrolling near the top
|
||||
if (scrollTop < SCROLL_THRESHOLD_PX && !isLoadingRef.current) {
|
||||
if (loadingTimeout)
|
||||
clearTimeout(loadingTimeout)
|
||||
|
||||
loadingTimeout = setTimeout(fetchData, SCROLL_DEBOUNCE_MS) // 200ms debounce
|
||||
}
|
||||
}
|
||||
|
||||
scrollableDiv.addEventListener('scroll', handleScroll)
|
||||
return () => {
|
||||
scrollableDiv.removeEventListener('scroll', handleScroll)
|
||||
if (loadingTimeout)
|
||||
clearTimeout(loadingTimeout)
|
||||
}
|
||||
}
|
||||
}
|
||||
}, [threadChatItems.length, hasMore, fetchData])
|
||||
|
||||
return (
|
||||
<div ref={ref} className='flex h-full flex-col rounded-xl border-[0.5px] border-components-panel-border'>
|
||||
{/* Panel Header */}
|
||||
@ -439,8 +696,8 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
siteInfo={null}
|
||||
/>
|
||||
</div>
|
||||
: threadChatItems.length < 8
|
||||
? <div className="mb-4 pt-4">
|
||||
: threadChatItems.length < MIN_ITEMS_FOR_SCROLL_LOADING ? (
|
||||
<div className="mb-4 pt-4">
|
||||
<Chat
|
||||
config={{
|
||||
appId: appDetail?.id,
|
||||
@ -466,35 +723,27 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
switchSibling={switchSibling}
|
||||
/>
|
||||
</div>
|
||||
: <div
|
||||
) : (
|
||||
<div
|
||||
className="py-4"
|
||||
id="scrollableDiv"
|
||||
style={{
|
||||
display: 'flex',
|
||||
flexDirection: 'column-reverse',
|
||||
height: '100%',
|
||||
overflow: 'auto',
|
||||
}}>
|
||||
{/* Put the scroll bar always on the bottom */}
|
||||
<InfiniteScroll
|
||||
scrollableTarget="scrollableDiv"
|
||||
dataLength={threadChatItems.length}
|
||||
next={fetchData}
|
||||
hasMore={hasMore}
|
||||
loader={<div className='system-xs-regular text-center text-text-tertiary'>{t('appLog.detail.loading')}...</div>}
|
||||
// endMessage={<div className='text-center'>Nothing more to show</div>}
|
||||
// below props only if you need pull down functionality
|
||||
refreshFunction={fetchData}
|
||||
pullDownToRefresh
|
||||
pullDownToRefreshThreshold={50}
|
||||
// pullDownToRefreshContent={
|
||||
// <div className='text-center'>Pull down to refresh</div>
|
||||
// }
|
||||
// releaseToRefreshContent={
|
||||
// <div className='text-center'>Release to refresh</div>
|
||||
// }
|
||||
// To put endMessage and loader to the top.
|
||||
style={{ display: 'flex', flexDirection: 'column-reverse' }}
|
||||
inverse={true}
|
||||
>
|
||||
<div className="flex w-full flex-col-reverse" style={{ position: 'relative' }}>
|
||||
{/* Loading state indicator - only shown when loading */}
|
||||
{hasMore && isLoading && (
|
||||
<div className="sticky left-0 right-0 top-0 z-10 bg-primary-50/40 py-3 text-center">
|
||||
<div className='system-xs-regular text-text-tertiary'>
|
||||
{t('appLog.detail.loading')}...
|
||||
</div>
|
||||
</div>
|
||||
)}
|
||||
|
||||
<Chat
|
||||
config={{
|
||||
appId: appDetail?.id,
|
||||
@ -519,8 +768,9 @@ function DetailPanel({ detail, onFeedback }: IDetailPanel) {
|
||||
chatContainerInnerClassName='px-3'
|
||||
switchSibling={switchSibling}
|
||||
/>
|
||||
</InfiniteScroll>
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
}
|
||||
</div>
|
||||
{showMessageLogModal && (
|
||||
|
||||
@ -407,8 +407,8 @@ const AppCard = ({ app, onRefresh }: AppCardProps) => {
|
||||
}
|
||||
btnClassName={open =>
|
||||
cn(
|
||||
open ? '!bg-black/5 !shadow-none' : '!bg-transparent',
|
||||
'h-8 w-8 rounded-md border-none !p-2 hover:!bg-black/5',
|
||||
open ? '!bg-state-base-hover !shadow-none' : '!bg-transparent',
|
||||
'h-8 w-8 rounded-md border-none !p-2 hover:!bg-state-base-hover',
|
||||
)
|
||||
}
|
||||
popupClassName={
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
import type { FC } from 'react'
|
||||
import React from 'react'
|
||||
import s from './style.module.css'
|
||||
import cn from '@/utils/classnames'
|
||||
|
||||
export type ILoadingAnimProps = {
|
||||
type: 'text' | 'avatar'
|
||||
@ -11,7 +12,7 @@ const LoadingAnim: FC<ILoadingAnimProps> = ({
|
||||
type,
|
||||
}) => {
|
||||
return (
|
||||
<div className={`${s['dot-flashing']} ${s[type]}`}></div>
|
||||
<div className={cn(s['dot-flashing'], s[type])} />
|
||||
)
|
||||
}
|
||||
export default React.memo(LoadingAnim)
|
||||
|
||||
@ -8,6 +8,7 @@ import Modal from '@/app/components/base/modal'
|
||||
import Button from '@/app/components/base/button'
|
||||
import Divider from '@/app/components/base/divider'
|
||||
import ConfirmAddVar from '@/app/components/app/configuration/config-prompt/confirm-add-var'
|
||||
import PromptEditor from '@/app/components/base/prompt-editor'
|
||||
import type { OpeningStatement } from '@/app/components/base/features/types'
|
||||
import { getInputKeys } from '@/app/components/base/block-input'
|
||||
import type { PromptVariable } from '@/models/debug'
|
||||
@ -101,7 +102,7 @@ const OpeningSettingModal = ({
|
||||
<div>·</div>
|
||||
<div>{tempSuggestedQuestions.length}/{MAX_QUESTION_NUM}</div>
|
||||
</div>
|
||||
<Divider bgStyle='gradient' className='ml-3 h-px w-0 grow'/>
|
||||
<Divider bgStyle='gradient' className='ml-3 h-px w-0 grow' />
|
||||
</div>
|
||||
<ReactSortable
|
||||
className="space-y-1"
|
||||
@ -178,19 +179,32 @@ const OpeningSettingModal = ({
|
||||
>
|
||||
<div className='mb-6 flex items-center justify-between'>
|
||||
<div className='title-2xl-semi-bold text-text-primary'>{t('appDebug.feature.conversationOpener.title')}</div>
|
||||
<div className='cursor-pointer p-1' onClick={onCancel}><RiCloseLine className='h-4 w-4 text-text-tertiary'/></div>
|
||||
<div className='cursor-pointer p-1' onClick={onCancel}><RiCloseLine className='h-4 w-4 text-text-tertiary' /></div>
|
||||
</div>
|
||||
<div className='mb-8 flex gap-2'>
|
||||
<div className='mt-1.5 h-8 w-8 shrink-0 rounded-lg border-components-panel-border bg-util-colors-orange-dark-orange-dark-500 p-1.5'>
|
||||
<RiAsterisk className='h-5 w-5 text-text-primary-on-surface' />
|
||||
</div>
|
||||
<div className='grow rounded-2xl border-t border-divider-subtle bg-chat-bubble-bg p-3 shadow-xs'>
|
||||
<textarea
|
||||
<PromptEditor
|
||||
value={tempValue}
|
||||
rows={3}
|
||||
onChange={e => setTempValue(e.target.value)}
|
||||
className="system-md-regular w-full border-0 bg-transparent px-0 text-text-secondary focus:outline-none"
|
||||
onChange={setTempValue}
|
||||
placeholder={t('appDebug.openingStatement.placeholder') as string}
|
||||
variableBlock={{
|
||||
show: true,
|
||||
variables: [
|
||||
// Prompt variables
|
||||
...promptVariables.map(item => ({
|
||||
name: item.name || item.key,
|
||||
value: item.key,
|
||||
})),
|
||||
// Workflow variables
|
||||
...workflowVariables.map(item => ({
|
||||
name: item.variable,
|
||||
value: item.variable,
|
||||
})),
|
||||
],
|
||||
}}
|
||||
/>
|
||||
{renderQuestions()}
|
||||
</div>
|
||||
|
||||
@ -137,7 +137,7 @@ const HitTestingPage: FC<Props> = ({ datasetId }: Props) => {
|
||||
<>
|
||||
<div className='grow overflow-y-auto'>
|
||||
<table className={'w-full border-collapse border-0 text-[13px] leading-4 text-text-secondary '}>
|
||||
<thead className='sticky top-0 h-7 text-xs font-medium uppercase leading-7 text-text-tertiary'>
|
||||
<thead className='sticky top-0 h-7 text-xs font-medium uppercase leading-7 text-text-tertiary backdrop-blur-[5px]'>
|
||||
<tr>
|
||||
<td className='w-[128px] rounded-l-lg bg-background-section-burn pl-3'>{t('datasetHitTesting.table.header.source')}</td>
|
||||
<td className='bg-background-section-burn'>{t('datasetHitTesting.table.header.text')}</td>
|
||||
|
||||
@ -5,7 +5,7 @@ import type { GithubRepo } from '@/models/common'
|
||||
import { RiLoader2Line } from '@remixicon/react'
|
||||
|
||||
const defaultData = {
|
||||
stargazers_count: 98570,
|
||||
stargazers_count: 110918,
|
||||
}
|
||||
|
||||
const getStar = async () => {
|
||||
|
||||
@ -79,6 +79,9 @@ const SwrInitializer = ({
|
||||
<SWRConfig value={{
|
||||
shouldRetryOnError: false,
|
||||
revalidateOnFocus: false,
|
||||
dedupingInterval: 60000,
|
||||
focusThrottleInterval: 5000,
|
||||
provider: () => new Map(),
|
||||
}}>
|
||||
{children}
|
||||
</SWRConfig>
|
||||
|
||||
15
web/app/components/tools/labels/store.ts
Normal file
15
web/app/components/tools/labels/store.ts
Normal file
@ -0,0 +1,15 @@
|
||||
import { create } from 'zustand'
|
||||
import type { Label } from './constant'
|
||||
|
||||
type State = {
|
||||
labelList: Label[]
|
||||
}
|
||||
|
||||
type Action = {
|
||||
setLabelList: (labelList?: Label[]) => void
|
||||
}
|
||||
|
||||
export const useStore = create<State & Action>(set => ({
|
||||
labelList: [],
|
||||
setLabelList: labelList => set(() => ({ labelList })),
|
||||
}))
|
||||
@ -246,11 +246,11 @@ export const useWorkflow = () => {
|
||||
|
||||
const handleOutVarRenameChange = useCallback((nodeId: string, oldValeSelector: ValueSelector, newVarSelector: ValueSelector) => {
|
||||
const { getNodes, setNodes } = store.getState()
|
||||
const afterNodes = getAfterNodesInSameBranch(nodeId)
|
||||
const effectNodes = findUsedVarNodes(oldValeSelector, afterNodes)
|
||||
if (effectNodes.length > 0) {
|
||||
const newNodes = getNodes().map((node) => {
|
||||
if (effectNodes.find(n => n.id === node.id))
|
||||
const allNodes = getNodes()
|
||||
const affectedNodes = findUsedVarNodes(oldValeSelector, allNodes)
|
||||
if (affectedNodes.length > 0) {
|
||||
const newNodes = allNodes.map((node) => {
|
||||
if (affectedNodes.find(n => n.id === node.id))
|
||||
return updateNodeVars(node, oldValeSelector, newVarSelector)
|
||||
|
||||
return node
|
||||
|
||||
@ -1101,7 +1101,15 @@ export const getNodeUsedVars = (node: Node): ValueSelector[] => {
|
||||
res = (data as IfElseNodeType).conditions?.map((c) => {
|
||||
return c.variable_selector || []
|
||||
}) || []
|
||||
res.push(...((data as IfElseNodeType).cases || []).flatMap(c => (c.conditions || [])).map(c => c.variable_selector || []))
|
||||
res.push(...((data as IfElseNodeType).cases || []).flatMap(c => (c.conditions || [])).flatMap((c) => {
|
||||
const selectors: ValueSelector[] = []
|
||||
if (c.variable_selector)
|
||||
selectors.push(c.variable_selector)
|
||||
// Handle sub-variable conditions
|
||||
if (c.sub_variable_condition && c.sub_variable_condition.conditions)
|
||||
selectors.push(...c.sub_variable_condition.conditions.map(subC => subC.variable_selector || []).filter(sel => sel.length > 0))
|
||||
return selectors
|
||||
}))
|
||||
break
|
||||
}
|
||||
case BlockEnum.Code: {
|
||||
@ -1345,6 +1353,26 @@ export const updateNodeVars = (oldNode: Node, oldVarSelector: ValueSelector, new
|
||||
return c
|
||||
})
|
||||
}
|
||||
if (payload.cases) {
|
||||
payload.cases = payload.cases.map((caseItem) => {
|
||||
if (caseItem.conditions) {
|
||||
caseItem.conditions = caseItem.conditions.map((c) => {
|
||||
if (c.variable_selector?.join('.') === oldVarSelector.join('.'))
|
||||
c.variable_selector = newVarSelector
|
||||
// Handle sub-variable conditions
|
||||
if (c.sub_variable_condition && c.sub_variable_condition.conditions) {
|
||||
c.sub_variable_condition.conditions = c.sub_variable_condition.conditions.map((subC) => {
|
||||
if (subC.variable_selector?.join('.') === oldVarSelector.join('.'))
|
||||
subC.variable_selector = newVarSelector
|
||||
return subC
|
||||
})
|
||||
}
|
||||
return c
|
||||
})
|
||||
}
|
||||
return caseItem
|
||||
})
|
||||
}
|
||||
break
|
||||
}
|
||||
case BlockEnum.Code: {
|
||||
|
||||
@ -90,7 +90,7 @@ const DebugAndPreview = () => {
|
||||
<div
|
||||
ref={containerRef}
|
||||
className={cn(
|
||||
'relative flex h-full flex-col rounded-l-2xl border border-r-0 border-components-panel-border bg-components-panel-bg shadow-xl',
|
||||
'relative flex h-full flex-col rounded-l-2xl border border-r-0 border-components-panel-border bg-chatbot-bg shadow-xl',
|
||||
)}
|
||||
style={{ width: `${panelWidth}px` }}
|
||||
>
|
||||
|
||||
@ -75,7 +75,7 @@ export type AppContextProviderProps = {
|
||||
}
|
||||
|
||||
export const AppContextProvider: FC<AppContextProviderProps> = ({ children }) => {
|
||||
const { data: userProfileResponse, mutate: mutateUserProfile } = useSWR({ url: '/account/profile', params: {} }, fetchUserProfile)
|
||||
const { data: userProfileResponse, mutate: mutateUserProfile, error: userProfileError } = useSWR({ url: '/account/profile', params: {} }, fetchUserProfile)
|
||||
const { data: currentWorkspaceResponse, mutate: mutateCurrentWorkspace, isLoading: isLoadingCurrentWorkspace } = useSWR({ url: '/workspaces/current', params: {} }, fetchCurrentWorkspace)
|
||||
|
||||
const [userProfile, setUserProfile] = useState<UserProfileResponse>(userProfilePlaceholder)
|
||||
@ -86,15 +86,26 @@ export const AppContextProvider: FC<AppContextProviderProps> = ({ children }) =>
|
||||
const isCurrentWorkspaceEditor = useMemo(() => ['owner', 'admin', 'editor'].includes(currentWorkspace.role), [currentWorkspace.role])
|
||||
const isCurrentWorkspaceDatasetOperator = useMemo(() => currentWorkspace.role === 'dataset_operator', [currentWorkspace.role])
|
||||
const updateUserProfileAndVersion = useCallback(async () => {
|
||||
if (userProfileResponse && !userProfileResponse.bodyUsed) {
|
||||
const result = await userProfileResponse.json()
|
||||
setUserProfile(result)
|
||||
const current_version = userProfileResponse.headers.get('x-version')
|
||||
const current_env = process.env.NODE_ENV === 'development' ? 'DEVELOPMENT' : userProfileResponse.headers.get('x-env')
|
||||
const versionData = await fetchLangGeniusVersion({ url: '/version', params: { current_version } })
|
||||
setLangGeniusVersionInfo({ ...versionData, current_version, latest_version: versionData.version, current_env })
|
||||
if (userProfileResponse) {
|
||||
try {
|
||||
const clonedResponse = (userProfileResponse as Response).clone()
|
||||
const result = await clonedResponse.json()
|
||||
setUserProfile(result)
|
||||
const current_version = userProfileResponse.headers.get('x-version')
|
||||
const current_env = process.env.NODE_ENV === 'development' ? 'DEVELOPMENT' : userProfileResponse.headers.get('x-env')
|
||||
const versionData = await fetchLangGeniusVersion({ url: '/version', params: { current_version } })
|
||||
setLangGeniusVersionInfo({ ...versionData, current_version, latest_version: versionData.version, current_env })
|
||||
}
|
||||
catch (error) {
|
||||
console.error('Failed to update user profile:', error)
|
||||
if (userProfile.id === '')
|
||||
setUserProfile(userProfilePlaceholder)
|
||||
}
|
||||
}
|
||||
}, [userProfileResponse])
|
||||
else if (userProfileError && userProfile.id === '') {
|
||||
setUserProfile(userProfilePlaceholder)
|
||||
}
|
||||
}, [userProfileResponse, userProfileError, userProfile.id])
|
||||
|
||||
useEffect(() => {
|
||||
updateUserProfileAndVersion()
|
||||
|
||||
@ -23,19 +23,14 @@ const translation = {
|
||||
contractSales: 'تماس با فروش',
|
||||
contractOwner: 'تماس با مدیر تیم',
|
||||
startForFree: 'رایگان شروع کنید',
|
||||
getStartedWith: 'شروع کنید با ',
|
||||
contactSales: 'تماس با فروش',
|
||||
talkToSales: 'صحبت با فروش',
|
||||
modelProviders: 'ارائهدهندگان مدل',
|
||||
teamMembers: 'اعضای تیم',
|
||||
annotationQuota: 'سهمیه حاشیهنویسی',
|
||||
buildApps: 'ساخت اپلیکیشنها',
|
||||
vectorSpace: 'فضای وکتور',
|
||||
vectorSpaceBillingTooltip: 'هر 1 مگابایت میتواند حدود 1.2 میلیون کاراکتر از دادههای وکتور شده را ذخیره کند (براساس تخمین با استفاده از OpenAI Embeddings، متفاوت بر اساس مدلها).',
|
||||
vectorSpaceTooltip: 'فضای وکتور سیستم حافظه بلند مدت است که برای درک دادههای شما توسط LLMها مورد نیاز است.',
|
||||
documentsUploadQuota: 'سهمیه بارگذاری مستندات',
|
||||
documentProcessingPriority: 'اولویت پردازش مستندات',
|
||||
documentProcessingPriorityTip: 'برای اولویت پردازش بالاتر مستندات، لطفاً طرح خود را ارتقاء دهید.',
|
||||
documentProcessingPriorityUpgrade: 'دادههای بیشتری را با دقت بالاتر و سرعت بیشتر پردازش کنید.',
|
||||
priority: {
|
||||
'standard': 'استاندارد',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'محیط آزمایشی',
|
||||
description: '200 بار آزمایش رایگان GPT',
|
||||
includesTitle: 'شامل:',
|
||||
for: 'دوره آزمایشی رایگان قابلیتهای اصلی',
|
||||
},
|
||||
professional: {
|
||||
name: 'حرفهای',
|
||||
description: 'برای افراد و تیمهای کوچک برای باز کردن قدرت بیشتر به طور مقرون به صرفه.',
|
||||
includesTitle: 'همه چیز در طرح رایگان، به علاوه:',
|
||||
for: 'برای توسعهدهندگان مستقل/تیمهای کوچک',
|
||||
},
|
||||
team: {
|
||||
name: 'تیم',
|
||||
description: 'همکاری بدون محدودیت و لذت بردن از عملکرد برتر.',
|
||||
includesTitle: 'همه چیز در طرح حرفهای، به علاوه:',
|
||||
for: 'برای تیمهای متوسط',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'دریافت کاملترین قابلیتها و پشتیبانی برای سیستمهای بزرگ و بحرانی.',
|
||||
includesTitle: 'همه چیز در طرح تیم، به علاوه:',
|
||||
features: {
|
||||
0: 'راهکارهای استقرار مقیاسپذیر در سطح سازمانی',
|
||||
8: 'پشتیبانی فنی حرفهای',
|
||||
3: 'چندین فضای کاری و مدیریت سازمانی',
|
||||
5: 'SLA های توافق شده توسط شرکای Dify',
|
||||
4: 'SSO',
|
||||
2: 'ویژگیهای انحصاری سازمانی',
|
||||
1: 'مجوز صدور مجوز تجاری',
|
||||
6: 'امنیت و کنترلهای پیشرفته',
|
||||
7: 'بهروزرسانیها و نگهداری توسط دیفی بهطور رسمی',
|
||||
4: 'Sso',
|
||||
1: 'مجوز جواز تجاری',
|
||||
2: 'ویژگی های انحصاری سازمانی',
|
||||
8: 'پشتیبانی فنی حرفه ای',
|
||||
5: 'SLA های مذاکره شده توسط Dify Partners',
|
||||
6: 'امنیت و کنترل پیشرفته',
|
||||
3: 'فضاهای کاری چندگانه و مدیریت سازمانی',
|
||||
7: 'به روز رسانی و نگهداری توسط Dify به طور رسمی',
|
||||
0: 'راه حل های استقرار مقیاس پذیر در سطح سازمانی',
|
||||
},
|
||||
price: 'سفارشی',
|
||||
btnText: 'تماس با فروش',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
0: 'تمام ویژگیهای اصلی منتشر شده در مخزن عمومی',
|
||||
2: 'با رعایت مجوز منبع باز دیفی',
|
||||
1: 'فضای کاری واحد',
|
||||
2: 'با مجوز منبع باز Dify مطابقت دارد',
|
||||
0: 'تمام ویژگی های اصلی در مخزن عمومی منتشر شده است',
|
||||
},
|
||||
btnText: 'شروع کنید با جامعه',
|
||||
price: 'رایگان',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
1: 'محل کار واحد',
|
||||
0: 'قابل اطمینان خودمدیریتی توسط ارائهدهندگان مختلف ابر',
|
||||
2: 'شعار و سفارشیسازی برند وباپلیکیشن',
|
||||
3: 'پشتیبانی اولویت ایمیل و چت',
|
||||
1: 'فضای کاری واحد',
|
||||
3: 'پشتیبانی از ایمیل و چت اولویت دار',
|
||||
2: 'لوگوی وب اپلیکیشن و سفارشی سازی برندینگ',
|
||||
0: 'قابلیت اطمینان خود مدیریت شده توسط ارائه دهندگان مختلف ابر',
|
||||
},
|
||||
btnText: 'گرفتن نسخه پریمیوم در',
|
||||
description: 'برای سازمانها و تیمهای میانرده',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'طرح خود را ارتقاء دهید تا فضای بیشتری دریافت کنید.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'طرح خود را ارتقاء دهید تا',
|
||||
fullTipLine2: 'اپلیکیشنهای بیشتری بسازید.',
|
||||
fullTip2: 'محدودیت طرح به پایان رسید',
|
||||
contactUs: 'با ما تماس بگیرید',
|
||||
fullTip1: 'بهروزرسانی کنید تا برنامههای بیشتری ایجاد کنید',
|
||||
|
||||
@ -23,18 +23,13 @@ const translation = {
|
||||
contractSales: 'Contactez les ventes',
|
||||
contractOwner: 'Contacter le chef d\'équipe',
|
||||
startForFree: 'Commencez gratuitement',
|
||||
getStartedWith: 'Commencez avec',
|
||||
contactSales: 'Contacter les ventes',
|
||||
talkToSales: 'Parlez aux Ventes',
|
||||
modelProviders: 'Fournisseurs de Modèles',
|
||||
teamMembers: 'Membres de l\'équipe',
|
||||
buildApps: 'Construire des Applications',
|
||||
vectorSpace: 'Espace Vectoriel',
|
||||
vectorSpaceBillingTooltip: 'Chaque 1MB peut stocker environ 1,2 million de caractères de données vectorisées (estimé en utilisant les embeddings OpenAI, varie selon les modèles).',
|
||||
vectorSpaceTooltip: 'L\'espace vectoriel est le système de mémoire à long terme nécessaire pour que les LLMs comprennent vos données.',
|
||||
documentsUploadQuota: 'Quota de téléchargement de documents',
|
||||
documentProcessingPriority: 'Priorité de Traitement de Document',
|
||||
documentProcessingPriorityTip: 'Pour une priorité de traitement de documents plus élevée, veuillez mettre à niveau votre plan.',
|
||||
documentProcessingPriorityUpgrade: 'Traitez plus de données avec une précision plus élevée à des vitesses plus rapides.',
|
||||
priority: {
|
||||
'standard': 'Standard',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Bac à sable',
|
||||
description: '200 essais gratuits de GPT',
|
||||
includesTitle: 'Inclus :',
|
||||
for: 'Essai gratuit des fonctionnalités principales',
|
||||
},
|
||||
professional: {
|
||||
name: 'Professionnel',
|
||||
description: 'Pour les individus et les petites équipes afin de débloquer plus de puissance à un prix abordable.',
|
||||
includesTitle: 'Tout ce qui est dans le plan gratuit, plus :',
|
||||
for: 'Pour les développeurs indépendants / petites équipes',
|
||||
},
|
||||
team: {
|
||||
name: 'Équipe',
|
||||
description: 'Collaborez sans limites et profitez d\'une performance de premier ordre.',
|
||||
includesTitle: 'Tout ce qui est inclus dans le plan Professionnel, plus :',
|
||||
for: 'Pour les équipes de taille moyenne',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,14 +115,14 @@ const translation = {
|
||||
description: 'Obtenez toutes les capacités et le support pour les systèmes à grande échelle et critiques pour la mission.',
|
||||
includesTitle: 'Tout ce qui est inclus dans le plan Équipe, plus :',
|
||||
features: {
|
||||
5: 'SLA négociés par Dify Partners',
|
||||
1: 'Autorisation de Licence Commerciale',
|
||||
2: 'Fonctionnalités exclusives pour les entreprises',
|
||||
4: 'SSO',
|
||||
8: 'Support Technique Professionnel',
|
||||
3: 'Gestion de plusieurs espaces de travail et d\'entreprise',
|
||||
6: 'Sécurité et contrôles avancés',
|
||||
7: 'Mises à jour et maintenance par Dify Officiellement',
|
||||
3: 'Espaces de travail multiples et gestion d’entreprise',
|
||||
4: 'SSO',
|
||||
1: 'Autorisation de licence commerciale',
|
||||
2: 'Fonctionnalités exclusives à l’entreprise',
|
||||
5: 'SLA négociés par les partenaires Dify',
|
||||
8: 'Assistance technique professionnelle',
|
||||
7: 'Mises à jour et maintenance par Dify officiellement',
|
||||
0: 'Solutions de déploiement évolutives de niveau entreprise',
|
||||
},
|
||||
for: 'Pour les équipes de grande taille',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
2: 'Conforme à la licence open source de Dify',
|
||||
1: 'Espace de travail unique',
|
||||
0: 'Toutes les fonctionnalités principales publiées dans le référentiel public',
|
||||
0: 'Toutes les fonctionnalités de base publiées dans le dépôt public',
|
||||
2: 'Conforme à la licence Open Source Dify',
|
||||
},
|
||||
name: 'Communauté',
|
||||
btnText: 'Commencez avec la communauté',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
3: 'Support par e-mail et chat prioritaire',
|
||||
2: 'Personnalisation du logo et de l’image de marque WebApp',
|
||||
1: 'Espace de travail unique',
|
||||
0: 'Fiabilité autogérée par divers fournisseurs de cloud',
|
||||
2: 'Personnalisation du logo et de la marque de l\'application Web',
|
||||
3: 'Assistance prioritaire par e-mail et chat',
|
||||
0: 'Fiabilité autogérée par différents fournisseurs de cloud',
|
||||
},
|
||||
for: 'Pour les organisations et les équipes de taille moyenne',
|
||||
includesTitle: 'Tout de la communauté, en plus :',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Mettez à niveau votre plan pour obtenir plus d\'espace.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Mettez à jour votre plan pour',
|
||||
fullTipLine2: 'construire plus d\'applications.',
|
||||
fullTip2: 'Limite de plan atteinte',
|
||||
contactUs: 'Contactez-nous',
|
||||
fullTip1: 'Mettez à niveau pour créer plus d\'applications',
|
||||
|
||||
@ -24,22 +24,15 @@ const translation = {
|
||||
contractSales: 'बिक्री से संपर्क करें',
|
||||
contractOwner: 'टीम प्रबंधक से संपर्क करें',
|
||||
startForFree: 'मुफ्त में शुरू करें',
|
||||
getStartedWith: 'इसके साथ शुरू करें ',
|
||||
contactSales: 'बिक्री से संपर्क करें',
|
||||
talkToSales: 'बिक्री से बात करें',
|
||||
modelProviders: 'मॉडल प्रदाता',
|
||||
teamMembers: 'टीम के सदस्य',
|
||||
annotationQuota: 'एनोटेशन कोटा',
|
||||
buildApps: 'ऐप्स बनाएं',
|
||||
vectorSpace: 'वेक्टर स्पेस',
|
||||
vectorSpaceBillingTooltip:
|
||||
'प्रत्येक 1MB लगभग 1.2 मिलियन वर्णों के वेक्टराइज्ड डेटा को संग्रहीत कर सकता है (OpenAI एम्बेडिंग का उपयोग करके अनुमानित, मॉडल में भिन्नता होती है)।',
|
||||
vectorSpaceTooltip:
|
||||
'वेक्टर स्पेस वह दीर्घकालिक स्मृति प्रणाली है जिसकी आवश्यकता LLMs को आपके डेटा को समझने के लिए होती है।',
|
||||
documentsUploadQuota: 'दस्तावेज़ अपलोड कोटा',
|
||||
documentProcessingPriority: 'दस्तावेज़ प्रसंस्करण प्राथमिकता',
|
||||
documentProcessingPriorityTip:
|
||||
'उच्च दस्तावेज़ प्रसंस्करण प्राथमिकता के लिए, कृपया अपनी योजना अपग्रेड करें।',
|
||||
documentProcessingPriorityUpgrade:
|
||||
'तेजी से गति पर उच्च सटीकता के साथ अधिक डेटा संसाधित करें।',
|
||||
priority: {
|
||||
@ -113,21 +106,18 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'सैंडबॉक्स',
|
||||
description: '200 बार GPT मुफ्त ट्रायल',
|
||||
includesTitle: 'शामिल हैं:',
|
||||
for: 'कोर क्षमताओं का मुफ्त परीक्षण',
|
||||
},
|
||||
professional: {
|
||||
name: 'प्रोफेशनल',
|
||||
description:
|
||||
'व्यक्तियों और छोटे टीमों के लिए अधिक शक्ति सस्ती दर पर खोलें।',
|
||||
includesTitle: 'मुफ्त योजना में सब कुछ, साथ में:',
|
||||
for: 'स्वतंत्र डेवलपर्स/छोटे टीमों के लिए',
|
||||
},
|
||||
team: {
|
||||
name: 'टीम',
|
||||
description:
|
||||
'बिना सीमा के सहयोग करें और शीर्ष स्तरीय प्रदर्शन का आनंद लें।',
|
||||
includesTitle: 'प्रोफेशनल योजना में सब कुछ, साथ में:',
|
||||
for: 'मध्यम आकार की टीमों के लिए',
|
||||
},
|
||||
enterprise: {
|
||||
@ -136,15 +126,15 @@ const translation = {
|
||||
'बड़े पैमाने पर मिशन-क्रिटिकल सिस्टम के लिए पूर्ण क्षमताएं और समर्थन प्राप्त करें।',
|
||||
includesTitle: 'टीम योजना में सब कुछ, साथ में:',
|
||||
features: {
|
||||
0: 'उद्योग स्तर के बड़े पैमाने पर वितरण समाधान',
|
||||
3: 'अनेक कार्यक्षेत्र और उद्यम प्रबंधक',
|
||||
8: 'प्रोफेशनल तकनीकी समर्थन',
|
||||
6: 'उन्नत सुरक्षा और नियंत्रण',
|
||||
2: 'विशेष उद्यम सुविधाएँ',
|
||||
1: 'Commercial License Authorization',
|
||||
4: 'SSO',
|
||||
6: 'उन्नत सुरक्षा और नियंत्रण',
|
||||
2: 'विशेष उद्यम सुविधाएँ',
|
||||
3: 'अनेक कार्यक्षेत्र और उद्यम प्रबंधक',
|
||||
5: 'डिफाई पार्टनर्स द्वारा बातचीत किए गए एसएलए',
|
||||
8: 'प्रोफेशनल तकनीकी समर्थन',
|
||||
7: 'डीफाई द्वारा आधिकारिक रूप से अपडेट और रखरखाव',
|
||||
0: 'उद्योग स्तर के बड़े पैमाने पर वितरण समाधान',
|
||||
},
|
||||
price: 'कस्टम',
|
||||
btnText: 'बिक्री से संपर्क करें',
|
||||
@ -153,9 +143,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
1: 'एकल कार्यक्षेत्र',
|
||||
2: 'डिफी ओपन सोर्स लाइसेंस के अनुपालन में',
|
||||
0: 'सभी मुख्य सुविधाएं सार्वजनिक संग्रह के तहत जारी की गई हैं।',
|
||||
1: 'एकल कार्यक्षेत्र',
|
||||
},
|
||||
description: 'व्यक्तिगत उपयोगकर्ताओं, छोटे टीमों, या गैर-व्यावसायिक परियोजनाओं के लिए',
|
||||
for: 'व्यक्तिगत उपयोगकर्ताओं, छोटे टीमों, या गैर-व्यावसायिक परियोजनाओं के लिए',
|
||||
@ -166,9 +156,9 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
1: 'एकल कार्यक्षेत्र',
|
||||
2: 'वेब ऐप लोगो और ब्रांडिंग कस्टमाइजेशन',
|
||||
3: 'प्राथमिकता ईमेल और चैट समर्थन',
|
||||
1: 'एकल कार्यक्षेत्र',
|
||||
0: 'विभिन्न क्लाउड प्रदाताओं द्वारा आत्म-प्रबंधित विश्वसनीयता',
|
||||
},
|
||||
priceTip: 'क्लाउड मार्केटप्लेस के आधार पर',
|
||||
@ -186,8 +176,6 @@ const translation = {
|
||||
fullSolution: 'अधिक स्थान प्राप्त करने के लिए अपनी योजना अपग्रेड करें।',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'अधिक ऐप्स बनाने के लिए',
|
||||
fullTipLine2: 'अपनी योजना अपग्रेड करें।',
|
||||
fullTip1: 'अधिक ऐप्स बनाने के लिए अपग्रेड करें',
|
||||
fullTip2: 'योजना की सीमा पहुँच गई',
|
||||
contactUs: 'हमसे संपर्क करें',
|
||||
|
||||
@ -24,22 +24,15 @@ const translation = {
|
||||
contractSales: 'Contatta vendite',
|
||||
contractOwner: 'Contatta il responsabile del team',
|
||||
startForFree: 'Inizia gratis',
|
||||
getStartedWith: 'Inizia con ',
|
||||
contactSales: 'Contatta le vendite',
|
||||
talkToSales: 'Parla con le vendite',
|
||||
modelProviders: 'Fornitori di Modelli',
|
||||
teamMembers: 'Membri del Team',
|
||||
annotationQuota: 'Quota di Annotazione',
|
||||
buildApps: 'Crea App',
|
||||
vectorSpace: 'Spazio Vettoriale',
|
||||
vectorSpaceBillingTooltip:
|
||||
'Ogni 1MB può memorizzare circa 1,2 milioni di caratteri di dati vettoriali (stimato utilizzando OpenAI Embeddings, varia tra i modelli).',
|
||||
vectorSpaceTooltip:
|
||||
'Lo Spazio Vettoriale è il sistema di memoria a lungo termine necessario per permettere agli LLM di comprendere i tuoi dati.',
|
||||
documentsUploadQuota: 'Quota di Caricamento Documenti',
|
||||
documentProcessingPriority: 'Priorità di Elaborazione Documenti',
|
||||
documentProcessingPriorityTip:
|
||||
'Per una maggiore priorità di elaborazione dei documenti, aggiorna il tuo piano.',
|
||||
documentProcessingPriorityUpgrade:
|
||||
'Elabora più dati con maggiore precisione a velocità più elevate.',
|
||||
priority: {
|
||||
@ -113,21 +106,18 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Sandbox',
|
||||
description: '200 prove gratuite di GPT',
|
||||
includesTitle: 'Include:',
|
||||
for: 'Prova gratuita delle capacità principali',
|
||||
},
|
||||
professional: {
|
||||
name: 'Professional',
|
||||
description:
|
||||
'Per individui e piccoli team per sbloccare più potenza a prezzi accessibili.',
|
||||
includesTitle: 'Tutto nel piano gratuito, più:',
|
||||
for: 'Per sviluppatori indipendenti / piccoli team',
|
||||
},
|
||||
team: {
|
||||
name: 'Team',
|
||||
description:
|
||||
'Collabora senza limiti e goditi prestazioni di alto livello.',
|
||||
includesTitle: 'Tutto nel piano Professional, più:',
|
||||
for: 'Per team di medie dimensioni',
|
||||
},
|
||||
enterprise: {
|
||||
@ -136,15 +126,15 @@ const translation = {
|
||||
'Ottieni tutte le capacità e il supporto per sistemi mission-critical su larga scala.',
|
||||
includesTitle: 'Tutto nel piano Team, più:',
|
||||
features: {
|
||||
6: 'Sicurezza e Controlli Avanzati',
|
||||
2: 'Funzionalità esclusive per le imprese',
|
||||
3: 'Spazi di lavoro multipli e gestione aziendale',
|
||||
2: 'Funzionalità esclusive per le aziende',
|
||||
1: 'Autorizzazione Licenza Commerciale',
|
||||
5: 'SLA negoziati dai partner Dify',
|
||||
4: 'SSO',
|
||||
8: 'Supporto Tecnico Professionale',
|
||||
5: 'SLA negoziati da Dify Partners',
|
||||
0: 'Soluzioni di distribuzione scalabili di livello enterprise',
|
||||
7: 'Aggiornamenti e manutenzione di Dify ufficialmente',
|
||||
1: 'Autorizzazione alla Licenza Commerciale',
|
||||
3: 'Gestione di più spazi di lavoro e imprese',
|
||||
6: 'Sicurezza e controlli avanzati',
|
||||
8: 'Supporto tecnico professionale',
|
||||
7: 'Aggiornamenti e manutenzione da parte di Dify ufficialmente',
|
||||
0: 'Soluzioni di distribuzione scalabili di livello aziendale',
|
||||
},
|
||||
price: 'Personalizzato',
|
||||
for: 'Per team di grandi dimensioni',
|
||||
@ -153,9 +143,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
1: 'Spazio di Lavoro Unico',
|
||||
2: 'Rispetta la Licenza Open Source di Dify',
|
||||
0: 'Tutte le funzionalità principali rilasciate sotto il repository pubblico',
|
||||
1: 'Area di lavoro singola',
|
||||
2: 'Conforme alla licenza Open Source Dify',
|
||||
0: 'Tutte le funzionalità principali rilasciate nel repository pubblico',
|
||||
},
|
||||
name: 'Comunità',
|
||||
btnText: 'Inizia con la comunità',
|
||||
@ -166,10 +156,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
0: 'Affidabilità autogestita da vari fornitori di cloud',
|
||||
3: 'Supporto prioritario via Email e Chat',
|
||||
2: 'Personalizzazione del logo e del marchio dell\'app web',
|
||||
1: 'Spazio di Lavoro Unico',
|
||||
3: 'Supporto prioritario via e-mail e chat',
|
||||
1: 'Area di lavoro singola',
|
||||
2: 'Personalizzazione del logo e del marchio WebApp',
|
||||
0: 'Affidabilità autogestita da vari fornitori di servizi cloud',
|
||||
},
|
||||
name: 'Premium',
|
||||
priceTip: 'Basato su Cloud Marketplace',
|
||||
@ -186,8 +176,6 @@ const translation = {
|
||||
fullSolution: 'Aggiorna il tuo piano per ottenere più spazio.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Aggiorna il tuo piano per',
|
||||
fullTipLine2: 'creare più app.',
|
||||
fullTip1des: 'Hai raggiunto il limite di costruzione delle app su questo piano.',
|
||||
fullTip2des: 'Si consiglia di disinstallare le applicazioni inattive per liberare spazio, o contattarci.',
|
||||
contactUs: 'Contattaci',
|
||||
|
||||
@ -17,7 +17,7 @@ const translation = {
|
||||
bulkImport: '一括インポート',
|
||||
bulkExport: '一括エクスポート',
|
||||
clearAll: 'すべて削除',
|
||||
clearAllConfirm: 'すべての寸法を削除?',
|
||||
clearAllConfirm: 'すべての注釈を削除しますか?',
|
||||
},
|
||||
},
|
||||
editModal: {
|
||||
|
||||
@ -565,7 +565,7 @@ const translation = {
|
||||
overview: '監視',
|
||||
promptEng: 'オーケストレート',
|
||||
apiAccess: 'API アクセス',
|
||||
logAndAnn: 'ログ&アナウンス',
|
||||
logAndAnn: 'ログ&注釈',
|
||||
logs: 'ログ',
|
||||
},
|
||||
environment: {
|
||||
|
||||
@ -995,6 +995,7 @@ const translation = {
|
||||
noLastRunFound: '以前の実行が見つかりませんでした。',
|
||||
copyLastRunError: '最後の実行の入力をコピーできませんでした',
|
||||
noMatchingInputsFound: '前回の実行から一致する入力が見つかりませんでした。',
|
||||
lastRunInputsCopied: '前回の実行から{{count}}個の入力をコピーしました',
|
||||
},
|
||||
}
|
||||
|
||||
|
||||
@ -24,21 +24,14 @@ const translation = {
|
||||
contractSales: 'Skontaktuj się z działem sprzedaży',
|
||||
contractOwner: 'Skontaktuj się z zarządcą zespołu',
|
||||
startForFree: 'Zacznij za darmo',
|
||||
getStartedWith: 'Rozpocznij z ',
|
||||
contactSales: 'Kontakt z działem sprzedaży',
|
||||
talkToSales: 'Porozmawiaj z działem sprzedaży',
|
||||
modelProviders: 'Dostawcy modeli',
|
||||
teamMembers: 'Członkowie zespołu',
|
||||
buildApps: 'Twórz aplikacje',
|
||||
vectorSpace: 'Przestrzeń wektorowa',
|
||||
vectorSpaceBillingTooltip:
|
||||
'Każdy 1MB może przechowywać około 1,2 miliona znaków z wektoryzowanych danych (szacowane na podstawie OpenAI Embeddings, różni się w zależności od modelu).',
|
||||
vectorSpaceTooltip:
|
||||
'Przestrzeń wektorowa jest systemem pamięci długoterminowej wymaganym dla LLM, aby zrozumieć Twoje dane.',
|
||||
documentsUploadQuota: 'Limit przesyłanych dokumentów',
|
||||
documentProcessingPriority: 'Priorytet przetwarzania dokumentów',
|
||||
documentProcessingPriorityTip:
|
||||
'Dla wyższego priorytetu przetwarzania dokumentów, ulepsz swój plan.',
|
||||
documentProcessingPriorityUpgrade:
|
||||
'Przetwarzaj więcej danych z większą dokładnością i w szybszym tempie.',
|
||||
priority: {
|
||||
@ -112,21 +105,18 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Sandbox',
|
||||
description: '200 razy darmowa próba GPT',
|
||||
includesTitle: 'Zawiera:',
|
||||
for: 'Darmowy okres próbny podstawowych funkcji',
|
||||
},
|
||||
professional: {
|
||||
name: 'Profesjonalny',
|
||||
description:
|
||||
'Dla osób fizycznych i małych zespołów, aby odblokować więcej mocy w przystępnej cenie.',
|
||||
includesTitle: 'Wszystko w darmowym planie, plus:',
|
||||
for: 'Dla niezależnych deweloperów/małych zespołów',
|
||||
},
|
||||
team: {
|
||||
name: 'Zespół',
|
||||
description:
|
||||
'Współpracuj bez ograniczeń i ciesz się najwyższą wydajnością.',
|
||||
includesTitle: 'Wszystko w planie Profesjonalnym, plus:',
|
||||
for: 'Dla średniej wielkości zespołów',
|
||||
},
|
||||
enterprise: {
|
||||
@ -135,15 +125,15 @@ const translation = {
|
||||
'Uzyskaj pełne możliwości i wsparcie dla systemów o kluczowym znaczeniu dla misji.',
|
||||
includesTitle: 'Wszystko w planie Zespołowym, plus:',
|
||||
features: {
|
||||
3: 'Wiele przestrzeni roboczych i zarządzanie przedsiębiorstwem',
|
||||
5: 'Wynegocjowane SLA przez Dify Partners',
|
||||
0: 'Rozwiązania do wdrożeń na dużą skalę klasy przedsiębiorstw',
|
||||
8: 'Profesjonalne wsparcie techniczne',
|
||||
2: 'Ekskluzywne funkcje przedsiębiorstwa',
|
||||
6: 'Zaawansowane zabezpieczenia i kontrola',
|
||||
7: 'Aktualizacje i konserwacja przez Dify Oficjalnie',
|
||||
4: 'SSO',
|
||||
2: 'Wyjątkowe funkcje dla przedsiębiorstw',
|
||||
7: 'Aktualizacje i konserwacja przez Dify oficjalnie',
|
||||
4: 'Usługi rejestracji jednokrotnej',
|
||||
1: 'Autoryzacja licencji komercyjnej',
|
||||
0: 'Skalowalne rozwiązania wdrożeniowe klasy korporacyjnej',
|
||||
5: 'Umowy SLA wynegocjowane przez Dify Partners',
|
||||
8: 'Profesjonalne wsparcie techniczne',
|
||||
3: 'Wiele przestrzeni roboczych i zarządzanie przedsiębiorstwem',
|
||||
6: 'Zaawansowane zabezpieczenia i kontrola',
|
||||
},
|
||||
priceTip: 'Tylko roczne fakturowanie',
|
||||
btnText: 'Skontaktuj się z działem sprzedaży',
|
||||
@ -152,9 +142,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
0: 'Wszystkie funkcje podstawowe wydane w publicznym repozytorium',
|
||||
1: 'Jedno Miejsce Pracy',
|
||||
2: 'Zgodne z licencją Dify Open Source',
|
||||
1: 'Pojedyncza przestrzeń robocza',
|
||||
2: 'Zgodny z licencją Dify Open Source',
|
||||
0: 'Wszystkie podstawowe funkcje udostępnione w repozytorium publicznym',
|
||||
},
|
||||
includesTitle: 'Darmowe funkcje:',
|
||||
name: 'Społeczność',
|
||||
@ -165,10 +155,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
0: 'Samozarządzana niezawodność różnych dostawców chmury',
|
||||
1: 'Jedno miejsce pracy',
|
||||
3: 'Priorytetowe wsparcie przez e-mail i czat',
|
||||
2: 'Logo aplikacji internetowej i dostosowanie marki',
|
||||
1: 'Pojedyncza przestrzeń robocza',
|
||||
2: 'Personalizacja logo i brandingu aplikacji internetowej',
|
||||
3: 'Priorytetowa pomoc techniczna przez e-mail i czat',
|
||||
0: 'Niezawodność samodzielnego zarządzania przez różnych dostawców usług w chmurze',
|
||||
},
|
||||
description: 'Dla średnich organizacji i zespołów',
|
||||
for: 'Dla średnich organizacji i zespołów',
|
||||
@ -185,8 +175,6 @@ const translation = {
|
||||
fullSolution: 'Ulepsz swój plan, aby uzyskać więcej miejsca.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Ulepsz swój plan, aby',
|
||||
fullTipLine2: 'tworzyć więcej aplikacji.',
|
||||
fullTip1des: 'Osiągnąłeś limit tworzenia aplikacji w tym planie.',
|
||||
fullTip1: 'Zaktualizuj, aby stworzyć więcej aplikacji',
|
||||
fullTip2: 'Osiągnięto limit planu',
|
||||
|
||||
@ -22,17 +22,13 @@ const translation = {
|
||||
currentPlan: 'Plano Atual',
|
||||
contractOwner: 'Entre em contato com o gerente da equipe',
|
||||
startForFree: 'Comece de graça',
|
||||
getStartedWith: 'Comece com',
|
||||
contactSales: 'Fale com a equipe de Vendas',
|
||||
talkToSales: 'Fale com a equipe de Vendas',
|
||||
modelProviders: 'Fornecedores de Modelos',
|
||||
teamMembers: 'Membros da Equipe',
|
||||
buildApps: 'Construir Aplicações',
|
||||
vectorSpace: 'Espaço Vetorial',
|
||||
vectorSpaceBillingTooltip: 'Cada 1MB pode armazenar cerca de 1,2 milhão de caracteres de dados vetorizados (estimado usando OpenAI Embeddings, varia entre os modelos).',
|
||||
vectorSpaceTooltip: 'O Espaço Vetorial é o sistema de memória de longo prazo necessário para que LLMs compreendam seus dados.',
|
||||
documentProcessingPriority: 'Prioridade no Processamento de Documentos',
|
||||
documentProcessingPriorityTip: 'Para maior prioridade no processamento de documentos, faça o upgrade do seu plano.',
|
||||
documentProcessingPriorityUpgrade: 'Processe mais dados com maior precisão e velocidade.',
|
||||
priority: {
|
||||
'standard': 'Padrão',
|
||||
@ -53,7 +49,6 @@ const translation = {
|
||||
dedicatedAPISupport: 'Suporte dedicado à API',
|
||||
customIntegration: 'Integração e suporte personalizados',
|
||||
ragAPIRequest: 'Solicitações API RAG',
|
||||
agentModel: 'Modelo de Agente',
|
||||
workflow: 'Fluxo de trabalho',
|
||||
llmLoadingBalancing: 'Balanceamento de carga LLM',
|
||||
bulkUpload: 'Upload em massa de documentos',
|
||||
@ -75,7 +70,6 @@ const translation = {
|
||||
ragAPIRequestTooltip: 'Refere-se ao número de chamadas de API que invocam apenas as capacidades de processamento da base de conhecimento do Dify.',
|
||||
receiptInfo: 'Somente proprietários e administradores de equipe podem se inscrever e visualizar informações de cobrança',
|
||||
customTools: 'Ferramentas personalizadas',
|
||||
documentsUploadQuota: 'Cota de upload de documentos',
|
||||
annotationQuota: 'Cota de anotação',
|
||||
contractSales: 'Entre em contato com a equipe de vendas',
|
||||
unavailable: 'Indisponível',
|
||||
@ -104,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Sandbox',
|
||||
description: '200 vezes GPT de teste gratuito',
|
||||
includesTitle: 'Inclui:',
|
||||
for: 'Teste gratuito das capacidades principais',
|
||||
},
|
||||
professional: {
|
||||
name: 'Profissional',
|
||||
description: 'Para indivíduos e pequenas equipes desbloquearem mais poder de forma acessível.',
|
||||
includesTitle: 'Tudo no plano gratuito, além de:',
|
||||
for: 'Para Desenvolvedores Independentes/Pequenas Equipes',
|
||||
},
|
||||
team: {
|
||||
name: 'Equipe',
|
||||
description: 'Colabore sem limites e aproveite o desempenho de primeira linha.',
|
||||
includesTitle: 'Tudo no plano Profissional, além de:',
|
||||
for: 'Para Equipes de Médio Porte',
|
||||
},
|
||||
enterprise: {
|
||||
@ -124,15 +115,15 @@ const translation = {
|
||||
description: 'Obtenha capacidades completas e suporte para sistemas críticos em larga escala.',
|
||||
includesTitle: 'Tudo no plano Equipe, além de:',
|
||||
features: {
|
||||
6: 'Segurança e Controles Avançados',
|
||||
7: 'Atualizações e Manutenção por Dify Oficialmente',
|
||||
5: 'Acordos de Nível de Serviço negociados pelos Parceiros Dify',
|
||||
1: 'Autorização de Licença Comercial',
|
||||
8: 'Suporte Técnico Profissional',
|
||||
3: 'Vários espaços de trabalho e gerenciamento corporativo',
|
||||
2: 'Recursos exclusivos da empresa',
|
||||
6: 'Segurança e controles avançados',
|
||||
4: 'SSO',
|
||||
2: 'Recursos Exclusivos da Empresa',
|
||||
3: 'Múltiplos Espaços de Trabalho e Gestão Empresarial',
|
||||
0: 'Soluções de Implantação Escaláveis de Nível Empresarial',
|
||||
8: 'Suporte Técnico Profissional',
|
||||
0: 'Soluções de implantação escaláveis de nível empresarial',
|
||||
7: 'Atualizações e manutenção por Dify oficialmente',
|
||||
1: 'Autorização de Licença Comercial',
|
||||
5: 'SLAs negociados pela Dify Partners',
|
||||
},
|
||||
btnText: 'Contate Vendas',
|
||||
priceTip: 'Faturamento Anual Apenas',
|
||||
@ -141,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
1: 'Espaço de Trabalho Único',
|
||||
0: 'Todos os recursos principais lançados sob o repositório público',
|
||||
2: 'Cumpre a Licença de Código Aberto Dify',
|
||||
0: 'Todos os principais recursos lançados no repositório público',
|
||||
2: 'Está em conformidade com a licença de código aberto Dify',
|
||||
1: 'Espaço de trabalho individual',
|
||||
},
|
||||
name: 'Comunidade',
|
||||
description: 'Para Usuários Individuais, Pequenas Equipes ou Projetos Não Comerciais',
|
||||
@ -154,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
1: 'Espaço de Trabalho Único',
|
||||
3: 'Suporte prioritário por e-mail e chat',
|
||||
2: 'Customização de Logo e Branding do WebApp',
|
||||
2: 'Personalização do logotipo e da marca do WebApp',
|
||||
1: 'Espaço de trabalho individual',
|
||||
0: 'Confiabilidade autogerenciada por vários provedores de nuvem',
|
||||
3: 'Suporte prioritário por e-mail e bate-papo',
|
||||
},
|
||||
includesTitle: 'Tudo da Comunidade, além de:',
|
||||
for: 'Para organizações e equipes de médio porte',
|
||||
@ -174,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Faça o upgrade do seu plano para obter mais espaço.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Faça o upgrade do seu plano para',
|
||||
fullTipLine2: 'construir mais aplicativos.',
|
||||
fullTip1: 'Atualize para criar mais aplicativos',
|
||||
fullTip2: 'Limite do plano alcançado',
|
||||
fullTip1des: 'Você atingiu o limite de criar aplicativos neste plano.',
|
||||
|
||||
@ -23,18 +23,13 @@ const translation = {
|
||||
contractSales: 'Contactați vânzările',
|
||||
contractOwner: 'Contactați managerul echipei',
|
||||
startForFree: 'Începe gratuit',
|
||||
getStartedWith: 'Începe cu ',
|
||||
contactSales: 'Contactați vânzările',
|
||||
talkToSales: 'Vorbiți cu vânzările',
|
||||
modelProviders: 'Furnizori de modele',
|
||||
teamMembers: 'Membri ai echipei',
|
||||
buildApps: 'Construiește aplicații',
|
||||
vectorSpace: 'Spațiu vectorial',
|
||||
vectorSpaceBillingTooltip: 'Fiecare 1MB poate stoca aproximativ 1,2 milioane de caractere de date vectorizate (estimat folosind OpenAI Embeddings, variază în funcție de modele).',
|
||||
vectorSpaceTooltip: 'Spațiul vectorial este sistemul de memorie pe termen lung necesar pentru ca LLM-urile să înțeleagă datele dvs.',
|
||||
documentsUploadQuota: 'Cotă de încărcare a documentelor',
|
||||
documentProcessingPriority: 'Prioritatea procesării documentelor',
|
||||
documentProcessingPriorityTip: 'Pentru o prioritate mai mare a procesării documentelor, vă rugăm să actualizați planul.',
|
||||
documentProcessingPriorityUpgrade: 'Procesați mai multe date cu o acuratețe mai mare și la viteze mai rapide.',
|
||||
priority: {
|
||||
'standard': 'Standard',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Sandbox',
|
||||
description: '200 de încercări gratuite GPT',
|
||||
includesTitle: 'Include:',
|
||||
for: 'Proba gratuită a capacităților de bază',
|
||||
},
|
||||
professional: {
|
||||
name: 'Professional',
|
||||
description: 'Pentru persoane fizice și echipe mici pentru a debloca mai multă putere la un preț accesibil.',
|
||||
includesTitle: 'Tot ce este în planul gratuit, plus:',
|
||||
for: 'Pentru dezvoltatori independenți / echipe mici',
|
||||
},
|
||||
team: {
|
||||
name: 'Echipă',
|
||||
description: 'Colaborați fără limite și bucurați-vă de performanțe de top.',
|
||||
includesTitle: 'Tot ce este în planul Professional, plus:',
|
||||
for: 'Pentru echipe de dimensiuni medii',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'Obțineți capacități și asistență complete pentru sisteme critice la scară largă.',
|
||||
includesTitle: 'Tot ce este în planul Echipă, plus:',
|
||||
features: {
|
||||
3: 'Multiple Spații de lucru și Management Enterprise',
|
||||
6: 'Securitate avansată și control',
|
||||
6: 'Securitate și controale avansate',
|
||||
1: 'Autorizare licență comercială',
|
||||
2: 'Funcții exclusive pentru întreprinderi',
|
||||
0: 'Soluții de implementare scalabile la nivel de întreprindere',
|
||||
5: 'SLA-uri negociate de partenerii Dify',
|
||||
3: 'Mai multe spații de lucru și managementul întreprinderii',
|
||||
7: 'Actualizări și întreținere de către Dify oficial',
|
||||
8: 'Asistență tehnică profesională',
|
||||
4: 'SSO',
|
||||
7: 'Actualizări și întreținere de către Dify Oficial',
|
||||
1: 'Autorizare pentru licență comercială',
|
||||
5: 'SLA-uri negociate de partenerii Dify',
|
||||
0: 'Soluții de desfășurare scalabile de nivel enterprise',
|
||||
},
|
||||
for: 'Pentru echipe de mari dimensiuni',
|
||||
price: 'Personalizat',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
2: 'Se conformează Licenței Open Source Dify',
|
||||
0: 'Toate caracteristicile de bază lansate în depozitul public',
|
||||
2: 'Respectă licența Dify Open Source',
|
||||
1: 'Spațiu de lucru unic',
|
||||
0: 'Toate funcțiile de bază lansate sub depozitul public',
|
||||
},
|
||||
description: 'Pentru utilizatori individuali, echipe mici sau proiecte necomerciale',
|
||||
btnText: 'Începe cu Comunitatea',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
3: 'Asistență prioritară prin e-mail și chat',
|
||||
1: 'Spațiu de lucru unic',
|
||||
0: 'Fiabilitate autogestionată de diferiți furnizori de cloud',
|
||||
2: 'Personalizarea logo-ului și branding-ului aplicației web',
|
||||
3: 'Suport prioritar prin email și chat',
|
||||
0: 'Fiabilitate autogestionată de diverși furnizori de cloud',
|
||||
2: 'Personalizarea logo-ului și brandingului WebApp',
|
||||
},
|
||||
btnText: 'Obține Premium în',
|
||||
description: 'Pentru organizații și echipe de dimensiuni medii',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Actualizați-vă planul pentru a obține mai mult spațiu.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Actualizați-vă planul pentru a',
|
||||
fullTipLine2: 'construi mai multe aplicații.',
|
||||
fullTip2des: 'Se recomandă curățarea aplicațiilor inactive pentru a elibera resurse, sau contactați-ne.',
|
||||
fullTip2: 'Limita planului a fost atinsă',
|
||||
fullTip1des: 'Ați atins limita de aplicații construite pe acest plan',
|
||||
|
||||
@ -23,19 +23,14 @@ const translation = {
|
||||
contractSales: 'Связаться с отделом продаж',
|
||||
contractOwner: 'Связаться с руководителем команды',
|
||||
startForFree: 'Начать бесплатно',
|
||||
getStartedWith: 'Начать с ',
|
||||
contactSales: 'Связаться с отделом продаж',
|
||||
talkToSales: 'Поговорить с отделом продаж',
|
||||
modelProviders: 'Поставщики моделей',
|
||||
teamMembers: 'Участники команды',
|
||||
annotationQuota: 'Квота аннотаций',
|
||||
buildApps: 'Создать приложения',
|
||||
vectorSpace: 'Векторное пространство',
|
||||
vectorSpaceBillingTooltip: 'Каждый 1 МБ может хранить около 1,2 миллиона символов векторизованных данных (оценка с использованием Embeddings OpenAI, варьируется в зависимости от модели).',
|
||||
vectorSpaceTooltip: 'Векторное пространство - это система долговременной памяти, необходимая LLM для понимания ваших данных.',
|
||||
documentsUploadQuota: 'Квота загрузки документов',
|
||||
documentProcessingPriority: 'Приоритет обработки документов',
|
||||
documentProcessingPriorityTip: 'Для более высокого приоритета обработки документов, пожалуйста, обновите свой тарифный план.',
|
||||
documentProcessingPriorityUpgrade: 'Обрабатывайте больше данных с большей точностью и на более высоких скоростях.',
|
||||
priority: {
|
||||
'standard': 'Стандартный',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Песочница',
|
||||
description: '200 бесплатных пробных использований GPT',
|
||||
includesTitle: 'Включает:',
|
||||
for: 'Бесплатная пробная версия основных возможностей',
|
||||
},
|
||||
professional: {
|
||||
name: 'Профессиональный',
|
||||
description: 'Для частных лиц и небольших команд, чтобы разблокировать больше возможностей по доступной цене.',
|
||||
includesTitle: 'Все в бесплатном плане, плюс:',
|
||||
for: 'Для независимых разработчиков/малых команд',
|
||||
},
|
||||
team: {
|
||||
name: 'Команда',
|
||||
description: 'Сотрудничайте без ограничений и наслаждайтесь высочайшей производительностью.',
|
||||
includesTitle: 'Все в профессиональном плане, плюс:',
|
||||
for: 'Для команд среднего размера',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'Получите полный набор возможностей и поддержку для крупномасштабных критически важных систем.',
|
||||
includesTitle: 'Все в командном плане, плюс:',
|
||||
features: {
|
||||
7: 'Обновления и обслуживание от Dify официально',
|
||||
4: 'ССО',
|
||||
5: 'Согласованные SLA от Dify Partners',
|
||||
8: 'Профессиональная техническая поддержка',
|
||||
6: 'Современная безопасность и контроль',
|
||||
2: 'Эксклюзивные функции для предприятий',
|
||||
1: 'Коммерческая лицензия',
|
||||
3: 'Множественные рабочие области и управление предприятием',
|
||||
0: 'Решения для масштабируемого развертывания корпоративного уровня',
|
||||
5: 'Согласованные Соглашения об Уровне Услуг от Dify Partners',
|
||||
2: 'Эксклюзивные корпоративные функции',
|
||||
6: 'Расширенная безопасность и контроль',
|
||||
7: 'Обновления и обслуживание от Dify официально',
|
||||
3: 'Несколько рабочих пространств и управление предприятием',
|
||||
0: 'Масштабируемые решения для развертывания корпоративного уровня',
|
||||
1: 'Разрешение на коммерческую лицензию',
|
||||
},
|
||||
price: 'Пользовательский',
|
||||
priceTip: 'Только годовая подписка',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
0: 'Все основные функции выпущены в публичном репозитории',
|
||||
1: 'Единое рабочее пространство',
|
||||
2: 'Соблюдает Лицензию на открытое программное обеспечение Dify',
|
||||
2: 'Соответствует лицензии Dify с открытым исходным кодом',
|
||||
0: 'Все основные функции выпущены в общедоступном репозитории',
|
||||
},
|
||||
name: 'Сообщество',
|
||||
btnText: 'Начните с сообщества',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
3: 'Приоритетная поддержка по электронной почте и чату',
|
||||
2: 'Настройка логотипа и брендинга WebApp',
|
||||
1: 'Единое рабочее пространство',
|
||||
2: 'Настройка логотипа и брендинга веб-приложения',
|
||||
0: 'Самостоятельное управление надежностью различными облачными провайдерами',
|
||||
3: 'Приоритетная поддержка по электронной почте и в чате',
|
||||
0: 'Самостоятельное управление надежностью от различных поставщиков облачных услуг',
|
||||
},
|
||||
description: 'Для средних организаций и команд',
|
||||
includesTitle: 'Всё из Сообщества, плюс:',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Обновите свой тарифный план, чтобы получить больше места.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Обновите свой тарифный план, чтобы',
|
||||
fullTipLine2: 'создавать больше приложений.',
|
||||
fullTip2des: 'Рекомендуется удалить неактивные приложения, чтобы освободить место, или свяжитесь с нами.',
|
||||
fullTip2: 'Достигнут лимит плана',
|
||||
contactUs: 'Свяжитесь с нами',
|
||||
|
||||
@ -23,19 +23,14 @@ const translation = {
|
||||
contractSales: 'Kontaktirajte prodajo',
|
||||
contractOwner: 'Kontaktirajte upravitelja ekipe',
|
||||
startForFree: 'Začnite brezplačno',
|
||||
getStartedWith: 'Začnite z ',
|
||||
contactSales: 'Kontaktirajte prodajo',
|
||||
talkToSales: 'Pogovorite se s prodajo',
|
||||
modelProviders: 'Ponudniki modelov',
|
||||
teamMembers: 'Člani ekipe',
|
||||
annotationQuota: 'Kvote za označevanje',
|
||||
buildApps: 'Gradite aplikacije',
|
||||
vectorSpace: 'Prostor za vektorje',
|
||||
vectorSpaceBillingTooltip: 'Vsak 1 MB lahko shrani približno 1,2 milijona znakov vektoriziranih podatkov (ocenjeno z uporabo OpenAI Embeddings, odvisno od modelov).',
|
||||
vectorSpaceTooltip: 'Prostor za vektorje je dolgoročni pomnilniški sistem, potreben za to, da LLM-ji razumejo vaše podatke.',
|
||||
documentsUploadQuota: 'Kvote za nalaganje dokumentov',
|
||||
documentProcessingPriority: 'Prioriteta obdelave dokumentov',
|
||||
documentProcessingPriorityTip: 'Za višjo prioriteto obdelave dokumentov nadgradite svoj načrt.',
|
||||
documentProcessingPriorityUpgrade: 'Obdelujte več podatkov z večjo natančnostjo in hitrostjo.',
|
||||
priority: {
|
||||
'standard': 'Standard',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Peskovnik',
|
||||
description: '200 brezplačnih poskusov GPT',
|
||||
includesTitle: 'Vključuje:',
|
||||
for: 'Brezplačno preizkušanje osnovnih zmogljivosti',
|
||||
},
|
||||
professional: {
|
||||
name: 'Profesionalni',
|
||||
description: 'Za posameznike in male ekipe, da odklenete več zmogljivosti po ugodni ceni.',
|
||||
includesTitle: 'Vse v brezplačnem načrtu, plus:',
|
||||
for: 'Za neodvisne razvijalce/male ekipe',
|
||||
},
|
||||
team: {
|
||||
name: 'Ekipa',
|
||||
description: 'Sodelujte brez omejitev in uživajte v vrhunski zmogljivosti.',
|
||||
includesTitle: 'Vse v profesionalnem načrtu, plus:',
|
||||
for: 'Za srednje velike ekipe',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'Pridobite vse zmogljivosti in podporo za velike sisteme kritične za misijo.',
|
||||
includesTitle: 'Vse v načrtu Ekipa, plus:',
|
||||
features: {
|
||||
5: 'Pogajali smo se o SLAs s partnerji Dify',
|
||||
4: 'SSO',
|
||||
0: 'Rešitve za razširljivo uvedbo na ravni podjetij',
|
||||
1: 'Avtorizacija za komercialno licenco',
|
||||
0: 'Prilagodljive rešitve za uvajanje na ravni podjetij',
|
||||
2: 'Ekskluzivne funkcije za podjetja',
|
||||
7: 'Posodobitve in vzdrževanje s strani Dify uradno',
|
||||
3: 'Več delovnih prostorov in upravljanje podjetij',
|
||||
7: 'Posodobitve in vzdrževanje s strani Dify Official',
|
||||
8: 'Strokovna tehnična podpora',
|
||||
1: 'Dovoljenje za komercialno licenco',
|
||||
3: 'Več delovnih prostorov in upravljanje podjetja',
|
||||
5: 'Dogovorjene pogodbe o ravni storitev s strani Dify Partners',
|
||||
6: 'Napredna varnost in nadzor',
|
||||
8: 'Profesionalna tehnična podpora',
|
||||
4: 'SSO',
|
||||
},
|
||||
priceTip: 'Letno zaračunavanje samo',
|
||||
price: 'Po meri',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
2: 'Upošteva Dify odprtokodno licenco',
|
||||
0: 'Vse ključne funkcije so bile objavljene v javnem repozitoriju',
|
||||
1: 'Enotno delovno okolje',
|
||||
1: 'En delovni prostor',
|
||||
0: 'Vse osnovne funkcije, izdane v javnem repozitoriju',
|
||||
2: 'Skladen z odprtokodno licenco Dify',
|
||||
},
|
||||
includesTitle: 'Brezplačne funkcije:',
|
||||
price: 'Brezplačno',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
2: 'Prilagoditev logotipa in blagovne znamke spletne aplikacije',
|
||||
1: 'Enotno delovno okolje',
|
||||
0: 'Samoobvladovana zanesljivost različnih ponudnikov oblačnih storitev',
|
||||
3: 'Prednostna e-pošta in podpora za klepet',
|
||||
1: 'En delovni prostor',
|
||||
3: 'Prednostna podpora po e-pošti in klepetu',
|
||||
2: 'Prilagajanje logotipa in blagovne znamke WebApp',
|
||||
0: 'Samostojna zanesljivost različnih ponudnikov storitev v oblaku',
|
||||
},
|
||||
name: 'Premium',
|
||||
priceTip: 'Na podlagi oblaka Marketplace',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Nadgradite svoj načrt za več prostora.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Nadgradite svoj načrt, da',
|
||||
fullTipLine2: 'gradite več aplikacij.',
|
||||
fullTip1des: 'Dosegli ste omejitev za izdelavo aplikacij v tem načrtu.',
|
||||
fullTip1: 'Nadgradite za ustvarjanje več aplikacij',
|
||||
fullTip2: 'Dosežena meja načrta',
|
||||
|
||||
@ -23,19 +23,14 @@ const translation = {
|
||||
contractSales: 'ติดต่อฝ่ายขาย',
|
||||
contractOwner: 'ติดต่อผู้จัดการทีม',
|
||||
startForFree: 'เริ่มฟรี',
|
||||
getStartedWith: 'เริ่มต้นใช้งาน',
|
||||
contactSales: 'ติดต่อฝ่ายขาย',
|
||||
talkToSales: 'พูดคุยกับฝ่ายขาย',
|
||||
modelProviders: 'ผู้ให้บริการโมเดล',
|
||||
teamMembers: 'สมาชิกในทีม',
|
||||
annotationQuota: 'โควต้าคําอธิบายประกอบ',
|
||||
buildApps: 'สร้างแอพ',
|
||||
vectorSpace: 'พื้นที่เวกเตอร์',
|
||||
vectorSpaceBillingTooltip: 'แต่ละ 1MB สามารถจัดเก็บข้อมูลแบบเวกเตอร์ได้ประมาณ 1.2 ล้านอักขระ (โดยประมาณโดยใช้ OpenAI Embeddings แตกต่างกันไปตามรุ่น)',
|
||||
vectorSpaceTooltip: 'Vector Space เป็นระบบหน่วยความจําระยะยาวที่จําเป็นสําหรับ LLM ในการทําความเข้าใจข้อมูลของคุณ',
|
||||
documentsUploadQuota: 'โควต้าการอัปโหลดเอกสาร',
|
||||
documentProcessingPriority: 'ลําดับความสําคัญในการประมวลผลเอกสาร',
|
||||
documentProcessingPriorityTip: 'สําหรับลําดับความสําคัญในการประมวลผลเอกสารที่สูงขึ้น โปรดอัปเกรดแผนของคุณ',
|
||||
documentProcessingPriorityUpgrade: 'ประมวลผลข้อมูลได้มากขึ้นด้วยความแม่นยําที่สูงขึ้นด้วยความเร็วที่เร็วขึ้น',
|
||||
priority: {
|
||||
'standard': 'มาตรฐาน',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'กระบะทราย',
|
||||
description: 'ทดลองใช้ GPT ฟรี 200 ครั้ง',
|
||||
includesTitle: 'มี:',
|
||||
for: 'ทดลองใช้ฟรีของความสามารถหลัก',
|
||||
},
|
||||
professional: {
|
||||
name: 'มืออาชีพ',
|
||||
description: 'สําหรับบุคคลและทีมขนาดเล็กเพื่อปลดล็อกพลังงานมากขึ้นในราคาย่อมเยา',
|
||||
includesTitle: 'ทุกอย่างในแผนฟรี รวมถึง:',
|
||||
for: 'สำหรับนักพัฒนาที่เป็นอิสระ/ทีมขนาดเล็ก',
|
||||
},
|
||||
team: {
|
||||
name: 'ทีม',
|
||||
description: 'ทํางานร่วมกันอย่างไร้ขีดจํากัดและเพลิดเพลินไปกับประสิทธิภาพระดับสูงสุด',
|
||||
includesTitle: 'ทุกอย่างในแผน Professional รวมถึง:',
|
||||
for: 'สำหรับทีมขนาดกลาง',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'รับความสามารถและการสนับสนุนเต็มรูปแบบสําหรับระบบที่สําคัญต่อภารกิจขนาดใหญ่',
|
||||
includesTitle: 'ทุกอย่างในแผนทีม รวมถึง:',
|
||||
features: {
|
||||
8: 'การสนับสนุนทางเทคนิคระดับมืออาชีพ',
|
||||
2: 'คุณสมบัติพิเศษขององค์กร',
|
||||
3: 'หลายพื้นที่ทำงานและการบริหารจัดการองค์กร',
|
||||
4: 'SSO',
|
||||
6: 'ความปลอดภัยและการควบคุมขั้นสูง',
|
||||
5: 'เจรจาข้อตกลงบริการ (SLA) โดย Dify Partners',
|
||||
7: 'การอัปเดตและการบำรุงรักษาโดย Dify อย่างเป็นทางการ',
|
||||
1: 'ใบอนุญาตการใช้เชิงพาณิชย์',
|
||||
0: 'โซลูชันการปรับใช้ที่มีขนาดใหญ่และมีคุณภาพระดับองค์กร',
|
||||
2: 'คุณสมบัติพิเศษสําหรับองค์กร',
|
||||
5: 'SLA ที่เจรจาโดย Dify Partners',
|
||||
1: 'การอนุญาตใบอนุญาตเชิงพาณิชย์',
|
||||
8: 'การสนับสนุนด้านเทคนิคอย่างมืออาชีพ',
|
||||
0: 'โซลูชันการปรับใช้ที่ปรับขนาดได้ระดับองค์กร',
|
||||
7: 'การอัปเดตและบํารุงรักษาโดย Dify อย่างเป็นทางการ',
|
||||
3: 'พื้นที่ทํางานหลายแห่งและการจัดการองค์กร',
|
||||
6: 'การรักษาความปลอดภัยและการควบคุมขั้นสูง',
|
||||
},
|
||||
btnText: 'ติดต่อฝ่ายขาย',
|
||||
price: 'ที่กำหนดเอง',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
2: 'ปฏิบัติตามใบอนุญาตโอเพ่นซอร์สของ Dify',
|
||||
0: 'ฟีเจอร์หลักทั้งหมดถูกปล่อยออกภายใต้ที่เก็บสาธารณะ',
|
||||
1: 'พื้นที่ทำงานเดียว',
|
||||
1: 'พื้นที่ทํางานเดียว',
|
||||
2: 'สอดคล้องกับใบอนุญาตโอเพ่นซอร์ส Dify',
|
||||
0: 'คุณสมบัติหลักทั้งหมดที่เผยแพร่ภายใต้ที่เก็บสาธารณะ',
|
||||
},
|
||||
name: 'ชุมชน',
|
||||
price: 'ฟรี',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
3: 'การสนับสนุนทางอีเมลและแชทที่มีความสำคัญ',
|
||||
1: 'พื้นที่ทำงานเดียว',
|
||||
2: 'การปรับแต่งโลโก้และแบรนดิ้งของเว็บแอป',
|
||||
0: 'การจัดการความน่าเชื่อถือด้วยตนเองโดยผู้ให้บริการคลาวด์ต่าง ๆ',
|
||||
2: 'โลโก้ WebApp และการปรับแต่งแบรนด์',
|
||||
3: 'การสนับสนุนทางอีเมลและแชทลําดับความสําคัญ',
|
||||
1: 'พื้นที่ทํางานเดียว',
|
||||
0: 'ความน่าเชื่อถือที่จัดการด้วยตนเองโดยผู้ให้บริการคลาวด์ต่างๆ',
|
||||
},
|
||||
priceTip: 'อิงตามตลาดคลาวด์',
|
||||
for: 'สำหรับองค์กรและทีมขนาดกลาง',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'อัปเกรดแผนของคุณเพื่อเพิ่มพื้นที่',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'อัปเกรดแผนของคุณเป็น',
|
||||
fullTipLine2: 'สร้างแอปเพิ่มเติม',
|
||||
contactUs: 'ติดต่อเรา',
|
||||
fullTip2: 'ถึงขีดจำกัดของแผนแล้ว',
|
||||
fullTip1: 'อัปเกรดเพื่อสร้างแอปเพิ่มเติม',
|
||||
|
||||
@ -23,19 +23,14 @@ const translation = {
|
||||
contractSales: 'Satışla iletişime geçin',
|
||||
contractOwner: 'Takım yöneticisine başvurun',
|
||||
startForFree: 'Ücretsiz Başla',
|
||||
getStartedWith: 'ile başlayın',
|
||||
contactSales: 'Satışlarla İletişime Geçin',
|
||||
talkToSales: 'Satışlarla Konuşun',
|
||||
modelProviders: 'Model Sağlayıcılar',
|
||||
teamMembers: 'Takım Üyeleri',
|
||||
annotationQuota: 'Ek Açıklama Kotası',
|
||||
buildApps: 'Uygulamalar Oluştur',
|
||||
vectorSpace: 'Vektör Alanı',
|
||||
vectorSpaceBillingTooltip: 'Her 1MB yaklaşık 1.2 milyon karakter vektörize veri depolayabilir (OpenAI Embeddings ile tahmin edilmiştir, modellere göre farklılık gösterebilir).',
|
||||
vectorSpaceTooltip: 'Vektör Alanı, LLM\'lerin verilerinizi anlaması için gerekli uzun süreli hafıza sistemidir.',
|
||||
documentsUploadQuota: 'Doküman Yükleme Kotası',
|
||||
documentProcessingPriority: 'Doküman İşleme Önceliği',
|
||||
documentProcessingPriorityTip: 'Daha yüksek doküman işleme önceliği için planınızı yükseltin.',
|
||||
documentProcessingPriorityUpgrade: 'Daha fazla veriyi daha yüksek doğrulukla ve daha hızlı işleyin.',
|
||||
priority: {
|
||||
'standard': 'Standart',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Sandbox',
|
||||
description: '200 kez GPT ücretsiz deneme',
|
||||
includesTitle: 'İçerdikleri:',
|
||||
for: 'Temel Yeteneklerin Ücretsiz Denemesi',
|
||||
},
|
||||
professional: {
|
||||
name: 'Profesyonel',
|
||||
description: 'Bireyler ve küçük takımlar için daha fazla güç açın.',
|
||||
includesTitle: 'Ücretsiz plandaki her şey, artı:',
|
||||
for: 'Bağımsız Geliştiriciler/Küçük Takımlar için',
|
||||
},
|
||||
team: {
|
||||
name: 'Takım',
|
||||
description: 'Sınırsız işbirliği ve en üst düzey performans.',
|
||||
includesTitle: 'Profesyonel plandaki her şey, artı:',
|
||||
for: 'Orta Boyutlu Takımlar İçin',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'Büyük ölçekli kritik sistemler için tam yetenekler ve destek.',
|
||||
includesTitle: 'Takım plandaki her şey, artı:',
|
||||
features: {
|
||||
3: 'Birden Fazla Çalışma Alanı ve Kurumsal Yönetim',
|
||||
8: 'Profesyonel Teknik Destek',
|
||||
4: 'SSO',
|
||||
2: 'Özel Şirket Özellikleri',
|
||||
1: 'Ticari Lisans Yetkilendirmesi',
|
||||
7: 'Dify Tarafından Resmi Güncellemeler ve Bakım',
|
||||
5: 'Dify Ortakları tarafından müzakere edilen SLA\'lar',
|
||||
6: 'Gelişmiş Güvenlik ve Kontroller',
|
||||
5: 'Dify Partners tarafından müzakere edilen SLA\'lar',
|
||||
4: 'SSO',
|
||||
2: 'Özel Kurumsal Özellikler',
|
||||
0: 'Kurumsal Düzeyde Ölçeklenebilir Dağıtım Çözümleri',
|
||||
7: 'Resmi olarak Dify tarafından Güncellemeler ve Bakım',
|
||||
3: 'Çoklu Çalışma Alanları ve Kurumsal Yönetim',
|
||||
},
|
||||
priceTip: 'Yıllık Faturalama Sadece',
|
||||
for: 'Büyük boyutlu Takımlar için',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
1: 'Tek İş Alanı',
|
||||
0: 'Tüm Temel Özellikler Kamu Deposu Altında Yayınlandı',
|
||||
2: 'Dify Açık Kaynak Lisansına uyar',
|
||||
1: 'Tek Çalışma Alanı',
|
||||
0: 'Genel depo altında yayınlanan tüm temel özellikler',
|
||||
2: 'Dify Açık Kaynak Lisansı ile uyumludur',
|
||||
},
|
||||
price: 'Ücretsiz',
|
||||
includesTitle: 'Ücretsiz Özellikler:',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
1: 'Tek İş Alanı',
|
||||
0: 'Çeşitli Bulut Sağlayıcıları Tarafından Kendiliğinden Yönetilen Güvenilirlik',
|
||||
3: 'Öncelikli Email ve Sohbet Desteği',
|
||||
2: 'Web Uygulaması Logo ve Markalaşma Özelleştirmesi',
|
||||
1: 'Tek Çalışma Alanı',
|
||||
0: 'Çeşitli Bulut Sağlayıcıları Tarafından Kendi Kendini Yöneten Güvenilirlik',
|
||||
2: 'WebApp Logosu ve Marka Özelleştirmesi',
|
||||
3: 'Öncelikli E-posta ve Sohbet Desteği',
|
||||
},
|
||||
name: 'Premium',
|
||||
includesTitle: 'Topluluktan her şey, artı:',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Daha fazla alan için planınızı yükseltin.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Daha fazla uygulama oluşturmak için',
|
||||
fullTipLine2: 'planınızı yükseltin.',
|
||||
contactUs: 'Bizimle iletişime geçin',
|
||||
fullTip2des: 'Kullanımı serbest bırakmak için etkisiz uygulamaların temizlenmesi önerilir veya bizimle iletişime geçin.',
|
||||
fullTip1des: 'Bu planda uygulama oluşturma limitine ulaştınız.',
|
||||
|
||||
@ -23,17 +23,13 @@ const translation = {
|
||||
contractSales: 'Зв\'язатися з відділом продажів',
|
||||
contractOwner: 'Зв\'язатися з керівником команди',
|
||||
startForFree: 'Почніть безкоштовно',
|
||||
getStartedWith: 'Почніть роботу з ',
|
||||
contactSales: 'Зв\'язатися з відділом продажів',
|
||||
talkToSales: 'Поговоріть зі службою продажів',
|
||||
modelProviders: 'Постачальники моделей',
|
||||
teamMembers: 'Члени команди',
|
||||
buildApps: 'Створювати додатки',
|
||||
vectorSpace: 'Векторний простір',
|
||||
vectorSpaceBillingTooltip: 'Кожен 1 МБ може зберігати близько 1,2 мільйона символів векторизованих даних (оцінка з використанням OpenAI Embeddings, відрізняється в залежності від моделей).',
|
||||
vectorSpaceTooltip: 'Векторний простір – це система довгострокової пам\'яті, необхідна LLM для розуміння ваших даних.',
|
||||
documentProcessingPriority: 'Пріоритет обробки документів',
|
||||
documentProcessingPriorityTip: 'Для вищого пріоритету обробки документів оновіть свій план.',
|
||||
documentProcessingPriorityUpgrade: 'Обробляйте більше даних із вищою точністю та на більших швидкостях.',
|
||||
priority: {
|
||||
'standard': 'Стандартний',
|
||||
@ -77,7 +73,6 @@ const translation = {
|
||||
ragAPIRequestTooltip: 'Відноситься до кількості викликів API, що викликають лише можливості обробки бази знань Dify.',
|
||||
receiptInfo: 'Лише власник команди та адміністратор команди можуть підписуватися та переглядати інформацію про виставлення рахунків',
|
||||
annotationQuota: 'Квота анотацій',
|
||||
documentsUploadQuota: 'Квота завантаження документів',
|
||||
teamMember_one: '{{count,number}} член команди',
|
||||
teamWorkspace: '{{count,number}} Командний Простір',
|
||||
apiRateLimit: 'Обмеження швидкості API',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Пісочниця',
|
||||
description: '200 безкоштовних пробних версій GPT',
|
||||
includesTitle: 'Включає в себе:',
|
||||
for: 'Безкоштовна пробна версія основних функцій',
|
||||
},
|
||||
professional: {
|
||||
name: 'Професійний',
|
||||
description: 'Щоб окремі особи та невеликі команди могли отримати більше можливостей за доступною ціною.',
|
||||
includesTitle: 'Все у безкоштовному плані, плюс:',
|
||||
for: 'Для незалежних розробників/малих команд',
|
||||
},
|
||||
team: {
|
||||
name: 'Команда',
|
||||
description: 'Співпрацюйте без обмежень і користуйтеся продуктивністю найвищого рівня.',
|
||||
includesTitle: 'Все, що входить до плану Professional, плюс:',
|
||||
for: 'Для середніх команд',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'Отримайте повні можливості та підтримку для масштабних критично важливих систем.',
|
||||
includesTitle: 'Все, що входить до плану Team, плюс:',
|
||||
features: {
|
||||
5: 'Угоди про рівень обслуговування, узгоджені партнерами Dify',
|
||||
2: 'Ексклюзивні підприємницькі функції',
|
||||
6: 'Розвинена безпека та контроль',
|
||||
4: 'Єдиний вхід',
|
||||
7: 'Оновлення та обслуговування від Dify Official',
|
||||
1: 'Авторизація комерційної ліцензії',
|
||||
8: 'Професійна технічна підтримка',
|
||||
1: 'Комерційна ліцензія на авторизацію',
|
||||
3: 'Кілька робочих просторів та управління підприємством',
|
||||
4: 'ССО',
|
||||
0: 'Рішення для масштабованого розгортання підприємств',
|
||||
7: 'Оновлення та обслуговування від Dify Офіційно',
|
||||
2: 'Ексклюзивні функції підприємства',
|
||||
6: 'Розширені функції безпеки та керування',
|
||||
3: 'Кілька робочих областей і управління підприємством',
|
||||
5: 'Угода про рівень обслуговування за домовленістю від Dify Partners',
|
||||
0: 'Масштабовані рішення для розгортання корпоративного рівня',
|
||||
},
|
||||
btnText: 'Зв\'язатися з відділом продажу',
|
||||
priceTip: 'Тільки річна оплата',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
2: 'Відповідає ліцензії Dify Open Source',
|
||||
1: 'Єдине робоче місце',
|
||||
0: 'Усі основні функції випущені під публічним репозиторієм',
|
||||
2: 'Відповідає ліцензії Dify з відкритим вихідним кодом',
|
||||
0: 'Усі основні функції випущено в загальнодоступному репозиторії',
|
||||
},
|
||||
btnText: 'Розпочніть з громади',
|
||||
includesTitle: 'Безкоштовні можливості:',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
2: 'Логотип веб-додатку та налаштування брендингу',
|
||||
1: 'Єдине робоче місце',
|
||||
3: 'Пріоритетна email та чат підтримка',
|
||||
0: 'Самостійно керовані надійність різних хмарних постачальників',
|
||||
2: 'Налаштування логотипу WebApp та брендингу',
|
||||
3: 'Пріоритетна підтримка електронною поштою та в чаті',
|
||||
0: 'Самокерована надійність різними хмарними провайдерами',
|
||||
},
|
||||
description: 'Для середніх підприємств та команд',
|
||||
btnText: 'Отримайте Преміум у',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Оновіть свій план, щоб отримати більше місця.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Оновіть свій план, щоб',
|
||||
fullTipLine2: 'створити більше програм.',
|
||||
fullTip1des: 'Ви досягли межі створення додатків за цим планом.',
|
||||
fullTip2: 'Досягнуто ліміту плану',
|
||||
fullTip1: 'Оновіть, щоб створити більше додатків',
|
||||
|
||||
@ -23,18 +23,13 @@ const translation = {
|
||||
contractSales: 'Liên hệ bộ phận bán hàng',
|
||||
contractOwner: 'Liên hệ quản lý nhóm',
|
||||
startForFree: 'Bắt đầu miễn phí',
|
||||
getStartedWith: 'Bắt đầu với ',
|
||||
contactSales: 'Liên hệ Bán hàng',
|
||||
talkToSales: 'Nói chuyện với Bộ phận Bán hàng',
|
||||
modelProviders: 'Nhà cung cấp Mô hình',
|
||||
teamMembers: 'Thành viên Nhóm',
|
||||
buildApps: 'Xây dựng Ứng dụng',
|
||||
vectorSpace: 'Không gian Vector',
|
||||
vectorSpaceBillingTooltip: 'Mỗi 1MB có thể lưu trữ khoảng 1.2 triệu ký tự dữ liệu vector hóa (ước tính sử dụng OpenAI Embeddings, thay đổi tùy theo các mô hình).',
|
||||
vectorSpaceTooltip: 'Không gian Vector là hệ thống bộ nhớ dài hạn cần thiết cho LLMs để hiểu dữ liệu của bạn.',
|
||||
documentsUploadQuota: 'Hạn mức Tải lên Tài liệu',
|
||||
documentProcessingPriority: 'Ưu tiên Xử lý Tài liệu',
|
||||
documentProcessingPriorityTip: 'Để có ưu tiên xử lý tài liệu cao hơn, vui lòng nâng cấp kế hoạch của bạn.',
|
||||
documentProcessingPriorityUpgrade: 'Xử lý nhiều dữ liệu với độ chính xác cao và tốc độ nhanh hơn.',
|
||||
priority: {
|
||||
'standard': 'Tiêu chuẩn',
|
||||
@ -103,19 +98,16 @@ const translation = {
|
||||
sandbox: {
|
||||
name: 'Hộp Cát',
|
||||
description: 'Thử nghiệm miễn phí 200 lần GPT',
|
||||
includesTitle: 'Bao gồm:',
|
||||
for: 'Dùng thử miễn phí các tính năng cốt lõi',
|
||||
},
|
||||
professional: {
|
||||
name: 'Chuyên nghiệp',
|
||||
description: 'Dành cho cá nhân và các nhóm nhỏ để mở khóa nhiều sức mạnh với giá cả phải chăng.',
|
||||
includesTitle: 'Tất cả trong kế hoạch miễn phí, cộng thêm:',
|
||||
for: 'Dành cho các nhà phát triển độc lập/nhóm nhỏ',
|
||||
},
|
||||
team: {
|
||||
name: 'Nhóm',
|
||||
description: 'Hợp tác mà không giới hạn và tận hưởng hiệu suất hạng nhất.',
|
||||
includesTitle: 'Tất cả trong kế hoạch Chuyên nghiệp, cộng thêm:',
|
||||
for: 'Dành cho các đội nhóm vừa',
|
||||
},
|
||||
enterprise: {
|
||||
@ -123,15 +115,15 @@ const translation = {
|
||||
description: 'Nhận toàn bộ khả năng và hỗ trợ cho các hệ thống quan trọng cho nhiệm vụ quy mô lớn.',
|
||||
includesTitle: 'Tất cả trong kế hoạch Nhóm, cộng thêm:',
|
||||
features: {
|
||||
2: 'Tính năng Doanh nghiệp Độc quyền',
|
||||
1: 'Giấy phép kinh doanh',
|
||||
8: 'Hỗ trợ kỹ thuật chuyên nghiệp',
|
||||
7: 'Cập nhật và Bảo trì bởi Dify Chính thức',
|
||||
5: 'Thỏa thuận SLA bởi các đối tác Dify',
|
||||
6: 'An ninh nâng cao và kiểm soát',
|
||||
3: 'Nhiều không gian làm việc & Quản lý doanh nghiệp',
|
||||
0: 'Giải pháp triển khai mở rộng quy mô cấp doanh nghiệp',
|
||||
2: 'Các tính năng dành riêng cho doanh nghiệp',
|
||||
3: 'Nhiều không gian làm việc & quản lý doanh nghiệp',
|
||||
7: 'Cập nhật và bảo trì bởi Dify chính thức',
|
||||
4: 'SSO',
|
||||
8: 'Hỗ trợ kỹ thuật chuyên nghiệp',
|
||||
5: 'SLA được đàm phán bởi Dify Partners',
|
||||
1: 'Ủy quyền giấy phép thương mại',
|
||||
6: 'Bảo mật & Kiểm soát nâng cao',
|
||||
0: 'Giải pháp triển khai có thể mở rộng cấp doanh nghiệp',
|
||||
},
|
||||
price: 'Tùy chỉnh',
|
||||
for: 'Dành cho các đội lớn',
|
||||
@ -140,9 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
2: 'Tuân thủ Giấy phép Mã nguồn Mở Dify',
|
||||
0: 'Tất cả các tính năng cốt lõi được phát hành dưới Kho lưu trữ công khai',
|
||||
1: 'Không gian làm việc đơn',
|
||||
0: 'Tất cả các tính năng cốt lõi được phát hành trong kho lưu trữ công cộng',
|
||||
2: 'Tuân thủ Giấy phép nguồn mở Dify',
|
||||
},
|
||||
description: 'Dành cho người dùng cá nhân, nhóm nhỏ hoặc các dự án phi thương mại',
|
||||
name: 'Cộng đồng',
|
||||
@ -153,10 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
3: 'Hỗ trợ qua Email & Chat Ưu tiên',
|
||||
2: 'Tùy chỉnh Logo & Thương hiệu Ứng dụng Web',
|
||||
1: 'Không gian làm việc đơn',
|
||||
0: 'Độ tin cậy tự quản lý bởi các nhà cung cấp đám mây khác nhau',
|
||||
2: 'Logo WebApp & Tùy chỉnh thương hiệu',
|
||||
3: 'Hỗ trợ email & trò chuyện ưu tiên',
|
||||
0: 'Độ tin cậy tự quản lý của các nhà cung cấp đám mây khác nhau',
|
||||
},
|
||||
comingSoon: 'Hỗ trợ Microsoft Azure & Google Cloud Sẽ Đến Sớm',
|
||||
priceTip: 'Dựa trên Thị trường Đám mây',
|
||||
@ -173,8 +165,6 @@ const translation = {
|
||||
fullSolution: 'Nâng cấp kế hoạch của bạn để có thêm không gian.',
|
||||
},
|
||||
apps: {
|
||||
fullTipLine1: 'Nâng cấp kế hoạch của bạn để',
|
||||
fullTipLine2: 'xây dựng thêm ứng dụng.',
|
||||
contactUs: 'Liên hệ với chúng tôi',
|
||||
fullTip2: 'Đã đạt giới hạn kế hoạch',
|
||||
fullTip1des: 'Bạn đã đạt đến giới hạn xây dựng ứng dụng trên kế hoạch này.',
|
||||
|
||||
@ -115,6 +115,15 @@ const translation = {
|
||||
description: '獲得大規模關鍵任務系統的完整功能和支援。',
|
||||
includesTitle: 'Team 計劃中的一切,加上:',
|
||||
features: {
|
||||
8: '專業技術支持',
|
||||
3: '多個工作區和企業管理',
|
||||
0: '企業級可擴展部署解決方案',
|
||||
1: '商業許可證授權',
|
||||
7: 'Dify 官方更新和維護',
|
||||
6: '進階安全與控制',
|
||||
4: '單一登入',
|
||||
5: 'Dify 合作夥伴協商的 SLA',
|
||||
2: '獨家企業功能',
|
||||
},
|
||||
price: '自訂',
|
||||
btnText: '聯繫銷售',
|
||||
@ -123,6 +132,9 @@ const translation = {
|
||||
},
|
||||
community: {
|
||||
features: {
|
||||
0: '所有核心功能在公共存儲庫下發布',
|
||||
1: '單一工作區',
|
||||
2: '符合 Dify 開源許可證',
|
||||
},
|
||||
includesTitle: '免費功能:',
|
||||
btnText: '開始使用社區',
|
||||
@ -133,6 +145,10 @@ const translation = {
|
||||
},
|
||||
premium: {
|
||||
features: {
|
||||
3: '優先電子郵件和聊天支持',
|
||||
2: 'WebApp 標誌和品牌定制',
|
||||
0: '各種雲端供應商的自我管理可靠性',
|
||||
1: '單一工作區',
|
||||
},
|
||||
for: '適用於中型組織和團隊',
|
||||
comingSoon: '微軟 Azure 與 Google Cloud 支持即將推出',
|
||||
|
||||
@ -2,6 +2,7 @@
|
||||
"name": "dify-web",
|
||||
"version": "1.7.2",
|
||||
"private": true,
|
||||
"packageManager": "pnpm@10.14.0",
|
||||
"engines": {
|
||||
"node": ">=v22.11.0"
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user