From 947a939340b01400014c72a339fe6d9471d1f9ff Mon Sep 17 00:00:00 2001 From: xxiaoxiong <2482929840@qq.com> Date: Tue, 26 May 2026 22:29:59 +0800 Subject: [PATCH] feat(i18n): Localize XaiOAuthControl component strings - Add 28 new i18n keys to types.ts under settings.xaiOAuth* namespace - Add English translations to en.ts - Add Chinese translations to zh-CN.ts - Add English placeholders to 17 other locale files (ar, de, es-ES, fa, fr, hu, id, it, ja, ko, pl, pt-BR, ru, th, tr, uk, zh-TW) - Update XaiOAuthControl.tsx to use useT() hook and i18n keys - Remove TODO(i18n) comment from XaiOAuthControl.tsx All user-facing strings in the xAI OAuth control are now localizable. Native speakers can provide proper translations for their languages. Closes #3016 --- apps/web/src/components/XaiOAuthControl.tsx | 64 +++++++++------------ apps/web/src/i18n/locales/ar.ts | 30 ++++++++++ apps/web/src/i18n/locales/de.ts | 30 ++++++++++ apps/web/src/i18n/locales/en.ts | 30 ++++++++++ apps/web/src/i18n/locales/es-ES.ts | 30 ++++++++++ apps/web/src/i18n/locales/fa.ts | 30 ++++++++++ apps/web/src/i18n/locales/fr.ts | 30 ++++++++++ apps/web/src/i18n/locales/hu.ts | 30 ++++++++++ apps/web/src/i18n/locales/id.ts | 30 ++++++++++ apps/web/src/i18n/locales/it.ts | 30 ++++++++++ apps/web/src/i18n/locales/ja.ts | 30 ++++++++++ apps/web/src/i18n/locales/ko.ts | 30 ++++++++++ apps/web/src/i18n/locales/pl.ts | 30 ++++++++++ apps/web/src/i18n/locales/pt-BR.ts | 30 ++++++++++ apps/web/src/i18n/locales/ru.ts | 30 ++++++++++ apps/web/src/i18n/locales/th.ts | 30 ++++++++++ apps/web/src/i18n/locales/tr.ts | 30 ++++++++++ apps/web/src/i18n/locales/uk.ts | 30 ++++++++++ apps/web/src/i18n/locales/zh-CN.ts | 30 ++++++++++ apps/web/src/i18n/locales/zh-TW.ts | 30 ++++++++++ apps/web/src/i18n/types.ts | 30 ++++++++++ 21 files changed, 627 insertions(+), 37 deletions(-) diff --git a/apps/web/src/components/XaiOAuthControl.tsx b/apps/web/src/components/XaiOAuthControl.tsx index a2485ab51..25933e322 100644 --- a/apps/web/src/components/XaiOAuthControl.tsx +++ b/apps/web/src/components/XaiOAuthControl.tsx @@ -8,12 +8,10 @@ // talk to the OD UI directly. Polling /api/xai/auth/status is the only // delivery channel for "auth completed". // -// TODO(i18n): the visible strings are hardcoded English for the PoC; -// migrate to apps/web/src/i18n/types.ts before stable release. - 'use client'; import { useEffect, useRef, useState } from 'react'; +import { useT } from '../i18n'; interface XaiAuthStatus { connected: boolean; @@ -128,6 +126,7 @@ async function completeOAuthManual( } export function XaiOAuthControl() { + const t = useT(); const [status, setStatus] = useState(null); const [busy, setBusy] = useState('idle'); const [error, setError] = useState(null); @@ -299,16 +298,14 @@ export function XaiOAuthControl() { <> - Signed in with X.{' '} + {t('settings.xaiOAuthSignedIn')}{' '} {expiresLabel ? ( - SuperGrok subscription token expires {expiresLabel}. You can - close any open xAI browser tabs now. + {t('settings.xaiOAuthTokenExpiresHint', { date: expiresLabel })} ) : ( - SuperGrok subscription connected. You can close any open xAI - browser tabs now. + {t('settings.xaiOAuthConnectedHint')} )} @@ -317,11 +314,9 @@ export function XaiOAuthControl() { <> - Waiting for authorization…{' '} + {t('settings.xaiOAuthWaitingAuth')}{' '} - Open Design is listening for the callback in the background. - This panel will switch to Signed in within a few - seconds of your approving on xAI. + {t('settings.xaiOAuthWaitingAuthHint')} @@ -329,11 +324,9 @@ export function XaiOAuthControl() { <> - Not signed in.{' '} + {t('settings.xaiOAuthNotSignedIn')}{' '} - Click Sign in with X to use your SuperGrok subscription for - Grok image, video, and TTS in Open Design — no API key - needed. + {t('settings.xaiOAuthNotSignedInHint')} @@ -342,13 +335,10 @@ export function XaiOAuthControl() { {isAwaiting ? (
- Heads up: xAI may show a page that says{' '} - "Cannot connect to your application" (or 「无法建立连接」 - in Chinese). That is a UX bug on xAI's side — the - authorization is still being delivered to Open Design in the - background. Stay on this panel; it will switch to{' '} - Signed in with X automatically. Do not retry from xAI's - page. + {t('settings.xaiOAuthWarningTitle')} xAI may show a page that says{' '} + {t('settings.xaiOAuthWarningCannotConnect')} (or 「无法建立连接」 + in Chinese). {t('settings.xaiOAuthWarningUxBug')} — the + {t('settings.xaiOAuthWarningDetail')}
) : null} @@ -360,18 +350,18 @@ export function XaiOAuthControl() { className="primary" onClick={onConnect} disabled={busy !== 'idle' && busy !== 'refreshing'} - title="Re-authenticate (replaces the existing token)" + title={t('settings.xaiOAuthReauthTitle')} > {busy === 'starting' || busy === 'awaiting' - ? 'Connecting…' - : 'Reconnect'} + ? t('settings.xaiOAuthConnecting') + : t('settings.xaiOAuthReconnect')} ) : ( @@ -382,15 +372,15 @@ export function XaiOAuthControl() { onClick={onConnect} disabled={busy !== 'idle'} > - {busy === 'starting' ? 'Opening browser…' : 'Sign in with X'} + {busy === 'starting' ? t('settings.xaiOAuthOpeningBrowser') : t('settings.xaiOAuthSignIn')} {isAwaiting ? ( <> ) : null} @@ -400,9 +390,9 @@ export function XaiOAuthControl() { {pendingAuthUrl && !connected ? (
- Browser tab didn't open?{' '} + {t('settings.xaiOAuthBrowserNotOpen')}{' '} - Click here to open the authorize URL manually + {t('settings.xaiOAuthOpenManually')} .
@@ -411,13 +401,13 @@ export function XaiOAuthControl() { {isAwaiting && pendingState ? (

- xAI may show a code instead of redirecting back. Paste it here: + {t('settings.xaiOAuthPasteHint')}

setPasteCode(e.target.value)} onKeyDown={(e) => { if (e.key === 'Enter' && pasteCode.trim()) { @@ -425,14 +415,14 @@ export function XaiOAuthControl() { } }} disabled={busy === 'refreshing'} - aria-label="Paste auth code from xAI" + aria-label={t('settings.xaiOAuthPastePlaceholder')} />
@@ -446,7 +436,7 @@ export function XaiOAuthControl() { {status?.scope ? (
- Granted scopes: {status.scope} + {t('settings.xaiOAuthGrantedScopes')} {status.scope}
) : null} diff --git a/apps/web/src/i18n/locales/ar.ts b/apps/web/src/i18n/locales/ar.ts index c99d73bcd..1e82378b8 100644 --- a/apps/web/src/i18n/locales/ar.ts +++ b/apps/web/src/i18n/locales/ar.ts @@ -301,6 +301,36 @@ export const ar: Dict = { 'settings.mediaProviderReloadSuccess': 'تمت إعادة تحميل إعدادات موفري الوسائط من الـ daemon المحلي.', 'settings.mediaProviderLoadError': 'تعذر تحميل إعدادات موفري الوسائط من الـ daemon المحلي. سيُستخدم مؤقتًا ما هو محفوظ في المتصفح.', 'settings.mediaProviderComingSoonHint': 'نحن نتتبع هذه المزودات في خارطة الطريق؛ لم يقم البرنامج الخفي بشحن عميل بعد، لذا لا يوجد شيء لتكوينه.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/de.ts b/apps/web/src/i18n/locales/de.ts index 2fdd71acc..77cf7a547 100644 --- a/apps/web/src/i18n/locales/de.ts +++ b/apps/web/src/i18n/locales/de.ts @@ -301,6 +301,36 @@ export const de: Dict = { 'settings.mediaProviderReloadSuccess': 'Die Einstellungen der Medienanbieter wurden vom lokalen Daemon neu geladen.', 'settings.mediaProviderLoadError': 'Die Einstellungen der Medienanbieter konnten nicht vom lokalen Daemon geladen werden. Vorerst werden die im Browser gespeicherten Einstellungen verwendet.', 'settings.mediaProviderComingSoonHint': 'Wir verfolgen diese für die Roadmap; der Daemon liefert noch keinen Client, daher gibt es nichts zu konfigurieren.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/en.ts b/apps/web/src/i18n/locales/en.ts index 49ac1ba70..74eaafb32 100644 --- a/apps/web/src/i18n/locales/en.ts +++ b/apps/web/src/i18n/locales/en.ts @@ -311,6 +311,36 @@ export const en: Dict = { 'settings.mediaProviderReloadSuccess': 'Reloaded media provider settings from the local daemon.', 'settings.mediaProviderLoadError': 'Could not load media provider settings from the local daemon. Using browser-saved settings for now.', 'settings.mediaProviderComingSoonHint': 'We track these for the roadmap; the daemon doesn\'t ship a client yet, so there\'s nothing to configure.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/es-ES.ts b/apps/web/src/i18n/locales/es-ES.ts index 9234163c4..4415b6d60 100644 --- a/apps/web/src/i18n/locales/es-ES.ts +++ b/apps/web/src/i18n/locales/es-ES.ts @@ -301,6 +301,36 @@ export const esES: Dict = { 'settings.mediaProviderReloadSuccess': 'Se recargaron los ajustes de los proveedores de medios desde el daemon local.', 'settings.mediaProviderLoadError': 'No se pudieron cargar los ajustes de los proveedores de medios desde el daemon local. Por ahora se usarán los ajustes guardados en el navegador.', 'settings.mediaProviderComingSoonHint': 'Rastreamos estos para la hoja de ruta; el daemon aún no incluye un cliente, por lo que no hay nada que configurar.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/fa.ts b/apps/web/src/i18n/locales/fa.ts index 58b0d3715..164f6b89d 100644 --- a/apps/web/src/i18n/locales/fa.ts +++ b/apps/web/src/i18n/locales/fa.ts @@ -301,6 +301,36 @@ export const fa: Dict = { 'settings.mediaProviderReloadSuccess': 'تنظیمات ارائه‌دهنده‌های رسانه از دیمن محلی دوباره بارگذاری شد.', 'settings.mediaProviderLoadError': 'بارگذاری تنظیمات ارائه‌دهنده‌های رسانه از دیمن محلی ممکن نشد. فعلاً از تنظیمات ذخیره‌شده در مرورگر استفاده می‌شود.', 'settings.mediaProviderComingSoonHint': 'ما این موارد را برای نقشه راه پیگیری می‌کنیم؛ دیمون هنوز کلاینتی ارائه نمی‌دهد، بنابراین چیزی برای پیکربندی وجود ندارد.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/fr.ts b/apps/web/src/i18n/locales/fr.ts index 64e65297a..2a8d7fbfa 100644 --- a/apps/web/src/i18n/locales/fr.ts +++ b/apps/web/src/i18n/locales/fr.ts @@ -301,6 +301,36 @@ export const fr: Dict = { 'settings.mediaProviderReloadSuccess': 'Paramètres des fournisseurs de médias rechargés depuis le daemon local.', 'settings.mediaProviderLoadError': 'Impossible de charger les paramètres des fournisseurs de médias depuis le daemon local. Utilisation temporaire des paramètres enregistrés dans le navigateur.', 'settings.mediaProviderComingSoonHint': 'Nous suivons ces fournisseurs pour la feuille de route ; le daemon ne fournit pas encore de client, il n\'y a donc rien à configurer.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Confidentialité', 'settings.privacyHint': 'Données partagées avec l’équipe Open Design', 'settings.privacyConsentKicker': 'Aidez-nous à améliorer Open Design', diff --git a/apps/web/src/i18n/locales/hu.ts b/apps/web/src/i18n/locales/hu.ts index eba204b7c..ff7b747b1 100644 --- a/apps/web/src/i18n/locales/hu.ts +++ b/apps/web/src/i18n/locales/hu.ts @@ -301,6 +301,36 @@ export const hu: Dict = { 'settings.mediaProviderReloadSuccess': 'A médiaszolgáltatók beállításai újra lettek töltve a helyi démonból.', 'settings.mediaProviderLoadError': 'Nem sikerült betölteni a médiaszolgáltatók beállításait a helyi démonból. Egyelőre a böngészőben mentett beállításokat használjuk.', 'settings.mediaProviderComingSoonHint': 'Ezeket nyomon követjük az ütemtervben; a daemon még nem szállít klienst, így nincs mit konfigurálni.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/id.ts b/apps/web/src/i18n/locales/id.ts index 4f957c8fc..4410c0be6 100644 --- a/apps/web/src/i18n/locales/id.ts +++ b/apps/web/src/i18n/locales/id.ts @@ -296,6 +296,36 @@ export const id: Dict = { 'settings.mediaProviderReloadSuccess': 'Pengaturan penyedia media berhasil dimuat ulang dari daemon lokal.', 'settings.mediaProviderLoadError': 'Tidak dapat memuat pengaturan penyedia media dari daemon lokal. Untuk sementara menggunakan pengaturan yang tersimpan di browser.', 'settings.mediaProviderComingSoonHint': 'Kami melacak ini untuk roadmap; daemon belum mengirimkan klien, jadi tidak ada yang perlu dikonfigurasi.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/it.ts b/apps/web/src/i18n/locales/it.ts index e3b09e4c4..aeeec42ea 100644 --- a/apps/web/src/i18n/locales/it.ts +++ b/apps/web/src/i18n/locales/it.ts @@ -293,6 +293,36 @@ export const it: Dict = { 'settings.mediaProviderReloadSuccess': 'Impostazioni dei provider di media ricaricate dal daemon locale.', 'settings.mediaProviderLoadError': 'Impossibile caricare le impostazioni dei provider di media dal daemon locale. Uso temporaneo delle impostazioni salvate nel browser.', 'settings.mediaProviderComingSoonHint': 'Teniamo traccia di questi per la roadmap; il daemon non fornisce ancora un client, quindi non c\'è nulla da configurare.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'Quali dati vengono condivisi con il team di Open Design', 'settings.privacyConsentKicker': 'Aiutaci a migliorare Open Design', diff --git a/apps/web/src/i18n/locales/ja.ts b/apps/web/src/i18n/locales/ja.ts index 963c46f4e..63d525221 100644 --- a/apps/web/src/i18n/locales/ja.ts +++ b/apps/web/src/i18n/locales/ja.ts @@ -301,6 +301,36 @@ export const ja: Dict = { 'settings.mediaProviderReloadSuccess': 'ローカルデーモンからメディアプロバイダー設定を再読み込みしました。', 'settings.mediaProviderLoadError': 'ローカルデーモンからメディアプロバイダー設定を読み込めませんでした。今のところブラウザーに保存された設定を使用します。', 'settings.mediaProviderComingSoonHint': 'これらはロードマップで追跡しています。デーモンはまだクライアントを提供していないため、設定するものはありません。', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/ko.ts b/apps/web/src/i18n/locales/ko.ts index 05ef1626f..e0a282f84 100644 --- a/apps/web/src/i18n/locales/ko.ts +++ b/apps/web/src/i18n/locales/ko.ts @@ -301,6 +301,36 @@ export const ko: Dict = { 'settings.mediaProviderReloadSuccess': '로컬 데몬에서 미디어 제공자 설정을 다시 불러왔습니다.', 'settings.mediaProviderLoadError': '로컬 데몬에서 미디어 제공자 설정을 불러오지 못했습니다. 지금은 브라우저에 저장된 설정을 사용합니다.', 'settings.mediaProviderComingSoonHint': '로드맵에서 이를 추적하고 있습니다. 데몬이 아직 클라이언트를 제공하지 않으므로 구성할 항목이 없습니다.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/pl.ts b/apps/web/src/i18n/locales/pl.ts index 2284d0c6b..c8716d131 100644 --- a/apps/web/src/i18n/locales/pl.ts +++ b/apps/web/src/i18n/locales/pl.ts @@ -301,6 +301,36 @@ export const pl: Dict = { 'settings.mediaProviderReloadSuccess': 'Ustawienia dostawców mediów zostały ponownie wczytane z lokalnego demona.', 'settings.mediaProviderLoadError': 'Nie udało się wczytać ustawień dostawców mediów z lokalnego demona. Na razie używane będą ustawienia zapisane w przeglądarce.', 'settings.mediaProviderComingSoonHint': 'Śledzimy je w mapie drogowej; daemon nie dostarcza jeszcze klienta, więc nie ma nic do skonfigurowania.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/pt-BR.ts b/apps/web/src/i18n/locales/pt-BR.ts index 095d38448..86244b7fd 100644 --- a/apps/web/src/i18n/locales/pt-BR.ts +++ b/apps/web/src/i18n/locales/pt-BR.ts @@ -300,6 +300,36 @@ export const ptBR: Dict = { 'settings.mediaProviderReloadSuccess': 'As configurações dos provedores de mídia foram recarregadas do daemon local.', 'settings.mediaProviderLoadError': 'Não foi possível carregar as configurações dos provedores de mídia do daemon local. Usando por enquanto as configurações salvas no navegador.', 'settings.mediaProviderComingSoonHint': 'Rastreamos estes para o roteiro; o daemon ainda não fornece um cliente, então não há nada para configurar.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/ru.ts b/apps/web/src/i18n/locales/ru.ts index d3f17b327..81132a0f1 100644 --- a/apps/web/src/i18n/locales/ru.ts +++ b/apps/web/src/i18n/locales/ru.ts @@ -300,6 +300,36 @@ export const ru: Dict = { 'settings.mediaProviderReloadSuccess': 'Настройки медиапровайдеров заново загружены из локального демона.', 'settings.mediaProviderLoadError': 'Не удалось загрузить настройки медиапровайдеров из локального демона. Пока используются настройки, сохранённые в браузере.', 'settings.mediaProviderComingSoonHint': 'Мы отслеживаем их в дорожной карте; демон пока не поставляет клиент, поэтому настраивать нечего.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/th.ts b/apps/web/src/i18n/locales/th.ts index a6a4cc8b4..df9be8773 100644 --- a/apps/web/src/i18n/locales/th.ts +++ b/apps/web/src/i18n/locales/th.ts @@ -285,6 +285,36 @@ export const th: Dict = { 'settings.mediaProviderPlaceholder': 'วาง API key', 'settings.mediaProviderBaseUrlPlaceholder': 'กำหนด Base URL แท่นค่าเริ่มต้น', 'settings.mediaProviderComingSoonHint': 'เราติดตามสิ่งเหล่านี้สำหรับแผนงาน daemon ยังไม่ได้จัดส่งไคลเอนต์ ดังนั้นจึงไม่มีอะไรให้กำหนดค่า', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'ความเป็นส่วนตัว', 'settings.privacyHint': 'ข้อมูลที่แชร์กับทีม Open Design', 'settings.privacyConsentKicker': 'ช่วยเราพัฒนา Open Design', diff --git a/apps/web/src/i18n/locales/tr.ts b/apps/web/src/i18n/locales/tr.ts index 8b7bcc4f0..721d1d524 100644 --- a/apps/web/src/i18n/locales/tr.ts +++ b/apps/web/src/i18n/locales/tr.ts @@ -291,6 +291,36 @@ export const tr: Dict = { 'settings.mediaProviderReloadSuccess': 'Medya sağlayıcı ayarları yerel daemon’dan yeniden yüklendi.', 'settings.mediaProviderLoadError': 'Medya sağlayıcı ayarları yerel daemon’dan yüklenemedi. Şimdilik tarayıcıya kaydedilen ayarlar kullanılıyor.', 'settings.mediaProviderComingSoonHint': 'Bunları yol haritası için takip ediyoruz; daemon henüz bir istemci göndermediği için yapılandırılacak bir şey yok.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/uk.ts b/apps/web/src/i18n/locales/uk.ts index 7a445f319..da86c11bd 100644 --- a/apps/web/src/i18n/locales/uk.ts +++ b/apps/web/src/i18n/locales/uk.ts @@ -302,6 +302,36 @@ export const uk: Dict = { 'settings.mediaProviderReloadSuccess': 'Налаштування медіапровайдерів повторно завантажено з локального демона.', 'settings.mediaProviderLoadError': 'Не вдалося завантажити налаштування медіапровайдерів із локального демона. Наразі використовуються налаштування, збережені в браузері.', 'settings.mediaProviderComingSoonHint': 'Ми відстежуємо їх у дорожній карті; демон ще не постачає клієнт, тому налаштовувати нічого.', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': 'Privacy', 'settings.privacyHint': 'What data is shared with the Open Design team', 'settings.privacyConsentKicker': 'Help us improve Open Design', diff --git a/apps/web/src/i18n/locales/zh-CN.ts b/apps/web/src/i18n/locales/zh-CN.ts index 50732a343..c8de58893 100644 --- a/apps/web/src/i18n/locales/zh-CN.ts +++ b/apps/web/src/i18n/locales/zh-CN.ts @@ -310,6 +310,36 @@ export const zhCN: Dict = { 'settings.mediaProviderReloadSuccess': '已从本地守护进程重新加载媒体提供方设置。', 'settings.mediaProviderLoadError': '无法从本地守护进程加载媒体提供方设置。当前将使用浏览器中保存的设置。', 'settings.mediaProviderComingSoonHint': '我们在路线图中跟踪这些提供方;守护进程尚未提供客户端,因此暂无可配置项。', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': '已通过 X 登录。', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok 订阅令牌将于 {date} 过期。您现在可以关闭所有打开的 xAI 浏览器标签页。', + 'settings.xaiOAuthConnectedHint': 'SuperGrok 订阅已连接。您现在可以关闭所有打开的 xAI 浏览器标签页。', + 'settings.xaiOAuthWaitingAuth': '等待授权中…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design 正在后台监听回调。在您于 xAI 上批准后的几秒钟内,此面板将切换为"已登录"状态。', + 'settings.xaiOAuthNotSignedIn': '未登录。', + 'settings.xaiOAuthNotSignedInHint': '点击"通过 X 登录"以使用您的 SuperGrok 订阅在 Open Design 中生成 Grok 图像、视频和 TTS — 无需 API 密钥。', + 'settings.xaiOAuthWarningTitle': '注意:', + 'settings.xaiOAuthWarningCannotConnect': '"无法连接到您的应用程序"', + 'settings.xaiOAuthWarningUxBug': '这是 xAI 方面的用户体验问题', + 'settings.xaiOAuthWarningDetail': '授权仍在后台传递给 Open Design。请留在此面板;它将自动切换为"已通过 X 登录"。请勿从 xAI 页面重试。', + 'settings.xaiOAuthConnecting': '连接中…', + 'settings.xaiOAuthReconnect': '重新连接', + 'settings.xaiOAuthDisconnecting': '断开连接中…', + 'settings.xaiOAuthDisconnect': '断开连接', + 'settings.xaiOAuthOpeningBrowser': '打开浏览器中…', + 'settings.xaiOAuthSignIn': '通过 X 登录', + 'settings.xaiOAuthChecking': '检查中…', + 'settings.xaiOAuthRefreshStatus': '刷新状态', + 'settings.xaiOAuthBrowserNotOpen': '浏览器标签页未打开?', + 'settings.xaiOAuthOpenManually': '点击此处手动打开授权 URL', + 'settings.xaiOAuthPasteHint': 'xAI 可能会显示代码而不是重定向回来。请在此处粘贴:', + 'settings.xaiOAuthPastePlaceholder': '粘贴来自 xAI 的授权代码', + 'settings.xaiOAuthSubmitting': '提交中…', + 'settings.xaiOAuthSubmitCode': '提交代码', + 'settings.xaiOAuthReauthTitle': '重新认证(将替换现有令牌)', + 'settings.xaiOAuthGrantedScopes': '已授予的权限范围:', + 'settings.privacy': '隐私', 'settings.privacyHint': '与 Open Design 团队共享哪些数据', 'settings.privacyConsentKicker': '帮助我们改进 Open Design', diff --git a/apps/web/src/i18n/locales/zh-TW.ts b/apps/web/src/i18n/locales/zh-TW.ts index 442af51e6..ecc9c5cd3 100644 --- a/apps/web/src/i18n/locales/zh-TW.ts +++ b/apps/web/src/i18n/locales/zh-TW.ts @@ -302,6 +302,36 @@ export const zhTW: Dict = { 'settings.mediaProviderReloadSuccess': '已從本機守護程序重新載入媒體供應商設定。', 'settings.mediaProviderLoadError': '無法從本機守護程序載入媒體供應商設定。目前將使用瀏覽器中儲存的設定。', 'settings.mediaProviderComingSoonHint': '我們在路線圖中追蹤這些提供者;守護程式尚未提供客戶端,因此暫無可配置項。', + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': 'Signed in with X.', + 'settings.xaiOAuthTokenExpiresHint': 'SuperGrok subscription token expires {date}. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthConnectedHint': 'SuperGrok subscription connected. You can close any open xAI browser tabs now.', + 'settings.xaiOAuthWaitingAuth': 'Waiting for authorization…', + 'settings.xaiOAuthWaitingAuthHint': 'Open Design is listening for the callback in the background. This panel will switch to Signed in within a few seconds of your approving on xAI.', + 'settings.xaiOAuthNotSignedIn': 'Not signed in.', + 'settings.xaiOAuthNotSignedInHint': 'Click Sign in with X to use your SuperGrok subscription for Grok image, video, and TTS in Open Design — no API key needed.', + 'settings.xaiOAuthWarningTitle': 'Heads up:', + 'settings.xaiOAuthWarningCannotConnect': '"Cannot connect to your application"', + 'settings.xaiOAuthWarningUxBug': 'That is a UX bug on xAI\'s side', + 'settings.xaiOAuthWarningDetail': 'the authorization is still being delivered to Open Design in the background. Stay on this panel; it will switch to Signed in with X automatically. Do not retry from xAI\'s page.', + 'settings.xaiOAuthConnecting': 'Connecting…', + 'settings.xaiOAuthReconnect': 'Reconnect', + 'settings.xaiOAuthDisconnecting': 'Disconnecting…', + 'settings.xaiOAuthDisconnect': 'Disconnect', + 'settings.xaiOAuthOpeningBrowser': 'Opening browser…', + 'settings.xaiOAuthSignIn': 'Sign in with X', + 'settings.xaiOAuthChecking': 'Checking…', + 'settings.xaiOAuthRefreshStatus': 'Refresh status', + 'settings.xaiOAuthBrowserNotOpen': 'Browser tab didn\'t open?', + 'settings.xaiOAuthOpenManually': 'Click here to open the authorize URL manually', + 'settings.xaiOAuthPasteHint': 'xAI may show a code instead of redirecting back. Paste it here:', + 'settings.xaiOAuthPastePlaceholder': 'Paste auth code from xAI', + 'settings.xaiOAuthSubmitting': 'Submitting…', + 'settings.xaiOAuthSubmitCode': 'Submit code', + 'settings.xaiOAuthReauthTitle': 'Re-authenticate (replaces the existing token)', + 'settings.xaiOAuthGrantedScopes': 'Granted scopes:', + 'settings.privacy': '隱私', 'settings.privacyHint': '與 Open Design 團隊共享哪些資料', 'settings.privacyConsentKicker': '協助我們改進 Open Design', diff --git a/apps/web/src/i18n/types.ts b/apps/web/src/i18n/types.ts index c9ce3b2f5..bb13a25b5 100644 --- a/apps/web/src/i18n/types.ts +++ b/apps/web/src/i18n/types.ts @@ -324,6 +324,36 @@ export interface Dict { 'settings.mediaProviderReloadSuccess': string; 'settings.mediaProviderLoadError': string; 'settings.mediaProviderComingSoonHint': string; + + // xAI OAuth (XaiOAuthControl component) + 'settings.xaiOAuthSignedIn': string; + 'settings.xaiOAuthTokenExpiresHint': string; + 'settings.xaiOAuthConnectedHint': string; + 'settings.xaiOAuthWaitingAuth': string; + 'settings.xaiOAuthWaitingAuthHint': string; + 'settings.xaiOAuthNotSignedIn': string; + 'settings.xaiOAuthNotSignedInHint': string; + 'settings.xaiOAuthWarningTitle': string; + 'settings.xaiOAuthWarningCannotConnect': string; + 'settings.xaiOAuthWarningUxBug': string; + 'settings.xaiOAuthWarningDetail': string; + 'settings.xaiOAuthConnecting': string; + 'settings.xaiOAuthReconnect': string; + 'settings.xaiOAuthDisconnecting': string; + 'settings.xaiOAuthDisconnect': string; + 'settings.xaiOAuthOpeningBrowser': string; + 'settings.xaiOAuthSignIn': string; + 'settings.xaiOAuthChecking': string; + 'settings.xaiOAuthRefreshStatus': string; + 'settings.xaiOAuthBrowserNotOpen': string; + 'settings.xaiOAuthOpenManually': string; + 'settings.xaiOAuthPasteHint': string; + 'settings.xaiOAuthPastePlaceholder': string; + 'settings.xaiOAuthSubmitting': string; + 'settings.xaiOAuthSubmitCode': string; + 'settings.xaiOAuthReauthTitle': string; + 'settings.xaiOAuthGrantedScopes': string; + 'settings.privacy': string; 'settings.privacyHint': string; 'settings.privacyConsentKicker': string;