diff --git a/src/pages/AiProvidersPage.tsx b/src/pages/AiProvidersPage.tsx index 18097e6..df27cb4 100644 --- a/src/pages/AiProvidersPage.tsx +++ b/src/pages/AiProvidersPage.tsx @@ -1216,6 +1216,8 @@ export function AiProvidersPage() { onEdit: (index: number) => void, onDelete: (item: T) => void, addLabel: string, + emptyTitle: string, + emptyDescription: string, deleteLabel?: string, options?: { getRowDisabled?: (item: T, index: number) => boolean; @@ -1229,8 +1231,8 @@ export function AiProvidersPage() { if (!items.length) { return ( onEdit(-1)} disabled={disableControls}> {addLabel} @@ -1381,6 +1383,8 @@ export function AiProvidersPage() { (index) => openGeminiModal(index), (item) => deleteGemini(item.apiKey), t('ai_providers.gemini_add_button'), + t('ai_providers.gemini_empty_title'), + t('ai_providers.gemini_empty_desc'), undefined, { getRowDisabled: (item) => hasDisableAllModelsRule(item.excludedModels), @@ -1499,6 +1503,8 @@ export function AiProvidersPage() { (index) => openProviderModal('codex', index), (item) => deleteProviderEntry('codex', item.apiKey), t('ai_providers.codex_add_button'), + t('ai_providers.codex_empty_title'), + t('ai_providers.codex_empty_desc'), undefined, { getRowDisabled: (item) => hasDisableAllModelsRule(item.excludedModels), @@ -1633,6 +1639,8 @@ export function AiProvidersPage() { (index) => openProviderModal('claude', index), (item) => deleteProviderEntry('claude', item.apiKey), t('ai_providers.claude_add_button'), + t('ai_providers.claude_empty_title'), + t('ai_providers.claude_empty_desc'), undefined, { getRowDisabled: (item) => hasDisableAllModelsRule(item.excludedModels), @@ -1853,7 +1861,9 @@ export function AiProvidersPage() { }, (index) => openOpenaiModal(index), (item) => deleteOpenai(item.name), - t('ai_providers.openai_add_button') + t('ai_providers.openai_add_button'), + t('ai_providers.openai_empty_title'), + t('ai_providers.openai_empty_desc') )} diff --git a/src/pages/OAuthPage.tsx b/src/pages/OAuthPage.tsx index 172b823..9e35a58 100644 --- a/src/pages/OAuthPage.tsx +++ b/src/pages/OAuthPage.tsx @@ -64,6 +64,9 @@ const PROVIDERS: { id: OAuthProvider; titleKey: string; hintKey: string; urlLabe ]; const CALLBACK_SUPPORTED: OAuthProvider[] = ['codex', 'anthropic', 'antigravity', 'gemini-cli', 'iflow']; +const getProviderI18nPrefix = (provider: OAuthProvider) => provider.replace('-', '_'); +const getAuthKey = (provider: OAuthProvider, suffix: string) => + `auth_login.${getProviderI18nPrefix(provider)}_${suffix}`; const getIcon = (icon: string | { light: string; dark: string }, theme: 'light' | 'dark') => { return typeof icon === 'string' ? icon : icon[theme]; @@ -105,12 +108,15 @@ export function OAuthPage() { const res = await oauthApi.getAuthStatus(state); if (res.status === 'ok') { updateProviderState(provider, { status: 'success', polling: false }); - showNotification(t('auth_login.codex_oauth_status_success'), 'success'); + showNotification(t(getAuthKey(provider, 'oauth_status_success')), 'success'); window.clearInterval(timer); delete timers.current[provider]; } else if (res.status === 'error') { updateProviderState(provider, { status: 'error', error: res.error, polling: false }); - showNotification(`${t('auth_login.codex_oauth_status_error')} ${res.error || ''}`, 'error'); + showNotification( + `${t(getAuthKey(provider, 'oauth_status_error'))} ${res.error || ''}`, + 'error' + ); window.clearInterval(timer); delete timers.current[provider]; } @@ -153,7 +159,7 @@ export function OAuthPage() { } } catch (err: any) { updateProviderState(provider, { status: 'error', error: err?.message, polling: false }); - showNotification(`${t('auth_login.codex_oauth_start_error')} ${err?.message || ''}`, 'error'); + showNotification(`${t(getAuthKey(provider, 'oauth_start_error'))} ${err?.message || ''}`, 'error'); } }; @@ -347,14 +353,14 @@ export function OAuthPage() {
{state.url}
@@ -399,10 +405,10 @@ export function OAuthPage() { {state.status && state.status !== 'idle' && (
{state.status === 'success' - ? t('auth_login.codex_oauth_status_success') + ? t(getAuthKey(provider.id, 'oauth_status_success')) : state.status === 'error' - ? `${t('auth_login.codex_oauth_status_error')} ${state.error || ''}` - : t('auth_login.codex_oauth_status_waiting')} + ? `${t(getAuthKey(provider.id, 'oauth_status_error'))} ${state.error || ''}` + : t(getAuthKey(provider.id, 'oauth_status_waiting'))}
)}