feat(i18n): localize backend messages by workspace language

This commit is contained in:
Hyu
2026-10-15 05:31:04 +00:00
committed by RockChinQ
parent b1d9484876
commit e29fd27f02
74 changed files with 2296 additions and 177 deletions
+4 -2
View File
@@ -1,5 +1,7 @@
from __future__ import annotations
from ....i18n import t
from contextlib import aclosing
import datetime
@@ -432,7 +434,7 @@ class AgentService:
pipeline_uuid = await self.ap.pipeline_service.create_pipeline(
context,
{
'name': agent_data.get('name') or 'New Pipeline',
'name': agent_data.get('name') or t('New Pipeline'),
'description': agent_data.get('description') or '',
'emoji': agent_data.get('emoji') or '⚙️',
'config': {},
@@ -461,7 +463,7 @@ class AgentService:
values = {
'workspace_uuid': workspace_uuid,
'uuid': new_uuid,
'name': agent_data.get('name') or 'New Agent',
'name': agent_data.get('name') or t('New Agent'),
'description': agent_data.get('description') or '',
'emoji': agent_data.get('emoji') or ('🧩' if kind == AGENT_KIND_EVENT_PROCESSOR else '🤖'),
'kind': kind,
@@ -1,5 +1,7 @@
from __future__ import annotations
from ....i18n import t
import sqlalchemy
from ....api.http.authz import WorkspaceRequiredError
@@ -63,7 +65,13 @@ class KnowledgeService:
if max_knowledge_bases >= 0:
knowledge_bases = await self.ap.rag_mgr.get_all_knowledge_base_details(context)
if len(knowledge_bases) >= max_knowledge_bases:
raise ValueError(f'Maximum number of knowledge bases ({max_knowledge_bases}) reached')
raise ValueError(
t(
'Maximum number of {resource} ({limit}) reached',
resource=t('knowledge bases'),
limit=max_knowledge_bases,
)
)
knowledge_engine_plugin_id = kb_data.get('knowledge_engine_plugin_id')
if not knowledge_engine_plugin_id:
+7 -3
View File
@@ -1,5 +1,7 @@
from __future__ import annotations
from ....i18n import t
import copy
import re
import uuid
@@ -228,7 +230,9 @@ class MCPService:
.where(persistence_plugin.PluginSetting.workspace_uuid == workspace_uuid)
)
if (mcp_count_result.scalar() or 0) + (plugin_count_result.scalar() or 0) >= max_extensions:
raise ValueError(f'Maximum number of extensions ({max_extensions}) reached')
raise ValueError(
t('Maximum number of {resource} ({limit}) reached', resource=t('extensions'), limit=max_extensions)
)
payload = dict(server_data)
payload.pop('workspace_uuid', None)
@@ -246,7 +250,7 @@ class MCPService:
)
)
if existing_result.first() is not None:
raise ValueError(f'MCP server already exists: {server_name}')
raise ValueError(t('MCP server already exists: {name}', name=server_name))
await self.ap.persistence_mgr.execute_async(sqlalchemy.insert(persistence_mcp.MCPServer).values(payload))
created = await self._get_mcp_server_by_uuid_raw(execution_context, payload['uuid'])
@@ -332,7 +336,7 @@ class MCPService:
raise ValueError('MCP server name is required')
duplicate = await self._get_mcp_server_by_name_raw(execution_context, payload['name'])
if duplicate is not None and duplicate['uuid'] != server_uuid:
raise ValueError(f'MCP server already exists: {payload["name"]}')
raise ValueError(t('MCP server already exists: {name}', name=payload['name']))
effective_server = {**old_server, **payload}
# Existing disabled rows remain readable/deletable. Switching away
+9 -1
View File
@@ -1,5 +1,7 @@
from __future__ import annotations
from ....i18n import t
import uuid
import sqlalchemy
@@ -146,7 +148,13 @@ async def _validate_provider_supports(
if not support_type:
return
if model_type not in support_type:
raise ValueError(f'Provider requester "{requester_name}" does not support {model_type} models')
raise ValueError(
t(
'Provider {provider} does not support {model_type} models',
provider=requester_name,
model_type=model_type,
)
)
async def _require_workspace_provider(
+4 -2
View File
@@ -1,5 +1,7 @@
from __future__ import annotations
from ....i18n import t
import sqlalchemy
import argon2
import jwt
@@ -423,12 +425,12 @@ class UserService:
user_obj = await self.get_user_by_email(user_email)
if user_obj is None:
raise ValueError('用户不存在')
raise ValueError(t('Resource not found'))
self._require_active_account(user_obj)
# Check if this user has a local password set
if not user_obj.password:
raise ValueError('请使用 LangBot 账号登录')
raise ValueError(t('Please sign in with your LangBot Account'))
await self._verify_password(user_obj.password, password)