diff --git a/packages/cloud/src/WebAuthService.ts b/packages/cloud/src/WebAuthService.ts index 0b5c108e89c..69ad28e8ecd 100644 --- a/packages/cloud/src/WebAuthService.ts +++ b/packages/cloud/src/WebAuthService.ts @@ -331,10 +331,15 @@ export class WebAuthService extends EventEmitter implements A await this.storeCredentials(credentials) - // Store the provider model if provided + // Store the provider model if provided, or flag that no model was selected if (providerModel) { await this.context.globalState.update("roo-provider-model", providerModel) + await this.context.globalState.update("roo-auth-skip-model", undefined) this.log(`[auth] Stored provider model: ${providerModel}`) + } else { + // No model was selected during signup - flag this for the webview + await this.context.globalState.update("roo-auth-skip-model", true) + this.log(`[auth] No provider model selected during signup`) } const vscode = await importVscode() diff --git a/packages/cloud/src/__tests__/WebAuthService.spec.ts b/packages/cloud/src/__tests__/WebAuthService.spec.ts index 2f9528dec5c..3398e3f2a3a 100644 --- a/packages/cloud/src/__tests__/WebAuthService.spec.ts +++ b/packages/cloud/src/__tests__/WebAuthService.spec.ts @@ -395,9 +395,38 @@ describe("WebAuthService", () => { await authService.handleCallback("auth-code", storedState, null, "xai/grok-code-fast-1") expect(mockContext.globalState.update).toHaveBeenCalledWith("roo-provider-model", "xai/grok-code-fast-1") + expect(mockContext.globalState.update).toHaveBeenCalledWith("roo-auth-skip-model", undefined) expect(mockLog).toHaveBeenCalledWith("[auth] Stored provider model: xai/grok-code-fast-1") }) + it("should set skip model flag when provider model is NOT provided in callback", async () => { + const storedState = "valid-state" + mockContext.globalState.get.mockReturnValue(storedState) + + // Mock successful Clerk sign-in response + const mockResponse = { + ok: true, + json: () => + Promise.resolve({ + response: { created_session_id: "session-123" }, + }), + headers: { + get: (header: string) => (header === "authorization" ? "Bearer token-123" : null), + }, + } + mockFetch.mockResolvedValue(mockResponse) + + const vscode = await import("vscode") + const mockShowInfo = vi.fn() + vi.mocked(vscode.window.showInformationMessage).mockImplementation(mockShowInfo) + + // Call without provider model + await authService.handleCallback("auth-code", storedState, null) + + expect(mockContext.globalState.update).toHaveBeenCalledWith("roo-auth-skip-model", true) + expect(mockLog).toHaveBeenCalledWith("[auth] No provider model selected during signup") + }) + it("should handle Clerk API errors", async () => { const storedState = "valid-state" mockContext.globalState.get.mockReturnValue(storedState) diff --git a/src/core/webview/ClineProvider.ts b/src/core/webview/ClineProvider.ts index 9434286d0da..781c6d8a316 100644 --- a/src/core/webview/ClineProvider.ts +++ b/src/core/webview/ClineProvider.ts @@ -2025,6 +2025,7 @@ export class ClineProvider enterBehavior: enterBehavior ?? "send", cloudUserInfo, cloudIsAuthenticated: cloudIsAuthenticated ?? false, + cloudAuthSkipModel: this.context.globalState.get("roo-auth-skip-model") ?? false, cloudOrganizations, sharingEnabled: sharingEnabled ?? false, publicSharingEnabled: publicSharingEnabled ?? false, diff --git a/src/core/webview/webviewMessageHandler.ts b/src/core/webview/webviewMessageHandler.ts index 544b723f93b..52ec8146552 100644 --- a/src/core/webview/webviewMessageHandler.ts +++ b/src/core/webview/webviewMessageHandler.ts @@ -2384,6 +2384,12 @@ export const webviewMessageHandler = async ( break } + case "clearCloudAuthSkipModel": { + // Clear the flag that indicates auth completed without model selection + await provider.context.globalState.update("roo-auth-skip-model", undefined) + await provider.postStateToWebview() + break + } case "switchOrganization": { try { const organizationId = message.organizationId ?? null diff --git a/src/shared/ExtensionMessage.ts b/src/shared/ExtensionMessage.ts index 093485fa3ee..589d22d3832 100644 --- a/src/shared/ExtensionMessage.ts +++ b/src/shared/ExtensionMessage.ts @@ -335,6 +335,7 @@ export type ExtensionState = Pick< cloudUserInfo: CloudUserInfo | null cloudIsAuthenticated: boolean + cloudAuthSkipModel?: boolean // Flag indicating auth completed without model selection (user should pick 3rd-party provider) cloudApiUrl?: string cloudOrganizations?: CloudOrganizationMembership[] sharingEnabled: boolean diff --git a/src/shared/WebviewMessage.ts b/src/shared/WebviewMessage.ts index 6c878159940..d96fbd871ce 100644 --- a/src/shared/WebviewMessage.ts +++ b/src/shared/WebviewMessage.ts @@ -122,6 +122,7 @@ export interface WebviewMessage { | "searchFiles" | "toggleApiConfigPin" | "hasOpenedModeSelector" + | "clearCloudAuthSkipModel" | "cloudButtonClicked" | "rooCloudSignIn" | "cloudLandingPageSignIn" diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx index 00092fea9d1..6f77ef6261a 100644 --- a/webview-ui/src/components/settings/ApiOptions.tsx +++ b/webview-ui/src/components/settings/ApiOptions.tsx @@ -452,6 +452,11 @@ const ApiOptions = ({ options.unshift(rooOption) } } else { + // Filter out roo from the welcome view + const filteredOptions = options.filter((opt) => opt.value !== "roo") + options.length = 0 + options.push(...filteredOptions) + const openRouterIndex = options.findIndex((opt) => opt.value === "openrouter") if (openRouterIndex > 0) { const [openRouterOption] = options.splice(openRouterIndex, 1) @@ -472,7 +477,7 @@ const ApiOptions = ({ ) : ( docs && ( - {docs.name} + {t("settings:providers.apiProviderDocs")} ) diff --git a/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx b/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx index a28926742fd..c835e3062df 100644 --- a/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx +++ b/webview-ui/src/components/settings/__tests__/ApiOptions.spec.tsx @@ -643,7 +643,7 @@ describe("ApiOptions", () => { useExtensionStateMock.mockRestore() }) - it("does not pin roo provider to the top on welcome screen", () => { + it("filters out roo provider on welcome screen", () => { // Mock useExtensionState to ensure no filtering const useExtensionStateMock = vi.spyOn(ExtensionStateContext, "useExtensionState") useExtensionStateMock.mockReturnValue({ @@ -663,13 +663,9 @@ describe("ApiOptions", () => { // Filter out the placeholder option (empty value) const providerOptions = options.filter((opt) => opt.value !== "") - // Check that roo is in the list + // Check that roo is NOT in the list when on welcome screen const rooOption = providerOptions.find((opt) => opt.value === "roo") - - if (rooOption) { - // If roo exists, verify it's NOT at the top (should be in alphabetical order) - expect(providerOptions[0].value).not.toBe("roo") - } + expect(rooOption).toBeUndefined() useExtensionStateMock.mockRestore() }) diff --git a/webview-ui/src/components/welcome/RooHero.tsx b/webview-ui/src/components/welcome/RooHero.tsx index 87829f8b1cb..4a8fd179584 100644 --- a/webview-ui/src/components/welcome/RooHero.tsx +++ b/webview-ui/src/components/welcome/RooHero.tsx @@ -7,7 +7,7 @@ const RooHero = () => { }) return ( -
+
{ maskRepeat: "no-repeat", maskSize: "contain", }} - className="mx-auto group-hover:animate-bounce translate-y-0 transition-transform duration-500"> + className="z-5 mr-auto group-hover:animate-bounce translate-y-0 transition-transform duration-500"> Roo logo
+
+
+
+
+
+
) } diff --git a/webview-ui/src/components/welcome/WelcomeViewProvider.tsx b/webview-ui/src/components/welcome/WelcomeViewProvider.tsx index ceebdd7b181..c4d29df7a77 100644 --- a/webview-ui/src/components/welcome/WelcomeViewProvider.tsx +++ b/webview-ui/src/components/welcome/WelcomeViewProvider.tsx @@ -20,39 +20,58 @@ import { Tab, TabContent } from "../common/Tab" import RooHero from "./RooHero" import { Trans } from "react-i18next" -import { ArrowLeft, ArrowRight, BadgeInfo } from "lucide-react" +import { ArrowLeft, ArrowRight, BadgeInfo, Brain, TriangleAlert } from "lucide-react" +import { buildDocLink } from "@/utils/docLinks" type ProviderOption = "roo" | "custom" +type AuthOrigin = "landing" | "providerSelection" const WelcomeViewProvider = () => { - const { apiConfiguration, currentApiConfigName, setApiConfiguration, uriScheme, cloudIsAuthenticated } = - useExtensionState() + const { + apiConfiguration, + currentApiConfigName, + setApiConfiguration, + uriScheme, + cloudIsAuthenticated, + cloudAuthSkipModel, + } = useExtensionState() const { t } = useAppTranslation() const [errorMessage, setErrorMessage] = useState(undefined) - const [selectedProvider, setSelectedProvider] = useState("roo") + const [selectedProvider, setSelectedProvider] = useState(null) const [authInProgress, setAuthInProgress] = useState(false) + const [authOrigin, setAuthOrigin] = useState(null) const [showManualEntry, setShowManualEntry] = useState(false) const [manualUrl, setManualUrl] = useState("") const [manualErrorMessage, setManualErrorMessage] = useState(undefined) const manualUrlInputRef = useRef(null) - // When auth completes during the provider signup flow, save the Roo config - // This will cause showWelcome to become false and navigate to chat + // When auth completes during the provider signup flow, either: + // 1. If user skipped model selection (cloudAuthSkipModel=true), navigate to provider selection with "custom" selected + // 2. Otherwise, save the Roo config and navigate to chat useEffect(() => { if (cloudIsAuthenticated && authInProgress) { - // Auth completed from provider signup flow - save the config now - const rooConfig: ProviderSettings = { - apiProvider: "roo", + if (cloudAuthSkipModel) { + // User skipped model selection during signup - navigate to provider selection with 3rd-party selected + setSelectedProvider("custom") + setAuthInProgress(false) + setShowManualEntry(false) + // Clear the flag so it doesn't affect future flows + vscode.postMessage({ type: "clearCloudAuthSkipModel" }) + } else { + // Auth completed from provider signup flow - save the config now + const rooConfig: ProviderSettings = { + apiProvider: "roo", + } + vscode.postMessage({ + type: "upsertApiConfiguration", + text: currentApiConfigName, + apiConfiguration: rooConfig, + }) + setAuthInProgress(false) + setShowManualEntry(false) } - vscode.postMessage({ - type: "upsertApiConfiguration", - text: currentApiConfigName, - apiConfiguration: rooConfig, - }) - setAuthInProgress(false) - setShowManualEntry(false) } - }, [cloudIsAuthenticated, authInProgress, currentApiConfigName]) + }, [cloudIsAuthenticated, authInProgress, currentApiConfigName, cloudAuthSkipModel]) // Focus the manual URL input when it becomes visible useEffect(() => { @@ -72,17 +91,32 @@ const WelcomeViewProvider = () => { ) const handleGetStarted = useCallback(() => { - if (selectedProvider === "roo") { - // Trigger cloud sign-in with provider signup flow - // NOTE: We intentionally do NOT save the API configuration yet. - // The configuration will be saved by the extension after auth completes. - // This keeps showWelcome true so we can show the waiting state. + // Landing screen - always trigger auth with Roo + if (selectedProvider === null) { + setAuthOrigin("landing") vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: true }) - - // Show the waiting state setAuthInProgress(true) + } + // Provider Selection screen + else if (selectedProvider === "roo") { + if (cloudIsAuthenticated) { + // Already authenticated - save config and finish + const rooConfig: ProviderSettings = { + apiProvider: "roo", + } + vscode.postMessage({ + type: "upsertApiConfiguration", + text: currentApiConfigName, + apiConfiguration: rooConfig, + }) + } else { + // Need to authenticate + setAuthOrigin("providerSelection") + vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: true }) + setAuthInProgress(true) + } } else { - // Use custom provider - validate first + // Custom provider - validate first const error = apiConfiguration ? validateApiConfiguration(apiConfiguration) : undefined if (error) { @@ -93,14 +127,34 @@ const WelcomeViewProvider = () => { setErrorMessage(undefined) vscode.postMessage({ type: "upsertApiConfiguration", text: currentApiConfigName, apiConfiguration }) } - }, [selectedProvider, apiConfiguration, currentApiConfigName]) + }, [selectedProvider, cloudIsAuthenticated, apiConfiguration, currentApiConfigName]) + + const handleNoAccount = useCallback(() => { + // Navigate to Provider Selection, defaulting to Roo option + setSelectedProvider("roo") + }, []) + + const handleBackToLanding = useCallback(() => { + // Return to the landing screen + setSelectedProvider(null) + setErrorMessage(undefined) + }, []) const handleGoBack = useCallback(() => { setAuthInProgress(false) setShowManualEntry(false) setManualUrl("") setManualErrorMessage(false) - }, []) + + // Return to the appropriate screen based on origin + if (authOrigin === "providerSelection") { + // Keep selectedProvider as-is, user returns to Provider Selection + } else { + // Return to Landing + setSelectedProvider(null) + } + setAuthOrigin(null) + }, [authOrigin]) const handleManualUrlChange = (e: any) => { const url = e.target.value @@ -126,17 +180,17 @@ const WelcomeViewProvider = () => { }, [manualUrl]) const handleOpenSignupUrl = () => { - vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: true }) + vscode.postMessage({ type: "rooCloudSignIn", useProviderSignup: false }) } // Render the waiting for cloud state if (authInProgress) { return ( - +
-

{t("welcome:waitingForCloud.heading")}

+

{t("welcome:waitingForCloud.heading")}

{t("welcome:waitingForCloud.description")}

@@ -159,25 +213,25 @@ const WelcomeViewProvider = () => {
- +
-

- setShowManualEntry(true)} - className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0 " - /> - ), - }} - /> -

- - {showManualEntry && ( + {!showManualEntry ? ( +

+ setShowManualEntry(true)} + className="text-vscode-textLink-foreground hover:text-vscode-textLink-activeForeground underline cursor-pointer bg-transparent border-none p-0 " + /> + ), + }} + /> +

+ ) : (
-

+

{t("welcome:waitingForCloud.pasteUrl")}

@@ -195,6 +249,22 @@ const WelcomeViewProvider = () => {
+

+ + {t("common:docsLink.label")} + + ), + }} + /> +

{manualUrl && manualErrorMessage && (

{t("welcome:waitingForCloud.invalidURL")} @@ -217,24 +287,48 @@ const WelcomeViewProvider = () => { ) } + // Landing screen - shown when selectedProvider === null + if (selectedProvider === null) { + return ( + + + +

{t("welcome:landing.greeting")}

+ +
+

+ +

+

+ +

+
+ +
+ + + {t("welcome:landing.noAccount")} + +
+ + + ) + } + + // Provider Selection screen - shown when selectedProvider is "roo" or "custom" return ( - -

{t("welcome:greeting")}

+ +

{t("welcome:providerSignup.heading")}

