mirror of
https://github.com/langgenius/dify.git
synced 2024-11-16 11:42:29 +08:00
Compare commits
4 Commits
886254ab65
...
1fde2c7d0a
Author | SHA1 | Date | |
---|---|---|---|
|
1fde2c7d0a | ||
|
d05fee1182 | ||
|
1f87676d52 | ||
|
c2ce2f88c7 |
|
@ -9,6 +9,7 @@ from controllers.console.app.wraps import get_app_model
|
|||
from controllers.console.wraps import (
|
||||
account_initialization_required,
|
||||
cloud_edition_billing_resource_check,
|
||||
enterprise_license_required,
|
||||
setup_required,
|
||||
)
|
||||
from core.ops.ops_trace_manager import OpsTraceManager
|
||||
|
@ -28,6 +29,7 @@ class AppListApi(Resource):
|
|||
@setup_required
|
||||
@login_required
|
||||
@account_initialization_required
|
||||
@enterprise_license_required
|
||||
def get(self):
|
||||
"""Get app list"""
|
||||
|
||||
|
@ -149,6 +151,7 @@ class AppApi(Resource):
|
|||
@setup_required
|
||||
@login_required
|
||||
@account_initialization_required
|
||||
@enterprise_license_required
|
||||
@get_app_model
|
||||
@marshal_with(app_detail_fields_with_site)
|
||||
def get(self, app_model):
|
||||
|
|
|
@ -10,7 +10,7 @@ from controllers.console import api
|
|||
from controllers.console.apikey import api_key_fields, api_key_list
|
||||
from controllers.console.app.error import ProviderNotInitializeError
|
||||
from controllers.console.datasets.error import DatasetInUseError, DatasetNameDuplicateError, IndexingEstimateError
|
||||
from controllers.console.wraps import account_initialization_required, setup_required
|
||||
from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
|
||||
from core.errors.error import LLMBadRequestError, ProviderTokenNotInitError
|
||||
from core.indexing_runner import IndexingRunner
|
||||
from core.model_runtime.entities.model_entities import ModelType
|
||||
|
@ -44,6 +44,7 @@ class DatasetListApi(Resource):
|
|||
@setup_required
|
||||
@login_required
|
||||
@account_initialization_required
|
||||
@enterprise_license_required
|
||||
def get(self):
|
||||
page = request.args.get("page", default=1, type=int)
|
||||
limit = request.args.get("limit", default=20, type=int)
|
||||
|
|
|
@ -86,3 +86,9 @@ class NoFileUploadedError(BaseHTTPException):
|
|||
error_code = "no_file_uploaded"
|
||||
description = "Please upload your file."
|
||||
code = 400
|
||||
|
||||
|
||||
class UnauthorizedAndForceLogout(BaseHTTPException):
|
||||
error_code = "unauthorized_and_force_logout"
|
||||
description = "Unauthorized and force logout."
|
||||
code = 401
|
||||
|
|
|
@ -14,7 +14,7 @@ from controllers.console.workspace.error import (
|
|||
InvalidInvitationCodeError,
|
||||
RepeatPasswordNotMatchError,
|
||||
)
|
||||
from controllers.console.wraps import account_initialization_required, setup_required
|
||||
from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
|
||||
from extensions.ext_database import db
|
||||
from fields.member_fields import account_fields
|
||||
from libs.helper import TimestampField, timezone
|
||||
|
@ -79,6 +79,7 @@ class AccountProfileApi(Resource):
|
|||
@login_required
|
||||
@account_initialization_required
|
||||
@marshal_with(account_fields)
|
||||
@enterprise_license_required
|
||||
def get(self):
|
||||
return current_user
|
||||
|
||||
|
|
|
@ -7,7 +7,7 @@ from werkzeug.exceptions import Forbidden
|
|||
|
||||
from configs import dify_config
|
||||
from controllers.console import api
|
||||
from controllers.console.wraps import account_initialization_required, setup_required
|
||||
from controllers.console.wraps import account_initialization_required, enterprise_license_required, setup_required
|
||||
from core.model_runtime.utils.encoders import jsonable_encoder
|
||||
from libs.helper import alphanumeric, uuid_value
|
||||
from libs.login import login_required
|
||||
|
@ -549,6 +549,7 @@ class ToolLabelsApi(Resource):
|
|||
@setup_required
|
||||
@login_required
|
||||
@account_initialization_required
|
||||
@enterprise_license_required
|
||||
def get(self):
|
||||
return jsonable_encoder(ToolLabelsService.list_tool_labels())
|
||||
|
||||
|
|
|
@ -8,10 +8,10 @@ from flask_login import current_user
|
|||
from configs import dify_config
|
||||
from controllers.console.workspace.error import AccountNotInitializedError
|
||||
from models.model import DifySetup
|
||||
from services.feature_service import FeatureService
|
||||
from services.feature_service import FeatureService, LicenseStatus
|
||||
from services.operation_service import OperationService
|
||||
|
||||
from .error import NotInitValidateError, NotSetupError
|
||||
from .error import NotInitValidateError, NotSetupError, UnauthorizedAndForceLogout
|
||||
|
||||
|
||||
def account_initialization_required(view):
|
||||
|
@ -142,3 +142,15 @@ def setup_required(view):
|
|||
return view(*args, **kwargs)
|
||||
|
||||
return decorated
|
||||
|
||||
|
||||
def enterprise_license_required(view):
|
||||
@wraps(view)
|
||||
def decorated(*args, **kwargs):
|
||||
settings = FeatureService.get_system_features()
|
||||
if settings.license.status in [LicenseStatus.INACTIVE, LicenseStatus.EXPIRED, LicenseStatus.LOST]:
|
||||
raise UnauthorizedAndForceLogout("Your license is invalid. Please contact your administrator.")
|
||||
|
||||
return view(*args, **kwargs)
|
||||
|
||||
return decorated
|
||||
|
|
|
@ -1,3 +1,5 @@
|
|||
from enum import Enum
|
||||
|
||||
from pydantic import BaseModel, ConfigDict
|
||||
|
||||
from configs import dify_config
|
||||
|
@ -20,6 +22,20 @@ class LimitationModel(BaseModel):
|
|||
limit: int = 0
|
||||
|
||||
|
||||
class LicenseStatus(str, Enum):
|
||||
NONE = "none"
|
||||
INACTIVE = "inactive"
|
||||
ACTIVE = "active"
|
||||
EXPIRING = "expiring"
|
||||
EXPIRED = "expired"
|
||||
LOST = "lost"
|
||||
|
||||
|
||||
class LicenseModel(BaseModel):
|
||||
status: LicenseStatus = LicenseStatus.NONE
|
||||
expired_at: str = ""
|
||||
|
||||
|
||||
class FeatureModel(BaseModel):
|
||||
billing: BillingModel = BillingModel()
|
||||
members: LimitationModel = LimitationModel(size=0, limit=1)
|
||||
|
@ -47,6 +63,7 @@ class SystemFeatureModel(BaseModel):
|
|||
enable_social_oauth_login: bool = False
|
||||
is_allow_register: bool = False
|
||||
is_allow_create_workspace: bool = False
|
||||
license: LicenseModel = LicenseModel()
|
||||
|
||||
|
||||
class FeatureService:
|
||||
|
@ -131,17 +148,31 @@ class FeatureService:
|
|||
|
||||
if "sso_enforced_for_signin" in enterprise_info:
|
||||
features.sso_enforced_for_signin = enterprise_info["sso_enforced_for_signin"]
|
||||
|
||||
if "sso_enforced_for_signin_protocol" in enterprise_info:
|
||||
features.sso_enforced_for_signin_protocol = enterprise_info["sso_enforced_for_signin_protocol"]
|
||||
|
||||
if "sso_enforced_for_web" in enterprise_info:
|
||||
features.sso_enforced_for_web = enterprise_info["sso_enforced_for_web"]
|
||||
|
||||
if "sso_enforced_for_web_protocol" in enterprise_info:
|
||||
features.sso_enforced_for_web_protocol = enterprise_info["sso_enforced_for_web_protocol"]
|
||||
|
||||
if "enable_email_code_login" in enterprise_info:
|
||||
features.enable_email_code_login = enterprise_info["enable_email_code_login"]
|
||||
|
||||
if "enable_email_password_login" in enterprise_info:
|
||||
features.enable_email_password_login = enterprise_info["enable_email_password_login"]
|
||||
|
||||
if "is_allow_register" in enterprise_info:
|
||||
features.is_allow_register = enterprise_info["is_allow_register"]
|
||||
|
||||
if "is_allow_create_workspace" in enterprise_info:
|
||||
features.is_allow_create_workspace = enterprise_info["is_allow_create_workspace"]
|
||||
|
||||
if "license" in enterprise_info:
|
||||
if "status" in enterprise_info["license"]:
|
||||
features.license.status = enterprise_info["license"]["status"]
|
||||
|
||||
if "expired_at" in enterprise_info["license"]:
|
||||
features.license.expired_at = enterprise_info["license"]["expired_at"]
|
||||
|
|
|
@ -12,6 +12,7 @@ import EnvNav from './env-nav'
|
|||
import ExploreNav from './explore-nav'
|
||||
import ToolsNav from './tools-nav'
|
||||
import GithubStar from './github-star'
|
||||
import LicenseNav from './license-env'
|
||||
import { WorkspaceProvider } from '@/context/workspace-context'
|
||||
import { useAppContext } from '@/context/app-context'
|
||||
import LogoSite from '@/app/components/base/logo/logo-site'
|
||||
|
@ -79,6 +80,7 @@ const Header = () => {
|
|||
</div>
|
||||
)}
|
||||
<div className='flex items-center flex-shrink-0'>
|
||||
<LicenseNav />
|
||||
<EnvNav />
|
||||
{enableBilling && (
|
||||
<div className='mr-3 select-none'>
|
||||
|
|
29
web/app/components/header/license-env/index.tsx
Normal file
29
web/app/components/header/license-env/index.tsx
Normal file
|
@ -0,0 +1,29 @@
|
|||
'use client'
|
||||
|
||||
import AppContext from '@/context/app-context'
|
||||
import { LicenseStatus } from '@/types/feature'
|
||||
import { useTranslation } from 'react-i18next'
|
||||
import { useContextSelector } from 'use-context-selector'
|
||||
import dayjs from 'dayjs'
|
||||
|
||||
const LicenseNav = () => {
|
||||
const { t } = useTranslation()
|
||||
const systemFeatures = useContextSelector(AppContext, s => s.systemFeatures)
|
||||
|
||||
if (systemFeatures.license?.status === LicenseStatus.EXPIRING) {
|
||||
const expiredAt = systemFeatures.license?.expired_at
|
||||
const count = dayjs(expiredAt).diff(dayjs(), 'days')
|
||||
return <div className='px-2 py-1 mr-4 rounded-full bg-util-colors-orange-orange-50 border-util-colors-orange-orange-100 system-xs-medium text-util-colors-orange-orange-600'>
|
||||
{count <= 1 && <span>{t('common.license.expiring', { count })}</span>}
|
||||
{count > 1 && <span>{t('common.license.expiring_plural', { count })}</span>}
|
||||
</div>
|
||||
}
|
||||
if (systemFeatures.license.status === LicenseStatus.ACTIVE) {
|
||||
return <div className='px-2 py-1 mr-4 rounded-md bg-util-colors-indigo-indigo-50 border-util-colors-indigo-indigo-100 system-xs-medium text-util-colors-indigo-indigo-600'>
|
||||
Enterprise
|
||||
</div>
|
||||
}
|
||||
return null
|
||||
}
|
||||
|
||||
export default LicenseNav
|
|
@ -2,7 +2,7 @@ import React, { useCallback, useEffect, useState } from 'react'
|
|||
import { useTranslation } from 'react-i18next'
|
||||
import Link from 'next/link'
|
||||
import { useRouter, useSearchParams } from 'next/navigation'
|
||||
import { RiDoorLockLine } from '@remixicon/react'
|
||||
import { RiContractLine, RiDoorLockLine, RiErrorWarningFill } from '@remixicon/react'
|
||||
import Loading from '../components/base/loading'
|
||||
import MailAndCodeAuth from './components/mail-and-code-auth'
|
||||
import MailAndPasswordAuth from './components/mail-and-password-auth'
|
||||
|
@ -10,7 +10,7 @@ import SocialAuth from './components/social-auth'
|
|||
import SSOAuth from './components/sso-auth'
|
||||
import cn from '@/utils/classnames'
|
||||
import { getSystemFeatures, invitationCheck } from '@/service/common'
|
||||
import { defaultSystemFeatures } from '@/types/feature'
|
||||
import { LicenseStatus, defaultSystemFeatures } from '@/types/feature'
|
||||
import Toast from '@/app/components/base/toast'
|
||||
import { IS_CE_EDITION } from '@/config'
|
||||
|
||||
|
@ -83,6 +83,48 @@ const NormalForm = () => {
|
|||
<Loading type='area' />
|
||||
</div>
|
||||
}
|
||||
if (systemFeatures.license?.status === LicenseStatus.LOST) {
|
||||
return <div className='w-full mx-auto mt-8'>
|
||||
<div className='bg-white'>
|
||||
<div className="p-4 rounded-lg bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2">
|
||||
<div className='flex items-center justify-center w-10 h-10 rounded-xl bg-components-card-bg shadow shadows-shadow-lg mb-2 relative'>
|
||||
<RiContractLine className='w-5 h-5' />
|
||||
<RiErrorWarningFill className='absolute w-4 h-4 text-text-warning-secondary -top-1 -right-1' />
|
||||
</div>
|
||||
<p className='system-sm-medium text-text-primary'>{t('login.licenseLost')}</p>
|
||||
<p className='system-xs-regular text-text-tertiary mt-1'>{t('login.licenseLostTip')}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
if (systemFeatures.license?.status === LicenseStatus.EXPIRED) {
|
||||
return <div className='w-full mx-auto mt-8'>
|
||||
<div className='bg-white'>
|
||||
<div className="p-4 rounded-lg bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2">
|
||||
<div className='flex items-center justify-center w-10 h-10 rounded-xl bg-components-card-bg shadow shadows-shadow-lg mb-2 relative'>
|
||||
<RiContractLine className='w-5 h-5' />
|
||||
<RiErrorWarningFill className='absolute w-4 h-4 text-text-warning-secondary -top-1 -right-1' />
|
||||
</div>
|
||||
<p className='system-sm-medium text-text-primary'>{t('login.licenseExpired')}</p>
|
||||
<p className='system-xs-regular text-text-tertiary mt-1'>{t('login.licenseExpiredTip')}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
if (systemFeatures.license?.status === LicenseStatus.INACTIVE) {
|
||||
return <div className='w-full mx-auto mt-8'>
|
||||
<div className='bg-white'>
|
||||
<div className="p-4 rounded-lg bg-gradient-to-r from-workflow-workflow-progress-bg-1 to-workflow-workflow-progress-bg-2">
|
||||
<div className='flex items-center justify-center w-10 h-10 rounded-xl bg-components-card-bg shadow shadows-shadow-lg mb-2 relative'>
|
||||
<RiContractLine className='w-5 h-5' />
|
||||
<RiErrorWarningFill className='absolute w-4 h-4 text-text-warning-secondary -top-1 -right-1' />
|
||||
</div>
|
||||
<p className='system-sm-medium text-text-primary'>{t('login.licenseInactive')}</p>
|
||||
<p className='system-xs-regular text-text-tertiary mt-1'>{t('login.licenseInactiveTip')}</p>
|
||||
</div>
|
||||
</div>
|
||||
</div>
|
||||
}
|
||||
|
||||
return (
|
||||
<>
|
||||
|
|
|
@ -144,7 +144,7 @@ export const AppContextProvider: FC<AppContextProviderProps> = ({ children }) =>
|
|||
theme,
|
||||
setTheme: handleSetTheme,
|
||||
apps: appList.data,
|
||||
systemFeatures,
|
||||
systemFeatures: { ...defaultSystemFeatures, ...systemFeatures },
|
||||
mutateApps,
|
||||
userProfile,
|
||||
mutateUserProfile,
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
uploadFromComputerReadError: 'Lesen der Datei fehlgeschlagen, bitte versuchen Sie es erneut.',
|
||||
fileExtensionNotSupport: 'Dateiendung nicht bedient',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Läuft an einem Tag ab',
|
||||
expiring_plural: 'Läuft in {{count}} Tagen ab',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
noLoginMethodTip: 'Wenden Sie sich an den Systemadministrator, um eine Authentifizierungsmethode hinzuzufügen.',
|
||||
usePassword: 'Passwort verwenden',
|
||||
noLoginMethod: 'Authentifizierungsmethode nicht konfiguriert',
|
||||
licenseExpired: 'Lizenz abgelaufen',
|
||||
licenseLostTip: 'Fehler beim Verbinden des Dify-Lizenzservers. Wenden Sie sich an Ihren Administrator, um Dify weiterhin zu verwenden.',
|
||||
licenseInactive: 'Lizenz inaktiv',
|
||||
licenseInactiveTip: 'Die Dify Enterprise-Lizenz für Ihren Arbeitsbereich ist inaktiv. Wenden Sie sich an Ihren Administrator, um Dify weiterhin zu verwenden.',
|
||||
licenseExpiredTip: 'Die Dify Enterprise-Lizenz für Ihren Arbeitsbereich ist abgelaufen. Wenden Sie sich an Ihren Administrator, um Dify weiterhin zu verwenden.',
|
||||
licenseLost: 'Lizenz verloren',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'Art',
|
||||
binaryFileVariable: 'Variable der Binärdatei',
|
||||
extractListPlaceholder: 'Geben Sie den Index des Listeneintrags ein, geben Sie \'/\' ein, fügen Sie die Variable ein',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Eingabevariablen',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
filterConditionKey: 'Bedingungsschlüssel filtern',
|
||||
filterCondition: 'Filter-Bedingung',
|
||||
selectVariableKeyPlaceholder: 'Untervariablenschlüssel auswählen',
|
||||
extractsCondition: 'Extrahieren des N-Elements',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
created: 'Tag created successfully',
|
||||
failed: 'Tag creation failed',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Expiring in one day',
|
||||
expiring_plural: 'Expiring in {{count}} days',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -98,6 +98,12 @@ const translation = {
|
|||
back: 'Back',
|
||||
noLoginMethod: 'Authentication method not configured',
|
||||
noLoginMethodTip: 'Please contact the system admin to add an authentication method.',
|
||||
licenseExpired: 'License Expired',
|
||||
licenseExpiredTip: 'The Dify Enterprise license for your workspace has expired. Please contact your administrator to continue using Dify.',
|
||||
licenseLost: 'License Lost',
|
||||
licenseLostTip: 'Failed to connect Dify license server. Please contact your administrator to continue using Dify.',
|
||||
licenseInactive: 'License Inactive',
|
||||
licenseInactiveTip: 'The Dify Enterprise license for your workspace is inactive. Please contact your administrator to continue using Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
pasteFileLinkInputPlaceholder: 'Introduzca la URL...',
|
||||
uploadFromComputerLimit: 'El archivo de carga no puede exceder {{size}}',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Caduca en un día',
|
||||
expiring_plural: 'Caducando en {{count}} días',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
noLoginMethod: 'Método de autenticación no configurado',
|
||||
setYourAccount: 'Configura tu cuenta',
|
||||
noLoginMethodTip: 'Póngase en contacto con el administrador del sistema para agregar un método de autenticación.',
|
||||
licenseInactive: 'Licencia inactiva',
|
||||
licenseInactiveTip: 'La licencia de Dify Enterprise para su espacio de trabajo está inactiva. Póngase en contacto con su administrador para seguir utilizando Dify.',
|
||||
licenseExpired: 'Licencia caducada',
|
||||
licenseLost: 'Licencia perdida',
|
||||
licenseExpiredTip: 'La licencia de Dify Enterprise para su espacio de trabajo ha caducado. Póngase en contacto con su administrador para seguir utilizando Dify.',
|
||||
licenseLostTip: 'No se pudo conectar el servidor de licencias de Dife. Póngase en contacto con su administrador para seguir utilizando Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'Tipo',
|
||||
binaryFileVariable: 'Variable de archivo binario',
|
||||
extractListPlaceholder: 'Introduzca el índice de elementos de la lista, escriba \'/\' insertar variable',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Variables de entrada',
|
||||
|
@ -621,6 +622,7 @@ const translation = {
|
|||
filterConditionComparisonOperator: 'Operador de comparación de condiciones de filtro',
|
||||
asc: 'ASC',
|
||||
selectVariableKeyPlaceholder: 'Seleccione la clave de subvariable',
|
||||
extractsCondition: 'Extraiga el elemento N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
pasteFileLink: 'پیوند فایل را جایگذاری کنید',
|
||||
uploadFromComputerLimit: 'آپلود فایل نمی تواند از {{size}} تجاوز کند',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: 'انقضا در {{count}} روز',
|
||||
expiring: 'انقضا در یک روز',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
noLoginMethod: 'روش احراز هویت پیکربندی نشده است',
|
||||
noLoginMethodTip: 'لطفا برای افزودن روش احراز هویت با مدیر سیستم تماس بگیرید.',
|
||||
resetPasswordDesc: 'ایمیلی را که برای ثبت نام در Dify استفاده کرده اید تایپ کنید و ما یک ایمیل بازنشانی رمز عبور برای شما ارسال خواهیم کرد.',
|
||||
licenseInactive: 'مجوز غیر فعال',
|
||||
licenseLost: 'مجوز گم شده است',
|
||||
licenseExpired: 'مجوز منقضی شده است',
|
||||
licenseExpiredTip: 'مجوز Dify Enterprise برای فضای کاری شما منقضی شده است. لطفا برای ادامه استفاده از Dify با سرپرست خود تماس بگیرید.',
|
||||
licenseInactiveTip: 'مجوز Dify Enterprise برای فضای کاری شما غیرفعال است. لطفا برای ادامه استفاده از Dify با سرپرست خود تماس بگیرید.',
|
||||
licenseLostTip: 'اتصال سرور مجوز Dify انجام نشد. لطفا برای ادامه استفاده از Dify با سرپرست خود تماس بگیرید.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
binaryFileVariable: 'متغیر فایل باینری',
|
||||
type: 'نوع',
|
||||
extractListPlaceholder: 'فهرست آیتم لیست را وارد کنید، متغیر درج \'/\' را تایپ کنید',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'متغیرهای ورودی',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
filterConditionComparisonValue: 'مقدار شرایط فیلتر',
|
||||
selectVariableKeyPlaceholder: 'کلید متغیر فرعی را انتخاب کنید',
|
||||
asc: 'صعودی',
|
||||
extractsCondition: 'مورد N را استخراج کنید',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
pasteFileLinkInvalid: 'Lien de fichier non valide',
|
||||
uploadFromComputerLimit: 'Le fichier de téléchargement ne peut pas dépasser {{size}}',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Expirant dans un jour',
|
||||
expiring_plural: 'Expirant dans {{count}} jours',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
noLoginMethodTip: 'Veuillez contacter l’administrateur système pour ajouter une méthode d’authentification.',
|
||||
resetPasswordDesc: 'Tapez l’adresse e-mail que vous avez utilisée pour vous inscrire sur Dify et nous vous enverrons un e-mail de réinitialisation de mot de passe.',
|
||||
usePassword: 'Utiliser le mot de passe',
|
||||
licenseInactiveTip: 'La licence Dify Enterprise de votre espace de travail est inactive. Veuillez contacter votre administrateur pour continuer à utiliser Dify.',
|
||||
licenseLostTip: 'Échec de la connexion au serveur de licences Dify. Veuillez contacter votre administrateur pour continuer à utiliser Dify.',
|
||||
licenseExpired: 'Licence expirée',
|
||||
licenseLost: 'Licence perdue',
|
||||
licenseExpiredTip: 'La licence Dify Enterprise de votre espace de travail a expiré. Veuillez contacter votre administrateur pour continuer à utiliser Dify.',
|
||||
licenseInactive: 'Licence inactive',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
binaryFileVariable: 'Variable de fichier binaire',
|
||||
type: 'Type',
|
||||
extractListPlaceholder: 'Entrez l’index de l’élément de liste, tapez \'/\' insérer la variable',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Variables de saisie',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
limit: 'Haut N',
|
||||
orderBy: 'Trier par',
|
||||
filterConditionKey: 'Clé de condition de filtre',
|
||||
extractsCondition: 'Extraire l’élément N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -613,6 +613,10 @@ const translation = {
|
|||
fileExtensionNotSupport: 'फ़ाइल एक्सटेंशन समर्थित नहीं है',
|
||||
uploadFromComputer: 'स्थानीय अपलोड',
|
||||
},
|
||||
license: {
|
||||
expiring: 'एक दिन में समाप्त हो रहा है',
|
||||
expiring_plural: '{{गिनती}} दिनों में समाप्त हो रहा है',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -104,6 +104,12 @@ const translation = {
|
|||
resetPasswordDesc: 'वह ईमेल टाइप करें जिसका उपयोग आपने Dify पर साइन अप करने के लिए किया था और हम आपको एक पासवर्ड रीसेट ईमेल भेजेंगे।',
|
||||
withSSO: 'एसएसओ के साथ जारी रखें',
|
||||
back: 'पीछे',
|
||||
licenseInactive: 'लाइसेंस निष्क्रिय',
|
||||
licenseExpired: 'लाइसेंस की समय सीमा समाप्त हो गई',
|
||||
licenseLost: 'लाइसेंस खो गया',
|
||||
licenseLostTip: 'Dify लायसेंस सर्वर से कनेक्ट करने में विफल. Dify का उपयोग जारी रखने के लिए कृपया अपने व्यवस्थापक से संपर्क करें.',
|
||||
licenseInactiveTip: 'आपके कार्यस्थल के लिए डिफाई एंटरप्राइज लाइसेंस निष्क्रिय है। कृपया डिफाई का उपयोग जारी रखने के लिए अपने प्रशासक से संपर्क करें।',
|
||||
licenseExpiredTip: 'आपके कार्यस्थल के लिए डिफाई एंटरप्राइज लाइसेंस समाप्त हो गया है। कृपया डिफाई का उपयोग जारी रखने के लिए अपने प्रशासक से संपर्क करें।',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -420,6 +420,7 @@ const translation = {
|
|||
},
|
||||
type: 'प्रकार',
|
||||
binaryFileVariable: 'बाइनरी फ़ाइल चर',
|
||||
extractListPlaceholder: 'सूची आइटम इंडेक्स दर्ज करें, \'/\' इन्सर्ट वेरिएबल टाइप करें',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'इनपुट वेरिएबल्स',
|
||||
|
@ -638,6 +639,7 @@ const translation = {
|
|||
filterConditionComparisonOperator: 'फ़िल्टर शर्त तुलन ऑपरेटर',
|
||||
selectVariableKeyPlaceholder: 'उप चर कुंजी का चयन करें',
|
||||
inputVar: 'इनपुट वेरिएबल',
|
||||
extractsCondition: 'N आइटम निकालें',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -622,6 +622,10 @@ const translation = {
|
|||
pasteFileLink: 'Incolla il collegamento del file',
|
||||
uploadFromComputerReadError: 'Lettura del file non riuscita, riprovare.',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: 'Scadenza tra {{count}} giorni',
|
||||
expiring: 'Scadenza in un giorno',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -109,6 +109,12 @@ const translation = {
|
|||
resetPasswordDesc: 'Digita l\'e-mail che hai utilizzato per registrarti su Dify e ti invieremo un\'e-mail per reimpostare la password.',
|
||||
noLoginMethodTip: 'Contatta l\'amministratore di sistema per aggiungere un metodo di autenticazione.',
|
||||
enterYourName: 'Inserisci il tuo nome utente',
|
||||
licenseLostTip: 'Impossibile connettersi al server licenze Dify. Contatta il tuo amministratore per continuare a utilizzare Dify.',
|
||||
licenseExpired: 'Licenza scaduta',
|
||||
licenseLost: 'Licenza persa',
|
||||
licenseExpiredTip: 'La licenza Dify Enterprise per la tua area di lavoro è scaduta. Contatta il tuo amministratore per continuare a utilizzare Dify.',
|
||||
licenseInactiveTip: 'La licenza Dify Enterprise per la tua area di lavoro è inattiva. Contatta il tuo amministratore per continuare a utilizzare Dify.',
|
||||
licenseInactive: 'Licenza inattiva',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -424,6 +424,7 @@ const translation = {
|
|||
},
|
||||
binaryFileVariable: 'Variabile file binario',
|
||||
type: 'Digitare',
|
||||
extractListPlaceholder: 'Inserisci l\'indice delle voci dell\'elenco, digita \'/\' inserisci la variabile',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Variabili di Input',
|
||||
|
@ -645,6 +646,7 @@ const translation = {
|
|||
desc: 'DESC',
|
||||
filterConditionComparisonValue: 'Valore della condizione di filtro',
|
||||
orderBy: 'Ordina per',
|
||||
extractsCondition: 'Estrai l\'elemento N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
fileExtensionNotSupport: 'ファイル拡張子はサポートされていません',
|
||||
pasteFileLinkInvalid: '無効なファイルリンク',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: '有効期限 {{count}} 日',
|
||||
expiring: '1日で有効期限が切れます',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
sendVerificationCode: '確認コードの送信',
|
||||
enterYourName: 'ユーザー名を入力してください',
|
||||
resetPasswordDesc: 'Difyへのサインアップに使用したメールアドレスを入力すると、パスワードリセットメールが送信されます。',
|
||||
licenseLost: 'ライセンスを失った',
|
||||
licenseExpiredTip: 'ワークスペースの Dify Enterprise ライセンスの有効期限が切れています。Difyを引き続き使用するには、管理者に連絡してください。',
|
||||
licenseInactive: 'ライセンスが非アクティブです',
|
||||
licenseInactiveTip: 'ワークスペースの Dify Enterprise ライセンスが非アクティブです。Difyを引き続き使用するには、管理者に連絡してください。',
|
||||
licenseExpired: 'ライセンスの有効期限が切れています',
|
||||
licenseLostTip: 'Difyライセンスサーバーへの接続に失敗しました。続けてDifyを使用するために管理者に連絡してください。',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'タイプ',
|
||||
binaryFileVariable: 'バイナリファイル変数',
|
||||
extractListPlaceholder: 'リスト項目のインデックスを入力し、変数を挿入 \'/\' と入力します',
|
||||
},
|
||||
code: {
|
||||
inputVars: '入力変数',
|
||||
|
@ -619,6 +620,7 @@ const translation = {
|
|||
filterConditionComparisonOperator: 'フィルター条件を比較オペレーター',
|
||||
inputVar: '入力変数',
|
||||
desc: 'DESC',
|
||||
extractsCondition: 'N個のアイテムを抽出します',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -587,6 +587,10 @@ const translation = {
|
|||
uploadFromComputerLimit: '업로드 파일은 {{size}}를 초과할 수 없습니다.',
|
||||
uploadFromComputerUploadError: '파일 업로드에 실패했습니다. 다시 업로드하십시오.',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: '{{count}}일 후에 만료',
|
||||
expiring: '하루 후에 만료',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
enterYourName: '사용자 이름을 입력해 주세요',
|
||||
noLoginMethodTip: '인증 방법을 추가하려면 시스템 관리자에게 문의하십시오.',
|
||||
resetPasswordDesc: 'Dify에 가입할 때 사용한 이메일을 입력하면 비밀번호 재설정 이메일을 보내드립니다.',
|
||||
licenseInactiveTip: '작업 영역에 대한 Dify Enterprise 라이선스가 비활성 상태입니다. Dify를 계속 사용하려면 관리자에게 문의하십시오.',
|
||||
licenseLost: '라이센스 분실',
|
||||
licenseLostTip: 'Dify 라이선스 서버에 연결하지 못했습니다. Dify를 계속 사용하려면 관리자에게 문의하십시오.',
|
||||
licenseInactive: 'License Inactive(라이선스 비활성)',
|
||||
licenseExpired: '라이센스가 만료되었습니다.',
|
||||
licenseExpiredTip: '작업 영역에 대한 Dify Enterprise 라이선스가 만료되었습니다. Dify를 계속 사용하려면 관리자에게 문의하십시오.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: '형',
|
||||
binaryFileVariable: '바이너리 파일 변수',
|
||||
extractListPlaceholder: '목록 항목 인덱스 입력, \'/\' 변수 삽입',
|
||||
},
|
||||
code: {
|
||||
inputVars: '입력 변수',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
orderBy: '정렬 기준',
|
||||
selectVariableKeyPlaceholder: '하위 변수 키 선택',
|
||||
filterConditionComparisonOperator: '필터 조건 비교 연산자',
|
||||
extractsCondition: 'N 항목을 추출합니다.',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -609,6 +609,10 @@ const translation = {
|
|||
fileExtensionNotSupport: 'Rozszerzenie pliku nie jest obsługiwane',
|
||||
uploadFromComputer: 'Przesyłanie lokalne',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: 'Wygasa za {{count}} dni',
|
||||
expiring: 'Wygasa w ciągu jednego dnia',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -104,6 +104,12 @@ const translation = {
|
|||
or: 'LUB',
|
||||
noLoginMethodTip: 'Skontaktuj się z administratorem systemu, aby dodać metodę uwierzytelniania.',
|
||||
noLoginMethod: 'Nie skonfigurowano metody uwierzytelniania',
|
||||
licenseLost: 'Utrata licencji',
|
||||
licenseExpired: 'Licencja wygasła',
|
||||
licenseInactive: 'Licencja nieaktywna',
|
||||
licenseExpiredTip: 'Licencja Dify Enterprise dla Twojego obszaru roboczego wygasła. Skontaktuj się z administratorem, aby kontynuować korzystanie z Dify.',
|
||||
licenseLostTip: 'Nie udało się nawiązać połączenia z serwerem licencji Dify. Skontaktuj się z administratorem, aby kontynuować korzystanie z Dify.',
|
||||
licenseInactiveTip: 'Licencja Dify Enterprise dla Twojego obszaru roboczego jest nieaktywna. Skontaktuj się z administratorem, aby kontynuować korzystanie z Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'Typ',
|
||||
binaryFileVariable: 'Binarna zmienna pliku',
|
||||
extractListPlaceholder: 'Wprowadź indeks elementu listy, wpisz "/" wstaw zmienną',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Zmienne wejściowe',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
filterCondition: 'Stan filtra',
|
||||
filterConditionComparisonValue: 'Wartość warunku filtru',
|
||||
selectVariableKeyPlaceholder: 'Wybierz klucz zmiennej podrzędnej',
|
||||
extractsCondition: 'Wyodrębnij element N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
uploadFromComputerLimit: 'Carregar arquivo não pode exceder {{size}}',
|
||||
uploadFromComputerUploadError: 'Falha no upload do arquivo, faça o upload novamente.',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Expirando em um dia',
|
||||
expiring_plural: 'Expirando em {{count}} dias',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
resetPasswordDesc: 'Digite o e-mail que você usou para se inscrever no Dify e enviaremos um e-mail de redefinição de senha.',
|
||||
sendVerificationCode: 'Enviar código de verificação',
|
||||
usePassword: 'Usar senha',
|
||||
licenseInactiveTip: 'A licença do Dify Enterprise para seu espaço de trabalho está inativa. Entre em contato com o administrador para continuar usando o Dify.',
|
||||
licenseLostTip: 'Falha ao conectar o servidor de licenças Dify. Entre em contato com o administrador para continuar usando o Dify.',
|
||||
licenseExpired: 'Licença expirada',
|
||||
licenseLost: 'Licença perdida',
|
||||
licenseInactive: 'Licença inativa',
|
||||
licenseExpiredTip: 'A licença do Dify Enterprise para seu espaço de trabalho expirou. Entre em contato com o administrador para continuar usando o Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'Tipo',
|
||||
binaryFileVariable: 'Variável de arquivo binário',
|
||||
extractListPlaceholder: 'Insira o índice do item da lista, digite \'/\' inserir variável',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Variáveis de entrada',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
filterConditionKey: 'Chave de condição do filtro',
|
||||
filterConditionComparisonOperator: 'Operador de comparação de condição de filtro',
|
||||
filterConditionComparisonValue: 'Valor da condição do filtro',
|
||||
extractsCondition: 'Extraia o item N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
uploadFromComputerLimit: 'Încărcarea fișierului nu poate depăși {{size}}',
|
||||
pasteFileLink: 'Lipiți linkul fișierului',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Expiră într-o zi',
|
||||
expiring_plural: 'Expiră în {{count}} zile',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
or: 'SAU',
|
||||
resetPasswordDesc: 'Tastați e-mailul pe care l-ați folosit pentru a vă înscrie pe Dify și vă vom trimite un e-mail de resetare a parolei.',
|
||||
changePasswordBtn: 'Setați o parolă',
|
||||
licenseLostTip: 'Nu s-a reușit conectarea serverului de licențe Dify. Contactați administratorul pentru a continua să utilizați Dify.',
|
||||
licenseInactive: 'Licență inactivă',
|
||||
licenseInactiveTip: 'Licența Dify Enterprise pentru spațiul de lucru este inactivă. Contactați administratorul pentru a continua să utilizați Dify.',
|
||||
licenseExpired: 'Licență expirată',
|
||||
licenseLost: 'Licență pierdută',
|
||||
licenseExpiredTip: 'Licența Dify Enterprise pentru spațiul de lucru a expirat. Contactați administratorul pentru a continua să utilizați Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'Tip',
|
||||
binaryFileVariable: 'Variabilă de fișier binar',
|
||||
extractListPlaceholder: 'Introduceți indexul elementelor din listă, tastați "/" inserați variabila',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Variabile de intrare',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
limit: 'N de sus',
|
||||
filterConditionComparisonValue: 'Valoare Stare filtrare',
|
||||
asc: 'ASC',
|
||||
extractsCondition: 'Extrageți elementul N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
uploadFromComputerLimit: 'Файл загрузки не может превышать {{size}}',
|
||||
uploadFromComputerUploadError: 'Загрузка файла не удалась, пожалуйста, загрузите еще раз.',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Срок действия истекает за один день',
|
||||
expiring_plural: 'Срок действия истекает через {{count}} дней',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
noLoginMethodTip: 'Обратитесь к системному администратору, чтобы добавить метод аутентификации.',
|
||||
resetPasswordDesc: 'Введите адрес электронной почты, который вы использовали для регистрации в Dify, и мы отправим вам электронное письмо для сброса пароля.',
|
||||
or: 'ИЛИ',
|
||||
licenseInactive: 'Лицензия неактивна',
|
||||
licenseLostTip: 'Не удалось подключить сервер лицензий Dify. Обратитесь к своему администратору, чтобы продолжить использование Dify.',
|
||||
licenseExpired: 'Срок действия лицензии истек',
|
||||
licenseLost: 'Утеряна лицензия',
|
||||
licenseInactiveTip: 'Лицензия Dify Enterprise для рабочего пространства неактивна. Обратитесь к своему администратору, чтобы продолжить использование Dify.',
|
||||
licenseExpiredTip: 'Срок действия лицензии Dify Enterprise для рабочего пространства истек. Обратитесь к своему администратору, чтобы продолжить использование Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'Тип',
|
||||
binaryFileVariable: 'Переменная двоичного файла',
|
||||
extractListPlaceholder: 'Введите индекс элемента списка, введите \'/\' вставьте переменную',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Входные переменные',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
filterConditionKey: 'Ключ условия фильтра',
|
||||
selectVariableKeyPlaceholder: 'Выбор ключа подпеременной',
|
||||
filterConditionComparisonValue: 'Значение условия фильтра',
|
||||
extractsCondition: 'Извлечение элемента N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -38,6 +38,10 @@ const translation = {
|
|||
duplicate: 'Podvoji',
|
||||
rename: 'Preimenuj',
|
||||
audioSourceUnavailable: 'Zvočni vir ni na voljo',
|
||||
copyImage: 'Kopiraj sliko',
|
||||
openInNewTab: 'Odpri v novem zavihku',
|
||||
zoomOut: 'Pomanjšanje',
|
||||
zoomIn: 'Povečava',
|
||||
},
|
||||
errorMsg: {
|
||||
fieldRequired: '{{field}} je obvezno',
|
||||
|
@ -576,5 +580,220 @@ const translation = {
|
|||
failed: 'Ustvarjanje oznake ni uspelo',
|
||||
},
|
||||
},
|
||||
dataSource: {
|
||||
notion: {
|
||||
selector: {
|
||||
pageSelected: 'Izbrane strani',
|
||||
addPages: 'Dodajanje strani',
|
||||
searchPages: 'Iskanje strani ...',
|
||||
noSearchResult: 'Ni rezultatov iskanja',
|
||||
preview: 'PREDOGLED',
|
||||
},
|
||||
connected: 'Povezani',
|
||||
remove: 'Odstrani',
|
||||
addWorkspace: 'Dodajanje delovnega prostora',
|
||||
connectedWorkspace: 'Povezani delovni prostor',
|
||||
description: 'Uporaba pojma kot vira podatkov za znanje.',
|
||||
disconnected: 'Odklopi',
|
||||
pagesAuthorized: 'Dovoljene strani',
|
||||
title: 'Pojem',
|
||||
changeAuthorizedPages: 'Spreminjanje pooblaščenih strani',
|
||||
sync: 'Sinhroniziranje',
|
||||
},
|
||||
website: {
|
||||
active: 'Dejaven',
|
||||
configuredCrawlers: 'Konfigurirani pajki',
|
||||
title: 'Spletna stran',
|
||||
inactive: 'Neaktiven',
|
||||
description: 'Uvozite vsebino s spletnih mest s spletnim pajkom.',
|
||||
with: 'S',
|
||||
},
|
||||
add: 'Dodajanje vira podatkov',
|
||||
connect: 'Povezati',
|
||||
configure: 'Konfigurirati',
|
||||
},
|
||||
plugin: {
|
||||
serpapi: {
|
||||
apiKeyPlaceholder: 'Vnesite ključ API',
|
||||
apiKey: 'API ključ',
|
||||
keyFrom: 'Pridobite svoj ključ SerpAPI na strani računa SerpAPI',
|
||||
},
|
||||
},
|
||||
apiBasedExtension: {
|
||||
selector: {
|
||||
placeholder: 'Prosimo, izberite razširitev API-ja',
|
||||
manage: 'Upravljanje razširitve API',
|
||||
title: 'Razširitev API-ja',
|
||||
},
|
||||
modal: {
|
||||
name: {
|
||||
placeholder: 'Prosimo, vnesite ime',
|
||||
title: 'Ime',
|
||||
},
|
||||
apiEndpoint: {
|
||||
title: 'Končna točka API-ja',
|
||||
placeholder: 'Prosimo, vnesite končno točko API-ja',
|
||||
},
|
||||
apiKey: {
|
||||
lengthError: 'Dolžina ključa API ne sme biti manjša od 5 znakov',
|
||||
title: 'Ključ API-ja',
|
||||
placeholder: 'Prosimo, vnesite API-ključ',
|
||||
},
|
||||
editTitle: 'Uredi razširitev API-ja',
|
||||
title: 'Dodajanje razširitve API-ja',
|
||||
},
|
||||
type: 'Vrsta',
|
||||
link: 'Preberite, kako razvijete lastno razširitev API-ja.',
|
||||
title: 'Razširitve API zagotavljajo centralizirano upravljanje API, kar poenostavlja konfiguracijo za enostavno uporabo v aplikacijah Dify.',
|
||||
linkUrl: 'https://docs.dify.ai/features/extension/api_based_extension',
|
||||
add: 'Dodajanje razširitve API-ja',
|
||||
},
|
||||
about: {
|
||||
updateNow: 'Posodobi zdaj',
|
||||
nowAvailable: 'Dify {{version}} je zdaj na voljo.',
|
||||
latestAvailable: 'Dify {{version}} je najnovejša različica, ki je na voljo.',
|
||||
changeLog: 'Dnevnik sprememb',
|
||||
},
|
||||
appMenus: {
|
||||
apiAccess: 'Dostop do API-ja',
|
||||
logs: 'Dnevniki',
|
||||
logAndAnn: 'Dnevniki & Ann.',
|
||||
promptEng: 'Orkester',
|
||||
overview: 'Spremljanje',
|
||||
},
|
||||
environment: {
|
||||
development: 'RAZVOJ',
|
||||
testing: 'PREIZKUŠANJE',
|
||||
},
|
||||
appModes: {
|
||||
completionApp: 'Generator besedila',
|
||||
chatApp: 'Aplikacija za klepet',
|
||||
},
|
||||
datasetMenus: {
|
||||
documents: 'Dokumentov',
|
||||
settings: 'Nastavitve',
|
||||
hitTesting: 'Testiranje pridobivanja',
|
||||
emptyTip: 'Znanje ni bilo povezano, prosimo, pojdite na aplikacijo ali vtičnik, da dokončate združenje.',
|
||||
viewDoc: 'Oglejte si dokumentacijo',
|
||||
relatedApp: 'Povezane aplikacije',
|
||||
},
|
||||
voiceInput: {
|
||||
notAllow: 'Mikrofon ni pooblaščen',
|
||||
speaking: 'Spregovorite zdaj ...',
|
||||
converting: 'Pretvorba v besedilo ...',
|
||||
},
|
||||
modelName: {
|
||||
'claude-2': 'Claude-2',
|
||||
'gpt-4-32k': 'GPT-4-32K',
|
||||
'text-embedding-ada-002': 'Vdelava besedila-Ada-002',
|
||||
'gpt-4': 'GPT-4',
|
||||
'whisper-1': 'Šepet-1',
|
||||
'claude-instant-1': 'Claude-Instant',
|
||||
'text-davinci-003': 'Besedilo-Davinci-003',
|
||||
'gpt-3.5-turbo-16k': 'GPT-3.5-Turbo-16K',
|
||||
'gpt-3.5-turbo': 'GPT-3.5-Turbo',
|
||||
},
|
||||
chat: {
|
||||
citation: {
|
||||
vectorHash: 'Vektorska razpršitev:',
|
||||
hitScore: 'Rezultat pridobivanja:',
|
||||
linkToDataset: 'Povezava do znanja',
|
||||
hitCount: 'Število pridobivanja:',
|
||||
characters: 'Znakov:',
|
||||
title: 'CITATI',
|
||||
},
|
||||
conversationNameCanNotEmpty: 'Zahtevano ime pogovora',
|
||||
inputPlaceholder: 'Pogovorite se z botom',
|
||||
renameConversation: 'Preimenovanje pogovora',
|
||||
conversationName: 'Ime pogovora',
|
||||
conversationNamePlaceholder: 'Prosimo, vnesite ime pogovora',
|
||||
},
|
||||
promptEditor: {
|
||||
context: {
|
||||
item: {
|
||||
desc: 'Vstavljanje predloge konteksta',
|
||||
title: 'Kontekstu',
|
||||
},
|
||||
modal: {
|
||||
footer: 'Kontekste lahko upravljate v spodnjem razdelku Kontekst.',
|
||||
title: '{{num}} Znanje v kontekstu',
|
||||
add: 'Dodajanje konteksta',
|
||||
},
|
||||
},
|
||||
history: {
|
||||
item: {
|
||||
desc: 'Vstavljanje predloge zgodovinskega sporočila',
|
||||
title: 'Zgodovina pogovorov',
|
||||
},
|
||||
modal: {
|
||||
title: 'PRIMER',
|
||||
edit: 'Urejanje imen vlog v pogovoru',
|
||||
assistant: 'Zdravo! Kako vam lahko pomagam danes?',
|
||||
user: 'Zdravo',
|
||||
},
|
||||
},
|
||||
variable: {
|
||||
item: {
|
||||
desc: 'Vstavljanje spremenljivk in zunanjih orodij',
|
||||
title: 'Spremenljivke in zunanja orodja',
|
||||
},
|
||||
outputToolDisabledItem: {
|
||||
title: 'Spremenljivke',
|
||||
desc: 'Vstavljanje spremenljivk',
|
||||
},
|
||||
modal: {
|
||||
addTool: 'Novo orodje',
|
||||
add: 'Nova spremenljivka',
|
||||
},
|
||||
},
|
||||
query: {
|
||||
item: {
|
||||
title: 'Poizvedba',
|
||||
desc: 'Vstavljanje predloge uporabniške poizvedbe',
|
||||
},
|
||||
},
|
||||
existed: 'Že obstaja v pozivu',
|
||||
placeholder: 'Tukaj vnesite svojo pozivno besedo, vnesite \'{\' za vstavljanje spremenljivke, vnesite \'/\', da vstavite blok vsebine',
|
||||
},
|
||||
imageUploader: {
|
||||
pasteImageLinkInvalid: 'Neveljavna povezava do slike',
|
||||
uploadFromComputerLimit: 'Nalaganje slik ne sme presegati {{size}} MB',
|
||||
uploadFromComputerUploadError: 'Nalaganje slike ni uspelo, naložite ga znova.',
|
||||
pasteImageLink: 'Prilepi povezavo do slike',
|
||||
imageUpload: 'Nalaganje slik',
|
||||
uploadFromComputer: 'Naloži iz računalnika',
|
||||
pasteImageLinkInputPlaceholder: 'Tukaj prilepi povezavo do slike',
|
||||
uploadFromComputerReadError: 'Branje slik ni uspelo, poskusite znova.',
|
||||
},
|
||||
fileUploader: {
|
||||
fileExtensionNotSupport: 'Datotečna pripona ni podprta',
|
||||
pasteFileLinkInvalid: 'Neveljavna povezava do datoteke',
|
||||
pasteFileLink: 'Prilepi povezavo do datoteke',
|
||||
pasteFileLinkInputPlaceholder: 'Vnesite URL ...',
|
||||
uploadFromComputerUploadError: 'Nalaganje datoteke ni uspelo, naložite ga znova.',
|
||||
uploadFromComputer: 'Lokalno nalaganje',
|
||||
uploadFromComputerLimit: 'Nalaganje {{type}} ne sme presegati {{size}}',
|
||||
uploadFromComputerReadError: 'Branje datoteke ni uspelo, poskusite znova.',
|
||||
},
|
||||
tag: {
|
||||
addTag: 'Dodajanje oznak',
|
||||
delete: 'Brisanje oznake',
|
||||
manageTags: 'Upravljanje oznak',
|
||||
addNew: 'Dodajanje nove oznake',
|
||||
placeholder: 'Vse oznake',
|
||||
failed: 'Ustvarjanje oznake ni uspelo',
|
||||
editTag: 'Urejanje oznak',
|
||||
created: 'Oznaka je bila uspešno ustvarjena',
|
||||
noTagYet: 'Še ni oznak',
|
||||
create: 'Ustvariti',
|
||||
deleteTip: 'Oznaka se uporablja, jo izbrišite?',
|
||||
noTag: 'Brez oznak',
|
||||
selectorPlaceholder: 'Vnesite za iskanje ali ustvarjanje',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: 'Poteče v {{count}} dneh',
|
||||
expiring: 'Poteče v enem dnevu',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -152,6 +152,7 @@ const translation = {
|
|||
indexSettingTip: 'Če želite spremeniti način indeksiranja in model vdelave, pojdite na ',
|
||||
retrievalSettingTip: 'Če želite spremeniti nastavitve iskanja, pojdite na ',
|
||||
datasetSettingLink: 'nastavitve Znanja.',
|
||||
maxLengthCheck: 'Največja dolžina kosa mora biti manjša od 4000',
|
||||
},
|
||||
stepThree: {
|
||||
creationTitle: '🎉 Znanje ustvarjeno',
|
||||
|
|
|
@ -55,6 +55,7 @@ const translation = {
|
|||
passwordEmpty: 'Geslo je obvezno',
|
||||
passwordLengthInValid: 'Geslo mora vsebovati vsaj 8 znakov',
|
||||
passwordInvalid: 'Geslo mora vsebovati črke in številke, dolžina pa mora biti več kot 8 znakov',
|
||||
registrationNotAllowed: 'Računa ni mogoče najti. Za registracijo se obrnite na skrbnika sistema.',
|
||||
},
|
||||
license: {
|
||||
tip: 'Preden začnete z Dify Community Edition, preberite GitHub',
|
||||
|
@ -70,6 +71,40 @@ const translation = {
|
|||
activated: 'Prijavite se zdaj',
|
||||
adminInitPassword: 'Geslo za inicializacijo administratorja',
|
||||
validate: 'Potrdi',
|
||||
checkCode: {
|
||||
emptyCode: 'Koda je obvezna',
|
||||
verificationCodePlaceholder: 'Vnesite 6-mestno kodo',
|
||||
resend: 'Poslati',
|
||||
verificationCode: 'Koda za preverjanje',
|
||||
tips: 'Kodo za preverjanje pošljemo na <strong>{{email}}</strong>',
|
||||
verify: 'Preveriti',
|
||||
validTime: 'Upoštevajte, da je koda veljavna 5 minut',
|
||||
checkYourEmail: 'Preverjanje e-pošte',
|
||||
didNotReceiveCode: 'Niste prejeli kode?',
|
||||
invalidCode: 'Neveljavna koda',
|
||||
useAnotherMethod: 'Uporabite drug način',
|
||||
},
|
||||
useVerificationCode: 'Uporaba kode za preverjanje',
|
||||
licenseInactive: 'Licenca je neaktivna',
|
||||
changePasswordBtn: 'Nastavitev gesla',
|
||||
licenseExpired: 'Licenca je potekla',
|
||||
resetPassword: 'Ponastavi geslo',
|
||||
back: 'Hrbet',
|
||||
backToLogin: 'Nazaj na prijavo',
|
||||
enterYourName: 'Prosimo, vnesite svoje uporabniško ime',
|
||||
licenseLost: 'Izgubljena licenca',
|
||||
licenseExpiredTip: 'Licenca za Dify Enterprise za vaš delovni prostor je potekla. Če želite še naprej uporabljati Dify, se obrnite na skrbnika.',
|
||||
usePassword: 'Uporaba gesla',
|
||||
sendVerificationCode: 'Pošlji kodo za preverjanje',
|
||||
resetPasswordDesc: 'Vnesite e-poštni naslov, ki ste ga uporabili za prijavo na Dify, in poslali vam bomo e-poštno sporočilo za ponastavitev gesla.',
|
||||
setYourAccount: 'Nastavitev računa',
|
||||
noLoginMethodTip: 'Obrnite se na skrbnika sistema, da dodate način preverjanja pristnosti.',
|
||||
or: 'ALI',
|
||||
noLoginMethod: 'Način preverjanja pristnosti ni konfiguriran',
|
||||
continueWithCode: 'Nadaljujte s kodo',
|
||||
withSSO: 'Nadaljujte z enotno prijavo',
|
||||
licenseLostTip: 'Povezava z licenčnim strežnikom Dify ni uspela. Če želite še naprej uporabljati Dify, se obrnite na skrbnika.',
|
||||
licenseInactiveTip: 'Licenca Dify Enterprise za vaš delovni prostor je neaktivna. Če želite še naprej uporabljati Dify, se obrnite na skrbnika.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -95,6 +95,10 @@ const translation = {
|
|||
addParallelNode: 'Dodaj vzporedno vozlišče',
|
||||
parallel: 'VZPOREDNO',
|
||||
branch: 'VEJA',
|
||||
fileUploadTip: 'Funkcije nalaganja slik so nadgrajene na nalaganje datotek.',
|
||||
featuresDocLink: 'Izvedi več',
|
||||
featuresDescription: 'Izboljšajte uporabniško izkušnjo spletne aplikacije',
|
||||
ImageUploadLegacyTip: 'Zdaj lahko ustvarite spremenljivke vrste datoteke v začetnem obrazcu. V prihodnje ne bomo več podpirali funkcije nalaganja slik.',
|
||||
},
|
||||
env: {
|
||||
envPanelTitle: 'Spremenljivke okolja',
|
||||
|
@ -554,6 +558,506 @@ const translation = {
|
|||
tracing: {
|
||||
stopBy: 'Ustavljeno s strani {{user}}',
|
||||
},
|
||||
chatVariable: {
|
||||
modal: {
|
||||
type: 'Vrsta',
|
||||
objectValue: 'Privzeta vrednost',
|
||||
description: 'Opis',
|
||||
editTitle: 'Urejanje spremenljivke pogovora',
|
||||
namePlaceholder: 'Ime spremenljivke',
|
||||
valuePlaceholder: 'Privzeta vrednost, pustite prazno, da ni nastavljeno',
|
||||
title: 'Dodajanje spremenljivke pogovora',
|
||||
editInJSON: 'Urejanje v JSON',
|
||||
value: 'Privzeta vrednost',
|
||||
oneByOne: 'Dodajanje enega za drugim',
|
||||
objectKey: 'Ključ',
|
||||
objectType: 'Vrsta',
|
||||
arrayValue: 'Vrednost',
|
||||
name: 'Ime',
|
||||
descriptionPlaceholder: 'Opis spremenljivke',
|
||||
editInForm: 'Uredi v obrazcu',
|
||||
addArrayValue: 'Dodajanje vrednosti',
|
||||
},
|
||||
storedContent: 'Shranjena vsebina',
|
||||
updatedAt: 'Posodobljeno na',
|
||||
panelTitle: 'Spremenljivke pogovora',
|
||||
button: 'Dodajanje spremenljivke',
|
||||
panelDescription: 'Spremenljivke pogovora se uporabljajo za shranjevanje interaktivnih informacij, ki si jih mora LLM zapomniti, vključno z zgodovino pogovorov, naloženimi datotekami, uporabniškimi nastavitvami. So branje in pisanje.',
|
||||
docLink: 'Če želite izvedeti več, obiščite naše dokumente.',
|
||||
},
|
||||
changeHistory: {
|
||||
nodeChange: 'Blokiranje spremenjeno',
|
||||
placeholder: 'Ničesar še niste spremenili',
|
||||
nodeDescriptionChange: 'Opis bloka je bil spremenjen',
|
||||
nodePaste: 'Blokiranje lepljenja',
|
||||
noteDelete: 'Opomba izbrisana',
|
||||
nodeDragStop: 'Blok premaknjen',
|
||||
nodeConnect: 'Blok povezan',
|
||||
sessionStart: 'Začetek seje',
|
||||
nodeDelete: 'Blokiraj izbrisane',
|
||||
stepBackward_other: '{{count}} stopi nazaj',
|
||||
hint: 'Namig',
|
||||
noteAdd: 'Opomba dodana',
|
||||
clearHistory: 'Počisti zgodovino',
|
||||
stepForward_one: '{{count}} korak naprej',
|
||||
stepBackward_one: '{{count}} korak nazaj',
|
||||
nodeAdd: 'Blokiranje dodano',
|
||||
noteChange: 'Opomba spremenjena',
|
||||
hintText: 'Dejanjem urejanja se sledi v zgodovini sprememb, ki je shranjena v napravi za čas trajanja te seje. Ta zgodovina bo izbrisana, ko zapustite urejevalnik.',
|
||||
stepForward_other: '{{count}} koraki naprej',
|
||||
edgeDelete: 'Blok je prekinjen.',
|
||||
nodeTitleChange: 'Naslov bloka spremenjen',
|
||||
nodeResize: 'Spremeni velikost bloka',
|
||||
title: 'Zgodovina sprememb',
|
||||
currentState: 'Trenutno stanje',
|
||||
},
|
||||
errorMsg: {
|
||||
fields: {
|
||||
code: 'Koda',
|
||||
variableValue: 'Vrednost spremenljivke',
|
||||
visionVariable: 'Spremenljivka vida',
|
||||
model: 'Model',
|
||||
rerankModel: 'Ponovno razvrsti model',
|
||||
variable: 'Ime spremenljivke',
|
||||
},
|
||||
invalidJson: '{{field}} je neveljaven JSON',
|
||||
invalidVariable: 'Neveljavna spremenljivka',
|
||||
authRequired: 'Dovoljenje je potrebno',
|
||||
fieldRequired: '{{field}} je obvezno',
|
||||
rerankModelRequired: 'Preden vklopite Rerank Model, preverite, ali je bil model uspešno konfiguriran v nastavitvah.',
|
||||
},
|
||||
singleRun: {
|
||||
startRun: 'Začni zagnati',
|
||||
running: 'Tek',
|
||||
testRunIteration: 'Ponovitev preskusnega zagona',
|
||||
iteration: 'Ponovitev',
|
||||
back: 'Hrbet',
|
||||
testRun: 'Preskusni zagon',
|
||||
},
|
||||
tabs: {
|
||||
'blocks': 'Bloki',
|
||||
'workflowTool': 'Potek dela',
|
||||
'transform': 'Preoblikovanje',
|
||||
'question-understand': 'Vprašanje razumeti',
|
||||
'builtInTool': 'Vgrajeno',
|
||||
'allTool': 'Ves',
|
||||
'tools': 'Orodja',
|
||||
'logic': 'Logika',
|
||||
'searchBlock': 'Iskalni blok',
|
||||
'noResult': 'Ni najdenega ujemanja',
|
||||
'customTool': 'Običaj',
|
||||
'utilities': 'Utilities',
|
||||
'searchTool': 'Orodje za iskanje',
|
||||
},
|
||||
blocks: {
|
||||
'variable-aggregator': 'Spremenljivi agregator',
|
||||
'code': 'Koda',
|
||||
'parameter-extractor': 'Ekstraktor parametrov',
|
||||
'llm': 'LLM',
|
||||
'knowledge-retrieval': 'Pridobivanje znanja',
|
||||
'answer': 'Odgovoriti',
|
||||
'end': 'Konec',
|
||||
'document-extractor': 'Ekstraktor dokumentov',
|
||||
'assigner': 'Dodeljevalnik spremenljivke',
|
||||
'iteration-start': 'Začetek ponovitve',
|
||||
'template-transform': 'Predloga',
|
||||
'iteration': 'Ponovitev',
|
||||
'start': 'Začetek',
|
||||
'if-else': 'IF/ELSE',
|
||||
'list-operator': 'Operater seznama',
|
||||
'http-request': 'Zahteva HTTP',
|
||||
'variable-assigner': 'Spremenljivi agregator',
|
||||
'question-classifier': 'Klasifikator vprašanj',
|
||||
},
|
||||
blocksAbout: {
|
||||
'document-extractor': 'Uporablja se za razčlenjevanje naloženih dokumentov v besedilno vsebino, ki je zlahka razumljiva LLM.',
|
||||
'list-operator': 'Uporablja se za filtriranje ali razvrščanje vsebine matrike.',
|
||||
'template-transform': 'Pretvorite podatke v niz s sintakso predloge Jinja',
|
||||
'question-classifier': 'Določite pogoje razvrščanja uporabniških vprašanj, LLM lahko določi, kako poteka pogovor na podlagi opisa klasifikacije',
|
||||
'start': 'Določanje začetnih parametrov za zagon poteka dela',
|
||||
'if-else': 'Omogoča razdelitev poteka dela na dve veji glede na pogoje if/else',
|
||||
'knowledge-retrieval': 'Omogoča poizvedovanje po besedilni vsebini, ki je povezana z uporabniškimi vprašanji iz zbirke znanja',
|
||||
'variable-assigner': 'Združite spremenljivke z več vejami v eno spremenljivko za poenoteno konfiguracijo nadaljnjih vozlišč.',
|
||||
'code': 'Izvedite kodo Python ali NodeJS za izvajanje logike po meri',
|
||||
'answer': 'Določanje vsebine odgovora v pogovoru v klepetu',
|
||||
'iteration': 'Izvedite več korakov na predmetu seznama, dokler niso prikazani vsi rezultati.',
|
||||
'http-request': 'Dovoli pošiljanje zahtev strežnika prek protokola HTTP',
|
||||
'end': 'Določanje končne in končne vrste poteka dela',
|
||||
'variable-aggregator': 'Združite spremenljivke z več vejami v eno spremenljivko za poenoteno konfiguracijo nadaljnjih vozlišč.',
|
||||
'parameter-extractor': 'Uporabite LLM za pridobivanje strukturiranih parametrov iz naravnega jezika za klicanje orodij ali zahteve HTTP.',
|
||||
'assigner': 'Vozlišče za dodeljevanje spremenljivk se uporablja za dodeljevanje vrednosti zapisljivim spremenljivkam (kot so spremenljivke pogovora).',
|
||||
'llm': 'Sklicevanje na velike jezikovne modele za odgovarjanje na vprašanja ali obdelavo naravnega jezika',
|
||||
},
|
||||
operator: {
|
||||
zoomOut: 'Pomanjšanje',
|
||||
zoomTo100: 'Povečava na 100 %',
|
||||
zoomToFit: 'Povečaj, da se prilega',
|
||||
zoomIn: 'Povečava',
|
||||
zoomTo50: 'Povečava na 50%',
|
||||
},
|
||||
panel: {
|
||||
helpLink: 'Povezava za pomoč',
|
||||
organizeBlocks: 'Organiziranje blokov',
|
||||
optional: '(neobvezno)',
|
||||
nextStep: 'Naslednji korak',
|
||||
checklist: 'Kontrolni seznam',
|
||||
runThisStep: 'Zaženite ta korak',
|
||||
about: 'Približno',
|
||||
selectNextStep: 'Izberite Naslednji blok',
|
||||
changeBlock: 'Spremeni blok',
|
||||
createdBy: 'Ustvaril',
|
||||
checklistTip: 'Pred objavo se prepričajte, da so vse težave odpravljene',
|
||||
userInputField: 'Uporabniško polje za vnos',
|
||||
checklistResolved: 'Vse težave so odpravljene',
|
||||
addNextStep: 'Dodajanje naslednjega bloka v ta potek dela',
|
||||
change: 'Spremeniti',
|
||||
},
|
||||
nodes: {
|
||||
common: {
|
||||
memory: {
|
||||
conversationRoleName: 'Ime vloge pogovora',
|
||||
memoryTip: 'Nastavitve pomnilnika klepeta',
|
||||
assistant: 'Predpona pomočnika',
|
||||
user: 'Uporabniška predpona',
|
||||
memory: 'Spomin',
|
||||
windowSize: 'Velikost okna',
|
||||
},
|
||||
memories: {
|
||||
tip: 'Pomnilnik klepeta',
|
||||
title: 'Spomine',
|
||||
builtIn: 'Vgrajeno',
|
||||
},
|
||||
outputVars: 'Izhodne spremenljivke',
|
||||
insertVarTip: 'Vstavi spremenljivko',
|
||||
},
|
||||
start: {
|
||||
outputVars: {
|
||||
memories: {
|
||||
content: 'Vsebina sporočila',
|
||||
des: 'Zgodovina pogovorov',
|
||||
type: 'Vrsta sporočila',
|
||||
},
|
||||
query: 'Uporabniški vnos',
|
||||
files: 'Seznam datotek',
|
||||
},
|
||||
required: 'Zahteva',
|
||||
inputField: 'Vnosno polje',
|
||||
noVarTip: 'Nastavitev vhodov, ki jih je mogoče uporabiti v poteku dela',
|
||||
builtInVar: 'Vgrajene spremenljivke',
|
||||
},
|
||||
end: {
|
||||
output: {
|
||||
variable: 'izhodna spremenljivka',
|
||||
type: 'Vrsta izhoda',
|
||||
},
|
||||
type: {
|
||||
'structured': 'Strukturiran',
|
||||
'plain-text': 'Navadno besedilo',
|
||||
'none': 'Nobena',
|
||||
},
|
||||
outputs: 'Izhodov',
|
||||
},
|
||||
answer: {
|
||||
answer: 'Odgovoriti',
|
||||
outputVars: 'Izhodne spremenljivke',
|
||||
},
|
||||
llm: {
|
||||
roleDescription: {
|
||||
assistant: 'Odgovori modela na podlagi sporočil uporabnikov',
|
||||
system: 'Podajte navodila na visoki ravni za pogovor',
|
||||
user: 'Navedite navodila, poizvedbe ali kakršen koli besedilni vnos v model',
|
||||
},
|
||||
resolution: {
|
||||
low: 'Nizek',
|
||||
high: 'Visok',
|
||||
name: 'Resolucija',
|
||||
},
|
||||
outputVars: {
|
||||
usage: 'Informacije o uporabi modela',
|
||||
output: 'Ustvarjanje vsebine',
|
||||
},
|
||||
singleRun: {
|
||||
variable: 'Spremenljivka',
|
||||
},
|
||||
notSetContextInPromptTip: 'Če želite omogočiti funkcijo konteksta, izpolnite kontekstno spremenljivko v PROMPT.',
|
||||
sysQueryInUser: 'sys.query v sporočilu uporabnika je obvezen',
|
||||
model: 'model',
|
||||
files: 'Datoteke',
|
||||
addMessage: 'Dodaj sporočilo',
|
||||
context: 'Kontekstu',
|
||||
variables: 'Spremenljivke',
|
||||
prompt: 'Uren',
|
||||
vision: 'vid',
|
||||
contextTooltip: 'Znanje lahko uvozite kot kontekst',
|
||||
},
|
||||
knowledgeRetrieval: {
|
||||
outputVars: {
|
||||
title: 'Segmentirani naslov',
|
||||
url: 'Segmentirani URL',
|
||||
output: 'Pridobivanje segmentiranih podatkov',
|
||||
icon: 'Segmentirana ikona',
|
||||
metadata: 'Drugi metapodatki',
|
||||
content: 'Segmentirana vsebina',
|
||||
},
|
||||
queryVariable: 'Spremenljivka poizvedbe',
|
||||
knowledge: 'Znanje',
|
||||
},
|
||||
http: {
|
||||
outputVars: {
|
||||
headers: 'JSON seznama glav odgovorov',
|
||||
body: 'Vsebina odgovora',
|
||||
files: 'Seznam datotek',
|
||||
statusCode: 'Koda stanja odgovora',
|
||||
},
|
||||
authorization: {
|
||||
'authorization': 'Dovoljenje',
|
||||
'header': 'Glava',
|
||||
'bearer': 'Nosilec',
|
||||
'api-key-title': 'API ključ',
|
||||
'basic': 'Osnoven',
|
||||
'no-auth': 'Nobena',
|
||||
'custom': 'Običaj',
|
||||
'authorizationType': 'Vrsta dovoljenja',
|
||||
'auth-type': 'Vrsta preverjanja pristnosti',
|
||||
'api-key': 'Ključ API-ja',
|
||||
},
|
||||
timeout: {
|
||||
readPlaceholder: 'Vnos časovne omejitve branja v sekundah',
|
||||
writePlaceholder: 'Vnesite časovno omejitev pisanja v sekundah',
|
||||
writeLabel: 'Časovna omejitev pisanja',
|
||||
connectLabel: 'Časovna omejitev povezave',
|
||||
title: 'Timeout',
|
||||
readLabel: 'Časovna omejitev branja',
|
||||
connectPlaceholder: 'Vnos časovne omejitve povezave v sekundah',
|
||||
},
|
||||
value: 'Vrednost',
|
||||
key: 'Ključ',
|
||||
notStartWithHttp: 'API se mora začeti z http:// ali https://',
|
||||
body: 'Telo',
|
||||
type: 'Vrsta',
|
||||
inputVars: 'Vhodne spremenljivke',
|
||||
bulkEdit: 'Urejanje v velikem obsegu',
|
||||
insertVarPlaceholder: 'vnesite "/" za vstavljanje spremenljivke',
|
||||
api: 'API',
|
||||
keyValueEdit: 'Urejanje ključ-vrednost',
|
||||
binaryFileVariable: 'Spremenljivka binarne datoteke',
|
||||
headers: 'Glave',
|
||||
apiPlaceholder: 'Vnesite URL, vnesite \'/\' vstavi spremenljivko',
|
||||
extractListPlaceholder: 'Vnesite indeks elementa seznama, vnesite \'/\' vstavi spremenljivko',
|
||||
params: 'Params',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Vhodne spremenljivke',
|
||||
outputVars: 'Izhodne spremenljivke',
|
||||
searchDependencies: 'Odvisnosti iskanja',
|
||||
advancedDependenciesTip: 'Tukaj dodajte nekaj vnaprej naloženih odvisnosti, ki trajajo dlje časa ali niso privzeto vgrajene',
|
||||
advancedDependencies: 'Napredne odvisnosti',
|
||||
},
|
||||
templateTransform: {
|
||||
outputVars: {
|
||||
output: 'Preoblikovana vsebina',
|
||||
},
|
||||
code: 'Koda',
|
||||
inputVars: 'Vhodne spremenljivke',
|
||||
codeSupportTip: 'Podpira samo Jinja2',
|
||||
},
|
||||
ifElse: {
|
||||
comparisonOperator: {
|
||||
'all of': 'vse',
|
||||
'is not': 'ni',
|
||||
'not empty': 'ni prazen',
|
||||
'start with': 'Začnite z',
|
||||
'is': 'Je',
|
||||
'null': 'je nična',
|
||||
'not exists': 'ne obstaja',
|
||||
'contains': 'Vsebuje',
|
||||
'empty': 'je prazen',
|
||||
'exists': 'Obstaja',
|
||||
'in': 'v',
|
||||
'not contains': 'ne vsebuje',
|
||||
'end with': 'Končaj z',
|
||||
'not in': 'ni v',
|
||||
'not null': 'ni nična',
|
||||
},
|
||||
optionName: {
|
||||
video: 'Video',
|
||||
doc: 'Doc',
|
||||
audio: 'Avdio',
|
||||
image: 'Podoba',
|
||||
url: 'Spletni naslov',
|
||||
localUpload: 'Lokalno nalaganje',
|
||||
},
|
||||
and: 'in',
|
||||
else: 'Drugega',
|
||||
enterValue: 'Vnesite vrednost',
|
||||
elseDescription: 'Uporablja se za določanje logike, ki jo je treba izvesti, ko pogoj if ni izpolnjen.',
|
||||
addCondition: 'Dodajanje pogoja',
|
||||
if: 'Če',
|
||||
select: 'Izbrati',
|
||||
selectVariable: 'Izberite spremenljivko ...',
|
||||
conditionNotSetup: 'Pogoj NI nastavljen',
|
||||
addSubVariable: 'Podspremenljivka',
|
||||
notSetVariable: 'Prosimo, najprej nastavite spremenljivko',
|
||||
operator: 'Operaterja',
|
||||
or: 'ali',
|
||||
},
|
||||
variableAssigner: {
|
||||
type: {
|
||||
string: 'Niz',
|
||||
object: 'Predmet',
|
||||
array: 'Matrika',
|
||||
number: 'Številka',
|
||||
},
|
||||
outputVars: {
|
||||
varDescribe: '{{groupName}} izhod',
|
||||
},
|
||||
addGroup: 'Dodajanje skupine',
|
||||
outputType: 'Vrsta izhoda',
|
||||
title: 'Dodeljevanje spremenljivk',
|
||||
noVarTip: 'Seštevanje spremenljivk, ki jih je treba dodeliti',
|
||||
aggregationGroupTip: 'Če omogočite to funkcijo, lahko združevalnik spremenljivk združi več naborov spremenljivk.',
|
||||
aggregationGroup: 'Združevalna skupina',
|
||||
varNotSet: 'Spremenljivka ni nastavljena',
|
||||
setAssignVariable: 'Nastavitev spremenljivke dodelitve',
|
||||
},
|
||||
assigner: {
|
||||
'writeMode': 'Način pisanja',
|
||||
'plus': 'Plus',
|
||||
'variable': 'Spremenljivka',
|
||||
'clear': 'Jasen',
|
||||
'append': 'Dodaj',
|
||||
'assignedVariable': 'Dodeljena spremenljivka',
|
||||
'setVariable': 'Nastavi spremenljivko',
|
||||
'over-write': 'Prepisati',
|
||||
'writeModeTip': 'Način dodajanja: Na voljo samo za spremenljivke polja.',
|
||||
},
|
||||
tool: {
|
||||
outputVars: {
|
||||
files: {
|
||||
transfer_method: 'Način prenosa. Vrednost je remote_url ali local_file',
|
||||
upload_file_id: 'Naloži ID datoteke',
|
||||
type: 'Vrsta podpore. Zdaj podpiramo samo sliko',
|
||||
url: 'URL slike',
|
||||
title: 'Datoteke, ustvarjene z orodjem',
|
||||
},
|
||||
json: 'JSON, ustvarjen z orodjem',
|
||||
text: 'Vsebina, ustvarjena z orodjem',
|
||||
},
|
||||
inputVars: 'Vhodne spremenljivke',
|
||||
toAuthorize: 'Za odobritev',
|
||||
},
|
||||
questionClassifiers: {
|
||||
outputVars: {
|
||||
className: 'Ime razreda',
|
||||
},
|
||||
instruction: 'Navodilo',
|
||||
classNamePlaceholder: 'Napišite ime svojega razreda',
|
||||
addClass: 'Dodajanje razreda',
|
||||
instructionPlaceholder: 'Napišite navodila',
|
||||
topicName: 'Ime teme',
|
||||
topicPlaceholder: 'Napišite ime teme',
|
||||
class: 'Razred',
|
||||
advancedSetting: 'Napredne nastavitve',
|
||||
model: 'model',
|
||||
inputVars: 'Vhodne spremenljivke',
|
||||
instructionTip: 'Vnesite dodatna navodila, ki bodo klasifikatorju vprašanj pomagala bolje razumeti, kako kategorizirati vprašanja.',
|
||||
},
|
||||
parameterExtractor: {
|
||||
addExtractParameterContent: {
|
||||
description: 'Opis',
|
||||
typePlaceholder: 'Vrsta parametra izvlečka',
|
||||
requiredContent: 'Zahtevano se uporablja samo kot referenca za sklepanje modela in ne za obvezno validacijo izhodnega parametra.',
|
||||
required: 'Zahteva',
|
||||
type: 'Vrsta',
|
||||
namePlaceholder: 'Izvleček imena parametra',
|
||||
descriptionPlaceholder: 'Opis parametra izvlečka',
|
||||
name: 'Ime',
|
||||
},
|
||||
isSuccess: 'Je uspeh.Pri uspehu je vrednost 1, pri neuspehu je vrednost 0.',
|
||||
addExtractParameter: 'Dodajanje parametra izvlečka',
|
||||
importFromTool: 'Uvoz iz orodij',
|
||||
reasoningModeTip: 'Izberete lahko ustrezen način sklepanja glede na sposobnost modela, da se odzove na navodila za klicanje funkcij ali pozive.',
|
||||
inputVar: 'Vhodna spremenljivka',
|
||||
advancedSetting: 'Napredne nastavitve',
|
||||
errorReason: 'Razlog za napako',
|
||||
reasoningMode: 'Način sklepanja',
|
||||
instruction: 'Navodilo',
|
||||
instructionTip: 'Vnesite dodatna navodila, ki bodo ekstraktorju parametrov pomagala razumeti, kako izvleči parametre.',
|
||||
extractParametersNotSet: 'Izvleček parametrov ni nastavljen',
|
||||
extractParameters: 'Izvleček parametrov',
|
||||
},
|
||||
iteration: {
|
||||
ErrorMethod: {
|
||||
continueOnError: 'Nadaljuj ob napaki',
|
||||
removeAbnormalOutput: 'Odstranite nenormalen izhod',
|
||||
operationTerminated: 'Prekinjena',
|
||||
},
|
||||
output: 'Izhodne spremenljivke',
|
||||
parallelMode: 'Vzporedni način',
|
||||
MaxParallelismTitle: 'Največji vzporednost',
|
||||
errorResponseMethod: 'Način odziva na napako',
|
||||
parallelModeEnableDesc: 'V vzporednem načinu opravila v iteracijah podpirajo vzporedno izvajanje. To lahko konfigurirate na plošči z lastnostmi na desni.',
|
||||
error_one: '{{štetje}} Napaka',
|
||||
comma: ',',
|
||||
parallelModeUpper: 'VZPOREDNI NAČIN',
|
||||
parallelModeEnableTitle: 'Vzporedni način omogočen',
|
||||
currentIteration: 'Trenutna ponovitev',
|
||||
error_other: '{{štetje}} Napake',
|
||||
input: 'Vhodni',
|
||||
deleteTitle: 'Izbrisati iteracijsko vozlišče?',
|
||||
parallelPanelDesc: 'V vzporednem načinu opravila v iteraciji podpirajo vzporedno izvajanje.',
|
||||
deleteDesc: 'Če izbrišete iteracijsko vozlišče, boste izbrisali vsa podrejena vozlišča',
|
||||
iteration_other: '{{štetje}} Ponovitev',
|
||||
answerNodeWarningDesc: 'Opozorilo vzporednega načina: Vozlišča za odgovore, dodelitve spremenljivk pogovora in trajne operacije branja / pisanja v iteracijah lahko povzročijo izjeme.',
|
||||
MaxParallelismDesc: 'Največja vzporednost se uporablja za nadzor števila nalog, ki se izvajajo hkrati v eni ponovitvi.',
|
||||
iteration_one: '{{štetje}} Ponovitev',
|
||||
},
|
||||
note: {
|
||||
editor: {
|
||||
medium: 'Srednja',
|
||||
openLink: 'Odprt',
|
||||
showAuthor: 'Pokaži avtorja',
|
||||
bold: 'Smel',
|
||||
strikethrough: 'Prečrtano',
|
||||
large: 'Velik',
|
||||
link: 'Povezava',
|
||||
enterUrl: 'Vnesite URL ...',
|
||||
small: 'Majhen',
|
||||
italic: 'Ležeče',
|
||||
invalidUrl: 'Neveljaven URL',
|
||||
unlink: 'Prekini povezavo',
|
||||
placeholder: 'Napišite svojo opombo ...',
|
||||
bulletList: 'Seznam oznak',
|
||||
},
|
||||
addNote: 'Dodaj opombo',
|
||||
},
|
||||
docExtractor: {
|
||||
outputVars: {
|
||||
text: 'Izvlečeno besedilo',
|
||||
},
|
||||
inputVar: 'Vhodna spremenljivka',
|
||||
learnMore: 'Izvedi več',
|
||||
supportFileTypes: 'Podporne vrste datotek: {{types}}.',
|
||||
},
|
||||
listFilter: {
|
||||
outputVars: {
|
||||
result: 'Rezultat filtriranja',
|
||||
first_record: 'Prvi zapis',
|
||||
last_record: 'Zadnji zapis',
|
||||
},
|
||||
extractsCondition: 'Ekstrahiranje elementa N',
|
||||
selectVariableKeyPlaceholder: 'Izberite ključ podspremenljivke',
|
||||
asc: 'ASC',
|
||||
orderBy: 'Naročite po',
|
||||
filterCondition: 'Pogoj filtra',
|
||||
filterConditionKey: 'Ključ pogoja filtra',
|
||||
desc: 'DESC',
|
||||
limit: 'Vrh N',
|
||||
filterConditionComparisonOperator: 'Operator za primerjavo pogojev filtra',
|
||||
inputVar: 'Vhodna spremenljivka',
|
||||
filterConditionComparisonValue: 'Vrednost pogoja filtra',
|
||||
},
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
pasteFileLinkInvalid: 'Geçersiz dosya bağlantısı',
|
||||
fileExtensionNotSupport: 'Dosya uzantısı desteklenmiyor',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: '{{count}} gün içinde sona eriyor',
|
||||
expiring: 'Bir günde sona eriyor',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
noLoginMethodTip: 'Bir kimlik doğrulama yöntemi eklemek için lütfen sistem yöneticisine başvurun.',
|
||||
sendVerificationCode: 'Doğrulama Kodu Gönder',
|
||||
back: 'Geri',
|
||||
licenseExpiredTip: 'Çalışma alanınız için Dify Enterprise lisansının süresi doldu. Dify\'ı kullanmaya devam etmek için lütfen yöneticinizle iletişime geçin.',
|
||||
licenseLostTip: 'Dify lisans sunucusuna bağlanılamadı. Dify\'ı kullanmaya devam etmek için lütfen yöneticinizle iletişime geçin.',
|
||||
licenseInactiveTip: 'Çalışma alanınız için Dify Enterprise lisansı etkin değil. Dify\'ı kullanmaya devam etmek için lütfen yöneticinizle iletişime geçin.',
|
||||
licenseExpired: 'Lisansın Süresi Doldu',
|
||||
licenseLost: 'Lisans Kaybedildi',
|
||||
licenseInactive: 'Lisans Etkin Değil',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -408,6 +408,7 @@ const translation = {
|
|||
},
|
||||
type: 'Tür',
|
||||
binaryFileVariable: 'İkili Dosya Değişkeni',
|
||||
extractListPlaceholder: 'Liste öğesi dizinini girin, \'/\' yazın değişken ekle',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Giriş Değişkenleri',
|
||||
|
@ -619,6 +620,7 @@ const translation = {
|
|||
filterConditionComparisonValue: 'Filtre Koşulu değeri',
|
||||
selectVariableKeyPlaceholder: 'Alt değişken anahtarını seçin',
|
||||
desc: 'DESC',
|
||||
extractsCondition: 'N öğesini ayıklayın',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -592,6 +592,10 @@ const translation = {
|
|||
uploadFromComputerReadError: 'Не вдалося прочитати файл, будь ласка, спробуйте ще раз.',
|
||||
uploadFromComputerUploadError: 'Не вдалося завантажити файл, будь ласка, завантажте ще раз.',
|
||||
},
|
||||
license: {
|
||||
expiring: 'Термін дії закінчується за один день',
|
||||
expiring_plural: 'Термін дії закінчується за {{count}} днів',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
noLoginMethodTip: 'Будь ласка, зверніться до адміністратора системи, щоб додати метод автентифікації.',
|
||||
resetPasswordDesc: 'Введіть адресу електронної пошти, яку ви використовували для реєстрації на Dify, і ми надішлемо вам електронний лист для скидання пароля.',
|
||||
resetPassword: 'Скинути пароль',
|
||||
licenseLostTip: 'Не вдалося підключити сервер ліцензій Dify. Будь ласка, зверніться до свого адміністратора, щоб продовжити користуватися Dify.',
|
||||
licenseExpired: 'Термін дії ліцензії минув',
|
||||
licenseInactive: 'Ліцензія неактивна',
|
||||
licenseLost: 'Ліцензію втрачено',
|
||||
licenseInactiveTip: 'Ліцензія Dify Enterprise для вашої робочої області неактивна. Будь ласка, зверніться до свого адміністратора, щоб продовжити користуватися Dify.',
|
||||
licenseExpiredTip: 'Термін дії ліцензії Dify Enterprise для вашого робочого простору закінчився. Будь ласка, зверніться до свого адміністратора, щоб продовжити користуватися Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: 'Тип',
|
||||
binaryFileVariable: 'Змінна двійкового файлу',
|
||||
extractListPlaceholder: 'Введіть індекс елемента списку, введіть \'/\' вставити змінну',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Вхідні змінні',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
orderBy: 'Замовити по',
|
||||
filterConditionComparisonOperator: 'Оператор порівняння умов фільтра',
|
||||
filterConditionComparisonValue: 'Значення умови фільтра',
|
||||
extractsCondition: 'Витягніть елемент N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
uploadFromComputerUploadError: 'Tải lên tệp không thành công, vui lòng tải lên lại.',
|
||||
uploadFromComputerReadError: 'Đọc tệp không thành công, vui lòng thử lại.',
|
||||
},
|
||||
license: {
|
||||
expiring_plural: 'Hết hạn sau {{count}} ngày',
|
||||
expiring: 'Hết hạn trong một ngày',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
usePassword: 'Sử dụng mật khẩu',
|
||||
resetPassword: 'Đặt lại mật khẩu',
|
||||
sendVerificationCode: 'Gửi mã xác minh',
|
||||
licenseInactive: 'Giấy phép không hoạt động',
|
||||
licenseLost: 'Mất giấy phép',
|
||||
licenseInactiveTip: 'Giấy phép Dify Enterprise cho không gian làm việc của bạn không hoạt động. Vui lòng liên hệ với quản trị viên của bạn để tiếp tục sử dụng Dify.',
|
||||
licenseExpired: 'Giấy phép đã hết hạn',
|
||||
licenseExpiredTip: 'Giấy phép Dify Enterprise cho không gian làm việc của bạn đã hết hạn. Vui lòng liên hệ với quản trị viên của bạn để tiếp tục sử dụng Dify.',
|
||||
licenseLostTip: 'Không thể kết nối máy chủ cấp phép Dify. Vui lòng liên hệ với quản trị viên của bạn để tiếp tục sử dụng Dify.',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
binaryFileVariable: 'Biến tệp nhị phân',
|
||||
type: 'Kiểu',
|
||||
extractListPlaceholder: 'Nhập chỉ mục mục danh sách, nhập \'/\' chèn biến',
|
||||
},
|
||||
code: {
|
||||
inputVars: 'Biến đầu vào',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
filterCondition: 'Điều kiện lọc',
|
||||
asc: 'ASC',
|
||||
filterConditionComparisonOperator: 'Toán tử so sánh điều kiện bộ lọc',
|
||||
extractsCondition: 'Giải nén mục N',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
created: '标签创建成功',
|
||||
failed: '标签创建失败',
|
||||
},
|
||||
license: {
|
||||
expiring: '许可证还有 1 天到期',
|
||||
expiring_plural: '许可证还有 {{count}} 天到期',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
back: '返回',
|
||||
noLoginMethod: '未配置身份认证方式',
|
||||
noLoginMethodTip: '请联系系统管理员添加身份认证方式',
|
||||
licenseExpired: '许可证已过期',
|
||||
licenseExpiredTip: '您所在空间的 Dify Enterprise 许可证已过期,请联系管理员以继续使用 Dify。',
|
||||
licenseLost: '许可证丢失',
|
||||
licenseLostTip: '无法连接 Dify 许可证服务器,请联系管理员以继续使用 Dify。',
|
||||
licenseInactive: '许可证未激活',
|
||||
licenseInactiveTip: '您所在空间的 Dify Enterprise 许可证尚未激活,请联系管理员以继续使用 Dify。',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -591,6 +591,10 @@ const translation = {
|
|||
fileExtensionNotSupport: '不支援檔擴展名',
|
||||
uploadFromComputerLimit: '上傳文件不能超過 {{size}}',
|
||||
},
|
||||
license: {
|
||||
expiring: '將在1天內過期',
|
||||
expiring_plural: '將在 {{count}} 天后過期',
|
||||
},
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -99,6 +99,12 @@ const translation = {
|
|||
back: '返回',
|
||||
resetPasswordDesc: '輸入您用於註冊 Dify 的電子郵件,我們將向您發送一封密碼重置電子郵件。',
|
||||
usePassword: '使用密碼',
|
||||
licenseExpiredTip: '您的工作區的 Dify Enterprise 許可證已過期。請聯繫您的管理員以繼續使用 Dify。',
|
||||
licenseExpired: '許可證已過期',
|
||||
licenseLost: '許可證丟失',
|
||||
licenseInactive: '許可證處於非活動狀態',
|
||||
licenseInactiveTip: '您的工作區的 Dify Enterprise 許可證處於非活動狀態。請聯繫您的管理員以繼續使用 Dify。',
|
||||
licenseLostTip: '無法連接 Dify 許可證伺服器。請聯繫您的管理員以繼續使用 Dify。',
|
||||
}
|
||||
|
||||
export default translation
|
||||
|
|
|
@ -407,6 +407,7 @@ const translation = {
|
|||
},
|
||||
type: '類型',
|
||||
binaryFileVariable: '二進位檔變數',
|
||||
extractListPlaceholder: '輸入清單項索引,鍵入 『/』 插入變數',
|
||||
},
|
||||
code: {
|
||||
inputVars: '輸入變量',
|
||||
|
@ -618,6 +619,7 @@ const translation = {
|
|||
selectVariableKeyPlaceholder: 'Select sub variable key (選擇子變數鍵)',
|
||||
filterConditionComparisonOperator: 'Filter Condition Comparison 運算符',
|
||||
filterConditionKey: '篩選條件鍵',
|
||||
extractsCondition: '提取第 N 項',
|
||||
},
|
||||
},
|
||||
tracing: {
|
||||
|
|
|
@ -17,6 +17,7 @@ import type {
|
|||
WorkflowStartedResponse,
|
||||
} from '@/types/workflow'
|
||||
import { removeAccessToken } from '@/app/components/share/utils'
|
||||
import { asyncRunSafe } from '@/utils'
|
||||
const TIME_OUT = 100000
|
||||
|
||||
const ContentType = {
|
||||
|
@ -550,55 +551,78 @@ export const ssePost = (
|
|||
}
|
||||
|
||||
// base request
|
||||
export const request = <T>(url: string, options = {}, otherOptions?: IOtherOptions) => {
|
||||
return new Promise<T>((resolve, reject) => {
|
||||
export const request = async<T>(url: string, options = {}, otherOptions?: IOtherOptions) => {
|
||||
try {
|
||||
const otherOptionsForBaseFetch = otherOptions || {}
|
||||
baseFetch<T>(url, options, otherOptionsForBaseFetch).then(resolve).catch((errResp) => {
|
||||
if (errResp?.status === 401) {
|
||||
return refreshAccessTokenOrRelogin(TIME_OUT).then(() => {
|
||||
baseFetch<T>(url, options, otherOptionsForBaseFetch).then(resolve).catch(reject)
|
||||
}).catch(() => {
|
||||
const {
|
||||
isPublicAPI = false,
|
||||
silent,
|
||||
} = otherOptionsForBaseFetch
|
||||
const bodyJson = errResp.json()
|
||||
if (isPublicAPI) {
|
||||
return bodyJson.then((data: ResponseError) => {
|
||||
if (data.code === 'web_sso_auth_required')
|
||||
requiredWebSSOLogin()
|
||||
|
||||
if (data.code === 'unauthorized') {
|
||||
removeAccessToken()
|
||||
globalThis.location.reload()
|
||||
}
|
||||
|
||||
return Promise.reject(data)
|
||||
})
|
||||
}
|
||||
const loginUrl = `${globalThis.location.origin}/signin`
|
||||
bodyJson.then((data: ResponseError) => {
|
||||
if (data.code === 'init_validate_failed' && IS_CE_EDITION && !silent)
|
||||
Toast.notify({ type: 'error', message: data.message, duration: 4000 })
|
||||
else if (data.code === 'not_init_validated' && IS_CE_EDITION)
|
||||
globalThis.location.href = `${globalThis.location.origin}/init`
|
||||
else if (data.code === 'not_setup' && IS_CE_EDITION)
|
||||
globalThis.location.href = `${globalThis.location.origin}/install`
|
||||
else if (location.pathname !== '/signin' || !IS_CE_EDITION)
|
||||
globalThis.location.href = loginUrl
|
||||
else if (!silent)
|
||||
Toast.notify({ type: 'error', message: data.message })
|
||||
}).catch(() => {
|
||||
// Handle any other errors
|
||||
globalThis.location.href = loginUrl
|
||||
})
|
||||
})
|
||||
const [err, resp] = await asyncRunSafe<T>(baseFetch(url, options, otherOptionsForBaseFetch))
|
||||
if (err === null)
|
||||
return resp
|
||||
const errResp: Response = err as any
|
||||
if (errResp.status === 401) {
|
||||
const [parseErr, errRespData] = await asyncRunSafe<ResponseError>(errResp.json())
|
||||
const loginUrl = `${globalThis.location.origin}/signin`
|
||||
if (parseErr) {
|
||||
globalThis.location.href = loginUrl
|
||||
return Promise.reject(err)
|
||||
}
|
||||
else {
|
||||
reject(errResp)
|
||||
// special code
|
||||
const { code, message } = errRespData
|
||||
// webapp sso
|
||||
if (code === 'web_sso_auth_required') {
|
||||
requiredWebSSOLogin()
|
||||
return Promise.reject(err)
|
||||
}
|
||||
})
|
||||
})
|
||||
if (code === 'unauthorized_and_force_logout') {
|
||||
localStorage.removeItem('console_token')
|
||||
localStorage.removeItem('refresh_token')
|
||||
globalThis.location.reload()
|
||||
return Promise.reject(err)
|
||||
}
|
||||
const {
|
||||
isPublicAPI = false,
|
||||
silent,
|
||||
} = otherOptionsForBaseFetch
|
||||
if (isPublicAPI && code === 'unauthorized') {
|
||||
removeAccessToken()
|
||||
globalThis.location.reload()
|
||||
return Promise.reject(err)
|
||||
}
|
||||
if (code === 'init_validate_failed' && IS_CE_EDITION && !silent) {
|
||||
Toast.notify({ type: 'error', message, duration: 4000 })
|
||||
return Promise.reject(err)
|
||||
}
|
||||
if (code === 'not_init_validated' && IS_CE_EDITION) {
|
||||
globalThis.location.href = `${globalThis.location.origin}/init`
|
||||
return Promise.reject(err)
|
||||
}
|
||||
if (code === 'not_setup' && IS_CE_EDITION) {
|
||||
globalThis.location.href = `${globalThis.location.origin}/install`
|
||||
return Promise.reject(err)
|
||||
}
|
||||
|
||||
// refresh token
|
||||
const [refreshErr] = await asyncRunSafe(refreshAccessTokenOrRelogin(TIME_OUT))
|
||||
if (refreshErr === null)
|
||||
return baseFetch<T>(url, options, otherOptionsForBaseFetch)
|
||||
if (location.pathname !== '/signin' || !IS_CE_EDITION) {
|
||||
globalThis.location.href = loginUrl
|
||||
return Promise.reject(err)
|
||||
}
|
||||
if (!silent) {
|
||||
Toast.notify({ type: 'error', message })
|
||||
return Promise.reject(err)
|
||||
}
|
||||
globalThis.location.href = loginUrl
|
||||
return Promise.reject(err)
|
||||
}
|
||||
else {
|
||||
return Promise.reject(err)
|
||||
}
|
||||
}
|
||||
catch (error) {
|
||||
console.error(error)
|
||||
return Promise.reject(error)
|
||||
}
|
||||
}
|
||||
|
||||
// request methods
|
||||
|
|
|
@ -4,6 +4,20 @@ export enum SSOProtocol {
|
|||
OAuth2 = 'oauth2',
|
||||
}
|
||||
|
||||
export enum LicenseStatus {
|
||||
NONE = 'none',
|
||||
INACTIVE = 'inactive',
|
||||
ACTIVE = 'active',
|
||||
EXPIRING = 'expiring',
|
||||
EXPIRED = 'expired',
|
||||
LOST = 'lost',
|
||||
}
|
||||
|
||||
type License = {
|
||||
status: LicenseStatus
|
||||
expired_at: string | null
|
||||
}
|
||||
|
||||
export type SystemFeatures = {
|
||||
sso_enforced_for_signin: boolean
|
||||
sso_enforced_for_signin_protocol: SSOProtocol | ''
|
||||
|
@ -15,6 +29,7 @@ export type SystemFeatures = {
|
|||
enable_social_oauth_login: boolean
|
||||
is_allow_create_workspace: boolean
|
||||
is_allow_register: boolean
|
||||
license: License
|
||||
}
|
||||
|
||||
export const defaultSystemFeatures: SystemFeatures = {
|
||||
|
@ -28,4 +43,8 @@ export const defaultSystemFeatures: SystemFeatures = {
|
|||
enable_social_oauth_login: false,
|
||||
is_allow_create_workspace: false,
|
||||
is_allow_register: false,
|
||||
license: {
|
||||
status: LicenseStatus.NONE,
|
||||
expired_at: '',
|
||||
},
|
||||
}
|
||||
|
|
|
@ -8,10 +8,8 @@ export async function asyncRunSafe<T = any>(fn: Promise<T>): Promise<[Error] | [
|
|||
try {
|
||||
return [null, await fn]
|
||||
}
|
||||
catch (e) {
|
||||
if (e instanceof Error)
|
||||
return [e]
|
||||
return [new Error('unknown error')]
|
||||
catch (e: any) {
|
||||
return [e || new Error('unknown error')]
|
||||
}
|
||||
}
|
||||
|
||||
|
|
Loading…
Reference in New Issue
Block a user