+ {/* User filter dropdown */}
+
+ {/* Loading skeleton */}
+ {allSessionsLoading && (
+
)}
@@ -4280,7 +4188,7 @@ function AgentDetailInner() {
{sessionListCollapsed && (
-
@@ -4862,11 +4770,11 @@ function AgentDetailInner() {
)}
{/* History */}
- {isChinese ? '审批历史' : 'History'}
+ {t('agent.settings.approvals.history')}
{resolved.length === 0 && pending.length === 0 && (
- {isChinese ? '暂无审批记录' : 'No approval records'}
+ {t('agent.settings.approvals.noRecords')}
)}
{resolved.map((a: any) => (
@@ -5104,19 +5012,16 @@ function AgentDetailInner() {
{/* Trigger Limits — native agents only */}
{(agent as any)?.agent_type !== 'openclaw' && (() => {
- const isChinese = i18n.language?.startsWith('zh');
return (
-
{isChinese ? '触发器限制' : 'Trigger Limits'}
+
{t('agent.settings.triggerLimits.title')}
- {isChinese
- ? '控制该 Agent 可以创建的触发器数量和行为限制'
- : 'Limit how many triggers this agent can create and their behavior'}
+ {t('agent.settings.triggerLimits.description', 'Limit how many triggers this agent can create and their behavior')}
@@ -5177,7 +5082,6 @@ function AgentDetailInner() {
{/* Welcome Message */}
{(() => {
- const isChinese = i18n.language?.startsWith('zh');
const saveWm = async () => {
try {
await agentApi.update(id!, { welcome_message: wmDraft } as any);
@@ -5189,13 +5093,11 @@ function AgentDetailInner() {
return (
-
{isChinese ? '欢迎语' : 'Welcome Message'}
- {wmSaved && ✓ {isChinese ? '已保存' : 'Saved'}}
+ {t('agent.settings.welcomeMessage.title')}
+ {wmSaved && ✓ {t('agent.settings.welcomeMessage.saved')}}
- {isChinese
- ? '当用户在网页端发起新对话时,Agent 会自动发送的欢迎语。支持 Markdown 语法。留空则不发送。'
- : 'Greeting message sent automatically when a user starts a new web conversation. Supports Markdown. Leave empty to disable.'}
+ {t('agent.settings.welcomeMessage.description', 'Greeting message sent automatically when a user starts a new web conversation. Supports Markdown. Leave empty to disable.')}
@@ -5745,16 +5647,16 @@ class AgentDetailErrorBoundary extends Component<{ children: React.ReactNode },
if (this.state.hasError) {
return (
-
Something went wrong
+
{i18n.t('agent.tools.somethingWentWrong')}
- {this.state.error?.message || 'An unexpected error occurred while loading this page.'}
+ {this.state.error?.message || i18n.t('agent.tools.unexpectedError')}
{ this.setState({ hasError: false, error: null }); window.location.reload(); }}
style={{ marginTop: '8px' }}
>
- Reload Page
+ {i18n.t('agent.tools.reloadPage')}
);
diff --git a/frontend/src/pages/EnterpriseSettings.tsx b/frontend/src/pages/EnterpriseSettings.tsx
index 666b829d..c9cc51d3 100644
--- a/frontend/src/pages/EnterpriseSettings.tsx
+++ b/frontend/src/pages/EnterpriseSettings.tsx
@@ -234,8 +234,8 @@ function SsoChannelSection({ idpType, existingProvider, tenant, t }: {
style={{ fontSize: '11px', width: 'auto', minWidth: '70px', height: '33px' }}
disabled={!domain}
textToCopy={domain ? (domain.startsWith('http') ? domain : `https://${domain}`) : ''}
- label={t('common.copy', 'Copy')}
- copiedLabel="Copied"
+ label={t('common.copy')}
+ copiedLabel={t('common.copied')}
/>
@@ -267,8 +267,8 @@ function SsoChannelSection({ idpType, existingProvider, tenant, t }: {
style={{ fontSize: '11px', width: 'auto', minWidth: '70px', height: '33px' }}
disabled={!callbackUrl}
textToCopy={callbackUrl}
- label={t('common.copy', 'Copy')}
- copiedLabel="Copied"
+ label={t('common.copy')}
+ copiedLabel={t('common.copied')}
/>
@@ -536,10 +536,10 @@ function OrgTab({ tenant }: { tenant: any }) {
};
const IDP_TYPES = [
- { type: 'feishu', name: 'Feishu', desc: 'Feishu / Lark Integration', icon:

},
- { type: 'wecom', name: 'WeCom', desc: 'WeChat Work Integration', icon:

},
- { type: 'dingtalk', name: 'DingTalk', desc: 'DingTalk App Integration', icon:

},
- { type: 'oauth2', name: 'OAuth2', desc: 'Generic OIDC Provider', icon:
O
}
+ { type: 'feishu', name: t('enterprise.identity.providers.feishu.name', 'Feishu'), desc: t('enterprise.identity.providers.feishu.desc', 'Feishu / Lark Integration'), icon:

},
+ { type: 'wecom', name: t('enterprise.identity.providers.wecom.name', 'WeCom'), desc: t('enterprise.identity.providers.wecom.desc', 'WeChat Work Integration'), icon:

},
+ { type: 'dingtalk', name: t('enterprise.identity.providers.dingtalk.name', 'DingTalk'), desc: t('enterprise.identity.providers.dingtalk.desc', 'DingTalk App Integration'), icon:

},
+ { type: 'oauth2', name: t('enterprise.identity.providers.oauth2.name', 'OAuth2'), desc: t('enterprise.identity.providers.oauth2.desc', 'Generic OIDC Provider'), icon:
O
}
];
const handleExpand = (type: string, existingProvider?: any) => {
@@ -597,8 +597,8 @@ function OrgTab({ tenant }: { tenant: any }) {
className="btn btn-ghost"
style={{ position: 'absolute', top: '8px', right: '8px', fontSize: '10px', color: '#abb2bf', padding: '4px 8px', background: 'rgba(255,255,255,0.1)', cursor: 'pointer', border: 'none', borderRadius: '4px', height: 'fit-content', minWidth: '60px' }}
textToCopy={FEISHU_SYNC_PERM_JSON}
- label="Copy"
- copiedLabel="Copied✓"
+ label={t('common.copy')}
+ copiedLabel={t('common.copied') + '✓'}
/>
{FEISHU_SYNC_PERM_JSON}
@@ -642,15 +642,15 @@ function OrgTab({ tenant }: { tenant: any }) {
{type === 'oauth2' ? (
@@ -662,24 +662,24 @@ function OrgTab({ tenant }: { tenant: any }) {