-
- {selectedProvider === "roo" && ( -

- -

- )} -

- -

-
+

+ +

-
+
) => { @@ -249,13 +343,12 @@ const WelcomeViewProvider = () => { {t("welcome:providerSignup.rooCloudProvider")}

- {t("welcome:providerSignup.rooCloudDescription")} ( + {t("welcome:providerSignup.rooCloudDescription")}{" "} {t("welcome:providerSignup.learnMore")} - ).

@@ -277,9 +370,6 @@ const WelcomeViewProvider = () => {
-

- {t("welcome:providerSignup.noApiKeys")} -

{
-
+
+
diff --git a/webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx b/webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx new file mode 100644 index 00000000000..b3fd7ec1f95 --- /dev/null +++ b/webview-ui/src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx @@ -0,0 +1,351 @@ +// npx vitest src/components/welcome/__tests__/WelcomeViewProvider.spec.tsx + +import { render, screen, fireEvent } from "@/utils/test-utils" + +import * as ExtensionStateContext from "@src/context/ExtensionStateContext" +const { ExtensionStateContextProvider } = ExtensionStateContext + +import WelcomeViewProvider from "../WelcomeViewProvider" +import { vscode } from "@src/utils/vscode" + +// Mock VSCode components +vi.mock("@vscode/webview-ui-toolkit/react", () => ({ + VSCodeLink: ({ children, onClick }: any) => ( + + ), + VSCodeProgressRing: () =>
Loading...
, + VSCodeTextField: ({ value, onKeyUp, placeholder }: any) => ( + + ), + VSCodeRadioGroup: ({ children, value, _onChange }: any) => ( +
+ {children} +
+ ), + VSCodeRadio: ({ children, value, onClick }: any) => ( +
+ {children} +
+ ), +})) + +// Mock Button component +vi.mock("@src/components/ui", () => ({ + Button: ({ children, onClick, variant }: any) => ( + + ), +})) + +// Mock ApiOptions +vi.mock("../../settings/ApiOptions", () => ({ + default: () =>
API Options Component
, +})) + +// Mock Tab components +vi.mock("../../common/Tab", () => ({ + Tab: ({ children }: any) =>
{children}
, + TabContent: ({ children }: any) =>
{children}
, +})) + +// Mock RooHero +vi.mock("../RooHero", () => ({ + default: () =>
Roo Hero
, +})) + +// Mock lucide-react icons +vi.mock("lucide-react", () => ({ + ArrowLeft: () => , + ArrowRight: () => , + BadgeInfo: () => , + Brain: () => 🧠, + TriangleAlert: () => , +})) + +// Mock vscode utility +vi.mock("@src/utils/vscode", () => ({ + vscode: { + postMessage: vi.fn(), + }, +})) + +// Mock react-i18next +vi.mock("react-i18next", () => ({ + Trans: ({ i18nKey, children }: any) => {children || i18nKey}, + initReactI18next: { + type: "3rdParty", + init: () => {}, + }, +})) + +// Mock the translation hook +vi.mock("@src/i18n/TranslationContext", () => ({ + useAppTranslation: () => ({ + t: (key: string) => key, + }), +})) + +// Mock buildDocLink +vi.mock("@/utils/docLinks", () => ({ + buildDocLink: (path: string, source: string) => `https://docs.roocode.com/${path}?utm_source=${source}`, +})) + +const renderWelcomeViewProvider = (extensionState = {}) => { + const useExtensionStateMock = vi.spyOn(ExtensionStateContext, "useExtensionState") + useExtensionStateMock.mockReturnValue({ + apiConfiguration: {}, + currentApiConfigName: "default", + setApiConfiguration: vi.fn(), + uriScheme: "vscode", + cloudIsAuthenticated: false, + ...extensionState, + } as any) + + render( + + + , + ) + + return useExtensionStateMock +} + +describe("WelcomeViewProvider", () => { + beforeEach(() => { + vi.clearAllMocks() + }) + + describe("Landing Screen", () => { + it("renders landing screen by default", () => { + renderWelcomeViewProvider() + + // Should show the landing greeting + expect(screen.getByText(/welcome:landing.greeting/)).toBeInTheDocument() + + // Should show introduction + expect(screen.getByTestId("trans-welcome:landing.introduction")).toBeInTheDocument() + + // Should show account mention + expect(screen.getByTestId("trans-welcome:landing.accountMention")).toBeInTheDocument() + + // Should show "Get Started" button + expect(screen.getByTestId("button-primary")).toBeInTheDocument() + + // Should show "no account" link + const noAccountLink = screen + .getAllByTestId("vscode-link") + .find((link) => link.textContent?.includes("welcome:landing.noAccount")) + expect(noAccountLink).toBeInTheDocument() + }) + + it("triggers auth when 'Get Started' is clicked on landing", () => { + renderWelcomeViewProvider() + + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + expect(vscode.postMessage).toHaveBeenCalledWith({ + type: "rooCloudSignIn", + useProviderSignup: true, + }) + }) + + it("shows auth in progress after clicking 'Get Started' on landing", () => { + renderWelcomeViewProvider() + + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + // Should show progress ring + expect(screen.getByTestId("progress-ring")).toBeInTheDocument() + + // Should show waiting heading + expect(screen.getByText(/welcome:waitingForCloud.heading/)).toBeInTheDocument() + }) + + it("navigates to provider selection when 'no account' is clicked", () => { + renderWelcomeViewProvider() + + // Click the "no account" link + const noAccountLink = screen + .getAllByTestId("vscode-link") + .find((link) => link.textContent?.includes("welcome:landing.noAccount")) + fireEvent.click(noAccountLink!) + + // Should now show provider selection screen with radio buttons + expect(screen.getByTestId("radio-group")).toBeInTheDocument() + expect(screen.getByTestId("radio-roo")).toBeInTheDocument() + expect(screen.getByTestId("radio-custom")).toBeInTheDocument() + expect(screen.getByTestId("trans-welcome:providerSignup.chooseProvider")).toBeInTheDocument() + }) + }) + + describe("Provider Selection Screen", () => { + const navigateToProviderSelection = () => { + const noAccountLink = screen + .getAllByTestId("vscode-link") + .find((link) => link.textContent?.includes("welcome:landing.noAccount")) + fireEvent.click(noAccountLink!) + } + + it("shows radio buttons for Roo and Custom providers", () => { + renderWelcomeViewProvider() + navigateToProviderSelection() + + // Should show radio group + expect(screen.getByTestId("radio-group")).toBeInTheDocument() + + // Should show both radio options + expect(screen.getByTestId("radio-roo")).toBeInTheDocument() + expect(screen.getByTestId("radio-custom")).toBeInTheDocument() + + // Should show Roo provider description + expect(screen.getByText(/welcome:providerSignup.rooCloudDescription/)).toBeInTheDocument() + + // Should show custom provider description + expect(screen.getByText(/welcome:providerSignup.useAnotherProviderDescription/)).toBeInTheDocument() + }) + + it("Roo provider is selected by default", () => { + renderWelcomeViewProvider() + navigateToProviderSelection() + + const radioGroup = screen.getByTestId("radio-group") + expect(radioGroup).toHaveAttribute("data-value", "roo") + }) + + it("does not show API options when Roo provider is selected", () => { + renderWelcomeViewProvider() + navigateToProviderSelection() + + // API options exist but should be hidden with max-h-0 (collapsed via CSS) + // We can't easily test CSS visibility, so just verify the element is in the DOM + // but would be hidden by the transition class + const apiOptions = screen.queryByTestId("api-options") + expect(apiOptions).toBeInTheDocument() + }) + + it("triggers auth when Get Started is clicked on Roo provider (not authenticated)", () => { + renderWelcomeViewProvider({ cloudIsAuthenticated: false }) + navigateToProviderSelection() + + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + expect(vscode.postMessage).toHaveBeenCalledWith({ + type: "rooCloudSignIn", + useProviderSignup: true, + }) + }) + + it("saves config immediately when Get Started is clicked on Roo provider (already authenticated)", () => { + renderWelcomeViewProvider({ cloudIsAuthenticated: true }) + navigateToProviderSelection() + + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + expect(vscode.postMessage).toHaveBeenCalledWith({ + type: "upsertApiConfiguration", + text: "default", + apiConfiguration: { + apiProvider: "roo", + }, + }) + }) + + // Note: We can't easily test radio selection changes in the mocked environment + // since the VSCodeRadioGroup component's onChange is complex + // These tests would work in a real browser environment + it.skip("shows API options when custom provider is selected", () => { + renderWelcomeViewProvider() + navigateToProviderSelection() + + // Would simulate selecting custom provider in real environment + // API options visibility is controlled by CSS transition based on selectedProvider state + }) + + it.skip("validates and saves configuration when Get Started is clicked on custom provider", () => { + // This test would require properly simulating the radio group onChange + // which is complex in the mocked environment + }) + }) + + describe("Auth In Progress State", () => { + it("shows waiting state with progress ring", () => { + renderWelcomeViewProvider() + + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + // Should show progress ring + expect(screen.getByTestId("progress-ring")).toBeInTheDocument() + + // Should show waiting heading + expect(screen.getByText(/welcome:waitingForCloud.heading/)).toBeInTheDocument() + + // Should show description (it's rendered via t() not Trans) + expect(screen.getByText(/welcome:waitingForCloud.description/)).toBeInTheDocument() + }) + + it("shows Go Back button in waiting state", () => { + renderWelcomeViewProvider() + + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + // Should show secondary button (Go Back) + expect(screen.getByTestId("button-secondary")).toBeInTheDocument() + expect(screen.getByText(/welcome:waitingForCloud.goBack/)).toBeInTheDocument() + }) + + it("returns to landing screen when Go Back is clicked (auth from landing)", () => { + renderWelcomeViewProvider() + + // Start auth from landing + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + // Verify we're in auth progress + expect(screen.getByTestId("progress-ring")).toBeInTheDocument() + + // Click Go Back + const goBackButton = screen.getByTestId("button-secondary") + fireEvent.click(goBackButton) + + // Should be back on landing screen + expect(screen.getByText(/welcome:landing.greeting/)).toBeInTheDocument() + expect(screen.getByTestId("trans-welcome:landing.introduction")).toBeInTheDocument() + expect(screen.queryByTestId("progress-ring")).not.toBeInTheDocument() + }) + + it("returns to provider selection when Go Back is clicked (auth from provider selection)", () => { + renderWelcomeViewProvider({ cloudIsAuthenticated: false }) + + // Navigate to provider selection + const noAccountLink = screen + .getAllByTestId("vscode-link") + .find((link) => link.textContent?.includes("welcome:landing.noAccount")) + fireEvent.click(noAccountLink!) + + // Start auth from provider selection (Roo is selected by default) + const getStartedButton = screen.getByTestId("button-primary") + fireEvent.click(getStartedButton) + + // Verify we're in auth progress + expect(screen.getByTestId("progress-ring")).toBeInTheDocument() + + // Click Go Back + const goBackButton = screen.getByTestId("button-secondary") + fireEvent.click(goBackButton) + + // Should be back on provider selection screen + expect(screen.getByTestId("radio-group")).toBeInTheDocument() + expect(screen.getByTestId("trans-welcome:providerSignup.chooseProvider")).toBeInTheDocument() + expect(screen.queryByTestId("progress-ring")).not.toBeInTheDocument() + }) + }) +}) diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index c64dccde8f1..a4e5df63bd4 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -250,6 +250,7 @@ "configProfile": "Perfil de configuració", "description": "Deseu diferents configuracions d'API per canviar ràpidament entre proveïdors i configuracions.", "apiProvider": "Proveïdor d'API", + "apiProviderDocs": "Documentació del proveïdor", "model": "Model", "nameEmpty": "El nom no pot estar buit", "nameExists": "Ja existeix un perfil amb aquest nom", diff --git a/webview-ui/src/i18n/locales/ca/welcome.json b/webview-ui/src/i18n/locales/ca/welcome.json index 5c19c5e7745..2fa29db729d 100644 --- a/webview-ui/src/i18n/locales/ca/welcome.json +++ b/webview-ui/src/i18n/locales/ca/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Benvingut a Roo Code!", - "introduction": "Amb una gamma de Modes integrats i ampliables, Roo Code et permet planificar, arquitectar, codificar, depurar i augmentar la teva productivitat com mai abans.", - "notice": "Per començar, aquesta extensió necessita un proveïdor d'API.", - "start": "Som-hi!", "routers": { "requesty": { - "description": "El teu router LLM optimitzat", - "incentive": "$1 de crèdit gratuït" + "description": "El teu encaminador LLM optimitzat", + "incentive": "Crèdit gratuït de $1" }, "openrouter": { - "description": "Una interfície unificada per a LLMs" + "description": "Una interfície unificada per als LLM" }, "roo": { "description": "Els millors models gratuïts per començar", "incentive": "Prova Roo gratis" } }, - "chooseProvider": "Per començar, necessites un proveïdor LLM:", + "landing": { + "greeting": "Benvingut a Roo Code!", + "introduction": "Amb una gamma de Modes integrats i ampliables, Roo Code et permet planificar, arquitectar, codificar, depurar i augmentar la teva productivitat com mai abans.", + "accountMention": "Per començar, crea el teu compte Roo Code Cloud. Obtén models potents, control web, analítica, suport i molt més.", + "getStarted": "Comença", + "noAccount": "o utilitza sense compte" + }, "providerSignup": { - "rooCloudProvider": "Proveïdor Roo Code Cloud", - "rooCloudDescription": "La manera més senzilla d'utilitzar Roo. Una combinació seleccionada de models gratuïts i de pagament a un cost baix", - "learnMore": "més informació", - "useAnotherProvider": "Utilitza un altre proveïdor", - "useAnotherProviderDescription": "Introdueix una clau API i comença.", - "noApiKeys": "No vols haver de tractar amb claus? Opta pel Proveïdor Roo Code Cloud.", - "getStarted": "Començar" + "heading": "Tria el teu proveïdor", + "chooseProvider": "Roo necessita un proveïdor de LLM per funcionar. Tria-ne un per començar, pots afegir-ne més tard.", + "rooCloudProvider": "Proveïdor de Roo Code Cloud", + "rooCloudDescription": "La manera més fàcil de començar és amb el Proveïdor Roo Code Cloud: una mescla acurada de models gratuïts i de pagament a baix cost.", + "learnMore": "Més informació", + "useAnotherProvider": "Proveïdor de tercers", + "useAnotherProviderDescription": "Entra una clau API i comença.", + "noApiKeys": "No vols tractar amb claus API i comptes separats?", + "backToRoo": "Tria el Proveïdor Roo Code Cloud.", + "goBack": "Enrere", + "finish": "Finalitza" }, "waitingForCloud": { - "heading": "Et portem a Roo Code Cloud...", - "description": "Completa el registre al navegador i tornaràs aquí automàticament.", - "noPrompt": "Si no se t'avisa per obrir una URL, feu clic aquí.", - "havingTrouble": "Si has completat el registre però tens problemes, feu clic aquí.", - "pasteUrl": "Enganxa la URL de resposta del teu navegador:", - "invalidURL": "No sembla una URL de resposta vàlida. Copia el que Roo Code Cloud mostra al teu navegador.", + "heading": "Connexió a Roo Code Cloud...", + "description": "Et portarem al teu navegador per registrar-te a Roo Code Cloud. Després et portarem aquí per acabar.", + "noPrompt": "Si no se't demana que obris una URL, fes clic aquí.", + "havingTrouble": "Si has acabat de registrar-te però tens problemes, fes clic aquí.", + "pasteUrl": "Enganxa l'URL de devolució de trucada des del teu navegador:", + "docsLink": "No funciona? Consulta la documentació.", + "invalidURL": "Això no sembla una URL de devolució de trucada vàlida. Si us plau, copia el que Roo Code Cloud està mostrant al teu navegador.", "goBack": "Enrere" }, - "startRouter": "Recomanem utilitzar un router LLM:", - "startCustom": "O pots utilitzar la teva pròpia clau API:", + "startRouter": "Recomanem utilitzar un encaminador LLM:", + "startCustom": "O pots portar la teva pròpia clau API:", "telemetry": { "helpImprove": "Ajuda a millorar Roo Code", - "helpImproveMessage": "Roo Code recopila dades d'errors i d'ús per ajudar-nos a corregir errors i millorar l'extensió. Aquesta telemetria no recopila codi, prompts o informació personal. Pots desactivar això a la configuració." + "helpImproveMessage": "Roo Code recopila dades d'errors i ús per ajudar-nos a corregir errors i millorar l'extensió. Aquesta telemetria no recopila codi, indicacions o informació personal. Pots desactivar-la a configuració." }, - "importSettings": "Importar configuració" + "importSettings": "Importa la configuració" } diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index ced4a8b428e..b84713afca1 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -250,6 +250,7 @@ "configProfile": "Konfigurationsprofil", "description": "Speichern Sie verschiedene API-Konfigurationen, um schnell zwischen Anbietern und Einstellungen zu wechseln.", "apiProvider": "API-Anbieter", + "apiProviderDocs": "Anbieter-Dokumentation", "model": "Modell", "nameEmpty": "Name darf nicht leer sein", "nameExists": "Ein Profil mit diesem Namen existiert bereits", diff --git a/webview-ui/src/i18n/locales/de/welcome.json b/webview-ui/src/i18n/locales/de/welcome.json index d4706151d5d..21f40552d76 100644 --- a/webview-ui/src/i18n/locales/de/welcome.json +++ b/webview-ui/src/i18n/locales/de/welcome.json @@ -1,8 +1,4 @@ { - "greeting": "Willkommen bei Roo Code!", - "introduction": "Mit einer Reihe von integrierten und erweiterbaren Modi ermöglicht dir Roo Code, zu planen, zu architektieren, zu coden, zu debuggen und deine Produktivität wie nie zuvor zu steigern.", - "notice": "Um loszulegen, benötigt diese Erweiterung einen API-Anbieter.", - "start": "Los geht's!", "routers": { "requesty": { "description": "Dein optimierter LLM-Router", @@ -16,22 +12,33 @@ "incentive": "Probier Roo kostenlos aus" } }, - "chooseProvider": "Roo braucht einen LLM-Anbieter. Wähle deinen:", + "landing": { + "greeting": "Willkommen bei Roo Code!", + "introduction": "Mit einer Reihe von integrierten und erweiterbaren Modi ermöglicht dir Roo Code, zu planen, zu architektieren, zu coden, zu debuggen und deine Produktivität wie nie zuvor zu steigern.", + "accountMention": "Um zu beginnen, erstelle dein Roo Code Cloud Konto. Erhalte leistungsstarke Modelle, Webkontrolle, Analysen, Support und mehr.", + "getStarted": "Loslegen", + "noAccount": "oder ohne Konto verwenden" + }, "providerSignup": { + "heading": "Wähle deinen Anbieter", + "chooseProvider": "Roo braucht einen LLM-Anbieter, um zu funktionieren. Wähle einen aus, um loszulegen. Du kannst später mehr hinzufügen.", "rooCloudProvider": "Roo Code Cloud Provider", - "rooCloudDescription": "Der einfachste Weg, Roo zu nutzen. Eine kuratierte Mischung aus kostenlosen und bezahlten Modellen zu niedrigen Kosten", - "learnMore": "mehr erfahren", - "useAnotherProvider": "Anderen Anbieter verwenden", + "rooCloudDescription": "Der einfachste Weg loszulegen ist mit dem Roo Code Cloud Provider: eine kuratierte Mischung aus kostenlosen und bezahlten Modellen zu niedrigen Kosten.", + "learnMore": "Weitere Informationen", + "useAnotherProvider": "3rd-party Provider", "useAnotherProviderDescription": "Gib einen API-Schlüssel ein und leg los.", - "noApiKeys": "Du möchtest dich nicht mit Schlüsseln herumschlagen? Geh mit dem Roo Code Cloud Provider.", - "getStarted": "Loslegen" + "noApiKeys": "Du möchtest dich nicht mit API-Schlüsseln und separaten Konten rumschlagen?", + "backToRoo": "Geh mit dem Roo Code Cloud Provider.", + "goBack": "Zurück", + "finish": "Beenden" }, "waitingForCloud": { - "heading": "Wir bringen dich zu Roo Code Cloud...", + "heading": "Anmeldung bei Roo Code Cloud...", "description": "Wir bringen dich in deinen Browser, um dich für Roo Code Cloud zu registrieren. Dann bringen wir dich hierher zurück, um das Einrichten abzuschließen.", "noPrompt": "Wenn du nicht aufgefordert wirst, eine URL zu öffnen, klick hier.", "havingTrouble": "Wenn du die Anmeldung abgeschlossen hast, aber Probleme hast, klick hier.", "pasteUrl": "Füge die Callback-URL aus deinem Browser ein:", + "docsLink": "Funktioniert nicht? Schau dir die Dokumentation an.", "invalidURL": "Das sieht nicht wie eine gültige Callback-URL aus. Bitte kopiere das, was Roo Code Cloud in deinem Browser anzeigt.", "goBack": "Zurück" }, diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index a4aeea1ae63..63ae8ef45ed 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -259,6 +259,7 @@ "configProfile": "Configuration Profile", "description": "Save different API configurations to quickly switch between providers and settings.", "apiProvider": "API Provider", + "apiProviderDocs": "Provider Docs", "model": "Model", "nameEmpty": "Name cannot be empty", "nameExists": "A profile with this name already exists", diff --git a/webview-ui/src/i18n/locales/en/welcome.json b/webview-ui/src/i18n/locales/en/welcome.json index 46a399997d7..4fbe4be33a9 100644 --- a/webview-ui/src/i18n/locales/en/welcome.json +++ b/webview-ui/src/i18n/locales/en/welcome.json @@ -1,8 +1,4 @@ { - "greeting": "Welcome to Roo Code!", - "introduction": "With a range of built-in and extensible Modes, Roo Code lets you plan, architect, code, debug and boost your productivity like never before.", - "notice": "To get started, this extension needs an API provider.", - "start": "Let's go!", "routers": { "requesty": { "description": "Your optimized LLM router", @@ -16,22 +12,33 @@ "incentive": "Try Roo out for free" } }, - "chooseProvider": "Roo needs an LLM provider to work. Choose yours:", + "landing": { + "greeting": "Welcome to Roo Code!", + "introduction": "With a range of built-in and extensible Modes, Roo Code lets you plan, architect, code, debug and boost your productivity like never before.", + "accountMention": "To get started, create your Roo Code Cloud account. Get powerful models, web control, analytics, support and more.", + "getStarted": "Get started", + "noAccount": "or use without an account" + }, "providerSignup": { + "heading": "Choose your provider", + "chooseProvider": "Roo needs an LLM provider to work. Choose one to get started, you can add more later.", "rooCloudProvider": "Roo Code Cloud Provider", - "rooCloudDescription": "The simplest way to use Roo. A curated mix of free and paid models at a low cost", - "learnMore": "learn more", - "useAnotherProvider": "Use another provider", + "rooCloudDescription": "The easiest way to start is with the Roo Code Cloud Provider: a curated mix of free and paid models at a low cost.", + "learnMore": "Learn more", + "useAnotherProvider": "3rd-party Provider", "useAnotherProviderDescription": "Enter an API key and get going.", - "noApiKeys": "Don't want to deal with keys? Go with the Roo Code Cloud Provider.", - "getStarted": "Get started" + "noApiKeys": "Don't want to deal with API keys and separate accounts?", + "backToRoo": "Go with the Roo Code Cloud Provider.", + "goBack": "Back", + "finish": "Finish" }, "waitingForCloud": { - "heading": "Taking you to Roo Code Cloud...", + "heading": "Logging into Roo Code Cloud...", "description": "We'll take you to your browser to sign up for Roo Code Cloud. We'll then bring you back here to finish.", "noPrompt": "If you don't get prompted to open a URL, click here.", "havingTrouble": "If you've completed sign up but are having trouble, click here.", "pasteUrl": "Paste the callback URL shown in your browser:", + "docsLink": "Not working? Check the docs.", "invalidURL": "That doesn't look like a valid callback URL. Please copy what Roo Code Cloud is showing in your browser.", "goBack": "Go back" }, diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index e0e1881d177..8e52b12d286 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -250,6 +250,7 @@ "configProfile": "Perfil de configuración", "description": "Guarde diferentes configuraciones de API para cambiar rápidamente entre proveedores y ajustes.", "apiProvider": "Proveedor de API", + "apiProviderDocs": "Documentación del Proveedor", "model": "Modelo", "nameEmpty": "El nombre no puede estar vacío", "nameExists": "Ya existe un perfil con este nombre", diff --git a/webview-ui/src/i18n/locales/es/welcome.json b/webview-ui/src/i18n/locales/es/welcome.json index e4b1f99c274..69e0f01e8e0 100644 --- a/webview-ui/src/i18n/locales/es/welcome.json +++ b/webview-ui/src/i18n/locales/es/welcome.json @@ -1,8 +1,4 @@ { - "greeting": "¡Bienvenido a Roo Code!", - "introduction": "Con una variedad de Modos integrados y extensibles, Roo Code te permite planificar, arquitectar, codificar, depurar y aumentar tu productividad como nunca antes.", - "notice": "Para comenzar, esta extensión necesita un proveedor de API.", - "start": "¡Vamos!", "routers": { "requesty": { "description": "Tu router LLM optimizado", @@ -16,24 +12,35 @@ "incentive": "Prueba Roo gratis" } }, - "chooseProvider": "Roo necesita un proveedor de LLM. Elige el tuyo:", + "landing": { + "greeting": "¡Bienvenido a Roo Code!", + "introduction": "Con una variedad de Modos integrados y extensibles, Roo Code te permite planificar, arquitectar, codificar, depurar y aumentar tu productividad como nunca antes.", + "accountMention": "Para comenzar, crea tu cuenta de Roo Code Cloud. Obtén modelos potentes, control web, análisis, soporte y más.", + "getStarted": "Comenzar", + "noAccount": "o usar sin cuenta" + }, "providerSignup": { - "rooCloudProvider": "Proveedor Roo Code Cloud", - "rooCloudDescription": "La forma más sencilla de usar Roo. Una mezcla seleccionada de modelos gratuitos y de pago a bajo costo", - "learnMore": "más información", - "useAnotherProvider": "Usar otro proveedor", + "heading": "Elige tu proveedor", + "chooseProvider": "Roo necesita un proveedor de LLM para funcionar. Elige uno para comenzar, puedes añadir más después.", + "rooCloudProvider": "Proveedor de Roo Code Cloud", + "rooCloudDescription": "La forma más sencilla de comenzar es con el Proveedor Roo Code Cloud: una mezcla seleccionada de modelos gratuitos y de pago a bajo costo.", + "learnMore": "Más información", + "useAnotherProvider": "Proveedor de terceros", "useAnotherProviderDescription": "Introduce una clave API y comienza.", - "noApiKeys": "¿No quieres lidiar con claves? Ve con el Proveedor de Roo Code Cloud.", - "getStarted": "Comenzar" + "noApiKeys": "¿No quieres lidiar con claves API y cuentas separadas?", + "backToRoo": "Ve con el Proveedor de Roo Code Cloud.", + "goBack": "Atrás", + "finish": "Finalizar" }, "waitingForCloud": { - "heading": "Te llevamos a Roo Code Cloud...", + "heading": "Iniciando sesión en Roo Code Cloud...", "description": "Te llevaremos a tu navegador para que te registres en Roo Code Cloud. Luego te traeremos aquí para terminar.", "noPrompt": "Si no se te pide que abras una URL, haz clic aquí.", "havingTrouble": "Si completaste el registro pero tienes problemas, haz clic aquí.", "pasteUrl": "Pega la URL de respuesta de tu navegador:", + "docsLink": "¿No funciona? Consulta la documentación.", "invalidURL": "Eso no parece ser una URL de respuesta válida. Por favor copia lo que Roo Code Cloud está mostrando en tu navegador.", - "goBack": "Volver" + "goBack": "Atrás" }, "startRouter": "Recomendamos usar un router LLM:", "startCustom": "O puedes traer tu propia clave API:", diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 6ff29c77a45..21f11f52c2c 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -250,6 +250,7 @@ "configProfile": "Profil de configuration", "description": "Enregistrez différentes configurations d'API pour basculer rapidement entre les fournisseurs et les paramètres.", "apiProvider": "Fournisseur d'API", + "apiProviderDocs": "Documentation du Fournisseur", "model": "Modèle", "nameEmpty": "Le nom ne peut pas être vide", "nameExists": "Un profil avec ce nom existe déjà", diff --git a/webview-ui/src/i18n/locales/fr/welcome.json b/webview-ui/src/i18n/locales/fr/welcome.json index 5ede6eb37a6..94c153d0411 100644 --- a/webview-ui/src/i18n/locales/fr/welcome.json +++ b/webview-ui/src/i18n/locales/fr/welcome.json @@ -1,8 +1,4 @@ { - "greeting": "Bienvenue sur Roo Code !", - "introduction": "Avec une gamme de Modes intégrés et extensibles, Roo Code te permet de planifier, architecturer, coder, déboguer et augmenter ta productivité comme jamais auparavant.", - "notice": "Pour commencer, cette extension a besoin d'un fournisseur d'API.", - "start": "C'est parti !", "routers": { "requesty": { "description": "Ton routeur LLM optimisé", @@ -16,22 +12,33 @@ "incentive": "Essayez Roo gratuitement" } }, - "chooseProvider": "Pour commencer, tu as besoin d'un fournisseur LLM :", + "landing": { + "greeting": "Bienvenue sur Roo Code !", + "introduction": "Avec une gamme de Modes intégrés et extensibles, Roo Code te permet de planifier, architecturer, coder, déboguer et augmenter ta productivité comme jamais auparavant.", + "accountMention": "Pour commencer, crée ton compte Roo Code Cloud. Obtiens des modèles puissants, le contrôle web, les analyses, le support et bien plus encore.", + "getStarted": "Commencer", + "noAccount": "ou utiliser sans compte" + }, "providerSignup": { + "heading": "Choisis ton fournisseur", + "chooseProvider": "Roo a besoin d'un fournisseur LLM pour fonctionner. Choisis-en un pour commencer, tu peux en ajouter d'autres plus tard.", "rooCloudProvider": "Fournisseur Roo Code Cloud", - "rooCloudDescription": "La façon la plus simple d'utiliser Roo. Un mélange sélectionné de modèles gratuits et payants à faible coût", - "learnMore": "en savoir plus", - "useAnotherProvider": "Utiliser un autre fournisseur", + "rooCloudDescription": "Le moyen le plus simple de commencer est le Fournisseur Roo Code Cloud : un mélange sélectionné de modèles gratuits et payants à faible coût.", + "learnMore": "En savoir plus", + "useAnotherProvider": "Fournisseur tiers", "useAnotherProviderDescription": "Entre une clé API et commence.", - "noApiKeys": "Tu ne veux pas te soucier des clés? Opte pour le Fournisseur Roo Code Cloud.", - "getStarted": "Commencer" + "noApiKeys": "Tu ne veux pas gérer les clés API et les comptes séparés?", + "backToRoo": "Opte pour le Fournisseur Roo Code Cloud.", + "goBack": "Retour", + "finish": "Terminer" }, "waitingForCloud": { - "heading": "Nous te menons à Roo Code Cloud...", + "heading": "Connexion à Roo Code Cloud...", "description": "Termine l'inscription dans ton navigateur et tu reviendras ici automatiquement.", "noPrompt": "Si tu n'es pas invité à ouvrir une URL, clique ici.", "havingTrouble": "Si tu as terminé l'inscription mais que tu rencontres des problèmes, clique ici.", "pasteUrl": "Colle l'URL de rappel depuis ton navigateur :", + "docsLink": "Ça ne fonctionne pas? Consulte la documentation.", "invalidURL": "Cela ne ressemble pas à une URL de rappel valide. Copie ce que Roo Code Cloud affiche dans ton navigateur.", "goBack": "Retour" }, diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 06efbf63243..83b9893dcf6 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -250,6 +250,7 @@ "configProfile": "कॉन्फिगरेशन प्रोफाइल", "description": "विभिन्न API कॉन्फ़िगरेशन सहेजें ताकि प्रदाताओं और सेटिंग्स के बीच त्वरित रूप से स्विच कर सकें।", "apiProvider": "API प्रदाता", + "apiProviderDocs": "प्रदाता डॉक्स", "model": "मॉडल", "nameEmpty": "नाम खाली नहीं हो सकता", "nameExists": "इस नाम वाला प्रोफ़ाइल पहले से मौजूद है", diff --git a/webview-ui/src/i18n/locales/hi/welcome.json b/webview-ui/src/i18n/locales/hi/welcome.json index d43b90b5535..04409fc902c 100644 --- a/webview-ui/src/i18n/locales/hi/welcome.json +++ b/webview-ui/src/i18n/locales/hi/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Roo Code में आपका स्वागत है!", - "introduction": "अंतर्निहित और विस्तारित मोड्स की एक श्रृंखला के साथ, Roo Code आपको पहले कभी न देखे गए तरीके से योजना बनाने, आर्किटेक्ट करने, कोड करने, डीबग करने और अपनी उत्पादकता बढ़ाने की अनुमति देता है।", - "notice": "शुरू करने के लिए, इस एक्सटेंशन को एक API प्रदाता की आवश्यकता है।", - "start": "चलो शुरू करें!", "routers": { "requesty": { "description": "आपका अनुकूलित LLM राउटर", "incentive": "$1 मुफ्त क्रेडिट" }, "openrouter": { - "description": "LLMs के लिए एक एकीकृत इंटरफेस" + "description": "LLM के लिए एक एकीकृत इंटरफेस" }, "roo": { - "description": "शुरू करने के लिए सर्वोत्तम निःशुल्क मॉडल", - "incentive": "Roo को निःशुल्क आज़माएं" + "description": "शुरुआत करने के लिए सर्वश्रेष्ठ मुफ्त मॉडल", + "incentive": "Roo को मुफ्त में आजमाएं" } }, - "chooseProvider": "शुरू करने के लिए, आपको एक LLM प्रदाता की आवश्यकता है:", + "landing": { + "greeting": "Roo Code में आपका स्वागत है!", + "introduction": "अंतर्निहित और विस्तारित मोड्स की एक श्रृंखला के साथ, Roo Code आपको पहले कभी न देखे गए तरीके से योजना बनाने, आर्किटेक्ट करने, कोड करने, डीबग करने और अपनी उत्पादकता बढ़ाने की अनुमति देता है।", + "accountMention": "शुरुआत करने के लिए, अपना Roo Code Cloud खाता बनाएं। शक्तिशाली मॉडल, वेब नियंत्रण, विश्लेषण, समर्थन और अधिक प्राप्त करें।", + "getStarted": "शुरुआत करें", + "noAccount": "या बिना खाते के उपयोग करें" + }, "providerSignup": { + "heading": "अपना प्रदाता चुनें", + "chooseProvider": "Roo को काम करने के लिए एक LLM प्रदाता की आवश्यकता है। शुरुआत करने के लिए एक चुनें, आप बाद में और जोड़ सकते हैं।", "rooCloudProvider": "Roo Code Cloud प्रदाता", - "rooCloudDescription": "Roo का उपयोग करने का सबसे आसान तरीका। कम लागत पर मुफ्त और भुगतान मॉडल का एक चयनित मिश्रण", - "learnMore": "और जानें", - "useAnotherProvider": "दूसरे प्रदाता का उपयोग करें", + "rooCloudDescription": "शुरुआत करने का सबसे आसान तरीका Roo Code Cloud प्रदाता का उपयोग करना है: कम लागत पर मुफ्त और सशुल्क मॉडल का एक सावधानीपूर्वक चयन।", + "learnMore": "अधिक जानें", + "useAnotherProvider": "तृतीय-पक्ष प्रदाता", "useAnotherProviderDescription": "एक API कुंजी दर्ज करें और शुरू करें।", - "noApiKeys": "कुंजियों से निपटना नहीं चाहते? Roo Code Cloud प्रदाता के साथ जाएं।", - "getStarted": "शुरू करें" + "noApiKeys": "क्या आप API कुंजी और अलग खातों से निपटना नहीं चाहते?", + "backToRoo": "Roo Code Cloud प्रदाता के साथ जाएं।", + "goBack": "वापस", + "finish": "समाप्त" }, "waitingForCloud": { - "heading": "आपको Roo Code Cloud पर ले जा रहे हैं...", - "description": "अपने ब्राउज़र में साइन अप पूरा करें और आप स्वचालित रूप से यहां वापस आ जाएंगे।", - "noPrompt": "यदि आपको URL खोलने के लिए संकेत नहीं मिलता है, तो यहां क्लिक करें।", + "heading": "Roo Code Cloud में लॉगिन किया जा रहा है...", + "description": "हम आपको Roo Code Cloud के लिए साइन अप करने के लिए अपने ब्राउज़र पर ले जाएंगे। फिर हम आपको यहां वापस लाएंगे।", + "noPrompt": "यदि आपको URL खोलने के लिए संकेत नहीं दिया जाता है, तो यहां क्लिक करें।", "havingTrouble": "यदि आपने साइन अप पूरा कर लिया है लेकिन समस्या हो रही है, तो यहां क्लिक करें।", "pasteUrl": "अपने ब्राउज़र से कॉलबैक URL पेस्ट करें:", - "invalidURL": "यह एक वैध कॉलबैक URL नहीं लगता है। कृपया वह कॉपी करें जो Roo Code Cloud आपके ब्राउज़र में दिखा रहा है।", - "goBack": "वापस जाएं" + "docsLink": "काम नहीं कर रहा? दस्तावेज़ देखें।", + "invalidURL": "यह एक मान्य कॉलबैक URL की तरह नहीं दिखता। कृपया वह कॉपी करें जो Roo Code Cloud आपके ब्राउज़र में दिखा रहा है।", + "goBack": "वापस" }, - "startRouter": "हम एक LLM राउटर का उपयोग करने की सलाह देते हैं:", - "startCustom": "या आप अपनी खुद की API कुंजी ला सकते हैं:", + "startRouter": "हम एक LLM राउटर का उपयोग करने की अनुशंसा करते हैं:", + "startCustom": "या आप अपनी API कुंजी ला सकते हैं:", "telemetry": { "helpImprove": "Roo Code को बेहतर बनाने में मदद करें", - "helpImproveMessage": "Roo Code बग्स को ठीक करने और एक्सटेंशन को बेहतर बनाने में हमारी मदद करने के लिए त्रुटि और उपयोग डेटा एकत्र करता है। यह टेलीमेट्री कोड, प्रॉम्प्ट या व्यक्तिगत जानकारी एकत्र नहीं करती। आप इसे सेटिंग्स में बंद कर सकते हैं।" + "helpImproveMessage": "Roo Code बग ठीक करने और एक्सटेंशन को बेहतर बनाने में हमारी मदद करने के लिए त्रुटि और उपयोग डेटा एकत्र करता है। यह दूरसंचार कोड, प्रॉम्प्ट या व्यक्तिगत जानकारी एकत्र नहीं करता है। आप इसे सेटिंग्स में अक्षम कर सकते हैं।" }, "importSettings": "सेटिंग्स आयात करें" } diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index 6cae436f089..4b058814e53 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -254,6 +254,7 @@ "configProfile": "Profil Konfigurasi", "description": "Simpan konfigurasi API yang berbeda untuk beralih dengan cepat antara provider dan pengaturan.", "apiProvider": "Provider API", + "apiProviderDocs": "Dokumentasi Penyedia", "model": "Model", "nameEmpty": "Nama tidak boleh kosong", "nameExists": "Profil dengan nama ini sudah ada", diff --git a/webview-ui/src/i18n/locales/id/welcome.json b/webview-ui/src/i18n/locales/id/welcome.json index 62364bf89ad..34f65aeb163 100644 --- a/webview-ui/src/i18n/locales/id/welcome.json +++ b/webview-ui/src/i18n/locales/id/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Selamat datang di Roo Code!", - "introduction": "Dengan berbagai Mode bawaan dan dapat diperluas, Roo Code memungkinkan Anda merencanakan, merancang, coding, debug, dan meningkatkan produktivitas seperti yang belum pernah terjadi sebelumnya.", - "notice": "Untuk memulai, ekstensi ini memerlukan provider API.", - "start": "Ayo mulai!", "routers": { "requesty": { "description": "Router LLM yang dioptimalkan", "incentive": "Kredit gratis $1" }, "openrouter": { - "description": "Interface terpadu untuk LLM" + "description": "Antarmuka terpadu untuk LLM" }, "roo": { "description": "Model gratis terbaik untuk memulai", "incentive": "Coba Roo gratis" } }, - "chooseProvider": "Untuk memulai, kamu memerlukan penyedia LLM:", + "landing": { + "greeting": "Selamat datang di Roo Code!", + "introduction": "Dengan berbagai Mode bawaan dan dapat diperluas, Roo Code memungkinkan Anda merencanakan, merancang, coding, debug, dan meningkatkan produktivitas seperti yang belum pernah terjadi sebelumnya.", + "accountMention": "Untuk memulai, buat akun Roo Code Cloud Anda. Dapatkan model yang kuat, kontrol web, analitik, dukungan, dan banyak lagi.", + "getStarted": "Memulai", + "noAccount": "atau gunakan tanpa akun" + }, "providerSignup": { + "heading": "Pilih penyedia Anda", + "chooseProvider": "Roo memerlukan penyedia LLM untuk bekerja. Pilih satu untuk memulai, Anda dapat menambahkan lebih banyak nanti.", "rooCloudProvider": "Penyedia Roo Code Cloud", - "rooCloudDescription": "Cara termudah untuk menggunakan Roo. Campuran model gratis dan berbayar yang dikurasi dengan biaya rendah", - "learnMore": "pelajari lebih lanjut", - "useAnotherProvider": "Gunakan penyedia lain", + "rooCloudDescription": "Cara termudah untuk memulai adalah dengan Penyedia Roo Code Cloud: campuran model gratis dan berbayar yang dikurasi dengan hati-hati dengan biaya rendah.", + "learnMore": "Pelajari lebih lanjut", + "useAnotherProvider": "Penyedia Pihak Ketiga", "useAnotherProviderDescription": "Masukkan kunci API dan mulai.", - "noApiKeys": "Tidak ingin menangani kunci? Pilih Penyedia Roo Code Cloud.", - "getStarted": "Mulai" + "noApiKeys": "Tidak ingin berurusan dengan kunci API dan akun terpisah?", + "backToRoo": "Pilih Penyedia Roo Code Cloud.", + "goBack": "Kembali", + "finish": "Selesai" }, "waitingForCloud": { - "heading": "Membawamu ke Roo Code Cloud...", - "description": "Selesaikan pendaftaran di browser dan kamu akan secara otomatis kembali ke sini.", - "noPrompt": "Jika kamu tidak diminta untuk membuka URL, klik di sini.", - "havingTrouble": "Jika kamu telah menyelesaikan pendaftaran tetapi mengalami masalah, klik di sini.", + "heading": "Masuk ke Roo Code Cloud...", + "description": "Kami akan membawa Anda ke browser Anda untuk mendaftar Roo Code Cloud. Kemudian kami akan membawa Anda kembali ke sini untuk menyelesaikannya.", + "noPrompt": "Jika Anda tidak diminta untuk membuka URL, klik di sini.", + "havingTrouble": "Jika Anda telah menyelesaikan pendaftaran tetapi mengalami masalah, klik di sini.", "pasteUrl": "Tempel URL callback dari browser Anda:", - "invalidURL": "Itu tidak terlihat seperti URL callback yang valid. Salin apa yang ditampilkan Roo Code Cloud di browser Anda.", + "docsLink": "Tidak bekerja? Periksa dokumentasi.", + "invalidURL": "Itu tidak terlihat seperti URL callback yang valid. Harap salin apa yang ditampilkan Roo Code Cloud di browser Anda.", "goBack": "Kembali" }, - "startRouter": "Kami merekomendasikan menggunakan Router LLM:", - "startCustom": "Atau Anda dapat menggunakan API key Anda sendiri:", + "startRouter": "Kami merekomendasikan menggunakan router LLM:", + "startCustom": "Atau Anda dapat membawa kunci API Anda sendiri:", "telemetry": { "helpImprove": "Bantu Tingkatkan Roo Code", - "helpImproveMessage": "Roo Code mengumpulkan data kesalahan dan penggunaan untuk membantu kami memperbaiki bug dan meningkatkan ekstensi. Telemetri ini tidak mengumpulkan kode, prompt, atau informasi pribadi. Anda dapat menonaktifkan ini di pengaturan." + "helpImproveMessage": "Roo Code mengumpulkan data kesalahan dan penggunaan untuk membantu kami memperbaiki bug dan meningkatkan ekstensi. Telemetri ini tidak mengumpulkan kode, prompt, atau informasi pribadi. Anda dapat menonaktifkannya di pengaturan." }, "importSettings": "Impor Pengaturan" } diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index aebc6d9aa22..f986b9819cf 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -250,6 +250,7 @@ "configProfile": "Profilo di configurazione", "description": "Salva diverse configurazioni API per passare rapidamente tra fornitori e impostazioni.", "apiProvider": "Fornitore API", + "apiProviderDocs": "Documentazione del Provider", "model": "Modello", "nameEmpty": "Il nome non può essere vuoto", "nameExists": "Esiste già un profilo con questo nome", diff --git a/webview-ui/src/i18n/locales/it/welcome.json b/webview-ui/src/i18n/locales/it/welcome.json index b5cdba921b6..4488f62436c 100644 --- a/webview-ui/src/i18n/locales/it/welcome.json +++ b/webview-ui/src/i18n/locales/it/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Benvenuto in Roo Code!", - "introduction": "Con una gamma di Modalità integrate ed estensibili, Roo Code ti permette di pianificare, architettare, codificare, debuggare e aumentare la tua produttività come mai prima d'ora.", - "notice": "Per iniziare, questa estensione necessita di un fornitore di API.", - "start": "Andiamo!", "routers": { "requesty": { "description": "Il tuo router LLM ottimizzato", "incentive": "$1 di credito gratuito" }, "openrouter": { - "description": "Un'interfaccia unificata per LLMs" + "description": "Un'interfaccia unificata per gli LLM" }, "roo": { "description": "I migliori modelli gratuiti per iniziare", "incentive": "Prova Roo gratuitamente" } }, - "chooseProvider": "Per iniziare, hai bisogno di un provider LLM:", + "landing": { + "greeting": "Benvenuto in Roo Code!", + "introduction": "Con una gamma di Modalità integrate ed estensibili, Roo Code ti permette di pianificare, architettare, codificare, debuggare e aumentare la tua produttività come mai prima d'ora.", + "accountMention": "Per iniziare, crea il tuo account Roo Code Cloud. Ottieni modelli potenti, controllo web, analitiche, supporto e altro ancora.", + "getStarted": "Inizia", + "noAccount": "o usa senza account" + }, "providerSignup": { + "heading": "Scegli il tuo provider", + "chooseProvider": "Roo ha bisogno di un provider LLM per funzionare. Scegline uno per iniziare, puoi aggiungerne altri in seguito.", "rooCloudProvider": "Provider Roo Code Cloud", - "rooCloudDescription": "Il modo più semplice per usare Roo. Un mix curato di modelli gratuiti e a pagamento a basso costo", - "learnMore": "scopri di più", - "useAnotherProvider": "Usa un altro provider", + "rooCloudDescription": "Il modo più semplice per iniziare è con il Provider Roo Code Cloud: un mix curato di modelli gratuiti e a pagamento a basso costo.", + "learnMore": "Scopri di più", + "useAnotherProvider": "Provider di terze parti", "useAnotherProviderDescription": "Inserisci una chiave API e inizia.", - "noApiKeys": "Non vuoi occuparti di chiavi? Scegli il Provider Roo Code Cloud.", - "getStarted": "Inizia" + "noApiKeys": "Non vuoi affrontare le chiavi API e gli account separati?", + "backToRoo": "Scegli il Provider Roo Code Cloud.", + "goBack": "Indietro", + "finish": "Fine" }, "waitingForCloud": { - "heading": "Ti stiamo portando a Roo Code Cloud...", - "description": "Completa l'iscrizione nel tuo browser e tornerai qui automaticamente.", - "noPrompt": "Se non ti viene chiesto di aprire un URL, fai clic qui.", - "havingTrouble": "Se hai completato l'iscrizione ma hai problemi, fai clic qui.", + "heading": "Accesso a Roo Code Cloud...", + "description": "Ti porteremo al tuo browser per registrarti a Roo Code Cloud. Poi ti riporteremo qui per terminare.", + "noPrompt": "Se non ti viene chiesto di aprire un URL, clicca qui.", + "havingTrouble": "Se hai completato la registrazione ma hai problemi, clicca qui.", "pasteUrl": "Incolla l'URL di callback dal tuo browser:", - "invalidURL": "Questo non sembra un URL di callback valido. Copia quello che Roo Code Cloud mostra nel tuo browser.", + "docsLink": "Non funziona? Consulta la documentazione.", + "invalidURL": "Non sembra un URL di callback valido. Per favore copia quello che Roo Code Cloud sta mostrando nel tuo browser.", "goBack": "Indietro" }, - "startRouter": "Consigliamo di utilizzare un router LLM:", - "startCustom": "Oppure puoi utilizzare la tua chiave API:", + "startRouter": "Ti consigliamo di usare un router LLM:", + "startCustom": "Oppure puoi portare la tua chiave API:", "telemetry": { "helpImprove": "Aiuta a migliorare Roo Code", - "helpImproveMessage": "Roo Code raccoglie dati di errori e utilizzo per aiutarci a correggere bug e migliorare l'estensione. Questa telemetria non raccoglie codice, prompt o informazioni personali. Puoi disabilitare questo nelle impostazioni." + "helpImproveMessage": "Roo Code raccoglie dati di errore e utilizzo per aiutarci a correggere i bug e migliorare l'estensione. Questa telemetria non raccoglie codice, prompt o informazioni personali. Puoi disabilitare questa funzione in impostazioni." }, "importSettings": "Importa impostazioni" } diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index 44a1da4dc4c..a73dc43e93a 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -250,6 +250,7 @@ "configProfile": "設定プロファイル", "description": "異なるAPI設定を保存して、プロバイダーと設定をすばやく切り替えることができます。", "apiProvider": "APIプロバイダー", + "apiProviderDocs": "プロバイダードキュメント", "model": "モデル", "nameEmpty": "名前を空にすることはできません", "nameExists": "この名前のプロファイルは既に存在します", diff --git a/webview-ui/src/i18n/locales/ja/welcome.json b/webview-ui/src/i18n/locales/ja/welcome.json index 83ecede6a37..43be978fc61 100644 --- a/webview-ui/src/i18n/locales/ja/welcome.json +++ b/webview-ui/src/i18n/locales/ja/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Roo Codeへようこそ!", - "introduction": "組み込みおよび拡張可能なモードを備えたRoo Codeは、計画、アーキテクチャ設計、コーディング、デバッグ、そして今までにない生産性向上を可能にします。", - "notice": "開始するには、この拡張機能にはAPIプロバイダーが必要です。", - "start": "さあ、始めましょう!", "routers": { "requesty": { "description": "最適化されたLLMルーター", - "incentive": "$1の無料クレジット" + "incentive": "無料の$1クレジット" }, "openrouter": { - "description": "LLMsのための統一インターフェース" + "description": "LLM向けの統一インターフェース" }, "roo": { "description": "始めるための最高の無料モデル", "incentive": "Rooを無料で試す" } }, - "chooseProvider": "開始するには、LLMプロバイダーが必要です:", + "landing": { + "greeting": "Roo Codeへようこそ!", + "introduction": "組み込みおよび拡張可能なモードを備えたRoo Codeは、計画、アーキテクチャ設計、コーディング、デバッグ、そして今までにない生産性向上を可能にします。", + "accountMention": "始めるには、Roo Code Cloudアカウントを作成してください。強力なモデル、ウェブコントロール、分析、サポート、その他をご利用いただけます。", + "getStarted": "始める", + "noAccount": "またはアカウントなしで使用" + }, "providerSignup": { + "heading": "プロバイダーを選択", + "chooseProvider": "Rooが機能するにはLLMプロバイダーが必要です。始めるために1つを選択してください。後から追加することもできます。", "rooCloudProvider": "Roo Code Cloudプロバイダー", - "rooCloudDescription": "Rooを使用する最も簡単な方法。低コストで厳選された無料および有料モデルの組み合わせ", + "rooCloudDescription": "始める最も簡単な方法は、Roo Code Cloudプロバイダーを使用することです。無料および有料モデルの厳選されたミックスを低コストで提供します。", "learnMore": "詳細を見る", - "useAnotherProvider": "別のプロバイダーを使用", - "useAnotherProviderDescription": "APIキーを入力して始める。", - "noApiKeys": "キーを扱いたくないですか?Roo Code Cloudプロバイダーを選びましょう。", - "getStarted": "始める" + "useAnotherProvider": "サードパーティプロバイダー", + "useAnotherProviderDescription": "APIキーを入力して開始します。", + "noApiKeys": "APIキーと別のアカウントを処理したくありませんか?", + "backToRoo": "Roo Code Cloudプロバイダーを選択してください。", + "goBack": "戻る", + "finish": "完了" }, "waitingForCloud": { - "heading": "Roo Code Cloudにお連れします...", - "description": "ブラウザでサインアップを完了すると、自動的にここに戻ります。", - "noPrompt": "URLを開くように促されない場合は、ここをクリックしてください。", - "havingTrouble": "サインアップを完了しましたが問題がある場合は、ここをクリックしてください。", - "pasteUrl": "ブラウザからコールバックURLを貼り付けてください:", - "invalidURL": "有効なコールバックURLのようには見えません。Roo Code Cloudがブラウザに表示しているものをコピーしてください。", + "heading": "Roo Code Cloudにログイン中...", + "description": "Roo Code Cloudに登録するためにブラウザーに移動します。その後、ここに戻って完了します。", + "noPrompt": "URLを開くように求められない場合は、ここをクリックしてください。", + "havingTrouble": "登録を完了しましたがトラブルが発生している場合は、ここをクリックしてください。", + "pasteUrl": "ブラウザーに表示されているコールバックURLを貼り付けます:", + "docsLink": "機能していませんか?ドキュメントを確認してください。", + "invalidURL": "有効なコールバックURLのようには見えません。Roo Code Cloudがブラウザーに表示しているものをコピーしてください。", "goBack": "戻る" }, - "startRouter": "LLMルーターの使用をお勧めします:", - "startCustom": "または、あなた自身のAPIキーを使用できます:", + "startRouter": "LLMルーターの使用をお勧めします:", + "startCustom": "または、独自のAPIキーを持ってくることもできます:", "telemetry": { "helpImprove": "Roo Codeの改善にご協力ください", - "helpImproveMessage": "Roo Codeは、バグの修正と拡張機能の改善のためにエラーと使用データを収集します。このテレメトリはコード、プロンプト、または個人情報を収集しません。これは設定で無効にできます。" + "helpImproveMessage": "Roo Codeは、バグを修正し、拡張機能を改善するために、エラーおよび使用データを収集します。このテレメトリはコード、プロンプト、または個人情報を収集しません。これは設定で無効にできます。" }, - "importSettings": "設定をインポート" + "importSettings": "設定のインポート" } diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index a810a6162cb..e180ea22839 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -250,6 +250,7 @@ "configProfile": "구성 프로필", "description": "다양한 API 구성을 저장하여 제공자와 설정 간에 빠르게 전환할 수 있습니다.", "apiProvider": "API 제공자", + "apiProviderDocs": "공급자 문서", "model": "모델", "nameEmpty": "이름은 비워둘 수 없습니다", "nameExists": "이 이름의 프로필이 이미 존재합니다", diff --git a/webview-ui/src/i18n/locales/ko/welcome.json b/webview-ui/src/i18n/locales/ko/welcome.json index 48b4078f878..c6d788d5f26 100644 --- a/webview-ui/src/i18n/locales/ko/welcome.json +++ b/webview-ui/src/i18n/locales/ko/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Roo Code에 오신 것을 환영합니다!", - "introduction": "내장 및 확장 가능한 다양한 모드를 통해 Roo Code는 계획, 아키텍처 설계, 코딩, 디버깅 및 전례 없는 생산성 향상을 가능하게 합니다.", - "notice": "시작하려면 이 확장 프로그램에 API 공급자가 필요합니다.", - "start": "시작해 봅시다!", "routers": { "requesty": { "description": "최적화된 LLM 라우터", - "incentive": "$1 무료 크레딧" + "incentive": "무료 $1 크레딧" }, "openrouter": { "description": "LLM을 위한 통합 인터페이스" }, "roo": { - "description": "시작하기에 최고의 무료 모델", - "incentive": "Roo를 무료로 체험해보세요" + "description": "시작하기 위한 최고의 무료 모델", + "incentive": "Roo 무료로 시도해보기" } }, - "chooseProvider": "시작하려면 LLM 제공업체가 필요합니다:", + "landing": { + "greeting": "Roo Code에 오신 것을 환영합니다!", + "introduction": "내장 및 확장 가능한 다양한 모드를 통해 Roo Code는 계획, 아키텍처 설계, 코딩, 디버깅 및 전례 없는 생산성 향상을 가능하게 합니다.", + "accountMention": "시작하려면 Roo Code Cloud 계정을 만드세요. 강력한 모델, 웹 제어, 분석, 지원 등을 얻으세요.", + "getStarted": "시작하기", + "noAccount": "또는 계정 없이 사용하기" + }, "providerSignup": { - "rooCloudProvider": "Roo Code Cloud 제공업체", - "rooCloudDescription": "Roo를 사용하는 가장 간단한 방법. 저렴한 비용으로 무료 및 유료 모델을 선별하여 제공", + "heading": "공급자 선택", + "chooseProvider": "Roo가 작동하려면 LLM 공급자가 필요합니다. 시작하려면 하나를 선택하세요. 나중에 더 추가할 수 있습니다.", + "rooCloudProvider": "Roo Code Cloud 공급자", + "rooCloudDescription": "시작하는 가장 쉬운 방법은 Roo Code Cloud 공급자를 사용하는 것입니다: 무료 및 유료 모델의 신중하게 선택된 믹스, 저렴한 비용으로.", "learnMore": "자세히 알아보기", - "useAnotherProvider": "다른 제공업체 사용", + "useAnotherProvider": "타사 공급자", "useAnotherProviderDescription": "API 키를 입력하고 시작하세요.", - "noApiKeys": "키를 다루기 싫으세요? Roo Code Cloud 제공업체를 선택하세요.", - "getStarted": "시작하기" + "noApiKeys": "API 키와 별도의 계정을 다루고 싶지 않으신가요?", + "backToRoo": "Roo Code Cloud 공급자를 선택하세요.", + "goBack": "뒤로", + "finish": "완료" }, "waitingForCloud": { - "heading": "Roo Code Cloud로 이동 중입니다...", - "description": "브라우저에서 가입을 완료하면 자동으로 여기로 돌아옵니다.", - "noPrompt": "URL을 열도록 요청받지 않으면 여기를 클릭하세요.", - "havingTrouble": "가입을 완료했지만 문제가 있으면 여기를 클릭하세요.", - "pasteUrl": "브라우저에서 콜백 URL을 붙여넣으세요:", - "invalidURL": "유효한 콜백 URL로 보이지 않습니다. Roo Code Cloud에서 브라우저에 표시하는 내용을 복사하세요.", - "goBack": "돌아가기" + "heading": "Roo Code Cloud에 로그인 중...", + "description": "Roo Code Cloud에 등록하기 위해 브라우저로 이동합니다. 그런 다음 여기로 돌아와서 완료합니다.", + "noPrompt": "URL을 열도록 요청받지 않으면 여기를 클릭하세요.", + "havingTrouble": "등록을 완료했지만 문제가 있는 경우 여기를 클릭하세요.", + "pasteUrl": "브라우저에서 표시된 콜백 URL을 붙여넣으세요:", + "docsLink": "작동하지 않나요? 문서를 확인하세요.", + "invalidURL": "유효한 콜백 URL처럼 보이지 않습니다. Roo Code Cloud가 브라우저에 표시하는 것을 복사하세요.", + "goBack": "뒤로" }, "startRouter": "LLM 라우터 사용을 권장합니다:", - "startCustom": "또는 직접 API 키를 가져올 수 있습니다:", + "startCustom": "또는 자신의 API 키를 가져올 수 있습니다:", "telemetry": { - "helpImprove": "Roo Code 개선에 도움 주세요", - "helpImproveMessage": "Roo Code는 버그 수정과 확장 프로그램 개선을 위해 오류 및 사용 데이터를 수집합니다. 이 텔레메트리는 코드, 프롬프트 또는 개인 정보를 수집하지 않습니다. 설정에서 이를 비활성화할 수 있습니다." + "helpImprove": "Roo Code 개선에 도움주세요", + "helpImproveMessage": "Roo Code는 버그를 수정하고 확장을 개선하기 위해 오류 및 사용 데이터를 수집합니다. 이 원격 분석은 코드, 프롬프트 또는 개인 정보를 수집하지 않습니다. 설정에서 이를 비활성화할 수 있습니다." }, "importSettings": "설정 가져오기" } diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index 10f14ae49de..8da7d91b76e 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -250,6 +250,7 @@ "configProfile": "Configuratieprofiel", "description": "Sla verschillende API-configuraties op om snel te wisselen tussen providers en instellingen.", "apiProvider": "API-provider", + "apiProviderDocs": "Providerdocumentatie", "model": "Model", "nameEmpty": "Naam mag niet leeg zijn", "nameExists": "Er bestaat al een profiel met deze naam", diff --git a/webview-ui/src/i18n/locales/nl/welcome.json b/webview-ui/src/i18n/locales/nl/welcome.json index affbfa71d47..5341182388c 100644 --- a/webview-ui/src/i18n/locales/nl/welcome.json +++ b/webview-ui/src/i18n/locales/nl/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Welkom bij Roo Code!", - "introduction": "Met een reeks ingebouwde en uitbreidbare Modi laat Roo Code je plannen, ontwerpen, coderen, debuggen en je productiviteit verhogen als nooit tevoren.", - "notice": "Om te beginnen heeft deze extensie een API-provider nodig.", - "start": "Aan de slag!", "routers": { "requesty": { - "description": "Jouw geoptimaliseerde LLM-router", - "incentive": "$1 gratis tegoed" + "description": "Je geoptimaliseerde LLM-router", + "incentive": "1 dollar gratis tegoed" }, "openrouter": { - "description": "Een uniforme interface voor LLM's" + "description": "Een geïntegreerde interface voor LLM's" }, "roo": { "description": "De beste gratis modellen om mee te beginnen", "incentive": "Probeer Roo gratis uit" } }, - "chooseProvider": "Om te beginnen heb je een LLM-provider nodig:", + "landing": { + "greeting": "Welkom bij Roo Code!", + "introduction": "Met een reeks ingebouwde en uitbreidbare Modi laat Roo Code je plannen, ontwerpen, coderen, debuggen en je productiviteit verhogen als nooit tevoren.", + "accountMention": "Maak je Roo Code Cloud-account aan om te beginnen. Krijg krachtige modellen, webcontrole, analyses, ondersteuning en meer.", + "getStarted": "Aan de slag", + "noAccount": "of gebruik zonder account" + }, "providerSignup": { + "heading": "Kies je provider", + "chooseProvider": "Roo heeft een LLM-provider nodig om te werken. Kies er een om te beginnen, je kunt er later meer toevoegen.", "rooCloudProvider": "Roo Code Cloud Provider", - "rooCloudDescription": "De eenvoudigste manier om Roo te gebruiken. Een samengestelde mix van gratis en betaalde modellen tegen lage kosten", - "learnMore": "meer informatie", - "useAnotherProvider": "Gebruik een andere provider", - "useAnotherProviderDescription": "Voer een API-sleutel in en ga aan de slag.", - "noApiKeys": "Geen zin in sleutels? Kies dan voor de Roo Code Cloud Provider.", - "getStarted": "Beginnen" + "rooCloudDescription": "De eenvoudigste manier om te beginnen is met de Roo Code Cloud Provider: een zorgvuldig samengesteld mix van gratis en betaalde modellen tegen lage kosten.", + "learnMore": "Meer informatie", + "useAnotherProvider": "Provider van derden", + "useAnotherProviderDescription": "Voer een API-sleutel in en begin.", + "noApiKeys": "Wil je je niet bezighouden met API-sleutels en aparte accounts?", + "backToRoo": "Kies de Roo Code Cloud Provider.", + "goBack": "Terug", + "finish": "Klaar" }, "waitingForCloud": { - "heading": "We brengen je naar Roo Code Cloud...", - "description": "Voltooi de registratie in je browser en je keert automatisch hier terug.", - "noPrompt": "Als je niet wordt gevraagd een URL te openen, klik hier.", - "havingTrouble": "Als je de registratie hebt voltooid maar problemen hebt, klik hier.", - "pasteUrl": "Plak de callback-URL vanuit je browser:", - "invalidURL": "Dat ziet er niet uit als een geldige callback-URL. Kopieer wat Roo Code Cloud in je browser toont.", + "heading": "Aanmelden bij Roo Code Cloud...", + "description": "We brengen je naar je browser om je aan te melden voor Roo Code Cloud. Dan brengen we je hierheen terug om af te ronden.", + "noPrompt": "Als je niet wordt gevraagd een URL te openen, klik dan hier.", + "havingTrouble": "Als je de registratie hebt voltooid maar problemen ondervindt, klik dan hier.", + "pasteUrl": "Plak de callback-URL uit je browser:", + "docsLink": "Werkt het niet? Raadpleeg de documentatie.", + "invalidURL": "Dit ziet er niet uit als een geldige callback-URL. Kopieer alstublieft wat Roo Code Cloud in je browser weergeeft.", "goBack": "Terug" }, - "startRouter": "We raden aan om een LLM-router te gebruiken:", - "startCustom": "Of je kunt je eigen API-sleutel gebruiken:", + "startRouter": "We raden aan een LLM-router te gebruiken:", + "startCustom": "Of je kunt je eigen API-sleutel meebrengen:", "telemetry": { - "helpImprove": "Help Roo Code verbeteren", - "helpImproveMessage": "Roo Code verzamelt fout- en gebruiksgegevens om ons te helpen bugs op te lossen en de extensie te verbeteren. Deze telemetrie verzamelt geen code, prompts of persoonlijke informatie. Je kunt dit uitschakelen in de instellingen." + "helpImprove": "Help Roo Code te verbeteren", + "helpImproveMessage": "Roo Code verzamelt fout- en gebruiksgegevens om ons te helpen bugs op te lossen en de extensie te verbeteren. Deze telemetrie verzamelt geen code, prompts of persoonlijke informatie. Je kunt dit in instellingen uitschakelen." }, "importSettings": "Instellingen importeren" } diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index c958a6e2895..2e0116663c0 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -250,6 +250,7 @@ "configProfile": "Profil konfiguracji", "description": "Zapisz różne konfiguracje API, aby szybko przełączać się między dostawcami i ustawieniami.", "apiProvider": "Dostawca API", + "apiProviderDocs": "Dokumentacja dostawcy", "model": "Model", "nameEmpty": "Nazwa nie może być pusta", "nameExists": "Profil o tej nazwie już istnieje", diff --git a/webview-ui/src/i18n/locales/pl/welcome.json b/webview-ui/src/i18n/locales/pl/welcome.json index abf3fbf614e..c8efcd5c738 100644 --- a/webview-ui/src/i18n/locales/pl/welcome.json +++ b/webview-ui/src/i18n/locales/pl/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Witaj w Roo Code!", - "introduction": "Dzięki szerokiej gamie wbudowanych i rozszerzalnych Trybów, Roo Code pozwala planować, projektować architekturę, kodować, debugować i zwiększać produktywność jak nigdy dotąd.", - "notice": "Aby rozpocząć, to rozszerzenie potrzebuje dostawcy API.", - "start": "Zaczynajmy!", "routers": { "requesty": { "description": "Twój zoptymalizowany router LLM", - "incentive": "$1 darmowego kredytu" + "incentive": "Bezpłatny kredyt w wysokości $1" }, "openrouter": { - "description": "Ujednolicony interfejs dla LLMs" + "description": "Ujednolicony interfejs dla LLM" }, "roo": { - "description": "Najlepsze darmowe modele na start", - "incentive": "Wypróbuj Roo za darmo" + "description": "Najlepsze bezpłatne modele dla początkujących", + "incentive": "Wypróbuj Roo bezpłatnie" } }, - "chooseProvider": "Aby rozpocząć, potrzebujesz dostawcy LLM:", + "landing": { + "greeting": "Witaj w Roo Code!", + "introduction": "Dzięki szerokiej gamie wbudowanych i rozszerzalnych Trybów, Roo Code pozwala planować, projektować architekturę, kodować, debugować i zwiększać produktywność jak nigdy dotąd.", + "accountMention": "Aby rozpocząć, utwórz konto Roo Code Cloud. Otrzymaj potężne modele, kontrolę internetową, analizę, wsparcie i wiele więcej.", + "getStarted": "Zacznij", + "noAccount": "lub używaj bez konta" + }, "providerSignup": { + "heading": "Wybierz swojego dostawcę", + "chooseProvider": "Roo potrzebuje dostawcy LLM, aby działać. Wybierz jeden, aby zacząć, możesz dodać więcej później.", "rooCloudProvider": "Dostawca Roo Code Cloud", - "rooCloudDescription": "Najprostszy sposób korzystania z Roo. Wybrana mieszanka darmowych i płatnych modeli po niskich kosztach", - "learnMore": "dowiedz się więcej", - "useAnotherProvider": "Użyj innego dostawcy", + "rooCloudDescription": "Najłatwiejszy sposób na rozpoczęcie to skorzystanie z Dostawcy Roo Code Cloud: starannie wybrany mix bezpłatnych i płatnych modeli w niskiej cenie.", + "learnMore": "Dowiedz się więcej", + "useAnotherProvider": "Dostawca trzeciej strony", "useAnotherProviderDescription": "Wprowadź klucz API i zacznij.", - "noApiKeys": "Nie chcesz się zajmować kluczami? Wybierz Dostawcę Roo Code Cloud.", - "getStarted": "Rozpocznij" + "noApiKeys": "Nie chcesz radzić sobie z kluczami API i oddzielnymi kontami?", + "backToRoo": "Wybierz Dostawcę Roo Code Cloud.", + "goBack": "Wróć", + "finish": "Zakończ" }, "waitingForCloud": { - "heading": "Zabieramy cię do Roo Code Cloud...", - "description": "Ukończ rejestrację w przeglądarce i automatycznie wrócisz tutaj.", + "heading": "Logowanie do Roo Code Cloud...", + "description": "Zaprowadzimy Cię do przeglądarki, aby zarejestrować się w Roo Code Cloud. Następnie wrócimy tutaj, aby ukończyć.", "noPrompt": "Jeśli nie zostaniesz poproszony o otwarcie adresu URL, kliknij tutaj.", "havingTrouble": "Jeśli ukończyłeś rejestrację, ale masz problemy, kliknij tutaj.", "pasteUrl": "Wklej adres URL wywołania zwrotnego z przeglądarki:", - "invalidURL": "To nie wygląda na ważny adres URL wywołania zwrotnego. Skopiuj to, co Roo Code Cloud pokazuje w Twojej przeglądarce.", + "docsLink": "Nie działa? Sprawdź dokumentację.", + "invalidURL": "To nie wygląda na prawidłowy adres URL wywołania zwrotnego. Skopiuj to, co Roo Code Cloud wyświetla w przeglądarce.", "goBack": "Wróć" }, - "startRouter": "Zalecamy korzystanie z routera LLM:", - "startCustom": "Lub możesz użyć własnego klucza API:", + "startRouter": "Rekomendujemy użycie routera LLM:", + "startCustom": "Lub możesz przynieść swój własny klucz API:", "telemetry": { "helpImprove": "Pomóż ulepszyć Roo Code", - "helpImproveMessage": "Roo Code zbiera dane o błędach i użytkowaniu, aby pomóc nam naprawiać błędy i ulepszać rozszerzenie. Ta telemetria nie zbiera kodu, promptów ani danych osobowych. Możesz wyłączyć to w ustawieniach." + "helpImproveMessage": "Roo Code zbiera dane o błędach i użytkowaniu, aby pomóc nam naprawiać błędy i ulepszać rozszerzenie. Ta telemetria nie zbiera kodu, podpowiedzi ani danych osobowych. Możesz je wyłączyć w ustawieniach." }, "importSettings": "Importuj ustawienia" } diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 062079ad7e3..453078d8200 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -250,6 +250,7 @@ "configProfile": "Perfil de configuração", "description": "Salve diferentes configurações de API para alternar rapidamente entre provedores e configurações.", "apiProvider": "Provedor de API", + "apiProviderDocs": "Documentação do Provedor", "model": "Modelo", "nameEmpty": "O nome não pode estar vazio", "nameExists": "Já existe um perfil com este nome", diff --git a/webview-ui/src/i18n/locales/pt-BR/welcome.json b/webview-ui/src/i18n/locales/pt-BR/welcome.json index 811727061af..892dbd40ffb 100644 --- a/webview-ui/src/i18n/locales/pt-BR/welcome.json +++ b/webview-ui/src/i18n/locales/pt-BR/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Bem-vindo ao Roo Code!", - "introduction": "Com uma variedade de Modos integrados e extensíveis, o Roo Code permite que você planeje, arquitete, codifique, depure e aumente sua produtividade como nunca antes.", - "notice": "Para começar, esta extensão precisa de um provedor de API.", - "start": "Vamos lá!", "routers": { "requesty": { "description": "Seu roteador LLM otimizado", - "incentive": "$1 de crédito grátis" + "incentive": "Crédito grátis de $1" }, "openrouter": { "description": "Uma interface unificada para LLMs" }, "roo": { "description": "Os melhores modelos gratuitos para começar", - "incentive": "Experimente o Roo gratuitamente" + "incentive": "Tente Roo gratuitamente" } }, - "chooseProvider": "Para começar, você precisa de um provedor LLM:", + "landing": { + "greeting": "Bem-vindo ao Roo Code!", + "introduction": "Com uma variedade de Modos integrados e extensíveis, o Roo Code permite que você planeje, arquitete, codifique, depure e aumente sua produtividade como nunca antes.", + "accountMention": "Para começar, crie sua conta Roo Code Cloud. Obtenha modelos poderosos, controle na web, análises, suporte e muito mais.", + "getStarted": "Começar", + "noAccount": "ou usar sem conta" + }, "providerSignup": { + "heading": "Escolha seu provedor", + "chooseProvider": "Roo precisa de um provedor LLM para funcionar. Escolha um para começar, você pode adicionar mais depois.", "rooCloudProvider": "Provedor Roo Code Cloud", - "rooCloudDescription": "A maneira mais simples de usar o Roo. Uma combinação selecionada de modelos gratuitos e pagos a baixo custo", - "learnMore": "saiba mais", - "useAnotherProvider": "Usar outro provedor", - "useAnotherProviderDescription": "Digite uma chave API e comece.", - "noApiKeys": "Não quer lidar com chaves? Escolha o Provedor Roo Code Cloud.", - "getStarted": "Começar" + "rooCloudDescription": "A maneira mais simples de começar é com o Provedor Roo Code Cloud: uma mistura selecionada de modelos gratuitos e pagos a baixo custo.", + "learnMore": "Saiba mais", + "useAnotherProvider": "Provedor de terceiros", + "useAnotherProviderDescription": "Insira uma chave API e comece.", + "noApiKeys": "Não quer lidar com chaves API e contas separadas?", + "backToRoo": "Escolha o Provedor Roo Code Cloud.", + "goBack": "Voltar", + "finish": "Concluir" }, "waitingForCloud": { - "heading": "Levando você para Roo Code Cloud...", - "description": "Conclua o registro no seu navegador e você retornará aqui automaticamente.", + "heading": "Fazendo login no Roo Code Cloud...", + "description": "Vamos levá-lo ao seu navegador para se registrar no Roo Code Cloud. Depois o trazeremos de volta aqui para terminar.", "noPrompt": "Se você não for solicitado a abrir uma URL, clique aqui.", - "havingTrouble": "Se você completou o registro mas está tendo problemas, clique aqui.", - "pasteUrl": "Cole a URL de callback do seu navegador:", - "invalidURL": "Isso não parece uma URL de callback válida. Copie o que o Roo Code Cloud está mostrando no seu navegador.", + "havingTrouble": "Se você completou o cadastro mas está tendo problemas, clique aqui.", + "pasteUrl": "Cole a URL de callback mostrada no seu navegador:", + "docsLink": "Não está funcionando? Consulte a documentação.", + "invalidURL": "Isso não parece ser uma URL de callback válida. Por favor, copie o que o Roo Code Cloud está mostrando em seu navegador.", "goBack": "Voltar" }, "startRouter": "Recomendamos usar um roteador LLM:", "startCustom": "Ou você pode trazer sua própria chave API:", "telemetry": { "helpImprove": "Ajude a melhorar o Roo Code", - "helpImproveMessage": "O Roo Code coleta dados de erro e uso para nos ajudar a corrigir bugs e melhorar a extensão. Esta telemetria não coleta código, prompts ou informações pessoais. Você pode desativar isso nas configurações." + "helpImproveMessage": "Roo Code coleta dados de erro e uso para nos ajudar a corrigir bugs e melhorar a extensão. Esta telemetria não coleta código, prompts ou informações pessoais. Você pode desabilitar isso nas configurações." }, "importSettings": "Importar configurações" } diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index a908bc2ddf6..8c62813108c 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -250,6 +250,7 @@ "configProfile": "Профиль конфигурации", "description": "Сохраняйте различные конфигурации API для быстрого переключения между провайдерами и настройками.", "apiProvider": "Провайдер API", + "apiProviderDocs": "Документация провайдера", "model": "Модель", "nameEmpty": "Имя не может быть пустым", "nameExists": "Профиль с таким именем уже существует", diff --git a/webview-ui/src/i18n/locales/ru/welcome.json b/webview-ui/src/i18n/locales/ru/welcome.json index 91c64af1b35..8757aa6a270 100644 --- a/webview-ui/src/i18n/locales/ru/welcome.json +++ b/webview-ui/src/i18n/locales/ru/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Добро пожаловать в Roo Code!", - "introduction": "С набором встроенных и расширяемых Режимов, Roo Code позволяет вам планировать, проектировать, писать код, отлаживать и повышать продуктивность как никогда раньше.", - "notice": "Для начала работы этому расширению нужен провайдер API.", - "start": "Поехали!", "routers": { "requesty": { "description": "Ваш оптимизированный маршрутизатор LLM", - "incentive": "$1 бесплатного кредита" + "incentive": "Бесплатный кредит в размере $1" }, "openrouter": { - "description": "Унифицированный интерфейс для LLM" + "description": "Единый интерфейс для LLM" }, "roo": { - "description": "Лучшие бесплатные модели для начала работы", - "incentive": "Попробуй Roo бесплатно" + "description": "Лучшие бесплатные модели для начала", + "incentive": "Попробуйте Roo бесплатно" } }, - "chooseProvider": "Для начала работы тебе нужен LLM-провайдер:", + "landing": { + "greeting": "Добро пожаловать в Roo Code!", + "introduction": "С набором встроенных и расширяемых Режимов, Roo Code позволяет вам планировать, проектировать, писать код, отлаживать и повышать продуктивность как никогда раньше.", + "accountMention": "Для начала создайте свой аккаунт Roo Code Cloud. Получите мощные модели, веб-управление, аналитику, поддержку и многое другое.", + "getStarted": "Начать", + "noAccount": "или использовать без аккаунта" + }, "providerSignup": { + "heading": "Выберите поставщика услуг", + "chooseProvider": "Roo нужен LLM-провайдер для работы. Выберите один для начала, вы можете добавить больше позже.", "rooCloudProvider": "Провайдер Roo Code Cloud", - "rooCloudDescription": "Самый простой способ использования Roo. Подобранная комбинация бесплатных и платных моделей по низкой цене", - "learnMore": "подробнее", - "useAnotherProvider": "Использовать другого провайдера", - "useAnotherProviderDescription": "Введи API-ключ и начни.", - "noApiKeys": "Не хочешь заниматься ключами? Выбери Провайдер Roo Code Cloud.", - "getStarted": "Начать" + "rooCloudDescription": "Самый простой способ начать — использовать провайдер Roo Code Cloud: тщательно подобранная смесь бесплатных и платных моделей по низкой стоимости.", + "learnMore": "Узнать больше", + "useAnotherProvider": "Провайдер третьей стороны", + "useAnotherProviderDescription": "Введите API-ключ и начните.", + "noApiKeys": "Не хотите иметь дело с API-ключами и отдельными аккаунтами?", + "backToRoo": "Выберите провайдер Roo Code Cloud.", + "goBack": "Назад", + "finish": "Завершить" }, "waitingForCloud": { - "heading": "Направляем тебя в Roo Code Cloud...", - "description": "Завершите регистрацию в браузере, и вы автоматически вернетесь сюда.", - "noPrompt": "Если вас не попросят открыть URL, нажмите здесь.", - "havingTrouble": "Если вы завершили регистрацию, но у вас возникли проблемы, нажмите здесь.", - "pasteUrl": "Вставьте URL обратного вызова из браузера:", - "invalidURL": "Это не похоже на корректный URL обратного вызова. Скопируй то, что показывает Roo Code Cloud в твоем браузере.", + "heading": "Вход в Roo Code Cloud...", + "description": "Мы отправим вас в браузер для регистрации в Roo Code Cloud. Затем мы вернём вас сюда, чтобы завершить процесс.", + "noPrompt": "Если вас не просят открыть URL, нажмите здесь.", + "havingTrouble": "Если вы завершили регистрацию, но испытываете проблемы, нажмите здесь.", + "pasteUrl": "Вставьте URL обратного вызова из вашего браузера:", + "docsLink": "Не работает? Проверьте документацию.", + "invalidURL": "Это не похоже на действительный URL обратного вызова. Пожалуйста, скопируйте то, что Roo Code Cloud показывает в вашем браузере.", "goBack": "Назад" }, "startRouter": "Мы рекомендуем использовать маршрутизатор LLM:", - "startCustom": "Или вы можете использовать свой собственный API-ключ:", + "startCustom": "Или вы можете принести свой API-ключ:", "telemetry": { "helpImprove": "Помогите улучшить Roo Code", - "helpImproveMessage": "Roo Code собирает данные об ошибках и использовании, чтобы помочь нам исправлять баги и улучшать расширение. Эта телеметрия не собирает код, промпты или личную информацию. Вы можете отключить это в настройках." + "helpImproveMessage": "Roo Code собирает данные об ошибках и использовании, чтобы помочь нам исправлять ошибки и улучшать расширение. Эта телеметрия не собирает код, приглашения или личную информацию. Вы можете отключить это в настройках." }, - "importSettings": "Импорт настроек" + "importSettings": "Импортировать настройки" } diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 26d433e0af7..05a12b81000 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -250,6 +250,7 @@ "configProfile": "Yapılandırma Profili", "description": "Sağlayıcılar ve ayarlar arasında hızlıca geçiş yapmak için farklı API yapılandırmalarını kaydedin.", "apiProvider": "API Sağlayıcı", + "apiProviderDocs": "Sağlayıcı Belgeleri", "model": "Model", "nameEmpty": "İsim boş olamaz", "nameExists": "Bu isme sahip bir profil zaten mevcut", diff --git a/webview-ui/src/i18n/locales/tr/welcome.json b/webview-ui/src/i18n/locales/tr/welcome.json index e47fc980148..6323ce638f2 100644 --- a/webview-ui/src/i18n/locales/tr/welcome.json +++ b/webview-ui/src/i18n/locales/tr/welcome.json @@ -1,11 +1,7 @@ { - "greeting": "Roo Code'a Hoş Geldin!", - "introduction": "Yerleşik ve genişletilebilir Modlar yelpazesiyle Roo Code, daha önce hiç olmadığı gibi planlama, mimari tasarım, kodlama, hata ayıklama ve üretkenliğini artırmanı sağlar.", - "notice": "Başlamak için bu eklentinin bir API sağlayıcısına ihtiyacı var.", - "start": "Hadi başlayalım!", "routers": { "requesty": { - "description": "Optimize edilmiş LLM yönlendiricin", + "description": "Optimize edilmiş LLM yönlendiriciniz", "incentive": "$1 ücretsiz kredi" }, "openrouter": { @@ -16,30 +12,41 @@ "incentive": "Roo'yu ücretsiz dene" } }, - "chooseProvider": "Başlamak için bir LLM sağlayıcısına ihtiyacın var:", + "landing": { + "greeting": "Roo Code'a Hoş Geldin!", + "introduction": "Yerleşik ve genişletilebilir Modlar yelpazesiyle Roo Code, daha önce hiç olmadığı gibi planlama, mimari tasarım, kodlama, hata ayıklama ve üretkenliğini artırmanı sağlar.", + "accountMention": "Başlamak için Roo Code Cloud hesabını oluştur. Güçlü modeller, web kontrolü, analizler, destek ve daha fazlasını al.", + "getStarted": "Başla", + "noAccount": "veya hesap olmadan kullan" + }, "providerSignup": { - "rooCloudProvider": "Roo Code Cloud Sağlayıcısı", - "rooCloudDescription": "Roo'yu kullanmanın en basit yolu. Düşük maliyetle seçilmiş ücretsiz ve ücretli modellerin karışımı", - "learnMore": "daha fazla bilgi", - "useAnotherProvider": "Başka bir sağlayıcı kullan", + "heading": "Sağlayıcınızı seçin", + "chooseProvider": "Roo'nun çalışması için bir LLM sağlayıcısına ihtiyacı var. Başlamak için bir tane seç, sonra daha fazlasını ekleyebilirsin.", + "rooCloudProvider": "Roo Code Cloud Sağlayıcı", + "rooCloudDescription": "Başlamak için en kolay yol Roo Code Cloud Sağlayıcısı'nı kullanmaktır: ücretsiz ve ücretli modellerin dikkatli seçilmiş bir karışımı, düşük maliyette.", + "learnMore": "Daha fazla bilgi", + "useAnotherProvider": "Üçüncü taraf Sağlayıcı", "useAnotherProviderDescription": "Bir API anahtarı gir ve başla.", - "noApiKeys": "Anahtarlarla uğraşmak istemez misin? Roo Code Cloud Sağlayıcısı'nı seç.", - "getStarted": "Başla" + "noApiKeys": "API anahtarları ve ayrı hesaplarla uğraşmak istemez misin?", + "backToRoo": "Roo Code Cloud Sağlayıcısını seç.", + "goBack": "Geri", + "finish": "Bitir" }, "waitingForCloud": { - "heading": "Seni Roo Code Cloud'a götürüyoruz...", - "description": "Tarayıcında kaydı tamamla ve otomatik olarak buraya döneceksin.", - "noPrompt": "URL açmanız istenmezse, buraya tıkla.", - "havingTrouble": "Kaydı tamamladıysan ama sorun yaşıyorsan, buraya tıkla.", - "pasteUrl": "Tarayıcınızdan geri arama URL'sini yapıştırın:", - "invalidURL": "Bu geçerli bir geri arama URL'si gibi görünmüyor. Roo Code Cloud'un tarayıcında gösterdiği şeyi kopyala.", - "goBack": "Geri Dön" + "heading": "Roo Code Cloud'a giriş yapılıyor...", + "description": "Seni Roo Code Cloud'a kaydolmak için tarayıcına göndereceğiz. Sonra seni buraya geri getireceğiz.", + "noPrompt": "Bir URL açmanız istenmezse, buraya tıklayın.", + "havingTrouble": "Kaydı tamamladıysanız ama sorun yaşıyorsanız, buraya tıklayın.", + "pasteUrl": "Tarayıcınızda gösterilen geri arama URL'sini yapıştırın:", + "docsLink": "Çalışmıyor mu? Belgeleri kontrol edin.", + "invalidURL": "Bu geçerli bir geri arama URL'si gibi görünmüyor. Roo Code Cloud'un tarayıcınızda gösterdiğini kopyalayın.", + "goBack": "Geri" }, - "startRouter": "Bir LLM yönlendiricisi kullanmanı öneririz:", - "startCustom": "Veya kendi API anahtarını kullanabilirsin:", + "startRouter": "Bir LLM yönlendiricisi kullanmanızı öneririz:", + "startCustom": "Veya kendi API anahtarınızı getirebilirsiniz:", "telemetry": { - "helpImprove": "Roo Code'u Geliştirmeye Yardım Et", - "helpImproveMessage": "Roo Code, hataları düzeltmemize ve uzantıyı geliştirmemize yardımcı olmak için hata ve kullanım verilerini toplar. Bu telemetri kod, prompt veya kişisel bilgi toplamaz. Bunu ayarlardan kapatabilirsin." + "helpImprove": "Roo Code'u iyileştirmeye yardımcı ol", + "helpImproveMessage": "Roo Code, hataları düzeltmemize ve uzantıyı iyileştirmemize yardımcı olmak için hata ve kullanım verilerini toplar. Bu telemetri kod, komutlar veya kişisel bilgileri toplamaz. Bunu ayarlardan devre dışı bırakabilirsin." }, "importSettings": "Ayarları İçe Aktar" } diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 77d3fe7e2a2..d3100796720 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -250,6 +250,7 @@ "configProfile": "Hồ sơ cấu hình", "description": "Lưu các cấu hình API khác nhau để nhanh chóng chuyển đổi giữa các nhà cung cấp và cài đặt.", "apiProvider": "Nhà cung cấp API", + "apiProviderDocs": "Tài liệu Nhà cung cấp", "model": "Mẫu", "nameEmpty": "Tên không được để trống", "nameExists": "Đã tồn tại một hồ sơ với tên này", diff --git a/webview-ui/src/i18n/locales/vi/welcome.json b/webview-ui/src/i18n/locales/vi/welcome.json index 53bfa921b6a..386ecd0d1e6 100644 --- a/webview-ui/src/i18n/locales/vi/welcome.json +++ b/webview-ui/src/i18n/locales/vi/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "Chào mừng đến với Roo Code!", - "introduction": "Với nhiều Chế độ tích hợp và có thể mở rộng, Roo Code cho phép bạn lập kế hoạch, thiết kế kiến trúc, viết mã, gỡ lỗi và tăng năng suất như chưa từng có trước đây.", - "notice": "Để bắt đầu, tiện ích mở rộng này cần một nhà cung cấp API.", - "start": "Bắt đầu thôi!", "routers": { "requesty": { "description": "Bộ định tuyến LLM được tối ưu hóa của bạn", - "incentive": "$1 tín dụng miễn phí" + "incentive": "Tín dụng miễn phí $1" }, "openrouter": { - "description": "Giao diện thống nhất cho các LLM" + "description": "Giao diện thống nhất cho LLM" }, "roo": { - "description": "Những mô hình miễn phí tốt nhất để bắt đầu", + "description": "Các mô hình miễn phí tốt nhất để bắt đầu", "incentive": "Dùng thử Roo miễn phí" } }, - "chooseProvider": "Để bắt đầu, bạn cần một nhà cung cấp LLM:", + "landing": { + "greeting": "Chào mừng đến với Roo Code!", + "introduction": "Với nhiều Chế độ tích hợp và có thể mở rộng, Roo Code cho phép bạn lập kế hoạch, thiết kế kiến trúc, viết mã, gỡ lỗi và tăng năng suất như chưa từng có trước đây.", + "accountMention": "Để bắt đầu, hãy tạo tài khoản Roo Code Cloud của bạn. Nhận các mô hình mạnh mẽ, kiểm soát web, phân tích, hỗ trợ và hơn thế nữa.", + "getStarted": "Bắt đầu", + "noAccount": "hoặc sử dụng mà không có tài khoản" + }, "providerSignup": { + "heading": "Chọn nhà cung cấp của bạn", + "chooseProvider": "Roo cần một nhà cung cấp LLM để hoạt động. Chọn một để bắt đầu, bạn có thể thêm nhiều hơn sau.", "rooCloudProvider": "Nhà cung cấp Roo Code Cloud", - "rooCloudDescription": "Cách đơn giản nhất để sử dụng Roo. Sự kết hợp được tuyển chọn của các mô hình miễn phí và trả phí với chi phí thấp", - "learnMore": "tìm hiểu thêm", - "useAnotherProvider": "Sử dụng nhà cung cấp khác", + "rooCloudDescription": "Cách dễ nhất để bắt đầu là với Nhà cung cấp Roo Code Cloud: một sự kết hợp được sắp xếp cẩn thận của các mô hình miễn phí và trả tiền với chi phí thấp.", + "learnMore": "Tìm hiểu thêm", + "useAnotherProvider": "Nhà cung cấp bên thứ ba", "useAnotherProviderDescription": "Nhập khóa API và bắt đầu.", - "noApiKeys": "Không muốn phải xử lý các khóa? Hãy sử dụng Nhà cung cấp Roo Code Cloud.", - "getStarted": "Bắt đầu" + "noApiKeys": "Bạn không muốn xử lý các khóa API và tài khoản riêng biệt?", + "backToRoo": "Sử dụng Nhà cung cấp Roo Code Cloud.", + "goBack": "Quay lại", + "finish": "Hoàn thành" }, "waitingForCloud": { - "heading": "Đang đưa bạn đến Roo Code Cloud...", - "description": "Hoàn thành đăng ký trong trình duyệt và bạn sẽ tự động quay lại đây.", - "noPrompt": "Nếu bạn không được nhắc mở URL, hãy nhấp vào đây.", + "heading": "Đăng nhập vào Roo Code Cloud...", + "description": "Chúng tôi sẽ dẫn bạn đến trình duyệt để đăng ký Roo Code Cloud. Sau đó, chúng tôi sẽ đưa bạn trở lại đây để hoàn thành.", + "noPrompt": "Nếu bạn không được yêu cầu mở URL, hãy nhấp vào đây.", "havingTrouble": "Nếu bạn đã hoàn thành đăng ký nhưng gặp sự cố, hãy nhấp vào đây.", - "pasteUrl": "Dán URL callback từ trình duyệt của bạn:", - "invalidURL": "Điều đó không giống như một URL callback hợp lệ. Vui lòng sao chép những gì Roo Code Cloud đang hiển thị trong trình duyệt của bạn.", + "pasteUrl": "Dán URL gọi lại từ trình duyệt của bạn:", + "docsLink": "Không hoạt động? Kiểm tra tài liệu.", + "invalidURL": "Điều đó không giống như một URL gọi lại hợp lệ. Vui lòng sao chép những gì Roo Code Cloud đang hiển thị trong trình duyệt của bạn.", "goBack": "Quay lại" }, "startRouter": "Chúng tôi khuyên bạn nên sử dụng bộ định tuyến LLM:", - "startCustom": "Hoặc bạn có thể sử dụng khóa API của riêng mình:", + "startCustom": "Hoặc bạn có thể mang theo khóa API của riêng mình:", "telemetry": { "helpImprove": "Giúp cải thiện Roo Code", - "helpImproveMessage": "Roo Code thu thập dữ liệu lỗi và sử dụng để giúp chúng tôi sửa lỗi và cải thiện tiện ích mở rộng. Telemetry này không thu thập mã, prompt hoặc thông tin cá nhân. Bạn có thể tắt điều này trong cài đặt." + "helpImproveMessage": "Roo Code thu thập dữ liệu lỗi và sử dụng để giúp chúng tôi sửa lỗi và cải thiện tiện ích mở rộng. Dữ liệu từ xa này không thu thập mã, lời nhắc hoặc thông tin cá nhân. Bạn có thể vô hiệu hóa nó trong cài đặt." }, - "importSettings": "Nhập cài đặt" + "importSettings": "Nhập Cài đặt" } diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 5a70cfd10de..df5583ba348 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -250,6 +250,7 @@ "configProfile": "配置文件", "description": "保存多组API配置便于快速切换", "apiProvider": "API提供商", + "apiProviderDocs": "提供商文档", "model": "模型", "nameEmpty": "名称不能为空", "nameExists": "已存在同名的配置文件", diff --git a/webview-ui/src/i18n/locales/zh-CN/welcome.json b/webview-ui/src/i18n/locales/zh-CN/welcome.json index 48405069b1c..df6fe968128 100644 --- a/webview-ui/src/i18n/locales/zh-CN/welcome.json +++ b/webview-ui/src/i18n/locales/zh-CN/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "欢迎使用 Roo Code!", - "introduction": "通过一系列内置和可扩展的模式,Roo Code 让你能够以前所未有的方式进行规划、架构设计、编码、调试并提升工作效率。", - "notice": "请先配置大语言模型API提供商", - "start": "开始吧!", "routers": { "requesty": { - "description": "智能调度多个大语言模型", + "description": "您优化的 LLM 路由器", "incentive": "$1 免费额度" }, "openrouter": { - "description": "统一了大语言模型的接口" + "description": "LLM 统一接口" }, "roo": { - "description": "最优秀的免费模型助你开始", - "incentive": "免费试用 Roo" + "description": "开始使用的最佳免费模型", + "incentive": "免费尝试 Roo" } }, - "chooseProvider": "开始使用需要 LLM 提供商:", + "landing": { + "greeting": "欢迎使用 Roo Code!", + "introduction": "通过一系列内置和可扩展的模式,Roo Code 让你能够以前所未有的方式进行规划、架构设计、编码、调试并提升工作效率。", + "accountMention": "开始使用,创建你的 Roo Code Cloud 账户。获得强大模型、网络控制、分析、支持等。", + "getStarted": "开始使用", + "noAccount": "或不使用账户" + }, "providerSignup": { + "heading": "选择你的供应商", + "chooseProvider": "Roo 需要 LLM 提供商才能工作。选择一个开始使用,你可以稍后添加更多。", "rooCloudProvider": "Roo Code Cloud 提供商", - "rooCloudDescription": "使用 Roo 最简单的方式。低成本精选的免费和付费模型组合", + "rooCloudDescription": "开始使用最简单的方式是使用 Roo Code Cloud 提供商:精心选择的免费和付费模型组合,价格低廉。", "learnMore": "了解更多", - "useAnotherProvider": "使用其他提供商", - "useAnotherProviderDescription": "输入 API 密钥即可开始。", - "noApiKeys": "不想处理密钥?选择 Roo Code Cloud 提供商吧。", - "getStarted": "开始使用" + "useAnotherProvider": "第三方供应商", + "useAnotherProviderDescription": "输入 API 密钥开始使用。", + "noApiKeys": "不想处理 API 密钥和单独的账户?", + "backToRoo": "选择 Roo Code Cloud 提供商。", + "goBack": "返回", + "finish": "完成" }, "waitingForCloud": { - "heading": "正在跳转到 Roo Code Cloud...", - "description": "在浏览器中完成注册,随后你将自动返回此处。", - "noPrompt": "如果你未被提示打开 URL,请点击此处。", - "havingTrouble": "如果你已完成注册但遇到问题,请点击此处。", - "pasteUrl": "从浏览器粘贴回调 URL:", - "invalidURL": "这看起来不像是有效的回调 URL。请复制 Roo Code Cloud 在你的浏览器中显示的内容。", + "heading": "登录到 Roo Code Cloud...", + "description": "我们将带你前往浏览器注册 Roo Code Cloud。然后我们会把你带回这里以完成设置。", + "noPrompt": "如果没有提示你打开 URL,点击这里。", + "havingTrouble": "如果你已完成注册但遇到问题,点击这里。", + "pasteUrl": "粘贴浏览器中显示的回调 URL:", + "docsLink": "无法正常工作?查看文档。", + "invalidURL": "这不像是有效的回调 URL。请复制 Roo Code Cloud 在你的浏览器中显示的内容。", "goBack": "返回" }, - "startRouter": "我们推荐使用 LLM 路由器:", - "startCustom": "或者你可以使用自己的 API 密钥:", + "startRouter": "我们建议使用 LLM 路由器:", + "startCustom": "或者你可以带上自己的 API 密钥:", "telemetry": { - "helpImprove": "Help Improve Roo Code", - "helpImproveMessage": "Roo Code 收集错误和使用数据来帮助我们修复 bug 并改进扩展。此遥测不会收集代码、提示词或个人信息。您可以在设置中关闭此设置。" + "helpImprove": "帮助改进 Roo Code", + "helpImproveMessage": "Roo Code 收集错误和使用数据以帮助我们修复 Bug 并改进扩展。此遥测不收集代码、提示或个人信息。你可以在设置中将其关闭。" }, "importSettings": "导入设置" } diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index 88ab5a2c094..25291e4222d 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -250,6 +250,7 @@ "configProfile": "設定檔", "description": "儲存不同的 API 設定以快速切換供應商和設定。", "apiProvider": "API 供應商", + "apiProviderDocs": "供應商文檔", "model": "模型", "nameEmpty": "名稱不能為空", "nameExists": "已存在同名的設定檔", diff --git a/webview-ui/src/i18n/locales/zh-TW/welcome.json b/webview-ui/src/i18n/locales/zh-TW/welcome.json index 7ce67724d1c..4d6c3da122a 100644 --- a/webview-ui/src/i18n/locales/zh-TW/welcome.json +++ b/webview-ui/src/i18n/locales/zh-TW/welcome.json @@ -1,45 +1,52 @@ { - "greeting": "歡迎使用 Roo Code!", - "introduction": "Roo Code 提供一系列內建和可擴充的模式,讓您以前所未有的方式規劃專案、設計架構、編寫程式碼、除錯並提升工作效率。", - "notice": "開始使用前,此擴充功能需要一個 API 提供者。", - "start": "讓我們開始吧!", "routers": { "requesty": { - "description": "您的最佳化 LLM 路由器", + "description": "您最佳化的 LLM 路由器", "incentive": "$1 免費額度" }, "openrouter": { - "description": "LLM 的統一介面" + "description": "LLM 統一介面" }, "roo": { - "description": "最優秀的免費模型助你開始", + "description": "開始使用的最佳免費模型", "incentive": "免費試用 Roo" } }, - "chooseProvider": "開始使用需要 LLM 提供者:", + "landing": { + "greeting": "歡迎使用 Roo Code!", + "introduction": "Roo Code 提供一系列內建和可擴充的模式,讓您以前所未有的方式規劃專案、設計架構、編寫程式碼、除錯並提升工作效率。", + "accountMention": "開始使用,建立您的 Roo Code Cloud 帳戶。取得強大的模型、網路控制、分析、支援等功能。", + "getStarted": "開始使用", + "noAccount": "或不使用帳戶" + }, "providerSignup": { - "rooCloudProvider": "Roo Code Cloud 提供者", - "rooCloudDescription": "使用 Roo 最簡單的方式。低成本精選的免費和付費模型組合", - "learnMore": "了解更多", - "useAnotherProvider": "使用其他提供者", - "useAnotherProviderDescription": "輸入 API 金鑰即可開始。", - "noApiKeys": "不想處理金鑰?選擇 Roo Code Cloud 提供者吧。", - "getStarted": "開始使用" + "heading": "選擇您的供應商", + "chooseProvider": "Roo 需要 LLM 提供商才能運作。選擇一個開始使用,您可以稍後新增更多。", + "rooCloudProvider": "Roo Code Cloud 提供商", + "rooCloudDescription": "開始使用最簡單的方式是使用 Roo Code Cloud 提供商:精選的免費和付費模型組合,價格低廉。", + "learnMore": "深入瞭解", + "useAnotherProvider": "第三方供應商", + "useAnotherProviderDescription": "輸入 API 金鑰並開始使用。", + "noApiKeys": "不想處理 API 金鑰和個別帳戶?", + "backToRoo": "選擇 Roo Code Cloud 提供商。", + "goBack": "返回", + "finish": "完成" }, "waitingForCloud": { - "heading": "正在帶您前往 Roo Code Cloud...", - "description": "在瀏覽器中完成註冊,您將自動返回此處。", - "noPrompt": "如果您未被提示開啟 URL,請點擊此處。", - "havingTrouble": "如果您已完成註冊但遇到問題,請點擊此處。", - "pasteUrl": "從瀏覽器貼上回呼 URL:", - "invalidURL": "這看起來不像是有效的回呼 URL。請複製 Roo Code Cloud 在您的瀏覽器中顯示的內容。", + "heading": "登入 Roo Code Cloud...", + "description": "我們會帶您前往瀏覽器註冊 Roo Code Cloud。然後我們會將您帶回這裡以完成設定。", + "noPrompt": "如果沒有提示您開啟 URL,按一下這裡。", + "havingTrouble": "如果您已完成註冊但遇到問題,按一下這裡。", + "pasteUrl": "貼上瀏覽器中顯示的回撥 URL:", + "docsLink": "無法正常運作?查看文件。", + "invalidURL": "這看起來不像有效的回撥 URL。請複製 Roo Code Cloud 在您的瀏覽器中顯示的內容。", "goBack": "返回" }, "startRouter": "我們建議使用 LLM 路由器:", - "startCustom": "或者您可以使用自己的 API 金鑰:", + "startCustom": "或者您可以帶上自己的 API 金鑰:", "telemetry": { - "helpImprove": "協助改進 Roo Code", - "helpImproveMessage": "Roo Code 會收集錯誤和使用資料,協助我們修復錯誤並改善擴充功能。此遙測不會收集程式碼、提示或個人資訊。您可以在設定中關閉此設定。" + "helpImprove": "幫助改進 Roo Code", + "helpImproveMessage": "Roo Code 收集錯誤和使用情況資料以幫助我們修正錯誤並改進延伸模組。此遙測不會收集程式碼、提示或個人資訊。您可以在設定中將其關閉。" }, "importSettings": "匯入設定" } diff --git a/webview-ui/src/index.css b/webview-ui/src/index.css index 46a84df0d6b..7521c473ea1 100644 --- a/webview-ui/src/index.css +++ b/webview-ui/src/index.css @@ -520,3 +520,29 @@ input[cmdk-input]:focus { .diff-content-context { background-color: color-mix(in srgb, var(--vscode-editorGroup-border) 100%, transparent); } + +@keyframes ground-slide { + 0% { + transform: translateX(0); + } + 100% { + transform: translateX(-30px); + } +} + +.animate-ground-slide { + animation: ground-slide 1s linear infinite; +} + +@keyframes sun { + 0% { + transform: translateX(200px); + } + 100% { + transform: translateX(-200px); + } +} + +.animate-sun { + animation: sun 30s linear infinite; +}