From 886758d2be4c40492e5ec7a8bfcc47d2b99f9cd6 Mon Sep 17 00:00:00 2001 From: Bowen Liang Date: Thu, 26 Dec 2024 17:42:32 +0800 Subject: [PATCH 01/37] fix: typo in clean messages periodical task's logging (#12090) --- api/schedule/clean_messages.py | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/api/schedule/clean_messages.py b/api/schedule/clean_messages.py index 48bdc872f41e5c..5e4d3ec323e41d 100644 --- a/api/schedule/clean_messages.py +++ b/api/schedule/clean_messages.py @@ -28,7 +28,6 @@ def clean_messages(): plan_sandbox_clean_message_day = datetime.datetime.now() - datetime.timedelta( days=dify_config.PLAN_SANDBOX_CLEAN_MESSAGE_DAY_SETTING ) - page = 1 while True: try: # Main query with join and filter @@ -79,4 +78,4 @@ def clean_messages(): db.session.query(Message).filter(Message.id == message.id).delete() db.session.commit() end_at = time.perf_counter() - click.echo(click.style("Cleaned unused dataset from db success latency: {}".format(end_at - start_at), fg="green")) + click.echo(click.style("Cleaned messages from db success latency: {}".format(end_at - start_at), fg="green")) From cf00ee42f533942f2911037e103293403638a423 Mon Sep 17 00:00:00 2001 From: Jyong <76649700+JohnJyong@users.noreply.github.com> Date: Thu, 26 Dec 2024 18:14:08 +0800 Subject: [PATCH 02/37] send knowledge base auto disable notification (#12126) --- api/extensions/ext_celery.py | 6 ++ .../mail_clean_document_notify_task.py | 77 +++++++++++++------ .../clean_document_job_mail_template-US.html | 14 ++-- 3 files changed, 66 insertions(+), 31 deletions(-) diff --git a/api/extensions/ext_celery.py b/api/extensions/ext_celery.py index 30f216ff95612b..26bd6b357712c9 100644 --- a/api/extensions/ext_celery.py +++ b/api/extensions/ext_celery.py @@ -69,6 +69,7 @@ def __call__(self, *args: object, **kwargs: object) -> object: "schedule.create_tidb_serverless_task", "schedule.update_tidb_serverless_status_task", "schedule.clean_messages", + "schedule.mail_clean_document_notify_task", ] day = dify_config.CELERY_BEAT_SCHEDULER_TIME beat_schedule = { @@ -92,6 +93,11 @@ def __call__(self, *args: object, **kwargs: object) -> object: "task": "schedule.clean_messages.clean_messages", "schedule": timedelta(days=day), }, + # every Monday + "mail_clean_document_notify_task": { + "task": "schedule.mail_clean_document_notify_task.mail_clean_document_notify_task", + "schedule": crontab(minute="0", hour="10", day_of_week="1"), + }, } celery_app.conf.update(beat_schedule=beat_schedule, imports=imports) diff --git a/api/schedule/mail_clean_document_notify_task.py b/api/schedule/mail_clean_document_notify_task.py index 766954a257371f..fe6839288d8503 100644 --- a/api/schedule/mail_clean_document_notify_task.py +++ b/api/schedule/mail_clean_document_notify_task.py @@ -3,14 +3,18 @@ from collections import defaultdict import click -from celery import shared_task # type: ignore +from flask import render_template # type: ignore +import app +from configs import dify_config +from extensions.ext_database import db from extensions.ext_mail import mail from models.account import Account, Tenant, TenantAccountJoin from models.dataset import Dataset, DatasetAutoDisableLog +from services.feature_service import FeatureService -@shared_task(queue="mail") +@app.celery.task(queue="dataset") def send_document_clean_notify_task(): """ Async Send document clean notify mail @@ -29,35 +33,58 @@ def send_document_clean_notify_task(): # group by tenant_id dataset_auto_disable_logs_map: dict[str, list[DatasetAutoDisableLog]] = defaultdict(list) for dataset_auto_disable_log in dataset_auto_disable_logs: + if dataset_auto_disable_log.tenant_id not in dataset_auto_disable_logs_map: + dataset_auto_disable_logs_map[dataset_auto_disable_log.tenant_id] = [] dataset_auto_disable_logs_map[dataset_auto_disable_log.tenant_id].append(dataset_auto_disable_log) - + url = f"{dify_config.CONSOLE_WEB_URL}/datasets" for tenant_id, tenant_dataset_auto_disable_logs in dataset_auto_disable_logs_map.items(): - knowledge_details = [] - tenant = Tenant.query.filter(Tenant.id == tenant_id).first() - if not tenant: - continue - current_owner_join = TenantAccountJoin.query.filter_by(tenant_id=tenant.id, role="owner").first() - if not current_owner_join: - continue - account = Account.query.filter(Account.id == current_owner_join.account_id).first() - if not account: - continue - - dataset_auto_dataset_map = {} # type: ignore - for dataset_auto_disable_log in tenant_dataset_auto_disable_logs: - dataset_auto_dataset_map[dataset_auto_disable_log.dataset_id].append( - dataset_auto_disable_log.document_id - ) + features = FeatureService.get_features(tenant_id) + plan = features.billing.subscription.plan + if plan != "sandbox": + knowledge_details = [] + # check tenant + tenant = Tenant.query.filter(Tenant.id == tenant_id).first() + if not tenant: + continue + # check current owner + current_owner_join = TenantAccountJoin.query.filter_by(tenant_id=tenant.id, role="owner").first() + if not current_owner_join: + continue + account = Account.query.filter(Account.id == current_owner_join.account_id).first() + if not account: + continue - for dataset_id, document_ids in dataset_auto_dataset_map.items(): - dataset = Dataset.query.filter(Dataset.id == dataset_id).first() - if dataset: - document_count = len(document_ids) - knowledge_details.append(f"
  • Knowledge base {dataset.name}: {document_count} documents
  • ") + dataset_auto_dataset_map = {} # type: ignore + for dataset_auto_disable_log in tenant_dataset_auto_disable_logs: + if dataset_auto_disable_log.dataset_id not in dataset_auto_dataset_map: + dataset_auto_dataset_map[dataset_auto_disable_log.dataset_id] = [] + dataset_auto_dataset_map[dataset_auto_disable_log.dataset_id].append( + dataset_auto_disable_log.document_id + ) + for dataset_id, document_ids in dataset_auto_dataset_map.items(): + dataset = Dataset.query.filter(Dataset.id == dataset_id).first() + if dataset: + document_count = len(document_ids) + knowledge_details.append(rf"Knowledge base {dataset.name}: {document_count} documents") + if knowledge_details: + html_content = render_template( + "clean_document_job_mail_template-US.html", + userName=account.email, + knowledge_details=knowledge_details, + url=url, + ) + mail.send( + to=account.email, subject="Dify Knowledge base auto disable notification", html=html_content + ) + + # update notified to True + for dataset_auto_disable_log in tenant_dataset_auto_disable_logs: + dataset_auto_disable_log.notified = True + db.session.commit() end_at = time.perf_counter() logging.info( click.style("Send document clean notify mail succeeded: latency: {}".format(end_at - start_at), fg="green") ) except Exception: - logging.exception("Send invite member mail to failed") + logging.exception("Send document clean notify mail failed") diff --git a/api/templates/clean_document_job_mail_template-US.html b/api/templates/clean_document_job_mail_template-US.html index b7c9538f9f8bee..88e78f41c78b46 100644 --- a/api/templates/clean_document_job_mail_template-US.html +++ b/api/templates/clean_document_job_mail_template-US.html @@ -45,14 +45,14 @@ .content ul li { margin-bottom: 10px; } - .cta-button { + .cta-button, .cta-button:hover, .cta-button:active, .cta-button:visited, .cta-button:focus { display: block; margin: 20px auto; padding: 10px 20px; background-color: #4e89f9; - color: #ffffff; + color: #ffffff !important; text-align: center; - text-decoration: none; + text-decoration: none !important; border-radius: 5px; width: fit-content; } @@ -69,7 +69,7 @@
    - Dify Logo + Dify Logo
    @@ -78,11 +78,13 @@

    Some Documents in Your Knowledge Base Have Been Disabled

    Dear {{userName}},

    We're sorry for the inconvenience. To ensure optimal performance, documents - that haven’t been updated or accessed in the past 7 days have been disabled in + that haven’t been updated or accessed in the past 30 days have been disabled in your knowledge bases:

    You can re-enable them anytime.

    Re-enable in Dify From 4e76f2fc4411b1e711d0792b0f6f1f5e0fd52fd3 Mon Sep 17 00:00:00 2001 From: -LAN- Date: Thu, 26 Dec 2024 19:50:45 +0800 Subject: [PATCH 03/37] =?UTF-8?q?fix:=20add=20properties=20to=20retrieve?= =?UTF-8?q?=20created=20by=20account=20and=20end=20user=20in=20Wo=E2=80=A6?= =?UTF-8?q?=20(#12129)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: -LAN- --- api/models/workflow.py | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/api/models/workflow.py b/api/models/workflow.py index 32a0860b77bbea..8642df8adb55c5 100644 --- a/api/models/workflow.py +++ b/api/models/workflow.py @@ -414,6 +414,18 @@ class WorkflowRun(db.Model): # type: ignore[name-defined] finished_at = db.Column(db.DateTime) exceptions_count = db.Column(db.Integer, server_default=db.text("0")) + @property + def created_by_account(self): + created_by_role = CreatedByRole(self.created_by_role) + return db.session.get(Account, self.created_by) if created_by_role == CreatedByRole.ACCOUNT else None + + @property + def created_by_end_user(self): + from models.model import EndUser + + created_by_role = CreatedByRole(self.created_by_role) + return db.session.get(EndUser, self.created_by) if created_by_role == CreatedByRole.END_USER else None + @property def graph_dict(self): return json.loads(self.graph) if self.graph else {} From 4bd8df1fd30ee4200682b9a1f211a6dde531cc00 Mon Sep 17 00:00:00 2001 From: -LAN- Date: Thu, 26 Dec 2024 23:26:44 +0800 Subject: [PATCH 04/37] =?UTF-8?q?fix:=20update=20MessageService.create=5Ff?= =?UTF-8?q?eedback=20to=20use=20keyword=20arguments=20f=E2=80=A6=20(#12134?= =?UTF-8?q?)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: -LAN- --- api/controllers/console/explore/message.py | 9 ++++++++- api/controllers/service_api/app/message.py | 8 +++++++- api/services/message_service.py | 1 + 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/api/controllers/console/explore/message.py b/api/controllers/console/explore/message.py index 690297048eb55c..405d5ed607f639 100644 --- a/api/controllers/console/explore/message.py +++ b/api/controllers/console/explore/message.py @@ -66,10 +66,17 @@ def post(self, installed_app, message_id): parser = reqparse.RequestParser() parser.add_argument("rating", type=str, choices=["like", "dislike", None], location="json") + parser.add_argument("content", type=str, location="json") args = parser.parse_args() try: - MessageService.create_feedback(app_model, message_id, current_user, args.get("rating"), args.get("content")) + MessageService.create_feedback( + app_model=app_model, + message_id=message_id, + user=current_user, + rating=args.get("rating"), + content=args.get("content"), + ) except services.errors.message.MessageNotExistsError: raise NotFound("Message Not Exists.") diff --git a/api/controllers/service_api/app/message.py b/api/controllers/service_api/app/message.py index bed89a99a58683..773ea0e0c69385 100644 --- a/api/controllers/service_api/app/message.py +++ b/api/controllers/service_api/app/message.py @@ -108,7 +108,13 @@ def post(self, app_model: App, end_user: EndUser, message_id): args = parser.parse_args() try: - MessageService.create_feedback(app_model, message_id, end_user, args.get("rating"), args.get("content")) + MessageService.create_feedback( + app_model=app_model, + message_id=message_id, + user=end_user, + rating=args.get("rating"), + content=args.get("content"), + ) except services.errors.message.MessageNotExistsError: raise NotFound("Message Not Exists.") diff --git a/api/services/message_service.py b/api/services/message_service.py index c4447a84da5e09..c17122ef647ecd 100644 --- a/api/services/message_service.py +++ b/api/services/message_service.py @@ -152,6 +152,7 @@ def pagination_by_last_id( @classmethod def create_feedback( cls, + *, app_model: App, message_id: str, user: Optional[Union[Account, EndUser]], From e765d8e69e026086bc4786ef1c765e22e5a7dc42 Mon Sep 17 00:00:00 2001 From: -LAN- Date: Thu, 26 Dec 2024 23:26:55 +0800 Subject: [PATCH 05/37] fix: validate imported_version type in AppDslService (#12135) Signed-off-by: -LAN- --- api/services/app_dsl_service.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/api/services/app_dsl_service.py b/api/services/app_dsl_service.py index 528a0dbcd39d9e..b6d6d05e589e92 100644 --- a/api/services/app_dsl_service.py +++ b/api/services/app_dsl_service.py @@ -176,6 +176,9 @@ def import_app( data["kind"] = "app" imported_version = data.get("version", "0.1.0") + # check if imported_version is a float-like string + if not isinstance(imported_version, str): + raise ValueError(f"Invalid version type, expected str, got {type(imported_version)}") status = _check_version_compatibility(imported_version) # Extract app data From be7877f5265ba989503031aba580757b06c5221a Mon Sep 17 00:00:00 2001 From: -LAN- Date: Thu, 26 Dec 2024 23:31:29 +0800 Subject: [PATCH 06/37] fix: enhance file upload error handling and update base error class (#12132) Signed-off-by: -LAN- --- .../service_api/dataset/document.py | 29 ++++++++++++------- api/services/errors/base.py | 2 +- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/api/controllers/service_api/dataset/document.py b/api/controllers/service_api/dataset/document.py index 84c58c62df5b3c..ea664b8f1be4d4 100644 --- a/api/controllers/service_api/dataset/document.py +++ b/api/controllers/service_api/dataset/document.py @@ -8,12 +8,16 @@ import services.dataset_service from controllers.common.errors import FilenameNotExistsError from controllers.service_api import api -from controllers.service_api.app.error import ProviderNotInitializeError +from controllers.service_api.app.error import ( + FileTooLargeError, + NoFileUploadedError, + ProviderNotInitializeError, + TooManyFilesError, + UnsupportedFileTypeError, +) from controllers.service_api.dataset.error import ( ArchivedDocumentImmutableError, DocumentIndexingError, - NoFileUploadedError, - TooManyFilesError, ) from controllers.service_api.wraps import DatasetApiResource, cloud_edition_billing_resource_check from core.errors.error import ProviderTokenNotInitError @@ -238,13 +242,18 @@ def post(self, tenant_id, dataset_id, document_id): if not file.filename: raise FilenameNotExistsError - upload_file = FileService.upload_file( - filename=file.filename, - content=file.read(), - mimetype=file.mimetype, - user=current_user, - source="datasets", - ) + try: + upload_file = FileService.upload_file( + filename=file.filename, + content=file.read(), + mimetype=file.mimetype, + user=current_user, + source="datasets", + ) + except services.errors.file.FileTooLargeError as file_too_large_error: + raise FileTooLargeError(file_too_large_error.description) + except services.errors.file.UnsupportedFileTypeError: + raise UnsupportedFileTypeError() data_source = {"type": "upload_file", "info_list": {"file_info_list": {"file_ids": [upload_file.id]}}} args["data_source"] = data_source # validate args diff --git a/api/services/errors/base.py b/api/services/errors/base.py index 4d39f956b8c932..35ea28468e0d86 100644 --- a/api/services/errors/base.py +++ b/api/services/errors/base.py @@ -1,6 +1,6 @@ from typing import Optional -class BaseServiceError(Exception): +class BaseServiceError(ValueError): def __init__(self, description: Optional[str] = None): self.description = description From 9c3cf7b69aee593eed4460baf86bf218b22ac36f Mon Sep 17 00:00:00 2001 From: XiaoBa <94062266+XiaoBa-Yu@users.noreply.github.com> Date: Thu, 26 Dec 2024 23:32:54 +0800 Subject: [PATCH 07/37] fix: 12050 (#12109) Co-authored-by: Xiaoba Yu --- web/app/(commonLayout)/apps/hooks/useAppsQueryState.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/web/app/(commonLayout)/apps/hooks/useAppsQueryState.ts b/web/app/(commonLayout)/apps/hooks/useAppsQueryState.ts index fae5357bfc6af3..7f1f4ba659d897 100644 --- a/web/app/(commonLayout)/apps/hooks/useAppsQueryState.ts +++ b/web/app/(commonLayout)/apps/hooks/useAppsQueryState.ts @@ -37,7 +37,7 @@ function useAppsQueryState() { const syncSearchParams = useCallback((params: URLSearchParams) => { const search = params.toString() const query = search ? `?${search}` : '' - router.push(`${pathname}${query}`) + router.push(`${pathname}${query}`, { scroll: false }) }, [router, pathname]) // Update the URL search string whenever the query changes. From a2855fa24aaa615cb372aab46b6ffefb4e05e66f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Thu, 26 Dec 2024 23:33:11 +0800 Subject: [PATCH 08/37] chore: translate i18n files (#12118) Co-authored-by: laipz8200 <16485841+laipz8200@users.noreply.github.com> --- web/i18n/de-DE/common.ts | 6 ++++ web/i18n/de-DE/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/de-DE/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/de-DE/dataset-hit-testing.ts | 5 +++ web/i18n/de-DE/dataset-settings.ts | 3 ++ web/i18n/de-DE/dataset.ts | 20 ++++++++++++ web/i18n/es-ES/common.ts | 6 ++++ web/i18n/es-ES/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/es-ES/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/es-ES/dataset-hit-testing.ts | 5 +++ web/i18n/es-ES/dataset-settings.ts | 3 ++ web/i18n/es-ES/dataset.ts | 20 ++++++++++++ web/i18n/fa-IR/common.ts | 6 ++++ web/i18n/fa-IR/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/fa-IR/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/fa-IR/dataset-hit-testing.ts | 5 +++ web/i18n/fa-IR/dataset-settings.ts | 3 ++ web/i18n/fa-IR/dataset.ts | 20 ++++++++++++ web/i18n/fr-FR/common.ts | 6 ++++ web/i18n/fr-FR/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/fr-FR/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/fr-FR/dataset-hit-testing.ts | 5 +++ web/i18n/fr-FR/dataset-settings.ts | 3 ++ web/i18n/fr-FR/dataset.ts | 20 ++++++++++++ web/i18n/hi-IN/common.ts | 6 ++++ web/i18n/hi-IN/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/hi-IN/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/hi-IN/dataset-hit-testing.ts | 5 +++ web/i18n/hi-IN/dataset-settings.ts | 3 ++ web/i18n/hi-IN/dataset.ts | 20 ++++++++++++ web/i18n/it-IT/common.ts | 6 ++++ web/i18n/it-IT/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/it-IT/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/it-IT/dataset-hit-testing.ts | 5 +++ web/i18n/it-IT/dataset-settings.ts | 3 ++ web/i18n/it-IT/dataset.ts | 20 ++++++++++++ web/i18n/ja-JP/common.ts | 6 ++++ web/i18n/ja-JP/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/ja-JP/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/ja-JP/dataset-hit-testing.ts | 5 +++ web/i18n/ja-JP/dataset-settings.ts | 3 ++ web/i18n/ja-JP/dataset.ts | 20 ++++++++++++ web/i18n/ko-KR/common.ts | 6 ++++ web/i18n/ko-KR/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/ko-KR/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/ko-KR/dataset-hit-testing.ts | 5 +++ web/i18n/ko-KR/dataset-settings.ts | 3 ++ web/i18n/ko-KR/dataset.ts | 20 ++++++++++++ web/i18n/pl-PL/common.ts | 6 ++++ web/i18n/pl-PL/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/pl-PL/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/pl-PL/dataset-hit-testing.ts | 5 +++ web/i18n/pl-PL/dataset-settings.ts | 3 ++ web/i18n/pl-PL/dataset.ts | 20 ++++++++++++ web/i18n/pt-BR/common.ts | 6 ++++ web/i18n/pt-BR/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/pt-BR/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/pt-BR/dataset-hit-testing.ts | 5 +++ web/i18n/pt-BR/dataset-settings.ts | 3 ++ web/i18n/pt-BR/dataset.ts | 20 ++++++++++++ web/i18n/ro-RO/common.ts | 6 ++++ web/i18n/ro-RO/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/ro-RO/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/ro-RO/dataset-hit-testing.ts | 5 +++ web/i18n/ro-RO/dataset-settings.ts | 3 ++ web/i18n/ro-RO/dataset.ts | 20 ++++++++++++ web/i18n/ru-RU/common.ts | 6 ++++ web/i18n/ru-RU/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/ru-RU/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/ru-RU/dataset-hit-testing.ts | 5 +++ web/i18n/ru-RU/dataset-settings.ts | 3 ++ web/i18n/ru-RU/dataset.ts | 20 ++++++++++++ web/i18n/sl-SI/common.ts | 6 ++++ web/i18n/sl-SI/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/sl-SI/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/sl-SI/dataset-hit-testing.ts | 5 +++ web/i18n/sl-SI/dataset-settings.ts | 3 ++ web/i18n/sl-SI/dataset.ts | 20 ++++++++++++ web/i18n/th-TH/common.ts | 6 ++++ web/i18n/th-TH/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/th-TH/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/th-TH/dataset-hit-testing.ts | 5 +++ web/i18n/th-TH/dataset-settings.ts | 3 ++ web/i18n/th-TH/dataset.ts | 20 ++++++++++++ web/i18n/tr-TR/common.ts | 6 ++++ web/i18n/tr-TR/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/tr-TR/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/tr-TR/dataset-hit-testing.ts | 5 +++ web/i18n/tr-TR/dataset-settings.ts | 3 ++ web/i18n/tr-TR/dataset.ts | 20 ++++++++++++ web/i18n/uk-UA/common.ts | 6 ++++ web/i18n/uk-UA/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/uk-UA/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/uk-UA/dataset-hit-testing.ts | 5 +++ web/i18n/uk-UA/dataset-settings.ts | 3 ++ web/i18n/uk-UA/dataset.ts | 20 ++++++++++++ web/i18n/vi-VN/common.ts | 6 ++++ web/i18n/vi-VN/dataset-creation.ts | 28 ++++++++++++++++ web/i18n/vi-VN/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/vi-VN/dataset-hit-testing.ts | 5 +++ web/i18n/vi-VN/dataset-settings.ts | 3 ++ web/i18n/vi-VN/dataset.ts | 20 ++++++++++++ web/i18n/zh-Hans/dataset-creation.ts | 5 +++ web/i18n/zh-Hant/common.ts | 6 ++++ web/i18n/zh-Hant/dataset-creation.ts | 27 ++++++++++++++++ web/i18n/zh-Hant/dataset-documents.ts | 43 +++++++++++++++++++++++++ web/i18n/zh-Hant/dataset-hit-testing.ts | 5 +++ web/i18n/zh-Hant/dataset-settings.ts | 3 ++ web/i18n/zh-Hant/dataset.ts | 20 ++++++++++++ 109 files changed, 1894 insertions(+) diff --git a/web/i18n/de-DE/common.ts b/web/i18n/de-DE/common.ts index f438b4f018490d..dde421e9424bb7 100644 --- a/web/i18n/de-DE/common.ts +++ b/web/i18n/de-DE/common.ts @@ -42,6 +42,11 @@ const translation = { zoomIn: 'Vergrößern', openInNewTab: 'In neuem Tab öffnen', copyImage: 'Bild kopieren', + close: 'Schließen', + viewMore: 'MEHR SEHEN', + regenerate: 'Erneuern', + saveAndRegenerate: 'Speichern und Regenerieren von untergeordneten Chunks', + view: 'Ansehen', }, placeholder: { input: 'Bitte eingeben', @@ -474,6 +479,7 @@ const translation = { emptyTip: 'Das Wissen wurde nicht zugeordnet, bitte gehen Sie zur Anwendung oder zum Plug-in, um die Zuordnung abzuschließen.', viewDoc: 'Dokumentation anzeigen', relatedApp: 'verbundene Apps', + noRelatedApp: 'Keine verknüpften Apps', }, voiceInput: { speaking: 'Sprechen Sie jetzt...', diff --git a/web/i18n/de-DE/dataset-creation.ts b/web/i18n/de-DE/dataset-creation.ts index b27a732d1877c3..cf389d5ea79efe 100644 --- a/web/i18n/de-DE/dataset-creation.ts +++ b/web/i18n/de-DE/dataset-creation.ts @@ -82,6 +82,7 @@ const translation = { useSitemapTooltip: 'Folgen Sie der Sitemap, um die Website zu crawlen. Ist dies nicht der Fall, crawlt Jina Reader iterativ basierend auf der Seitenrelevanz, sodass weniger, aber qualitativ hochwertigere Seiten angezeigt werden.', jinaReaderDoc: 'Erfahre mehr über Jina Reader', }, + cancel: 'Abbrechen', }, stepTwo: { segmentation: 'Chunk-Einstellungen', @@ -143,6 +144,28 @@ const translation = { webpageUnit: 'Seiten', separatorTip: 'Ein Trennzeichen ist das Zeichen, das zum Trennen von Text verwendet wird. \\n\\n und \\n sind häufig verwendete Trennzeichen zum Trennen von Absätzen und Zeilen. In Kombination mit Kommas (\\n\\n,\\n) werden Absätze nach Zeilen segmentiert, wenn die maximale Blocklänge überschritten wird. Sie können auch spezielle, von Ihnen selbst definierte Trennzeichen verwenden (z. B. ***).', maxLengthCheck: 'Die maximale Stücklänge sollte weniger als {{limit}} betragen', + switch: 'Schalter', + previewChunk: 'Vorschau Chunk', + highQualityTip: 'Sobald die Einbettung im Modus "Hohe Qualität" abgeschlossen ist, ist es nicht mehr möglich, in den Modus "Wirtschaftlich" zurückzukehren.', + parentChildTip: 'Wenn Sie den Parent-Child-Modus verwenden, wird der Child-Chunk für den Abruf und der Parent-Chunk für den Abruf als Kontext verwendet.', + fullDoc: 'Vollständiges Dokument', + parentChildDelimiterTip: 'Ein Trennzeichen ist das Zeichen, das zum Trennen von Text verwendet wird. \\n\\n wird empfohlen, um das Originaldokument in große übergeordnete Blöcke aufzuteilen. Sie können auch spezielle Trennzeichen verwenden, die Sie selbst definiert haben.', + qaSwitchHighQualityTipContent: 'Derzeit unterstützt nur eine hochwertige Indexmethode das Q&A-Format-Chunking. Möchten Sie in den High-Quality-Modus wechseln?', + childChunkForRetrieval: 'Child-Chunk zum Abrufen', + previewChunkCount: '{{Anzahl}} Geschätzte Chunks', + previewChunkTip: 'Klicken Sie auf die Schaltfläche "Preview Chunk" auf der linken Seite, um die Vorschau zu laden', + qaSwitchHighQualityTipTitle: 'Das Q&A-Format erfordert eine qualitativ hochwertige Indizierungsmethode', + general: 'Allgemein', + generalTip: 'Allgemeiner Text-Chunking-Modus, die abgerufenen und zurückgerufenen Chunks sind gleich.', + notAvailableForQA: 'Nicht verfügbar für Q&A Index', + notAvailableForParentChild: 'Nicht verfügbar für den Parent-Child-Index', + parentChild: 'Eltern-Kind', + parentChunkForContext: 'Parent-chunk für Context', + parentChildChunkDelimiterTip: 'Ein Trennzeichen ist das Zeichen, das zum Trennen von Text verwendet wird. \\n wird empfohlen, um übergeordnete Blöcke in kleine untergeordnete Blöcke aufzuteilen. Sie können auch spezielle Trennzeichen verwenden, die Sie selbst definiert haben.', + useQALanguage: 'Chunk im Q&A-Format in', + paragraph: 'Absatz', + fullDocTip: 'Das gesamte Dokument wird als übergeordneter Block verwendet und direkt abgerufen. Bitte beachten Sie, dass aus Leistungsgründen Texte, die 10000 Token überschreiten, automatisch abgeschnitten werden.', + paragraphTip: 'In diesem Modus wird der Text basierend auf Trennzeichen und der maximalen Blocklänge in Absätze aufgeteilt, wobei der geteilte Text als übergeordneter Block für den Abruf verwendet wird.', }, stepThree: { creationTitle: '🎉 Wissen erstellt', @@ -171,6 +194,11 @@ const translation = { apiKeyPlaceholder: 'API-Schlüssel von jina.ai', getApiKeyLinkText: 'Holen Sie sich Ihren kostenlosen API-Schlüssel bei jina.ai', }, + otherDataSource: { + learnMore: 'Weitere Informationen', + title: 'Verbinden Sie sich mit anderen Datenquellen?', + description: 'Derzeit verfügt die Wissensdatenbank von Dify nur über begrenzte Datenquellen. Das Beitragen einer Datenquelle zur Dify-Wissensdatenbank ist eine fantastische Möglichkeit, die Flexibilität und Leistungsfähigkeit der Plattform für alle Benutzer zu verbessern. Unser Beitragsleitfaden erleichtert Ihnen den Einstieg. Bitte klicken Sie auf den untenstehenden Link, um mehr zu erfahren.', + }, } export default translation diff --git a/web/i18n/de-DE/dataset-documents.ts b/web/i18n/de-DE/dataset-documents.ts index 114a73544d4991..16bb6349cf8f15 100644 --- a/web/i18n/de-DE/dataset-documents.ts +++ b/web/i18n/de-DE/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: 'HOCHLADEZEIT', status: 'STATUS', action: 'AKTION', + chunkingMode: 'CHUNKING-MODUS', }, name: 'Name', rename: 'Umbenennen', @@ -77,6 +78,7 @@ const translation = { ok: 'OK', }, addUrl: 'URL hinzufügen', + learnMore: 'Weitere Informationen', }, metadata: { title: 'Metadaten', @@ -328,6 +330,10 @@ const translation = { automatic: 'Automatisch', custom: 'Benutzerdefiniert', previewTip: 'Absatzvorschau ist nach Abschluss der Einbettung verfügbar', + parentMaxTokens: 'Elternteil', + childMaxTokens: 'Kind', + hierarchical: 'Eltern-Kind', + pause: 'Pause', }, segment: { paragraphs: 'Absätze', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Neues Textsegment', newQaSegment: 'Neues Q&A-Segment', delete: 'Diesen Chunk löschen?', + parentChunks_one: 'ÜBERGEORDNETER CHUNK', + searchResults_other: 'BEFUND', + clearFilter: 'Filter löschen', + chunk: 'Stück', + childChunk: 'Untergeordneter Brocken', + newChildChunk: 'Neuer untergeordneter Block', + chunkDetail: 'Chunk-Detail', + regeneratingMessage: 'Das kann einen Moment dauern, bitte warten...', + searchResults_zero: 'ERGEBNIS', + parentChunks_other: 'ÜBERGEORDNETE BLÖCKE', + editParentChunk: 'Übergeordneter Block bearbeiten', + childChunks_other: 'UNTERGEORDNETE BLÖCKE', + editChunk: 'Chunk bearbeiten', + regenerationSuccessTitle: 'Regeneration abgeschlossen', + parentChunk: 'Übergeordneter Chunk', + childChunkAdded: '1 untergeordneter Block hinzugefügt', + edited: 'BEARBEITETE', + collapseChunks: 'Blöcke reduzieren', + empty: 'Kein Chunk gefunden', + regenerationSuccessMessage: 'Sie können dieses Fenster schließen.', + chunks_other: 'STÜCKE', + regenerationConfirmMessage: 'Beim Regenerieren von untergeordneten Blöcken werden die aktuellen untergeordneten Blöcke überschrieben, einschließlich bearbeiteter und neu hinzugefügter Blöcke. Die Regeneration kann nicht rückgängig gemacht werden.', + childChunks_one: 'UNTERGEORDNETER CHUNK', + characters_other: 'Zeichen', + newChunk: 'Neuer Brocken', + editChildChunk: 'Untergeordneten Block bearbeiten', + chunkAdded: '1 Stück hinzugefügt', + expandChunks: 'Blöcke erweitern', + editedAt: 'Bearbeitet am', + addChunk: 'Block hinzufügen', + addAnother: 'Fügen Sie eine weitere hinzu', + regeneratingTitle: 'Regenerieren von untergeordneten Blöcken', + chunks_one: 'STÜCK', + characters_one: 'Zeichen', + addChildChunk: 'Untergeordneten Block hinzufügen', + regenerationConfirmTitle: 'Möchten Sie untergeordnete Chunks regenerieren?', + searchResults_one: 'ERGEBNIS', }, } diff --git a/web/i18n/de-DE/dataset-hit-testing.ts b/web/i18n/de-DE/dataset-hit-testing.ts index eb9e85238cd7da..cb96b226898cf0 100644 --- a/web/i18n/de-DE/dataset-hit-testing.ts +++ b/web/i18n/de-DE/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'VEKTORDIAGRAMM ansehen', viewDetail: 'Im Detail sehen', settingTitle: 'Einstellung für den Abruf', + records: 'Aufzeichnungen', + open: 'Offen', + hitChunks: 'Klicken Sie auf {{num}} untergeordnete Chunks', + keyword: 'Schlüsselwörter', + chunkDetail: 'Chunk-Detail', } export default translation diff --git a/web/i18n/de-DE/dataset-settings.ts b/web/i18n/de-DE/dataset-settings.ts index 7c07f5b6e4b888..c871e13d4bd486 100644 --- a/web/i18n/de-DE/dataset-settings.ts +++ b/web/i18n/de-DE/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeID: 'ID für externes Wissen', externalKnowledgeAPI: 'API für externes Wissen', retrievalSettings: 'Einstellungen für den Abruf', + upgradeHighQualityTip: 'Nach dem Upgrade auf den Modus "Hohe Qualität" ist das Zurücksetzen auf den Modus "Wirtschaftlich" nicht mehr möglich', + helpText: 'Erfahren Sie, wie Sie eine gute Datensatzbeschreibung schreiben.', + indexMethodChangeToEconomyDisabledTip: 'Nicht verfügbar für ein Downgrade von HQ auf ECO', }, } diff --git a/web/i18n/de-DE/dataset.ts b/web/i18n/de-DE/dataset.ts index 86ac623a6f1294..e0bc91723c6a5e 100644 --- a/web/i18n/de-DE/dataset.ts +++ b/web/i18n/de-DE/dataset.ts @@ -146,6 +146,26 @@ const translation = { mixtureInternalAndExternalTip: 'Das Rerank-Modell ist für die Mischung von internem und externem Wissen erforderlich.', externalKnowledgeId: 'ID für externes Wissen', editExternalAPIFormTitle: 'Bearbeiten der API für externes Wissen', + chunkingMode: { + parentChild: 'Eltern-Kind', + general: 'Allgemein', + }, + parentMode: { + paragraph: 'Absatz', + fullDoc: 'Vollständiges Dokument', + }, + batchAction: { + selected: 'Ausgewählt', + cancel: 'Abbrechen', + archive: 'Archiv', + disable: 'Abschalten', + delete: 'Löschen', + enable: 'Ermöglichen', + }, + enable: 'Ermöglichen', + localDocs: 'Lokale Dokumente', + preprocessDocument: '{{num}} Vorverarbeiten von Dokumenten', + documentsDisabled: '{{num}} Dokumente deaktiviert - seit über 30 Tagen inaktiv', } export default translation diff --git a/web/i18n/es-ES/common.ts b/web/i18n/es-ES/common.ts index 2540632758c05c..cf076fa8c004bb 100644 --- a/web/i18n/es-ES/common.ts +++ b/web/i18n/es-ES/common.ts @@ -42,6 +42,11 @@ const translation = { zoomIn: 'Acercar', openInNewTab: 'Abrir en una nueva pestaña', copyImage: 'Copiar imagen', + viewMore: 'VER MÁS', + regenerate: 'Regenerar', + close: 'Cerrar', + saveAndRegenerate: 'Guardar y regenerar fragmentos secundarios', + view: 'Vista', }, errorMsg: { fieldRequired: '{{field}} es requerido', @@ -478,6 +483,7 @@ const translation = { emptyTip: 'El Conocimiento no ha sido asociado, por favor ve a la aplicación o plugin para completar la asociación.', viewDoc: 'Ver documentación', relatedApp: 'aplicaciones vinculadas', + noRelatedApp: 'No hay aplicaciones vinculadas', }, voiceInput: { speaking: 'Habla ahora...', diff --git a/web/i18n/es-ES/dataset-creation.ts b/web/i18n/es-ES/dataset-creation.ts index 2b6cac1b0ee0ad..00b71ecfa5541e 100644 --- a/web/i18n/es-ES/dataset-creation.ts +++ b/web/i18n/es-ES/dataset-creation.ts @@ -87,6 +87,7 @@ const translation = { chooseProvider: 'Seleccione un proveedor', jinaReaderDoc: 'Más información sobre Jina Reader', }, + cancel: 'Cancelar', }, stepTwo: { segmentation: 'Configuración de fragmentos', @@ -148,6 +149,28 @@ const translation = { datasetSettingLink: 'configuración del conocimiento.', separatorTip: 'Un delimitador es el carácter que se utiliza para separar el texto. \\n\\n y \\n son delimitadores comúnmente utilizados para separar párrafos y líneas. Combinado con comas (\\n\\n,\\n), los párrafos se segmentarán por líneas cuando excedan la longitud máxima del fragmento. También puede utilizar delimitadores especiales definidos por usted mismo (por ejemplo, ***).', maxLengthCheck: 'La longitud máxima del fragmento debe ser inferior a {{limit}}', + previewChunkTip: 'Haga clic en el botón \'Vista previa de fragmento\' a la izquierda para cargar la vista previa', + parentChildChunkDelimiterTip: 'Un delimitador es el carácter que se utiliza para separar el texto. \\n se recomienda para dividir fragmentos primarios en fragmentos secundarios pequeños. También puede utilizar delimitadores especiales definidos por usted mismo.', + parentChildTip: 'Cuando se utiliza el modo padre-hijo, el fragmento secundario se utiliza para la recuperación y el fragmento primario se utiliza para la recuperación como contexto.', + switch: 'Interruptor', + parentChild: 'Padre-hijo', + childChunkForRetrieval: 'Fragmento secundario para la recuperación', + previewChunk: 'Fragmento de vista previa', + notAvailableForParentChild: 'No disponible para el índice de elementos primarios y secundarios', + paragraph: 'Párrafo', + parentChunkForContext: 'Fragmento primario para contexto', + fullDoc: 'Documento completo', + parentChildDelimiterTip: 'Un delimitador es el carácter que se utiliza para separar el texto. \\n\\n se recomienda para dividir el documento original en grandes fragmentos principales. También puede utilizar delimitadores especiales definidos por usted mismo.', + generalTip: 'Modo de fragmentación de texto general, los fragmentos recuperados y recuperados son los mismos.', + qaSwitchHighQualityTipContent: 'Actualmente, solo el método de índice de alta calidad admite la fragmentación en formato de preguntas y respuestas. ¿Le gustaría cambiar al modo de alta calidad?', + useQALanguage: 'Fragmento usando el formato de preguntas y respuestas en', + fullDocTip: 'Todo el documento se utiliza como fragmento principal y se recupera directamente. Tenga en cuenta que, por razones de rendimiento, el texto que supere los 10000 tokens se trunqueará automáticamente.', + paragraphTip: 'Este modo divide el texto en párrafos en función de los delimitadores y la longitud máxima del fragmento, utilizando el texto dividido como fragmento principal para la recuperación.', + highQualityTip: 'Una vez finalizada la incrustación en el modo de alta calidad, no está disponible volver al modo económico.', + notAvailableForQA: 'No disponible para el índice de preguntas y respuestas', + qaSwitchHighQualityTipTitle: 'El formato de preguntas y respuestas requiere un método de indexación de alta calidad', + previewChunkCount: '{{conteo}} Fragmentos estimados', + general: 'General', }, stepThree: { creationTitle: '🎉 Conocimiento creado', @@ -171,6 +194,11 @@ const translation = { apiKeyPlaceholder: 'Clave de API de jina.ai', getApiKeyLinkText: 'Obtén tu clave API gratuita en jina.ai', }, + otherDataSource: { + learnMore: 'Aprende más', + description: 'Actualmente, la base de conocimientos de Ifiy solo tiene fuentes de datos limitadas. Contribuir con una fuente de datos a la base de conocimientos de Dify es una manera fantástica de ayudar a mejorar la flexibilidad y el poder de la plataforma para todos los usuarios. Nuestra guía de contribuciones hace que sea fácil comenzar. Haga clic en el enlace a continuación para obtener más información.', + title: '¿Conectarse a otras fuentes de datos?', + }, } export default translation diff --git a/web/i18n/es-ES/dataset-documents.ts b/web/i18n/es-ES/dataset-documents.ts index 6a5191ce536db2..ea4690c5f53a38 100644 --- a/web/i18n/es-ES/dataset-documents.ts +++ b/web/i18n/es-ES/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'TIEMPO DE CARGA', status: 'ESTADO', action: 'ACCIÓN', + chunkingMode: 'MODO DE FRAGMENTACIÓN', }, rename: 'Renombrar', name: 'Nombre', @@ -77,6 +78,7 @@ const translation = { error: 'Error de importación', ok: 'Aceptar', }, + learnMore: 'Aprende más', }, metadata: { title: 'Metadatos', @@ -328,6 +330,10 @@ const translation = { automatic: 'Automático', custom: 'Personalizado', previewTip: 'La vista previa del párrafo estará disponible después de que se complete la incrustación', + pause: 'Pausa', + childMaxTokens: 'Niño', + hierarchical: 'Padre-hijo', + parentMaxTokens: 'Padre', }, segment: { paragraphs: 'Párrafos', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Nuevo segmento de texto', newQaSegment: 'Nuevo segmento de preguntas y respuestas', delete: '¿Eliminar este fragmento?', + chunks_one: 'PEDAZO', + childChunks_one: 'FRAGMENTO SECUNDARIO', + searchResults_other: 'RESULTADOS', + newChunk: 'Nuevo fragmento', + childChunk: 'Fragmento secundario', + addChunk: 'Agregar fragmento', + editParentChunk: 'Editar fragmento principal', + regenerationConfirmMessage: 'La regeneración de fragmentos secundarios sobrescribirá los fragmentos secundarios actuales, incluidos los fragmentos editados y los fragmentos recién agregados. La regeneración no se puede deshacer.', + addAnother: 'Añade otro', + regeneratingMessage: 'Esto puede tardar un momento, por favor espere...', + addChildChunk: 'Agregar fragmento secundario', + chunks_other: 'TROZOS', + editChunk: 'Editar fragmento', + searchResults_one: 'RESULTADO', + parentChunks_one: 'FRAGMENTO PRIMARIO', + edited: 'EDITADO', + childChunkAdded: 'Se ha añadido 1 fragmento secundario', + childChunks_other: 'FRAGMENTOS SECUNDARIOS', + chunkAdded: '1 trozo añadido', + parentChunk: 'Fragmento primario', + editChildChunk: 'Editar fragmento secundario', + regeneratingTitle: 'Regeneración de fragmentos secundarios', + editedAt: 'Editado en', + searchResults_zero: 'RESULTADO', + clearFilter: 'Borrar filtro', + newChildChunk: 'Nuevo fragmento secundario', + chunkDetail: 'Detalle de fragmentos', + chunk: 'Pedazo', + parentChunks_other: 'FRAGMENTOS PRINCIPALES', + expandChunks: 'Expandir fragmentos', + empty: 'No se ha encontrado ningún fragmento', + regenerationSuccessTitle: 'Regeneración completada', + collapseChunks: 'Contraer fragmentos', + characters_other: 'Caracteres', + characters_one: 'carácter', + regenerationSuccessMessage: 'Puede cerrar esta ventana.', + regenerationConfirmTitle: '¿Desea regenerar fragmentos secundarios?', }, } diff --git a/web/i18n/es-ES/dataset-hit-testing.ts b/web/i18n/es-ES/dataset-hit-testing.ts index 29e2af1a647279..e8faebc5ea284a 100644 --- a/web/i18n/es-ES/dataset-hit-testing.ts +++ b/web/i18n/es-ES/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'Ver GRÁFICO VECTORIAL', viewDetail: 'Ver Detalle', settingTitle: 'Configuración de recuperación', + open: 'Abrir', + records: 'Archivo', + chunkDetail: 'Detalle de fragmentos', + keyword: 'Palabras clave', + hitChunks: 'Golpea {{num}} fragmentos secundarios', } export default translation diff --git a/web/i18n/es-ES/dataset-settings.ts b/web/i18n/es-ES/dataset-settings.ts index 87f5da10108b51..211a23edd1fc6f 100644 --- a/web/i18n/es-ES/dataset-settings.ts +++ b/web/i18n/es-ES/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { retrievalSettings: 'Configuración de recuperación', externalKnowledgeID: 'ID de conocimiento externo', externalKnowledgeAPI: 'API de conocimiento externo', + indexMethodChangeToEconomyDisabledTip: 'No disponible para degradar de HQ a ECO', + helpText: 'Aprenda a escribir una buena descripción del conjunto de datos.', + upgradeHighQualityTip: 'Una vez que se actualiza al modo de alta calidad, no está disponible volver al modo económico', }, } diff --git a/web/i18n/es-ES/dataset.ts b/web/i18n/es-ES/dataset.ts index 4133eb59f8397c..5fb668f1f3b2e4 100644 --- a/web/i18n/es-ES/dataset.ts +++ b/web/i18n/es-ES/dataset.ts @@ -146,6 +146,26 @@ const translation = { learnHowToWriteGoodKnowledgeDescription: 'Aprende a escribir una buena descripción del conocimiento', externalAPIPanelDocumentation: 'Más información sobre cómo crear una API de conocimiento externo', mixtureInternalAndExternalTip: 'El modelo de Rerank es necesario para la mezcla de conocimiento interno y externo.', + chunkingMode: { + parentChild: 'Padre-hijo', + general: 'General', + }, + parentMode: { + fullDoc: 'Documento completo', + paragraph: 'Párrafo', + }, + batchAction: { + selected: 'Seleccionado', + enable: 'Habilitar', + disable: 'Inutilizar', + cancel: 'Cancelar', + archive: 'Archivo', + delete: 'Borrar', + }, + enable: 'Habilitar', + documentsDisabled: '{{num}} Documentos desactivados - inactivos durante más de 30 días', + preprocessDocument: '{{num}} Documentos de preprocesamiento', + localDocs: 'Documentos locales', } export default translation diff --git a/web/i18n/fa-IR/common.ts b/web/i18n/fa-IR/common.ts index deab852ddb31ae..46bf878c084ee1 100644 --- a/web/i18n/fa-IR/common.ts +++ b/web/i18n/fa-IR/common.ts @@ -42,6 +42,11 @@ const translation = { copyImage: 'کپی تصویر', openInNewTab: 'باز کردن در برگه جدید', zoomOut: 'کوچک نمایی', + close: 'نزدیک', + regenerate: 'بازسازی', + view: 'مشاهده', + viewMore: 'بیشتر ببینید', + saveAndRegenerate: 'ذخیره و بازسازی تکه های فرزند', }, errorMsg: { fieldRequired: '{{field}} الزامی است', @@ -478,6 +483,7 @@ const translation = { emptyTip: 'دانش مرتبط نشده است، لطفاً به برنامه یا افزونه بروید تا ارتباط را کامل کنید.', viewDoc: 'مشاهده مستندات', relatedApp: 'برنامه‌های مرتبط', + noRelatedApp: 'هیچ برنامه پیوندی وجود ندارد', }, voiceInput: { speaking: 'اکنون صحبت کنید...', diff --git a/web/i18n/fa-IR/dataset-creation.ts b/web/i18n/fa-IR/dataset-creation.ts index 0b5f42827eb1d0..b6cb6509738af9 100644 --- a/web/i18n/fa-IR/dataset-creation.ts +++ b/web/i18n/fa-IR/dataset-creation.ts @@ -87,6 +87,7 @@ const translation = { jinaReaderNotConfiguredDescription: 'با وارد کردن کلید API رایگان خود برای دسترسی، Jina Reader را راه اندازی کنید.', useSitemapTooltip: 'نقشه سایت را دنبال کنید تا سایت را بخزید. در غیر این صورت، Jina Reader بر اساس ارتباط صفحه به صورت تکراری می خزد و صفحات کمتر اما با کیفیت بالاتر را به دست می آورد.', }, + cancel: 'لغو', }, stepTwo: { segmentation: 'تنظیمات بخشبندی', @@ -148,6 +149,28 @@ const translation = { datasetSettingLink: 'تنظیمات دانش بروید.', separatorTip: 'جداکننده نویسه ای است که برای جداسازی متن استفاده می شود. \\n\\n و \\n معمولا برای جداسازی پاراگراف ها و خطوط استفاده می شوند. همراه با کاما (\\n\\n,\\n)، پاراگراف ها زمانی که از حداکثر طول تکه فراتر می روند، با خطوط تقسیم بندی می شوند. همچنین می توانید از جداکننده های خاصی که توسط خودتان تعریف شده اند استفاده کنید (مثلا ***).', maxLengthCheck: 'حداکثر طول تکه باید کمتر از {{limit}} باشد', + notAvailableForQA: 'برای شاخص پرسش و پاسخ در دسترس نیست', + parentChild: 'پدر و مادر و فرزند', + qaSwitchHighQualityTipContent: 'در حال حاضر، فقط روش شاخص با کیفیت بالا از تکه تکه کردن فرمت پرسش و پاسخ پشتیبانی می کند. آیا می خواهید به حالت با کیفیت بالا بروید؟', + previewChunk: 'پیش نمایش تکه', + previewChunkCount: '{{تعداد}} تکه های تخمینی', + previewChunkTip: 'روی دکمه "پیش نمایش قطعه" در سمت چپ کلیک کنید تا پیش نمایش بارگیری شود', + general: 'عمومی', + paragraphTip: 'این حالت متن را بر اساس جداکننده ها و حداکثر طول تکه به پاراگراف ها تقسیم می کند و از متن تقسیم شده به عنوان تکه والد برای بازیابی استفاده می کند.', + parentChunkForContext: 'تکه والد برای زمینه', + fullDoc: 'مستند کامل', + switch: 'سوئیچ', + parentChildChunkDelimiterTip: 'جداکننده نویسه ای است که برای جداسازی متن استفاده می شود. \\n برای تقسیم تکه های والد به تکه های کوچک کودک توصیه می شود. همچنین می توانید از جداکننده های ویژه ای که توسط خودتان تعریف شده است استفاده کنید.', + generalTip: 'حالت تکه تکه کردن متن عمومی، تکه های بازیابی شده و فراخوانی شده یکسان هستند.', + paragraph: 'پاراگراف', + highQualityTip: 'پس از اتمام جاسازی در حالت کیفیت بالا، بازگشت به حالت اقتصادی در دسترس نیست.', + parentChildTip: 'هنگام استفاده از حالت والد-فرزند، تکه فرزند برای بازیابی و تکه والد برای یادآوری به عنوان زمینه استفاده می شود.', + notAvailableForParentChild: 'برای نمایه والد-فرزند در دسترس نیست', + parentChildDelimiterTip: 'جداکننده نویسه ای است که برای جداسازی متن استفاده می شود. \\n\\n برای تقسیم سند اصلی به تکه های والد بزرگ توصیه می شود. همچنین می توانید از جداکننده های ویژه ای که توسط خودتان تعریف شده است استفاده کنید.', + childChunkForRetrieval: 'تکه کودک برای بازیابی', + fullDocTip: 'کل سند به عنوان تکه والد استفاده می شود و مستقیما بازیابی می شود. لطفا توجه داشته باشید که به دلایل عملکردی، متن بیش از 10000 توکن به طور خودکار کوتاه می شود.', + qaSwitchHighQualityTipTitle: 'فرمت پرسش و پاسخ به روش نمایه سازی با کیفیت بالا نیاز دارد', + useQALanguage: 'تکه با استفاده از فرمت پرسش و پاسخ در', }, stepThree: { creationTitle: ' دانش ایجاد شد', @@ -171,6 +194,11 @@ const translation = { apiKeyPlaceholder: 'کلید API از jina.ai', getApiKeyLinkText: 'کلید API رایگان خود را در jina.ai دریافت کنید', }, + otherDataSource: { + learnMore: 'بیشتر بدانید', + description: 'در حال حاضر، پایگاه دانش Dify فقط منابع داده محدودی دارد. کمک به یک منبع داده به پایگاه دانش Dify راهی فوق العاده برای کمک به افزایش انعطاف پذیری و قدرت پلتفرم برای همه کاربران است. راهنمای مشارکت ما شروع کار را آسان می کند. لطفا برای کسب اطلاعات بیشتر روی لینک زیر کلیک کنید.', + title: 'به منابع داده دیگر متصل شوید؟', + }, } export default translation diff --git a/web/i18n/fa-IR/dataset-documents.ts b/web/i18n/fa-IR/dataset-documents.ts index f136353c7b8870..ff9e47f71aaf16 100644 --- a/web/i18n/fa-IR/dataset-documents.ts +++ b/web/i18n/fa-IR/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'زمان بارگذاری', status: 'وضعیت', action: 'اقدام', + chunkingMode: 'حالت تکه تکه کردن', }, rename: 'تغییر نام', name: 'نام', @@ -77,6 +78,7 @@ const translation = { error: 'خطای واردات', ok: 'تأیید', }, + learnMore: 'بیشتر بدانید', }, metadata: { title: 'اطلاعات متا', @@ -327,6 +329,10 @@ const translation = { automatic: 'خودکار', custom: 'سفارشی', previewTip: 'پیش‌نمایش پاراگراف پس از اتمام جاسازی در دسترس خواهد بود', + parentMaxTokens: 'مادر', + pause: 'مکث', + childMaxTokens: 'کودک', + hierarchical: 'پدر و مادر و فرزند', }, segment: { paragraphs: 'پاراگراف‌ها', @@ -345,6 +351,43 @@ const translation = { newTextSegment: 'قطعه متن جدید', newQaSegment: 'قطعه پرسش و پاسخ جدید', delete: 'حذف این قطعه؟', + chunks_other: 'تکه', + characters_one: 'شخصیت', + editedAt: 'ویرایش شده در', + parentChunks_other: 'تکه های والدین', + editChunk: 'ویرایش تکه', + collapseChunks: 'جمع کردن تکه ها', + clearFilter: 'فیلتر را پاک کنید', + characters_other: 'کاراکتر', + chunkDetail: 'جزئیات تکه', + searchResults_other: 'نتیجه', + addAnother: 'اضافه کردن دیگری', + parentChunks_one: 'تکه والدین', + childChunk: 'تکه کودک', + regenerationSuccessTitle: 'بازسازی به پایان رسید', + chunk: 'تکه', + addChildChunk: 'افزودن تکه فرزند', + chunkAdded: '1 تکه اضافه شد', + childChunks_one: 'تکه کودک', + edited: 'ویرایش', + editParentChunk: 'ویرایش تکه والد', + regeneratingTitle: 'بازسازی تکه های فرزند', + expandChunks: 'تکه ها را گسترش دهید', + childChunks_other: 'تکه های کودک', + newChildChunk: 'تکه کودک جدید', + editChildChunk: 'ویرایش Child Chunk', + parentChunk: 'تکه والدین', + chunks_one: 'تکه', + empty: 'هیچ تکه ای یافت نشد', + addChunk: 'افزودن تکه', + searchResults_one: 'نتیجه', + regenerationConfirmMessage: 'بازآفرینی تکه های فرزند تکه های فرزند فعلی، از جمله تکه های ویرایش شده و تکه های تازه اضافه شده را بازنویسی می کند. بازسازی را نمی توان خنثی کرد.', + childChunkAdded: '1 تکه کودک اضافه شد', + searchResults_zero: 'نتیجه', + newChunk: 'تکه جدید', + regeneratingMessage: 'این ممکن است یک لحظه طول بکشد، لطفا صبر کنید...', + regenerationConfirmTitle: 'آیا می خواهید تکه های کودک را بازسازی کنید؟', + regenerationSuccessMessage: 'می توانید این پنجره را ببندید.', }, } diff --git a/web/i18n/fa-IR/dataset-hit-testing.ts b/web/i18n/fa-IR/dataset-hit-testing.ts index 8c78a1a21a5f97..99ce31b87067fa 100644 --- a/web/i18n/fa-IR/dataset-hit-testing.ts +++ b/web/i18n/fa-IR/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'مشاهده نمودار بُرداری', settingTitle: 'تنظیمات بازیابی', viewDetail: 'نمایش جزئیات', + records: 'سوابق', + keyword: 'کليدواژه', + hitChunks: '{{num}} را بزنید تکه های فرزند', + chunkDetail: 'جزئیات تکه', + open: 'باز', } export default translation diff --git a/web/i18n/fa-IR/dataset-settings.ts b/web/i18n/fa-IR/dataset-settings.ts index f7efa7f9977fbe..1ddee95e9bc941 100644 --- a/web/i18n/fa-IR/dataset-settings.ts +++ b/web/i18n/fa-IR/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeAPI: 'API دانش خارجی', retrievalSettings: 'تنظیمات بازیابی', externalKnowledgeID: 'شناسه دانش خارجی', + indexMethodChangeToEconomyDisabledTip: 'برای تنزل رتبه از HQ به ECO در دسترس نیست', + helpText: 'یاد بگیرید که چگونه یک توضیحات مجموعه داده خوب بنویسید.', + upgradeHighQualityTip: 'پس از ارتقاء به حالت کیفیت بالا، بازگشت به حالت اقتصادی در دسترس نیست', }, } diff --git a/web/i18n/fa-IR/dataset.ts b/web/i18n/fa-IR/dataset.ts index 107e8dd0977d40..c8cc83ae9c041b 100644 --- a/web/i18n/fa-IR/dataset.ts +++ b/web/i18n/fa-IR/dataset.ts @@ -146,6 +146,26 @@ const translation = { externalAPIPanelDescription: 'API دانش خارجی برای اتصال به یک پایگاه دانش خارج از Dify و بازیابی دانش از آن پایگاه دانش استفاده می شود.', allExternalTip: 'هنگامی که فقط از دانش خارجی استفاده می کنید، کاربر می تواند انتخاب کند که آیا مدل Rerank را فعال کند یا خیر. اگر فعال نباشد، تکه های بازیابی شده بر اساس امتیازات مرتب می شوند. هنگامی که استراتژی های بازیابی پایگاه های دانش مختلف متناقض باشد، نادرست خواهد بود.', mixtureInternalAndExternalTip: 'مدل Rerank برای آمیختگی دانش درونی و بیرونی مورد نیاز است.', + chunkingMode: { + parentChild: 'پدر و مادر و فرزند', + general: 'عمومی', + }, + parentMode: { + fullDoc: 'مستند کامل', + paragraph: 'پاراگراف', + }, + batchAction: { + disable: 'غیر فعال کردن', + cancel: 'لغو', + selected: 'انتخاب', + enable: 'فعال', + delete: 'حذف', + archive: 'بایگانی', + }, + enable: 'فعال', + documentsDisabled: '{{num}} اسناد غیرفعال - غیرفعال برای بیش از 30 روز', + preprocessDocument: '{{عدد}} اسناد پیش پردازش', + localDocs: 'اسناد محلی', } export default translation diff --git a/web/i18n/fr-FR/common.ts b/web/i18n/fr-FR/common.ts index 25142c11cc9f69..e44dc4e14a3d66 100644 --- a/web/i18n/fr-FR/common.ts +++ b/web/i18n/fr-FR/common.ts @@ -42,6 +42,11 @@ const translation = { zoomIn: 'Zoom avant', openInNewTab: 'Ouvrir dans un nouvel onglet', copyImage: 'Copier l’image', + view: 'Vue', + viewMore: 'VOIR PLUS', + close: 'Fermer', + saveAndRegenerate: 'Enregistrer et régénérer des morceaux enfants', + regenerate: 'Régénérer', }, placeholder: { input: 'Veuillez entrer', @@ -474,6 +479,7 @@ const translation = { emptyTip: 'La Connaissance n\'a pas été associée, veuillez aller à l\'application ou au plug-in pour compléter l\'association.', viewDoc: 'Voir la documentation', relatedApp: 'applications liées', + noRelatedApp: 'Pas d’applications liées', }, voiceInput: { speaking: 'Parle maintenant...', diff --git a/web/i18n/fr-FR/dataset-creation.ts b/web/i18n/fr-FR/dataset-creation.ts index c777af4fbecaca..058a68f7e36e47 100644 --- a/web/i18n/fr-FR/dataset-creation.ts +++ b/web/i18n/fr-FR/dataset-creation.ts @@ -82,6 +82,7 @@ const translation = { chooseProvider: 'Sélectionnez un fournisseur', jinaReaderTitle: 'Convertir l’intégralité du site en Markdown', }, + cancel: 'Annuler', }, stepTwo: { segmentation: 'Paramètres de bloc', @@ -143,6 +144,28 @@ const translation = { websiteSource: 'Site web de prétraitement', separatorTip: 'Un délimiteur est le caractère utilisé pour séparer le texte. \\n\\n et \\n sont des délimiteurs couramment utilisés pour séparer les paragraphes et les lignes. Combiné à des virgules (\\n\\n,\\n), les paragraphes seront segmentés par des lignes lorsqu’ils dépasseront la longueur maximale des morceaux. Vous pouvez également utiliser des délimiteurs spéciaux définis par vous-même (par exemple ***).', maxLengthCheck: 'La longueur maximale des morceaux doit être inférieure à {{limit}}', + parentChunkForContext: 'Parent-chunk pour le contexte', + notAvailableForParentChild: 'Non disponible pour l’indice parent-enfant', + parentChild: 'Parent-enfant', + useQALanguage: 'Chunk utilisant le format Q&A dans', + highQualityTip: 'Une fois l’intégration terminée en mode Haute qualité, il n’est pas possible de revenir au mode économique.', + switch: 'Interrupteur', + paragraph: 'Paragraphe', + general: 'Généralités', + fullDocTip: 'L’intégralité du document est utilisée comme morceau parent et récupérée directement. Veuillez noter que pour des raisons de performance, le texte dépassant 10000 jetons sera automatiquement tronqué.', + fullDoc: 'Doc complet', + previewChunkCount: '{{compte}} Tronçons estimés', + childChunkForRetrieval: 'Child-chunk pour l’extraction', + parentChildDelimiterTip: 'Un délimiteur est le caractère utilisé pour séparer le texte. \\n\\n est recommandé pour diviser le document d’origine en gros morceaux parents. Vous pouvez également utiliser des délimiteurs spéciaux définis par vous-même.', + qaSwitchHighQualityTipTitle: 'Le format Q&R nécessite une méthode d’indexation de haute qualité', + notAvailableForQA: 'Non disponible pour l’indice Q&R', + previewChunk: 'Aperçu du morceau', + parentChildTip: 'Lors de l’utilisation du mode parent-enfant, le morceau enfant est utilisé pour la récupération et le morceau parent est utilisé pour le rappel en tant que contexte.', + paragraphTip: 'Ce mode divise le texte en paragraphes en fonction des délimiteurs et de la longueur maximale du morceau, en utilisant le texte scindé comme morceau parent pour la récupération.', + qaSwitchHighQualityTipContent: 'Actuellement, seule la méthode d’index de haute qualité prend en charge la segmentation du format Q&R. Vous souhaitez passer en mode haute qualité ?', + previewChunkTip: 'Cliquez sur le bouton « Preview Chunk » sur la gauche pour charger l’aperçu', + parentChildChunkDelimiterTip: 'Un délimiteur est le caractère utilisé pour séparer le texte. \\n est recommandé pour diviser les blocs parents en petits blocs enfants. Vous pouvez également utiliser des délimiteurs spéciaux définis par vous-même.', + generalTip: 'Mode général de segmentation du texte, les morceaux récupérés et rappelés sont les mêmes.', }, stepThree: { creationTitle: '🎉 Connaissance créée', @@ -171,6 +194,11 @@ const translation = { apiKeyPlaceholder: 'Clé API de jina.ai', configJinaReader: 'Configurer Jina Reader', }, + otherDataSource: { + learnMore: 'Pour en savoir plus', + description: 'Actuellement, la base de connaissances de Dify ne dispose que de sources de données limitées. Contribuer à une source de données dans la base de connaissances Dify est un moyen fantastique d’améliorer la flexibilité et la puissance de la plateforme pour tous les utilisateurs. Notre guide de contribution facilite la prise en main. Veuillez cliquer sur le lien ci-dessous pour en savoir plus.', + title: 'Se connecter à d’autres sources de données ?', + }, } export default translation diff --git a/web/i18n/fr-FR/dataset-documents.ts b/web/i18n/fr-FR/dataset-documents.ts index 1aad7870a8fff1..614590de536036 100644 --- a/web/i18n/fr-FR/dataset-documents.ts +++ b/web/i18n/fr-FR/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: 'TEMPS DE TÉLÉCHARGEMENT', status: 'STATUT', action: 'ACTION', + chunkingMode: 'MODE DE MORCEAU', }, rename: 'Renommer', name: 'Nom', @@ -77,6 +78,7 @@ const translation = { ok: 'D\'accord', }, addUrl: 'Ajouter une URL', + learnMore: 'Pour en savoir plus', }, metadata: { title: 'Métadonnées', @@ -328,6 +330,10 @@ const translation = { automatic: 'Automatique', custom: 'Personnalisé', previewTip: 'L\'aperçu du paragraphe sera disponible après la fin de l\'embedding.', + childMaxTokens: 'Enfant', + hierarchical: 'Parent-enfant', + pause: 'Pause', + parentMaxTokens: 'Parent', }, segment: { paragraphs: 'Paragraphes', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Nouveau Segment de Texte', newQaSegment: 'Nouveau Segment Q&R', delete: 'Supprimer ce morceau ?', + chunks_other: 'MORCEAUX', + childChunks_other: 'MORCEAUX ENFANTS', + clearFilter: 'Effacer le filtre', + newChunk: 'Nouveau Chunk', + childChunk: 'Enfant-Chunk', + newChildChunk: 'Nouveau morceau enfant', + addChunk: 'Ajouter un morceau', + chunkAdded: '1 morceau ajouté', + editChunk: 'Modifier le morceau', + regenerationConfirmMessage: 'La régénération des blocs enfants remplacera les blocs enfants actuels, y compris les blocs modifiés et les blocs nouvellement ajoutés. La régénération ne peut pas être annulée.', + regenerationSuccessTitle: 'Régénération terminée', + edited: 'ÉDITION', + collapseChunks: 'Réduire les morceaux', + childChunkAdded: '1 morceau enfant ajouté', + addAnother: 'Ajouter un autre', + searchResults_one: 'RÉSULTAT', + regeneratingTitle: 'Régénération de blocs enfants', + expandChunks: 'Développer des blocs', + characters_other: 'caractères', + editedAt: 'Édité le', + searchResults_other: 'RÉSULTATS', + regenerationSuccessMessage: 'Vous pouvez fermer cette fenêtre.', + parentChunks_one: 'MORCEAU PARENT', + regenerationConfirmTitle: 'Voulez-vous régénérer des morceaux enfants ?', + chunks_one: 'MORCEAU', + childChunks_one: 'MORCEAU ENFANT', + parentChunk: 'Parent-Chunk', + chunkDetail: 'Détail du morceau', + chunk: 'Morceau', + parentChunks_other: 'MORCEAUX PARENTS', + regeneratingMessage: 'Cela peut prendre un moment, veuillez patienter...', + addChildChunk: 'Ajouter un morceau enfant', + editParentChunk: 'Modifier le bloc parent', + characters_one: 'personnage', + searchResults_zero: 'RÉSULTAT', + empty: 'Aucun Chunk trouvé', + editChildChunk: 'Modifier le morceau enfant', }, } diff --git a/web/i18n/fr-FR/dataset-hit-testing.ts b/web/i18n/fr-FR/dataset-hit-testing.ts index 3fa2abbab1f454..0bb7c9499912d8 100644 --- a/web/i18n/fr-FR/dataset-hit-testing.ts +++ b/web/i18n/fr-FR/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'Voir GRAPHIQUE VECTORIEL', settingTitle: 'Réglage de récupération', viewDetail: 'Voir les détails', + hitChunks: 'Appuyez sur {{num}} morceaux enfants', + records: 'Archives', + chunkDetail: 'Détail du morceau', + open: 'Ouvrir', + keyword: 'Mots-clés', } export default translation diff --git a/web/i18n/fr-FR/dataset-settings.ts b/web/i18n/fr-FR/dataset-settings.ts index f7c5f4601a6d55..101214d288d860 100644 --- a/web/i18n/fr-FR/dataset-settings.ts +++ b/web/i18n/fr-FR/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { retrievalSettings: 'Paramètres de récupération', externalKnowledgeAPI: 'API de connaissances externes', externalKnowledgeID: 'Identification des connaissances externes', + indexMethodChangeToEconomyDisabledTip: 'Non disponible pour le déclassement de HQ à ECO', + upgradeHighQualityTip: 'Une fois la mise à niveau vers le mode Haute Qualité, il n’est pas possible de revenir au mode Économique', + helpText: 'Apprenez à rédiger une bonne description de jeu de données.', }, } diff --git a/web/i18n/fr-FR/dataset.ts b/web/i18n/fr-FR/dataset.ts index 54a73115a2f9af..bdaea09eec5e28 100644 --- a/web/i18n/fr-FR/dataset.ts +++ b/web/i18n/fr-FR/dataset.ts @@ -146,6 +146,26 @@ const translation = { externalAPIPanelTitle: 'API de connaissances externes', noExternalKnowledge: 'Il n’y a pas encore d’API de connaissances externes, cliquez ici pour créer', learnHowToWriteGoodKnowledgeDescription: 'Apprenez à rédiger une bonne description des connaissances', + chunkingMode: { + general: 'Généralités', + parentChild: 'Parent-enfant', + }, + parentMode: { + paragraph: 'Paragraphe', + fullDoc: 'Doc complet', + }, + batchAction: { + archive: 'Archiver', + disable: 'Désactiver', + delete: 'Supprimer', + cancel: 'Annuler', + enable: 'Activer', + selected: 'Sélectionné', + }, + preprocessDocument: '{{num}} Prétraiter les documents', + documentsDisabled: '{{num}} documents désactivés - inactifs depuis plus de 30 jours', + localDocs: 'Docs locaux', + enable: 'Activer', } export default translation diff --git a/web/i18n/hi-IN/common.ts b/web/i18n/hi-IN/common.ts index aabcfc86e653e0..207c4c16e54290 100644 --- a/web/i18n/hi-IN/common.ts +++ b/web/i18n/hi-IN/common.ts @@ -42,6 +42,11 @@ const translation = { zoomOut: 'ज़ूम आउट करें', openInNewTab: 'नए टैब में खोलें', zoomIn: 'ज़ूम इन करें', + view: 'देखना', + viewMore: 'और देखें', + regenerate: 'पुनर्जन्म', + close: 'बंद करना', + saveAndRegenerate: 'सहेजें और पुन: उत्पन्न करें बाल विखंडू', }, errorMsg: { fieldRequired: '{{field}} आवश्यक है', @@ -496,6 +501,7 @@ const translation = { 'ज्ञान को संबद्ध नहीं किया गया है, कृपया संबद्धता पूरी करने के लिए एप्लिकेशन या प्लग-इन पर जाएं।', viewDoc: 'दस्तावेज़ देखें', relatedApp: 'संबंधित ऐप्स', + noRelatedApp: 'कोई लिंक नहीं किए गए ऐप्स', }, voiceInput: { speaking: 'अब बोलें...', diff --git a/web/i18n/hi-IN/dataset-creation.ts b/web/i18n/hi-IN/dataset-creation.ts index 51063dcb143f1a..ecfa9d80a03b86 100644 --- a/web/i18n/hi-IN/dataset-creation.ts +++ b/web/i18n/hi-IN/dataset-creation.ts @@ -92,6 +92,7 @@ const translation = { jinaReaderTitle: 'पूरी साइट को मार्कडाउन में बदलें', jinaReaderNotConfiguredDescription: 'एक्सेस के लिए अपनी मुफ्त एपीआई कुंजी दर्ज करके जीना रीडर सेट करें।', }, + cancel: 'रद्द करना', }, stepTwo: { segmentation: 'खंड सेटिंग्स', @@ -165,6 +166,28 @@ const translation = { datasetSettingLink: 'ज्ञान सेटिंग्स।', separatorTip: 'एक सीमांकक पाठ को अलग करने के लिए उपयोग किया जाने वाला वर्ण है। \\n\\n और \\n आमतौर पर पैराग्राफ और लाइनों को अलग करने के लिए उपयोग किए जाने वाले सीमांकक हैं। अल्पविराम (\\n\\n,\\n) के साथ संयुक्त, अधिकतम खंड लंबाई से अधिक होने पर अनुच्छेदों को पंक्तियों द्वारा खंडित किया जाएगा। आप स्वयं द्वारा परिभाषित विशेष सीमांकक का भी उपयोग कर सकते हैं (उदा. ***).', maxLengthCheck: 'अधिकतम चंक लंबाई {{limit}} से कम होनी चाहिए', + useQALanguage: 'में क्यू एंड ए प्रारूप का उपयोग करके चंक करें', + previewChunkCount: '{{गिनती}} अनुमानित खंड', + previewChunk: 'पूर्वावलोकन चंक', + paragraph: 'अनुच्‍छेद', + general: 'सामान्य', + highQualityTip: 'एक बार उच्च गुणवत्ता मोड में एम्बेडिंग समाप्त करने के बाद, किफायती मोड पर वापस जाना उपलब्ध नहीं है।', + parentChunkForContext: 'संदर्भ के लिए माता-पिता का हिस्सा', + notAvailableForQA: 'Q&A इंडेक्स के लिए उपलब्ध नहीं है', + fullDoc: 'पूर्ण डॉक्टर', + fullDocTip: 'पूरे दस्तावेज़ को मूल खंड के रूप में उपयोग किया जाता है और सीधे पुनर्प्राप्त किया जाता है। कृपया ध्यान दें कि प्रदर्शन कारणों से, 10000 टोकन से अधिक का पाठ स्वचालित रूप से छोटा कर दिया जाएगा।', + previewChunkTip: 'पूर्वावलोकन लोड करने के लिए बाईं ओर \'पूर्वावलोकन चंक\' बटन पर क्लिक करें', + generalTip: 'सामान्य पाठ चंकिंग मोड, पुनर्प्राप्त और याद किए गए चंक्स समान हैं।', + qaSwitchHighQualityTipTitle: 'Q&A प्रारूप के लिए उच्च-गुणवत्ता अनुक्रमण विधि की आवश्यकता होती है', + qaSwitchHighQualityTipContent: 'वर्तमान में, केवल उच्च-गुणवत्ता वाली अनुक्रमणिका विधि Q & A प्रारूप चंकिंग का समर्थन करती है। क्या आप उच्च-गुणवत्ता मोड पर स्विच करना चाहेंगे?', + parentChildChunkDelimiterTip: 'एक सीमांकक पाठ को अलग करने के लिए उपयोग किया जाने वाला वर्ण है। माता-पिता के टुकड़ों को छोटे बच्चे के टुकड़ों में विभाजित करने के लिए \\n की सिफारिश की जाती है। आप स्वयं द्वारा परिभाषित विशेष सीमांकक का भी उपयोग कर सकते हैं।', + childChunkForRetrieval: 'पुनर्प्राप्ति के लिए बाल-खंड', + switch: 'स्विच', + parentChildDelimiterTip: 'एक सीमांकक पाठ को अलग करने के लिए उपयोग किया जाने वाला वर्ण है। \\n\\n मूल दस्तावेज़ को बड़े पैरेंट विखंडू में विभाजित करने के लिए अनुशंसित है। आप स्वयं द्वारा परिभाषित विशेष सीमांकक का भी उपयोग कर सकते हैं।', + notAvailableForParentChild: 'पैरेंट-चाइल्ड इंडेक्स के लिए उपलब्ध नहीं है', + parentChild: 'माता-पिता का बच्चा', + parentChildTip: 'पैरेंट-चाइल्ड मोड का उपयोग करते समय, चाइल्ड-चंक का उपयोग पुनर्प्राप्ति के लिए किया जाता है और पैरेंट-चंक का उपयोग संदर्भ के रूप में रिकॉल के लिए किया जाता है।', + paragraphTip: 'यह मोड पाठ को सीमांकक और अधिकतम खंड लंबाई के आधार पर पैराग्राफ में विभाजित करता है, पुनर्प्राप्ति के लिए मूल खंड के रूप में विभाजित पाठ का उपयोग करता है।', }, stepThree: { creationTitle: '🎉 ज्ञान बनाया गया', @@ -191,6 +214,11 @@ const translation = { apiKeyPlaceholder: 'jina.ai से एपीआई कुंजी', getApiKeyLinkText: 'jina.ai पर अपनी निःशुल्क एपीआई कुंजी प्राप्त करें', }, + otherDataSource: { + title: 'अन्य डेटा स्रोतों से कनेक्ट करें?', + learnMore: 'और जानो', + description: 'वर्तमान में, Dify के ज्ञानकोष में केवल सीमित डेटा स्रोत हैं। Dify नॉलेज बेस में डेटा स्रोत का योगदान करना सभी उपयोगकर्ताओं के लिए प्लेटफॉर्म के लचीलेपन और शक्ति को बढ़ाने में मदद करने का एक शानदार तरीका है। हमारी योगदान मार्गदर्शिका आरंभ करना आसान बनाती है। अधिक जानने के लिए कृपया नीचे दिए गए लिंक पर क्लिक करें।', + }, } export default translation diff --git a/web/i18n/hi-IN/dataset-documents.ts b/web/i18n/hi-IN/dataset-documents.ts index 87a8ff2b01da1f..e01b3ebb1326fe 100644 --- a/web/i18n/hi-IN/dataset-documents.ts +++ b/web/i18n/hi-IN/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'अपलोड का समय', status: 'स्थिति', action: 'क्रिया', + chunkingMode: 'चंकिंग मोड', }, rename: 'नाम बदलें', name: 'नाम', @@ -78,6 +79,7 @@ const translation = { error: 'आयात त्रुटि', ok: 'ठीक है', }, + learnMore: 'और जानो', }, metadata: { title: 'मेटाडेटा', @@ -329,6 +331,10 @@ const translation = { automatic: 'स्वचालित', custom: 'अनुकूलित', previewTip: 'पैराग्राफ पूर्वावलोकन एम्बेडिंग पूरी होने के बाद उपलब्ध होगा', + parentMaxTokens: 'जनक', + pause: 'रुकना', + hierarchical: 'माता-पिता का बच्चा', + childMaxTokens: 'बच्चा', }, segment: { paragraphs: 'पैराग्राफ', @@ -347,6 +353,43 @@ const translation = { newTextSegment: 'नया पाठ खंड', newQaSegment: 'नया Q&A खंड', delete: 'इस खंड को हटाएँ ?', + parentChunks_other: 'जनक चंक्स', + childChunks_one: 'चाइल्ड चंक', + searchResults_other: 'परिणाम', + parentChunks_one: 'जनक चंक', + searchResults_one: 'परिणाम', + addChildChunk: 'Child chunk जोड़ें', + childChunks_other: 'बच्चे के टुकड़े', + collapseChunks: 'चंक्स संक्षिप्त करें', + characters_one: 'अक्षर', + childChunkAdded: '1 चाइल्ड चंक जोड़ा गया', + chunks_other: 'हिस्सा', + addAnother: 'एक और जोड़ें', + newChunk: 'नया हिस्सा', + searchResults_zero: 'परिणाम', + chunk: 'हिस्सा', + addChunk: 'चंक जोड़ें', + editChildChunk: 'संपादित करें बाल चंक', + editedAt: 'पर संपादित', + childChunk: 'चाइल्ड-चंक', + parentChunk: 'माता-पिता-चंक', + empty: 'कोई हिस्सा नहीं मिला', + editChunk: 'चंक संपादित करें', + characters_other: 'वर्ण', + regeneratingMessage: 'इसमें कुछ समय लग सकता है, कृपया प्रतीक्षा करें...', + regenerationConfirmTitle: 'क्या आप बच्चे के टुकड़ों को पुन: उत्पन्न करना चाहते हैं?', + regeneratingTitle: 'बच्चे के टुकड़ों को पुनर्जीवित करना', + chunks_one: 'हिस्सा', + edited: 'संपादित', + editParentChunk: 'पेरेंट चंक संपादित करें', + newChildChunk: 'न्यू चाइल्ड चंक', + clearFilter: 'फ़िल्टर साफ़ करें', + regenerationSuccessMessage: 'आप इस विंडो को बंद कर सकते हैं।', + expandChunks: 'विखंडू का विस्तार करें', + regenerationSuccessTitle: 'पुनर्जनन पूरा हुआ', + chunkAdded: '1 हिस्सा जोड़ा गया', + chunkDetail: 'चंक विवरण', + regenerationConfirmMessage: 'चाइल्ड चंक्स को रीजनरेट करने से वर्तमान चाइल्ड चंक्स ओवरराइट हो जाएंगे, जिसमें संपादित चंक्स और नए जोड़े गए चंक्स शामिल हैं। पुनरुत्थान को पूर्ववत नहीं किया जा सकता है।', }, } diff --git a/web/i18n/hi-IN/dataset-hit-testing.ts b/web/i18n/hi-IN/dataset-hit-testing.ts index e15d57884d5274..fd562062b38401 100644 --- a/web/i18n/hi-IN/dataset-hit-testing.ts +++ b/web/i18n/hi-IN/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'वेक्टर चार्ट देखें', viewDetail: 'विस्तार से देखें', settingTitle: 'पुनर्प्राप्ति सेटिंग', + hitChunks: '{{num}} बच्चे के टुकड़े मारो', + keyword: 'खोजशब्दों', + chunkDetail: 'चंक विवरण', + open: 'खोलना', + records: 'रिकॉर्ड', } export default translation diff --git a/web/i18n/hi-IN/dataset-settings.ts b/web/i18n/hi-IN/dataset-settings.ts index ea825417c1d7c3..ff324dcb43cf9f 100644 --- a/web/i18n/hi-IN/dataset-settings.ts +++ b/web/i18n/hi-IN/dataset-settings.ts @@ -37,6 +37,9 @@ const translation = { externalKnowledgeID: 'बाहरी ज्ञान ID', externalKnowledgeAPI: 'बाहरी ज्ञान एपीआई', retrievalSettings: 'पुनर्प्राप्ति सेटिंग्स', + indexMethodChangeToEconomyDisabledTip: 'मुख्यालय से ईसीओ में डाउनग्रेड करने के लिए उपलब्ध नहीं है', + helpText: 'एक अच्छा डेटासेट विवरण लिखना सीखें।', + upgradeHighQualityTip: 'एक बार उच्च गुणवत्ता मोड में अपग्रेड करने के बाद, किफायती मोड में वापस जाना उपलब्ध नहीं है', }, } diff --git a/web/i18n/hi-IN/dataset.ts b/web/i18n/hi-IN/dataset.ts index b0b8519fd7d1aa..d3838e3dd0b6b1 100644 --- a/web/i18n/hi-IN/dataset.ts +++ b/web/i18n/hi-IN/dataset.ts @@ -153,6 +153,26 @@ const translation = { noExternalKnowledge: 'अभी तक कोई बाहरी ज्ञान एपीआई नहीं है, बनाने के लिए यहां क्लिक करें', createNewExternalAPI: 'एक नया बाहरी नॉलेज API बनाएँ', learnHowToWriteGoodKnowledgeDescription: 'एक अच्छा ज्ञान विवरण लिखना सीखें', + chunkingMode: { + parentChild: 'माता-पिता का बच्चा', + general: 'सामान्य', + }, + parentMode: { + fullDoc: 'पूर्ण-दस्तावेज़', + paragraph: 'अनुच्‍छेद', + }, + batchAction: { + cancel: 'रद्द करना', + disable: 'अक्षम', + enable: 'योग्य बनाना', + selected: 'चयनित', + delete: 'मिटाना', + archive: 'पुरालेख', + }, + localDocs: 'स्थानीय डॉक्स', + preprocessDocument: '{{num}} प्रीप्रोसेस दस्तावेज़', + enable: 'योग्य बनाना', + documentsDisabled: '{{num}} दस्तावेज़ अक्षम - 30 दिनों से अधिक समय से निष्क्रिय', } export default translation diff --git a/web/i18n/it-IT/common.ts b/web/i18n/it-IT/common.ts index 4cee6dec50b058..42ea6d6fa90174 100644 --- a/web/i18n/it-IT/common.ts +++ b/web/i18n/it-IT/common.ts @@ -42,6 +42,11 @@ const translation = { zoomIn: 'Ingrandisci', openInNewTab: 'Apri in una nuova scheda', copyImage: 'Copia immagine', + close: 'Chiudere', + view: 'Vista', + saveAndRegenerate: 'Salva e rigenera i blocchi figlio', + regenerate: 'Rigenerare', + viewMore: 'SCOPRI DI PIÙ', }, errorMsg: { fieldRequired: '{{field}} è obbligatorio', @@ -504,6 +509,7 @@ const translation = { 'La Conoscenza non è stata associata, per favore vai all\'applicazione o al plug-in per completare l\'associazione.', viewDoc: 'Visualizza documentazione', relatedApp: 'app collegate', + noRelatedApp: 'Nessuna app collegata', }, voiceInput: { speaking: 'Parla ora...', diff --git a/web/i18n/it-IT/dataset-creation.ts b/web/i18n/it-IT/dataset-creation.ts index af174ce41f1dee..aa7cc8e40a91fe 100644 --- a/web/i18n/it-IT/dataset-creation.ts +++ b/web/i18n/it-IT/dataset-creation.ts @@ -94,6 +94,7 @@ const translation = { useSitemap: 'Usa la mappa del sito', chooseProvider: 'Seleziona un fornitore', }, + cancel: 'Annulla', }, stepTwo: { segmentation: 'Impostazioni dei blocchi', @@ -168,6 +169,28 @@ const translation = { datasetSettingLink: 'impostazioni della Conoscenza.', separatorTip: 'Un delimitatore è il carattere utilizzato per separare il testo. \\n\\n e \\n sono delimitatori comunemente usati per separare paragrafi e righe. In combinazione con le virgole (\\n\\n,\\n), i paragrafi verranno segmentati per righe quando superano la lunghezza massima del blocco. È inoltre possibile utilizzare delimitatori speciali definiti dall\'utente (ad es. ***).', maxLengthCheck: 'La lunghezza massima del blocco deve essere inferiore a {{limit}}', + useQALanguage: 'Blocco con il formato Q&A in', + previewChunkTip: 'Fai clic sul pulsante "Anteprima blocco" a sinistra per caricare l\'anteprima', + paragraph: 'Paragrafo', + childChunkForRetrieval: 'Child-chunk per il recupero', + general: 'Generale', + fullDoc: 'Documento completo', + previewChunkCount: '{{conteggio}} Blocchi stimati', + generalTip: 'Modalità generale di suddivisione in blocchi del testo, i blocchi recuperati e richiamati sono gli stessi.', + parentChildChunkDelimiterTip: 'Un delimitatore è il carattere utilizzato per separare il testo. \\n è consigliato per dividere i blocchi principali in piccoli blocchi figlio. È inoltre possibile utilizzare delimitatori speciali definiti dall\'utente.', + fullDocTip: 'L\'intero documento viene utilizzato come blocco principale e recuperato direttamente. Si prega di notare che per motivi di prestazioni, il testo che supera i 10000 token verrà automaticamente troncato.', + parentChild: 'Genitore-figlio', + qaSwitchHighQualityTipContent: 'Attualmente, solo il metodo dell\'indice di alta qualità supporta la suddivisione in blocchi del formato Domande e risposte. Volete passare alla modalità di alta qualità?', + parentChunkForContext: 'Parent-chunk per il contesto', + switch: 'Interruttore', + paragraphTip: 'Questa modalità suddivide il testo in paragrafi in base ai delimitatori e alla lunghezza massima del blocco, utilizzando il testo diviso come blocco principale per il recupero.', + notAvailableForQA: 'Non disponibile per l\'indice Q&A', + parentChildTip: 'Quando si utilizza la modalità genitore-figlio, il blocco figlio viene utilizzato per il recupero e il blocco padre viene utilizzato per il richiamo come contesto.', + highQualityTip: 'Una volta terminato l\'incorporamento in modalità Alta qualità, il ripristino della modalità Economica non è disponibile.', + parentChildDelimiterTip: 'Un delimitatore è il carattere utilizzato per separare il testo. \\n\\n è consigliato per dividere il documento originale in blocchi principali di grandi dimensioni. È inoltre possibile utilizzare delimitatori speciali definiti dall\'utente.', + previewChunk: 'Blocco di anteprima', + notAvailableForParentChild: 'Non disponibile per l\'indice padre-figlio', + qaSwitchHighQualityTipTitle: 'Il formato Domande e risposte richiede un metodo di indicizzazione di alta qualità', }, stepThree: { creationTitle: '🎉 Conoscenza creata', @@ -194,6 +217,11 @@ const translation = { apiKeyPlaceholder: 'Chiave API da jina.ai', configJinaReader: 'Configura Jina Reader', }, + otherDataSource: { + learnMore: 'Ulteriori informazioni', + title: 'Connettersi ad altre origini dati?', + description: 'Attualmente, la knowledge base di Dify ha solo fonti di dati limitate. Contribuire con una fonte di dati alla knowledge base di Dify è un modo fantastico per migliorare la flessibilità e la potenza della piattaforma per tutti gli utenti. La nostra guida ai contributi ti aiuta a iniziare. Clicca sul link sottostante per saperne di più.', + }, } export default translation diff --git a/web/i18n/it-IT/dataset-documents.ts b/web/i18n/it-IT/dataset-documents.ts index b242ba3735e71e..06c5a2deedb9c1 100644 --- a/web/i18n/it-IT/dataset-documents.ts +++ b/web/i18n/it-IT/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'ORA DI CARICAMENTO', status: 'STATO', action: 'AZIONE', + chunkingMode: 'MODALITÀ DI SUDDIVISIONE IN BLOCCHI', }, rename: 'Rinomina', name: 'Nome', @@ -78,6 +79,7 @@ const translation = { error: 'Errore di importazione', ok: 'OK', }, + learnMore: 'Ulteriori informazioni', }, metadata: { title: 'Metadati', @@ -330,6 +332,10 @@ const translation = { custom: 'Personalizzato', previewTip: 'L\'anteprima del paragrafo sarà disponibile dopo il completamento dell\'embedding', + childMaxTokens: 'Bambino', + pause: 'Pausa', + hierarchical: 'Genitore-figlio', + parentMaxTokens: 'Genitore', }, segment: { paragraphs: 'Paragrafi', @@ -348,6 +354,43 @@ const translation = { newTextSegment: 'Nuovo Segmento di Testo', newQaSegment: 'Nuovo Segmento di Domanda & Risposta', delete: 'Eliminare questo blocco?', + searchResults_zero: 'RISULTATO', + searchResults_other: 'RISULTATI', + newChunk: 'Nuovo blocco', + characters_one: 'carattere', + addChildChunk: 'Aggiungi blocco figlio', + addAnother: 'Aggiungi un altro', + parentChunks_one: 'BLOCCO PADRE', + regenerationConfirmMessage: 'La rigenerazione dei blocchi figlio sovrascriverà i blocchi figlio correnti, inclusi i blocchi modificati e i blocchi appena aggiunti. La rigenerazione non può essere annullata.', + regenerationSuccessTitle: 'Rigenerazione completata', + regeneratingTitle: 'Rigenerazione di blocchi figlio', + chunkAdded: '1 pezzo aggiunto', + empty: 'Nessun blocco trovato', + parentChunk: 'Blocco genitore', + edited: 'MODIFICATO', + characters_other: 'personaggi', + parentChunks_other: 'BLOCCHI PRINCIPALI', + chunk: 'Pezzo', + newChildChunk: 'Nuovo blocco figlio', + editChildChunk: 'Modifica blocco figlio', + addChunk: 'Aggiungi blocco', + childChunks_one: 'BLOCCO FIGLIO', + regenerationConfirmTitle: 'Si desidera rigenerare i blocchi figlio?', + chunks_other: 'BLOCCHI', + editedAt: 'A cura di', + collapseChunks: 'Comprimi blocchi', + clearFilter: 'Cancella filtro', + chunks_one: 'PEZZO', + editParentChunk: 'Modifica blocco padre', + expandChunks: 'Espandi blocchi', + chunkDetail: 'Dettaglio pezzo', + searchResults_one: 'RISULTATO', + regeneratingMessage: 'Questo potrebbe richiedere un momento, si prega di attendere...', + childChunk: 'Figlio-Chunk', + editChunk: 'Modifica blocco', + regenerationSuccessMessage: 'È possibile chiudere questa finestra.', + childChunkAdded: '1 blocco figlio aggiunto', + childChunks_other: 'BLOCCHI FIGLIO', }, } diff --git a/web/i18n/it-IT/dataset-hit-testing.ts b/web/i18n/it-IT/dataset-hit-testing.ts index e8ca9192209066..95dd3d2aeec167 100644 --- a/web/i18n/it-IT/dataset-hit-testing.ts +++ b/web/i18n/it-IT/dataset-hit-testing.ts @@ -26,6 +26,11 @@ const translation = { viewChart: 'Visualizza GRAFICO VETTORIALE', settingTitle: 'Impostazione di recupero', viewDetail: 'vedi dettagli', + chunkDetail: 'Dettaglio pezzo', + hitChunks: 'Premi {{num}} blocchi figlio', + open: 'Aperto', + keyword: 'Parole chiavi', + records: 'Archivio', } export default translation diff --git a/web/i18n/it-IT/dataset-settings.ts b/web/i18n/it-IT/dataset-settings.ts index 9d4b6218e5c621..66c13bd3b4a224 100644 --- a/web/i18n/it-IT/dataset-settings.ts +++ b/web/i18n/it-IT/dataset-settings.ts @@ -37,6 +37,9 @@ const translation = { retrievalSettings: 'Impostazioni di recupero', externalKnowledgeID: 'ID conoscenza esterna', externalKnowledgeAPI: 'API di conoscenza esterna', + helpText: 'Scopri come scrivere una buona descrizione del set di dati.', + upgradeHighQualityTip: 'Una volta effettuato l\'aggiornamento alla modalità Alta qualità, il ripristino della modalità Risparmio non è disponibile', + indexMethodChangeToEconomyDisabledTip: 'Non disponibile per il downgrade da HQ a ECO', }, } diff --git a/web/i18n/it-IT/dataset.ts b/web/i18n/it-IT/dataset.ts index 22d1700d1422ed..fc15ca5929b51c 100644 --- a/web/i18n/it-IT/dataset.ts +++ b/web/i18n/it-IT/dataset.ts @@ -153,6 +153,26 @@ const translation = { allExternalTip: 'Quando si utilizzano solo conoscenze esterne, l\'utente può scegliere se abilitare il modello Rerank. Se non è abilitato, i blocchi recuperati verranno ordinati in base ai punteggi. Quando le strategie di recupero di diverse basi di conoscenza sono incoerenti, saranno imprecise.', externalKnowledgeDescriptionPlaceholder: 'Descrivi cosa c\'è in questa Knowledge Base (facoltativo)', noExternalKnowledge: 'Non esiste ancora un\'API di conoscenza esterna, fai clic qui per creare', + chunkingMode: { + general: 'Generale', + parentChild: 'Genitore-figlio', + }, + parentMode: { + paragraph: 'Paragrafo', + fullDoc: 'Full-doc', + }, + batchAction: { + archive: 'Archivio', + enable: 'Abilitare', + cancel: 'Annulla', + selected: 'Selezionato', + disable: 'Disabilitare', + delete: 'Cancellare', + }, + preprocessDocument: '{{num}} Pre-elaborazione dei documenti', + enable: 'Abilitare', + documentsDisabled: '{{num}} documenti disabilitati - inattivi da oltre 30 giorni', + localDocs: 'Documenti locali', } export default translation diff --git a/web/i18n/ja-JP/common.ts b/web/i18n/ja-JP/common.ts index 9c23cb6f161d7e..8c9b32c27f9b2e 100644 --- a/web/i18n/ja-JP/common.ts +++ b/web/i18n/ja-JP/common.ts @@ -42,6 +42,11 @@ const translation = { openInNewTab: '新しいタブで開く', zoomOut: 'ズームアウト', copyImage: '画像をコピー', + viewMore: 'もっと見る', + view: '眺める', + close: '閉める', + saveAndRegenerate: '子チャンクの保存と再生成', + regenerate: '再生', }, errorMsg: { fieldRequired: '{{field}}は必要です', @@ -478,6 +483,7 @@ const translation = { emptyTip: '関連付けられた知識がありません。アプリケーションやプラグインに移動して関連付けを完了してください。', viewDoc: 'ドキュメントを表示', relatedApp: '関連アプリ', + noRelatedApp: 'リンクされたアプリはありません', }, voiceInput: { speaking: '今話しています...', diff --git a/web/i18n/ja-JP/dataset-creation.ts b/web/i18n/ja-JP/dataset-creation.ts index 9ae6c4e7374401..e01ea4d51f20ed 100644 --- a/web/i18n/ja-JP/dataset-creation.ts +++ b/web/i18n/ja-JP/dataset-creation.ts @@ -87,6 +87,7 @@ const translation = { jinaReaderNotConfiguredDescription: '無料のAPIキーを入力してJina Readerを設定します。', useSitemapTooltip: 'サイトマップに沿ってサイトをクロールします。そうでない場合、Jina Readerはページの関連性に基づいて繰り返しクロールし、ページ数は少なくなりますが、高品質のページが得られます。', }, + cancel: 'キャンセル', }, stepTwo: { segmentation: 'チャンク設定', @@ -148,6 +149,28 @@ const translation = { datasetSettingLink: 'ナレッジ設定', separatorTip: '区切り文字は、テキストを区切るために使用される文字です。\\n\\n と \\n は、段落と行を区切るために一般的に使用される区切り記号です。カンマ (\\n\\n,\\n) と組み合わせると、最大チャンク長を超えると、段落は行で区切られます。自分で定義した特別な区切り文字を使用することもできます(例:***)。', maxLengthCheck: 'チャンクの最大長は {{limit}} 未満にする必要があります', + useQALanguage: 'Q&A 形式を使用したチャンク', + previewChunkTip: '左側の「Preview Chunk」ボタンをクリックして、プレビューをロードします', + qaSwitchHighQualityTipTitle: 'Q&A 形式には高品質のインデックス作成方法が必要', + qaSwitchHighQualityTipContent: '現在、Q&A 形式のチャンク化をサポートしているのは、高品質のインデックス メソッドのみです。高品質モードに切り替えますか?', + childChunkForRetrieval: '取得用の子チャンク', + fullDoc: 'フルドキュメント', + parentChildDelimiterTip: '区切り文字は、テキストを区切るために使用される文字です。\\n\\n は、元のドキュメントを大きな親チャンクに分割する場合に推奨されます。また、自分で定義した特別な区切り文字を使用することもできます。', + general: '全般', + switch: 'スイッチ', + parentChild: '親子', + parentChildChunkDelimiterTip: '区切り文字は、テキストを区切るために使用される文字です。\\n は、親チャンクを小さな子チャンクに分割する場合に推奨されます。また、自分で定義した特別な区切り文字を使用することもできます。', + generalTip: '一般的なテキストチャンクモードでは、取得されたチャンクとリコールされたチャンクは同じです。', + previewChunk: 'プレビューチャンク', + parentChunkForContext: 'コンテキストの親チャンク', + notAvailableForQA: 'Q&Aインデックスでは使用できません', + paragraph: '段落', + notAvailableForParentChild: '親子インデックスでは使用できません', + fullDocTip: 'ドキュメント全体が親チャンクとして使用され、直接取得されます。パフォーマンス上の理由から、10000トークンを超えるテキストは自動的に切り捨てられることに注意してください。', + previewChunkCount: '{{カウント}}推定チャンク', + paragraphTip: 'このモードでは、区切り記号とチャンクの最大長に基づいてテキストを段落に分割し、分割されたテキストを取得用の親チャンクとして使用します。', + highQualityTip: '高品質モードでの埋め込みが完了すると、経済モードに戻すことはできません。', + parentChildTip: '親子モードを使用する場合、子チャンクは取得に使用され、親チャンクはコンテキストとしての再呼び出しに使用されます。', }, stepThree: { creationTitle: '🎉 ナレッジが作成されました', @@ -171,6 +194,11 @@ const translation = { apiKeyPlaceholder: 'jina.ai からの API キー', configJinaReader: 'Jina Readerの設定', }, + otherDataSource: { + description: '現在、Difyのナレッジベースには限られたデータソースしかありません。データソースをDifyナレッジベースに投稿することは、すべてのユーザーにとってプラットフォームの柔軟性とパワーを向上させるのに役立つ素晴らしい方法です。私たちのコントリビューションガイドは、簡単に始めることができます。詳細については、以下のリンクをクリックしてください。', + title: '他のデータソースに接続しますか?', + learnMore: '詳細情報', + }, } export default translation diff --git a/web/i18n/ja-JP/dataset-documents.ts b/web/i18n/ja-JP/dataset-documents.ts index 654ae0ef6c3236..30d39a61e4a2d5 100644 --- a/web/i18n/ja-JP/dataset-documents.ts +++ b/web/i18n/ja-JP/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'アップロード時間', status: 'ステータス', action: 'アクション', + chunkingMode: 'チャンクモード', }, rename: '名前を変更', name: '名前', @@ -77,6 +78,7 @@ const translation = { error: 'インポートエラー', ok: 'OK', }, + learnMore: '詳細情報', }, metadata: { title: 'メタデータ', @@ -328,6 +330,10 @@ const translation = { automatic: '自動', custom: 'カスタム', previewTip: '埋め込みが完了した後、段落のプレビューが利用可能になります', + parentMaxTokens: '親', + hierarchical: '親子', + pause: '休止', + childMaxTokens: '子供', }, segment: { paragraphs: '段落', @@ -346,6 +352,43 @@ const translation = { newTextSegment: '新しいテキストセグメント', newQaSegment: '新しいQ&Aセグメント', delete: 'このチャンクを削除しますか?', + searchResults_other: '業績', + edited: '編集', + parentChunk: '親チャンク', + regeneratingTitle: '子チャンクの再生成', + collapseChunks: 'チャンクの折りたたみ', + characters_other: '文字', + childChunk: '子チャンク', + regenerationSuccessMessage: 'このウィンドウは閉じることができます。', + editChildChunk: '子チャンクの編集', + clearFilter: 'フィルターをクリア', + chunkDetail: 'チャンクの詳細', + regenerationSuccessTitle: '再生完了', + parentChunks_one: '親チャンク', + newChunk: '新しいチャンク', + childChunks_other: '子チャンク', + searchResults_zero: '結果', + addChildChunk: '子チャンクを追加', + searchResults_one: '結果', + regeneratingMessage: 'これには少し時間がかかる場合がありますので、お待ちください...', + empty: 'チャンクが見つかりません', + editedAt: 'で編集', + addAnother: '別のものを追加', + chunkAdded: '1チャンク追加', + childChunks_one: '子チャンク', + regenerationConfirmMessage: '子チャンクを再生成すると、編集されたチャンクや新しく追加されたチャンクなど、現在の子チャンクが上書きされます。再生は元に戻せません。', + newChildChunk: '新しい子チャンク', + childChunkAdded: '子チャンクが1つ追加', + regenerationConfirmTitle: '子チャンクを再生成しますか?', + expandChunks: 'チャンクの展開', + chunks_one: 'チャンク', + editChunk: 'チャンクの編集', + editParentChunk: '親チャンクの編集', + parentChunks_other: '親チャンク', + characters_one: '文字', + chunks_other: 'チャンク', + addChunk: 'チャンクを追加', + chunk: 'チャンク', }, } diff --git a/web/i18n/ja-JP/dataset-hit-testing.ts b/web/i18n/ja-JP/dataset-hit-testing.ts index e2bc807969cb12..44a112f7bebf7d 100644 --- a/web/i18n/ja-JP/dataset-hit-testing.ts +++ b/web/i18n/ja-JP/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'ベクトルチャートを表示', settingTitle: '取得設定', viewDetail: '詳細を表示', + records: '誌', + hitChunks: '{{num}}子チャンクをヒット', + open: '開ける', + keyword: 'キーワード', + chunkDetail: 'チャンクの詳細', } export default translation diff --git a/web/i18n/ja-JP/dataset-settings.ts b/web/i18n/ja-JP/dataset-settings.ts index f0b8c76a2486ed..c85effe47bc439 100644 --- a/web/i18n/ja-JP/dataset-settings.ts +++ b/web/i18n/ja-JP/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeID: '外部ナレッジID', retrievalSettings: '取得設定', externalKnowledgeAPI: '外部ナレッジAPI', + upgradeHighQualityTip: 'ハイクオリティモードにアップグレードすると、エコノミーモードに戻すことはできません', + indexMethodChangeToEconomyDisabledTip: '本社からECOへのダウングレードは対象外です', + helpText: '適切なデータセットの説明を書く方法を学びます。', }, } diff --git a/web/i18n/ja-JP/dataset.ts b/web/i18n/ja-JP/dataset.ts index 274cbdaf2bde23..edb91130d47548 100644 --- a/web/i18n/ja-JP/dataset.ts +++ b/web/i18n/ja-JP/dataset.ts @@ -146,6 +146,26 @@ const translation = { externalKnowledgeDescriptionPlaceholder: 'このナレッジベースの内容を説明する(オプション)', allExternalTip: '外部ナレッジのみを使用する場合、ユーザーは Rerank モデルを有効にするかどうかを選択できます。有効にしない場合、取得されたチャンクはスコアに基づいて並べ替えられます。異なるナレッジベースの検索戦略に一貫性がない場合、不正確になります。', externalAPIPanelDescription: '外部ナレッジAPIは、Difyの外部のナレッジベースに接続し、そのナレッジベースからナレッジを取得するために使用されます。', + chunkingMode: { + general: '全般', + parentChild: '親子', + }, + parentMode: { + fullDoc: 'フルドキュメント', + paragraph: '段落', + }, + batchAction: { + delete: '削除', + selected: '入選', + archive: 'アーカイブ', + enable: 'エネーブル', + disable: '無効にする', + cancel: 'キャンセル', + }, + documentsDisabled: '{{num}}ドキュメントが無効 - 30日以上非アクティブ', + localDocs: 'ローカルドキュメント', + enable: 'エネーブル', + preprocessDocument: '{{数値}}ドキュメントの前処理', } export default translation diff --git a/web/i18n/ko-KR/common.ts b/web/i18n/ko-KR/common.ts index a599aa9bd1b6fc..3cf173775e93a0 100644 --- a/web/i18n/ko-KR/common.ts +++ b/web/i18n/ko-KR/common.ts @@ -42,6 +42,11 @@ const translation = { zoomIn: '확대', copyImage: '이미지 복사', zoomOut: '축소', + close: '닫다', + viewMore: '더보기', + regenerate: '재생성', + view: '보기', + saveAndRegenerate: '저장 및 자식 청크 재생성', }, placeholder: { input: '입력해주세요', @@ -470,6 +475,7 @@ const translation = { emptyTip: '연결된 지식이 없습니다. 애플리케이션 또는 플러그인으로 이동하여 연결을 완료하세요.', viewDoc: '문서 보기', relatedApp: '관련 앱', + noRelatedApp: '연결된 앱 없음', }, voiceInput: { speaking: '지금 말하고 있습니다...', diff --git a/web/i18n/ko-KR/dataset-creation.ts b/web/i18n/ko-KR/dataset-creation.ts index ee5abb5189b408..340d1790fd7d39 100644 --- a/web/i18n/ko-KR/dataset-creation.ts +++ b/web/i18n/ko-KR/dataset-creation.ts @@ -82,6 +82,7 @@ const translation = { jinaReaderNotConfigured: 'Jina Reader가 구성되지 않았습니다.', useSitemapTooltip: '사이트맵을 따라 사이트를 크롤링합니다. 그렇지 않은 경우 Jina Reader는 페이지 관련성에 따라 반복적으로 크롤링하여 더 적지만 더 높은 품질의 페이지를 생성합니다.', }, + cancel: '취소', }, stepTwo: { segmentation: '청크 설정', @@ -143,6 +144,28 @@ const translation = { websiteSource: '웹 사이트 전처리', separatorTip: '구분 기호는 텍스트를 구분하는 데 사용되는 문자입니다. \\n\\n 및 \\n은 단락과 줄을 구분하는 데 일반적으로 사용되는 구분 기호입니다. 쉼표(\\n\\n,\\n)와 함께 사용하면 최대 청크 길이를 초과할 경우 단락이 줄로 분할됩니다. 직접 정의한 특수 구분 기호(예: ***)를 사용할 수도 있습니다.', maxLengthCheck: '최대 청크 길이는 {{limit}} 미만이어야 합니다.', + childChunkForRetrieval: '검색을 위한 자식 청크', + qaSwitchHighQualityTipContent: '현재 고품질 인덱스 방법만 Q&A 형식 청크를 지원합니다. 고화질 모드로 전환하시겠습니까?', + previewChunkTip: '왼쪽의 \'Preview Chunk\' 버튼을 클릭하여 프리뷰를 로드합니다', + general: '일반', + fullDoc: '전체 문서', + previewChunk: '프리뷰 청크(Preview Chunk)', + parentChunkForContext: '컨텍스트에 대한 Parent-chunk', + parentChildDelimiterTip: '구분 기호는 텍스트를 구분하는 데 사용되는 문자입니다. \\n\\n은 원본 문서를 큰 부모 청크로 분할하는 데 권장됩니다. 직접 정의한 특수 구분 기호를 사용할 수도 있습니다.', + paragraph: '단락', + parentChild: '부모-자식', + useQALanguage: 'Q&A 형식을 사용하는 청크', + highQualityTip: '고품질 모드에서 삽입을 마치면 경제적 모드로 되돌릴 수 없습니다.', + notAvailableForQA: 'Q&A 인덱스에는 사용할 수 없습니다.', + qaSwitchHighQualityTipTitle: 'Q&A 형식에는 고품질 인덱싱 방법이 필요합니다.', + notAvailableForParentChild: '부모-자식 인덱스에는 사용할 수 없습니다.', + previewChunkCount: '{{개수}} 추정된 청크', + parentChildTip: '부모-자식 모드를 사용할 때 자식 청크는 검색에 사용되고 부모 청크는 컨텍스트로 회수에 사용됩니다.', + generalTip: '일반적인 텍스트 청크 모드에서는 검색된 청크와 회수된 청크가 동일합니다.', + fullDocTip: '전체 문서가 상위 청크로 사용되며 직접 검색됩니다. 성능상의 이유로 10000 토큰을 초과하는 텍스트는 자동으로 잘립니다.', + parentChildChunkDelimiterTip: '구분 기호는 텍스트를 구분하는 데 사용되는 문자입니다. \\n 은 부모 청크를 작은 자식 청크로 분할하는 데 권장됩니다. 직접 정의한 특수 구분 기호를 사용할 수도 있습니다.', + switch: '스위치', + paragraphTip: '이 모드는 구분 기호와 최대 청크 길이에 따라 텍스트를 단락으로 분할하며, 분할된 텍스트를 검색을 위한 부모 청크로 사용합니다.', }, stepThree: { creationTitle: '🎉 지식이 생성되었습니다', @@ -172,6 +195,11 @@ const translation = { getApiKeyLinkText: 'jina.ai 에서 무료 API 키 받기', configJinaReader: 'Jina Reader 구성', }, + otherDataSource: { + learnMore: '더 알아보세요', + title: '다른 데이터 소스에 연결하시겠습니까?', + description: '현재 Dify의 기술 자료에는 제한된 데이터 소스만 있습니다. Dify 기술 자료에 데이터 소스를 제공하는 것은 모든 사용자를 위해 플랫폼의 유연성과 기능을 향상시키는 데 도움이 되는 환상적인 방법입니다. 기여 가이드를 통해 쉽게 시작할 수 있습니다. 자세한 내용은 아래 링크를 클릭하십시오.', + }, } export default translation diff --git a/web/i18n/ko-KR/dataset-documents.ts b/web/i18n/ko-KR/dataset-documents.ts index 74bdc78d28aa54..ec0b2bb62db42d 100644 --- a/web/i18n/ko-KR/dataset-documents.ts +++ b/web/i18n/ko-KR/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: '업로드 시간', status: '상태', action: '동작', + chunkingMode: '청크 모드', }, name: '이름', rename: '이름 바꾸기', @@ -77,6 +78,7 @@ const translation = { ok: '확인', }, addUrl: 'URL 추가', + learnMore: '더 알아보세요', }, metadata: { title: '메타데이터', @@ -327,6 +329,10 @@ const translation = { automatic: '자동', custom: '사용자 정의', previewTip: '임베딩이 완료된 후에 세그먼트 미리보기를 사용할 수 있습니다', + childMaxTokens: '아이', + parentMaxTokens: '부모', + pause: '일시 중지', + hierarchical: '부모-자식', }, segment: { paragraphs: '단락', @@ -345,6 +351,43 @@ const translation = { newTextSegment: '새로운 텍스트 세그먼트', newQaSegment: '새로운 Q&A 세그먼트', delete: '이 청크를 삭제하시겠습니까?', + parentChunks_one: '부모 청크(PARENT CHUNK)', + newChunk: '새 청크', + addChildChunk: '자손 청크 추가(Add Child Chunk)', + editChildChunk: '자손 청크 편집(Edit Child Chunk)', + chunkDetail: '청크 디테일(Chunk Detail)', + editChunk: '청크 편집(Edit Chunk)', + regeneratingTitle: '자식 청크 재생성', + newChildChunk: '새 자손 청크(New Child Chunk)', + childChunkAdded: '자식 청크 1개 추가됨', + chunk: '덩어리', + searchResults_zero: '결과', + empty: '청크를 찾을 수 없습니다.', + editParentChunk: '부모 청크 편집(Edit Parent Chunk)', + chunks_one: '덩어리', + regenerationSuccessMessage: '이 창을 닫을 수 있습니다.', + childChunks_one: '자식 청크(CHILD CHUNK)', + regenerationSuccessTitle: '재생이 완료되었습니다.', + editedAt: '편집 위치', + addAnother: '다른 항목 추가', + chunkAdded: '청크 1개 추가됨', + searchResults_one: '결과', + searchResults_other: '결과', + regenerationConfirmMessage: '자식 청크를 다시 생성하면 편집된 청크와 새로 추가된 청크를 포함하여 현재 자식 청크를 덮어씁니다. 재생성은 취소할 수 없습니다.', + regenerationConfirmTitle: '자식 청크를 다시 생성하시겠습니까?', + clearFilter: '필터 지우기', + characters_one: '문자', + parentChunk: '부모-청크', + expandChunks: '청크 확장', + collapseChunks: '청크 축소', + parentChunks_other: '부모 청크(PARENT CHUNKS)', + childChunk: '자식 청크', + childChunks_other: '자식 청크', + chunks_other: '청크', + edited: '편집', + addChunk: '청크 추가(Add Chunk)', + characters_other: '문자', + regeneratingMessage: '시간이 걸릴 수 있으니 잠시만 기다려 주십시오...', }, } diff --git a/web/i18n/ko-KR/dataset-hit-testing.ts b/web/i18n/ko-KR/dataset-hit-testing.ts index a2cbc55bbbd4e9..a5329fbdb52264 100644 --- a/web/i18n/ko-KR/dataset-hit-testing.ts +++ b/web/i18n/ko-KR/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: '벡터 차트 보기', settingTitle: '검색 설정', viewDetail: '자세히보기', + open: '열다', + records: '레코드', + hitChunks: '{{num}}개의 자식 청크를 히트했습니다.', + keyword: '키워드', + chunkDetail: '청크 디테일(Chunk Detail)', } export default translation diff --git a/web/i18n/ko-KR/dataset-settings.ts b/web/i18n/ko-KR/dataset-settings.ts index 11fd010eecd72a..22e9733ed8d260 100644 --- a/web/i18n/ko-KR/dataset-settings.ts +++ b/web/i18n/ko-KR/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeAPI: '외부 지식 API', externalKnowledgeID: '외부 지식 ID', retrievalSettings: '검색 설정', + upgradeHighQualityTip: '고품질 모드로 업그레이드한 후에는 경제적 모드로 되돌릴 수 없습니다.', + indexMethodChangeToEconomyDisabledTip: 'HQ에서 ECO로 다운그레이드할 수 없습니다.', + helpText: '좋은 데이터 세트 설명을 작성하는 방법을 알아보세요.', }, } diff --git a/web/i18n/ko-KR/dataset.ts b/web/i18n/ko-KR/dataset.ts index 1683b5fb7db857..db187ec421424f 100644 --- a/web/i18n/ko-KR/dataset.ts +++ b/web/i18n/ko-KR/dataset.ts @@ -145,6 +145,26 @@ const translation = { allExternalTip: '외부 지식만 사용하는 경우 사용자는 리랭크 모델을 사용할지 여부를 선택할 수 있습니다. 활성화하지 않으면 검색된 청크가 점수에 따라 정렬됩니다. 서로 다른 기술 자료의 검색 전략이 일관되지 않으면 부정확합니다.', externalAPIPanelDescription: '외부 지식 API는 Dify 외부의 기술 자료에 연결하고 해당 기술 자료에서 지식을 검색하는 데 사용됩니다.', noExternalKnowledge: '아직 외부 지식 API가 없으므로 여기를 클릭하여 생성하십시오.', + chunkingMode: { + parentChild: '부모-자식', + general: '일반', + }, + parentMode: { + fullDoc: '전체 문서', + paragraph: '단락', + }, + batchAction: { + delete: '삭제하다', + enable: '사용', + cancel: '취소', + archive: '보관', + selected: '선택한', + disable: '비활성화', + }, + localDocs: '로컬 문서', + preprocessDocument: '{{숫자}} 문서 전처리', + enable: '사용', + documentsDisabled: '{{num}} 문서 사용 안 함 - 30일 이상 비활성 상태', } export default translation diff --git a/web/i18n/pl-PL/common.ts b/web/i18n/pl-PL/common.ts index 69441dbab38180..f2ee93298d67f4 100644 --- a/web/i18n/pl-PL/common.ts +++ b/web/i18n/pl-PL/common.ts @@ -42,6 +42,11 @@ const translation = { openInNewTab: 'Otwórz w nowej karcie', zoomIn: 'Powiększenie', zoomOut: 'Pomniejszanie', + saveAndRegenerate: 'Zapisywanie i regeneracja fragmentów podrzędnych', + view: 'Widok', + regenerate: 'Ponownie wygenerować', + viewMore: 'ZOBACZ WIĘCEJ', + close: 'Zamykać', }, placeholder: { input: 'Proszę wprowadzić', @@ -489,6 +494,7 @@ const translation = { 'Wiedza nie została powiązana, przejdź do aplikacji lub wtyczki, aby ukończyć powiązanie.', viewDoc: 'Zobacz dokumentację', relatedApp: 'powiązane aplikacje', + noRelatedApp: 'Brak połączonych aplikacji', }, voiceInput: { speaking: 'Mów teraz...', diff --git a/web/i18n/pl-PL/dataset-creation.ts b/web/i18n/pl-PL/dataset-creation.ts index c12ed662786371..6a7c8906781094 100644 --- a/web/i18n/pl-PL/dataset-creation.ts +++ b/web/i18n/pl-PL/dataset-creation.ts @@ -83,6 +83,7 @@ const translation = { jinaReaderTitle: 'Konwertowanie całej witryny na język Markdown', jinaReaderNotConfiguredDescription: 'Skonfiguruj Jina Reader, wprowadzając bezpłatny klucz API, aby uzyskać dostęp.', }, + cancel: 'Anuluj', }, stepTwo: { segmentation: 'Ustawienia bloków tekstu', @@ -156,6 +157,28 @@ const translation = { websiteSource: 'Witryna internetowa przetwarzania wstępnego', separatorTip: 'Ogranicznik to znak używany do oddzielania tekstu. \\n\\n i \\n są powszechnie używanymi ogranicznikami do oddzielania akapitów i wierszy. W połączeniu z przecinkami (\\n\\n,\\n), akapity będą segmentowane wierszami po przekroczeniu maksymalnej długości fragmentu. Możesz również skorzystać ze zdefiniowanych przez siebie specjalnych ograniczników (np. ***).', maxLengthCheck: 'Maksymalna długość porcji powinna być mniejsza niż {{limit}}', + parentChunkForContext: 'Fragment nadrzędny dla kontekstu', + generalTip: 'Ogólny tryb fragmentowania tekstu, fragmenty pobierane i odwoływane są takie same.', + parentChildDelimiterTip: 'Ogranicznik to znak używany do oddzielania tekstu. \\n\\n jest zalecane do dzielenia oryginalnego dokumentu na duże fragmenty nadrzędne. Możesz również użyć specjalnych ograniczników zdefiniowanych przez siebie.', + switch: 'Przełącznik', + parentChildChunkDelimiterTip: 'Ogranicznik to znak używany do oddzielania tekstu. \\n jest zalecane do dzielenia fragmentów nadrzędnych na małe fragmenty podrzędne. Możesz również użyć specjalnych ograniczników zdefiniowanych przez siebie.', + paragraphTip: 'W tym trybie tekst jest dzielony na akapity na podstawie ograniczników i maksymalnej długości fragmentu, używając podzielonego tekstu jako fragmentu nadrzędnego do pobierania.', + general: 'Ogólne', + notAvailableForQA: 'Niedostępne dla indeksu pytań i odpowiedziNot available for Q&A Index', + childChunkForRetrieval: 'Fragment podrzędny do pobrania', + fullDoc: 'Pełna wersja dokumentu', + fullDocTip: 'Cały dokument jest używany jako fragment nadrzędny i pobierany bezpośrednio. Należy pamiętać, że ze względu na wydajność, tekst przekraczający 10000 tokenów zostanie automatycznie obcięty.', + previewChunkCount: '{{liczba}} Szacowane porcje', + paragraph: 'Akapit', + parentChild: 'Rodzic-dziecko', + previewChunk: 'Fragment podglądu', + notAvailableForParentChild: 'Niedostępne dla indeksu nadrzędny-podrzędny', + highQualityTip: 'Po zakończeniu osadzania w trybie wysokiej jakości powrót do trybu ekonomicznego nie jest dostępny.', + previewChunkTip: 'Kliknij przycisk "Podgląd fragmentu" po lewej stronie, aby załadować podgląd', + qaSwitchHighQualityTipContent: 'Obecnie tylko metoda indeksu wysokiej jakości obsługuje fragmentowanie formatu pytań i odpowiedzi. Czy chcesz przełączyć się w tryb wysokiej jakości?', + useQALanguage: 'Fragment przy użyciu formatu Q&A w', + parentChildTip: 'W przypadku korzystania z trybu nadrzędny-podrzędny fragment podrzędny jest używany do pobierania, a fragment nadrzędny jest używany do przywoływania jako kontekstu.', + qaSwitchHighQualityTipTitle: 'Format Q&A wymaga metody indeksowania wysokiej jakości', }, stepThree: { creationTitle: '🎉 Utworzono Wiedzę', @@ -187,6 +210,11 @@ const translation = { apiKeyPlaceholder: 'Klucz API od jina.ai', configJinaReader: 'Konfiguracja czytnika Jina', }, + otherDataSource: { + learnMore: 'Dowiedz się więcej', + title: 'Połączyć się z innymi źródłami danych?', + description: 'Obecnie baza wiedzy Dify ma tylko ograniczone źródła danych. Dodanie źródła danych do bazy wiedzy Dify to fantastyczny sposób na zwiększenie elastyczności i możliwości platformy dla wszystkich użytkowników. Nasz przewodnik po wkładach ułatwia rozpoczęcie pracy. Kliknij poniższy link, aby dowiedzieć się więcej.', + }, } export default translation diff --git a/web/i18n/pl-PL/dataset-documents.ts b/web/i18n/pl-PL/dataset-documents.ts index 7152c3e9d68fd3..d5292fd2c41f2e 100644 --- a/web/i18n/pl-PL/dataset-documents.ts +++ b/web/i18n/pl-PL/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: 'CZAS WGRANIA', status: 'STATUS', action: 'AKCJA', + chunkingMode: 'TRYB CHUNKINGU', }, name: 'Nazwa', rename: 'Przemianować', @@ -78,6 +79,7 @@ const translation = { ok: 'OK', }, addUrl: 'Dodaj adres URL', + learnMore: 'Dowiedz się więcej', }, metadata: { title: 'Metadane', @@ -329,6 +331,10 @@ const translation = { automatic: 'Automatyczny', custom: 'Niestandardowy', previewTip: 'Podgląd akapitu będzie dostępny po zakończeniu osadzania', + parentMaxTokens: 'Rodzic', + hierarchical: 'Rodzic-dziecko', + childMaxTokens: 'Dziecko', + pause: 'Pauza', }, segment: { paragraphs: 'Akapity', @@ -347,6 +353,43 @@ const translation = { newTextSegment: 'Nowy segment tekstowy', newQaSegment: 'Nowy segment Q&A', delete: 'Usunąć ten fragment?', + parentChunks_one: 'FRAGMENT NADRZĘDNY', + parentChunks_other: 'FRAGMENTY NADRZĘDNE', + searchResults_one: 'WYNIK', + chunk: 'Kawał', + parentChunk: 'Fragment nadrzędny', + characters_other: 'Znaków', + addChunk: 'Dodaj kawałek', + addChildChunk: 'Dodaj fragment podrzędny', + addAnother: 'Dodaj kolejny', + childChunkAdded: 'Dodano 1 fragment podrzędny', + editChunk: 'Edytuj fragment', + regenerationSuccessTitle: 'Regeneracja zakończona', + edited: 'EDYTOWANE', + editedAt: 'Zredagowane w', + collapseChunks: 'Zwijanie fragmentów', + empty: 'Nie znaleziono fragmentu', + newChunk: 'Nowy fragment', + regenerationConfirmTitle: 'Czy chcesz zregenerować fragmenty podrzędne?', + chunks_other: 'KAWAŁKI', + editChildChunk: 'Edytuj fragment podrzędny', + characters_one: 'znak', + regeneratingMessage: 'To może chwilę potrwać, proszę czekać...', + chunkDetail: 'Szczegóły kawałka', + chunkAdded: 'Dodano 1 kawałek', + regeneratingTitle: 'Regenerowanie fragmentów podrzędnych', + childChunks_other: 'FRAGMENTY POTOMNE', + expandChunks: 'Rozwijanie fragmentów', + childChunk: 'Fragment podrzędny', + regenerationConfirmMessage: 'Ponowne wygenerowanie fragmentów podrzędnych spowoduje zastąpienie bieżących fragmentów podrzędnych, w tym fragmentów edytowanych i nowo dodanych fragmentów. Regeneracji nie można cofnąć.', + regenerationSuccessMessage: 'Możesz zamknąć to okno.', + searchResults_other: 'WYNIKI', + searchResults_zero: 'WYNIK', + chunks_one: 'KAWAŁ', + editParentChunk: 'Edytuj fragment nadrzędny', + newChildChunk: 'Nowy fragment podrzędny', + clearFilter: 'Wyczyść filtr', + childChunks_one: 'FRAGMENT POTOMNY', }, } diff --git a/web/i18n/pl-PL/dataset-hit-testing.ts b/web/i18n/pl-PL/dataset-hit-testing.ts index e9509a0f05372f..f069e4de9e10dd 100644 --- a/web/i18n/pl-PL/dataset-hit-testing.ts +++ b/web/i18n/pl-PL/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'Zobacz WYKRES WEKTOROWY', settingTitle: 'Ustawienie pobierania', viewDetail: 'Pokaż szczegóły', + keyword: 'Słowa kluczowe', + hitChunks: 'Trafienie w {{num}} fragmentów podrzędnych', + open: 'Otwierać', + records: 'Rekordy', + chunkDetail: 'Szczegóły kawałka', } export default translation diff --git a/web/i18n/pl-PL/dataset-settings.ts b/web/i18n/pl-PL/dataset-settings.ts index 0ed428d4079786..ff2a2e5d5fc2cf 100644 --- a/web/i18n/pl-PL/dataset-settings.ts +++ b/web/i18n/pl-PL/dataset-settings.ts @@ -37,6 +37,9 @@ const translation = { externalKnowledgeAPI: 'Interfejs API wiedzy zewnętrznej', retrievalSettings: 'Ustawienia pobierania', externalKnowledgeID: 'Zewnętrzny identyfikator wiedzy', + helpText: 'Dowiedz się, jak napisać dobry opis zestawu danych.', + upgradeHighQualityTip: 'Po uaktualnieniu do trybu wysokiej jakości powrót do trybu ekonomicznego nie jest dostępny', + indexMethodChangeToEconomyDisabledTip: 'Niedostępne w przypadku zmiany z HQ na ECO', }, } diff --git a/web/i18n/pl-PL/dataset.ts b/web/i18n/pl-PL/dataset.ts index 4538b26ae2a9b6..3db197bd76d3a1 100644 --- a/web/i18n/pl-PL/dataset.ts +++ b/web/i18n/pl-PL/dataset.ts @@ -152,6 +152,26 @@ const translation = { learnHowToWriteGoodKnowledgeDescription: 'Dowiedz się, jak napisać dobry opis wiedzy', externalKnowledgeNamePlaceholder: 'Podaj nazwę bazy wiedzy', externalAPIPanelDescription: 'Interfejs API wiedzy zewnętrznej służy do łączenia się z bazą wiedzy poza Dify i pobierania wiedzy z tej bazy wiedzy.', + chunkingMode: { + parentChild: 'Rodzic-dziecko', + general: 'Ogólne', + }, + parentMode: { + fullDoc: 'Pełna wersja dokumentu', + paragraph: 'Akapit', + }, + batchAction: { + selected: 'Wybrany', + archive: 'Archiwum', + enable: 'Umożliwiać', + disable: 'Wyłączać', + delete: 'Usunąć', + cancel: 'Anuluj', + }, + preprocessDocument: '{{liczba}} Przetwarzanie wstępne dokumentów', + localDocs: 'Lokalne dokumenty', + documentsDisabled: '{{num}} dokumenty wyłączone - nieaktywne przez ponad 30 dni', + enable: 'Umożliwiać', } export default translation diff --git a/web/i18n/pt-BR/common.ts b/web/i18n/pt-BR/common.ts index 6f66e65878b2af..c85669b8a4e4b1 100644 --- a/web/i18n/pt-BR/common.ts +++ b/web/i18n/pt-BR/common.ts @@ -42,6 +42,11 @@ const translation = { zoomIn: 'Ampliar', copyImage: 'Copiar imagem', openInNewTab: 'Abrir em nova guia', + viewMore: 'VER MAIS', + regenerate: 'Regenerar', + close: 'Fechar', + saveAndRegenerate: 'Salvar e regenerar pedaços filhos', + view: 'Vista', }, placeholder: { input: 'Por favor, insira', @@ -474,6 +479,7 @@ const translation = { emptyTip: 'O Conhecimento não foi associado, por favor, vá para o aplicativo ou plug-in para completar a associação.', viewDoc: 'Ver documentação', relatedApp: 'aplicativos relacionados', + noRelatedApp: 'Nenhum aplicativo vinculado', }, voiceInput: { speaking: 'Fale agora...', diff --git a/web/i18n/pt-BR/dataset-creation.ts b/web/i18n/pt-BR/dataset-creation.ts index 8534bdce1d3de8..bbd2d482b721ee 100644 --- a/web/i18n/pt-BR/dataset-creation.ts +++ b/web/i18n/pt-BR/dataset-creation.ts @@ -82,6 +82,7 @@ const translation = { useSitemapTooltip: 'Siga o mapa do site para rastrear o site. Caso contrário, o Jina Reader rastreará iterativamente com base na relevância da página, produzindo menos páginas, mas de maior qualidade.', jinaReaderTitle: 'Converter todo o site em Markdown', }, + cancel: 'Cancelar', }, stepTwo: { segmentation: 'Configurações de fragmentação', @@ -143,6 +144,28 @@ const translation = { webpageUnit: 'Páginas', separatorTip: 'Um delimitador é o caractere usado para separar o texto. \\n\\n e \\n são delimitadores comumente usados para separar parágrafos e linhas. Combinado com vírgulas (\\n\\n,\\n), os parágrafos serão segmentados por linhas ao exceder o comprimento máximo do bloco. Você também pode usar delimitadores especiais definidos por você (por exemplo, ***).', maxLengthCheck: 'O comprimento máximo do chunk deve ser inferior a {{limit}}', + parentChildDelimiterTip: 'Um delimitador é o caractere usado para separar o texto. \\n\\n é recomendado para dividir o documento original em grandes partes pai. Você também pode usar delimitadores especiais definidos por você.', + parentChildChunkDelimiterTip: 'Um delimitador é o caractere usado para separar o texto. \\n é recomendado para dividir partes pai em pequenas partes filhas. Você também pode usar delimitadores especiais definidos por você.', + notAvailableForQA: 'Não disponível para o Índice de P e R', + parentChild: 'Pai-filho', + general: 'Geral', + qaSwitchHighQualityTipTitle: 'O formato de perguntas e respostas requer um método de indexação de alta qualidade', + parentChunkForContext: 'Parte-pai para contexto', + switch: 'Interruptor', + fullDoc: 'Doc completo', + qaSwitchHighQualityTipContent: 'Atualmente, apenas o método de índice de alta qualidade dá suporte ao agrupamento no formato Q&A. Gostaria de mudar para o modo de alta qualidade?', + childChunkForRetrieval: 'Filho-pedaço para recuperação', + useQALanguage: 'Chunk usando o formato de perguntas e respostas em', + previewChunk: 'Visualizar parte', + notAvailableForParentChild: 'Não disponível para Índice pai-filho', + paragraph: 'Parágrafo', + parentChildTip: 'Ao usar o modo pai-filho, o filho-chunk é usado para recuperação e o pai-chunk é usado para recall como contexto.', + generalTip: 'Modo de agrupamento de texto geral, os pedaços recuperados e recuperados são os mesmos.', + highQualityTip: 'Depois de concluir a incorporação no modo de alta qualidade, a reversão para o modo econômico não estará disponível.', + previewChunkTip: 'Clique no botão \'Preview Chunk\' à esquerda para carregar a visualização', + fullDocTip: 'O documento inteiro é usado como parte pai e recuperado diretamente. Observe que, por motivos de desempenho, o texto que exceder 10000 tokens será truncado automaticamente.', + paragraphTip: 'Esse modo divide o texto em parágrafos com base em delimitadores e no comprimento máximo da parte, usando o texto dividido como a parte pai para recuperação.', + previewChunkCount: '{{contagem}} Partes estimadas', }, stepThree: { creationTitle: '🎉 Conhecimento criado', @@ -171,6 +194,11 @@ const translation = { configJinaReader: 'Configurar o Jina Reader', apiKeyPlaceholder: 'Chave de API do jina.ai', }, + otherDataSource: { + learnMore: 'Saiba Mais', + description: 'Atualmente, a base de conhecimento da Dify possui apenas fontes de dados limitadas. Contribuir com uma fonte de dados para a base de conhecimento Dify é uma maneira fantástica de ajudar a aumentar a flexibilidade e o poder da plataforma para todos os usuários. Nosso guia de contribuição facilita o início. Clique no link abaixo para saber mais.', + title: 'Conectar-se a outras fontes de dados?', + }, } export default translation diff --git a/web/i18n/pt-BR/dataset-documents.ts b/web/i18n/pt-BR/dataset-documents.ts index ded46c8a14559f..9acfca302960b3 100644 --- a/web/i18n/pt-BR/dataset-documents.ts +++ b/web/i18n/pt-BR/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: 'HORA DO UPLOAD', status: 'STATUS', action: 'AÇÃO', + chunkingMode: 'MODO DE FRAGMENTAÇÃO', }, name: 'Nome', rename: 'Renomear', @@ -77,6 +78,7 @@ const translation = { ok: 'OK', }, addUrl: 'Adicionar URL', + learnMore: 'Saiba Mais', }, metadata: { title: 'Metadados', @@ -328,6 +330,10 @@ const translation = { automatic: 'Automático', custom: 'Personalizado', previewTip: 'A visualização do parágrafo estará disponível após a incorporação ser concluída', + pause: 'Pausa', + hierarchical: 'Pai-filho', + parentMaxTokens: 'Pai', + childMaxTokens: 'Criança', }, segment: { paragraphs: 'Parágrafos', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Novo fragmento de texto', newQaSegment: 'Novo fragmento de P&R', delete: 'Excluir este fragmento?', + chunks_other: 'PEDAÇOS', + parentChunks_other: 'PARTES PAI', + childChunks_one: 'PEDAÇO FILHO', + searchResults_zero: 'RESULTADO', + searchResults_one: 'RESULTADO', + searchResults_other: 'RESULTADOS', + empty: 'Nenhum pedaço encontrado', + chunk: 'Pedaço', + newChunk: 'Novo pedaço', + childChunk: 'Pedaço filho', + characters_other: 'Caracteres', + addChunk: 'Adicionar pedaço', + addChildChunk: 'Adicionar pedaço filho', + addAnother: 'Adicionar outro', + editChunk: 'Editar Chunk', + editParentChunk: 'Editar parte pai', + editChildChunk: 'Editar parte filho', + regenerationConfirmTitle: 'Deseja regenerar partes filhas?', + regeneratingTitle: 'Regenerando partes filhas', + regeneratingMessage: 'Isso pode demorar um pouco, por favor aguarde...', + edited: 'EDIÇÃO', + editedAt: 'Editado em', + expandChunks: 'Expandir pedaços', + collapseChunks: 'Recolher partes', + regenerationConfirmMessage: 'A regeneração de partes filhas substituirá as partes filhas atuais, incluindo partes editadas e partes recém-adicionadas. A regeneração não pode ser desfeita.', + parentChunks_one: 'PEDAÇO PAI', + regenerationSuccessMessage: 'Você pode fechar esta janela.', + chunks_one: 'PEDAÇO', + childChunkAdded: '1 pedaço filho adicionado', + clearFilter: 'Limpar filtro', + regenerationSuccessTitle: 'Regeneração concluída', + chunkDetail: 'Detalhe do pedaço', + childChunks_other: 'PEDAÇOS FILHOS', + chunkAdded: '1 pedaço adicionado', + newChildChunk: 'Novo pedaço filho', + characters_one: 'personagem', + parentChunk: 'Pedaço pai', }, } diff --git a/web/i18n/pt-BR/dataset-hit-testing.ts b/web/i18n/pt-BR/dataset-hit-testing.ts index 9e65c1cb0df236..61ab4f3d6e61bf 100644 --- a/web/i18n/pt-BR/dataset-hit-testing.ts +++ b/web/i18n/pt-BR/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'Ver GRÁFICO DE VETORES', viewDetail: 'Ver detalhes', settingTitle: 'Configuração de recuperação', + records: 'Arquivo', + hitChunks: 'Hit {{num}} pedaços filhos', + open: 'Abrir', + chunkDetail: 'Detalhe do pedaço', + keyword: 'Palavras-chave', } export default translation diff --git a/web/i18n/pt-BR/dataset-settings.ts b/web/i18n/pt-BR/dataset-settings.ts index 380a7e7f9d4abe..b8176d222ab107 100644 --- a/web/i18n/pt-BR/dataset-settings.ts +++ b/web/i18n/pt-BR/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { retrievalSettings: 'Configurações de recuperação', externalKnowledgeID: 'ID de conhecimento externo', externalKnowledgeAPI: 'API de conhecimento externo', + indexMethodChangeToEconomyDisabledTip: 'Não disponível para rebaixamento de HQ para ECO', + helpText: 'Aprenda a escrever uma boa descrição do conjunto de dados.', + upgradeHighQualityTip: 'Depois de atualizar para o modo de alta qualidade, reverter para o modo econômico não está disponível', }, } diff --git a/web/i18n/pt-BR/dataset.ts b/web/i18n/pt-BR/dataset.ts index fa0e74e3999573..c3c3e3b631f027 100644 --- a/web/i18n/pt-BR/dataset.ts +++ b/web/i18n/pt-BR/dataset.ts @@ -146,6 +146,26 @@ const translation = { learnHowToWriteGoodKnowledgeDescription: 'Aprenda a escrever uma boa descrição de conhecimento', externalAPIPanelDocumentation: 'Saiba como criar uma API de conhecimento externo', externalKnowledgeDescription: 'Descrição do Conhecimento', + chunkingMode: { + parentChild: 'Pai-filho', + general: 'Geral', + }, + parentMode: { + fullDoc: 'Documento completo', + paragraph: 'Parágrafo', + }, + batchAction: { + selected: 'Selecionado', + delete: 'Excluir', + enable: 'Habilitar', + archive: 'Arquivo', + disable: 'Desabilitar', + cancel: 'Cancelar', + }, + documentsDisabled: '{{num}} documentos desativados - inativos por mais de 30 dias', + enable: 'Habilitar', + preprocessDocument: '{{num}} Documentos de pré-processamento', + localDocs: 'Documentos locais', } export default translation diff --git a/web/i18n/ro-RO/common.ts b/web/i18n/ro-RO/common.ts index 0badaf5a13fbe9..46db92a1273c03 100644 --- a/web/i18n/ro-RO/common.ts +++ b/web/i18n/ro-RO/common.ts @@ -42,6 +42,11 @@ const translation = { zoomOut: 'Micșorare', openInNewTab: 'Deschide într-o filă nouă', zoomIn: 'Măriți', + close: 'Închide', + viewMore: 'VEZI MAI MULT', + regenerate: 'Regenera', + saveAndRegenerate: 'Salvați și regenerați bucățile secundare', + view: 'Vedere', }, placeholder: { input: 'Vă rugăm să introduceți', @@ -474,6 +479,7 @@ const translation = { emptyTip: 'Cunoștințele nu au fost asociate, vă rugăm să mergeți la aplicație sau la plug-in pentru a finaliza asocierea.', viewDoc: 'Vizualizați documentația', relatedApp: 'aplicații asociate', + noRelatedApp: 'Fără aplicații conectate', }, voiceInput: { speaking: 'Vorbiți acum...', diff --git a/web/i18n/ro-RO/dataset-creation.ts b/web/i18n/ro-RO/dataset-creation.ts index f18b2ac5c220e0..3a4e23308e79bd 100644 --- a/web/i18n/ro-RO/dataset-creation.ts +++ b/web/i18n/ro-RO/dataset-creation.ts @@ -82,6 +82,7 @@ const translation = { jinaReaderNotConfigured: 'Jina Reader nu este configurat', useSitemapTooltip: 'Urmați harta site-ului pentru a accesa cu crawlere site-ul. Dacă nu, Jina Reader va accesa cu crawlere iterativ în funcție de relevanța paginii, producând mai puține pagini, dar de calitate superioară.', }, + cancel: 'Anula', }, stepTwo: { segmentation: 'Setări de segmentare', @@ -143,6 +144,28 @@ const translation = { websiteSource: 'Site-ul web de preprocesare', separatorTip: 'Un delimitator este caracterul folosit pentru a separa textul. \\n\\n și \\n sunt delimitatori utilizați în mod obișnuit pentru separarea paragrafelor și liniilor. Combinate cu virgule (\\n\\n,\\n), paragrafele vor fi segmentate pe linii atunci când depășesc lungimea maximă a bucății. De asemenea, puteți utiliza delimitatori speciali definiți de dumneavoastră (de exemplu, ***).', maxLengthCheck: 'Lungimea maximă a bucății trebuie să fie mai mică de {{limit}}', + notAvailableForQA: 'Nu este disponibil pentru Indexul de întrebări și răspunsuri', + generalTip: 'Modul general de fragmentare a textului, bucățile recuperate și rechemate sunt aceleași.', + previewChunk: 'Previzualizare bucată', + previewChunkTip: 'Faceți clic pe butonul "Previzualizare bucată" din stânga pentru a încărca previzualizarea', + fullDoc: 'Documentul complet', + parentChildDelimiterTip: 'Un delimitator este caracterul folosit pentru a separa textul. \\n\\n este recomandat pentru împărțirea documentului original în bucăți părinte mari. De asemenea, puteți utiliza delimitatori speciali definiți de dvs.', + fullDocTip: 'Întregul document este folosit ca bucată părinte și preluat direct. Vă rugăm să rețineți că, din motive de performanță, textul care depășește 10000 de jetoane va fi trunchiat automat.', + switch: 'Comutator', + previewChunkCount: '{{număr}} Bucăți estimate', + parentChunkForContext: 'Părinte-bucată pentru context', + paragraph: 'Paragraf', + childChunkForRetrieval: 'Child-chunk pentru recuperare', + parentChild: 'Părinte-copil', + parentChildTip: 'Când utilizați modul părinte-copil, fragmentul copil este utilizat pentru recuperare, iar fragmentul părinte este utilizat pentru reamintire ca context.', + highQualityTip: 'După terminarea încorporarii în modul Înaltă calitate, revenirea la modul Economic nu este disponibilă.', + qaSwitchHighQualityTipTitle: 'Formatul de întrebări și răspunsuri necesită o metodă de indexare de înaltă calitate', + paragraphTip: 'Acest mod împarte textul în paragrafe pe baza delimitatorilor și a lungimii maxime a bucății, folosind textul împărțit ca bucată părinte pentru recuperare.', + general: 'General', + notAvailableForParentChild: 'Nu este disponibil pentru Indexul părinte-copil', + qaSwitchHighQualityTipContent: 'În prezent, numai metoda de index de înaltă calitate acceptă fragmentarea formatului de întrebări și răspunsuri. Doriți să treceți la modul de înaltă calitate?', + parentChildChunkDelimiterTip: 'Un delimitator este caracterul folosit pentru a separa textul. \\n este recomandat pentru împărțirea bucăților părinte în bucăți copii mici. De asemenea, puteți utiliza delimitatori speciali definiți de dvs.', + useQALanguage: 'Fragmentați folosind formatul Întrebări și răspunsuri în', }, stepThree: { creationTitle: '🎉 Cunoștință creată', @@ -171,6 +194,11 @@ const translation = { apiKeyPlaceholder: 'Cheie API de la jina.ai', getApiKeyLinkText: 'Obțineți cheia API gratuită la jina.ai', }, + otherDataSource: { + title: 'Conectați-vă la alte surse de date?', + description: 'În prezent, baza de cunoștințe a Dify are doar surse de date limitate. Contribuția cu o sursă de date la baza de cunoștințe Dify este o modalitate fantastică de a ajuta la îmbunătățirea flexibilității și puterii platformei pentru toți utilizatorii. Ghidul nostru de contribuție vă ajută să începeți. Vă rugăm să faceți clic pe linkul de mai jos pentru a afla mai multe.', + learnMore: 'Află mai multe', + }, } export default translation diff --git a/web/i18n/ro-RO/dataset-documents.ts b/web/i18n/ro-RO/dataset-documents.ts index ed8720e35a352a..acf40ec4aa4f89 100644 --- a/web/i18n/ro-RO/dataset-documents.ts +++ b/web/i18n/ro-RO/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: 'TIMP DE ÎNCĂRCARE', status: 'STARE', action: 'ACȚIUNE', + chunkingMode: 'MOD DE FRAGMENTARE', }, name: 'Nume', rename: 'Redenumire', @@ -77,6 +78,7 @@ const translation = { ok: 'OK', }, addUrl: 'Adăugați adresa URL', + learnMore: 'Află mai multe', }, metadata: { title: 'Metadate', @@ -328,6 +330,10 @@ const translation = { automatic: 'Automat', custom: 'Personalizat', previewTip: 'Previzualizarea paragrafului va fi disponibilă după finalizarea încorporării', + hierarchical: 'Părinte-copil', + childMaxTokens: 'Copil', + parentMaxTokens: 'Părinte', + pause: 'Pauză', }, segment: { paragraphs: 'Paragrafe', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Nou segment de text', newQaSegment: 'Nou segment de întrebări și răspunsuri', delete: 'Ștergeți acest fragment?', + searchResults_zero: 'REZULTAT', + searchResults_one: 'REZULTAT', + characters_other: 'Caractere', + chunkAdded: '1 bucată adăugată', + chunks_other: 'BUCĂŢI', + characters_one: 'caracter', + regenerationSuccessTitle: 'Regenerare finalizată', + editedAt: 'Editat la', + addChunk: 'Adăugați o bucată', + chunk: 'Bucată', + chunks_one: 'BUCATĂ', + empty: 'Nu s-a găsit nicio bucată', + expandChunks: 'Extindeți bucățile', + editParentChunk: 'Editați bucata părinte', + regenerationSuccessMessage: 'Puteți închide această fereastră.', + chunkDetail: 'Detalii bucăți', + childChunk: 'Bucată de copil', + edited: 'EDITATE', + childChunks_one: 'BUCATĂ COPIL', + childChunkAdded: '1 bucată de copil adăugată', + regenerationConfirmTitle: 'Doriți să regenerați bucățile copil?', + newChildChunk: 'Bucată copil nouă', + editChildChunk: 'Editați fragmentul copil', + childChunks_other: 'BUCĂȚI COPIL', + newChunk: 'Bucată nouă', + clearFilter: 'Ștergeți filtrul', + editChunk: 'Editați bucata', + addAnother: 'Adăugați altul', + parentChunks_other: 'BUCĂȚI PĂRINTE', + collapseChunks: 'Restrângerea bucăților', + parentChunk: 'Părinte-bucată', + regeneratingMessage: 'Acest lucru poate dura un moment, vă rugăm să așteptați...', + parentChunks_one: 'FRAGMENT PĂRINTE', + regenerationConfirmMessage: 'Regenerarea bucăților copii va suprascrie bucățile copil curente, inclusiv bucățile editate și bucățile nou adăugate. Regenerarea nu poate fi anulată.', + regeneratingTitle: 'Regenerarea bucăților secundare', + addChildChunk: 'Adăugați o bucată copil', + searchResults_other: 'REZULTATELE', }, } diff --git a/web/i18n/ro-RO/dataset-hit-testing.ts b/web/i18n/ro-RO/dataset-hit-testing.ts index 9bf934420a1379..323cd687465448 100644 --- a/web/i18n/ro-RO/dataset-hit-testing.ts +++ b/web/i18n/ro-RO/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'Vizualizați GRAFICUL VECTORIAL', settingTitle: 'Setare de recuperare', viewDetail: 'Vezi detalii', + keyword: 'Cuvinte cheie', + chunkDetail: 'Detalii bucăți', + open: 'Deschide', + hitChunks: 'Accesează {{num}} bucăți copil', + records: 'Înregistrări', } export default translation diff --git a/web/i18n/ro-RO/dataset-settings.ts b/web/i18n/ro-RO/dataset-settings.ts index 0452d568c6bd8f..baf86c7a8ea1f4 100644 --- a/web/i18n/ro-RO/dataset-settings.ts +++ b/web/i18n/ro-RO/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeID: 'ID de cunoștințe extern', externalKnowledgeAPI: 'API de cunoștințe externe', retrievalSettings: 'Setări de recuperare', + indexMethodChangeToEconomyDisabledTip: 'Nu este disponibil pentru retrogradarea de la HQ la ECO', + upgradeHighQualityTip: 'După ce faceți upgrade la modul Înaltă calitate, revenirea la modul Economic nu este disponibilă', + helpText: 'Aflați cum să scrieți o descriere bună a setului de date.', }, } diff --git a/web/i18n/ro-RO/dataset.ts b/web/i18n/ro-RO/dataset.ts index 8e35331983f1eb..b73230f4c5281c 100644 --- a/web/i18n/ro-RO/dataset.ts +++ b/web/i18n/ro-RO/dataset.ts @@ -146,6 +146,26 @@ const translation = { mixtureInternalAndExternalTip: 'Modelul Rerank este necesar pentru amestecul de cunoștințe interne și externe.', externalAPIPanelDescription: 'API-ul de cunoștințe externe este utilizat pentru a se conecta la o bază de cunoștințe din afara Dify și pentru a prelua cunoștințe din acea bază de cunoștințe.', createNewExternalAPI: 'Creați un nou API de cunoștințe externe', + chunkingMode: { + general: 'General', + parentChild: 'Părinte-copil', + }, + parentMode: { + paragraph: 'Paragraf', + fullDoc: 'Documentar complet', + }, + batchAction: { + enable: 'Activa', + cancel: 'Anula', + delete: 'Șterge', + disable: 'Dezactiva', + selected: 'Selectat', + archive: 'Arhivă', + }, + documentsDisabled: '{{num}} documente dezactivate - inactive de peste 30 de zile', + preprocessDocument: '{{num}} Procesarea prealabilă a documentelor', + enable: 'Activa', + localDocs: 'Documente locale', } export default translation diff --git a/web/i18n/ru-RU/common.ts b/web/i18n/ru-RU/common.ts index 64a7c9375d4c0a..ba349fcf222260 100644 --- a/web/i18n/ru-RU/common.ts +++ b/web/i18n/ru-RU/common.ts @@ -42,6 +42,11 @@ const translation = { zoomOut: 'Уменьшение масштаба', openInNewTab: 'Открыть в новой вкладке', copyImage: 'Скопировать изображение', + close: 'Закрывать', + regenerate: 'Регенерировать', + view: 'Вид', + viewMore: 'ПОДРОБНЕЕ', + saveAndRegenerate: 'Сохранение и повторное создание дочерних блоков', }, errorMsg: { fieldRequired: '{{field}} обязательно', @@ -478,6 +483,7 @@ const translation = { emptyTip: 'Знания не были связаны, пожалуйста, перейдите в приложение или плагин, чтобы завершить связывание.', viewDoc: 'Просмотреть документацию', relatedApp: 'связанные приложения', + noRelatedApp: 'Нет связанных приложений', }, voiceInput: { speaking: 'Говорите сейчас...', diff --git a/web/i18n/ru-RU/dataset-creation.ts b/web/i18n/ru-RU/dataset-creation.ts index ca88e093bc7e99..40ae3a6cfdcc44 100644 --- a/web/i18n/ru-RU/dataset-creation.ts +++ b/web/i18n/ru-RU/dataset-creation.ts @@ -87,6 +87,7 @@ const translation = { jinaReaderTitle: 'Конвертируйте весь сайт в Markdown', useSitemapTooltip: 'Следуйте карте сайта, чтобы просканировать сайт. Если нет, Jina Reader будет сканировать итеративно в зависимости от релевантности страницы, выдавая меньшее количество страниц, но более высокого качества.', }, + cancel: 'Отмена', }, stepTwo: { segmentation: 'Настройки фрагментации', @@ -148,6 +149,28 @@ const translation = { datasetSettingLink: 'настройки базы знаний.', separatorTip: 'Разделитель — это символ, используемый для разделения текста. \\n\\n и \\n — это часто используемые разделители для разделения абзацев и строк. В сочетании с запятыми (\\n\\n,\\n) абзацы будут сегментированы по строкам, если максимальная длина блока превышает их. Вы также можете использовать специальные разделители, определенные вами (например, ***).', maxLengthCheck: 'Максимальная длина блока должна быть меньше {{limit}}', + switch: 'Выключатель', + parentChunkForContext: 'Родительский блок для контекста', + previewChunkTip: 'Нажмите кнопку «Предварительный просмотр фрагмента» слева, чтобы загрузить предварительный просмотр', + notAvailableForParentChild: 'Недоступно для индекса типа "родитель-потомок"', + parentChildChunkDelimiterTip: 'Разделитель — это символ, используемый для разделения текста. \\n рекомендуется для разбиения родительских блоков на небольшие дочерние блоки. Вы также можете использовать специальные разделители, определенные самостоятельно.', + previewChunk: 'Предварительный просмотр фрагмента', + previewChunkCount: '{{Количество}} Предполагаемые куски', + generalTip: 'Общий режим фрагментации текста, извлекаемые и вызываемые фрагменты одинаковы.', + general: 'Общее', + useQALanguage: 'Фрагмент с использованием формата Q&A в', + notAvailableForQA: 'Недоступно для индекса Q&A', + paragraph: 'Параграф', + parentChild: 'Родитель-дочерний', + fullDoc: 'Полный документальный фильм', + qaSwitchHighQualityTipTitle: 'Формат вопросов и ответов требует высококачественного метода индексации', + parentChildDelimiterTip: 'Разделитель — это символ, используемый для разделения текста. \\n\\n рекомендуется для разделения исходного документа на большие родительские части. Вы также можете использовать специальные разделители, определенные самостоятельно.', + parentChildTip: 'При использовании режима «родитель-потомок» дочерний блок используется для извлечения, а родительский блок — для вызова в качестве контекста.', + paragraphTip: 'В этом режиме текст разбивается на абзацы на основе разделителей и максимальной длины блока, используя разделенный текст в качестве родительского блока для извлечения.', + highQualityTip: 'После завершения встраивания в режиме «Высокое качество» возврат к экономичному режиму невозможен.', + childChunkForRetrieval: 'Детский фрагмент для извлечения', + qaSwitchHighQualityTipContent: 'В настоящее время только высококачественный метод индекса поддерживает фрагментацию формата Q&A. Хотели бы вы перейти в режим высокого качества?', + fullDocTip: 'Весь документ используется в качестве родительского блока и извлекается напрямую. Обратите внимание, что по причинам производительности текст, превышающий 10000 токенов, будет автоматически обрезан.', }, stepThree: { creationTitle: '🎉 База знаний создана', @@ -171,6 +194,11 @@ const translation = { configJinaReader: 'Настройка Jina Reader', apiKeyPlaceholder: 'Ключ API от jina.ai', }, + otherDataSource: { + learnMore: 'Подробнее', + title: 'Подключаться к другим источникам данных?', + description: 'В настоящее время база знаний Dify имеет лишь ограниченные источники данных. Добавление источника данных в базу знаний Dify — это отличный способ повысить гибкость и возможности платформы для всех пользователей. Наше руководство по вкладу поможет вам легко начать работу. Пожалуйста, нажмите на ссылку ниже, чтобы узнать больше.', + }, } export default translation diff --git a/web/i18n/ru-RU/dataset-documents.ts b/web/i18n/ru-RU/dataset-documents.ts index b1870fb6808e27..f344a7e48c64c7 100644 --- a/web/i18n/ru-RU/dataset-documents.ts +++ b/web/i18n/ru-RU/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'ВРЕМЯ ЗАГРУЗКИ', status: 'СТАТУС', action: 'ДЕЙСТВИЕ', + chunkingMode: 'РЕЖИМ ДРОБЛЕНИЯ', }, rename: 'Переименовать', name: 'Название', @@ -77,6 +78,7 @@ const translation = { error: 'Ошибка импорта', ok: 'ОК', }, + learnMore: 'Подробнее', }, metadata: { title: 'Метаданные', @@ -328,6 +330,10 @@ const translation = { automatic: 'Автоматически', custom: 'Пользовательский', previewTip: 'Предварительный просмотр абзацев будет доступен после завершения расчета эмбеддингов', + parentMaxTokens: 'Родитель', + childMaxTokens: 'Ребёнок', + hierarchical: 'Родитель-дочерний', + pause: 'Пауза', }, segment: { paragraphs: 'Абзацы', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Новый текстовый сегмент', newQaSegment: 'Новый сегмент вопрос-ответ', delete: 'Удалить этот фрагмент?', + chunks_other: 'КУСКИ', + searchResults_one: 'РЕЗУЛЬТАТ', + parentChunk: 'Родительский блок', + characters_other: 'письмена', + edited: 'ОТРЕДАКТИРОВАНЫ', + regenerationSuccessMessage: 'Вы можете закрыть это окно.', + searchResults_other: 'РЕЗУЛЬТАТЫ', + regeneratingTitle: 'Регенерация дочерних блоков', + parentChunks_one: 'РОДИТЕЛЬСКИЙ БЛОК', + childChunk: 'Чайлд-Чанк', + editedAt: 'Отредактировано в', + editChildChunk: 'Редактирование дочернего фрагмента', + parentChunks_other: 'РОДИТЕЛЬСКИЕ БЛОКИ', + regenerationSuccessTitle: 'Регенерация завершена', + childChunks_one: 'ДОЧЕРНИЙ ЧАНК', + newChunk: 'Новый чанк', + addAnother: 'Добавить еще один', + clearFilter: 'Очистить фильтр', + addChunk: 'Добавить чанк', + editParentChunk: 'Редактирование родительского блока', + chunkDetail: 'Деталь Чанка', + regenerationConfirmMessage: 'При повторном создании дочерних блоков текущие дочерние блоки будут перезаписаны, включая отредактированные и вновь добавленные блоки. Регенерацию нельзя отменить.', + collapseChunks: 'Сворачивание кусков', + regenerationConfirmTitle: 'Вы хотите регенерировать дочерние куски?', + searchResults_zero: 'РЕЗУЛЬТАТ', + childChunks_other: 'ДЕТСКИЕ КУСОЧКИ', + childChunkAdded: 'Добавлен 1 дочерний чанк', + editChunk: 'Редактировать фрагмент', + empty: 'Чанк не найден', + chunks_one: 'ЛОМОТЬ', + regeneratingMessage: 'Это может занять некоторое время, пожалуйста, подождите...', + chunkAdded: 'Добавлен 1 блок', + chunk: 'Ломоть', + expandChunks: 'Развернуть чанки', + characters_one: 'характер', + addChildChunk: 'Добавить дочерний чанк', + newChildChunk: 'Новый дочерний чанк', }, } diff --git a/web/i18n/ru-RU/dataset-hit-testing.ts b/web/i18n/ru-RU/dataset-hit-testing.ts index c8aeff7d5f9e85..5ac504efbf039b 100644 --- a/web/i18n/ru-RU/dataset-hit-testing.ts +++ b/web/i18n/ru-RU/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'Посмотреть ВЕКТОРНУЮ ДИАГРАММУ', viewDetail: 'Подробнее', settingTitle: 'Настройка извлечения', + records: 'Записи', + hitChunks: 'Попадание {{num}} дочерних чанков', + chunkDetail: 'Деталь Чанка', + open: 'Открытый', + keyword: 'Ключевые слова', } export default translation diff --git a/web/i18n/ru-RU/dataset-settings.ts b/web/i18n/ru-RU/dataset-settings.ts index c862d9ca468b76..82c2fafe2d8dd5 100644 --- a/web/i18n/ru-RU/dataset-settings.ts +++ b/web/i18n/ru-RU/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeAPI: 'API внешних знаний', retrievalSettings: 'Настройки извлечения', externalKnowledgeID: 'Внешний идентификатор базы знаний', + helpText: 'Узнайте, как написать хорошее описание набора данных.', + upgradeHighQualityTip: 'После обновления до режима «Высокое качество» возврат к экономичному режиму невозможен', + indexMethodChangeToEconomyDisabledTip: 'Недоступно для понижения уровня с HQ до ECO', }, } diff --git a/web/i18n/ru-RU/dataset.ts b/web/i18n/ru-RU/dataset.ts index cdff5061389f9c..c2831756f1acf7 100644 --- a/web/i18n/ru-RU/dataset.ts +++ b/web/i18n/ru-RU/dataset.ts @@ -146,6 +146,26 @@ const translation = { allExternalTip: 'При использовании только внешних знаний пользователь может выбрать, следует ли включать модель повторного ранжирования. Если этот параметр не включен, полученные фрагменты будут сортироваться на основе баллов. Когда стратегии извлечения из разных баз знаний несовместимы, они будут неточными.', externalAPIPanelDocumentation: 'Узнайте, как создать API внешних знаний', externalAPIPanelDescription: 'Внешний API базы знаний используется для подключения к базе знаний за пределами Dify и извлечения знаний из этой базы знаний.', + chunkingMode: { + general: 'Общее', + parentChild: 'Родитель-дочерний', + }, + parentMode: { + fullDoc: 'Полный документ', + paragraph: 'Параграф', + }, + batchAction: { + enable: 'Давать возможность', + delete: 'Удалить', + selected: 'Выбранный', + disable: 'Отключить', + cancel: 'Отмена', + archive: 'Архив', + }, + preprocessDocument: '{{число}} Предварительная обработка документов', + documentsDisabled: 'Документы {{num}} отключены - неактивны более 30 дней', + localDocs: 'Местная документация', + enable: 'Давать возможность', } export default translation diff --git a/web/i18n/sl-SI/common.ts b/web/i18n/sl-SI/common.ts index 0c5d1dfc4b63f3..a0e916d29a561c 100644 --- a/web/i18n/sl-SI/common.ts +++ b/web/i18n/sl-SI/common.ts @@ -42,6 +42,11 @@ const translation = { openInNewTab: 'Odpri v novem zavihku', zoomOut: 'Pomanjšanje', zoomIn: 'Povečava', + saveAndRegenerate: 'Shranite in regenerirajte otroške koščke', + close: 'Blizu', + view: 'Pogled', + regenerate: 'Regeneracijo', + viewMore: 'POGLEJ VEČ', }, errorMsg: { fieldRequired: '{{field}} je obvezno', @@ -677,6 +682,7 @@ const translation = { emptyTip: 'Znanje ni bilo povezano, prosimo, pojdite na aplikacijo ali vtičnik, da dokončate združenje.', viewDoc: 'Oglejte si dokumentacijo', relatedApp: 'Povezane aplikacije', + noRelatedApp: 'Brez povezanih aplikacij', }, voiceInput: { notAllow: 'Mikrofon ni pooblaščen', diff --git a/web/i18n/sl-SI/dataset-creation.ts b/web/i18n/sl-SI/dataset-creation.ts index 8dcfa8c3f50cb9..573acb9352e0dd 100644 --- a/web/i18n/sl-SI/dataset-creation.ts +++ b/web/i18n/sl-SI/dataset-creation.ts @@ -92,6 +92,7 @@ const translation = { preview: 'Predogled', maxDepthTooltip: 'Največja globina iskanja glede na vneseni URL. Globina 0 bo iskala le stran z vnesenim URL-jem, globina 1 bo iskala URL in vse za tem, dodano z enim /, in tako naprej.', }, + cancel: 'Odpovedati', }, stepTwo: { segmentation: 'Nastavitve razdeljevanja', @@ -153,6 +154,28 @@ const translation = { retrievalSettingTip: 'Če želite spremeniti nastavitve iskanja, pojdite na ', datasetSettingLink: 'nastavitve Znanja.', maxLengthCheck: 'Največja dolžina kosa mora biti manjša od {{limit}}', + fullDoc: 'Celoten dokument', + parentChildChunkDelimiterTip: 'Ločilo je znak, ki se uporablja za ločevanje besedila. \\n je priporočljivo za razdelitev starševskih kosov na majhne otroške koščke. Uporabite lahko tudi posebne ločila, ki ste jih določili sami.', + highQualityTip: 'Ko končate vdelavo v načinu visoke kakovosti, vrnitev v ekonomični način ni na voljo.', + parentChildTip: 'Ko uporabljate način nadreje-podrejenega, se podrejeni kos uporablja za pridobivanje, nadrejeni kos pa se uporablja za odpoklic kot kontekst.', + paragraph: 'Odstavek', + qaSwitchHighQualityTipTitle: 'Oblika zapisa vprašanj in odgovorov zahteva visokokakovostno metodo indeksiranja', + paragraphTip: 'Ta način razdeli besedilo na odstavke na podlagi ločil in največje dolžine kosa, pri čemer se razdeljeno besedilo uporabi kot nadrejeni kos za pridobivanje.', + parentChildDelimiterTip: 'Ločilo je znak, ki se uporablja za ločevanje besedila. \\n\\n je priporočljivo za razdelitev izvirnega dokumenta na velike nadrejene dele. Uporabite lahko tudi posebne ločila, ki ste jih določili sami.', + notAvailableForQA: 'Ni na voljo za indeks vprašanj in odgovorov', + parentChild: 'Starš-otrok', + parentChunkForContext: 'Nadrejeni kos za kontekst', + notAvailableForParentChild: 'Ni na voljo za indeks nadrejenega in podrejenega', + previewChunk: 'Predogled kosa', + previewChunkCount: '{{štetje}} Ocenjeni kosi', + previewChunkTip: 'Kliknite gumb »Predogled kosa« na levi, da naložite predogled', + fullDocTip: 'Celoten dokument je uporabljen kot nadrejeni kos in pridobljen neposredno. Upoštevajte, da bo zaradi uspešnosti besedilo, ki presega 10000 žetonov, samodejno prikrajšano.', + childChunkForRetrieval: 'Otroški kos za pridobivanje', + qaSwitchHighQualityTipContent: 'Trenutno samo visokokakovostna metoda indeksa podpira deljenje v obliki vprašanj in odgovorov. Želite preklopiti na kakovosten način?', + generalTip: 'Splošni način deljenja besedila, pridobljeni in odpoklicani kosi so enaki.', + useQALanguage: 'Delček z obliko zapisa vprašanj in odgovorov v', + general: 'Splošno', + switch: 'Stikalo', }, stepThree: { creationTitle: '🎉 Znanje ustvarjeno', @@ -171,6 +194,11 @@ const translation = { modelButtonConfirm: 'Potrdi', modelButtonCancel: 'Prekliči', }, + otherDataSource: { + learnMore: 'Izvedi več', + title: 'Vzpostavite povezavo z drugimi viri podatkov?', + description: 'Trenutno ima baza znanja Dify le omejene vire podatkov. Prispevanje vira podatkov v bazo znanja Dify je fantastičen način za izboljšanje prilagodljivosti in moči platforme za vse uporabnike. Naš vodnik za prispevke olajša začetek. Če želite izvedeti več, kliknite spodnjo povezavo.', + }, } export default translation diff --git a/web/i18n/sl-SI/dataset-documents.ts b/web/i18n/sl-SI/dataset-documents.ts index 0ca8be9e95b8ee..3953e9a57453b7 100644 --- a/web/i18n/sl-SI/dataset-documents.ts +++ b/web/i18n/sl-SI/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'ČAS NALAGANJA', status: 'STATUS', action: 'DEJANJE', + chunkingMode: 'NAČIN KOŠČENJA', }, rename: 'Preimenuj', name: 'Ime', @@ -77,6 +78,7 @@ const translation = { error: 'Napaka pri uvozu', ok: 'V redu', }, + learnMore: 'Izvedi več', }, metadata: { title: 'Metapodatki', @@ -328,6 +330,10 @@ const translation = { automatic: 'Samodejno', custom: 'Po meri', previewTip: 'Predogled odstavkov bo na voljo po zaključku vdelave', + hierarchical: 'Starš-otrok', + childMaxTokens: 'Otrok', + pause: 'Pavza', + parentMaxTokens: 'Starš', }, segment: { paragraphs: 'Odstavki', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Nov besedilni segment', newQaSegment: 'Nov Q&A segment', delete: 'Izbriši ta del?', + regenerationSuccessTitle: 'Regeneracija končana', + expandChunks: 'Razširitev kosov', + childChunk: 'Otroški kos', + editedAt: 'Urejeno na', + edited: 'UREJATI', + addAnother: 'Dodajanje še enega', + childChunks_one: 'OTROŠKI KOS', + chunkDetail: 'Detajl koščka', + chunkAdded: 'Dodan 1 kos', + editChildChunk: 'Urejanje podrejenega kosa', + regenerationConfirmTitle: 'Ali želite regenerirati otroške koščke?', + empty: 'Ni najdenega koščka', + searchResults_other: 'REZULTATI', + childChunks_other: 'OTROŠKI KOŠČKI', + addChildChunk: 'Dodajanje podrejenega kosa', + editParentChunk: 'Urejanje nadrejenega kosa', + regenerationConfirmMessage: 'Obnavljanje podrejenih kosov bo prepisalo trenutne podrejene koščke, vključno z urejenimi koščki in na novo dodanimi kosi. Regeneracije ni mogoče razveljaviti.', + editChunk: 'Uredi kos', + chunks_one: 'KOS', + searchResults_one: 'REZULTAT', + parentChunks_one: 'STARŠEVSKI KOS', + characters_other: 'Znakov', + chunks_other: 'KOSE', + clearFilter: 'Počisti filter', + newChildChunk: 'Nov podzakonski kos', + characters_one: 'znak', + regeneratingTitle: 'Regeneracija otroških kosov', + regeneratingMessage: 'To lahko traja trenutek, prosim počakajte ...', + parentChunks_other: 'STARŠEVSKI KOSI', + collapseChunks: 'Strniti koščke', + parentChunk: 'Starševski kos', + regenerationSuccessMessage: 'To okno lahko zaprete.', + newChunk: 'Nov kos', + searchResults_zero: 'REZULTAT', + chunk: 'Kos', + addChunk: 'Dodajanje kosa', + childChunkAdded: 'Dodan je 1 kos otroka', }, } diff --git a/web/i18n/sl-SI/dataset-hit-testing.ts b/web/i18n/sl-SI/dataset-hit-testing.ts index 5f5f895d6ef3a7..645fd654d2b2eb 100644 --- a/web/i18n/sl-SI/dataset-hit-testing.ts +++ b/web/i18n/sl-SI/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { noRecentTip: 'Tukaj ni nedavnih rezultatov poizvedb', viewChart: 'Prikaži VEKTORSKI GRAF', viewDetail: 'Prikaži podrobnosti', + records: 'Zapisov', + keyword: 'Ključne besede', + chunkDetail: 'Detajl koščka', + open: 'Odprt', + hitChunks: 'Zadenite {{num}} podrejene koščke', } export default translation diff --git a/web/i18n/sl-SI/dataset-settings.ts b/web/i18n/sl-SI/dataset-settings.ts index 1e42fcd9b4274e..5cd7a72a278c59 100644 --- a/web/i18n/sl-SI/dataset-settings.ts +++ b/web/i18n/sl-SI/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeID: 'ID zunanjega znanja', retrievalSettings: 'Nastavitve pridobivanja', save: 'Shrani', + indexMethodChangeToEconomyDisabledTip: 'Ni na voljo za pregradnjo iz HQ v ECO', + upgradeHighQualityTip: 'Ko nadgradite na način visoke kakovosti, vrnitev v ekonomični način ni na voljo', + helpText: 'Naučite se napisati dober opis nabora podatkov.', }, } diff --git a/web/i18n/sl-SI/dataset.ts b/web/i18n/sl-SI/dataset.ts index 482a3eab7e9644..e0d46be82f4eaa 100644 --- a/web/i18n/sl-SI/dataset.ts +++ b/web/i18n/sl-SI/dataset.ts @@ -146,6 +146,26 @@ const translation = { nTo1RetrievalLegacy: 'N-to-1 pridobivanje bo uradno ukinjeno septembra. Priporočamo uporabo najnovejšega večpotnega pridobivanja za boljše rezultate.', nTo1RetrievalLegacyLink: 'Izvedite več', nTo1RetrievalLegacyLinkText: 'N-to-1 pridobivanje bo uradno ukinjeno septembra.', + chunkingMode: { + general: 'Splošno', + parentChild: 'Starš-otrok', + }, + parentMode: { + fullDoc: 'Celoten dokument', + paragraph: 'Odstavek', + }, + batchAction: { + cancel: 'Odpovedati', + selected: 'Izbrane', + enable: 'Omogočiti', + disable: 'Onesposobiti', + archive: 'Arhiv', + delete: 'Izbrisati', + }, + localDocs: 'Lokalni dokumenti', + documentsDisabled: '{{num}} dokumenti onemogočeni - neaktivni več kot 30 dni', + preprocessDocument: '{{num}} Predobdelava dokumentov', + enable: 'Omogočiti', } export default translation diff --git a/web/i18n/th-TH/common.ts b/web/i18n/th-TH/common.ts index 6aa1b30610ec78..edb3698170bbc2 100644 --- a/web/i18n/th-TH/common.ts +++ b/web/i18n/th-TH/common.ts @@ -42,6 +42,11 @@ const translation = { zoomOut: 'ซูมออก', zoomIn: 'ซูมเข้า', openInNewTab: 'เปิดในแท็บใหม่', + view: 'ทิวทัศน์', + regenerate: 'สร้างใหม่', + viewMore: 'ดูเพิ่มเติม', + saveAndRegenerate: 'บันทึกและสร้างก้อนย่อยใหม่', + close: 'ปิด', }, errorMsg: { fieldRequired: '{{field}} เป็นสิ่งจําเป็น', @@ -473,6 +478,7 @@ const translation = { emptyTip: 'ความรู้ยังไม่ได้เชื่อมโยง โปรดไปที่แอปพลิเคชันหรือปลั๊กอินเพื่อเชื่อมโยงให้เสร็จสมบูรณ์', viewDoc: 'ดูเอกสารประกอบ', relatedApp: 'แอปที่เชื่อมโยง', + noRelatedApp: 'ไม่มีแอปที่เชื่อมโยง', }, voiceInput: { speaking: 'พูดเดี๋ยวนี้...', diff --git a/web/i18n/th-TH/dataset-creation.ts b/web/i18n/th-TH/dataset-creation.ts index 16ec1fab3e988e..8beea5eb0f5a11 100644 --- a/web/i18n/th-TH/dataset-creation.ts +++ b/web/i18n/th-TH/dataset-creation.ts @@ -92,6 +92,7 @@ const translation = { preview: 'ดูตัวอย่าง', maxDepthTooltip: 'ความลึกสูงสุดในการรวบรวมข้อมูลเมื่อเทียบกับ URL ที่ป้อน ความลึก 0 เพียงแค่ขูดหน้าของ URL ที่ป้อนความลึก 1 ขูด url และทุกอย่างหลังจาก enteredURL + หนึ่ง / เป็นต้น', }, + cancel: 'ยกเลิก', }, stepTwo: { segmentation: 'การตั้งค่าก้อน', @@ -153,6 +154,28 @@ const translation = { indexSettingTip: 'หากต้องการเปลี่ยนวิธีการจัดทําดัชนีและรูปแบบการฝัง โปรดไปที่', retrievalSettingTip: 'หากต้องการเปลี่ยนการตั้งค่าการดึงข้อมูล โปรดไปที่', datasetSettingLink: 'การตั้งค่าความรู้', + notAvailableForParentChild: 'ไม่สามารถใช้ได้กับ ดัชนีผู้ปกครอง-ลูก', + qaSwitchHighQualityTipContent: 'ปัจจุบัน มีเพียงวิธีการจัดทําดัชนีคุณภาพสูงเท่านั้นที่รองรับการแบ่งกลุ่มรูปแบบ Q&A คุณต้องการเปลี่ยนไปใช้โหมดคุณภาพสูงหรือไม่?', + fullDoc: 'เอกสารฉบับเต็ม', + parentChild: 'พ่อแม่ลูก', + parentChunkForContext: 'Parent-chunk สําหรับบริบท', + general: 'ทั่วไป', + parentChildChunkDelimiterTip: 'ตัวคั่นคืออักขระที่ใช้ในการแยกข้อความ \\n แนะนําให้ใช้สําหรับการแยกก้อนหลักออกเป็นก้อนย่อยขนาดเล็ก คุณยังสามารถใช้ตัวคั่นพิเศษที่กําหนดโดยตัวคุณเอง', + previewChunkCount: '{{นับ}} ก้อนโดยประมาณ', + fullDocTip: 'เอกสารทั้งหมดจะถูกใช้เป็นส่วนหลักและดึงข้อมูลโดยตรง โปรดทราบว่าด้วยเหตุผลด้านประสิทธิภาพ ข้อความที่เกิน 10,000 โทเค็นจะถูกตัดทอนโดยอัตโนมัติ', + useQALanguage: 'ก้อนโดยใช้รูปแบบ Q&A ใน', + switch: 'เปลี่ยน', + paragraphTip: 'โหมดนี้จะแบ่งข้อความออกเป็นย่อหน้าตามตัวคั่นและความยาวของกลุ่มสูงสุด โดยใช้ข้อความที่แยกเป็นส่วนหลักสําหรับการดึงข้อมูล', + childChunkForRetrieval: 'ก้อนเด็กสําหรับการดึงข้อมูล', + parentChildDelimiterTip: 'ตัวคั่นคืออักขระที่ใช้ในการแยกข้อความ \\n\\n แนะนําให้ใช้สําหรับการแบ่งเอกสารต้นฉบับออกเป็นส่วนหลักขนาดใหญ่ คุณยังสามารถใช้ตัวคั่นพิเศษที่กําหนดโดยตัวคุณเอง', + qaSwitchHighQualityTipTitle: 'รูปแบบ Q&A ต้องใช้วิธีการจัดทําดัชนีคุณภาพสูง', + highQualityTip: 'เมื่อฝังในโหมดคุณภาพสูงเสร็จแล้ว จะไม่สามารถเปลี่ยนกลับเป็นโหมดประหยัดได้', + generalTip: 'โหมดการแบ่งกลุ่มข้อความทั่วไป กลุ่มที่ดึงและเรียกคืนจะเหมือนกัน', + previewChunkTip: 'คลิกปุ่ม \'Preview Chunk\' ทางด้านซ้ายเพื่อโหลดตัวอย่าง', + previewChunk: 'ดูตัวอย่าง Chunk', + notAvailableForQA: 'ไม่สามารถใช้ได้กับ Q&A Index', + paragraph: 'วรรค', + parentChildTip: 'เมื่อใช้โหมดผู้ปกครอง-รอง child-chunk จะใช้สําหรับการดึงข้อมูล และ parent-chunk จะใช้สําหรับการเรียกคืนเป็นบริบท', }, stepThree: { creationTitle: '🎉 สร้างความรู้', @@ -171,6 +194,11 @@ const translation = { modelButtonConfirm: 'ยืนยัน', modelButtonCancel: 'ยกเลิก', }, + otherDataSource: { + learnMore: 'ศึกษาเพิ่มเติม', + title: 'เชื่อมต่อกับแหล่งข้อมูลอื่นใช่ไหม', + description: 'ปัจจุบัน ฐานความรู้ของ Dify มีแหล่งข้อมูลที่จํากัดเท่านั้น การมีส่วนร่วมในแหล่งข้อมูลในฐานความรู้ Dify เป็นวิธีที่ยอดเยี่ยมในการช่วยเพิ่มความยืดหยุ่นและพลังของแพลตฟอร์มสําหรับผู้ใช้ทุกคน คู่มือการมีส่วนร่วมของเราทําให้ง่ายต่อการเริ่มต้นใช้งาน โปรดคลิกที่ลิงค์ด้านล่างเพื่อเรียนรู้เพิ่มเติม', + }, } export default translation diff --git a/web/i18n/th-TH/dataset-documents.ts b/web/i18n/th-TH/dataset-documents.ts index 411b8b7c8b661c..a7ea67c11b6e13 100644 --- a/web/i18n/th-TH/dataset-documents.ts +++ b/web/i18n/th-TH/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'เวลาอัปโหลด', status: 'สถานะ', action: 'การเคลื่อนไหว', + chunkingMode: 'โหมดก้อน', }, rename: 'ตั้งชื่อใหม่', name: 'ชื่อ', @@ -77,6 +78,7 @@ const translation = { error: 'ข้อผิดพลาดในการนําเข้า', ok: 'ตกลง, ได้', }, + learnMore: 'ศึกษาเพิ่มเติม', }, metadata: { title: 'ข้อมูลเมตา', @@ -327,6 +329,10 @@ const translation = { automatic: 'อัตโนมัติ', custom: 'ธรรมเนียม', previewTip: 'การแสดงตัวอย่างย่อหน้าจะพร้อมใช้งานหลังจากการฝังเสร็จสิ้น', + childMaxTokens: 'เด็ก', + parentMaxTokens: 'พ่อแม่', + pause: 'หยุด', + hierarchical: 'พ่อแม่ลูก', }, segment: { paragraphs: 'ย่อหน้า', @@ -345,6 +351,43 @@ const translation = { newTextSegment: 'เซ็กเมนต์ข้อความใหม่', newQaSegment: 'ส่วนถาม & คําตอบใหม่', delete: 'ลบส่วนนี้ ?', + parentChunks_other: 'ก้อนผู้ปกครอง', + childChunkAdded: 'เพิ่มก้อนลูก 1 ชิ้น', + regeneratingMessage: 'อาจใช้เวลาสักครู่โปรดรอสักครู่...', + regenerationSuccessTitle: 'การฟื้นฟูเสร็จสมบูรณ์', + chunkDetail: 'รายละเอียดก้อน', + childChunk: 'ก้อนเด็ก', + chunk: 'ก้อน', + edited: 'แก้ไข', + addChunk: 'เพิ่มก้อน', + editedAt: 'แก้ไขที่', + childChunks_other: 'ก้อนเด็ก', + editChildChunk: 'แก้ไข Child Chunk', + parentChunk: 'ผู้ปกครอง-ก้อน', + newChildChunk: 'ก้อนเด็กใหม่', + regenerationConfirmTitle: 'คุณต้องการสร้างก้อนเด็กขึ้นมาใหม่หรือไม่?', + chunks_other: 'ก้อน', + regeneratingTitle: 'การสร้างก้อนลูกใหม่', + regenerationConfirmMessage: 'การสร้างก้อนย่อยใหม่จะเขียนทับส่วนย่อยปัจจุบัน รวมถึงก้อนที่แก้ไขแล้วและก้อนที่เพิ่มเข้ามาใหม่ การฟื้นฟูไม่สามารถยกเลิกได้', + chunkAdded: 'เพิ่ม 1 ก้อน', + expandChunks: 'ขยายก้อน', + searchResults_zero: 'ผล', + characters_one: 'อักขระ', + empty: 'ไม่พบก้อน', + addChildChunk: 'เพิ่ม Child Chunk', + chunks_one: 'ก้อน', + clearFilter: 'ล้างตัวกรอง', + searchResults_one: 'ผล', + addAnother: 'เพิ่มอีก', + editParentChunk: 'แก้ไขส่วนผู้ปกครอง', + characters_other: 'อักขระ', + parentChunks_one: 'ก้อนผู้ปกครอง', + collapseChunks: 'ยุบก้อน', + newChunk: 'ก้อนใหม่', + editChunk: 'แก้ไขก้อน', + searchResults_other: 'ผลลัพธ์', + regenerationSuccessMessage: 'คุณสามารถปิดหน้าต่างนี้ได้', + childChunks_one: 'ก้อนเด็ก', }, } diff --git a/web/i18n/th-TH/dataset-hit-testing.ts b/web/i18n/th-TH/dataset-hit-testing.ts index f5c692a191a82d..d04f2be2fcbf8c 100644 --- a/web/i18n/th-TH/dataset-hit-testing.ts +++ b/web/i18n/th-TH/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { noRecentTip: 'ไม่มีผลการค้นหาล่าสุดที่นี่', viewChart: 'ดูแผนภูมิเวกเตอร์', viewDetail: 'ดูรายละเอียด', + open: 'เปิด', + keyword: 'คำ', + chunkDetail: 'รายละเอียดก้อน', + records: 'เรก คอร์ด', + hitChunks: 'กด {{num}} ก้อนลูก', } export default translation diff --git a/web/i18n/th-TH/dataset-settings.ts b/web/i18n/th-TH/dataset-settings.ts index 2e49c95f9b01d9..ec05db68247046 100644 --- a/web/i18n/th-TH/dataset-settings.ts +++ b/web/i18n/th-TH/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeID: 'ID ความรู้ภายนอก', retrievalSettings: 'การตั้งค่าการดึงข้อมูล', save: 'ประหยัด', + indexMethodChangeToEconomyDisabledTip: 'ไม่สามารถดาวน์เกรดจาก HQ เป็น ECO ได้', + helpText: 'เรียนรู้วิธีเขียนคําอธิบายชุดข้อมูลที่ดี', + upgradeHighQualityTip: 'เมื่ออัปเกรดเป็นโหมดคุณภาพสูงแล้ว จะไม่สามารถเปลี่ยนกลับเป็นโหมดประหยัดได้', }, } diff --git a/web/i18n/th-TH/dataset.ts b/web/i18n/th-TH/dataset.ts index f75ff462a62baa..a2a07bf5a11e2f 100644 --- a/web/i18n/th-TH/dataset.ts +++ b/web/i18n/th-TH/dataset.ts @@ -145,6 +145,26 @@ const translation = { nTo1RetrievalLegacy: 'การดึงข้อมูล N-to-1 จะเลิกใช้อย่างเป็นทางการตั้งแต่เดือนกันยายน ขอแนะนําให้ใช้การดึงข้อมูลหลายเส้นทางล่าสุดเพื่อให้ได้ผลลัพธ์ที่ดีขึ้น', nTo1RetrievalLegacyLink: 'ศึกษาเพิ่มเติม', nTo1RetrievalLegacyLinkText: 'การดึงข้อมูล N-to-1 จะเลิกใช้อย่างเป็นทางการในเดือนกันยายน', + chunkingMode: { + general: 'ทั่วไป', + parentChild: 'พ่อแม่ลูก', + }, + parentMode: { + paragraph: 'วรรค', + fullDoc: 'เอกสารฉบับเต็ม', + }, + batchAction: { + selected: 'เลือก', + archive: 'หอจดหมายเหตุ', + delete: 'ลบ', + enable: 'เปิด', + cancel: 'ยกเลิก', + disable: 'เก', + }, + localDocs: 'เอกสารท้องถิ่น', + preprocessDocument: '{{num}} เอกสารการประมวลผลล่วงหน้า', + documentsDisabled: '{{num}} เอกสารถูกปิดใช้งาน - ไม่ได้ใช้งานนานกว่า 30 วัน', + enable: 'เปิด', } export default translation diff --git a/web/i18n/tr-TR/common.ts b/web/i18n/tr-TR/common.ts index 9792f07e18aece..387208c8501f8b 100644 --- a/web/i18n/tr-TR/common.ts +++ b/web/i18n/tr-TR/common.ts @@ -42,6 +42,11 @@ const translation = { zoomOut: 'Uzaklaştırma', openInNewTab: 'Yeni sekmede aç', zoomIn: 'Yakınlaştırma', + view: 'Görünüm', + viewMore: 'DAHA FAZLA GÖSTER', + regenerate: 'Yenilemek', + saveAndRegenerate: 'Alt Parçaları Kaydetme ve Yeniden Oluşturma', + close: 'Kapatmak', }, errorMsg: { fieldRequired: '{{field}} gereklidir', @@ -478,6 +483,7 @@ const translation = { emptyTip: 'Bilgi ilişkilendirilmemiş, ilişkilendirme işlemini tamamlamak için uygulama veya eklentiye gidin.', viewDoc: 'Dökümantasyon görüntüle', relatedApp: 'bağlantılı uygulamalar', + noRelatedApp: 'Bağlı uygulama yok', }, voiceInput: { speaking: 'Şimdi konuş...', diff --git a/web/i18n/tr-TR/dataset-creation.ts b/web/i18n/tr-TR/dataset-creation.ts index 11e5789884f458..f8ddefb6ae3f33 100644 --- a/web/i18n/tr-TR/dataset-creation.ts +++ b/web/i18n/tr-TR/dataset-creation.ts @@ -87,6 +87,7 @@ const translation = { jinaReaderNotConfigured: 'Jina Reader yapılandırılmadı', jinaReaderDocLink: 'https://jina.ai/reader', }, + cancel: 'İptal', }, stepTwo: { segmentation: 'Parçalanma ayarları', @@ -148,6 +149,28 @@ const translation = { datasetSettingLink: 'Bilgi ayarlarına gidin.', separatorTip: 'Sınırlayıcı, metni ayırmak için kullanılan karakterdir. \\n\\n ve \\n, paragrafları ve satırları ayırmak için yaygın olarak kullanılan sınırlayıcılardır. Virgüllerle (\\n\\n,\\n) birleştirildiğinde, paragraflar maksimum öbek uzunluğunu aştığında satırlarla bölünür. Kendiniz tarafından tanımlanan özel sınırlayıcıları da kullanabilirsiniz (örn.', maxLengthCheck: 'Maksimum yığın uzunluğu {{limit}}\'den az olmalıdır', + paragraph: 'Paragraf', + parentChildDelimiterTip: 'Sınırlayıcı, metni ayırmak için kullanılan karakterdir. \\n\\n orijinal belgeyi büyük üst parçalara bölmek için önerilir. Kendiniz tarafından tanımlanan özel sınırlayıcıları da kullanabilirsiniz.', + parentChild: 'Ebeveyn-çocuk', + previewChunkCount: '{{sayı}} Tahmini parçalar', + parentChildChunkDelimiterTip: 'Sınırlayıcı, metni ayırmak için kullanılan karakterdir. \\n Üst parçaları küçük alt parçalara bölmek için önerilir. Kendiniz tarafından tanımlanan özel sınırlayıcıları da kullanabilirsiniz.', + qaSwitchHighQualityTipContent: 'Şu anda, yalnızca yüksek kaliteli dizin yöntemi Soru-Cevap biçimi öbeklerini destekler. Yüksek kalite moduna geçmek ister misiniz?', + previewChunkTip: 'Önizlemeyi yüklemek için soldaki \'Önizleme Parçası\' düğmesini tıklayın', + qaSwitchHighQualityTipTitle: 'Soru-Cevap Formatı Yüksek Kaliteli İndeksleme Yöntemi Gerektirir', + notAvailableForQA: 'Soru-Cevap Dizini için kullanılamaz', + generalTip: 'Genel metin parçalama modu, alınan ve geri çağrılan parçalar aynıdır.', + paragraphTip: 'Bu mod, metni sınırlayıcılara ve maksimum öbek uzunluğuna göre paragraflara böler ve bölünmüş metni almak için üst öbek olarak kullanır.', + parentChildTip: 'Üst-alt modu kullanılırken, alt öbek alma için kullanılır ve üst öbek bağlam olarak geri çağırma için kullanılır.', + fullDocTip: 'Belgenin tamamı üst yığın olarak kullanılır ve doğrudan alınır. Performans nedenleriyle, 10000 jetonu aşan metnin otomatik olarak kesileceğini lütfen unutmayın.', + fullDoc: 'Tam Doküman', + useQALanguage: 'Soru-Cevap biçimini kullanarak parçalama', + general: 'Genel', + switch: 'Şalter', + notAvailableForParentChild: 'Üst-alt Dizini için kullanılamaz', + previewChunk: 'Önizleme Parçası', + highQualityTip: 'Yüksek Kalite modunda yerleştirme işlemi tamamlandıktan sonra, Ekonomik moda geri dönülemez.', + childChunkForRetrieval: 'Alma için alt yığın', + parentChunkForContext: 'Bağlam için üst yığın', }, stepThree: { creationTitle: '🎉 Bilgi oluşturuldu', @@ -171,6 +194,11 @@ const translation = { configJinaReader: 'Jina Reader\'ı Yapılandırma', getApiKeyLinkText: 'Ücretsiz API anahtarınızı hemen jina.ai alın', }, + otherDataSource: { + learnMore: 'Daha fazla bilgi edinin', + description: 'Şu anda, Dify\'ın bilgi tabanı yalnızca sınırlı veri kaynaklarına sahiptir. Dify bilgi tabanına bir veri kaynağına katkıda bulunmak, tüm kullanıcılar için platformun esnekliğini ve gücünü artırmaya yardımcı olmanın harika bir yoludur. Katkı kılavuzumuz, başlamanızı kolaylaştırır. Daha fazla bilgi edinmek için lütfen aşağıdaki bağlantıya tıklayın.', + title: 'Diğer veri kaynaklarına bağlanılıyor mu?', + }, } export default translation diff --git a/web/i18n/tr-TR/dataset-documents.ts b/web/i18n/tr-TR/dataset-documents.ts index efe51863066c30..7a297d9093447b 100644 --- a/web/i18n/tr-TR/dataset-documents.ts +++ b/web/i18n/tr-TR/dataset-documents.ts @@ -13,6 +13,7 @@ const translation = { uploadTime: 'YÜKLEME ZAMANI', status: 'DURUM', action: 'EYLEM', + chunkingMode: 'PARÇALAMA MODU', }, rename: 'Yeniden Adlandır', name: 'Ad', @@ -77,6 +78,7 @@ const translation = { error: 'İçe Aktarma Hatası', ok: 'Tamam', }, + learnMore: 'Daha fazla bilgi edinin', }, metadata: { title: 'Meta Veri', @@ -327,6 +329,10 @@ const translation = { automatic: 'Otomatik', custom: 'Özel', previewTip: 'Paragraf önizlemesi yerleştirme tamamlandıktan sonra kullanılabilir olacak', + childMaxTokens: 'Çocuk', + parentMaxTokens: 'Ebeveyn', + hierarchical: 'Ebeveyn-çocuk', + pause: 'Duraklat', }, segment: { paragraphs: 'Paragraflar', @@ -345,6 +351,43 @@ const translation = { newTextSegment: 'Yeni Metin Parçası', newQaSegment: 'Yeni Soru-Cevap Parçası', delete: 'Bu parçayı silmek istiyor musunuz?', + chunks_one: 'ÖBEK', + childChunks_one: 'ALT ÖBEK', + searchResults_one: 'SONUÇ', + chunk: 'Öbek', + addChunk: 'Parça Ekle', + regenerationSuccessMessage: 'Bu pencereyi kapatabilirsiniz.', + characters_other: 'Karakter', + editParentChunk: 'Üst Parçayı Düzenle', + editChildChunk: 'Alt Parçayı Düzenle', + edited: 'DÜZENLEN -MİŞ', + collapseChunks: 'Parçaları daraltma', + chunkDetail: 'Yığın Detayı', + parentChunk: 'Ebeveyn-Yığın', + parentChunks_one: 'ÜST ÖBEK', + searchResults_other: 'SONUÇ -LARI', + childChunks_other: 'ÇOCUK PARÇALARI', + newChunk: 'Yeni Yığın', + regenerationConfirmMessage: 'Alt öbekleri yeniden oluşturmak, düzenlenen öbekler ve yeni eklenen öbekler de dahil olmak üzere mevcut alt öbeklerin üzerine yazılır. Yenilenme geri alınamaz.', + empty: 'Yığın bulunamadı', + parentChunks_other: 'ÜST PARÇALAR', + childChunk: 'Çocuk-Parça', + expandChunks: 'Parçaları genişletme', + childChunkAdded: '1 alt öbek eklendi', + newChildChunk: 'Yeni Çocuk Yığını', + editChunk: 'Yığını Düzenle', + chunkAdded: '1 parça eklendi', + regenerationSuccessTitle: 'Rejenerasyon tamamlandı', + regeneratingTitle: 'Alt parçaları yeniden oluşturma', + clearFilter: 'Filtreyi kaldır', + regenerationConfirmTitle: 'Alt parçaları yeniden oluşturmak istiyor musunuz?', + characters_one: 'karakter', + addAnother: 'Bir tane daha ekle', + regeneratingMessage: 'Bu biraz zaman alabilir, lütfen bekleyin...', + searchResults_zero: 'SONUÇ', + chunks_other: 'Parçalar', + editedAt: 'Şurada düzenlendi:', + addChildChunk: 'Alt Parça Ekle', }, } diff --git a/web/i18n/tr-TR/dataset-hit-testing.ts b/web/i18n/tr-TR/dataset-hit-testing.ts index 545e0f074caf93..d22df0d93e28a9 100644 --- a/web/i18n/tr-TR/dataset-hit-testing.ts +++ b/web/i18n/tr-TR/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'VEKTÖR GRAFİĞİNİ GÖRÜNTÜLE', viewDetail: 'ayrıntılara bakın', settingTitle: 'Alma Ayarı', + open: 'Açık', + chunkDetail: 'Yığın Detayı', + keyword: 'Anahtar kelime -ler', + hitChunks: '{{num}} alt parçalarına basın', + records: 'Kayıt', } export default translation diff --git a/web/i18n/tr-TR/dataset-settings.ts b/web/i18n/tr-TR/dataset-settings.ts index 9bd716c063d12c..d173563da8ee86 100644 --- a/web/i18n/tr-TR/dataset-settings.ts +++ b/web/i18n/tr-TR/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { retrievalSettings: 'Alma Ayarları', externalKnowledgeAPI: 'Harici Bilgi API\'si', externalKnowledgeID: 'Harici Bilgi Kimliği', + upgradeHighQualityTip: 'Yüksek Kalite moduna yükselttikten sonra Ekonomik moda geri dönülemez', + indexMethodChangeToEconomyDisabledTip: 'Genel Merkezden ECO\'ya düşürme için mevcut değil', + helpText: 'İyi bir veri kümesi açıklamasının nasıl yazılacağını öğrenin.', }, } diff --git a/web/i18n/tr-TR/dataset.ts b/web/i18n/tr-TR/dataset.ts index 611917be7dabd3..facaf3ee5b6ef3 100644 --- a/web/i18n/tr-TR/dataset.ts +++ b/web/i18n/tr-TR/dataset.ts @@ -146,6 +146,26 @@ const translation = { externalKnowledgeId: 'Harici Bilgi Kimliği', createExternalAPI: 'Harici bilgi API\'si ekleme', createNewExternalAPI: 'Yeni bir External Knowledge API oluşturma', + chunkingMode: { + general: 'Genel', + parentChild: 'Ebeveyn-çocuk', + }, + parentMode: { + fullDoc: 'Tam doküman', + paragraph: 'Paragraf', + }, + batchAction: { + selected: 'Seçilmiş', + cancel: 'İptal', + enable: 'Etkinleştirmek', + delete: 'Silmek', + archive: 'Arşiv', + disable: 'Devre dışı bırakmak', + }, + preprocessDocument: '{{sayı}} Belgeleri Ön İşleme', + localDocs: 'Yerel Dokümanlar', + documentsDisabled: '{{num}} belge devre dışı - 30 günden uzun süre etkin değil', + enable: 'Etkinleştirmek', } export default translation diff --git a/web/i18n/uk-UA/common.ts b/web/i18n/uk-UA/common.ts index fbe9b677509845..08c6250d311205 100644 --- a/web/i18n/uk-UA/common.ts +++ b/web/i18n/uk-UA/common.ts @@ -42,6 +42,11 @@ const translation = { openInNewTab: 'Відкрити в новій вкладці', zoomOut: 'Зменшити масштаб', zoomIn: 'Збільшити масштаб', + close: 'Закрити', + regenerate: 'Відновити', + view: 'Вид', + viewMore: 'ДИВИТИСЬ БІЛЬШЕ', + saveAndRegenerate: 'Збереження та регенерація дочірніх фрагментів', }, placeholder: { input: 'Будь ласка, введіть текст', @@ -475,6 +480,7 @@ const translation = { emptyTip: 'Знання не пов’язані, будь ласка, перейдіть до програми або плагіна, щоб завершити зв’язок.', viewDoc: 'Переглянути документацію', relatedApp: 'пов\'язані програми', + noRelatedApp: 'Немає пов\'язаних додатків', }, voiceInput: { speaking: 'Говоріть зараз...', diff --git a/web/i18n/uk-UA/dataset-creation.ts b/web/i18n/uk-UA/dataset-creation.ts index d6ee22c2d33db4..0db1baaff80f79 100644 --- a/web/i18n/uk-UA/dataset-creation.ts +++ b/web/i18n/uk-UA/dataset-creation.ts @@ -82,6 +82,7 @@ const translation = { jinaReaderTitle: 'Перетворіть весь сайт на Markdown', useSitemap: 'Використовуйте карту сайту', }, + cancel: 'Скасувати', }, stepTwo: { segmentation: 'Налаштування фрагментації', @@ -143,6 +144,28 @@ const translation = { websiteSource: 'Веб-сайт попередньої обробки', separatorTip: 'Роздільник – це символ, який використовується для поділу тексту. \\n\\n та \\n є часто використовуваними роздільниками для відокремлення абзаців та рядків. У поєднанні з комами (\\n\\n,\\n) абзаци будуть розділені лініями, якщо вони перевищують максимальну довжину фрагмента. Ви також можете використовувати спеціальні роздільники, визначені вами (наприклад, ***).', maxLengthCheck: 'Максимальна довжина шматка має бути меншою за {{limit}}', + parentChild: 'Батьки-діти', + childChunkForRetrieval: 'Дочірній шматок для пошуку', + notAvailableForQA: 'Недоступно для Індексу запитань і відповідей', + parentChunkForContext: 'Parent-chunk для контексту', + paragraph: 'Абзац', + general: 'Загальне', + highQualityTip: 'Після завершення вбудовування в режимі високої якості повернення до економного режиму недоступне.', + generalTip: 'Загальний режим фрагментації тексту, отримані та викликані фрагменти однакові.', + previewChunk: 'Фрагмент попереднього перегляду', + fullDoc: 'Повний документ', + useQALanguage: 'Фрагмент у форматі запитань і відповідей у', + notAvailableForParentChild: 'Недоступно для Батьківсько-дочірнього індексу', + qaSwitchHighQualityTipContent: 'В даний час тільки високоякісний метод індексу підтримує фрагментацію формату запитань і відповідей. Чи хотіли б ви перейти в якісний режим?', + previewChunkTip: 'Натисніть кнопку «Фрагмент попереднього перегляду» ліворуч, щоб завантажити попередній перегляд', + previewChunkCount: '{{count}} Приблизні шматки', + fullDocTip: 'Увесь документ використовується як батьківський фрагмент і отримується безпосередньо. Зверніть увагу, що з міркувань продуктивності текст, що перевищує 10000 токенів, буде автоматично обрізаний.', + parentChildDelimiterTip: 'Роздільник – це символ, який використовується для поділу тексту. \\n\\n рекомендується для поділу оригінального документа на великі батьківські фрагменти. Ви також можете використовувати спеціальні роздільники, визначені самостійно.', + parentChildChunkDelimiterTip: 'Роздільник – це символ, який використовується для поділу тексту. \\n рекомендується для поділу батьківських фрагментів на маленькі дочірні частини. Ви також можете використовувати спеціальні роздільники, визначені самостійно.', + parentChildTip: 'При використанні режиму батьків-дочірній елемент використовується для пошуку, а батьківський фрагмент використовується для виклику як контекст.', + switch: 'Комутатор', + qaSwitchHighQualityTipTitle: 'Формат запитань і відповідей вимагає якісного методу індексації', + paragraphTip: 'Цей режим розбиває текст на абзаци на основі роздільників і максимальної довжини фрагмента, використовуючи розділений текст як батьківський фрагмент для пошуку.', }, stepThree: { creationTitle: '🎉 Знання створено', @@ -171,6 +194,11 @@ const translation = { configJinaReader: 'Налаштування Jina Reader', getApiKeyLinkText: 'Отримайте безкоштовний API-ключ за адресою jina.ai', }, + otherDataSource: { + learnMore: 'Дізнатися більше', + title: 'Підключитися до інших джерел даних?', + description: 'Наразі база знань Dify має лише обмежені джерела даних. Додавання джерела даних до бази знань Dify – це фантастичний спосіб підвищити гнучкість і потужність платформи для всіх користувачів. Наш посібник із внеску спрощує початок роботи. Будь ласка, натисніть на посилання нижче, щоб дізнатися більше.', + }, } export default translation diff --git a/web/i18n/uk-UA/dataset-documents.ts b/web/i18n/uk-UA/dataset-documents.ts index 0b20d534e76252..192253b264064f 100644 --- a/web/i18n/uk-UA/dataset-documents.ts +++ b/web/i18n/uk-UA/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: 'ЧАС ЗАВАНТАЖЕННЯ', status: 'СТАТУС', action: 'ДІЯ', + chunkingMode: 'РЕЖИМ ФРАГМЕНТАЦІЇ', }, name: 'Ім\'я', rename: 'Перейменувати', @@ -77,6 +78,7 @@ const translation = { ok: 'ОК', }, addUrl: 'Додати URL-адресу', + learnMore: 'Дізнатися більше', }, metadata: { title: 'Метадані', @@ -328,6 +330,10 @@ const translation = { automatic: 'Автоматичний', custom: 'Користувацький', previewTip: 'Попередній перегляд параграфа буде доступний після завершення побудови векторів', + childMaxTokens: 'Дитина', + pause: 'Пауза', + parentMaxTokens: 'Родитель', + hierarchical: 'Батьки-діти', }, segment: { paragraphs: 'Параграфи', @@ -346,6 +352,43 @@ const translation = { newTextSegment: 'Новий текстовий сегмент', newQaSegment: 'Новий сегмент запитань та відповідей', delete: 'Видалити цей фрагмент?', + chunks_one: 'ШМАТОК', + childChunk: 'Дочірній шматок', + clearFilter: 'Очистити фільтр', + addAnother: 'Додати ще один', + newChunk: 'Новий шматок', + searchResults_other: 'РЕЗУЛЬТАТІВ', + parentChunks_other: 'БАТЬКІВСЬКІ ФРАГМЕНТИ', + childChunks_other: 'ДОЧІРНІ ШМАТКИ', + chunkDetail: 'Деталізація фрагмента', + regeneratingTitle: 'Регенерація дочірніх фрагментів', + chunkAdded: 'Додано 1 фрагмент', + addChildChunk: 'Додати дочірній фрагмент', + empty: 'Шматок не знайдено', + chunks_other: 'ШМАТКИ', + editedAt: 'За редакцією', + searchResults_zero: 'РЕЗУЛЬТАТ', + collapseChunks: 'Згортання шматків', + childChunkAdded: 'Додано 1 дочірній фрагмент', + editParentChunk: 'Редагувати батьківський фрагмент', + newChildChunk: 'Новий дочірній шматок', + editChunk: 'Редагувати фрагмент', + regenerationSuccessTitle: 'Регенерація завершена', + edited: 'РЕДАГУВАТИ', + regenerationConfirmMessage: 'Регенерація дочірніх фрагментів перезаписує поточні дочірні фрагменти, включаючи відредаговані фрагменти та нещодавно додані фрагменти. Регенерація не може бути скасована.', + chunk: 'Шматок', + childChunks_one: 'ДОЧІРНЯ ЧАСТИНА', + parentChunk: 'Батьківський чанк', + parentChunks_one: 'БАТЬКІВСЬКИЙ ФРАГМЕНТ', + characters_other: 'Символів', + searchResults_one: 'РЕЗУЛЬТАТ', + regeneratingMessage: 'Це може зайняти мить, будь ласка, зачекайте...', + characters_one: 'знак', + addChunk: 'Додати шматок', + editChildChunk: 'Редагувати дочірній фрагмент', + regenerationSuccessMessage: 'Ви можете закрити це вікно.', + expandChunks: 'Розгортання фрагментів', + regenerationConfirmTitle: 'Хочете регенерувати дитячі шматки?', }, } diff --git a/web/i18n/uk-UA/dataset-hit-testing.ts b/web/i18n/uk-UA/dataset-hit-testing.ts index d348e56a7096ea..3567c098f2c312 100644 --- a/web/i18n/uk-UA/dataset-hit-testing.ts +++ b/web/i18n/uk-UA/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'ПЕРЕГЛЯНУТИ ВЕКТОРНУ ДІАГРАМУ', settingTitle: 'Налаштування отримання', viewDetail: 'Переглянути деталі', + chunkDetail: 'Деталізація фрагмента', + hitChunks: 'Натисніть {{num}} на дочірні шматки', + open: 'Відкривати', + keyword: 'Ключові слова', + records: 'Записи', } export default translation diff --git a/web/i18n/uk-UA/dataset-settings.ts b/web/i18n/uk-UA/dataset-settings.ts index 4532ed4addea44..ef3bd5eaa6d0d4 100644 --- a/web/i18n/uk-UA/dataset-settings.ts +++ b/web/i18n/uk-UA/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeAPI: 'API зовнішніх знань', externalKnowledgeID: 'Зовнішній ідентифікатор знань', retrievalSettings: 'Налаштування отримання', + helpText: 'Дізнайтеся, як написати хороший опис набору даних.', + indexMethodChangeToEconomyDisabledTip: 'Недоступно для пониження з HQ до ECO', + upgradeHighQualityTip: 'Після оновлення до режиму високої якості повернення до економного режиму недоступне', }, } diff --git a/web/i18n/uk-UA/dataset.ts b/web/i18n/uk-UA/dataset.ts index 3e1349a617dfcf..e4ec8851ae5fd1 100644 --- a/web/i18n/uk-UA/dataset.ts +++ b/web/i18n/uk-UA/dataset.ts @@ -147,6 +147,26 @@ const translation = { mixtureInternalAndExternalTip: 'Модель Rerank необхідна для поєднання внутрішніх і зовнішніх знань.', externalKnowledgeIdPlaceholder: 'Будь ласка, введіть Knowledge ID', externalAPIPanelDescription: 'API зовнішніх знань використовується для підключення до бази знань за межами Dify і отримання знань із цієї бази знань.', + chunkingMode: { + parentChild: 'Батьки-діти', + general: 'Загальне', + }, + parentMode: { + fullDoc: 'Повний документ', + paragraph: 'Абзац', + }, + batchAction: { + delete: 'Видалити', + enable: 'Вмикати', + disable: 'Вимкнути', + archive: 'Архів', + selected: 'Вибрані', + cancel: 'Скасувати', + }, + preprocessDocument: '{{num}} Попередня обробка документів', + documentsDisabled: 'Документи {{num}} вимкнені - неактивні понад 30 днів', + localDocs: 'Локальні документи', + enable: 'Вмикати', } export default translation diff --git a/web/i18n/vi-VN/common.ts b/web/i18n/vi-VN/common.ts index 8bafd868542d3d..bc94d46c6565fd 100644 --- a/web/i18n/vi-VN/common.ts +++ b/web/i18n/vi-VN/common.ts @@ -42,6 +42,11 @@ const translation = { zoomOut: 'Thu nhỏ', zoomIn: 'Phóng to', openInNewTab: 'Mở trong tab mới', + regenerate: 'Tái tạo', + close: 'Đóng', + saveAndRegenerate: 'Lưu và tạo lại các phần con', + view: 'Cảnh', + viewMore: 'XEM THÊM', }, placeholder: { input: 'Vui lòng nhập', @@ -474,6 +479,7 @@ const translation = { emptyTip: 'Kiến thức chưa được liên kết, vui lòng đi đến ứng dụng hoặc plug-in để hoàn thành liên kết.', viewDoc: 'Xem tài liệu', relatedApp: 'các ứng dụng liên kết', + noRelatedApp: 'Không có ứng dụng được liên kết', }, voiceInput: { speaking: 'Hãy nói...', diff --git a/web/i18n/vi-VN/dataset-creation.ts b/web/i18n/vi-VN/dataset-creation.ts index 045f3d6ea56455..5e0b010a541742 100644 --- a/web/i18n/vi-VN/dataset-creation.ts +++ b/web/i18n/vi-VN/dataset-creation.ts @@ -82,6 +82,7 @@ const translation = { jinaReaderNotConfiguredDescription: 'Thiết lập Jina Reader bằng cách nhập khóa API miễn phí của bạn để truy cập.', useSitemapTooltip: 'Thực hiện theo sơ đồ trang web để thu thập dữ liệu trang web. Nếu không, Jina Reader sẽ thu thập dữ liệu lặp đi lặp lại dựa trên mức độ liên quan của trang, mang lại ít trang hơn nhưng chất lượng cao hơn.', }, + cancel: 'Hủy', }, stepTwo: { segmentation: 'Cài đặt phân đoạn', @@ -143,6 +144,28 @@ const translation = { webpageUnit: 'Trang', separatorTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n\\n và \\n là dấu phân cách thường được sử dụng để tách các đoạn văn và dòng. Kết hợp với dấu phẩy (\\n\\n,\\n), các đoạn văn sẽ được phân đoạn theo các dòng khi vượt quá độ dài đoạn tối đa. Bạn cũng có thể sử dụng dấu phân cách đặc biệt do chính bạn xác định (ví dụ: ***).', maxLengthCheck: 'Chiều dài đoạn tối đa phải nhỏ hơn {{limit}}', + fullDocTip: 'Toàn bộ tài liệu được sử dụng làm phần cha và được truy xuất trực tiếp. Xin lưu ý rằng vì lý do hiệu suất, văn bản vượt quá 10000 mã thông báo sẽ tự động bị cắt bớt.', + parentChild: 'Cha mẹ-con cái', + general: 'Tổng quát', + parentChildTip: 'Khi sử dụng chế độ cha-con, phần con được sử dụng để truy xuất và phần cha được sử dụng để gọi lại dưới dạng ngữ cảnh.', + fullDoc: 'Tài liệu đầy đủ', + notAvailableForQA: 'Không có sẵn cho Chỉ số Hỏi & Đáp', + notAvailableForParentChild: 'Không có sẵn cho Chỉ số cha mẹ-con', + previewChunk: 'Xem trước Chunk', + previewChunkTip: 'Nhấp vào nút \'Preview Chunk\' ở bên trái để tải bản xem trước', + childChunkForRetrieval: 'Child-chunk để truy xuất', + highQualityTip: 'Sau khi hoàn tất việc nhúng ở chế độ Chất lượng cao, không thể hoàn nguyên về chế độ Tiết kiệm.', + useQALanguage: 'Chunk sử dụng định dạng Q & A trong', + generalTip: 'Chế độ phân đoạn văn bản chung, các đoạn được truy xuất và gọi lại là như nhau.', + qaSwitchHighQualityTipTitle: 'Định dạng Q & A yêu cầu phương pháp lập chỉ mục chất lượng cao', + qaSwitchHighQualityTipContent: 'Hiện tại, chỉ có phương pháp chỉ mục chất lượng cao mới hỗ trợ phân đoạn định dạng Q&A. Bạn có muốn chuyển sang chế độ chất lượng cao không?', + switch: 'Chuyển', + paragraph: 'Đoạn', + parentChunkForContext: 'Parent-chunk cho ngữ cảnh', + previewChunkCount: '{{đếm}} Khối ước tính', + parentChildDelimiterTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n\\n được khuyến nghị để chia tài liệu gốc thành các phần lớn của cha mẹ. Bạn cũng có thể sử dụng các dấu phân cách đặc biệt do chính bạn xác định.', + parentChildChunkDelimiterTip: 'Dấu phân cách là ký tự được sử dụng để phân tách văn bản. \\n được khuyến nghị để chia các chunk cha thành các chunk con nhỏ. Bạn cũng có thể sử dụng các dấu phân cách đặc biệt do chính bạn xác định.', + paragraphTip: 'Chế độ này chia văn bản thành các đoạn văn dựa trên dấu phân cách và độ dài khối tối đa, sử dụng văn bản được tách làm phần gốc để truy xuất.', }, stepThree: { creationTitle: '🎉 Kiến thức đã được tạo', @@ -171,6 +194,11 @@ const translation = { configJinaReader: 'Định cấu hình Jina Reader', apiKeyPlaceholder: 'Khóa API từ jina.ai', }, + otherDataSource: { + title: 'Kết nối với các nguồn dữ liệu khác?', + description: 'Hiện tại, cơ sở tri thức của Dify chỉ có nguồn dữ liệu hạn chế. Đóng góp nguồn dữ liệu vào cơ sở kiến thức Dify là một cách tuyệt vời để giúp nâng cao tính linh hoạt và sức mạnh của nền tảng cho tất cả người dùng. Hướng dẫn đóng góp của chúng tôi giúp bạn dễ dàng bắt đầu. Vui lòng nhấp vào liên kết bên dưới để tìm hiểu thêm.', + learnMore: 'Tìm hiểu thêm', + }, } export default translation diff --git a/web/i18n/vi-VN/dataset-documents.ts b/web/i18n/vi-VN/dataset-documents.ts index 16570dff6edc17..07e5c5c6e38462 100644 --- a/web/i18n/vi-VN/dataset-documents.ts +++ b/web/i18n/vi-VN/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: 'THỜI GIAN TẢI LÊN', status: 'TRẠNG THÁI', action: 'THAO TÁC', + chunkingMode: 'CHẾ ĐỘ CHUNKING', }, rename: 'Rename', name: 'Tên', @@ -77,6 +78,7 @@ const translation = { ok: 'OK', }, addUrl: 'Thêm URL', + learnMore: 'Tìm hiểu thêm', }, metadata: { title: 'Siêu dữ liệu', @@ -327,6 +329,10 @@ const translation = { automatic: 'Tự động', custom: 'Tùy chỉnh', previewTip: 'Xem trước đoạn sẽ có sẵn sau khi việc nhúng hoàn tất', + parentMaxTokens: 'Cha mẹ', + pause: 'Tạm dừng', + childMaxTokens: 'Con', + hierarchical: 'Cha mẹ-con cái', }, segment: { paragraphs: 'Đoạn văn', @@ -345,6 +351,43 @@ const translation = { newTextSegment: 'Đoạn văn bản mới', newQaSegment: 'Đoạn hỏi đáp mới', delete: 'Xóa đoạn này?', + childChunks_one: 'KHỐI TRẺ', + searchResults_zero: 'KẾT QUẢ', + empty: 'Không tìm thấy Chunk', + newChunk: 'Khối mới', + childChunk: 'Khối trẻ em', + regeneratingMessage: 'Quá trình này có thể mất một lúc, vui lòng đợi...', + regenerationSuccessMessage: 'Bạn có thể đóng cửa sổ này.', + regenerationSuccessTitle: 'Hoàn thành tái tạo', + characters_other: 'Ký tự', + chunks_one: 'KHÚC', + chunkAdded: '1 miếng được thêm vào', + editChildChunk: 'Chỉnh sửa phần con', + characters_one: 'nhân vật', + expandChunks: 'Mở rộng các đoạn', + chunks_other: 'KHỐI', + editedAt: 'Chỉnh sửa tại', + addAnother: 'Thêm một cái khác', + regenerationConfirmTitle: 'Bạn có muốn tái tạo các chunk con không?', + searchResults_one: 'KẾT QUẢ', + regeneratingTitle: 'Tái tạo các chunk con', + editParentChunk: 'Chỉnh sửa phần cha', + collapseChunks: 'Thu gọn các đoạn', + searchResults_other: 'KẾT QUẢ', + parentChunks_one: 'PHẦN CHA MẸ', + newChildChunk: 'Khối con mới', + parentChunk: 'Phần cha mẹ', + parentChunks_other: 'PHẦN CHA MẸ', + regenerationConfirmMessage: 'Tạo lại các chunk con sẽ ghi đè lên các chunk con hiện tại, bao gồm các chunk đã chỉnh sửa và chunk mới được thêm vào. Sự tái sinh không thể hoàn tác.', + childChunkAdded: '1 phần con được thêm vào', + addChunk: 'Thêm Chunk', + chunkDetail: 'Chi tiết khối', + childChunks_other: 'KHỐI CON', + editChunk: 'Chỉnh sửa Chunk', + addChildChunk: 'Thêm phần con', + clearFilter: 'Bộ lọc rõ ràng', + chunk: 'Khúc', + edited: 'EDITED', }, } diff --git a/web/i18n/vi-VN/dataset-hit-testing.ts b/web/i18n/vi-VN/dataset-hit-testing.ts index 7972eba288687f..02a25479388d89 100644 --- a/web/i18n/vi-VN/dataset-hit-testing.ts +++ b/web/i18n/vi-VN/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: 'Xem BIỂU ĐỒ VECTOR', settingTitle: 'Cài đặt truy xuất', viewDetail: 'Xem chi tiết', + records: 'Hồ sơ', + open: 'Mở', + keyword: 'Từ khoá', + hitChunks: 'Nhấn {{num}} đoạn con', + chunkDetail: 'Chi tiết khối', } export default translation diff --git a/web/i18n/vi-VN/dataset-settings.ts b/web/i18n/vi-VN/dataset-settings.ts index 48ff2f038d6e1f..790fd05ca8b70b 100644 --- a/web/i18n/vi-VN/dataset-settings.ts +++ b/web/i18n/vi-VN/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeAPI: 'API kiến thức bên ngoài', retrievalSettings: 'Cài đặt truy xuất', externalKnowledgeID: 'ID kiến thức bên ngoài', + helpText: 'Tìm hiểu cách viết mô tả tập dữ liệu tốt.', + indexMethodChangeToEconomyDisabledTip: 'Không khả dụng để hạ cấp từ HQ xuống ECO', + upgradeHighQualityTip: 'Sau khi nâng cấp lên chế độ Chất lượng cao, không thể hoàn nguyên về chế độ Tiết kiệm', }, } diff --git a/web/i18n/vi-VN/dataset.ts b/web/i18n/vi-VN/dataset.ts index eb7ef414f3e179..0e9ab77d0f743c 100644 --- a/web/i18n/vi-VN/dataset.ts +++ b/web/i18n/vi-VN/dataset.ts @@ -146,6 +146,26 @@ const translation = { externalKnowledgeIdPlaceholder: 'Vui lòng nhập ID kiến thức', createNewExternalAPI: 'Tạo API Kiến thức Bên ngoài mới', externalAPIPanelDescription: 'API kiến thức bên ngoài được sử dụng để kết nối với cơ sở kiến thức bên ngoài Dify và truy xuất kiến thức từ cơ sở kiến thức đó.', + chunkingMode: { + general: 'Tổng quát', + parentChild: 'Cha mẹ-con cái', + }, + parentMode: { + paragraph: 'Đoạn', + fullDoc: 'Tài liệu đầy đủ', + }, + batchAction: { + disable: 'Vô hiệu hóa', + enable: 'Kích hoạt', + delete: 'Xóa', + selected: 'Chọn', + archive: 'Lưu trữ', + cancel: 'Hủy', + }, + localDocs: 'Tài liệu địa phương', + enable: 'Kích hoạt', + preprocessDocument: '{{số}} Tiền xử lý tài liệu', + documentsDisabled: '{{num}} tài liệu bị vô hiệu hóa - không hoạt động trong hơn 30 ngày', } export default translation diff --git a/web/i18n/zh-Hans/dataset-creation.ts b/web/i18n/zh-Hans/dataset-creation.ts index a3dff76050f448..c61e75eb98a42c 100644 --- a/web/i18n/zh-Hans/dataset-creation.ts +++ b/web/i18n/zh-Hans/dataset-creation.ts @@ -194,6 +194,11 @@ const translation = { modelButtonConfirm: '确认停止', modelButtonCancel: '取消', }, + otherDataSource: { + title: '连接到其他数据源?', + description: '目前,Dify 的知识库只有有限的数据源。向 Dify 知识库贡献数据源是帮助所有用户增强平台灵活性和强大功能的绝佳方式。我们的贡献指南使入门变得容易。请点击下面的链接了解更多信息。', + learnMore: '了解更多信息', + }, } export default translation diff --git a/web/i18n/zh-Hant/common.ts b/web/i18n/zh-Hant/common.ts index 834065099321dd..4c09229796838d 100644 --- a/web/i18n/zh-Hant/common.ts +++ b/web/i18n/zh-Hant/common.ts @@ -42,6 +42,11 @@ const translation = { openInNewTab: '在新選項卡中打開', zoomIn: '放大', zoomOut: '縮小', + saveAndRegenerate: '保存並重新生成子塊', + view: '視圖', + close: '關閉', + viewMore: '查看更多', + regenerate: '再生', }, placeholder: { input: '請輸入', @@ -474,6 +479,7 @@ const translation = { emptyTip: ' 知識庫尚未關聯,請前往應用程式或外掛完成關聯。', viewDoc: '檢視文件', relatedApp: '個關聯應用', + noRelatedApp: '沒有連結的應用程式', }, voiceInput: { speaking: '現在講...', diff --git a/web/i18n/zh-Hant/dataset-creation.ts b/web/i18n/zh-Hant/dataset-creation.ts index 20cae924855319..e35e4fce92da63 100644 --- a/web/i18n/zh-Hant/dataset-creation.ts +++ b/web/i18n/zh-Hant/dataset-creation.ts @@ -144,6 +144,28 @@ const translation = { webpageUnit: '頁面', separatorTip: '分隔符是用於分隔文字的字元。\\n\\n 和 \\n 是分隔段落和行的常用分隔符。與逗號 (\\n\\n,\\n) 組合使用時,當超過最大區塊長度時,段落將按行分段。您也可以使用自定義的特殊分隔符(例如 ***)。', maxLengthCheck: '塊最大長度應小於 {{limit}}', + general: '常規', + previewChunkCount: '{{count}}估計塊數', + useQALanguage: '使用Q&A格式的塊', + qaSwitchHighQualityTipContent: '目前,只有高品質索引方法支援Q&A格式分塊。是否要切換到高品質模式?', + previewChunk: '預覽資料塊(Preview Chunk)', + fullDocTip: '整個文件用作父塊並直接檢索。請注意,出於性能原因,超過10000個令牌的文本將被自動截斷。', + parentChunkForContext: '父母的背景', + previewChunkTip: '點擊左側的 『Preview Chunk』 按鈕載入預覽', + parentChild: '父子', + notAvailableForQA: '不適用於 Q&A 索引', + parentChildChunkDelimiterTip: '分隔符是用於分隔文字的字元。建議使用 \\n 將父塊拆分為小的子塊。您還可以使用自己定義的特殊分隔符。', + parentChildDelimiterTip: '分隔符是用於分隔文字的字元。建議將原始文檔拆分為多個大型父塊。您還可以使用自己定義的特殊分隔符。', + generalTip: '常規文本分塊模式,檢索和調用的塊是相同的。', + highQualityTip: '在 High Quality 模式下完成嵌入後,將無法恢復到 Economical (經濟) 模式。', + childChunkForRetrieval: '用於檢索的 Child-chunk', + paragraphTip: '此模式根據分隔符和最大區塊長度將文本拆分為段落,使用拆分文本作為父區塊進行檢索。', + paragraph: '段', + qaSwitchHighQualityTipTitle: 'Q&A 格式需要高品質的索引方法', + notAvailableForParentChild: '不適用於父子索引', + fullDoc: '完整文件', + parentChildTip: '當使用 parent-child 模式時,child-chunk 用於檢索,parent-chunk 用於作為上下文調用 call。', + switch: '開關', }, stepThree: { creationTitle: '🎉 知識庫已建立', @@ -172,6 +194,11 @@ const translation = { getApiKeyLinkText: '在 jina.ai 獲取您的免費 API 金鑰', apiKeyPlaceholder: '來自 jina.ai 的 API 金鑰', }, + otherDataSource: { + learnMore: '瞭解更多資訊', + description: '目前,Dify 的知識庫只有有限的數據源。向 Dify 知識庫貢獻數據源是説明所有使用者增強平台靈活性和強大功能的絕佳方式。我們的貢獻指南使入門變得容易。請點擊下面的連結瞭解更多資訊。', + title: '連接到其他數據源?', + }, } export default translation diff --git a/web/i18n/zh-Hant/dataset-documents.ts b/web/i18n/zh-Hant/dataset-documents.ts index b4e6b4418172c3..8a6c1f79242fd9 100644 --- a/web/i18n/zh-Hant/dataset-documents.ts +++ b/web/i18n/zh-Hant/dataset-documents.ts @@ -12,6 +12,7 @@ const translation = { uploadTime: '上傳時間', status: '狀態', action: '操作', + chunkingMode: '分塊模式', }, name: '名字', rename: '重新命名', @@ -77,6 +78,7 @@ const translation = { ok: '確定', }, addUrl: '添加 URL', + learnMore: '瞭解更多資訊', }, metadata: { title: '元資料', @@ -327,6 +329,10 @@ const translation = { automatic: '自動', custom: '自定義', previewTip: '段落預覽將在嵌入完成後可用', + hierarchical: '父子', + parentMaxTokens: '父母', + childMaxTokens: '孩子', + pause: '暫停', }, segment: { paragraphs: '段落', @@ -345,6 +351,43 @@ const translation = { newTextSegment: '新文字分段', newQaSegment: '新問答分段', delete: '刪除這個分段?', + characters_other: '字元', + addChunk: '添加數據塊', + addChildChunk: '添加子塊', + addAnother: '添加另一個', + childChunkAdded: '添加了1個子塊', + editParentChunk: '編輯父塊(Edit Parent Chunk)', + editChildChunk: '編輯子塊', + chunkDetail: '數據塊詳細資訊', + regenerationConfirmTitle: '是否要重新生成子塊?', + regenerationConfirmMessage: '重新生成子數據塊將覆蓋當前子數據塊,包括已編輯的數據塊和新添加的數據塊。重新生成無法復原。', + regeneratingTitle: '重新生成子塊', + regenerationSuccessTitle: '再生完成', + collapseChunks: '摺疊塊', + expandChunks: '擴展塊', + chunkAdded: '添加了 1 個數據塊', + editedAt: '編輯於', + regeneratingMessage: '這可能需要一些時間,請稍候...', + editChunk: '編輯數據塊', + regenerationSuccessMessage: '您可以關閉此視窗。', + chunks_other: '塊', + childChunks_one: '子塊', + edited: '編輯', + characters_one: '字元', + childChunks_other: '子塊', + newChunk: '新區塊', + chunk: '塊', + childChunk: '子塊', + parentChunks_one: '父數據塊', + searchResults_one: '結果', + searchResults_other: '結果', + chunks_one: '塊', + clearFilter: '清除過濾器', + parentChunk: '父塊', + empty: '未找到 Chunk', + searchResults_zero: '結果', + parentChunks_other: '父塊', + newChildChunk: '新兒童塊', }, } diff --git a/web/i18n/zh-Hant/dataset-hit-testing.ts b/web/i18n/zh-Hant/dataset-hit-testing.ts index 72ca8f8d486307..0dbe1490257f77 100644 --- a/web/i18n/zh-Hant/dataset-hit-testing.ts +++ b/web/i18n/zh-Hant/dataset-hit-testing.ts @@ -25,6 +25,11 @@ const translation = { viewChart: '查看向量圖表', viewDetail: '查看詳情', settingTitle: '檢索設置', + open: '打開', + records: '記錄', + chunkDetail: '數據塊詳細資訊', + hitChunks: '命中 {{num}} 個子塊', + keyword: '關鍵字', } export default translation diff --git a/web/i18n/zh-Hant/dataset-settings.ts b/web/i18n/zh-Hant/dataset-settings.ts index a528befc5dd515..b22f899f32ea75 100644 --- a/web/i18n/zh-Hant/dataset-settings.ts +++ b/web/i18n/zh-Hant/dataset-settings.ts @@ -32,6 +32,9 @@ const translation = { externalKnowledgeID: '外部知識ID', externalKnowledgeAPI: '外部知識 API', retrievalSettings: '檢索設置', + indexMethodChangeToEconomyDisabledTip: '不適用於從 HQ 降級到 ECO', + upgradeHighQualityTip: '升級到高品質模式后,無法恢復到經濟模式', + helpText: '瞭解如何編寫良好的數據集描述。', }, } diff --git a/web/i18n/zh-Hant/dataset.ts b/web/i18n/zh-Hant/dataset.ts index 30dfd6b98cceb8..1aaeb50cd2f8ec 100644 --- a/web/i18n/zh-Hant/dataset.ts +++ b/web/i18n/zh-Hant/dataset.ts @@ -146,6 +146,26 @@ const translation = { externalAPIPanelDocumentation: '瞭解如何創建外部知識 API', externalKnowledgeNamePlaceholder: '請輸入知識庫的名稱', noExternalKnowledge: '目前還沒有外部知識 API,按兩下此處創建', + chunkingMode: { + parentChild: '父子', + general: '常規', + }, + parentMode: { + paragraph: '段', + fullDoc: '完整文件', + }, + batchAction: { + delete: '刪除', + enable: '使', + disable: '禁用', + cancel: '取消', + archive: '檔案', + selected: '選擇', + }, + enable: '使', + documentsDisabled: '已禁用 {{num}} 個文檔 - 處於非活動狀態超過 30 天', + localDocs: '本地文件', + preprocessDocument: '{{num}}預處理文件', } export default translation From 26b56809134e7018b75811ff29b12a405ce2b16a Mon Sep 17 00:00:00 2001 From: -LAN- Date: Thu, 26 Dec 2024 23:33:45 +0800 Subject: [PATCH 09/37] fix: improve merge branch node ID checks in graph engine (#12128) Signed-off-by: -LAN- --- api/core/workflow/graph_engine/entities/graph.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/api/core/workflow/graph_engine/entities/graph.py b/api/core/workflow/graph_engine/entities/graph.py index b3bcc3b2ccc309..5c672c985b6a1f 100644 --- a/api/core/workflow/graph_engine/entities/graph.py +++ b/api/core/workflow/graph_engine/entities/graph.py @@ -613,10 +613,10 @@ def _fetch_all_node_ids_in_parallels( for (node_id, node_id2), branch_node_ids in duplicate_end_node_ids.items(): # check which node is after if cls._is_node2_after_node1(node1_id=node_id, node2_id=node_id2, edge_mapping=edge_mapping): - if node_id in merge_branch_node_ids: + if node_id in merge_branch_node_ids and node_id2 in merge_branch_node_ids: del merge_branch_node_ids[node_id2] elif cls._is_node2_after_node1(node1_id=node_id2, node2_id=node_id, edge_mapping=edge_mapping): - if node_id2 in merge_branch_node_ids: + if node_id in merge_branch_node_ids and node_id2 in merge_branch_node_ids: del merge_branch_node_ids[node_id] branches_merge_node_ids: dict[str, str] = {} From dae1b5a619bc60468373e5c79b51d1263ab76e0e Mon Sep 17 00:00:00 2001 From: -LAN- Date: Fri, 27 Dec 2024 11:37:55 +0800 Subject: [PATCH 10/37] fix: import jieba.analyse (#12133) Signed-off-by: -LAN- --- .../keyword/jieba/jieba_keyword_table_handler.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/api/core/rag/datasource/keyword/jieba/jieba_keyword_table_handler.py b/api/core/rag/datasource/keyword/jieba/jieba_keyword_table_handler.py index 8b17e8dc0a3762..a6214d955b1ddd 100644 --- a/api/core/rag/datasource/keyword/jieba/jieba_keyword_table_handler.py +++ b/api/core/rag/datasource/keyword/jieba/jieba_keyword_table_handler.py @@ -1,5 +1,5 @@ import re -from typing import Optional +from typing import Optional, cast class JiebaKeywordTableHandler: @@ -8,18 +8,20 @@ def __init__(self): from core.rag.datasource.keyword.jieba.stopwords import STOPWORDS - jieba.analyse.default_tfidf.stop_words = STOPWORDS + jieba.analyse.default_tfidf.stop_words = STOPWORDS # type: ignore def extract_keywords(self, text: str, max_keywords_per_chunk: Optional[int] = 10) -> set[str]: """Extract keywords with JIEBA tfidf.""" - import jieba # type: ignore + import jieba.analyse # type: ignore keywords = jieba.analyse.extract_tags( sentence=text, topK=max_keywords_per_chunk, ) + # jieba.analyse.extract_tags returns list[Any] when withFlag is False by default. + keywords = cast(list[str], keywords) - return set(self._expand_tokens_with_subtokens(keywords)) + return set(self._expand_tokens_with_subtokens(set(keywords))) def _expand_tokens_with_subtokens(self, tokens: set[str]) -> set[str]: """Get subtokens from a list of tokens., filtering for stopwords.""" From 0fdb39f1c3d76143360d9a87d205e8746b68a988 Mon Sep 17 00:00:00 2001 From: ybalbert001 <120714773+ybalbert001@users.noreply.github.com> Date: Fri, 27 Dec 2024 14:42:25 +0800 Subject: [PATCH 11/37] Fix: The topk parameter doesn't work in sagemaker rerank tool (#12150) Co-authored-by: Yuanbo Li --- .../provider/builtin/aws/tools/sagemaker_text_rerank.py | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/api/core/tools/provider/builtin/aws/tools/sagemaker_text_rerank.py b/api/core/tools/provider/builtin/aws/tools/sagemaker_text_rerank.py index 715b1ddeddcae5..8320bd84efa440 100644 --- a/api/core/tools/provider/builtin/aws/tools/sagemaker_text_rerank.py +++ b/api/core/tools/provider/builtin/aws/tools/sagemaker_text_rerank.py @@ -10,8 +10,7 @@ class SageMakerReRankTool(BuiltinTool): sagemaker_client: Any = None - sagemaker_endpoint: str | None = None - topk: int | None = None + sagemaker_endpoint: str = None def _sagemaker_rerank(self, query_input: str, docs: list[str], rerank_endpoint: str): inputs = [query_input] * len(docs) @@ -47,8 +46,7 @@ def _invoke( self.sagemaker_endpoint = tool_parameters.get("sagemaker_endpoint") line = 2 - if not self.topk: - self.topk = tool_parameters.get("topk", 5) + topk = tool_parameters.get("topk", 5) line = 3 query = tool_parameters.get("query", "") @@ -75,7 +73,7 @@ def _invoke( sorted_candidate_docs = sorted(candidate_docs, key=operator.itemgetter("score"), reverse=True) line = 9 - return [self.create_json_message(res) for res in sorted_candidate_docs[: self.topk]] + return [self.create_json_message(res) for res in sorted_candidate_docs[:topk]] except Exception as e: return self.create_text_message(f"Exception {str(e)}, line : {line}") From 55c327ffcbb83fbe593dcd672d26113d524ebefe Mon Sep 17 00:00:00 2001 From: -LAN- Date: Fri, 27 Dec 2024 16:04:50 +0800 Subject: [PATCH 12/37] fix: handle case where member is not found in role update API (#12156) Signed-off-by: -LAN- --- api/controllers/console/workspace/members.py | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/api/controllers/console/workspace/members.py b/api/controllers/console/workspace/members.py index 1afb41ea87660c..a2b41c1d38f87d 100644 --- a/api/controllers/console/workspace/members.py +++ b/api/controllers/console/workspace/members.py @@ -122,7 +122,7 @@ def put(self, member_id): return {"code": "invalid-role", "message": "Invalid role"}, 400 member = db.session.get(Account, str(member_id)) - if member: + if not member: abort(404) try: From 5a3fe61f2af89f73b65157e22513e3bcec2941fa Mon Sep 17 00:00:00 2001 From: Jyong <76649700+JohnJyong@users.noreply.github.com> Date: Fri, 27 Dec 2024 17:08:44 +0800 Subject: [PATCH 13/37] disable all chunks status when disable document (#12149) --- api/tasks/add_document_to_index_task.py | 16 +++++++++++++++- api/tasks/remove_document_from_index_task.py | 11 +++++++++++ 2 files changed, 26 insertions(+), 1 deletion(-) diff --git a/api/tasks/add_document_to_index_task.py b/api/tasks/add_document_to_index_task.py index 9a172b2d9d8157..bd7fcdadeaa374 100644 --- a/api/tasks/add_document_to_index_task.py +++ b/api/tasks/add_document_to_index_task.py @@ -38,7 +38,11 @@ def add_document_to_index_task(dataset_document_id: str): try: segments = ( db.session.query(DocumentSegment) - .filter(DocumentSegment.document_id == dataset_document.id, DocumentSegment.enabled == True) + .filter( + DocumentSegment.document_id == dataset_document.id, + DocumentSegment.enabled == False, + DocumentSegment.status == "completed", + ) .order_by(DocumentSegment.position.asc()) .all() ) @@ -85,6 +89,16 @@ def add_document_to_index_task(dataset_document_id: str): db.session.query(DatasetAutoDisableLog).filter( DatasetAutoDisableLog.document_id == dataset_document.id ).delete() + + # update segment to enable + db.session.query(DocumentSegment).filter(DocumentSegment.document_id == dataset_document.id).update( + { + DocumentSegment.enabled: True, + DocumentSegment.disabled_at: None, + DocumentSegment.disabled_by: None, + DocumentSegment.updated_at: datetime.datetime.now(datetime.UTC).replace(tzinfo=None), + } + ) db.session.commit() end_at = time.perf_counter() diff --git a/api/tasks/remove_document_from_index_task.py b/api/tasks/remove_document_from_index_task.py index 1d580b38028f37..d0c4382f58d75a 100644 --- a/api/tasks/remove_document_from_index_task.py +++ b/api/tasks/remove_document_from_index_task.py @@ -1,3 +1,4 @@ +import datetime import logging import time @@ -46,6 +47,16 @@ def remove_document_from_index_task(document_id: str): index_processor.clean(dataset, index_node_ids, with_keywords=True, delete_child_chunks=False) except Exception: logging.exception(f"clean dataset {dataset.id} from index failed") + # update segment to disable + db.session.query(DocumentSegment).filter(DocumentSegment.document_id == document.id).update( + { + DocumentSegment.enabled: False, + DocumentSegment.disabled_at: datetime.datetime.now(datetime.UTC).replace(tzinfo=None), + DocumentSegment.disabled_by: document.disabled_by, + DocumentSegment.updated_at: datetime.datetime.now(datetime.UTC).replace(tzinfo=None), + } + ) + db.session.commit() end_at = time.perf_counter() logging.info( From f4f2567105bf2a9c8591b817bc07fa65ff2a83b7 Mon Sep 17 00:00:00 2001 From: Jyong <76649700+JohnJyong@users.noreply.github.com> Date: Fri, 27 Dec 2024 17:09:13 +0800 Subject: [PATCH 14/37] owner and admin have all permission of knowledge base (#12157) --- api/services/dataset_service.py | 73 +++++++++++++++++++-------------- 1 file changed, 42 insertions(+), 31 deletions(-) diff --git a/api/services/dataset_service.py b/api/services/dataset_service.py index 1fd18568f54126..b146179c3aa3fd 100644 --- a/api/services/dataset_service.py +++ b/api/services/dataset_service.py @@ -86,25 +86,30 @@ def get_datasets(page, per_page, tenant_id=None, user=None, search=None, tag_ids else: return [], 0 else: - # show all datasets that the user has permission to access - if permitted_dataset_ids: - query = query.filter( - db.or_( - Dataset.permission == DatasetPermissionEnum.ALL_TEAM, - db.and_(Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id), - db.and_( - Dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM, - Dataset.id.in_(permitted_dataset_ids), - ), + if user.current_role not in (TenantAccountRole.OWNER, TenantAccountRole.ADMIN): + # show all datasets that the user has permission to access + if permitted_dataset_ids: + query = query.filter( + db.or_( + Dataset.permission == DatasetPermissionEnum.ALL_TEAM, + db.and_( + Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id + ), + db.and_( + Dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM, + Dataset.id.in_(permitted_dataset_ids), + ), + ) ) - ) - else: - query = query.filter( - db.or_( - Dataset.permission == DatasetPermissionEnum.ALL_TEAM, - db.and_(Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id), + else: + query = query.filter( + db.or_( + Dataset.permission == DatasetPermissionEnum.ALL_TEAM, + db.and_( + Dataset.permission == DatasetPermissionEnum.ONLY_ME, Dataset.created_by == user.id + ), + ) ) - ) else: # if no user, only show datasets that are shared with all team members query = query.filter(Dataset.permission == DatasetPermissionEnum.ALL_TEAM) @@ -377,14 +382,19 @@ def check_dataset_permission(dataset, user): if dataset.tenant_id != user.current_tenant_id: logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") raise NoPermissionError("You do not have permission to access this dataset.") - if dataset.permission == DatasetPermissionEnum.ONLY_ME and dataset.created_by != user.id: - logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") - raise NoPermissionError("You do not have permission to access this dataset.") - if dataset.permission == "partial_members": - user_permission = DatasetPermission.query.filter_by(dataset_id=dataset.id, account_id=user.id).first() - if not user_permission and dataset.tenant_id != user.current_tenant_id and dataset.created_by != user.id: + if user.current_role not in (TenantAccountRole.OWNER, TenantAccountRole.ADMIN): + if dataset.permission == DatasetPermissionEnum.ONLY_ME and dataset.created_by != user.id: logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") raise NoPermissionError("You do not have permission to access this dataset.") + if dataset.permission == "partial_members": + user_permission = DatasetPermission.query.filter_by(dataset_id=dataset.id, account_id=user.id).first() + if ( + not user_permission + and dataset.tenant_id != user.current_tenant_id + and dataset.created_by != user.id + ): + logging.debug(f"User {user.id} does not have permission to access dataset {dataset.id}") + raise NoPermissionError("You do not have permission to access this dataset.") @staticmethod def check_dataset_operator_permission(user: Optional[Account] = None, dataset: Optional[Dataset] = None): @@ -394,15 +404,16 @@ def check_dataset_operator_permission(user: Optional[Account] = None, dataset: O if not user: raise ValueError("User not found") - if dataset.permission == DatasetPermissionEnum.ONLY_ME: - if dataset.created_by != user.id: - raise NoPermissionError("You do not have permission to access this dataset.") + if user.current_role not in (TenantAccountRole.OWNER, TenantAccountRole.ADMIN): + if dataset.permission == DatasetPermissionEnum.ONLY_ME: + if dataset.created_by != user.id: + raise NoPermissionError("You do not have permission to access this dataset.") - elif dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM: - if not any( - dp.dataset_id == dataset.id for dp in DatasetPermission.query.filter_by(account_id=user.id).all() - ): - raise NoPermissionError("You do not have permission to access this dataset.") + elif dataset.permission == DatasetPermissionEnum.PARTIAL_TEAM: + if not any( + dp.dataset_id == dataset.id for dp in DatasetPermission.query.filter_by(account_id=user.id).all() + ): + raise NoPermissionError("You do not have permission to access this dataset.") @staticmethod def get_dataset_queries(dataset_id: str, page: int, per_page: int): From 89ce9a5db2c24164ee70daf89d89038eb0a45cab Mon Sep 17 00:00:00 2001 From: NFish Date: Fri, 27 Dec 2024 18:10:36 +0800 Subject: [PATCH 15/37] Fix: avatar dropdown keyboard navigation (#12155) --- .../header/account-dropdown/index.tsx | 92 +++++++++++-------- .../workplace-selector/index.tsx | 20 ++-- .../components/workflow/operator/index.tsx | 4 +- 3 files changed, 69 insertions(+), 47 deletions(-) diff --git a/web/app/components/header/account-dropdown/index.tsx b/web/app/components/header/account-dropdown/index.tsx index a30ab175acd9cf..e92b16fd67b270 100644 --- a/web/app/components/header/account-dropdown/index.tsx +++ b/web/app/components/header/account-dropdown/index.tsx @@ -59,23 +59,21 @@ export default function AppSelector({ isMobile }: IAppSelector) { { ({ open }) => ( <> -
    - - - {!isMobile && <> - {userProfile.name} - - } - -
    + > + + {!isMobile && <> + {userProfile.name} + + } + - +
    @@ -107,89 +105,107 @@ export default function AppSelector({ isMobile }: IAppSelector) {
    -
    {t('common.account.account')}
    - + }
    -
    setShowAccountSettingModal({ payload: 'members' })}> + {({ active }) =>
    setShowAccountSettingModal({ payload: 'members' })}>
    {t('common.userProfile.settings')}
    -
    +
    }
    {canEmailSupport && -
    {t('common.userProfile.emailSupport')}
    -
    + }
    } -
    {t('common.userProfile.communityFeedback')}
    - + }
    -
    {t('common.userProfile.community')}
    - + }
    -
    {t('common.userProfile.helpCenter')}
    - + }
    -
    {t('common.userProfile.roadmap')}
    - + }
    { document?.body?.getAttribute('data-public-site-about') !== 'hide' && ( -
    setAboutVisible(true)}> + {({ active }) =>
    setAboutVisible(true)}>
    {t('common.userProfile.about')}
    {langeniusVersionInfo.current_version}
    -
    +
    }
    ) }
    -
    handleLogout()}> + {({ active }) =>
    handleLogout()}>
    {t('common.userProfile.logout')}
    -
    +
    }
    diff --git a/web/app/components/header/account-dropdown/workplace-selector/index.tsx b/web/app/components/header/account-dropdown/workplace-selector/index.tsx index 801f0b3d5246a5..bcc72a7bb3c133 100644 --- a/web/app/components/header/account-dropdown/workplace-selector/index.tsx +++ b/web/app/components/header/account-dropdown/workplace-selector/index.tsx @@ -9,6 +9,7 @@ import { useWorkspacesContext } from '@/context/workspace-context' import { ChevronRight } from '@/app/components/base/icons/src/vender/line/arrows' import { Check } from '@/app/components/base/icons/src/vender/line/general' import { ToastContext } from '@/app/components/base/toast' +import classNames from '@/utils/classnames' const itemClassName = ` flex items-center px-3 py-2 h-10 cursor-pointer @@ -50,7 +51,7 @@ const WorkplaceSelector = () => {
    {currentWorkspace?.name[0].toLocaleUpperCase()}
    @@ -70,7 +71,7 @@ const WorkplaceSelector = () => { className={cn( ` absolute top-[1px] min-w-[200px] max-h-[70vh] overflow-y-scroll z-10 bg-white border-[0.5px] border-gray-200 - divide-y divide-gray-100 origin-top-right rounded-xl + divide-y divide-gray-100 origin-top-right rounded-xl focus:outline-none `, s.popup, )} @@ -78,11 +79,16 @@ const WorkplaceSelector = () => {
    { workspaces.map(workspace => ( -
    handleSwitchWorkspace(workspace.id)}> -
    {workspace.name[0].toLocaleUpperCase()}
    -
    {workspace.name}
    - {workspace.current && } -
    + + {({ active }) =>
    handleSwitchWorkspace(workspace.id)}> +
    {workspace.name[0].toLocaleUpperCase()}
    +
    {workspace.name}
    + {workspace.current && } +
    } + +
    )) }
    diff --git a/web/app/components/workflow/operator/index.tsx b/web/app/components/workflow/operator/index.tsx index 80c2bb5306e95f..1ee5fef3377a8b 100644 --- a/web/app/components/workflow/operator/index.tsx +++ b/web/app/components/workflow/operator/index.tsx @@ -17,9 +17,9 @@ const Operator = ({ handleUndo, handleRedo }: OperatorProps) => { width: 102, height: 72, }} - maskColor='var(--color-shadow-shadow-5)' + maskColor='var(--color-workflow-minimap-bg)' className='!absolute !left-4 !bottom-14 z-[9] !m-0 !w-[102px] !h-[72px] !border-[0.5px] !border-divider-subtle - !rounded-lg !shadow-md !shadow-shadow-shadow-5 !bg-workflow-minimap-bg' + !rounded-lg !shadow-md !shadow-shadow-shadow-5 !bg-background-default-subtle' />
    From eb8963a67309f69b553b51fda6fb3abba2978009 Mon Sep 17 00:00:00 2001 From: NFish Date: Fri, 27 Dec 2024 18:33:15 +0800 Subject: [PATCH 16/37] fix: workflow page throw warning: Attempts to access this ref will fail (#12166) --- web/app/components/base/switch/index.tsx | 101 ++++++++++++----------- 1 file changed, 52 insertions(+), 49 deletions(-) diff --git a/web/app/components/base/switch/index.tsx b/web/app/components/base/switch/index.tsx index 8bf32b1311b158..48e5c0cd8c169c 100644 --- a/web/app/components/base/switch/index.tsx +++ b/web/app/components/base/switch/index.tsx @@ -11,59 +11,62 @@ type SwitchProps = { className?: string } -const Switch = ({ onChange, size = 'md', defaultValue = false, disabled = false, className }: SwitchProps) => { - const [enabled, setEnabled] = useState(defaultValue) - useEffect(() => { - setEnabled(defaultValue) - }, [defaultValue]) - const wrapStyle = { - lg: 'h-6 w-11', - l: 'h-5 w-9', - md: 'h-4 w-7', - sm: 'h-3 w-5', - } +const Switch = React.forwardRef( + ({ onChange, size = 'md', defaultValue = false, disabled = false, className }: SwitchProps, + propRef: React.Ref) => { + const [enabled, setEnabled] = useState(defaultValue) + useEffect(() => { + setEnabled(defaultValue) + }, [defaultValue]) + const wrapStyle = { + lg: 'h-6 w-11', + l: 'h-5 w-9', + md: 'h-4 w-7', + sm: 'h-3 w-5', + } - const circleStyle = { - lg: 'h-5 w-5', - l: 'h-4 w-4', - md: 'h-3 w-3', - sm: 'h-2 w-2', - } + const circleStyle = { + lg: 'h-5 w-5', + l: 'h-4 w-4', + md: 'h-3 w-3', + sm: 'h-2 w-2', + } - const translateLeft = { - lg: 'translate-x-5', - l: 'translate-x-4', - md: 'translate-x-3', - sm: 'translate-x-2', - } - return ( - { - if (disabled) - return - setEnabled(checked) - onChange?.(checked) - }} - className={classNames( - wrapStyle[size], - enabled ? 'bg-components-toggle-bg' : 'bg-components-toggle-bg-unchecked', - 'relative inline-flex flex-shrink-0 cursor-pointer rounded-[5px] border-2 border-transparent transition-colors duration-200 ease-in-out', - disabled ? '!opacity-50 !cursor-not-allowed' : '', - className, - )} - > - - ) -} + > +