mirror of
https://github.com/langgenius/dify.git
synced 2026-06-25 08:37:17 +08:00
Compare commits
7 Commits
fix/fronte
...
main
| Author | SHA1 | Date | |
|---|---|---|---|
| 2483c091aa | |||
| a421362847 | |||
| 4964359961 | |||
| 1b81ac033f | |||
| 2eb564696e | |||
| d87764b0f8 | |||
| d135dab241 |
4
.github/workflows/autofix.yml
vendored
4
.github/workflows/autofix.yml
vendored
@ -151,5 +151,9 @@ jobs:
|
||||
run: |
|
||||
vp exec eslint --concurrency=2 --prune-suppressions --quiet || true
|
||||
|
||||
- name: Prune unused i18n
|
||||
if: github.event_name != 'merge_group' && steps.web-changes.outputs.any_changed == 'true'
|
||||
run: vp run dify-web#i18n:prune-unused --write
|
||||
|
||||
- if: github.event_name != 'merge_group'
|
||||
uses: autofix-ci/action@c5b2d67aa2274e7b5a18224e8171550871fc7e4a # v1.3.4
|
||||
|
||||
4
.github/workflows/style.yml
vendored
4
.github/workflows/style.yml
vendored
@ -109,6 +109,10 @@ jobs:
|
||||
if: steps.changed-files.outputs.any_changed == 'true'
|
||||
run: vp run knip:production
|
||||
|
||||
- name: Web production unused declarations check
|
||||
if: steps.changed-files.outputs.any_changed == 'true'
|
||||
run: vp run knip:production-unused-check
|
||||
|
||||
ts-common-style:
|
||||
name: TS Common
|
||||
runs-on: depot-ubuntu-24.04
|
||||
|
||||
@ -201,21 +201,23 @@ def _legacy_workspace_roles(
|
||||
This keeps the new `/rbac/roles` endpoint compatible with the original
|
||||
Dify role model when enterprise RBAC is disabled.
|
||||
"""
|
||||
|
||||
legacy_roles = [
|
||||
svc.RBACRole(
|
||||
id=role_name,
|
||||
tenant_id="",
|
||||
type=svc.RBACRoleType.WORKSPACE.value,
|
||||
category="global_system_default",
|
||||
name=role_name,
|
||||
description="",
|
||||
is_builtin=True,
|
||||
permission_keys=list(dict.fromkeys(_LEGACY_ROLE_PERMISSION_KEYS[role_name])),
|
||||
role_tag="owner" if role_name == "owner" else "",
|
||||
legacy_roles = []
|
||||
for role_name in ("owner", "admin", "editor", "normal", "dataset_operator"):
|
||||
if not dify_config.DATASET_OPERATOR_ENABLED and role_name == "dataset_operator":
|
||||
continue
|
||||
legacy_roles.append(
|
||||
svc.RBACRole(
|
||||
id=role_name,
|
||||
tenant_id="",
|
||||
type=svc.RBACRoleType.WORKSPACE.value,
|
||||
category="global_system_default",
|
||||
name=role_name,
|
||||
description="",
|
||||
is_builtin=True,
|
||||
permission_keys=list(dict.fromkeys(_LEGACY_ROLE_PERMISSION_KEYS[role_name])),
|
||||
role_tag="owner" if role_name == "owner" else "",
|
||||
)
|
||||
)
|
||||
for role_name in ("owner", "admin", "editor", "normal", "dataset_operator")
|
||||
]
|
||||
|
||||
if not include_owner:
|
||||
legacy_roles = [r for r in legacy_roles if r.name != "owner"]
|
||||
|
||||
@ -195,16 +195,16 @@ class TestTencentDataTrace:
|
||||
mock_proc.assert_called_once_with(trace_info, 123)
|
||||
mock_dur.assert_called_once_with(trace_info)
|
||||
|
||||
def test_workflow_trace_exception(self, tencent_data_trace):
|
||||
def test_workflow_trace_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
trace_info.workflow_run_id = "run-id"
|
||||
|
||||
with patch(
|
||||
"dify_trace_tencent.tencent_trace.TencentTraceUtils.convert_to_trace_id", side_effect=Exception("error")
|
||||
):
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace.workflow_trace(trace_info)
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to process workflow trace")
|
||||
assert "[Tencent APM] Failed to process workflow trace" in caplog.text
|
||||
|
||||
def test_message_trace(self, tencent_data_trace, mock_trace_utils, mock_span_builder):
|
||||
trace_info = MagicMock(spec=MessageTraceInfo)
|
||||
@ -228,15 +228,15 @@ class TestTencentDataTrace:
|
||||
mock_metrics.assert_called_once_with(trace_info)
|
||||
mock_dur.assert_called_once_with(trace_info)
|
||||
|
||||
def test_message_trace_exception(self, tencent_data_trace):
|
||||
def test_message_trace_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=MessageTraceInfo)
|
||||
|
||||
with patch(
|
||||
"dify_trace_tencent.tencent_trace.TencentTraceUtils.convert_to_trace_id", side_effect=Exception("error")
|
||||
):
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace.message_trace(trace_info)
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to process message trace")
|
||||
assert "[Tencent APM] Failed to process message trace" in caplog.text
|
||||
|
||||
def test_tool_trace(self, tencent_data_trace, mock_trace_utils, mock_span_builder):
|
||||
trace_info = MagicMock(spec=ToolTraceInfo)
|
||||
@ -259,16 +259,16 @@ class TestTencentDataTrace:
|
||||
tencent_data_trace.tool_trace(trace_info)
|
||||
tencent_data_trace.trace_client.add_span.assert_not_called()
|
||||
|
||||
def test_tool_trace_exception(self, tencent_data_trace):
|
||||
def test_tool_trace_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=ToolTraceInfo)
|
||||
trace_info.message_id = "msg-id"
|
||||
|
||||
with patch(
|
||||
"dify_trace_tencent.tencent_trace.TencentTraceUtils.convert_to_span_id", side_effect=Exception("error")
|
||||
):
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace.tool_trace(trace_info)
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to process tool trace")
|
||||
assert "[Tencent APM] Failed to process tool trace" in caplog.text
|
||||
|
||||
def test_dataset_retrieval_trace(self, tencent_data_trace, mock_trace_utils, mock_span_builder):
|
||||
trace_info = MagicMock(spec=DatasetRetrievalTraceInfo)
|
||||
@ -291,29 +291,30 @@ class TestTencentDataTrace:
|
||||
tencent_data_trace.dataset_retrieval_trace(trace_info)
|
||||
tencent_data_trace.trace_client.add_span.assert_not_called()
|
||||
|
||||
def test_dataset_retrieval_trace_exception(self, tencent_data_trace):
|
||||
def test_dataset_retrieval_trace_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=DatasetRetrievalTraceInfo)
|
||||
trace_info.message_id = "msg-id"
|
||||
|
||||
with patch(
|
||||
"dify_trace_tencent.tencent_trace.TencentTraceUtils.convert_to_span_id", side_effect=Exception("error")
|
||||
):
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace.dataset_retrieval_trace(trace_info)
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to process dataset retrieval trace")
|
||||
assert "[Tencent APM] Failed to process dataset retrieval trace" in caplog.text
|
||||
|
||||
def test_suggested_question_trace(self, tencent_data_trace):
|
||||
def test_suggested_question_trace(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=SuggestedQuestionTraceInfo)
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.info") as mock_log:
|
||||
with caplog.at_level(logging.INFO):
|
||||
tencent_data_trace.suggested_question_trace(trace_info)
|
||||
mock_log.assert_called_once_with("[Tencent APM] Processing suggested question trace")
|
||||
assert "[Tencent APM] Processing suggested question trace" in caplog.text
|
||||
|
||||
def test_suggested_question_trace_exception(self, tencent_data_trace):
|
||||
def test_suggested_question_trace_exception(self, tencent_data_trace, monkeypatch, caplog):
|
||||
trace_info = MagicMock(spec=SuggestedQuestionTraceInfo)
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.info", side_effect=Exception("error")):
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
tencent_data_trace.suggested_question_trace(trace_info)
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to process suggested question trace")
|
||||
target_logger = logging.getLogger("dify_trace_tencent.tencent_trace")
|
||||
monkeypatch.setattr(target_logger, "info", MagicMock(side_effect=Exception("error")))
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace.suggested_question_trace(trace_info)
|
||||
assert "[Tencent APM] Failed to process suggested question trace" in caplog.text
|
||||
|
||||
def test_process_workflow_nodes(self, tencent_data_trace, mock_trace_utils):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
@ -335,7 +336,7 @@ class TestTencentDataTrace:
|
||||
assert tencent_data_trace.trace_client.add_span.call_count == 2
|
||||
mock_metrics.assert_called_once_with(node1)
|
||||
|
||||
def test_process_workflow_nodes_node_exception(self, tencent_data_trace, mock_trace_utils):
|
||||
def test_process_workflow_nodes_node_exception(self, tencent_data_trace, mock_trace_utils, caplog):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
mock_trace_utils.convert_to_span_id.return_value = 111
|
||||
|
||||
@ -344,18 +345,17 @@ class TestTencentDataTrace:
|
||||
|
||||
with patch.object(tencent_data_trace, "_get_workflow_node_executions", return_value=[node]):
|
||||
with patch.object(tencent_data_trace, "_build_workflow_node_span", side_effect=Exception("node error")):
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace._process_workflow_nodes(trace_info, 123)
|
||||
# The exception should be caught by the outer handler since convert_to_span_id is called first
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to process workflow nodes")
|
||||
assert "[Tencent APM] Failed to process workflow nodes" in caplog.text
|
||||
|
||||
def test_process_workflow_nodes_exception(self, tencent_data_trace, mock_trace_utils):
|
||||
def test_process_workflow_nodes_exception(self, tencent_data_trace, mock_trace_utils, caplog):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
mock_trace_utils.convert_to_span_id.side_effect = Exception("outer error")
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace._process_workflow_nodes(trace_info, 123)
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to process workflow nodes")
|
||||
assert "[Tencent APM] Failed to process workflow nodes" in caplog.text
|
||||
|
||||
def test_build_workflow_node_span(self, tencent_data_trace, mock_span_builder):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
@ -377,16 +377,16 @@ class TestTencentDataTrace:
|
||||
assert result == "span"
|
||||
builder_method.assert_called_once_with(123, 456, trace_info, node)
|
||||
|
||||
def test_build_workflow_node_span_exception(self, tencent_data_trace, mock_span_builder):
|
||||
def test_build_workflow_node_span_exception(self, tencent_data_trace, mock_span_builder, caplog):
|
||||
node = MagicMock(spec=WorkflowNodeExecution)
|
||||
node.node_type = BuiltinNodeTypes.LLM
|
||||
node.id = "n1"
|
||||
mock_span_builder.build_workflow_llm_span.side_effect = Exception("error")
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.debug") as mock_log:
|
||||
with caplog.at_level(logging.DEBUG):
|
||||
result = tencent_data_trace._build_workflow_node_span(node, 123, MagicMock(), 456)
|
||||
assert result is None
|
||||
mock_log.assert_called_once()
|
||||
assert result is None
|
||||
assert len([r for r in caplog.records if r.levelno == logging.DEBUG]) >= 1
|
||||
|
||||
def test_get_workflow_node_executions(self, tencent_data_trace):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
@ -419,16 +419,16 @@ class TestTencentDataTrace:
|
||||
assert results == mock_executions
|
||||
account.set_tenant_id.assert_called_once_with("tenant-1")
|
||||
|
||||
def test_get_workflow_node_executions_no_app_id(self, tencent_data_trace):
|
||||
def test_get_workflow_node_executions_no_app_id(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
trace_info.metadata = {}
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
results = tencent_data_trace._get_workflow_node_executions(trace_info)
|
||||
assert results == []
|
||||
mock_log.assert_called_once()
|
||||
assert results == []
|
||||
assert len([r for r in caplog.records if r.levelno == logging.ERROR]) >= 1
|
||||
|
||||
def test_get_workflow_node_executions_app_not_found(self, tencent_data_trace):
|
||||
def test_get_workflow_node_executions_app_not_found(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
trace_info.metadata = {"app_id": "app-1"}
|
||||
|
||||
@ -439,10 +439,10 @@ class TestTencentDataTrace:
|
||||
session = mock_session_ctx.return_value.__enter__.return_value
|
||||
session.scalar.return_value = None
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
results = tencent_data_trace._get_workflow_node_executions(trace_info)
|
||||
assert results == []
|
||||
mock_log.assert_called_once()
|
||||
assert results == []
|
||||
assert len([r for r in caplog.records if r.levelno == logging.ERROR]) >= 1
|
||||
|
||||
def test_get_user_id_workflow(self, tencent_data_trace):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
@ -471,16 +471,16 @@ class TestTencentDataTrace:
|
||||
user_id = tencent_data_trace._get_user_id(trace_info)
|
||||
assert user_id == "anonymous"
|
||||
|
||||
def test_get_user_id_exception(self, tencent_data_trace):
|
||||
def test_get_user_id_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
trace_info.tenant_id = "t"
|
||||
trace_info.metadata = {"user_id": "u"}
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.sessionmaker", side_effect=Exception("error")):
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
user_id = tencent_data_trace._get_user_id(trace_info)
|
||||
assert user_id == "unknown"
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to get user ID")
|
||||
assert user_id == "unknown"
|
||||
assert "[Tencent APM] Failed to get user ID" in caplog.text
|
||||
|
||||
def test_record_llm_metrics_usage_in_process_data(self, tencent_data_trace):
|
||||
node = MagicMock(spec=WorkflowNodeExecution)
|
||||
@ -514,14 +514,14 @@ class TestTencentDataTrace:
|
||||
tencent_data_trace.trace_client.record_llm_duration.assert_called_once()
|
||||
tencent_data_trace.trace_client.record_token_usage.assert_called_once()
|
||||
|
||||
def test_record_llm_metrics_exception(self, tencent_data_trace):
|
||||
def test_record_llm_metrics_exception(self, tencent_data_trace, caplog):
|
||||
node = MagicMock(spec=WorkflowNodeExecution)
|
||||
node.process_data = None
|
||||
node.outputs = None
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.debug") as mock_log:
|
||||
with caplog.at_level(logging.DEBUG):
|
||||
tencent_data_trace._record_llm_metrics(node)
|
||||
# Should not crash
|
||||
# Should not crash
|
||||
|
||||
def test_record_message_llm_metrics(self, tencent_data_trace):
|
||||
trace_info = MagicMock(spec=MessageTraceInfo)
|
||||
@ -553,13 +553,13 @@ class TestTencentDataTrace:
|
||||
tencent_data_trace._record_message_llm_metrics(trace_info)
|
||||
tencent_data_trace.trace_client.record_llm_duration.assert_called_once()
|
||||
|
||||
def test_record_message_llm_metrics_exception(self, tencent_data_trace):
|
||||
def test_record_message_llm_metrics_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=MessageTraceInfo)
|
||||
trace_info.metadata = None
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.debug") as mock_log:
|
||||
with caplog.at_level(logging.DEBUG):
|
||||
tencent_data_trace._record_message_llm_metrics(trace_info)
|
||||
# Should not crash
|
||||
# Should not crash
|
||||
|
||||
def test_record_workflow_trace_duration(self, tencent_data_trace):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
@ -605,11 +605,11 @@ class TestTencentDataTrace:
|
||||
attributes = kwargs["attributes"] if "attributes" in kwargs else args[1] if len(args) > 1 else {}
|
||||
assert attributes["has_conversation"] == "false"
|
||||
|
||||
def test_record_workflow_trace_duration_exception(self, tencent_data_trace):
|
||||
def test_record_workflow_trace_duration_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=WorkflowTraceInfo)
|
||||
trace_info.start_time = MagicMock() # This might cause total_seconds() to fail if not mocked right
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.debug") as mock_log:
|
||||
with caplog.at_level(logging.DEBUG):
|
||||
tencent_data_trace._record_workflow_trace_duration(trace_info)
|
||||
|
||||
def test_record_message_trace_duration(self, tencent_data_trace):
|
||||
@ -627,11 +627,11 @@ class TestTencentDataTrace:
|
||||
2.0, {"conversation_mode": "chat", "stream": "true"}
|
||||
)
|
||||
|
||||
def test_record_message_trace_duration_exception(self, tencent_data_trace):
|
||||
def test_record_message_trace_duration_exception(self, tencent_data_trace, caplog):
|
||||
trace_info = MagicMock(spec=MessageTraceInfo)
|
||||
trace_info.start_time = None
|
||||
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.debug") as mock_log:
|
||||
with caplog.at_level(logging.DEBUG):
|
||||
tencent_data_trace._record_message_trace_duration(trace_info)
|
||||
|
||||
def test_close(self, tencent_data_trace):
|
||||
@ -647,11 +647,11 @@ class TestTencentDataTrace:
|
||||
|
||||
client.shutdown.assert_called_once()
|
||||
|
||||
def test_close_exception(self, tencent_data_trace):
|
||||
def test_close_exception(self, tencent_data_trace, caplog):
|
||||
tencent_data_trace.trace_client.shutdown.side_effect = Exception("error")
|
||||
with patch("dify_trace_tencent.tencent_trace.logger.exception") as mock_log:
|
||||
with caplog.at_level(logging.ERROR):
|
||||
tencent_data_trace.close()
|
||||
mock_log.assert_called_once_with("[Tencent APM] Failed to shutdown trace client during cleanup")
|
||||
assert "[Tencent APM] Failed to shutdown trace client during cleanup" in caplog.text
|
||||
|
||||
def test_close_handles_async_shutdown_mock(self, tencent_data_trace):
|
||||
shutdown = AsyncMock()
|
||||
|
||||
@ -113,7 +113,7 @@ class LindormVectorStore(BaseVector):
|
||||
)
|
||||
def _bulk_with_retry(actions):
|
||||
try:
|
||||
response = self._client.bulk(actions, timeout=timeout)
|
||||
response = self._client.bulk(body=actions, timeout=timeout)
|
||||
if response["errors"]:
|
||||
error_items = [item for item in response["items"] if "error" in item["index"]]
|
||||
error_msg = f"Bulk indexing had {len(error_items)} errors"
|
||||
@ -231,7 +231,7 @@ class LindormVectorStore(BaseVector):
|
||||
routing_filter_query = {
|
||||
"query": {"bool": {"must": [{"term": {f"{ROUTING_FIELD}.keyword": self._routing}}]}}
|
||||
}
|
||||
self._client.delete_by_query(self._collection_name, body=routing_filter_query)
|
||||
self._client.delete_by_query(index=self._collection_name, body=routing_filter_query)
|
||||
self.refresh()
|
||||
else:
|
||||
if self._client.indices.exists(index=self._collection_name):
|
||||
|
||||
@ -127,7 +127,7 @@ def test_create_refresh_and_add_texts_success(lindorm_module, monkeypatch: pytes
|
||||
vector.add_texts(docs, embeddings, batch_size=2, timeout=9)
|
||||
|
||||
assert vector._client.bulk.call_count == 2
|
||||
actions = vector._client.bulk.call_args_list[0].args[0]
|
||||
actions = vector._client.bulk.call_args_list[0].kwargs["body"]
|
||||
assert actions[0]["index"]["routing"] == "route"
|
||||
assert actions[1][lindorm_module.ROUTING_FIELD] == "route"
|
||||
vector.refresh()
|
||||
|
||||
@ -379,6 +379,9 @@ _LEGACY_WORKSPACE_EDITOR_KEYS: list[str] = [
|
||||
"snippets.create_and_modify",
|
||||
"tool.manage",
|
||||
"snippets.create_and_modify",
|
||||
"billing.view",
|
||||
"billing.subscription.manage",
|
||||
"billing.manage",
|
||||
]
|
||||
|
||||
_LEGACY_WORKSPACE_NORMAL_KEYS: list[str] = [
|
||||
@ -386,6 +389,9 @@ _LEGACY_WORKSPACE_NORMAL_KEYS: list[str] = [
|
||||
"plugin.install",
|
||||
"credential.use",
|
||||
"app_library.access",
|
||||
"billing.view",
|
||||
"billing.subscription.manage",
|
||||
"billing.manage",
|
||||
]
|
||||
|
||||
_LEGACY_WORKSPACE_DATASET_OPERATOR_KEYS: list[str] = [
|
||||
@ -834,6 +840,7 @@ class RBACService:
|
||||
options: ListOption | None = None,
|
||||
) -> Paginated[RBACRole]:
|
||||
params = (options or ListOption()).to_params({"include_owner": include_owner})
|
||||
params["dataset_operator_enabled"] = dify_config.DATASET_OPERATOR_ENABLED
|
||||
data = _inner_call(
|
||||
"GET",
|
||||
f"{_INNER_PREFIX}/roles",
|
||||
|
||||
@ -9,6 +9,7 @@ This module tests the core authentication endpoints including:
|
||||
"""
|
||||
|
||||
import base64
|
||||
import logging
|
||||
from unittest.mock import ANY, MagicMock, Mock, patch
|
||||
|
||||
import pytest
|
||||
@ -191,7 +192,7 @@ class TestLoginApi:
|
||||
@patch("controllers.console.auth.login.dify_config.BILLING_ENABLED", False)
|
||||
@patch("controllers.console.auth.login.AccountService.is_login_error_rate_limit")
|
||||
@patch("controllers.console.auth.login.RegisterService.get_invitation_with_case_fallback")
|
||||
def test_login_fails_when_rate_limited(self, mock_get_invitation, mock_is_rate_limit, mock_db, app: Flask):
|
||||
def test_login_fails_when_rate_limited(self, mock_get_invitation, mock_is_rate_limit, mock_db, app: Flask, caplog):
|
||||
"""
|
||||
Test login rejection when rate limit is exceeded.
|
||||
|
||||
@ -204,22 +205,24 @@ class TestLoginApi:
|
||||
mock_get_invitation.return_value = None
|
||||
|
||||
# Act & Assert
|
||||
with patch("controllers.console.auth.login.logger.warning") as mock_log_warning:
|
||||
with app.test_request_context(
|
||||
"/login", method="POST", json={"email": "test@example.com", "password": encode_password("password")}
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(EmailPasswordLoginLimitError):
|
||||
login_api.post()
|
||||
with app.test_request_context(
|
||||
"/login", method="POST", json={"email": "test@example.com", "password": encode_password("password")}
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(EmailPasswordLoginLimitError):
|
||||
login_api.post()
|
||||
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "test@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.LOGIN_RATE_LIMITED
|
||||
warn_records = [
|
||||
r for r in caplog.records if r.name == "controllers.console.auth.login" and r.levelno == logging.WARNING
|
||||
]
|
||||
assert len(warn_records) == 1
|
||||
assert warn_records[0].args[0] == "test@example.com"
|
||||
assert warn_records[0].args[1] == LoginFailureReason.LOGIN_RATE_LIMITED
|
||||
|
||||
@patch("controllers.console.wraps.db")
|
||||
@patch("controllers.console.auth.login.dify_config.BILLING_ENABLED", True)
|
||||
@patch("controllers.console.auth.login.BillingService.is_email_in_freeze")
|
||||
def test_login_fails_when_account_frozen(self, mock_is_frozen, mock_db, app: Flask):
|
||||
def test_login_fails_when_account_frozen(self, mock_is_frozen, mock_db, app: Flask, caplog):
|
||||
"""
|
||||
Test login rejection for frozen accounts.
|
||||
|
||||
@ -231,17 +234,19 @@ class TestLoginApi:
|
||||
mock_is_frozen.return_value = True
|
||||
|
||||
# Act & Assert
|
||||
with patch("controllers.console.auth.login.logger.warning") as mock_log_warning:
|
||||
with app.test_request_context(
|
||||
"/login", method="POST", json={"email": "frozen@example.com", "password": encode_password("password")}
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(AccountInFreezeError):
|
||||
login_api.post()
|
||||
with app.test_request_context(
|
||||
"/login", method="POST", json={"email": "frozen@example.com", "password": encode_password("password")}
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(AccountInFreezeError):
|
||||
login_api.post()
|
||||
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "frozen@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.ACCOUNT_IN_FREEZE
|
||||
warn_records = [
|
||||
r for r in caplog.records if r.name == "controllers.console.auth.login" and r.levelno == logging.WARNING
|
||||
]
|
||||
assert len(warn_records) == 1
|
||||
assert warn_records[0].args[0] == "frozen@example.com"
|
||||
assert warn_records[0].args[1] == LoginFailureReason.ACCOUNT_IN_FREEZE
|
||||
|
||||
@patch("controllers.console.wraps.db")
|
||||
@patch("controllers.console.auth.login.dify_config.BILLING_ENABLED", False)
|
||||
@ -257,6 +262,7 @@ class TestLoginApi:
|
||||
mock_is_rate_limit,
|
||||
mock_db,
|
||||
app: Flask,
|
||||
caplog,
|
||||
):
|
||||
"""
|
||||
Test login failure with invalid credentials.
|
||||
@ -272,20 +278,22 @@ class TestLoginApi:
|
||||
mock_authenticate.side_effect = AccountPasswordError("Invalid password")
|
||||
|
||||
# Act & Assert
|
||||
with patch("controllers.console.auth.login.logger.warning") as mock_log_warning:
|
||||
with app.test_request_context(
|
||||
"/login",
|
||||
method="POST",
|
||||
json={"email": "test@example.com", "password": encode_password("WrongPass123!")},
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(AuthenticationFailedError):
|
||||
login_api.post()
|
||||
with app.test_request_context(
|
||||
"/login",
|
||||
method="POST",
|
||||
json={"email": "test@example.com", "password": encode_password("WrongPass123!")},
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(AuthenticationFailedError):
|
||||
login_api.post()
|
||||
|
||||
mock_add_rate_limit.assert_called_once_with("test@example.com")
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "test@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.INVALID_CREDENTIALS
|
||||
warn_records = [
|
||||
r for r in caplog.records if r.name == "controllers.console.auth.login" and r.levelno == logging.WARNING
|
||||
]
|
||||
assert len(warn_records) == 1
|
||||
assert warn_records[0].args[0] == "test@example.com"
|
||||
assert warn_records[0].args[1] == LoginFailureReason.INVALID_CREDENTIALS
|
||||
|
||||
@patch("controllers.console.wraps.db")
|
||||
@patch("controllers.console.auth.login.dify_config.BILLING_ENABLED", False)
|
||||
@ -293,7 +301,7 @@ class TestLoginApi:
|
||||
@patch("controllers.console.auth.login.RegisterService.get_invitation_with_case_fallback")
|
||||
@patch("controllers.console.auth.login.AccountService.authenticate")
|
||||
def test_login_fails_for_banned_account(
|
||||
self, mock_authenticate, mock_get_invitation, mock_is_rate_limit, mock_db, app: Flask
|
||||
self, mock_authenticate, mock_get_invitation, mock_is_rate_limit, mock_db, app: Flask, caplog
|
||||
):
|
||||
"""
|
||||
Test login rejection for banned accounts.
|
||||
@ -308,19 +316,21 @@ class TestLoginApi:
|
||||
mock_authenticate.side_effect = AccountLoginError("Account is banned")
|
||||
|
||||
# Act & Assert
|
||||
with patch("controllers.console.auth.login.logger.warning") as mock_log_warning:
|
||||
with app.test_request_context(
|
||||
"/login",
|
||||
method="POST",
|
||||
json={"email": "banned@example.com", "password": encode_password("ValidPass123!")},
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(AccountBannedError):
|
||||
login_api.post()
|
||||
with app.test_request_context(
|
||||
"/login",
|
||||
method="POST",
|
||||
json={"email": "banned@example.com", "password": encode_password("ValidPass123!")},
|
||||
):
|
||||
login_api = LoginApi()
|
||||
with pytest.raises(AccountBannedError):
|
||||
login_api.post()
|
||||
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "banned@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.ACCOUNT_BANNED
|
||||
warn_records = [
|
||||
r for r in caplog.records if r.name == "controllers.console.auth.login" and r.levelno == logging.WARNING
|
||||
]
|
||||
assert len(warn_records) == 1
|
||||
assert warn_records[0].args[0] == "banned@example.com"
|
||||
assert warn_records[0].args[1] == LoginFailureReason.ACCOUNT_BANNED
|
||||
|
||||
@patch("controllers.console.wraps.db")
|
||||
@patch("controllers.console.auth.login.dify_config.BILLING_ENABLED", False)
|
||||
@ -452,23 +462,26 @@ class TestLoginApi:
|
||||
mock_get_token_data: MagicMock,
|
||||
mock_db: MagicMock,
|
||||
app: Flask,
|
||||
caplog,
|
||||
):
|
||||
mock_get_token_data.return_value = {"email": "User@Example.com", "code": "123456"}
|
||||
mock_get_account.side_effect = Unauthorized("Account is banned.")
|
||||
|
||||
with patch("controllers.console.auth.login.logger.warning") as mock_log_warning:
|
||||
with app.test_request_context(
|
||||
"/email-code-login/validity",
|
||||
method="POST",
|
||||
json={"email": "User@Example.com", "code": encode_code("123456"), "token": "token-123"},
|
||||
):
|
||||
with pytest.raises(AccountBannedError):
|
||||
EmailCodeLoginApi().post()
|
||||
with app.test_request_context(
|
||||
"/email-code-login/validity",
|
||||
method="POST",
|
||||
json={"email": "User@Example.com", "code": encode_code("123456"), "token": "token-123"},
|
||||
):
|
||||
with pytest.raises(AccountBannedError):
|
||||
EmailCodeLoginApi().post()
|
||||
|
||||
mock_revoke_token.assert_called_once_with("token-123")
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "user@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.ACCOUNT_BANNED
|
||||
warn_records = [
|
||||
r for r in caplog.records if r.name == "controllers.console.auth.login" and r.levelno == logging.WARNING
|
||||
]
|
||||
assert len(warn_records) == 1
|
||||
assert warn_records[0].args[0] == "user@example.com"
|
||||
assert warn_records[0].args[1] == LoginFailureReason.ACCOUNT_BANNED
|
||||
|
||||
|
||||
class TestLogoutApi:
|
||||
|
||||
@ -201,10 +201,10 @@ class TestPaginationMapping:
|
||||
},
|
||||
]
|
||||
assert response["pagination"] == {
|
||||
"total_count": 5,
|
||||
"total_count": 4,
|
||||
"per_page": 2,
|
||||
"current_page": 1,
|
||||
"total_pages": 3,
|
||||
"total_pages": 2,
|
||||
}
|
||||
mock_list.assert_not_called()
|
||||
|
||||
|
||||
@ -1,4 +1,5 @@
|
||||
import base64
|
||||
import logging
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import MagicMock, patch
|
||||
|
||||
@ -16,6 +17,13 @@ def encode_code(code: str) -> str:
|
||||
return base64.b64encode(code.encode("utf-8")).decode()
|
||||
|
||||
|
||||
def assert_login_failure_logged(caplog: pytest.LogCaptureFixture, email: str, reason: LoginFailureReason) -> None:
|
||||
records = [record for record in caplog.records if record.name == "controllers.web.login"]
|
||||
assert len(records) == 1
|
||||
assert records[0].args[0] == email
|
||||
assert records[0].args[1] == reason
|
||||
|
||||
|
||||
@pytest.fixture
|
||||
def app():
|
||||
flask_app = Flask(__name__)
|
||||
@ -114,10 +122,10 @@ class TestLoginApi:
|
||||
"controllers.web.login.WebAppAuthService.authenticate",
|
||||
side_effect=services.errors.account.AccountLoginError(),
|
||||
)
|
||||
def test_login_banned_account(self, mock_auth: MagicMock, app: Flask) -> None:
|
||||
def test_login_banned_account(self, mock_auth: MagicMock, app: Flask, caplog: pytest.LogCaptureFixture) -> None:
|
||||
from controllers.console.error import AccountBannedError
|
||||
|
||||
with patch("controllers.web.login.logger.warning") as mock_log_warning:
|
||||
with caplog.at_level(logging.WARNING, logger="controllers.web.login"):
|
||||
with app.test_request_context(
|
||||
"/web/login",
|
||||
method="POST",
|
||||
@ -126,18 +134,16 @@ class TestLoginApi:
|
||||
with pytest.raises(AccountBannedError):
|
||||
LoginApi().post()
|
||||
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "user@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.ACCOUNT_BANNED
|
||||
assert_login_failure_logged(caplog, "user@example.com", LoginFailureReason.ACCOUNT_BANNED)
|
||||
|
||||
@patch(
|
||||
"controllers.web.login.WebAppAuthService.authenticate",
|
||||
side_effect=services.errors.account.AccountPasswordError(),
|
||||
)
|
||||
def test_login_wrong_password(self, mock_auth: MagicMock, app: Flask) -> None:
|
||||
def test_login_wrong_password(self, mock_auth: MagicMock, app: Flask, caplog: pytest.LogCaptureFixture) -> None:
|
||||
from controllers.console.auth.error import AuthenticationFailedError
|
||||
|
||||
with patch("controllers.web.login.logger.warning") as mock_log_warning:
|
||||
with caplog.at_level(logging.WARNING, logger="controllers.web.login"):
|
||||
with app.test_request_context(
|
||||
"/web/login",
|
||||
method="POST",
|
||||
@ -146,18 +152,16 @@ class TestLoginApi:
|
||||
with pytest.raises(AuthenticationFailedError):
|
||||
LoginApi().post()
|
||||
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "user@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.INVALID_CREDENTIALS
|
||||
assert_login_failure_logged(caplog, "user@example.com", LoginFailureReason.INVALID_CREDENTIALS)
|
||||
|
||||
@patch(
|
||||
"controllers.web.login.WebAppAuthService.authenticate",
|
||||
side_effect=services.errors.account.AccountNotFoundError(),
|
||||
)
|
||||
def test_login_account_not_found(self, mock_auth: MagicMock, app: Flask) -> None:
|
||||
def test_login_account_not_found(self, mock_auth: MagicMock, app: Flask, caplog: pytest.LogCaptureFixture) -> None:
|
||||
from controllers.console.auth.error import AuthenticationFailedError
|
||||
|
||||
with patch("controllers.web.login.logger.warning") as mock_log_warning:
|
||||
with caplog.at_level(logging.WARNING, logger="controllers.web.login"):
|
||||
with app.test_request_context(
|
||||
"/web/login",
|
||||
method="POST",
|
||||
@ -166,13 +170,13 @@ class TestLoginApi:
|
||||
with pytest.raises(AuthenticationFailedError):
|
||||
LoginApi().post()
|
||||
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "missing@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.ACCOUNT_NOT_FOUND
|
||||
assert_login_failure_logged(caplog, "missing@example.com", LoginFailureReason.ACCOUNT_NOT_FOUND)
|
||||
|
||||
@patch("controllers.web.login.WebAppAuthService.get_email_code_login_data", return_value=None)
|
||||
def test_email_code_login_logs_invalid_token(self, mock_get_token_data: MagicMock, app: Flask) -> None:
|
||||
with patch("controllers.web.login.logger.warning") as mock_log_warning:
|
||||
def test_email_code_login_logs_invalid_token(
|
||||
self, mock_get_token_data: MagicMock, app: Flask, caplog: pytest.LogCaptureFixture
|
||||
) -> None:
|
||||
with caplog.at_level(logging.WARNING, logger="controllers.web.login"):
|
||||
with app.test_request_context(
|
||||
"/web/email-code-login/validity",
|
||||
method="POST",
|
||||
@ -182,9 +186,7 @@ class TestLoginApi:
|
||||
EmailCodeLoginApi().post()
|
||||
|
||||
mock_get_token_data.assert_called_once_with("token-123")
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "user@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.INVALID_EMAIL_CODE_TOKEN
|
||||
assert_login_failure_logged(caplog, "user@example.com", LoginFailureReason.INVALID_EMAIL_CODE_TOKEN)
|
||||
|
||||
@patch("controllers.web.login.WebAppAuthService.revoke_email_code_login_token")
|
||||
@patch(
|
||||
@ -201,10 +203,11 @@ class TestLoginApi:
|
||||
mock_get_user: MagicMock,
|
||||
mock_revoke_token: MagicMock,
|
||||
app: Flask,
|
||||
caplog: pytest.LogCaptureFixture,
|
||||
) -> None:
|
||||
from controllers.console.error import AccountBannedError
|
||||
|
||||
with patch("controllers.web.login.logger.warning") as mock_log_warning:
|
||||
with caplog.at_level(logging.WARNING, logger="controllers.web.login"):
|
||||
with app.test_request_context(
|
||||
"/web/email-code-login/validity",
|
||||
method="POST",
|
||||
@ -215,9 +218,7 @@ class TestLoginApi:
|
||||
|
||||
mock_get_token_data.assert_called_once_with("token-123")
|
||||
mock_revoke_token.assert_called_once_with("token-123")
|
||||
assert mock_log_warning.call_count == 1
|
||||
assert mock_log_warning.call_args.args[1] == "user@example.com"
|
||||
assert mock_log_warning.call_args.args[2] == LoginFailureReason.ACCOUNT_BANNED
|
||||
assert_login_failure_logged(caplog, "user@example.com", LoginFailureReason.ACCOUNT_BANNED)
|
||||
|
||||
|
||||
class TestLoginStatusApi:
|
||||
|
||||
@ -86,21 +86,26 @@ class TestRoles:
|
||||
call = _call_args(mock_send)
|
||||
assert call.method == "GET"
|
||||
assert call.endpoint == "/rbac/roles"
|
||||
assert call.params == {"page_number": 2, "results_per_page": 50, "reverse": "true"}
|
||||
assert call.params == {
|
||||
"dataset_operator_enabled": False,
|
||||
"page_number": 2,
|
||||
"results_per_page": 50,
|
||||
"reverse": "true",
|
||||
}
|
||||
assert out.pagination
|
||||
assert out.pagination.total_count == 1
|
||||
|
||||
def test_list_omits_params_when_default(self, mock_send: MagicMock):
|
||||
mock_send.return_value = {"data": [], "pagination": None}
|
||||
svc.RBACService.Roles.list("tenant-1")
|
||||
assert _call_args(mock_send).params is None
|
||||
assert _call_args(mock_send).params is not None
|
||||
|
||||
def test_list_forwards_include_owner(self, mock_send: MagicMock):
|
||||
mock_send.return_value = {"data": [], "pagination": None}
|
||||
|
||||
svc.RBACService.Roles.list("tenant-1", include_owner=1)
|
||||
|
||||
assert _call_args(mock_send).params == {"include_owner": 1}
|
||||
assert _call_args(mock_send).params == {"dataset_operator_enabled": False, "include_owner": 1}
|
||||
|
||||
def test_list_coerces_null_permission_keys(self, mock_send: MagicMock):
|
||||
mock_send.return_value = {
|
||||
|
||||
@ -3274,7 +3274,7 @@
|
||||
},
|
||||
"web/app/components/develop/code.tsx": {
|
||||
"ts/no-explicit-any": {
|
||||
"count": 7
|
||||
"count": 6
|
||||
}
|
||||
},
|
||||
"web/app/components/develop/doc.tsx": {
|
||||
@ -3286,9 +3286,6 @@
|
||||
"jsx-a11y/no-redundant-roles": {
|
||||
"count": 1
|
||||
},
|
||||
"ts/no-empty-object-type": {
|
||||
"count": 1
|
||||
},
|
||||
"ts/no-explicit-any": {
|
||||
"count": 2
|
||||
}
|
||||
@ -4476,6 +4473,11 @@
|
||||
"count": 1
|
||||
}
|
||||
},
|
||||
"web/app/components/tools/provider/detail.tsx": {
|
||||
"jsx-a11y/anchor-has-content": {
|
||||
"count": 1
|
||||
}
|
||||
},
|
||||
"web/app/components/tools/provider/tool-item.tsx": {
|
||||
"jsx-a11y/click-events-have-key-events": {
|
||||
"count": 1
|
||||
@ -7222,7 +7224,7 @@
|
||||
"count": 1
|
||||
},
|
||||
"ts/no-explicit-any": {
|
||||
"count": 13
|
||||
"count": 9
|
||||
}
|
||||
},
|
||||
"web/service/datasets.ts": {
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
import { act, render, screen, waitFor } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { Code, CodeGroup, Embed, Pre } from '../code'
|
||||
import { CodeGroup, Embed } from '../code'
|
||||
|
||||
vi.mock('@/utils/clipboard', () => ({
|
||||
writeTextToClipboard: vi.fn().mockResolvedValue(undefined),
|
||||
@ -21,31 +21,6 @@ describe('code.tsx components', () => {
|
||||
vi.restoreAllMocks()
|
||||
})
|
||||
|
||||
describe('Code', () => {
|
||||
it('should render children as a code element', () => {
|
||||
render(<Code>const x = 1</Code>)
|
||||
const codeElement = screen.getByText('const x = 1')
|
||||
expect(codeElement.tagName).toBe('CODE')
|
||||
})
|
||||
|
||||
it('should pass through additional props', () => {
|
||||
render(<Code data-testid="custom-code" className="custom-class">snippet</Code>)
|
||||
const codeElement = screen.getByTestId('custom-code')
|
||||
expect(codeElement).toHaveClass('custom-class')
|
||||
})
|
||||
|
||||
it('should render with complex children', () => {
|
||||
render(
|
||||
<Code>
|
||||
<span>part1</span>
|
||||
<span>part2</span>
|
||||
</Code>,
|
||||
)
|
||||
expect(screen.getByText('part1')).toBeInTheDocument()
|
||||
expect(screen.getByText('part2')).toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
describe('Embed', () => {
|
||||
it('should render value prop as a span element', () => {
|
||||
render(<Embed value="embedded content">ignored children</Embed>)
|
||||
@ -277,28 +252,6 @@ describe('code.tsx components', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('Pre', () => {
|
||||
it('should wrap children in CodeGroup when outside CodeGroup context', () => {
|
||||
render(
|
||||
<Pre title="Pre Title">
|
||||
<pre><code>code</code></pre>
|
||||
</Pre>,
|
||||
)
|
||||
expect(screen.getByText('Pre Title')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should return children directly when inside CodeGroup context', () => {
|
||||
render(
|
||||
<CodeGroup targetCode="outer code">
|
||||
<Pre>
|
||||
<code>inner code</code>
|
||||
</Pre>
|
||||
</CodeGroup>,
|
||||
)
|
||||
expect(screen.getByText('outer code')).toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
describe('CodePanelHeader (via CodeGroup)', () => {
|
||||
it('should render when tag is provided', () => {
|
||||
render(
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
import { render, screen } from '@testing-library/react'
|
||||
import { Col, Heading, Properties, Property, PropertyInstruction, Row, SubProperty } from '../md'
|
||||
import { Col, Heading, Properties, Property, Row, SubProperty } from '../md'
|
||||
|
||||
describe('md.tsx components', () => {
|
||||
describe('Heading', () => {
|
||||
@ -540,67 +540,6 @@ describe('md.tsx components', () => {
|
||||
})
|
||||
})
|
||||
|
||||
describe('PropertyInstruction', () => {
|
||||
it('should render children', () => {
|
||||
render(
|
||||
<PropertyInstruction>
|
||||
This is an instruction
|
||||
</PropertyInstruction>,
|
||||
)
|
||||
expect(screen.getByText('This is an instruction')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should render as li element', () => {
|
||||
const { container } = render(
|
||||
<PropertyInstruction>
|
||||
Instruction text
|
||||
</PropertyInstruction>,
|
||||
)
|
||||
expect(container.querySelector('li')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should have m-0 class', () => {
|
||||
const { container } = render(
|
||||
<PropertyInstruction>
|
||||
Instruction
|
||||
</PropertyInstruction>,
|
||||
)
|
||||
const li = container.querySelector('li')!
|
||||
expect(li.className).toContain('m-0')
|
||||
})
|
||||
|
||||
it('should have padding classes', () => {
|
||||
const { container } = render(
|
||||
<PropertyInstruction>
|
||||
Instruction
|
||||
</PropertyInstruction>,
|
||||
)
|
||||
const li = container.querySelector('li')!
|
||||
expect(li.className).toContain('px-0')
|
||||
expect(li.className).toContain('py-4')
|
||||
})
|
||||
|
||||
it('should have italic class', () => {
|
||||
const { container } = render(
|
||||
<PropertyInstruction>
|
||||
Instruction
|
||||
</PropertyInstruction>,
|
||||
)
|
||||
const li = container.querySelector('li')!
|
||||
expect(li.className).toContain('italic')
|
||||
})
|
||||
|
||||
it('should have first:pt-0 class', () => {
|
||||
const { container } = render(
|
||||
<PropertyInstruction>
|
||||
Instruction
|
||||
</PropertyInstruction>,
|
||||
)
|
||||
const li = container.querySelector('li')!
|
||||
expect(li.className).toContain('first:pt-0')
|
||||
})
|
||||
})
|
||||
|
||||
describe('integration tests', () => {
|
||||
it('should render Property inside Properties', () => {
|
||||
render(
|
||||
@ -635,21 +574,5 @@ describe('md.tsx components', () => {
|
||||
expect(screen.getByText('Left column')).toBeInTheDocument()
|
||||
expect(screen.getByText('Right column')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should render PropertyInstruction inside Properties', () => {
|
||||
render(
|
||||
<Properties anchor={false}>
|
||||
<PropertyInstruction>
|
||||
Note: All fields are required
|
||||
</PropertyInstruction>
|
||||
<Property name="required_field" type="string" anchor={false}>
|
||||
A required field
|
||||
</Property>
|
||||
</Properties>,
|
||||
)
|
||||
|
||||
expect(screen.getByText('Note: All fields are required')).toBeInTheDocument()
|
||||
expect(screen.getByText('required_field')).toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
'use client'
|
||||
import type { PropsWithChildren, ReactElement, ReactNode } from 'react'
|
||||
import type { PropsWithChildren, ReactElement } from 'react'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import {
|
||||
Tabs,
|
||||
@ -9,8 +9,6 @@ import {
|
||||
} from '@langgenius/dify-ui/tabs'
|
||||
import {
|
||||
Children,
|
||||
createContext,
|
||||
use,
|
||||
useEffect,
|
||||
useRef,
|
||||
useState,
|
||||
@ -269,8 +267,6 @@ function useTabGroupProps(tabValues: string[]) {
|
||||
}
|
||||
}
|
||||
|
||||
const CodeGroupContext = createContext(false)
|
||||
|
||||
type CodeGroupProps = PropsWithChildren<{
|
||||
/** Code example(s) to display */
|
||||
targetCode?: string | CodeExample[]
|
||||
@ -297,42 +293,20 @@ export function CodeGroup({ children, title, targetCode, ...props }: CodeGroupPr
|
||||
</>
|
||||
)
|
||||
|
||||
return (
|
||||
<CodeGroupContext.Provider value={true}>
|
||||
{hasTabs
|
||||
? (
|
||||
<Tabs
|
||||
{...tabGroupProps}
|
||||
className="not-prose my-6 overflow-hidden rounded-2xl bg-zinc-900 shadow-md dark:ring-1 dark:ring-white/10"
|
||||
>
|
||||
{content}
|
||||
</Tabs>
|
||||
)
|
||||
: (
|
||||
<div className="not-prose my-6 overflow-hidden rounded-2xl bg-zinc-900 shadow-md dark:ring-1 dark:ring-white/10">
|
||||
{content}
|
||||
</div>
|
||||
)}
|
||||
</CodeGroupContext.Provider>
|
||||
)
|
||||
}
|
||||
|
||||
type IChildProps = {
|
||||
children: ReactNode
|
||||
[key: string]: any
|
||||
}
|
||||
|
||||
export function Code({ children, ...props }: IChildProps) {
|
||||
return <code {...props}>{children}</code>
|
||||
}
|
||||
|
||||
export function Pre({ children, ...props }: IChildrenProps) {
|
||||
const isGrouped = use(CodeGroupContext)
|
||||
|
||||
if (isGrouped)
|
||||
return children
|
||||
|
||||
return <CodeGroup {...props}>{children}</CodeGroup>
|
||||
return hasTabs
|
||||
? (
|
||||
<Tabs
|
||||
{...tabGroupProps}
|
||||
className="not-prose my-6 overflow-hidden rounded-2xl bg-zinc-900 shadow-md dark:ring-1 dark:ring-white/10"
|
||||
>
|
||||
{content}
|
||||
</Tabs>
|
||||
)
|
||||
: (
|
||||
<div className="not-prose my-6 overflow-hidden rounded-2xl bg-zinc-900 shadow-md dark:ring-1 dark:ring-white/10">
|
||||
{content}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
|
||||
export function Embed({ value, ...props }: IChildrenProps) {
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
'use client'
|
||||
import type { PropsWithChildren } from 'react'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
|
||||
type IChildrenProps = {
|
||||
@ -140,9 +139,3 @@ export function SubProperty({ name, type, children }: ISubProperty) {
|
||||
</li>
|
||||
)
|
||||
}
|
||||
|
||||
export function PropertyInstruction({ children }: PropsWithChildren<{ }>) {
|
||||
return (
|
||||
<li className="m-0 px-0 py-4 italic first:pt-0">{children}</li>
|
||||
)
|
||||
}
|
||||
|
||||
@ -346,7 +346,7 @@ describe('BannerItem', () => {
|
||||
expect(wrapper).toHaveClass('rounded-2xl')
|
||||
})
|
||||
|
||||
it('keeps a fixed height even when text content is empty', () => {
|
||||
it('keeps the desktop height even when text content is empty', () => {
|
||||
const banner = createMockBanner({
|
||||
content: {
|
||||
'category': '',
|
||||
@ -359,7 +359,7 @@ describe('BannerItem', () => {
|
||||
const { container } = renderBannerItem(banner)
|
||||
const wrapper = container.firstChild as HTMLElement
|
||||
|
||||
expect(wrapper).toHaveClass('h-[184px]')
|
||||
expect(wrapper).toHaveClass('xl:h-[184px]')
|
||||
})
|
||||
})
|
||||
})
|
||||
|
||||
@ -130,7 +130,7 @@ export function BannerItem({
|
||||
|
||||
return (
|
||||
<div
|
||||
className="flex h-[184px] w-full cursor-pointer items-start overflow-hidden rounded-2xl bg-components-panel-on-panel-item-bg shadow-xs"
|
||||
className="flex h-[224px] w-full cursor-pointer items-start overflow-hidden rounded-2xl bg-components-panel-on-panel-item-bg shadow-xs xl:h-[184px]"
|
||||
onClick={handleBannerClick}
|
||||
>
|
||||
<div className="flex min-w-px flex-1 flex-col items-end self-stretch rounded-2xl py-6 pl-8">
|
||||
@ -140,7 +140,7 @@ export function BannerItem({
|
||||
</p>
|
||||
</div>
|
||||
|
||||
<div className="flex w-full flex-col gap-3 py-1">
|
||||
<div className="flex w-full flex-col gap-3 py-1 max-xl:flex-1 max-xl:justify-between">
|
||||
<div
|
||||
ref={textAreaRef}
|
||||
className="grid w-full grid-cols-[minmax(0,680px)_minmax(240px,600px)] gap-x-1 max-xl:grid-cols-1"
|
||||
@ -159,11 +159,11 @@ export function BannerItem({
|
||||
</div>
|
||||
|
||||
<div
|
||||
className="grid w-full grid-cols-[minmax(0,680px)_minmax(240px,600px)] gap-x-1 max-xl:grid-cols-1"
|
||||
className="flex w-full items-center justify-between gap-4 pr-4 xl:grid xl:grid-cols-[minmax(0,680px)_minmax(240px,600px)] xl:gap-x-1 xl:pr-0"
|
||||
style={responsiveStyle}
|
||||
>
|
||||
<div
|
||||
className="flex min-w-0 items-center gap-[6px] py-1"
|
||||
className="flex min-w-0 items-center gap-[6px] py-1 max-xl:flex-1"
|
||||
style={viewMoreStyle}
|
||||
>
|
||||
<div className="flex h-4 w-4 items-center justify-center rounded-full bg-text-accent p-[2px]">
|
||||
@ -174,7 +174,7 @@ export function BannerItem({
|
||||
</span>
|
||||
</div>
|
||||
|
||||
<div className="flex min-w-0 items-center gap-2 py-1 pr-10">
|
||||
<div className="flex min-w-0 shrink-0 items-center gap-2 py-1 xl:pr-10">
|
||||
{/* Slide navigation indicators */}
|
||||
<div className="flex items-center gap-1">
|
||||
{indicatorItems.map(({ id, index }) => (
|
||||
@ -196,13 +196,13 @@ export function BannerItem({
|
||||
</div>
|
||||
</div>
|
||||
|
||||
<div className="flex w-60 max-w-60 shrink-0 flex-col items-end self-stretch p-2 max-lg:hidden">
|
||||
<div className="flex w-60 max-w-60 shrink-0 flex-col items-end self-stretch p-2 max-xl:w-[360px] max-xl:max-w-[360px] max-lg:hidden">
|
||||
<img
|
||||
src={imgSrc}
|
||||
alt={title}
|
||||
width={224}
|
||||
height={168}
|
||||
className="h-[168px] w-56 shrink-0 rounded-xl object-cover"
|
||||
className="h-full w-full shrink-0 rounded-xl object-cover"
|
||||
/>
|
||||
</div>
|
||||
</div>
|
||||
|
||||
@ -73,46 +73,4 @@ describe('WorkspaceRoleCheckboxList', () => {
|
||||
expect(screen.getByRole('radio', { name: /First role/i })).toBeInTheDocument()
|
||||
expect(screen.queryByRole('checkbox', { name: /First role/i })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should show legacy role descriptions when only one role is allowed', () => {
|
||||
vi.mocked(useWorkspaceRoleList).mockReturnValue({
|
||||
data: {
|
||||
pages: [{
|
||||
data: [
|
||||
createRole({ id: 'admin', name: 'admin' }),
|
||||
createRole({ id: 'editor', name: 'editor' }),
|
||||
createRole({ id: 'normal', name: 'normal' }),
|
||||
createRole({ id: 'dataset_operator', name: 'dataset_operator' }),
|
||||
],
|
||||
pagination: {
|
||||
total_count: 4,
|
||||
per_page: 20,
|
||||
current_page: 1,
|
||||
total_pages: 1,
|
||||
},
|
||||
}],
|
||||
pageParams: [1],
|
||||
},
|
||||
isLoading: false,
|
||||
error: null,
|
||||
hasNextPage: false,
|
||||
isFetchingNextPage: false,
|
||||
fetchNextPage: vi.fn(),
|
||||
} as unknown as ReturnType<typeof useWorkspaceRoleList>)
|
||||
|
||||
render(
|
||||
<WorkspaceRoleCheckboxList
|
||||
selectedRoleIds={['editor']}
|
||||
selectedRoles={[createRole({ id: 'editor', name: 'editor' })]}
|
||||
allowMultipleRoles={false}
|
||||
onSelectedRolesChange={vi.fn()}
|
||||
/>,
|
||||
)
|
||||
|
||||
expect(screen.getByText('common.members.adminTip')).toBeInTheDocument()
|
||||
expect(screen.getByText('common.members.editorTip')).toBeInTheDocument()
|
||||
expect(screen.getByText('common.members.normalTip')).toBeInTheDocument()
|
||||
expect(screen.getByText('common.members.datasetOperatorTip')).toBeInTheDocument()
|
||||
expect(screen.queryByText('permission.role.noDescription')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
@ -224,18 +224,6 @@ describe('MembersPage', () => {
|
||||
expect(screen.getByTestId('member-row-1').children[2])!.toHaveClass('min-w-0', 'grow')
|
||||
})
|
||||
|
||||
it('should render plural roles column header when RBAC is enabled', () => {
|
||||
renderWithSystemFeatures(<MembersPage />, {
|
||||
systemFeatures: {
|
||||
is_email_setup: true,
|
||||
rbac_enabled: true,
|
||||
},
|
||||
})
|
||||
|
||||
expect(screen.getByText('common.members.roles', { selector: '.system-xs-medium-uppercase' }))!.toHaveClass('min-w-0', 'grow')
|
||||
expect(screen.queryByText('common.members.role', { selector: '.system-xs-medium-uppercase' })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should open and close invite modal', async () => {
|
||||
const user = userEvent.setup()
|
||||
|
||||
|
||||
@ -2,7 +2,7 @@ import type { Role } from '@/models/access-control'
|
||||
import type { Member } from '@/models/common'
|
||||
import { toast } from '@langgenius/dify-ui/toast'
|
||||
import { QueryClient } from '@tanstack/react-query'
|
||||
import { screen, waitFor, within } from '@testing-library/react'
|
||||
import { screen } from '@testing-library/react'
|
||||
import userEvent from '@testing-library/user-event'
|
||||
import { renderWithSystemFeatures } from '@/__tests__/utils/mock-system-features'
|
||||
import { useUpdateRolesOfMember } from '@/service/access-control/use-member-roles'
|
||||
@ -97,32 +97,6 @@ describe('MemberMenu', () => {
|
||||
} as unknown as ReturnType<typeof useWorkspaceRoleList>)
|
||||
})
|
||||
|
||||
it('should show edit role copy when multiple roles are disabled', async () => {
|
||||
const user = userEvent.setup()
|
||||
|
||||
renderWithSystemFeatures(
|
||||
<MemberMenu
|
||||
member={member}
|
||||
isCurrentUser={false}
|
||||
allowMultipleRoles={false}
|
||||
/>,
|
||||
{
|
||||
systemFeatures: {
|
||||
rbac_enabled: false,
|
||||
},
|
||||
},
|
||||
)
|
||||
|
||||
await user.click(screen.getByRole('button', { name: /members\.memberActions/i }))
|
||||
|
||||
expect(screen.getByRole('menuitem', { name: /common\.members\.editRole/i })).toBeInTheDocument()
|
||||
expect(screen.queryByRole('menuitem', { name: /common\.members\.assignRoles/i })).not.toBeInTheDocument()
|
||||
|
||||
await user.click(screen.getByRole('menuitem', { name: /common\.members\.editRole/i }))
|
||||
|
||||
expect(screen.getByRole('dialog', { name: /common\.members\.editRole/i })).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should submit only one selected role from the assign modal when RBAC is disabled', async () => {
|
||||
const user = userEvent.setup()
|
||||
|
||||
@ -140,7 +114,7 @@ describe('MemberMenu', () => {
|
||||
)
|
||||
|
||||
await user.click(screen.getByRole('button', { name: /members\.memberActions/i }))
|
||||
await user.click(screen.getByRole('menuitem', { name: /members\.editRole/i }))
|
||||
await user.click(screen.getByRole('menuitem', { name: /members\.assignRoles/i }))
|
||||
await user.click(screen.getByRole('radio', { name: /Second role/i }))
|
||||
await user.click(screen.getByRole('button', { name: /common\.operation\.confirm/i }))
|
||||
|
||||
@ -150,7 +124,7 @@ describe('MemberMenu', () => {
|
||||
}, expect.any(Object))
|
||||
})
|
||||
|
||||
it('should require confirmation before removing a member', async () => {
|
||||
it('should refresh and invalidate members after removing a member', async () => {
|
||||
const user = userEvent.setup()
|
||||
const queryClient = createQueryClient()
|
||||
const membersQueryKey = [...commonQueryKeys.members, 'en-US']
|
||||
@ -169,18 +143,8 @@ describe('MemberMenu', () => {
|
||||
await user.click(screen.getByRole('button', { name: /members\.memberActions/i }))
|
||||
await user.click(screen.getByRole('menuitem', { name: /members\.removeFromTeam/i }))
|
||||
|
||||
const dialog = screen.getByRole('alertdialog', {
|
||||
name: /common\.members\.removeFromTeamConfirmTitle:\{"memberName":"Member User"\}/i,
|
||||
})
|
||||
expect(dialog).toHaveTextContent('common.members.removeFromTeamConfirmDescription')
|
||||
expect(deleteMemberOrCancelInvitation).not.toHaveBeenCalled()
|
||||
|
||||
await user.click(within(dialog).getByRole('button', { name: /common\.operation\.confirm/i }))
|
||||
|
||||
await waitFor(() => {
|
||||
expect(deleteMemberOrCancelInvitation).toHaveBeenCalledWith({
|
||||
url: '/workspaces/current/members/member-1',
|
||||
})
|
||||
expect(deleteMemberOrCancelInvitation).toHaveBeenCalledWith({
|
||||
url: '/workspaces/current/members/member-1',
|
||||
})
|
||||
expect(queryClient.getQueryState(membersQueryKey)?.isInvalidated).toBe(true)
|
||||
expect(toast.success).toHaveBeenCalledWith('common.actionMsg.modifiedSuccessfully')
|
||||
|
||||
@ -49,33 +49,6 @@ describe('AssignRolesModal', () => {
|
||||
})
|
||||
|
||||
describe('Role selection', () => {
|
||||
it('should hide selected count when multiple roles are disabled', () => {
|
||||
render(
|
||||
<AssignRolesModal
|
||||
selectedRoles={[roles[0]!]}
|
||||
allowMultipleRoles={false}
|
||||
onClose={vi.fn()}
|
||||
onSubmit={vi.fn()}
|
||||
/>,
|
||||
)
|
||||
|
||||
expect(screen.queryByText(/common\.members\.assignRolesModal\.selectedCount/i)).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should show single-role description when multiple roles are disabled', () => {
|
||||
render(
|
||||
<AssignRolesModal
|
||||
selectedRoles={[roles[0]!]}
|
||||
allowMultipleRoles={false}
|
||||
onClose={vi.fn()}
|
||||
onSubmit={vi.fn()}
|
||||
/>,
|
||||
)
|
||||
|
||||
expect(screen.getByText(/common\.members\.assignRolesModal\.singleDescription/i)).toBeInTheDocument()
|
||||
expect(screen.queryByText(/common\.members\.assignRolesModal\.description/i)).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should disable confirm when the last selected role is unchecked', async () => {
|
||||
const user = userEvent.setup()
|
||||
|
||||
|
||||
@ -32,19 +32,6 @@ const AssignRolesModalBody = ({
|
||||
const [selected, setSelected] = useState(selectedRoles)
|
||||
const selectedRoleIds = selected.map(role => role.id)
|
||||
const isConfirmDisabled = selected.length === 0
|
||||
const title = allowMultipleRoles
|
||||
? t('members.assignRolesModal.title', { ns: 'common', defaultValue: 'Assign Roles' })
|
||||
: t('members.editRole', { ns: 'common', defaultValue: 'Edit Role' })
|
||||
const description = allowMultipleRoles
|
||||
? t('members.assignRolesModal.description', {
|
||||
ns: 'common',
|
||||
defaultValue:
|
||||
'Select roles to assign to this member. All permissions from selected roles will be combined.',
|
||||
})
|
||||
: t('members.assignRolesModal.singleDescription', {
|
||||
ns: 'common',
|
||||
defaultValue: 'Select one role to assign to this member.',
|
||||
})
|
||||
|
||||
const handleConfirm = () => {
|
||||
if (isConfirmDisabled)
|
||||
@ -63,10 +50,14 @@ const AssignRolesModalBody = ({
|
||||
<DialogCloseButton />
|
||||
<div className="pr-8">
|
||||
<DialogTitle className="system-xl-semibold text-text-primary">
|
||||
{title}
|
||||
{t('members.assignRolesModal.title', { ns: 'common', defaultValue: 'Assign Roles' })}
|
||||
</DialogTitle>
|
||||
<DialogDescription className="mt-1 system-sm-regular text-text-tertiary">
|
||||
{description}
|
||||
{t('members.assignRolesModal.description', {
|
||||
ns: 'common',
|
||||
defaultValue:
|
||||
'Select roles to assign to this member. All permissions from selected roles will be combined.',
|
||||
})}
|
||||
</DialogDescription>
|
||||
</div>
|
||||
</div>
|
||||
@ -78,16 +69,14 @@ const AssignRolesModalBody = ({
|
||||
onSelectedRolesChange={setSelected}
|
||||
/>
|
||||
|
||||
<div className="flex shrink-0 items-center gap-3 border-t border-divider-subtle px-6 py-4">
|
||||
{allowMultipleRoles && (
|
||||
<div className="system-xs-regular text-text-tertiary">
|
||||
{t('members.assignRolesModal.selectedCount', {
|
||||
ns: 'common',
|
||||
count: selected.length,
|
||||
})}
|
||||
</div>
|
||||
)}
|
||||
<div className="ml-auto flex items-center gap-2">
|
||||
<div className="flex shrink-0 items-center justify-between gap-3 border-t border-divider-subtle px-6 py-4">
|
||||
<div className="system-xs-regular text-text-tertiary">
|
||||
{t('members.assignRolesModal.selectedCount', {
|
||||
ns: 'common',
|
||||
count: selected.length,
|
||||
})}
|
||||
</div>
|
||||
<div className="flex items-center gap-2">
|
||||
<Button variant="secondary" onClick={onClose}>
|
||||
{t('operation.cancel', { ns: 'common' })}
|
||||
</Button>
|
||||
|
||||
@ -45,9 +45,6 @@ const MembersPage = () => {
|
||||
const [detailsMember, setDetailsMember] = useState<Member | null>(null)
|
||||
|
||||
const canManageMembers = hasPermission(workspacePermissionKeys, 'workspace.member.manage')
|
||||
const roleColumnLabel = systemFeatures.rbac_enabled
|
||||
? t('members.roles', { ns: 'common' })
|
||||
: t('members.role', { ns: 'common' })
|
||||
|
||||
const handleOpenDetails = useCallback((member: Member) => {
|
||||
setDetailsMember(member)
|
||||
@ -154,7 +151,7 @@ const MembersPage = () => {
|
||||
<div className="flex min-w-120 items-center border-b border-divider-regular py-1.75">
|
||||
<div className="w-65 shrink-0 px-3 system-xs-medium-uppercase text-text-tertiary">{t('members.name', { ns: 'common' })}</div>
|
||||
<div className="w-30 shrink-0 system-xs-medium-uppercase text-text-tertiary">{t('members.lastActive', { ns: 'common' })}</div>
|
||||
<div className="min-w-0 grow px-3 system-xs-medium-uppercase text-text-tertiary">{roleColumnLabel}</div>
|
||||
<div className="min-w-0 grow px-3 system-xs-medium-uppercase text-text-tertiary">{t('members.role', { ns: 'common' })}</div>
|
||||
</div>
|
||||
<div className="relative min-w-120">
|
||||
{accounts.map(account => (
|
||||
|
||||
@ -114,39 +114,6 @@ describe('RoleSelector', () => {
|
||||
expect(getRoleOption('Editor')).toHaveAttribute('aria-checked', 'true')
|
||||
})
|
||||
|
||||
it('should show legacy descriptions for built-in roles without descriptions', async () => {
|
||||
const user = userEvent.setup()
|
||||
|
||||
mockUseWorkspaceRoleList({
|
||||
pages: [{
|
||||
data: [
|
||||
createRole({ id: 'admin', name: 'admin', description: '' }),
|
||||
createRole({ id: 'editor', name: 'editor', description: '' }),
|
||||
createRole({ id: 'normal', name: 'normal', description: '' }),
|
||||
createRole({ id: 'dataset_operator', name: 'dataset_operator', description: '' }),
|
||||
],
|
||||
pagination: {
|
||||
total_count: 4,
|
||||
per_page: 20,
|
||||
current_page: 1,
|
||||
total_pages: 1,
|
||||
},
|
||||
}],
|
||||
})
|
||||
|
||||
render(<RoleSelectorWrapper initialRole="" />)
|
||||
|
||||
await user.click(getTrigger())
|
||||
|
||||
const roleMenu = getRoleMenu()
|
||||
|
||||
expect(within(roleMenu).getByText(/common\.members\.adminTip/i)).toBeInTheDocument()
|
||||
expect(within(roleMenu).getByText(/common\.members\.editorTip/i)).toBeInTheDocument()
|
||||
expect(within(roleMenu).getByText(/common\.members\.normalTip/i)).toBeInTheDocument()
|
||||
expect(within(roleMenu).getByText(/common\.members\.datasetOperatorTip/i)).toBeInTheDocument()
|
||||
expect(within(roleMenu).queryByText(/permission\.role\.noDescription/i)).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should update selected role name after user chooses a role', async () => {
|
||||
const user = userEvent.setup()
|
||||
|
||||
|
||||
@ -1,4 +1,3 @@
|
||||
import type { Role } from '@/models/access-control'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import {
|
||||
DropdownMenu,
|
||||
@ -20,28 +19,6 @@ type RoleSelectorProps = {
|
||||
}
|
||||
|
||||
const PAGE_SIZE = 20
|
||||
const LEGACY_ROLE_DESCRIPTION_KEY_MAP = {
|
||||
admin: 'members.adminTip',
|
||||
editor: 'members.editorTip',
|
||||
normal: 'members.normalTip',
|
||||
dataset_operator: 'members.datasetOperatorTip',
|
||||
} as const
|
||||
|
||||
type LegacyRoleKey = keyof typeof LEGACY_ROLE_DESCRIPTION_KEY_MAP
|
||||
|
||||
const normalizeLegacyRoleKey = (value: string) => value.trim().toLowerCase()
|
||||
|
||||
const isLegacyRoleKey = (value: string): value is LegacyRoleKey =>
|
||||
Object.prototype.hasOwnProperty.call(LEGACY_ROLE_DESCRIPTION_KEY_MAP, value)
|
||||
|
||||
const getLegacyRoleDescriptionKey = (role: Role) => {
|
||||
const candidateKeys = [
|
||||
normalizeLegacyRoleKey(role.name),
|
||||
normalizeLegacyRoleKey(role.id),
|
||||
]
|
||||
|
||||
return candidateKeys.find(isLegacyRoleKey)
|
||||
}
|
||||
|
||||
const RoleSelector = ({ value, onChange }: RoleSelectorProps) => {
|
||||
const { t } = useTranslation()
|
||||
@ -111,18 +88,6 @@ const RoleSelector = ({ value, onChange }: RoleSelectorProps) => {
|
||||
setOpen(false)
|
||||
}
|
||||
|
||||
const getRoleDescription = (role: Role) => {
|
||||
if (role.description)
|
||||
return role.description
|
||||
|
||||
const legacyRoleDescriptionKey = getLegacyRoleDescriptionKey(role)
|
||||
|
||||
if (legacyRoleDescriptionKey)
|
||||
return t(LEGACY_ROLE_DESCRIPTION_KEY_MAP[legacyRoleDescriptionKey], { ns: 'common' })
|
||||
|
||||
return t('role.noDescription', { ns: 'permission' })
|
||||
}
|
||||
|
||||
return (
|
||||
<DropdownMenu
|
||||
open={open}
|
||||
@ -176,7 +141,7 @@ const RoleSelector = ({ value, onChange }: RoleSelectorProps) => {
|
||||
>
|
||||
<div className="relative min-w-0 pl-5">
|
||||
<div className="truncate text-sm leading-5 text-text-secondary">{role.name}</div>
|
||||
<div className="line-clamp-2 text-xs leading-4.5 text-text-tertiary">{getRoleDescription(role)}</div>
|
||||
<div className="line-clamp-2 text-xs leading-4.5 text-text-tertiary">{role.description || t('role.noDescription', { ns: 'permission' })}</div>
|
||||
{value === role.id && (
|
||||
<div
|
||||
aria-hidden="true"
|
||||
|
||||
@ -76,39 +76,6 @@ describe('MemberDetailsModal', () => {
|
||||
})
|
||||
|
||||
describe('Rendering', () => {
|
||||
it('should render edit role action when multiple roles are disabled', () => {
|
||||
render(
|
||||
<MemberDetailsModal
|
||||
member={member}
|
||||
canAssignRoles
|
||||
allowMultipleRoles={false}
|
||||
onClose={vi.fn()}
|
||||
onAssignSubmit={vi.fn()}
|
||||
/>,
|
||||
)
|
||||
|
||||
const editButton = screen.getByRole('button', { name: /common\.operation\.edit/i })
|
||||
|
||||
expect(editButton).toBeInTheDocument()
|
||||
expect(screen.queryByRole('button', { name: /members\.memberDetails\.assign/i })).not.toBeInTheDocument()
|
||||
expect(editButton.querySelector('.i-ri-edit-line')).toBeInTheDocument()
|
||||
expect(editButton.querySelector('.i-ri-add-line')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should render singular assigned role label when there is one role', () => {
|
||||
render(
|
||||
<MemberDetailsModal
|
||||
member={member}
|
||||
canAssignRoles
|
||||
onClose={vi.fn()}
|
||||
onAssignSubmit={vi.fn()}
|
||||
/>,
|
||||
)
|
||||
|
||||
expect(screen.getByText(/common\.members\.memberDetails\.assignedRole:/i)).toBeInTheDocument()
|
||||
expect(screen.queryByText(/common\.members\.memberDetails\.assignedRoles/i)).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should render role loading state without assigned role chips or count', () => {
|
||||
vi.mocked(useRolesOfMember).mockReturnValue({
|
||||
data: undefined,
|
||||
@ -132,26 +99,6 @@ describe('MemberDetailsModal', () => {
|
||||
})
|
||||
|
||||
describe('Role actions', () => {
|
||||
it('should keep role chips readonly when multiple roles are disabled', async () => {
|
||||
const user = userEvent.setup()
|
||||
|
||||
render(
|
||||
<MemberDetailsModal
|
||||
member={member}
|
||||
canAssignRoles
|
||||
allowMultipleRoles={false}
|
||||
onClose={vi.fn()}
|
||||
onAssignSubmit={vi.fn()}
|
||||
/>,
|
||||
)
|
||||
|
||||
expect(screen.queryByRole('button', { name: /Custom role/i })).not.toBeInTheDocument()
|
||||
|
||||
await user.click(screen.getByText('Custom role'))
|
||||
|
||||
expect(screen.queryByRole('menuitem', { name: /common\.operation\.remove/i })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should not show role removal controls when role assignment is not allowed', () => {
|
||||
render(
|
||||
<MemberDetailsModal
|
||||
@ -243,7 +190,7 @@ describe('MemberDetailsModal', () => {
|
||||
/>,
|
||||
)
|
||||
|
||||
await user.click(screen.getByRole('button', { name: /common\.operation\.edit/i }))
|
||||
await user.click(screen.getByRole('button', { name: /members\.memberDetails\.assign/i }))
|
||||
await user.click(screen.getByRole('radio', { name: /Second role/i }))
|
||||
await user.click(screen.getByRole('button', { name: /common\.operation\.confirm/i }))
|
||||
await user.click(screen.getByRole('button', { name: /common\.operation\.save/i }))
|
||||
|
||||
@ -45,25 +45,6 @@ const MemberDetailsModal = ({
|
||||
const roles = useMemo(() => rolesOfMember?.roles ?? [], [rolesOfMember?.roles])
|
||||
const selectedRoles = pendingRoles ?? roles
|
||||
const selectedRoleIds = useMemo(() => selectedRoles.map(role => role.id), [selectedRoles])
|
||||
const canRemoveRoles = canAssignRoles && allowMultipleRoles
|
||||
const assignedRolesLabel = selectedRoleIds.length === 1
|
||||
? t('members.memberDetails.assignedRole', {
|
||||
ns: 'common',
|
||||
defaultValue: 'Assigned Role',
|
||||
})
|
||||
: t('members.memberDetails.assignedRoles', {
|
||||
ns: 'common',
|
||||
defaultValue: 'Assigned Roles',
|
||||
})
|
||||
const assignActionIconClassName = allowMultipleRoles
|
||||
? 'mr-0.5 i-ri-add-line h-3.5 w-3.5'
|
||||
: 'mr-0.5 i-ri-edit-line h-3.5 w-3.5'
|
||||
const assignActionLabel = allowMultipleRoles
|
||||
? t('members.memberDetails.assign', {
|
||||
ns: 'common',
|
||||
defaultValue: 'Assign',
|
||||
})
|
||||
: t('operation.edit', { ns: 'common' })
|
||||
|
||||
const builtinRoles = useMemo(() => selectedRoles.filter(role => role.is_builtin), [selectedRoles])
|
||||
const customRoles = useMemo(() => selectedRoles.filter(role => !role.is_builtin), [selectedRoles])
|
||||
@ -129,7 +110,10 @@ const MemberDetailsModal = ({
|
||||
<div className="flex items-center justify-between">
|
||||
<div className="flex items-center gap-1.5 system-sm-semibold text-text-secondary">
|
||||
<span>
|
||||
{assignedRolesLabel}
|
||||
{t('members.memberDetails.assignedRoles', {
|
||||
ns: 'common',
|
||||
defaultValue: 'Assigned Roles',
|
||||
})}
|
||||
</span>
|
||||
{!isLoadingRolesOfMember && (
|
||||
<span className="system-xs-medium text-text-tertiary">
|
||||
@ -145,9 +129,12 @@ const MemberDetailsModal = ({
|
||||
>
|
||||
<span
|
||||
aria-hidden
|
||||
className={assignActionIconClassName}
|
||||
className="mr-0.5 i-ri-add-line h-3.5 w-3.5"
|
||||
/>
|
||||
{assignActionLabel}
|
||||
{t('members.memberDetails.assign', {
|
||||
ns: 'common',
|
||||
defaultValue: 'Assign',
|
||||
})}
|
||||
</Button>
|
||||
)}
|
||||
</div>
|
||||
@ -175,7 +162,7 @@ const MemberDetailsModal = ({
|
||||
label={role.name}
|
||||
isOwner={role.role_tag === 'owner'}
|
||||
permissionKeys={role.permission_keys}
|
||||
onRemove={canRemoveRoles ? handleRemove : undefined}
|
||||
onRemove={canAssignRoles ? handleRemove : undefined}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
@ -196,7 +183,7 @@ const MemberDetailsModal = ({
|
||||
label={role.name}
|
||||
isOwner={role.role_tag === 'owner'}
|
||||
permissionKeys={role.permission_keys}
|
||||
onRemove={canRemoveRoles ? handleRemove : undefined}
|
||||
onRemove={canAssignRoles ? handleRemove : undefined}
|
||||
/>
|
||||
))}
|
||||
</div>
|
||||
|
||||
@ -1,15 +1,6 @@
|
||||
'use client'
|
||||
import type { Role } from '@/models/access-control'
|
||||
import type { Member } from '@/models/common'
|
||||
import {
|
||||
AlertDialog,
|
||||
AlertDialogActions,
|
||||
AlertDialogCancelButton,
|
||||
AlertDialogConfirmButton,
|
||||
AlertDialogContent,
|
||||
AlertDialogDescription,
|
||||
AlertDialogTitle,
|
||||
} from '@langgenius/dify-ui/alert-dialog'
|
||||
import { cn } from '@langgenius/dify-ui/cn'
|
||||
import {
|
||||
DropdownMenu,
|
||||
@ -47,8 +38,6 @@ const MemberMenu = ({
|
||||
const queryClient = useQueryClient()
|
||||
const [open, setOpen] = useState(false)
|
||||
const [assignModalOpen, setAssignModalOpen] = useState(false)
|
||||
const [removeConfirmOpen, setRemoveConfirmOpen] = useState(false)
|
||||
const [removing, setRemoving] = useState(false)
|
||||
|
||||
const isOwner = member.role === 'owner'
|
||||
const canAssignRoles = !isOwner && !isCurrentUser
|
||||
@ -56,10 +45,6 @@ const MemberMenu = ({
|
||||
const showTransferOwnership = isOwner && canTransferOwnership
|
||||
|
||||
const selectedRoles = member.roles || []
|
||||
const memberName = member.name || member.email
|
||||
const assignRolesLabel = allowMultipleRoles
|
||||
? t('members.assignRoles', { ns: 'common', defaultValue: 'Assign Roles' })
|
||||
: t('members.editRole', { ns: 'common', defaultValue: 'Edit Role' })
|
||||
|
||||
const handleOpenAssignRoles = useCallback(() => {
|
||||
setOpen(false)
|
||||
@ -83,24 +68,15 @@ const MemberMenu = ({
|
||||
})
|
||||
}, [allowMultipleRoles, member.id, t, updateRolesOfMember])
|
||||
|
||||
const handleOpenRemoveConfirm = useCallback(() => {
|
||||
setOpen(false)
|
||||
setRemoveConfirmOpen(true)
|
||||
}, [])
|
||||
|
||||
const handleRemove = useCallback(async () => {
|
||||
setRemoving(true)
|
||||
setOpen(false)
|
||||
try {
|
||||
await deleteMemberOrCancelInvitation({ url: `/workspaces/current/members/${member.id}` })
|
||||
void queryClient.invalidateQueries({ queryKey: commonQueryKeys.members })
|
||||
toast.success(t('actionMsg.modifiedSuccessfully', { ns: 'common' }))
|
||||
setRemoveConfirmOpen(false)
|
||||
}
|
||||
catch {
|
||||
}
|
||||
finally {
|
||||
setRemoving(false)
|
||||
}
|
||||
}, [member.id, queryClient, t])
|
||||
|
||||
const handleTransferOwnership = useCallback(() => {
|
||||
@ -144,7 +120,7 @@ const MemberMenu = ({
|
||||
className="system-sm-medium text-text-secondary"
|
||||
onClick={handleOpenAssignRoles}
|
||||
>
|
||||
{assignRolesLabel}
|
||||
{t('members.assignRoles', { ns: 'common', defaultValue: 'Assign Roles' })}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
{showTransferOwnership && (
|
||||
@ -162,34 +138,13 @@ const MemberMenu = ({
|
||||
<DropdownMenuItem
|
||||
variant="destructive"
|
||||
className="system-sm-medium"
|
||||
onClick={handleOpenRemoveConfirm}
|
||||
onClick={handleRemove}
|
||||
>
|
||||
{t('members.removeFromTeam', { ns: 'common' })}
|
||||
</DropdownMenuItem>
|
||||
)}
|
||||
</DropdownMenuContent>
|
||||
</DropdownMenu>
|
||||
<AlertDialog open={removeConfirmOpen} onOpenChange={open => !open && setRemoveConfirmOpen(false)}>
|
||||
<AlertDialogContent backdropProps={{ forceRender: true }}>
|
||||
<div className="flex flex-col gap-2 px-6 pt-6 pb-4">
|
||||
<AlertDialogTitle className="w-full truncate title-2xl-semi-bold text-text-primary">
|
||||
{t('members.removeFromTeamConfirmTitle', { ns: 'common', memberName })}
|
||||
</AlertDialogTitle>
|
||||
<AlertDialogDescription className="w-full system-md-regular wrap-break-word whitespace-pre-wrap text-text-tertiary">
|
||||
{t('members.removeFromTeamConfirmDescription', { ns: 'common' })}
|
||||
</AlertDialogDescription>
|
||||
</div>
|
||||
<AlertDialogActions>
|
||||
<AlertDialogCancelButton>{t('operation.cancel', { ns: 'common' })}</AlertDialogCancelButton>
|
||||
<AlertDialogConfirmButton
|
||||
disabled={removing}
|
||||
onClick={handleRemove}
|
||||
>
|
||||
{t('operation.confirm', { ns: 'common' })}
|
||||
</AlertDialogConfirmButton>
|
||||
</AlertDialogActions>
|
||||
</AlertDialogContent>
|
||||
</AlertDialog>
|
||||
{assignModalOpen && (
|
||||
<AssignRolesModal
|
||||
selectedRoles={selectedRoles}
|
||||
|
||||
@ -24,14 +24,6 @@ type WorkspaceRoleCheckboxListProps = {
|
||||
|
||||
const PAGE_SIZE = 20
|
||||
const EMPTY_DISABLED_ROLE_IDS: string[] = []
|
||||
const LEGACY_ROLE_DESCRIPTION_KEY_MAP = {
|
||||
admin: 'members.adminTip',
|
||||
editor: 'members.editorTip',
|
||||
normal: 'members.normalTip',
|
||||
dataset_operator: 'members.datasetOperatorTip',
|
||||
} as const
|
||||
|
||||
type LegacyRoleKey = keyof typeof LEGACY_ROLE_DESCRIPTION_KEY_MAP
|
||||
|
||||
const createSelectedRolePlaceholder = (id: string): Role => ({
|
||||
id,
|
||||
@ -45,20 +37,6 @@ const createSelectedRolePlaceholder = (id: string): Role => ({
|
||||
role_tag: '',
|
||||
})
|
||||
|
||||
const normalizeLegacyRoleKey = (value: string) => value.trim().toLowerCase()
|
||||
|
||||
const isLegacyRoleKey = (value: string): value is LegacyRoleKey =>
|
||||
Object.prototype.hasOwnProperty.call(LEGACY_ROLE_DESCRIPTION_KEY_MAP, value)
|
||||
|
||||
const getLegacyRoleDescriptionKey = (role: Role) => {
|
||||
const candidateKeys = [
|
||||
normalizeLegacyRoleKey(role.name),
|
||||
normalizeLegacyRoleKey(role.id),
|
||||
]
|
||||
|
||||
return candidateKeys.find(isLegacyRoleKey)
|
||||
}
|
||||
|
||||
const WorkspaceRoleCheckboxList = ({
|
||||
selectedRoleIds,
|
||||
selectedRoles,
|
||||
@ -160,34 +138,16 @@ const WorkspaceRoleCheckboxList = ({
|
||||
onSelectedRolesChange([role])
|
||||
}, [disabledRoleIdSet, onSelectedRolesChange, roleById])
|
||||
|
||||
const getRoleDescription = (role: Role) => {
|
||||
if (role.description)
|
||||
return role.description
|
||||
|
||||
const legacyRoleDescriptionKey = allowMultipleRoles
|
||||
? undefined
|
||||
: getLegacyRoleDescriptionKey(role)
|
||||
|
||||
if (legacyRoleDescriptionKey)
|
||||
return t(LEGACY_ROLE_DESCRIPTION_KEY_MAP[legacyRoleDescriptionKey], { ns: 'common' })
|
||||
|
||||
return t('role.noDescription', { ns: 'permission' })
|
||||
}
|
||||
|
||||
const renderRoleText = (role: Role) => {
|
||||
const description = getRoleDescription(role)
|
||||
|
||||
return (
|
||||
<div className="min-w-0 flex-1">
|
||||
<div className="system-sm-semibold text-text-secondary">
|
||||
{role.name}
|
||||
</div>
|
||||
<div className="mt-0.5 system-xs-regular text-text-tertiary">
|
||||
{description}
|
||||
</div>
|
||||
const renderRoleText = (role: Role) => (
|
||||
<div className="min-w-0 flex-1">
|
||||
<div className="system-sm-semibold text-text-secondary">
|
||||
{role.name}
|
||||
</div>
|
||||
)
|
||||
}
|
||||
<div className="mt-0.5 system-xs-regular text-text-tertiary">
|
||||
{role.description || t('role.noDescription', { ns: 'permission' })}
|
||||
</div>
|
||||
</div>
|
||||
)
|
||||
|
||||
return (
|
||||
<>
|
||||
|
||||
@ -417,20 +417,22 @@ describe('IntegrationsPage', () => {
|
||||
expect(screen.getByTestId('data-source-page')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('renders the MCP route as read-only without mcp.manage', () => {
|
||||
it('does not render the MCP management route without mcp.manage', () => {
|
||||
mockAppContextState.workspacePermissionKeys = ['tool.manage']
|
||||
|
||||
renderIntegrationsPage(undefined, 'mcp')
|
||||
const { container } = renderIntegrationsPage(undefined, 'mcp')
|
||||
|
||||
expect(screen.getByTestId('tool-provider-list')).toHaveTextContent('mcp')
|
||||
expect(screen.queryByTestId('tool-provider-list')).not.toBeInTheDocument()
|
||||
expect(container.firstElementChild).toBeNull()
|
||||
})
|
||||
|
||||
it.each(['custom-tool', 'workflow-tool'] as const)('renders the %s route as read-only without tool.manage', (section) => {
|
||||
it.each(['custom-tool', 'workflow-tool'] as const)('does not render the %s management route without tool.manage', (section) => {
|
||||
mockAppContextState.workspacePermissionKeys = ['mcp.manage']
|
||||
|
||||
renderIntegrationsPage(undefined, section)
|
||||
const { container } = renderIntegrationsPage(undefined, section)
|
||||
|
||||
expect(screen.getByTestId('tool-provider-list')).toBeInTheDocument()
|
||||
expect(screen.queryByTestId('tool-provider-list')).not.toBeInTheDocument()
|
||||
expect(container.firstElementChild).toBeNull()
|
||||
})
|
||||
|
||||
it('remounts the tools section content when the route section changes', () => {
|
||||
@ -527,7 +529,7 @@ describe('IntegrationsPage', () => {
|
||||
expect(onSectionChange).toHaveBeenCalledTimes(2)
|
||||
})
|
||||
|
||||
it('keeps custom, workflow, and MCP tool entries visible without manage permissions', () => {
|
||||
it('hides custom and workflow tool entries without tool.manage while keeping MCP with mcp.manage', () => {
|
||||
mockAppContextState.workspacePermissionKeys = ['mcp.manage']
|
||||
renderIntegrationsPage(undefined, { section: 'provider', onSectionChange: vi.fn() })
|
||||
|
||||
@ -535,8 +537,8 @@ describe('IntegrationsPage', () => {
|
||||
|
||||
expect(screen.getByRole('button', { name: 'common.toolsPage.toolPlugin' })).toBeInTheDocument()
|
||||
expect(screen.getByRole('button', { name: 'MCP' })).toBeInTheDocument()
|
||||
expect(screen.getByRole('button', { name: 'workflow.common.workflowAsTool' })).toBeInTheDocument()
|
||||
expect(screen.getByRole('button', { name: 'common.settings.swaggerAPIAsTool' })).toBeInTheDocument()
|
||||
expect(screen.queryByRole('button', { name: 'workflow.common.workflowAsTool' })).not.toBeInTheDocument()
|
||||
expect(screen.queryByRole('button', { name: 'common.settings.swaggerAPIAsTool' })).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('opens tools to the tools plugin page when the parent tools nav is clicked', () => {
|
||||
|
||||
@ -365,18 +365,18 @@ describe('ProviderList', () => {
|
||||
expect(screen.getByText('MCP')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('keeps custom and workflow tabs visible without tool.manage', () => {
|
||||
it('hides custom and workflow tabs without tool.manage while keeping MCP with mcp.manage', () => {
|
||||
mockAppContextState.workspacePermissionKeys = ['mcp.manage']
|
||||
|
||||
renderProviderList()
|
||||
|
||||
expect(screen.getByText('tools.type.builtIn')).toBeInTheDocument()
|
||||
expect(screen.getByText('tools.type.custom')).toBeInTheDocument()
|
||||
expect(screen.getByText('tools.type.workflow')).toBeInTheDocument()
|
||||
expect(screen.queryByText('tools.type.custom')).not.toBeInTheDocument()
|
||||
expect(screen.queryByText('tools.type.workflow')).not.toBeInTheDocument()
|
||||
expect(screen.getByText('MCP')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('keeps MCP tab visible without mcp.manage', () => {
|
||||
it('hides MCP tab without mcp.manage', () => {
|
||||
mockAppContextState.workspacePermissionKeys = ['tool.manage']
|
||||
|
||||
renderProviderList()
|
||||
@ -384,19 +384,20 @@ describe('ProviderList', () => {
|
||||
expect(screen.getByText('tools.type.builtIn')).toBeInTheDocument()
|
||||
expect(screen.getByText('tools.type.custom')).toBeInTheDocument()
|
||||
expect(screen.getByText('tools.type.workflow')).toBeInTheDocument()
|
||||
expect(screen.getByText('MCP')).toBeInTheDocument()
|
||||
expect(screen.queryByText('MCP')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
it.each([
|
||||
['api', 'card-my-api'],
|
||||
['workflow', 'card-wf-tool'],
|
||||
] as const)('renders %s category read-only without tool.manage', (category, cardTestId) => {
|
||||
['api'],
|
||||
['workflow'],
|
||||
] as const)('does not query providers for %s category without tool.manage', (category) => {
|
||||
mockAppContextState.workspacePermissionKeys = []
|
||||
|
||||
renderProviderList({ category })
|
||||
|
||||
expect(mockUseAllToolProviders).toHaveBeenCalledWith(undefined)
|
||||
expect(screen.getByTestId(cardTestId)).toBeInTheDocument()
|
||||
expect(mockUseAllToolProviders).toHaveBeenCalledWith(false)
|
||||
expect(screen.queryByTestId('card-my-api')).not.toBeInTheDocument()
|
||||
expect(screen.queryByTestId('card-wf-tool')).not.toBeInTheDocument()
|
||||
expect(screen.queryByTestId('custom-create-card')).not.toBeInTheDocument()
|
||||
expect(screen.queryByTestId('toolbar-add-custom-tool')).not.toBeInTheDocument()
|
||||
})
|
||||
@ -799,14 +800,13 @@ describe('ProviderList', () => {
|
||||
expect(screen.getByTestId('mcp-list')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('renders MCP list read-only without mcp.manage', () => {
|
||||
it('does not render or query MCP management list without mcp.manage', () => {
|
||||
mockAppContextState.workspacePermissionKeys = ['tool.manage']
|
||||
|
||||
renderProviderList({ category: 'mcp' })
|
||||
|
||||
expect(mockUseAllToolProviders).toHaveBeenCalledWith(undefined)
|
||||
expect(screen.getByTestId('mcp-list')).toBeInTheDocument()
|
||||
expect(screen.getByTestId('mcp-list')).toHaveAttribute('data-show-create-card', 'false')
|
||||
expect(mockUseAllToolProviders).toHaveBeenCalledWith(false)
|
||||
expect(screen.queryByTestId('mcp-list')).not.toBeInTheDocument()
|
||||
expect(screen.queryByTestId('toolbar-add-mcp')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
|
||||
@ -9,6 +9,11 @@ export type IntegrationHeader = {
|
||||
title: string
|
||||
}
|
||||
|
||||
type IntegrationNavOptions = {
|
||||
canManageTools?: boolean
|
||||
canManageMCP?: boolean
|
||||
}
|
||||
|
||||
export const getPluginCategoryBySection = (section: IntegrationSection) => {
|
||||
if (section === 'builtin')
|
||||
return PluginCategoryEnum.tool
|
||||
@ -20,8 +25,12 @@ export const getPluginCategoryBySection = (section: IntegrationSection) => {
|
||||
return PluginCategoryEnum.extension
|
||||
}
|
||||
|
||||
export function useIntegrationNav(section: IntegrationSection) {
|
||||
export function useIntegrationNav(section: IntegrationSection, options: IntegrationNavOptions = {}) {
|
||||
const { t } = useTranslation()
|
||||
const {
|
||||
canManageMCP = true,
|
||||
canManageTools = true,
|
||||
} = options
|
||||
const providerItem = useMemo<IntegrationSidebarNavItemData>(() => ({
|
||||
section: 'provider',
|
||||
label: t('settings.provider', { ns: 'common' }),
|
||||
@ -50,32 +59,37 @@ export function useIntegrationNav(section: IntegrationSection) {
|
||||
},
|
||||
]
|
||||
|
||||
items.push(
|
||||
{
|
||||
if (canManageMCP) {
|
||||
items.push({
|
||||
section: 'mcp',
|
||||
label: 'MCP',
|
||||
icon: 'i-custom-vender-integrations-mcp',
|
||||
iconClassName: 'h-[14.5px] w-[13.5px]',
|
||||
className: 'pl-8',
|
||||
},
|
||||
{
|
||||
section: 'workflow-tool',
|
||||
label: t('common.workflowAsTool', { ns: 'workflow' }),
|
||||
icon: 'i-custom-vender-integrations-workflow-as-tool',
|
||||
iconClassName: 'size-4',
|
||||
className: 'pl-8',
|
||||
},
|
||||
{
|
||||
section: 'custom-tool',
|
||||
label: t('settings.swaggerAPIAsTool', { ns: 'common' }),
|
||||
icon: 'i-custom-vender-integrations-custom-tool',
|
||||
iconClassName: 'h-[14.5px] w-[12.5px]',
|
||||
className: 'pl-8',
|
||||
},
|
||||
)
|
||||
})
|
||||
}
|
||||
|
||||
if (canManageTools) {
|
||||
items.push(
|
||||
{
|
||||
section: 'workflow-tool',
|
||||
label: t('common.workflowAsTool', { ns: 'workflow' }),
|
||||
icon: 'i-custom-vender-integrations-workflow-as-tool',
|
||||
iconClassName: 'size-4',
|
||||
className: 'pl-8',
|
||||
},
|
||||
{
|
||||
section: 'custom-tool',
|
||||
label: t('settings.swaggerAPIAsTool', { ns: 'common' }),
|
||||
icon: 'i-custom-vender-integrations-custom-tool',
|
||||
iconClassName: 'h-[14.5px] w-[12.5px]',
|
||||
className: 'pl-8',
|
||||
},
|
||||
)
|
||||
}
|
||||
|
||||
return items
|
||||
}, [t])
|
||||
}, [canManageMCP, canManageTools, t])
|
||||
const secondaryItems = useMemo<IntegrationSidebarNavItemData[]>(() => [
|
||||
{
|
||||
section: 'trigger',
|
||||
|
||||
@ -13,6 +13,7 @@ import {
|
||||
buildMarketplaceUrlPathByIntegrationSection,
|
||||
toolCategoryBySection,
|
||||
} from '@/app/components/integrations/routes'
|
||||
import { useCanManageMCP, useCanManageTools } from '@/app/components/tools/hooks/use-tool-permissions'
|
||||
import { useDocLink } from '@/context/i18n'
|
||||
import Link from '@/next/link'
|
||||
import { useRouter } from '@/next/navigation'
|
||||
@ -104,6 +105,8 @@ export default function IntegrationsPage({
|
||||
const docLink = useDocLink()
|
||||
const router = useRouter()
|
||||
const section = useIntegrationSection(routeSection)
|
||||
const canManageMCP = useCanManageMCP()
|
||||
const canManageTools = useCanManageTools()
|
||||
const {
|
||||
canDebugger,
|
||||
canInstallPlugin,
|
||||
@ -127,7 +130,7 @@ export default function IntegrationsPage({
|
||||
providerItem,
|
||||
secondaryItems,
|
||||
toolItems,
|
||||
} = useIntegrationNav(section)
|
||||
} = useIntegrationNav(section, { canManageMCP, canManageTools })
|
||||
const isToolSection = Boolean(toolCategoryBySection[section])
|
||||
const [isToolsExpanded, setIsToolsExpanded] = useState(isToolSection)
|
||||
const useFillLayout = section === 'provider' || section === 'data-source' || section === 'custom-endpoint' || isToolSection || isPluginCategory
|
||||
@ -196,6 +199,11 @@ export default function IntegrationsPage({
|
||||
</>
|
||||
)
|
||||
|
||||
if (section === 'mcp' && !canManageMCP)
|
||||
return null
|
||||
if ((section === 'custom-tool' || section === 'workflow-tool') && !canManageTools)
|
||||
return null
|
||||
|
||||
return (
|
||||
<div className="flex h-full min-h-0 w-full flex-1 bg-components-panel-bg" style={sidebarWidthStyle}>
|
||||
<aside className={cn(
|
||||
|
||||
@ -104,11 +104,22 @@ const ProviderList = ({
|
||||
const toolListFrameClassName = cn(contentPaddingClassName, toolsUnifiedContentFrameClassName)
|
||||
const showToolsUpdateSetting = activeTab === 'builtin' && canSetPluginPreferences
|
||||
const showLabelFilter = activeTab === 'builtin'
|
||||
const isToolManageTab = activeTab === 'api' || activeTab === 'workflow'
|
||||
const isMCPManageTab = activeTab === 'mcp'
|
||||
const canReadActiveTab = isMCPManageTab ? canManageMCP : !isToolManageTab || canManageTools
|
||||
const options = [
|
||||
{ value: 'builtin', text: t('type.builtIn', { ns: 'tools' }) },
|
||||
{ value: 'api', text: t('type.custom', { ns: 'tools' }) },
|
||||
{ value: 'workflow', text: t('type.workflow', { ns: 'tools' }) },
|
||||
{ value: 'mcp', text: 'MCP' },
|
||||
...(canManageTools
|
||||
? [
|
||||
{ value: 'api', text: t('type.custom', { ns: 'tools' }) },
|
||||
{ value: 'workflow', text: t('type.workflow', { ns: 'tools' }) },
|
||||
]
|
||||
: []),
|
||||
...(canManageMCP
|
||||
? [
|
||||
{ value: 'mcp', text: 'MCP' },
|
||||
]
|
||||
: []),
|
||||
]
|
||||
const [tagFilterValue, setTagFilterValue] = useState<string[]>([])
|
||||
const handleTagsChange = (value: string[]) => {
|
||||
@ -125,10 +136,13 @@ const ProviderList = ({
|
||||
const handleCreatedMCPProviderHandled = useCallback(() => {
|
||||
setCreatedMCPProviderId(undefined)
|
||||
}, [])
|
||||
const { data: collectionList = [], isLoading: isCollectionListLoading, refetch } = useAllToolProviders()
|
||||
const { data: collectionList = [], isLoading: isCollectionListLoading, refetch } = useAllToolProviders(canReadActiveTab)
|
||||
const activeTabCollectionList = useMemo(() => {
|
||||
if (!canReadActiveTab)
|
||||
return []
|
||||
|
||||
return collectionList.filter(collection => collection.type === activeTab)
|
||||
}, [activeTab, collectionList])
|
||||
}, [activeTab, canReadActiveTab, collectionList])
|
||||
const hasCategoryCollections = activeTabCollectionList.length > 0
|
||||
const shouldShowCustomToolCreateCard = canManageTools && !(activeTab === 'api' && !isCollectionListLoading && hasCategoryCollections)
|
||||
const shouldShowMCPCreateCard = canManageMCP && !(activeTab === 'mcp' && hasCategoryCollections)
|
||||
@ -235,7 +249,7 @@ const ProviderList = ({
|
||||
tagFilterValue={tagFilterValue}
|
||||
/>
|
||||
)}
|
||||
{activeTab === 'mcp' && (
|
||||
{activeTab === 'mcp' && canManageMCP && (
|
||||
<MCPList
|
||||
searchText={keywords}
|
||||
contentInset={contentInset}
|
||||
|
||||
@ -110,16 +110,13 @@ describe('MCPList', () => {
|
||||
expect(screen.getByTestId('create-card')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should render providers read-only when user lacks mcp.manage', () => {
|
||||
it('should not render or query providers when user lacks mcp.manage', () => {
|
||||
mockWorkspacePermissionKeys = []
|
||||
mockProviders = [
|
||||
{ id: '1', name: 'Provider 1', type: 'mcp' },
|
||||
]
|
||||
|
||||
render(<MCPList searchText="" />)
|
||||
const { container } = render(<MCPList searchText="" />)
|
||||
|
||||
expect(mockUseAllToolProviders).toHaveBeenCalledWith(undefined)
|
||||
expect(screen.getByTestId('provider-card-1')).toBeInTheDocument()
|
||||
expect(container.firstElementChild).toBeNull()
|
||||
expect(mockUseAllToolProviders).toHaveBeenCalledWith(false)
|
||||
expect(screen.queryByTestId('create-card')).not.toBeInTheDocument()
|
||||
})
|
||||
|
||||
|
||||
@ -231,13 +231,13 @@ describe('MCPDetailContent', () => {
|
||||
expect(screen.getByTestId('operation-dropdown')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('should render read-only detail when user lacks mcp.manage', () => {
|
||||
it('should not render detail when user lacks mcp.manage', () => {
|
||||
mockWorkspacePermissionKeys = []
|
||||
|
||||
render(<MCPDetailContent {...defaultProps} />, { wrapper: createWrapper() })
|
||||
|
||||
expect(screen.queryByTestId('operation-dropdown')).not.toBeInTheDocument()
|
||||
expect(screen.getByText('Test MCP Server')).toBeInTheDocument()
|
||||
expect(screen.queryByText('Test MCP Server')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
@ -465,7 +465,7 @@ describe('MCPDetailContent', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('should disable authorize action when user lacks mcp.manage', () => {
|
||||
it('should not render authorize action when user lacks mcp.manage', () => {
|
||||
mockWorkspacePermissionKeys = []
|
||||
const detail = createMockDetail({ is_team_authorization: false })
|
||||
render(
|
||||
@ -473,7 +473,7 @@ describe('MCPDetailContent', () => {
|
||||
{ wrapper: createWrapper() },
|
||||
)
|
||||
|
||||
expect(screen.getByText('tools.mcp.authorize').closest('button')).toBeDisabled()
|
||||
expect(screen.queryByText('tools.mcp.authorize')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
@ -755,7 +755,7 @@ describe('MCPDetailContent', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('should not run OAuth authorization when user lacks mcp.manage', async () => {
|
||||
it('should not render OAuth authorization action when user lacks mcp.manage', async () => {
|
||||
mockWorkspacePermissionKeys = []
|
||||
mockAuthorizeMcp.mockResolvedValue({ authorization_url: 'https://oauth.example.com' })
|
||||
const detail = createMockDetail({ is_team_authorization: false })
|
||||
@ -765,9 +765,7 @@ describe('MCPDetailContent', () => {
|
||||
{ wrapper: createWrapper() },
|
||||
)
|
||||
|
||||
const authorizeButton = screen.getByText('tools.mcp.authorize').closest('button')!
|
||||
expect(authorizeButton).toBeDisabled()
|
||||
fireEvent.click(authorizeButton)
|
||||
expect(screen.queryByText('tools.mcp.authorize')).not.toBeInTheDocument()
|
||||
expect(mockAuthorizeMcp).not.toHaveBeenCalled()
|
||||
})
|
||||
})
|
||||
@ -799,7 +797,7 @@ describe('MCPDetailContent', () => {
|
||||
})
|
||||
})
|
||||
|
||||
it('should disable authorized button when user lacks mcp.manage', () => {
|
||||
it('should not render authorized button when user lacks mcp.manage', () => {
|
||||
mockWorkspacePermissionKeys = []
|
||||
const detail = createMockDetail({ is_team_authorization: true })
|
||||
render(
|
||||
@ -807,7 +805,7 @@ describe('MCPDetailContent', () => {
|
||||
{ wrapper: createWrapper() },
|
||||
)
|
||||
|
||||
expect(screen.getByText('tools.auth.authorized').closest('button')).toBeDisabled()
|
||||
expect(screen.queryByText('tools.auth.authorized')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@ -60,7 +60,7 @@ const MCPDetailContent: FC<Props> = ({
|
||||
const { t } = useTranslation()
|
||||
const canManageMCP = useCanManageMCP()
|
||||
|
||||
const { data, isFetching: isGettingTools } = useMCPTools(detail.is_team_authorization ? detail.id : '')
|
||||
const { data, isFetching: isGettingTools } = useMCPTools(canManageMCP && detail.is_team_authorization ? detail.id : '')
|
||||
const invalidateMCPTools = useInvalidateMCPTools()
|
||||
const invalidateAllMCPTools = useInvalidateAllMCPTools()
|
||||
const { mutateAsync: updateTools, isPending: isUpdating } = useUpdateMCPTools()
|
||||
@ -162,7 +162,7 @@ const MCPDetailContent: FC<Props> = ({
|
||||
handleAuthorize()
|
||||
}, [])
|
||||
|
||||
if (!detail)
|
||||
if (!detail || !canManageMCP)
|
||||
return null
|
||||
const identifierLabel = t('mcp.identifier', { ns: 'tools' })
|
||||
const serverUrlLabel = t('mcp.modal.serverUrl', { ns: 'tools' })
|
||||
@ -280,7 +280,6 @@ const MCPDetailContent: FC<Props> = ({
|
||||
<Button
|
||||
variant="primary"
|
||||
onClick={handleUpdateTools}
|
||||
disabled={!canManageMCP}
|
||||
>
|
||||
{t('mcp.getTools', { ns: 'tools' })}
|
||||
</Button>
|
||||
@ -294,7 +293,7 @@ const MCPDetailContent: FC<Props> = ({
|
||||
{toolList.length === 1 && <div className="system-sm-semibold-uppercase text-text-secondary">{t('mcp.onlyTool', { ns: 'tools' })}</div>}
|
||||
</div>
|
||||
<div>
|
||||
<Button size="small" onClick={showUpdateConfirm} disabled={!canManageMCP}>
|
||||
<Button size="small" onClick={showUpdateConfirm}>
|
||||
<span aria-hidden className="mr-1 i-ri-loop-left-line size-3.5" />
|
||||
{t('mcp.update', { ns: 'tools' })}
|
||||
</Button>
|
||||
@ -345,7 +344,7 @@ const MCPDetailContent: FC<Props> = ({
|
||||
</AlertDialogActions>
|
||||
</AlertDialogContent>
|
||||
</AlertDialog>
|
||||
<AlertDialog open={canManageMCP && isShowUpdateConfirm} onOpenChange={open => !open && hideUpdateConfirm()}>
|
||||
<AlertDialog open={isShowUpdateConfirm} onOpenChange={open => !open && hideUpdateConfirm()}>
|
||||
<AlertDialogContent>
|
||||
<div className="flex flex-col gap-2 px-6 pt-6 pb-4">
|
||||
<AlertDialogTitle className="w-full truncate title-2xl-semi-bold text-text-primary">
|
||||
|
||||
@ -29,7 +29,7 @@ const MCPList = ({
|
||||
showCreateCard = true,
|
||||
}: Props) => {
|
||||
const canManageMCP = useCanManageMCP()
|
||||
const { data: list = [] as ToolWithProvider[], isLoading, refetch } = useAllToolProviders()
|
||||
const { data: list = [] as ToolWithProvider[], isLoading, refetch } = useAllToolProviders(canManageMCP)
|
||||
const [isTriggerAuthorize, setIsTriggerAuthorize] = useState<boolean>(false)
|
||||
|
||||
const filteredList = useMemo(() => {
|
||||
@ -95,6 +95,9 @@ const MCPList = ({
|
||||
}
|
||||
const contentPaddingClassName = toolsContentInsetClassNames[contentInset]
|
||||
const contentFrameClassName = cn(contentPaddingClassName, toolsUnifiedContentFrameClassName)
|
||||
if (!canManageMCP)
|
||||
return null
|
||||
|
||||
return (
|
||||
<>
|
||||
<div
|
||||
@ -104,7 +107,7 @@ const MCPList = ({
|
||||
isLoading && 'h-[calc(100vh-136px)] overflow-hidden',
|
||||
)}
|
||||
>
|
||||
{!isLoading && canManageMCP && showCreateCard && <NewMCPCard handleCreate={handleCreate} />}
|
||||
{!isLoading && showCreateCard && <NewMCPCard handleCreate={handleCreate} />}
|
||||
{isLoading
|
||||
? <ToolCardSkeletonGrid variant="mcp" />
|
||||
: filteredList.map(provider => (
|
||||
|
||||
@ -338,11 +338,8 @@ describe('ProviderDetail', () => {
|
||||
expect(configureButton.querySelector('.i-ri-equalizer-2-line')).toBeInTheDocument()
|
||||
})
|
||||
|
||||
it('renders custom tool details read-only without tool.manage', async () => {
|
||||
it('does not fetch or enable custom tool management without tool.manage', async () => {
|
||||
mockAppContextState.workspacePermissionKeys = []
|
||||
mockFetchCustomToolList.mockResolvedValue([
|
||||
{ name: 'custom-tool', label: { en_US: 'Custom Tool' }, description: { en_US: 'desc' }, parameters: [], labels: [], author: '', output_schema: {} },
|
||||
])
|
||||
|
||||
render(
|
||||
<ProviderDetail
|
||||
@ -355,8 +352,7 @@ describe('ProviderDetail', () => {
|
||||
const configureButton = (await screen.findByText('tools.createTool.editAction')).closest('button')!
|
||||
|
||||
expect(mockFetchCustomCollection).not.toHaveBeenCalled()
|
||||
expect(mockFetchCustomToolList).toHaveBeenCalledWith('test-collection')
|
||||
expect(screen.getByTestId('tool-custom-tool')).toBeInTheDocument()
|
||||
expect(mockFetchCustomToolList).not.toHaveBeenCalled()
|
||||
expect(configureButton).toBeDisabled()
|
||||
})
|
||||
})
|
||||
@ -425,7 +421,7 @@ describe('ProviderDetail', () => {
|
||||
expect(actions).toHaveClass('-mx-4', 'px-4', 'border-b-[0.5px]', 'border-divider-subtle')
|
||||
})
|
||||
|
||||
it('renders workflow tool details read-only without tool.manage', async () => {
|
||||
it('does not fetch or show workflow tool edit actions without tool.manage', () => {
|
||||
mockAppContextState.workspacePermissionKeys = []
|
||||
|
||||
render(
|
||||
@ -436,16 +432,9 @@ describe('ProviderDetail', () => {
|
||||
/>,
|
||||
)
|
||||
|
||||
await waitFor(() => {
|
||||
expect(mockFetchWorkflowToolDetail).toHaveBeenCalledWith('test-id')
|
||||
})
|
||||
|
||||
const configureButton = (await screen.findByText('tools.createTool.editAction')).closest('button')!
|
||||
expect(screen.getByText('tools.openInStudio')).toBeInTheDocument()
|
||||
expect(configureButton).toBeDisabled()
|
||||
|
||||
fireEvent.click(configureButton)
|
||||
expect(screen.queryByTestId('workflow-tool-drawer')).not.toBeInTheDocument()
|
||||
expect(mockFetchWorkflowToolDetail).not.toHaveBeenCalled()
|
||||
expect(screen.queryByText('tools.openInStudio')).not.toBeInTheDocument()
|
||||
expect(screen.queryByText('tools.createTool.editAction')).not.toBeInTheDocument()
|
||||
})
|
||||
})
|
||||
|
||||
|
||||
@ -164,6 +164,9 @@ const ProviderDetail = ({
|
||||
// workflow provider
|
||||
const [workflowToolDrawerOpen, setWorkflowToolDrawerOpen] = useState(false)
|
||||
const getWorkflowToolProvider = useCallback(async () => {
|
||||
if (!canManageTools)
|
||||
return
|
||||
|
||||
setIsDetailLoading(true)
|
||||
const res = await fetchWorkflowToolDetail(collection.id)
|
||||
const payload = {
|
||||
@ -181,7 +184,7 @@ const ProviderDetail = ({
|
||||
}
|
||||
setCustomCollection(payload)
|
||||
setIsDetailLoading(false)
|
||||
}, [collection.id])
|
||||
}, [canManageTools, collection.id])
|
||||
const removeWorkflowToolProvider = async () => {
|
||||
if (!canManageTools)
|
||||
return
|
||||
@ -240,18 +243,24 @@ const ProviderDetail = ({
|
||||
setToolList([])
|
||||
}
|
||||
else {
|
||||
if (!canManageTools) {
|
||||
setToolList([])
|
||||
setIsDetailLoading(false)
|
||||
return
|
||||
}
|
||||
|
||||
const list = await fetchCustomToolList(collection.name)
|
||||
setToolList(list)
|
||||
}
|
||||
}
|
||||
catch { }
|
||||
setIsDetailLoading(false)
|
||||
}, [collection.name, collection.type])
|
||||
}, [canManageTools, collection.name, collection.type])
|
||||
|
||||
useEffect(() => {
|
||||
if (collection.type === CollectionType.custom && canManageTools)
|
||||
getCustomProvider()
|
||||
if (collection.type === CollectionType.workflow)
|
||||
if (collection.type === CollectionType.workflow && canManageTools)
|
||||
getWorkflowToolProvider()
|
||||
getProviderToolList()
|
||||
}, [canManageTools, collection.name, collection.type, getCustomProvider, getProviderToolList, getWorkflowToolProvider])
|
||||
@ -322,7 +331,7 @@ const ProviderDetail = ({
|
||||
nativeButton={false}
|
||||
variant="primary"
|
||||
className={cn('my-3 h-8 min-w-0 flex-1 rounded-lg px-3 py-2')}
|
||||
render={<a href={`${basePath}/app/${(customCollection as WorkflowToolProviderResponse).workflow_app_id}/workflow`} rel="noreferrer" target="_blank" aria-label={t('openInStudio', { ns: 'tools' })} />}
|
||||
render={<a href={`${basePath}/app/${(customCollection as WorkflowToolProviderResponse).workflow_app_id}/workflow`} rel="noreferrer" target="_blank" />}
|
||||
>
|
||||
<span className="min-w-0 truncate px-0.5 system-sm-medium">{t('openInStudio', { ns: 'tools' })}</span>
|
||||
<span aria-hidden className="i-ri-arrow-right-up-line size-4 shrink-0" />
|
||||
|
||||
@ -139,7 +139,7 @@ async function mountedStore() {
|
||||
},
|
||||
})
|
||||
store.set(queryClientAtom, queryClient)
|
||||
const unsubscribe = store.sub(state.createReleaseFormValuesAtom, () => undefined)
|
||||
const unsubscribe = store.sub(state.createReleaseFormIsSubmittingAtom, () => undefined)
|
||||
|
||||
return {
|
||||
state,
|
||||
|
||||
@ -126,7 +126,7 @@ async function mountedStore() {
|
||||
},
|
||||
})
|
||||
store.set(queryClientAtom, queryClient)
|
||||
const unsubscribe = store.sub(state.createReleaseFormValuesAtom, () => undefined)
|
||||
const unsubscribe = store.sub(state.createReleaseFormIsSubmittingAtom, () => undefined)
|
||||
|
||||
return {
|
||||
queryClient,
|
||||
@ -232,20 +232,6 @@ describe('create release state', () => {
|
||||
}
|
||||
})
|
||||
|
||||
it('should keep default form values before editing', async () => {
|
||||
const { state, store, unsubscribe } = await mountedStore()
|
||||
|
||||
expect(store.get(state.createReleaseFormValuesAtom)).toEqual({
|
||||
dslFile: undefined,
|
||||
releaseDescription: '',
|
||||
releaseName: '',
|
||||
releaseSourceMode: 'sourceApp',
|
||||
sourceApp: undefined,
|
||||
})
|
||||
|
||||
unsubscribe()
|
||||
})
|
||||
|
||||
it('should validate release name only when submitting', async () => {
|
||||
const { state, store, unsubscribe } = await mountedStore()
|
||||
|
||||
|
||||
@ -106,7 +106,6 @@ export const createReleaseFormAtom = atomWithForm({
|
||||
|
||||
const createReleaseFormAtoms = createFormAtoms(createReleaseFormAtom)
|
||||
|
||||
export const createReleaseFormValuesAtom = createReleaseFormAtoms.valuesAtom
|
||||
export const createReleaseFormIsSubmittingAtom = createReleaseFormAtoms.isSubmittingAtom
|
||||
export const createReleaseSourceModeFieldAtom = createReleaseFormAtoms.fieldAtom('releaseSourceMode')
|
||||
export const createReleaseSourceAppFieldAtom = createReleaseFormAtoms.fieldAtom('sourceApp')
|
||||
|
||||
@ -1,29 +1,14 @@
|
||||
{
|
||||
"agentDetail.access.actionUnavailable": "هذا الإجراء غير متاح بعد.",
|
||||
"agentDetail.access.actions.monitoring": "المراقبة",
|
||||
"agentDetail.access.copyAccessUrl": "نسخ رابط الوصول",
|
||||
"agentDetail.access.copyFailed": "فشل نسخ المرجع.",
|
||||
"agentDetail.access.copyReference": "نسخ المرجع لـ {{name}}",
|
||||
"agentDetail.access.copyServiceEndpoint": "نسخ نقطة نهاية API الخدمة",
|
||||
"agentDetail.access.description": "كل سطح يمكن الوصول إلى هذا الوكيل منه.",
|
||||
"agentDetail.access.empty": "لا توجد نقاط وصول مرتبطة",
|
||||
"agentDetail.access.emptyDescription": "هذا الوكيل في Roster ليس لديه بعد أي مراجع تطبيق أو سير عمل.",
|
||||
"agentDetail.access.entries.agentApp.description": "تطبيق الوكيل المرتبط بهذا الوكيل في Roster.",
|
||||
"agentDetail.access.entries.agentApp.name": "تطبيق الوكيل",
|
||||
"agentDetail.access.entries.workflow.description": "مرجع سير العمل والعقدة المرتبط بهذا الوكيل في Roster.",
|
||||
"agentDetail.access.entries.workflow.name": "عقدة سير العمل",
|
||||
"agentDetail.access.entryCount_one": "{{count}} إدخال",
|
||||
"agentDetail.access.entryCount_other": "{{count}} إدخالات",
|
||||
"agentDetail.access.groups.references.heading": "المراجع",
|
||||
"agentDetail.access.groups.references.label": "المراجع المرتبطة",
|
||||
"agentDetail.access.learnMore": "اعرف المزيد",
|
||||
"agentDetail.access.moreActions": "إجراءات أخرى لـ {{name}}",
|
||||
"agentDetail.access.serviceApi.actions.apiKey": "API Key",
|
||||
"agentDetail.access.serviceApi.actions.apiReference": "API Reference",
|
||||
"agentDetail.access.serviceApi.endpoint": "نقطة نهاية API الخدمة",
|
||||
"agentDetail.access.serviceApi.title": "API خدمة الواجهة الخلفية",
|
||||
"agentDetail.access.status.disabled": "معطل",
|
||||
"agentDetail.access.status.enabled": "ممكّن",
|
||||
"agentDetail.access.status.inService": "في الخدمة",
|
||||
"agentDetail.access.status.outOfService": "خارج الخدمة",
|
||||
"agentDetail.access.title": "نقطة الوصول",
|
||||
@ -69,11 +54,9 @@
|
||||
"agentDetail.configure.advancedSettings.envEditor.scopeSecret": "Secret",
|
||||
"agentDetail.configure.advancedSettings.envEditor.scopeSelector": "اختر نطاق متغير البيئة",
|
||||
"agentDetail.configure.advancedSettings.envEditor.tip": "متغيرات البيئة المتاحة لهذا الوكيل في وقت التشغيل.",
|
||||
"agentDetail.configure.advancedSettings.envEditor.toggle": "تبديل Env Editor",
|
||||
"agentDetail.configure.advancedSettings.envEditor.valueColumn": "Value",
|
||||
"agentDetail.configure.advancedSettings.envEditor.valuePlaceholder": "Value",
|
||||
"agentDetail.configure.advancedSettings.label": "الإعدادات المتقدمة",
|
||||
"agentDetail.configure.advancedSettings.toggle": "تبديل الإعدادات المتقدمة",
|
||||
"agentDetail.configure.chatFeatures.description": "شكّل تجربة الدردشة للمستخدم النهائي على Web app وأسطح الدردشة.",
|
||||
"agentDetail.configure.chatFeatures.title": "ميزات الدردشة",
|
||||
"agentDetail.configure.files.add": "إضافة ملف",
|
||||
@ -85,7 +68,6 @@
|
||||
"agentDetail.configure.files.preview.unsupported": "هذا الملف لا يدعم المعاينة.",
|
||||
"agentDetail.configure.files.remove": "إزالة {{name}}",
|
||||
"agentDetail.configure.files.tip": "الملفات التي يمكن لهذا الوكيل استخدامها أثناء تنسيق المهام.",
|
||||
"agentDetail.configure.files.toggle": "تبديل الملفات",
|
||||
"agentDetail.configure.files.treeLabel": "ملفات الوكيل",
|
||||
"agentDetail.configure.files.upload.action": "تحميل",
|
||||
"agentDetail.configure.files.upload.browse": "استعراض",
|
||||
@ -133,7 +115,6 @@
|
||||
"agentDetail.configure.preview.empty.defaultAgentName": "وكيل",
|
||||
"agentDetail.configure.preview.empty.description": "أرسل رسالة لاختبار المسودة الحالية.",
|
||||
"agentDetail.configure.preview.empty.noInstructionsDescription": "لا توجد تعليمات بعد، لذلك تأتي الردود من النموذج البسيط.",
|
||||
"agentDetail.configure.preview.endUserAuth": "مصادقة المستخدم النهائي",
|
||||
"agentDetail.configure.preview.restart": "إعادة تشغيل المعاينة",
|
||||
"agentDetail.configure.preview.title": "معاينة",
|
||||
"agentDetail.configure.prompt.copied": "تم نسخ المطالبة",
|
||||
@ -145,7 +126,6 @@
|
||||
"agentDetail.configure.prompt.insert.tenders": "بدء العطاءات",
|
||||
"agentDetail.configure.prompt.label": "المطالبة",
|
||||
"agentDetail.configure.prompt.mention.davidHayes": "David Hayes",
|
||||
"agentDetail.configure.prompt.mention.label": "إشارة",
|
||||
"agentDetail.configure.prompt.mention.priyaRamanathan": "Priya Ramanathan",
|
||||
"agentDetail.configure.prompt.placeholder": "اكتب التعليمات هنا،",
|
||||
"agentDetail.configure.prompt.tip": "حدّد كيف يجب أن يفسر هذا الوكيل المدخلات، ويستدعي الأدوات، وينتج المخرجات.",
|
||||
@ -170,7 +150,6 @@
|
||||
"agentDetail.configure.skills.add": "إضافة مهارة",
|
||||
"agentDetail.configure.skills.detail.contentRegion": "محتوى تفاصيل المهارة",
|
||||
"agentDetail.configure.skills.detail.fileCount": "{{count}} ملفات",
|
||||
"agentDetail.configure.skills.detail.fileTreeLabel": "ملفات المهارة",
|
||||
"agentDetail.configure.skills.detail.files": "الملفات",
|
||||
"agentDetail.configure.skills.empty.description": "تمنح المهارات الوكيل خبرة قابلة لإعادة الاستخدام يمكنه استدعاؤها أثناء العمل",
|
||||
"agentDetail.configure.skills.empty.title": "لا توجد مهارات بعد",
|
||||
@ -178,7 +157,6 @@
|
||||
"agentDetail.configure.skills.label": "المهارات",
|
||||
"agentDetail.configure.skills.remove": "إزالة {{name}}",
|
||||
"agentDetail.configure.skills.tip": "المهارات التي يمكن لهذا الوكيل استخدامها أثناء تنسيق المهام.",
|
||||
"agentDetail.configure.skills.toggle": "تبديل المهارات",
|
||||
"agentDetail.configure.skills.upload.action": "تحميل",
|
||||
"agentDetail.configure.skills.upload.browse": "استعراض",
|
||||
"agentDetail.configure.skills.upload.description": "قم بتحميل حزمة .zip أو .skill لهذا الوكيل.",
|
||||
@ -211,18 +189,14 @@
|
||||
"agentDetail.configure.tools.cliDialog.title": "إضافة أداة CLI",
|
||||
"agentDetail.configure.tools.cliTool": "أداة CLI",
|
||||
"agentDetail.configure.tools.credential.authOne": "Auth 1",
|
||||
"agentDetail.configure.tools.credential.endUserOAuth": "المستخدم النهائي · OAuth",
|
||||
"agentDetail.configure.tools.editAction": "تعديل {{name}}",
|
||||
"agentDetail.configure.tools.empty.description": "تتيح الأدوات للوكيل التصرف، مثل البحث على الويب أو استدعاء تطبيقاتك",
|
||||
"agentDetail.configure.tools.empty.title": "لا توجد أدوات بعد",
|
||||
"agentDetail.configure.tools.label": "الأدوات",
|
||||
"agentDetail.configure.tools.moreActions": "إجراءات أخرى لـ {{name}}",
|
||||
"agentDetail.configure.tools.pluginType": "مكون إضافي",
|
||||
"agentDetail.configure.tools.preAuthorize": "تفويض مسبق",
|
||||
"agentDetail.configure.tools.removeAction": "إزالة {{name}}",
|
||||
"agentDetail.configure.tools.removeProvider": "إزالة جميع الأدوات",
|
||||
"agentDetail.configure.tools.tip": "الأدوات التي يمكن لهذا الوكيل استدعاؤها أثناء تنسيق المهام.",
|
||||
"agentDetail.configure.tools.toggle": "تبديل الأدوات",
|
||||
"agentDetail.configure.tools.toolTabs.all": "الكل",
|
||||
"agentDetail.configure.tools.toolTabs.cli": "CLI",
|
||||
"agentDetail.configure.tools.toolTabs.custom": "مخصص",
|
||||
@ -230,11 +204,9 @@
|
||||
"agentDetail.configure.tools.toolTabs.plugins": "المكونات الإضافية",
|
||||
"agentDetail.configure.tools.toolTabs.workflow": "Workflow",
|
||||
"agentDetail.documentTitle": "وكيل",
|
||||
"agentDetail.history": "السجل",
|
||||
"agentDetail.logs.description": "تسجل السجلات الكاملة حالة تشغيل التطبيق، بما في ذلك مدخلات المستخدم وردود الوكيل والتخطيط واستخدامات الأدوات.",
|
||||
"agentDetail.logs.empty": "لم يتم العثور على سجلات",
|
||||
"agentDetail.logs.filters.period.allTime": "كل الأوقات",
|
||||
"agentDetail.logs.filters.period.label": "فترة السجل",
|
||||
"agentDetail.logs.filters.period.last30days": "آخر 30 يوماً",
|
||||
"agentDetail.logs.filters.period.last7days": "آخر 7 أيام",
|
||||
"agentDetail.logs.filters.search.label": "البحث في السجلات",
|
||||
@ -252,7 +224,6 @@
|
||||
"agentDetail.logs.filters.source.workflow": "سير العمل",
|
||||
"agentDetail.logs.learnMore": "اعرف المزيد",
|
||||
"agentDetail.logs.loadFailed": "تعذر تحميل السجلات",
|
||||
"agentDetail.logs.loading": "جارٍ تحميل السجلات…",
|
||||
"agentDetail.logs.notAvailable": "غير متاح",
|
||||
"agentDetail.logs.table.createdTime": "وقت الإنشاء",
|
||||
"agentDetail.logs.table.endUser": "المستخدم النهائي",
|
||||
@ -273,19 +244,7 @@
|
||||
"agentDetail.memorySettings.notConfigured": "غير مكوّن",
|
||||
"agentDetail.memorySettings.scopeLabel": "نطاق الذاكرة",
|
||||
"agentDetail.memorySettings.title": "الذاكرة",
|
||||
"agentDetail.metadata.activeVersionLabel": "الإصدار النشط",
|
||||
"agentDetail.metadata.appIdLabel": "معرّف التطبيق",
|
||||
"agentDetail.metadata.description": "حقول Roster للقراءة فقط التي تعيدها الواجهة الخلفية للوكيل.",
|
||||
"agentDetail.metadata.emptyValue": "غير متاح",
|
||||
"agentDetail.metadata.scopeLabel": "النطاق",
|
||||
"agentDetail.metadata.scopes.roster": "Roster",
|
||||
"agentDetail.metadata.scopes.workflow_only": "سير العمل فقط",
|
||||
"agentDetail.metadata.sourceLabel": "المصدر",
|
||||
"agentDetail.metadata.statusLabel": "الحالة",
|
||||
"agentDetail.metadata.title": "البيانات الوصفية",
|
||||
"agentDetail.metadata.updatedAtLabel": "تاريخ التحديث",
|
||||
"agentDetail.metadata.workflowIdLabel": "معرّف سير العمل",
|
||||
"agentDetail.metadata.workflowNodeIdLabel": "معرّف عقدة سير العمل",
|
||||
"agentDetail.monitoring.change": "{{value}} عن الفترة السابقة",
|
||||
"agentDetail.monitoring.dateRangeLabel": "نطاق التاريخ",
|
||||
"agentDetail.monitoring.description": "تتبّع نشاط وتكلفة وجودة تفاعل الوكيل القابل لإعادة الاستخدام عبر سير العمل.",
|
||||
@ -319,15 +278,12 @@
|
||||
"agentDetail.monitoring.units.tokenPerSecond": "توكن/ث",
|
||||
"agentDetail.navigationLabel": "تنقّل الوكيل",
|
||||
"agentDetail.publish": "نشر",
|
||||
"agentDetail.publishSoon": "قريباً",
|
||||
"agentDetail.sections.access": "نقطة الوصول",
|
||||
"agentDetail.sections.configure": "تنسيق",
|
||||
"agentDetail.sections.logs": "السجلات",
|
||||
"agentDetail.sections.monitoring": "المراقبة",
|
||||
"agentDetail.subtitle": "معرّف الوكيل: {{agentId}}",
|
||||
"agentDetail.title": "وكيل",
|
||||
"agentDetail.type": "وكيل",
|
||||
"agentDetail.versionHistory.active": "نشط",
|
||||
"agentDetail.versionHistory.empty": "لا توجد إصدارات بعد",
|
||||
"agentDetail.versionHistory.exitVersions": "الخروج من الإصدارات",
|
||||
"agentDetail.versionHistory.filter": "تصفية الإصدارات",
|
||||
@ -335,7 +291,6 @@
|
||||
"agentDetail.versionHistory.versionName": "الإصدار {{version}}",
|
||||
"agentDetail.versionHistory.viewOnly": "عرض فقط",
|
||||
"roster.createAgent": "إنشاء وكيل",
|
||||
"roster.createAgentOptions": "خيارات إنشاء الوكيل",
|
||||
"roster.createDialog.description": "أنشئ وكيلاً قابلاً لإعادة الاستخدام في Roster مساحة العمل هذه.",
|
||||
"roster.createDialog.title": "إنشاء وكيل",
|
||||
"roster.createForm.changeIcon": "تغيير أيقونة الوكيل",
|
||||
@ -362,9 +317,7 @@
|
||||
"roster.editDialog.title": "تعديل الوكيل",
|
||||
"roster.editInfo": "تعديل المعلومات",
|
||||
"roster.empty": "لا يوجد وكيل بعد",
|
||||
"roster.emptyDescription": "ستظهر الوكلاء المحفوظون في مساحة العمل هذه هنا.",
|
||||
"roster.emptySearch": "لا يوجد وكلاء مطابقون",
|
||||
"roster.emptySearchDescription": "جرّب اسم وكيل آخر.",
|
||||
"roster.filters.all": "الكل",
|
||||
"roster.filters.drafts": "مسودات",
|
||||
"roster.filters.label": "مرشحات الوكيل",
|
||||
@ -383,12 +336,6 @@
|
||||
"roster.references.trigger": "سير العمل الذي يستخدم {{name}}",
|
||||
"roster.searchLabel": "البحث عن الوكلاء",
|
||||
"roster.searchPlaceholder": "ابحث عن الوكلاء بالاسم…",
|
||||
"roster.sources.agent_app": "تطبيق الوكيل",
|
||||
"roster.sources.imported": "مستورد",
|
||||
"roster.sources.system": "النظام",
|
||||
"roster.sources.workflow": "سير العمل",
|
||||
"roster.status.active": "نشط",
|
||||
"roster.status.archived": "مؤرشف",
|
||||
"roster.tabs.agent": "وكيل",
|
||||
"roster.tabs.human": "إنسان",
|
||||
"roster.tabsLabel": "نوع Roster",
|
||||
|
||||
@ -5,24 +5,16 @@
|
||||
"addModal.queryName": "السؤال",
|
||||
"addModal.queryPlaceholder": "اكتب الاستعلام هنا",
|
||||
"addModal.title": "إضافة رد تعليق توضيحي",
|
||||
"batchAction.cancel": "إلغاء",
|
||||
"batchAction.delete": "حذف",
|
||||
"batchAction.selected": "المحدد",
|
||||
"batchModal.answer": "الإجابة",
|
||||
"batchModal.browse": "تصفح",
|
||||
"batchModal.cancel": "إلغاء",
|
||||
"batchModal.completed": "اكتمل الاستيراد",
|
||||
"batchModal.content": "المحتوى",
|
||||
"batchModal.contentTitle": "محتوى المقطع",
|
||||
"batchModal.csvUploadTitle": "اسحب وأفلت ملف CSV هنا، أو ",
|
||||
"batchModal.error": "خطأ في الاستيراد",
|
||||
"batchModal.ok": "موافق",
|
||||
"batchModal.processing": "جاري المعالجة",
|
||||
"batchModal.question": "السؤال",
|
||||
"batchModal.run": "تشغيل الدفعة",
|
||||
"batchModal.runError": "فشل تشغيل الدفعة",
|
||||
"batchModal.template": "تحميل القالب من هنا",
|
||||
"batchModal.tip": "يجب أن يتوافق ملف CSV مع الهيكل التالي:",
|
||||
"batchModal.title": "استيراد بالجملة",
|
||||
"editBy": "تم تعديل الإجابة بواسطة {{author}}",
|
||||
"editModal.answerName": "الراوي",
|
||||
|
||||
@ -11,62 +11,14 @@
|
||||
"apiKeyModal.lastUsed": "آخر استخدام",
|
||||
"apiKeyModal.secretKey": "المفتاح السري",
|
||||
"apiServer": "خادم API",
|
||||
"chatMode.blocking": "نوع الحظر، في انتظار اكتمال التنفيذ وإرجاع النتائج. (قد يتم قطع الطلبات إذا كانت العملية طويلة)",
|
||||
"chatMode.chatMsgHistoryApi": "الحصول على رسالة سجل الدردشة",
|
||||
"chatMode.chatMsgHistoryApiTip": "تُرجع الصفحة الأولى أحدث شريط `limit`، وهو بترتيب عكسي.",
|
||||
"chatMode.chatMsgHistoryConversationIdTip": "معرف المحادثة",
|
||||
"chatMode.chatMsgHistoryFirstId": "معرف سجل الدردشة الأول في الصفحة الحالية. الافتراضي هو لا شيء.",
|
||||
"chatMode.chatMsgHistoryLimit": "كم عدد المحادثات التي يتم إرجاعها في طلب واحد",
|
||||
"chatMode.conversationIdTip": "(اختياري) معرف المحادثة: اتركه فارغًا للمحادثة لأول مرة؛ مرر conversation_id من السياق لمتابعة الحوار.",
|
||||
"chatMode.conversationRenamingApi": "إعادة تسمية المحادثة",
|
||||
"chatMode.conversationRenamingApiTip": "إعادة تسمية المحادثات؛ يتم عرض الاسم في واجهات العملاء متعددة الجلسات.",
|
||||
"chatMode.conversationRenamingNameTip": "اسم جديد",
|
||||
"chatMode.conversationsListApi": "الحصول على قائمة المحادثات",
|
||||
"chatMode.conversationsListApiTip": "يحصل على قائمة الجلسات للمستخدم الحالي. بشكل افتراضي، يتم إرجاع آخر 20 جلسة.",
|
||||
"chatMode.conversationsListFirstIdTip": "معرف السجل الأخير في الصفحة الحالية، الافتراضي لا شيء.",
|
||||
"chatMode.conversationsListLimitTip": "كم عدد المحادثات التي يتم إرجاعها في طلب واحد",
|
||||
"chatMode.createChatApi": "إنشاء رسالة دردشة",
|
||||
"chatMode.createChatApiTip": "بناء رسالة محادثة جديدة أو استمرار حوار موجود.",
|
||||
"chatMode.info": "للتطبيقات المحادثة متعددة الاستخدامات باستخدام تنسيق Q&A، اتصل بـ API رسائل الدردشة لبدء الحوار. حافظ على المحادثات الجارية عن طريق تمرير conversation_id المرتجع. تعتمد معلمات الاستجابة والقوالب على إعدادات Dify Prompt Eng.",
|
||||
"chatMode.inputsTips": "(اختياري) توفير حقول إدخال المستخدم كأزواج مفتاح وقيمة، بما يتوافق مع المتغيرات في هندسة المطالبات. المفتاح هو اسم المتغير، والقيمة هي قيمة المعلمة. إذا كان نوع الحقل هو تحديد، فيجب أن تكون القيمة المرسلة واحدة من الخيارات المحددة مسبقًا.",
|
||||
"chatMode.messageFeedbackApi": "ملاحظات مستخدم محطة الرسالة، إعجاب",
|
||||
"chatMode.messageFeedbackApiTip": "قيم الرسائل المستلمة نيابة عن المستخدمين النهائيين بإعجاب أو عدم إعجاب. هذه البيانات مرئية في صفحة السجلات والتعليقات التوضيحية وتستخدم لضبط النموذج في المستقبل.",
|
||||
"chatMode.messageIDTip": "معرف الرسالة",
|
||||
"chatMode.parametersApi": "الحصول على معلومات حول معلمات التطبيق",
|
||||
"chatMode.parametersApiTip": "استرداد معلمات الإدخال المكونة، بما في ذلك أسماء المتغيرات وأسماء الحقول والأنواع والقيم الافتراضية. تستخدم عادة لعرض هذه الحقول في نموذج أو ملء القيم الافتراضية بعد تحميل العميل.",
|
||||
"chatMode.queryTips": "محتوى إدخال/سؤال المستخدم",
|
||||
"chatMode.ratingTip": "إعجاب أو عدم إعجاب، null للإلغاء",
|
||||
"chatMode.streaming": "عائدات التدفق. تنفيذ عائد التدفق بناءً على SSE (أحداث مرسلة من الخادم).",
|
||||
"chatMode.title": "API تطبيق الدردشة",
|
||||
"completionMode.blocking": "نوع الحظر، في انتظار اكتمال التنفيذ وإرجاع النتائج. (قد يتم قطع الطلبات إذا كانت العملية طويلة)",
|
||||
"completionMode.createCompletionApi": "إنشاء رسالة إكمال",
|
||||
"completionMode.createCompletionApiTip": "إنشاء رسالة إكمال لدعم وضع السؤال والجواب.",
|
||||
"completionMode.info": "لتوليد نصوص عالية الجودة، مثل المقالات والملخصات والترجمات، استخدم API رسائل الإكمال مع إدخال المستخدم. يعتمد توليد النص على معلمات النموذج وقوالب المطالبة المعينة في هندسة مطالبات Dify.",
|
||||
"completionMode.inputsTips": "(اختياري) توفير حقول إدخال المستخدم كأزواج مفتاح وقيمة، بما يتوافق مع المتغيرات في هندسة المطالبات. المفتاح هو اسم المتغير، والقيمة هي قيمة المعلمة. إذا كان نوع الحقل هو تحديد، فيجب أن تكون القيمة المرسلة واحدة من الخيارات المحددة مسبقًا.",
|
||||
"completionMode.messageFeedbackApi": "ملاحظات الرسالة (إعجاب)",
|
||||
"completionMode.messageFeedbackApiTip": "قيم الرسائل المستلمة نيابة عن المستخدمين النهائيين بإعجاب أو عدم إعجاب. هذه البيانات مرئية في صفحة السجلات والتعليقات التوضيحية وتستخدم لضبط النموذج في المستقبل.",
|
||||
"completionMode.messageIDTip": "معرف الرسالة",
|
||||
"completionMode.parametersApi": "الحصول على معلومات حول معلمات التطبيق",
|
||||
"completionMode.parametersApiTip": "استرداد معلمات الإدخال المكونة، بما في ذلك أسماء المتغيرات وأسماء الحقول والأنواع والقيم الافتراضية. تستخدم عادة لعرض هذه الحقول في نموذج أو ملء القيم الافتراضية بعد تحميل العميل.",
|
||||
"completionMode.queryTips": "محتوى نص إدخال المستخدم.",
|
||||
"completionMode.ratingTip": "إعجاب أو عدم إعجاب، null للإلغاء",
|
||||
"completionMode.streaming": "عائدات التدفق. تنفيذ عائد التدفق بناءً على SSE (أحداث مرسلة من الخادم).",
|
||||
"completionMode.title": "API تطبيق الإكمال",
|
||||
"copied": "تم النسخ",
|
||||
"copy": "نسخ",
|
||||
"develop.noContent": "لا يوجد محتوى",
|
||||
"develop.pathParams": "معلمات المسار (Path Params)",
|
||||
"develop.query": "استعلام (Query)",
|
||||
"develop.requestBody": "جسم الطلب (Request Body)",
|
||||
"develop.toc": "المحتويات",
|
||||
"disabled": "معطل",
|
||||
"loading": "جاري التحميل",
|
||||
"merMaid.rerender": "إعادة الرسم",
|
||||
"never": "أبدا",
|
||||
"ok": "في الخدمة",
|
||||
"pause": "إيقاف مؤقت",
|
||||
"play": "تشغيل",
|
||||
"playing": "جاري التشغيل",
|
||||
"regenerate": "إعادة إنشاء",
|
||||
"status": "الحالة"
|
||||
"playing": "جاري التشغيل"
|
||||
}
|
||||
|
||||
@ -1,24 +1,17 @@
|
||||
{
|
||||
"agentLog": "سجل الوكيل",
|
||||
"agentLogDetail.agentMode": "وضع الوكيل",
|
||||
"agentLogDetail.finalProcessing": "المعالجة النهائية",
|
||||
"agentLogDetail.iteration": "تكرار",
|
||||
"agentLogDetail.iterations": "التكرارات",
|
||||
"agentLogDetail.toolUsed": "الأداة المستخدمة",
|
||||
"dateFormat": "شهر/يوم/سنة",
|
||||
"dateTimeFormat": "MM/DD/YYYY hh:mm A",
|
||||
"description": "تسجل السجلات حالة تشغيل التطبيق، بما في ذلك مدخلات المستخدم واستجابات الذكاء الاصطناعي.",
|
||||
"detail.annotationTip": "تحسينات تم وضع علامة عليها بواسطة {{user}}",
|
||||
"detail.conversationId": "معرف المحادثة",
|
||||
"detail.loading": "جاري التحميل",
|
||||
"detail.modelParams": "معلمات النموذج",
|
||||
"detail.operation.addAnnotation": "إضافة تحسين",
|
||||
"detail.operation.annotationPlaceholder": "أدخل الإجابة المتوقعة التي تريد أن يرد بها الذكاء الاصطناعي، والتي يمكن استخدامها لضبط النموذج والتحسين المستمر لجودة توليد النص.",
|
||||
"detail.operation.dislike": "لم يعجبني",
|
||||
"detail.operation.editAnnotation": "تعديل التحسين",
|
||||
"detail.operation.like": "إعجاب",
|
||||
"detail.promptTemplate": "قالب المطالبة",
|
||||
"detail.promptTemplateBeforeChat": "قالب المطالبة قبل الدردشة · كرسالة نظام",
|
||||
"detail.second": "ثانية",
|
||||
"detail.time": "الوقت",
|
||||
"detail.timeConsuming": "",
|
||||
@ -43,7 +36,6 @@
|
||||
"filter.period.yearToDate": "السنة حتى الآن",
|
||||
"filter.sortBy": "رتب حسب:",
|
||||
"monitoring.description": "يسجل الرصد حالة تشغيل التطبيق، بما في ذلك الأداء ونشاط المستخدمين والتكاليف.",
|
||||
"promptLog": "سجل المطالبة",
|
||||
"runDetail.fileListDetail": "تفاصيل",
|
||||
"runDetail.fileListLabel": "تفاصيل الملف",
|
||||
"runDetail.testWithParams": "اختبار مع المعلمات",
|
||||
@ -68,9 +60,6 @@
|
||||
"table.header.updatedTime": "الوقت المحدث",
|
||||
"table.header.user": "المستخدم",
|
||||
"table.header.userRate": "معدل المستخدم",
|
||||
"table.header.version": "الإصدار",
|
||||
"table.pagination.next": "التالي",
|
||||
"table.pagination.previous": "السابق",
|
||||
"title": "السجلات",
|
||||
"triggerBy.appRun": "تشغيل التطبيق",
|
||||
"triggerBy.debugging": "تصحيح الأخطاء",
|
||||
@ -79,7 +68,6 @@
|
||||
"triggerBy.ragPipelineRun": "تشغيل خط أنابيب RAG",
|
||||
"triggerBy.schedule": "الجدول الزمني",
|
||||
"triggerBy.webhook": "Webhook",
|
||||
"viewLog": "عرض السجل",
|
||||
"workflowSubtitle": "سجل تفاصيل تشغيل سير العمل.",
|
||||
"workflowTitle": "سجلات سير العمل"
|
||||
}
|
||||
|
||||
@ -32,9 +32,6 @@
|
||||
"appSelector.noParams": "لا توجد معلمات مطلوبة",
|
||||
"appSelector.params": "معلمات التطبيق",
|
||||
"appSelector.placeholder": "اختر تطبيقًا...",
|
||||
"communityIntro": "ناقش مع أعضاء الفريق والمساهمين والمطورين على قنوات مختلفة.",
|
||||
"createApp": "إنشاء تطبيق",
|
||||
"createFromConfigFile": "إنشاء من ملف DSL",
|
||||
"deleteAppConfirmContent": "حذف التطبيق لا رجعة فيه. لن يتمكن المستخدمون من الوصول إلى تطبيقك بعد الآن، وسيتم حذف جميع تكوينات المطالبة والسجلات بشكل دائم.",
|
||||
"deleteAppConfirmInputLabel": "للتأكيد، اكتب <appName>{{appName}}</appName> في المربع أدناه:",
|
||||
"deleteAppConfirmInputPlaceholder": "أدخل اسم التطبيق…",
|
||||
@ -51,7 +48,6 @@
|
||||
"exportFailed": "فشل تصدير DSL.",
|
||||
"filterEmpty.noApps": "لا توجد تطبيقات هنا",
|
||||
"firstEmpty.blankDescription": "ابدأ بلوحة فارغة عندما تعرف ما تريد بناءه.",
|
||||
"firstEmpty.description": "حوّل فكرتك إلى تطبيق ذكاء اصطناعي يعمل — ابدأ من الصفر أو من قالب أو استورد تطبيقًا موجودًا.",
|
||||
"firstEmpty.importDescription": "استعد تطبيقًا من ملف تعريف Dify DSL.",
|
||||
"firstEmpty.learnDifyTitle": "تعلّم Dify",
|
||||
"firstEmpty.or": "أو",
|
||||
@ -60,34 +56,24 @@
|
||||
"gotoAnything.actions.accountDesc": "الانتقال إلى صفحة الحساب",
|
||||
"gotoAnything.actions.communityDesc": "فتح مجتمع Discord",
|
||||
"gotoAnything.actions.createCategoryDesc": "قم بإنشاء سير عمل أو سير دردشة تم إنشاؤه بواسطة الذكاء الاصطناعي",
|
||||
"gotoAnything.actions.createCategoryTitle": "إنشاء",
|
||||
"gotoAnything.actions.createChatflow": "تدفق الدردشة",
|
||||
"gotoAnything.actions.createChatflowDesc": "أنشئ تطبيق تدفق الدردشة (الدردشة المتقدمة) من الوصف",
|
||||
"gotoAnything.actions.createWorkflow": "سير العمل",
|
||||
"gotoAnything.actions.createWorkflowDesc": "قم بإنشاء تطبيق سير عمل من الوصف",
|
||||
"gotoAnything.actions.docDesc": "فتح وثائق المساعدة",
|
||||
"gotoAnything.actions.feedbackDesc": "فتح مناقشات ملاحظات المجتمع",
|
||||
"gotoAnything.actions.languageCategoryDesc": "تبديل لغة الواجهة",
|
||||
"gotoAnything.actions.languageCategoryTitle": "اللغة",
|
||||
"gotoAnything.actions.languageChangeDesc": "تغيير لغة واجهة المستخدم",
|
||||
"gotoAnything.actions.refineCategoryDesc": "قم بتحسين سير العمل الحالي أو الرسم البياني لتدفق الدردشة",
|
||||
"gotoAnything.actions.refineDesc": "قم بوصف التغيير الذي سيتم تطبيقه على المسودة الحالية",
|
||||
"gotoAnything.actions.refineTitle": "تحسين الرسم البياني الحالي",
|
||||
"gotoAnything.actions.runDesc": "تشغيل أوامر سريعة (السمة، اللغة، ...)",
|
||||
"gotoAnything.actions.runTitle": "أوامر",
|
||||
"gotoAnything.actions.searchApplications": "بحث في التطبيقات",
|
||||
"gotoAnything.actions.searchApplicationsDesc": "البحث والانتقال إلى تطبيقاتك",
|
||||
"gotoAnything.actions.searchKnowledgeBases": "بحث في قواعد المعرفة",
|
||||
"gotoAnything.actions.searchKnowledgeBasesDesc": "البحث والانتقال إلى قواعد المعرفة الخاصة بك",
|
||||
"gotoAnything.actions.searchPlugins": "بحث في الإضافات",
|
||||
"gotoAnything.actions.searchPluginsDesc": "البحث والانتقال إلى إضافاتك",
|
||||
"gotoAnything.actions.searchWorkflowNodes": "بحث في عقد سير العمل",
|
||||
"gotoAnything.actions.searchWorkflowNodesDesc": "البحث والانتقال إلى العقد في سير العمل الحالي بالاسم أو النوع",
|
||||
"gotoAnything.actions.searchWorkflowNodesHelp": "هذه الميزة تعمل فقط عند عرض سير العمل. انتقل إلى سير العمل أولاً.",
|
||||
"gotoAnything.actions.slashDesc": "تنفيذ الأوامر (اكتب / لرؤية جميع الأوامر المتاحة)",
|
||||
"gotoAnything.actions.slashTitle": "الأوامر",
|
||||
"gotoAnything.actions.themeCategoryDesc": "تبديل سمة التطبيق",
|
||||
"gotoAnything.actions.themeCategoryTitle": "السمة",
|
||||
"gotoAnything.actions.themeDark": "السمة الداكنة",
|
||||
"gotoAnything.actions.themeDarkDesc": "استخدم المظهر الداكن",
|
||||
"gotoAnything.actions.themeLight": "السمة الفاتحة",
|
||||
@ -140,8 +126,6 @@
|
||||
"importFromDSLFile": "من ملف DSL",
|
||||
"importFromDSLUrl": "من رابط",
|
||||
"importFromDSLUrlPlaceholder": "لصق رابط DSL هنا",
|
||||
"join": "انضم إلى المجتمع",
|
||||
"marketplace.template.categories": "الفئات",
|
||||
"marketplace.template.category.design": "التصميم",
|
||||
"marketplace.template.category.it": "تكنولوجيا المعلومات",
|
||||
"marketplace.template.category.knowledge": "المعرفة",
|
||||
@ -156,7 +140,6 @@
|
||||
"marketplace.template.overview": "نظرة عامة",
|
||||
"marketplace.template.publishedBy": "بواسطة",
|
||||
"marketplace.template.usageCount": "الاستخدام",
|
||||
"marketplace.template.viewOnMarketplace": "عرض على Marketplace",
|
||||
"maxActiveRequests": "أقصى عدد للطلبات المتزامنة",
|
||||
"maxActiveRequestsPlaceholder": "أدخل 0 لغير محدود",
|
||||
"maxActiveRequestsTip": "الحد الأقصى لعدد الطلبات النشطة المتزامنة لكل تطبيق (0 لغير محدود)",
|
||||
@ -167,7 +150,6 @@
|
||||
"newApp.Create": "إنشاء",
|
||||
"newApp.advancedShortDescription": "سير عمل محسن للمحادثات متعددة الأدوار",
|
||||
"newApp.advancedUserDescription": "سير عمل مع ميزات ذاكرة إضافية وواجهة روبوت دردشة.",
|
||||
"newApp.agentAssistant": "مساعد وكيل جديد",
|
||||
"newApp.agentShortDescription": "وكيل ذكي مع الاستدلال واستخدام الأدوات المستقل",
|
||||
"newApp.agentUserDescription": "وكيل ذكي قادر على الاستدلال التكراري واستخدام الأدوات بشكل مستقل لتحقيق أهداف المهمة.",
|
||||
"newApp.appCreateDSLErrorPart1": "تم اكتشاف اختلاف كبير في إصدارات DSL. قد يؤدي فرض الاستيراد إلى تعطل التطبيق.",
|
||||
@ -180,51 +162,34 @@
|
||||
"newApp.appCreated": "تم إنشاء التطبيق",
|
||||
"newApp.appDescriptionPlaceholder": "أدخل وصف التطبيق",
|
||||
"newApp.appNamePlaceholder": "أعط اسمًا لتطبيقك",
|
||||
"newApp.appTemplateNotSelected": "الرجاء تحديد قالب",
|
||||
"newApp.appTypeRequired": "الرجاء تحديد نوع التطبيق",
|
||||
"newApp.captionDescription": "الوصف",
|
||||
"newApp.captionName": "اسم التطبيق والأيقونة",
|
||||
"newApp.caution": "تحذير",
|
||||
"newApp.chatApp": "مساعد",
|
||||
"newApp.chatAppIntro": "أريد بناء تطبيق قائم على الدردشة. يستخدم هذا التطبيق تنسيق سؤال وجواب، مما يسمح بجولات متعددة من المحادثة المستمرة.",
|
||||
"newApp.chatbotShortDescription": "روبوت دردشة قائم على LLM مع إعداد بسيط",
|
||||
"newApp.chatbotUserDescription": "قم ببناء روبوت دردشة قائم على LLM بسرعة مع تكوين بسيط. يمكنك التبديل إلى Chatflow لاحقًا.",
|
||||
"newApp.chooseAppType": "اختر نوع التطبيق",
|
||||
"newApp.completeApp": "مولد نصوص",
|
||||
"newApp.completeAppIntro": "أريد إنشاء تطبيق يولد نصوصًا عالية الجودة بناءً على المطالبات، مثل إنشاء المقالات والملخصات والترجمات والمزيد.",
|
||||
"newApp.completionShortDescription": "مساعد AI لمهام توليد النصوص",
|
||||
"newApp.completionUserDescription": "قم ببناء مساعد AI لمهام توليد النصوص بسرعة مع تكوين بسيط.",
|
||||
"newApp.dropDSLToCreateApp": "أفلت ملف DSL هنا لإنشاء تطبيق",
|
||||
"newApp.forAdvanced": "للمستخدمين المتقدمين",
|
||||
"newApp.forBeginners": "أنواع تطبيقات أبسط",
|
||||
"newApp.foundResult": "{{count}} نتيجة",
|
||||
"newApp.foundResults": "{{count}} نتائج",
|
||||
"newApp.hideTemplates": "العودة إلى اختيار الوضع",
|
||||
"newApp.import": "استيراد",
|
||||
"newApp.learnMore": "اعرف المزيد",
|
||||
"newApp.nameNotEmpty": "لا يمكن أن يكون الاسم فارغًا",
|
||||
"newApp.noAppsFound": "لم يتم العثور على تطبيقات",
|
||||
"newApp.noIdeaTip": "لا توجد أفكار؟ تحقق من قوالبنا",
|
||||
"newApp.noTemplateFound": "لم يتم العثور على قوالب",
|
||||
"newApp.noTemplateFoundTip": "حاول البحث باستخدام كلمات مفتاحية مختلفة.",
|
||||
"newApp.optional": "اختياري",
|
||||
"newApp.previewDemo": "معاينة العرض التوضيحي",
|
||||
"newApp.showTemplates": "أريد الاختيار من قالب",
|
||||
"newApp.startFromBlank": "إنشاء من البداية",
|
||||
"newApp.startFromTemplate": "إنشاء من قالب",
|
||||
"newApp.useTemplate": "استخدم هذا القالب",
|
||||
"newApp.workflowShortDescription": "تدفق وكيل للأتمتة الذكية",
|
||||
"newApp.workflowUserDescription": "قم ببناء تدفقات عمل AI مستقلة بشكل مرئي مع بساطة السحب والإفلات.",
|
||||
"newApp.workflowWarning": "حاليا في النسخة التجريبية (beta)",
|
||||
"newAppFromTemplate.byCategories": "حسب الفئات",
|
||||
"newAppFromTemplate.searchAllTemplate": "بحث في كل القوالب...",
|
||||
"newAppFromTemplate.sidebar.Agent": "Agent",
|
||||
"newAppFromTemplate.sidebar.Assistant": "مساعد",
|
||||
"newAppFromTemplate.sidebar.HR": "الموارد البشرية",
|
||||
"newAppFromTemplate.sidebar.Programming": "برمجة",
|
||||
"newAppFromTemplate.sidebar.Recommended": "الكل",
|
||||
"newAppFromTemplate.sidebar.Workflow": "سير العمل",
|
||||
"newAppFromTemplate.sidebar.Writing": "كتابة",
|
||||
"noAccessPermission": "لا يوجد إذن للوصول إلى تطبيق الويب",
|
||||
"noAccessResourcePermission": "لا يوجد إذن للوصول إلى هذا المورد",
|
||||
"noUserInputNode": "عقدة إدخال المستخدم مفقودة",
|
||||
@ -234,8 +199,6 @@
|
||||
"publishApp.notSetDesc": "حاليا لا يمكن لأحد الوصول إلى تطبيق الويب. الرجاء تعيين الأذونات.",
|
||||
"publishApp.title": "من يمكنه الوصول إلى تطبيق الويب",
|
||||
"removeOriginal": "حذف التطبيق الأصلي",
|
||||
"roadmap": "شاهد خريطة الطريق",
|
||||
"showMyCreatedAppsOnly": "تم إنشاؤه بواسطتي",
|
||||
"structOutput.LLMResponse": "استجابة LLM",
|
||||
"structOutput.configure": "تكوين",
|
||||
"structOutput.modelNotSupported": "النموذج غير مدعوم",
|
||||
@ -246,8 +209,6 @@
|
||||
"structOutput.structured": "هيكلي",
|
||||
"structOutput.structuredTip": "المخرجات الهيكلية هي ميزة تضمن أن يولد النموذج دائمًا استجابات تلتزم بـ JSON Schema الذي قدمته",
|
||||
"studio.allApps": "كل التطبيقات",
|
||||
"studio.apps": "تطبيقات",
|
||||
"studio.filters.allCreators": "جميع المنشئين",
|
||||
"studio.filters.creators": "المنشئون",
|
||||
"studio.filters.reset": "إعادة تعيين",
|
||||
"studio.filters.searchCreators": "بحث عن المبدع...",
|
||||
@ -261,7 +222,6 @@
|
||||
"studio.starFailed": "فشل تحديث النجمة",
|
||||
"studio.starred": "المميزة بنجمة",
|
||||
"studio.unstarApp": "إزالة النجمة من التطبيق",
|
||||
"studio.viewSnippets": "عرض مقتطفات",
|
||||
"switch": "التبديل إلى Workflow Orchestrate",
|
||||
"switchLabel": "نسخة التطبيق التي سيتم إنشاؤها",
|
||||
"switchStart": "بدء التبديل",
|
||||
@ -274,7 +234,6 @@
|
||||
"tracing.aliyun.title": "Cloud Monitor",
|
||||
"tracing.arize.description": "مراقبة LLM على مستوى المؤسسة، والتقييم عبر الإنترنت وغير المتصل بالإنترنت، والمراقبة، والتجريب - بدعم من OpenTelemetry. مصمم خصيصًا لتطبيقات LLM والتطبيقات التي تعتمد على الوكيل.",
|
||||
"tracing.arize.title": "Arize",
|
||||
"tracing.collapse": "طي",
|
||||
"tracing.config": "تكوين",
|
||||
"tracing.configProvider.clientId": "معرف العميل (Client ID)",
|
||||
"tracing.configProvider.clientSecret": "سر العميل (Client Secret)",
|
||||
@ -297,11 +256,9 @@
|
||||
"tracing.configProviderTitle.notConfigured": "تكوين المزود لتمكين التتبع",
|
||||
"tracing.databricks.description": "توفر Databricks تدفق MLflow مدار بالكامل مع حوكمة وأمان قويين لتخزين بيانات التتبع.",
|
||||
"tracing.databricks.title": "Databricks",
|
||||
"tracing.description": "تكوين مزود LLMOps خارجي وتتبع أداء التطبيق.",
|
||||
"tracing.disabled": "معطل",
|
||||
"tracing.disabledTip": "الرجاء تكوين المزود أولاً",
|
||||
"tracing.enabled": "في الخدمة",
|
||||
"tracing.expand": "توسيع",
|
||||
"tracing.inUse": "قيد الاستخدام",
|
||||
"tracing.langfuse.description": "مراقبة LLM مفتوحة المصدر وتقييمها وإدارة المطالبات والمقاييس لتصحيح وتحسين تطبيق LLM الخاص بك.",
|
||||
"tracing.langfuse.title": "Langfuse",
|
||||
@ -330,9 +287,7 @@
|
||||
"types.advanced": "Chatflow",
|
||||
"types.agent": "Agent",
|
||||
"types.all": "الكل",
|
||||
"types.basic": "أساسي",
|
||||
"types.chatbot": "روبوت دردشة",
|
||||
"types.completion": "إكمال",
|
||||
"types.filter": "الأنواع",
|
||||
"types.workflow": "سير العمل (Workflow)"
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
"account.appearanceLabel": "المظهر",
|
||||
"account.appearanceLight": "فاتح",
|
||||
"account.appearanceSystem": "النظام",
|
||||
"account.avatar": "الصورة الرمزية",
|
||||
"account.changeEmail.authTip": "بمجرد تغيير بريدك الإلكتروني، لن تتمكن حسابات Google أو GitHub المرتبطة ببريدك الإلكتروني القديم من تسجيل الدخول إلى هذا الحساب.",
|
||||
"account.changeEmail.changeTo": "تغيير إلى {{email}}",
|
||||
"account.changeEmail.codeLabel": "رمز التحقق",
|
||||
@ -63,7 +62,6 @@
|
||||
"account.showAppLength": "عرض {{length}} تطبيقات",
|
||||
"account.verificationLabel": "رمز التحقق",
|
||||
"account.verificationPlaceholder": "الصق الرمز المكون من 6 أرقام",
|
||||
"account.workspaceIcon": "رمز مساحة العمل",
|
||||
"account.workspaceName": "اسم مساحة العمل",
|
||||
"account.workspaceNamePlaceholder": "أدخل اسم مساحة العمل",
|
||||
"actionMsg.copySuccessfully": "تم النسخ بنجاح",
|
||||
@ -78,7 +76,6 @@
|
||||
"agentStrategyPage.description": "حدّد كيف يفكر AI Agent ويتخذ القرارات — بما في ذلك كيفية اختيار الأدوات ومعالجة النتائج وحل المشكلات ذاتيًا.",
|
||||
"api.actionFailed": "فشل الإجراء",
|
||||
"api.actionSuccess": "نجح الإجراء",
|
||||
"api.create": "تم الإنشاء",
|
||||
"api.remove": "تمت الإزالة",
|
||||
"api.saved": "تم الحفظ",
|
||||
"api.success": "نجاح",
|
||||
@ -105,8 +102,6 @@
|
||||
"appMenus.logs": "السجلات",
|
||||
"appMenus.overview": "المراقبة",
|
||||
"appMenus.promptEng": "تنسيق",
|
||||
"appModes.chatApp": "تطبيق الدردشة",
|
||||
"appModes.completionApp": "مولد النص",
|
||||
"avatar.deleteDescription": "هل أنت متأكد أنك تريد إزالة صورة ملفك الشخصي؟ سيستخدم حسابك الصورة الرمزية الأولية الافتراضية.",
|
||||
"avatar.deleteTitle": "إزالة الصورة الرمزية",
|
||||
"avatar.editAction": "تعديل الصورة الرمزية",
|
||||
@ -122,7 +117,6 @@
|
||||
"chat.inputDisabledPlaceholder": "معاينة فقط",
|
||||
"chat.inputPlaceholder": "تحدث إلى {{botName}}",
|
||||
"chat.renameConversation": "إعادة تسمية المحادثة",
|
||||
"chat.resend": "إعادة إرسال",
|
||||
"chat.thinking": "يفكر...",
|
||||
"chat.thought": "فكر",
|
||||
"compliance.gdpr": "GDPR DPA",
|
||||
@ -131,42 +125,21 @@
|
||||
"compliance.sandboxUpgradeTooltip": "متاح فقط مع خطة المحترفين أو الفريق.",
|
||||
"compliance.soc2Type1": "تقرير SOC 2 النوع الأول",
|
||||
"compliance.soc2Type2": "تقرير SOC 2 النوع الثاني",
|
||||
"dataSource.add": "إضافة مصدر بيانات",
|
||||
"dataSource.configure": "تكوين",
|
||||
"dataSource.connect": "اتصال",
|
||||
"dataSource.notion.addWorkspace": "إضافة مساحة عمل",
|
||||
"dataSource.notion.changeAuthorizedPages": "تغيير الصفحات المصرح بها",
|
||||
"dataSource.notion.connected": "متصل",
|
||||
"dataSource.notion.connectedWorkspace": "مساحة العمل المتصلة",
|
||||
"dataSource.notion.description": "استخدام Notion كمصدر بيانات للمعرفة.",
|
||||
"dataSource.notion.disconnected": "غير متصل",
|
||||
"dataSource.notion.integratedAlert": "تم دمج Notion عبر بيانات الاعتماد الداخلية، ولا حاجة لإعادة التفويض.",
|
||||
"dataSource.notion.pagesAuthorized": "الصفحات المصرح بها",
|
||||
"dataSource.notion.remove": "إزالة",
|
||||
"dataSource.notion.selector.addPages": "إضافة صفحات",
|
||||
"dataSource.notion.selector.configure": "تكوين Notion",
|
||||
"dataSource.notion.selector.docs": "وثائق Notion",
|
||||
"dataSource.notion.selector.headerTitle": "اختر صفحات Notion",
|
||||
"dataSource.notion.selector.noSearchResult": "لا توجد نتائج بحث",
|
||||
"dataSource.notion.selector.pageSelected": "الصفحات المحددة",
|
||||
"dataSource.notion.selector.preview": "معاينة",
|
||||
"dataSource.notion.selector.searchPages": "بحث في الصفحات...",
|
||||
"dataSource.notion.sync": "مزامنة",
|
||||
"dataSource.notion.title": "Notion",
|
||||
"dataSource.website.active": "نشط",
|
||||
"dataSource.website.configuredCrawlers": "الزواحف المكونة",
|
||||
"dataSource.website.description": "استيراد المحتوى من المواقع الإلكترونية باستخدام زحف الويب.",
|
||||
"dataSource.website.inactive": "غير نشط",
|
||||
"dataSource.website.title": "موقع الكتروني",
|
||||
"dataSource.website.with": "مع",
|
||||
"dataSourcePage.description": "اربط مصادر بيانات خارجية لاستخدامها في قاعدة المعرفة أو Knowledge Pipeline — واجلب المحتوى من Google Drive وNotion وGitHub والمزيد.",
|
||||
"dataSourcePage.installFirst": "يرجى تثبيت مصدر بيانات أولاً.",
|
||||
"dataSourcePage.notSetUp": "غير معدّ",
|
||||
"dataSourcePage.notSetUpTitle": "<highlight>مصدر البيانات</highlight> غير معدّ",
|
||||
"datasetMenus.documents": "المستندات",
|
||||
"datasetMenus.emptyTip": "لم يتم دمج هذه المعرفة في أي تطبيق. يرجى الرجوع إلى المستند للحصول على إرشادات.",
|
||||
"datasetMenus.hitTesting": "اختبار الاسترجاع",
|
||||
"datasetMenus.noRelatedApp": "لا توجد تطبيقات مرتبطة",
|
||||
"datasetMenus.pipeline": "خط الأنابيب",
|
||||
"datasetMenus.relatedApp": "التطبيقات المرتبطة",
|
||||
"datasetMenus.settings": "الإعدادات",
|
||||
@ -181,12 +154,10 @@
|
||||
"errorBoundary.componentStack": "مكدس المكون:",
|
||||
"errorBoundary.details": "تفاصيل الخطأ (التطوير فقط)",
|
||||
"errorBoundary.errorCount": "حدث هذا الخطأ {{count}} مرة",
|
||||
"errorBoundary.fallbackTitle": "عذراً! حدث خطأ ما",
|
||||
"errorBoundary.message": "حدث خطأ غير متوقع أثناء عرض هذا المكون.",
|
||||
"errorBoundary.reloadPage": "إعادة تحميل الصفحة",
|
||||
"errorBoundary.title": "حدث خطأ ما",
|
||||
"errorBoundary.tryAgain": "حاول مجدداً",
|
||||
"errorBoundary.tryAgainCompact": "حاول مجدداً",
|
||||
"errorMsg.fieldRequired": "{{field}} مطلوب",
|
||||
"errorMsg.urlError": "يجب أن يبدأ العنوان بـ http:// أو https://",
|
||||
"extensionPage.description": "ادمج الخدمات الخارجية في تطبيقاتك باستخدام HTTP Webhooks.",
|
||||
@ -217,14 +188,8 @@
|
||||
"imageUploader.uploadFromComputerReadError": "فشل قراءة الصورة، يرجى المحاولة مرة أخرى.",
|
||||
"imageUploader.uploadFromComputerUploadError": "فشل تحميل الصورة، يرجى التحميل مرة أخرى.",
|
||||
"integrations.connect": "اتصال",
|
||||
"integrations.connected": "متصل",
|
||||
"integrations.github": "GitHub",
|
||||
"integrations.githubAccount": "تسجيل الدخول بحساب GitHub",
|
||||
"integrations.google": "Google",
|
||||
"integrations.googleAccount": "تسجيل الدخول بحساب Google",
|
||||
"label.optional": "(اختياري)",
|
||||
"language.displayLanguage": "لغة العرض",
|
||||
"language.language": "اللغة",
|
||||
"language.timezone": "المنطقة الزمنية",
|
||||
"license.expiring": "تنتهي في يوم واحد",
|
||||
"license.expiring_plural": "تنتهي في {{count}} أيام",
|
||||
@ -247,19 +212,9 @@
|
||||
"mainNav.workspace.sort.createdTime": "Created time",
|
||||
"mainNav.workspace.sort.lastOpened": "Last opened",
|
||||
"mainNav.workspace.sort.openMenu": "Sort workspaces",
|
||||
"mainNav.workspace.switchWorkspace": "تبديل مساحة العمل",
|
||||
"mcpPage.description": "اتصل بخوادم MCP وأدرها لمنح تطبيقاتك إمكانية الوصول إلى الأدوات والخدمات الخارجية.",
|
||||
"members.adminTip": "يمكنه بناء التطبيقات وإدارة إعدادات الفريق",
|
||||
"members.alreadyInTeam": "موجود بالفعل في الفريق",
|
||||
"members.alreadyInTeamTip": "هؤلاء المستخدمون لديهم بالفعل إمكانية الوصول إلى مساحة العمل هذه.",
|
||||
"members.assignRolesModal.singleDescription": "حدد دورًا واحدًا لتعيينه لهذا العضو.",
|
||||
"members.builder": "باني",
|
||||
"members.builderTip": "يمكنه بناء وتعديل تطبيقاته الخاصة",
|
||||
"members.datasetOperatorTip": "يمكنه إدارة قاعدة المعرفة فقط",
|
||||
"members.deleteMember": "حذف العضو",
|
||||
"members.disInvite": "إلغاء الدعوة",
|
||||
"members.editRole": "تعديل الدور",
|
||||
"members.editorTip": "يمكنه بناء وتعديل التطبيقات",
|
||||
"members.email": "البريد الإلكتروني",
|
||||
"members.emailInvalid": "تنسيق البريد الإلكتروني غير صالح",
|
||||
"members.emailNotSetup": "لم يتم إعداد خادم البريد الإلكتروني، لذا لا يمكن إرسال رسائل بريد إلكتروني للدعوة. يرجى إخطار المستخدمين برابط الدعوة الذي سيتم إصداره بعد الدعوة بدلاً من ذلك.",
|
||||
@ -273,24 +228,13 @@
|
||||
"members.inviteTeamMemberTip": "يمكنهم الوصول إلى بيانات فريقك مباشرة بعد تسجيل الدخول.",
|
||||
"members.invitedAsRole": "تمت الدعوة كـ {{role}}",
|
||||
"members.lastActive": "آخر نشاط",
|
||||
"members.memberDetails.assignedRole": "الدور المعيّن",
|
||||
"members.name": "الاسم",
|
||||
"members.noNewInvitationsSent": "لم يتم إرسال دعوات جديدة",
|
||||
"members.normalTip": "يمكنه استخدام التطبيقات فقط، ولا يمكنه بناء التطبيقات",
|
||||
"members.ok": "موافق",
|
||||
"members.pending": "قيد الانتظار...",
|
||||
"members.removeFromTeam": "إزالة من الفريق",
|
||||
"members.removeFromTeamConfirmDescription": "يرجى تأكيد إزالة هذا العضو. لا يمكن التراجع عن هذا الإجراء.",
|
||||
"members.removeFromTeamConfirmTitle": "إزالة {{memberName}} من الفريق",
|
||||
"members.removeFromTeamTip": "سيتم إزالة وصول الفريق",
|
||||
"members.role": "الأدوار",
|
||||
"members.roles": "الأدوار",
|
||||
"members.sendInvite": "إرسال دعوة",
|
||||
"members.setAdmin": "تعيين كمسؤول",
|
||||
"members.setBuilder": "تعيين كباني",
|
||||
"members.setEditor": "تعيين كمحرر",
|
||||
"members.setMember": "تعيين كعضو عادي",
|
||||
"members.team": "الفريق",
|
||||
"members.transferModal.codeLabel": "رمز التحقق",
|
||||
"members.transferModal.codePlaceholder": "الصق الرمز المكون من 6 أرقام",
|
||||
"members.transferModal.continue": "متابعة",
|
||||
@ -314,53 +258,19 @@
|
||||
"menus.appDetail": "تفاصيل التطبيق",
|
||||
"menus.apps": "الاستوديو",
|
||||
"menus.datasets": "المعرفة",
|
||||
"menus.datasetsTips": "قريباً: استيراد بيانات النص الخاصة بك أو كتابة البيانات في الوقت الفعلي عبر Webhook لتحسين سياق LLM.",
|
||||
"menus.deployments": "عمليات النشر",
|
||||
"menus.explore": "استكشاف",
|
||||
"menus.exploreMarketplace": "استكشاف السوق",
|
||||
"menus.newApp": "تطبيق جديد",
|
||||
"menus.newDataset": "إنشاء معرفة",
|
||||
"menus.plugins": "الإضافات",
|
||||
"menus.pluginsTips": "ادمج الإضافات الخارجية أو أنشئ إضافات AI متوافقة مع ChatGPT.",
|
||||
"menus.roster": "قائمة الوكلاء",
|
||||
"menus.status": "بيتا",
|
||||
"menus.tools": "الأدوات",
|
||||
"model.addMoreModel": "انتقل إلى الإعدادات لإضافة المزيد من النماذج",
|
||||
"model.capabilities": "قدرات متعددة الوسائط",
|
||||
"model.params.frequency_penalty": "عقوبة التردد",
|
||||
"model.params.frequency_penaltyTip": "مقدار معاقبة الرموز الجديدة بناءً على ترددها الحالي في النص حتى الآن.\nيقلل من احتمال تكرار النموذج لنفس السطر حرفيًا.",
|
||||
"model.params.maxTokenSettingTip": "إعداد الرموز القصوى الخاص بك مرتفع، مما قد يحد من المساحة للمطالبات والاستعلامات والبيانات. فكر في ضبطه أقل من 2/3.",
|
||||
"model.params.max_tokens": "أقصى رمز",
|
||||
"model.params.max_tokensTip": "يستخدم للحد من الطول الأقصى للرد، بالرموز. \nقد تحد القيم الأكبر من المساحة المتبقية للكلمات السريعة وسجلات الدردشة والمعرفة. \nيوصى بضبطه أقل من الثلثين\ngpt-4-1106-preview، gpt-4-vision-preview أقصى رمز (إدخال 128k إخراج 4k)",
|
||||
"model.params.presence_penalty": "عقوبة الحضور",
|
||||
"model.params.presence_penaltyTip": "مقدار معاقبة الرموز الجديدة بناءً على ما إذا كانت تظهر في النص حتى الآن.\nيزيد من احتمال تحدث النموذج عن مواضيع جديدة.",
|
||||
"model.params.setToCurrentModelMaxTokenTip": "يتم تحديث الحد الأقصى للرموز إلى 80٪ من الحد الأقصى لرموز النموذج الحالي {{maxToken}}.",
|
||||
"model.params.stop_sequences": "تسلسلات التوقف",
|
||||
"model.params.stop_sequencesPlaceholder": "أدخل التسلسل واضغط على Tab",
|
||||
"model.params.stop_sequencesTip": "ما يصل إلى أربعة تسلسلات حيث ستتوقف API عن توليد المزيد من الرموز. لن يحتوي النص المرتجع على تسلسل التوقف.",
|
||||
"model.params.temperature": "درجة الحرارة",
|
||||
"model.params.temperatureTip": "تتحكم في العشوائية: يؤدي التخفيض إلى إكمالات أقل عشوائية. مع اقتراب درجة الحرارة من الصفر، سيصبح النموذج حتميًا ومتكررًا.",
|
||||
"model.params.top_p": "أعلى P",
|
||||
"model.params.top_pTip": "تتحكم في التنوع عبر عينات النواة: 0.5 تعني أنه يتم النظر في نصف جميع الخيارات المرجحة للاحتمالية.",
|
||||
"model.settingsLink": "إعدادات مزود النموذج",
|
||||
"model.tone.Balanced": "متوازن",
|
||||
"model.tone.Creative": "إبداعي",
|
||||
"model.tone.Custom": "مخصص",
|
||||
"model.tone.Precise": "دقيق",
|
||||
"modelName.claude-2": "Claude-2",
|
||||
"modelName.claude-instant-1": "Claude-Instant",
|
||||
"modelName.gpt-3.5-turbo": "GPT-3.5-Turbo",
|
||||
"modelName.gpt-3.5-turbo-16k": "GPT-3.5-Turbo-16K",
|
||||
"modelName.gpt-4": "GPT-4",
|
||||
"modelName.gpt-4-32k": "GPT-4-32K",
|
||||
"modelName.text-davinci-003": "Text-Davinci-003",
|
||||
"modelName.text-embedding-ada-002": "Text-Embedding-Ada-002",
|
||||
"modelName.whisper-1": "Whisper-1",
|
||||
"modelProvider.addApiKey": "أضف مفتاح API الخاص بك",
|
||||
"modelProvider.addConfig": "إضافة تكوين",
|
||||
"modelProvider.addModel": "إضافة نموذج",
|
||||
"modelProvider.addMoreModelProvider": "أضف المزيد من مزودي النماذج",
|
||||
"modelProvider.apiKey": "مفتاح API",
|
||||
"modelProvider.apiKeyRateLimit": "تم الوصول إلى حد المعدل، متاح بعد {{seconds}} ثانية",
|
||||
"modelProvider.apiKeyStatusNormal": "حالة مفتاح API طبيعية",
|
||||
"modelProvider.auth.addApiKey": "إضافة مفتاح API",
|
||||
@ -369,7 +279,6 @@
|
||||
"modelProvider.auth.addModelCredential": "إضافة بيانات اعتماد النموذج",
|
||||
"modelProvider.auth.addNewModel": "إضافة نموذج جديد",
|
||||
"modelProvider.auth.addNewModelCredential": "إضافة بيانات اعتماد نموذج جديدة",
|
||||
"modelProvider.auth.apiKeyModal.addModel": "إضافة نموذج",
|
||||
"modelProvider.auth.apiKeyModal.desc": "بعد تكوين بيانات الاعتماد، يمكن لجميع الأعضاء داخل مساحة العمل استخدام هذا النموذج عند تنظيم التطبيقات.",
|
||||
"modelProvider.auth.apiKeyModal.title": "تكوين تفويض مفتاح API",
|
||||
"modelProvider.auth.apiKeys": "مفاتيح API",
|
||||
@ -390,17 +299,12 @@
|
||||
"modelProvider.auth.selectModelCredential": "تحديد بيانات اعتماد النموذج",
|
||||
"modelProvider.auth.specifyModelCredential": "تحديد بيانات اعتماد النموذج",
|
||||
"modelProvider.auth.specifyModelCredentialTip": "استخدم بيانات اعتماد نموذج مكونة.",
|
||||
"modelProvider.auth.unAuthorized": "غير مصرح به",
|
||||
"modelProvider.buyQuota": "شراء حصة",
|
||||
"modelProvider.callTimes": "أوقات الاتصال",
|
||||
"modelProvider.card.aiCreditsInUse": "أرصدة الذكاء الاصطناعي قيد الاستخدام",
|
||||
"modelProvider.card.aiCreditsOption": "أرصدة الذكاء الاصطناعي",
|
||||
"modelProvider.card.apiKeyOption": "مفتاح API",
|
||||
"modelProvider.card.apiKeyRequired": "مفتاح API مطلوب",
|
||||
"modelProvider.card.apiKeyUnavailableFallback": "مفتاح API غير متاح، يتم الآن استخدام أرصدة الذكاء الاصطناعي",
|
||||
"modelProvider.card.apiKeyUnavailableFallbackDescription": "تحقق من تكوين مفتاح API الخاص بك للتبديل مرة أخرى",
|
||||
"modelProvider.card.buyQuota": "شراء حصة",
|
||||
"modelProvider.card.callTimes": "أوقات الاتصال",
|
||||
"modelProvider.card.creditsExhaustedDescription": "يرجى <upgradeLink>ترقية خطتك</upgradeLink> أو تكوين مفتاح API",
|
||||
"modelProvider.card.creditsExhaustedFallback": "نفدت أرصدة الذكاء الاصطناعي، يتم الآن استخدام مفتاح API",
|
||||
"modelProvider.card.creditsExhaustedFallbackDescription": "<upgradeLink>قم بترقية خطتك</upgradeLink> لاستئناف أولوية أرصدة الذكاء الاصطناعي.",
|
||||
@ -412,32 +316,17 @@
|
||||
"modelProvider.card.noApiKeysFallback": "لا توجد مفاتيح API، يتم استخدام أرصدة الذكاء الاصطناعي بدلاً من ذلك",
|
||||
"modelProvider.card.noApiKeysTitle": "لم يتم تكوين أي مفاتيح API بعد",
|
||||
"modelProvider.card.noAvailableUsage": "لا يوجد استخدام متاح",
|
||||
"modelProvider.card.onTrial": "في التجربة",
|
||||
"modelProvider.card.paid": "مدفوع",
|
||||
"modelProvider.card.priorityUse": "أولوية الاستخدام",
|
||||
"modelProvider.card.quota": "حصة",
|
||||
"modelProvider.card.quotaExhausted": "نفدت الحصة",
|
||||
"modelProvider.card.removeKey": "إزالة مفتاح API",
|
||||
"modelProvider.card.tip": "تدعم أرصدة الرسائل نماذج من {{modelNames}}. ستعطى الأولوية للحصة المدفوعة. سيتم استخدام الحصة المجانية بعد نفاد الحصة المدفوعة.",
|
||||
"modelProvider.card.tokens": "رموز",
|
||||
"modelProvider.card.unavailable": "غير متاح",
|
||||
"modelProvider.card.upgradePlan": "ترقية خطتك",
|
||||
"modelProvider.card.usageLabel": "الاستخدام",
|
||||
"modelProvider.card.usagePriority": "أولوية الاستخدام",
|
||||
"modelProvider.card.usagePriorityTip": "تعيين المورد الذي يجب استخدامه أولاً عند تشغيل النماذج.",
|
||||
"modelProvider.collapse": "طي",
|
||||
"modelProvider.config": "تكوين",
|
||||
"modelProvider.configLoadBalancing": "تكوين موازنة التحميل",
|
||||
"modelProvider.configureTip": "قم بإعداد مفتاح api أو أضف نموذجًا للاستخدام",
|
||||
"modelProvider.configuredProviders": "Configured providers",
|
||||
"modelProvider.confirmDelete": "تأكيد الحذف؟",
|
||||
"modelProvider.credits": "أرصدة الرسائل",
|
||||
"modelProvider.creditsBackedProviders": "Available with Message Credits",
|
||||
"modelProvider.creditsBackedProvidersDesc": "These providers work with your Message Credits — no API key needed.",
|
||||
"modelProvider.defaultConfig": "التكوين الافتراضي",
|
||||
"modelProvider.deprecated": "مهمل",
|
||||
"modelProvider.discoverMore": "اكتشف المزيد في ",
|
||||
"modelProvider.editConfig": "تعديل التكوين",
|
||||
"modelProvider.embeddingModel.key": "نموذج التضمين",
|
||||
"modelProvider.embeddingModel.required": "نموذج التضمين مطلوب",
|
||||
"modelProvider.embeddingModel.tip": "تعيين النموذج الافتراضي لمعالجة تضمين المستندات للمعرفة، حيث يستخدم كل من استرجاع واستيراد المعرفة نموذج التضمين هذا لمعالجة التوجيه. سيؤدي التبديل إلى أن يكون البعد المتجه بين المعرفة المستوردة والسؤال غير متسق، مما يؤدي إلى فشل الاسترجاع. لتجنب فشل الاسترجاع، يرجى عدم تبديل هذا النموذج حسب الرغبة.",
|
||||
@ -447,43 +336,28 @@
|
||||
"modelProvider.encrypted.back": ".",
|
||||
"modelProvider.encrypted.front": "سيتم تشفير مفتاح API الخاص بك وتخزينه باستخدام تقنية",
|
||||
"modelProvider.featureSupported": "{{feature}} مدعوم",
|
||||
"modelProvider.freeQuota.howToEarn": "كيف تكسب",
|
||||
"modelProvider.getFreeTokens": "احصل على رموز مجانية",
|
||||
"modelProvider.installDataSource": "تثبيت مصدر بيانات",
|
||||
"modelProvider.installDataSourceProvider": "تثبيت مزودي مصادر البيانات",
|
||||
"modelProvider.installProvider": "تثبيت مزودي النماذج",
|
||||
"modelProvider.invalidApiKey": "مفتاح API غير صالح",
|
||||
"modelProvider.item.deleteDesc": "يتم استخدام {{modelName}} كنماذج تفكير النظام. لن تكون بعض الوظائف متاحة بعد الإزالة. يرجى التأكيد.",
|
||||
"modelProvider.item.freeQuota": "حصة مجانية",
|
||||
"modelProvider.learnMore": "Learn more",
|
||||
"modelProvider.loadBalancing": "موازنة التحميل",
|
||||
"modelProvider.loadBalancingDescription": "تكوين بيانات اعتماد متعددة للنموذج واستدعاؤها تلقائيًا. ",
|
||||
"modelProvider.loadBalancingHeadline": "موازنة التحميل",
|
||||
"modelProvider.loadBalancingInfo": "بشكل افتراضي، تستخدم موازنة التحميل استراتيجية Round-robin. إذا تم تشغيل تحديد المعدل، فسيتم تطبيق فترة تباطؤ مدتها دقيقة واحدة.",
|
||||
"modelProvider.loadBalancingLeastKeyWarning": "لتمكين موازنة التحميل، يجب تمكين مفتاحين على الأقل.",
|
||||
"modelProvider.loadPresets": "تحميل الإعدادات المسبقة",
|
||||
"modelProvider.model": "النموذج",
|
||||
"modelProvider.modelAndParameters": "النموذج والمعلمات",
|
||||
"modelProvider.modelHasBeenDeprecated": "تم إهمال هذا النموذج",
|
||||
"modelProvider.modelSettings": "إعدادات النموذج",
|
||||
"modelProvider.models": "النماذج",
|
||||
"modelProvider.modelsNum": "{{num}} نماذج",
|
||||
"modelProvider.noModelFound": "لم يتم العثور على نموذج لـ {{model}}",
|
||||
"modelProvider.noneConfigured": "قم بتكوين نموذج نظام افتراضي لتشغيل التطبيقات",
|
||||
"modelProvider.notConfigured": "لم يتم تكوين نموذج النظام بالكامل بعد",
|
||||
"modelProvider.pageDesc": "Choose a language model to power your apps. You need at least one configured before building in Studio.",
|
||||
"modelProvider.parameters": "المعلمات",
|
||||
"modelProvider.parametersInvalidRemoved": "بعض المعلمات غير صالحة وتمت إزالتها",
|
||||
"modelProvider.priorityUsing": "أولوية الاستخدام",
|
||||
"modelProvider.providerManaged": "مدار من قبل المزود",
|
||||
"modelProvider.providerManagedDescription": "استخدم مجموعة واحدة من بيانات الاعتماد المقدمة من مزود النموذج.",
|
||||
"modelProvider.quota": "حصة",
|
||||
"modelProvider.quotaLabel": "QUOTA",
|
||||
"modelProvider.quotaTip": "الرموز المجانية المتاحة المتبقية",
|
||||
"modelProvider.rerankModel.key": "نموذج إعادة الترتيب",
|
||||
"modelProvider.rerankModel.tip": "سيعيد نموذج إعادة الترتيب ترتيب قائمة المستندات المرشحة بناءً على المطابقة الدلالية مع استعلام المستخدم، مما يحسن نتائج الترتيب الدلالي",
|
||||
"modelProvider.resetDate": "إعادة التعيين في {{date}}",
|
||||
"modelProvider.searchModel": "نموذج البحث",
|
||||
"modelProvider.searchModels": "البحث في النماذج...",
|
||||
"modelProvider.selectModel": "اختر نموذجك",
|
||||
"modelProvider.selector.aiCredits": "أرصدة الذكاء الاصطناعي",
|
||||
@ -495,8 +369,6 @@
|
||||
"modelProvider.selector.creditsExhaustedTip": "نفدت أرصدة الذكاء الاصطناعي الخاصة بك. يرجى ترقية خطتك أو إضافة مفتاح API.",
|
||||
"modelProvider.selector.disabled": "معطل",
|
||||
"modelProvider.selector.discoverMoreInMarketplace": "اكتشف المزيد في السوق",
|
||||
"modelProvider.selector.emptySetting": "يرجى الانتقال إلى الإعدادات للتكوين",
|
||||
"modelProvider.selector.emptyTip": "لا توجد نماذج متاحة",
|
||||
"modelProvider.selector.fromMarketplace": "من السوق",
|
||||
"modelProvider.selector.incompatible": "غير متوافق",
|
||||
"modelProvider.selector.incompatibleTip": "هذا النموذج غير متاح في الإصدار الحالي. يرجى تحديد نموذج متاح آخر.",
|
||||
@ -506,11 +378,7 @@
|
||||
"modelProvider.selector.noProviderConfigured": "لم يتم تكوين أي مزود نموذج",
|
||||
"modelProvider.selector.noProviderConfiguredDesc": "تصفح السوق لتثبيت مزود، أو قم بتكوين المزودين في الإعدادات.",
|
||||
"modelProvider.selector.onlyCompatibleModelsShown": "يتم عرض النماذج المتوافقة فقط",
|
||||
"modelProvider.selector.rerankTip": "يرجى إعداد نموذج إعادة الترتيب",
|
||||
"modelProvider.selector.tip": "تمت إزالة هذا النموذج. يرجى إضافة نموذج أو تحديد نموذج آخر.",
|
||||
"modelProvider.setupModelFirst": "يرجى إعداد نموذجك أولاً",
|
||||
"modelProvider.showModels": "عرض النماذج",
|
||||
"modelProvider.showMoreModelProvider": "عرض المزيد من مزودي النماذج",
|
||||
"modelProvider.speechToTextModel.key": "نموذج تحويل الكلام إلى نص",
|
||||
"modelProvider.speechToTextModel.tip": "تعيين النموذج الافتراضي لإدخال تحويل الكلام إلى نص في المحادثة.",
|
||||
"modelProvider.systemModelSettings": "إعدادات نموذج النظام",
|
||||
@ -541,7 +409,6 @@
|
||||
"operation.create": "إنشاء",
|
||||
"operation.deSelectAll": "إلغاء تحديد الكل",
|
||||
"operation.delete": "حذف",
|
||||
"operation.deleteApp": "حذف التطبيق",
|
||||
"operation.deleteConfirmTitle": "حذف؟",
|
||||
"operation.download": "تنزيل",
|
||||
"operation.downloadFailed": "فشل التنزيل. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
@ -551,18 +418,15 @@
|
||||
"operation.exporting": "جارٍ التصدير",
|
||||
"operation.fill": "ملء تلقائي",
|
||||
"operation.format": "تنسيق",
|
||||
"operation.getForFree": "احصل عليه مجانا",
|
||||
"operation.imageCopied": "تم نسخ الصورة",
|
||||
"operation.imageDownloaded": "تم تنزيل الصورة",
|
||||
"operation.in": "في",
|
||||
"operation.learnMore": "تعرف على المزيد",
|
||||
"operation.lineBreak": "فاصل أسطر",
|
||||
"operation.log": "سجل",
|
||||
"operation.more": "المزيد",
|
||||
"operation.no": "لا",
|
||||
"operation.noSearchCount": "0 {{content}}",
|
||||
"operation.noSearchResults": "لم يتم العثور على {{content}}",
|
||||
"operation.now": "الآن",
|
||||
"operation.ok": "موافق",
|
||||
"operation.openInNewTab": "فتح في علامة تبويب جديدة",
|
||||
"operation.params": "معلمات",
|
||||
@ -570,7 +434,6 @@
|
||||
"operation.play": "تشغيل",
|
||||
"operation.refresh": "إعادة تشغيل",
|
||||
"operation.regenerate": "إعادة إنشاء",
|
||||
"operation.reload": "إعادة تحميل",
|
||||
"operation.remove": "إزالة",
|
||||
"operation.rename": "إعادة تسمية",
|
||||
"operation.reset": "إعادة تعيين",
|
||||
@ -586,7 +449,6 @@
|
||||
"operation.selectCount": "تم تحديد {{count}}",
|
||||
"operation.send": "إرسال",
|
||||
"operation.settings": "الإعدادات",
|
||||
"operation.setup": "إعداد",
|
||||
"operation.skip": "تخطي",
|
||||
"operation.submit": "إرسال",
|
||||
"operation.sure": "أنا متأكد",
|
||||
@ -607,93 +469,37 @@
|
||||
"placeholder.input": "يرجى الإدخال",
|
||||
"placeholder.search": "بحث...",
|
||||
"placeholder.select": "يرجى التحديد",
|
||||
"promptEditor.context.item.desc": "إدراج قالب السياق",
|
||||
"promptEditor.context.item.title": "السياق",
|
||||
"promptEditor.context.modal.add": "إضافة سياق ",
|
||||
"promptEditor.context.modal.footer": "يمكنك إدارة السياقات في قسم السياق أدناه.",
|
||||
"promptEditor.context.modal.title": "{{num}} معرفة في السياق",
|
||||
"promptEditor.existed": "موجود بالفعل في المطالبة",
|
||||
"promptEditor.history.item.desc": "إدراج قالب الرسالة التاريخية",
|
||||
"promptEditor.history.item.title": "سجل المحادثة",
|
||||
"promptEditor.history.modal.assistant": "مرحبًا! كيف يمكنني مساعدتك اليوم؟",
|
||||
"promptEditor.history.modal.edit": "تعديل أسماء أدوار المحادثة",
|
||||
"promptEditor.history.modal.title": "مثال",
|
||||
"promptEditor.history.modal.user": "مرحبًا",
|
||||
"promptEditor.placeholder": "اكتب كلمة المطالبة هنا، أدخل '{' لإدراج متغير، أدخل '/' لإدراج كتلة محتوى مطالبة",
|
||||
"promptEditor.query.item.desc": "إدراج قالب استعلام المستخدم",
|
||||
"promptEditor.query.item.title": "استعلام",
|
||||
"promptEditor.requestURL.item.desc": "إدراج عنوان URL للطلب",
|
||||
"promptEditor.requestURL.item.title": "عنوان URL للطلب",
|
||||
"promptEditor.variable.item.desc": "إدراج المتغيرات والأدوات الخارجية",
|
||||
"promptEditor.variable.item.title": "المتغيرات والأدوات الخارجية",
|
||||
"promptEditor.variable.modal.add": "متغير جديد",
|
||||
"promptEditor.variable.modal.addTool": "أداة جديدة",
|
||||
"promptEditor.variable.outputToolDisabledItem.desc": "إدراج المتغيرات",
|
||||
"promptEditor.variable.outputToolDisabledItem.title": "المتغيرات",
|
||||
"provider.addKey": "إضافة مفتاح",
|
||||
"provider.anthropic.enableTip": "لتمكين نموذج Anthropic، تحتاج إلى الارتباط بـ OpenAI أو خدمة Azure OpenAI أولاً.",
|
||||
"provider.anthropic.keyFrom": "احصل على مفتاح API الخاص بك من Anthropic",
|
||||
"provider.anthropic.notEnabled": "غير ممكن",
|
||||
"provider.anthropic.using": "قدرة التضمين تستخدم",
|
||||
"provider.anthropicHosted.anthropicHosted": "Anthropic Claude",
|
||||
"provider.anthropicHosted.callTimes": "أوقات الاتصال",
|
||||
"provider.anthropicHosted.close": "إغلاق",
|
||||
"provider.anthropicHosted.desc": "نموذج قوي يتفوق في مجموعة واسعة من المهام من الحوار المعقد وإنشاء المحتوى الإبداعي إلى التعليمات التفصيلية.",
|
||||
"provider.anthropicHosted.exhausted": "نفدت الحصة",
|
||||
"provider.anthropicHosted.onTrial": "في التجربة",
|
||||
"provider.anthropicHosted.trialQuotaTip": "ستنتهي حصة التجربة الخاصة بك في Anthropic في 2025/03/17 ولن تكون متاحة بعد ذلك. يرجى الاستفادة منها في الوقت المحدد.",
|
||||
"provider.anthropicHosted.useYourModel": "تستخدم حاليًا مزود النموذج الخاص بك.",
|
||||
"provider.anthropicHosted.usedUp": "نفدت حصة التجربة. أضف مزود النموذج الخاص بك.",
|
||||
"provider.apiKey": "مفتاح API",
|
||||
"provider.apiKeyExceedBill": "لا يحتوي مفتاح API هذا على حصة متاحة، يرجى القراءة",
|
||||
"provider.azure.apiBase": "قاعدة API",
|
||||
"provider.azure.apiBasePlaceholder": "عنوان URL لقاعدة API لنقطة نهاية Azure OpenAI الخاصة بك.",
|
||||
"provider.azure.apiKey": "مفتاح API",
|
||||
"provider.azure.apiKeyPlaceholder": "أدخل مفتاح API الخاص بك هنا",
|
||||
"provider.azure.helpTip": "تعلم خدمة Azure OpenAI",
|
||||
"provider.comingSoon": "قريباً",
|
||||
"provider.editKey": "تعديل",
|
||||
"provider.encrypted.back": ".",
|
||||
"provider.encrypted.front": "سيتم تشفير مفتاح API الخاص بك وتخزينه باستخدام تقنية",
|
||||
"provider.enterYourKey": "أدخل مفتاح API الخاص بك هنا",
|
||||
"provider.invalidApiKey": "مفتاح API غير صالح",
|
||||
"provider.invalidKey": "مفتاح OpenAI API غير صالح",
|
||||
"provider.openaiHosted.callTimes": "أوقات الاتصال",
|
||||
"provider.openaiHosted.close": "إغلاق",
|
||||
"provider.openaiHosted.desc": "تسمح لك خدمة استضافة OpenAI المقدمة من Dify باستخدام نماذج مثل GPT-3.5. قبل نفاد حصة التجربة الخاصة بك، تحتاج إلى إعداد موفري نماذج آخرين.",
|
||||
"provider.openaiHosted.exhausted": "نفدت الحصة",
|
||||
"provider.openaiHosted.onTrial": "في التجربة",
|
||||
"provider.openaiHosted.openaiHosted": "OpenAI المستضافة",
|
||||
"provider.openaiHosted.useYourModel": "تستخدم حاليًا مزود النموذج الخاص بك.",
|
||||
"provider.openaiHosted.usedUp": "نفدت حصة التجربة. أضف مزود النموذج الخاص بك.",
|
||||
"provider.saveFailed": "فشل حفظ مفتاح api",
|
||||
"provider.validatedError": "فشل التحقق: ",
|
||||
"provider.validating": "جارٍ التحقق من المفتاح...",
|
||||
"settings.account": "حسابي",
|
||||
"settings.accountGroup": "عام",
|
||||
"settings.agentStrategy": "Agent strategy",
|
||||
"settings.billing": "الفوترة",
|
||||
"settings.collapse": "Collapse",
|
||||
"settings.customEndpoint": "نقطة نهاية مخصصة",
|
||||
"settings.customTool": "Custom Tool",
|
||||
"settings.dataSource": "مصدر البيانات",
|
||||
"settings.discoverMoreIntegrationsInMarketplace": "اكتشف المزيد من التكاملات في السوق",
|
||||
"settings.expand": "Expand",
|
||||
"settings.extension": "Extension",
|
||||
"settings.filter": "Filter",
|
||||
"settings.generalGroup": "عام",
|
||||
"settings.integrations": "التكاملات",
|
||||
"settings.language": "اللغة",
|
||||
"settings.members": "الأعضاء",
|
||||
"settings.plugin": "الإضافات",
|
||||
"settings.preferences": "Preferences",
|
||||
"settings.provider": "مزود النموذج",
|
||||
"settings.settings": "Settings",
|
||||
"settings.swaggerAPIAsTool": "Swagger API as Tool",
|
||||
"settings.trigger": "Trigger",
|
||||
"settings.workplaceGroup": "مساحة العمل",
|
||||
"settings.workspace": "WORKSPACE",
|
||||
"settings.workspaceSettings": "إعدادات مساحة العمل",
|
||||
"swaggerAPIAsToolPage.description": "استورد أي API كأداة باستخدام مواصفات OpenAPI/Swagger. اضبطها مرة واحدة وأعد استخدامها عبر workflows.",
|
||||
"tag.addNew": "إضافة علامة جديدة",
|
||||
"tag.addTag": "إضافة علامات",
|
||||
@ -701,11 +507,9 @@
|
||||
"tag.created": "تم إنشاء العلامة بنجاح",
|
||||
"tag.delete": "حذف العلامة",
|
||||
"tag.deleteTip": "العلامة قيد الاستخدام، هل تريد حذفها؟",
|
||||
"tag.editTag": "تعديل العلامات",
|
||||
"tag.failed": "فشل إنشاء العلامة",
|
||||
"tag.manageTags": "إدارة العلامات",
|
||||
"tag.noTag": "لا توجد علامات",
|
||||
"tag.noTagYet": "لا توجد علامات بعد",
|
||||
"tag.placeholder": "العلامات",
|
||||
"tag.selectorPlaceholder": "اكتب للبحث أو الإنشاء",
|
||||
"tag.tags": "العلامات",
|
||||
@ -721,7 +525,6 @@
|
||||
"userProfile.community": "المجتمع",
|
||||
"userProfile.compliance": "الامتثال",
|
||||
"userProfile.contactUs": "اتصل بنا",
|
||||
"userProfile.createWorkspace": "إنشاء مساحة عمل",
|
||||
"userProfile.emailSupport": "دعم البريد الإلكتروني",
|
||||
"userProfile.forum": "المنتدى",
|
||||
"userProfile.github": "GitHub",
|
||||
@ -729,7 +532,6 @@
|
||||
"userProfile.logout": "تسجيل الخروج",
|
||||
"userProfile.roadmap": "خارطة الطريق",
|
||||
"userProfile.settings": "الإعدادات",
|
||||
"userProfile.support": "دعم",
|
||||
"userProfile.workspace": "مساحة العمل",
|
||||
"voice.language.arTN": "العربية التونسية",
|
||||
"voice.language.deDE": "الألمانية",
|
||||
|
||||
@ -1,6 +1,4 @@
|
||||
{
|
||||
"app.changeLogoTip": "تنسيق SVG أو PNG بحجم أدنى 80x80px",
|
||||
"app.title": "تخصيص العلامة التجارية لرأس التطبيق",
|
||||
"apply": "تطبيق",
|
||||
"change": "تغيير",
|
||||
"custom": "تخصيص",
|
||||
@ -9,14 +7,11 @@
|
||||
"customize.suffix": "للترقية إلى إصدار Enterprise.",
|
||||
"restore": "استعادة الافتراضيات",
|
||||
"upgradeTip.des": "قم بترقية خطتك لتخصيص علامتك التجارية",
|
||||
"upgradeTip.prefix": "قم بترقية خطتك لـ",
|
||||
"upgradeTip.suffix": "تخصيص علامتك التجارية.",
|
||||
"upgradeTip.title": "تحديث خطتك",
|
||||
"upload": "تحميل",
|
||||
"uploadedFail": "فشل تحميل الصورة، يرجى إعادة التحميل.",
|
||||
"uploading": "جاري التحميل",
|
||||
"webapp.changeLogo": "تغيير صورة Powered by Brand",
|
||||
"webapp.changeLogoTip": "تنسيق SVG أو PNG بحجم أدنى 40x40px",
|
||||
"webapp.removeBrand": "إزالة Powered by Dify",
|
||||
"webapp.title": "تخصيص العلامة التجارية لتطبيق الويب"
|
||||
"webapp.removeBrand": "إزالة Powered by Dify"
|
||||
}
|
||||
|
||||
@ -1,16 +1,6 @@
|
||||
{
|
||||
"error.unavailable": "هذه المعرفة غير متاحة",
|
||||
"firecrawl.apiKeyPlaceholder": "مفتاح API من firecrawl.dev",
|
||||
"firecrawl.configFirecrawl": "تكوين 🔥Firecrawl",
|
||||
"firecrawl.getApiKeyLinkText": "احصل على مفتاح API الخاص بك من firecrawl.dev",
|
||||
"jinaReader.apiKeyPlaceholder": "مفتاح API من jina.ai",
|
||||
"jinaReader.configJinaReader": "تكوين Jina Reader",
|
||||
"jinaReader.getApiKeyLinkText": "احصل على مفتاح API المجاني الخاص بك في jina.ai",
|
||||
"otherDataSource.description": "حاليًا، تحتوي قاعدة معرفة Dify فقط على مصادر بيانات محدودة. تعد المساهمة بمصدر بيانات في قاعدة معرفة Dify طريقة رائعة للمساعدة في تعزيز مرونة النظام الأساسي وقوته لجميع المستخدمين. دليل المساهمة الخاص بنا يسهل البدء. يرجى النقر على الرابط أدناه لمعرفة المزيد.",
|
||||
"otherDataSource.learnMore": "تعرف على المزيد",
|
||||
"otherDataSource.title": "الاتصال بمصادر بيانات أخرى؟",
|
||||
"stepOne.button": "التالي",
|
||||
"stepOne.cancel": "إلغاء",
|
||||
"stepOne.connect": "الذهاب للاتصال",
|
||||
"stepOne.dataSourceType.file": "استيراد من ملف",
|
||||
"stepOne.dataSourceType.notion": "مزامنة من Notion",
|
||||
@ -32,7 +22,6 @@
|
||||
"stepOne.uploader.browse": "تصفح",
|
||||
"stepOne.uploader.button": "اسحب وأفلت الملف أو المجلد، أو",
|
||||
"stepOne.uploader.buttonSingleFile": "اسحب وأفلت الملف، أو",
|
||||
"stepOne.uploader.cancel": "إلغاء",
|
||||
"stepOne.uploader.change": "تغيير",
|
||||
"stepOne.uploader.failed": "فشل التحميل",
|
||||
"stepOne.uploader.tip": "يدعم {{supportTypes}}. بحد أقصى {{batchCount}} في الدفعة الواحدة و {{size}} ميجابايت لكل منها.",
|
||||
@ -57,7 +46,6 @@
|
||||
"stepOne.website.firecrawlTitle": "استخراج محتوى الويب باستخدام 🔥Firecrawl",
|
||||
"stepOne.website.includeOnlyPaths": "تضمين المسارات فقط",
|
||||
"stepOne.website.jinaReaderDoc": "تعرف على المزيد حول Jina Reader",
|
||||
"stepOne.website.jinaReaderDocLink": "https://jina.ai/reader",
|
||||
"stepOne.website.jinaReaderNotConfigured": "Jina Reader غير مكون",
|
||||
"stepOne.website.jinaReaderNotConfiguredDescription": "قم بإعداد Jina Reader عن طريق إدخال مفتاح API المجاني للوصول.",
|
||||
"stepOne.website.jinaReaderTitle": "تحويل الموقع بالكامل إلى Markdown",
|
||||
@ -85,34 +73,15 @@
|
||||
"stepThree.creationContent": "قمنا بتسمية المعرفة تلقائيًا، يمكنك تعديلها في أي وقت.",
|
||||
"stepThree.creationTitle": "🎉 تم إنشاء المعرفة",
|
||||
"stepThree.label": "اسم المعرفة",
|
||||
"stepThree.modelButtonCancel": "إلغاء",
|
||||
"stepThree.modelButtonConfirm": "تأكيد",
|
||||
"stepThree.modelContent": "إذا كنت بحاجة إلى استئناف المعالجة لاحقًا، فستستمر من حيث توقفت.",
|
||||
"stepThree.modelTitle": "هل أنت متأكد من إيقاف التضمين؟",
|
||||
"stepThree.navTo": "الذهاب إلى المستند",
|
||||
"stepThree.resume": "استئناف المعالجة",
|
||||
"stepThree.sideTipContent": "بعد الانتهاء من فهرسة المستندات، يمكنك إدارة المستندات وتعديلها، وتشغيل اختبارات الاسترجاع، وتعديل إعدادات المعرفة. يمكن بعد ذلك دمج المعرفة في تطبيقك كسياق، لذا تأكد من ضبط إعداد الاسترجاع لضمان الأداء الأمثل.",
|
||||
"stepThree.sideTipTitle": "ما التالي",
|
||||
"stepThree.stop": "إيقاف المعالجة",
|
||||
"stepTwo.QALanguage": "التقسيم باستخدام",
|
||||
"stepTwo.QATip": "سيؤدي تمكين هذا الخيار إلى استهلاك المزيد من الرموز",
|
||||
"stepTwo.QATitle": "التقسيم بتنسيق سؤال وجواب",
|
||||
"stepTwo.auto": "تلقائي",
|
||||
"stepTwo.autoDescription": "تحديد القواعد والتقطيع والمعالجة المسبقة تلقائيًا. يوصى به للمستخدمين غير المألوفين.",
|
||||
"stepTwo.calculating": "جارٍ الحساب...",
|
||||
"stepTwo.cancel": "إلغاء",
|
||||
"stepTwo.characters": "أحرف",
|
||||
"stepTwo.childChunkForRetrieval": "القطعة الفرعية للاسترجاع",
|
||||
"stepTwo.click": "الذهاب إلى الإعدادات",
|
||||
"stepTwo.custom": "مخصص",
|
||||
"stepTwo.customDescription": "تخصيص قواعد القطع وطول القطع وقواعد المعالجة المسبقة، إلخ.",
|
||||
"stepTwo.datasetSettingLink": "إعدادات المعرفة.",
|
||||
"stepTwo.economical": "اقتصادي",
|
||||
"stepTwo.economicalTip": "استخدام 10 كلمات رئيسية لكل قطعة للاسترجاع، لا يتم استهلاك أي رموز على حساب تقليل دقة الاسترجاع.",
|
||||
"stepTwo.estimateCost": "تقدير",
|
||||
"stepTwo.estimateSegment": "القطع المقدرة",
|
||||
"stepTwo.fileSource": "معالجة المستندات مسبقًا",
|
||||
"stepTwo.fileUnit": " ملفات",
|
||||
"stepTwo.fullDoc": "مستند كامل",
|
||||
"stepTwo.fullDocTip": "يتم استخدام المستند بأكمله كقطعة أصلية ويتم استرجاعه مباشرة. يرجى ملاحظة أنه لأسباب تتعلق بالأداء، سيتم اقتطاع النص الذي يتجاوز 10000 رمز تلقائيًا.",
|
||||
"stepTwo.general": "عام",
|
||||
@ -125,9 +94,6 @@
|
||||
"stepTwo.nextStep": "حفظ ومعالجة",
|
||||
"stepTwo.notAvailableForParentChild": "غير متاح لفهرس الأصل والطفل",
|
||||
"stepTwo.notAvailableForQA": "غير متاح لفهرس الأسئلة والأجوبة",
|
||||
"stepTwo.notionSource": "معالجة الصفحات مسبقًا",
|
||||
"stepTwo.notionUnit": " صفحات",
|
||||
"stepTwo.other": "وغيرها ",
|
||||
"stepTwo.overlap": "تداخل القطعة",
|
||||
"stepTwo.overlapCheck": "يجب ألا يكون تداخل القطعة أكبر من أقصى طول للقطعة",
|
||||
"stepTwo.overlapTip": "يمكن أن يؤدي تعيين تداخل القطعة إلى الحفاظ على الصلة الدلالية بينها، مما يعزز تأثير الاسترجاع. يوصى بتعيين 10٪ -25٪ من الحد الأقصى لحجم القطعة.",
|
||||
@ -139,14 +105,9 @@
|
||||
"stepTwo.parentChildTip": "عند استخدام وضع الأصل والطفل، يتم استخدام القطعة الفرعية للاسترجاع ويتم استخدام القطعة الأصلية للاستدعاء كسياق.",
|
||||
"stepTwo.parentChunkForContext": "القطعة الأصلية للسياق",
|
||||
"stepTwo.preview": "معاينة",
|
||||
"stepTwo.previewButton": "التبديل إلى تنسيق سؤال وجواب",
|
||||
"stepTwo.previewChunk": "معاينة القطعة",
|
||||
"stepTwo.previewChunkCount": "{{count}} قطعة مقدرة",
|
||||
"stepTwo.previewChunkTip": "انقر فوق زر \"معاينة القطعة\" على اليسار لتحميل المعاينة",
|
||||
"stepTwo.previewSwitchTipEnd": " استهلاك رموز إضافية",
|
||||
"stepTwo.previewSwitchTipStart": "معاينة القطعة الحالية بتنسيق نصي، وسيؤدي التبديل إلى معاينة تنسيق سؤال وجواب إلى",
|
||||
"stepTwo.previewTitle": "معاينة",
|
||||
"stepTwo.previewTitleButton": "معاينة",
|
||||
"stepTwo.previousStep": "الخطوة السابقة",
|
||||
"stepTwo.qaSwitchHighQualityTipContent": "حاليا، تدعم طريقة الفهرسة عالية الجودة فقط تقطيع تنسيق سؤال وجواب. هل ترغب في التبديل إلى وضع الجودة العالية؟",
|
||||
"stepTwo.qaSwitchHighQualityTipTitle": "يتطلب تنسيق سؤال وجواب طريقة فهرسة عالية الجودة",
|
||||
@ -158,29 +119,16 @@
|
||||
"stepTwo.removeStopwords": "إزالة كلمات التوقف مثل \"a\", \"an\", \"the\"",
|
||||
"stepTwo.removeUrlEmails": "حذف جميع عناوين URL وعناوين البريد الإلكتروني",
|
||||
"stepTwo.reset": "إعادة تعيين",
|
||||
"stepTwo.retrievalSettingTip": "لتغيير إعداد الاسترجاع، يرجى الانتقال إلى ",
|
||||
"stepTwo.rules": "قواعد المعالجة المسبقة للنص",
|
||||
"stepTwo.save": "حفظ ومعالجة",
|
||||
"stepTwo.segmentCount": "قطع",
|
||||
"stepTwo.segmentation": "إعدادات القطعة",
|
||||
"stepTwo.separator": "محدد",
|
||||
"stepTwo.separatorPlaceholder": "\\n\\n للفقرات؛ \\n للأسطر",
|
||||
"stepTwo.separatorTip": "المحدد هو الحرف المستخدم لفصل النص. \\n\\n و \\n هي محددات شائعة الاستخدام لفصل الفقرات والأسطر. جنبًا إلى جنب مع الفواصل (\\n\\n,\\n)، سيتم تقسيم الفقرات حسب الأسطر عند تجاوز الحد الأقصى لطول القطعة. يمكنك أيضًا استخدام محددات خاصة محددة بنفسك (مثل ***).",
|
||||
"stepTwo.sideTipP1": "عند معالجة البيانات النصية، يعد التقطيع والتنظيف خطوتين مهمتين للمعالجة المسبقة.",
|
||||
"stepTwo.sideTipP2": "يقسم التقسيم النص الطويل إلى فقرات حتى تتمكن النماذج من فهمه بشكل أفضل. هذا يحسن جودة وصلة نتائج النموذج.",
|
||||
"stepTwo.sideTipP3": "يزيل التنظيف الأحرف والتنسيقات غير الضرورية، مما يجعل المعرفة أنظف وأسهل في التحليل.",
|
||||
"stepTwo.sideTipP4": "يؤدي التقطيع والتنظيف السليمتان إلى تحسين أداء النموذج، مما يوفر نتائج أكثر دقة وقيمة.",
|
||||
"stepTwo.sideTipTitle": "لماذا التقطيع والمعالجة المسبقة؟",
|
||||
"stepTwo.switch": "تبديل",
|
||||
"stepTwo.useQALanguage": "تقطيع بتنسيق سؤال وجواب في",
|
||||
"stepTwo.warning": "يرجى إعداد مفتاح API لمزود النموذج أولاً.",
|
||||
"stepTwo.webpageUnit": " صفحات",
|
||||
"stepTwo.websiteSource": "معالجة الموقع مسبقًا",
|
||||
"steps.header.fallbackRoute": "المعرفة",
|
||||
"steps.one": "مصدر البيانات",
|
||||
"steps.three": "التنفيذ والانتهاء",
|
||||
"steps.two": "معالجة المستندات",
|
||||
"watercrawl.apiKeyPlaceholder": "مفتاح API من watercrawl.dev",
|
||||
"watercrawl.configWatercrawl": "تكوين Watercrawl",
|
||||
"watercrawl.getApiKeyLinkText": "احصل على مفتاح API الخاص بك من watercrawl.dev"
|
||||
"steps.two": "معالجة المستندات"
|
||||
}
|
||||
|
||||
@ -1,27 +1,19 @@
|
||||
{
|
||||
"embedding.automatic": "تلقائي",
|
||||
"embedding.childMaxTokens": "الطفل",
|
||||
"embedding.completed": "اكتمل التضمين",
|
||||
"embedding.custom": "مخصص",
|
||||
"embedding.docName": "مستند المعالجة المسبقة",
|
||||
"embedding.economy": "الوضع الاقتصادي",
|
||||
"embedding.error": "خطأ في التضمين",
|
||||
"embedding.estimate": "الاستهلاك المقدر",
|
||||
"embedding.hierarchical": "الأصل والطفل",
|
||||
"embedding.highQuality": "وضع عالي الجودة",
|
||||
"embedding.mode": "إعداد التقطيع",
|
||||
"embedding.parentMaxTokens": "الأصل",
|
||||
"embedding.pause": "إيقاف مؤقت",
|
||||
"embedding.paused": "تم إيقاف التضمين مؤقتًا",
|
||||
"embedding.previewTip": "ستتوفر معاينة الفقرة بعد اكتمال التضمين",
|
||||
"embedding.processing": "معالجة التضمين...",
|
||||
"embedding.resume": "استئناف",
|
||||
"embedding.segmentLength": "أقصى طول للقطعة",
|
||||
"embedding.segments": "الفقرات",
|
||||
"embedding.stop": "إيقاف المعالجة",
|
||||
"embedding.textCleaning": "قواعد المعالجة المسبقة للنص",
|
||||
"embedding.waiting": "انتظار التضمين...",
|
||||
"list.action.add": "إضافة قطعة",
|
||||
"list.action.addButton": "إضافة قطعة",
|
||||
"list.action.archive": "أرشيف",
|
||||
"list.action.batchAdd": "إضافة دفعة",
|
||||
@ -34,7 +26,6 @@
|
||||
"list.action.summary": "إنشاء ملخص",
|
||||
"list.action.sync": "مزامنة",
|
||||
"list.action.unarchive": "إلغاء الأرشفة",
|
||||
"list.action.uploadFile": "تحميل ملف جديد",
|
||||
"list.addFile": "إضافة ملف",
|
||||
"list.addPages": "إضافة صفحات",
|
||||
"list.addUrl": "إضافة عنوان URL",
|
||||
@ -52,7 +43,6 @@
|
||||
"list.batchModal.run": "تشغيل الدفعة",
|
||||
"list.batchModal.runError": "فشل تشغيل الدفعة",
|
||||
"list.batchModal.template": "قم بتنزيل القالب هنا",
|
||||
"list.batchModal.tip": "يجب أن يتوافق ملف CSV مع الهيكل التالي:",
|
||||
"list.batchModal.title": "إضافة قطع دفعة واحدة",
|
||||
"list.delete.content": "إذا كنت بحاجة إلى استئناف المعالجة لاحقًا، فستستمر من حيث توقفت",
|
||||
"list.delete.title": "هل أنت متأكد من الحذف؟",
|
||||
@ -61,10 +51,6 @@
|
||||
"list.empty.title": "لا يوجد وثائق بعد",
|
||||
"list.empty.upload.tip": "يمكنك تحميل الملفات، والمزامنة من الموقع، أو من تطبيقات الويب مثل Notion و GitHub، إلخ.",
|
||||
"list.index.all": "الكل",
|
||||
"list.index.disable": "تعطيل",
|
||||
"list.index.disableTip": "لا يمكن فهرسة الملف",
|
||||
"list.index.enable": "تمكين",
|
||||
"list.index.enableTip": "يمكن فهرسة الملف",
|
||||
"list.learnMore": "تعرف على المزيد",
|
||||
"list.sort.hitCount": "عدد الاسترجاع",
|
||||
"list.sort.uploadTime": "وقت التحميل",
|
||||
@ -78,7 +64,6 @@
|
||||
"list.status.queuing": "في الانتظار",
|
||||
"list.summary.generating": "جارٍ الإنشاء...",
|
||||
"list.summary.generatingSummary": "جارٍ إنشاء الملخص",
|
||||
"list.summary.ready": "الملخص جاهز",
|
||||
"list.table.header.action": "إجراء",
|
||||
"list.table.header.chunkingMode": "وضع التقطيع",
|
||||
"list.table.header.fileName": "الاسم",
|
||||
@ -89,61 +74,7 @@
|
||||
"list.table.name": "الاسم",
|
||||
"list.table.rename": "إعادة تسمية",
|
||||
"list.title": "المستندات",
|
||||
"metadata.categoryMap.book.art": "فن",
|
||||
"metadata.categoryMap.book.biography": "سيرة شخصية",
|
||||
"metadata.categoryMap.book.businessEconomics": "أعمال واقتصاد",
|
||||
"metadata.categoryMap.book.childrenYoungAdults": "أطفال وشباب",
|
||||
"metadata.categoryMap.book.comicsGraphicNovels": "قصص مصورة وروايات مصورة",
|
||||
"metadata.categoryMap.book.cooking": "طبخ",
|
||||
"metadata.categoryMap.book.drama": "دراما",
|
||||
"metadata.categoryMap.book.education": "تعليم",
|
||||
"metadata.categoryMap.book.fiction": "خيال",
|
||||
"metadata.categoryMap.book.health": "صحة",
|
||||
"metadata.categoryMap.book.history": "تاريخ",
|
||||
"metadata.categoryMap.book.other": "أخرى",
|
||||
"metadata.categoryMap.book.philosophy": "فلسفة",
|
||||
"metadata.categoryMap.book.poetry": "شعر",
|
||||
"metadata.categoryMap.book.religion": "دين",
|
||||
"metadata.categoryMap.book.science": "علوم",
|
||||
"metadata.categoryMap.book.selfHelp": "تطوير الذات",
|
||||
"metadata.categoryMap.book.socialSciences": "علوم اجتماعية",
|
||||
"metadata.categoryMap.book.technology": "تكنولوجيا",
|
||||
"metadata.categoryMap.book.travel": "سفر",
|
||||
"metadata.categoryMap.businessDoc.contractsAgreements": "العقود والاتفاقيات",
|
||||
"metadata.categoryMap.businessDoc.designDocument": "وثيقة التصميم",
|
||||
"metadata.categoryMap.businessDoc.emailCorrespondence": "مراسلات البريد الإلكتروني",
|
||||
"metadata.categoryMap.businessDoc.employeeHandbook": "دليل الموظف",
|
||||
"metadata.categoryMap.businessDoc.financialReport": "تقرير مالي",
|
||||
"metadata.categoryMap.businessDoc.marketAnalysis": "تحليل السوق",
|
||||
"metadata.categoryMap.businessDoc.meetingMinutes": "محضر اجتماع",
|
||||
"metadata.categoryMap.businessDoc.other": "أخرى",
|
||||
"metadata.categoryMap.businessDoc.policiesProcedures": "السياسات والإجراءات",
|
||||
"metadata.categoryMap.businessDoc.productSpecification": "مواصفات المنتج",
|
||||
"metadata.categoryMap.businessDoc.projectPlan": "خطة المشروع",
|
||||
"metadata.categoryMap.businessDoc.proposal": "اقتراح",
|
||||
"metadata.categoryMap.businessDoc.requirementsDocument": "وثيقة المتطلبات",
|
||||
"metadata.categoryMap.businessDoc.researchReport": "تقرير بحث",
|
||||
"metadata.categoryMap.businessDoc.teamStructure": "هيكل الفريق",
|
||||
"metadata.categoryMap.businessDoc.trainingMaterials": "مواد تدريبية",
|
||||
"metadata.categoryMap.personalDoc.blogDraft": "مسودة مدونة",
|
||||
"metadata.categoryMap.personalDoc.bookExcerpt": "مقتطف من كتاب",
|
||||
"metadata.categoryMap.personalDoc.codeSnippet": "مقتطف كود",
|
||||
"metadata.categoryMap.personalDoc.creativeWriting": "كتابة إبداعية",
|
||||
"metadata.categoryMap.personalDoc.designDraft": "مسودة تصميم",
|
||||
"metadata.categoryMap.personalDoc.diary": "مذكرات",
|
||||
"metadata.categoryMap.personalDoc.list": "قائمة",
|
||||
"metadata.categoryMap.personalDoc.notes": "ملاحظات",
|
||||
"metadata.categoryMap.personalDoc.other": "أخرى",
|
||||
"metadata.categoryMap.personalDoc.personalResume": "سيرة ذاتية شخصية",
|
||||
"metadata.categoryMap.personalDoc.photoCollection": "مجموعة صور",
|
||||
"metadata.categoryMap.personalDoc.projectOverview": "نظرة عامة على المشروع",
|
||||
"metadata.categoryMap.personalDoc.researchReport": "تقرير بحث",
|
||||
"metadata.categoryMap.personalDoc.schedule": "جدول",
|
||||
"metadata.dateTimeFormat": "MMMM D, YYYY hh:mm A",
|
||||
"metadata.desc": "يسمح تصنيف البيانات الوصفية للمستندات للذكاء الاصطناعي بالوصول إليها في الوقت المناسب ويكشف مصدر المراجع للمستخدمين.",
|
||||
"metadata.docTypeChangeTitle": "تغيير نوع المستند",
|
||||
"metadata.docTypeSelectTitle": "يرجى تحديد نوع المستند",
|
||||
"metadata.docTypeSelectWarning": "إذا تم تغيير نوع المستند، فلن يتم الاحتفاظ بالبيانات الوصفية المملوءة الآن",
|
||||
"metadata.field.IMChat.chatPartiesGroupName": "أطراف الدردشة/اسم المجموعة",
|
||||
"metadata.field.IMChat.chatPlatform": "منصة الدردشة",
|
||||
"metadata.field.IMChat.endDate": "تاريخ الانتهاء",
|
||||
@ -202,10 +133,6 @@
|
||||
"metadata.field.personalDocument.lastModifiedDate": "تاريخ آخر تعديل",
|
||||
"metadata.field.personalDocument.tagsCategory": "العلامات/الفئة",
|
||||
"metadata.field.personalDocument.title": "العنوان",
|
||||
"metadata.field.processRule.processClean": "تنظيف عملية النص",
|
||||
"metadata.field.processRule.processDoc": "معالجة المستند",
|
||||
"metadata.field.processRule.segmentLength": "طول القطع",
|
||||
"metadata.field.processRule.segmentRule": "قاعدة القطع",
|
||||
"metadata.field.socialMediaPost.authorUsername": "المؤلف/اسم المستخدم",
|
||||
"metadata.field.socialMediaPost.platform": "المنصة",
|
||||
"metadata.field.socialMediaPost.postURL": "عنوان URL للمنشور",
|
||||
@ -231,7 +158,6 @@
|
||||
"metadata.field.wikipediaEntry.summaryIntroduction": "الملخص/المقدمة",
|
||||
"metadata.field.wikipediaEntry.title": "العنوان",
|
||||
"metadata.field.wikipediaEntry.webpageURL": "عنوان URL لصفحة الويب",
|
||||
"metadata.firstMetaAction": "هيا بنا",
|
||||
"metadata.languageMap.ar": "عربي",
|
||||
"metadata.languageMap.cs": "تشيكي",
|
||||
"metadata.languageMap.da": "دنماركي",
|
||||
@ -304,7 +230,6 @@
|
||||
"segment.delete": "حذف هذه القطعة؟",
|
||||
"segment.editChildChunk": "تعديل القطعة الفرعية",
|
||||
"segment.editChunk": "تعديل القطعة",
|
||||
"segment.editParentChunk": "تعديل القطعة الأصلية",
|
||||
"segment.edited": "معدل",
|
||||
"segment.editedAt": "تم التعديل في",
|
||||
"segment.empty": "لم يتم العثور على أي قطعة",
|
||||
@ -316,9 +241,6 @@
|
||||
"segment.keywords": "كلمات رئيسية",
|
||||
"segment.newChildChunk": "قطعة فرعية جديدة",
|
||||
"segment.newChunk": "قطعة جديدة",
|
||||
"segment.newQaSegment": "قطعة سؤال وجواب جديدة",
|
||||
"segment.newTextSegment": "قطعة نصية جديدة",
|
||||
"segment.paragraphs": "الفقرات",
|
||||
"segment.parentChunk": "قطعة أصلية",
|
||||
"segment.parentChunks_one": "قطعة أصلية",
|
||||
"segment.parentChunks_other": "قطع أصلية",
|
||||
@ -334,6 +256,5 @@
|
||||
"segment.searchResults_other": "نتائج",
|
||||
"segment.searchResults_zero": "نتيجة",
|
||||
"segment.summary": "ملخص",
|
||||
"segment.summaryPlaceholder": "اكتب ملخصًا موجزًا لاسترجاع أفضل…",
|
||||
"segment.vectorHash": "تجزئة المتجه: "
|
||||
"segment.summaryPlaceholder": "اكتب ملخصًا موجزًا لاسترجاع أفضل…"
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
"imageUploader.tip": "قم بتحميل الصور أو إسقاطها (الحد الأقصى {{batchCount}}، {{size}} ميغابايت لكل صورة)",
|
||||
"imageUploader.tooltip": "رفع الصور (الحد الأقصى {{batchCount}}، {{size}} ميغابايت لكل صورة)",
|
||||
"input.countWarning": "ما يصل إلى 200 حرف.",
|
||||
"input.indexWarning": "معرفة عالية الجودة فقط.",
|
||||
"input.placeholder": "يرجى إدخال نص، ويوصى بجملة تعريفية قصيرة.",
|
||||
"input.testing": "اختبار",
|
||||
"input.title": "النص المصدر",
|
||||
@ -22,7 +21,5 @@
|
||||
"table.header.queryContent": "محتوى الاستعلام",
|
||||
"table.header.source": "المصدر",
|
||||
"table.header.time": "وقت",
|
||||
"title": "اختبار الاسترجاع",
|
||||
"viewChart": "عرض مخطط VECTOR",
|
||||
"viewDetail": "عرض التفاصيل"
|
||||
"title": "اختبار الاسترجاع"
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
{
|
||||
"addDocuments.backToDataSource": "مصدر البيانات",
|
||||
"addDocuments.characters": "أحرف",
|
||||
"addDocuments.selectOnlineDocumentTip": "معالجة ما يصل إلى {{count}} صفحة",
|
||||
"addDocuments.selectOnlineDriveTip": "معالجة ما يصل إلى {{count}} ملف، بحد أقصى {{fileSize}} ميجابايت لكل منها",
|
||||
@ -24,7 +23,6 @@
|
||||
"creation.caution": "تنبيه",
|
||||
"creation.createFromScratch.description": "إنشاء سير عمل مخصص من الصفر مع التحكم الكامل في معالجة البيانات وهيكلها.",
|
||||
"creation.createFromScratch.title": "سير عمل معرفة فارغ",
|
||||
"creation.createKnowledge": "إنشاء المعرفة",
|
||||
"creation.errorTip": "فشل إنشاء قاعدة المعرفة",
|
||||
"creation.importDSL": "استيراد من ملف DSL",
|
||||
"creation.successTip": "تم إنشاء قاعدة المعرفة بنجاح",
|
||||
@ -52,9 +50,7 @@
|
||||
"inputFieldPanel.uniqueInputs.tooltip": "المدخلات الفريدة يمكن الوصول إليها فقط لمصدر البيانات المحدد وعقده النهائية. لن يحتاج المستخدمون إلى تعبئتها عند اختيار مصادر بيانات أخرى. ستظهر فقط حقول الإدخال المشار إليها بواسطة متغيرات مصدر البيانات في الخطوة الأولى (مصدر البيانات). ستظهر جميع الحقول الأخرى في الخطوة الثانية (معالجة المستندات).",
|
||||
"knowledgeDescription": "وصف المعرفة",
|
||||
"knowledgeDescriptionPlaceholder": "صف ما يوجد في قاعدة المعرفة هذه. يسمح الوصف التفصيلي للذكاء الاصطناعي بالوصول إلى محتوى مجموعة البيانات بشكل أكثر دقة. إذا كان فارغًا، فسيستخدم Dify استراتيجية المطابقة الافتراضية. (اختياري)",
|
||||
"knowledgeNameAndIcon": "اسم وأيقونة المعرفة",
|
||||
"knowledgeNameAndIconPlaceholder": "يرجى إدخال اسم قاعدة المعرفة",
|
||||
"knowledgePermissions": "أذونات",
|
||||
"onlineDocument.pageSelectorTitle": "{{name}} صفحات",
|
||||
"onlineDrive.breadcrumbs.allBuckets": "جميع حاويات التخزين السحابية",
|
||||
"onlineDrive.breadcrumbs.allFiles": "جميع الملفات",
|
||||
@ -62,8 +58,6 @@
|
||||
"onlineDrive.breadcrumbs.searchResult": "العثور على {{searchResultsLength}} عناصر في مجلد \"{{folderName}}\"",
|
||||
"onlineDrive.emptyFolder": "هذا المجلد فارغ",
|
||||
"onlineDrive.emptySearchResult": "لم يتم العثور على أي عناصر",
|
||||
"onlineDrive.notConnected": "{{name}} غير متصل",
|
||||
"onlineDrive.notConnectedTip": "للمزامنة مع {{name}}، يجب إنشاء اتصال بـ {{name}} أولاً.",
|
||||
"onlineDrive.notSupportedFileType": "نوع الملف هذا غير مدعوم",
|
||||
"onlineDrive.resetKeywords": "إعادة تعيين الكلمات الرئيسية",
|
||||
"operations.backToDataSource": "العودة إلى مصدر البيانات",
|
||||
@ -86,9 +80,6 @@
|
||||
"publishTemplate.success.message": "تم نشر قالب سير العمل",
|
||||
"publishTemplate.success.tip": "يمكنك استخدام هذا القالب في صفحة الإنشاء.",
|
||||
"templates.customized": "مخصص",
|
||||
"testRun.dataSource.localFiles": "الملفات المحلية",
|
||||
"testRun.notion.docTitle": "مستندات Notion",
|
||||
"testRun.notion.title": "اختر صفحات Notion",
|
||||
"testRun.steps.dataSource": "مصدر البيانات",
|
||||
"testRun.steps.documentProcessing": "معالجة المستندات",
|
||||
"testRun.title": "تشغيل اختباري",
|
||||
|
||||
@ -4,20 +4,16 @@
|
||||
"form.chunkStructure.learnMore": "تعرف على المزيد",
|
||||
"form.chunkStructure.title": "هيكل القطعة",
|
||||
"form.desc": "الوصف",
|
||||
"form.descInfo": "يرجى كتابة وصف نصي واضح لتوضيح محتوى المعرفة. سيتم استخدام هذا الوصف كأساس للمطابقة عند الاختيار من بين معارف متعددة للاستنتاج.",
|
||||
"form.descPlaceholder": "صف ما يوجد في مجموعة البيانات هذه. يسمح الوصف التفصيلي للذكاء الاصطناعي بالوصول إلى محتوى مجموعة البيانات في الوقت المناسب. إذا كان فارغًا، فسيستخدم Dify استراتيجية المطابقة الافتراضية.",
|
||||
"form.descWrite": "تعرف على كيفية كتابة وصف جيد للمعرفة.",
|
||||
"form.embeddingModel": "نموذج التضمين",
|
||||
"form.embeddingModelTip": "لتغيير النموذج المضمن، يرجى الانتقال إلى ",
|
||||
"form.embeddingModelTipLink": "الإعدادات",
|
||||
"form.externalKnowledgeAPI": "واجهة برمجة تطبيقات المعرفة الخارجية",
|
||||
"form.externalKnowledgeID": "معرف المعرفة الخارجية",
|
||||
"form.helpText": "تعرف على كيفية كتابة وصف جيد لمجموعة البيانات.",
|
||||
"form.indexMethod": "طريقة الفهرسة",
|
||||
"form.indexMethodChangeToEconomyDisabledTip": "غير متوفر للرجوع من الجودة العالية إلى الوضع الاقتصادي",
|
||||
"form.indexMethodEconomy": "اقتصادي",
|
||||
"form.indexMethodEconomyTip": "استخدام {{count}} كلمات رئيسية لكل قطعة للاسترجاع، لا يتم استهلاك أي رموز على حساب دقة الاسترجاع المنخفضة.",
|
||||
"form.indexMethodHighQuality": "جودة عالية",
|
||||
"form.indexMethodHighQualityTip": "يساعد استدعاء نموذج التضمين لمعالجة المستندات من أجل استرجاع أكثر دقة LLM على إنشاء إجابات عالية الجودة.",
|
||||
"form.me": "(أنت)",
|
||||
"form.name": "اسم المعرفة",
|
||||
@ -36,7 +32,6 @@
|
||||
"form.retrievalSetting.method": "طريقة الاسترجاع",
|
||||
"form.retrievalSetting.multiModalTip": "عندما يدعم نموذج التضمين متعدد الوسائط، يرجى اختيار نموذج إعادة ترتيب متعدد الوسائط للحصول على أداء أفضل.",
|
||||
"form.retrievalSetting.title": "إعداد الاسترجاع",
|
||||
"form.retrievalSettings": "إعدادات الاسترجاع",
|
||||
"form.save": "حفظ",
|
||||
"form.searchModel": "نموذج البحث",
|
||||
"form.summaryAutoGen": "إنشاء الملخص التلقائي",
|
||||
|
||||
@ -28,16 +28,10 @@
|
||||
"connectHelper.helper5": " بعناية قبل استخدام هذه الميزة.",
|
||||
"cornerLabel.pipeline": "خط أنابيب",
|
||||
"cornerLabel.unavailable": "غير متاح",
|
||||
"createDataset": "إنشاء المعرفة",
|
||||
"createDatasetIntro": "استيراد بيانات النص الخاصة بك أو كتابة البيانات في الوقت الفعلي عبر Webhook لتحسين سياق LLM.",
|
||||
"createExternalAPI": "إضافة واجهة برمجة تطبيقات معرفة خارجية",
|
||||
"createFromPipeline": "إنشاء من سير عمل المعرفة",
|
||||
"createNewExternalAPI": "إنشاء واجهة برمجة تطبيقات معرفة خارجية جديدة",
|
||||
"datasetDeleteFailed": "فشل حذف المعرفة",
|
||||
"datasetDeleted": "تم حذف المعرفة",
|
||||
"datasetUsedByApp": "يتم استخدام المعرفة بواسطة بعض التطبيقات. لن تتمكن التطبيقات بعد الآن من استخدام هذه المعرفة، وسيتم حذف جميع تكوينات الموجه والسجلات بشكل دائم.",
|
||||
"datasets": "المعرفة",
|
||||
"datasetsApi": "الوصول إلى API",
|
||||
"defaultRetrievalTip": "يستخدم الاسترجاع متعدد المسارات افتراضيًا. يتم استرجاع المعرفة من قواعد معرفة متعددة ثم إعادة ترتيبها.",
|
||||
"deleteDatasetConfirmContent": "حذف المعرفة لا رجعة فيه. لن يتمكن المستخدمون بعد الآن من الوصول إلى معرفتك، وسيتم حذف جميع تكوينات الموجه والسجلات بشكل دائم.",
|
||||
"deleteDatasetConfirmTitle": "حذف هذه المعرفة؟",
|
||||
@ -46,11 +40,9 @@
|
||||
"deleteExternalAPIConfirmWarningContent.noConnectionContent": "هل أنت متأكد من حذف واجهة برمجة التطبيقات هذه؟",
|
||||
"deleteExternalAPIConfirmWarningContent.title.end": "؟",
|
||||
"deleteExternalAPIConfirmWarningContent.title.front": "حذف",
|
||||
"didYouKnow": "هل تعلم؟",
|
||||
"docAllEnabled_one": "{{count}} مستند ممكن",
|
||||
"docAllEnabled_other": "تم تمكين جميع المستندات البالغ عددها {{count}}",
|
||||
"docsFailedNotice": "فشل فهرسة المستندات",
|
||||
"documentCount": " مستندات",
|
||||
"documentsDisabled": "{{num}} مستندات معطلة - غير نشطة لأكثر من 30 يومًا",
|
||||
"editExternalAPIConfirmWarningContent.end": "معرفة خارجية، وسيتم تطبيق هذا التعديل عليها جميعًا. هل أنت متأكد أنك تريد حفظ هذا التغيير؟",
|
||||
"editExternalAPIConfirmWarningContent.front": "ترتبط واجهة برمجة تطبيقات المعرفة الخارجية هذه بـ",
|
||||
@ -60,14 +52,9 @@
|
||||
"editExternalAPITooltipTitle": "المعرفة المرتبطة",
|
||||
"embeddingModelNotAvailable": "نموذج التضمين غير متوفر.",
|
||||
"enable": "تمكين",
|
||||
"externalAPI": "واجهة برمجة تطبيقات خارجية",
|
||||
"externalAPIForm.apiKey": "مفتاح API",
|
||||
"externalAPIForm.cancel": "إلغاء",
|
||||
"externalAPIForm.edit": "تعديل",
|
||||
"externalAPIForm.encrypted.end": "تقنية.",
|
||||
"externalAPIForm.encrypted.front": "سيتم تشفير رمز API الخاص بك وتخزينه باستخدام",
|
||||
"externalAPIForm.endpoint": "نقطة نهاية API",
|
||||
"externalAPIForm.name": "الاسم",
|
||||
"externalAPIForm.save": "حفظ",
|
||||
"externalAPIPanelDescription": "تُستخدم واجهة برمجة تطبيقات المعرفة الخارجية للاتصال بقاعدة معرفة خارج Dify واسترجاع المعرفة من قاعدة المعرفة تلك.",
|
||||
"externalAPIPanelDocumentation": "تعرف على كيفية إنشاء واجهة برمجة تطبيقات المعرفة الخارجية",
|
||||
@ -89,7 +76,6 @@
|
||||
"firstEmpty.createDescription": "أسرع طريقة للبدء. يمكنك التبديل إلى التخصيص في أي وقت.",
|
||||
"firstEmpty.createTitle": "إنشاء قاعدة معرفة جاهزة للاستخدام",
|
||||
"firstEmpty.or": "أو",
|
||||
"firstEmpty.pickHint": "لست متأكدا مما تختار؟ ابدأ بـ إنشاء معرفة - يمكنك دائما التبديل لاحقا.",
|
||||
"firstEmpty.pipelineDescription": "عرّف تدفق التقسيم والتنظيف والفهرسة الخاص بك للبيانات المتخصصة.",
|
||||
"firstEmpty.pipelineTitle": "إنشاء قاعدة معرفة مخصصة",
|
||||
"firstEmpty.recommended": "موصى به",
|
||||
@ -106,15 +92,7 @@
|
||||
"indexingMethod.semantic_search": "VECTOR",
|
||||
"indexingTechnique.economy": "ECO",
|
||||
"indexingTechnique.high_quality": "HQ",
|
||||
"intro1": "يمكن دمج المعرفة في تطبيق Dify ",
|
||||
"intro2": "كسياق",
|
||||
"intro3": "،",
|
||||
"intro4": "أو ",
|
||||
"intro5": "يمكن نشرها",
|
||||
"intro6": " كخدمة مستقلة.",
|
||||
"knowledge": "المعرفة",
|
||||
"learnHowToWriteGoodKnowledgeDescription": "تعرف على كيفية كتابة وصف جيد للمعرفة",
|
||||
"localDocs": "مستندات محلية",
|
||||
"metadata.addMetadata": "إضافة بيانات وصفية",
|
||||
"metadata.batchEditMetadata.applyToAllSelectDocument": "تطبيق على جميع المستندات المحددة",
|
||||
"metadata.batchEditMetadata.applyToAllSelectDocumentTip": "إنشاء جميع البيانات الوصفية المعدلة والجديدة أعلاه تلقائيًا لجميع المستندات المحددة، وإلا فإن تعديل البيانات الوصفية سينطبق فقط على المستندات التي تحتوي عليها.",
|
||||
@ -152,9 +130,6 @@
|
||||
"mixtureHighQualityAndEconomicTip": "مطلوب نموذج إعادة الترتيب لخلط قواعد المعرفة عالية الجودة والاقتصادية.",
|
||||
"mixtureInternalAndExternalTip": "مطلوب نموذج إعادة الترتيب لخلط المعرفة الداخلية والخارجية.",
|
||||
"multimodal": "متعدد الوسائط",
|
||||
"nTo1RetrievalLegacy": "سيتم إيقاف الاسترجاع من N إلى 1 رسميًا اعتبارًا من سبتمبر. يوصى باستخدام أحدث استرجاع متعدد المسارات للحصول على نتائج أفضل. ",
|
||||
"nTo1RetrievalLegacyLink": "تعرف على المزيد",
|
||||
"nTo1RetrievalLegacyLinkText": " سيتم إيقاف الاسترجاع من N إلى 1 رسميًا في سبتمبر.",
|
||||
"noExternalKnowledge": "لا توجد واجهة برمجة تطبيقات معرفة خارجية حتى الآن، انقر هنا لإنشاء",
|
||||
"parentMode.fullDoc": "مستند كامل",
|
||||
"parentMode.paragraph": "فقرة",
|
||||
@ -162,14 +137,10 @@
|
||||
"partialEnabled_other": "إجمالي {{count}} مستندات، {{num}} متاح",
|
||||
"preprocessDocument": "{{num}} معالجة المستندات مسبقًا",
|
||||
"rerankSettings": "إعداد إعادة الترتيب",
|
||||
"retrieval.change": "تغيير",
|
||||
"retrieval.changeRetrievalMethod": "تغيير طريقة الاسترجاع",
|
||||
"retrieval.full_text_search.description": "فهرسة جميع المصطلحات في المستند، مما يسمح للمستخدمين بالبحث عن أي مصطلح واسترجاع قطعة نصية ذات صلة تحتوي على تلك المصطلحات.",
|
||||
"retrieval.full_text_search.title": "بحث النص الكامل",
|
||||
"retrieval.hybrid_search.description": "تنفيذ البحث بالنص الكامل والبحث المتجه في وقت واحد، وإعادة الترتيب لتحديد أفضل تطابق لاستعلام المستخدم. يمكن للمستخدمين اختيار تعيين الأوزان أو التكوين لنموذج إعادة الترتيب.",
|
||||
"retrieval.hybrid_search.recommend": "نوصي",
|
||||
"retrieval.hybrid_search.title": "بحث هجين",
|
||||
"retrieval.invertedIndex.description": "الفهرس المقلوب هو هيكل يُستخدم للاسترجاع الفعال. منظم حسب المصطلحات، كل مصطلح يشير إلى المستندات أو صفحات الويب التي تحتوي عليه.",
|
||||
"retrieval.invertedIndex.title": "الفهرس المعكوس",
|
||||
"retrieval.keyword_search.description": "الفهرس المعكوس هو هيكل يستخدم للاسترجاع الفعال. منظم حسب المصطلحات، يشير كل مصطلح إلى المستندات أو صفحات الويب التي تحتوي عليه.",
|
||||
"retrieval.keyword_search.title": "فهرس معكوس",
|
||||
@ -188,12 +159,8 @@
|
||||
"unavailable": "غير متاح",
|
||||
"unknownError": "خطأ غير معروف",
|
||||
"updated": "محدث",
|
||||
"weightedScore.customized": "مخصص",
|
||||
"weightedScore.description": "من خلال تعديل الأوزان المخصصة، تحدد استراتيجية إعادة الترتيب هذه ما إذا كانت الأولوية للمطابقة الدلالية أو الكلمات الرئيسية.",
|
||||
"weightedScore.keyword": "كلمة رئيسية",
|
||||
"weightedScore.keywordFirst": "الكلمة الرئيسية أولاً",
|
||||
"weightedScore.semantic": "دلالي",
|
||||
"weightedScore.semanticFirst": "الدلالي أولاً",
|
||||
"weightedScore.title": "الدرجة المرجحة",
|
||||
"wordCount": " ألف كلمة"
|
||||
"weightedScore.title": "الدرجة المرجحة"
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
{
|
||||
"access.api.backendTitle": "واجهة برمجة تطبيقات الخدمة الخلفية",
|
||||
"access.api.copyCurlExample": "نسخ مثال cURL",
|
||||
"access.api.createFailed": "فشل في إنشاء رمز API.",
|
||||
"access.api.createKey": "إنشاء رمز API",
|
||||
@ -9,7 +8,6 @@
|
||||
"access.api.developerTitle": "واجهة API للمطورين",
|
||||
"access.api.disabled": "الوصول إلى API معطل لهذا النشر.",
|
||||
"access.api.disabledHint": "قم بتمكين الوصول إلى API لإنشاء رموز مخصصة للبيئة.",
|
||||
"access.api.dismissToken": "إخفاء رمز API",
|
||||
"access.api.docs": "وثائق API",
|
||||
"access.api.docsClose": "إغلاق وثائق API",
|
||||
"access.api.docsDescription": "عرض مرجع Workflow API لهذا النشر.",
|
||||
@ -17,7 +15,6 @@
|
||||
"access.api.empty": "قم بالنشر إلى بيئة أولاً لبدء إصدار رموز API.",
|
||||
"access.api.emptyTitle": "لا توجد بيئات منشورة",
|
||||
"access.api.endpoint": "عنوان URL للطلب",
|
||||
"access.api.envPrefix": "env: {{env}}",
|
||||
"access.api.keyList": "قائمة رموز API",
|
||||
"access.api.nameLabel": "اسم رمز API",
|
||||
"access.api.namePlaceholder": "أدخل اسم رمز API",
|
||||
@ -36,14 +33,8 @@
|
||||
"access.api.table.environment": "البيئة",
|
||||
"access.api.table.key": "رمز API",
|
||||
"access.api.table.name": "الاسم",
|
||||
"access.api.title": "API",
|
||||
"access.channels.col.channel": "القناة",
|
||||
"access.channels.col.endpoint": "نقطة الدخول",
|
||||
"access.channels.col.status": "الحالة",
|
||||
"access.channels.description": "تستخدم نقاط دخول WebApp وCLI أذونات الوصول الواردة أعلاه.",
|
||||
"access.channels.disabled": "قنوات الوصول معطلة لهذا النشر.",
|
||||
"access.channels.disabledHint": "قم بتمكين قنوات الوصول لعرض نقاط دخول WebApp وCLI.",
|
||||
"access.channels.followPermission": "يتبع الأذونات",
|
||||
"access.channels.title": "قنوات الوصول",
|
||||
"access.cli.description": "استدعِ من الطرفية باستخدام difyctl، مناسب للسكربتات أو سير العمل الآلي أو تكاملات الوكلاء.",
|
||||
"access.cli.docs": "دليل الاستخدام",
|
||||
@ -51,103 +42,57 @@
|
||||
"access.cli.empty": "لم يتم تكوين نقطة نهاية CLI.",
|
||||
"access.cli.install": "تثبيت CLI",
|
||||
"access.cli.title": "CLI",
|
||||
"access.copied": "تم النسخ",
|
||||
"access.copy": "نسخ",
|
||||
"access.copyFailed": "فشل النسخ",
|
||||
"access.copyToast": "تم النسخ إلى الحافظة",
|
||||
"access.hide": "إخفاء",
|
||||
"access.members.clearAll": "مسح الكل",
|
||||
"access.members.empty": "لا توجد نتائج مطابقة.",
|
||||
"access.members.groupCount_one": "{{count}} مجموعة",
|
||||
"access.members.groupCount_other": "{{count}} مجموعات",
|
||||
"access.members.groups": "المجموعات",
|
||||
"access.members.individuals": "الأعضاء",
|
||||
"access.members.memberCount_one": "{{count}} عضو",
|
||||
"access.members.memberCount_other": "{{count}} أعضاء",
|
||||
"access.members.pickPlaceholder": "اختر المجموعات أو الأعضاء",
|
||||
"access.members.searchPlaceholder": "بحث عن المجموعات والأعضاء",
|
||||
"access.members.selectedLabel": "المحدد",
|
||||
"access.permission.anyone": "أي شخص لديه الرابط",
|
||||
"access.permission.anyoneDesc": "يمكن لأي شخص الوصول إلى هذا النشر دون تسجيل الدخول.",
|
||||
"access.permission.memberCount_one": "{{count}} عضو",
|
||||
"access.permission.memberCount_other": "{{count}} أعضاء",
|
||||
"access.permission.organization": "جميع الأعضاء في المنصة",
|
||||
"access.permission.organizationDesc": "جميع الأعضاء في المنصة",
|
||||
"access.permission.specific": "أعضاء محددون في المنصة",
|
||||
"access.permission.specificDesc": "اختر مجموعات أو أعضاء محددين",
|
||||
"access.permission.specificUnavailable": "تحديد الأعضاء المحددين معطل حتى يتم ربط الأعضاء والمجموعات الفعليين في المنصة.",
|
||||
"access.permission.updateFailed": "فشل في تحديث سياسة الوصول.",
|
||||
"access.permissions.col.environment": "البيئة",
|
||||
"access.permissions.col.permission": "الوصول",
|
||||
"access.permissions.description": "اضبط أذونات الوصول لنقاط دخول WebApp وCLI في كل بيئة.",
|
||||
"access.permissions.editAriaLabel": "تكوين الوصول لـ {{environment}}",
|
||||
"access.permissions.editDescription": "اضبط أذونات الوصول لنقاط دخول WebApp وCLI.",
|
||||
"access.permissions.editTitle": "أذونات الوصول",
|
||||
"access.permissions.title": "أذونات الوصول",
|
||||
"access.revoke": "إبطال",
|
||||
"access.runAccess.description": "إدارة كيفية تشغيل المستخدمين لهذا النشر ومن المسموح له بالوصول إليه في كل بيئة.",
|
||||
"access.runAccess.disabled": "وصول التشغيل معطل لهذا النشر.",
|
||||
"access.runAccess.mcp": "MCP",
|
||||
"access.runAccess.mcpDesc": "اعرض هذا النشر كخادم Model Context Protocol.",
|
||||
"access.runAccess.mcpEmpty": "لم يتم تكوين نقطة نهاية MCP.",
|
||||
"access.runAccess.noEnvs": "قم بالنشر إلى بيئة لتكوين أذونات الوصول.",
|
||||
"access.runAccess.noEnvsTitle": "لا توجد بيئات منشورة",
|
||||
"access.runAccess.openWebapp": "فتح WebApp",
|
||||
"access.runAccess.permissions": "أذونات الوصول",
|
||||
"access.runAccess.permissionsDesc": "من يمكنه الوصول إلى هذا النشر في كل بيئة.",
|
||||
"access.runAccess.title": "وصول التشغيل",
|
||||
"access.runAccess.urlLabel": "URL",
|
||||
"access.runAccess.webapp": "WebApp",
|
||||
"access.runAccess.webappDesc": "صفحة ويب مستضافة للمستخدمين النهائيين.",
|
||||
"access.runAccess.webappEmpty": "قريبًا.",
|
||||
"access.show": "إظهار",
|
||||
"backend.RUNTIME_BACKEND_EXTERNAL": "خارجي",
|
||||
"backend.RUNTIME_BACKEND_K8S": "K8S",
|
||||
"backend.RUNTIME_BACKEND_UNSPECIFIED": "غير معروف",
|
||||
"card.access.api": "رموز API",
|
||||
"card.access.apiShort": "API",
|
||||
"card.access.cli": "CLI",
|
||||
"card.access.cliShort": "CLI",
|
||||
"card.access.none": "لا يوجد وصول",
|
||||
"card.access.webApp": "WebApp",
|
||||
"card.access.webAppShort": "Web",
|
||||
"card.createFirstRelease": "إنشاء أول إصدار",
|
||||
"card.deploy": "نشر",
|
||||
"card.deploying": "{{count}} قيد النشر",
|
||||
"card.envOverflow": "+ {{count}}",
|
||||
"card.failed": "{{count}} فشل",
|
||||
"card.fromApp": "من {{name}}",
|
||||
"card.lastDeployed": "آخر نشر {{time}}",
|
||||
"card.menu.delete": "حذف النشر",
|
||||
"card.menu.deleteDisabled": "حذف النشر غير متاح بعد لعمليات النشر المُدارة من الخلفية.",
|
||||
"card.menu.deploy": "النشر إلى البيئة",
|
||||
"card.menu.editInfo": "تعديل المعلومات",
|
||||
"card.menu.viewDetail": "عرض تفاصيل النشر",
|
||||
"card.moreActions": "المزيد من الإجراءات",
|
||||
"card.neverDeployed": "لم يتم النشر بعد",
|
||||
"card.noDescription": "لم يتم تقديم وصف.",
|
||||
"card.notDeployed": "غير منشور",
|
||||
"card.ready": "{{count}} قيد التشغيل",
|
||||
"card.tooltip.createdAt": "تم الإنشاء",
|
||||
"card.tooltip.deployed": "تم النشر",
|
||||
"card.tooltip.deploymentStatus": "النشر",
|
||||
"card.tooltip.notDeployed": "لم يتم نشر هذا النشر إلى أي بيئة بعد.",
|
||||
"card.tooltip.notDeployedShort": "غير منشور",
|
||||
"card.tooltip.release": "الإصدار",
|
||||
"card.tooltip.releaseName": "اسم الإصدار",
|
||||
"card.tooltip.source": "المصدر",
|
||||
"common.loadFailed": "فشل التحميل. حاول مرة أخرى لاحقًا.",
|
||||
"common.loading": "جاري التحميل...",
|
||||
"createGuide.actions.back": "رجوع",
|
||||
"createGuide.actions.cancel": "إلغاء",
|
||||
"createGuide.actions.continue": "متابعة",
|
||||
"createGuide.actions.createAndDeploy": "إنشاء ونشر",
|
||||
"createGuide.actions.creating": "جاري الإنشاء...",
|
||||
"createGuide.actions.deploy": "نشر",
|
||||
"createGuide.actions.deploying": "جاري الإنشاء والنشر...",
|
||||
"createGuide.actions.next": "التالي",
|
||||
"createGuide.actions.skipDeploy": "تخطي، النشر لاحقًا",
|
||||
"createGuide.description": "أنشئ نشرًا من مصدر إصدار ومعلومات أساسية وبيئة مستهدفة.",
|
||||
"createGuide.dsl.defaultAppName": "تطبيق DSL المستورد",
|
||||
"createGuide.dsl.description": "قم بتحميل حزمة Workflow DSL لإنشاء النشر والإصدار الأول ونشر البيئة الاختياري.",
|
||||
"createGuide.dsl.dropDescription": "قم بتحميل حزمة Workflow YAML DSL. يتم تحديد خيارات النشر من هذا الملف قبل النشر.",
|
||||
@ -163,7 +108,6 @@
|
||||
"createGuide.methods.bindApp.title": "ربط تطبيق Workflow موجود",
|
||||
"createGuide.methods.importDsl.description": "قم بتحميل حزمة Workflow YAML DSL ومتابعة عبر واجهة النشر.",
|
||||
"createGuide.methods.importDsl.title": "استيراد DSL",
|
||||
"createGuide.methods.mocked": "محاكاة",
|
||||
"createGuide.nav.back": "عمليات النشر",
|
||||
"createGuide.release.defaultName": "الإصدار الأولي",
|
||||
"createGuide.release.deployInfo": "معلومات النشر",
|
||||
@ -176,10 +120,7 @@
|
||||
"createGuide.release.releaseDescription": "وصف الإصدار",
|
||||
"createGuide.release.releaseDescriptionPlaceholder": "صف هذا الإصدار",
|
||||
"createGuide.release.releaseName": "اسم الإصدار",
|
||||
"createGuide.release.releaseNote": "وصف الإصدار",
|
||||
"createGuide.release.title": "المعلومات الأساسية",
|
||||
"createGuide.source.availableApps_one": "{{count}} تطبيق",
|
||||
"createGuide.source.availableApps_other": "{{count}} تطبيقات",
|
||||
"createGuide.source.clearSearch": "مسح بحث التطبيقات",
|
||||
"createGuide.source.description": "اختر المصدر المستخدم لإنشاء الإصدار الأول.",
|
||||
"createGuide.source.empty": "لم يتم العثور على تطبيقات Workflow.",
|
||||
@ -194,8 +135,6 @@
|
||||
"createGuide.target.bindingCount_other": "{{count}} روابط",
|
||||
"createGuide.target.bindingHint": "اختر بيانات الاعتماد التي يستخدمها هذا الإصدار.",
|
||||
"createGuide.target.bindings": "بيانات الاعتماد",
|
||||
"createGuide.target.deferredBindingHint": "ستُحَل بيانات الاعتماد من خطة النشر الفعلية أثناء إجراء النشر النهائي.",
|
||||
"createGuide.target.deferredEnvironmentHint": "تتم مطابقة الاسم مع البيئات الفعلية بعد إنشاء النشر والإصدار.",
|
||||
"createGuide.target.description": "اختر بيئة مستهدفة وقدم إعدادات وقت التشغيل التي يحتاجها هذا الإصدار هناك. يمكن تخطي هذه الخطوة.",
|
||||
"createGuide.target.envVarCount_one": "{{count}} متغير",
|
||||
"createGuide.target.envVarCount_other": "{{count}} متغيرات",
|
||||
@ -210,15 +149,12 @@
|
||||
"createGuide.target.envVarType.string": "نص",
|
||||
"createGuide.target.envVars": "متغيرات البيئة",
|
||||
"createGuide.target.environment": "البيئة المستهدفة",
|
||||
"createGuide.target.environmentName": "اسم البيئة",
|
||||
"createGuide.target.environmentNamePlaceholder": "Production",
|
||||
"createGuide.target.loadBindingsFailed": "فشل في تحميل بيانات الاعتماد.",
|
||||
"createGuide.target.loadEnvironmentsFailed": "فشل في تحميل بيئات النشر.",
|
||||
"createGuide.target.missingRequiredBinding": "اختر بيانات اعتماد لهذا الربط المطلوب.",
|
||||
"createGuide.target.noBindingRequired": "لا يلزم بيانات اعتماد.",
|
||||
"createGuide.target.noCredentialCandidates": "لا توجد بيانات اعتماد متاحة.",
|
||||
"createGuide.target.noEnvironmentOptions": "لا توجد بيئات نشر متاحة.",
|
||||
"createGuide.target.required": "مطلوب",
|
||||
"createGuide.target.selectCredential": "اختر بيانات اعتماد",
|
||||
"createGuide.target.title": "النشر إلى البيئة",
|
||||
"createGuide.title": "نشر جديد",
|
||||
@ -226,31 +162,15 @@
|
||||
"createModal.appSearchEmpty": "لا توجد تطبيقات Workflow مطابقة",
|
||||
"createModal.appSearchPlaceholder": "بحث عن تطبيقات Workflow…",
|
||||
"createModal.cancel": "إلغاء",
|
||||
"createModal.create": "إنشاء",
|
||||
"createModal.createFailed": "فشل في إنشاء النشر.",
|
||||
"createModal.description": "اختر تطبيق Workflow وأنشئ نشرًا.",
|
||||
"createModal.descriptionLabel": "الوصف",
|
||||
"createModal.descriptionPlaceholder": "صف الغرض من استخدام هذا النشر",
|
||||
"createModal.loadMoreApps": "تحميل المزيد من التطبيقات",
|
||||
"createModal.loadingApps": "جاري تحميل التطبيقات…",
|
||||
"createModal.nameLabel": "اسم النشر",
|
||||
"createModal.namePlaceholder": "اسم النشر",
|
||||
"createModal.noApps": "لم يتم العثور على تطبيقات Workflow في مساحة العمل هذه. أنشئ واحدًا في Studio أولاً.",
|
||||
"createModal.selected": "المحدد",
|
||||
"createModal.sourceApp": "تطبيق Workflow (مطلوب)",
|
||||
"createModal.title": "نشر جديد",
|
||||
"deployDrawer.bindingCount_one": "{{count}} ربط",
|
||||
"deployDrawer.bindingCount_other": "{{count}} روابط",
|
||||
"deployDrawer.bindingOptionsFailed": "فشل في تحميل خيارات بيانات الاعتماد.",
|
||||
"deployDrawer.bindingSelectionHint": "اختر بيانات الاعتماد التي يستخدمها هذا النشر.",
|
||||
"deployDrawer.bindingsDisabled": "تم حلها من معاينة الإصدار. التحرير غير متاح بعد.",
|
||||
"deployDrawer.cancel": "إلغاء",
|
||||
"deployDrawer.close": "إغلاق درج النشر",
|
||||
"deployDrawer.defaultSelect": "اختر...",
|
||||
"deployDrawer.deploy": "النشر إلى البيئة",
|
||||
"deployDrawer.deployExistingRelease": "النشر إلى البيئة",
|
||||
"deployDrawer.deployExistingReleaseDescription": "اختر إصدارًا وبيئة مستهدفة للنشر.",
|
||||
"deployDrawer.deployExistingReleaseTitle": "النشر إلى البيئة",
|
||||
"deployDrawer.deployFailed": "فشل في بدء النشر.",
|
||||
"deployDrawer.deploying": "جاري النشر...",
|
||||
"deployDrawer.description": "اختر إصدارًا وبيئة مستهدفة للنشر.",
|
||||
@ -267,95 +187,41 @@
|
||||
"deployDrawer.envVarType.string": "نص",
|
||||
"deployDrawer.envVars": "متغيرات البيئة",
|
||||
"deployDrawer.existingReleaseHint": "سيتم نشر هذا الإصدار كما هو. لن يتم إنشاء إصدار جديد.",
|
||||
"deployDrawer.loadingBindings": "جاري الحل...",
|
||||
"deployDrawer.lockedHint": "مقفل على البيئة الحالية",
|
||||
"deployDrawer.missingRequiredBinding": "اختر بيانات اعتماد لهذا الربط المطلوب.",
|
||||
"deployDrawer.missingRequiredEnvVar": "أدخل قيمة لمتغير البيئة المطلوب هذا.",
|
||||
"deployDrawer.modelCreds": "بيانات اعتماد النموذج",
|
||||
"deployDrawer.needsValidation": " (يحتاج إلى التحقق)",
|
||||
"deployDrawer.newReleaseHint": "سيتم إنشاء إصدار جديد من YAML تطبيق Workflow المحدد.",
|
||||
"deployDrawer.noBindingRequired": "غير مطلوب",
|
||||
"deployDrawer.noCredentialCandidates": "لا توجد بيانات اعتماد متاحة.",
|
||||
"deployDrawer.noNewEnvironmentAvailable": "جميع البيئات المتاحة لديها بالفعل نشر.",
|
||||
"deployDrawer.noOtherReleaseAvailable": "لا توجد إصدارات أخرى متاحة لهذه البيئة.",
|
||||
"deployDrawer.noReleaseAvailable": "أنشئ إصدارًا قبل النشر إلى بيئة.",
|
||||
"deployDrawer.notFound": "لم يتم العثور على النشر.",
|
||||
"deployDrawer.noteLabel": "وصف الإصدار (اختياري)",
|
||||
"deployDrawer.notePlaceholder": "مثال: تعديل نسخة الإعداد",
|
||||
"deployDrawer.pluginCreds": "بيانات اعتماد الإضافة",
|
||||
"deployDrawer.promote": "نشر",
|
||||
"deployDrawer.promoteDescription": "اختر إصدارًا وبيئة مستهدفة للنشر.",
|
||||
"deployDrawer.promoteTitle": "النشر إلى البيئة",
|
||||
"deployDrawer.readOnly": "للقراءة فقط",
|
||||
"deployDrawer.redeploy": "النشر إلى البيئة",
|
||||
"deployDrawer.redeployDescription": "اختر إصدارًا وبيئة مستهدفة للنشر.",
|
||||
"deployDrawer.redeployExistingReleaseHint": "سيتم إعادة نشر الإصدار الحالي كما هو. لن يتم إنشاء إصدار جديد.",
|
||||
"deployDrawer.redeployTitle": "النشر إلى البيئة",
|
||||
"deployDrawer.releaseLabel": "الإصدار",
|
||||
"deployDrawer.requiredBinding": "مطلوب",
|
||||
"deployDrawer.rollback": "نشر",
|
||||
"deployDrawer.rollbackDescription": "اختر إصدارًا وبيئة مستهدفة للنشر.",
|
||||
"deployDrawer.rollbackTitle": "النشر إلى البيئة",
|
||||
"deployDrawer.runtimeCredentials": "بيانات الاعتماد",
|
||||
"deployDrawer.secretPlaceholder": "سر",
|
||||
"deployDrawer.selectCredential": "اختر بيانات اعتماد",
|
||||
"deployDrawer.selectEnv": "اختر بيئة",
|
||||
"deployDrawer.selectProviderCred": "اختر بيانات اعتماد {{provider}}",
|
||||
"deployDrawer.selectProviderKey": "اختر مفتاح {{provider}}",
|
||||
"deployDrawer.selectRelease": "اختر إصدارًا",
|
||||
"deployDrawer.targetEnv": "البيئة المستهدفة",
|
||||
"deployDrawer.title": "النشر إلى البيئة",
|
||||
"deployDrawer.valuePlaceholder": "القيمة",
|
||||
"deployTab.cancelDeployment": "إلغاء النشر",
|
||||
"deployTab.closeError": "إغلاق",
|
||||
"deployTab.col.actions": "الإجراءات",
|
||||
"deployTab.col.currentRelease": "الإصدار الحالي",
|
||||
"deployTab.col.environment": "البيئة",
|
||||
"deployTab.col.status": "الحالة",
|
||||
"deployTab.col.updated": "تم التحديث",
|
||||
"deployTab.collapseDetails": "طي تفاصيل النشر",
|
||||
"deployTab.confirmUndeploy": "إلغاء النشر",
|
||||
"deployTab.deployOtherVersion": "نشر إصدار آخر",
|
||||
"deployTab.deployToEnv": "النشر إلى {{name}}",
|
||||
"deployTab.deployToNewEnv": "النشر إلى بيئة جديدة...",
|
||||
"deployTab.empty": "لا توجد مثيلات بعد. انشر إلى بيئة جديدة للبدء.",
|
||||
"deployTab.emptyDescription": "اختر إصدارًا وبيئة مستهدفة لجعل هذا النشر متاحًا للمستخدمين.",
|
||||
"deployTab.emptyTitle": "لا توجد بيئات قيد التشغيل بعد",
|
||||
"deployTab.envCount": "البيئات",
|
||||
"deployTab.errorCode": "الكود",
|
||||
"deployTab.errorDialogDesc": "راجع آخر نشر فاشل قبل إعادة المحاولة أو نشر إصدار آخر.",
|
||||
"deployTab.errorDialogTitle": "خطأ في النشر في {{name}}",
|
||||
"deployTab.errorMessage": "الرسالة",
|
||||
"deployTab.errorPhase": "المرحلة",
|
||||
"deployTab.expandDetails": "توسيع تفاصيل النشر",
|
||||
"deployTab.moreActions": "المزيد من الإجراءات",
|
||||
"deployTab.newDeployment": "النشر إلى بيئة جديدة",
|
||||
"deployTab.panel.commit": "معرف Commit",
|
||||
"deployTab.panel.deploymentId": "معرف النشر",
|
||||
"deployTab.panel.endpoints": "نقاط النهاية",
|
||||
"deployTab.panel.envVars": "متغيرات البيئة",
|
||||
"deployTab.panel.error": "الخطأ",
|
||||
"deployTab.panel.failedRelease": "الإصدار الفاشل",
|
||||
"deployTab.panel.health": "الصحة",
|
||||
"deployTab.panel.instanceInfo": "معلومات المثيل",
|
||||
"deployTab.panel.modelCreds": "بيانات اعتماد النموذج",
|
||||
"deployTab.panel.pluginCreds": "بيانات اعتماد الإضافة",
|
||||
"deployTab.panel.release": "الإصدار",
|
||||
"deployTab.panel.releaseCreatedAt": "تم إنشاء الإصدار في",
|
||||
"deployTab.panel.releaseInfo": "معلومات الإصدار",
|
||||
"deployTab.panel.replicas": "النسخ المتماثلة",
|
||||
"deployTab.panel.run": "تشغيل",
|
||||
"deployTab.panel.runtimeBindings": "بيانات الاعتماد",
|
||||
"deployTab.panel.runtimeInfo": "معلومات وقت التشغيل",
|
||||
"deployTab.panel.runtimeMode": "وضع وقت التشغيل",
|
||||
"deployTab.panel.runtimeNote": "ملاحظة وقت التشغيل",
|
||||
"deployTab.panel.targetRelease": "الإصدار المستهدف",
|
||||
"deployTab.panel.unknownError": "فشل النشر.",
|
||||
"deployTab.promote": "نشر",
|
||||
"deployTab.redeploy": "إعادة النشر",
|
||||
"deployTab.releaseCreatedAt": "تم إنشاء الإصدار {{time}}",
|
||||
"deployTab.retry": "إعادة المحاولة",
|
||||
"deployTab.shortcut": "اختصار",
|
||||
"deployTab.status.deployFailed": "فشل النشر",
|
||||
"deployTab.status.deployingRelease": "جاري النشر ({{release}})",
|
||||
"deployTab.status.runningOutOfSync": "قيد التشغيل (المزامنة معلقة)",
|
||||
@ -363,26 +229,13 @@
|
||||
"deployTab.undeploy": "إلغاء النشر",
|
||||
"deployTab.undeployConfirmDesc": "سيتوقف وصول المستخدم النهائي فورًا. يمكن إعادة نشر الإصدار لاحقًا.",
|
||||
"deployTab.undeployConfirmTitle": "إلغاء النشر من {{name}}؟",
|
||||
"deployTab.undeployFrom": "إلغاء النشر من {{name}}",
|
||||
"deployTab.undeployImpactTitle": "المثيل المتأثر",
|
||||
"deployTab.viewError": "عرض الخطأ",
|
||||
"deployTab.viewLogs": "عرض السجلات",
|
||||
"deployTab.viewProgress": "عرض التقدم",
|
||||
"detail.backToInstances": "العودة إلى عمليات النشر",
|
||||
"detail.deployingCount": "{{count}} قيد النشر",
|
||||
"detail.envCount_one": "{{count}} بيئة",
|
||||
"detail.envCount_other": "{{count}} بيئات",
|
||||
"detail.failedCount": "{{count}} فشل",
|
||||
"detail.mobileTabs": "أقسام النشر",
|
||||
"detail.notFound": "لم يتم العثور على النشر",
|
||||
"detail.openSourceApp": "فتح مصدر {{name}}",
|
||||
"detail.sourceApp": "المصدر",
|
||||
"detail.sourceAppLink": "المصدر",
|
||||
"documentTitle.create": "نشر جديد · عمليات النشر",
|
||||
"documentTitle.detail": "النشر · عمليات النشر",
|
||||
"documentTitle.list": "عمليات النشر",
|
||||
"filter.allEnvs": "جميع البيئات",
|
||||
"filter.notDeployed": "غير منشور",
|
||||
"filter.searchPlaceholder": "بحث عن عمليات النشر",
|
||||
"health.ENVIRONMENT_STATUS_ADMISSION": "القبول",
|
||||
"health.ENVIRONMENT_STATUS_BOOTSTRAPPING": "التمهيد",
|
||||
@ -393,7 +246,6 @@
|
||||
"list.clearFilters": "مسح الفلاتر",
|
||||
"list.clearSearch": "مسح بحث النشر",
|
||||
"list.createDeployment": "جديد",
|
||||
"list.empty": "لم يتم العثور على عمليات نشر.",
|
||||
"list.emptyDescription": "أنشئ نشرًا من تطبيق Workflow أو حزمة Workflow DSL لإدارة الإصدارات والبيئات والوصول.",
|
||||
"list.emptyFilteredDescription": "لا يوجد نشر يطابق البحث الحالي أو فلتر البيئة.",
|
||||
"list.emptyFilteredTitle": "لا توجد عمليات نشر مطابقة",
|
||||
@ -401,11 +253,6 @@
|
||||
"mode.ENVIRONMENT_MODE_ISOLATED": "معزول",
|
||||
"mode.ENVIRONMENT_MODE_SHARED": "مشترك",
|
||||
"mode.ENVIRONMENT_MODE_UNSPECIFIED": "غير معروف",
|
||||
"newInstance.comingSoon": "قريبًا",
|
||||
"newInstance.fromStudio": "اختر من Studio",
|
||||
"newInstance.importDSL": "استيراد DSL",
|
||||
"newInstance.title": "نشر جديد",
|
||||
"overview.accessEndpoints": "نقاط نهاية الوصول",
|
||||
"overview.accessMeta.apiTokens": "إدارة رموز API",
|
||||
"overview.accessMeta.cli": "عرض وصول CLI",
|
||||
"overview.accessMeta.webApp": "إدارة وصول WebApp",
|
||||
@ -415,8 +262,6 @@
|
||||
"overview.apiKeysCount_other": "{{count}} رموز API",
|
||||
"overview.apiTokenSummary.environments_one": "{{count}} بيئة منشورة",
|
||||
"overview.apiTokenSummary.environments_other": "{{count}} بيئات منشورة",
|
||||
"overview.availableForDeployment": "متاح للنشر",
|
||||
"overview.basicInfo": "المعلومات الأساسية",
|
||||
"overview.cardAction.deployLatest": "نشر أحدث إصدار",
|
||||
"overview.cardAction.redeploy": "إعادة النشر",
|
||||
"overview.cardAction.viewProgress": "عرض النشر",
|
||||
@ -436,79 +281,27 @@
|
||||
"overview.chip.olderRelease": "أقدم",
|
||||
"overview.chip.olderReleaseTooltip": "هذه البيئة تشغل إصدارًا أقدم.",
|
||||
"overview.chip.openInDeployTab": "عرض تقدم النشر",
|
||||
"overview.cli": "CLI",
|
||||
"overview.configured": "تم التكوين",
|
||||
"overview.createRelease": "إنشاء إصدار",
|
||||
"overview.created": "تم الإنشاء",
|
||||
"overview.deploy": "نشر",
|
||||
"overview.deployedEnvironments": "منشور",
|
||||
"overview.deploymentOverview": "نظرة عامة على النشر",
|
||||
"overview.deploymentStatus": "حالة النشر",
|
||||
"overview.description": "الوصف",
|
||||
"overview.developerApi": "واجهة API للمطورين",
|
||||
"overview.disabled": "معطل",
|
||||
"overview.emptyValue": "غير محدد",
|
||||
"overview.enabled": "ممكّن",
|
||||
"overview.enabledChannels": "تم تمكين الوصول",
|
||||
"overview.endUserAccess": "وصول المستخدم النهائي",
|
||||
"overview.environments": "البيئات",
|
||||
"overview.hero.byName": "بواسطة {{name}}",
|
||||
"overview.hero.empty": "لا توجد إصدارات بعد",
|
||||
"overview.hero.emptyDescription": "أنشئ إصدارًا من المصدر الحالي قبل النشر.",
|
||||
"overview.hero.propagation_one": "تم النشر إلى {{count}}/{{total}} بيئة",
|
||||
"overview.hero.propagation_other": "تم النشر إلى {{count}}/{{total}} بيئات",
|
||||
"overview.hero.untargeted": "لم يتم تكوين بيئات بعد",
|
||||
"overview.instanceDetails": "تفاصيل النشر",
|
||||
"overview.instanceId": "معرف النشر",
|
||||
"overview.latestRelease.releaseCount_one": "{{count}} إصدار",
|
||||
"overview.latestRelease.releaseCount_other": "{{count}} إصدارات",
|
||||
"overview.latestReleaseTitle": "أحدث إصدار",
|
||||
"overview.manageDeployments": "إدارة عمليات النشر",
|
||||
"overview.name": "الاسم",
|
||||
"overview.noAccessConfig": "لا يوجد تكوين للوصول.",
|
||||
"overview.noReleaseYet": "أنشئ إصدارًا قبل النشر إلى بيئة.",
|
||||
"overview.notConfigured": "لم يتم التكوين",
|
||||
"overview.previousReleases.empty": "لا توجد إصدارات سابقة بعد.",
|
||||
"overview.previousReleases.retired": "غير منشور حاليًا",
|
||||
"overview.previousReleases.title": "الإصدارات السابقة",
|
||||
"overview.previousReleases.viewAll": "عرض الكل",
|
||||
"overview.ready": "قابل للنشر",
|
||||
"overview.recentReleases": "الإصدارات الأخيرة",
|
||||
"overview.releaseDeployedTitle": "{{release}} منشور",
|
||||
"overview.releaseReadyTitle": "{{release}} جاهز للنشر",
|
||||
"overview.serviceMap": "خريطة الخدمة",
|
||||
"overview.servingRelease": "يخدم {{release}}",
|
||||
"overview.servingReleaseDescription": "هذا النشر منشور إلى {{count}}/{{total}} بيئات.",
|
||||
"overview.strip.deployToNewEnvironment": "النشر إلى بيئة جديدة",
|
||||
"overview.strip.empty": "لم يتم تكوين بيئات.",
|
||||
"overview.strip.emptyDeployableDescription": "انشر أحدث إصدار إلى بيئة عندما تكون جاهزًا.",
|
||||
"overview.strip.emptyDeployed": "لا توجد مثيلات بعد.",
|
||||
"overview.strip.emptyDescription": "أنشئ إصدارًا قبل النشر إلى بيئة.",
|
||||
"overview.strip.emptyTitle": "لا توجد مثيلات بعد",
|
||||
"overview.strip.summary_one": "1 من {{total}} على أحدث إصدار",
|
||||
"overview.strip.summary_other": "{{count}} من {{total}} على أحدث إصدار",
|
||||
"overview.strip.title": "المثيلات",
|
||||
"overview.switchSourceApp": "تبديل المصدر",
|
||||
"overview.switchSourceAppDescription": "اختر تطبيق Workflow المستخدم كمصدر للإصدارات المستقبلية.",
|
||||
"overview.switchSourceAppHint": "بعد التبديل، تستخدم الإصدارات المنشأة حديثًا فقط المصدر الجديد. لا تتغير الإصدارات التاريخية وعمليات النشر الحالية.",
|
||||
"overview.targetRelease": "الإصدار المستهدف",
|
||||
"overview.webapp": "WebApp",
|
||||
"settings.danger": "منطقة الخطر",
|
||||
"settings.dangerDesc": "احذف هذا النشر نهائيًا وأوقف أي مثيلات قيد التشغيل. لا يمكن التراجع عن ذلك.",
|
||||
"settings.delete": "حذف النشر",
|
||||
"settings.deleteConfirmDesc": "هل تريد حذف {{name}}؟ سيتوقف كل مثيل عن العمل وستتم إزالته من جميع البيئات. لا يمكن التراجع عن ذلك.",
|
||||
"settings.deleteConfirmTitle": "حذف النشر",
|
||||
"settings.deleteFailed": "فشل في حذف النشر.",
|
||||
"settings.deleteImpact": "التأثير",
|
||||
"settings.deleteImpactInstance": "النشر",
|
||||
"settings.deleteImpactTitle": "النشر المتأثر",
|
||||
"settings.deleteImpactValue": "تتم إزالة النشر من قائمة عمليات النشر.",
|
||||
"settings.deleted": "تم حذف النشر",
|
||||
"settings.description": "الوصف",
|
||||
"settings.descriptionHelp": "إدارة اسم هذا النشر ووصفه والإعدادات الأخرى.",
|
||||
"settings.general": "عام",
|
||||
"settings.name": "اسم النشر",
|
||||
"settings.reset": "إعادة تعيين",
|
||||
"settings.save": "حفظ التغييرات",
|
||||
"settings.updateFailed": "فشل في تحديث النشر.",
|
||||
"settings.updated": "تم تحديث النشر",
|
||||
@ -520,7 +313,6 @@
|
||||
"status.RUNTIME_INSTANCE_STATUS_UNDEPLOYED": "غير منشور",
|
||||
"status.RUNTIME_INSTANCE_STATUS_UNDEPLOYING": "جاري إلغاء النشر",
|
||||
"status.RUNTIME_INSTANCE_STATUS_UNSPECIFIED": "غير معروف",
|
||||
"subtitle": "إدارة عمليات النشر عبر البيئات.",
|
||||
"tabs.access.description": "إدارة قنوات الوصول وأذونات الوصول.",
|
||||
"tabs.access.name": "الوصول",
|
||||
"tabs.api-tokens.description": "إدارة رموز API واستدعاء المثيلات عبر HTTP.",
|
||||
@ -531,9 +323,6 @@
|
||||
"tabs.overview.name": "نظرة عامة",
|
||||
"tabs.releases.description": "إنشاء ونشر وإدارة الإصدارات.",
|
||||
"tabs.releases.name": "الإصدارات",
|
||||
"tabs.settings.description": "إدارة اسم هذا النشر ووصفه والإعدادات الأخرى.",
|
||||
"tabs.settings.name": "الإعدادات",
|
||||
"title": "عمليات النشر",
|
||||
"unsupportedDslNodes.description": "يحتوي هذا الإصدار على عقد لا يدعمها وقت تشغيل النشر بعد. قم بإزالتها أو استبدالها في Studio، ثم حاول مرة أخرى.",
|
||||
"unsupportedDslNodes.descriptionWithTypes": "يحتوي هذا الإصدار على عقد لا يدعمها وقت تشغيل النشر بعد: {{nodeTypes}}. قم بإزالتها أو استبدالها في Studio، ثم حاول مرة أخرى.",
|
||||
"unsupportedDslNodes.title": "عقد غير مدعومة",
|
||||
@ -544,7 +333,6 @@
|
||||
"versions.checkingReleaseContent": "جاري التحقق من محتوى الإصدار...",
|
||||
"versions.col.action": "الإجراء",
|
||||
"versions.col.author": "أنشئ بواسطة",
|
||||
"versions.col.commit": "Commit",
|
||||
"versions.col.createdAt": "تم الإنشاء في",
|
||||
"versions.col.deployedTo": "تم النشر إلى",
|
||||
"versions.col.release": "الإصدار",
|
||||
@ -554,20 +342,14 @@
|
||||
"versions.createFailed": "فشل في إنشاء الإصدار.",
|
||||
"versions.createRelease": "إنشاء إصدار",
|
||||
"versions.createReleaseDescription": "أنشئ إصدارًا قابلاً للنشر من تطبيق Workflow أو ملف Workflow DSL.",
|
||||
"versions.createReleaseHint": "يمكن نشر الإصدارات الجديدة إلى أي بيئة.",
|
||||
"versions.createSuccess": "تم إنشاء الإصدار \"{{name}}\".",
|
||||
"versions.creating": "جاري الإنشاء...",
|
||||
"versions.currentOn": "الإصدار الحالي على {{name}}",
|
||||
"versions.deleteConfirmDesc": "سيتم حذف الإصدار \"{{name}}\" نهائيًا. لا يمكن التراجع عن ذلك.",
|
||||
"versions.deleteConfirmTitle": "حذف الإصدار؟",
|
||||
"versions.deleteFailed": "فشل في حذف الإصدار.",
|
||||
"versions.deleteImpactDeployment": "حالة النشر",
|
||||
"versions.deleteImpactNotDeployed": "غير منشور حاليًا",
|
||||
"versions.deleteImpactRelease": "الإصدار",
|
||||
"versions.deleteImpactTitle": "تأثير الحذف",
|
||||
"versions.deleteRelease": "حذف الإصدار",
|
||||
"versions.deleteSuccess": "تم حذف الإصدار \"{{name}}\".",
|
||||
"versions.deploy": "نشر",
|
||||
"versions.deployTo": "النشر إلى {{name}}",
|
||||
"versions.deployedStatus.RUNTIME_INSTANCE_STATUS_DEPLOYING": "جاري النشر",
|
||||
"versions.deployedStatus.RUNTIME_INSTANCE_STATUS_DRIFTED": "المزامنة معلقة",
|
||||
@ -582,7 +364,6 @@
|
||||
"versions.disabledReason.checkingDeployments": "جاري التحقق من استخدام النشر",
|
||||
"versions.disabledReason.current": "هذا الإصدار يعمل بالفعل على {{name}}",
|
||||
"versions.disabledReason.deploying": "انتظر حتى ينتهي النشر النشط",
|
||||
"versions.disabledReason.envDisabled": "هذه البيئة غير قابلة للنشر",
|
||||
"versions.disabledReason.releaseInUse_one": "ألغِ نشر هذا الإصدار من {{count}} بيئة قبل حذفه",
|
||||
"versions.disabledReason.releaseInUse_other": "ألغِ نشر هذا الإصدار من {{count}} بيئات قبل حذفه",
|
||||
"versions.dslReadFailed": "فشل في قراءة ملف DSL. اختر ملفًا آخر وحاول مرة أخرى.",
|
||||
@ -592,27 +373,21 @@
|
||||
"versions.editRelease": "تعديل الإصدار",
|
||||
"versions.editReleaseDescription": "تحديث اسم ووصف هذا الإصدار.",
|
||||
"versions.editSuccess": "تم تحديث الإصدار \"{{name}}\".",
|
||||
"versions.empty": "لا توجد إصدارات متاحة بعد.",
|
||||
"versions.emptyDescription": "أنشئ الإصدار الأول قبل النشر إلى بيئة.",
|
||||
"versions.emptyTitle": "لا توجد إصدارات بعد",
|
||||
"versions.emptyWithCreate": "لا توجد إصدارات بعد. أنشئ أول إصدار قابل للنشر قبل النشر.",
|
||||
"versions.exportDsl": "تصدير DSL",
|
||||
"versions.exportDslFailed": "فشل في تصدير DSL.",
|
||||
"versions.exportingDsl": "جاري التصدير...",
|
||||
"versions.groupHeader.deploy": "نشر",
|
||||
"versions.groupHeader.promote": "نشر",
|
||||
"versions.groupHeader.rollback": "نشر الإصدار السابق",
|
||||
"versions.groupHeader.unavailable": "غير متاح",
|
||||
"versions.manualDslOption": "تحميل DSL",
|
||||
"versions.moreActions": "المزيد من الإجراءات",
|
||||
"versions.optional": "اختياري",
|
||||
"versions.promote": "نشر",
|
||||
"versions.promoteTo": "النشر إلى {{name}}",
|
||||
"versions.releaseAlreadyExists": "يوجد بالفعل إصدار بنفس المحتوى: {{name}}.",
|
||||
"versions.releaseContentCheckFailed": "فشل في التحقق من محتوى الإصدار.",
|
||||
"versions.releaseDescriptionLabel": "الوصف",
|
||||
"versions.releaseDescriptionPlaceholder": "صف هذا الإصدار",
|
||||
"versions.releaseHistory": "سجل الإصدارات",
|
||||
"versions.releaseNameConflict": "يوجد بالفعل إصدار بهذا الاسم. اختر اسمًا آخر.",
|
||||
"versions.releaseNameLabel": "اسم الإصدار",
|
||||
"versions.releaseNamePlaceholder": "اسم الإصدار",
|
||||
|
||||
@ -1,21 +1,10 @@
|
||||
{
|
||||
"applied.activeSubscription.description": "لديك اشتراك نشط. يمكنك استخدام الخصم التعليمي بعد انتهاء صلاحية اشتراكك. تأكيد اشتراكك في <stripeLink>Stripe</stripeLink>.",
|
||||
"applied.description": "تهانينا! لقد قدمت بنجاح طلباً للحصول على الخصم التعليمي.",
|
||||
"applied.noPaymentPermission.description": "ليس لديك صلاحية الدفع في هذه مساحة العمل. يرجى التبديل إلى مساحة عمل حيث يمكنك إدارة الفوترة لاستخدام الخصم التعليمي.",
|
||||
"applied.noPaymentPermission.returnHome": "العودة إلى Dify",
|
||||
"applied.step1.description": "لقد قدمت بنجاح طلباً للحصول على الخصم التعليمي.",
|
||||
"applied.step1.title": "الخطوة 1",
|
||||
"applied.step2.description": "اختر مساحة العمل التي تريد استخدامها مع الخصم التعليمي.",
|
||||
"applied.step2.title": "الخطوة 2",
|
||||
"applied.tabs.activeSubscription": "في الاشتراك",
|
||||
"applied.tabs.eligible": "يمكن الشراء",
|
||||
"applied.tabs.noPaymentPermission": "لا توجد صلاحية دفع",
|
||||
"applied.title": "تم تطبيق الخصم التعليمي",
|
||||
"applied.workspace.plan": "خطة مدفوعة",
|
||||
"applied.workspace.title": "مساحة العمل الحالية",
|
||||
"currentSigned": "تم تسجيل الدخول حاليًا باسم",
|
||||
"educationPricingConfirm.billingPeriod.monthly": "شهري",
|
||||
"educationPricingConfirm.billingPeriod.yearly": "سنوي",
|
||||
"educationPricingConfirm.cancel": "الاحتفاظ بالخطة الحالية",
|
||||
"educationPricingConfirm.continue": "التبديل إلى Professional السنوية",
|
||||
"educationPricingConfirm.description": "ينطبق الخصم التعليمي على خطة Professional السنوية فقط. الاحتفاظ بخطتك الحالية لن يتضمن الخصم.",
|
||||
@ -56,8 +45,6 @@
|
||||
"rejectTitle": "تم رفض التحقق التعليمي الخاص بك في Dify",
|
||||
"submit": "إرسال",
|
||||
"submitError": "فشل إرسال النموذج. يرجى المحاولة مرة أخرى لاحقًا.",
|
||||
"successContent": "لقد أصدرنا كوبون خصم 100٪ لخطة Dify Professional لحسابك. الكوبون ساري لمدة عام واحد، يرجى استخدامه خلال فترة الصلاحية.",
|
||||
"successTitle": "لقد حصلت على التحقق التعليمي من Dify",
|
||||
"toVerified": "احصل على التحقق التعليمي",
|
||||
"toVerifiedTip.coupon": "كوبون حصري 100٪",
|
||||
"toVerifiedTip.end": "لخطة Dify الاحترافية.",
|
||||
|
||||
@ -1,9 +1,4 @@
|
||||
{
|
||||
"acceptPP": "لقد قرأت وأوافق على سياسة الخصوصية",
|
||||
"accountAlreadyInited": "تمت تهيئة الحساب بالفعل",
|
||||
"activated": "سجل الدخول الآن",
|
||||
"activatedTipEnd": "فريق",
|
||||
"activatedTipStart": "لقد انضممت إلى",
|
||||
"adminInitPassword": "كلمة مرور تهيئة المسؤول",
|
||||
"back": "عودة",
|
||||
"backToLogin": "العودة لتسجيل الدخول",
|
||||
@ -17,16 +12,12 @@
|
||||
"checkCode.invalidCode": "رمز غير صالح",
|
||||
"checkCode.resend": "إعادة الإرسال",
|
||||
"checkCode.tipsPrefix": "نرسل رمز التحقق إلى ",
|
||||
"checkCode.useAnotherMethod": "استخدام طريقة أخرى",
|
||||
"checkCode.validTime": "ضع في اعتبارك أن الرمز صالح لمدة 5 دقائق",
|
||||
"checkCode.verificationCode": "رمز التحقق",
|
||||
"checkCode.verificationCodePlaceholder": "أدخل رمزًا مكونًا من 6 أرقام",
|
||||
"checkCode.verify": "تحقق",
|
||||
"checkEmailForResetLink": "يرجى التحقق من بريدك الإلكتروني للحصول على رابط لإعادة تعيين كلمة المرور الخاصة بك. إذا لم يظهر في غضون بضع دقائق، فتأكد من التحقق من مجلد الرسائل غير المرغوب فيها.",
|
||||
"confirmPassword": "تأكيد كلمة المرور",
|
||||
"confirmPasswordPlaceholder": "تأكيد كلمة المرور الجديدة",
|
||||
"continueWithCode": "المتابعة مع الرمز",
|
||||
"createAndSignIn": "إنشاء وتسجيل الدخول",
|
||||
"createSample": "بناءً على هذه المعلومات، سنقوم بإنشاء تطبيق تجريبي لك",
|
||||
"dontHave": "ليس لديك؟",
|
||||
"email": "عنوان البريد الإلكتروني",
|
||||
@ -40,7 +31,6 @@
|
||||
"error.nameEmpty": "الاسم مطلوب",
|
||||
"error.passwordEmpty": "كلمة المرور مطلوبة",
|
||||
"error.passwordInvalid": "يجب أن تحتوي كلمة المرور على أحرف وأرقام، ويجب أن يكون الطول أكبر من 8",
|
||||
"error.passwordLengthInValid": "يجب أن تتكون كلمة المرور من 8 أحرف على الأقل",
|
||||
"error.redirectUrlMissing": "رابط إعادة التوجيه مفقود",
|
||||
"error.registrationNotAllowed": "الحساب غير موجود. يرجى الاتصال بمسؤول النظام للتسجيل.",
|
||||
"explore": "استكشاف Dify",
|
||||
@ -54,7 +44,6 @@
|
||||
"interfaceLanguage": "لغة الواجهة",
|
||||
"invalid": "انتهت صلاحية الرابط",
|
||||
"invalidInvitationCode": "رمز دعوة غير صالح",
|
||||
"invalidToken": "رمز غير صالح أو منتهي الصلاحية",
|
||||
"invitationCode": "رمز الدعوة",
|
||||
"invitationCodePlaceholder": "رمز الدعوة الخاص بك",
|
||||
"join": "انضم ",
|
||||
@ -81,12 +70,9 @@
|
||||
"passwordChangedTip": "تم تغيير كلمة المرور الخاصة بك بنجاح",
|
||||
"passwordPlaceholder": "كلمة المرور الخاصة بك",
|
||||
"pp": "سياسة الخصوصية",
|
||||
"reset": "يرجى تشغيل الأمر التالي لإعادة تعيين كلمة المرور الخاصة بك",
|
||||
"resetLinkSent": "تم إرسال رابط إعادة التعيين",
|
||||
"resetPassword": "إعادة تعيين كلمة المرور",
|
||||
"resetPasswordDesc": "اكتب البريد الإلكتروني الذي استخدمته للتسجيل في Dify وسنرسل لك بريدًا إلكترونيًا لإعادة تعيين كلمة المرور.",
|
||||
"rightDesc": "بناء تطبيقات الذكاء الاصطناعي الجذابة بصريًا والقابلة للتشغيل والقابلة للتحسين بسهولة.",
|
||||
"rightTitle": "أطلق العنان للإمكانات الكاملة لـ LLM",
|
||||
"sendResetLink": "إرسال رابط إعادة التعيين",
|
||||
"sendUsMail": "أرسل لنا مقدمتك عبر البريد الإلكتروني، وسنتعامل مع طلب الدعوة.",
|
||||
"sendVerificationCode": "إرسال رمز التحقق",
|
||||
@ -110,8 +96,6 @@
|
||||
"validate": "تحقق",
|
||||
"webapp.disabled": "مصادقة Webapp معطلة. يرجى الاتصال بمسؤول النظام لتمكينها. يمكنك محاولة استخدام التطبيق مباشرة.",
|
||||
"webapp.login": "تسجيل الدخول",
|
||||
"webapp.noLoginMethod": "طريقة المصادقة غير مكونة لتطبيق الويب",
|
||||
"webapp.noLoginMethodTip": "يرجى الاتصال بمسؤول النظام لإضافة طريقة مصادقة.",
|
||||
"welcome": "👋 مرحبًا! يرجى تسجيل الدخول للبدء.",
|
||||
"withGitHub": "المتابعة مع GitHub",
|
||||
"withGoogle": "المتابعة مع Google",
|
||||
|
||||
@ -21,14 +21,11 @@
|
||||
"accessRule.expandSection": "توسيع {{title}}",
|
||||
"accessRule.individualPermissionSettings": "إعدادات الأذونات الفردية",
|
||||
"accessRule.individualPermissionSettingsTip": "عيّن استثناءات الأذونات لمتعاونين أو مجموعات محددة. تتجاوز هذه الإعدادات مستوى الوصول الافتراضي.",
|
||||
"accessRule.lockedSummary_one": "· {{count}} مقفل",
|
||||
"accessRule.lockedSummary_other": "· {{count}} مقفل",
|
||||
"accessRule.maintainer": "مشرف الصيانة",
|
||||
"accessRule.member": "عضو",
|
||||
"accessRule.newPermissionSet": "مجموعة أذونات جديدة",
|
||||
"accessRule.noAvailableMembers": "لا يوجد أعضاء متاحون للإضافة",
|
||||
"accessRule.noDescription": "لا يوجد وصف",
|
||||
"accessRule.noRoles": "لا توجد أدوار",
|
||||
"accessRule.noRules": "لا توجد قواعد وصول",
|
||||
"accessRule.noUserAccessSettings": "لا توجد إعدادات أذونات فردية",
|
||||
"accessRule.permission": "الإذن",
|
||||
|
||||
@ -1,60 +1,33 @@
|
||||
{
|
||||
"events.actionNum": "{{num}} {{event}} متضمن",
|
||||
"events.description": "الأحداث التي يمكن لمكون المشغل الإضافي هذا الاشتراك فيها",
|
||||
"events.empty": "لا توجد أحداث متاحة",
|
||||
"events.event": "حدث",
|
||||
"events.events": "أحداث",
|
||||
"events.item.noParameters": "لا توجد معلمات",
|
||||
"events.item.parameters": "{{count}} معلمات",
|
||||
"events.output": "إخراج",
|
||||
"events.title": "الأحداث المتاحة",
|
||||
"modal.apiKey.configuration.description": "إعداد معلمات الاشتراك الخاصة بك",
|
||||
"modal.apiKey.configuration.title": "تكوين الاشتراك",
|
||||
"modal.apiKey.title": "إنشاء باستخدام مفتاح API",
|
||||
"modal.apiKey.verify.description": "يرجى تقديم بيانات اعتماد واجهة برمجة التطبيقات الخاصة بك للتحقق من الوصول",
|
||||
"modal.apiKey.verify.error": "فشل التحقق من بيانات الاعتماد. يرجى التحقق من مفتاح API الخاص بك.",
|
||||
"modal.apiKey.verify.success": "تم التحقق من بيانات الاعتماد بنجاح",
|
||||
"modal.apiKey.verify.title": "التحقق من بيانات الاعتماد",
|
||||
"modal.common.authorize": "تفويض",
|
||||
"modal.common.authorizing": "جارٍ التفويض...",
|
||||
"modal.common.back": "رجوع",
|
||||
"modal.common.cancel": "إلغاء",
|
||||
"modal.common.create": "إنشاء",
|
||||
"modal.common.creating": "جارٍ الإنشاء...",
|
||||
"modal.common.next": "التالي",
|
||||
"modal.common.verify": "تحقق",
|
||||
"modal.common.verifying": "جارٍ التحقق...",
|
||||
"modal.errors.authFailed": "فشل التفويض",
|
||||
"modal.errors.createFailed": "فشل إنشاء الاشتراك",
|
||||
"modal.errors.networkError": "خطأ في الشبكة، يرجى المحاولة مرة أخرى",
|
||||
"modal.errors.updateFailed": "فشل في تحديث الاشتراك",
|
||||
"modal.errors.verifyFailed": "فشل التحقق من بيانات الاعتماد",
|
||||
"modal.form.callbackUrl.description": "سيتلقى عنوان URL هذا أحداث web hook",
|
||||
"modal.form.callbackUrl.label": "عنوان URL لرد الاتصال",
|
||||
"modal.form.callbackUrl.placeholder": "جارٍ الإنشاء...",
|
||||
"modal.form.callbackUrl.privateAddressWarning": "يبدو أن عنوان URL هذا هو عنوان داخلي، مما قد يتسبب في فشل طلبات web hook. يمكنك تغيير TRIGGER_URL إلى عنوان عام.",
|
||||
"modal.form.callbackUrl.tooltip": "توفير نقطة نهاية يمكن الوصول إليها بشكل عام يمكنها استلام طلبات رد الاتصال من مزود المشغل.",
|
||||
"modal.form.subscriptionName.label": "اسم الاشتراك",
|
||||
"modal.form.subscriptionName.placeholder": "أدخل اسم الاشتراك",
|
||||
"modal.form.subscriptionName.required": "اسم الاشتراك مطلوب",
|
||||
"modal.manual.description": "تكوين اشتراك web hook الخاص بك يدويًا",
|
||||
"modal.manual.logs.loading": "في انتظار الطلب من {{pluginName}}...",
|
||||
"modal.manual.logs.request": "طلب",
|
||||
"modal.manual.logs.title": "سجلات الطلب",
|
||||
"modal.manual.title": "الإعداد اليدوي",
|
||||
"modal.oauth.authorization.authFailed": "فشل الحصول على معلومات تفويض OAuth",
|
||||
"modal.oauth.authorization.authSuccess": "تم التفويض بنجاح",
|
||||
"modal.oauth.authorization.authorizeButton": "تفويض مع {{provider}}",
|
||||
"modal.oauth.authorization.description": "تفويض Dify للوصول إلى حسابك",
|
||||
"modal.oauth.authorization.redirectUrl": "عنوان URL لإعادة التوجيه",
|
||||
"modal.oauth.authorization.redirectUrlHelp": "استخدم عنوان URL هذا في تكوين تطبيق OAuth الخاص بك",
|
||||
"modal.oauth.authorization.title": "تفويض OAuth",
|
||||
"modal.oauth.authorization.waitingAuth": "في انتظار التفويض...",
|
||||
"modal.oauth.authorization.waitingJump": "تم التفويض، في انتظار الانتقال",
|
||||
"modal.oauth.configuration.description": "إعداد معلمات الاشتراك الخاصة بك بعد التفويض",
|
||||
"modal.oauth.configuration.failed": "فشل تكوين OAuth",
|
||||
"modal.oauth.configuration.success": "تم تكوين OAuth بنجاح",
|
||||
"modal.oauth.configuration.title": "تكوين الاشتراك",
|
||||
"modal.oauth.remove.failed": "فشل إزالة OAuth",
|
||||
"modal.oauth.remove.success": "تمت إزالة OAuth بنجاح",
|
||||
"modal.oauth.save.success": "تم حفظ تكوين OAuth بنجاح",
|
||||
@ -63,29 +36,22 @@
|
||||
"modal.steps.configuration": "تكوين",
|
||||
"modal.steps.verify": "تحقق",
|
||||
"node.status.warning": "قطع الاتصال",
|
||||
"subscription.addType.description": "اختر الطريقة التي تريد بها إنشاء اشتراك المشغل الخاص بك",
|
||||
"subscription.addType.options.apikey.description": "إنشاء اشتراك تلقائيًا باستخدام بيانات اعتماد API",
|
||||
"subscription.addType.options.apikey.title": "إنشاء باستخدام مفتاح API",
|
||||
"subscription.addType.options.manual.description": "الصق عنوان URL لإنشاء اشتراك جديد",
|
||||
"subscription.addType.options.manual.tip": "تكوين عنوان URL على منصة تابعة لجهة خارجية يدويًا",
|
||||
"subscription.addType.options.manual.title": "الإعداد اليدوي",
|
||||
"subscription.addType.options.oauth.clientSettings": "إعدادات عميل OAuth",
|
||||
"subscription.addType.options.oauth.clientTitle": "عميل OAuth",
|
||||
"subscription.addType.options.oauth.custom": "مخصص",
|
||||
"subscription.addType.options.oauth.default": "افتراضي",
|
||||
"subscription.addType.options.oauth.description": "التفويض مع منصة تابعة لجهة خارجية لإنشاء اشتراك",
|
||||
"subscription.addType.options.oauth.title": "إنشاء باستخدام OAuth",
|
||||
"subscription.addType.title": "إضافة اشتراك",
|
||||
"subscription.createButton.apiKey": "اشتراك جديد باستخدام مفتاح API",
|
||||
"subscription.createButton.manual": "الصق عنوان URL لإنشاء اشتراك جديد",
|
||||
"subscription.createButton.oauth": "اشتراك جديد باستخدام OAuth",
|
||||
"subscription.createFailed": "فشل إنشاء الاشتراك",
|
||||
"subscription.createSuccess": "تم إنشاء الاشتراك بنجاح",
|
||||
"subscription.empty.button": "اشتراك جديد",
|
||||
"subscription.empty.title": "لا توجد اشتراكات",
|
||||
"subscription.list.addButton": "إضافة",
|
||||
"subscription.list.item.actions.delete": "حذف",
|
||||
"subscription.list.item.actions.deleteConfirm.cancel": "إلغاء",
|
||||
"subscription.list.item.actions.deleteConfirm.confirm": "تأكيد الحذف",
|
||||
"subscription.list.item.actions.deleteConfirm.confirmInputPlaceholder": "أدخل \"{{name}}\" للتأكيد.",
|
||||
"subscription.list.item.actions.deleteConfirm.confirmInputTip": "يرجى إدخال \"{{name}}\" للتأكيد.",
|
||||
@ -98,21 +64,12 @@
|
||||
"subscription.list.item.actions.edit.error": "فشل في تحديث الاشتراك",
|
||||
"subscription.list.item.actions.edit.success": "تم تحديث الاشتراك بنجاح",
|
||||
"subscription.list.item.actions.edit.title": "تعديل الاشتراك",
|
||||
"subscription.list.item.credentialType.api_key": "مفتاح API",
|
||||
"subscription.list.item.credentialType.oauth2": "OAuth",
|
||||
"subscription.list.item.credentialType.unauthorized": "يدوي",
|
||||
"subscription.list.item.disabled": "معطل",
|
||||
"subscription.list.item.enabled": "ممكن",
|
||||
"subscription.list.item.noUsed": "لا يوجد سير عمل مستخدم",
|
||||
"subscription.list.item.status.active": "نشط",
|
||||
"subscription.list.item.status.inactive": "غير نشط",
|
||||
"subscription.list.item.usedByNum": "تستخدم من قبل {{num}} سير عمل",
|
||||
"subscription.list.tip": "استلام الأحداث عبر الاشتراك",
|
||||
"subscription.list.title": "الاشتراكات",
|
||||
"subscription.listNum": "{{num}} اشتراكات",
|
||||
"subscription.maxCount": "الحد الأقصى {{num}} اشتراكات",
|
||||
"subscription.noSubscriptionSelected": "لم يتم تحديد أي اشتراك",
|
||||
"subscription.selectPlaceholder": "حدد اشتراكًا",
|
||||
"subscription.subscriptionRemoved": "تمت إزالة الاشتراك",
|
||||
"subscription.title": "الاشتراكات"
|
||||
"subscription.subscriptionRemoved": "تمت إزالة الاشتراك"
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
{
|
||||
"actionLogs": "سجلات العمل",
|
||||
"circularInvocationTip": "يوجد استدعاء دائري للأدوات/العقد في سير العمل الحالي.",
|
||||
"detail": "تفاصيل",
|
||||
"input": "إدخال",
|
||||
@ -10,7 +9,6 @@
|
||||
"meta.time": "الوقت المستغرق",
|
||||
"meta.title": "البيانات الوصفية",
|
||||
"meta.tokens": "إجمالي الرموز",
|
||||
"meta.version": "الإصدار",
|
||||
"result": "نتيجة",
|
||||
"resultEmpty.link": "لوحة التفاصيل",
|
||||
"resultEmpty.tipLeft": "يرجى الذهاب إلى ",
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
"chat.chatFormTip": "لا يمكن تعديل إعدادات الدردشة بعد بدء الدردشة.",
|
||||
"chat.chatSettingsTitle": "إعداد الدردشة الجديدة",
|
||||
"chat.collapse": "طي",
|
||||
"chat.configDisabled": "تم استخدام إعدادات الجلسة السابقة لهذه الجلسة.",
|
||||
"chat.configStatusDes": "قبل البدء، يمكنك تعديل إعدادات المحادثة",
|
||||
"chat.deleteConversation.content": "هل أنت متأكد أنك تريد حذف هذه المحادثة؟",
|
||||
"chat.deleteConversation.title": "حذف المحادثة",
|
||||
"chat.expand": "توسيع",
|
||||
@ -12,27 +10,18 @@
|
||||
"chat.newChatTip": "موجود بالفعل في دردشة جديدة",
|
||||
"chat.pinnedTitle": "مثبت",
|
||||
"chat.poweredBy": "مشغل بواسطة",
|
||||
"chat.privacyPolicyLeft": "يرجى قراءة ",
|
||||
"chat.privacyPolicyMiddle": "سياسة الخصوصية",
|
||||
"chat.privacyPolicyRight": " المقدمة من مطور التطبيق.",
|
||||
"chat.privatePromptConfigTitle": "إعدادات المحادثة",
|
||||
"chat.prompt": "مطالبة",
|
||||
"chat.publicPromptConfigTitle": "المطالبة الأولية",
|
||||
"chat.resetChat": "إعادة تعيين المحادثة",
|
||||
"chat.startChat": "بدء الدردشة",
|
||||
"chat.temporarySystemIssue": "عذرًا، مشكلة مؤقتة في النظام.",
|
||||
"chat.tryToSolve": "حاول الحل",
|
||||
"chat.unpinnedTitle": "الأخيرة",
|
||||
"chat.viewChatSettings": "عرض إعدادات الدردشة",
|
||||
"common.appUnavailable": "التطبيق غير متوفر",
|
||||
"common.appUnknownError": "التطبيق غير متوفر",
|
||||
"common.welcome": "",
|
||||
"generation.batchFailed.info": "{{num}} عمليات تنفيذ فاشلة",
|
||||
"generation.batchFailed.outputPlaceholder": "لا يوجد محتوى إخراج",
|
||||
"generation.batchFailed.retry": "إعادة المحاولة",
|
||||
"generation.browse": "تصفح",
|
||||
"generation.completionResult": "نتيجة الإكمال",
|
||||
"generation.copy": "نسخ",
|
||||
"generation.csvStructureTitle": "يجب أن يتوافق ملف CSV مع الهيكل التالي:",
|
||||
"generation.csvUploadTitle": "اسحب وأفلت ملف CSV هنا، أو ",
|
||||
"generation.downloadTemplate": "تنزيل النموذج هنا",
|
||||
@ -46,9 +35,6 @@
|
||||
"generation.executions": "{{num}} عمليات تشغيل",
|
||||
"generation.field": "حقل",
|
||||
"generation.noData": "سيعطيك الذكاء الاصطناعي ما تريد هنا.",
|
||||
"generation.queryPlaceholder": "اكتب محتوى الاستعلام الخاص بك...",
|
||||
"generation.queryTitle": "محتوى الاستعلام",
|
||||
"generation.resultTitle": "إكمال الذكاء الاصطناعي",
|
||||
"generation.run": "تنفيذ",
|
||||
"generation.savedNoData.description": "ابدأ في إنشاء المحتوى، وابحث عن نتائجك المحفوظة هنا.",
|
||||
"generation.savedNoData.startCreateContent": "ابدأ في إنشاء المحتوى",
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
{
|
||||
"cancel": "إلغاء",
|
||||
"continueEditing": "متابعة التحرير",
|
||||
"create": "إنشاء مقتطف",
|
||||
"createFailed": "فشل إنشاء المقتطف",
|
||||
"createFrom": "إنشاء من",
|
||||
"createFromBlank": "إنشاء من الفراغ",
|
||||
"currentDSLVersion": "إصدار DSL المدعوم من النظام: ",
|
||||
"defaultName": "مقطع بدون عنوان",
|
||||
"deleteConfirmContent": "لا يمكن التراجع عن هذا. لن تتأثر عمليات سير العمل التي تستخدم هذا المقتطف.",
|
||||
"deleteConfirmTitle": "هل تريد حذف المقتطف؟",
|
||||
"deleteFailed": "فشل حذف المقتطف",
|
||||
@ -16,7 +14,6 @@
|
||||
"discardChangesTitle": "هل تريد تجاهل مسودة التغييرات؟",
|
||||
"discardDraft": "تجاهل المسودة",
|
||||
"doNotSave": "اترك كمسودة",
|
||||
"draft": "مسودة",
|
||||
"dslVersionMismatchDescription": "تم اكتشاف اختلاف كبير في إصدارات DSL. قد يؤدي فرض الاستيراد إلى حدوث خلل في المقتطف.",
|
||||
"dslVersionMismatchQuestion": "هل تريد الاستمرار؟",
|
||||
"dslVersionMismatchTitle": "عدم توافق الإصدار",
|
||||
@ -30,40 +27,25 @@
|
||||
"exportFailed": "فشل تصدير المقتطف.",
|
||||
"importDSLFile": "استيراد ملف دي اس ال",
|
||||
"importDialogTitle": "استيراد مقتطف",
|
||||
"importFailed": "فشل استيراد مقتطف DSL",
|
||||
"importFromDSLFile": "من ملف DSL",
|
||||
"importFromDSLUrl": "من URL",
|
||||
"importFromDSLUrlPlaceholder": "الصق رابط DSL هنا",
|
||||
"importSuccess": "تم استيراد المقتطف",
|
||||
"importedDSLVersion": "إصدار DSL المقتطف الحالي: ",
|
||||
"inputFieldButton": "حقل الإدخال",
|
||||
"inputVariables": "متغيرات الإدخال",
|
||||
"management": "إدارة المقتطفات",
|
||||
"menu.deleteSnippet": "حذف",
|
||||
"menu.editInfo": "تحرير المعلومات",
|
||||
"menu.exportSnippet": "تصدير مقتطف",
|
||||
"notFoundDescription": "لم يتم العثور على نموذج المقتطف المطلوب.",
|
||||
"notFoundTitle": "لم يتم العثور على المقتطف",
|
||||
"panelDescription": "يحدد حقول الإدخال التي تسمح للمقتطف بتلقي البيانات من العقد الأخرى.",
|
||||
"panelPrimaryGroup": "المدخلات الأساسية",
|
||||
"panelSecondaryGroup": "المدخلات الاختيارية",
|
||||
"panelTitle": "حقل الإدخال",
|
||||
"publishButton": "نشر",
|
||||
"publishFailed": "فشل نشر المقتطف",
|
||||
"publishMenuCurrentDraft": "المسودة الحالية غير منشورة",
|
||||
"publishSuccess": "تم نشر المقتطف",
|
||||
"save": "حفظ",
|
||||
"saveAndExit": "حفظ والخروج",
|
||||
"saveBeforeLeavingDescription": "احفظ لجعل هذا الإصدار متاحًا للاستخدام في مهام سير العمل. أو احتفظ بتعديلاتك كمسودة في الوقت الحالي.",
|
||||
"saveBeforeLeavingTitle": "هل تريد حفظ التغييرات قبل المغادرة؟",
|
||||
"saveSuccess": "تم حفظ المقتطف",
|
||||
"sectionOrchestrate": "نسق",
|
||||
"testRunButton": "تشغيل تجريبي",
|
||||
"typeLabel": "مقتطف",
|
||||
"unknownUser": "المستخدم",
|
||||
"unsavedChanges": "لا يتم حفظ التغييرات الحالية.",
|
||||
"updatedBy": "{{name}} تم التحديث {{time}}",
|
||||
"usageCount": "تم الاستخدام {{count}} مرات",
|
||||
"variableInspect": "فحص متغير",
|
||||
"viewOnly": "عرض فقط"
|
||||
}
|
||||
|
||||
@ -1,9 +1,6 @@
|
||||
{
|
||||
"dateFormats.display": "MMMM D, YYYY",
|
||||
"dateFormats.displayWithTime": "MMMM D, YYYY hh:mm A",
|
||||
"dateFormats.input": "YYYY-MM-DD",
|
||||
"dateFormats.output": "YYYY-MM-DD",
|
||||
"dateFormats.outputWithTime": "YYYY-MM-DDTHH:mm:ss.SSSZ",
|
||||
"daysInWeek.Fri": "الجمعة",
|
||||
"daysInWeek.Mon": "الاثنين",
|
||||
"daysInWeek.Sat": "السبت",
|
||||
|
||||
@ -7,12 +7,10 @@
|
||||
"addToolModal.all.title": "لا توجد أدوات متاحة",
|
||||
"addToolModal.built-in.tip": "",
|
||||
"addToolModal.built-in.title": "لا توجد أداة مضمنة متاحة",
|
||||
"addToolModal.category": "فئة",
|
||||
"addToolModal.custom.tip": "إنشاء أداة مخصصة",
|
||||
"addToolModal.custom.title": "لا توجد أداة مخصصة متاحة",
|
||||
"addToolModal.mcp.tip": "إضافة خادم MCP",
|
||||
"addToolModal.mcp.title": "لا توجد أداة MCP متاحة",
|
||||
"addToolModal.type": "نوع",
|
||||
"addToolModal.workflow.tip": "نشر سير العمل كأدوات في الاستوديو",
|
||||
"addToolModal.workflow.title": "لا يوجد أداة سير عمل متاحة",
|
||||
"allMCP": "كل MCP",
|
||||
@ -27,11 +25,7 @@
|
||||
"auth.unauthorized": "غير مصرح",
|
||||
"author": "بواسطة",
|
||||
"builtInPromptTitle": "موجه",
|
||||
"contribute.line1": "أنا مهتم بـ ",
|
||||
"contribute.line2": "المساهمة بأدوات في Dify.",
|
||||
"contribute.viewGuide": "عرض الدليل",
|
||||
"copyToolName": "نسخ الاسم",
|
||||
"createCustomTool": "إنشاء أداة مخصصة",
|
||||
"createSwaggerAPIAsTool": "Create a Swagger API as Tool",
|
||||
"createTool.authHeaderPrefix.title": "نوع المصادقة",
|
||||
"createTool.authHeaderPrefix.types.basic": "أساسي",
|
||||
@ -97,13 +91,11 @@
|
||||
"createTool.toolInput.title": "إدخال الأداة",
|
||||
"createTool.toolNamePlaceHolder": "أدخل اسم الأداة",
|
||||
"createTool.toolOutput.description": "الوصف",
|
||||
"createTool.toolOutput.name": "الاسم",
|
||||
"createTool.toolOutput.reserved": "محجوز",
|
||||
"createTool.toolOutput.reservedParameterDuplicateTip": "text و json و files هي متغيرات محجوزة. لا يمكن أن تظهر المتغيرات بهذه الأسماء في مخطط الإخراج.",
|
||||
"createTool.toolOutput.title": "إخراج الأداة",
|
||||
"createTool.urlError": "يرجى إدخال عنوان URL صالح",
|
||||
"createTool.viewSchemaSpec": "عرض مواصفات OpenAPI-Swagger",
|
||||
"customToolTip": "تعرف على المزيد حول أدوات Dify المخصصة",
|
||||
"howToGet": "كيفية الحصول على",
|
||||
"includeToolNum": "{{num}} {{action}} متضمن",
|
||||
"mcp.authorize": "تفويض",
|
||||
@ -183,25 +175,16 @@
|
||||
"mcp.update": "تحديث",
|
||||
"mcp.updateTime": "محدث",
|
||||
"mcp.updateTools": "جارٍ تحديث الأدوات...",
|
||||
"mcp.updating": "جارٍ التحديث",
|
||||
"noCustomTool.content": "أضف وأدر أدواتك المخصصة هنا لبناء تطبيقات الذكاء الاصطناعي.",
|
||||
"noCustomTool.createTool": "إنشاء أداة",
|
||||
"noCustomTool.title": "لا توجد أدوات مخصصة!",
|
||||
"noSearchRes.content": "لم نتمكن من العثور على أي أدوات تطابق بحثك.",
|
||||
"noSearchRes.reset": "إعادة تعيين البحث",
|
||||
"noSearchRes.title": "عذرًا، لا توجد نتائج!",
|
||||
"noTools": "لم يتم العثور على أدوات",
|
||||
"notAuthorized": "غير مفوض",
|
||||
"openInStudio": "فتح في الاستوديو",
|
||||
"setBuiltInTools.file": "ملف",
|
||||
"setBuiltInTools.info": "معلومات",
|
||||
"setBuiltInTools.infoAndSetting": "المعلومات والإعدادات",
|
||||
"setBuiltInTools.number": "رقم",
|
||||
"setBuiltInTools.parameters": "معلمات",
|
||||
"setBuiltInTools.required": "مطلوب",
|
||||
"setBuiltInTools.setting": "إعداد",
|
||||
"setBuiltInTools.string": "سلسلة",
|
||||
"setBuiltInTools.toolDescription": "وصف الأداة",
|
||||
"swaggerAPIAsToolTip": "Learn more about Swagger API as Tool",
|
||||
"test.parameters": "المعلمات",
|
||||
"test.parametersValue": "المعلمات والقيمة",
|
||||
@ -213,7 +196,6 @@
|
||||
"thought.responseTitle": "استجابة",
|
||||
"thought.used": "مستخدم",
|
||||
"thought.using": "يستخدم",
|
||||
"title": "أدوات",
|
||||
"toolNameUsageTip": "اسم استدعاء الأداة لمنطق الوكيل والتحفيز",
|
||||
"toolRemoved": "تمت إزالة الأداة",
|
||||
"type.builtIn": "أدوات",
|
||||
|
||||
@ -1,29 +1,14 @@
|
||||
{
|
||||
"agentDetail.access.actionUnavailable": "Diese Aktion ist noch nicht verfügbar.",
|
||||
"agentDetail.access.actions.monitoring": "Monitoring",
|
||||
"agentDetail.access.copyAccessUrl": "Zugriffs-URL kopieren",
|
||||
"agentDetail.access.copyFailed": "Referenz konnte nicht kopiert werden.",
|
||||
"agentDetail.access.copyReference": "Referenz für {{name}} kopieren",
|
||||
"agentDetail.access.copyServiceEndpoint": "Service-API-Endpunkt kopieren",
|
||||
"agentDetail.access.description": "Alle Oberflächen, über die dieser Agent erreichbar ist.",
|
||||
"agentDetail.access.empty": "Keine verknüpften Zugangspunkte",
|
||||
"agentDetail.access.emptyDescription": "Dieser Roster-Agent hat noch keine App- oder Workflow-Referenzen.",
|
||||
"agentDetail.access.entries.agentApp.description": "Mit diesem Roster-Agent verknüpfte Agent-App.",
|
||||
"agentDetail.access.entries.agentApp.name": "Agent-App",
|
||||
"agentDetail.access.entries.workflow.description": "Mit diesem Roster-Agent verknüpfte Workflow- und Knotenreferenz.",
|
||||
"agentDetail.access.entries.workflow.name": "Workflow-Knoten",
|
||||
"agentDetail.access.entryCount_one": "{{count}} Eintrag",
|
||||
"agentDetail.access.entryCount_other": "{{count}} Einträge",
|
||||
"agentDetail.access.groups.references.heading": "Referenzen",
|
||||
"agentDetail.access.groups.references.label": "Verknüpfte Referenzen",
|
||||
"agentDetail.access.learnMore": "Mehr erfahren",
|
||||
"agentDetail.access.moreActions": "Weitere Aktionen für {{name}}",
|
||||
"agentDetail.access.serviceApi.actions.apiKey": "API Key",
|
||||
"agentDetail.access.serviceApi.actions.apiReference": "API Reference",
|
||||
"agentDetail.access.serviceApi.endpoint": "Service-API-Endpunkt",
|
||||
"agentDetail.access.serviceApi.title": "Backend-Service-API",
|
||||
"agentDetail.access.status.disabled": "Deaktiviert",
|
||||
"agentDetail.access.status.enabled": "Aktiviert",
|
||||
"agentDetail.access.status.inService": "In Betrieb",
|
||||
"agentDetail.access.status.outOfService": "Außer Betrieb",
|
||||
"agentDetail.access.title": "Zugangspunkt",
|
||||
@ -69,11 +54,9 @@
|
||||
"agentDetail.configure.advancedSettings.envEditor.scopeSecret": "Secret",
|
||||
"agentDetail.configure.advancedSettings.envEditor.scopeSelector": "Geltungsbereich der Umgebungsvariable auswählen",
|
||||
"agentDetail.configure.advancedSettings.envEditor.tip": "Umgebungsvariablen, die diesem Agenten zur Laufzeit zur Verfügung stehen.",
|
||||
"agentDetail.configure.advancedSettings.envEditor.toggle": "Env Editor umschalten",
|
||||
"agentDetail.configure.advancedSettings.envEditor.valueColumn": "Value",
|
||||
"agentDetail.configure.advancedSettings.envEditor.valuePlaceholder": "Value",
|
||||
"agentDetail.configure.advancedSettings.label": "Erweiterte Einstellungen",
|
||||
"agentDetail.configure.advancedSettings.toggle": "Erweiterte Einstellungen umschalten",
|
||||
"agentDetail.configure.chatFeatures.description": "Gestalten Sie das Chat-Erlebnis für Endnutzer in Ihrer Webapp und in Chat-Oberflächen.",
|
||||
"agentDetail.configure.chatFeatures.title": "Chat-Funktionen",
|
||||
"agentDetail.configure.files.add": "Datei hinzufügen",
|
||||
@ -85,7 +68,6 @@
|
||||
"agentDetail.configure.files.preview.unsupported": "Für diese Datei wird keine Vorschau unterstützt.",
|
||||
"agentDetail.configure.files.remove": "{{name}} entfernen",
|
||||
"agentDetail.configure.files.tip": "Dateien, die dieser Agent bei der Orchestrierung von Aufgaben verwenden kann.",
|
||||
"agentDetail.configure.files.toggle": "Dateien umschalten",
|
||||
"agentDetail.configure.files.treeLabel": "Agentendateien",
|
||||
"agentDetail.configure.files.upload.action": "Hochladen",
|
||||
"agentDetail.configure.files.upload.browse": "durchsuchen",
|
||||
@ -133,7 +115,6 @@
|
||||
"agentDetail.configure.preview.empty.defaultAgentName": "Agent",
|
||||
"agentDetail.configure.preview.empty.description": "Senden Sie eine Nachricht, um den aktuellen Entwurf zu testen.",
|
||||
"agentDetail.configure.preview.empty.noInstructionsDescription": "Noch keine Anweisungen, daher kommen die Antworten vom reinen Modell.",
|
||||
"agentDetail.configure.preview.endUserAuth": "Endbenutzer-Authentifizierung",
|
||||
"agentDetail.configure.preview.restart": "Vorschau neu starten",
|
||||
"agentDetail.configure.preview.title": "Vorschau",
|
||||
"agentDetail.configure.prompt.copied": "Prompt kopiert",
|
||||
@ -145,7 +126,6 @@
|
||||
"agentDetail.configure.prompt.insert.tenders": "Ausschreibungen starten",
|
||||
"agentDetail.configure.prompt.label": "Prompt",
|
||||
"agentDetail.configure.prompt.mention.davidHayes": "David Hayes",
|
||||
"agentDetail.configure.prompt.mention.label": "Erwähnen",
|
||||
"agentDetail.configure.prompt.mention.priyaRamanathan": "Priya Ramanathan",
|
||||
"agentDetail.configure.prompt.placeholder": "Anweisungen hier eintragen,",
|
||||
"agentDetail.configure.prompt.tip": "Definieren Sie, wie dieser Agent Eingaben interpretiert, Tools aufruft und Ausgaben erzeugt.",
|
||||
@ -170,7 +150,6 @@
|
||||
"agentDetail.configure.skills.add": "Skill hinzufügen",
|
||||
"agentDetail.configure.skills.detail.contentRegion": "Skill-Detailinhalt",
|
||||
"agentDetail.configure.skills.detail.fileCount": "{{count}} DATEIEN",
|
||||
"agentDetail.configure.skills.detail.fileTreeLabel": "Skill-Dateien",
|
||||
"agentDetail.configure.skills.detail.files": "Dateien",
|
||||
"agentDetail.configure.skills.empty.description": "Skills geben dem Agenten wiederverwendbare Fachkenntnisse, die er bei der Arbeit nutzen kann",
|
||||
"agentDetail.configure.skills.empty.title": "Noch keine Skills",
|
||||
@ -178,7 +157,6 @@
|
||||
"agentDetail.configure.skills.label": "Skills",
|
||||
"agentDetail.configure.skills.remove": "{{name}} entfernen",
|
||||
"agentDetail.configure.skills.tip": "Skills, die dieser Agent bei der Orchestrierung von Aufgaben verwenden kann.",
|
||||
"agentDetail.configure.skills.toggle": "Skills umschalten",
|
||||
"agentDetail.configure.skills.upload.action": "Hochladen",
|
||||
"agentDetail.configure.skills.upload.browse": "durchsuchen",
|
||||
"agentDetail.configure.skills.upload.description": "Laden Sie ein .zip- oder .skill-Paket für diesen Agenten hoch.",
|
||||
@ -211,18 +189,14 @@
|
||||
"agentDetail.configure.tools.cliDialog.title": "CLI-Tool hinzufügen",
|
||||
"agentDetail.configure.tools.cliTool": "CLI-Tool",
|
||||
"agentDetail.configure.tools.credential.authOne": "Auth 1",
|
||||
"agentDetail.configure.tools.credential.endUserOAuth": "Endbenutzer · OAuth",
|
||||
"agentDetail.configure.tools.editAction": "{{name}} bearbeiten",
|
||||
"agentDetail.configure.tools.empty.description": "Tools ermöglichen es dem Agenten zu handeln, z. B. das Web zu durchsuchen oder Ihre Apps aufzurufen",
|
||||
"agentDetail.configure.tools.empty.title": "Noch keine Tools",
|
||||
"agentDetail.configure.tools.label": "Tools",
|
||||
"agentDetail.configure.tools.moreActions": "Weitere Aktionen für {{name}}",
|
||||
"agentDetail.configure.tools.pluginType": "Plugin",
|
||||
"agentDetail.configure.tools.preAuthorize": "Vorab autorisieren",
|
||||
"agentDetail.configure.tools.removeAction": "{{name}} entfernen",
|
||||
"agentDetail.configure.tools.removeProvider": "Alle Tools entfernen",
|
||||
"agentDetail.configure.tools.tip": "Tools, die dieser Agent bei der Orchestrierung von Aufgaben aufrufen kann.",
|
||||
"agentDetail.configure.tools.toggle": "Tools umschalten",
|
||||
"agentDetail.configure.tools.toolTabs.all": "Alle",
|
||||
"agentDetail.configure.tools.toolTabs.cli": "CLI",
|
||||
"agentDetail.configure.tools.toolTabs.custom": "Benutzerdefiniert",
|
||||
@ -230,11 +204,9 @@
|
||||
"agentDetail.configure.tools.toolTabs.plugins": "Plugins",
|
||||
"agentDetail.configure.tools.toolTabs.workflow": "Workflow",
|
||||
"agentDetail.documentTitle": "Agent",
|
||||
"agentDetail.history": "Verlauf",
|
||||
"agentDetail.logs.description": "Vollständige Logs zeichnen den Laufzeitstatus der Anwendung auf, einschließlich Benutzereingaben, Agentenantworten, Planung und Tool-Nutzung.",
|
||||
"agentDetail.logs.empty": "Keine Logs gefunden",
|
||||
"agentDetail.logs.filters.period.allTime": "Gesamter Zeitraum",
|
||||
"agentDetail.logs.filters.period.label": "Log-Zeitraum",
|
||||
"agentDetail.logs.filters.period.last30days": "Letzte 30 Tage",
|
||||
"agentDetail.logs.filters.period.last7days": "Letzte 7 Tage",
|
||||
"agentDetail.logs.filters.search.label": "Logs durchsuchen",
|
||||
@ -252,7 +224,6 @@
|
||||
"agentDetail.logs.filters.source.workflow": "Workflow",
|
||||
"agentDetail.logs.learnMore": "Mehr erfahren",
|
||||
"agentDetail.logs.loadFailed": "Logs konnten nicht geladen werden",
|
||||
"agentDetail.logs.loading": "Logs werden geladen…",
|
||||
"agentDetail.logs.notAvailable": "Nicht verfügbar",
|
||||
"agentDetail.logs.table.createdTime": "Erstellungszeit",
|
||||
"agentDetail.logs.table.endUser": "Endbenutzer",
|
||||
@ -273,19 +244,7 @@
|
||||
"agentDetail.memorySettings.notConfigured": "Nicht konfiguriert",
|
||||
"agentDetail.memorySettings.scopeLabel": "Speicherbereich",
|
||||
"agentDetail.memorySettings.title": "Speicher",
|
||||
"agentDetail.metadata.activeVersionLabel": "Aktive Version",
|
||||
"agentDetail.metadata.appIdLabel": "App-ID",
|
||||
"agentDetail.metadata.description": "Schreibgeschützte Roster-Felder, die vom Agenten-Backend zurückgegeben werden.",
|
||||
"agentDetail.metadata.emptyValue": "Nicht verfügbar",
|
||||
"agentDetail.metadata.scopeLabel": "Geltungsbereich",
|
||||
"agentDetail.metadata.scopes.roster": "Roster",
|
||||
"agentDetail.metadata.scopes.workflow_only": "Nur Workflow",
|
||||
"agentDetail.metadata.sourceLabel": "Quelle",
|
||||
"agentDetail.metadata.statusLabel": "Status",
|
||||
"agentDetail.metadata.title": "Metadaten",
|
||||
"agentDetail.metadata.updatedAtLabel": "Aktualisiert am",
|
||||
"agentDetail.metadata.workflowIdLabel": "Workflow-ID",
|
||||
"agentDetail.metadata.workflowNodeIdLabel": "Workflow-Knoten-ID",
|
||||
"agentDetail.monitoring.change": "{{value}} im Vergleich zum Vorzeitraum",
|
||||
"agentDetail.monitoring.dateRangeLabel": "Datumsbereich",
|
||||
"agentDetail.monitoring.description": "Verfolgen Sie Aktivität, Kosten und Interaktionsqualität des wiederverwendbaren Agenten über Workflows hinweg.",
|
||||
@ -319,15 +278,12 @@
|
||||
"agentDetail.monitoring.units.tokenPerSecond": "Token/s",
|
||||
"agentDetail.navigationLabel": "Agenten-Navigation",
|
||||
"agentDetail.publish": "Veröffentlichen",
|
||||
"agentDetail.publishSoon": "Demnächst",
|
||||
"agentDetail.sections.access": "Zugangspunkt",
|
||||
"agentDetail.sections.configure": "Orchestrieren",
|
||||
"agentDetail.sections.logs": "Logs",
|
||||
"agentDetail.sections.monitoring": "Monitoring",
|
||||
"agentDetail.subtitle": "Agent-ID: {{agentId}}",
|
||||
"agentDetail.title": "Agent",
|
||||
"agentDetail.type": "AGENT",
|
||||
"agentDetail.versionHistory.active": "Aktiv",
|
||||
"agentDetail.versionHistory.empty": "Noch keine Versionen",
|
||||
"agentDetail.versionHistory.exitVersions": "Versionen verlassen",
|
||||
"agentDetail.versionHistory.filter": "Versionen filtern",
|
||||
@ -335,7 +291,6 @@
|
||||
"agentDetail.versionHistory.versionName": "Version {{version}}",
|
||||
"agentDetail.versionHistory.viewOnly": "Nur anzeigen",
|
||||
"roster.createAgent": "Agent erstellen",
|
||||
"roster.createAgentOptions": "Optionen zum Erstellen eines Agenten",
|
||||
"roster.createDialog.description": "Erstellen Sie einen wiederverwendbaren Agenten im Roster dieses Workspaces.",
|
||||
"roster.createDialog.title": "Agent erstellen",
|
||||
"roster.createForm.changeIcon": "Agenten-Symbol ändern",
|
||||
@ -362,9 +317,7 @@
|
||||
"roster.editDialog.title": "Agent bearbeiten",
|
||||
"roster.editInfo": "Info bearbeiten",
|
||||
"roster.empty": "Noch kein Agent",
|
||||
"roster.emptyDescription": "In diesem Workspace gespeicherte Agenten erscheinen hier.",
|
||||
"roster.emptySearch": "Keine passenden Agenten",
|
||||
"roster.emptySearchDescription": "Versuchen Sie einen anderen Agentennamen.",
|
||||
"roster.filters.all": "Alle",
|
||||
"roster.filters.drafts": "Entwürfe",
|
||||
"roster.filters.label": "Agentenfilter",
|
||||
@ -383,12 +336,6 @@
|
||||
"roster.references.trigger": "Workflows, die {{name}} verwenden",
|
||||
"roster.searchLabel": "Agenten suchen",
|
||||
"roster.searchPlaceholder": "Agenten nach Namen suchen…",
|
||||
"roster.sources.agent_app": "Agent-App",
|
||||
"roster.sources.imported": "Importiert",
|
||||
"roster.sources.system": "System",
|
||||
"roster.sources.workflow": "Workflow",
|
||||
"roster.status.active": "Aktiv",
|
||||
"roster.status.archived": "Archiviert",
|
||||
"roster.tabs.agent": "Agent",
|
||||
"roster.tabs.human": "Mensch",
|
||||
"roster.tabsLabel": "Roster-Typ",
|
||||
|
||||
@ -5,24 +5,16 @@
|
||||
"addModal.queryName": "Frage",
|
||||
"addModal.queryPlaceholder": "Anfrage hier eingeben",
|
||||
"addModal.title": "Antwort Anmerkung hinzufügen",
|
||||
"batchAction.cancel": "Abbrechen",
|
||||
"batchAction.delete": "Löschen",
|
||||
"batchAction.selected": "Ausgewählt",
|
||||
"batchModal.answer": "Antwort",
|
||||
"batchModal.browse": "durchsuchen",
|
||||
"batchModal.cancel": "Abbrechen",
|
||||
"batchModal.completed": "Import abgeschlossen",
|
||||
"batchModal.content": "Inhalt",
|
||||
"batchModal.contentTitle": "Inhaltsabschnitt",
|
||||
"batchModal.csvUploadTitle": "Ziehen Sie Ihre CSV-Datei hierher oder ",
|
||||
"batchModal.error": "Importfehler",
|
||||
"batchModal.ok": "OK",
|
||||
"batchModal.processing": "In Batch-Verarbeitung",
|
||||
"batchModal.question": "Frage",
|
||||
"batchModal.run": "Batch ausführen",
|
||||
"batchModal.runError": "Batch-Ausführung fehlgeschlagen",
|
||||
"batchModal.template": "Laden Sie die Vorlage hier herunter",
|
||||
"batchModal.tip": "Die CSV-Datei muss der folgenden Struktur entsprechen:",
|
||||
"batchModal.title": "Massenimport",
|
||||
"editBy": "Antwort bearbeitet von {{author}}",
|
||||
"editModal.answerName": "Geschichtenerzähler Bot",
|
||||
|
||||
@ -11,62 +11,14 @@
|
||||
"apiKeyModal.lastUsed": "ZULETZT VERWENDET",
|
||||
"apiKeyModal.secretKey": "Geheimschlüssel",
|
||||
"apiServer": "API Server",
|
||||
"chatMode.blocking": "Blockierender Typ, wartet auf die Fertigstellung der Ausführung und gibt Ergebnisse zurück. (Anfragen können unterbrochen werden, wenn der Prozess lang ist)",
|
||||
"chatMode.chatMsgHistoryApi": "Chatverlaufsnachricht abrufen",
|
||||
"chatMode.chatMsgHistoryApiTip": "Die erste Seite gibt die neuesten `limit` Einträge in umgekehrter Reihenfolge zurück.",
|
||||
"chatMode.chatMsgHistoryConversationIdTip": "Konversations-ID",
|
||||
"chatMode.chatMsgHistoryFirstId": "ID des ersten Chat-Datensatzes auf der aktuellen Seite. Standardmäßig keiner.",
|
||||
"chatMode.chatMsgHistoryLimit": "Wie viele Chats in einer Anfrage zurückgegeben werden",
|
||||
"chatMode.conversationIdTip": "(Optional) Konversations-ID: für erstmalige Konversation leer lassen; conversation_id aus dem Kontext übergeben, um den Dialog fortzusetzen.",
|
||||
"chatMode.conversationRenamingApi": "Konversation umbenennen",
|
||||
"chatMode.conversationRenamingApiTip": "Konversationen umbenennen; der Name wird in Mehrsitzungs-Client-Schnittstellen angezeigt.",
|
||||
"chatMode.conversationRenamingNameTip": "Neuer Name",
|
||||
"chatMode.conversationsListApi": "Konversationsliste abrufen",
|
||||
"chatMode.conversationsListApiTip": "Ruft die Sitzungsliste des aktuellen Benutzers ab. Standardmäßig werden die letzten 20 Sitzungen zurückgegeben.",
|
||||
"chatMode.conversationsListFirstIdTip": "Die ID des letzten Datensatzes auf der aktuellen Seite, standardmäßig keine.",
|
||||
"chatMode.conversationsListLimitTip": "Wie viele Chats in einer Anfrage zurückgegeben werden",
|
||||
"chatMode.createChatApi": "Chatnachricht erstellen",
|
||||
"chatMode.createChatApiTip": "Eine neue Konversationsnachricht erstellen oder einen bestehenden Dialog fortsetzen.",
|
||||
"chatMode.info": "Für vielseitige Gesprächsanwendungen im Q&A-Format rufen Sie die chat-messages API auf, um einen Dialog zu initiieren. Führen Sie laufende Gespräche fort, indem Sie die zurückgegebene conversation_id übergeben. Antwortparameter und -vorlagen hängen von den Einstellungen in Dify Prompt Eng. ab.",
|
||||
"chatMode.inputsTips": "(Optional) Geben Sie Benutzereingabefelder als Schlüssel-Wert-Paare an, die Variablen in Prompt Eng. entsprechen. Schlüssel ist der Variablenname, Wert ist der Parameterwert. Wenn der Feldtyp Select ist, muss der übermittelte Wert eine der voreingestellten Optionen sein.",
|
||||
"chatMode.messageFeedbackApi": "Nachrichtenfeedback des Endbenutzers, like",
|
||||
"chatMode.messageFeedbackApiTip": "Bewerten Sie empfangene Nachrichten im Namen der Endbenutzer mit Likes oder Dislikes. Diese Daten sind auf der Seite Logs & Annotations sichtbar und werden für zukünftige Modellanpassungen verwendet.",
|
||||
"chatMode.messageIDTip": "Nachrichten-ID",
|
||||
"chatMode.parametersApi": "Anwendungsparameterinformationen abrufen",
|
||||
"chatMode.parametersApiTip": "Abrufen konfigurierter Eingabeparameter, einschließlich Variablennamen, Feldnamen, Typen und Standardwerten. Typischerweise verwendet, um diese Felder in einem Formular anzuzeigen oder Standardwerte nach dem Laden des Clients auszufüllen.",
|
||||
"chatMode.queryTips": "Inhalt der Benutzereingabe/Frage",
|
||||
"chatMode.ratingTip": "like oder dislike, null ist rückgängig machen",
|
||||
"chatMode.streaming": "Streaming Rückgaben. Implementierung der Streaming-Rückgabe basierend auf SSE (Server-Sent Events).",
|
||||
"chatMode.title": "Chat App API",
|
||||
"completionMode.blocking": "Blockierender Typ, wartet auf die Fertigstellung der Ausführung und gibt Ergebnisse zurück. (Anfragen können unterbrochen werden, wenn der Prozess lang ist)",
|
||||
"completionMode.createCompletionApi": "Completion Nachricht erstellen",
|
||||
"completionMode.createCompletionApiTip": "Erstellen Sie eine Completion Nachricht, um den Frage-Antwort-Modus zu unterstützen.",
|
||||
"completionMode.info": "Für die Erzeugung von hochwertigem Text, wie z.B. Artikel, Zusammenfassungen und Übersetzungen, verwenden Sie die Completion-Messages API mit Benutzereingaben. Die Texterzeugung basiert auf den Modellparametern und Vorlagen für Aufforderungen in Dify Prompt Engineering.",
|
||||
"completionMode.inputsTips": "(Optional) Geben Sie Benutzereingabefelder als Schlüssel-Wert-Paare an, die Variablen in Prompt Eng. entsprechen. Schlüssel ist der Variablenname, Wert ist der Parameterwert. Wenn der Feldtyp Select ist, muss der übermittelte Wert eine der voreingestellten Optionen sein.",
|
||||
"completionMode.messageFeedbackApi": "Nachrichtenfeedback (Like)",
|
||||
"completionMode.messageFeedbackApiTip": "Bewerten Sie empfangene Nachrichten im Namen der Endbenutzer mit Likes oder Dislikes. Diese Daten sind auf der Seite Logs & Annotations sichtbar und werden für zukünftige Modellanpassungen verwendet.",
|
||||
"completionMode.messageIDTip": "Nachrichten-ID",
|
||||
"completionMode.parametersApi": "Anwendungsparameterinformationen abrufen",
|
||||
"completionMode.parametersApiTip": "Abrufen konfigurierter Eingabeparameter, einschließlich Variablennamen, Feldnamen, Typen und Standardwerten. Typischerweise verwendet, um diese Felder in einem Formular anzuzeigen oder Standardwerte nach dem Laden des Clients auszufüllen.",
|
||||
"completionMode.queryTips": "Textinhalt der Benutzereingabe.",
|
||||
"completionMode.ratingTip": "like oder dislike, null ist rückgängig machen",
|
||||
"completionMode.streaming": "Streaming Rückgaben. Implementierung der Streaming-Rückgabe basierend auf SSE (Server-Sent Events).",
|
||||
"completionMode.title": "Completion App API",
|
||||
"copied": "Kopiert",
|
||||
"copy": "Kopieren",
|
||||
"develop.noContent": "Kein Inhalt",
|
||||
"develop.pathParams": "Pfadparameter",
|
||||
"develop.query": "Anfrage",
|
||||
"develop.requestBody": "Anfragekörper",
|
||||
"develop.toc": "Inhalt",
|
||||
"disabled": "Deaktiviert",
|
||||
"loading": "Laden",
|
||||
"merMaid.rerender": "Neu rendern",
|
||||
"never": "Nie",
|
||||
"ok": "In Betrieb",
|
||||
"pause": "Pause",
|
||||
"play": "Abspielen",
|
||||
"playing": "Wiedergabe",
|
||||
"regenerate": "Erneuern",
|
||||
"status": "Status"
|
||||
"playing": "Wiedergabe"
|
||||
}
|
||||
|
||||
@ -1,24 +1,17 @@
|
||||
{
|
||||
"agentLog": "Agentenprotokoll",
|
||||
"agentLogDetail.agentMode": "Agentenmodus",
|
||||
"agentLogDetail.finalProcessing": "Endverarbeitung",
|
||||
"agentLogDetail.iteration": "Iteration",
|
||||
"agentLogDetail.iterations": "Iterationen",
|
||||
"agentLogDetail.toolUsed": "Verwendetes Werkzeug",
|
||||
"dateFormat": "MM/DD/YYYY",
|
||||
"dateTimeFormat": "MM/DD/YYYY hh:mm:ss A",
|
||||
"description": "Die Protokolle zeichnen den Betriebsstatus der Anwendung auf, einschließlich Benutzereingaben und KI-Antworten.",
|
||||
"detail.annotationTip": "Verbesserungen markiert von {{user}}",
|
||||
"detail.conversationId": "Konversations-ID",
|
||||
"detail.loading": "lädt",
|
||||
"detail.modelParams": "Modellparameter",
|
||||
"detail.operation.addAnnotation": "Verbesserung hinzufügen",
|
||||
"detail.operation.annotationPlaceholder": "Geben Sie die erwartete Antwort ein, die Sie möchten, dass die KI antwortet, welche für die Feinabstimmung des Modells und die kontinuierliche Verbesserung der Qualität der Textgenerierung in Zukunft verwendet werden kann.",
|
||||
"detail.operation.dislike": "gefällt mir nicht",
|
||||
"detail.operation.editAnnotation": "Verbesserung bearbeiten",
|
||||
"detail.operation.like": "gefällt mir",
|
||||
"detail.promptTemplate": "Prompt-Vorlage",
|
||||
"detail.promptTemplateBeforeChat": "Prompt-Vorlage vor dem Chat · Als Systemnachricht",
|
||||
"detail.second": "s",
|
||||
"detail.time": "Zeit",
|
||||
"detail.timeConsuming": "",
|
||||
@ -43,7 +36,6 @@
|
||||
"filter.period.yearToDate": "Jahr bis heute",
|
||||
"filter.sortBy": "Sortieren nach:",
|
||||
"monitoring.description": "Das Monitoring zeichnet den Betriebsstatus der Anwendung auf, einschließlich Leistung, Nutzeraktivität und Kosten.",
|
||||
"promptLog": "Prompt-Protokoll",
|
||||
"runDetail.fileListDetail": "Detail",
|
||||
"runDetail.fileListLabel": "Details zur Datei",
|
||||
"runDetail.testWithParams": "Test mit Parametern",
|
||||
@ -68,9 +60,6 @@
|
||||
"table.header.updatedTime": "Aktualisierungszeit",
|
||||
"table.header.user": "Endbenutzer oder Konto",
|
||||
"table.header.userRate": "Benutzerbewertung",
|
||||
"table.header.version": "VERSION",
|
||||
"table.pagination.next": "Nächste",
|
||||
"table.pagination.previous": "Vorherige",
|
||||
"title": "Protokolle",
|
||||
"triggerBy.appRun": "Webanwendung",
|
||||
"triggerBy.debugging": "Fehlerbehebung",
|
||||
@ -79,7 +68,6 @@
|
||||
"triggerBy.ragPipelineRun": "RAG-Pipeline",
|
||||
"triggerBy.schedule": "Zeitplan",
|
||||
"triggerBy.webhook": "Webhook",
|
||||
"viewLog": "Protokoll anzeigen",
|
||||
"workflowSubtitle": "Das Protokoll hat den Vorgang von Automate aufgezeichnet.",
|
||||
"workflowTitle": "Workflow-Protokolle"
|
||||
}
|
||||
|
||||
@ -32,9 +32,6 @@
|
||||
"appSelector.noParams": "Keine Parameter erforderlich",
|
||||
"appSelector.params": "APP-PARAMETER",
|
||||
"appSelector.placeholder": "Wählen Sie eine App aus...",
|
||||
"communityIntro": "Diskutieren Sie mit Teammitgliedern, Mitwirkenden und Entwicklern auf verschiedenen Kanälen.",
|
||||
"createApp": "Neue App erstellen",
|
||||
"createFromConfigFile": "App aus Konfigurationsdatei erstellen",
|
||||
"deleteAppConfirmContent": "Das Löschen der App ist unwiderruflich. Nutzer werden keinen Zugang mehr zu Ihrer App haben, und alle Prompt-Konfigurationen und Logs werden dauerhaft gelöscht.",
|
||||
"deleteAppConfirmInputLabel": "Geben Sie zur Bestätigung <appName>{{appName}}</appName> in das Feld unten ein:",
|
||||
"deleteAppConfirmInputPlaceholder": "App-Namen eingeben…",
|
||||
@ -51,7 +48,6 @@
|
||||
"exportFailed": "Fehler beim Exportieren von DSL.",
|
||||
"filterEmpty.noApps": "Hier gibt es keine Apps",
|
||||
"firstEmpty.blankDescription": "Beginne mit einer leeren Arbeitsfläche, wenn du weißt, was du bauen möchtest.",
|
||||
"firstEmpty.description": "Verwandle eine Idee in eine funktionierende KI-App — starte leer, mit einer Vorlage oder importiere eine bestehende App.",
|
||||
"firstEmpty.importDescription": "Stelle eine App aus einer Dify-DSL-Definitionsdatei wieder her.",
|
||||
"firstEmpty.learnDifyTitle": "Dify lernen",
|
||||
"firstEmpty.or": "Oder",
|
||||
@ -60,34 +56,24 @@
|
||||
"gotoAnything.actions.accountDesc": "Gehe zur Kontoseite",
|
||||
"gotoAnything.actions.communityDesc": "Offene Discord-Community",
|
||||
"gotoAnything.actions.createCategoryDesc": "Erstellen Sie einen KI-generierten Workflow oder Chatflow",
|
||||
"gotoAnything.actions.createCategoryTitle": "Erstellen",
|
||||
"gotoAnything.actions.createChatflow": "Chatfluss",
|
||||
"gotoAnything.actions.createChatflowDesc": "Generieren Sie eine Chatflow-App (erweiterter Chat) aus einer Beschreibung",
|
||||
"gotoAnything.actions.createWorkflow": "Arbeitsablauf",
|
||||
"gotoAnything.actions.createWorkflowDesc": "Generieren Sie eine Workflow-App aus einer Beschreibung",
|
||||
"gotoAnything.actions.docDesc": "Öffnen Sie die Hilfedokumentation",
|
||||
"gotoAnything.actions.feedbackDesc": "Offene Diskussionen zum Feedback der Gemeinschaft",
|
||||
"gotoAnything.actions.languageCategoryDesc": "Wechseln Sie die Schnittstellensprache",
|
||||
"gotoAnything.actions.languageCategoryTitle": "Sprache",
|
||||
"gotoAnything.actions.languageChangeDesc": "UI-Sprache ändern",
|
||||
"gotoAnything.actions.refineCategoryDesc": "Verfeinern Sie den aktuellen Workflow oder das Chatflow-Diagramm",
|
||||
"gotoAnything.actions.refineDesc": "Beschreiben Sie eine Änderung, die auf den aktuellen Entwurf angewendet werden soll",
|
||||
"gotoAnything.actions.refineTitle": "Aktuelles Diagramm verfeinern",
|
||||
"gotoAnything.actions.runDesc": "Führen Sie schnelle Befehle aus (Thema, Sprache, ...)",
|
||||
"gotoAnything.actions.runTitle": "Befehle",
|
||||
"gotoAnything.actions.searchApplications": "Anwendungen durchsuchen",
|
||||
"gotoAnything.actions.searchApplicationsDesc": "Suchen und navigieren Sie zu Ihren Anwendungen",
|
||||
"gotoAnything.actions.searchKnowledgeBases": "Wissensdatenbanken durchsuchen",
|
||||
"gotoAnything.actions.searchKnowledgeBasesDesc": "Suchen und navigieren Sie zu Ihren Wissensdatenbanken",
|
||||
"gotoAnything.actions.searchPlugins": "Integrationen durchsuchen",
|
||||
"gotoAnything.actions.searchPluginsDesc": "Suchen und navigieren Sie zu Ihren Integrationen",
|
||||
"gotoAnything.actions.searchWorkflowNodes": "Workflow-Knoten durchsuchen",
|
||||
"gotoAnything.actions.searchWorkflowNodesDesc": "Suchen und Springen zu Knoten im aktuellen Workflow nach Name oder Typ",
|
||||
"gotoAnything.actions.searchWorkflowNodesHelp": "Diese Funktion funktioniert nur, wenn ein Workflow angezeigt wird. Navigieren Sie zuerst zu einem Workflow.",
|
||||
"gotoAnything.actions.slashDesc": "Führen Sie Befehle wie /theme, /lang aus",
|
||||
"gotoAnything.actions.slashTitle": "Befehle",
|
||||
"gotoAnything.actions.themeCategoryDesc": "Anwendungsthema wechseln",
|
||||
"gotoAnything.actions.themeCategoryTitle": "Thema",
|
||||
"gotoAnything.actions.themeDark": "Dunkles Thema",
|
||||
"gotoAnything.actions.themeDarkDesc": "Verwenden Sie das dunkle Erscheinungsbild",
|
||||
"gotoAnything.actions.themeLight": "Helles Design",
|
||||
@ -140,8 +126,6 @@
|
||||
"importFromDSLFile": "Aus DSL-Datei",
|
||||
"importFromDSLUrl": "Von URL",
|
||||
"importFromDSLUrlPlaceholder": "DSL-Link hier einfügen",
|
||||
"join": "Treten Sie der Gemeinschaft bei",
|
||||
"marketplace.template.categories": "Kategorien",
|
||||
"marketplace.template.category.design": "Design",
|
||||
"marketplace.template.category.it": "IT",
|
||||
"marketplace.template.category.knowledge": "Wissen",
|
||||
@ -156,7 +140,6 @@
|
||||
"marketplace.template.overview": "Übersicht",
|
||||
"marketplace.template.publishedBy": "Von",
|
||||
"marketplace.template.usageCount": "Nutzung",
|
||||
"marketplace.template.viewOnMarketplace": "Im Marketplace ansehen",
|
||||
"maxActiveRequests": "Maximale gleichzeitige Anfragen",
|
||||
"maxActiveRequestsPlaceholder": "Geben Sie 0 für unbegrenzt ein",
|
||||
"maxActiveRequestsTip": "Maximale Anzahl gleichzeitiger aktiver Anfragen pro App (0 für unbegrenzt)",
|
||||
@ -167,7 +150,6 @@
|
||||
"newApp.Create": "Erstellen",
|
||||
"newApp.advancedShortDescription": "Workflow optimiert für mehrstufige Chats",
|
||||
"newApp.advancedUserDescription": "Workflow mit Speicherfunktionen und Chatbot-Oberfläche.",
|
||||
"newApp.agentAssistant": "Neuer Agentenassistent",
|
||||
"newApp.agentShortDescription": "Intelligenter Agent mit logischem Denken und autonomer Werkzeugnutzung",
|
||||
"newApp.agentUserDescription": "Ein intelligenter Agent, der in der Lage ist, iteratives Denken zu führen und autonome Werkzeuge zu verwenden, um Aufgabenziele zu erreichen.",
|
||||
"newApp.appCreateDSLErrorPart1": "Es wurde ein signifikanter Unterschied bei den DSL-Versionen festgestellt. Das Erzwingen des Imports kann zu Fehlfunktionen der Anwendung führen.",
|
||||
@ -180,51 +162,34 @@
|
||||
"newApp.appCreated": "App erstellt",
|
||||
"newApp.appDescriptionPlaceholder": "Geben Sie die Beschreibung der App ein",
|
||||
"newApp.appNamePlaceholder": "Geben Sie Ihrer App einen Namen",
|
||||
"newApp.appTemplateNotSelected": "Bitte wählen Sie eine Vorlage",
|
||||
"newApp.appTypeRequired": "Bitte wählen Sie einen App-Typ",
|
||||
"newApp.captionDescription": "Beschreibung",
|
||||
"newApp.captionName": "App-Symbol & Name",
|
||||
"newApp.caution": "Vorsicht",
|
||||
"newApp.chatApp": "Assistent",
|
||||
"newApp.chatAppIntro": "Ich möchte eine Chat-basierte Anwendung bauen. Diese App verwendet ein Frage-Antwort-Format und ermöglicht mehrere Runden kontinuierlicher Konversation.",
|
||||
"newApp.chatbotShortDescription": "LLM-basierter Chatbot mit einfacher Einrichtung",
|
||||
"newApp.chatbotUserDescription": "Erstellen Sie schnell einen LLM-basierten Chatbot mit einfacher Konfiguration. Sie können später zu Chatflow wechseln.",
|
||||
"newApp.chooseAppType": "App-Typ auswählen",
|
||||
"newApp.completeApp": "Textgenerator",
|
||||
"newApp.completeAppIntro": "Ich möchte eine Anwendung erstellen, die hochwertigen Text basierend auf Aufforderungen generiert, wie z.B. das Erstellen von Artikeln, Zusammenfassungen, Übersetzungen und mehr.",
|
||||
"newApp.completionShortDescription": "KI-Assistent für Textgenerierungsaufgaben",
|
||||
"newApp.completionUserDescription": "Erstellen Sie schnell einen KI-Assistenten für Textgenerierungsaufgaben mit einfacher Konfiguration.",
|
||||
"newApp.dropDSLToCreateApp": "Ziehen Sie die DSL-Datei hierher, um die App zu erstellen",
|
||||
"newApp.forAdvanced": "FÜR FORTGESCHRITTENE",
|
||||
"newApp.forBeginners": "Einfachere App-Typen",
|
||||
"newApp.foundResult": "{{count}} Ergebnis",
|
||||
"newApp.foundResults": "{{count}} Befund",
|
||||
"newApp.hideTemplates": "Zurück zur Modusauswahl",
|
||||
"newApp.import": "Importieren",
|
||||
"newApp.learnMore": "Weitere Informationen",
|
||||
"newApp.nameNotEmpty": "Name darf nicht leer sein",
|
||||
"newApp.noAppsFound": "Keine Apps gefunden",
|
||||
"newApp.noIdeaTip": "Keine Ideen? Schauen Sie sich unsere Vorlagen an",
|
||||
"newApp.noTemplateFound": "Keine Vorlagen gefunden",
|
||||
"newApp.noTemplateFoundTip": "Versuchen Sie, mit verschiedenen Schlüsselwörtern zu suchen.",
|
||||
"newApp.optional": "Wahlfrei",
|
||||
"newApp.previewDemo": "Vorschau-Demo",
|
||||
"newApp.showTemplates": "Ich möchte aus einer Vorlage wählen",
|
||||
"newApp.startFromBlank": "Aus Leer erstellen",
|
||||
"newApp.startFromTemplate": "Aus Vorlage erstellen",
|
||||
"newApp.useTemplate": "Diese Vorlage verwenden",
|
||||
"newApp.workflowShortDescription": "Agentischer Ablauf für intelligente Automatisierungen",
|
||||
"newApp.workflowUserDescription": "Autonome KI-Arbeitsabläufe visuell per Drag-and-Drop erstellen.",
|
||||
"newApp.workflowWarning": "Derzeit in der Beta-Phase",
|
||||
"newAppFromTemplate.byCategories": "NACH KATEGORIEN",
|
||||
"newAppFromTemplate.searchAllTemplate": "Alle Vorlagen durchsuchen...",
|
||||
"newAppFromTemplate.sidebar.Agent": "Agent",
|
||||
"newAppFromTemplate.sidebar.Assistant": "Assistent",
|
||||
"newAppFromTemplate.sidebar.HR": "HR",
|
||||
"newAppFromTemplate.sidebar.Programming": "Programmieren",
|
||||
"newAppFromTemplate.sidebar.Recommended": "Alle",
|
||||
"newAppFromTemplate.sidebar.Workflow": "Arbeitsablauf",
|
||||
"newAppFromTemplate.sidebar.Writing": "Schrift",
|
||||
"noAccessPermission": "Keine Berechtigung zum Zugriff auf die Webanwendung",
|
||||
"noAccessResourcePermission": "Keine Berechtigung zum Zugriff auf diese Ressource",
|
||||
"noUserInputNode": "Fehlender Benutzereingabeknoten",
|
||||
@ -234,8 +199,6 @@
|
||||
"publishApp.notSetDesc": "Derzeit kann niemand auf die Webanwendung zugreifen. Bitte setzen Sie die Berechtigungen.",
|
||||
"publishApp.title": "Wer kann auf die Webanwendung zugreifen?",
|
||||
"removeOriginal": "Ursprüngliche App löschen",
|
||||
"roadmap": "Sehen Sie unseren Fahrplan",
|
||||
"showMyCreatedAppsOnly": "Nur meine erstellten Apps anzeigen",
|
||||
"structOutput.LLMResponse": "LLM-Antwort",
|
||||
"structOutput.configure": "Konfigurieren",
|
||||
"structOutput.modelNotSupported": "Modell nicht unterstützt",
|
||||
@ -246,8 +209,6 @@
|
||||
"structOutput.structured": "Strukturiert",
|
||||
"structOutput.structuredTip": "Strukturierte Ausgaben ist eine Funktion, die sicherstellt, dass das Modell immer Antworten generiert, die Ihrem bereitgestellten JSON-Schema entsprechen.",
|
||||
"studio.allApps": "Alle Apps",
|
||||
"studio.apps": "Anwendungen",
|
||||
"studio.filters.allCreators": "Alle Ersteller",
|
||||
"studio.filters.creators": "Ersteller",
|
||||
"studio.filters.reset": "Zurücksetzen",
|
||||
"studio.filters.searchCreators": "Suchersteller...",
|
||||
@ -261,7 +222,6 @@
|
||||
"studio.starFailed": "Stern konnte nicht aktualisiert werden",
|
||||
"studio.starred": "Markiert",
|
||||
"studio.unstarApp": "Markierung der App entfernen",
|
||||
"studio.viewSnippets": "Snippets ansehen",
|
||||
"switch": "Zu Workflow-Orchestrierung wechseln",
|
||||
"switchLabel": "Die zu erstellende App-Kopie",
|
||||
"switchStart": "Wechsel starten",
|
||||
@ -274,7 +234,6 @@
|
||||
"tracing.aliyun.title": "Cloud-Monitor",
|
||||
"tracing.arize.description": "Unternehmensgerechte LLM-Observierbarkeit, Online- und Offline-Bewertung, Überwachung und Experimentierung—unterstützt durch OpenTelemetry. Speziell für LLM- und agentenbasierte Anwendungen entwickelt.",
|
||||
"tracing.arize.title": "Arize",
|
||||
"tracing.collapse": "Einklappen",
|
||||
"tracing.config": "Konfigurieren",
|
||||
"tracing.configProvider.clientId": "OAuth-Client-ID",
|
||||
"tracing.configProvider.clientSecret": "OAuth-Client-Geheimnis",
|
||||
@ -297,11 +256,9 @@
|
||||
"tracing.configProviderTitle.notConfigured": "Anbieter konfigurieren, um Nachverfolgung zu aktivieren",
|
||||
"tracing.databricks.description": "Databricks bietet vollständig verwaltetes MLflow mit starker Governance und Sicherheit für die Speicherung von Trace-Daten.",
|
||||
"tracing.databricks.title": "Databricks",
|
||||
"tracing.description": "Konfiguration eines Drittanbieter-LLMOps-Anbieters und Nachverfolgung der Anwendungsleistung.",
|
||||
"tracing.disabled": "Deaktiviert",
|
||||
"tracing.disabledTip": "Bitte zuerst den Anbieter konfigurieren",
|
||||
"tracing.enabled": "In Betrieb",
|
||||
"tracing.expand": "Ausklappen",
|
||||
"tracing.inUse": "In Verwendung",
|
||||
"tracing.langfuse.description": "Traces, Bewertungen, Prompt-Management und Metriken zum Debuggen und Verbessern Ihrer LLM-Anwendung.",
|
||||
"tracing.langfuse.title": "Langfuse",
|
||||
@ -330,9 +287,7 @@
|
||||
"types.advanced": "Chatflow",
|
||||
"types.agent": "Agent",
|
||||
"types.all": "Alle",
|
||||
"types.basic": "Grundlegend",
|
||||
"types.chatbot": "Chatbot",
|
||||
"types.completion": "Vervollständigung",
|
||||
"types.filter": "Typen",
|
||||
"types.workflow": "Arbeitsablauf"
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
"account.appearanceLabel": "Darstellung",
|
||||
"account.appearanceLight": "Hell",
|
||||
"account.appearanceSystem": "System",
|
||||
"account.avatar": "Avatar",
|
||||
"account.changeEmail.authTip": "Sobald Ihre E-Mail geändert wurde, können Google- oder GitHub-Konten, die mit Ihrer alten E-Mail verknüpft sind, nicht mehr auf dieses Konto zugreifen.",
|
||||
"account.changeEmail.changeTo": "Ändern zu {{email}}",
|
||||
"account.changeEmail.codeLabel": "Bestätigungscode",
|
||||
@ -63,7 +62,6 @@
|
||||
"account.showAppLength": "{{length}} Apps anzeigen",
|
||||
"account.verificationLabel": "Verifizierungs-Code",
|
||||
"account.verificationPlaceholder": "Fügen Sie den 6-stelligen Code ein",
|
||||
"account.workspaceIcon": "Arbeitsbereichssymbol",
|
||||
"account.workspaceName": "Arbeitsbereichsname",
|
||||
"account.workspaceNamePlaceholder": "Arbeitsbereichnamen eingeben",
|
||||
"actionMsg.copySuccessfully": "Erfolgreich kopiert",
|
||||
@ -78,7 +76,6 @@
|
||||
"agentStrategyPage.description": "Lege fest, wie dein AI Agent denkt und Entscheidungen trifft — einschließlich Tool-Auswahl, Ergebnisverarbeitung und autonomer Problemlösung.",
|
||||
"api.actionFailed": "Aktion fehlgeschlagen",
|
||||
"api.actionSuccess": "Aktion erfolgreich",
|
||||
"api.create": "Erstellt",
|
||||
"api.remove": "Entfernt",
|
||||
"api.saved": "Gespeichert",
|
||||
"api.success": "Erfolg",
|
||||
@ -105,8 +102,6 @@
|
||||
"appMenus.logs": "Baumstämme",
|
||||
"appMenus.overview": "Übersicht",
|
||||
"appMenus.promptEng": "Orchestrieren",
|
||||
"appModes.chatApp": "Chat-App",
|
||||
"appModes.completionApp": "Textgenerator",
|
||||
"avatar.deleteDescription": "Bist du sicher, dass du dein Profilbild entfernen möchtest? Dein Konto wird das standardmäßige Anfangs-Avatar verwenden.",
|
||||
"avatar.deleteTitle": "Avatar entfernen",
|
||||
"avatar.editAction": "Avatar bearbeiten",
|
||||
@ -122,7 +117,6 @@
|
||||
"chat.inputDisabledPlaceholder": "Nur Vorschau",
|
||||
"chat.inputPlaceholder": "Sprechen Sie mit dem {{botName}}",
|
||||
"chat.renameConversation": "Konversation umbenennen",
|
||||
"chat.resend": "Erneut senden",
|
||||
"chat.thinking": "Denken...",
|
||||
"chat.thought": "Gedanke",
|
||||
"compliance.gdpr": "DSGVO DPA",
|
||||
@ -131,42 +125,21 @@
|
||||
"compliance.sandboxUpgradeTooltip": "Nur verfügbar mit einem Professional- oder Teamplan.",
|
||||
"compliance.soc2Type1": "SOC 2 Typ I Bericht",
|
||||
"compliance.soc2Type2": "SOC 2 Typ II Bericht",
|
||||
"dataSource.add": "Eine Datenquelle hinzufügen",
|
||||
"dataSource.configure": "Konfigurieren",
|
||||
"dataSource.connect": "Verbinden",
|
||||
"dataSource.notion.addWorkspace": "Arbeitsbereich hinzufügen",
|
||||
"dataSource.notion.changeAuthorizedPages": "Autorisierte Seiten ändern",
|
||||
"dataSource.notion.connected": "Verbunden",
|
||||
"dataSource.notion.connectedWorkspace": "Verbundener Arbeitsbereich",
|
||||
"dataSource.notion.description": "Notion als Datenquelle für das Wissen verwenden.",
|
||||
"dataSource.notion.disconnected": "Getrennt",
|
||||
"dataSource.notion.integratedAlert": "Notion ist über interne Anmeldeinformationen integriert, es ist keine erneute Autorisierung erforderlich.",
|
||||
"dataSource.notion.pagesAuthorized": "Autorisierte Seiten",
|
||||
"dataSource.notion.remove": "Entfernen",
|
||||
"dataSource.notion.selector.addPages": "Seiten hinzufügen",
|
||||
"dataSource.notion.selector.configure": "Notion konfigurieren",
|
||||
"dataSource.notion.selector.docs": "Notion-Dokumentation",
|
||||
"dataSource.notion.selector.headerTitle": "Notion-Seiten auswählen",
|
||||
"dataSource.notion.selector.noSearchResult": "Keine Suchergebnisse",
|
||||
"dataSource.notion.selector.pageSelected": "Ausgewählte Seiten",
|
||||
"dataSource.notion.selector.preview": "VORSCHAU",
|
||||
"dataSource.notion.selector.searchPages": "Seiten suchen...",
|
||||
"dataSource.notion.sync": "Synchronisieren",
|
||||
"dataSource.notion.title": "Notion",
|
||||
"dataSource.website.active": "Aktiv",
|
||||
"dataSource.website.configuredCrawlers": "Konfigurierte Crawler",
|
||||
"dataSource.website.description": "Importieren Sie Inhalte von Websites mit dem Webcrawler.",
|
||||
"dataSource.website.inactive": "Inaktiv",
|
||||
"dataSource.website.title": "Website",
|
||||
"dataSource.website.with": "Mit",
|
||||
"dataSourcePage.description": "Verbinde externe Datenquellen für Wissensdatenbank oder Knowledge Pipeline — importiere Inhalte aus Google Drive, Notion, GitHub und mehr.",
|
||||
"dataSourcePage.installFirst": "Bitte installieren Sie zuerst eine Datenquelle.",
|
||||
"dataSourcePage.notSetUp": "nicht eingerichtet",
|
||||
"dataSourcePage.notSetUpTitle": "<highlight>Datenquelle</highlight> nicht eingerichtet",
|
||||
"datasetMenus.documents": "Dokumente",
|
||||
"datasetMenus.emptyTip": "Das Wissen wurde nicht zugeordnet, bitte gehen Sie zur Anwendung oder zum Plug-in, um die Zuordnung abzuschließen.",
|
||||
"datasetMenus.hitTesting": "Wiederherstellungstest",
|
||||
"datasetMenus.noRelatedApp": "Keine verknüpften Apps",
|
||||
"datasetMenus.pipeline": "Rohrleitung",
|
||||
"datasetMenus.relatedApp": "verbundene Apps",
|
||||
"datasetMenus.settings": "Einstellungen",
|
||||
@ -181,12 +154,10 @@
|
||||
"errorBoundary.componentStack": "Komponenten-Stack:",
|
||||
"errorBoundary.details": "Fehlerdetails (Nur Entwicklung)",
|
||||
"errorBoundary.errorCount": "Dieser Fehler ist {{count}} Mal aufgetreten",
|
||||
"errorBoundary.fallbackTitle": "Hoppla! Etwas ist schiefgelaufen",
|
||||
"errorBoundary.message": "Beim Rendern dieser Komponente ist ein unerwarteter Fehler aufgetreten.",
|
||||
"errorBoundary.reloadPage": "Seite neu laden",
|
||||
"errorBoundary.title": "Etwas ist schiefgelaufen",
|
||||
"errorBoundary.tryAgain": "Erneut versuchen",
|
||||
"errorBoundary.tryAgainCompact": "Erneut versuchen",
|
||||
"errorMsg.fieldRequired": "{{field}} ist erforderlich",
|
||||
"errorMsg.urlError": "Die URL sollte mit http:// oder https:// beginnen",
|
||||
"extensionPage.description": "Integriere externe Dienste über HTTP Webhooks in deine Apps.",
|
||||
@ -217,14 +188,8 @@
|
||||
"imageUploader.uploadFromComputerReadError": "Bildlesung fehlgeschlagen, bitte versuchen Sie es erneut.",
|
||||
"imageUploader.uploadFromComputerUploadError": "Bildupload fehlgeschlagen, bitte erneut hochladen.",
|
||||
"integrations.connect": "Verbinden",
|
||||
"integrations.connected": "Verbunden",
|
||||
"integrations.github": "GitHub",
|
||||
"integrations.githubAccount": "Mit GitHub-Konto anmelden",
|
||||
"integrations.google": "Google",
|
||||
"integrations.googleAccount": "Mit Google-Konto anmelden",
|
||||
"label.optional": "(fakultativ)",
|
||||
"language.displayLanguage": "Anzeigesprache",
|
||||
"language.language": "Sprache",
|
||||
"language.timezone": "Zeitzone",
|
||||
"license.expiring": "Läuft an einem Tag ab",
|
||||
"license.expiring_plural": "Läuft in {{count}} Tagen ab",
|
||||
@ -247,19 +212,9 @@
|
||||
"mainNav.workspace.sort.createdTime": "Created time",
|
||||
"mainNav.workspace.sort.lastOpened": "Last opened",
|
||||
"mainNav.workspace.sort.openMenu": "Sort workspaces",
|
||||
"mainNav.workspace.switchWorkspace": "Workspace wechseln",
|
||||
"mcpPage.description": "Verbinde und verwalte MCP-Server, damit deine Apps auf externe Tools und Dienste zugreifen können.",
|
||||
"members.adminTip": "Kann Apps erstellen & Team-Einstellungen verwalten",
|
||||
"members.alreadyInTeam": "Bereits im Team",
|
||||
"members.alreadyInTeamTip": "Diese Benutzer haben bereits Zugriff auf diesen Arbeitsbereich.",
|
||||
"members.assignRolesModal.singleDescription": "Wählen Sie eine Rolle aus, die diesem Mitglied zugewiesen werden soll.",
|
||||
"members.builder": "Bauherr",
|
||||
"members.builderTip": "Kann eigene Apps erstellen und bearbeiten",
|
||||
"members.datasetOperatorTip": "Kann die Wissensdatenbank nur verwalten",
|
||||
"members.deleteMember": "Mitglied löschen",
|
||||
"members.disInvite": "Einladung widerrufen",
|
||||
"members.editRole": "Rolle bearbeiten",
|
||||
"members.editorTip": "Kann Apps erstellen & bearbeiten",
|
||||
"members.email": "E-Mail",
|
||||
"members.emailInvalid": "Ungültiges E-Mail-Format",
|
||||
"members.emailNotSetup": "E-Mail-Server ist nicht eingerichtet, daher können keine Einladungs-E-Mails versendet werden. Bitte informieren Sie die Benutzer über den Einladungslink, der nach der Einladung ausgestellt wird.",
|
||||
@ -273,24 +228,13 @@
|
||||
"members.inviteTeamMemberTip": "Sie können direkt nach der Anmeldung auf Ihre Teamdaten zugreifen.",
|
||||
"members.invitedAsRole": "Eingeladen als {{role}}",
|
||||
"members.lastActive": "ZULETZT AKTIV",
|
||||
"members.memberDetails.assignedRole": "Zugewiesene Rolle",
|
||||
"members.name": "NAME",
|
||||
"members.noNewInvitationsSent": "Keine neuen Einladungen gesendet",
|
||||
"members.normalTip": "Kann nur Apps verwenden, kann keine Apps erstellen",
|
||||
"members.ok": "OK",
|
||||
"members.pending": "Ausstehend...",
|
||||
"members.removeFromTeam": "Vom Team entfernen",
|
||||
"members.removeFromTeamConfirmDescription": "Bestätige, dass dieses Mitglied entfernt werden soll. Diese Aktion kann nicht rückgängig gemacht werden.",
|
||||
"members.removeFromTeamConfirmTitle": "{{memberName}} aus dem Team entfernen",
|
||||
"members.removeFromTeamTip": "Wird den Teamzugang entfernen",
|
||||
"members.role": "ROLLEN",
|
||||
"members.roles": "ROLLEN",
|
||||
"members.sendInvite": "Einladung senden",
|
||||
"members.setAdmin": "Als Administrator einstellen",
|
||||
"members.setBuilder": "Als Builder festlegen",
|
||||
"members.setEditor": "Als Editor einstellen",
|
||||
"members.setMember": "Als normales Mitglied einstellen",
|
||||
"members.team": "Team",
|
||||
"members.transferModal.codeLabel": "Bestätigungscode",
|
||||
"members.transferModal.codePlaceholder": "Geben Sie den 6-stelligen Code ein",
|
||||
"members.transferModal.continue": "Fortsetzen",
|
||||
@ -314,53 +258,19 @@
|
||||
"menus.appDetail": "App-Details",
|
||||
"menus.apps": "Studio",
|
||||
"menus.datasets": "Wissen",
|
||||
"menus.datasetsTips": "BALD VERFÜGBAR: Importieren Sie Ihre eigenen Textdaten oder schreiben Sie Daten in Echtzeit über Webhook, um den LLM-Kontext zu verbessern.",
|
||||
"menus.deployments": "Bereitstellungen",
|
||||
"menus.explore": "Erkunden",
|
||||
"menus.exploreMarketplace": "Marketplace erkunden",
|
||||
"menus.newApp": "Neue App",
|
||||
"menus.newDataset": "Wissen erstellen",
|
||||
"menus.plugins": "Integrationen",
|
||||
"menus.pluginsTips": "Integrieren Sie Integrationen von Drittanbietern oder erstellen Sie ChatGPT-kompatible KI-Integrationen.",
|
||||
"menus.roster": "Agent-Verzeichnis",
|
||||
"menus.status": "Beta",
|
||||
"menus.tools": "Werkzeuge",
|
||||
"model.addMoreModel": "Gehen Sie zu den Einstellungen, um mehr Modelle hinzuzufügen",
|
||||
"model.capabilities": "Multimodale Fähigkeiten",
|
||||
"model.params.frequency_penalty": "Häufigkeitsstrafe",
|
||||
"model.params.frequency_penaltyTip": "Wie stark neue Tokens basierend auf ihrer bisherigen Häufigkeit im Text bestraft werden.\nVerringert die Wahrscheinlichkeit des Modells, denselben Satz wortwörtlich zu wiederholen.",
|
||||
"model.params.maxTokenSettingTip": "Ihre Einstellung für maximale Token ist hoch, was den Platz für Eingabeaufforderungen, Abfragen und Daten potenziell begrenzen kann. Erwägen Sie, dies unter 2/3 zu setzen.",
|
||||
"model.params.max_tokens": "Maximale Token",
|
||||
"model.params.max_tokensTip": "Begrenzt die maximale Länge der Antwort in Token. \nGrößere Werte können den Platz für Eingabeaufforderungen, Chat-Logs und Wissen begrenzen. \nEs wird empfohlen, dies unter zwei Dritteln zu setzen\ngpt-4-1106-Vorschau, gpt-4-vision-Vorschau maximale Token (Eingabe 128k Ausgabe 4k)",
|
||||
"model.params.presence_penalty": "Präsenz-Strafe",
|
||||
"model.params.presence_penaltyTip": "Wie stark neue Tokens basierend darauf bestraft werden, ob sie bereits im Text erschienen sind.\nErhöht die Wahrscheinlichkeit des Modells, über neue Themen zu sprechen.",
|
||||
"model.params.setToCurrentModelMaxTokenTip": "Maximale Token auf 80 % der maximalen Token des aktuellen Modells {{maxToken}} aktualisiert.",
|
||||
"model.params.stop_sequences": "Stop-Sequenzen",
|
||||
"model.params.stop_sequencesPlaceholder": "Sequenz eingeben und Tab drücken",
|
||||
"model.params.stop_sequencesTip": "Bis zu vier Sequenzen, bei denen die API die Generierung weiterer Token stoppt. Der zurückgegebene Text wird die Stop-Sequenz nicht enthalten.",
|
||||
"model.params.temperature": "Temperatur",
|
||||
"model.params.temperatureTip": "Kontrolliert Zufälligkeit: Eine niedrigere Temperatur führt zu weniger zufälligen Ergebnissen. Nähert sich die Temperatur null, wird das Modell deterministisch und repetitiv.",
|
||||
"model.params.top_p": "Top P",
|
||||
"model.params.top_pTip": "Kontrolliert Diversität über Nukleus-Sampling: 0,5 bedeutet, dass die Hälfte aller wahrscheinlichkeitsgewichteten Optionen berücksichtigt wird.",
|
||||
"model.settingsLink": "Einstellungen für Modellanbieter",
|
||||
"model.tone.Balanced": "Ausgewogen",
|
||||
"model.tone.Creative": "Kreativ",
|
||||
"model.tone.Custom": "Benutzerdefiniert",
|
||||
"model.tone.Precise": "Präzise",
|
||||
"modelName.claude-2": "Claude-2",
|
||||
"modelName.claude-instant-1": "Claude-Instant",
|
||||
"modelName.gpt-3.5-turbo": "GPT-3.5-Turbo",
|
||||
"modelName.gpt-3.5-turbo-16k": "GPT-3.5-Turbo-16K",
|
||||
"modelName.gpt-4": "GPT-4",
|
||||
"modelName.gpt-4-32k": "GPT-4-32K",
|
||||
"modelName.text-davinci-003": "Text-Davinci-003",
|
||||
"modelName.text-embedding-ada-002": "Text-Embedding-Ada-002",
|
||||
"modelName.whisper-1": "Flüstern-1",
|
||||
"modelProvider.addApiKey": "Fügen Sie Ihren API-Schlüssel hinzu",
|
||||
"modelProvider.addConfig": "Konfiguration hinzufügen",
|
||||
"modelProvider.addModel": "Modell hinzufügen",
|
||||
"modelProvider.addMoreModelProvider": "MEHR MODELLANBIETER HINZUFÜGEN",
|
||||
"modelProvider.apiKey": "API-SCHLÜSSEL",
|
||||
"modelProvider.apiKeyRateLimit": "Ratenlimit wurde erreicht, verfügbar nach {{seconds}}s",
|
||||
"modelProvider.apiKeyStatusNormal": "APIKey-Status ist normal",
|
||||
"modelProvider.auth.addApiKey": "API-Schlüssel hinzufügen",
|
||||
@ -369,7 +279,6 @@
|
||||
"modelProvider.auth.addModelCredential": "Modellberechtigungen hinzufügen",
|
||||
"modelProvider.auth.addNewModel": "Neues Modell hinzufügen",
|
||||
"modelProvider.auth.addNewModelCredential": "Hinzufügen neuer Modellanmeldeinformationen",
|
||||
"modelProvider.auth.apiKeyModal.addModel": "Modell hinzufügen",
|
||||
"modelProvider.auth.apiKeyModal.desc": "Nachdem die Anmeldeinformationen konfiguriert wurden, können alle Mitglieder des Arbeitsbereichs dieses Modell beim Orchestrieren von Anwendungen verwenden.",
|
||||
"modelProvider.auth.apiKeyModal.title": "API-Schlüssel-Autorisierungskonfiguration",
|
||||
"modelProvider.auth.apiKeys": "API-Schlüssel",
|
||||
@ -390,17 +299,12 @@
|
||||
"modelProvider.auth.selectModelCredential": "Wählen Sie eine Modellberechtigung aus",
|
||||
"modelProvider.auth.specifyModelCredential": "Angeben von Modellanmeldeinformationen",
|
||||
"modelProvider.auth.specifyModelCredentialTip": "Verwenden Sie ein konfiguriertes Modellzugang.",
|
||||
"modelProvider.auth.unAuthorized": "Unbefugt",
|
||||
"modelProvider.buyQuota": "Kontingent kaufen",
|
||||
"modelProvider.callTimes": "Anrufzeiten",
|
||||
"modelProvider.card.aiCreditsInUse": "AI Credits werden verwendet",
|
||||
"modelProvider.card.aiCreditsOption": "AI Credits",
|
||||
"modelProvider.card.apiKeyOption": "API Key",
|
||||
"modelProvider.card.apiKeyRequired": "API Key erforderlich",
|
||||
"modelProvider.card.apiKeyUnavailableFallback": "API Key nicht verfügbar, AI Credits werden verwendet",
|
||||
"modelProvider.card.apiKeyUnavailableFallbackDescription": "Überprüfen Sie Ihre API-Key-Konfiguration, um zurückzuwechseln",
|
||||
"modelProvider.card.buyQuota": "Kontingent kaufen",
|
||||
"modelProvider.card.callTimes": "Anrufzeiten",
|
||||
"modelProvider.card.creditsExhaustedDescription": "Bitte <upgradeLink>upgraden Sie Ihren Plan</upgradeLink> oder konfigurieren Sie einen API Key",
|
||||
"modelProvider.card.creditsExhaustedFallback": "AI Credits aufgebraucht, API Key wird verwendet",
|
||||
"modelProvider.card.creditsExhaustedFallbackDescription": "<upgradeLink>Upgraden Sie Ihren Plan</upgradeLink>, um die AI-Credit-Priorität wiederherzustellen.",
|
||||
@ -412,32 +316,17 @@
|
||||
"modelProvider.card.noApiKeysFallback": "Keine API Keys, AI Credits werden verwendet",
|
||||
"modelProvider.card.noApiKeysTitle": "Noch keine API Keys konfiguriert",
|
||||
"modelProvider.card.noAvailableUsage": "Kein verfügbares Guthaben",
|
||||
"modelProvider.card.onTrial": "In Probe",
|
||||
"modelProvider.card.paid": "Bezahlt",
|
||||
"modelProvider.card.priorityUse": "Priorisierte Nutzung",
|
||||
"modelProvider.card.quota": "KONTINGENT",
|
||||
"modelProvider.card.quotaExhausted": "Kontingent erschöpft",
|
||||
"modelProvider.card.removeKey": "API-Schlüssel entfernen",
|
||||
"modelProvider.card.tip": "Nachrichtenguthaben unterstützen Modelle von {{modelNames}}. Der bezahlten Kontingent wird Vorrang gegeben. Das kostenlose Kontingent wird nach dem Verbrauch des bezahlten Kontingents verwendet.",
|
||||
"modelProvider.card.tokens": "Token",
|
||||
"modelProvider.card.unavailable": "Nicht verfügbar",
|
||||
"modelProvider.card.upgradePlan": "Plan upgraden",
|
||||
"modelProvider.card.usageLabel": "Verbrauch",
|
||||
"modelProvider.card.usagePriority": "Nutzungspriorität",
|
||||
"modelProvider.card.usagePriorityTip": "Legen Sie fest, welche Ressource beim Ausführen von Modellen zuerst verwendet wird.",
|
||||
"modelProvider.collapse": "Einklappen",
|
||||
"modelProvider.config": "Konfigurieren",
|
||||
"modelProvider.configLoadBalancing": "Lastenausgleich für die Konfiguration",
|
||||
"modelProvider.configureTip": "Einrichten des API-Schlüssels oder Hinzufügen des zu verwendenden Modells",
|
||||
"modelProvider.configuredProviders": "Configured providers",
|
||||
"modelProvider.confirmDelete": "Löschung bestätigen?",
|
||||
"modelProvider.credits": "Nachrichtenguthaben",
|
||||
"modelProvider.creditsBackedProviders": "Available with Message Credits",
|
||||
"modelProvider.creditsBackedProvidersDesc": "These providers work with your Message Credits — no API key needed.",
|
||||
"modelProvider.defaultConfig": "Standardkonfiguration",
|
||||
"modelProvider.deprecated": "Veraltet",
|
||||
"modelProvider.discoverMore": "Erfahren Sie mehr in",
|
||||
"modelProvider.editConfig": "Konfiguration bearbeiten",
|
||||
"modelProvider.embeddingModel.key": "Einbettungsmodell",
|
||||
"modelProvider.embeddingModel.required": "Einbettungsmodell ist erforderlich",
|
||||
"modelProvider.embeddingModel.tip": "Legen Sie das Standardmodell für die Dokumenteneinbettungsverarbeitung des Wissens fest, sowohl die Wiederherstellung als auch der Import des Wissens verwenden dieses Einbettungsmodell für die Vektorisierungsverarbeitung. Ein Wechsel wird dazu führen, dass die Vektordimension zwischen dem importierten Wissen und der Frage inkonsistent ist, was zu einem Wiederherstellungsfehler führt. Um einen Wiederherstellungsfehler zu vermeiden, wechseln Sie dieses Modell bitte nicht willkürlich.",
|
||||
@ -447,43 +336,28 @@
|
||||
"modelProvider.encrypted.back": " Technologie gespeichert.",
|
||||
"modelProvider.encrypted.front": "Ihr API-SCHLÜSSEL wird verschlüsselt und mit",
|
||||
"modelProvider.featureSupported": "{{feature}} unterstützt",
|
||||
"modelProvider.freeQuota.howToEarn": "Wie zu verdienen",
|
||||
"modelProvider.getFreeTokens": "Kostenlose Token erhalten",
|
||||
"modelProvider.installDataSource": "Datenquelle installieren",
|
||||
"modelProvider.installDataSourceProvider": "Datenquellenanbieter installieren",
|
||||
"modelProvider.installProvider": "Installieren von Modellanbietern",
|
||||
"modelProvider.invalidApiKey": "Ungültiger API-Schlüssel",
|
||||
"modelProvider.item.deleteDesc": "{{modelName}} werden als System-Reasoning-Modelle verwendet. Einige Funktionen stehen nach der Entfernung nicht zur Verfügung. Bitte bestätigen.",
|
||||
"modelProvider.item.freeQuota": "KOSTENLOSES KONTINGENT",
|
||||
"modelProvider.learnMore": "Learn more",
|
||||
"modelProvider.loadBalancing": "Lastenausgleich",
|
||||
"modelProvider.loadBalancingDescription": "Reduzieren Sie den Druck mit mehreren Sätzen von Anmeldeinformationen.",
|
||||
"modelProvider.loadBalancingHeadline": "Lastenausgleich",
|
||||
"modelProvider.loadBalancingInfo": "Standardmäßig wird für den Lastenausgleich die Round-Robin-Strategie verwendet. Wenn die Ratenbegrenzung ausgelöst wird, wird eine Abklingzeit von 1 Minute angewendet.",
|
||||
"modelProvider.loadBalancingLeastKeyWarning": "Um den Lastausgleich zu aktivieren, müssen mindestens 2 Schlüssel aktiviert sein.",
|
||||
"modelProvider.loadPresets": "Voreinstellungen laden",
|
||||
"modelProvider.model": "Modell",
|
||||
"modelProvider.modelAndParameters": "Modell und Parameter",
|
||||
"modelProvider.modelHasBeenDeprecated": "Dieses Modell ist veraltet",
|
||||
"modelProvider.modelSettings": "Modelleinstellungen",
|
||||
"modelProvider.models": "Modelle",
|
||||
"modelProvider.modelsNum": "{{num}} Modelle",
|
||||
"modelProvider.noModelFound": "Kein Modell für {{model}} gefunden",
|
||||
"modelProvider.noneConfigured": "Konfigurieren Sie ein Standard-Systemmodell, um Anwendungen auszuführen",
|
||||
"modelProvider.notConfigured": "Das Systemmodell wurde noch nicht vollständig konfiguriert, und einige Funktionen sind möglicherweise nicht verfügbar.",
|
||||
"modelProvider.pageDesc": "Choose a language model to power your apps. You need at least one configured before building in Studio.",
|
||||
"modelProvider.parameters": "PARAMETER",
|
||||
"modelProvider.parametersInvalidRemoved": "Einige Parameter sind ungültig und wurden entfernt.",
|
||||
"modelProvider.priorityUsing": "Bevorzugte Nutzung",
|
||||
"modelProvider.providerManaged": "Vom Anbieter verwaltet",
|
||||
"modelProvider.providerManagedDescription": "Verwenden Sie den einzelnen Satz von Anmeldeinformationen, der vom Modellanbieter bereitgestellt wird.",
|
||||
"modelProvider.quota": "Kontingent",
|
||||
"modelProvider.quotaLabel": "QUOTA",
|
||||
"modelProvider.quotaTip": "Verbleibende verfügbare kostenlose Token",
|
||||
"modelProvider.rerankModel.key": "Rerank-Modell",
|
||||
"modelProvider.rerankModel.tip": "Rerank-Modell wird die Kandidatendokumentenliste basierend auf der semantischen Übereinstimmung mit der Benutzeranfrage neu ordnen und die Ergebnisse der semantischen Rangordnung verbessern",
|
||||
"modelProvider.resetDate": "Zurücksetzen am {{date}}",
|
||||
"modelProvider.searchModel": "Suchmodell",
|
||||
"modelProvider.searchModels": "Modelle suchen...",
|
||||
"modelProvider.selectModel": "Wählen Sie Ihr Modell",
|
||||
"modelProvider.selector.aiCredits": "AI Credits",
|
||||
@ -495,8 +369,6 @@
|
||||
"modelProvider.selector.creditsExhaustedTip": "Ihre AI Credits wurden aufgebraucht. Bitte upgraden Sie Ihren Plan oder fügen Sie einen API Key hinzu.",
|
||||
"modelProvider.selector.disabled": "Deaktiviert",
|
||||
"modelProvider.selector.discoverMoreInMarketplace": "Mehr im Marketplace entdecken",
|
||||
"modelProvider.selector.emptySetting": "Bitte gehen Sie zu den Einstellungen, um zu konfigurieren",
|
||||
"modelProvider.selector.emptyTip": "Keine verfügbaren Modelle",
|
||||
"modelProvider.selector.fromMarketplace": "Vom Marketplace",
|
||||
"modelProvider.selector.incompatible": "Inkompatibel",
|
||||
"modelProvider.selector.incompatibleTip": "Dieses Modell ist in der aktuellen Version nicht verfügbar. Bitte wählen Sie ein anderes verfügbares Modell.",
|
||||
@ -506,11 +378,7 @@
|
||||
"modelProvider.selector.noProviderConfigured": "Kein Modellanbieter konfiguriert",
|
||||
"modelProvider.selector.noProviderConfiguredDesc": "Durchsuchen Sie den Marketplace, um einen zu installieren, oder konfigurieren Sie Anbieter in den Einstellungen.",
|
||||
"modelProvider.selector.onlyCompatibleModelsShown": "Es werden nur kompatible Modelle angezeigt",
|
||||
"modelProvider.selector.rerankTip": "Bitte richten Sie das Rerank-Modell ein",
|
||||
"modelProvider.selector.tip": "Dieses Modell wurde entfernt. Bitte fügen Sie ein Modell hinzu oder wählen Sie ein anderes Modell.",
|
||||
"modelProvider.setupModelFirst": "Bitte richten Sie zuerst Ihr Modell ein",
|
||||
"modelProvider.showModels": "Modelle anzeigen",
|
||||
"modelProvider.showMoreModelProvider": "Zeige mehr Modellanbieter",
|
||||
"modelProvider.speechToTextModel.key": "Sprach-zu-Text-Modell",
|
||||
"modelProvider.speechToTextModel.tip": "Legen Sie das Standardmodell für die Spracheingabe in Konversationen fest.",
|
||||
"modelProvider.systemModelSettings": "Systemmodell-Einstellungen",
|
||||
@ -541,7 +409,6 @@
|
||||
"operation.create": "Erstellen",
|
||||
"operation.deSelectAll": "Alle abwählen",
|
||||
"operation.delete": "Löschen",
|
||||
"operation.deleteApp": "App löschen",
|
||||
"operation.deleteConfirmTitle": "Löschen?",
|
||||
"operation.download": "Herunterladen",
|
||||
"operation.downloadFailed": "Download fehlgeschlagen. Bitte versuchen Sie es später erneut.",
|
||||
@ -551,18 +418,15 @@
|
||||
"operation.exporting": "Exportiere",
|
||||
"operation.fill": "Automatisch ausfüllen",
|
||||
"operation.format": "Format",
|
||||
"operation.getForFree": "Kostenlos erhalten",
|
||||
"operation.imageCopied": "Kopiertes Bild",
|
||||
"operation.imageDownloaded": "Bild heruntergeladen",
|
||||
"operation.in": "in",
|
||||
"operation.learnMore": "Mehr erfahren",
|
||||
"operation.lineBreak": "Zeilenumbruch",
|
||||
"operation.log": "Protokoll",
|
||||
"operation.more": "Mehr",
|
||||
"operation.no": "Nein",
|
||||
"operation.noSearchCount": "0 {{content}}",
|
||||
"operation.noSearchResults": "Es wurden keine {{content}} gefunden",
|
||||
"operation.now": "Jetzt",
|
||||
"operation.ok": "OK",
|
||||
"operation.openInNewTab": "In neuem Tab öffnen",
|
||||
"operation.params": "Parameter",
|
||||
@ -570,7 +434,6 @@
|
||||
"operation.play": "Abspielen",
|
||||
"operation.refresh": "Neustart",
|
||||
"operation.regenerate": "Erneuern",
|
||||
"operation.reload": "Neu laden",
|
||||
"operation.remove": "Entfernen",
|
||||
"operation.rename": "Umbenennen",
|
||||
"operation.reset": "Zurücksetzen",
|
||||
@ -586,7 +449,6 @@
|
||||
"operation.selectCount": "{{count}} Ausgewählt",
|
||||
"operation.send": "Senden",
|
||||
"operation.settings": "Einstellungen",
|
||||
"operation.setup": "Einrichten",
|
||||
"operation.skip": "Schiff",
|
||||
"operation.submit": "Senden",
|
||||
"operation.sure": "Ich bin sicher",
|
||||
@ -607,93 +469,37 @@
|
||||
"placeholder.input": "Bitte eingeben",
|
||||
"placeholder.search": "Suchen...",
|
||||
"placeholder.select": "Bitte auswählen",
|
||||
"promptEditor.context.item.desc": "Kontextvorlage einfügen",
|
||||
"promptEditor.context.item.title": "Kontext",
|
||||
"promptEditor.context.modal.add": "Kontext hinzufügen",
|
||||
"promptEditor.context.modal.footer": "Sie können Kontexte im unten stehenden Kontextabschnitt verwalten.",
|
||||
"promptEditor.context.modal.title": "{{num}} Wissen im Kontext",
|
||||
"promptEditor.existed": "Bereits im Aufforderungstext vorhanden",
|
||||
"promptEditor.history.item.desc": "Vorlage für historische Nachricht einfügen",
|
||||
"promptEditor.history.item.title": "Konversationsgeschichte",
|
||||
"promptEditor.history.modal.assistant": "Hallo! Wie kann ich Ihnen heute helfen?",
|
||||
"promptEditor.history.modal.edit": "Konversationsrollennamen bearbeiten",
|
||||
"promptEditor.history.modal.title": "BEISPIEL",
|
||||
"promptEditor.history.modal.user": "Hallo",
|
||||
"promptEditor.placeholder": "Schreiben Sie hier Ihr Aufforderungswort, geben Sie '{' ein, um eine Variable einzufügen, geben Sie '/' ein, um einen Aufforderungs-Inhaltsblock einzufügen",
|
||||
"promptEditor.query.item.desc": "Benutzerabfragevorlage einfügen",
|
||||
"promptEditor.query.item.title": "Abfrage",
|
||||
"promptEditor.requestURL.item.desc": "Anfrage-URL einfügen",
|
||||
"promptEditor.requestURL.item.title": "Anfrage-URL",
|
||||
"promptEditor.variable.item.desc": "Variablen & Externe Werkzeuge einfügen",
|
||||
"promptEditor.variable.item.title": "Variablen & Externe Werkzeuge",
|
||||
"promptEditor.variable.modal.add": "Neue Variable",
|
||||
"promptEditor.variable.modal.addTool": "Neues Werkzeug",
|
||||
"promptEditor.variable.outputToolDisabledItem.desc": "Variablen einfügen",
|
||||
"promptEditor.variable.outputToolDisabledItem.title": "Variablen",
|
||||
"provider.addKey": "Schlüssel hinzufügen",
|
||||
"provider.anthropic.enableTip": "Um das Anthropische Modell zu aktivieren, müssen Sie sich zuerst mit OpenAI oder Azure OpenAI Service verbinden.",
|
||||
"provider.anthropic.keyFrom": "Holen Sie Ihren API-Schlüssel von Anthropic",
|
||||
"provider.anthropic.notEnabled": "Nicht aktiviert",
|
||||
"provider.anthropic.using": "Die Einbettungsfähigkeit verwendet",
|
||||
"provider.anthropicHosted.anthropicHosted": "Anthropic Claude",
|
||||
"provider.anthropicHosted.callTimes": "Anrufzeiten",
|
||||
"provider.anthropicHosted.close": "Schließen",
|
||||
"provider.anthropicHosted.desc": "Leistungsstarkes Modell, das bei einer Vielzahl von Aufgaben von anspruchsvollen Dialogen und kreativer Inhalteerstellung bis hin zu detaillierten Anweisungen hervorragend ist.",
|
||||
"provider.anthropicHosted.exhausted": "KONTINGENT ERSCHÖPFT",
|
||||
"provider.anthropicHosted.onTrial": "IN PROBE",
|
||||
"provider.anthropicHosted.trialQuotaTip": "Ihr Anthropic-Testkontingent läuft am 11.03.2025 ab und steht danach nicht mehr zur Verfügung. Bitte machen Sie rechtzeitig davon Gebrauch.",
|
||||
"provider.anthropicHosted.useYourModel": "Derzeit wird eigener Modellanbieter verwendet.",
|
||||
"provider.anthropicHosted.usedUp": "Testkontingent aufgebraucht. Eigenen Modellanbieter hinzufügen.",
|
||||
"provider.apiKey": "API-Schlüssel",
|
||||
"provider.apiKeyExceedBill": "Dieser API-SCHLÜSSEL verfügt über kein verfügbares Kontingent, bitte lesen",
|
||||
"provider.azure.apiBase": "API-Basis",
|
||||
"provider.azure.apiBasePlaceholder": "Die API-Basis-URL Ihres Azure OpenAI-Endpunkts.",
|
||||
"provider.azure.apiKey": "API-Schlüssel",
|
||||
"provider.azure.apiKeyPlaceholder": "Geben Sie hier Ihren API-Schlüssel ein",
|
||||
"provider.azure.helpTip": "Azure OpenAI Service kennenlernen",
|
||||
"provider.comingSoon": "Demnächst verfügbar",
|
||||
"provider.editKey": "Bearbeiten",
|
||||
"provider.encrypted.back": " Technologie gespeichert.",
|
||||
"provider.encrypted.front": "Ihr API-SCHLÜSSEL wird verschlüsselt und mit",
|
||||
"provider.enterYourKey": "Geben Sie hier Ihren API-Schlüssel ein",
|
||||
"provider.invalidApiKey": "Ungültiger API-Schlüssel",
|
||||
"provider.invalidKey": "Ungültiger OpenAI API-Schlüssel",
|
||||
"provider.openaiHosted.callTimes": "Anrufzeiten",
|
||||
"provider.openaiHosted.close": "Schließen",
|
||||
"provider.openaiHosted.desc": "Der OpenAI-Hostingdienst von Dify ermöglicht es Ihnen, Modelle wie GPT-3.5 zu verwenden. Bevor Ihr Probe-Kontingent aufgebraucht ist, müssen Sie andere Modellanbieter einrichten.",
|
||||
"provider.openaiHosted.exhausted": "KONTINGENT ERSCHÖPFT",
|
||||
"provider.openaiHosted.onTrial": "IN PROBE",
|
||||
"provider.openaiHosted.openaiHosted": "Gehostetes OpenAI",
|
||||
"provider.openaiHosted.useYourModel": "Derzeit wird eigener Modellanbieter verwendet.",
|
||||
"provider.openaiHosted.usedUp": "Probe-Kontingent aufgebraucht. Eigenen Modellanbieter hinzufügen.",
|
||||
"provider.saveFailed": "API-Schlüssel speichern fehlgeschlagen",
|
||||
"provider.validatedError": "Validierung fehlgeschlagen: ",
|
||||
"provider.validating": "Schlüssel wird validiert...",
|
||||
"settings.account": "Mein Konto",
|
||||
"settings.accountGroup": "KONTO",
|
||||
"settings.agentStrategy": "Agent strategy",
|
||||
"settings.billing": "Abrechnung",
|
||||
"settings.collapse": "Collapse",
|
||||
"settings.customEndpoint": "Benutzerdefinierter Endpunkt",
|
||||
"settings.customTool": "Custom Tool",
|
||||
"settings.dataSource": "Datenquelle",
|
||||
"settings.discoverMoreIntegrationsInMarketplace": "Entdecke weitere Integrationen im Marktplatz",
|
||||
"settings.expand": "Expand",
|
||||
"settings.extension": "Extension",
|
||||
"settings.filter": "Filter",
|
||||
"settings.generalGroup": "ALLGEMEIN",
|
||||
"settings.integrations": "Integrationen",
|
||||
"settings.language": "Sprache",
|
||||
"settings.members": "Mitglieder",
|
||||
"settings.plugin": "Integrationen",
|
||||
"settings.preferences": "Preferences",
|
||||
"settings.provider": "Modellanbieter",
|
||||
"settings.settings": "Settings",
|
||||
"settings.swaggerAPIAsTool": "Swagger API as Tool",
|
||||
"settings.trigger": "Trigger",
|
||||
"settings.workplaceGroup": "ARBEITSBEREICH",
|
||||
"settings.workspace": "WORKSPACE",
|
||||
"settings.workspaceSettings": "Arbeitsbereich-Einstellungen",
|
||||
"swaggerAPIAsToolPage.description": "Importiere jede API mithilfe von OpenAPI/Swagger-Spezifikationen als Tool. Einmal konfigurieren und in Workflows wiederverwenden.",
|
||||
"tag.addNew": "Neues Tag hinzufügen",
|
||||
"tag.addTag": "Tags hinzufügen",
|
||||
@ -701,11 +507,9 @@
|
||||
"tag.created": "Tag erfolgreich erstellt",
|
||||
"tag.delete": "Tag löschen",
|
||||
"tag.deleteTip": "Das Tag wird verwendet, löschen?",
|
||||
"tag.editTag": "Tags bearbeiten",
|
||||
"tag.failed": "Tag-Erstellung fehlgeschlagen",
|
||||
"tag.manageTags": "Tags verwalten",
|
||||
"tag.noTag": "Keine Tags",
|
||||
"tag.noTagYet": "Noch keine Tags",
|
||||
"tag.placeholder": "Tags",
|
||||
"tag.selectorPlaceholder": "Typ zum Suchen oder Erstellen",
|
||||
"tag.tags": "Tags",
|
||||
@ -721,7 +525,6 @@
|
||||
"userProfile.community": "Gemeinschaft",
|
||||
"userProfile.compliance": "Einhaltung",
|
||||
"userProfile.contactUs": "Kontaktieren Sie uns",
|
||||
"userProfile.createWorkspace": "Arbeitsbereich erstellen",
|
||||
"userProfile.emailSupport": "E-Mail-Support",
|
||||
"userProfile.forum": "Forum",
|
||||
"userProfile.github": "GitHub",
|
||||
@ -729,7 +532,6 @@
|
||||
"userProfile.logout": "Abmelden",
|
||||
"userProfile.roadmap": "Fahrplan",
|
||||
"userProfile.settings": "Einstellungen",
|
||||
"userProfile.support": "Unterstützung",
|
||||
"userProfile.workspace": "Arbeitsbereich",
|
||||
"voice.language.arTN": "Tunesisches Arabisch",
|
||||
"voice.language.deDE": "Deutsch",
|
||||
|
||||
@ -1,6 +1,4 @@
|
||||
{
|
||||
"app.changeLogoTip": "SVG oder PNG Format mit einer Mindestgröße von 80x80px",
|
||||
"app.title": "App Kopfzeilen Marke anpassen",
|
||||
"apply": "Anwenden",
|
||||
"change": "Ändern",
|
||||
"custom": "Anpassung",
|
||||
@ -9,14 +7,11 @@
|
||||
"customize.suffix": "um auf die Enterprise-Edition zu upgraden.",
|
||||
"restore": "Standardeinstellungen wiederherstellen",
|
||||
"upgradeTip.des": "Upgrade deinen Plan, um deine Marke anzupassen.",
|
||||
"upgradeTip.prefix": "Erweitere deinen Plan auf",
|
||||
"upgradeTip.suffix": "um deine Marke anzupassen.",
|
||||
"upgradeTip.title": "Upgrade deinen Plan",
|
||||
"upload": "Hochladen",
|
||||
"uploadedFail": "Bild-Upload fehlgeschlagen, bitte erneut hochladen.",
|
||||
"uploading": "Lade hoch",
|
||||
"webapp.changeLogo": "Ändere Powered by Markenbild",
|
||||
"webapp.changeLogoTip": "SVG oder PNG Format mit einer Mindestgröße von 40x40px",
|
||||
"webapp.removeBrand": "Entferne Powered by Dify",
|
||||
"webapp.title": "web app Marke anpassen"
|
||||
"webapp.removeBrand": "Entferne Powered by Dify"
|
||||
}
|
||||
|
||||
@ -1,16 +1,6 @@
|
||||
{
|
||||
"error.unavailable": "Dieses Wissen ist nicht verfügbar",
|
||||
"firecrawl.apiKeyPlaceholder": "API-Schlüssel von firecrawl.dev",
|
||||
"firecrawl.configFirecrawl": "Konfigurieren von 🔥Firecrawl",
|
||||
"firecrawl.getApiKeyLinkText": "Holen Sie sich Ihren API-Schlüssel von firecrawl.dev",
|
||||
"jinaReader.apiKeyPlaceholder": "API-Schlüssel von jina.ai",
|
||||
"jinaReader.configJinaReader": "Jina Reader konfigurieren",
|
||||
"jinaReader.getApiKeyLinkText": "Holen Sie sich Ihren kostenlosen API-Schlüssel bei jina.ai",
|
||||
"otherDataSource.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.",
|
||||
"otherDataSource.learnMore": "Weitere Informationen",
|
||||
"otherDataSource.title": "Verbinden Sie sich mit anderen Datenquellen?",
|
||||
"stepOne.button": "weiter",
|
||||
"stepOne.cancel": "Abbrechen",
|
||||
"stepOne.connect": "Verbinden gehen",
|
||||
"stepOne.dataSourceType.file": "Import aus Textdatei",
|
||||
"stepOne.dataSourceType.notion": "Synchronisation aus Notion",
|
||||
@ -32,7 +22,6 @@
|
||||
"stepOne.uploader.browse": "Durchsuchen",
|
||||
"stepOne.uploader.button": "Dateien und Ordner hierher ziehen oder klicken",
|
||||
"stepOne.uploader.buttonSingleFile": "Datei hierher ziehen oder klicken",
|
||||
"stepOne.uploader.cancel": "Abbrechen",
|
||||
"stepOne.uploader.change": "Ändern",
|
||||
"stepOne.uploader.failed": "Hochladen fehlgeschlagen",
|
||||
"stepOne.uploader.tip": "Unterstützt {{supportTypes}}. Maximal {{batchCount}} Dateien pro Batch und {{size}} MB pro Datei.",
|
||||
@ -57,7 +46,6 @@
|
||||
"stepOne.website.firecrawlTitle": "Extrahieren von Webinhalten mit 🔥Firecrawl",
|
||||
"stepOne.website.includeOnlyPaths": "Nur Pfade einschließen",
|
||||
"stepOne.website.jinaReaderDoc": "Erfahre mehr über Jina Reader",
|
||||
"stepOne.website.jinaReaderDocLink": "https://jina.ai/reader",
|
||||
"stepOne.website.jinaReaderNotConfigured": "Jina Reader ist nicht konfiguriert",
|
||||
"stepOne.website.jinaReaderNotConfiguredDescription": "Richten Sie Jina Reader ein, indem Sie Ihren kostenlosen API-Schlüssel für den Zugriff eingeben.",
|
||||
"stepOne.website.jinaReaderTitle": "Konvertieren Sie die gesamte Website in Markdown",
|
||||
@ -85,34 +73,15 @@
|
||||
"stepThree.creationContent": "Wir haben das Wissen automatisch benannt, Sie können es jederzeit ändern",
|
||||
"stepThree.creationTitle": "🎉 Wissen erstellt",
|
||||
"stepThree.label": "Wissensname",
|
||||
"stepThree.modelButtonCancel": "Abbrechen",
|
||||
"stepThree.modelButtonConfirm": "Bestätigen",
|
||||
"stepThree.modelContent": "Wenn Sie die Verarbeitung später fortsetzen möchten, werden Sie dort weitermachen, wo Sie aufgehört haben.",
|
||||
"stepThree.modelTitle": "Sind Sie sicher, dass Sie die Einbettung stoppen möchten?",
|
||||
"stepThree.navTo": "Zum Dokument gehen",
|
||||
"stepThree.resume": "Verarbeitung fortsetzen",
|
||||
"stepThree.sideTipContent": "Nachdem das Dokument indiziert wurde, kann das Wissen in die Anwendung als Kontext integriert werden, Sie finden die Kontexteinstellung auf der Seite zur Eingabeaufforderungen-Orchestrierung. Sie können es auch als unabhängiges ChatGPT-Indexierungsplugin zur Veröffentlichung erstellen.",
|
||||
"stepThree.sideTipTitle": "Was kommt als Nächstes",
|
||||
"stepThree.stop": "Verarbeitung stoppen",
|
||||
"stepTwo.QALanguage": "Segmentierung verwenden",
|
||||
"stepTwo.QATip": "Diese Option zu aktivieren, wird mehr Tokens verbrauchen",
|
||||
"stepTwo.QATitle": "Segmentierung im Frage-und-Antwort-Format",
|
||||
"stepTwo.auto": "Automatisch",
|
||||
"stepTwo.autoDescription": "Stellt Chunk- und Vorverarbeitungsregeln automatisch ein. Unbekannten Benutzern wird dies empfohlen.",
|
||||
"stepTwo.calculating": "Berechnung...",
|
||||
"stepTwo.cancel": "Abbrechen",
|
||||
"stepTwo.characters": "Zeichen",
|
||||
"stepTwo.childChunkForRetrieval": "Child-Chunk zum Abrufen",
|
||||
"stepTwo.click": "Zu den Einstellungen gehen",
|
||||
"stepTwo.custom": "Benutzerdefiniert",
|
||||
"stepTwo.customDescription": "Chunk-Regeln, Chunk-Länge und Vorverarbeitungsregeln usw. anpassen.",
|
||||
"stepTwo.datasetSettingLink": "Wissenseinstellungen.",
|
||||
"stepTwo.economical": "Ökonomisch",
|
||||
"stepTwo.economicalTip": "Verwendet Offline-Vektor-Engines, Schlagwortindizes usw., um die Genauigkeit ohne Tokenverbrauch zu reduzieren",
|
||||
"stepTwo.estimateCost": "Schätzung",
|
||||
"stepTwo.estimateSegment": "Geschätzte Chunks",
|
||||
"stepTwo.fileSource": "Dokumente vorverarbeiten",
|
||||
"stepTwo.fileUnit": " Dateien",
|
||||
"stepTwo.fullDoc": "Vollständiges Dokument",
|
||||
"stepTwo.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.",
|
||||
"stepTwo.general": "Allgemein",
|
||||
@ -125,9 +94,6 @@
|
||||
"stepTwo.nextStep": "Speichern & Verarbeiten",
|
||||
"stepTwo.notAvailableForParentChild": "Nicht verfügbar für den Parent-Child-Index",
|
||||
"stepTwo.notAvailableForQA": "Nicht verfügbar für Q&A Index",
|
||||
"stepTwo.notionSource": "Seiten vorverarbeiten",
|
||||
"stepTwo.notionUnit": " Seiten",
|
||||
"stepTwo.other": "und weitere ",
|
||||
"stepTwo.overlap": "Chunk-Überlappung",
|
||||
"stepTwo.overlapCheck": "Chunk-Überlappung sollte nicht größer als maximale Chunk-Länge sein",
|
||||
"stepTwo.overlapTip": "Die Einstellung der Chunk-Überlappung kann die semantische Relevanz zwischen ihnen aufrechterhalten und so die Abrufeffekt verbessern. Es wird empfohlen, 10%-25% der maximalen Chunk-Größe einzustellen.",
|
||||
@ -139,14 +105,9 @@
|
||||
"stepTwo.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.",
|
||||
"stepTwo.parentChunkForContext": "Parent-chunk für Context",
|
||||
"stepTwo.preview": "Bestätigen & Vorschau",
|
||||
"stepTwo.previewButton": "Umschalten zum Frage-und-Antwort-Format",
|
||||
"stepTwo.previewChunk": "Vorschau Chunk",
|
||||
"stepTwo.previewChunkCount": "{{count}} Geschätzte Chunks",
|
||||
"stepTwo.previewChunkTip": "Klicken Sie auf die Schaltfläche \"Preview Chunk\" auf der linken Seite, um die Vorschau zu laden",
|
||||
"stepTwo.previewSwitchTipEnd": " zusätzliche Tokens verbrauchen",
|
||||
"stepTwo.previewSwitchTipStart": "Die aktuelle Chunk-Vorschau ist im Textformat, ein Wechsel zur Vorschau im Frage-und-Antwort-Format wird",
|
||||
"stepTwo.previewTitle": "Vorschau",
|
||||
"stepTwo.previewTitleButton": "Vorschau",
|
||||
"stepTwo.previousStep": "Vorheriger Schritt",
|
||||
"stepTwo.qaSwitchHighQualityTipContent": "Derzeit unterstützt nur eine hochwertige Indexmethode das Q&A-Format-Chunking. Möchten Sie in den High-Quality-Modus wechseln?",
|
||||
"stepTwo.qaSwitchHighQualityTipTitle": "Das Q&A-Format erfordert eine qualitativ hochwertige Indizierungsmethode",
|
||||
@ -158,29 +119,16 @@
|
||||
"stepTwo.removeStopwords": "Stopwörter wie \"ein\", \"eine\", \"der\" entfernen",
|
||||
"stepTwo.removeUrlEmails": "Alle URLs und E-Mail-Adressen löschen",
|
||||
"stepTwo.reset": "Zurücksetzen",
|
||||
"stepTwo.retrievalSettingTip": "Um die Indexmethode zu ändern, bitte gehen Sie zu den ",
|
||||
"stepTwo.rules": "Textvorverarbeitungsregeln",
|
||||
"stepTwo.save": "Speichern & Verarbeiten",
|
||||
"stepTwo.segmentCount": "Chunks",
|
||||
"stepTwo.segmentation": "Chunk-Einstellungen",
|
||||
"stepTwo.separator": "Segmentidentifikator",
|
||||
"stepTwo.separatorPlaceholder": "Zum Beispiel Neuer Absatz (\\\\n) oder spezieller Separator (wie \"***\")",
|
||||
"stepTwo.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. ***).",
|
||||
"stepTwo.sideTipP1": "Bei der Verarbeitung von Textdaten sind Segmentierung und Bereinigung zwei wichtige Vorverarbeitungsschritte.",
|
||||
"stepTwo.sideTipP2": "Segmentierung teilt langen Text in Absätze, damit Modelle ihn besser verstehen können. Dies verbessert die Qualität und Relevanz der Modellergebnisse.",
|
||||
"stepTwo.sideTipP3": "Bereinigung entfernt unnötige Zeichen und Formate, macht das Wissen sauberer und leichter zu parsen.",
|
||||
"stepTwo.sideTipP4": "Richtige Segmentierung und Bereinigung verbessern die Modellleistung und liefern genauere und wertvollere Ergebnisse.",
|
||||
"stepTwo.sideTipTitle": "Warum segmentieren und vorverarbeiten?",
|
||||
"stepTwo.switch": "Schalter",
|
||||
"stepTwo.useQALanguage": "Chunk im Q&A-Format in",
|
||||
"stepTwo.warning": "Bitte zuerst den API-Schlüssel des Modellanbieters einrichten.",
|
||||
"stepTwo.webpageUnit": "Seiten",
|
||||
"stepTwo.websiteSource": "Preprocess-Website",
|
||||
"steps.header.fallbackRoute": "Wissen",
|
||||
"steps.one": "Datenquelle wählen",
|
||||
"steps.three": "Ausführen und beenden",
|
||||
"steps.two": "Textvorverarbeitung und Bereinigung",
|
||||
"watercrawl.apiKeyPlaceholder": "API-Schlüssel von watercrawl.dev",
|
||||
"watercrawl.configWatercrawl": "Wasserkrabbe konfigurieren",
|
||||
"watercrawl.getApiKeyLinkText": "Holen Sie sich Ihren API-Schlüssel von watercrawl.dev"
|
||||
"steps.two": "Textvorverarbeitung und Bereinigung"
|
||||
}
|
||||
|
||||
@ -1,27 +1,19 @@
|
||||
{
|
||||
"embedding.automatic": "Automatisch",
|
||||
"embedding.childMaxTokens": "Kind",
|
||||
"embedding.completed": "Einbettung abgeschlossen",
|
||||
"embedding.custom": "Benutzerdefiniert",
|
||||
"embedding.docName": "Dokument vorbereiten",
|
||||
"embedding.economy": "Wirtschaftlicher Modus",
|
||||
"embedding.error": "Einbettungsfehler",
|
||||
"embedding.estimate": "Geschätzter Verbrauch",
|
||||
"embedding.hierarchical": "Eltern-Kind",
|
||||
"embedding.highQuality": "Hochwertiger Modus",
|
||||
"embedding.mode": "Segmentierungsregel",
|
||||
"embedding.parentMaxTokens": "Elternteil",
|
||||
"embedding.pause": "Pause",
|
||||
"embedding.paused": "Einbettung pausiert",
|
||||
"embedding.previewTip": "Absatzvorschau ist nach Abschluss der Einbettung verfügbar",
|
||||
"embedding.processing": "Einbettungsverarbeitung...",
|
||||
"embedding.resume": "Verarbeitung fortsetzen",
|
||||
"embedding.segmentLength": "Chunk-Länge",
|
||||
"embedding.segments": "Absätze",
|
||||
"embedding.stop": "Verarbeitung stoppen",
|
||||
"embedding.textCleaning": "Textvordefinition und -bereinigung",
|
||||
"embedding.waiting": "Einbettung wartet...",
|
||||
"list.action.add": "Einen Chunk hinzufügen",
|
||||
"list.action.addButton": "Chunk hinzufügen",
|
||||
"list.action.archive": "Archivieren",
|
||||
"list.action.batchAdd": "Batch hinzufügen",
|
||||
@ -34,7 +26,6 @@
|
||||
"list.action.summary": "Zusammenfassung generieren",
|
||||
"list.action.sync": "Synchronisieren",
|
||||
"list.action.unarchive": "Archivierung aufheben",
|
||||
"list.action.uploadFile": "Neue Datei hochladen",
|
||||
"list.addFile": "Datei hinzufügen",
|
||||
"list.addPages": "Seiten hinzufügen",
|
||||
"list.addUrl": "URL hinzufügen",
|
||||
@ -52,7 +43,6 @@
|
||||
"list.batchModal.run": "Batch ausführen",
|
||||
"list.batchModal.runError": "Batch-Ausführung fehlgeschlagen",
|
||||
"list.batchModal.template": "Laden Sie die Vorlage hier herunter",
|
||||
"list.batchModal.tip": "Die CSV-Datei muss der folgenden Struktur entsprechen:",
|
||||
"list.batchModal.title": "Chunks in Batch hinzufügen",
|
||||
"list.delete.content": "Wenn Sie die Verarbeitung später fortsetzen müssen, werden Sie dort weitermachen, wo Sie aufgehört haben",
|
||||
"list.delete.title": "Sind Sie sicher, dass Sie löschen möchten?",
|
||||
@ -61,10 +51,6 @@
|
||||
"list.empty.title": "Es gibt noch keine Dokumentation",
|
||||
"list.empty.upload.tip": "Sie können Dateien hochladen, von der Website oder von Web-Apps wie Notion, GitHub usw. synchronisieren.",
|
||||
"list.index.all": "Alle",
|
||||
"list.index.disable": "Deaktivieren",
|
||||
"list.index.disableTip": "Die Datei kann nicht indiziert werden",
|
||||
"list.index.enable": "Aktivieren",
|
||||
"list.index.enableTip": "Die Datei kann indiziert werden",
|
||||
"list.learnMore": "Weitere Informationen",
|
||||
"list.sort.hitCount": "Abrufanzahl",
|
||||
"list.sort.uploadTime": "Upload-Zeit",
|
||||
@ -78,7 +64,6 @@
|
||||
"list.status.queuing": "In Warteschlange",
|
||||
"list.summary.generating": "Wird generiert...",
|
||||
"list.summary.generatingSummary": "Zusammenfassung wird generiert",
|
||||
"list.summary.ready": "Zusammenfassung bereit",
|
||||
"list.table.header.action": "AKTION",
|
||||
"list.table.header.chunkingMode": "CHUNKING-MODUS",
|
||||
"list.table.header.fileName": "DATEINAME",
|
||||
@ -89,61 +74,7 @@
|
||||
"list.table.name": "Name",
|
||||
"list.table.rename": "Umbenennen",
|
||||
"list.title": "Dokumente",
|
||||
"metadata.categoryMap.book.art": "Kunst",
|
||||
"metadata.categoryMap.book.biography": "Biografie",
|
||||
"metadata.categoryMap.book.businessEconomics": "Wirtschaft",
|
||||
"metadata.categoryMap.book.childrenYoungAdults": "Kinder & Jugendliche",
|
||||
"metadata.categoryMap.book.comicsGraphicNovels": "Comics & Grafische Romane",
|
||||
"metadata.categoryMap.book.cooking": "Kochen",
|
||||
"metadata.categoryMap.book.drama": "Drama",
|
||||
"metadata.categoryMap.book.education": "Bildung",
|
||||
"metadata.categoryMap.book.fiction": "Fiktion",
|
||||
"metadata.categoryMap.book.health": "Gesundheit",
|
||||
"metadata.categoryMap.book.history": "Geschichte",
|
||||
"metadata.categoryMap.book.other": "Andere",
|
||||
"metadata.categoryMap.book.philosophy": "Philosophie",
|
||||
"metadata.categoryMap.book.poetry": "Poesie",
|
||||
"metadata.categoryMap.book.religion": "Religion",
|
||||
"metadata.categoryMap.book.science": "Wissenschaft",
|
||||
"metadata.categoryMap.book.selfHelp": "Selbsthilfe",
|
||||
"metadata.categoryMap.book.socialSciences": "Sozialwissenschaften",
|
||||
"metadata.categoryMap.book.technology": "Technologie",
|
||||
"metadata.categoryMap.book.travel": "Reisen",
|
||||
"metadata.categoryMap.businessDoc.contractsAgreements": "Verträge & Vereinbarungen",
|
||||
"metadata.categoryMap.businessDoc.designDocument": "Design-Dokument",
|
||||
"metadata.categoryMap.businessDoc.emailCorrespondence": "E-Mail-Korrespondenz",
|
||||
"metadata.categoryMap.businessDoc.employeeHandbook": "Mitarbeiterhandbuch",
|
||||
"metadata.categoryMap.businessDoc.financialReport": "Finanzbericht",
|
||||
"metadata.categoryMap.businessDoc.marketAnalysis": "Marktanalyse",
|
||||
"metadata.categoryMap.businessDoc.meetingMinutes": "Protokolle",
|
||||
"metadata.categoryMap.businessDoc.other": "Andere",
|
||||
"metadata.categoryMap.businessDoc.policiesProcedures": "Richtlinien & Verfahren",
|
||||
"metadata.categoryMap.businessDoc.productSpecification": "Produktspezifikation",
|
||||
"metadata.categoryMap.businessDoc.projectPlan": "Projektplan",
|
||||
"metadata.categoryMap.businessDoc.proposal": "Vorschlag",
|
||||
"metadata.categoryMap.businessDoc.requirementsDocument": "Anforderungsdokumentation",
|
||||
"metadata.categoryMap.businessDoc.researchReport": "Forschungsbericht",
|
||||
"metadata.categoryMap.businessDoc.teamStructure": "Teamstruktur",
|
||||
"metadata.categoryMap.businessDoc.trainingMaterials": "Schulungsmaterialien",
|
||||
"metadata.categoryMap.personalDoc.blogDraft": "Blog-Entwurf",
|
||||
"metadata.categoryMap.personalDoc.bookExcerpt": "Buchauszug",
|
||||
"metadata.categoryMap.personalDoc.codeSnippet": "Code-Snippet",
|
||||
"metadata.categoryMap.personalDoc.creativeWriting": "Kreatives Schreiben",
|
||||
"metadata.categoryMap.personalDoc.designDraft": "Design-Entwurf",
|
||||
"metadata.categoryMap.personalDoc.diary": "Tagebuch",
|
||||
"metadata.categoryMap.personalDoc.list": "Liste",
|
||||
"metadata.categoryMap.personalDoc.notes": "Notizen",
|
||||
"metadata.categoryMap.personalDoc.other": "Andere",
|
||||
"metadata.categoryMap.personalDoc.personalResume": "Persönlicher Lebenslauf",
|
||||
"metadata.categoryMap.personalDoc.photoCollection": "Fotosammlung",
|
||||
"metadata.categoryMap.personalDoc.projectOverview": "Projektübersicht",
|
||||
"metadata.categoryMap.personalDoc.researchReport": "Forschungsbericht",
|
||||
"metadata.categoryMap.personalDoc.schedule": "Zeitplan",
|
||||
"metadata.dateTimeFormat": "MMMM D, YYYY hh:mm A",
|
||||
"metadata.desc": "Das Kennzeichnen von Metadaten für Dokumente ermöglicht es der KI, sie rechtzeitig zu erreichen und die Quelle der Referenzen für die Benutzer offenzulegen.",
|
||||
"metadata.docTypeChangeTitle": "Dokumenttyp ändern",
|
||||
"metadata.docTypeSelectTitle": "Bitte wählen Sie einen Dokumenttyp",
|
||||
"metadata.docTypeSelectWarning": "Wenn der Dokumenttyp geändert wird, werden die jetzt ausgefüllten Metadaten nicht mehr erhalten bleiben",
|
||||
"metadata.field.IMChat.chatPartiesGroupName": "Chat-Parteien/Gruppenname",
|
||||
"metadata.field.IMChat.chatPlatform": "Chat-Plattform",
|
||||
"metadata.field.IMChat.endDate": "Enddatum",
|
||||
@ -202,10 +133,6 @@
|
||||
"metadata.field.personalDocument.lastModifiedDate": "Letztes Änderungsdatum",
|
||||
"metadata.field.personalDocument.tagsCategory": "Tags/Kategorie",
|
||||
"metadata.field.personalDocument.title": "Titel",
|
||||
"metadata.field.processRule.processClean": "Textverarbeitung bereinigen",
|
||||
"metadata.field.processRule.processDoc": "Dokument verarbeiten",
|
||||
"metadata.field.processRule.segmentLength": "Chunk-Länge",
|
||||
"metadata.field.processRule.segmentRule": "Chunk-Regel",
|
||||
"metadata.field.socialMediaPost.authorUsername": "Autor/Benutzername",
|
||||
"metadata.field.socialMediaPost.platform": "Plattform",
|
||||
"metadata.field.socialMediaPost.postURL": "Beitrags-URL",
|
||||
@ -231,7 +158,6 @@
|
||||
"metadata.field.wikipediaEntry.summaryIntroduction": "Zusammenfassung/Einführung",
|
||||
"metadata.field.wikipediaEntry.title": "Titel",
|
||||
"metadata.field.wikipediaEntry.webpageURL": "Webseiten-URL",
|
||||
"metadata.firstMetaAction": "Los geht's",
|
||||
"metadata.languageMap.ar": "Arabisch",
|
||||
"metadata.languageMap.cs": "Tschechisch",
|
||||
"metadata.languageMap.da": "Dänisch",
|
||||
@ -304,7 +230,6 @@
|
||||
"segment.delete": "Diesen Chunk löschen?",
|
||||
"segment.editChildChunk": "Untergeordneten Block bearbeiten",
|
||||
"segment.editChunk": "Chunk bearbeiten",
|
||||
"segment.editParentChunk": "Übergeordneter Block bearbeiten",
|
||||
"segment.edited": "BEARBEITETE",
|
||||
"segment.editedAt": "Bearbeitet am",
|
||||
"segment.empty": "Kein Chunk gefunden",
|
||||
@ -316,9 +241,6 @@
|
||||
"segment.keywords": "Schlüsselwörter",
|
||||
"segment.newChildChunk": "Neuer untergeordneter Block",
|
||||
"segment.newChunk": "Neuer Brocken",
|
||||
"segment.newQaSegment": "Neues Q&A-Segment",
|
||||
"segment.newTextSegment": "Neues Textsegment",
|
||||
"segment.paragraphs": "Absätze",
|
||||
"segment.parentChunk": "Übergeordneter Chunk",
|
||||
"segment.parentChunks_one": "ÜBERGEORDNETER CHUNK",
|
||||
"segment.parentChunks_other": "ÜBERGEORDNETE BLÖCKE",
|
||||
@ -334,6 +256,5 @@
|
||||
"segment.searchResults_other": "BEFUND",
|
||||
"segment.searchResults_zero": "ERGEBNIS",
|
||||
"segment.summary": "ZUSAMMENFASSUNG",
|
||||
"segment.summaryPlaceholder": "Schreiben Sie eine kurze Zusammenfassung für bessere Abrufbarkeit…",
|
||||
"segment.vectorHash": "Vektor-Hash: "
|
||||
"segment.summaryPlaceholder": "Schreiben Sie eine kurze Zusammenfassung für bessere Abrufbarkeit…"
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
"imageUploader.tip": "Bilder hochladen oder ablegen (Max. {{batchCount}}, {{size}} MB pro Bild)",
|
||||
"imageUploader.tooltip": "Bilder hochladen (Max. {{batchCount}}, jeweils {{size}} MB)",
|
||||
"input.countWarning": "Bis zu 200 Zeichen.",
|
||||
"input.indexWarning": "Nur Wissen hoher Qualität.",
|
||||
"input.placeholder": "Bitte geben Sie einen Text ein, ein kurzer aussagekräftiger Satz wird empfohlen.",
|
||||
"input.testing": "Testen",
|
||||
"input.title": "Quelltext",
|
||||
@ -22,7 +21,5 @@
|
||||
"table.header.queryContent": "Inhaltsabfrage",
|
||||
"table.header.source": "Quelle",
|
||||
"table.header.time": "Zeit",
|
||||
"title": "Abruf-Test",
|
||||
"viewChart": "VEKTORDIAGRAMM ansehen",
|
||||
"viewDetail": "Im Detail sehen"
|
||||
"title": "Abruf-Test"
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
{
|
||||
"addDocuments.backToDataSource": "Datenquelle",
|
||||
"addDocuments.characters": "Zeichen",
|
||||
"addDocuments.selectOnlineDocumentTip": "Bis zu {{count}} Seiten verarbeiten",
|
||||
"addDocuments.selectOnlineDriveTip": "Verarbeiten Sie bis zu {{count}} Dateien, maximal {{fileSize}} MB pro Datei",
|
||||
@ -24,7 +23,6 @@
|
||||
"creation.caution": "Vorsicht",
|
||||
"creation.createFromScratch.description": "Erstellen Sie eine benutzerdefinierte Pipeline von Grund auf neu mit vollständiger Kontrolle über die Datenverarbeitung und -struktur.",
|
||||
"creation.createFromScratch.title": "Leere Wissenspipeline",
|
||||
"creation.createKnowledge": "Wissen schaffen",
|
||||
"creation.errorTip": "Fehler beim Erstellen einer Wissensdatenbank",
|
||||
"creation.importDSL": "Importieren aus einer DSL-Datei",
|
||||
"creation.successTip": "Erfolgreich eine Wissensdatenbank erstellt",
|
||||
@ -52,9 +50,7 @@
|
||||
"inputFieldPanel.uniqueInputs.tooltip": "Eindeutige Eingaben sind nur für die ausgewählte Datenquelle und ihre Downstream-Knoten zugänglich. Benutzer müssen sie nicht ausfüllen, wenn sie andere Datenquellen auswählen. Im ersten Schritt (Datenquelle) werden nur Eingabefelder angezeigt, auf die von Datenquellenvariablen verwiesen wird. Alle anderen Felder werden im zweiten Schritt (Dokumente bearbeiten) angezeigt.",
|
||||
"knowledgeDescription": "Beschreibung des Wissens",
|
||||
"knowledgeDescriptionPlaceholder": "Beschreiben Sie, was in dieser Wissensdatenbank enthalten ist. Eine detaillierte Beschreibung ermöglicht es der KI, genauer auf den Inhalt des Datensatzes zuzugreifen. Wenn das Feld leer ist, verwendet Dify die Standard-Trefferstrategie. (Fakultativ)",
|
||||
"knowledgeNameAndIcon": "Name und Symbol des Wissens",
|
||||
"knowledgeNameAndIconPlaceholder": "Bitte geben Sie den Namen der Knowledge Base ein.",
|
||||
"knowledgePermissions": "Erlaubnisse",
|
||||
"onlineDocument.pageSelectorTitle": "{{name}} Seiten",
|
||||
"onlineDrive.breadcrumbs.allBuckets": "Alle Cloud Storage-Buckets",
|
||||
"onlineDrive.breadcrumbs.allFiles": "Alle Dateien",
|
||||
@ -62,8 +58,6 @@
|
||||
"onlineDrive.breadcrumbs.searchResult": "{{searchResultsLength}} Elemente im Ordner \"{{folderName}}\" finden",
|
||||
"onlineDrive.emptyFolder": "Dieser Ordner ist leer",
|
||||
"onlineDrive.emptySearchResult": "Es wurden keine Gegenstände gefunden",
|
||||
"onlineDrive.notConnected": "{{name}} ist nicht verbunden",
|
||||
"onlineDrive.notConnectedTip": "Um mit {{name}} zu synchronisieren, muss zuerst eine Verbindung zu {{name}} hergestellt werden.",
|
||||
"onlineDrive.notSupportedFileType": "Dieser Dateityp wird nicht unterstützt",
|
||||
"onlineDrive.resetKeywords": "Schlüsselwörter zurücksetzen",
|
||||
"operations.backToDataSource": "Zurück zur Datenquelle",
|
||||
@ -86,9 +80,6 @@
|
||||
"publishTemplate.success.message": "Pipeline-Vorlage veröffentlicht",
|
||||
"publishTemplate.success.tip": "Sie können diese Vorlage auf der Erstellungsseite verwenden.",
|
||||
"templates.customized": "Angepasst",
|
||||
"testRun.dataSource.localFiles": "Lokale Dateien",
|
||||
"testRun.notion.docTitle": "Notion docs",
|
||||
"testRun.notion.title": "Wählen Sie Notion Pages",
|
||||
"testRun.steps.dataSource": "Datenquelle",
|
||||
"testRun.steps.documentProcessing": "Verarbeitung von Dokumenten",
|
||||
"testRun.title": "Testlauf",
|
||||
|
||||
@ -4,20 +4,16 @@
|
||||
"form.chunkStructure.learnMore": "Weitere Informationen",
|
||||
"form.chunkStructure.title": "Chunk-Struktur",
|
||||
"form.desc": "Wissensbeschreibung",
|
||||
"form.descInfo": "Bitte schreiben Sie eine klare textuelle Beschreibung, um den Inhalt des Wissens zu umreißen. Diese Beschreibung wird als Grundlage für die Auswahl aus mehreren Wissensdatenbanken zur Inferenz verwendet.",
|
||||
"form.descPlaceholder": "Beschreiben Sie, was in diesem Wissen enthalten ist. Eine detaillierte Beschreibung ermöglicht es der KI, zeitnah auf den Inhalt des Wissens zuzugreifen. Wenn leer, verwendet Dify die Standard-Treffstrategie.",
|
||||
"form.descWrite": "Erfahren Sie, wie man eine gute Wissensbeschreibung schreibt.",
|
||||
"form.embeddingModel": "Einbettungsmodell",
|
||||
"form.embeddingModelTip": "Ändern Sie das eingebettete Modell, bitte gehen Sie zu ",
|
||||
"form.embeddingModelTipLink": "Einstellungen",
|
||||
"form.externalKnowledgeAPI": "API für externes Wissen",
|
||||
"form.externalKnowledgeID": "ID für externes Wissen",
|
||||
"form.helpText": "Erfahren Sie, wie Sie eine gute Datensatzbeschreibung schreiben.",
|
||||
"form.indexMethod": "Indexierungsmethode",
|
||||
"form.indexMethodChangeToEconomyDisabledTip": "Nicht verfügbar für ein Downgrade von HQ auf ECO",
|
||||
"form.indexMethodEconomy": "Ökonomisch",
|
||||
"form.indexMethodEconomyTip": "Verwendet {{count}} Schlüsselwörter pro Chunk für den Abruf, ohne Tokenverbrauch, auf Kosten geringerer Genauigkeit.",
|
||||
"form.indexMethodHighQuality": "Hohe Qualität",
|
||||
"form.indexMethodHighQualityTip": "Den Embedding-Modell zur Verarbeitung aufrufen, um bei Benutzeranfragen eine höhere Genauigkeit zu bieten.",
|
||||
"form.me": "(Sie)",
|
||||
"form.name": "Wissensname",
|
||||
@ -36,7 +32,6 @@
|
||||
"form.retrievalSetting.method": "Abrufmethode",
|
||||
"form.retrievalSetting.multiModalTip": "Wenn das Embedding-Modell multimodal unterstützt, wählen Sie bitte ein multimodales Reranking-Modell für eine bessere Leistung.",
|
||||
"form.retrievalSetting.title": "Abrufeinstellung",
|
||||
"form.retrievalSettings": "Einstellungen für den Abruf",
|
||||
"form.save": "Speichern",
|
||||
"form.searchModel": "Modell suchen",
|
||||
"form.summaryAutoGen": "Automatische Zusammenfassungserstellung",
|
||||
|
||||
@ -28,16 +28,10 @@
|
||||
"connectHelper.helper5": "bevor Sie diese Funktion verwenden.",
|
||||
"cornerLabel.pipeline": "Pipeline",
|
||||
"cornerLabel.unavailable": "Nicht verfügbar",
|
||||
"createDataset": "Wissen erstellen",
|
||||
"createDatasetIntro": "Importiere deine eigenen Textdaten oder schreibe Daten in Echtzeit über Webhook für die LLM-Kontextverbesserung.",
|
||||
"createExternalAPI": "Hinzufügen einer externen Knowledge-API",
|
||||
"createFromPipeline": "Aus Wissenspipeline erstellen",
|
||||
"createNewExternalAPI": "Erstellen einer neuen API für externes Wissen",
|
||||
"datasetDeleteFailed": "Löschen des Wissens fehlgeschlagen",
|
||||
"datasetDeleted": "Wissen gelöscht",
|
||||
"datasetUsedByApp": "Das Wissen wird von einigen Apps verwendet. Apps werden dieses Wissen nicht mehr nutzen können, und alle Prompt-Konfigurationen und Protokolle werden dauerhaft gelöscht.",
|
||||
"datasets": "WISSEN",
|
||||
"datasetsApi": "API",
|
||||
"defaultRetrievalTip": "Standardmäßig wird der Multi-Path-Abruf verwendet. Das Wissen wird aus mehreren Wissensdatenbanken abgerufen und dann neu eingestuft.",
|
||||
"deleteDatasetConfirmContent": "Das Löschen des Wissens ist unwiderruflich. Benutzer werden nicht mehr auf Ihr Wissen zugreifen können und alle Eingabeaufforderungen, Konfigurationen und Protokolle werden dauerhaft gelöscht.",
|
||||
"deleteDatasetConfirmTitle": "Dieses Wissen löschen?",
|
||||
@ -46,11 +40,9 @@
|
||||
"deleteExternalAPIConfirmWarningContent.noConnectionContent": "Sind Sie sicher, dass Sie diese API löschen möchten?",
|
||||
"deleteExternalAPIConfirmWarningContent.title.end": "?",
|
||||
"deleteExternalAPIConfirmWarningContent.title.front": "Löschen",
|
||||
"didYouKnow": "Wusstest du schon?",
|
||||
"docAllEnabled_one": "{{count}} Dokument aktiviert",
|
||||
"docAllEnabled_other": "Alle {{count}} Dokumente aktiviert",
|
||||
"docsFailedNotice": "Dokumente konnten nicht indiziert werden",
|
||||
"documentCount": " Dokumente",
|
||||
"documentsDisabled": "{{num}} Dokumente deaktiviert - seit über 30 Tagen inaktiv",
|
||||
"editExternalAPIConfirmWarningContent.end": "externes Wissen, und diese Modifikation wird auf alle angewendet. Sind Sie sicher, dass Sie diese Änderung speichern möchten?",
|
||||
"editExternalAPIConfirmWarningContent.front": "Diese External Knowledge API ist verknüpft mit",
|
||||
@ -60,14 +52,9 @@
|
||||
"editExternalAPITooltipTitle": "VERKNÜPFTES WISSEN",
|
||||
"embeddingModelNotAvailable": "Das Einbettungsmodell ist nicht verfügbar.",
|
||||
"enable": "Ermöglichen",
|
||||
"externalAPI": "Externe API",
|
||||
"externalAPIForm.apiKey": "API-Schlüssel",
|
||||
"externalAPIForm.cancel": "Abbrechen",
|
||||
"externalAPIForm.edit": "Redigieren",
|
||||
"externalAPIForm.encrypted.end": "Technologie.",
|
||||
"externalAPIForm.encrypted.front": "Ihr API-Token wird verschlüsselt und gespeichert mit",
|
||||
"externalAPIForm.endpoint": "API-Endpunkt",
|
||||
"externalAPIForm.name": "Name",
|
||||
"externalAPIForm.save": "Retten",
|
||||
"externalAPIPanelDescription": "Die API für externes Wissen wird verwendet, um eine Verbindung zu einer Wissensdatenbank außerhalb von Dify herzustellen und Wissen aus dieser Wissensdatenbank abzurufen.",
|
||||
"externalAPIPanelDocumentation": "Erfahren Sie, wie Sie eine API für externes Wissen erstellen",
|
||||
@ -89,7 +76,6 @@
|
||||
"firstEmpty.createDescription": "Der schnellste Einstieg. Du kannst jederzeit zu benutzerdefiniert wechseln.",
|
||||
"firstEmpty.createTitle": "Einsatzbereite Wissensdatenbank erstellen",
|
||||
"firstEmpty.or": "Oder",
|
||||
"firstEmpty.pickHint": "Nicht sicher, was du wählen sollst? Starte mit Wissen erstellen - du kannst später jederzeit wechseln.",
|
||||
"firstEmpty.pipelineDescription": "Definiere eigene Chunking-, Bereinigungs- und Indexierungsabläufe für spezialisierte Daten.",
|
||||
"firstEmpty.pipelineTitle": "Benutzerdefinierte Wissensdatenbank erstellen",
|
||||
"firstEmpty.recommended": "Empfohlen",
|
||||
@ -106,15 +92,7 @@
|
||||
"indexingMethod.semantic_search": "VEKTOR",
|
||||
"indexingTechnique.economy": "ECO",
|
||||
"indexingTechnique.high_quality": "HQ",
|
||||
"intro1": "Das Wissen kann in die Dify-Anwendung ",
|
||||
"intro2": "als Kontext",
|
||||
"intro3": ",",
|
||||
"intro4": "oder es ",
|
||||
"intro5": "kann erstellt werden",
|
||||
"intro6": " als ein eigenständiges ChatGPT-Index-Plugin zum Veröffentlichen",
|
||||
"knowledge": "Wissen",
|
||||
"learnHowToWriteGoodKnowledgeDescription": "Erfahren Sie, wie Sie eine gute Wissensbeschreibung schreiben",
|
||||
"localDocs": "Lokale Dokumente",
|
||||
"metadata.addMetadata": "Metadaten hinzufügen",
|
||||
"metadata.batchEditMetadata.applyToAllSelectDocument": "Auf alle ausgewählten Dokumente anwenden",
|
||||
"metadata.batchEditMetadata.applyToAllSelectDocumentTip": "Erstellen Sie automatisch alle oben bearbeiteten und neuen Metadaten für alle ausgewählten Dokumente, andernfalls wird die Bearbeitung der Metadaten nur auf Dokumente angewendet, die bereits Metadaten enthalten.",
|
||||
@ -152,9 +130,6 @@
|
||||
"mixtureHighQualityAndEconomicTip": "Für die Mischung von hochwertigen und wirtschaftlichen Wissensbasen ist das Rerank-Modell erforderlich.",
|
||||
"mixtureInternalAndExternalTip": "Das Rerank-Modell ist für die Mischung von internem und externem Wissen erforderlich.",
|
||||
"multimodal": "Multimodal",
|
||||
"nTo1RetrievalLegacy": "N-zu-1-Abruf wird ab September offiziell eingestellt. Es wird empfohlen, den neuesten Multi-Pfad-Abruf zu verwenden, um bessere Ergebnisse zu erzielen.",
|
||||
"nTo1RetrievalLegacyLink": "Mehr erfahren",
|
||||
"nTo1RetrievalLegacyLinkText": "N-zu-1-Abruf wird im September offiziell eingestellt.",
|
||||
"noExternalKnowledge": "Es gibt noch keine External Knowledge API, klicken Sie hier, um zu erstellen",
|
||||
"parentMode.fullDoc": "Vollständiges Dokument",
|
||||
"parentMode.paragraph": "Absatz",
|
||||
@ -162,14 +137,10 @@
|
||||
"partialEnabled_other": "Insgesamt {{count}} Dokumente, {{num}} verfügbar",
|
||||
"preprocessDocument": "{{num}} Vorverarbeiten von Dokumenten",
|
||||
"rerankSettings": "Rerank-Einstellungen",
|
||||
"retrieval.change": "Ändern",
|
||||
"retrieval.changeRetrievalMethod": "Abfragemethode ändern",
|
||||
"retrieval.full_text_search.description": "Indiziere alle Begriffe im Dokument, sodass Benutzer jeden Begriff suchen und den relevanten Textabschnitt finden können, der diese Begriffe enthält.",
|
||||
"retrieval.full_text_search.title": "Volltextsuche",
|
||||
"retrieval.hybrid_search.description": "Führe Volltextsuche und Vektorsuchen gleichzeitig aus, ordne neu, um die beste Übereinstimmung für die Abfrage des Benutzers auszuwählen. Konfiguration des Rerank-Modell-APIs ist notwendig.",
|
||||
"retrieval.hybrid_search.recommend": "Empfehlen",
|
||||
"retrieval.hybrid_search.title": "Hybridsuche",
|
||||
"retrieval.invertedIndex.description": "Ein invertierter Index ist eine Struktur, die für eine effiziente Abrufung verwendet wird. Nach Begriffen organisiert, verweist jeder Begriff auf Dokumente oder Webseiten, die ihn enthalten.",
|
||||
"retrieval.invertedIndex.title": "Invertierter Index",
|
||||
"retrieval.keyword_search.description": "Der invertierte Index ist eine Struktur, die für einen effizienten Abruf verwendet wird. Jeder Begriff ist nach Begriffen geordnet und verweist auf Dokumente oder Webseiten, die ihn enthalten.",
|
||||
"retrieval.keyword_search.title": "Invertierter Index",
|
||||
@ -188,12 +159,8 @@
|
||||
"unavailable": "Nicht verfügbar",
|
||||
"unknownError": "Unbekannter Fehler",
|
||||
"updated": "Aktualisierte",
|
||||
"weightedScore.customized": "Angepasst",
|
||||
"weightedScore.description": "Durch Anpassung der zugewiesenen Gewichte bestimmt diese Rerank-Strategie, ob semantische oder Schlüsselwort-Übereinstimmung priorisiert werden soll.",
|
||||
"weightedScore.keyword": "Schlüsselwort",
|
||||
"weightedScore.keywordFirst": "Schlüsselwort zuerst",
|
||||
"weightedScore.semantic": "Semantisch",
|
||||
"weightedScore.semanticFirst": "Semantik zuerst",
|
||||
"weightedScore.title": "Gewichtete Bewertung",
|
||||
"wordCount": " k Wörter"
|
||||
"weightedScore.title": "Gewichtete Bewertung"
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
{
|
||||
"access.api.backendTitle": "Backend-Dienst-API",
|
||||
"access.api.copyCurlExample": "cURL-Beispiel kopieren",
|
||||
"access.api.createFailed": "API-Token konnte nicht generiert werden.",
|
||||
"access.api.createKey": "API-Token generieren",
|
||||
@ -9,7 +8,6 @@
|
||||
"access.api.developerTitle": "Entwickler-API",
|
||||
"access.api.disabled": "Der API-Zugriff ist für diese Bereitstellung deaktiviert.",
|
||||
"access.api.disabledHint": "Aktivieren Sie den API-Zugriff, um umgebungsspezifische Token zu generieren.",
|
||||
"access.api.dismissToken": "API-Token schließen",
|
||||
"access.api.docs": "API-Dokumentation",
|
||||
"access.api.docsClose": "API-Dokumentation schließen",
|
||||
"access.api.docsDescription": "Workflow-API-Referenz für diese Bereitstellung anzeigen.",
|
||||
@ -17,7 +15,6 @@
|
||||
"access.api.empty": "Stellen Sie zuerst in einer Umgebung bereit, um API-Token auszustellen.",
|
||||
"access.api.emptyTitle": "Keine bereitgestellten Umgebungen",
|
||||
"access.api.endpoint": "Anforderungs-URL",
|
||||
"access.api.envPrefix": "env: {{env}}",
|
||||
"access.api.keyList": "API-Token-Liste",
|
||||
"access.api.nameLabel": "Name des API-Tokens",
|
||||
"access.api.namePlaceholder": "Geben Sie einen Namen für den API-Token ein",
|
||||
@ -36,14 +33,8 @@
|
||||
"access.api.table.environment": "Umgebung",
|
||||
"access.api.table.key": "API-Token",
|
||||
"access.api.table.name": "Name",
|
||||
"access.api.title": "API",
|
||||
"access.channels.col.channel": "Kanal",
|
||||
"access.channels.col.endpoint": "Einstiegspunkt",
|
||||
"access.channels.col.status": "Status",
|
||||
"access.channels.description": "WebApp- und CLI-Einstiegspunkte verwenden die oben festgelegten Zugriffsberechtigungen.",
|
||||
"access.channels.disabled": "Zugriffskanäle sind für diese Bereitstellung deaktiviert.",
|
||||
"access.channels.disabledHint": "Aktivieren Sie Zugriffskanäle, um WebApp- und CLI-Einstiegspunkte verfügbar zu machen.",
|
||||
"access.channels.followPermission": "Folgt Berechtigungen",
|
||||
"access.channels.title": "Zugriffskanäle",
|
||||
"access.cli.description": "Über das Terminal mit difyctl aufrufen, geeignet für Skripte, automatisierte Workflows oder Agent-Integrationen.",
|
||||
"access.cli.docs": "Anwendungsleitfaden",
|
||||
@ -51,103 +42,57 @@
|
||||
"access.cli.empty": "CLI-Endpunkt nicht konfiguriert.",
|
||||
"access.cli.install": "CLI installieren",
|
||||
"access.cli.title": "CLI",
|
||||
"access.copied": "Kopiert",
|
||||
"access.copy": "Kopieren",
|
||||
"access.copyFailed": "Kopieren fehlgeschlagen",
|
||||
"access.copyToast": "In die Zwischenablage kopiert",
|
||||
"access.hide": "Ausblenden",
|
||||
"access.members.clearAll": "Alle löschen",
|
||||
"access.members.empty": "Keine Treffer gefunden.",
|
||||
"access.members.groupCount_one": "{{count}} Gruppe",
|
||||
"access.members.groupCount_other": "{{count}} Gruppen",
|
||||
"access.members.groups": "Gruppen",
|
||||
"access.members.individuals": "Mitglieder",
|
||||
"access.members.memberCount_one": "{{count}} Mitglied",
|
||||
"access.members.memberCount_other": "{{count}} Mitglieder",
|
||||
"access.members.pickPlaceholder": "Gruppen oder Mitglieder auswählen",
|
||||
"access.members.searchPlaceholder": "Gruppen und Mitglieder suchen",
|
||||
"access.members.selectedLabel": "Ausgewählt",
|
||||
"access.permission.anyone": "Jeder mit dem Link",
|
||||
"access.permission.anyoneDesc": "Jeder kann ohne Anmeldung auf diese Bereitstellung zugreifen.",
|
||||
"access.permission.memberCount_one": "{{count}} Mitglied",
|
||||
"access.permission.memberCount_other": "{{count}} Mitglieder",
|
||||
"access.permission.organization": "Alle Mitglieder innerhalb der Plattform",
|
||||
"access.permission.organizationDesc": "Alle Mitglieder innerhalb der Plattform",
|
||||
"access.permission.specific": "Bestimmte Mitglieder innerhalb der Plattform",
|
||||
"access.permission.specificDesc": "Bestimmte Gruppen oder Mitglieder auswählen",
|
||||
"access.permission.specificUnavailable": "Die Auswahl bestimmter Mitglieder ist deaktiviert, bis echte Plattformmitglieder und -gruppen verbunden sind.",
|
||||
"access.permission.updateFailed": "Zugriffsrichtlinie konnte nicht aktualisiert werden.",
|
||||
"access.permissions.col.environment": "Umgebung",
|
||||
"access.permissions.col.permission": "Zugriff",
|
||||
"access.permissions.description": "Legen Sie Zugriffsberechtigungen für WebApp- und CLI-Einstiegspunkte in jeder Umgebung fest.",
|
||||
"access.permissions.editAriaLabel": "Zugriff für {{environment}} konfigurieren",
|
||||
"access.permissions.editDescription": "Legen Sie Zugriffsberechtigungen für WebApp- und CLI-Einstiegspunkte fest.",
|
||||
"access.permissions.editTitle": "Zugriffsberechtigungen",
|
||||
"access.permissions.title": "Zugriffsberechtigungen",
|
||||
"access.revoke": "Widerrufen",
|
||||
"access.runAccess.description": "Verwalten Sie, wie Benutzer diese Bereitstellung ausführen können und wer pro Umgebung darauf zugreifen darf.",
|
||||
"access.runAccess.disabled": "Der Ausführungszugriff ist für diese Bereitstellung deaktiviert.",
|
||||
"access.runAccess.mcp": "MCP",
|
||||
"access.runAccess.mcpDesc": "Diese Bereitstellung als Model-Context-Protocol-Server bereitstellen.",
|
||||
"access.runAccess.mcpEmpty": "MCP-Endpunkt nicht konfiguriert.",
|
||||
"access.runAccess.noEnvs": "Stellen Sie in einer Umgebung bereit, um Zugriffsberechtigungen zu konfigurieren.",
|
||||
"access.runAccess.noEnvsTitle": "Keine bereitgestellten Umgebungen",
|
||||
"access.runAccess.openWebapp": "WebApp öffnen",
|
||||
"access.runAccess.permissions": "Zugriffsberechtigungen",
|
||||
"access.runAccess.permissionsDesc": "Wer in jeder Umgebung auf diese Bereitstellung zugreifen kann.",
|
||||
"access.runAccess.title": "Ausführungszugriff",
|
||||
"access.runAccess.urlLabel": "URL",
|
||||
"access.runAccess.webapp": "WebApp",
|
||||
"access.runAccess.webappDesc": "Gehostete Webseite für Endbenutzer.",
|
||||
"access.runAccess.webappEmpty": "Demnächst verfügbar.",
|
||||
"access.show": "Anzeigen",
|
||||
"backend.RUNTIME_BACKEND_EXTERNAL": "Extern",
|
||||
"backend.RUNTIME_BACKEND_K8S": "K8S",
|
||||
"backend.RUNTIME_BACKEND_UNSPECIFIED": "Unbekannt",
|
||||
"card.access.api": "API-Token",
|
||||
"card.access.apiShort": "API",
|
||||
"card.access.cli": "CLI",
|
||||
"card.access.cliShort": "CLI",
|
||||
"card.access.none": "Kein Zugriff",
|
||||
"card.access.webApp": "WebApp",
|
||||
"card.access.webAppShort": "Web",
|
||||
"card.createFirstRelease": "Erstes Release erstellen",
|
||||
"card.deploy": "Bereitstellen",
|
||||
"card.deploying": "{{count}} werden bereitgestellt",
|
||||
"card.envOverflow": "+ {{count}}",
|
||||
"card.failed": "{{count}} fehlgeschlagen",
|
||||
"card.fromApp": "Von {{name}}",
|
||||
"card.lastDeployed": "Zuletzt bereitgestellt {{time}}",
|
||||
"card.menu.delete": "Bereitstellung löschen",
|
||||
"card.menu.deleteDisabled": "Das Löschen von Bereitstellungen ist für backendverwaltete Bereitstellungen noch nicht verfügbar.",
|
||||
"card.menu.deploy": "In Umgebung bereitstellen",
|
||||
"card.menu.editInfo": "Informationen bearbeiten",
|
||||
"card.menu.viewDetail": "Bereitstellungsdetails anzeigen",
|
||||
"card.moreActions": "Weitere Aktionen",
|
||||
"card.neverDeployed": "Noch nicht bereitgestellt",
|
||||
"card.noDescription": "Keine Beschreibung angegeben.",
|
||||
"card.notDeployed": "Nicht bereitgestellt",
|
||||
"card.ready": "{{count}} laufen",
|
||||
"card.tooltip.createdAt": "Erstellt",
|
||||
"card.tooltip.deployed": "Bereitgestellt",
|
||||
"card.tooltip.deploymentStatus": "Bereitstellung",
|
||||
"card.tooltip.notDeployed": "Diese Bereitstellung wurde noch in keiner Umgebung bereitgestellt.",
|
||||
"card.tooltip.notDeployedShort": "Nicht bereitgestellt",
|
||||
"card.tooltip.release": "Release",
|
||||
"card.tooltip.releaseName": "Release-Name",
|
||||
"card.tooltip.source": "Quelle",
|
||||
"common.loadFailed": "Laden fehlgeschlagen. Versuchen Sie es später erneut.",
|
||||
"common.loading": "Wird geladen...",
|
||||
"createGuide.actions.back": "Zurück",
|
||||
"createGuide.actions.cancel": "Abbrechen",
|
||||
"createGuide.actions.continue": "Weiter",
|
||||
"createGuide.actions.createAndDeploy": "Erstellen und bereitstellen",
|
||||
"createGuide.actions.creating": "Wird erstellt...",
|
||||
"createGuide.actions.deploy": "Bereitstellen",
|
||||
"createGuide.actions.deploying": "Wird erstellt und bereitgestellt...",
|
||||
"createGuide.actions.next": "Weiter",
|
||||
"createGuide.actions.skipDeploy": "Überspringen, später bereitstellen",
|
||||
"createGuide.description": "Erstellen Sie eine Bereitstellung aus einer Release-Quelle, Basisinformationen und einer Zielumgebung.",
|
||||
"createGuide.dsl.defaultAppName": "Importierte DSL-App",
|
||||
"createGuide.dsl.description": "Laden Sie ein Workflow-DSL-Paket hoch, um die Bereitstellung, das erste Release und die optionale Umgebungsbereitstellung zu erstellen.",
|
||||
"createGuide.dsl.dropDescription": "Laden Sie ein Workflow-YAML-DSL-Paket hoch. Die Bereitstellungsoptionen werden vor der Bereitstellung aus dieser Datei aufgelöst.",
|
||||
@ -163,7 +108,6 @@
|
||||
"createGuide.methods.bindApp.title": "Bestehende Workflow-App binden",
|
||||
"createGuide.methods.importDsl.description": "Laden Sie ein Workflow-YAML-DSL-Paket hoch und fahren Sie über die Bereitstellungs-UI fort.",
|
||||
"createGuide.methods.importDsl.title": "DSL importieren",
|
||||
"createGuide.methods.mocked": "Simuliert",
|
||||
"createGuide.nav.back": "Bereitstellungen",
|
||||
"createGuide.release.defaultName": "initiales Release",
|
||||
"createGuide.release.deployInfo": "Bereitstellungsinformationen",
|
||||
@ -176,10 +120,7 @@
|
||||
"createGuide.release.releaseDescription": "Release-Beschreibung",
|
||||
"createGuide.release.releaseDescriptionPlaceholder": "Beschreiben Sie dieses Release",
|
||||
"createGuide.release.releaseName": "Release-Name",
|
||||
"createGuide.release.releaseNote": "Release-Beschreibung",
|
||||
"createGuide.release.title": "Basisinformationen",
|
||||
"createGuide.source.availableApps_one": "{{count}} App",
|
||||
"createGuide.source.availableApps_other": "{{count}} Apps",
|
||||
"createGuide.source.clearSearch": "App-Suche löschen",
|
||||
"createGuide.source.description": "Wählen Sie die Quelle, die zum Erstellen des ersten Releases verwendet wird.",
|
||||
"createGuide.source.empty": "Keine Workflow-Apps gefunden.",
|
||||
@ -194,8 +135,6 @@
|
||||
"createGuide.target.bindingCount_other": "{{count}} Anmeldedaten",
|
||||
"createGuide.target.bindingHint": "Wählen Sie die Anmeldedaten aus, die von diesem Release verwendet werden.",
|
||||
"createGuide.target.bindings": "Anmeldedaten",
|
||||
"createGuide.target.deferredBindingHint": "Die Anmeldedaten werden während der finalen Bereitstellungsaktion aus dem tatsächlichen Bereitstellungsplan aufgelöst.",
|
||||
"createGuide.target.deferredEnvironmentHint": "Der Name wird mit den tatsächlichen Umgebungen abgeglichen, nachdem die Bereitstellung und das Release erstellt wurden.",
|
||||
"createGuide.target.description": "Wählen Sie eine Zielumgebung und geben Sie die Laufzeiteinstellungen an, die dieses Release dort benötigt. Dieser Schritt kann übersprungen werden.",
|
||||
"createGuide.target.envVarCount_one": "{{count}} Variable",
|
||||
"createGuide.target.envVarCount_other": "{{count}} Variablen",
|
||||
@ -210,15 +149,12 @@
|
||||
"createGuide.target.envVarType.string": "Zeichenkette",
|
||||
"createGuide.target.envVars": "Umgebungsvariablen",
|
||||
"createGuide.target.environment": "Zielumgebung",
|
||||
"createGuide.target.environmentName": "Umgebungsname",
|
||||
"createGuide.target.environmentNamePlaceholder": "Produktion",
|
||||
"createGuide.target.loadBindingsFailed": "Anmeldedaten konnten nicht geladen werden.",
|
||||
"createGuide.target.loadEnvironmentsFailed": "Bereitstellungsumgebungen konnten nicht geladen werden.",
|
||||
"createGuide.target.missingRequiredBinding": "Wählen Sie Anmeldedaten für diese erforderliche Bindung aus.",
|
||||
"createGuide.target.noBindingRequired": "Keine Anmeldedaten erforderlich.",
|
||||
"createGuide.target.noCredentialCandidates": "Keine verfügbaren Anmeldedaten.",
|
||||
"createGuide.target.noEnvironmentOptions": "Keine Bereitstellungsumgebungen verfügbar.",
|
||||
"createGuide.target.required": "Erforderlich",
|
||||
"createGuide.target.selectCredential": "Anmeldedaten auswählen",
|
||||
"createGuide.target.title": "In Umgebung bereitstellen",
|
||||
"createGuide.title": "Neue Bereitstellung",
|
||||
@ -226,31 +162,15 @@
|
||||
"createModal.appSearchEmpty": "Keine passenden Workflow-Apps",
|
||||
"createModal.appSearchPlaceholder": "Workflow-Apps suchen…",
|
||||
"createModal.cancel": "Abbrechen",
|
||||
"createModal.create": "Erstellen",
|
||||
"createModal.createFailed": "Bereitstellung konnte nicht erstellt werden.",
|
||||
"createModal.description": "Wählen Sie eine Workflow-App und erstellen Sie eine Bereitstellung.",
|
||||
"createModal.descriptionLabel": "Beschreibung",
|
||||
"createModal.descriptionPlaceholder": "Beschreiben Sie, wofür diese Bereitstellung verwendet wird",
|
||||
"createModal.loadMoreApps": "Weitere Apps laden",
|
||||
"createModal.loadingApps": "Apps werden geladen…",
|
||||
"createModal.nameLabel": "Bereitstellungsname",
|
||||
"createModal.namePlaceholder": "Bereitstellungsname",
|
||||
"createModal.noApps": "In diesem Arbeitsbereich wurden keine Workflow-Apps gefunden. Erstellen Sie zuerst eine in Studio.",
|
||||
"createModal.selected": "Ausgewählt",
|
||||
"createModal.sourceApp": "Workflow-App (erforderlich)",
|
||||
"createModal.title": "Neue Bereitstellung",
|
||||
"deployDrawer.bindingCount_one": "{{count}} Anmeldedaten",
|
||||
"deployDrawer.bindingCount_other": "{{count}} Anmeldedaten",
|
||||
"deployDrawer.bindingOptionsFailed": "Anmeldedaten-Optionen konnten nicht geladen werden.",
|
||||
"deployDrawer.bindingSelectionHint": "Wählen Sie die Anmeldedaten aus, die von dieser Bereitstellung verwendet werden.",
|
||||
"deployDrawer.bindingsDisabled": "Aus der Release-Vorschau aufgelöst. Bearbeitung ist noch nicht verfügbar.",
|
||||
"deployDrawer.cancel": "Abbrechen",
|
||||
"deployDrawer.close": "Bereitstellungs-Drawer schließen",
|
||||
"deployDrawer.defaultSelect": "Auswählen...",
|
||||
"deployDrawer.deploy": "In Umgebung bereitstellen",
|
||||
"deployDrawer.deployExistingRelease": "In Umgebung bereitstellen",
|
||||
"deployDrawer.deployExistingReleaseDescription": "Wählen Sie ein Release und eine Zielumgebung zur Bereitstellung aus.",
|
||||
"deployDrawer.deployExistingReleaseTitle": "In Umgebung bereitstellen",
|
||||
"deployDrawer.deployFailed": "Bereitstellung konnte nicht gestartet werden.",
|
||||
"deployDrawer.deploying": "Wird bereitgestellt...",
|
||||
"deployDrawer.description": "Wählen Sie ein Release und eine Zielumgebung zur Bereitstellung aus.",
|
||||
@ -267,95 +187,41 @@
|
||||
"deployDrawer.envVarType.string": "Zeichenkette",
|
||||
"deployDrawer.envVars": "Umgebungsvariablen",
|
||||
"deployDrawer.existingReleaseHint": "Dieses Release wird unverändert bereitgestellt. Es wird kein neues Release erstellt.",
|
||||
"deployDrawer.loadingBindings": "Wird aufgelöst...",
|
||||
"deployDrawer.lockedHint": "An aktuelle Umgebung gebunden",
|
||||
"deployDrawer.missingRequiredBinding": "Wählen Sie Anmeldedaten für diese erforderliche Bindung aus.",
|
||||
"deployDrawer.missingRequiredEnvVar": "Geben Sie einen Wert für diese erforderliche Umgebungsvariable ein.",
|
||||
"deployDrawer.modelCreds": "Modell-Anmeldedaten",
|
||||
"deployDrawer.needsValidation": " (Validierung erforderlich)",
|
||||
"deployDrawer.newReleaseHint": "Aus dem ausgewählten Workflow-App-YAML wird ein neues Release erstellt.",
|
||||
"deployDrawer.noBindingRequired": "Nicht erforderlich",
|
||||
"deployDrawer.noCredentialCandidates": "Keine verfügbaren Anmeldedaten.",
|
||||
"deployDrawer.noNewEnvironmentAvailable": "Alle verfügbaren Umgebungen haben bereits eine Bereitstellung.",
|
||||
"deployDrawer.noOtherReleaseAvailable": "Es sind keine weiteren Releases für diese Umgebung verfügbar.",
|
||||
"deployDrawer.noReleaseAvailable": "Erstellen Sie ein Release, bevor Sie in einer Umgebung bereitstellen.",
|
||||
"deployDrawer.notFound": "Bereitstellung nicht gefunden.",
|
||||
"deployDrawer.noteLabel": "Release-Beschreibung (optional)",
|
||||
"deployDrawer.notePlaceholder": "z. B. Onboarding-Texte angepasst",
|
||||
"deployDrawer.pluginCreds": "Plugin-Anmeldedaten",
|
||||
"deployDrawer.promote": "Bereitstellen",
|
||||
"deployDrawer.promoteDescription": "Wählen Sie ein Release und eine Zielumgebung zur Bereitstellung aus.",
|
||||
"deployDrawer.promoteTitle": "In Umgebung bereitstellen",
|
||||
"deployDrawer.readOnly": "Schreibgeschützt",
|
||||
"deployDrawer.redeploy": "In Umgebung bereitstellen",
|
||||
"deployDrawer.redeployDescription": "Wählen Sie ein Release und eine Zielumgebung zur Bereitstellung aus.",
|
||||
"deployDrawer.redeployExistingReleaseHint": "Das aktuelle Release wird unverändert erneut bereitgestellt. Es wird kein neues Release erstellt.",
|
||||
"deployDrawer.redeployTitle": "In Umgebung bereitstellen",
|
||||
"deployDrawer.releaseLabel": "Release",
|
||||
"deployDrawer.requiredBinding": "Erforderlich",
|
||||
"deployDrawer.rollback": "Bereitstellen",
|
||||
"deployDrawer.rollbackDescription": "Wählen Sie ein Release und eine Zielumgebung zur Bereitstellung aus.",
|
||||
"deployDrawer.rollbackTitle": "In Umgebung bereitstellen",
|
||||
"deployDrawer.runtimeCredentials": "Anmeldedaten",
|
||||
"deployDrawer.secretPlaceholder": "Geheimnis",
|
||||
"deployDrawer.selectCredential": "Anmeldedaten auswählen",
|
||||
"deployDrawer.selectEnv": "Eine Umgebung auswählen",
|
||||
"deployDrawer.selectProviderCred": "{{provider}}-Anmeldedaten auswählen",
|
||||
"deployDrawer.selectProviderKey": "{{provider}}-Schlüssel auswählen",
|
||||
"deployDrawer.selectRelease": "Ein Release auswählen",
|
||||
"deployDrawer.targetEnv": "Zielumgebung",
|
||||
"deployDrawer.title": "In Umgebung bereitstellen",
|
||||
"deployDrawer.valuePlaceholder": "Wert",
|
||||
"deployTab.cancelDeployment": "Bereitstellung abbrechen",
|
||||
"deployTab.closeError": "Schließen",
|
||||
"deployTab.col.actions": "Aktionen",
|
||||
"deployTab.col.currentRelease": "Aktuelles Release",
|
||||
"deployTab.col.environment": "Umgebung",
|
||||
"deployTab.col.status": "Status",
|
||||
"deployTab.col.updated": "Aktualisiert",
|
||||
"deployTab.collapseDetails": "Bereitstellungsdetails einklappen",
|
||||
"deployTab.confirmUndeploy": "Bereitstellung aufheben",
|
||||
"deployTab.deployOtherVersion": "Anderes Release bereitstellen",
|
||||
"deployTab.deployToEnv": "In {{name}} bereitstellen",
|
||||
"deployTab.deployToNewEnv": "In neuer Umgebung bereitstellen...",
|
||||
"deployTab.empty": "Noch keine Instanzen. Stellen Sie in einer neuen Umgebung bereit, um zu beginnen.",
|
||||
"deployTab.emptyDescription": "Wählen Sie ein Release und eine Zielumgebung aus, um diese Bereitstellung Benutzern zur Verfügung zu stellen.",
|
||||
"deployTab.emptyTitle": "Es werden noch keine Umgebungen ausgeführt",
|
||||
"deployTab.envCount": "Umgebungen",
|
||||
"deployTab.errorCode": "Code",
|
||||
"deployTab.errorDialogDesc": "Überprüfen Sie die letzte fehlgeschlagene Bereitstellung, bevor Sie es erneut versuchen oder ein anderes Release bereitstellen.",
|
||||
"deployTab.errorDialogTitle": "Bereitstellungsfehler in {{name}}",
|
||||
"deployTab.errorMessage": "Meldung",
|
||||
"deployTab.errorPhase": "Phase",
|
||||
"deployTab.expandDetails": "Bereitstellungsdetails ausklappen",
|
||||
"deployTab.moreActions": "Weitere Aktionen",
|
||||
"deployTab.newDeployment": "In neuer Umgebung bereitstellen",
|
||||
"deployTab.panel.commit": "Commit-ID",
|
||||
"deployTab.panel.deploymentId": "Bereitstellungs-ID",
|
||||
"deployTab.panel.endpoints": "Endpunkte",
|
||||
"deployTab.panel.envVars": "Umgebungsvariablen",
|
||||
"deployTab.panel.error": "Fehler",
|
||||
"deployTab.panel.failedRelease": "Fehlgeschlagenes Release",
|
||||
"deployTab.panel.health": "Zustand",
|
||||
"deployTab.panel.instanceInfo": "Instanzinformationen",
|
||||
"deployTab.panel.modelCreds": "Modell-Anmeldedaten",
|
||||
"deployTab.panel.pluginCreds": "Plugin-Anmeldedaten",
|
||||
"deployTab.panel.release": "Release",
|
||||
"deployTab.panel.releaseCreatedAt": "Release erstellt am",
|
||||
"deployTab.panel.releaseInfo": "Release-Informationen",
|
||||
"deployTab.panel.replicas": "Replikate",
|
||||
"deployTab.panel.run": "Ausführen",
|
||||
"deployTab.panel.runtimeBindings": "Anmeldedaten",
|
||||
"deployTab.panel.runtimeInfo": "Laufzeitinformationen",
|
||||
"deployTab.panel.runtimeMode": "Laufzeitmodus",
|
||||
"deployTab.panel.runtimeNote": "Laufzeit-Hinweis",
|
||||
"deployTab.panel.targetRelease": "Ziel-Release",
|
||||
"deployTab.panel.unknownError": "Bereitstellung fehlgeschlagen.",
|
||||
"deployTab.promote": "Bereitstellen",
|
||||
"deployTab.redeploy": "Erneut bereitstellen",
|
||||
"deployTab.releaseCreatedAt": "Release erstellt {{time}}",
|
||||
"deployTab.retry": "Erneut versuchen",
|
||||
"deployTab.shortcut": "Kurzbefehl",
|
||||
"deployTab.status.deployFailed": "Bereitstellung fehlgeschlagen",
|
||||
"deployTab.status.deployingRelease": "Wird bereitgestellt ({{release}})",
|
||||
"deployTab.status.runningOutOfSync": "Läuft (Synchronisierung ausstehend)",
|
||||
@ -363,26 +229,13 @@
|
||||
"deployTab.undeploy": "Bereitstellung aufheben",
|
||||
"deployTab.undeployConfirmDesc": "Der Endbenutzerzugriff wird sofort beendet. Das Release kann später erneut bereitgestellt werden.",
|
||||
"deployTab.undeployConfirmTitle": "Bereitstellung aus {{name}} aufheben?",
|
||||
"deployTab.undeployFrom": "Bereitstellung aus {{name}} aufheben",
|
||||
"deployTab.undeployImpactTitle": "Betroffene Instanz",
|
||||
"deployTab.viewError": "Fehler anzeigen",
|
||||
"deployTab.viewLogs": "Logs anzeigen",
|
||||
"deployTab.viewProgress": "Fortschritt anzeigen",
|
||||
"detail.backToInstances": "Zurück zu Bereitstellungen",
|
||||
"detail.deployingCount": "{{count}} werden bereitgestellt",
|
||||
"detail.envCount_one": "{{count}} Umgebung",
|
||||
"detail.envCount_other": "{{count}} Umgebungen",
|
||||
"detail.failedCount": "{{count}} fehlgeschlagen",
|
||||
"detail.mobileTabs": "Bereitstellungsbereiche",
|
||||
"detail.notFound": "Bereitstellung nicht gefunden",
|
||||
"detail.openSourceApp": "Quelle {{name}} öffnen",
|
||||
"detail.sourceApp": "Quelle",
|
||||
"detail.sourceAppLink": "Quelle",
|
||||
"documentTitle.create": "Neue Bereitstellung · Bereitstellungen",
|
||||
"documentTitle.detail": "Bereitstellung · Bereitstellungen",
|
||||
"documentTitle.list": "Bereitstellungen",
|
||||
"filter.allEnvs": "Alle Umgebungen",
|
||||
"filter.notDeployed": "Nicht bereitgestellt",
|
||||
"filter.searchPlaceholder": "Bereitstellungen suchen",
|
||||
"health.ENVIRONMENT_STATUS_ADMISSION": "Zulassung",
|
||||
"health.ENVIRONMENT_STATUS_BOOTSTRAPPING": "Wird initialisiert",
|
||||
@ -393,7 +246,6 @@
|
||||
"list.clearFilters": "Filter löschen",
|
||||
"list.clearSearch": "Bereitstellungssuche löschen",
|
||||
"list.createDeployment": "Neu",
|
||||
"list.empty": "Keine Bereitstellungen gefunden.",
|
||||
"list.emptyDescription": "Erstellen Sie eine Bereitstellung aus einer Workflow-App oder einem Workflow-DSL-Paket, um Releases, Umgebungen und Zugriff zu verwalten.",
|
||||
"list.emptyFilteredDescription": "Keine Bereitstellung entspricht der aktuellen Suche oder dem Umgebungsfilter.",
|
||||
"list.emptyFilteredTitle": "Keine passenden Bereitstellungen",
|
||||
@ -401,11 +253,6 @@
|
||||
"mode.ENVIRONMENT_MODE_ISOLATED": "Isoliert",
|
||||
"mode.ENVIRONMENT_MODE_SHARED": "Geteilt",
|
||||
"mode.ENVIRONMENT_MODE_UNSPECIFIED": "Unbekannt",
|
||||
"newInstance.comingSoon": "Demnächst verfügbar",
|
||||
"newInstance.fromStudio": "Aus Studio auswählen",
|
||||
"newInstance.importDSL": "DSL importieren",
|
||||
"newInstance.title": "Neue Bereitstellung",
|
||||
"overview.accessEndpoints": "Zugriffsendpunkte",
|
||||
"overview.accessMeta.apiTokens": "API-Token verwalten",
|
||||
"overview.accessMeta.cli": "CLI-Zugriff anzeigen",
|
||||
"overview.accessMeta.webApp": "WebApp-Zugriff verwalten",
|
||||
@ -415,8 +262,6 @@
|
||||
"overview.apiKeysCount_other": "{{count}} API-Token",
|
||||
"overview.apiTokenSummary.environments_one": "{{count}} bereitgestellte Umgebung",
|
||||
"overview.apiTokenSummary.environments_other": "{{count}} bereitgestellte Umgebungen",
|
||||
"overview.availableForDeployment": "Verfügbar für Bereitstellung",
|
||||
"overview.basicInfo": "Basisinformationen",
|
||||
"overview.cardAction.deployLatest": "Neuestes Release bereitstellen",
|
||||
"overview.cardAction.redeploy": "Erneut bereitstellen",
|
||||
"overview.cardAction.viewProgress": "Bereitstellung anzeigen",
|
||||
@ -436,79 +281,27 @@
|
||||
"overview.chip.olderRelease": "älter",
|
||||
"overview.chip.olderReleaseTooltip": "In dieser Umgebung läuft ein älteres Release.",
|
||||
"overview.chip.openInDeployTab": "Bereitstellungsfortschritt anzeigen",
|
||||
"overview.cli": "CLI",
|
||||
"overview.configured": "Konfiguriert",
|
||||
"overview.createRelease": "Release erstellen",
|
||||
"overview.created": "Erstellt",
|
||||
"overview.deploy": "Bereitstellen",
|
||||
"overview.deployedEnvironments": "bereitgestellt",
|
||||
"overview.deploymentOverview": "Bereitstellungsübersicht",
|
||||
"overview.deploymentStatus": "Bereitstellungsstatus",
|
||||
"overview.description": "Beschreibung",
|
||||
"overview.developerApi": "Entwickler-API",
|
||||
"overview.disabled": "Deaktiviert",
|
||||
"overview.emptyValue": "Nicht festgelegt",
|
||||
"overview.enabled": "Aktiviert",
|
||||
"overview.enabledChannels": "Zugriff aktiviert",
|
||||
"overview.endUserAccess": "Endbenutzerzugriff",
|
||||
"overview.environments": "Umgebungen",
|
||||
"overview.hero.byName": "von {{name}}",
|
||||
"overview.hero.empty": "Noch keine Releases",
|
||||
"overview.hero.emptyDescription": "Erstellen Sie ein Release aus der aktuellen Quelle, bevor Sie bereitstellen.",
|
||||
"overview.hero.propagation_one": "in {{count}}/{{total}} Umgebung bereitgestellt",
|
||||
"overview.hero.propagation_other": "in {{count}}/{{total}} Umgebungen bereitgestellt",
|
||||
"overview.hero.untargeted": "noch keine Umgebungen konfiguriert",
|
||||
"overview.instanceDetails": "Bereitstellungsdetails",
|
||||
"overview.instanceId": "Bereitstellungs-ID",
|
||||
"overview.latestRelease.releaseCount_one": "{{count}} Release",
|
||||
"overview.latestRelease.releaseCount_other": "{{count}} Releases",
|
||||
"overview.latestReleaseTitle": "Neuestes Release",
|
||||
"overview.manageDeployments": "Bereitstellungen verwalten",
|
||||
"overview.name": "Name",
|
||||
"overview.noAccessConfig": "Keine Zugriffskonfiguration.",
|
||||
"overview.noReleaseYet": "Erstellen Sie ein Release, bevor Sie in einer Umgebung bereitstellen.",
|
||||
"overview.notConfigured": "Nicht konfiguriert",
|
||||
"overview.previousReleases.empty": "Noch keine früheren Releases.",
|
||||
"overview.previousReleases.retired": "Derzeit nicht bereitgestellt",
|
||||
"overview.previousReleases.title": "Frühere Releases",
|
||||
"overview.previousReleases.viewAll": "Alle anzeigen",
|
||||
"overview.ready": "Bereitstellbar",
|
||||
"overview.recentReleases": "Aktuelle Releases",
|
||||
"overview.releaseDeployedTitle": "{{release}} ist bereitgestellt",
|
||||
"overview.releaseReadyTitle": "{{release}} ist bereit zur Bereitstellung",
|
||||
"overview.serviceMap": "Servicekarte",
|
||||
"overview.servingRelease": "Bedient {{release}}",
|
||||
"overview.servingReleaseDescription": "Diese Bereitstellung ist in {{count}}/{{total}} Umgebungen bereitgestellt.",
|
||||
"overview.strip.deployToNewEnvironment": "In neuer Umgebung bereitstellen",
|
||||
"overview.strip.empty": "Keine Umgebungen konfiguriert.",
|
||||
"overview.strip.emptyDeployableDescription": "Stellen Sie das neueste Release in einer Umgebung bereit, sobald Sie bereit sind.",
|
||||
"overview.strip.emptyDeployed": "Noch keine Instanzen.",
|
||||
"overview.strip.emptyDescription": "Erstellen Sie ein Release, bevor Sie in einer Umgebung bereitstellen.",
|
||||
"overview.strip.emptyTitle": "Noch keine Instanzen",
|
||||
"overview.strip.summary_one": "1 von {{total}} auf dem neuesten Release",
|
||||
"overview.strip.summary_other": "{{count}} von {{total}} auf dem neuesten Release",
|
||||
"overview.strip.title": "Instanzen",
|
||||
"overview.switchSourceApp": "Quelle wechseln",
|
||||
"overview.switchSourceAppDescription": "Wählen Sie die Workflow-App, die als Quelle für zukünftige Releases verwendet wird.",
|
||||
"overview.switchSourceAppHint": "Nach dem Wechsel verwenden nur neu erstellte Releases die neue Quelle. Historische Releases und bestehende Bereitstellungen werden nicht geändert.",
|
||||
"overview.targetRelease": "Ziel-Release",
|
||||
"overview.webapp": "WebApp",
|
||||
"settings.danger": "Gefahrenzone",
|
||||
"settings.dangerDesc": "Löschen Sie diese Bereitstellung dauerhaft und beenden Sie alle laufenden Instanzen. Dies kann nicht rückgängig gemacht werden.",
|
||||
"settings.delete": "Bereitstellung löschen",
|
||||
"settings.deleteConfirmDesc": "{{name}} löschen? Jede Instanz wird gestoppt und in allen Umgebungen entfernt. Dies kann nicht rückgängig gemacht werden.",
|
||||
"settings.deleteConfirmTitle": "Bereitstellung löschen",
|
||||
"settings.deleteFailed": "Bereitstellung konnte nicht gelöscht werden.",
|
||||
"settings.deleteImpact": "Auswirkung",
|
||||
"settings.deleteImpactInstance": "Bereitstellung",
|
||||
"settings.deleteImpactTitle": "Betroffene Bereitstellung",
|
||||
"settings.deleteImpactValue": "Die Bereitstellung wird aus der Bereitstellungsliste entfernt.",
|
||||
"settings.deleted": "Bereitstellung gelöscht",
|
||||
"settings.description": "Beschreibung",
|
||||
"settings.descriptionHelp": "Verwalten Sie den Namen, die Beschreibung und andere Einstellungen dieser Bereitstellung.",
|
||||
"settings.general": "Allgemein",
|
||||
"settings.name": "Bereitstellungsname",
|
||||
"settings.reset": "Zurücksetzen",
|
||||
"settings.save": "Änderungen speichern",
|
||||
"settings.updateFailed": "Bereitstellung konnte nicht aktualisiert werden.",
|
||||
"settings.updated": "Bereitstellung aktualisiert",
|
||||
@ -520,7 +313,6 @@
|
||||
"status.RUNTIME_INSTANCE_STATUS_UNDEPLOYED": "Nicht bereitgestellt",
|
||||
"status.RUNTIME_INSTANCE_STATUS_UNDEPLOYING": "Bereitstellung wird aufgehoben",
|
||||
"status.RUNTIME_INSTANCE_STATUS_UNSPECIFIED": "Unbekannt",
|
||||
"subtitle": "Verwalten Sie Bereitstellungen über Umgebungen hinweg.",
|
||||
"tabs.access.description": "Verwalten Sie Zugriffskanäle und Zugriffsberechtigungen.",
|
||||
"tabs.access.name": "Zugriff",
|
||||
"tabs.api-tokens.description": "Verwalten Sie API-Token und rufen Sie Instanzen über HTTP auf.",
|
||||
@ -531,9 +323,6 @@
|
||||
"tabs.overview.name": "Übersicht",
|
||||
"tabs.releases.description": "Releases erstellen, bereitstellen und verwalten.",
|
||||
"tabs.releases.name": "Releases",
|
||||
"tabs.settings.description": "Verwalten Sie den Namen, die Beschreibung und andere Einstellungen dieser Bereitstellung.",
|
||||
"tabs.settings.name": "Einstellungen",
|
||||
"title": "Bereitstellungen",
|
||||
"unsupportedDslNodes.description": "Dieses Release enthält Knoten, die die Bereitstellungslaufzeit noch nicht unterstützt. Entfernen oder ersetzen Sie sie in Studio und versuchen Sie es erneut.",
|
||||
"unsupportedDslNodes.descriptionWithTypes": "Dieses Release enthält Knoten, die die Bereitstellungslaufzeit noch nicht unterstützt: {{nodeTypes}}. Entfernen oder ersetzen Sie sie in Studio und versuchen Sie es erneut.",
|
||||
"unsupportedDslNodes.title": "Nicht unterstützte Knoten",
|
||||
@ -544,7 +333,6 @@
|
||||
"versions.checkingReleaseContent": "Release-Inhalt wird überprüft...",
|
||||
"versions.col.action": "Aktion",
|
||||
"versions.col.author": "Erstellt von",
|
||||
"versions.col.commit": "Commit",
|
||||
"versions.col.createdAt": "Erstellt am",
|
||||
"versions.col.deployedTo": "Bereitgestellt in",
|
||||
"versions.col.release": "Release",
|
||||
@ -554,20 +342,14 @@
|
||||
"versions.createFailed": "Release konnte nicht erstellt werden.",
|
||||
"versions.createRelease": "Release erstellen",
|
||||
"versions.createReleaseDescription": "Erstellen Sie ein bereitstellbares Release aus einer Workflow-App oder einer Workflow-DSL-Datei.",
|
||||
"versions.createReleaseHint": "Neue Releases können in jeder Umgebung bereitgestellt werden.",
|
||||
"versions.createSuccess": "Release \"{{name}}\" erstellt.",
|
||||
"versions.creating": "Wird erstellt...",
|
||||
"versions.currentOn": "Aktuelles Release in {{name}}",
|
||||
"versions.deleteConfirmDesc": "Release \"{{name}}\" wird dauerhaft gelöscht. Dies kann nicht rückgängig gemacht werden.",
|
||||
"versions.deleteConfirmTitle": "Release löschen?",
|
||||
"versions.deleteFailed": "Release konnte nicht gelöscht werden.",
|
||||
"versions.deleteImpactDeployment": "Bereitstellungsstatus",
|
||||
"versions.deleteImpactNotDeployed": "Derzeit nicht bereitgestellt",
|
||||
"versions.deleteImpactRelease": "Release",
|
||||
"versions.deleteImpactTitle": "Auswirkung des Löschens",
|
||||
"versions.deleteRelease": "Release löschen",
|
||||
"versions.deleteSuccess": "Release \"{{name}}\" gelöscht.",
|
||||
"versions.deploy": "Bereitstellen",
|
||||
"versions.deployTo": "In {{name}} bereitstellen",
|
||||
"versions.deployedStatus.RUNTIME_INSTANCE_STATUS_DEPLOYING": "Wird bereitgestellt",
|
||||
"versions.deployedStatus.RUNTIME_INSTANCE_STATUS_DRIFTED": "Synchronisierung ausstehend",
|
||||
@ -582,7 +364,6 @@
|
||||
"versions.disabledReason.checkingDeployments": "Bereitstellungsnutzung wird überprüft",
|
||||
"versions.disabledReason.current": "Dieses Release läuft bereits in {{name}}",
|
||||
"versions.disabledReason.deploying": "Warten Sie, bis die aktive Bereitstellung abgeschlossen ist",
|
||||
"versions.disabledReason.envDisabled": "Diese Umgebung ist nicht bereitstellbar",
|
||||
"versions.disabledReason.releaseInUse_one": "Heben Sie die Bereitstellung dieses Releases aus {{count}} Umgebung auf, bevor Sie es löschen",
|
||||
"versions.disabledReason.releaseInUse_other": "Heben Sie die Bereitstellung dieses Releases aus {{count}} Umgebungen auf, bevor Sie es löschen",
|
||||
"versions.dslReadFailed": "Die DSL-Datei konnte nicht gelesen werden. Wählen Sie eine andere Datei und versuchen Sie es erneut.",
|
||||
@ -592,27 +373,21 @@
|
||||
"versions.editRelease": "Release bearbeiten",
|
||||
"versions.editReleaseDescription": "Aktualisieren Sie den Namen und die Beschreibung dieses Releases.",
|
||||
"versions.editSuccess": "Release \"{{name}}\" aktualisiert.",
|
||||
"versions.empty": "Noch keine Releases verfügbar.",
|
||||
"versions.emptyDescription": "Erstellen Sie das erste Release, bevor Sie in einer Umgebung bereitstellen.",
|
||||
"versions.emptyTitle": "Noch keine Releases",
|
||||
"versions.emptyWithCreate": "Noch keine Releases. Erstellen Sie das erste bereitstellbare Release, bevor Sie bereitstellen.",
|
||||
"versions.exportDsl": "DSL exportieren",
|
||||
"versions.exportDslFailed": "DSL konnte nicht exportiert werden.",
|
||||
"versions.exportingDsl": "Wird exportiert...",
|
||||
"versions.groupHeader.deploy": "Bereitstellen",
|
||||
"versions.groupHeader.promote": "Bereitstellen",
|
||||
"versions.groupHeader.rollback": "Vorherige Version bereitstellen",
|
||||
"versions.groupHeader.unavailable": "Nicht verfügbar",
|
||||
"versions.manualDslOption": "DSL hochladen",
|
||||
"versions.moreActions": "Weitere Aktionen",
|
||||
"versions.optional": "Optional",
|
||||
"versions.promote": "Bereitstellen",
|
||||
"versions.promoteTo": "In {{name}} bereitstellen",
|
||||
"versions.releaseAlreadyExists": "Ein Release mit demselben Inhalt existiert bereits: {{name}}.",
|
||||
"versions.releaseContentCheckFailed": "Release-Inhalt konnte nicht überprüft werden.",
|
||||
"versions.releaseDescriptionLabel": "Beschreibung",
|
||||
"versions.releaseDescriptionPlaceholder": "Beschreiben Sie dieses Release",
|
||||
"versions.releaseHistory": "Release-Historie",
|
||||
"versions.releaseNameConflict": "Ein Release mit diesem Namen existiert bereits. Wählen Sie einen anderen Namen.",
|
||||
"versions.releaseNameLabel": "Release-Name",
|
||||
"versions.releaseNamePlaceholder": "Release-Name",
|
||||
|
||||
@ -1,21 +1,10 @@
|
||||
{
|
||||
"applied.activeSubscription.description": "Sie haben ein aktives Abonnement. Sie können den Bildungsrabatt verwenden, nachdem Ihr Abonnement abläuft. Bestätigen Sie Ihr Abonnement in <stripeLink>Stripe</stripeLink>.",
|
||||
"applied.description": "Herzlichen Glückwunsch! Sie haben erfolgreich den Bildungsrabatt beantragt.",
|
||||
"applied.noPaymentPermission.description": "Sie haben keine Zahlungsberechtigung in diesem Arbeitsbereich. Bitte wechseln Sie zu einem Arbeitsbereich, in dem Sie die Abrechnung verwalten können, um den Bildungsrabatt zu nutzen.",
|
||||
"applied.noPaymentPermission.returnHome": "Zurück zu Dify",
|
||||
"applied.step1.description": "Sie haben erfolgreich den Bildungsrabatt beantragt.",
|
||||
"applied.step1.title": "Schritt 1",
|
||||
"applied.step2.description": "Wählen Sie den Arbeitsbereich aus, den Sie mit dem Bildungsrabatt verwenden möchten.",
|
||||
"applied.step2.title": "Schritt 2",
|
||||
"applied.tabs.activeSubscription": "Im Abonnement",
|
||||
"applied.tabs.eligible": "Kann kaufen",
|
||||
"applied.tabs.noPaymentPermission": "Keine Zahlungsberechtigung",
|
||||
"applied.title": "Bildungsrabatt angewendet",
|
||||
"applied.workspace.plan": "Bezahlter Plan",
|
||||
"applied.workspace.title": "Aktueller Arbeitsbereich",
|
||||
"currentSigned": "DERZEIT ANGEMELDET ALS",
|
||||
"educationPricingConfirm.billingPeriod.monthly": "monatlich",
|
||||
"educationPricingConfirm.billingPeriod.yearly": "jährlich",
|
||||
"educationPricingConfirm.cancel": "Aktuellen Plan behalten",
|
||||
"educationPricingConfirm.continue": "Zu Professional jährlich wechseln",
|
||||
"educationPricingConfirm.description": "Der Bildungsrabatt gilt nur für den jährlichen Professional-Plan. Wenn Sie Ihren aktuellen Plan behalten, ist der Rabatt nicht enthalten.",
|
||||
@ -56,8 +45,6 @@
|
||||
"rejectTitle": "Ihre Dify-Ausbildungsüberprüfung wurde abgelehnt.",
|
||||
"submit": "Einreichen",
|
||||
"submitError": "Die Formularübermittlung ist fehlgeschlagen. Bitte versuchen Sie es später erneut.",
|
||||
"successContent": "Wir haben einen 100% Rabattgutschein für den Dify Professional Plan auf Ihr Konto ausgestellt. Der Gutschein ist ein Jahr lang gültig, bitte nutzen Sie ihn innerhalb des Gültigkeitszeitraums.",
|
||||
"successTitle": "Sie haben die Dify-Ausbildung verifiziert",
|
||||
"toVerified": "Bildung überprüfen lassen",
|
||||
"toVerifiedTip.coupon": "exklusiver 100% Gutschein",
|
||||
"toVerifiedTip.end": "für den Dify Professional Plan.",
|
||||
|
||||
@ -1,9 +1,4 @@
|
||||
{
|
||||
"acceptPP": "Ich habe die Datenschutzbestimmungen gelesen und akzeptiere sie",
|
||||
"accountAlreadyInited": "Konto bereits initialisiert",
|
||||
"activated": "Jetzt anmelden",
|
||||
"activatedTipEnd": "Team beigetreten",
|
||||
"activatedTipStart": "Du bist dem",
|
||||
"adminInitPassword": "Admin-Initialpasswort",
|
||||
"back": "Zurück",
|
||||
"backToLogin": "Zurück zum Login",
|
||||
@ -17,16 +12,12 @@
|
||||
"checkCode.invalidCode": "Ungültiger Code",
|
||||
"checkCode.resend": "Wieder senden",
|
||||
"checkCode.tipsPrefix": "Wir senden einen Bestätigungscode an",
|
||||
"checkCode.useAnotherMethod": "Verwenden Sie eine andere Methode",
|
||||
"checkCode.validTime": "Beachten Sie, dass der Code 5 Minuten lang gültig ist",
|
||||
"checkCode.verificationCode": "Verifizierungscode",
|
||||
"checkCode.verificationCodePlaceholder": "Geben Sie den 6-stelligen Code ein",
|
||||
"checkCode.verify": "Überprüfen",
|
||||
"checkEmailForResetLink": "Bitte überprüfen Sie Ihre E-Mails auf einen Link zum Zurücksetzen Ihres Passworts. Wenn er nicht innerhalb weniger Minuten erscheint, überprüfen Sie bitte Ihren Spam-Ordner.",
|
||||
"confirmPassword": "Passwort bestätigen",
|
||||
"confirmPasswordPlaceholder": "Bestätigen Sie Ihr neues Passwort",
|
||||
"continueWithCode": "Fahren Sie mit dem Code fort",
|
||||
"createAndSignIn": "Erstellen und anmelden",
|
||||
"createSample": "Basierend auf diesen Informationen erstellen wir eine Beispielanwendung für dich",
|
||||
"dontHave": "Hast du nicht?",
|
||||
"email": "E-Mail-Adresse",
|
||||
@ -40,7 +31,6 @@
|
||||
"error.nameEmpty": "Name wird benötigt",
|
||||
"error.passwordEmpty": "Passwort wird benötigt",
|
||||
"error.passwordInvalid": "Das Passwort muss Buchstaben und Zahlen enthalten und länger als 8 Zeichen sein",
|
||||
"error.passwordLengthInValid": "Das Passwort muss mindestens 8 Zeichen lang sein",
|
||||
"error.redirectUrlMissing": "Die Weiterleitungs-URL fehlt",
|
||||
"error.registrationNotAllowed": "Konto nicht gefunden. Bitte wenden Sie sich an den Systemadministrator, um sich zu registrieren.",
|
||||
"explore": "Dify erkunden",
|
||||
@ -54,7 +44,6 @@
|
||||
"interfaceLanguage": "Oberflächensprache",
|
||||
"invalid": "Der Link ist abgelaufen",
|
||||
"invalidInvitationCode": "Ungültiger Einladungscode",
|
||||
"invalidToken": "Ungültiges oder abgelaufenes Token",
|
||||
"invitationCode": "Einladungscode",
|
||||
"invitationCodePlaceholder": "Dein Einladungscode",
|
||||
"join": "Beitreten",
|
||||
@ -81,12 +70,9 @@
|
||||
"passwordChangedTip": "Ihr Passwort wurde erfolgreich geändert",
|
||||
"passwordPlaceholder": "Dein Passwort",
|
||||
"pp": "Datenschutzbestimmungen",
|
||||
"reset": "Bitte führe den folgenden Befehl aus, um dein Passwort zurückzusetzen",
|
||||
"resetLinkSent": "Link zum Zurücksetzen gesendet",
|
||||
"resetPassword": "Passwort zurücksetzen",
|
||||
"resetPasswordDesc": "Geben Sie die E-Mail-Adresse ein, mit der Sie sich bei Dify angemeldet haben, und wir senden Ihnen eine E-Mail zum Zurücksetzen des Passworts.",
|
||||
"rightDesc": "Mühelos optisch ansprechende, bedienbare und verbesserbare KI-Anwendungen erstellen.",
|
||||
"rightTitle": "Das volle Potenzial von LLM ausschöpfen",
|
||||
"sendResetLink": "Link zum Zurücksetzen senden",
|
||||
"sendUsMail": "Sende uns deine Vorstellung per E-Mail, und wir bearbeiten die Einladungsanfrage.",
|
||||
"sendVerificationCode": "Verifizierungscode senden",
|
||||
@ -110,8 +96,6 @@
|
||||
"validate": "Validieren",
|
||||
"webapp.disabled": "Die Webanmeldeauthentifizierung ist deaktiviert. Bitte kontaktieren Sie den Systemadministrator, um sie zu aktivieren. Sie können versuchen, die App direkt zu verwenden.",
|
||||
"webapp.login": "Anmelden",
|
||||
"webapp.noLoginMethod": "Authentifizierungsmethode ist nicht für die Webanwendung konfiguriert",
|
||||
"webapp.noLoginMethodTip": "Bitte kontaktieren Sie den Systemadministrator, um eine Authentifizierungsmethode hinzuzufügen.",
|
||||
"welcome": "Willkommen bei Dify, bitte melde dich an, um fortzufahren.",
|
||||
"withGitHub": "Mit GitHub fortfahren",
|
||||
"withGoogle": "Mit Google fortfahren",
|
||||
|
||||
@ -21,14 +21,11 @@
|
||||
"accessRule.expandSection": "{{title}} ausklappen",
|
||||
"accessRule.individualPermissionSettings": "Individuelle Berechtigungseinstellungen",
|
||||
"accessRule.individualPermissionSettingsTip": "Legen Sie Berechtigungsausnahmen für bestimmte Mitarbeiter oder Gruppen fest. Diese Einstellungen überschreiben die Standardzugriffsstufe.",
|
||||
"accessRule.lockedSummary_one": "· {{count}} gesperrt",
|
||||
"accessRule.lockedSummary_other": "· {{count}} gesperrt",
|
||||
"accessRule.maintainer": "Betreuer",
|
||||
"accessRule.member": "Mitglied",
|
||||
"accessRule.newPermissionSet": "Neuer Berechtigungssatz",
|
||||
"accessRule.noAvailableMembers": "Keine Mitglieder zum Hinzufügen verfügbar",
|
||||
"accessRule.noDescription": "Keine Beschreibung",
|
||||
"accessRule.noRoles": "Keine Rollen",
|
||||
"accessRule.noRules": "Keine Zugriffsregeln",
|
||||
"accessRule.noUserAccessSettings": "Keine individuellen Berechtigungseinstellungen",
|
||||
"accessRule.permission": "Berechtigung",
|
||||
|
||||
@ -1,60 +1,33 @@
|
||||
{
|
||||
"events.actionNum": "{{num}} {{event}} ENTHALTEN",
|
||||
"events.description": "Ereignisse, auf die dieses Trigger-Integration reagieren kann",
|
||||
"events.empty": "Keine Veranstaltungen verfügbar",
|
||||
"events.event": "Veranstaltung",
|
||||
"events.events": "Veranstaltungen",
|
||||
"events.item.noParameters": "Keine Parameter",
|
||||
"events.item.parameters": "{{count}} Parameter",
|
||||
"events.output": "Ausgabe",
|
||||
"events.title": "Verfügbare Veranstaltungen",
|
||||
"modal.apiKey.configuration.description": "Richten Sie Ihre Abonnementparameter ein",
|
||||
"modal.apiKey.configuration.title": "Abonnement konfigurieren",
|
||||
"modal.apiKey.title": "Mit API-Schlüssel erstellen",
|
||||
"modal.apiKey.verify.description": "Bitte geben Sie Ihre API-Zugangsdaten ein, um den Zugriff zu überprüfen",
|
||||
"modal.apiKey.verify.error": "Überprüfung der Anmeldedaten fehlgeschlagen. Bitte überprüfen Sie Ihren API-Schlüssel.",
|
||||
"modal.apiKey.verify.success": "Anmeldedaten erfolgreich überprüft",
|
||||
"modal.apiKey.verify.title": "Anmeldeinformationen überprüfen",
|
||||
"modal.common.authorize": "Autorisieren",
|
||||
"modal.common.authorizing": "Autorisierung läuft...",
|
||||
"modal.common.back": "Zurück",
|
||||
"modal.common.cancel": "Abbrechen",
|
||||
"modal.common.create": "Erstellen",
|
||||
"modal.common.creating": "Erstellen...",
|
||||
"modal.common.next": "Weiter",
|
||||
"modal.common.verify": "Überprüfen",
|
||||
"modal.common.verifying": "Überprüfen...",
|
||||
"modal.errors.authFailed": "Autorisierung fehlgeschlagen",
|
||||
"modal.errors.createFailed": "Fehler beim Erstellen des Abonnements",
|
||||
"modal.errors.networkError": "Netzwerkfehler, bitte versuchen Sie es erneut",
|
||||
"modal.errors.updateFailed": "Aktualisierung des Abonnements fehlgeschlagen",
|
||||
"modal.errors.verifyFailed": "Anmeldeinformationen konnten nicht überprüft werden",
|
||||
"modal.form.callbackUrl.description": "Diese URL wird Webhook-Ereignisse empfangen",
|
||||
"modal.form.callbackUrl.label": "Rückruf-URL",
|
||||
"modal.form.callbackUrl.placeholder": "Generierung...",
|
||||
"modal.form.callbackUrl.privateAddressWarning": "Diese URL scheint eine interne Adresse zu sein, was dazu führen kann, dass Webhook-Anfragen fehlschlagen. Sie können TRIGGER_URL auf eine öffentliche Adresse ändern.",
|
||||
"modal.form.callbackUrl.tooltip": "Stellen Sie einen öffentlich zugänglichen Endpunkt bereit, der Callback-Anfragen vom Auslöseranbieter empfangen kann.",
|
||||
"modal.form.subscriptionName.label": "Abonnementname",
|
||||
"modal.form.subscriptionName.placeholder": "Abonnementname eingeben",
|
||||
"modal.form.subscriptionName.required": "Der Abonnementname ist erforderlich",
|
||||
"modal.manual.description": "Konfigurieren Sie Ihr Webhook-Abonnement manuell",
|
||||
"modal.manual.logs.loading": "Warten auf Anfrage von {{pluginName}}...",
|
||||
"modal.manual.logs.request": "Anfrage",
|
||||
"modal.manual.logs.title": "Anforderungsprotokolle",
|
||||
"modal.manual.title": "Manuelle Einrichtung",
|
||||
"modal.oauth.authorization.authFailed": "Fehler beim Abrufen der OAuth-Autorisierungsinformationen",
|
||||
"modal.oauth.authorization.authSuccess": "Autorisierung erfolgreich",
|
||||
"modal.oauth.authorization.authorizeButton": "Autorisieren mit {{provider}}",
|
||||
"modal.oauth.authorization.description": "Erlaube Dify den Zugriff auf dein Konto",
|
||||
"modal.oauth.authorization.redirectUrl": "Weiterleitungs-URL",
|
||||
"modal.oauth.authorization.redirectUrlHelp": "Verwenden Sie diese URL in der Konfiguration Ihrer OAuth-App",
|
||||
"modal.oauth.authorization.title": "OAuth-Autorisierung",
|
||||
"modal.oauth.authorization.waitingAuth": "Warten auf die Autorisierung...",
|
||||
"modal.oauth.authorization.waitingJump": "Autorisierte, warten auf den Sprung",
|
||||
"modal.oauth.configuration.description": "Richten Sie Ihre Abonnementparameter nach der Autorisierung ein",
|
||||
"modal.oauth.configuration.failed": "OAuth-Konfiguration fehlgeschlagen",
|
||||
"modal.oauth.configuration.success": "OAuth-Konfiguration erfolgreich",
|
||||
"modal.oauth.configuration.title": "Abonnement konfigurieren",
|
||||
"modal.oauth.remove.failed": "OAuth-Entfernung fehlgeschlagen",
|
||||
"modal.oauth.remove.success": "OAuth erfolgreich entfernt",
|
||||
"modal.oauth.save.success": "OAuth-Konfiguration erfolgreich gespeichert",
|
||||
@ -63,29 +36,22 @@
|
||||
"modal.steps.configuration": "Konfiguration",
|
||||
"modal.steps.verify": "Überprüfen",
|
||||
"node.status.warning": "Trennen",
|
||||
"subscription.addType.description": "Wählen Sie aus, wie Sie Ihr Trigger-Abonnement erstellen möchten",
|
||||
"subscription.addType.options.apikey.description": "Abonnement automatisch mit API-Zugangsdaten erstellen",
|
||||
"subscription.addType.options.apikey.title": "Mit API-Schlüssel erstellen",
|
||||
"subscription.addType.options.manual.description": "URL einfügen, um ein neues Abonnement zu erstellen",
|
||||
"subscription.addType.options.manual.tip": "URL auf einer Drittanbieterplattform manuell konfigurieren",
|
||||
"subscription.addType.options.manual.title": "Manuelle Einrichtung",
|
||||
"subscription.addType.options.oauth.clientSettings": "OAuth-Client-Einstellungen",
|
||||
"subscription.addType.options.oauth.clientTitle": "OAuth-Client",
|
||||
"subscription.addType.options.oauth.custom": "Benutzerdefiniert",
|
||||
"subscription.addType.options.oauth.default": "Standard",
|
||||
"subscription.addType.options.oauth.description": "Bei einer Drittanbieterplattform autorisieren, um ein Abonnement zu erstellen",
|
||||
"subscription.addType.options.oauth.title": "Erstellen Sie mit OAuth",
|
||||
"subscription.addType.title": "Abonnement hinzufügen",
|
||||
"subscription.createButton.apiKey": "Neues Abonnement mit API-Schlüssel",
|
||||
"subscription.createButton.manual": "URL einfügen, um ein neues Abonnement zu erstellen",
|
||||
"subscription.createButton.oauth": "Neue Anmeldung mit OAuth",
|
||||
"subscription.createFailed": "Fehler beim Erstellen des Abonnements",
|
||||
"subscription.createSuccess": "Abonnement erfolgreich erstellt",
|
||||
"subscription.empty.button": "Neues Abonnement",
|
||||
"subscription.empty.title": "Keine Abonnements",
|
||||
"subscription.list.addButton": "Hinzufügen",
|
||||
"subscription.list.item.actions.delete": "Löschen",
|
||||
"subscription.list.item.actions.deleteConfirm.cancel": "Abbrechen",
|
||||
"subscription.list.item.actions.deleteConfirm.confirm": "Löschen bestätigen",
|
||||
"subscription.list.item.actions.deleteConfirm.confirmInputPlaceholder": "Geben Sie \"{{name}}\" ein, um zu bestätigen.",
|
||||
"subscription.list.item.actions.deleteConfirm.confirmInputTip": "Bitte geben Sie „{{name}}“ zur Bestätigung ein.",
|
||||
@ -98,21 +64,12 @@
|
||||
"subscription.list.item.actions.edit.error": "Aktualisierung des Abonnements fehlgeschlagen",
|
||||
"subscription.list.item.actions.edit.success": "Abonnement erfolgreich aktualisiert",
|
||||
"subscription.list.item.actions.edit.title": "Abonnement bearbeiten",
|
||||
"subscription.list.item.credentialType.api_key": "API-Schlüssel",
|
||||
"subscription.list.item.credentialType.oauth2": "OAuth",
|
||||
"subscription.list.item.credentialType.unauthorized": "Handbuch",
|
||||
"subscription.list.item.disabled": "Deaktiviert",
|
||||
"subscription.list.item.enabled": "Aktiviert",
|
||||
"subscription.list.item.noUsed": "Kein Workflow verwendet",
|
||||
"subscription.list.item.status.active": "Aktiv",
|
||||
"subscription.list.item.status.inactive": "Inaktiv",
|
||||
"subscription.list.item.usedByNum": "Verwendet von {{num}} Workflows",
|
||||
"subscription.list.tip": "Ereignisse über ein Abonnement empfangen",
|
||||
"subscription.list.title": "Abonnements",
|
||||
"subscription.listNum": "{{num}} Abonnements",
|
||||
"subscription.maxCount": "Max {{num}} Abonnements",
|
||||
"subscription.noSubscriptionSelected": "Kein Abonnement ausgewählt",
|
||||
"subscription.selectPlaceholder": "Abonnement auswählen",
|
||||
"subscription.subscriptionRemoved": "Abonnement entfernt",
|
||||
"subscription.title": "Abonnements"
|
||||
"subscription.subscriptionRemoved": "Abonnement entfernt"
|
||||
}
|
||||
|
||||
@ -1,5 +1,4 @@
|
||||
{
|
||||
"actionLogs": "Aktionsprotokolle",
|
||||
"circularInvocationTip": "Es gibt einen zirkulären Aufruf von Werkzeugen/Knoten im aktuellen Workflow.",
|
||||
"detail": "DETAILS",
|
||||
"input": "EINGABE",
|
||||
@ -10,7 +9,6 @@
|
||||
"meta.time": "Verstrichene Zeit",
|
||||
"meta.title": "METADATEN",
|
||||
"meta.tokens": "Gesamtzeichen",
|
||||
"meta.version": "Version",
|
||||
"result": "ERGEBNIS",
|
||||
"resultEmpty.link": "Gruppe Detail",
|
||||
"resultEmpty.tipLeft": "Bitte gehen Sie zum ",
|
||||
|
||||
@ -2,8 +2,6 @@
|
||||
"chat.chatFormTip": "Chat-Einstellungen können nach Beginn des Chats nicht mehr geändert werden.",
|
||||
"chat.chatSettingsTitle": "Neues Chat-Setup",
|
||||
"chat.collapse": "Reduzieren",
|
||||
"chat.configDisabled": "Voreinstellungen der vorherigen Sitzung wurden für diese Sitzung verwendet.",
|
||||
"chat.configStatusDes": "Vor dem Start können Sie die Konversationseinstellungen ändern",
|
||||
"chat.deleteConversation.content": "Sind Sie sicher, dass Sie diese Konversation löschen möchten?",
|
||||
"chat.deleteConversation.title": "Konversation löschen",
|
||||
"chat.expand": "Erweitern",
|
||||
@ -12,27 +10,18 @@
|
||||
"chat.newChatTip": "Bereits in einem neuen Chat",
|
||||
"chat.pinnedTitle": "Angeheftet",
|
||||
"chat.poweredBy": "Bereitgestellt von",
|
||||
"chat.privacyPolicyLeft": "Bitte lesen Sie die ",
|
||||
"chat.privacyPolicyMiddle": "Datenschutzrichtlinien",
|
||||
"chat.privacyPolicyRight": ", die vom App-Entwickler bereitgestellt wurden.",
|
||||
"chat.privatePromptConfigTitle": "Konversationseinstellungen",
|
||||
"chat.prompt": "Aufforderung",
|
||||
"chat.publicPromptConfigTitle": "Anfängliche Aufforderung",
|
||||
"chat.resetChat": "Gespräch zurücksetzen",
|
||||
"chat.startChat": "Chat starten",
|
||||
"chat.temporarySystemIssue": "Entschuldigung, vorübergehendes Systemproblem.",
|
||||
"chat.tryToSolve": "Versuchen zu lösen",
|
||||
"chat.unpinnedTitle": "Chats",
|
||||
"chat.viewChatSettings": "Chateinstellungen anzeigen",
|
||||
"common.appUnavailable": "App ist nicht verfügbar",
|
||||
"common.appUnknownError": "App ist nicht verfügbar",
|
||||
"common.welcome": "",
|
||||
"generation.batchFailed.info": "{{num}} fehlgeschlagene Ausführungen",
|
||||
"generation.batchFailed.outputPlaceholder": "Kein Ausgabeanhalt",
|
||||
"generation.batchFailed.retry": "Wiederholen",
|
||||
"generation.browse": "durchsuchen",
|
||||
"generation.completionResult": "Vervollständigungsergebnis",
|
||||
"generation.copy": "Kopieren",
|
||||
"generation.csvStructureTitle": "Die CSV-Datei muss der folgenden Struktur entsprechen:",
|
||||
"generation.csvUploadTitle": "Ziehen Sie Ihre CSV-Datei hierher oder ",
|
||||
"generation.downloadTemplate": "Laden Sie die Vorlage hier herunter",
|
||||
@ -46,9 +35,6 @@
|
||||
"generation.executions": "{{num}} Ausführungen",
|
||||
"generation.field": "Feld",
|
||||
"generation.noData": "KI wird Ihnen hier geben, was Sie möchten.",
|
||||
"generation.queryPlaceholder": "Schreiben Sie Ihren Abfrageinhalt...",
|
||||
"generation.queryTitle": "Abfrageinhalt",
|
||||
"generation.resultTitle": "KI-Vervollständigung",
|
||||
"generation.run": "Ausführen",
|
||||
"generation.savedNoData.description": "Beginnen Sie mit der Inhaltserstellung und finden Sie hier Ihre gespeicherten Ergebnisse.",
|
||||
"generation.savedNoData.startCreateContent": "Beginnen Sie mit der Inhaltserstellung",
|
||||
|
||||
@ -1,12 +1,10 @@
|
||||
{
|
||||
"cancel": "Abbrechen",
|
||||
"continueEditing": "Bearbeiten Sie weiter",
|
||||
"create": "SNIPPET ERSTELLEN",
|
||||
"createFailed": "Snippet konnte nicht erstellt werden",
|
||||
"createFrom": "ERSTELLEN AUS",
|
||||
"createFromBlank": "Aus Rohling erstellen",
|
||||
"currentDSLVersion": "Systemunterstützte DSL-Version: ",
|
||||
"defaultName": "Unbenannter Ausschnitt",
|
||||
"deleteConfirmContent": "Dies kann nicht rückgängig gemacht werden. Workflows, die dieses Snippet verwenden, sind nicht betroffen.",
|
||||
"deleteConfirmTitle": "Snippet löschen?",
|
||||
"deleteFailed": "Snippet konnte nicht gelöscht werden",
|
||||
@ -16,7 +14,6 @@
|
||||
"discardChangesTitle": "Entwurfsänderungen verwerfen?",
|
||||
"discardDraft": "Entwurf verwerfen",
|
||||
"doNotSave": "Als Entwurf belassen",
|
||||
"draft": "Entwurf",
|
||||
"dslVersionMismatchDescription": "Es wurde ein erheblicher Unterschied zwischen den DSL-Versionen festgestellt. Das Erzwingen des Imports kann zu Fehlfunktionen des Snippets führen.",
|
||||
"dslVersionMismatchQuestion": "Möchten Sie fortfahren?",
|
||||
"dslVersionMismatchTitle": "Versionsinkompatibilität",
|
||||
@ -30,40 +27,25 @@
|
||||
"exportFailed": "Der Export des Snippets ist fehlgeschlagen.",
|
||||
"importDSLFile": "DSL-Datei importieren",
|
||||
"importDialogTitle": "Snippet importieren",
|
||||
"importFailed": "Snippet-DSL konnte nicht importiert werden",
|
||||
"importFromDSLFile": "Aus DSL-Datei",
|
||||
"importFromDSLUrl": "Von URL",
|
||||
"importFromDSLUrlPlaceholder": "DSL-Link hier einfügen",
|
||||
"importSuccess": "Snippet importiert",
|
||||
"importedDSLVersion": "Aktuelle Snippet-DSL-Version: ",
|
||||
"inputFieldButton": "Eingabefeld",
|
||||
"inputVariables": "Eingabevariablen",
|
||||
"management": "SNIPPET-VERWALTUNG",
|
||||
"menu.deleteSnippet": "Löschen",
|
||||
"menu.editInfo": "Informationen bearbeiten",
|
||||
"menu.exportSnippet": "Snippet exportieren",
|
||||
"notFoundDescription": "Der angeforderte Snippet-Mock wurde nicht gefunden.",
|
||||
"notFoundTitle": "Snippet nicht gefunden",
|
||||
"panelDescription": "Definiert die Eingabefelder, die es dem Snippet ermöglichen, Daten von anderen Knoten zu empfangen.",
|
||||
"panelPrimaryGroup": "Kerneingaben",
|
||||
"panelSecondaryGroup": "Optionale Eingaben",
|
||||
"panelTitle": "Eingabefeld",
|
||||
"publishButton": "Veröffentlichen",
|
||||
"publishFailed": "Snippet konnte nicht veröffentlicht werden",
|
||||
"publishMenuCurrentDraft": "Aktueller Entwurf unveröffentlicht",
|
||||
"publishSuccess": "Snippet veröffentlicht",
|
||||
"save": "Speichern",
|
||||
"saveAndExit": "Speichern und beenden",
|
||||
"saveBeforeLeavingDescription": "Speichern Sie, um diese Version für die Verwendung in Workflows verfügbar zu machen. Oder bewahren Sie Ihre Änderungen vorerst als Entwurf auf.",
|
||||
"saveBeforeLeavingTitle": "Änderungen vor dem Verlassen speichern?",
|
||||
"saveSuccess": "Snippet gespeichert",
|
||||
"sectionOrchestrate": "Orchestrieren",
|
||||
"testRunButton": "Testlauf",
|
||||
"typeLabel": "Ausschnitt",
|
||||
"unknownUser": "Benutzer",
|
||||
"unsavedChanges": "Aktuelle Änderungen werden nicht gespeichert.",
|
||||
"updatedBy": "{{name}} aktualisiert {{time}}",
|
||||
"usageCount": "{{count}} Mal verwendet",
|
||||
"variableInspect": "Variablenprüfung",
|
||||
"viewOnly": "Nur ansehen"
|
||||
}
|
||||
|
||||
@ -1,9 +1,6 @@
|
||||
{
|
||||
"dateFormats.display": "MMMM D, YYYY",
|
||||
"dateFormats.displayWithTime": "MMMM D, YYYY hh:mm A",
|
||||
"dateFormats.input": "YYYY-MM-DD",
|
||||
"dateFormats.output": "YYYY-MM-DD",
|
||||
"dateFormats.outputWithTime": "YYYY-MM-DDTHH:mm:ss.SSSZ",
|
||||
"daysInWeek.Fri": "Freitag",
|
||||
"daysInWeek.Mon": "Mon",
|
||||
"daysInWeek.Sat": "Sat",
|
||||
|
||||
@ -7,12 +7,10 @@
|
||||
"addToolModal.all.title": "Keine Werkzeuge verfügbar",
|
||||
"addToolModal.built-in.tip": "",
|
||||
"addToolModal.built-in.title": "Kein integriertes Tool verfügbar",
|
||||
"addToolModal.category": "Kategorie",
|
||||
"addToolModal.custom.tip": "Benutzerdefiniertes Werkzeug erstellen",
|
||||
"addToolModal.custom.title": "Kein benutzerdefiniertes Werkzeug verfügbar",
|
||||
"addToolModal.mcp.tip": "Einen MCP-Server hinzufügen",
|
||||
"addToolModal.mcp.title": "Kein MCP-Werkzeug verfügbar",
|
||||
"addToolModal.type": "Art",
|
||||
"addToolModal.workflow.tip": "Veröffentlichen Sie Workflows als Werkzeuge im Studio",
|
||||
"addToolModal.workflow.title": "Kein Workflow-Werkzeug verfügbar",
|
||||
"allMCP": "Alle MCP",
|
||||
@ -27,11 +25,7 @@
|
||||
"auth.unauthorized": "Unbefugt",
|
||||
"author": "Von",
|
||||
"builtInPromptTitle": "Aufforderung",
|
||||
"contribute.line1": "Ich interessiere mich dafür, ",
|
||||
"contribute.line2": "Werkzeuge zu Dify beizutragen.",
|
||||
"contribute.viewGuide": "Leitfaden anzeigen",
|
||||
"copyToolName": "Name kopieren",
|
||||
"createCustomTool": "Eigenes Werkzeug erstellen",
|
||||
"createSwaggerAPIAsTool": "Create a Swagger API as Tool",
|
||||
"createTool.authHeaderPrefix.title": "Auth-Typ",
|
||||
"createTool.authHeaderPrefix.types.basic": "Basic",
|
||||
@ -97,13 +91,11 @@
|
||||
"createTool.toolInput.title": "Werkzeug-Eingabe",
|
||||
"createTool.toolNamePlaceHolder": "Geben Sie den Werkzeugnamen ein",
|
||||
"createTool.toolOutput.description": "Beschreibung",
|
||||
"createTool.toolOutput.name": "Name",
|
||||
"createTool.toolOutput.reserved": "Reserviert",
|
||||
"createTool.toolOutput.reservedParameterDuplicateTip": "Text, JSON und Dateien sind reservierte Variablen. Variablen mit diesen Namen dürfen im Ausgabeschema nicht erscheinen.",
|
||||
"createTool.toolOutput.title": "Werkzeugausgabe",
|
||||
"createTool.urlError": "Bitte geben Sie eine gültige URL ein",
|
||||
"createTool.viewSchemaSpec": "Die OpenAPI-Swagger-Spezifikation anzeigen",
|
||||
"customToolTip": "Erfahren Sie mehr über benutzerdefinierte Dify-Tools",
|
||||
"howToGet": "Wie erhält man",
|
||||
"includeToolNum": "{{num}} {{action}} inkludiert",
|
||||
"mcp.authorize": "Autorisieren",
|
||||
@ -183,25 +175,16 @@
|
||||
"mcp.update": "Aktualisieren",
|
||||
"mcp.updateTime": "Aktualisiert",
|
||||
"mcp.updateTools": "Tools werden aktualisiert...",
|
||||
"mcp.updating": "Wird aktualisiert",
|
||||
"noCustomTool.content": "Fügen Sie hier Ihre benutzerdefinierten Werkzeuge hinzu und verwalten Sie sie, um KI-Apps zu erstellen.",
|
||||
"noCustomTool.createTool": "Werkzeug erstellen",
|
||||
"noCustomTool.title": "Keine benutzerdefinierten Werkzeuge!",
|
||||
"noSearchRes.content": "Wir konnten keine Werkzeuge finden, die Ihrer Suche entsprechen.",
|
||||
"noSearchRes.reset": "Suche zurücksetzen",
|
||||
"noSearchRes.title": "Leider keine Ergebnisse!",
|
||||
"noTools": "Keine Werkzeuge gefunden",
|
||||
"notAuthorized": "Werkzeug nicht autorisiert",
|
||||
"openInStudio": "In Studio öffnen",
|
||||
"setBuiltInTools.file": "Datei",
|
||||
"setBuiltInTools.info": "Info",
|
||||
"setBuiltInTools.infoAndSetting": "Info & Einstellungen",
|
||||
"setBuiltInTools.number": "Nummer",
|
||||
"setBuiltInTools.parameters": "Parameter",
|
||||
"setBuiltInTools.required": "Erforderlich",
|
||||
"setBuiltInTools.setting": "Einstellung",
|
||||
"setBuiltInTools.string": "Zeichenkette",
|
||||
"setBuiltInTools.toolDescription": "Werkzeugbeschreibung",
|
||||
"swaggerAPIAsToolTip": "Learn more about Swagger API as Tool",
|
||||
"test.parameters": "Parameter",
|
||||
"test.parametersValue": "Parameter & Wert",
|
||||
@ -213,7 +196,6 @@
|
||||
"thought.responseTitle": "Antwort von",
|
||||
"thought.used": "Genutzt",
|
||||
"thought.using": "Nutzung",
|
||||
"title": "Werkzeuge",
|
||||
"toolNameUsageTip": "Name des Tool-Aufrufs für die Argumentation und Aufforderung des Agenten",
|
||||
"toolRemoved": "Werkzeug entfernt",
|
||||
"type.builtIn": "Integriert",
|
||||
|
||||
@ -1,29 +1,14 @@
|
||||
{
|
||||
"agentDetail.access.actionUnavailable": "This action is not available yet.",
|
||||
"agentDetail.access.actions.monitoring": "Monitoring",
|
||||
"agentDetail.access.copyAccessUrl": "Copy access URL",
|
||||
"agentDetail.access.copyFailed": "Failed to copy reference.",
|
||||
"agentDetail.access.copyReference": "Copy reference for {{name}}",
|
||||
"agentDetail.access.copyServiceEndpoint": "Copy service API endpoint",
|
||||
"agentDetail.access.description": "Every surface this agent is reachable from.",
|
||||
"agentDetail.access.empty": "No linked access points",
|
||||
"agentDetail.access.emptyDescription": "This roster agent has no app or workflow references yet.",
|
||||
"agentDetail.access.entries.agentApp.description": "Agent app linked to this roster agent.",
|
||||
"agentDetail.access.entries.agentApp.name": "Agent app",
|
||||
"agentDetail.access.entries.workflow.description": "Workflow and node reference linked to this roster agent.",
|
||||
"agentDetail.access.entries.workflow.name": "Workflow node",
|
||||
"agentDetail.access.entryCount_one": "{{count}} entry",
|
||||
"agentDetail.access.entryCount_other": "{{count}} entries",
|
||||
"agentDetail.access.groups.references.heading": "References",
|
||||
"agentDetail.access.groups.references.label": "Linked references",
|
||||
"agentDetail.access.learnMore": "Learn more",
|
||||
"agentDetail.access.moreActions": "More actions for {{name}}",
|
||||
"agentDetail.access.serviceApi.actions.apiKey": "API Key",
|
||||
"agentDetail.access.serviceApi.actions.apiReference": "API Reference",
|
||||
"agentDetail.access.serviceApi.endpoint": "Service API Endpoint",
|
||||
"agentDetail.access.serviceApi.title": "Backend service API",
|
||||
"agentDetail.access.status.disabled": "Disabled",
|
||||
"agentDetail.access.status.enabled": "Enabled",
|
||||
"agentDetail.access.status.inService": "In service",
|
||||
"agentDetail.access.status.outOfService": "Out of service",
|
||||
"agentDetail.access.title": "Access Point",
|
||||
@ -69,11 +54,9 @@
|
||||
"agentDetail.configure.advancedSettings.envEditor.scopeSecret": "Secret",
|
||||
"agentDetail.configure.advancedSettings.envEditor.scopeSelector": "Select environment variable scope",
|
||||
"agentDetail.configure.advancedSettings.envEditor.tip": "Environment variables available to this agent at runtime.",
|
||||
"agentDetail.configure.advancedSettings.envEditor.toggle": "Toggle env editor",
|
||||
"agentDetail.configure.advancedSettings.envEditor.valueColumn": "Value",
|
||||
"agentDetail.configure.advancedSettings.envEditor.valuePlaceholder": "Value",
|
||||
"agentDetail.configure.advancedSettings.label": "Advanced Settings",
|
||||
"agentDetail.configure.advancedSettings.toggle": "Toggle advanced settings",
|
||||
"agentDetail.configure.chatFeatures.description": "Shape the end-user chat experience on your web app and chat surfaces.",
|
||||
"agentDetail.configure.chatFeatures.title": "Chat Features",
|
||||
"agentDetail.configure.files.add": "Add file",
|
||||
@ -85,7 +68,6 @@
|
||||
"agentDetail.configure.files.preview.unsupported": "Preview is not supported for this file.",
|
||||
"agentDetail.configure.files.remove": "Remove {{name}}",
|
||||
"agentDetail.configure.files.tip": "Files this agent can use while orchestrating tasks.",
|
||||
"agentDetail.configure.files.toggle": "Toggle files",
|
||||
"agentDetail.configure.files.treeLabel": "Agent files",
|
||||
"agentDetail.configure.files.upload.action": "Upload",
|
||||
"agentDetail.configure.files.upload.browse": "browse",
|
||||
@ -133,7 +115,6 @@
|
||||
"agentDetail.configure.preview.empty.defaultAgentName": "Agent",
|
||||
"agentDetail.configure.preview.empty.description": "Send a message to test the current draft.",
|
||||
"agentDetail.configure.preview.empty.noInstructionsDescription": "No instructions yet, so replies come from the plain model.",
|
||||
"agentDetail.configure.preview.endUserAuth": "End-user authentication",
|
||||
"agentDetail.configure.preview.restart": "Restart preview",
|
||||
"agentDetail.configure.preview.title": "Preview",
|
||||
"agentDetail.configure.prompt.copied": "Prompt copied",
|
||||
@ -145,7 +126,6 @@
|
||||
"agentDetail.configure.prompt.insert.tenders": "Start tenders",
|
||||
"agentDetail.configure.prompt.label": "Prompt",
|
||||
"agentDetail.configure.prompt.mention.davidHayes": "David Hayes",
|
||||
"agentDetail.configure.prompt.mention.label": "Mention",
|
||||
"agentDetail.configure.prompt.mention.priyaRamanathan": "Priya Ramanathan",
|
||||
"agentDetail.configure.prompt.placeholder": "Write instructions here,",
|
||||
"agentDetail.configure.prompt.tip": "Define how this agent should interpret inputs, call tools, and produce outputs.",
|
||||
@ -170,7 +150,6 @@
|
||||
"agentDetail.configure.skills.add": "Add skill",
|
||||
"agentDetail.configure.skills.detail.contentRegion": "Skill detail content",
|
||||
"agentDetail.configure.skills.detail.fileCount": "{{count}} FILES",
|
||||
"agentDetail.configure.skills.detail.fileTreeLabel": "Skill files",
|
||||
"agentDetail.configure.skills.detail.files": "Files",
|
||||
"agentDetail.configure.skills.empty.description": "Skills give the agent reusable expertise it can call while working",
|
||||
"agentDetail.configure.skills.empty.title": "No skills yet",
|
||||
@ -178,7 +157,6 @@
|
||||
"agentDetail.configure.skills.label": "Skills",
|
||||
"agentDetail.configure.skills.remove": "Remove {{name}}",
|
||||
"agentDetail.configure.skills.tip": "Skills this agent can use while orchestrating tasks.",
|
||||
"agentDetail.configure.skills.toggle": "Toggle skills",
|
||||
"agentDetail.configure.skills.upload.action": "Upload",
|
||||
"agentDetail.configure.skills.upload.browse": "browse",
|
||||
"agentDetail.configure.skills.upload.description": "Upload a .zip or .skill package for this agent.",
|
||||
@ -211,18 +189,14 @@
|
||||
"agentDetail.configure.tools.cliDialog.title": "Add a CLI Tool",
|
||||
"agentDetail.configure.tools.cliTool": "CLI Tool",
|
||||
"agentDetail.configure.tools.credential.authOne": "Auth 1",
|
||||
"agentDetail.configure.tools.credential.endUserOAuth": "End-user · OAuth",
|
||||
"agentDetail.configure.tools.editAction": "Edit {{name}}",
|
||||
"agentDetail.configure.tools.empty.description": "Tools let the agent act, like searching the web or calling your apps",
|
||||
"agentDetail.configure.tools.empty.title": "No tools yet",
|
||||
"agentDetail.configure.tools.label": "Tools",
|
||||
"agentDetail.configure.tools.moreActions": "More actions for {{name}}",
|
||||
"agentDetail.configure.tools.pluginType": "Plugin",
|
||||
"agentDetail.configure.tools.preAuthorize": "Pre-authorize",
|
||||
"agentDetail.configure.tools.removeAction": "Remove {{name}}",
|
||||
"agentDetail.configure.tools.removeProvider": "Remove all tools",
|
||||
"agentDetail.configure.tools.tip": "Tools this agent can call while orchestrating tasks.",
|
||||
"agentDetail.configure.tools.toggle": "Toggle tools",
|
||||
"agentDetail.configure.tools.toolTabs.all": "All",
|
||||
"agentDetail.configure.tools.toolTabs.cli": "CLI",
|
||||
"agentDetail.configure.tools.toolTabs.custom": "Custom",
|
||||
@ -230,11 +204,9 @@
|
||||
"agentDetail.configure.tools.toolTabs.plugins": "Plugins",
|
||||
"agentDetail.configure.tools.toolTabs.workflow": "Workflow",
|
||||
"agentDetail.documentTitle": "Agent",
|
||||
"agentDetail.history": "History",
|
||||
"agentDetail.logs.description": "Full logs record the running status of the application, including user inputs, agent replies, planning and tool uses.",
|
||||
"agentDetail.logs.empty": "No logs found",
|
||||
"agentDetail.logs.filters.period.allTime": "All time",
|
||||
"agentDetail.logs.filters.period.label": "Log period",
|
||||
"agentDetail.logs.filters.period.last30days": "Last 30 days",
|
||||
"agentDetail.logs.filters.period.last7days": "Last 7 days",
|
||||
"agentDetail.logs.filters.search.label": "Search logs",
|
||||
@ -252,7 +224,6 @@
|
||||
"agentDetail.logs.filters.source.workflow": "Workflow",
|
||||
"agentDetail.logs.learnMore": "Learn more",
|
||||
"agentDetail.logs.loadFailed": "Failed to load logs",
|
||||
"agentDetail.logs.loading": "Loading logs…",
|
||||
"agentDetail.logs.notAvailable": "N/A",
|
||||
"agentDetail.logs.table.createdTime": "Created Time",
|
||||
"agentDetail.logs.table.endUser": "End-user",
|
||||
@ -273,19 +244,7 @@
|
||||
"agentDetail.memorySettings.notConfigured": "Not configured",
|
||||
"agentDetail.memorySettings.scopeLabel": "Memory Scope",
|
||||
"agentDetail.memorySettings.title": "Memory",
|
||||
"agentDetail.metadata.activeVersionLabel": "Active Version",
|
||||
"agentDetail.metadata.appIdLabel": "App ID",
|
||||
"agentDetail.metadata.description": "Read-only roster fields returned by the agent backend.",
|
||||
"agentDetail.metadata.emptyValue": "Not available",
|
||||
"agentDetail.metadata.scopeLabel": "Scope",
|
||||
"agentDetail.metadata.scopes.roster": "Roster",
|
||||
"agentDetail.metadata.scopes.workflow_only": "Workflow only",
|
||||
"agentDetail.metadata.sourceLabel": "Source",
|
||||
"agentDetail.metadata.statusLabel": "Status",
|
||||
"agentDetail.metadata.title": "Metadata",
|
||||
"agentDetail.metadata.updatedAtLabel": "Updated At",
|
||||
"agentDetail.metadata.workflowIdLabel": "Workflow ID",
|
||||
"agentDetail.metadata.workflowNodeIdLabel": "Workflow Node ID",
|
||||
"agentDetail.monitoring.change": "{{value}} from previous period",
|
||||
"agentDetail.monitoring.dateRangeLabel": "Date range",
|
||||
"agentDetail.monitoring.description": "Track the reusable agent activity, cost, and interaction quality across workflows.",
|
||||
@ -319,15 +278,12 @@
|
||||
"agentDetail.monitoring.units.tokenPerSecond": "Token/s",
|
||||
"agentDetail.navigationLabel": "Agent navigation",
|
||||
"agentDetail.publish": "Publish",
|
||||
"agentDetail.publishSoon": "Soon",
|
||||
"agentDetail.sections.access": "Access Point",
|
||||
"agentDetail.sections.configure": "Orchestrate",
|
||||
"agentDetail.sections.logs": "Logs",
|
||||
"agentDetail.sections.monitoring": "Monitoring",
|
||||
"agentDetail.subtitle": "Agent ID: {{agentId}}",
|
||||
"agentDetail.title": "Agent",
|
||||
"agentDetail.type": "AGENT",
|
||||
"agentDetail.versionHistory.active": "Active",
|
||||
"agentDetail.versionHistory.empty": "No versions yet",
|
||||
"agentDetail.versionHistory.exitVersions": "Exit versions",
|
||||
"agentDetail.versionHistory.filter": "Filter versions",
|
||||
@ -335,7 +291,6 @@
|
||||
"agentDetail.versionHistory.versionName": "Version {{version}}",
|
||||
"agentDetail.versionHistory.viewOnly": "View Only",
|
||||
"roster.createAgent": "Create agent",
|
||||
"roster.createAgentOptions": "Create agent options",
|
||||
"roster.createDialog.description": "Create a reusable agent in this workspace roster.",
|
||||
"roster.createDialog.title": "Create agent",
|
||||
"roster.createForm.changeIcon": "Change agent icon",
|
||||
@ -362,9 +317,7 @@
|
||||
"roster.editDialog.title": "Edit agent",
|
||||
"roster.editInfo": "Edit Info",
|
||||
"roster.empty": "No agent yet",
|
||||
"roster.emptyDescription": "Agents saved to this workspace will appear here.",
|
||||
"roster.emptySearch": "No matching agents",
|
||||
"roster.emptySearchDescription": "Try another agent name.",
|
||||
"roster.filters.all": "All",
|
||||
"roster.filters.drafts": "Drafts",
|
||||
"roster.filters.label": "Agent filters",
|
||||
@ -383,12 +336,6 @@
|
||||
"roster.references.trigger": "Workflows using {{name}}",
|
||||
"roster.searchLabel": "Search agents",
|
||||
"roster.searchPlaceholder": "Search agents by name…",
|
||||
"roster.sources.agent_app": "Agent app",
|
||||
"roster.sources.imported": "Imported",
|
||||
"roster.sources.system": "System",
|
||||
"roster.sources.workflow": "Workflow",
|
||||
"roster.status.active": "Active",
|
||||
"roster.status.archived": "Archived",
|
||||
"roster.tabs.agent": "Agent",
|
||||
"roster.tabs.human": "Human",
|
||||
"roster.tabsLabel": "Roster type",
|
||||
|
||||
@ -5,24 +5,16 @@
|
||||
"addModal.queryName": "Question",
|
||||
"addModal.queryPlaceholder": "Type query here",
|
||||
"addModal.title": "Add Annotation Reply",
|
||||
"batchAction.cancel": "Cancel",
|
||||
"batchAction.delete": "Delete",
|
||||
"batchAction.selected": "Selected",
|
||||
"batchModal.answer": "answer",
|
||||
"batchModal.browse": "browse",
|
||||
"batchModal.cancel": "Cancel",
|
||||
"batchModal.completed": "Import completed",
|
||||
"batchModal.content": "content",
|
||||
"batchModal.contentTitle": "chunk content",
|
||||
"batchModal.csvUploadTitle": "Drag and drop your CSV file here, or ",
|
||||
"batchModal.error": "Import Error",
|
||||
"batchModal.ok": "OK",
|
||||
"batchModal.processing": "In batch processing",
|
||||
"batchModal.question": "question",
|
||||
"batchModal.run": "Run Batch",
|
||||
"batchModal.runError": "Run batch failed",
|
||||
"batchModal.template": "Download the template here",
|
||||
"batchModal.tip": "The CSV file must conform to the following structure:",
|
||||
"batchModal.title": "Bulk Import",
|
||||
"editBy": "Answer edited by {{author}}",
|
||||
"editModal.answerName": "Storyteller Bot",
|
||||
|
||||
@ -11,62 +11,14 @@
|
||||
"apiKeyModal.lastUsed": "LAST USED",
|
||||
"apiKeyModal.secretKey": "Secret Key",
|
||||
"apiServer": "API Server",
|
||||
"chatMode.blocking": "Blocking type, waiting for execution to complete and returning results. (Requests may be interrupted if the process is long)",
|
||||
"chatMode.chatMsgHistoryApi": "Get the chat history message",
|
||||
"chatMode.chatMsgHistoryApiTip": "The first page returns the latest `limit` bar, which is in reverse order.",
|
||||
"chatMode.chatMsgHistoryConversationIdTip": "Conversation ID",
|
||||
"chatMode.chatMsgHistoryFirstId": "ID of the first chat record on the current page. The default is none.",
|
||||
"chatMode.chatMsgHistoryLimit": "How many chats are returned in one request",
|
||||
"chatMode.conversationIdTip": "(Optional) Conversation ID: leave empty for first-time conversation; pass conversation_id from context to continue dialogue.",
|
||||
"chatMode.conversationRenamingApi": "Conversation renaming",
|
||||
"chatMode.conversationRenamingApiTip": "Rename conversations; the name is displayed in multi-session client interfaces.",
|
||||
"chatMode.conversationRenamingNameTip": "New name",
|
||||
"chatMode.conversationsListApi": "Get conversation list",
|
||||
"chatMode.conversationsListApiTip": "Gets the session list of the current user. By default, the last 20 sessions are returned.",
|
||||
"chatMode.conversationsListFirstIdTip": "The ID of the last record on the current page, default none.",
|
||||
"chatMode.conversationsListLimitTip": "How many chats are returned in one request",
|
||||
"chatMode.createChatApi": "Create chat message",
|
||||
"chatMode.createChatApiTip": "Create a new conversation message or continue an existing dialogue.",
|
||||
"chatMode.info": "For versatile conversational apps using a Q&A format, call the chat-messages API to initiate dialogue. Maintain ongoing conversations by passing the returned conversation_id. Response parameters and templates depend on Dify Prompt Eng. settings.",
|
||||
"chatMode.inputsTips": "(Optional) Provide user input fields as key-value pairs, corresponding to variables in Prompt Eng. Key is the variable name, Value is the parameter value. If the field type is Select, the submitted Value must be one of the preset choices.",
|
||||
"chatMode.messageFeedbackApi": "Message terminal user feedback, like",
|
||||
"chatMode.messageFeedbackApiTip": "Rate received messages on behalf of end-users with likes or dislikes. This data is visible in the Logs & Annotations page and used for future model fine-tuning.",
|
||||
"chatMode.messageIDTip": "Message ID",
|
||||
"chatMode.parametersApi": "Obtain application parameter information",
|
||||
"chatMode.parametersApiTip": "Retrieve configured Input parameters, including variable names, field names, types, and default values. Typically used for displaying these fields in a form or filling in default values after the client loads.",
|
||||
"chatMode.queryTips": "User input/question content",
|
||||
"chatMode.ratingTip": "like or dislike, null is undo",
|
||||
"chatMode.streaming": "streaming returns. Implementation of streaming return based on SSE (Server-Sent Events).",
|
||||
"chatMode.title": "Chat App API",
|
||||
"completionMode.blocking": "Blocking type, waiting for execution to complete and returning results. (Requests may be interrupted if the process is long)",
|
||||
"completionMode.createCompletionApi": "Create Completion Message",
|
||||
"completionMode.createCompletionApiTip": "Create a Completion Message to support the question-and-answer mode.",
|
||||
"completionMode.info": "For high-quality text generation, such as articles, summaries, and translations, use the completion-messages API with user input. Text generation relies on the model parameters and prompt templates set in Dify Prompt Engineering.",
|
||||
"completionMode.inputsTips": "(Optional) Provide user input fields as key-value pairs, corresponding to variables in Prompt Eng. Key is the variable name, Value is the parameter value. If the field type is Select, the submitted Value must be one of the preset choices.",
|
||||
"completionMode.messageFeedbackApi": "Message feedback (like)",
|
||||
"completionMode.messageFeedbackApiTip": "Rate received messages on behalf of end-users with likes or dislikes. This data is visible in the Logs & Annotations page and used for future model fine-tuning.",
|
||||
"completionMode.messageIDTip": "Message ID",
|
||||
"completionMode.parametersApi": "Obtain application parameter information",
|
||||
"completionMode.parametersApiTip": "Retrieve configured Input parameters, including variable names, field names, types, and default values. Typically used for displaying these fields in a form or filling in default values after the client loads.",
|
||||
"completionMode.queryTips": "User input text content.",
|
||||
"completionMode.ratingTip": "like or dislike, null is undo",
|
||||
"completionMode.streaming": "streaming returns. Implementation of streaming return based on SSE (Server-Sent Events).",
|
||||
"completionMode.title": "Completion App API",
|
||||
"copied": "Copied",
|
||||
"copy": "Copy",
|
||||
"develop.noContent": "No content",
|
||||
"develop.pathParams": "Path Params",
|
||||
"develop.query": "Query",
|
||||
"develop.requestBody": "Request Body",
|
||||
"develop.toc": "Contents",
|
||||
"disabled": "Disabled",
|
||||
"loading": "Loading",
|
||||
"merMaid.rerender": "Redo Rerender",
|
||||
"never": "Never",
|
||||
"ok": "In Service",
|
||||
"pause": "Pause",
|
||||
"play": "Play",
|
||||
"playing": "Playing",
|
||||
"regenerate": "Regenerate",
|
||||
"status": "Status"
|
||||
"playing": "Playing"
|
||||
}
|
||||
|
||||
@ -1,24 +1,17 @@
|
||||
{
|
||||
"agentLog": "Agent Log",
|
||||
"agentLogDetail.agentMode": "Agent Mode",
|
||||
"agentLogDetail.finalProcessing": "Final Processing",
|
||||
"agentLogDetail.iteration": "Iteration",
|
||||
"agentLogDetail.iterations": "Iterations",
|
||||
"agentLogDetail.toolUsed": "Tool Used",
|
||||
"dateFormat": "MM/DD/YYYY",
|
||||
"dateTimeFormat": "MM/DD/YYYY hh:mm:ss A",
|
||||
"description": "The logs record the running status of the application, including user inputs and AI replies.",
|
||||
"detail.annotationTip": "Improvements Marked by {{user}}",
|
||||
"detail.conversationId": "Conversation ID",
|
||||
"detail.loading": "loading",
|
||||
"detail.modelParams": "Model parameters",
|
||||
"detail.operation.addAnnotation": "Add Improvement",
|
||||
"detail.operation.annotationPlaceholder": "Enter the expected answer that you want AI to reply, which can be used for model fine-tuning and continuous improvement of text generation quality in the future.",
|
||||
"detail.operation.dislike": "dislike",
|
||||
"detail.operation.editAnnotation": "Edit Improvement",
|
||||
"detail.operation.like": "like",
|
||||
"detail.promptTemplate": "Prompt Template",
|
||||
"detail.promptTemplateBeforeChat": "Prompt Template Before Chat · As System Message",
|
||||
"detail.second": "s",
|
||||
"detail.time": "Time",
|
||||
"detail.timeConsuming": "",
|
||||
@ -43,7 +36,6 @@
|
||||
"filter.period.yearToDate": "Year to date",
|
||||
"filter.sortBy": "Sort by:",
|
||||
"monitoring.description": "Monitoring records the running status of the application, including performance, user activity, and costs.",
|
||||
"promptLog": "Prompt Log",
|
||||
"runDetail.fileListDetail": "Detail",
|
||||
"runDetail.fileListLabel": "File Details",
|
||||
"runDetail.testWithParams": "Test With Params",
|
||||
@ -68,9 +60,6 @@
|
||||
"table.header.updatedTime": "Updated time",
|
||||
"table.header.user": "END USER OR ACCOUNT",
|
||||
"table.header.userRate": "User Rate",
|
||||
"table.header.version": "VERSION",
|
||||
"table.pagination.next": "Next",
|
||||
"table.pagination.previous": "Prev",
|
||||
"title": "Logs",
|
||||
"triggerBy.appRun": "WebApp",
|
||||
"triggerBy.debugging": "Debugging",
|
||||
@ -79,7 +68,6 @@
|
||||
"triggerBy.ragPipelineRun": "RAG Pipeline",
|
||||
"triggerBy.schedule": "Schedule",
|
||||
"triggerBy.webhook": "Webhook",
|
||||
"viewLog": "View Log",
|
||||
"workflowSubtitle": "The log recorded the operation of Automate.",
|
||||
"workflowTitle": "Workflow Logs"
|
||||
}
|
||||
|
||||
@ -32,9 +32,6 @@
|
||||
"appSelector.noParams": "No parameters needed",
|
||||
"appSelector.params": "APP PARAMETERS",
|
||||
"appSelector.placeholder": "Select an app...",
|
||||
"communityIntro": "Discuss with team members, contributors and developers on different channels.",
|
||||
"createApp": "CREATE APP",
|
||||
"createFromConfigFile": "Create from DSL file",
|
||||
"deleteAppConfirmContent": "Deleting the app is irreversible. Users will no longer be able to access your app, and all prompt configurations and logs will be permanently deleted.",
|
||||
"deleteAppConfirmInputLabel": "To confirm, type <appName>{{appName}}</appName> in the box below:",
|
||||
"deleteAppConfirmInputPlaceholder": "Enter app name…",
|
||||
@ -51,7 +48,6 @@
|
||||
"exportFailed": "Export DSL failed.",
|
||||
"filterEmpty.noApps": "No apps here",
|
||||
"firstEmpty.blankDescription": "Start with an empty canvas and build your app step by step.",
|
||||
"firstEmpty.description": "Turn an idea into a working AI app — start from blank, a template, or import an existing one.",
|
||||
"firstEmpty.importDescription": "Already have a Dify app exported as DSL? Bring it in to continue where you left off.",
|
||||
"firstEmpty.learnDifyTitle": "Learn Dify from Template",
|
||||
"firstEmpty.or": "Or",
|
||||
@ -60,34 +56,24 @@
|
||||
"gotoAnything.actions.accountDesc": "Navigate to account page",
|
||||
"gotoAnything.actions.communityDesc": "Open Discord community",
|
||||
"gotoAnything.actions.createCategoryDesc": "Create an AI-generated workflow or chatflow",
|
||||
"gotoAnything.actions.createCategoryTitle": "Create",
|
||||
"gotoAnything.actions.createChatflow": "Chatflow",
|
||||
"gotoAnything.actions.createChatflowDesc": "Generate a chatflow (advanced chat) app from a description",
|
||||
"gotoAnything.actions.createWorkflow": "Workflow",
|
||||
"gotoAnything.actions.createWorkflowDesc": "Generate a workflow app from a description",
|
||||
"gotoAnything.actions.docDesc": "Open help documentation",
|
||||
"gotoAnything.actions.feedbackDesc": "Open community feedback discussions",
|
||||
"gotoAnything.actions.languageCategoryDesc": "Switch interface language",
|
||||
"gotoAnything.actions.languageCategoryTitle": "Language",
|
||||
"gotoAnything.actions.languageChangeDesc": "Change UI language",
|
||||
"gotoAnything.actions.refineCategoryDesc": "Refine the current workflow or chatflow graph",
|
||||
"gotoAnything.actions.refineDesc": "Describe a change to apply to the current draft",
|
||||
"gotoAnything.actions.refineTitle": "Refine current graph",
|
||||
"gotoAnything.actions.runDesc": "Run quick commands (theme, language, ...)",
|
||||
"gotoAnything.actions.runTitle": "Commands",
|
||||
"gotoAnything.actions.searchApplications": "Search Applications",
|
||||
"gotoAnything.actions.searchApplicationsDesc": "Search and navigate to your applications",
|
||||
"gotoAnything.actions.searchKnowledgeBases": "Search Knowledge Bases",
|
||||
"gotoAnything.actions.searchKnowledgeBasesDesc": "Search and navigate to your knowledge bases",
|
||||
"gotoAnything.actions.searchPlugins": "Search Integrations",
|
||||
"gotoAnything.actions.searchPluginsDesc": "Search and navigate to your integrations",
|
||||
"gotoAnything.actions.searchWorkflowNodes": "Search Workflow Nodes",
|
||||
"gotoAnything.actions.searchWorkflowNodesDesc": "Find and jump to nodes in the current workflow by name or type",
|
||||
"gotoAnything.actions.searchWorkflowNodesHelp": "This feature only works when viewing a workflow. Navigate to a workflow first.",
|
||||
"gotoAnything.actions.slashDesc": "Execute commands (type / to see all available commands)",
|
||||
"gotoAnything.actions.slashTitle": "Commands",
|
||||
"gotoAnything.actions.themeCategoryDesc": "Switch application theme",
|
||||
"gotoAnything.actions.themeCategoryTitle": "Theme",
|
||||
"gotoAnything.actions.themeDark": "Dark Theme",
|
||||
"gotoAnything.actions.themeDarkDesc": "Use dark appearance",
|
||||
"gotoAnything.actions.themeLight": "Light Theme",
|
||||
@ -140,8 +126,6 @@
|
||||
"importFromDSLFile": "From DSL file",
|
||||
"importFromDSLUrl": "From URL",
|
||||
"importFromDSLUrlPlaceholder": "Paste DSL link here",
|
||||
"join": "Join the community",
|
||||
"marketplace.template.categories": "Categories",
|
||||
"marketplace.template.category.design": "Design",
|
||||
"marketplace.template.category.it": "IT",
|
||||
"marketplace.template.category.knowledge": "Knowledge",
|
||||
@ -156,7 +140,6 @@
|
||||
"marketplace.template.overview": "Overview",
|
||||
"marketplace.template.publishedBy": "By",
|
||||
"marketplace.template.usageCount": "Usage",
|
||||
"marketplace.template.viewOnMarketplace": "View on Marketplace",
|
||||
"maxActiveRequests": "Max concurrent requests",
|
||||
"maxActiveRequestsPlaceholder": "Enter 0 for unlimited",
|
||||
"maxActiveRequestsTip": "Maximum number of concurrent active requests per app (0 for unlimited)",
|
||||
@ -167,7 +150,6 @@
|
||||
"newApp.Create": "Create",
|
||||
"newApp.advancedShortDescription": "Workflow enhanced for multi-turn chats",
|
||||
"newApp.advancedUserDescription": "Workflow with additional memory features and a chatbot interface.",
|
||||
"newApp.agentAssistant": "New Agent Assistant",
|
||||
"newApp.agentShortDescription": "Intelligent agent with reasoning and autonomous tool use",
|
||||
"newApp.agentUserDescription": "An intelligent agent capable of iterative reasoning and autonomous tool use to achieve task goals.",
|
||||
"newApp.appCreateDSLErrorPart1": "A significant difference in DSL versions has been detected. Forcing the import may cause the application to malfunction.",
|
||||
@ -180,51 +162,34 @@
|
||||
"newApp.appCreated": "App created",
|
||||
"newApp.appDescriptionPlaceholder": "Enter the description of the app",
|
||||
"newApp.appNamePlaceholder": "Give your app a name",
|
||||
"newApp.appTemplateNotSelected": "Please select a template",
|
||||
"newApp.appTypeRequired": "Please select an app type",
|
||||
"newApp.captionDescription": "Description",
|
||||
"newApp.captionName": "App Name & Icon",
|
||||
"newApp.caution": "Caution",
|
||||
"newApp.chatApp": "Assistant",
|
||||
"newApp.chatAppIntro": "I want to build a chat-based application. This app uses a question-and-answer format, allowing for multiple rounds of continuous conversation.",
|
||||
"newApp.chatbotShortDescription": "LLM-based chatbot with simple setup",
|
||||
"newApp.chatbotUserDescription": "Quickly build an LLM-based chatbot with simple configuration. You can switch to Chatflow later.",
|
||||
"newApp.chooseAppType": "Choose an App Type",
|
||||
"newApp.completeApp": "Text Generator",
|
||||
"newApp.completeAppIntro": "I want to create an application that generates high-quality text based on prompts, such as generating articles, summaries, translations, and more.",
|
||||
"newApp.completionShortDescription": "AI assistant for text generation tasks",
|
||||
"newApp.completionUserDescription": "Quickly build an AI assistant for text generation tasks with simple configuration.",
|
||||
"newApp.dropDSLToCreateApp": "Drop DSL file here to create app",
|
||||
"newApp.forAdvanced": "FOR ADVANCED USERS",
|
||||
"newApp.forBeginners": "More basic app types",
|
||||
"newApp.foundResult": "{{count}} Result",
|
||||
"newApp.foundResults": "{{count}} Results",
|
||||
"newApp.hideTemplates": "Go back to mode selection",
|
||||
"newApp.import": "Import",
|
||||
"newApp.learnMore": "Learn more",
|
||||
"newApp.nameNotEmpty": "Name cannot be empty",
|
||||
"newApp.noAppsFound": "No apps found",
|
||||
"newApp.noIdeaTip": "No ideas? Check out our templates",
|
||||
"newApp.noTemplateFound": "No templates found",
|
||||
"newApp.noTemplateFoundTip": "Try searching using different keywords.",
|
||||
"newApp.optional": "Optional",
|
||||
"newApp.previewDemo": "Preview demo",
|
||||
"newApp.showTemplates": "I want to choose from a template",
|
||||
"newApp.startFromBlank": "Create from Blank",
|
||||
"newApp.startFromTemplate": "Create from Template",
|
||||
"newApp.useTemplate": "Use this template",
|
||||
"newApp.workflowShortDescription": "Agentic flow for intelligent automations",
|
||||
"newApp.workflowUserDescription": "Visually build autonomous AI workflows with drag-and-drop simplicity.",
|
||||
"newApp.workflowWarning": "Currently in beta",
|
||||
"newAppFromTemplate.byCategories": "BY CATEGORIES",
|
||||
"newAppFromTemplate.searchAllTemplate": "Search all templates...",
|
||||
"newAppFromTemplate.sidebar.Agent": "Agent",
|
||||
"newAppFromTemplate.sidebar.Assistant": "Assistant",
|
||||
"newAppFromTemplate.sidebar.HR": "HR",
|
||||
"newAppFromTemplate.sidebar.Programming": "Programming",
|
||||
"newAppFromTemplate.sidebar.Recommended": "All",
|
||||
"newAppFromTemplate.sidebar.Workflow": "Workflow",
|
||||
"newAppFromTemplate.sidebar.Writing": "Writing",
|
||||
"noAccessPermission": "No permission to access web app",
|
||||
"noAccessResourcePermission": "No permission to access this resource",
|
||||
"noUserInputNode": "Missing user input node",
|
||||
@ -234,8 +199,6 @@
|
||||
"publishApp.notSetDesc": "Currently nobody can access the web app. Please set permissions.",
|
||||
"publishApp.title": "Who can access web app",
|
||||
"removeOriginal": "Delete the original app",
|
||||
"roadmap": "See our roadmap",
|
||||
"showMyCreatedAppsOnly": "Created by me",
|
||||
"structOutput.LLMResponse": "LLM Response",
|
||||
"structOutput.configure": "Configure",
|
||||
"structOutput.modelNotSupported": "Model not supported",
|
||||
@ -246,8 +209,6 @@
|
||||
"structOutput.structured": "Structured",
|
||||
"structOutput.structuredTip": "Structured Outputs is a feature that ensures the model will always generate responses that adhere to your supplied JSON Schema",
|
||||
"studio.allApps": "All Apps",
|
||||
"studio.apps": "Apps",
|
||||
"studio.filters.allCreators": "All creators",
|
||||
"studio.filters.creators": "Creators",
|
||||
"studio.filters.reset": "Reset",
|
||||
"studio.filters.searchCreators": "Search creator...",
|
||||
@ -261,7 +222,6 @@
|
||||
"studio.starFailed": "Failed to update star",
|
||||
"studio.starred": "Starred",
|
||||
"studio.unstarApp": "Unstar app",
|
||||
"studio.viewSnippets": "View Snippets",
|
||||
"switch": "Switch to Workflow Orchestrate",
|
||||
"switchLabel": "The app copy to be created",
|
||||
"switchStart": "Start switch",
|
||||
@ -274,7 +234,6 @@
|
||||
"tracing.aliyun.title": "Cloud Monitor",
|
||||
"tracing.arize.description": "Enterprise-grade LLM observability, online & offline evaluation, monitoring, and experimentation—powered by OpenTelemetry. Purpose-built for LLM & agent-driven applications.",
|
||||
"tracing.arize.title": "Arize",
|
||||
"tracing.collapse": "Collapse",
|
||||
"tracing.config": "Config",
|
||||
"tracing.configProvider.clientId": "OAuth Client ID",
|
||||
"tracing.configProvider.clientSecret": "OAuth Client Secret",
|
||||
@ -297,11 +256,9 @@
|
||||
"tracing.configProviderTitle.notConfigured": "Config provider to enable tracing",
|
||||
"tracing.databricks.description": "Databricks offers fully-managed MLflow with strong governance and security for storing trace data.",
|
||||
"tracing.databricks.title": "Databricks",
|
||||
"tracing.description": "Configuring a Third-Party LLMOps provider and tracing app performance.",
|
||||
"tracing.disabled": "Disabled",
|
||||
"tracing.disabledTip": "Please config provider first",
|
||||
"tracing.enabled": "In Service",
|
||||
"tracing.expand": "Expand",
|
||||
"tracing.inUse": "In use",
|
||||
"tracing.langfuse.description": "Open-source LLM observability, evaluation, prompt management and metrics to debug and improve your LLM application.",
|
||||
"tracing.langfuse.title": "Langfuse",
|
||||
@ -330,9 +287,7 @@
|
||||
"types.advanced": "Chatflow",
|
||||
"types.agent": "Agent",
|
||||
"types.all": "All",
|
||||
"types.basic": "Basic",
|
||||
"types.chatbot": "Chatbot",
|
||||
"types.completion": "Completion",
|
||||
"types.filter": "Types",
|
||||
"types.workflow": "Workflow"
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
"account.appearanceLabel": "Appearance",
|
||||
"account.appearanceLight": "Light",
|
||||
"account.appearanceSystem": "System",
|
||||
"account.avatar": "Avatar",
|
||||
"account.changeEmail.authTip": "Once your email is changed, Google or GitHub accounts linked to your old email will no longer be able to log in to this account.",
|
||||
"account.changeEmail.changeTo": "Change to {{email}}",
|
||||
"account.changeEmail.codeLabel": "Verification code",
|
||||
@ -63,7 +62,6 @@
|
||||
"account.showAppLength": "Show {{length}} apps",
|
||||
"account.verificationLabel": "Verification Code",
|
||||
"account.verificationPlaceholder": "Paste the 6-digit code",
|
||||
"account.workspaceIcon": "Workspace Icon",
|
||||
"account.workspaceName": "Workspace Name",
|
||||
"account.workspaceNamePlaceholder": "Enter workspace name",
|
||||
"actionMsg.copySuccessfully": "Copied successfully",
|
||||
@ -78,7 +76,6 @@
|
||||
"agentStrategyPage.description": "Define how your AI agent reasons and makes decisions — including how it selects tools, handles results, and solves problems autonomously.",
|
||||
"api.actionFailed": "Action failed",
|
||||
"api.actionSuccess": "Action succeeded",
|
||||
"api.create": "Created",
|
||||
"api.remove": "Removed",
|
||||
"api.saved": "Saved",
|
||||
"api.success": "Success",
|
||||
@ -105,8 +102,6 @@
|
||||
"appMenus.logs": "Logs",
|
||||
"appMenus.overview": "Monitoring",
|
||||
"appMenus.promptEng": "Orchestrate",
|
||||
"appModes.chatApp": "Chat App",
|
||||
"appModes.completionApp": "Text Generator",
|
||||
"avatar.deleteDescription": "Are you sure you want to remove your profile picture? Your account will use the default initial avatar.",
|
||||
"avatar.deleteTitle": "Remove Avatar",
|
||||
"avatar.editAction": "Edit Avatar",
|
||||
@ -122,7 +117,6 @@
|
||||
"chat.inputDisabledPlaceholder": "Preview Only",
|
||||
"chat.inputPlaceholder": "Talk to {{botName}}",
|
||||
"chat.renameConversation": "Rename Conversation",
|
||||
"chat.resend": "Resend",
|
||||
"chat.thinking": "Thinking...",
|
||||
"chat.thought": "Thought",
|
||||
"compliance.gdpr": "GDPR DPA",
|
||||
@ -131,42 +125,21 @@
|
||||
"compliance.sandboxUpgradeTooltip": "Only available with a Professional or Team plan.",
|
||||
"compliance.soc2Type1": "SOC 2 Type I Report",
|
||||
"compliance.soc2Type2": "SOC 2 Type II Report",
|
||||
"dataSource.add": "Add a Data Source",
|
||||
"dataSource.configure": "Configure",
|
||||
"dataSource.connect": "Connect",
|
||||
"dataSource.notion.addWorkspace": "Add workspace",
|
||||
"dataSource.notion.changeAuthorizedPages": "Change authorized pages",
|
||||
"dataSource.notion.connected": "Connected",
|
||||
"dataSource.notion.connectedWorkspace": "Connected workspace",
|
||||
"dataSource.notion.description": "Using Notion as a Data Source for the Knowledge.",
|
||||
"dataSource.notion.disconnected": "Disconnected",
|
||||
"dataSource.notion.integratedAlert": "Notion is integrated via internal credential, no need to re-authorize.",
|
||||
"dataSource.notion.pagesAuthorized": "Pages authorized",
|
||||
"dataSource.notion.remove": "Remove",
|
||||
"dataSource.notion.selector.addPages": "Add pages",
|
||||
"dataSource.notion.selector.configure": "Configure Notion",
|
||||
"dataSource.notion.selector.docs": "Notion docs",
|
||||
"dataSource.notion.selector.headerTitle": "Choose Notion pages",
|
||||
"dataSource.notion.selector.noSearchResult": "No search results",
|
||||
"dataSource.notion.selector.pageSelected": "Pages Selected",
|
||||
"dataSource.notion.selector.preview": "PREVIEW",
|
||||
"dataSource.notion.selector.searchPages": "Search pages...",
|
||||
"dataSource.notion.sync": "Sync",
|
||||
"dataSource.notion.title": "Notion",
|
||||
"dataSource.website.active": "Active",
|
||||
"dataSource.website.configuredCrawlers": "Configured crawlers",
|
||||
"dataSource.website.description": "Import content from websites using web crawler.",
|
||||
"dataSource.website.inactive": "Inactive",
|
||||
"dataSource.website.title": "Website",
|
||||
"dataSource.website.with": "With",
|
||||
"dataSourcePage.description": "Connect external data sources to use in your Knowledge base or Knowledge Pipeline — pull in content from Google Drive, Notion, GitHub, and more.",
|
||||
"dataSourcePage.installFirst": "Please install a data source first.",
|
||||
"dataSourcePage.notSetUp": "not set up",
|
||||
"dataSourcePage.notSetUpTitle": "<highlight>Data Source</highlight> not set up",
|
||||
"datasetMenus.documents": "Documents",
|
||||
"datasetMenus.emptyTip": "This Knowledge has not been integrated within any application. Please refer to the document for guidance.",
|
||||
"datasetMenus.hitTesting": "Retrieval Testing",
|
||||
"datasetMenus.noRelatedApp": "No linked apps",
|
||||
"datasetMenus.pipeline": "Pipeline",
|
||||
"datasetMenus.relatedApp": "linked apps",
|
||||
"datasetMenus.settings": "Settings",
|
||||
@ -181,12 +154,10 @@
|
||||
"errorBoundary.componentStack": "Component Stack:",
|
||||
"errorBoundary.details": "Error Details (Development Only)",
|
||||
"errorBoundary.errorCount": "This error has occurred {{count}} times",
|
||||
"errorBoundary.fallbackTitle": "Oops! Something went wrong",
|
||||
"errorBoundary.message": "An unexpected error occurred while rendering this component.",
|
||||
"errorBoundary.reloadPage": "Reload Page",
|
||||
"errorBoundary.title": "Something went wrong",
|
||||
"errorBoundary.tryAgain": "Try Again",
|
||||
"errorBoundary.tryAgainCompact": "Try again",
|
||||
"errorMsg.fieldRequired": "{{field}} is required",
|
||||
"errorMsg.urlError": "url should start with http:// or https://",
|
||||
"extensionPage.description": "Integrate external services into your apps using HTTP Webhooks.",
|
||||
@ -217,14 +188,8 @@
|
||||
"imageUploader.uploadFromComputerReadError": "Image reading failed, please try again.",
|
||||
"imageUploader.uploadFromComputerUploadError": "Image upload failed, please upload again.",
|
||||
"integrations.connect": "Connect",
|
||||
"integrations.connected": "Connected",
|
||||
"integrations.github": "GitHub",
|
||||
"integrations.githubAccount": "Login with GitHub account",
|
||||
"integrations.google": "Google",
|
||||
"integrations.googleAccount": "Login with Google account",
|
||||
"label.optional": "(optional)",
|
||||
"language.displayLanguage": "Display Language",
|
||||
"language.language": "Language",
|
||||
"language.timezone": "Time Zone",
|
||||
"license.expiring": "Expiring in one day",
|
||||
"license.expiring_plural": "Expiring in {{count}} days",
|
||||
@ -247,23 +212,13 @@
|
||||
"mainNav.workspace.sort.createdTime": "Created time",
|
||||
"mainNav.workspace.sort.lastOpened": "Last opened",
|
||||
"mainNav.workspace.sort.openMenu": "Sort workspaces",
|
||||
"mainNav.workspace.switchWorkspace": "Switch workspace",
|
||||
"mcpPage.description": "Connect and manage MCP servers to give your apps access to external tools and services.",
|
||||
"members.adminTip": "Can build apps & manage team settings",
|
||||
"members.alreadyInTeam": "Already in team",
|
||||
"members.alreadyInTeamTip": "These users already have access to this workspace.",
|
||||
"members.assignRoles": "Assign Roles",
|
||||
"members.assignRolesModal.description": "Select roles to assign to this member. All permissions from selected roles will be combined.",
|
||||
"members.assignRolesModal.selectedCount": "{{count}} selected",
|
||||
"members.assignRolesModal.singleDescription": "Select one role to assign to this member.",
|
||||
"members.assignRolesModal.title": "Assign Roles",
|
||||
"members.builder": "Builder",
|
||||
"members.builderTip": "Can build & edit own apps",
|
||||
"members.datasetOperatorTip": "Only can manage the knowledge base",
|
||||
"members.deleteMember": "Delete Member",
|
||||
"members.disInvite": "Cancel the invitation",
|
||||
"members.editRole": "Edit Role",
|
||||
"members.editorTip": "Can build & edit apps",
|
||||
"members.email": "Email",
|
||||
"members.emailInvalid": "Invalid Email Format",
|
||||
"members.emailNotSetup": "Email server is not set up, so invitation emails cannot be sent. Please notify users of the invitation link that will be issued after invitation instead.",
|
||||
@ -279,47 +234,22 @@
|
||||
"members.lastActive": "LAST ACTIVE",
|
||||
"members.memberActions": "Member actions",
|
||||
"members.memberDetails.assign": "Assign",
|
||||
"members.memberDetails.assignedRole": "Assigned Role",
|
||||
"members.memberDetails.assignedRoles": "Assigned Roles",
|
||||
"members.memberDetails.customGroup": "CUSTOMIZED",
|
||||
"members.memberDetails.generalGroup": "GENERAL",
|
||||
"members.memberDetails.openAria": "Open member details for {{name}}",
|
||||
"members.memberDetails.permissions.assignRoles": "Assign roles",
|
||||
"members.memberDetails.permissions.createApps": "Create apps",
|
||||
"members.memberDetails.permissions.createDatasets": "Create knowledge",
|
||||
"members.memberDetails.permissions.editApps": "Edit apps",
|
||||
"members.memberDetails.permissions.editDatasets": "Edit knowledge",
|
||||
"members.memberDetails.permissions.inviteMembers": "Invite members",
|
||||
"members.memberDetails.permissions.manageBilling": "Manage billing",
|
||||
"members.memberDetails.permissions.manageDatasets": "Manage knowledge",
|
||||
"members.memberDetails.permissions.removeMembers": "Remove members",
|
||||
"members.memberDetails.permissions.transferOwnership": "Transfer ownership",
|
||||
"members.memberDetails.permissions.useApps": "Use apps",
|
||||
"members.memberDetails.permissions.workspaceSettings": "Workspace settings",
|
||||
"members.memberDetails.removeRoleAria": "Remove {{role}} role",
|
||||
"members.memberDetails.roleActionsAria": "Open actions for {{role}} role",
|
||||
"members.memberDetails.roleNoPermissionSummary": "Current role has no permissions.",
|
||||
"members.memberDetails.rolePermissionSummary": "{{role}} can <permissionList>{{permissions}}</permissionList>",
|
||||
"members.memberDetails.title": "Member Details",
|
||||
"members.name": "NAME",
|
||||
"members.noNewInvitationsSent": "No new invitations sent",
|
||||
"members.normal": "Normal",
|
||||
"members.normalTip": "Only can use apps, can not build apps",
|
||||
"members.ok": "OK",
|
||||
"members.pending": "Pending...",
|
||||
"members.removeFromTeam": "Remove from team",
|
||||
"members.removeFromTeamConfirmDescription": "Confirm removing this member. This action cannot be undone.",
|
||||
"members.removeFromTeamConfirmTitle": "Remove {{memberName}} from team",
|
||||
"members.removeFromTeamTip": "Will remove team access",
|
||||
"members.role": "ROLE",
|
||||
"members.roles": "ROLES",
|
||||
"members.role": "ROLES",
|
||||
"members.selectRole": "Select a role",
|
||||
"members.sendInvite": "Send Invite",
|
||||
"members.setAdmin": "Set as administrator",
|
||||
"members.setBuilder": "Set as builder",
|
||||
"members.setEditor": "Set as editor",
|
||||
"members.setMember": "Set to ordinary member",
|
||||
"members.team": "Team",
|
||||
"members.transferModal.codeLabel": "Verification code",
|
||||
"members.transferModal.codePlaceholder": "Paste the 6-digit code",
|
||||
"members.transferModal.continue": "Continue",
|
||||
@ -343,53 +273,19 @@
|
||||
"menus.appDetail": "App Detail",
|
||||
"menus.apps": "Studio",
|
||||
"menus.datasets": "Knowledge",
|
||||
"menus.datasetsTips": "COMING SOON: Import your own text data or write data in real-time via Webhook for LLM context enhancement.",
|
||||
"menus.deployments": "Deployments",
|
||||
"menus.explore": "Explore",
|
||||
"menus.exploreMarketplace": "Explore Marketplace",
|
||||
"menus.newApp": "New App",
|
||||
"menus.newDataset": "Create Knowledge",
|
||||
"menus.plugins": "Integrations",
|
||||
"menus.pluginsTips": "Integrate third-party services or create ChatGPT-compatible AI integrations.",
|
||||
"menus.roster": "Roster",
|
||||
"menus.status": "beta",
|
||||
"menus.tools": "Tools",
|
||||
"model.addMoreModel": "Go to settings to add more models",
|
||||
"model.capabilities": "MultiModal Capabilities",
|
||||
"model.params.frequency_penalty": "Frequency penalty",
|
||||
"model.params.frequency_penaltyTip": "How much to penalize new tokens based on their existing frequency in the text so far.\nDecreases the model's likelihood to repeat the same line verbatim.",
|
||||
"model.params.maxTokenSettingTip": "Your max token setting is high, potentially limiting space for prompts, queries, and data. Consider setting it below 2/3.",
|
||||
"model.params.max_tokens": "Max token",
|
||||
"model.params.max_tokensTip": "Used to limit the maximum length of the reply, in tokens. \nLarger values may limit the space left for prompt words, chat logs, and Knowledge. \nIt is recommended to set it below two-thirds\ngpt-4-1106-preview, gpt-4-vision-preview max token (input 128k output 4k)",
|
||||
"model.params.presence_penalty": "Presence penalty",
|
||||
"model.params.presence_penaltyTip": "How much to penalize new tokens based on whether they appear in the text so far.\nIncreases the model's likelihood to talk about new topics.",
|
||||
"model.params.setToCurrentModelMaxTokenTip": "Max token is updated to the 80% maximum token of the current model {{maxToken}}.",
|
||||
"model.params.stop_sequences": "Stop sequences",
|
||||
"model.params.stop_sequencesPlaceholder": "Enter sequence and press Tab",
|
||||
"model.params.stop_sequencesTip": "Up to four sequences where the API will stop generating further tokens. The returned text will not contain the stop sequence.",
|
||||
"model.params.temperature": "Temperature",
|
||||
"model.params.temperatureTip": "Controls randomness: Lowering results in less random completions. As the temperature approaches zero, the model will become deterministic and repetitive.",
|
||||
"model.params.top_p": "Top P",
|
||||
"model.params.top_pTip": "Controls diversity via nucleus sampling: 0.5 means half of all likelihood-weighted options are considered.",
|
||||
"model.settingsLink": "Model Provider Settings",
|
||||
"model.tone.Balanced": "Balanced",
|
||||
"model.tone.Creative": "Creative",
|
||||
"model.tone.Custom": "Custom",
|
||||
"model.tone.Precise": "Precise",
|
||||
"modelName.claude-2": "Claude-2",
|
||||
"modelName.claude-instant-1": "Claude-Instant",
|
||||
"modelName.gpt-3.5-turbo": "GPT-3.5-Turbo",
|
||||
"modelName.gpt-3.5-turbo-16k": "GPT-3.5-Turbo-16K",
|
||||
"modelName.gpt-4": "GPT-4",
|
||||
"modelName.gpt-4-32k": "GPT-4-32K",
|
||||
"modelName.text-davinci-003": "Text-Davinci-003",
|
||||
"modelName.text-embedding-ada-002": "Text-Embedding-Ada-002",
|
||||
"modelName.whisper-1": "Whisper-1",
|
||||
"modelProvider.addApiKey": "Add your API key",
|
||||
"modelProvider.addConfig": "Add Config",
|
||||
"modelProvider.addModel": "Add Model",
|
||||
"modelProvider.addMoreModelProvider": "ADD MORE MODEL PROVIDER",
|
||||
"modelProvider.apiKey": "API-KEY",
|
||||
"modelProvider.apiKeyRateLimit": "Rate limit was reached, available after {{seconds}}s",
|
||||
"modelProvider.apiKeyStatusNormal": "APIKey status is normal",
|
||||
"modelProvider.auth.addApiKey": "Add API Key",
|
||||
@ -398,7 +294,6 @@
|
||||
"modelProvider.auth.addModelCredential": "Add model credential",
|
||||
"modelProvider.auth.addNewModel": "Add new model",
|
||||
"modelProvider.auth.addNewModelCredential": "Add new model credential",
|
||||
"modelProvider.auth.apiKeyModal.addModel": "Add model",
|
||||
"modelProvider.auth.apiKeyModal.desc": "After configuring credentials, all members within the workspace can use this model when orchestrating applications.",
|
||||
"modelProvider.auth.apiKeyModal.title": "API Key Authorization Configuration",
|
||||
"modelProvider.auth.apiKeys": "API Keys",
|
||||
@ -419,17 +314,12 @@
|
||||
"modelProvider.auth.selectModelCredential": "Select a model credential",
|
||||
"modelProvider.auth.specifyModelCredential": "Specify model credential",
|
||||
"modelProvider.auth.specifyModelCredentialTip": "Use a configured model credential.",
|
||||
"modelProvider.auth.unAuthorized": "Unauthorized",
|
||||
"modelProvider.buyQuota": "Buy Quota",
|
||||
"modelProvider.callTimes": "Call times",
|
||||
"modelProvider.card.aiCreditsInUse": "AI credits in use",
|
||||
"modelProvider.card.aiCreditsOption": "AI credits",
|
||||
"modelProvider.card.apiKeyOption": "API Key",
|
||||
"modelProvider.card.apiKeyRequired": "API key required",
|
||||
"modelProvider.card.apiKeyUnavailableFallback": "API Key unavailable, now using AI credits",
|
||||
"modelProvider.card.apiKeyUnavailableFallbackDescription": "Check your API key configuration to switch back",
|
||||
"modelProvider.card.buyQuota": "Buy Quota",
|
||||
"modelProvider.card.callTimes": "Call times",
|
||||
"modelProvider.card.creditsExhaustedDescription": "Please <upgradeLink>upgrade your plan</upgradeLink> or configure an API key",
|
||||
"modelProvider.card.creditsExhaustedFallback": "AI credits exhausted, now using API key",
|
||||
"modelProvider.card.creditsExhaustedFallbackDescription": "<upgradeLink>Upgrade your plan</upgradeLink> to resume AI credit priority.",
|
||||
@ -441,32 +331,17 @@
|
||||
"modelProvider.card.noApiKeysFallback": "No API keys, using AI credits instead",
|
||||
"modelProvider.card.noApiKeysTitle": "No API keys configured yet",
|
||||
"modelProvider.card.noAvailableUsage": "No available usage",
|
||||
"modelProvider.card.onTrial": "On Trial",
|
||||
"modelProvider.card.paid": "Paid",
|
||||
"modelProvider.card.priorityUse": "Priority use",
|
||||
"modelProvider.card.quota": "QUOTA",
|
||||
"modelProvider.card.quotaExhausted": "Credits exhausted",
|
||||
"modelProvider.card.removeKey": "Remove API Key",
|
||||
"modelProvider.card.tip": "AI Credits supports models from {{modelNames}}. Priority will be given to the paid quota. The Trial quota will be used after the paid quota is exhausted.",
|
||||
"modelProvider.card.tokens": "Tokens",
|
||||
"modelProvider.card.unavailable": "Unavailable",
|
||||
"modelProvider.card.upgradePlan": "upgrade your plan",
|
||||
"modelProvider.card.usageLabel": "Usage",
|
||||
"modelProvider.card.usagePriority": "Usage Priority",
|
||||
"modelProvider.card.usagePriorityTip": "Set which resource to use first when running models.",
|
||||
"modelProvider.collapse": "Collapse",
|
||||
"modelProvider.config": "Config",
|
||||
"modelProvider.configLoadBalancing": "Config Load Balancing",
|
||||
"modelProvider.configureTip": "Set up api-key or add model to use",
|
||||
"modelProvider.configuredProviders": "Configured providers",
|
||||
"modelProvider.confirmDelete": "Confirm deletion?",
|
||||
"modelProvider.credits": "Message Credits",
|
||||
"modelProvider.creditsBackedProviders": "Available with Message Credits",
|
||||
"modelProvider.creditsBackedProvidersDesc": "These providers work with your Message Credits — no API key needed.",
|
||||
"modelProvider.defaultConfig": "Default Config",
|
||||
"modelProvider.deprecated": "Deprecated",
|
||||
"modelProvider.discoverMore": "Discover more in",
|
||||
"modelProvider.editConfig": "Edit Config",
|
||||
"modelProvider.embeddingModel.key": "Embedding Model",
|
||||
"modelProvider.embeddingModel.required": "Embedding Model is required",
|
||||
"modelProvider.embeddingModel.tip": "Set the default model for document embedding processing of the Knowledge, both retrieval and import of the Knowledge use this Embedding model for vectorization processing. Switching will cause the vector dimension between the imported Knowledge and the question to be inconsistent, resulting in retrieval failure. To avoid retrieval failure, please do not switch this model at will.",
|
||||
@ -476,43 +351,28 @@
|
||||
"modelProvider.encrypted.back": " technology.",
|
||||
"modelProvider.encrypted.front": "Your API KEY will be encrypted and stored using",
|
||||
"modelProvider.featureSupported": "{{feature}} supported",
|
||||
"modelProvider.freeQuota.howToEarn": "How to earn",
|
||||
"modelProvider.getFreeTokens": "Get free Tokens",
|
||||
"modelProvider.installDataSource": "Install data source",
|
||||
"modelProvider.installDataSourceProvider": "Install Data Source Providers",
|
||||
"modelProvider.installProvider": "Install model providers",
|
||||
"modelProvider.invalidApiKey": "Invalid API key",
|
||||
"modelProvider.item.deleteDesc": "{{modelName}} are being used as system reasoning models. Some functions will not be available after removal. Please confirm.",
|
||||
"modelProvider.item.freeQuota": "FREE QUOTA",
|
||||
"modelProvider.learnMore": "Learn more",
|
||||
"modelProvider.loadBalancing": "Load balancing",
|
||||
"modelProvider.loadBalancingDescription": "Configure multiple credentials for the model and invoke them automatically. ",
|
||||
"modelProvider.loadBalancingHeadline": "Load Balancing",
|
||||
"modelProvider.loadBalancingInfo": "By default, load balancing uses the Round-robin strategy. If rate limiting is triggered, a 1-minute cooldown period will be applied.",
|
||||
"modelProvider.loadBalancingLeastKeyWarning": "To enable load balancing at least 2 keys must be enabled.",
|
||||
"modelProvider.loadPresets": "Load Presets",
|
||||
"modelProvider.model": "Model",
|
||||
"modelProvider.modelAndParameters": "Model and Parameters",
|
||||
"modelProvider.modelHasBeenDeprecated": "This model has been deprecated",
|
||||
"modelProvider.modelSettings": "Model Settings",
|
||||
"modelProvider.models": "Models",
|
||||
"modelProvider.modelsNum": "{{num}} Models",
|
||||
"modelProvider.noModelFound": "No model found for {{model}}",
|
||||
"modelProvider.noneConfigured": "Configure a default system model to run applications",
|
||||
"modelProvider.notConfigured": "The system model has not yet been fully configured",
|
||||
"modelProvider.pageDesc": "Connect the world's leading model providers to power every app you build.",
|
||||
"modelProvider.parameters": "PARAMETERS",
|
||||
"modelProvider.parametersInvalidRemoved": "Some parameters are invalid and have been removed",
|
||||
"modelProvider.priorityUsing": "Prioritize using",
|
||||
"modelProvider.providerManaged": "Provider managed",
|
||||
"modelProvider.providerManagedDescription": "Use the single set of credentials provided by the Model Provider.",
|
||||
"modelProvider.quota": "AI Credits",
|
||||
"modelProvider.quotaLabel": "AI CREDITS",
|
||||
"modelProvider.quotaTip": "Remaining available free tokens",
|
||||
"modelProvider.rerankModel.key": "Rerank Model",
|
||||
"modelProvider.rerankModel.tip": "Rerank model will reorder the candidate document list based on the semantic match with user query, improving the results of semantic ranking",
|
||||
"modelProvider.resetDate": "Reset on {{date}}",
|
||||
"modelProvider.searchModel": "Search model",
|
||||
"modelProvider.searchModels": "Search models...",
|
||||
"modelProvider.selectModel": "Select your model",
|
||||
"modelProvider.selector.aiCredits": "AI credits",
|
||||
@ -524,8 +384,6 @@
|
||||
"modelProvider.selector.creditsExhaustedTip": "Your AI credits have been exhausted. Please upgrade your plan or add an API key.",
|
||||
"modelProvider.selector.disabled": "Disabled",
|
||||
"modelProvider.selector.discoverMoreInMarketplace": "Discover more in Marketplace",
|
||||
"modelProvider.selector.emptySetting": "Please go to settings to configure",
|
||||
"modelProvider.selector.emptyTip": "No available models",
|
||||
"modelProvider.selector.fromMarketplace": "From Marketplace",
|
||||
"modelProvider.selector.incompatible": "Incompatible",
|
||||
"modelProvider.selector.incompatibleTip": "This model is not available in the current version. Please select another available model.",
|
||||
@ -535,11 +393,7 @@
|
||||
"modelProvider.selector.noProviderConfigured": "No Model Provider configured",
|
||||
"modelProvider.selector.noProviderConfiguredDesc": "Browse Marketplace to install one, or configure providers in settings.",
|
||||
"modelProvider.selector.onlyCompatibleModelsShown": "Only compatible models are shown",
|
||||
"modelProvider.selector.rerankTip": "Please set up the Rerank model",
|
||||
"modelProvider.selector.tip": "This model has been removed. Please add a model or select another model.",
|
||||
"modelProvider.setupModelFirst": "Please set up your model first",
|
||||
"modelProvider.showModels": "Show Models",
|
||||
"modelProvider.showMoreModelProvider": "Show more Model Providers",
|
||||
"modelProvider.speechToTextModel.key": "Speech-to-Text Model",
|
||||
"modelProvider.speechToTextModel.tip": "Set the default model for speech-to-text input in conversation.",
|
||||
"modelProvider.systemModelSettings": "Default Models",
|
||||
@ -570,7 +424,6 @@
|
||||
"operation.create": "Create",
|
||||
"operation.deSelectAll": "Deselect All",
|
||||
"operation.delete": "Delete",
|
||||
"operation.deleteApp": "Delete App",
|
||||
"operation.deleteConfirmTitle": "Delete?",
|
||||
"operation.download": "Download",
|
||||
"operation.downloadFailed": "Download failed. Please try again later.",
|
||||
@ -580,19 +433,16 @@
|
||||
"operation.exporting": "Exporting",
|
||||
"operation.fill": "Autofill",
|
||||
"operation.format": "Format",
|
||||
"operation.getForFree": "Get for free",
|
||||
"operation.imageCopied": "Image copied",
|
||||
"operation.imageDownloaded": "Image downloaded",
|
||||
"operation.in": "in",
|
||||
"operation.learnMore": "Learn More",
|
||||
"operation.lineBreak": "Line break",
|
||||
"operation.log": "Log",
|
||||
"operation.more": "More",
|
||||
"operation.moreActions": "More actions",
|
||||
"operation.no": "No",
|
||||
"operation.noSearchCount": "0 {{content}}",
|
||||
"operation.noSearchResults": "No {{content}} were found",
|
||||
"operation.now": "Now",
|
||||
"operation.ok": "OK",
|
||||
"operation.openInNewTab": "Open in new tab",
|
||||
"operation.params": "Params",
|
||||
@ -600,7 +450,6 @@
|
||||
"operation.play": "Play",
|
||||
"operation.refresh": "Restart",
|
||||
"operation.regenerate": "Regenerate",
|
||||
"operation.reload": "Reload",
|
||||
"operation.remove": "Remove",
|
||||
"operation.rename": "Rename",
|
||||
"operation.reset": "Reset",
|
||||
@ -616,7 +465,6 @@
|
||||
"operation.selectCount": "{{count}} Selected",
|
||||
"operation.send": "Send",
|
||||
"operation.settings": "Settings",
|
||||
"operation.setup": "Setup",
|
||||
"operation.skip": "Skip",
|
||||
"operation.submit": "Submit",
|
||||
"operation.sure": "I'm sure",
|
||||
@ -637,86 +485,31 @@
|
||||
"placeholder.input": "Please enter",
|
||||
"placeholder.search": "Search...",
|
||||
"placeholder.select": "Please select",
|
||||
"promptEditor.context.item.desc": "Insert context template",
|
||||
"promptEditor.context.item.title": "Context",
|
||||
"promptEditor.context.modal.add": "Add Context ",
|
||||
"promptEditor.context.modal.footer": "You can manage contexts in the Context section below.",
|
||||
"promptEditor.context.modal.title": "{{num}} Knowledge in Context",
|
||||
"promptEditor.existed": "Already exists in the prompt",
|
||||
"promptEditor.history.item.desc": "Insert historical message template",
|
||||
"promptEditor.history.item.title": "Conversation History",
|
||||
"promptEditor.history.modal.assistant": "Hello! How can I assist you today?",
|
||||
"promptEditor.history.modal.edit": "Edit Conversation Role Names",
|
||||
"promptEditor.history.modal.title": "EXAMPLE",
|
||||
"promptEditor.history.modal.user": "Hello",
|
||||
"promptEditor.placeholder": "Write your prompt word here, enter '{' to insert a variable, enter '/' to insert a prompt content block",
|
||||
"promptEditor.query.item.desc": "Insert user query template",
|
||||
"promptEditor.query.item.title": "Query",
|
||||
"promptEditor.requestURL.item.desc": "Insert request URL",
|
||||
"promptEditor.requestURL.item.title": "Request URL",
|
||||
"promptEditor.variable.item.desc": "Insert Variables & External Tools",
|
||||
"promptEditor.variable.item.title": "Variables & External Tools",
|
||||
"promptEditor.variable.modal.add": "New variable",
|
||||
"promptEditor.variable.modal.addTool": "New tool",
|
||||
"promptEditor.variable.outputToolDisabledItem.desc": "Insert Variables",
|
||||
"promptEditor.variable.outputToolDisabledItem.title": "Variables",
|
||||
"provider.addKey": "Add Key",
|
||||
"provider.anthropic.enableTip": "To enable the Anthropic model, you need to bind to OpenAI or Azure OpenAI Service first.",
|
||||
"provider.anthropic.keyFrom": "Get your API key from Anthropic",
|
||||
"provider.anthropic.notEnabled": "Not enabled",
|
||||
"provider.anthropic.using": "The embedding capability is using",
|
||||
"provider.anthropicHosted.anthropicHosted": "Anthropic Claude",
|
||||
"provider.anthropicHosted.callTimes": "Call times",
|
||||
"provider.anthropicHosted.close": "Close",
|
||||
"provider.anthropicHosted.desc": "Powerful model, which excels at a wide range of tasks from sophisticated dialogue and creative content generation to detailed instruction.",
|
||||
"provider.anthropicHosted.exhausted": "QUOTA EXHAUSTED",
|
||||
"provider.anthropicHosted.onTrial": "ON TRIAL",
|
||||
"provider.anthropicHosted.trialQuotaTip": "Your Anthropic trial quota will expire on 2025/03/17 and will no longer be available thereafter. Please make use of it in time.",
|
||||
"provider.anthropicHosted.useYourModel": "Currently using own Model Provider.",
|
||||
"provider.anthropicHosted.usedUp": "Trial quota used up. Add own Model Provider.",
|
||||
"provider.apiKey": "API Key",
|
||||
"provider.apiKeyExceedBill": "This API KEY has no quota available, please read",
|
||||
"provider.azure.apiBase": "API Base",
|
||||
"provider.azure.apiBasePlaceholder": "The API Base URL of your Azure OpenAI Endpoint.",
|
||||
"provider.azure.apiKey": "API Key",
|
||||
"provider.azure.apiKeyPlaceholder": "Enter your API key here",
|
||||
"provider.azure.helpTip": "Learn Azure OpenAI Service",
|
||||
"provider.comingSoon": "Coming Soon",
|
||||
"provider.editKey": "Edit",
|
||||
"provider.encrypted.back": " technology.",
|
||||
"provider.encrypted.front": "Your API KEY will be encrypted and stored using",
|
||||
"provider.enterYourKey": "Enter your API key here",
|
||||
"provider.invalidApiKey": "Invalid API key",
|
||||
"provider.invalidKey": "Invalid OpenAI API key",
|
||||
"provider.openaiHosted.callTimes": "Call times",
|
||||
"provider.openaiHosted.close": "Close",
|
||||
"provider.openaiHosted.desc": "The OpenAI hosting service provided by Dify allows you to use models such as GPT-3.5. Before your trial quota is used up, you need to set up other Model Providers.",
|
||||
"provider.openaiHosted.exhausted": "QUOTA EXHAUSTED",
|
||||
"provider.openaiHosted.onTrial": "ON TRIAL",
|
||||
"provider.openaiHosted.openaiHosted": "Hosted OpenAI",
|
||||
"provider.openaiHosted.useYourModel": "Currently using own Model Provider.",
|
||||
"provider.openaiHosted.usedUp": "Trial quota used up. Add own Model Provider.",
|
||||
"provider.saveFailed": "Save api key failed",
|
||||
"provider.validatedError": "Validation failed: ",
|
||||
"provider.validating": "Validating key...",
|
||||
"settings.ResourceAccess": "Resource Access",
|
||||
"settings.account": "My account",
|
||||
"settings.accountGroup": "GENERAL",
|
||||
"settings.agentStrategy": "Agent Strategy",
|
||||
"settings.billing": "Billing",
|
||||
"settings.collapse": "Collapse",
|
||||
"settings.customEndpoint": "Custom Endpoint",
|
||||
"settings.customTool": "Swagger API as Tool",
|
||||
"settings.dataSource": "Data Source",
|
||||
"settings.discoverMoreIntegrationsInMarketplace": "Discover more integrations in the Marketplace",
|
||||
"settings.expand": "Expand",
|
||||
"settings.extension": "Extension",
|
||||
"settings.filter": "Filter",
|
||||
"settings.generalGroup": "GENERAL",
|
||||
"settings.integrations": "Integrations",
|
||||
"settings.language": "Language",
|
||||
"settings.members": "Members",
|
||||
"settings.plugin": "Integrations",
|
||||
"settings.preferences": "Preferences",
|
||||
"settings.provider": "Model Provider",
|
||||
"settings.resourceAccess": "Resource Access",
|
||||
@ -725,9 +518,7 @@
|
||||
"settings.settings": "Settings",
|
||||
"settings.swaggerAPIAsTool": "Swagger API as Tool",
|
||||
"settings.trigger": "Trigger",
|
||||
"settings.workplaceGroup": "WORKSPACE",
|
||||
"settings.workspace": "WORKSPACE",
|
||||
"settings.workspaceSettings": "Workspace Settings",
|
||||
"swaggerAPIAsToolPage.description": "Import any API as a tool using OpenAPI/Swagger specs. Configure once and reuse it across your workflows.",
|
||||
"tag.addNew": "Add new tag",
|
||||
"tag.addTag": "Add tags",
|
||||
@ -735,11 +526,9 @@
|
||||
"tag.created": "Tag created successfully",
|
||||
"tag.delete": "Delete tag",
|
||||
"tag.deleteTip": "The tag is being used, delete it?",
|
||||
"tag.editTag": "Edit tags",
|
||||
"tag.failed": "Tag creation failed",
|
||||
"tag.manageTags": "Manage Tags",
|
||||
"tag.noTag": "No tags",
|
||||
"tag.noTagYet": "No tags yet",
|
||||
"tag.placeholder": "Tags",
|
||||
"tag.selectorPlaceholder": "Type to search or create",
|
||||
"tag.tags": "Tags",
|
||||
@ -755,7 +544,6 @@
|
||||
"userProfile.community": "Community",
|
||||
"userProfile.compliance": "Compliance",
|
||||
"userProfile.contactUs": "Contact Us",
|
||||
"userProfile.createWorkspace": "Create Workspace",
|
||||
"userProfile.emailSupport": "Email Support",
|
||||
"userProfile.forum": "Forum",
|
||||
"userProfile.github": "GitHub",
|
||||
@ -763,7 +551,6 @@
|
||||
"userProfile.logout": "Log out",
|
||||
"userProfile.roadmap": "Roadmap",
|
||||
"userProfile.settings": "Settings",
|
||||
"userProfile.support": "Support",
|
||||
"userProfile.workspace": "Workspace",
|
||||
"voice.language.arTN": "Tunisian Arabic",
|
||||
"voice.language.deDE": "German",
|
||||
|
||||
@ -1,6 +1,4 @@
|
||||
{
|
||||
"app.changeLogoTip": "SVG or PNG format with a minimum size of 80x80px",
|
||||
"app.title": "Customize app header brand",
|
||||
"apply": "Apply",
|
||||
"change": "Change",
|
||||
"custom": "Customization",
|
||||
@ -9,14 +7,11 @@
|
||||
"customize.suffix": "to upgrade to the Enterprise edition.",
|
||||
"restore": "Restore Defaults",
|
||||
"upgradeTip.des": "Upgrade your plan to customize your brand",
|
||||
"upgradeTip.prefix": "Upgrade your plan to",
|
||||
"upgradeTip.suffix": "customize your brand.",
|
||||
"upgradeTip.title": "Upgrade your plan",
|
||||
"upload": "Upload",
|
||||
"uploadedFail": "Image upload failed, please re-upload.",
|
||||
"uploading": "Uploading",
|
||||
"webapp.changeLogo": "Change Powered by Brand Image",
|
||||
"webapp.changeLogoTip": "SVG or PNG format with a minimum size of 40x40px",
|
||||
"webapp.removeBrand": "Remove Powered by Dify",
|
||||
"webapp.title": "Customize web app brand"
|
||||
"webapp.removeBrand": "Remove Powered by Dify"
|
||||
}
|
||||
|
||||
@ -1,16 +1,6 @@
|
||||
{
|
||||
"error.unavailable": "This Knowledge is not available",
|
||||
"firecrawl.apiKeyPlaceholder": "API key from firecrawl.dev",
|
||||
"firecrawl.configFirecrawl": "Configure 🔥Firecrawl",
|
||||
"firecrawl.getApiKeyLinkText": "Get your API key from firecrawl.dev",
|
||||
"jinaReader.apiKeyPlaceholder": "API key from jina.ai",
|
||||
"jinaReader.configJinaReader": "Configure Jina Reader",
|
||||
"jinaReader.getApiKeyLinkText": "Get your free API key at jina.ai",
|
||||
"otherDataSource.description": "Currently, Dify's knowledge base only has limited data sources. Contributing a data source to the Dify knowledge base is a fantastic way to help enhance the platform's flexibility and power for all users. Our contribution guide makes it easy to get started. Please click on the link below to learn more.",
|
||||
"otherDataSource.learnMore": "Learn more",
|
||||
"otherDataSource.title": "Connect to other data sources?",
|
||||
"stepOne.button": "Next",
|
||||
"stepOne.cancel": "Cancel",
|
||||
"stepOne.connect": "Go to connect",
|
||||
"stepOne.dataSourceType.file": "Import from file",
|
||||
"stepOne.dataSourceType.notion": "Sync from Notion",
|
||||
@ -32,7 +22,6 @@
|
||||
"stepOne.uploader.browse": "Browse",
|
||||
"stepOne.uploader.button": "Drag and drop file or folder, or",
|
||||
"stepOne.uploader.buttonSingleFile": "Drag and drop file, or",
|
||||
"stepOne.uploader.cancel": "Cancel",
|
||||
"stepOne.uploader.change": "Change",
|
||||
"stepOne.uploader.failed": "Upload failed",
|
||||
"stepOne.uploader.tip": "Supports {{supportTypes}}. Max {{batchCount}} in a batch and {{size}} MB each.",
|
||||
@ -57,7 +46,6 @@
|
||||
"stepOne.website.firecrawlTitle": "Extract web content with 🔥Firecrawl",
|
||||
"stepOne.website.includeOnlyPaths": "Include only paths",
|
||||
"stepOne.website.jinaReaderDoc": "Learn more about Jina Reader",
|
||||
"stepOne.website.jinaReaderDocLink": "https://jina.ai/reader",
|
||||
"stepOne.website.jinaReaderNotConfigured": "Jina Reader is not configured",
|
||||
"stepOne.website.jinaReaderNotConfiguredDescription": "Set up Jina Reader by entering your free API key for access.",
|
||||
"stepOne.website.jinaReaderTitle": "Convert the entire site to Markdown",
|
||||
@ -85,34 +73,15 @@
|
||||
"stepThree.creationContent": "We automatically named the Knowledge, you can modify it at any time.",
|
||||
"stepThree.creationTitle": "🎉 Knowledge created",
|
||||
"stepThree.label": "Knowledge name",
|
||||
"stepThree.modelButtonCancel": "Cancel",
|
||||
"stepThree.modelButtonConfirm": "Confirm",
|
||||
"stepThree.modelContent": "If you need to resume processing later, you will continue from where you left off.",
|
||||
"stepThree.modelTitle": "Are you sure to stop embedding?",
|
||||
"stepThree.navTo": "Go to document",
|
||||
"stepThree.resume": "Resume processing",
|
||||
"stepThree.sideTipContent": "After finishing document indexing, you can manage and edit documents, run retrieval tests, and modify knowledge settings. Knowledge can then be integrated into your application as context, so make sure to adjust the Retrieval Setting to ensure optimal performance.",
|
||||
"stepThree.sideTipTitle": "What's next",
|
||||
"stepThree.stop": "Stop processing",
|
||||
"stepTwo.QALanguage": "Segment using",
|
||||
"stepTwo.QATip": "Enable this option will consume more tokens",
|
||||
"stepTwo.QATitle": "Segmenting in Question & Answer format",
|
||||
"stepTwo.auto": "Automatic",
|
||||
"stepTwo.autoDescription": "Automatically set chunk and preprocessing rules. Unfamiliar users are recommended to select this.",
|
||||
"stepTwo.calculating": "Calculating...",
|
||||
"stepTwo.cancel": "Cancel",
|
||||
"stepTwo.characters": "characters",
|
||||
"stepTwo.childChunkForRetrieval": "Child-chunk for Retrieval",
|
||||
"stepTwo.click": "Go to settings",
|
||||
"stepTwo.custom": "Custom",
|
||||
"stepTwo.customDescription": "Customize chunks rules, chunks length, and preprocessing rules, etc.",
|
||||
"stepTwo.datasetSettingLink": "Knowledge settings.",
|
||||
"stepTwo.economical": "Economical",
|
||||
"stepTwo.economicalTip": "Using 10 keywords per chunk for retrieval, no tokens are consumed at the expense of reduced retrieval accuracy.",
|
||||
"stepTwo.estimateCost": "Estimation",
|
||||
"stepTwo.estimateSegment": "Estimated chunks",
|
||||
"stepTwo.fileSource": "Preprocess documents",
|
||||
"stepTwo.fileUnit": " files",
|
||||
"stepTwo.fullDoc": "Full Doc",
|
||||
"stepTwo.fullDocTip": "The entire document is used as the parent chunk and retrieved directly. Please note that for performance reasons, text exceeding 10000 tokens will be automatically truncated.",
|
||||
"stepTwo.general": "General",
|
||||
@ -125,9 +94,6 @@
|
||||
"stepTwo.nextStep": "Save & Process",
|
||||
"stepTwo.notAvailableForParentChild": "Not available for Parent-child Index",
|
||||
"stepTwo.notAvailableForQA": "Not available for Q&A Index",
|
||||
"stepTwo.notionSource": "Preprocess pages",
|
||||
"stepTwo.notionUnit": " pages",
|
||||
"stepTwo.other": "and other ",
|
||||
"stepTwo.overlap": "Chunk overlap",
|
||||
"stepTwo.overlapCheck": "chunk overlap should not bigger than maximum chunk length",
|
||||
"stepTwo.overlapTip": "Setting the chunk overlap can maintain the semantic relevance between them, enhancing the retrieve effect. It is recommended to set 10%-25% of the maximum chunk size.",
|
||||
@ -139,14 +105,9 @@
|
||||
"stepTwo.parentChildTip": "When using the parent-child mode, the child-chunk is used for retrieval and the parent-chunk is used for recall as context.",
|
||||
"stepTwo.parentChunkForContext": "Parent-chunk for Context",
|
||||
"stepTwo.preview": "Preview",
|
||||
"stepTwo.previewButton": "Switching to Q&A format",
|
||||
"stepTwo.previewChunk": "Preview Chunk",
|
||||
"stepTwo.previewChunkCount": "{{count}} Estimated chunks",
|
||||
"stepTwo.previewChunkTip": "Click the 'Preview Chunk' button on the left to load the preview",
|
||||
"stepTwo.previewSwitchTipEnd": " consume additional tokens",
|
||||
"stepTwo.previewSwitchTipStart": "The current chunk preview is in text format, switching to a question-and-answer format preview will",
|
||||
"stepTwo.previewTitle": "Preview",
|
||||
"stepTwo.previewTitleButton": "Preview",
|
||||
"stepTwo.previousStep": "Previous step",
|
||||
"stepTwo.qaSwitchHighQualityTipContent": "Currently, only high-quality index method supports Q&A format chunking. Would you like to switch to high-quality mode?",
|
||||
"stepTwo.qaSwitchHighQualityTipTitle": "Q&A Format Requires High-quality Indexing Method",
|
||||
@ -158,29 +119,16 @@
|
||||
"stepTwo.removeStopwords": "Remove stopwords such as \"a\", \"an\", \"the\"",
|
||||
"stepTwo.removeUrlEmails": "Delete all URLs and email addresses",
|
||||
"stepTwo.reset": "Reset",
|
||||
"stepTwo.retrievalSettingTip": "To change the retrieval setting, please go to the ",
|
||||
"stepTwo.rules": "Text Pre-processing Rules",
|
||||
"stepTwo.save": "Save & Process",
|
||||
"stepTwo.segmentCount": "chunks",
|
||||
"stepTwo.segmentation": "Chunk Settings",
|
||||
"stepTwo.separator": "Delimiter",
|
||||
"stepTwo.separatorPlaceholder": "\\n\\n for paragraphs; \\n for lines",
|
||||
"stepTwo.separatorTip": "A delimiter is the character used to separate text. \\n\\n and \\n are commonly used delimiters for separating paragraphs and lines. Combined with commas (\\n\\n,\\n), paragraphs will be segmented by lines when exceeding the maximum chunk length. You can also use special delimiters defined by yourself (e.g. ***).",
|
||||
"stepTwo.sideTipP1": "When processing text data, chunk and cleaning are two important preprocessing steps.",
|
||||
"stepTwo.sideTipP2": "Segmentation splits long text into paragraphs so models can understand better. This improves the quality and relevance of model results.",
|
||||
"stepTwo.sideTipP3": "Cleaning removes unnecessary characters and formats, making Knowledge cleaner and easier to parse.",
|
||||
"stepTwo.sideTipP4": "Proper chunk and cleaning improve model performance, providing more accurate and valuable results.",
|
||||
"stepTwo.sideTipTitle": "Why chunk and preprocess?",
|
||||
"stepTwo.switch": "Switch",
|
||||
"stepTwo.useQALanguage": "Chunk using Q&A format in",
|
||||
"stepTwo.warning": "Please set up the model provider API key first.",
|
||||
"stepTwo.webpageUnit": " pages",
|
||||
"stepTwo.websiteSource": "Preprocess website",
|
||||
"steps.header.fallbackRoute": "Knowledge",
|
||||
"steps.one": "Data Source",
|
||||
"steps.three": "Execute & Finish",
|
||||
"steps.two": "Document Processing",
|
||||
"watercrawl.apiKeyPlaceholder": "API key from watercrawl.dev",
|
||||
"watercrawl.configWatercrawl": "Configure Watercrawl",
|
||||
"watercrawl.getApiKeyLinkText": "Get your API key from watercrawl.dev"
|
||||
"steps.two": "Document Processing"
|
||||
}
|
||||
|
||||
@ -1,27 +1,19 @@
|
||||
{
|
||||
"embedding.automatic": "Automatic",
|
||||
"embedding.childMaxTokens": "Child",
|
||||
"embedding.completed": "Embedding completed",
|
||||
"embedding.custom": "Custom",
|
||||
"embedding.docName": "Preprocessing document",
|
||||
"embedding.economy": "Economy mode",
|
||||
"embedding.error": "Embedding error",
|
||||
"embedding.estimate": "Estimated consumption",
|
||||
"embedding.hierarchical": "Parent-child",
|
||||
"embedding.highQuality": "High-quality mode",
|
||||
"embedding.mode": "Chunking Setting",
|
||||
"embedding.parentMaxTokens": "Parent",
|
||||
"embedding.pause": "Pause",
|
||||
"embedding.paused": "Embedding paused",
|
||||
"embedding.previewTip": "Paragraph preview will be available after embedding is complete",
|
||||
"embedding.processing": "Embedding processing...",
|
||||
"embedding.resume": "Resume",
|
||||
"embedding.segmentLength": "Maximum Chunk Length",
|
||||
"embedding.segments": "Paragraphs",
|
||||
"embedding.stop": "Stop processing",
|
||||
"embedding.textCleaning": "Text Preprocessing Rules",
|
||||
"embedding.waiting": "Embedding waiting...",
|
||||
"list.action.add": "Add a chunk",
|
||||
"list.action.addButton": "Add chunk",
|
||||
"list.action.archive": "Archive",
|
||||
"list.action.batchAdd": "Batch add",
|
||||
@ -34,7 +26,6 @@
|
||||
"list.action.summary": "Generate summary",
|
||||
"list.action.sync": "Sync",
|
||||
"list.action.unarchive": "Unarchive",
|
||||
"list.action.uploadFile": "Upload new file",
|
||||
"list.addFile": "Add file",
|
||||
"list.addPages": "Add Pages",
|
||||
"list.addUrl": "Add URL",
|
||||
@ -52,7 +43,6 @@
|
||||
"list.batchModal.run": "Run Batch",
|
||||
"list.batchModal.runError": "Run batch failed",
|
||||
"list.batchModal.template": "Download the template here",
|
||||
"list.batchModal.tip": "The CSV file must conform to the following structure:",
|
||||
"list.batchModal.title": "Batch add chunks",
|
||||
"list.delete.content": "If you need to resume processing later, you will continue from where you left off",
|
||||
"list.delete.title": "Are you sure Delete?",
|
||||
@ -61,10 +51,6 @@
|
||||
"list.empty.title": "There is no documentation yet",
|
||||
"list.empty.upload.tip": "You can upload files, sync from the website, or from web apps like Notion, GitHub, etc.",
|
||||
"list.index.all": "All",
|
||||
"list.index.disable": "Disable",
|
||||
"list.index.disableTip": "The file cannot be indexed",
|
||||
"list.index.enable": "Enable",
|
||||
"list.index.enableTip": "The file can be indexed",
|
||||
"list.learnMore": "Learn more",
|
||||
"list.sort.hitCount": "Retrieval Count",
|
||||
"list.sort.uploadTime": "Upload Time",
|
||||
@ -78,7 +64,6 @@
|
||||
"list.status.queuing": "Queuing",
|
||||
"list.summary.generating": "Generating...",
|
||||
"list.summary.generatingSummary": "Generating summary",
|
||||
"list.summary.ready": "Summary ready",
|
||||
"list.table.header.action": "ACTION",
|
||||
"list.table.header.chunkingMode": "CHUNKING MODE",
|
||||
"list.table.header.fileName": "NAME",
|
||||
@ -89,61 +74,7 @@
|
||||
"list.table.name": "Name",
|
||||
"list.table.rename": "Rename",
|
||||
"list.title": "Documents",
|
||||
"metadata.categoryMap.book.art": "Art",
|
||||
"metadata.categoryMap.book.biography": "Biography",
|
||||
"metadata.categoryMap.book.businessEconomics": "BusinessEconomics",
|
||||
"metadata.categoryMap.book.childrenYoungAdults": "ChildrenYoungAdults",
|
||||
"metadata.categoryMap.book.comicsGraphicNovels": "ComicsGraphicNovels",
|
||||
"metadata.categoryMap.book.cooking": "Cooking",
|
||||
"metadata.categoryMap.book.drama": "Drama",
|
||||
"metadata.categoryMap.book.education": "Education",
|
||||
"metadata.categoryMap.book.fiction": "Fiction",
|
||||
"metadata.categoryMap.book.health": "Health",
|
||||
"metadata.categoryMap.book.history": "History",
|
||||
"metadata.categoryMap.book.other": "Other",
|
||||
"metadata.categoryMap.book.philosophy": "Philosophy",
|
||||
"metadata.categoryMap.book.poetry": "Poetry",
|
||||
"metadata.categoryMap.book.religion": "Religion",
|
||||
"metadata.categoryMap.book.science": "Science",
|
||||
"metadata.categoryMap.book.selfHelp": "SelfHelp",
|
||||
"metadata.categoryMap.book.socialSciences": "SocialSciences",
|
||||
"metadata.categoryMap.book.technology": "Technology",
|
||||
"metadata.categoryMap.book.travel": "Travel",
|
||||
"metadata.categoryMap.businessDoc.contractsAgreements": "Contracts & Agreements",
|
||||
"metadata.categoryMap.businessDoc.designDocument": "Design Document",
|
||||
"metadata.categoryMap.businessDoc.emailCorrespondence": "Email Correspondence",
|
||||
"metadata.categoryMap.businessDoc.employeeHandbook": "Employee Handbook",
|
||||
"metadata.categoryMap.businessDoc.financialReport": "Financial Report",
|
||||
"metadata.categoryMap.businessDoc.marketAnalysis": "Market Analysis",
|
||||
"metadata.categoryMap.businessDoc.meetingMinutes": "Meeting Minutes",
|
||||
"metadata.categoryMap.businessDoc.other": "Other",
|
||||
"metadata.categoryMap.businessDoc.policiesProcedures": "Policies & Procedures",
|
||||
"metadata.categoryMap.businessDoc.productSpecification": "Product Specification",
|
||||
"metadata.categoryMap.businessDoc.projectPlan": "Project Plan",
|
||||
"metadata.categoryMap.businessDoc.proposal": "Proposal",
|
||||
"metadata.categoryMap.businessDoc.requirementsDocument": "Requirements Document",
|
||||
"metadata.categoryMap.businessDoc.researchReport": "Research Report",
|
||||
"metadata.categoryMap.businessDoc.teamStructure": "Team Structure",
|
||||
"metadata.categoryMap.businessDoc.trainingMaterials": "Training Materials",
|
||||
"metadata.categoryMap.personalDoc.blogDraft": "Blog Draft",
|
||||
"metadata.categoryMap.personalDoc.bookExcerpt": "Book Excerpt",
|
||||
"metadata.categoryMap.personalDoc.codeSnippet": "Code Snippet",
|
||||
"metadata.categoryMap.personalDoc.creativeWriting": "Creative Writing",
|
||||
"metadata.categoryMap.personalDoc.designDraft": "Design Draft",
|
||||
"metadata.categoryMap.personalDoc.diary": "Diary",
|
||||
"metadata.categoryMap.personalDoc.list": "List",
|
||||
"metadata.categoryMap.personalDoc.notes": "Notes",
|
||||
"metadata.categoryMap.personalDoc.other": "Other",
|
||||
"metadata.categoryMap.personalDoc.personalResume": "Personal Resume",
|
||||
"metadata.categoryMap.personalDoc.photoCollection": "Photo Collection",
|
||||
"metadata.categoryMap.personalDoc.projectOverview": "Project Overview",
|
||||
"metadata.categoryMap.personalDoc.researchReport": "Research Report",
|
||||
"metadata.categoryMap.personalDoc.schedule": "Schedule",
|
||||
"metadata.dateTimeFormat": "MMMM D, YYYY hh:mm A",
|
||||
"metadata.desc": "Labeling metadata for documents allows AI to access them in a timely manner and exposes the source of references for users.",
|
||||
"metadata.docTypeChangeTitle": "Change document type",
|
||||
"metadata.docTypeSelectTitle": "Please select a document type",
|
||||
"metadata.docTypeSelectWarning": "If the document type is changed, the now filled metadata will no longer be preserved",
|
||||
"metadata.field.IMChat.chatPartiesGroupName": "Chat Parties/Group Name",
|
||||
"metadata.field.IMChat.chatPlatform": "Chat Platform",
|
||||
"metadata.field.IMChat.endDate": "End Date",
|
||||
@ -202,10 +133,6 @@
|
||||
"metadata.field.personalDocument.lastModifiedDate": "Last Modified Date",
|
||||
"metadata.field.personalDocument.tagsCategory": "Tags/Category",
|
||||
"metadata.field.personalDocument.title": "Title",
|
||||
"metadata.field.processRule.processClean": "Text Process Clean",
|
||||
"metadata.field.processRule.processDoc": "Process Document",
|
||||
"metadata.field.processRule.segmentLength": "Chunks Length",
|
||||
"metadata.field.processRule.segmentRule": "Chunk Rule",
|
||||
"metadata.field.socialMediaPost.authorUsername": "Author/Username",
|
||||
"metadata.field.socialMediaPost.platform": "Platform",
|
||||
"metadata.field.socialMediaPost.postURL": "Post URL",
|
||||
@ -231,7 +158,6 @@
|
||||
"metadata.field.wikipediaEntry.summaryIntroduction": "Summary/Introduction",
|
||||
"metadata.field.wikipediaEntry.title": "Title",
|
||||
"metadata.field.wikipediaEntry.webpageURL": "Webpage URL",
|
||||
"metadata.firstMetaAction": "Let's go",
|
||||
"metadata.languageMap.ar": "Arabic",
|
||||
"metadata.languageMap.cs": "Czech",
|
||||
"metadata.languageMap.da": "Danish",
|
||||
@ -304,7 +230,6 @@
|
||||
"segment.delete": "Delete this chunk ?",
|
||||
"segment.editChildChunk": "Edit Child Chunk",
|
||||
"segment.editChunk": "Edit Chunk",
|
||||
"segment.editParentChunk": "Edit Parent Chunk",
|
||||
"segment.edited": "EDITED",
|
||||
"segment.editedAt": "Edited at",
|
||||
"segment.empty": "No Chunk found",
|
||||
@ -316,9 +241,6 @@
|
||||
"segment.keywords": "KEYWORDS",
|
||||
"segment.newChildChunk": "New Child Chunk",
|
||||
"segment.newChunk": "New Chunk",
|
||||
"segment.newQaSegment": "New Q&A Segment",
|
||||
"segment.newTextSegment": "New Text Segment",
|
||||
"segment.paragraphs": "Paragraphs",
|
||||
"segment.parentChunk": "Parent-Chunk",
|
||||
"segment.parentChunks_one": "PARENT CHUNK",
|
||||
"segment.parentChunks_other": "PARENT CHUNKS",
|
||||
@ -334,6 +256,5 @@
|
||||
"segment.searchResults_other": "RESULTS",
|
||||
"segment.searchResults_zero": "RESULT",
|
||||
"segment.summary": "SUMMARY",
|
||||
"segment.summaryPlaceholder": "Write a brief summary for better retrieval…",
|
||||
"segment.vectorHash": "Vector hash: "
|
||||
"segment.summaryPlaceholder": "Write a brief summary for better retrieval…"
|
||||
}
|
||||
|
||||
@ -10,7 +10,6 @@
|
||||
"imageUploader.tip": "Upload or drop images (Max {{batchCount}}, {{size}}MB each)",
|
||||
"imageUploader.tooltip": "Upload images (Max {{batchCount}}, {{size}}MB each)",
|
||||
"input.countWarning": "Up to 200 characters.",
|
||||
"input.indexWarning": "High quality Knowledge only.",
|
||||
"input.placeholder": "Please enter a text, a short declarative sentence is recommended.",
|
||||
"input.testing": "Test",
|
||||
"input.title": "Source text",
|
||||
@ -22,7 +21,5 @@
|
||||
"table.header.queryContent": "Query Content",
|
||||
"table.header.source": "Source",
|
||||
"table.header.time": "Time",
|
||||
"title": "Retrieval Test",
|
||||
"viewChart": "View VECTOR CHART",
|
||||
"viewDetail": "View Detail"
|
||||
"title": "Retrieval Test"
|
||||
}
|
||||
|
||||
Some files were not shown because too many files have changed in this diff Show More
Reference in New Issue
Block a user