diff --git a/packages/app/src/components/dialog-connect-provider.tsx b/packages/app/src/components/dialog-connect-provider.tsx index 5c762ee9def..f38cf7d0426 100644 --- a/packages/app/src/components/dialog-connect-provider.tsx +++ b/packages/app/src/components/dialog-connect-provider.tsx @@ -10,6 +10,7 @@ import { ProviderIcon } from "@opencode-ai/ui/provider-icon" import { Spinner } from "@opencode-ai/ui/spinner" import { TextField } from "@opencode-ai/ui/text-field" import { showToast } from "@opencode-ai/ui/toast" +import { TooltipKeybind } from "@opencode-ai/ui/tooltip" import { iife } from "@opencode-ai/util/iife" import { createMemo, Match, onCleanup, onMount, Switch } from "solid-js" import { createStore, produce } from "solid-js/store" @@ -96,11 +97,27 @@ export function DialogConnectProvider(props: { provider: string }) { } let listRef: ListRef | undefined + async function copyAuthUrl() { + if (store.authorization?.url) { + await navigator.clipboard.writeText(store.authorization.url) + showToast({ + variant: "success", + icon: "circle-check", + title: language.t("provider.connect.oauth.url.copied"), + }) + } + } + function handleKey(e: KeyboardEvent) { if (e.key === "Enter" && e.target instanceof HTMLInputElement) { return } if (e.key === "Escape") return + if (e.key === "c" && store.authorization?.url && !(e.target instanceof HTMLInputElement)) { + e.preventDefault() + copyAuthUrl() + return + } listRef?.onKeyDown(e) } @@ -336,11 +353,26 @@ export function DialogConnectProvider(props: { provider: string }) { return (
- {language.t("provider.connect.oauth.code.visit.prefix")} - - {language.t("provider.connect.oauth.code.visit.link")} - - {language.t("provider.connect.oauth.code.visit.suffix", { provider: provider().name })} + {language.t("provider.connect.oauth.code.visit.description", { provider: provider().name })} +
+
+ + + +
+ {language.t("provider.connect.oauth.url.open")} +
{ const code = createMemo(() => { const instructions = store.authorization?.instructions - if (instructions?.includes(":")) { - return instructions?.split(":")[1]?.trim() + if (!instructions?.includes(":")) return + return instructions?.split(":")[1]?.trim() + }) + const note = createMemo(() => { + const instructions = store.authorization?.instructions + if (!instructions || instructions.includes(":")) { + return language.t("provider.connect.oauth.auto.visit.description", { + provider: provider().name, + }) } return instructions }) @@ -396,20 +435,35 @@ export function DialogConnectProvider(props: { provider: string }) { return (
-
- {language.t("provider.connect.oauth.auto.visit.prefix")} - - {language.t("provider.connect.oauth.auto.visit.link")} - - {language.t("provider.connect.oauth.auto.visit.suffix", { provider: provider().name })} +
{note()}
+
+ + + +
+ {language.t("provider.connect.oauth.url.open")} +
- + {code() && ( + + )}
{language.t("provider.connect.status.waiting")} diff --git a/packages/app/src/i18n/ar.ts b/packages/app/src/i18n/ar.ts index 9fcd8ba6dbf..c3783a471c6 100644 --- a/packages/app/src/i18n/ar.ts +++ b/packages/app/src/i18n/ar.ts @@ -121,18 +121,18 @@ export const dict = { "provider.connect.opencodeZen.visit.prefix": "قم بزيارة ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " للحصول على مفتاح API الخاص بك.", - "provider.connect.oauth.code.visit.prefix": "قم بزيارة ", - "provider.connect.oauth.code.visit.link": "هذا الرابط", - "provider.connect.oauth.code.visit.suffix": - " للحصول على رمز التفويض الخاص بك لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + "provider.connect.oauth.code.visit.description": + "انسخ الرابط أدناه وقم بزيارته للحصول على رمز التفويض واستخدام نماذج {{provider}} في OpenCode.", + "provider.connect.oauth.url.label": "رابط التفويض", + "provider.connect.oauth.url.open": "فتح في المتصفح", + "provider.connect.oauth.url.copied": "تم نسخ الرابط إلى الحافظة", + "provider.connect.oauth.url.copy": "نسخ الرابط", "provider.connect.oauth.code.label": "رمز تفويض {{method}}", "provider.connect.oauth.code.placeholder": "رمز التفويض", "provider.connect.oauth.code.required": "رمز التفويض مطلوب", "provider.connect.oauth.code.invalid": "رمز التفويض غير صالح", - "provider.connect.oauth.auto.visit.prefix": "قم بزيارة ", - "provider.connect.oauth.auto.visit.link": "هذا الرابط", - "provider.connect.oauth.auto.visit.suffix": - " وأدخل الرمز أدناه لتوصيل حسابك واستخدام نماذج {{provider}} في OpenCode.", + "provider.connect.oauth.auto.visit.description": + "انسخ الرابط أدناه وقم بزيارته، ثم أدخل الرمز لاستخدام نماذج {{provider}} في OpenCode.", "provider.connect.oauth.auto.confirmationCode": "رمز التأكيد", "provider.connect.toast.connected.title": "تم توصيل {{provider}}", "provider.connect.toast.connected.description": "نماذج {{provider}} متاحة الآن للاستخدام.", diff --git a/packages/app/src/i18n/br.ts b/packages/app/src/i18n/br.ts index a0c904dfbc2..15ecfef0e28 100644 --- a/packages/app/src/i18n/br.ts +++ b/packages/app/src/i18n/br.ts @@ -121,18 +121,18 @@ export const dict = { "provider.connect.opencodeZen.visit.prefix": "Visite ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " para obter sua chave de API.", - "provider.connect.oauth.code.visit.prefix": "Visite ", - "provider.connect.oauth.code.visit.link": "este link", - "provider.connect.oauth.code.visit.suffix": - " para obter seu código de autorização e conectar sua conta para usar modelos do {{provider}} no OpenCode.", + "provider.connect.oauth.code.visit.description": + "Copie e visite o link abaixo para obter seu código de autorização e usar modelos do {{provider}} no OpenCode.", + "provider.connect.oauth.url.label": "URL de autorização", + "provider.connect.oauth.url.open": "Abrir no navegador", + "provider.connect.oauth.url.copied": "URL copiada para a área de transferência", + "provider.connect.oauth.url.copy": "Copiar URL", "provider.connect.oauth.code.label": "Código de autorização {{method}}", "provider.connect.oauth.code.placeholder": "Código de autorização", "provider.connect.oauth.code.required": "O código de autorização é obrigatório", "provider.connect.oauth.code.invalid": "Código de autorização inválido", - "provider.connect.oauth.auto.visit.prefix": "Visite ", - "provider.connect.oauth.auto.visit.link": "este link", - "provider.connect.oauth.auto.visit.suffix": - " e digite o código abaixo para conectar sua conta e usar modelos do {{provider}} no OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Copie e visite o link abaixo, depois digite o código para usar modelos do {{provider}} no OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Código de confirmação", "provider.connect.toast.connected.title": "{{provider}} conectado", "provider.connect.toast.connected.description": "Modelos do {{provider}} agora estão disponíveis para uso.", diff --git a/packages/app/src/i18n/da.ts b/packages/app/src/i18n/da.ts index 4dc4a2cfb2c..c2ec946cf9d 100644 --- a/packages/app/src/i18n/da.ts +++ b/packages/app/src/i18n/da.ts @@ -118,18 +118,18 @@ export const dict = { "Med en enkelt API-nøgle får du adgang til modeller som Claude, GPT, Gemini, GLM og flere.", "provider.connect.opencodeZen.visit.prefix": "Besøg ", "provider.connect.opencodeZen.visit.suffix": " for at hente din API-nøgle.", - "provider.connect.oauth.code.visit.prefix": "Besøg ", - "provider.connect.oauth.code.visit.link": "dette link", - "provider.connect.oauth.code.visit.suffix": - " for at hente din godkendelseskode for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + "provider.connect.oauth.code.visit.description": + "Kopier og besøg linket nedenfor for at hente din godkendelseskode og bruge {{provider}} modeller i OpenCode.", + "provider.connect.oauth.url.label": "Godkendelses-URL", + "provider.connect.oauth.url.open": "Åbn i browser", + "provider.connect.oauth.url.copied": "URL kopieret til udklipsholder", + "provider.connect.oauth.url.copy": "Kopier URL", "provider.connect.oauth.code.label": "{{method}} godkendelseskode", "provider.connect.oauth.code.placeholder": "Godkendelseskode", "provider.connect.oauth.code.required": "Godkendelseskode er påkrævet", "provider.connect.oauth.code.invalid": "Ugyldig godkendelseskode", - "provider.connect.oauth.auto.visit.prefix": "Besøg ", - "provider.connect.oauth.auto.visit.link": "dette link", - "provider.connect.oauth.auto.visit.suffix": - " og indtast koden nedenfor for at forbinde din konto og bruge {{provider}} modeller i OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Kopier og besøg linket nedenfor, derefter indtast koden for at bruge {{provider}} modeller i OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Bekræftelseskode", "provider.connect.toast.connected.title": "{{provider}} forbundet", "provider.connect.toast.connected.description": "{{provider}} modeller er nu tilgængelige.", diff --git a/packages/app/src/i18n/de.ts b/packages/app/src/i18n/de.ts index 69bf1fb4945..c3df6c9fb10 100644 --- a/packages/app/src/i18n/de.ts +++ b/packages/app/src/i18n/de.ts @@ -122,18 +122,18 @@ export const dict = { "Mit einem einzigen API-Schlüssel erhalten Sie Zugriff auf Modelle wie Claude, GPT, Gemini, GLM und mehr.", "provider.connect.opencodeZen.visit.prefix": "Besuchen Sie ", "provider.connect.opencodeZen.visit.suffix": ", um Ihren API-Schlüssel zu erhalten.", - "provider.connect.oauth.code.visit.prefix": "Besuchen Sie ", - "provider.connect.oauth.code.visit.link": "diesen Link", - "provider.connect.oauth.code.visit.suffix": - ", um Ihren Autorisierungscode zu erhalten, Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.oauth.code.visit.description": + "Kopieren und besuchen Sie den untenstehenden Link, um Ihren Autorisierungscode zu erhalten und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.oauth.url.label": "Autorisierungs-URL", + "provider.connect.oauth.url.open": "Im Browser öffnen", + "provider.connect.oauth.url.copied": "URL in Zwischenablage kopiert", + "provider.connect.oauth.url.copy": "URL kopieren", "provider.connect.oauth.code.label": "{{method}} Autorisierungscode", "provider.connect.oauth.code.placeholder": "Autorisierungscode", "provider.connect.oauth.code.required": "Autorisierungscode ist erforderlich", "provider.connect.oauth.code.invalid": "Ungültiger Autorisierungscode", - "provider.connect.oauth.auto.visit.prefix": "Besuchen Sie ", - "provider.connect.oauth.auto.visit.link": "diesen Link", - "provider.connect.oauth.auto.visit.suffix": - " und geben Sie den untenstehenden Code ein, um Ihr Konto zu verbinden und {{provider}} Modelle in OpenCode zu nutzen.", + "provider.connect.oauth.auto.visit.description": + "Kopieren und besuchen Sie den untenstehenden Link, dann geben Sie den Code ein, um {{provider}} Modelle in OpenCode zu nutzen.", "provider.connect.oauth.auto.confirmationCode": "Bestätigungscode", "provider.connect.toast.connected.title": "{{provider}} verbunden", "provider.connect.toast.connected.description": "{{provider}} Modelle sind jetzt verfügbar.", diff --git a/packages/app/src/i18n/en.ts b/packages/app/src/i18n/en.ts index 770b021364e..02fcfea5aba 100644 --- a/packages/app/src/i18n/en.ts +++ b/packages/app/src/i18n/en.ts @@ -121,19 +121,19 @@ export const dict = { "provider.connect.opencodeZen.visit.prefix": "Visit ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " to collect your API key.", - "provider.connect.oauth.code.visit.prefix": "Visit ", - "provider.connect.oauth.code.visit.link": "this link", - "provider.connect.oauth.code.visit.suffix": - " to collect your authorization code to connect your account and use {{provider}} models in OpenCode.", + "provider.connect.oauth.code.visit.description": + "Copy and visit the link below to collect your authorization code to connect your account and use {{provider}} models in OpenCode.", "provider.connect.oauth.code.label": "{{method}} authorization code", "provider.connect.oauth.code.placeholder": "Authorization code", "provider.connect.oauth.code.required": "Authorization code is required", "provider.connect.oauth.code.invalid": "Invalid authorization code", - "provider.connect.oauth.auto.visit.prefix": "Visit ", - "provider.connect.oauth.auto.visit.link": "this link", - "provider.connect.oauth.auto.visit.suffix": - " and enter the code below to connect your account and use {{provider}} models in OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Copy and visit the link below, then enter the code to connect your account and use {{provider}} models in OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Confirmation code", + "provider.connect.oauth.url.label": "Authorization URL", + "provider.connect.oauth.url.open": "Open in browser", + "provider.connect.oauth.url.copied": "URL copied to clipboard", + "provider.connect.oauth.url.copy": "Copy URL", "provider.connect.toast.connected.title": "{{provider}} connected", "provider.connect.toast.connected.description": "{{provider}} models are now available to use.", diff --git a/packages/app/src/i18n/es.ts b/packages/app/src/i18n/es.ts index c715bc048bd..9d7d2c1636e 100644 --- a/packages/app/src/i18n/es.ts +++ b/packages/app/src/i18n/es.ts @@ -118,18 +118,18 @@ export const dict = { "Con una sola clave API obtendrás acceso a modelos como Claude, GPT, Gemini, GLM y más.", "provider.connect.opencodeZen.visit.prefix": "Visita ", "provider.connect.opencodeZen.visit.suffix": " para obtener tu clave API.", - "provider.connect.oauth.code.visit.prefix": "Visita ", - "provider.connect.oauth.code.visit.link": "este enlace", - "provider.connect.oauth.code.visit.suffix": - " para obtener tu código de autorización para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + "provider.connect.oauth.code.visit.description": + "Copia y visita el enlace a continuación para obtener tu código de autorización y usar modelos de {{provider}} en OpenCode.", + "provider.connect.oauth.url.label": "URL de autorización", + "provider.connect.oauth.url.open": "Abrir en el navegador", + "provider.connect.oauth.url.copied": "URL copiada al portapapeles", + "provider.connect.oauth.url.copy": "Copiar URL", "provider.connect.oauth.code.label": "Código de autorización {{method}}", "provider.connect.oauth.code.placeholder": "Código de autorización", "provider.connect.oauth.code.required": "El código de autorización es obligatorio", "provider.connect.oauth.code.invalid": "Código de autorización inválido", - "provider.connect.oauth.auto.visit.prefix": "Visita ", - "provider.connect.oauth.auto.visit.link": "este enlace", - "provider.connect.oauth.auto.visit.suffix": - " e introduce el código a continuación para conectar tu cuenta y usar modelos de {{provider}} en OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Copia y visita el enlace a continuación, luego introduce el código para usar modelos de {{provider}} en OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Código de confirmación", "provider.connect.toast.connected.title": "{{provider}} conectado", "provider.connect.toast.connected.description": "Los modelos de {{provider}} ahora están disponibles para usar.", diff --git a/packages/app/src/i18n/fr.ts b/packages/app/src/i18n/fr.ts index 8bd8dba25b8..212492a8865 100644 --- a/packages/app/src/i18n/fr.ts +++ b/packages/app/src/i18n/fr.ts @@ -118,18 +118,18 @@ export const dict = { "Avec une seule clé API, vous aurez accès à des modèles tels que Claude, GPT, Gemini, GLM et plus encore.", "provider.connect.opencodeZen.visit.prefix": "Visitez ", "provider.connect.opencodeZen.visit.suffix": " pour récupérer votre clé API.", - "provider.connect.oauth.code.visit.prefix": "Visitez ", - "provider.connect.oauth.code.visit.link": "ce lien", - "provider.connect.oauth.code.visit.suffix": - " pour récupérer votre code d'autorisation afin de connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + "provider.connect.oauth.code.visit.description": + "Copiez et visitez le lien ci-dessous pour récupérer votre code d'autorisation et utiliser les modèles {{provider}} dans OpenCode.", + "provider.connect.oauth.url.label": "URL d'autorisation", + "provider.connect.oauth.url.open": "Ouvrir dans le navigateur", + "provider.connect.oauth.url.copied": "URL copiée dans le presse-papiers", + "provider.connect.oauth.url.copy": "Copier l'URL", "provider.connect.oauth.code.label": "Code d'autorisation {{method}}", "provider.connect.oauth.code.placeholder": "Code d'autorisation", "provider.connect.oauth.code.required": "Le code d'autorisation est requis", "provider.connect.oauth.code.invalid": "Code d'autorisation invalide", - "provider.connect.oauth.auto.visit.prefix": "Visitez ", - "provider.connect.oauth.auto.visit.link": "ce lien", - "provider.connect.oauth.auto.visit.suffix": - " et entrez le code ci-dessous pour connecter votre compte et utiliser les modèles {{provider}} dans OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Copiez et visitez le lien ci-dessous, puis entrez le code pour utiliser les modèles {{provider}} dans OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Code de confirmation", "provider.connect.toast.connected.title": "{{provider}} connecté", "provider.connect.toast.connected.description": "Les modèles {{provider}} sont maintenant disponibles.", diff --git a/packages/app/src/i18n/ja.ts b/packages/app/src/i18n/ja.ts index 5b98f5aa92c..7610d836001 100644 --- a/packages/app/src/i18n/ja.ts +++ b/packages/app/src/i18n/ja.ts @@ -117,18 +117,18 @@ export const dict = { "provider.connect.opencodeZen.line2": "1つのAPIキーで、Claude、GPT、Gemini、GLMなどのモデルにアクセスできます。", "provider.connect.opencodeZen.visit.prefix": " ", "provider.connect.opencodeZen.visit.suffix": " にアクセスしてAPIキーを取得してください。", - "provider.connect.oauth.code.visit.prefix": " ", - "provider.connect.oauth.code.visit.link": "このリンク", - "provider.connect.oauth.code.visit.suffix": - " にアクセスして認証コードを取得し、アカウントを接続してOpenCodeで{{provider}}モデルを使用してください。", + "provider.connect.oauth.code.visit.description": + "下記のリンクをコピーしてアクセスし、認証コードを取得してOpenCodeで{{provider}}モデルを使用してください。", + "provider.connect.oauth.url.label": "認証URL", + "provider.connect.oauth.url.open": "ブラウザで開く", + "provider.connect.oauth.url.copied": "URLをクリップボードにコピーしました", + "provider.connect.oauth.url.copy": "URLをコピー", "provider.connect.oauth.code.label": "{{method}} 認証コード", "provider.connect.oauth.code.placeholder": "認証コード", "provider.connect.oauth.code.required": "認証コードが必要です", "provider.connect.oauth.code.invalid": "無効な認証コード", - "provider.connect.oauth.auto.visit.prefix": " ", - "provider.connect.oauth.auto.visit.link": "このリンク", - "provider.connect.oauth.auto.visit.suffix": - " にアクセスし、以下のコードを入力してアカウントを接続し、OpenCodeで{{provider}}モデルを使用してください。", + "provider.connect.oauth.auto.visit.description": + "下記のリンクをコピーしてアクセスし、コードを入力してOpenCodeで{{provider}}モデルを使用してください。", "provider.connect.oauth.auto.confirmationCode": "確認コード", "provider.connect.toast.connected.title": "{{provider}}が接続されました", "provider.connect.toast.connected.description": "{{provider}}モデルが使用可能になりました。", diff --git a/packages/app/src/i18n/ko.ts b/packages/app/src/i18n/ko.ts index a016cd34a45..f19589c975d 100644 --- a/packages/app/src/i18n/ko.ts +++ b/packages/app/src/i18n/ko.ts @@ -121,18 +121,18 @@ export const dict = { "provider.connect.opencodeZen.line2": "단일 API 키로 Claude, GPT, Gemini, GLM 등 다양한 모델에 액세스할 수 있습니다.", "provider.connect.opencodeZen.visit.prefix": "", "provider.connect.opencodeZen.visit.suffix": "를 방문하여 API 키를 받으세요.", - "provider.connect.oauth.code.visit.prefix": "", - "provider.connect.oauth.code.visit.link": "이 링크", - "provider.connect.oauth.code.visit.suffix": - "를 방문하여 인증 코드를 받아 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "provider.connect.oauth.code.visit.description": + "아래 링크를 복사하여 방문하고 인증 코드를 받아 OpenCode에서 {{provider}} 모델을 사용하세요.", + "provider.connect.oauth.url.label": "인증 URL", + "provider.connect.oauth.url.open": "브라우저에서 열기", + "provider.connect.oauth.url.copied": "URL이 클립보드에 복사되었습니다", + "provider.connect.oauth.url.copy": "URL 복사", "provider.connect.oauth.code.label": "{{method}} 인증 코드", "provider.connect.oauth.code.placeholder": "인증 코드", "provider.connect.oauth.code.required": "인증 코드가 필요합니다", "provider.connect.oauth.code.invalid": "유효하지 않은 인증 코드", - "provider.connect.oauth.auto.visit.prefix": "", - "provider.connect.oauth.auto.visit.link": "이 링크", - "provider.connect.oauth.auto.visit.suffix": - "를 방문하고 아래 코드를 입력하여 계정을 연결하고 OpenCode에서 {{provider}} 모델을 사용하세요.", + "provider.connect.oauth.auto.visit.description": + "아래 링크를 복사하여 방문하고 코드를 입력하여 OpenCode에서 {{provider}} 모델을 사용하세요.", "provider.connect.oauth.auto.confirmationCode": "확인 코드", "provider.connect.toast.connected.title": "{{provider}} 연결됨", "provider.connect.toast.connected.description": "이제 {{provider}} 모델을 사용할 수 있습니다.", diff --git a/packages/app/src/i18n/no.ts b/packages/app/src/i18n/no.ts index 153ee04122e..5d75915a308 100644 --- a/packages/app/src/i18n/no.ts +++ b/packages/app/src/i18n/no.ts @@ -124,18 +124,18 @@ export const dict = { "provider.connect.opencodeZen.visit.prefix": "Besøk ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " for å hente API-nøkkelen din.", - "provider.connect.oauth.code.visit.prefix": "Besøk ", - "provider.connect.oauth.code.visit.link": "denne lenken", - "provider.connect.oauth.code.visit.suffix": - " for å hente autorisasjonskoden din for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + "provider.connect.oauth.code.visit.description": + "Kopier og besøk lenken nedenfor for å hente autorisasjonskoden din og bruke {{provider}}-modeller i OpenCode.", + "provider.connect.oauth.url.label": "Autorisasjons-URL", + "provider.connect.oauth.url.open": "Åpne i nettleser", + "provider.connect.oauth.url.copied": "URL kopiert til utklippstavlen", + "provider.connect.oauth.url.copy": "Kopier URL", "provider.connect.oauth.code.label": "{{method}} autorisasjonskode", "provider.connect.oauth.code.placeholder": "Autorisasjonskode", "provider.connect.oauth.code.required": "Autorisasjonskode er påkrevd", "provider.connect.oauth.code.invalid": "Ugyldig autorisasjonskode", - "provider.connect.oauth.auto.visit.prefix": "Besøk ", - "provider.connect.oauth.auto.visit.link": "denne lenken", - "provider.connect.oauth.auto.visit.suffix": - " og skriv inn koden nedenfor for å koble til kontoen din og bruke {{provider}}-modeller i OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Kopier og besøk lenken nedenfor, deretter skriv inn koden for å bruke {{provider}}-modeller i OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Bekreftelseskode", "provider.connect.toast.connected.title": "{{provider}} tilkoblet", "provider.connect.toast.connected.description": "{{provider}}-modeller er nå tilgjengelige.", diff --git a/packages/app/src/i18n/pl.ts b/packages/app/src/i18n/pl.ts index db102628471..5653913bf79 100644 --- a/packages/app/src/i18n/pl.ts +++ b/packages/app/src/i18n/pl.ts @@ -121,18 +121,18 @@ export const dict = { "provider.connect.opencodeZen.visit.prefix": "Odwiedź ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": ", aby odebrać swój klucz API.", - "provider.connect.oauth.code.visit.prefix": "Odwiedź ", - "provider.connect.oauth.code.visit.link": "ten link", - "provider.connect.oauth.code.visit.suffix": - ", aby odebrać kod autoryzacyjny, połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.code.visit.description": + "Skopiuj i odwiedź poniższy link, aby odebrać kod autoryzacyjny i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.url.label": "URL autoryzacji", + "provider.connect.oauth.url.open": "Otwórz w przeglądarce", + "provider.connect.oauth.url.copied": "URL skopiowany do schowka", + "provider.connect.oauth.url.copy": "Kopiuj URL", "provider.connect.oauth.code.label": "Kod autoryzacyjny {{method}}", "provider.connect.oauth.code.placeholder": "Kod autoryzacyjny", "provider.connect.oauth.code.required": "Kod autoryzacyjny jest wymagany", "provider.connect.oauth.code.invalid": "Nieprawidłowy kod autoryzacyjny", - "provider.connect.oauth.auto.visit.prefix": "Odwiedź ", - "provider.connect.oauth.auto.visit.link": "ten link", - "provider.connect.oauth.auto.visit.suffix": - " i wprowadź poniższy kod, aby połączyć konto i używać modeli {{provider}} w OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Skopiuj i odwiedź poniższy link, następnie wprowadź kod, aby używać modeli {{provider}} w OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Kod potwierdzający", "provider.connect.toast.connected.title": "Połączono {{provider}}", "provider.connect.toast.connected.description": "Modele {{provider}} są teraz dostępne do użycia.", diff --git a/packages/app/src/i18n/ru.ts b/packages/app/src/i18n/ru.ts index d8b94cb107d..88a0bf011b1 100644 --- a/packages/app/src/i18n/ru.ts +++ b/packages/app/src/i18n/ru.ts @@ -121,18 +121,18 @@ export const dict = { "provider.connect.opencodeZen.visit.prefix": "Посетите ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " чтобы получить ваш API ключ.", - "provider.connect.oauth.code.visit.prefix": "Посетите ", - "provider.connect.oauth.code.visit.link": "эту ссылку", - "provider.connect.oauth.code.visit.suffix": - " чтобы получить код авторизации для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + "provider.connect.oauth.code.visit.description": + "Скопируйте и перейдите по ссылке ниже, чтобы получить код авторизации и использовать модели {{provider}} в OpenCode.", + "provider.connect.oauth.url.label": "URL авторизации", + "provider.connect.oauth.url.open": "Открыть в браузере", + "provider.connect.oauth.url.copied": "URL скопирован в буфер обмена", + "provider.connect.oauth.url.copy": "Копировать URL", "provider.connect.oauth.code.label": "{{method}} код авторизации", "provider.connect.oauth.code.placeholder": "Код авторизации", "provider.connect.oauth.code.required": "Код авторизации обязателен", "provider.connect.oauth.code.invalid": "Неверный код авторизации", - "provider.connect.oauth.auto.visit.prefix": "Посетите ", - "provider.connect.oauth.auto.visit.link": "эту ссылку", - "provider.connect.oauth.auto.visit.suffix": - " и введите код ниже для подключения аккаунта и использования моделей {{provider}} в OpenCode.", + "provider.connect.oauth.auto.visit.description": + "Скопируйте и перейдите по ссылке ниже, затем введите код для использования моделей {{provider}} в OpenCode.", "provider.connect.oauth.auto.confirmationCode": "Код подтверждения", "provider.connect.toast.connected.title": "{{provider}} подключён", "provider.connect.toast.connected.description": "Модели {{provider}} теперь доступны.", diff --git a/packages/app/src/i18n/zh.ts b/packages/app/src/i18n/zh.ts index cfecb739d88..f4bb6818e20 100644 --- a/packages/app/src/i18n/zh.ts +++ b/packages/app/src/i18n/zh.ts @@ -120,17 +120,19 @@ export const dict = { "provider.connect.opencodeZen.line2": "只需一个 API 密钥,你就能使用 Claude、GPT、Gemini、GLM 等模型。", "provider.connect.opencodeZen.visit.prefix": "访问 ", "provider.connect.opencodeZen.visit.suffix": " 获取你的 API 密钥。", - "provider.connect.oauth.code.visit.prefix": "访问 ", - "provider.connect.oauth.code.visit.link": "此链接", - "provider.connect.oauth.code.visit.suffix": " 获取授权码,以连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.code.visit.description": + "复制并访问下方链接,以获取授权码,连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", "provider.connect.oauth.code.label": "{{method}} 授权码", "provider.connect.oauth.code.placeholder": "授权码", "provider.connect.oauth.code.required": "授权码为必填项", "provider.connect.oauth.code.invalid": "授权码无效", - "provider.connect.oauth.auto.visit.prefix": "访问 ", - "provider.connect.oauth.auto.visit.link": "此链接", - "provider.connect.oauth.auto.visit.suffix": " 并输入以下代码,以连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.auto.visit.description": + "复制并访问下方链接,然后输入代码,以连接你的帐户并在 OpenCode 中使用 {{provider}} 模型。", "provider.connect.oauth.auto.confirmationCode": "确认码", + "provider.connect.oauth.url.label": "授权链接", + "provider.connect.oauth.url.open": "在浏览器中打开", + "provider.connect.oauth.url.copied": "链接已复制到剪贴板", + "provider.connect.oauth.url.copy": "复制链接", "provider.connect.toast.connected.title": "{{provider}} 已连接", "provider.connect.toast.connected.description": "现在可以使用 {{provider}} 模型了。", diff --git a/packages/app/src/i18n/zht.ts b/packages/app/src/i18n/zht.ts index 050c160cdfb..7a021f1cc9f 100644 --- a/packages/app/src/i18n/zht.ts +++ b/packages/app/src/i18n/zht.ts @@ -121,17 +121,18 @@ export const dict = { "provider.connect.opencodeZen.visit.prefix": "造訪 ", "provider.connect.opencodeZen.visit.link": "opencode.ai/zen", "provider.connect.opencodeZen.visit.suffix": " 取得你的 API 金鑰。", - "provider.connect.oauth.code.visit.prefix": "造訪 ", - "provider.connect.oauth.code.visit.link": "此連結", - "provider.connect.oauth.code.visit.suffix": " 取得授權碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.code.visit.description": + "複製並造訪下方連結,以取得授權碼並在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.url.label": "授權網址", + "provider.connect.oauth.url.open": "在瀏覽器中開啟", + "provider.connect.oauth.url.copied": "連結已複製到剪貼簿", + "provider.connect.oauth.url.copy": "複製連結", "provider.connect.oauth.code.label": "{{method}} 授權碼", "provider.connect.oauth.code.placeholder": "授權碼", "provider.connect.oauth.code.required": "授權碼為必填", "provider.connect.oauth.code.invalid": "授權碼無效", - "provider.connect.oauth.auto.visit.prefix": "造訪 ", - "provider.connect.oauth.auto.visit.link": "此連結", - "provider.connect.oauth.auto.visit.suffix": - " 並輸入以下程式碼,以連線你的帳戶並在 OpenCode 中使用 {{provider}} 模型。", + "provider.connect.oauth.auto.visit.description": + "複製並造訪下方連結,然後輸入驗證碼以在 OpenCode 中使用 {{provider}} 模型。", "provider.connect.oauth.auto.confirmationCode": "確認碼", "provider.connect.toast.connected.title": "{{provider}} 已連線", "provider.connect.toast.connected.description": "現在可以使用 {{provider}} 模型了。",