diff --git a/webview-ui/src/components/settings/About.tsx b/webview-ui/src/components/settings/About.tsx index 01979060c3..a8e5ebc66a 100644 --- a/webview-ui/src/components/settings/About.tsx +++ b/webview-ui/src/components/settings/About.tsx @@ -62,7 +62,7 @@ export const About = ({ telemetrySetting, setTelemetrySetting, className, ...pro
-
+
{ diff --git a/webview-ui/src/components/settings/AutoApproveSettings.tsx b/webview-ui/src/components/settings/AutoApproveSettings.tsx index 1a93fee01a..a12cb4a7c0 100644 --- a/webview-ui/src/components/settings/AutoApproveSettings.tsx +++ b/webview-ui/src/components/settings/AutoApproveSettings.tsx @@ -161,7 +161,7 @@ export const AutoApproveSettings = ({
{t("settings:autoApprove.readOnly.label")}
-
+
@@ -185,7 +185,7 @@ export const AutoApproveSettings = ({
{t("settings:autoApprove.write.label")}
-
+
@@ -200,7 +200,7 @@ export const AutoApproveSettings = ({ {t("settings:autoApprove.write.outsideWorkspace.description")}
-
+
@@ -222,7 +222,7 @@ export const AutoApproveSettings = ({
{t("settings:autoApprove.retry.label")}
-
+
{t("settings:autoApprove.followupQuestions.label")}
-
+
{t("settings:autoApprove.execute.label")}
-
+
- {t("settings:autoApprove.execute.allowedCommandsDescription")} + {t("settings:autoApprove.execute.allowedCommands.description")}
@@ -323,12 +323,12 @@ export const AutoApproveSettings = ({
{/* Denied Commands Section */} -
+
- {t("settings:autoApprove.execute.deniedCommandsDescription")} + {t("settings:autoApprove.execute.deniedCommands.description")}
diff --git a/webview-ui/src/components/settings/AutoApproveToggle.tsx b/webview-ui/src/components/settings/AutoApproveToggle.tsx index e8b51b01ef..13b2f02441 100644 --- a/webview-ui/src/components/settings/AutoApproveToggle.tsx +++ b/webview-ui/src/components/settings/AutoApproveToggle.tsx @@ -124,6 +124,7 @@ export const AutoApproveToggle = ({ onToggle, ...props }: AutoApproveToggleProps aria-label={t(labelKey)} aria-pressed={!!props[key]} data-testid={testId} + data-setting-id={key} className={cn(" aspect-square h-[80px]", !props[key] && "opacity-50")}> diff --git a/webview-ui/src/components/settings/BrowserSettings.tsx b/webview-ui/src/components/settings/BrowserSettings.tsx index 76b4a823be..64647c5086 100644 --- a/webview-ui/src/components/settings/BrowserSettings.tsx +++ b/webview-ui/src/components/settings/BrowserSettings.tsx @@ -107,7 +107,7 @@ export const BrowserSettings = ({
-
+
setCachedStateField("browserToolEnabled", e.target.checked)}> @@ -126,7 +126,7 @@ export const BrowserSettings = ({ {browserToolEnabled && (
-
+
{ @@ -353,7 +355,7 @@ export const ContextManagementSettings = ({
{/* Threshold Slider */} -
+
- +
+ +
) diff --git a/webview-ui/src/components/settings/NotificationSettings.tsx b/webview-ui/src/components/settings/NotificationSettings.tsx index 9610cabad8..b00bc58eb4 100644 --- a/webview-ui/src/components/settings/NotificationSettings.tsx +++ b/webview-ui/src/components/settings/NotificationSettings.tsx @@ -35,7 +35,7 @@ export const NotificationSettings = ({
-
+
setCachedStateField("ttsEnabled", e.target.checked)} @@ -49,7 +49,7 @@ export const NotificationSettings = ({ {ttsEnabled && (
-
+
@@ -68,7 +68,7 @@ export const NotificationSettings = ({
)} -
+
setCachedStateField("soundEnabled", e.target.checked)} @@ -82,7 +82,7 @@ export const NotificationSettings = ({ {soundEnabled && (
-
+
diff --git a/webview-ui/src/components/settings/SearchHighlight.tsx b/webview-ui/src/components/settings/SearchHighlight.tsx new file mode 100644 index 0000000000..dd97adc25b --- /dev/null +++ b/webview-ui/src/components/settings/SearchHighlight.tsx @@ -0,0 +1,55 @@ +import React from "react" + +export const highlightText = (text: string, query: string): React.ReactNode => { + if (!query.trim()) return text + + // Escape special regex characters to prevent regex injection + const escapedQuery = query.replace(/[.*+?^${}()|[\]\\]/g, "\\$&") + const parts = text.split(new RegExp(`(${escapedQuery})`, "gi")) + return parts.map((part, index) => + part.toLowerCase() === query.toLowerCase() ? ( + + {part} + + ) : ( + part + ), + ) +} + +interface SearchHighlightProps { + text: string + searchQuery: string + className?: string +} + +export const SearchHighlight: React.FC = ({ text, searchQuery, className }) => { + return {highlightText(text, searchQuery)} +} + +interface SettingHighlightWrapperProps { + settingId: string + searchQuery: string + matches: Array<{ settingId: string }> + children: React.ReactNode +} + +export const SettingHighlightWrapper: React.FC = ({ + settingId, + searchQuery, + matches, + children, +}) => { + const isHighlighted = matches.some((match) => match.settingId === settingId) + + if (!searchQuery || !isHighlighted) { + return <>{children} + } + + return ( +
+
+ {children} +
+ ) +} diff --git a/webview-ui/src/components/settings/SettingsSearchDropdown.tsx b/webview-ui/src/components/settings/SettingsSearchDropdown.tsx new file mode 100644 index 0000000000..a71b486c5f --- /dev/null +++ b/webview-ui/src/components/settings/SettingsSearchDropdown.tsx @@ -0,0 +1,277 @@ +import React, { useCallback, useEffect, useMemo, useRef, useState } from "react" +import { Search, X, ChevronRight } from "lucide-react" +import { cn } from "@/lib/utils" +import { useAppTranslation } from "@src/i18n/TranslationContext" +import { Popover, PopoverContent, PopoverTrigger, StandardTooltip } from "@src/components/ui" +import { searchSettings, getSearchableSettings, type SearchableItem } from "./searchUtils" + +interface SettingsSearchDropdownProps { + onSelectSetting: (sectionId: string, settingId: string) => void + className?: string +} + +export const SettingsSearchDropdown: React.FC = ({ onSelectSetting, className }) => { + const { t } = useAppTranslation() + const [isExpanded, setIsExpanded] = useState(false) + const [searchQuery, setSearchQuery] = useState("") + const [selectedIndex, setSelectedIndex] = useState(-1) + const [isDropdownOpen, setIsDropdownOpen] = useState(false) + const searchInputRef = useRef(null) + const dropdownRef = useRef(null) + const itemRefs = useRef<(HTMLDivElement | null)[]>([]) + + // Get searchable settings + const searchableSettings = useMemo(() => getSearchableSettings(t), [t]) + + // Perform search + const searchResults = useMemo(() => { + if (!searchQuery.trim()) return [] + return searchSettings(searchQuery, searchableSettings) + }, [searchQuery, searchableSettings]) + + // Flatten results for keyboard navigation + const flattenedResults = useMemo(() => { + const items: { item: SearchableItem; sectionId: string }[] = [] + searchResults.forEach((result) => { + result.matches.forEach((match) => { + items.push({ item: match, sectionId: result.sectionId }) + }) + }) + return items + }, [searchResults]) + + // Handle search toggle + const handleSearchToggle = useCallback(() => { + setIsExpanded(!isExpanded) + if (!isExpanded) { + // Focus the input when expanding + setTimeout(() => searchInputRef.current?.focus(), 100) + } else { + // Clear search when collapsing + setSearchQuery("") + setIsDropdownOpen(false) + setSelectedIndex(-1) + } + }, [isExpanded]) + + // Handle search clear + const handleSearchClear = useCallback(() => { + setSearchQuery("") + setSelectedIndex(-1) + searchInputRef.current?.focus() + }, []) + + // Handle search input change + const handleSearchChange = useCallback((e: React.ChangeEvent) => { + const value = e.target.value + setSearchQuery(value) + setSelectedIndex(-1) + setIsDropdownOpen(value.trim().length > 0) + }, []) + + // Handle item selection + const handleSelectItem = useCallback( + (sectionId: string, settingId: string) => { + onSelectSetting(sectionId, settingId) + setSearchQuery("") + setIsDropdownOpen(false) + setIsExpanded(false) + setSelectedIndex(-1) + }, + [onSelectSetting], + ) + + // Handle keyboard navigation + const handleKeyDown = useCallback( + (e: React.KeyboardEvent) => { + if (!isDropdownOpen || flattenedResults.length === 0) { + if (e.key === "Escape" && isExpanded) { + setIsExpanded(false) + setSearchQuery("") + setIsDropdownOpen(false) + } + return + } + + switch (e.key) { + case "ArrowDown": + e.preventDefault() + setSelectedIndex((prev) => (prev < flattenedResults.length - 1 ? prev + 1 : 0)) + break + case "ArrowUp": + e.preventDefault() + setSelectedIndex((prev) => (prev > 0 ? prev - 1 : flattenedResults.length - 1)) + break + case "Enter": + e.preventDefault() + if (selectedIndex >= 0 && selectedIndex < flattenedResults.length) { + const selected = flattenedResults[selectedIndex] + handleSelectItem(selected.sectionId, selected.item.settingId) + } + break + case "Escape": + e.preventDefault() + setIsDropdownOpen(false) + setSearchQuery("") + setIsExpanded(false) + setSelectedIndex(-1) + break + } + }, + [isDropdownOpen, flattenedResults, selectedIndex, handleSelectItem, isExpanded], + ) + + // Scroll selected item into view + useEffect(() => { + if (selectedIndex >= 0 && itemRefs.current[selectedIndex]) { + itemRefs.current[selectedIndex]?.scrollIntoView({ + block: "nearest", + behavior: "smooth", + }) + } + }, [selectedIndex]) + + // Handle clicks outside + useEffect(() => { + const handleClickOutside = (event: MouseEvent) => { + if ( + dropdownRef.current && + !dropdownRef.current.contains(event.target as Node) && + searchInputRef.current && + !searchInputRef.current.contains(event.target as Node) + ) { + setIsDropdownOpen(false) + } + } + + if (isDropdownOpen) { + document.addEventListener("mousedown", handleClickOutside) + return () => document.removeEventListener("mousedown", handleClickOutside) + } + }, [isDropdownOpen]) + + // Reset selected index when results change + useEffect(() => { + setSelectedIndex(-1) + itemRefs.current = [] + }, [searchResults]) + + return ( +
+
+ + +
+ + {searchQuery && ( + + + + )} +
+
+ e.preventDefault()}> +
+ {searchResults.length === 0 ? ( +
+

{t("settings:header.noSearchResults")}

+

“{searchQuery}”

+
+ ) : ( +
+ {searchResults.map((result, resultIndex) => ( +
+ {resultIndex > 0 && ( +
+ )} +
+ {result.matches[0].sectionLabel} +
+ {result.matches.map((match) => { + const globalIndex = flattenedResults.findIndex( + (item) => + item.sectionId === result.sectionId && + item.item.settingId === match.settingId, + ) + const isSelected = selectedIndex === globalIndex + + return ( +
{ + if (globalIndex >= 0) { + itemRefs.current[globalIndex] = el + } + }} + onClick={() => + handleSelectItem(result.sectionId, match.settingId) + } + className={cn( + "px-3 py-2 cursor-pointer flex items-center justify-between group", + "hover:bg-vscode-list-hoverBackground", + isSelected && "bg-vscode-list-activeSelectionBackground", + )}> +
+
+ {match.settingLabel} +
+ {match.settingDescription && ( +
+ {match.settingDescription} +
+ )} +
+ +
+ ) + })} +
+ ))} +
+ )} +
+ + +
+ + + +
+ ) +} diff --git a/webview-ui/src/components/settings/SettingsView.tsx b/webview-ui/src/components/settings/SettingsView.tsx index a416afd48d..827fe3951a 100644 --- a/webview-ui/src/components/settings/SettingsView.tsx +++ b/webview-ui/src/components/settings/SettingsView.tsx @@ -66,6 +66,8 @@ import { About } from "./About" import { Section } from "./Section" import PromptsSettings from "./PromptsSettings" import { cn } from "@/lib/utils" +import { SettingsSearchDropdown } from "./SettingsSearchDropdown" +import { scrollToSetting } from "./scrollToSetting" export const settingsTabsContainer = "flex flex-1 overflow-hidden [&.narrow_.tab-label]:hidden" export const settingsTabList = @@ -461,13 +463,24 @@ const SettingsView = forwardRef(({ onDone, t } }, [scrollToActiveTab]) + // Handle search selection + const handleSearchSelection = useCallback((sectionId: string, settingId: string) => { + setActiveTab(sectionId as SectionName) + // Use setTimeout to ensure tab content is rendered before scrolling + setTimeout(() => { + scrollToSetting(settingId) + }, 100) + }, []) + return (

{t("settings:header.title")}

-
+
+ {/* Search functionality */} +
-
+
@@ -132,7 +132,7 @@ export const TerminalSettings = ({
-
+
@@ -162,7 +162,7 @@ export const TerminalSettings = ({
-
+
@@ -199,7 +199,7 @@ export const TerminalSettings = ({
-
+
{ @@ -227,7 +227,7 @@ export const TerminalSettings = ({
-
+
@@ -253,7 +253,7 @@ export const TerminalSettings = ({ {!terminalShellIntegrationDisabled && ( <> -
+
@@ -288,7 +288,7 @@ export const TerminalSettings = ({
-
+
@@ -321,7 +321,7 @@ export const TerminalSettings = ({
-
+
@@ -346,7 +346,7 @@ export const TerminalSettings = ({
-
+
@@ -371,7 +371,7 @@ export const TerminalSettings = ({
-
+
setCachedStateField("terminalZshOhMy", e.target.checked)} @@ -392,7 +392,7 @@ export const TerminalSettings = ({
-
+
setCachedStateField("terminalZshP10k", e.target.checked)} @@ -413,7 +413,7 @@ export const TerminalSettings = ({
-
+
setCachedStateField("terminalZdotdir", e.target.checked)} diff --git a/webview-ui/src/components/settings/__tests__/SearchHighlight.spec.tsx b/webview-ui/src/components/settings/__tests__/SearchHighlight.spec.tsx new file mode 100644 index 0000000000..28a6819031 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/SearchHighlight.spec.tsx @@ -0,0 +1,163 @@ +import React from "react" +import { render } from "@testing-library/react" +import { SearchHighlight, highlightText, SettingHighlightWrapper } from "../SearchHighlight" + +describe("SearchHighlight", () => { + describe("highlightText", () => { + it("should return plain text when query is empty", () => { + const result = highlightText("Hello World", "") + expect(result).toBe("Hello World") + }) + + it("should return plain text when query is only spaces", () => { + const result = highlightText("Hello World", " ") + expect(result).toBe("Hello World") + }) + + it("should highlight matching text case-insensitively", () => { + const result = highlightText("Hello World", "world") + + expect(Array.isArray(result)).toBe(true) + // The result is an array of strings and React elements + const resultArray = result as Array + // Filter out empty strings from the result + const nonEmptyResult = resultArray.filter((item) => (typeof item === "string" ? item !== "" : true)) + expect(nonEmptyResult).toHaveLength(2) + expect(nonEmptyResult[0]).toBe("Hello ") + expect((nonEmptyResult[1] as React.ReactElement).type).toBe("mark") + expect((nonEmptyResult[1] as React.ReactElement).props.children).toBe("World") + }) + + it("should highlight multiple occurrences", () => { + const result = highlightText("The test is a test", "test") + + expect(Array.isArray(result)).toBe(true) + // The result is an array of strings and React elements + const resultArray = result as Array + // Filter out empty strings from the result + const nonEmptyResult = resultArray.filter((item) => (typeof item === "string" ? item !== "" : true)) + expect(nonEmptyResult).toHaveLength(4) + expect(nonEmptyResult[0]).toBe("The ") + expect((nonEmptyResult[1] as React.ReactElement).type).toBe("mark") + expect((nonEmptyResult[1] as React.ReactElement).props.children).toBe("test") + expect(nonEmptyResult[2]).toBe(" is a ") + expect((nonEmptyResult[3] as React.ReactElement).type).toBe("mark") + expect((nonEmptyResult[3] as React.ReactElement).props.children).toBe("test") + }) + + it("should handle case variations", () => { + const result = highlightText("Test TEST test", "test") + + expect(Array.isArray(result)).toBe(true) + // The result is an array of strings and React elements + const resultArray = result as Array + // All variations should be highlighted + const marks = resultArray.filter( + (item): item is React.ReactElement => + typeof item === "object" && item !== null && "type" in item && item.type === "mark", + ) + expect(marks).toHaveLength(3) + expect(marks[0].props.children).toBe("Test") + expect(marks[1].props.children).toBe("TEST") + expect(marks[2].props.children).toBe("test") + }) + + it("should handle regex special characters without breaking", () => { + // Test that regex special characters don't cause errors + const result = highlightText("function test() { return true; }", "test()") + + expect(Array.isArray(result)).toBe(true) + const resultArray = result as Array + const nonEmptyResult = resultArray.filter((item) => (typeof item === "string" ? item !== "" : true)) + + // Should find and highlight "test()" literally, not as a regex pattern + expect(nonEmptyResult).toHaveLength(3) + expect((nonEmptyResult[1] as React.ReactElement).props.children).toBe("test()") + }) + }) + + describe("SearchHighlight component", () => { + it("should render highlighted text", () => { + const { container } = render() + + const mark = container.querySelector("mark") + expect(mark).toBeTruthy() + expect(mark?.textContent).toBe("World") + expect(mark?.className).toContain("bg-vscode-editor-findMatchHighlightBackground") + }) + + it("should apply custom className to span", () => { + const { container } = render( + , + ) + + const span = container.querySelector("span") + expect(span?.className).toBe("custom-class") + }) + + it("should render plain text when no match", () => { + const { container } = render() + + const mark = container.querySelector("mark") + expect(mark).toBeFalsy() + expect(container.textContent).toBe("Hello World") + }) + }) + + describe("SettingHighlightWrapper", () => { + it("should render children without wrapper when no search query", () => { + const { container } = render( + +
Test Content
+
, + ) + + expect(container.querySelector(".relative")).toBeFalsy() + expect(container.textContent).toBe("Test Content") + }) + + it("should render children without wrapper when not in matches", () => { + const { container } = render( + +
Test Content
+
, + ) + + expect(container.querySelector(".relative")).toBeFalsy() + expect(container.textContent).toBe("Test Content") + }) + + it("should render with highlight wrapper when in matches", () => { + const { container } = render( + +
Test Content
+
, + ) + + const wrapper = container.querySelector(".relative") + expect(wrapper).toBeTruthy() + + const highlightBar = container.querySelector(".absolute") + expect(highlightBar).toBeTruthy() + expect(highlightBar?.className).toContain("bg-vscode-editor-findMatchHighlightBackground") + expect(highlightBar?.className).toContain("-left-2") + expect(highlightBar?.className).toContain("w-1") + + expect(container.textContent).toBe("Test Content") + }) + + it("should handle multiple matches correctly", () => { + const { container } = render( + +
Test Content
+
, + ) + + const wrapper = container.querySelector(".relative") + expect(wrapper).toBeTruthy() + }) + }) +}) diff --git a/webview-ui/src/components/settings/__tests__/SettingsSearchDropdown.spec.tsx b/webview-ui/src/components/settings/__tests__/SettingsSearchDropdown.spec.tsx new file mode 100644 index 0000000000..608ad12ad2 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/SettingsSearchDropdown.spec.tsx @@ -0,0 +1,33 @@ +import { render, screen } from "@testing-library/react" +import userEvent from "@testing-library/user-event" +import { vi } from "vitest" +import { SettingsSearchDropdown } from "../SettingsSearchDropdown" + +vi.mock("@src/i18n/TranslationContext", () => ({ + useAppTranslation: () => ({ t: () => "" }), +})) + +vi.mock("@src/components/ui", () => ({ + Popover: ({ children }: any) => <>{children}, + PopoverTrigger: ({ children }: any) => <>{children}, + PopoverContent: ({ children }: any) => <>{children}, + StandardTooltip: ({ children }: any) => <>{children}, +})) + +vi.mock("../searchUtils", () => ({ + getSearchableSettings: () => [], + searchSettings: () => [], +})) + +describe("SettingsSearchDropdown", () => { + it("renders", async () => { + const onSelect = vi.fn() + render() + + const btn = screen.getByRole("button") + expect(btn).toBeInTheDocument() + + await userEvent.click(btn) + expect(screen.getByRole("textbox")).toBeInTheDocument() + }) +}) diff --git a/webview-ui/src/components/settings/__tests__/scrollToSetting.spec.ts b/webview-ui/src/components/settings/__tests__/scrollToSetting.spec.ts new file mode 100644 index 0000000000..2573b8f855 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/scrollToSetting.spec.ts @@ -0,0 +1,83 @@ +import { describe, it, expect, vi, beforeEach, afterEach } from "vitest" +import { scrollToSetting } from "../searchUtils" + +describe("scrollToSetting", () => { + let mockElement: HTMLElement + let originalQuerySelector: typeof document.querySelector + + beforeEach(() => { + // Mock element + mockElement = document.createElement("div") + mockElement.scrollIntoView = vi.fn() + mockElement.classList.add = vi.fn() + mockElement.classList.remove = vi.fn() + + // Mock querySelector + originalQuerySelector = document.querySelector + document.querySelector = vi.fn((selector: string) => { + if (selector === '[data-setting-id="testSetting"]') { + return mockElement + } + return null + }) + + // Mock setTimeout + vi.useFakeTimers() + }) + + afterEach(() => { + document.querySelector = originalQuerySelector + vi.useRealTimers() + vi.clearAllMocks() + }) + + it("should find element by data-setting-id and scroll to it", () => { + scrollToSetting("testSetting") + + expect(document.querySelector).toHaveBeenCalledWith('[data-setting-id="testSetting"]') + expect(mockElement.scrollIntoView).toHaveBeenCalledWith({ + behavior: "smooth", + block: "center", + }) + }) + + it("should add highlight class to the element", () => { + scrollToSetting("testSetting") + + expect(mockElement.classList.add).toHaveBeenCalledWith("setting-highlight") + }) + + it("should remove highlight class after 2 seconds", () => { + scrollToSetting("testSetting") + + expect(mockElement.classList.remove).not.toHaveBeenCalled() + + // Fast-forward 2 seconds + vi.advanceTimersByTime(2000) + + expect(mockElement.classList.remove).toHaveBeenCalledWith("setting-highlight") + }) + + it("should handle non-existent setting gracefully", () => { + // This should not throw an error + expect(() => scrollToSetting("nonExistentSetting")).not.toThrow() + + expect(document.querySelector).toHaveBeenCalledWith('[data-setting-id="nonExistentSetting"]') + expect(mockElement.scrollIntoView).not.toHaveBeenCalled() + expect(mockElement.classList.add).not.toHaveBeenCalled() + }) + + it("should handle empty setting ID", () => { + expect(() => scrollToSetting("")).not.toThrow() + + expect(document.querySelector).toHaveBeenCalledWith('[data-setting-id=""]') + expect(mockElement.scrollIntoView).not.toHaveBeenCalled() + }) + + it("should handle null/undefined setting ID", () => { + expect(() => scrollToSetting(null as any)).not.toThrow() + expect(() => scrollToSetting(undefined as any)).not.toThrow() + + expect(mockElement.scrollIntoView).not.toHaveBeenCalled() + }) +}) diff --git a/webview-ui/src/components/settings/__tests__/searchUtils.spec.ts b/webview-ui/src/components/settings/__tests__/searchUtils.spec.ts new file mode 100644 index 0000000000..45fcfb0d29 --- /dev/null +++ b/webview-ui/src/components/settings/__tests__/searchUtils.spec.ts @@ -0,0 +1,224 @@ +import { vi } from "vitest" +import { getSearchableSettings, searchSettings, SETTINGS_SEARCH_CONFIG, EXPERIMENTAL_SETTINGS } from "../searchUtils" + +describe("searchUtils", () => { + const mockT = vi.fn((key: string) => key) + + beforeEach(() => { + vi.clearAllMocks() + }) + + describe("getSearchableSettings", () => { + it("should return an array of searchable items", () => { + const settings = getSearchableSettings(mockT) + + expect(settings).toBeInstanceOf(Array) + expect(settings.length).toBeGreaterThan(0) + + // Check structure of first item + const firstItem = settings[0] + expect(firstItem).toHaveProperty("sectionId") + expect(firstItem).toHaveProperty("sectionLabel") + expect(firstItem).toHaveProperty("settingId") + expect(firstItem).toHaveProperty("settingLabel") + }) + + it("should include all configured settings", () => { + const settings = getSearchableSettings(mockT) + + // Count should match the config + experimental settings + const expectedCount = Object.keys(SETTINGS_SEARCH_CONFIG).length + EXPERIMENTAL_SETTINGS.length + expect(settings).toHaveLength(expectedCount) + }) + + it("should include all main sections", () => { + const settings = getSearchableSettings(mockT) + const sections = new Set(settings.map((item) => item.sectionId)) + + expect(sections.has("providers")).toBe(true) + expect(sections.has("autoApprove")).toBe(true) + expect(sections.has("browser")).toBe(true) + expect(sections.has("checkpoints")).toBe(true) + expect(sections.has("notifications")).toBe(true) + expect(sections.has("contextManagement")).toBe(true) + expect(sections.has("terminal")).toBe(true) + expect(sections.has("language")).toBe(true) + expect(sections.has("about")).toBe(true) + expect(sections.has("experimental")).toBe(true) + }) + + it("should include experimental settings", () => { + const settings = getSearchableSettings(mockT) + const experimentalSettings = settings.filter((item) => item.sectionId === "experimental") + + expect(experimentalSettings.length).toBe(EXPERIMENTAL_SETTINGS.length) + expect(experimentalSettings.some((item) => item.settingId === "DIFF_STRATEGY_UNIFIED")).toBe(true) + expect(experimentalSettings.some((item) => item.settingId === "POWER_STEERING")).toBe(true) + }) + + it("should include PowerShell terminal setting", () => { + const settings = getSearchableSettings(mockT) + const powershellSetting = settings.find((item) => item.settingId === "powershellCounter") + + expect(powershellSetting).toBeDefined() + expect(powershellSetting?.sectionId).toBe("terminal") + expect(powershellSetting?.keywords).toContain("powershell") + }) + }) + + describe("searchSettings", () => { + const mockSettings = [ + { + sectionId: "providers", + sectionLabel: "Providers", + settingId: "apiProvider", + settingLabel: "API Provider", + keywords: ["api", "provider", "model"], + }, + { + sectionId: "browser", + sectionLabel: "Browser", + settingId: "browserToolEnabled", + settingLabel: "Enable browser tool", + settingDescription: "Enable browser functionality", + keywords: ["browser", "tool", "enable"], + }, + { + sectionId: "notifications", + sectionLabel: "Notifications", + settingId: "soundEnabled", + settingLabel: "Enable sound effects", + keywords: ["sound", "audio", "notification"], + }, + ] + + it("should return empty array for empty query", () => { + const results = searchSettings("", mockSettings) + expect(results).toEqual([]) + + const resultsWithSpaces = searchSettings(" ", mockSettings) + expect(resultsWithSpaces).toEqual([]) + }) + + it("should find settings by label with exact match", () => { + const results = searchSettings("browser", mockSettings) + + expect(results).toHaveLength(1) + expect(results[0].sectionId).toBe("browser") + expect(results[0].matches).toHaveLength(1) + expect(results[0].matches[0].settingId).toBe("browserToolEnabled") + }) + + it("should find settings with fuzzy matching", () => { + // Test fuzzy matching - "brwsr" should match "browser" + const results = searchSettings("brwsr", mockSettings) + + expect(results).toHaveLength(1) + expect(results[0].sectionId).toBe("browser") + expect(results[0].matches).toHaveLength(1) + expect(results[0].matches[0].settingId).toBe("browserToolEnabled") + }) + + it("should find settings with partial fuzzy match", () => { + // Test partial fuzzy matching - "snd" should match "sound" + const results = searchSettings("snd", mockSettings) + + expect(results).toHaveLength(1) + expect(results[0].sectionId).toBe("notifications") + expect(results[0].matches[0].settingId).toBe("soundEnabled") + }) + + it("should find settings by keywords", () => { + const results = searchSettings("audio", mockSettings) + + expect(results).toHaveLength(1) + expect(results[0].sectionId).toBe("notifications") + expect(results[0].matches[0].settingId).toBe("soundEnabled") + }) + + it("should find settings by description", () => { + const results = searchSettings("functionality", mockSettings) + + expect(results).toHaveLength(1) + expect(results[0].sectionId).toBe("browser") + expect(results[0].matches[0].settingId).toBe("browserToolEnabled") + }) + + it("should be case insensitive", () => { + const resultsLower = searchSettings("api", mockSettings) + const resultsUpper = searchSettings("API", mockSettings) + const resultsMixed = searchSettings("ApI", mockSettings) + + expect(resultsLower).toEqual(resultsUpper) + expect(resultsLower).toEqual(resultsMixed) + expect(resultsLower).toHaveLength(1) + }) + + it("should find multiple matches across sections", () => { + const results = searchSettings("enable", mockSettings) + + expect(results).toHaveLength(2) + const sectionIds = results.map((r) => r.sectionId) + expect(sectionIds).toContain("browser") + expect(sectionIds).toContain("notifications") + }) + + it("should handle typos with fuzzy search", () => { + // Test typo tolerance - "notifcation" (missing 'i') should match "notification" + const results = searchSettings("notifcation", mockSettings) + + expect(results).toHaveLength(1) + expect(results[0].sectionId).toBe("notifications") + expect(results[0].matches[0].settingId).toBe("soundEnabled") + }) + + it("should return no results for completely unrelated queries", () => { + const results = searchSettings("xyz123", mockSettings) + + expect(results).toHaveLength(0) + }) + + it("should handle acronym-style searches", () => { + // "api" should match "API Provider" + const results = searchSettings("ap", mockSettings) + + expect(results.length).toBeGreaterThan(0) + const apiMatch = results.find((r) => r.matches.some((m) => m.settingId === "apiProvider")) + expect(apiMatch).toBeDefined() + }) + + it("should rank exact matches higher in fuzzy search", () => { + const settingsWithSimilarNames = [ + { + sectionId: "test", + sectionLabel: "Test", + settingId: "setting1", + settingLabel: "Sound", + keywords: [], + }, + { + sectionId: "test", + sectionLabel: "Test", + settingId: "setting2", + settingLabel: "Sound Effects", + keywords: [], + }, + { + sectionId: "test", + sectionLabel: "Test", + settingId: "setting3", + settingLabel: "Background Sound", + keywords: [], + }, + ] + + const results = searchSettings("sound", settingsWithSimilarNames) + + expect(results).toHaveLength(1) + expect(results[0].matches).toHaveLength(3) + // Due to our tiebreaker, exact label matches should come first + const firstMatch = results[0].matches[0] + expect(firstMatch.settingLabel.toLowerCase()).toContain("sound") + }) + }) +}) diff --git a/webview-ui/src/components/settings/scrollToSetting.ts b/webview-ui/src/components/settings/scrollToSetting.ts new file mode 100644 index 0000000000..d21f9f2a4f --- /dev/null +++ b/webview-ui/src/components/settings/scrollToSetting.ts @@ -0,0 +1,28 @@ +/** + * Scrolls to a specific setting element by its data-setting-id attribute + * @param settingId - The ID of the setting to scroll to + */ +export function scrollToSetting(settingId: string): void { + if (!settingId) { + return + } + + // Find the element with the data-setting-id attribute + const element = document.querySelector(`[data-setting-id="${settingId}"]`) + + if (element) { + // Scroll the element into view with smooth behavior + element.scrollIntoView({ + behavior: "smooth", + block: "center", + }) + + // Add a highlight animation to draw attention + element.classList.add("search-highlight") + + // Remove the highlight after animation completes + setTimeout(() => { + element.classList.remove("search-highlight") + }, 2000) + } +} diff --git a/webview-ui/src/components/settings/searchUtils.ts b/webview-ui/src/components/settings/searchUtils.ts new file mode 100644 index 0000000000..3ce047a7fb --- /dev/null +++ b/webview-ui/src/components/settings/searchUtils.ts @@ -0,0 +1,438 @@ +import { Fzf } from "fzf" + +export interface SearchableItem { + sectionId: string + sectionLabel: string + settingId: string + settingLabel: string + settingDescription?: string + keywords?: string[] +} + +// Define a mapping of setting keys to their search metadata +// This is much more maintainable than duplicating all settings +export const SETTINGS_SEARCH_CONFIG: Record< + string, + { + sectionId: string + translationKey?: string + keywords?: string[] + } +> = { + // Providers section + apiProvider: { sectionId: "providers", keywords: ["api", "provider", "model", "configuration"] }, + model: { sectionId: "providers", keywords: ["model", "ai", "llm"] }, + + // Auto-Approve section - mapped to correct translation keys + alwaysAllowReadOnly: { + sectionId: "autoApprove", + translationKey: "readOnly", + keywords: ["read", "auto", "approve", "files"], + }, + alwaysAllowReadOnlyOutsideWorkspace: { + sectionId: "autoApprove", + translationKey: "readOnly.outsideWorkspace", + keywords: ["read", "auto", "approve", "files", "outside", "workspace"], + }, + alwaysAllowWrite: { + sectionId: "autoApprove", + translationKey: "write", + keywords: ["write", "auto", "approve", "edit", "create"], + }, + alwaysAllowWriteOutsideWorkspace: { + sectionId: "autoApprove", + translationKey: "write.outsideWorkspace", + keywords: ["write", "auto", "approve", "edit", "create", "outside", "workspace"], + }, + alwaysAllowWriteProtected: { + sectionId: "autoApprove", + translationKey: "write.protected", + keywords: ["write", "auto", "approve", "protected", "files"], + }, + writeDelayMs: { + sectionId: "autoApprove", + translationKey: "write.delayLabel", + keywords: ["write", "delay", "milliseconds", "timing"], + }, + alwaysAllowExecute: { + sectionId: "autoApprove", + translationKey: "execute", + keywords: ["execute", "terminal", "command", "auto", "approve"], + }, + allowedCommands: { + sectionId: "autoApprove", + translationKey: "execute.allowedCommands", + keywords: ["commands", "allowed", "whitelist", "execute"], + }, + deniedCommands: { + sectionId: "autoApprove", + translationKey: "execute.deniedCommands", + keywords: ["commands", "denied", "blacklist", "execute"], + }, + alwaysAllowBrowser: { + sectionId: "autoApprove", + translationKey: "browser", + keywords: ["browser", "auto", "approve"], + }, + alwaysAllowMcp: { + sectionId: "autoApprove", + translationKey: "mcp", + keywords: ["mcp", "auto", "approve", "model context protocol"], + }, + alwaysAllowModeSwitch: { + sectionId: "autoApprove", + translationKey: "modeSwitch", + keywords: ["mode", "switch", "auto", "approve"], + }, + alwaysAllowSubtasks: { + sectionId: "autoApprove", + translationKey: "subtasks", + keywords: ["subtasks", "auto", "approve", "tasks"], + }, + alwaysAllowFollowupQuestions: { + sectionId: "autoApprove", + translationKey: "followupQuestions", + keywords: ["followup", "questions", "auto", "approve"], + }, + alwaysAllowUpdateTodoList: { + sectionId: "autoApprove", + translationKey: "updateTodoList", + keywords: ["todo", "list", "auto", "approve", "update"], + }, + followupAutoApproveTimeoutMs: { + sectionId: "autoApprove", + translationKey: "followupQuestions.timeoutLabel", + keywords: ["followup", "timeout", "auto", "approve", "milliseconds"], + }, + alwaysApproveResubmit: { + sectionId: "autoApprove", + translationKey: "retry", + keywords: ["resubmit", "auto", "approve", "retry"], + }, + requestDelaySeconds: { + sectionId: "autoApprove", + translationKey: "retry.delayLabel", + keywords: ["request", "delay", "seconds", "timing"], + }, + allowedMaxRequests: { + sectionId: "autoApprove", + translationKey: "apiRequestLimit", + keywords: ["max", "requests", "limit", "auto", "approve"], + }, + + // Browser section + browserToolEnabled: { + sectionId: "browser", + translationKey: "enable", + keywords: ["browser", "tool", "enable", "computer use"], + }, + browserViewportSize: { + sectionId: "browser", + translationKey: "viewport", + keywords: ["viewport", "size", "resolution", "browser"], + }, + screenshotQuality: { + sectionId: "browser", + translationKey: "screenshotQuality", + keywords: ["screenshot", "quality", "webp", "browser"], + }, + remoteBrowserEnabled: { + sectionId: "browser", + translationKey: "remote", + keywords: ["remote", "browser", "enable", "server"], + }, + remoteBrowserHost: { + sectionId: "browser", + translationKey: "remote.urlPlaceholder", + keywords: ["remote", "browser", "host", "url", "server"], + }, + + // Checkpoints section + enableCheckpoints: { + sectionId: "checkpoints", + translationKey: "enable", + keywords: ["checkpoint", "backup", "restore", "history"], + }, + + // Notifications section + soundEnabled: { + sectionId: "notifications", + translationKey: "sound", + keywords: ["sound", "audio", "notification", "effects"], + }, + soundVolume: { + sectionId: "notifications", + translationKey: "sound.volumeLabel", + keywords: ["sound", "volume", "audio", "level"], + }, + ttsEnabled: { + sectionId: "notifications", + translationKey: "tts", + keywords: ["tts", "text to speech", "voice", "audio"], + }, + ttsSpeed: { + sectionId: "notifications", + translationKey: "tts.speedLabel", + keywords: ["tts", "speed", "voice", "rate"], + }, + + // Context Management section + autoCondenseContext: { + sectionId: "contextManagement", + translationKey: "autoCondenseContext.name", + keywords: ["context", "condense", "token", "automatic"], + }, + autoCondenseContextPercent: { + sectionId: "contextManagement", + translationKey: "autoCondenseContextPercent", + keywords: ["context", "condense", "percent", "threshold"], + }, + condensingApiConfigId: { + sectionId: "contextManagement", + translationKey: "condensingApiConfiguration", + keywords: ["condensing", "api", "config", "model"], + }, + customCondensingPrompt: { + sectionId: "contextManagement", + translationKey: "customCondensingPrompt", + keywords: ["condensing", "prompt", "custom", "context"], + }, + maxOpenTabsContext: { + sectionId: "contextManagement", + translationKey: "openTabs", + keywords: ["tabs", "context", "open", "limit"], + }, + maxWorkspaceFiles: { + sectionId: "contextManagement", + translationKey: "workspaceFiles", + keywords: ["workspace", "files", "context", "limit"], + }, + showRooIgnoredFiles: { + sectionId: "contextManagement", + translationKey: "rooignore", + keywords: ["roo", "ignored", "files", "show", "hidden"], + }, + maxReadFileLine: { + sectionId: "contextManagement", + translationKey: "maxReadFile", + keywords: ["read", "file", "line", "limit", "max"], + }, + maxConcurrentFileReads: { + sectionId: "contextManagement", + translationKey: "maxConcurrentFileReads", + keywords: ["concurrent", "file", "reads", "parallel", "limit"], + }, + profileThresholds: { + sectionId: "contextManagement", + translationKey: "condensingThreshold", + keywords: ["profile", "thresholds", "performance", "timing"], + }, + + // Terminal section + outputLineLimit: { sectionId: "terminal", keywords: ["terminal", "output", "lines", "limit"] }, + outputCharacterLimit: { sectionId: "terminal", keywords: ["terminal", "output", "character", "limit"] }, + compressProgressBar: { sectionId: "terminal", keywords: ["terminal", "progress", "bar", "compress", "output"] }, + shellIntegrationDisabled: { sectionId: "terminal", keywords: ["terminal", "shell", "integration", "disable"] }, + shellIntegrationTimeout: { + sectionId: "terminal", + keywords: ["terminal", "shell", "integration", "timeout", "startup"], + }, + commandDelay: { sectionId: "terminal", keywords: ["terminal", "command", "delay", "timing"] }, + powershellCounter: { + sectionId: "terminal", + keywords: ["terminal", "powershell", "counter", "workaround", "windows"], + }, + zshClearEolMark: { sectionId: "terminal", keywords: ["terminal", "zsh", "eol", "mark", "end of line"] }, + zshOhMy: { sectionId: "terminal", keywords: ["terminal", "zsh", "oh my zsh", "shell", "integration"] }, + zshP10k: { sectionId: "terminal", keywords: ["terminal", "zsh", "powerlevel10k", "p10k", "shell"] }, + zdotdir: { sectionId: "terminal", keywords: ["terminal", "zsh", "zdotdir", "shell", "configuration"] }, + inheritEnv: { sectionId: "terminal", keywords: ["terminal", "environment", "variables", "inherit", "env"] }, + + // Prompts section + customSupportPrompts: { sectionId: "prompts", keywords: ["prompts", "custom", "support", "instructions"] }, + + // Advanced section + diffEnabled: { sectionId: "advanced", translationKey: "diff", keywords: ["diff", "enabled", "advanced"] }, + fuzzyMatchThreshold: { + sectionId: "advanced", + translationKey: "diff.matchPrecision", + keywords: ["fuzzy", "match", "threshold", "search"], + }, + mcpEnabled: { sectionId: "advanced", keywords: ["mcp", "model", "context", "protocol", "enabled"] }, + + // Language section + language: { sectionId: "language", keywords: ["language", "locale", "translation", "i18n"] }, + + // About section + telemetrySetting: { sectionId: "about", keywords: ["telemetry", "analytics", "privacy", "data"] }, +} + +// Experimental settings that are dynamically added +export const EXPERIMENTAL_SETTINGS = [ + "DIFF_STRATEGY_UNIFIED", + "SEARCH_AND_REPLACE", + "INSERT_BLOCK", + "POWER_STEERING", + "CONCURRENT_FILE_READS", + "MULTI_SEARCH_AND_REPLACE", + "MARKETPLACE", + "MULTI_FILE_APPLY_DIFF", +] + +// Generate searchable settings dynamically based on the configuration +export const getSearchableSettings = (t: (key: string) => string): SearchableItem[] => { + const settings: SearchableItem[] = [] + + // Process regular settings from config + Object.entries(SETTINGS_SEARCH_CONFIG).forEach(([settingId, config]) => { + const { sectionId, translationKey, keywords } = config + + // Build translation keys based on section and setting ID + const sectionKey = `settings:sections.${sectionId}` + let labelKey: string + let descriptionKey: string + + // Use custom translation key if provided + if (translationKey) { + // Special case: if it's a property like "delayLabel", use it directly + if (translationKey.endsWith("Label")) { + labelKey = `settings:${sectionId}.${translationKey}` + // Try to find a description by replacing Label with Description + descriptionKey = `settings:${sectionId}.${translationKey.replace("Label", "Description")}` + } else if (translationKey.includes(".name")) { + // For keys like "autoCondenseContext.name" + labelKey = `settings:${sectionId}.${translationKey}` + descriptionKey = `settings:${sectionId}.${translationKey.replace(".name", ".description")}` + } else { + // Standard pattern: add .label and .description + labelKey = `settings:${sectionId}.${translationKey}.label` + descriptionKey = `settings:${sectionId}.${translationKey}.description` + } + } else { + // Default behavior for settings without custom translation keys + labelKey = `settings:${sectionId}.${settingId}.label` + descriptionKey = `settings:${sectionId}.${settingId}.description` + } + + // Handle special cases that don't follow the pattern + if (settingId === "language") { + labelKey = "settings:sections.language" + descriptionKey = "settings:language.description" + } else if (settingId === "telemetrySetting") { + labelKey = "settings:footer.telemetry.label" + descriptionKey = "settings:footer.telemetry.description" + } else if (settingId === "apiProvider" || settingId === "model") { + labelKey = `settings:providers.${settingId}` + descriptionKey = `settings:providers.${settingId}Description` + } + + const label = t(labelKey) + const description = t(descriptionKey) + + // Add the setting with translated labels + settings.push({ + sectionId, + sectionLabel: t(sectionKey), + settingId, + settingLabel: label.startsWith("settings:") ? settingId : label, // Fallback to settingId if translation not found + settingDescription: description.startsWith("settings:") ? undefined : description, + keywords, + }) + }) + + // Add experimental settings + EXPERIMENTAL_SETTINGS.forEach((id) => { + settings.push({ + sectionId: "experimental", + sectionLabel: t("settings:sections.experimental"), + settingId: id, + settingLabel: t(`settings:experimental.${id}.name`), + settingDescription: t(`settings:experimental.${id}.description`), + keywords: ["experimental", "experiment", id.toLowerCase().replace(/_/g, " ")], + }) + }) + + return settings +} + +export interface SearchResult { + sectionId: string + matches: SearchableItem[] +} + +export const searchSettings = (query: string, searchableItems: SearchableItem[]): SearchResult[] => { + if (!query.trim()) return [] + + // Create searchable items for fuzzy search + const searchableData = searchableItems.map((item) => ({ + original: item, + searchStr: [item.sectionLabel, item.settingLabel, item.settingDescription || "", ...(item.keywords || [])] + .filter(Boolean) + .join(" "), + })) + + // Initialize Fzf instance for fuzzy search with case-insensitive matching + const fzf = new Fzf(searchableData, { + selector: (item) => item.searchStr.toLowerCase(), + // Add scoring options to prioritize certain matches + tiebreakers: [ + // Prioritize matches in setting labels + (a, b) => { + const aInLabel = a.item.original.settingLabel.toLowerCase().includes(query.toLowerCase()) + const bInLabel = b.item.original.settingLabel.toLowerCase().includes(query.toLowerCase()) + if (aInLabel && !bInLabel) return -1 + if (!aInLabel && bInLabel) return 1 + return 0 + }, + ], + }) + + // Get fuzzy matching items with case-insensitive search + const fuzzyResults = fzf.find(query.toLowerCase()) + const results = new Map() + + // Group results by section + fuzzyResults.forEach((result) => { + const item = result.item.original + const sectionMatches = results.get(item.sectionId) || [] + sectionMatches.push(item) + results.set(item.sectionId, sectionMatches) + }) + + // Convert to array format + return Array.from(results.entries()).map(([sectionId, matches]) => ({ + sectionId, + matches, + })) +} + +/** + * Scrolls to a specific setting element and highlights it temporarily + * @param settingId - The ID of the setting to scroll to + * @returns true if the element was found and scrolled to, false otherwise + */ +export const scrollToSetting = (settingId: string): boolean => { + // Find the element with the data-setting-id attribute + const element = document.querySelector(`[data-setting-id="${settingId}"]`) + + if (!element) { + console.warn(`Setting element with id "${settingId}" not found`) + return false + } + + // Scroll the element into view + element.scrollIntoView({ + behavior: "smooth", + block: "center", + }) + + // Add highlight class for animation + element.classList.add("setting-highlight") + + // Remove the highlight class after animation completes + setTimeout(() => { + element.classList.remove("setting-highlight") + }, 2000) + + return true +} diff --git a/webview-ui/src/i18n/locales/ca/prompts.json b/webview-ui/src/i18n/locales/ca/prompts.json index 1f67068df0..0c41efdeaa 100644 --- a/webview-ui/src/i18n/locales/ca/prompts.json +++ b/webview-ui/src/i18n/locales/ca/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Iniciar nova tasca", "description": "Inicieu una nova tasca amb l'entrada proporcionada. Disponible a la paleta de comandes." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json index 047b5858bf..9bdf8e6bd9 100644 --- a/webview-ui/src/i18n/locales/ca/settings.json +++ b/webview-ui/src/i18n/locales/ca/settings.json @@ -12,7 +12,11 @@ "title": "Configuració", "saveButtonTooltip": "Desar canvis", "nothingChangedTooltip": "No s'ha canviat res", - "doneButtonTooltip": "Descartar els canvis no desats i tancar el panell de configuració" + "doneButtonTooltip": "Descartar els canvis no desats i tancar el panell de configuració", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Canvis no desats", @@ -31,10 +35,15 @@ "prompts": "Indicacions", "experimental": "Experimental", "language": "Idioma", - "about": "Sobre Roo Code" + "about": "Sobre Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "Configura les indicacions de suport utilitzades per a accions ràpides com millorar indicacions, explicar codi i solucionar problemes. Aquestes indicacions ajuden Roo a proporcionar millor assistència per a tasques comunes de desenvolupament." + "description": "Configura les indicacions de suport utilitzades per a accions ràpides com millorar indicacions, explicar codi i solucionar problemes. Aquestes indicacions ajuden Roo a proporcionar millor assistència per a tasques comunes de desenvolupament.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Indexació de codi", @@ -148,7 +157,8 @@ "protected": { "label": "Incloure fitxers protegits", "description": "Permetre a Roo crear i editar fitxers protegits (com .rooignore i fitxers de configuració .roo/) sense requerir aprovació." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Navegador", @@ -157,7 +167,8 @@ "retry": { "label": "Reintentar", "description": "Tornar a intentar sol·licituds d'API fallides automàticament quan el servidor retorna una resposta d'error", - "delayLabel": "Retard abans de tornar a intentar la sol·licitud" + "delayLabel": "Retard abans de tornar a intentar la sol·licitud", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Pregunta", "description": "Seleccionar automàticament la primera resposta suggerida per a preguntes de seguiment després del temps d'espera configurat", - "timeoutLabel": "Temps d'espera abans de seleccionar automàticament la primera resposta" + "timeoutLabel": "Temps d'espera abans de seleccionar automàticament la primera resposta", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Executar", "description": "Executar automàticament comandes de terminal permeses sense requerir aprovació", - "allowedCommands": "Comandes d'auto-execució permeses", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Prefixos de comandes que poden ser executats automàticament quan \"Aprovar sempre operacions d'execució\" està habilitat. Afegeix * per permetre totes les comandes (usar amb precaució).", - "deniedCommands": "Comandes denegades", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Prefixos de comandes que es rebutjaran automàticament sense requerir aprovació. En cas de conflicte amb comandes permeses, la coincidència de prefix més llarga té prioritat. Afegeix * per denegar totes les comandes.", "commandPlaceholder": "Introduïu prefix de comanda (ex. 'git ')", "deniedCommandPlaceholder": "Introduïu prefix de comanda a denegar (ex. 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Màximes Sol·licituds", "description": "Fes aquesta quantitat de sol·licituds API automàticament abans de demanar aprovació per continuar amb la tasca.", - "unlimited": "Il·limitat" + "unlimited": "Il·limitat", + "label": "Max Requests" }, "selectOptionsFirst": "Seleccioneu almenys una opció a continuació per activar l'aprovació automàtica" }, @@ -242,7 +261,8 @@ "hint": "Si us plau, torneu a obrir la configuració per veure els models més recents.", "loading": "Actualitzant la llista de models...", "success": "Llista de models actualitzada correctament!", - "error": "No s'ha pogut actualitzar la llista de models. Si us plau, torneu-ho a provar." + "error": "No s'ha pogut actualitzar la llista de models. Si us plau, torneu-ho a provar.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Obtenir clau API de Requesty", "openRouterTransformsText": "Comprimir prompts i cadenes de missatges a la mida del context (Transformacions d'OpenRouter)", @@ -409,7 +429,9 @@ "placeholder": "Per defecte: claude", "maxTokensLabel": "Tokens màxims de sortida", "maxTokensDescription": "Nombre màxim de tokens de sortida per a les respostes de Claude Code. El valor per defecte és 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Utilitzar connexió remota del navegador", "description": "Connectar a un navegador Chrome que s'executa amb depuració remota habilitada (--remote-debugging-port=9222).", - "urlPlaceholder": "URL personalitzada (ex. http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Provar connexió", "testingButton": "Provant...", "instructions": "Introduïu l'adreça d'amfitrió del protocol DevTools o deixeu-la buida per descobrir automàticament instàncies locals de Chrome. El botó Provar Connexió provarà la URL personalitzada si es proporciona, o descobrirà automàticament si el camp està buit." @@ -449,12 +474,14 @@ "sound": { "label": "Habilitar efectes de so", "description": "Quan està habilitat, Roo reproduirà efectes de so per a notificacions i esdeveniments.", - "volumeLabel": "Volum" + "volumeLabel": "Volum", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Habilitar text a veu", "description": "Quan està habilitat, Roo llegirà en veu alta les seves respostes utilitzant text a veu.", - "speedLabel": "Velocitat" + "speedLabel": "Velocitat", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -524,7 +551,8 @@ "defaultDescription": "Quan el context arribi a aquest percentatge, es condensarà automàticament per a tots els perfils tret que tinguin configuracions personalitzades", "profileDescription": "Llindar personalitzat només per a aquest perfil (substitueix el per defecte global)", "inheritDescription": "Aquest perfil hereta el llindar per defecte global ({{threshold}}%)", - "usesGlobal": "(utilitza global {{threshold}}%)" + "usesGlobal": "(utilitza global {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -613,6 +641,10 @@ "todoList": { "label": "Habilitar eina de llista de tasques", "description": "Quan està habilitat, Roo pot crear i gestionar llistes de tasques per fer el seguiment del progrés de les tasques. Això ajuda a organitzar tasques complexes en passos manejables." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -754,5 +786,8 @@ "useCustomArn": "Utilitza ARN personalitzat..." }, "includeMaxOutputTokens": "Incloure tokens màxims de sortida", - "includeMaxOutputTokensDescription": "Enviar el paràmetre de tokens màxims de sortida a les sol·licituds API. Alguns proveïdors poden no admetre això." + "includeMaxOutputTokensDescription": "Enviar el paràmetre de tokens màxims de sortida a les sol·licituds API. Alguns proveïdors poden no admetre això.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/de/prompts.json b/webview-ui/src/i18n/locales/de/prompts.json index 229178abb3..861779dfba 100644 --- a/webview-ui/src/i18n/locales/de/prompts.json +++ b/webview-ui/src/i18n/locales/de/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Neue Aufgabe starten", "description": "Starte eine neue Aufgabe mit deiner Eingabe. Verfügbar in der Befehlspalette." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, @@ -205,5 +211,15 @@ "descriptionNoRules": "Möchten Sie diesen benutzerdefinierten Modus wirklich löschen?", "confirm": "Löschen", "cancel": "Abbrechen" + }, + "TODO: supportPrompts": { + "TODO: types": { + "TODO: enhance": { + "TODO: label": "Enhance" + }, + "TODO: condense": { + "TODO: label": "Condense" + } + } } } diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json index fa64685462..0ff765df03 100644 --- a/webview-ui/src/i18n/locales/de/settings.json +++ b/webview-ui/src/i18n/locales/de/settings.json @@ -1,40 +1,49 @@ { "common": { - "save": "Speichern", - "done": "Fertig", + "save": "TODO: Save", + "done": "TODO: Done", "cancel": "Abbrechen", "reset": "Zurücksetzen", - "select": "Auswählen", + "select": "TODO: Select", "add": "Header hinzufügen", "remove": "Entfernen" }, "header": { - "title": "Einstellungen", - "saveButtonTooltip": "Änderungen speichern", - "nothingChangedTooltip": "Nichts geändert", - "doneButtonTooltip": "Ungespeicherte Änderungen verwerfen und Einstellungsbereich schließen" + "title": "TODO: Settings", + "saveButtonTooltip": "TODO: Save changes", + "nothingChangedTooltip": "TODO: No changes to save", + "doneButtonTooltip": "TODO: Close settings", + "searchPlaceholder": "TODO: Search settings...", + "searchTooltip": "TODO: Search settings", + "clearSearchTooltip": "TODO: Clear search", + "noSearchResults": "TODO: No settings match your search" }, "unsavedChangesDialog": { - "title": "Ungespeicherte Änderungen", - "description": "Möchtest du die Änderungen verwerfen und fortfahren?", - "cancelButton": "Abbrechen", - "discardButton": "Änderungen verwerfen" + "title": "TODO: Unsaved Changes", + "description": "TODO: You have unsaved changes. Do you want to discard them?", + "cancelButton": "TODO: Cancel", + "discardButton": "TODO: Discard Changes" }, "sections": { - "providers": "Anbieter", - "autoApprove": "Auto-Genehmigung", - "browser": "Computerzugriff", - "checkpoints": "Kontrollpunkte", - "notifications": "Benachrichtigungen", - "contextManagement": "Kontext", - "terminal": "Terminal", - "prompts": "Eingabeaufforderungen", - "experimental": "Experimentell", - "language": "Sprache", - "about": "Über Roo Code" + "providers": "TODO: Providers", + "autoApprove": "TODO: Auto-Approve", + "browser": "TODO: Browser", + "checkpoints": "TODO: Checkpoints", + "notifications": "TODO: Notifications", + "contextManagement": "TODO: Context Management", + "terminal": "TODO: Terminal", + "prompts": "TODO: Prompts", + "experimental": "TODO: Experimental", + "language": "TODO: Language", + "about": "TODO: About", + "advanced": "Advanced" }, "prompts": { - "description": "Konfiguriere Support-Prompts, die für schnelle Aktionen wie das Verbessern von Prompts, das Erklären von Code und das Beheben von Problemen verwendet werden. Diese Prompts helfen Roo dabei, bessere Unterstützung für häufige Entwicklungsaufgaben zu bieten." + "description": "TODO: Customize prompts and instructions for Roo", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Codebase-Indexierung", @@ -126,38 +135,40 @@ "resetToDefault": "Auf Standard zurücksetzen" }, "autoApprove": { - "description": "Erlaubt Roo, Operationen automatisch ohne Genehmigung durchzuführen. Aktiviere diese Einstellungen nur, wenn du der KI vollständig vertraust und die damit verbundenen Sicherheitsrisiken verstehst.", - "toggleAriaLabel": "Automatische Genehmigung umschalten", - "disabledAriaLabel": "Automatische Genehmigung deaktiviert - zuerst Optionen auswählen", + "description": "TODO: Configure which actions Roo can perform automatically without asking for permission", + "toggleAriaLabel": "TODO: Toggle auto-approve", + "disabledAriaLabel": "TODO: Auto-approve is disabled", "readOnly": { - "label": "Lesen", + "label": "TODO: Read-Only Operations", "description": "Wenn aktiviert, wird Roo automatisch Verzeichnisinhalte anzeigen und Dateien lesen, ohne dass du auf die Genehmigen-Schaltfläche klicken musst.", "outsideWorkspace": { - "label": "Dateien außerhalb des Arbeitsbereichs einbeziehen", - "description": "Roo erlauben, Dateien außerhalb des aktuellen Arbeitsbereichs ohne Genehmigung zu lesen." + "label": "TODO: Allow reading files outside workspace", + "description": "TODO: Allow Roo to read files outside the current workspace directory" } }, "write": { - "label": "Schreiben", + "label": "TODO: Write Operations", "description": "Dateien automatisch erstellen und bearbeiten ohne Genehmigung", "delayLabel": "Verzögerung nach Schreibvorgängen, damit Diagnosefunktionen potenzielle Probleme erkennen können", "outsideWorkspace": { - "label": "Dateien außerhalb des Arbeitsbereichs einbeziehen", - "description": "Roo erlauben, Dateien außerhalb des aktuellen Arbeitsbereichs ohne Genehmigung zu erstellen und zu bearbeiten." + "label": "TODO: Allow writing files outside workspace", + "description": "TODO: Allow Roo to create or modify files outside the current workspace directory" }, "protected": { - "label": "Geschützte Dateien einbeziehen", - "description": "Roo erlauben, geschützte Dateien (wie .rooignore und .roo/ Konfigurationsdateien) ohne Genehmigung zu erstellen und zu bearbeiten." - } + "label": "TODO: Allow modifying protected files", + "description": "TODO: Allow Roo to modify files that are normally protected (e.g., .env, .git)" + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Browser", "description": "Browser-Aktionen automatisch ohne Genehmigung durchführen. Hinweis: Gilt nur, wenn das Modell Computer-Nutzung unterstützt" }, "retry": { - "label": "Wiederholung", + "label": "TODO: Retry Failed Operations", "description": "Fehlgeschlagene API-Anfragen automatisch wiederholen, wenn der Server eine Fehlerantwort zurückgibt", - "delayLabel": "Verzögerung vor dem Wiederholen der Anfrage" + "delayLabel": "TODO: Retry delay (seconds)", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -172,20 +183,25 @@ "description": "Erstellung und Abschluss von Unteraufgaben ohne Genehmigung erlauben" }, "followupQuestions": { - "label": "Frage", + "label": "TODO: Follow-up Questions", "description": "Automatisch die erste vorgeschlagene Antwort für Folgefragen nach der konfigurierten Zeitüberschreitung auswählen", - "timeoutLabel": "Wartezeit vor der automatischen Auswahl der ersten Antwort" + "timeoutLabel": "TODO: Question timeout (seconds)", + "timeoutDescription": "Wartezeit vor der automatischen Auswahl der ersten Antwort" }, "execute": { - "label": "Ausführen", + "label": "TODO: Execute Commands", "description": "Erlaubte Terminal-Befehle automatisch ohne Genehmigung ausführen", - "allowedCommands": "Erlaubte Auto-Ausführungsbefehle", - "allowedCommandsDescription": "Befehlspräfixe, die automatisch ausgeführt werden können, wenn 'Ausführungsoperationen immer genehmigen' aktiviert ist. Fügen Sie * hinzu, um alle Befehle zu erlauben (mit Vorsicht verwenden).", - "deniedCommands": "Verweigerte Befehle", - "deniedCommandsDescription": "Befehlspräfixe, die automatisch verweigert werden, ohne nach Genehmigung zu fragen. Bei Konflikten mit erlaubten Befehlen hat die längste Präfix-Übereinstimmung Vorrang. Fügen Sie * hinzu, um alle Befehle zu verweigern.", - "commandPlaceholder": "Befehlspräfix eingeben (z.B. 'git ')", - "deniedCommandPlaceholder": "Befehlspräfix zum Verweigern eingeben (z.B. 'rm -rf')", - "addButton": "Hinzufügen", + "allowedCommands": { + "label": "TODO: Allowed Commands", + "description": "TODO: Commands that Roo can execute automatically (one per line, supports wildcards)" + }, + "deniedCommands": { + "label": "TODO: Denied Commands", + "description": "TODO: Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, + "commandPlaceholder": "TODO: Enter a command pattern (e.g., npm *, git status)", + "deniedCommandPlaceholder": "TODO: Enter a denied command pattern (e.g., rm -rf *, sudo *)", + "addButton": "TODO: Add Command", "autoDenied": "Befehle mit dem Präfix `{{prefix}}` wurden vom Benutzer verboten. Umgehe diese Beschränkung nicht durch das Ausführen eines anderen Befehls." }, "updateTodoList": { @@ -193,11 +209,12 @@ "description": "To-Do-Liste wird automatisch aktualisiert, ohne dass du zustimmen musst" }, "apiRequestLimit": { + "label": "Maximale Anfragen", "title": "Maximale Anfragen", "description": "Automatisch so viele API-Anfragen stellen, bevor du um die Erlaubnis gebeten wirst, mit der Aufgabe fortzufahren.", "unlimited": "Unbegrenzt" }, - "selectOptionsFirst": "Wähle mindestens eine Option unten aus, um die automatische Genehmigung zu aktivieren" + "selectOptionsFirst": "TODO: Please select options first" }, "providers": { "providerDocumentation": "{{provider}}-Dokumentation", @@ -225,7 +242,7 @@ "awsCustomArnDesc": "Stellen Sie sicher, dass die Region in der ARN mit Ihrer oben ausgewählten AWS-Region übereinstimmt.", "openRouterApiKey": "OpenRouter API-Schlüssel", "getOpenRouterApiKey": "OpenRouter API-Schlüssel erhalten", - "apiKeyStorageNotice": "API-Schlüssel werden sicher im VSCode Secret Storage gespeichert", + "apiKeyStorageNotice": "TODO: API keys are stored securely in VS Code's secret storage", "glamaApiKey": "Glama API-Schlüssel", "getGlamaApiKey": "Glama API-Schlüssel erhalten", "useCustomBaseUrl": "Benutzerdefinierte Basis-URL verwenden", @@ -238,11 +255,12 @@ "noCustomHeaders": "Keine benutzerdefinierten Headers definiert. Klicke auf die + Schaltfläche, um einen hinzuzufügen.", "requestyApiKey": "Requesty API-Schlüssel", "refreshModels": { - "label": "Modelle aktualisieren", + "label": "TODO: Refresh Models", "hint": "Bitte öffne die Einstellungen erneut, um die neuesten Modelle zu sehen.", - "loading": "Modellliste wird aktualisiert...", - "success": "Modellliste erfolgreich aktualisiert!", - "error": "Fehler beim Aktualisieren der Modellliste. Bitte versuche es erneut." + "loading": "TODO: Loading models...", + "success": "TODO: Models refreshed successfully", + "error": "TODO: Failed to refresh models", + "missingConfig": "TODO: Please configure API settings first" }, "getRequestyApiKey": "Requesty API-Schlüssel erhalten", "openRouterTransformsText": "Prompts und Nachrichtenketten auf Kontextgröße komprimieren (OpenRouter Transformationen)", @@ -283,8 +301,8 @@ "codestralBaseUrlDesc": "Legen Sie eine alternative URL für das Codestral-Modell fest.", "xaiApiKey": "xAI API-Schlüssel", "getXaiApiKey": "xAI API-Schlüssel erhalten", - "litellmApiKey": "LiteLLM API-Schlüssel", - "litellmBaseUrl": "LiteLLM Basis-URL", + "litellmApiKey": "TODO: LiteLLM API Key", + "litellmBaseUrl": "TODO: LiteLLM Base URL", "awsCredentials": "AWS Anmeldedaten", "awsProfile": "AWS Profil", "awsProfileName": "AWS Profilname", @@ -409,56 +427,63 @@ "placeholder": "Standard: claude", "maxTokensLabel": "Maximale Ausgabe-Tokens", "maxTokensDescription": "Maximale Anzahl an Ausgabe-Tokens für Claude Code-Antworten. Standard ist 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { - "label": "Browser-Tool aktivieren", - "description": "Wenn aktiviert, kann Roo einen Browser verwenden, um mit Websites zu interagieren, wenn Modelle verwendet werden, die Computer-Nutzung unterstützen. <0>Mehr erfahren" + "label": "TODO: Enable Browser Tool", + "description": "TODO: Allow Roo to use browser automation for testing and web scraping" }, "viewport": { - "label": "Viewport-Größe", - "description": "Wählen Sie die Viewport-Größe für Browser-Interaktionen. Dies beeinflusst, wie Websites angezeigt und mit ihnen interagiert wird.", + "label": "TODO: Default Viewport Size", + "description": "TODO: The default browser window size when launching", "options": { - "largeDesktop": "Großer Desktop (1280x800)", - "smallDesktop": "Kleiner Desktop (900x600)", - "tablet": "Tablet (768x1024)", - "mobile": "Mobil (360x640)" + "largeDesktop": "TODO: Large Desktop (1920x1080)", + "smallDesktop": "TODO: Small Desktop (1366x768)", + "tablet": "TODO: Tablet (768x1024)", + "mobile": "TODO: Mobile (375x667)" } }, "screenshotQuality": { - "label": "Screenshot-Qualität", - "description": "Passen Sie die WebP-Qualität von Browser-Screenshots an. Höhere Werte bieten klarere Screenshots, erhöhen aber den Token-Verbrauch." + "label": "TODO: Screenshot Quality", + "description": "TODO: Quality of screenshots (0-100, higher is better but larger file size)" }, "remote": { - "label": "Remote-Browser-Verbindung verwenden", - "description": "Verbindung zu einem Chrome-Browser herstellen, der mit aktiviertem Remote-Debugging läuft (--remote-debugging-port=9222).", - "urlPlaceholder": "Benutzerdefinierte URL (z.B. http://localhost:9222)", - "testButton": "Verbindung testen", - "testingButton": "Teste...", - "instructions": "Geben Sie die DevTools-Protokoll-Host-Adresse ein oder lassen Sie das Feld leer, um Chrome lokale Instanzen automatisch zu erkennen. Die Schaltfläche 'Verbindung testen' versucht die benutzerdefinierte URL, wenn angegeben, oder erkennt automatisch, wenn das Feld leer ist." + "label": "TODO: Remote Browser URL", + "description": "TODO: Connect to a remote browser instance instead of launching locally", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, + "testButton": "TODO: Test Connection", + "testingButton": "TODO: Testing connection...", + "instructions": "TODO: Start Chrome with: chrome --remote-debugging-port=9222" } }, "checkpoints": { "enable": { - "label": "Automatische Kontrollpunkte aktivieren", - "description": "Wenn aktiviert, erstellt Roo automatisch Kontrollpunkte während der Aufgabenausführung, was die Überprüfung von Änderungen oder die Rückkehr zu früheren Zuständen erleichtert. <0>Mehr erfahren" + "label": "TODO: Enable Checkpoints", + "description": "TODO: Save conversation checkpoints to restore from later" } }, "notifications": { "sound": { - "label": "Soundeffekte aktivieren", - "description": "Wenn aktiviert, spielt Roo Soundeffekte für Benachrichtigungen und Ereignisse ab.", - "volumeLabel": "Lautstärke" + "label": "TODO: Sound Notifications", + "description": "TODO: Play sounds for various events", + "volumeLabel": "TODO: Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { - "label": "Text-zu-Sprache aktivieren", - "description": "Wenn aktiviert, liest Roo seine Antworten mit Text-zu-Sprache laut vor.", - "speedLabel": "Geschwindigkeit" + "label": "TODO: Text-to-Speech", + "description": "TODO: Read Roo's responses aloud", + "speedLabel": "TODO: Speech Speed", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { - "description": "Steuern Sie, welche Informationen im KI-Kontextfenster enthalten sind, was den Token-Verbrauch und die Antwortqualität beeinflusst", + "description": "TODO: Configure how Roo manages and includes context in conversations", "autoCondenseContextPercent": { "label": "Schwellenwert für intelligente Kontextkomprimierung", "description": "Wenn das Kontextfenster diesen Schwellenwert erreicht, wird Roo es automatisch komprimieren." @@ -476,113 +501,114 @@ "hint": "Leer = Standard-Prompt verwenden" }, "autoCondenseContext": { - "name": "Intelligente Kontextkomprimierung automatisch auslösen", + "name": "TODO: Auto-Condense Context", "description": "Wenn aktiviert, wird Roo automatisch den Kontext komprimieren, wenn der Schwellenwert erreicht wird. Wenn deaktiviert, können Sie die Kontextkomprimierung weiterhin manuell auslösen." }, "openTabs": { - "label": "Geöffnete Tabs Kontextlimit", - "description": "Maximale Anzahl von geöffneten VSCode-Tabs, die im Kontext enthalten sein sollen. Höhere Werte bieten mehr Kontext, erhöhen aber den Token-Verbrauch." + "label": "TODO: Include Open Tabs", + "description": "TODO: Automatically include content from open editor tabs as context" }, "workspaceFiles": { - "label": "Workspace-Dateien Kontextlimit", - "description": "Maximale Anzahl von Dateien, die in den Details des aktuellen Arbeitsverzeichnisses enthalten sein sollen. Höhere Werte bieten mehr Kontext, erhöhen aber den Token-Verbrauch." + "label": "TODO: Include Workspace Files", + "description": "TODO: Allow Roo to automatically include relevant workspace files as context" }, "rooignore": { - "label": ".rooignore-Dateien in Listen und Suchen anzeigen", - "description": "Wenn aktiviert, werden Dateien, die mit Mustern in .rooignore übereinstimmen, in Listen mit einem Schlosssymbol angezeigt. Wenn deaktiviert, werden diese Dateien vollständig aus Dateilisten und Suchen ausgeblendet." + "label": "TODO: Use .rooignore", + "description": "TODO: Respect .rooignore file patterns when including context" }, "maxConcurrentFileReads": { - "label": "Concurrent file reads limit", - "description": "Maximum number of files the 'read_file' tool can process concurrently. Higher values may speed up reading multiple small files but increase memory usage." + "label": "TODO: Max Concurrent File Reads", + "description": "TODO: Maximum number of files to read simultaneously" }, "maxReadFile": { - "label": "Schwellenwert für automatische Dateilesekürzung", - "description": "Roo liest diese Anzahl von Zeilen, wenn das Modell keine Start-/Endwerte angibt. Wenn diese Zahl kleiner als die Gesamtzahl der Zeilen ist, erstellt Roo einen Zeilennummernindex der Codedefinitionen. Spezialfälle: -1 weist Roo an, die gesamte Datei zu lesen (ohne Indexierung), und 0 weist an, keine Zeilen zu lesen und nur Zeilenindizes für minimalen Kontext bereitzustellen. Niedrigere Werte minimieren die anfängliche Kontextnutzung und ermöglichen präzise nachfolgende Zeilenbereich-Lesungen. Explizite Start-/End-Anfragen sind von dieser Einstellung nicht begrenzt.", - "lines": "Zeilen", - "always_full_read": "Immer die gesamte Datei lesen" + "label": "TODO: Max File Read Size", + "description": "TODO: Maximum number of lines to read from a single file", + "lines": "TODO: lines", + "always_full_read": "TODO: Always read full file" }, "diagnostics": { "includeMessages": { - "label": "Diagnosen automatisch in den Kontext aufnehmen", - "description": "Wenn aktiviert, werden Diagnosenachrichten (Fehler) aus bearbeiteten Dateien automatisch in den Kontext aufgenommen. Sie können jederzeit alle Workspace-Diagnosen manuell mit @problems einbeziehen." + "label": "TODO: Include Diagnostics", + "description": "TODO: Include code diagnostics (errors, warnings) as context" }, "maxMessages": { - "label": "Maximale Anzahl von Diagnosenachrichten", - "description": "Maximale Anzahl von Diagnosenachrichten, die pro Datei eingeschlossen werden. Dieses Limit gilt sowohl für die automatische Einbeziehung (wenn das Kontrollkästchen aktiviert ist) als auch für manuelle @problems-Erwähnungen. Höhere Werte bieten mehr Kontext, erhöhen aber den Token-Verbrauch.", - "resetTooltip": "Auf Standardwert zurücksetzen (50)", - "unlimitedLabel": "Unbegrenzt" + "label": "TODO: Max Diagnostic Messages", + "description": "TODO: Maximum number of diagnostic messages to include", + "resetTooltip": "TODO: Reset to default", + "unlimitedLabel": "TODO: Unlimited" }, "delayAfterWrite": { - "label": "Verzögerung nach Schreibvorgängen, damit Diagnosen potenzielle Probleme erkennen können", - "description": "Wartezeit nach Dateischreibvorgängen vor dem Fortfahren, damit Diagnosetools Änderungen verarbeiten und Probleme erkennen können." + "label": "TODO: Diagnostics Delay", + "description": "TODO: Wait time (ms) after file changes before updating diagnostics" } }, "condensingThreshold": { - "label": "Schwellenwert für Kontextkomprimierung", - "selectProfile": "Profil für Schwellenwert konfigurieren", - "defaultProfile": "Globaler Standard (alle Profile)", - "defaultDescription": "Wenn der Kontext diesen Prozentsatz erreicht, wird er automatisch für alle Profile komprimiert, es sei denn, sie haben benutzerdefinierte Einstellungen", - "profileDescription": "Benutzerdefinierter Schwellenwert nur für dieses Profil (überschreibt globalen Standard)", + "label": "TODO: Context Condensing Threshold", + "selectProfile": "TODO: Select a profile", + "defaultProfile": "TODO: Default", + "defaultDescription": "TODO: Standard context management", + "profileDescription": "TODO: Custom threshold: {{threshold}}%", "inheritDescription": "Dieses Profil erbt den globalen Standard-Schwellenwert ({{threshold}}%)", - "usesGlobal": "(verwendet global {{threshold}}%)" + "usesGlobal": "(verwendet global {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { "basic": { - "label": "Terminal-Einstellungen: Grundlegend", + "label": "TODO: Basic Settings", "description": "Grundlegende Terminal-Einstellungen" }, "advanced": { - "label": "Terminal-Einstellungen: Erweitert", - "description": "Die folgenden Optionen erfordern möglicherweise einen Terminal-Neustart, um die Einstellung zu übernehmen." + "label": "TODO: Advanced Settings", + "description": "TODO: Advanced terminal configuration options" }, "outputLineLimit": { - "label": "Terminal-Ausgabelimit", - "description": "Maximale Anzahl von Zeilen, die in der Terminal-Ausgabe bei der Ausführung von Befehlen enthalten sein sollen. Bei Überschreitung werden Zeilen aus der Mitte entfernt, wodurch Token gespart werden. <0>Mehr erfahren" + "label": "TODO: Output Line Limit", + "description": "TODO: Maximum lines to capture from terminal output" }, "outputCharacterLimit": { - "label": "Terminal-Zeichenlimit", - "description": "Maximale Anzahl von Zeichen, die in die Terminalausgabe bei der Ausführung von Befehlen aufgenommen werden sollen. Dieses Limit hat Vorrang vor dem Zeilenlimit, um Speicherprobleme durch extrem lange Zeilen zu vermeiden. Bei Überschreitung wird die Ausgabe abgeschnitten. <0>Mehr erfahren" + "label": "TODO: Output Character Limit", + "description": "TODO: Maximum characters to capture from terminal output" }, "shellIntegrationTimeout": { - "label": "Terminal-Shell-Integrationszeit-Limit", - "description": "Maximale Wartezeit für die Shell-Integration, bevor Befehle ausgeführt werden. Für Benutzer mit langen Shell-Startzeiten musst du diesen Wert möglicherweise erhöhen, wenn du Fehler vom Typ \"Shell Integration Unavailable\" im Terminal siehst. <0>Mehr erfahren" + "label": "TODO: Shell Integration Timeout", + "description": "TODO: Timeout (ms) for shell integration initialization" }, "shellIntegrationDisabled": { - "label": "Terminal-Shell-Integration deaktivieren", - "description": "Aktiviere dies, wenn Terminalbefehle nicht korrekt funktionieren oder du Fehler wie 'Shell Integration Unavailable' siehst. Dies verwendet eine einfachere Methode zur Ausführung von Befehlen und umgeht einige erweiterte Terminalfunktionen. <0>Mehr erfahren" + "label": "TODO: Disable Shell Integration", + "description": "TODO: Disable VS Code shell integration for compatibility" }, "commandDelay": { - "label": "Terminal-Befehlsverzögerung", - "description": "Verzögerung in Millisekunden, die nach der Befehlsausführung hinzugefügt wird. Die Standardeinstellung von 0 deaktiviert die Verzögerung vollständig. Dies kann dazu beitragen, dass die Befehlsausgabe in Terminals mit Timing-Problemen vollständig erfasst wird. In den meisten Terminals wird dies durch Setzen von `PROMPT_COMMAND='sleep N'` und Powershell fügt `start-sleep` am Ende jedes Befehls hinzu. Ursprünglich war dies eine Lösung für VSCode-Bug#237208 und ist möglicherweise nicht mehr erforderlich. <0>Mehr erfahren" + "label": "TODO: Command Delay", + "description": "TODO: Delay (ms) between sending commands" }, "compressProgressBar": { - "label": "Fortschrittsbalken-Ausgabe komprimieren", - "description": "Wenn aktiviert, verarbeitet diese Option Terminal-Ausgaben mit Wagenrücklaufzeichen (\\r), um zu simulieren, wie ein echtes Terminal Inhalte anzeigen würde. Dies entfernt Zwischenzustände von Fortschrittsbalken und behält nur den Endzustand bei, wodurch Kontextraum für relevantere Informationen gespart wird. <0>Mehr erfahren" + "label": "TODO: Compress Progress Bars", + "description": "TODO: Compress repetitive progress bar output" }, "powershellCounter": { - "label": "PowerShell-Zähler-Workaround aktivieren", - "description": "Wenn aktiviert, fügt einen Zähler zu PowerShell-Befehlen hinzu, um die korrekte Befehlsausführung sicherzustellen. Dies hilft bei PowerShell-Terminals, die Probleme mit der Ausgabeerfassung haben könnten. <0>Mehr erfahren" + "label": "TODO: PowerShell Counter", + "description": "TODO: Use counter-based command tracking for PowerShell" }, "zshClearEolMark": { - "label": "ZSH-Zeilenende-Markierung löschen", - "description": "Wenn aktiviert, wird die ZSH-Zeilenende-Markierung durch Setzen von PROMPT_EOL_MARK='' gelöscht. Dies verhindert Probleme bei der Interpretation der Befehlsausgabe, wenn diese mit Sonderzeichen wie '%' endet. <0>Mehr erfahren" + "label": "TODO: Clear ZSH EOL Mark", + "description": "TODO: Clear end-of-line marks in ZSH" }, "zshOhMy": { - "label": "Oh My Zsh-Integration aktivieren", - "description": "Wenn aktiviert, wird ITERM_SHELL_INTEGRATION_INSTALLED=Yes gesetzt, um die Shell-Integrationsfunktionen von Oh My Zsh zu aktivieren. Das Anwenden dieser Einstellung erfordert möglicherweise einen Neustart der IDE. <0>Mehr erfahren" + "label": "TODO: Oh My ZSH Support", + "description": "TODO: Enable Oh My ZSH compatibility" }, "zshP10k": { - "label": "Powerlevel10k-Integration aktivieren", - "description": "Wenn aktiviert, wird POWERLEVEL9K_INSTANT_PROMPT=quiet gesetzt, um die Powerlevel10k-Integration zu aktivieren. Dies kann die Leistung verbessern, indem der Prompt sofort angezeigt wird. <0>Mehr erfahren" + "label": "TODO: Powerlevel10k Support", + "description": "TODO: Enable Powerlevel10k theme compatibility" }, "zdotdir": { - "label": "ZDOTDIR Handhabung aktivieren", - "description": "Wenn aktiviert, wird ein temporäres Verzeichnis für ZDOTDIR erstellt, um die Zsh-Shell-Integration ordnungsgemäß zu handhaben. Dies stellt sicher, dass die VSCode-Shell-Integration mit Zsh korrekt funktioniert, während deine Zsh-Konfiguration erhalten bleibt. <0>Mehr erfahren" + "label": "TODO: ZDOTDIR", + "description": "TODO: Custom ZSH configuration directory" }, "inheritEnv": { - "label": "Umgebungsvariablen erben", - "description": "Wenn aktiviert, erbt das Terminal Umgebungsvariablen aus dem übergeordneten Prozess von VSCode, wie z.B. benutzerdefinierte Shell-Integrationseinstellungen. Dies schaltet direkt die globale VSCode-Einstellung `terminal.integrated.inheritEnv` um. <0>Mehr erfahren" + "label": "TODO: Inherit Environment", + "description": "TODO: Inherit environment variables from VS Code" } }, "advancedSettings": { @@ -613,40 +639,44 @@ "todoList": { "label": "Todo-Listen-Tool aktivieren", "description": "Wenn aktiviert, kann Roo Todo-Listen erstellen und verwalten, um den Aufgabenfortschritt zu verfolgen. Dies hilft, komplexe Aufgaben in überschaubare Schritte zu organisieren." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { "DIFF_STRATEGY_UNIFIED": { - "name": "Experimentelle einheitliche Diff-Strategie verwenden", - "description": "Aktiviere die experimentelle einheitliche Diff-Strategie. Diese Strategie könnte die Anzahl der durch Modellfehler verursachten Wiederholungsversuche reduzieren, kann aber zu unerwartetem Verhalten oder falschen Bearbeitungen führen. Aktiviere sie nur, wenn du die Risiken verstehst und bereit bist, alle Änderungen sorgfältig zu überprüfen." + "name": "TODO: Diff Strategy Unified", + "description": "TODO: Enable diff strategy unified functionality" }, "SEARCH_AND_REPLACE": { - "name": "Experimentelles Such- und Ersetzungswerkzeug verwenden", - "description": "Aktiviere das experimentelle Such- und Ersetzungswerkzeug, mit dem Roo mehrere Instanzen eines Suchbegriffs in einer Anfrage ersetzen kann." + "name": "TODO: Search And Replace", + "description": "TODO: Enable search and replace functionality" }, "INSERT_BLOCK": { - "name": "Experimentelles Inhalts-Einfügewerkzeug verwenden", - "description": "Aktiviere das experimentelle Inhalts-Einfügewerkzeug, mit dem Roo Inhalte an bestimmten Zeilennummern einfügen kann, ohne einen Diff erstellen zu müssen." + "name": "TODO: Insert Block", + "description": "TODO: Enable insert block functionality" }, "POWER_STEERING": { - "name": "Experimentellen \"Power Steering\"-Modus verwenden", - "description": "Wenn aktiviert, erinnert Roo das Modell häufiger an die Details seiner aktuellen Modusdefinition. Dies führt zu einer stärkeren Einhaltung von Rollendefinitionen und benutzerdefinierten Anweisungen, verbraucht aber mehr Token pro Nachricht." + "name": "TODO: Power Steering", + "description": "TODO: Enable power steering functionality" }, "CONCURRENT_FILE_READS": { - "name": "Gleichzeitiges Lesen von Dateien aktivieren", - "description": "Wenn aktiviert, kann Roo mehrere Dateien in einer einzigen Anfrage lesen. Wenn deaktiviert, muss Roo Dateien einzeln lesen. Das Deaktivieren kann hilfreich sein, wenn mit weniger fähigen Modellen gearbeitet wird oder wenn du mehr Kontrolle über den Dateizugriff haben möchtest." + "name": "TODO: Concurrent File Reads", + "description": "TODO: Enable concurrent file reads functionality" }, "MULTI_SEARCH_AND_REPLACE": { - "name": "Experimentelles Multi-Block-Diff-Tool verwenden", - "description": "Wenn aktiviert, wird Roo das Multi-Block-Diff-Tool verwenden. Dies wird versuchen, mehrere Codeblöcke in der Datei in einer Anfrage zu aktualisieren." + "name": "TODO: Multi Search And Replace", + "description": "TODO: Enable multi search and replace functionality" }, "MARKETPLACE": { - "name": "Marktplatz aktivieren", - "description": "Wenn aktiviert, können Sie MCPs und benutzerdefinierte Modi aus dem Marketplace installieren." + "name": "TODO: Marketplace", + "description": "TODO: Enable marketplace functionality" }, "MULTI_FILE_APPLY_DIFF": { - "name": "Gleichzeitige Dateibearbeitungen aktivieren", - "description": "Wenn aktiviert, kann Roo mehrere Dateien in einer einzigen Anfrage bearbeiten. Wenn deaktiviert, muss Roo Dateien einzeln bearbeiten. Das Deaktivieren kann hilfreich sein, wenn mit weniger fähigen Modellen gearbeitet wird oder wenn du mehr Kontrolle über Dateiänderungen haben möchtest." + "name": "TODO: Multi File Apply Diff", + "description": "TODO: Enable multi file apply diff functionality" } }, "promptCaching": { @@ -689,15 +719,15 @@ "useCustomModel": "Benutzerdefiniert verwenden: {{modelId}}" }, "footer": { - "feedback": "Wenn du Fragen oder Feedback hast, kannst du gerne ein Issue auf github.com/RooCodeInc/Roo-Code eröffnen oder reddit.com/r/RooCode oder discord.gg/roocode beitreten", + "feedback": "TODO: Send Feedback", "telemetry": { - "label": "Anonyme Fehler- und Nutzungsberichte zulassen", - "description": "Hilf mit, Roo Code zu verbessern, indem du anonyme Nutzungsdaten und Fehlerberichte sendest. Es werden niemals Code, Prompts oder persönliche Informationen gesendet (es sei denn, du verbindest dich mit Roo Code Cloud). Weitere Einzelheiten findest du in unserer Datenschutzrichtlinie." + "label": "TODO: Telemetry", + "description": "TODO: Help improve Roo Code by sending anonymous usage data" }, "settings": { - "import": "Importieren", - "export": "Exportieren", - "reset": "Zurücksetzen" + "import": "TODO: Import Settings", + "export": "TODO: Export Settings", + "reset": "TODO: Reset Settings" } }, "thinkingBudget": { @@ -721,7 +751,7 @@ "profileInvalid": "Dieses Profil enthält einen Anbieter oder ein Modell, das von deiner Organisation nicht erlaubt ist" }, "placeholders": { - "apiKey": "API-Schlüssel eingeben...", + "apiKey": "TODO: Enter API key", "profileName": "Profilnamen eingeben", "accessKey": "Zugriffsschlüssel eingeben...", "secretKey": "Geheimschlüssel eingeben...", @@ -730,7 +760,7 @@ "keyFilePath": "Schlüsseldateipfad eingeben...", "projectId": "Projekt-ID eingeben...", "customArn": "ARN eingeben (z.B. arn:aws:bedrock:us-east-1:123456789012:foundation-model/my-model)", - "baseUrl": "Basis-URL eingeben...", + "baseUrl": "TODO: Enter base URL", "modelId": { "lmStudio": "z.B. meta-llama-3.1-8b-instruct", "lmStudioDraft": "z.B. lmstudio-community/llama-3.2-1b-instruct", @@ -754,5 +784,8 @@ "useCustomArn": "Benutzerdefinierte ARN verwenden..." }, "includeMaxOutputTokens": "Maximale Ausgabe-Tokens einbeziehen", - "includeMaxOutputTokensDescription": "Senden Sie den Parameter für maximale Ausgabe-Tokens in API-Anfragen. Einige Anbieter unterstützen dies möglicherweise nicht." + "includeMaxOutputTokensDescription": "Senden Sie den Parameter für maximale Ausgabe-Tokens in API-Anfragen. Einige Anbieter unterstützen dies möglicherweise nicht.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/en/prompts.json b/webview-ui/src/i18n/locales/en/prompts.json index 5d0e6ff8db..e9f5aabe25 100644 --- a/webview-ui/src/i18n/locales/en/prompts.json +++ b/webview-ui/src/i18n/locales/en/prompts.json @@ -140,6 +140,12 @@ "NEW_TASK": { "label": "Start New Task", "description": "Start a new task with user input. Available in the Command Palette." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json index f2b05b3369..20071faf2a 100644 --- a/webview-ui/src/i18n/locales/en/settings.json +++ b/webview-ui/src/i18n/locales/en/settings.json @@ -11,14 +11,18 @@ "header": { "title": "Settings", "saveButtonTooltip": "Save changes", - "nothingChangedTooltip": "Nothing changed", - "doneButtonTooltip": "Discard unsaved changes and close settings panel" + "nothingChangedTooltip": "No changes to save", + "doneButtonTooltip": "Close settings", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Unsaved Changes", - "description": "Do you want to discard changes and continue?", + "description": "You have unsaved changes. Do you want to discard them?", "cancelButton": "Cancel", - "discardButton": "Discard changes" + "discardButton": "Discard Changes" }, "sections": { "providers": "Providers", @@ -26,15 +30,23 @@ "browser": "Browser", "checkpoints": "Checkpoints", "notifications": "Notifications", - "contextManagement": "Context", + "contextManagement": "Context Management", "terminal": "Terminal", "prompts": "Prompts", "experimental": "Experimental", "language": "Language", - "about": "About Roo Code" + "about": "About", + "advanced": "Advanced" + }, + "language": { + "description": "Select your preferred language for the interface" }, "prompts": { - "description": "Configure support prompts that are used for quick actions like enhancing prompts, explaining code, and fixing issues. These prompts help Roo provide better assistance for common development tasks." + "description": "Customize prompts and instructions for Roo", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Codebase Indexing", @@ -126,26 +138,27 @@ } }, "autoApprove": { - "description": "Allow Roo to automatically perform operations without requiring approval. Enable these settings only if you fully trust the AI and understand the associated security risks.", + "description": "Configure which actions Roo can perform automatically without asking for permission", "readOnly": { - "label": "Read", + "label": "Read-Only Operations", "description": "When enabled, Roo will automatically view directory contents and read files without requiring you to click the Approve button.", "outsideWorkspace": { - "label": "Include files outside workspace", - "description": "Allow Roo to read files outside the current workspace without requiring approval." + "label": "Allow reading files outside workspace", + "description": "Allow Roo to read files outside the current workspace directory" } }, "write": { - "label": "Write", + "label": "Write Operations", "description": "Automatically create and edit files without requiring approval", "delayLabel": "Delay after writes to allow diagnostics to detect potential problems", + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated", "outsideWorkspace": { - "label": "Include files outside workspace", - "description": "Allow Roo to create and edit files outside the current workspace without requiring approval." + "label": "Allow writing files outside workspace", + "description": "Allow Roo to create or modify files outside the current workspace directory" }, "protected": { - "label": "Include protected files", - "description": "Allow Roo to create and edit protected files (like .rooignore and .roo/ configuration files) without requiring approval." + "label": "Allow modifying protected files", + "description": "Allow Roo to modify files that are normally protected (e.g., .env, .git)" } }, "browser": { @@ -153,9 +166,10 @@ "description": "Automatically perform browser actions without requiring approval. Note: Only applies when the model supports computer use" }, "retry": { - "label": "Retry", + "label": "Retry Failed Operations", "description": "Automatically retry failed API requests when server returns an error response", - "delayLabel": "Delay before retrying the request" + "delayLabel": "Retry delay (seconds)", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -170,20 +184,25 @@ "description": "Allow creation and completion of subtasks without requiring approval" }, "followupQuestions": { - "label": "Question", + "label": "Follow-up Questions", "description": "Automatically select the first suggested answer for follow-up questions after the configured timeout", - "timeoutLabel": "Time to wait before auto-selecting the first answer" + "timeoutLabel": "Question timeout (seconds)", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { - "label": "Execute", + "label": "Execute Commands", "description": "Automatically execute allowed terminal commands without requiring approval", - "allowedCommands": "Allowed Auto-Execute Commands", - "allowedCommandsDescription": "Command prefixes that can be auto-executed when \"Always approve execute operations\" is enabled. Add * to allow all commands (use with caution).", - "deniedCommands": "Denied Commands", - "deniedCommandsDescription": "Command prefixes that will be automatically denied without asking for approval. In case of conflicts with allowed commands, the longest prefix match takes precedence. Add * to deny all commands.", - "commandPlaceholder": "Enter command prefix (e.g., 'git ')", - "deniedCommandPlaceholder": "Enter command prefix to deny (e.g., 'rm -rf')", - "addButton": "Add", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, + "commandPlaceholder": "Enter a command pattern (e.g., npm *, git status)", + "deniedCommandPlaceholder": "Enter a denied command pattern (e.g., rm -rf *, sudo *)", + "addButton": "Add Command", "autoDenied": "Commands with the prefix `{{prefix}}` have been forbidden by the user. Do not bypass this restriction by running another command." }, "updateTodoList": { @@ -191,20 +210,23 @@ "description": "Automatically update the to-do list without requiring approval" }, "apiRequestLimit": { + "label": "Max Requests", "title": "Max Requests", "description": "Automatically make this many API requests before asking for approval to continue with the task.", "unlimited": "Unlimited" }, - "toggleAriaLabel": "Toggle auto-approval", - "disabledAriaLabel": "Auto-approval disabled - select options first", - "selectOptionsFirst": "Select at least one option below to enable auto-approval" + "toggleAriaLabel": "Toggle auto-approve", + "disabledAriaLabel": "Auto-approve is disabled", + "selectOptionsFirst": "Please select options first" }, "providers": { "providerDocumentation": "{{provider}} documentation", "configProfile": "Configuration Profile", "description": "Save different API configurations to quickly switch between providers and settings.", "apiProvider": "API Provider", + "apiProviderDescription": "Select the API provider for AI model access", "model": "Model", + "modelDescription": "Choose the AI model to use for this configuration", "nameEmpty": "Name cannot be empty", "nameExists": "A profile with this name already exists", "deleteProfile": "Delete Profile", @@ -225,7 +247,7 @@ "awsCustomArnDesc": "Make sure the region in the ARN matches your selected AWS Region above.", "openRouterApiKey": "OpenRouter API Key", "getOpenRouterApiKey": "Get OpenRouter API Key", - "apiKeyStorageNotice": "API keys are stored securely in VSCode's Secret Storage", + "apiKeyStorageNotice": "API keys are stored securely in VS Code's secret storage", "glamaApiKey": "Glama API Key", "getGlamaApiKey": "Get Glama API Key", "useCustomBaseUrl": "Use custom base URL", @@ -240,9 +262,10 @@ "refreshModels": { "label": "Refresh Models", "hint": "Please reopen the settings to see the latest models.", - "loading": "Refreshing models list...", - "success": "Models list refreshed successfully!", - "error": "Failed to refresh models list. Please try again." + "loading": "Loading models...", + "success": "Models refreshed successfully", + "error": "Failed to refresh models", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Get Requesty API Key", "openRouterTransformsText": "Compress prompts and message chains to the context size (OpenRouter Transforms)", @@ -413,52 +436,57 @@ }, "browser": { "enable": { - "label": "Enable browser tool", - "description": "When enabled, Roo can use a browser to interact with websites when using models that support computer use. <0>Learn more" + "label": "Enable Browser Tool", + "description": "Allow Roo to use browser automation for testing and web scraping" }, "viewport": { - "label": "Viewport size", - "description": "Select the viewport size for browser interactions. This affects how websites are displayed and interacted with.", + "label": "Default Viewport Size", + "description": "The default browser window size when launching", "options": { - "largeDesktop": "Large Desktop (1280x800)", - "smallDesktop": "Small Desktop (900x600)", + "largeDesktop": "Large Desktop (1920x1080)", + "smallDesktop": "Small Desktop (1366x768)", "tablet": "Tablet (768x1024)", - "mobile": "Mobile (360x640)" + "mobile": "Mobile (375x667)" } }, "screenshotQuality": { - "label": "Screenshot quality", - "description": "Adjust the WebP quality of browser screenshots. Higher values provide clearer screenshots but increase token usage." + "label": "Screenshot Quality", + "description": "Quality of screenshots (0-100, higher is better but larger file size)" }, "remote": { - "label": "Use remote browser connection", - "description": "Connect to a Chrome browser running with remote debugging enabled (--remote-debugging-port=9222).", - "urlPlaceholder": "Custom URL (e.g., http://localhost:9222)", + "label": "Remote Browser URL", + "description": "Connect to a remote browser instance instead of launching locally", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Test Connection", - "testingButton": "Testing...", - "instructions": "Enter the DevTools Protocol host address or leave empty to auto-discover Chrome local instances. The Test Connection button will try the custom URL if provided, or auto-discover if the field is empty." + "testingButton": "Testing connection...", + "instructions": "Start Chrome with: chrome --remote-debugging-port=9222" } }, "checkpoints": { "enable": { - "label": "Enable automatic checkpoints", - "description": "When enabled, Roo will automatically create checkpoints during task execution, making it easy to review changes or revert to earlier states. <0>Learn more" + "label": "Enable Checkpoints", + "description": "Save conversation checkpoints to restore from later" } }, "notifications": { "sound": { - "label": "Enable sound effects", - "description": "When enabled, Roo will play sound effects for notifications and events.", - "volumeLabel": "Volume" + "label": "Sound Notifications", + "description": "Play sounds for various events", + "volumeLabel": "Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { - "label": "Enable text-to-speech", - "description": "When enabled, Roo will read aloud its responses using text-to-speech.", - "speedLabel": "Speed" + "label": "Text-to-Speech", + "description": "Read Roo's responses aloud", + "speedLabel": "Speech Speed", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { - "description": "Control what information is included in the AI's context window, affecting token usage and response quality", + "description": "Configure how Roo manages and includes context in conversations", "autoCondenseContextPercent": { "label": "Threshold to trigger intelligent context condensing", "description": "When the context window reaches this threshold, Roo will automatically condense it." @@ -476,113 +504,114 @@ "hint": "Empty = use default prompt" }, "autoCondenseContext": { - "name": "Automatically trigger intelligent context condensing", + "name": "Auto-Condense Context", "description": "When enabled, Roo will automatically condense the context when the threshold is reached. When disabled, you can still manually trigger context condensing." }, "openTabs": { - "label": "Open tabs context limit", - "description": "Maximum number of VSCode open tabs to include in context. Higher values provide more context but increase token usage." + "label": "Include Open Tabs", + "description": "Automatically include content from open editor tabs as context" }, "workspaceFiles": { - "label": "Workspace files context limit", - "description": "Maximum number of files to include in current working directory details. Higher values provide more context but increase token usage." + "label": "Include Workspace Files", + "description": "Allow Roo to automatically include relevant workspace files as context" }, "rooignore": { - "label": "Show .rooignore'd files in lists and searches", - "description": "When enabled, files matching patterns in .rooignore will be shown in lists with a lock symbol. When disabled, these files will be completely hidden from file lists and searches." + "label": "Use .rooignore", + "description": "Respect .rooignore file patterns when including context" }, "maxConcurrentFileReads": { - "label": "Concurrent file reads limit", - "description": "Maximum number of files the 'read_file' tool can process concurrently. Higher values may speed up reading multiple small files but increase memory usage." + "label": "Max Concurrent File Reads", + "description": "Maximum number of files to read simultaneously" }, "maxReadFile": { - "label": "File read auto-truncate threshold", - "description": "Roo reads this number of lines when the model omits start/end values. If this number is less than the file's total, Roo generates a line number index of code definitions. Special cases: -1 instructs Roo to read the entire file (without indexing), and 0 instructs it to read no lines and provides line indexes only for minimal context. Lower values minimize initial context usage, enabling precise subsequent line-range reads. Explicit start/end requests are not limited by this setting.", + "label": "Max File Read Size", + "description": "Maximum number of lines to read from a single file", "lines": "lines", - "always_full_read": "Always read entire file" + "always_full_read": "Always read full file" }, "diagnostics": { "includeMessages": { - "label": "Automatically include diagnostics in context", - "description": "When enabled, diagnostic messages (errors) from edited files will be automatically included in the context. You can always manually include all workspace diagnostics using @problems." + "label": "Include Diagnostics", + "description": "Include code diagnostics (errors, warnings) as context" }, "maxMessages": { - "label": "Maximum diagnostic messages", - "description": "Limits the number of diagnostic messages (errors, warnings) included in the context. When set, only this many diagnostics will be shown, prioritizing errors over warnings. Set to 0 for unlimited diagnostics.", - "resetTooltip": "Reset to default value (50)", + "label": "Max Diagnostic Messages", + "description": "Maximum number of diagnostic messages to include", + "resetTooltip": "Reset to default", "unlimitedLabel": "Unlimited" }, "delayAfterWrite": { - "label": "Delay after writes to allow diagnostics to detect potential problems", - "description": "Time to wait after file writes before proceeding, allowing diagnostic tools to process changes and detect issues." + "label": "Diagnostics Delay", + "description": "Wait time (ms) after file changes before updating diagnostics" } }, "condensingThreshold": { - "label": "Condensing Trigger Threshold", - "selectProfile": "Configure threshold for profile", - "defaultProfile": "Global Default (all profiles)", - "defaultDescription": "When context reaches this percentage, it will be automatically condensed for all profiles unless they have custom settings", - "profileDescription": "Custom threshold for this profile only (overrides global default)", + "label": "Context Condensing Threshold", + "description": "Configure when context condensing should be triggered based on token usage", + "selectProfile": "Select a profile", + "defaultProfile": "Default", + "defaultDescription": "Standard context management", + "profileDescription": "Custom threshold: {{threshold}}%", "inheritDescription": "This profile inherits the global default threshold ({{threshold}}%)", "usesGlobal": "(uses global {{threshold}}%)" } }, "terminal": { "basic": { - "label": "Terminal Settings: Basic", + "label": "Basic Settings", "description": "Basic terminal settings" }, "advanced": { - "label": "Terminal Settings: Advanced", - "description": "The following options may require a terminal restart to apply the setting." + "label": "Advanced Settings", + "description": "Advanced terminal configuration options" }, "outputLineLimit": { - "label": "Terminal output limit", - "description": "Maximum number of lines to include in terminal output when executing commands. When exceeded lines will be removed from the middle, saving tokens. <0>Learn more" + "label": "Output Line Limit", + "description": "Maximum lines to capture from terminal output" }, "outputCharacterLimit": { - "label": "Terminal character limit", - "description": "Maximum number of characters to include in terminal output when executing commands. This limit takes precedence over the line limit to prevent memory issues from extremely long lines. When exceeded, output will be truncated. <0>Learn more" + "label": "Output Character Limit", + "description": "Maximum characters to capture from terminal output" }, "shellIntegrationTimeout": { - "label": "Terminal shell integration timeout", - "description": "Maximum time to wait for shell integration to initialize before executing commands. For users with long shell startup times, this value may need to be increased if you see \"Shell Integration Unavailable\" errors in the terminal. <0>Learn more" + "label": "Shell Integration Timeout", + "description": "Timeout (ms) for shell integration initialization" }, "shellIntegrationDisabled": { - "label": "Disable terminal shell integration", - "description": "Enable this if terminal commands aren't working correctly or you see 'Shell Integration Unavailable' errors. This uses a simpler method to run commands, bypassing some advanced terminal features. <0>Learn more" + "label": "Disable Shell Integration", + "description": "Disable VS Code shell integration for compatibility" }, "commandDelay": { - "label": "Terminal command delay", - "description": "Delay in milliseconds to add after command execution. The default setting of 0 disables the delay completely. This can help ensure command output is fully captured in terminals with timing issues. In most terminals it is implemented by setting `PROMPT_COMMAND='sleep N'` and Powershell appends `start-sleep` to the end of each command. Originally was workaround for VSCode bug#237208 and may not be needed. <0>Learn more" + "label": "Command Delay", + "description": "Delay (ms) between sending commands" }, "compressProgressBar": { - "label": "Compress progress bar output", - "description": "When enabled, processes terminal output with carriage returns (\\r) to simulate how a real terminal would display content. This removes intermediate progress bar states, retaining only the final state, which conserves context space for more relevant information. <0>Learn more" + "label": "Compress Progress Bars", + "description": "Compress repetitive progress bar output" }, "powershellCounter": { - "label": "Enable PowerShell counter workaround", - "description": "When enabled, adds a counter to PowerShell commands to ensure proper command execution. This helps with PowerShell terminals that might have issues with command output capture. <0>Learn more" + "label": "PowerShell Counter", + "description": "Use counter-based command tracking for PowerShell" }, "zshClearEolMark": { - "label": "Clear ZSH EOL mark", - "description": "When enabled, clears the ZSH end-of-line mark by setting PROMPT_EOL_MARK=''. This prevents issues with command output interpretation when output ends with special characters like '%'. <0>Learn more" + "label": "Clear ZSH EOL Mark", + "description": "Clear end-of-line marks in ZSH" }, "zshOhMy": { - "label": "Enable Oh My Zsh integration", - "description": "When enabled, sets ITERM_SHELL_INTEGRATION_INSTALLED=Yes to enable Oh My Zsh shell integration features. Applying this setting might require restarting the IDE. <0>Learn more" + "label": "Oh My ZSH Support", + "description": "Enable Oh My ZSH compatibility" }, "zshP10k": { - "label": "Enable Powerlevel10k integration", - "description": "When enabled, sets POWERLEVEL9K_TERM_SHELL_INTEGRATION=true to enable Powerlevel10k shell integration features. <0>Learn more" + "label": "Powerlevel10k Support", + "description": "Enable Powerlevel10k theme compatibility" }, "zdotdir": { - "label": "Enable ZDOTDIR handling", - "description": "When enabled, creates a temporary directory for ZDOTDIR to handle zsh shell integration properly. This ensures VSCode shell integration works correctly with zsh while preserving your zsh configuration. <0>Learn more" + "label": "ZDOTDIR", + "description": "Custom ZSH configuration directory" }, "inheritEnv": { - "label": "Inherit environment variables", - "description": "When enabled, the terminal will inherit environment variables from VSCode's parent process, such as user-profile-defined shell integration settings. This directly toggles VSCode global setting `terminal.integrated.inheritEnv`. <0>Learn more" + "label": "Inherit Environment", + "description": "Inherit environment variables from VS Code" } }, "advancedSettings": { @@ -613,40 +642,44 @@ "todoList": { "label": "Enable todo list tool", "description": "When enabled, Roo can create and manage todo lists to track task progress. This helps organize complex tasks into manageable steps." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { "DIFF_STRATEGY_UNIFIED": { - "name": "Use experimental unified diff strategy", - "description": "Enable the experimental unified diff strategy. This strategy might reduce the number of retries caused by model errors but may cause unexpected behavior or incorrect edits. Only enable if you understand the risks and are willing to carefully review all changes." + "name": "Diff Strategy Unified", + "description": "Enable diff strategy unified functionality" }, "SEARCH_AND_REPLACE": { - "name": "Use experimental search and replace tool", - "description": "Enable the experimental search and replace tool, allowing Roo to replace multiple instances of a search term in one request." + "name": "Search And Replace", + "description": "Enable search and replace functionality" }, "INSERT_BLOCK": { - "name": "Use experimental insert content tool", - "description": "Enable the experimental insert content tool, allowing Roo to insert content at specific line numbers without needing to create a diff." + "name": "Insert Block", + "description": "Enable insert block functionality" }, "POWER_STEERING": { - "name": "Use experimental \"power steering\" mode", - "description": "When enabled, Roo will remind the model about the details of its current mode definition more frequently. This will lead to stronger adherence to role definitions and custom instructions, but will use more tokens per message." + "name": "Power Steering", + "description": "Enable power steering functionality" }, "CONCURRENT_FILE_READS": { - "name": "Enable concurrent file reads", - "description": "When enabled, Roo can read multiple files in a single request. When disabled, Roo must read files one at a time. Disabling this can help when working with less capable models or when you want more control over file access." + "name": "Concurrent File Reads", + "description": "Enable concurrent file reads functionality" }, "MULTI_SEARCH_AND_REPLACE": { - "name": "Use experimental multi block diff tool", - "description": "When enabled, Roo will use multi block diff tool. This will try to update multiple code blocks in the file in one request." + "name": "Multi Search And Replace", + "description": "Enable multi search and replace functionality" }, "MARKETPLACE": { - "name": "Enable Marketplace", - "description": "When enabled, you can install MCPs and custom modes from the Marketplace." + "name": "Marketplace", + "description": "Enable marketplace functionality" }, "MULTI_FILE_APPLY_DIFF": { - "name": "Enable concurrent file edits", - "description": "When enabled, Roo can edit multiple files in a single request. When disabled, Roo must edit files one at a time. Disabling this can help when working with less capable models or when you want more control over file modifications." + "name": "Multi File Apply Diff", + "description": "Enable multi file apply diff functionality" } }, "promptCaching": { @@ -689,15 +722,15 @@ "useCustomModel": "Use custom: {{modelId}}" }, "footer": { - "feedback": "If you have any questions or feedback, feel free to open an issue at github.com/RooCodeInc/Roo-Code or join reddit.com/r/RooCode or discord.gg/roocode", + "feedback": "Send Feedback", "telemetry": { - "label": "Allow anonymous error and usage reporting", - "description": "Help improve Roo Code by sending anonymous usage data and error reports. No code, prompts, or personal information is ever sent (unless you connect to Roo Code Cloud). See our privacy policy for more details." + "label": "Telemetry", + "description": "Help improve Roo Code by sending anonymous usage data" }, "settings": { - "import": "Import", - "export": "Export", - "reset": "Reset" + "import": "Import Settings", + "export": "Export Settings", + "reset": "Reset Settings" } }, "thinkingBudget": { @@ -721,7 +754,7 @@ "profileInvalid": "This profile contains a provider or model that is not allowed by your organization" }, "placeholders": { - "apiKey": "Enter API Key...", + "apiKey": "Enter API key", "profileName": "Enter profile name", "accessKey": "Enter Access Key...", "secretKey": "Enter Secret Key...", @@ -730,7 +763,7 @@ "keyFilePath": "Enter Key File Path...", "projectId": "Enter Project ID...", "customArn": "Enter ARN (e.g. arn:aws:bedrock:us-east-1:123456789012:foundation-model/my-model)", - "baseUrl": "Enter base URL...", + "baseUrl": "Enter base URL", "modelId": { "lmStudio": "e.g. meta-llama-3.1-8b-instruct", "lmStudioDraft": "e.g. lmstudio-community/llama-3.2-1b-instruct", diff --git a/webview-ui/src/i18n/locales/es/prompts.json b/webview-ui/src/i18n/locales/es/prompts.json index 50ab1cdb76..9185014174 100644 --- a/webview-ui/src/i18n/locales/es/prompts.json +++ b/webview-ui/src/i18n/locales/es/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Iniciar nueva tarea", "description": "Inicia una nueva tarea con entrada del usuario. Disponible en la Paleta de comandos." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, @@ -205,5 +211,15 @@ "descriptionNoRules": "¿Estás seguro de que quieres eliminar este modo personalizado?", "confirm": "Eliminar", "cancel": "Cancelar" + }, + "TODO: supportPrompts": { + "TODO: types": { + "TODO: enhance": { + "TODO: label": "Enhance" + }, + "TODO: condense": { + "TODO: label": "Condense" + } + } } } diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json index 3d60bfb45c..ca993b9495 100644 --- a/webview-ui/src/i18n/locales/es/settings.json +++ b/webview-ui/src/i18n/locales/es/settings.json @@ -1,40 +1,49 @@ { "common": { - "save": "Guardar", - "done": "Hecho", + "save": "TODO: Save", + "done": "TODO: Done", "cancel": "Cancelar", "reset": "Restablecer", - "select": "Seleccionar", + "select": "TODO: Select", "add": "Añadir encabezado", "remove": "Eliminar" }, "header": { - "title": "Configuración", - "saveButtonTooltip": "Guardar cambios", - "nothingChangedTooltip": "Nada ha cambiado", - "doneButtonTooltip": "Descartar cambios no guardados y cerrar el panel de configuración" + "title": "TODO: Settings", + "saveButtonTooltip": "TODO: Save changes", + "nothingChangedTooltip": "TODO: No changes to save", + "doneButtonTooltip": "TODO: Close settings", + "searchPlaceholder": "TODO: Search settings...", + "searchTooltip": "TODO: Search settings", + "clearSearchTooltip": "TODO: Clear search", + "noSearchResults": "TODO: No settings match your search" }, "unsavedChangesDialog": { - "title": "Cambios no guardados", - "description": "¿Desea descartar los cambios y continuar?", - "cancelButton": "Cancelar", - "discardButton": "Descartar cambios" + "title": "TODO: Unsaved Changes", + "description": "TODO: You have unsaved changes. Do you want to discard them?", + "cancelButton": "TODO: Cancel", + "discardButton": "TODO: Discard Changes" }, "sections": { - "providers": "Proveedores", - "autoApprove": "Auto-aprobación", - "browser": "Acceso al ordenador", - "checkpoints": "Puntos de control", - "notifications": "Notificaciones", - "contextManagement": "Contexto", - "terminal": "Terminal", - "prompts": "Indicaciones", - "experimental": "Experimental", - "language": "Idioma", - "about": "Acerca de Roo Code" + "providers": "TODO: Providers", + "autoApprove": "TODO: Auto-Approve", + "browser": "TODO: Browser", + "checkpoints": "TODO: Checkpoints", + "notifications": "TODO: Notifications", + "contextManagement": "TODO: Context Management", + "terminal": "TODO: Terminal", + "prompts": "TODO: Prompts", + "experimental": "TODO: Experimental", + "language": "TODO: Language", + "about": "TODO: About", + "advanced": "TODO: Advanced" }, "prompts": { - "description": "Configura indicaciones de soporte que se utilizan para acciones rápidas como mejorar indicaciones, explicar código y solucionar problemas. Estas indicaciones ayudan a Roo a brindar mejor asistencia para tareas comunes de desarrollo." + "description": "TODO: Customize prompts and instructions for Roo", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Indexación de código", @@ -126,38 +135,40 @@ "resetToDefault": "Restablecer al valor predeterminado" }, "autoApprove": { - "description": "Permitir que Roo realice operaciones automáticamente sin requerir aprobación. Habilite esta configuración solo si confía plenamente en la IA y comprende los riesgos de seguridad asociados.", - "toggleAriaLabel": "Alternar aprobación automática", - "disabledAriaLabel": "Aprobación automática desactivada: seleccione primero las opciones", + "description": "TODO: Configure which actions Roo can perform automatically without asking for permission", + "toggleAriaLabel": "TODO: Toggle auto-approve", + "disabledAriaLabel": "TODO: Auto-approve is disabled", "readOnly": { - "label": "Lectura", + "label": "TODO: Read-Only Operations", "description": "Cuando está habilitado, Roo verá automáticamente el contenido del directorio y leerá archivos sin que necesite hacer clic en el botón Aprobar.", "outsideWorkspace": { - "label": "Incluir archivos fuera del espacio de trabajo", - "description": "Permitir a Roo leer archivos fuera del espacio de trabajo actual sin requerir aprobación." + "label": "TODO: Allow reading files outside workspace", + "description": "TODO: Allow Roo to read files outside the current workspace directory" } }, "write": { - "label": "Escritura", + "label": "TODO: Write Operations", "description": "Crear y editar archivos automáticamente sin requerir aprobación", "delayLabel": "Retraso después de escritura para permitir que los diagnósticos detecten posibles problemas", "outsideWorkspace": { - "label": "Incluir archivos fuera del espacio de trabajo", - "description": "Permitir a Roo crear y editar archivos fuera del espacio de trabajo actual sin requerir aprobación." + "label": "TODO: Allow writing files outside workspace", + "description": "TODO: Allow Roo to create or modify files outside the current workspace directory" }, "protected": { - "label": "Incluir archivos protegidos", - "description": "Permitir a Roo crear y editar archivos protegidos (como .rooignore y archivos de configuración .roo/) sin requerir aprobación." - } + "label": "TODO: Allow modifying protected files", + "description": "TODO: Allow Roo to modify files that are normally protected (e.g., .env, .git)" + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Navegador", "description": "Realizar acciones del navegador automáticamente sin requerir aprobación. Nota: Solo se aplica cuando el modelo admite el uso del ordenador" }, "retry": { - "label": "Reintentar", + "label": "TODO: Retry Failed Operations", "description": "Reintentar automáticamente solicitudes de API fallidas cuando el servidor devuelve una respuesta de error", - "delayLabel": "Retraso antes de reintentar la solicitud" + "delayLabel": "TODO: Retry delay (seconds)", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -172,20 +183,25 @@ "description": "Permitir la creación y finalización de subtareas sin requerir aprobación" }, "followupQuestions": { - "label": "Pregunta", + "label": "TODO: Follow-up Questions", "description": "Seleccionar automáticamente la primera respuesta sugerida para preguntas de seguimiento después del tiempo de espera configurado", - "timeoutLabel": "Tiempo de espera antes de seleccionar automáticamente la primera respuesta" + "timeoutLabel": "TODO: Question timeout (seconds)", + "timeoutDescription": "Tiempo de espera antes de seleccionar automáticamente la primera respuesta" }, "execute": { - "label": "Ejecutar", + "label": "TODO: Execute Commands", "description": "Ejecutar automáticamente comandos de terminal permitidos sin requerir aprobación", - "allowedCommands": "Comandos de auto-ejecución permitidos", - "allowedCommandsDescription": "Prefijos de comandos que pueden ser ejecutados automáticamente cuando \"Aprobar siempre operaciones de ejecución\" está habilitado. Añade * para permitir todos los comandos (usar con precaución).", - "deniedCommands": "Comandos denegados", - "deniedCommandsDescription": "Prefijos de comandos que serán automáticamente denegados sin pedir aprobación. En caso de conflictos con comandos permitidos, la coincidencia de prefijo más larga tiene prioridad. Añade * para denegar todos los comandos.", - "commandPlaceholder": "Ingrese prefijo de comando (ej. 'git ')", - "deniedCommandPlaceholder": "Ingrese prefijo de comando a denegar (ej. 'rm -rf')", - "addButton": "Añadir", + "allowedCommands": { + "label": "TODO: Allowed Commands", + "description": "TODO: Commands that Roo can execute automatically (one per line, supports wildcards)" + }, + "deniedCommands": { + "label": "TODO: Denied Commands", + "description": "TODO: Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, + "commandPlaceholder": "TODO: Enter a command pattern (e.g., npm *, git status)", + "deniedCommandPlaceholder": "TODO: Enter a denied command pattern (e.g., rm -rf *, sudo *)", + "addButton": "TODO: Add Command", "autoDenied": "Los comandos con el prefijo `{{prefix}}` han sido prohibidos por el usuario. No eludes esta restricción ejecutando otro comando." }, "updateTodoList": { @@ -193,11 +209,12 @@ "description": "La lista de tareas se actualiza automáticamente sin aprobación" }, "apiRequestLimit": { + "label": "Solicitudes máximas", "title": "Solicitudes máximas", "description": "Realizar automáticamente esta cantidad de solicitudes a la API antes de pedir aprobación para continuar con la tarea.", "unlimited": "Ilimitado" }, - "selectOptionsFirst": "Selecciona al menos una opción a continuación para habilitar la aprobación automática" + "selectOptionsFirst": "TODO: Please select options first" }, "providers": { "providerDocumentation": "Documentación de {{provider}}", @@ -225,7 +242,7 @@ "awsCustomArnDesc": "Asegúrese de que la región en el ARN coincida con la región de AWS seleccionada anteriormente.", "openRouterApiKey": "Clave API de OpenRouter", "getOpenRouterApiKey": "Obtener clave API de OpenRouter", - "apiKeyStorageNotice": "Las claves API se almacenan de forma segura en el Almacenamiento Secreto de VSCode", + "apiKeyStorageNotice": "TODO: API keys are stored securely in VS Code's secret storage", "glamaApiKey": "Clave API de Glama", "getGlamaApiKey": "Obtener clave API de Glama", "useCustomBaseUrl": "Usar URL base personalizada", @@ -238,11 +255,12 @@ "noCustomHeaders": "No hay encabezados personalizados definidos. Haga clic en el botón + para añadir uno.", "requestyApiKey": "Clave API de Requesty", "refreshModels": { - "label": "Actualizar modelos", + "label": "TODO: Refresh Models", "hint": "Por favor, vuelve a abrir la configuración para ver los modelos más recientes.", - "loading": "Actualizando lista de modelos...", - "success": "¡Lista de modelos actualizada correctamente!", - "error": "Error al actualizar la lista de modelos. Por favor, inténtalo de nuevo." + "loading": "TODO: Loading models...", + "success": "TODO: Models refreshed successfully", + "error": "TODO: Failed to refresh models", + "missingConfig": "TODO: Please configure API settings first" }, "getRequestyApiKey": "Obtener clave API de Requesty", "openRouterTransformsText": "Comprimir prompts y cadenas de mensajes al tamaño del contexto (Transformaciones de OpenRouter)", @@ -283,8 +301,8 @@ "codestralBaseUrlDesc": "Establecer una URL alternativa para el modelo Codestral.", "xaiApiKey": "Clave API de xAI", "getXaiApiKey": "Obtener clave API de xAI", - "litellmApiKey": "Clave API de LiteLLM", - "litellmBaseUrl": "URL base de LiteLLM", + "litellmApiKey": "TODO: LiteLLM API Key", + "litellmBaseUrl": "TODO: LiteLLM Base URL", "awsCredentials": "Credenciales de AWS", "awsProfile": "Perfil de AWS", "awsProfileName": "Nombre del perfil de AWS", @@ -409,56 +427,63 @@ "placeholder": "Por defecto: claude", "maxTokensLabel": "Tokens máximos de salida", "maxTokensDescription": "Número máximo de tokens de salida para las respuestas de Claude Code. El valor predeterminado es 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { - "label": "Habilitar herramienta de navegador", - "description": "Cuando está habilitado, Roo puede usar un navegador para interactuar con sitios web cuando se utilizan modelos que admiten el uso del ordenador. <0>Más información" + "label": "TODO: Enable Browser Tool", + "description": "TODO: Allow Roo to use browser automation for testing and web scraping" }, "viewport": { - "label": "Tamaño del viewport", - "description": "Seleccione el tamaño del viewport para interacciones del navegador. Esto afecta cómo se muestran e interactúan los sitios web.", + "label": "TODO: Default Viewport Size", + "description": "TODO: The default browser window size when launching", "options": { - "largeDesktop": "Escritorio grande (1280x800)", - "smallDesktop": "Escritorio pequeño (900x600)", - "tablet": "Tablet (768x1024)", - "mobile": "Móvil (360x640)" + "largeDesktop": "TODO: Large Desktop (1920x1080)", + "smallDesktop": "TODO: Small Desktop (1366x768)", + "tablet": "TODO: Tablet (768x1024)", + "mobile": "TODO: Mobile (375x667)" } }, "screenshotQuality": { - "label": "Calidad de capturas de pantalla", - "description": "Ajuste la calidad WebP de las capturas de pantalla del navegador. Valores más altos proporcionan capturas más claras pero aumentan el uso de token." + "label": "TODO: Screenshot Quality", + "description": "TODO: Quality of screenshots (0-100, higher is better but larger file size)" }, "remote": { - "label": "Usar conexión remota del navegador", - "description": "Conectarse a un navegador Chrome que se ejecuta con depuración remota habilitada (--remote-debugging-port=9222).", - "urlPlaceholder": "URL personalizada (ej. http://localhost:9222)", - "testButton": "Probar conexión", - "testingButton": "Probando...", - "instructions": "Ingrese la dirección del host del protocolo DevTools o déjelo vacío para descubrir automáticamente instancias locales de Chrome. El botón Probar Conexión intentará usar la URL personalizada si se proporciona, o descubrirá automáticamente si el campo está vacío." + "label": "TODO: Remote Browser URL", + "description": "TODO: Connect to a remote browser instance instead of launching locally", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, + "testButton": "TODO: Test Connection", + "testingButton": "TODO: Testing connection...", + "instructions": "TODO: Start Chrome with: chrome --remote-debugging-port=9222" } }, "checkpoints": { "enable": { - "label": "Habilitar puntos de control automáticos", - "description": "Cuando está habilitado, Roo creará automáticamente puntos de control durante la ejecución de tareas, facilitando la revisión de cambios o la reversión a estados anteriores. <0>Más información" + "label": "TODO: Enable Checkpoints", + "description": "TODO: Save conversation checkpoints to restore from later" } }, "notifications": { "sound": { - "label": "Habilitar efectos de sonido", - "description": "Cuando está habilitado, Roo reproducirá efectos de sonido para notificaciones y eventos.", - "volumeLabel": "Volumen" + "label": "TODO: Sound Notifications", + "description": "TODO: Play sounds for various events", + "volumeLabel": "TODO: Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { - "label": "Habilitar texto a voz", - "description": "Cuando está habilitado, Roo leerá en voz alta sus respuestas usando texto a voz.", - "speedLabel": "Velocidad" + "label": "TODO: Text-to-Speech", + "description": "TODO: Read Roo's responses aloud", + "speedLabel": "TODO: Speech Speed", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { - "description": "Controle qué información se incluye en la ventana de contexto de la IA, afectando el uso de token y la calidad de respuesta", + "description": "TODO: Configure how Roo manages and includes context in conversations", "autoCondenseContextPercent": { "label": "Umbral para activar la condensación inteligente de contexto", "description": "Cuando la ventana de contexto alcanza este umbral, Roo la condensará automáticamente." @@ -476,113 +501,114 @@ "hint": "Vacío = usar prompt predeterminado" }, "autoCondenseContext": { - "name": "Activar automáticamente la condensación inteligente de contexto", + "name": "TODO: Auto-Condense Context", "description": "Cuando está habilitado, Roo condensará automáticamente el contexto cuando se alcance el umbral. Cuando está deshabilitado, aún puedes activar manualmente la condensación de contexto." }, "openTabs": { - "label": "Límite de contexto de pestañas abiertas", - "description": "Número máximo de pestañas abiertas de VSCode a incluir en el contexto. Valores más altos proporcionan más contexto pero aumentan el uso de token." + "label": "TODO: Include Open Tabs", + "description": "TODO: Automatically include content from open editor tabs as context" }, "workspaceFiles": { - "label": "Límite de contexto de archivos del espacio de trabajo", - "description": "Número máximo de archivos a incluir en los detalles del directorio de trabajo actual. Valores más altos proporcionan más contexto pero aumentan el uso de token." + "label": "TODO: Include Workspace Files", + "description": "TODO: Allow Roo to automatically include relevant workspace files as context" }, "rooignore": { - "label": "Mostrar archivos .rooignore en listas y búsquedas", - "description": "Cuando está habilitado, los archivos que coinciden con los patrones en .rooignore se mostrarán en listas con un símbolo de candado. Cuando está deshabilitado, estos archivos se ocultarán completamente de las listas de archivos y búsquedas." + "label": "TODO: Use .rooignore", + "description": "TODO: Respect .rooignore file patterns when including context" }, "maxReadFile": { - "label": "Umbral de auto-truncado de lectura de archivos", - "description": "Roo lee este número de líneas cuando el modelo omite valores de inicio/fin. Si este número es menor que el total del archivo, Roo genera un índice de números de línea de las definiciones de código. Casos especiales: -1 indica a Roo que lea el archivo completo (sin indexación), y 0 indica que no lea líneas y proporcione solo índices de línea para un contexto mínimo. Valores más bajos minimizan el uso inicial de contexto, permitiendo lecturas posteriores de rangos de líneas precisos. Las solicitudes con inicio/fin explícitos no están limitadas por esta configuración.", - "lines": "líneas", - "always_full_read": "Siempre leer el archivo completo" + "label": "TODO: Max File Read Size", + "description": "TODO: Maximum number of lines to read from a single file", + "lines": "TODO: lines", + "always_full_read": "TODO: Always read full file" }, "maxConcurrentFileReads": { - "label": "Límite de lecturas simultáneas", - "description": "Número máximo de archivos que la herramienta 'read_file' puede procesar simultáneamente. Valores más altos pueden acelerar la lectura de múltiples archivos pequeños pero aumentan el uso de memoria." + "label": "TODO: Max Concurrent File Reads", + "description": "TODO: Maximum number of files to read simultaneously" }, "diagnostics": { "includeMessages": { - "label": "Incluir automáticamente diagnósticos en el contexto", - "description": "Cuando está habilitado, los mensajes de diagnóstico (errores) de los archivos editados se incluirán automáticamente en el contexto. Siempre puedes incluir manualmente todos los diagnósticos del espacio de trabajo usando @problems." + "label": "TODO: Include Diagnostics", + "description": "TODO: Include code diagnostics (errors, warnings) as context" }, "maxMessages": { - "label": "Máximo de mensajes de diagnóstico", - "description": "Número máximo de mensajes de diagnóstico a incluir por archivo. Este límite se aplica tanto a la inclusión automática (cuando la casilla está habilitada) como a las menciones manuales de @problems. Valores más altos proporcionan más contexto pero aumentan el uso de tokens.", - "resetTooltip": "Restablecer al valor predeterminado (50)", - "unlimitedLabel": "Ilimitado" + "label": "TODO: Max Diagnostic Messages", + "description": "TODO: Maximum number of diagnostic messages to include", + "resetTooltip": "TODO: Reset to default", + "unlimitedLabel": "TODO: Unlimited" }, "delayAfterWrite": { - "label": "Retraso después de escrituras para permitir que los diagnósticos detecten problemas potenciales", - "description": "Tiempo de espera después de escrituras de archivos antes de continuar, permitiendo que las herramientas de diagnóstico procesen cambios y detecten problemas." + "label": "TODO: Diagnostics Delay", + "description": "TODO: Wait time (ms) after file changes before updating diagnostics" } }, "condensingThreshold": { - "label": "Umbral de condensación de contexto", - "selectProfile": "Configurar umbral para perfil", - "defaultProfile": "Predeterminado global (todos los perfiles)", - "defaultDescription": "Cuando el contexto alcance este porcentaje, se condensará automáticamente para todos los perfiles a menos que tengan configuraciones personalizadas", - "profileDescription": "Umbral personalizado solo para este perfil (anula el predeterminado global)", + "label": "TODO: Context Condensing Threshold", + "selectProfile": "TODO: Select a profile", + "defaultProfile": "TODO: Default", + "defaultDescription": "TODO: Standard context management", + "profileDescription": "TODO: Custom threshold: {{threshold}}%", "inheritDescription": "Este perfil hereda el umbral predeterminado global ({{threshold}}%)", - "usesGlobal": "(usa global {{threshold}}%)" + "usesGlobal": "(usa global {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { "basic": { - "label": "Configuración del terminal: Básica", + "label": "TODO: Basic Settings", "description": "Configuración básica del terminal" }, "advanced": { - "label": "Configuración del terminal: Avanzada", - "description": "Las siguientes opciones pueden requerir reiniciar el terminal para aplicar la configuración." + "label": "TODO: Advanced Settings", + "description": "TODO: Advanced terminal configuration options" }, "outputLineLimit": { - "label": "Límite de salida de terminal", - "description": "Número máximo de líneas a incluir en la salida del terminal al ejecutar comandos. Cuando se excede, se eliminarán líneas del medio, ahorrando token. <0>Más información" + "label": "TODO: Output Line Limit", + "description": "TODO: Maximum lines to capture from terminal output" }, "outputCharacterLimit": { - "label": "Límite de caracteres del terminal", - "description": "Número máximo de caracteres a incluir en la salida del terminal al ejecutar comandos. Este límite tiene prioridad sobre el límite de líneas para evitar problemas de memoria con líneas extremadamente largas. Cuando se excede, la salida se truncará. <0>Aprende más" + "label": "TODO: Output Character Limit", + "description": "TODO: Maximum characters to capture from terminal output" }, "shellIntegrationTimeout": { - "label": "Tiempo de espera de integración del shell del terminal", - "description": "Tiempo máximo de espera para la inicialización de la integración del shell antes de ejecutar comandos. Para usuarios con tiempos de inicio de shell largos, este valor puede necesitar ser aumentado si ve errores \"Shell Integration Unavailable\" en el terminal. <0>Más información" + "label": "TODO: Shell Integration Timeout", + "description": "TODO: Timeout (ms) for shell integration initialization" }, "shellIntegrationDisabled": { - "label": "Desactivar la integración del shell del terminal", - "description": "Activa esto si los comandos del terminal no funcionan correctamente o si ves errores de 'Shell Integration Unavailable'. Esto utiliza un método más simple para ejecutar comandos, omitiendo algunas funciones avanzadas del terminal. <0>Más información" + "label": "TODO: Disable Shell Integration", + "description": "TODO: Disable VS Code shell integration for compatibility" }, "commandDelay": { - "label": "Retraso de comando del terminal", - "description": "Retraso en milisegundos para añadir después de la ejecución del comando. La configuración predeterminada de 0 desactiva completamente el retraso. Esto puede ayudar a asegurar que la salida del comando se capture completamente en terminales con problemas de temporización. En la mayoría de terminales se implementa estableciendo `PROMPT_COMMAND='sleep N'` y Powershell añade `start-sleep` al final de cada comando. Originalmente era una solución para el error VSCode#237208 y puede no ser necesario. <0>Más información" + "label": "TODO: Command Delay", + "description": "TODO: Delay (ms) between sending commands" }, "compressProgressBar": { - "label": "Comprimir salida de barras de progreso", - "description": "Cuando está habilitado, procesa la salida del terminal con retornos de carro (\\r) para simular cómo un terminal real mostraría el contenido. Esto elimina los estados intermedios de las barras de progreso, conservando solo el estado final, lo que ahorra espacio de contexto para información más relevante. <0>Más información" + "label": "TODO: Compress Progress Bars", + "description": "TODO: Compress repetitive progress bar output" }, "powershellCounter": { - "label": "Habilitar solución temporal del contador de PowerShell", - "description": "Cuando está habilitado, agrega un contador a los comandos de PowerShell para garantizar la ejecución correcta de los comandos. Esto ayuda con las terminales PowerShell que pueden tener problemas con la captura de salida de comandos. <0>Más información" + "label": "TODO: PowerShell Counter", + "description": "TODO: Use counter-based command tracking for PowerShell" }, "zshClearEolMark": { - "label": "Limpiar marca de fin de línea de ZSH", - "description": "Cuando está habilitado, limpia la marca de fin de línea de ZSH estableciendo PROMPT_EOL_MARK=''. Esto evita problemas con la interpretación de la salida de comandos cuando termina con caracteres especiales como '%'. <0>Más información" + "label": "TODO: Clear ZSH EOL Mark", + "description": "TODO: Clear end-of-line marks in ZSH" }, "zshOhMy": { - "label": "Habilitar integración Oh My Zsh", - "description": "Cuando está habilitado, establece ITERM_SHELL_INTEGRATION_INSTALLED=Yes para habilitar las características de integración del shell Oh My Zsh. Aplicar esta configuración puede requerir reiniciar el IDE. <0>Más información" + "label": "TODO: Oh My ZSH Support", + "description": "TODO: Enable Oh My ZSH compatibility" }, "zshP10k": { - "label": "Habilitar integración Powerlevel10k", - "description": "Cuando está habilitado, establece POWERLEVEL9K_TERM_SHELL_INTEGRATION=true para habilitar las características de integración del shell Powerlevel10k. <0>Más información" + "label": "TODO: Powerlevel10k Support", + "description": "TODO: Enable Powerlevel10k theme compatibility" }, "zdotdir": { - "label": "Habilitar gestión de ZDOTDIR", - "description": "Cuando está habilitado, crea un directorio temporal para ZDOTDIR para manejar correctamente la integración del shell zsh. Esto asegura que la integración del shell de VSCode funcione correctamente con zsh mientras preserva tu configuración de zsh. <0>Más información" + "label": "TODO: ZDOTDIR", + "description": "TODO: Custom ZSH configuration directory" }, "inheritEnv": { - "label": "Heredar variables de entorno", - "description": "Cuando está habilitado, el terminal hereda las variables de entorno del proceso padre de VSCode, como la configuración de integración del shell definida en el perfil del usuario. Esto alterna directamente la configuración global de VSCode `terminal.integrated.inheritEnv`. <0>Más información" + "label": "TODO: Inherit Environment", + "description": "TODO: Inherit environment variables from VS Code" } }, "advancedSettings": { @@ -613,40 +639,44 @@ "todoList": { "label": "Habilitar herramienta de lista de tareas", "description": "Cuando está habilitado, Roo puede crear y gestionar listas de tareas para hacer seguimiento del progreso. Esto ayuda a organizar tareas complejas en pasos manejables." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { "DIFF_STRATEGY_UNIFIED": { - "name": "Usar estrategia de diff unificada experimental", - "description": "Habilitar la estrategia de diff unificada experimental. Esta estrategia podría reducir el número de reintentos causados por errores del modelo, pero puede causar comportamientos inesperados o ediciones incorrectas. Habilítela solo si comprende los riesgos y está dispuesto a revisar cuidadosamente todos los cambios." + "name": "TODO: Diff Strategy Unified", + "description": "TODO: Enable diff strategy unified functionality" }, "SEARCH_AND_REPLACE": { - "name": "Usar herramienta experimental de búsqueda y reemplazo", - "description": "Habilitar la herramienta experimental de búsqueda y reemplazo, permitiendo a Roo reemplazar múltiples instancias de un término de búsqueda en una sola solicitud." + "name": "TODO: Search And Replace", + "description": "TODO: Enable search and replace functionality" }, "INSERT_BLOCK": { - "name": "Usar herramienta experimental de inserción de contenido", - "description": "Habilitar la herramienta experimental de inserción de contenido, permitiendo a Roo insertar contenido en números de línea específicos sin necesidad de crear un diff." + "name": "TODO: Insert Block", + "description": "TODO: Enable insert block functionality" }, "POWER_STEERING": { - "name": "Usar modo experimental de \"dirección asistida\"", - "description": "Cuando está habilitado, Roo recordará al modelo los detalles de su definición de modo actual con más frecuencia. Esto llevará a una mayor adherencia a las definiciones de roles e instrucciones personalizadas, pero usará más tokens por mensaje." + "name": "TODO: Power Steering", + "description": "TODO: Enable power steering functionality" }, "MULTI_SEARCH_AND_REPLACE": { - "name": "Usar herramienta experimental de diff de bloques múltiples", - "description": "Cuando está habilitado, Roo usará la herramienta de diff de bloques múltiples. Esto intentará actualizar múltiples bloques de código en el archivo en una sola solicitud." + "name": "TODO: Multi Search And Replace", + "description": "TODO: Enable multi search and replace functionality" }, "CONCURRENT_FILE_READS": { - "name": "Habilitar lectura concurrente de archivos", - "description": "Cuando está habilitado, Roo puede leer múltiples archivos en una sola solicitud. Cuando está deshabilitado, Roo debe leer archivos uno a la vez. Deshabilitarlo puede ayudar cuando se trabaja con modelos menos capaces o cuando deseas más control sobre el acceso a archivos." + "name": "TODO: Concurrent File Reads", + "description": "TODO: Enable concurrent file reads functionality" }, "MARKETPLACE": { - "name": "Habilitar Marketplace", - "description": "Cuando está habilitado, puedes instalar MCP y modos personalizados del Marketplace." + "name": "TODO: Marketplace", + "description": "TODO: Enable marketplace functionality" }, "MULTI_FILE_APPLY_DIFF": { - "name": "Habilitar ediciones de archivos concurrentes", - "description": "Cuando está habilitado, Roo puede editar múltiples archivos en una sola solicitud. Cuando está deshabilitado, Roo debe editar archivos de uno en uno. Deshabilitar esto puede ayudar cuando trabajas con modelos menos capaces o cuando quieres más control sobre las modificaciones de archivos." + "name": "TODO: Multi File Apply Diff", + "description": "TODO: Enable multi file apply diff functionality" } }, "promptCaching": { @@ -689,15 +719,15 @@ "useCustomModel": "Usar personalizado: {{modelId}}" }, "footer": { - "feedback": "Si tiene alguna pregunta o comentario, no dude en abrir un issue en github.com/RooCodeInc/Roo-Code o unirse a reddit.com/r/RooCode o discord.gg/roocode", + "feedback": "TODO: Send Feedback", "telemetry": { - "label": "Permitir informes anónimos de errores y uso", - "description": "Ayude a mejorar Roo Code enviando datos de uso anónimos e informes de errores. Nunca se envía código, prompts o información personal. Consulte nuestra política de privacidad para más detalles." + "label": "TODO: Telemetry", + "description": "TODO: Help improve Roo Code by sending anonymous usage data" }, "settings": { - "import": "Importar", - "export": "Exportar", - "reset": "Restablecer" + "import": "TODO: Import Settings", + "export": "TODO: Export Settings", + "reset": "TODO: Reset Settings" } }, "thinkingBudget": { @@ -721,7 +751,7 @@ "profileInvalid": "Este perfil contiene un proveedor o modelo que no está permitido por su organización" }, "placeholders": { - "apiKey": "Ingrese clave API...", + "apiKey": "TODO: Enter API key", "profileName": "Ingrese nombre del perfil", "accessKey": "Ingrese clave de acceso...", "secretKey": "Ingrese clave secreta...", @@ -730,7 +760,7 @@ "keyFilePath": "Ingrese ruta del archivo de clave...", "projectId": "Ingrese ID del proyecto...", "customArn": "Ingrese ARN (ej. arn:aws:bedrock:us-east-1:123456789012:foundation-model/my-model)", - "baseUrl": "Ingrese URL base...", + "baseUrl": "TODO: Enter base URL", "modelId": { "lmStudio": "ej. meta-llama-3.1-8b-instruct", "lmStudioDraft": "ej. lmstudio-community/llama-3.2-1b-instruct", @@ -754,5 +784,8 @@ "useCustomArn": "Usar ARN personalizado..." }, "includeMaxOutputTokens": "Incluir tokens máximos de salida", - "includeMaxOutputTokensDescription": "Enviar parámetro de tokens máximos de salida en solicitudes API. Algunos proveedores pueden no soportar esto." + "includeMaxOutputTokensDescription": "Enviar parámetro de tokens máximos de salida en solicitudes API. Algunos proveedores pueden no soportar esto.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/fr/prompts.json b/webview-ui/src/i18n/locales/fr/prompts.json index d48ef28fa4..338f6cc7b0 100644 --- a/webview-ui/src/i18n/locales/fr/prompts.json +++ b/webview-ui/src/i18n/locales/fr/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Démarrer une nouvelle tâche", "description": "Démarre une nouvelle tâche avec ton entrée. Disponible dans la palette de commandes." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, @@ -205,5 +211,15 @@ "descriptionNoRules": "Êtes-vous sûr de vouloir supprimer ce mode personnalisé ?", "confirm": "Supprimer", "cancel": "Annuler" + }, + "TODO: supportPrompts": { + "TODO: types": { + "TODO: enhance": { + "TODO: label": "Enhance" + }, + "TODO: condense": { + "TODO: label": "Condense" + } + } } } diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json index 2654afcbdc..c5f89e5060 100644 --- a/webview-ui/src/i18n/locales/fr/settings.json +++ b/webview-ui/src/i18n/locales/fr/settings.json @@ -1,40 +1,49 @@ { "common": { - "save": "Enregistrer", - "done": "Terminé", + "save": "TODO: Save", + "done": "TODO: Done", "cancel": "Annuler", "reset": "Réinitialiser", - "select": "Sélectionner", + "select": "TODO: Select", "add": "Ajouter un en-tête", "remove": "Supprimer" }, "header": { - "title": "Paramètres", - "saveButtonTooltip": "Enregistrer les modifications", - "nothingChangedTooltip": "Rien n'a changé", - "doneButtonTooltip": "Ignorer les modifications non enregistrées et fermer le panneau des paramètres" + "title": "TODO: Settings", + "saveButtonTooltip": "TODO: Save changes", + "nothingChangedTooltip": "TODO: No changes to save", + "doneButtonTooltip": "TODO: Close settings", + "searchPlaceholder": "TODO: Search settings...", + "searchTooltip": "TODO: Search settings", + "clearSearchTooltip": "TODO: Clear search", + "noSearchResults": "TODO: No settings match your search" }, "unsavedChangesDialog": { - "title": "Modifications non enregistrées", - "description": "Voulez-vous ignorer les modifications et continuer ?", - "cancelButton": "Annuler", - "discardButton": "Ignorer les modifications" + "title": "TODO: Unsaved Changes", + "description": "TODO: You have unsaved changes. Do you want to discard them?", + "cancelButton": "TODO: Cancel", + "discardButton": "TODO: Discard Changes" }, "sections": { - "providers": "Fournisseurs", - "autoApprove": "Auto-approbation", - "browser": "Accès ordinateur", - "checkpoints": "Points de contrôle", - "notifications": "Notifications", - "contextManagement": "Contexte", - "terminal": "Terminal", - "prompts": "Invites", - "experimental": "Expérimental", - "language": "Langue", - "about": "À propos de Roo Code" + "providers": "TODO: Providers", + "autoApprove": "TODO: Auto-Approve", + "browser": "TODO: Browser", + "checkpoints": "TODO: Checkpoints", + "notifications": "TODO: Notifications", + "contextManagement": "TODO: Context Management", + "terminal": "TODO: Terminal", + "prompts": "TODO: Prompts", + "experimental": "TODO: Experimental", + "language": "TODO: Language", + "about": "TODO: About", + "advanced": "Advanced" }, "prompts": { - "description": "Configurez les invites de support utilisées pour les actions rapides comme l'amélioration des invites, l'explication du code et la résolution des problèmes. Ces invites aident Roo à fournir une meilleure assistance pour les tâches de développement courantes." + "description": "TODO: Customize prompts and instructions for Roo", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Indexation de la base de code", @@ -126,39 +135,41 @@ "resetToDefault": "Réinitialiser par défaut" }, "autoApprove": { - "description": "Permettre à Roo d'effectuer automatiquement des opérations sans requérir d'approbation. Activez ces paramètres uniquement si vous faites entièrement confiance à l'IA et que vous comprenez les risques de sécurité associés.", - "toggleAriaLabel": "Activer/désactiver l'approbation automatique", - "disabledAriaLabel": "Approbation automatique désactivée - sélectionnez d'abord les options", - "selectOptionsFirst": "Sélectionnez au moins une option ci-dessous pour activer l'approbation automatique", + "description": "TODO: Configure which actions Roo can perform automatically without asking for permission", + "toggleAriaLabel": "TODO: Toggle auto-approve", + "disabledAriaLabel": "TODO: Auto-approve is disabled", + "selectOptionsFirst": "TODO: Please select options first", "readOnly": { - "label": "Lecture", + "label": "TODO: Read-Only Operations", "description": "Lorsque cette option est activée, Roo affichera automatiquement le contenu des répertoires et lira les fichiers sans que vous ayez à cliquer sur le bouton Approuver.", "outsideWorkspace": { - "label": "Inclure les fichiers en dehors de l'espace de travail", - "description": "Permettre à Roo de lire des fichiers en dehors de l'espace de travail actuel sans nécessiter d'approbation." + "label": "TODO: Allow reading files outside workspace", + "description": "TODO: Allow Roo to read files outside the current workspace directory" } }, "write": { - "label": "Écriture", + "label": "TODO: Write Operations", "description": "Créer et modifier automatiquement des fichiers sans nécessiter d'approbation", "delayLabel": "Délai après les écritures pour permettre aux diagnostics de détecter les problèmes potentiels", "outsideWorkspace": { - "label": "Inclure les fichiers en dehors de l'espace de travail", - "description": "Permettre à Roo de créer et modifier des fichiers en dehors de l'espace de travail actuel sans nécessiter d'approbation." + "label": "TODO: Allow writing files outside workspace", + "description": "TODO: Allow Roo to create or modify files outside the current workspace directory" }, "protected": { - "label": "Inclure les fichiers protégés", - "description": "Permettre à Roo de créer et modifier des fichiers protégés (comme .rooignore et les fichiers de configuration .roo/) sans nécessiter d'approbation." - } + "label": "TODO: Allow modifying protected files", + "description": "TODO: Allow Roo to modify files that are normally protected (e.g., .env, .git)" + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Navigateur", "description": "Effectuer automatiquement des actions du navigateur sans nécessiter d'approbation. Remarque : S'applique uniquement lorsque le modèle prend en charge l'utilisation de l'ordinateur" }, "retry": { - "label": "Réessayer", + "label": "TODO: Retry Failed Operations", "description": "Réessayer automatiquement les requêtes API échouées lorsque le serveur renvoie une réponse d'erreur", - "delayLabel": "Délai avant de réessayer la requête" + "delayLabel": "TODO: Retry delay (seconds)", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -173,20 +184,25 @@ "description": "Permettre la création et l'achèvement des sous-tâches sans nécessiter d'approbation" }, "followupQuestions": { - "label": "Question", + "label": "TODO: Follow-up Questions", "description": "Sélectionner automatiquement la première réponse suggérée pour les questions de suivi après le délai configuré", - "timeoutLabel": "Temps d'attente avant la sélection automatique de la première réponse" + "timeoutLabel": "TODO: Question timeout (seconds)", + "timeoutDescription": "Temps d'attente avant la sélection automatique de la première réponse" }, "execute": { - "label": "Exécuter", + "label": "TODO: Execute Commands", "description": "Exécuter automatiquement les commandes de terminal autorisées sans nécessiter d'approbation", - "allowedCommands": "Commandes auto-exécutables autorisées", - "allowedCommandsDescription": "Préfixes de commandes qui peuvent être auto-exécutés lorsque \"Toujours approuver les opérations d'exécution\" est activé. Ajoutez * pour autoriser toutes les commandes (à utiliser avec précaution).", - "deniedCommands": "Commandes refusées", - "deniedCommandsDescription": "Préfixes de commandes qui seront automatiquement refusés sans demander d'approbation. En cas de conflit avec les commandes autorisées, la correspondance de préfixe la plus longue prend la priorité. Ajoutez * pour refuser toutes les commandes.", - "commandPlaceholder": "Entrez le préfixe de commande (ex. 'git ')", - "deniedCommandPlaceholder": "Entrez le préfixe de commande à refuser (ex. 'rm -rf')", - "addButton": "Ajouter", + "allowedCommands": { + "label": "TODO: Allowed Commands", + "description": "TODO: Commands that Roo can execute automatically (one per line, supports wildcards)" + }, + "deniedCommands": { + "label": "TODO: Denied Commands", + "description": "TODO: Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, + "commandPlaceholder": "TODO: Enter a command pattern (e.g., npm *, git status)", + "deniedCommandPlaceholder": "TODO: Enter a denied command pattern (e.g., rm -rf *, sudo *)", + "addButton": "TODO: Add Command", "autoDenied": "Les commandes avec le préfixe `{{prefix}}` ont été interdites par l'utilisateur. Ne contourne pas cette restriction en exécutant une autre commande." }, "updateTodoList": { @@ -194,6 +210,7 @@ "description": "La liste de tâches est mise à jour automatiquement sans approbation" }, "apiRequestLimit": { + "label": "Requêtes maximales", "title": "Requêtes maximales", "description": "Effectuer automatiquement ce nombre de requêtes API avant de demander l'approbation pour continuer la tâche.", "unlimited": "Illimité" @@ -225,7 +242,7 @@ "awsCustomArnDesc": "Assurez-vous que la région dans l'ARN correspond à la région AWS sélectionnée ci-dessus.", "openRouterApiKey": "Clé API OpenRouter", "getOpenRouterApiKey": "Obtenir la clé API OpenRouter", - "apiKeyStorageNotice": "Les clés API sont stockées en toute sécurité dans le stockage sécurisé de VSCode", + "apiKeyStorageNotice": "TODO: API keys are stored securely in VS Code's secret storage", "glamaApiKey": "Clé API Glama", "getGlamaApiKey": "Obtenir la clé API Glama", "useCustomBaseUrl": "Utiliser une URL de base personnalisée", @@ -238,11 +255,12 @@ "noCustomHeaders": "Aucun en-tête personnalisé défini. Cliquez sur le bouton + pour en ajouter un.", "requestyApiKey": "Clé API Requesty", "refreshModels": { - "label": "Actualiser les modèles", + "label": "TODO: Refresh Models", "hint": "Veuillez rouvrir les paramètres pour voir les modèles les plus récents.", - "loading": "Actualisation de la liste des modèles...", - "success": "Liste des modèles actualisée avec succès !", - "error": "Échec de l'actualisation de la liste des modèles. Veuillez réessayer." + "loading": "TODO: Loading models...", + "success": "TODO: Models refreshed successfully", + "error": "TODO: Failed to refresh models", + "missingConfig": "TODO: Please configure API settings first" }, "getRequestyApiKey": "Obtenir la clé API Requesty", "openRouterTransformsText": "Compresser les prompts et chaînes de messages à la taille du contexte (Transformations OpenRouter)", @@ -283,8 +301,8 @@ "codestralBaseUrlDesc": "Définir une URL alternative pour le modèle Codestral.", "xaiApiKey": "Clé API xAI", "getXaiApiKey": "Obtenir la clé API xAI", - "litellmApiKey": "Clé API LiteLLM", - "litellmBaseUrl": "URL de base LiteLLM", + "litellmApiKey": "TODO: LiteLLM API Key", + "litellmBaseUrl": "TODO: LiteLLM Base URL", "awsCredentials": "Identifiants AWS", "awsProfile": "Profil AWS", "awsProfileName": "Nom du profil AWS", @@ -409,56 +427,63 @@ "placeholder": "Défaut : claude", "maxTokensLabel": "Jetons de sortie max", "maxTokensDescription": "Nombre maximum de jetons de sortie pour les réponses de Claude Code. La valeur par défaut est 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { - "label": "Activer l'outil de navigateur", - "description": "Lorsque cette option est activée, Roo peut utiliser un navigateur pour interagir avec des sites web lors de l'utilisation de modèles qui prennent en charge l'utilisation de l'ordinateur. <0>En savoir plus" + "label": "TODO: Enable Browser Tool", + "description": "TODO: Allow Roo to use browser automation for testing and web scraping" }, "viewport": { - "label": "Taille de la fenêtre d'affichage", - "description": "Sélectionnez la taille de la fenêtre d'affichage pour les interactions du navigateur. Cela affecte la façon dont les sites web sont affichés et dont on interagit avec eux.", + "label": "TODO: Default Viewport Size", + "description": "TODO: The default browser window size when launching", "options": { - "largeDesktop": "Grand bureau (1280x800)", - "smallDesktop": "Petit bureau (900x600)", - "tablet": "Tablette (768x1024)", - "mobile": "Mobile (360x640)" + "largeDesktop": "TODO: Large Desktop (1920x1080)", + "smallDesktop": "TODO: Small Desktop (1366x768)", + "tablet": "TODO: Tablet (768x1024)", + "mobile": "TODO: Mobile (375x667)" } }, "screenshotQuality": { - "label": "Qualité des captures d'écran", - "description": "Ajustez la qualité WebP des captures d'écran du navigateur. Des valeurs plus élevées fournissent des captures plus claires mais augmentent l'utilisation de token." + "label": "TODO: Screenshot Quality", + "description": "TODO: Quality of screenshots (0-100, higher is better but larger file size)" }, "remote": { - "label": "Utiliser une connexion de navigateur distant", - "description": "Se connecter à un navigateur Chrome exécuté avec le débogage à distance activé (--remote-debugging-port=9222).", - "urlPlaceholder": "URL personnalisée (ex. http://localhost:9222)", - "testButton": "Tester la connexion", - "testingButton": "Test en cours...", - "instructions": "Entrez l'adresse hôte du protocole DevTools ou laissez vide pour découvrir automatiquement les instances Chrome locales. Le bouton Tester la connexion essaiera l'URL personnalisée si fournie, ou découvrira automatiquement si le champ est vide." + "label": "TODO: Remote Browser URL", + "description": "TODO: Connect to a remote browser instance instead of launching locally", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, + "testButton": "TODO: Test Connection", + "testingButton": "TODO: Testing connection...", + "instructions": "TODO: Start Chrome with: chrome --remote-debugging-port=9222" } }, "checkpoints": { "enable": { - "label": "Activer les points de contrôle automatiques", - "description": "Lorsque cette option est activée, Roo créera automatiquement des points de contrôle pendant l'exécution des tâches, facilitant la révision des modifications ou le retour à des états antérieurs. <0>En savoir plus" + "label": "TODO: Enable Checkpoints", + "description": "TODO: Save conversation checkpoints to restore from later" } }, "notifications": { "sound": { - "label": "Activer les effets sonores", - "description": "Lorsque cette option est activée, Roo jouera des effets sonores pour les notifications et les événements.", - "volumeLabel": "Volume" + "label": "TODO: Sound Notifications", + "description": "TODO: Play sounds for various events", + "volumeLabel": "TODO: Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { - "label": "Activer la synthèse vocale", - "description": "Lorsque cette option est activée, Roo lira ses réponses à haute voix en utilisant la synthèse vocale.", - "speedLabel": "Vitesse" + "label": "TODO: Text-to-Speech", + "description": "TODO: Read Roo's responses aloud", + "speedLabel": "TODO: Speech Speed", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { - "description": "Contrôlez quelles informations sont incluses dans la fenêtre de contexte de l'IA, affectant l'utilisation de token et la qualité des réponses", + "description": "TODO: Configure how Roo manages and includes context in conversations", "autoCondenseContextPercent": { "label": "Seuil de déclenchement de la condensation intelligente du contexte", "description": "Lorsque la fenêtre de contexte atteint ce seuil, Roo la condensera automatiquement." @@ -476,113 +501,114 @@ "hint": "Vide = utiliser le prompt par défaut" }, "autoCondenseContext": { - "name": "Déclencher automatiquement la condensation intelligente du contexte", + "name": "TODO: Auto-Condense Context", "description": "Lorsque cette option est activée, Roo condensera automatiquement le contexte lorsque le seuil est atteint. Lorsqu'elle est désactivée, vous pouvez toujours déclencher manuellement la condensation du contexte." }, "openTabs": { - "label": "Limite de contexte des onglets ouverts", - "description": "Nombre maximum d'onglets VSCode ouverts à inclure dans le contexte. Des valeurs plus élevées fournissent plus de contexte mais augmentent l'utilisation de token." + "label": "TODO: Include Open Tabs", + "description": "TODO: Automatically include content from open editor tabs as context" }, "workspaceFiles": { - "label": "Limite de contexte des fichiers de l'espace de travail", - "description": "Nombre maximum de fichiers à inclure dans les détails du répertoire de travail actuel. Des valeurs plus élevées fournissent plus de contexte mais augmentent l'utilisation de token." + "label": "TODO: Include Workspace Files", + "description": "TODO: Allow Roo to automatically include relevant workspace files as context" }, "rooignore": { - "label": "Afficher les fichiers .rooignore dans les listes et recherches", - "description": "Lorsque cette option est activée, les fichiers correspondant aux modèles dans .rooignore seront affichés dans les listes avec un symbole de cadenas. Lorsqu'elle est désactivée, ces fichiers seront complètement masqués des listes de fichiers et des recherches." + "label": "TODO: Use .rooignore", + "description": "TODO: Respect .rooignore file patterns when including context" }, "maxReadFile": { - "label": "Seuil d'auto-troncature de lecture de fichier", - "description": "Roo lit ce nombre de lignes lorsque le modèle omet les valeurs de début/fin. Si ce nombre est inférieur au total du fichier, Roo génère un index des numéros de ligne des définitions de code. Cas spéciaux : -1 indique à Roo de lire le fichier entier (sans indexation), et 0 indique de ne lire aucune ligne et de fournir uniquement les index de ligne pour un contexte minimal. Des valeurs plus basses minimisent l'utilisation initiale du contexte, permettant des lectures ultérieures de plages de lignes précises. Les requêtes avec début/fin explicites ne sont pas limitées par ce paramètre.", - "lines": "lignes", - "always_full_read": "Toujours lire le fichier entier" + "label": "TODO: Max File Read Size", + "description": "TODO: Maximum number of lines to read from a single file", + "lines": "TODO: lines", + "always_full_read": "TODO: Always read full file" }, "maxConcurrentFileReads": { - "label": "Limite de lectures simultanées", - "description": "Nombre maximum de fichiers que l'outil 'read_file' peut traiter simultanément. Des valeurs plus élevées peuvent accélérer la lecture de plusieurs petits fichiers mais augmentent l'utilisation de la mémoire." + "label": "TODO: Max Concurrent File Reads", + "description": "TODO: Maximum number of files to read simultaneously" }, "diagnostics": { "includeMessages": { - "label": "Inclure automatiquement les diagnostics dans le contexte", - "description": "Lorsque cette option est activée, les messages de diagnostic (erreurs) des fichiers modifiés seront automatiquement inclus dans le contexte. Vous pouvez toujours inclure manuellement tous les diagnostics de l'espace de travail en utilisant @problems." + "label": "TODO: Include Diagnostics", + "description": "TODO: Include code diagnostics (errors, warnings) as context" }, "maxMessages": { - "label": "Nombre maximum de messages de diagnostic", - "description": "Nombre maximum de messages de diagnostic à inclure par fichier. Cette limite s'applique à la fois à l'inclusion automatique (lorsque la case est cochée) et aux mentions manuelles @problems. Des valeurs plus élevées fournissent plus de contexte mais augmentent l'utilisation des jetons.", - "resetTooltip": "Réinitialiser à la valeur par défaut (50)", - "unlimitedLabel": "Illimité" + "label": "TODO: Max Diagnostic Messages", + "description": "TODO: Maximum number of diagnostic messages to include", + "resetTooltip": "TODO: Reset to default", + "unlimitedLabel": "TODO: Unlimited" }, "delayAfterWrite": { - "label": "Délai après les écritures pour permettre aux diagnostics de détecter les problèmes potentiels", - "description": "Temps d'attente après les écritures de fichiers avant de continuer, permettant aux outils de diagnostic de traiter les modifications et de détecter les problèmes." + "label": "TODO: Diagnostics Delay", + "description": "TODO: Wait time (ms) after file changes before updating diagnostics" } }, "condensingThreshold": { - "label": "Seuil de condensation du contexte", - "selectProfile": "Configurer le seuil pour le profil", - "defaultProfile": "Par défaut global (tous les profils)", - "defaultDescription": "Lorsque le contexte atteint ce pourcentage, il sera automatiquement condensé pour tous les profils sauf s'ils ont des paramètres personnalisés", - "profileDescription": "Seuil personnalisé pour ce profil uniquement (remplace le défaut global)", + "label": "TODO: Context Condensing Threshold", + "selectProfile": "TODO: Select a profile", + "defaultProfile": "TODO: Default", + "defaultDescription": "TODO: Standard context management", + "profileDescription": "TODO: Custom threshold: {{threshold}}%", "inheritDescription": "Ce profil hérite du seuil par défaut global ({{threshold}}%)", - "usesGlobal": "(utilise global {{threshold}}%)" + "usesGlobal": "(utilise global {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { "basic": { - "label": "Paramètres du terminal : Base", + "label": "TODO: Basic Settings", "description": "Paramètres de base du terminal" }, "advanced": { - "label": "Paramètres du terminal : Avancé", - "description": "Les options suivantes peuvent nécessiter un redémarrage du terminal pour appliquer le paramètre." + "label": "TODO: Advanced Settings", + "description": "TODO: Advanced terminal configuration options" }, "outputLineLimit": { - "label": "Limite de sortie du terminal", - "description": "Nombre maximum de lignes à inclure dans la sortie du terminal lors de l'exécution de commandes. Lorsque ce nombre est dépassé, les lignes seront supprimées du milieu, économisant des token. <0>En savoir plus" + "label": "TODO: Output Line Limit", + "description": "TODO: Maximum lines to capture from terminal output" }, "outputCharacterLimit": { - "label": "Limite de caractères du terminal", - "description": "Nombre maximum de caractères à inclure dans la sortie du terminal lors de l'exécution de commandes. Cette limite prévaut sur la limite de lignes pour éviter les problèmes de mémoire avec des lignes extrêmement longues. Lorsque cette limite est dépassée, la sortie sera tronquée. <0>En savoir plus" + "label": "TODO: Output Character Limit", + "description": "TODO: Maximum characters to capture from terminal output" }, "shellIntegrationTimeout": { - "label": "Délai d'intégration du shell du terminal", - "description": "Temps maximum d'attente pour l'initialisation de l'intégration du shell avant d'exécuter des commandes. Pour les utilisateurs avec des temps de démarrage de shell longs, cette valeur peut nécessiter d'être augmentée si vous voyez des erreurs \"Shell Integration Unavailable\" dans le terminal. <0>En savoir plus" + "label": "TODO: Shell Integration Timeout", + "description": "TODO: Timeout (ms) for shell integration initialization" }, "shellIntegrationDisabled": { - "label": "Désactiver l'intégration du shell du terminal", - "description": "Active ceci si les commandes du terminal ne fonctionnent pas correctement ou si tu vois des erreurs 'Shell Integration Unavailable'. Cela utilise une méthode plus simple pour exécuter les commandes, en contournant certaines fonctionnalités avancées du terminal. <0>En savoir plus" + "label": "TODO: Disable Shell Integration", + "description": "TODO: Disable VS Code shell integration for compatibility" }, "commandDelay": { - "label": "Délai de commande du terminal", - "description": "Délai en millisecondes à ajouter après l'exécution de la commande. Le paramètre par défaut de 0 désactive complètement le délai. Cela peut aider à garantir que la sortie de la commande est entièrement capturée dans les terminaux avec des problèmes de synchronisation. Dans la plupart des terminaux, cela est implémenté en définissant `PROMPT_COMMAND='sleep N'` et Powershell ajoute `start-sleep` à la fin de chaque commande. À l'origine, c'était une solution pour le bug VSCode#237208 et peut ne pas être nécessaire. <0>En savoir plus" + "label": "TODO: Command Delay", + "description": "TODO: Delay (ms) between sending commands" }, "compressProgressBar": { - "label": "Compresser la sortie des barres de progression", - "description": "Lorsque activé, traite la sortie du terminal avec des retours chariot (\\r) pour simuler l'affichage d'un terminal réel. Cela supprime les états intermédiaires des barres de progression, ne conservant que l'état final, ce qui économise de l'espace de contexte pour des informations plus pertinentes. <0>En savoir plus" + "label": "TODO: Compress Progress Bars", + "description": "TODO: Compress repetitive progress bar output" }, "powershellCounter": { - "label": "Activer le contournement du compteur PowerShell", - "description": "Lorsqu'activé, ajoute un compteur aux commandes PowerShell pour assurer une exécution correcte des commandes. Cela aide avec les terminaux PowerShell qui peuvent avoir des problèmes de capture de sortie. <0>En savoir plus" + "label": "TODO: PowerShell Counter", + "description": "TODO: Use counter-based command tracking for PowerShell" }, "zshClearEolMark": { - "label": "Effacer la marque de fin de ligne ZSH", - "description": "Lorsqu'activé, efface la marque de fin de ligne ZSH en définissant PROMPT_EOL_MARK=''. Cela évite les problèmes d'interprétation de la sortie des commandes lorsqu'elle se termine par des caractères spéciaux comme '%'. <0>En savoir plus" + "label": "TODO: Clear ZSH EOL Mark", + "description": "TODO: Clear end-of-line marks in ZSH" }, "zshOhMy": { - "label": "Activer l'intégration Oh My Zsh", - "description": "Lorsqu'activé, définit ITERM_SHELL_INTEGRATION_INSTALLED=Yes pour activer les fonctionnalités d'intégration du shell Oh My Zsh. L'application de ce paramètre peut nécessiter le redémarrage de l'IDE. <0>En savoir plus" + "label": "TODO: Oh My ZSH Support", + "description": "TODO: Enable Oh My ZSH compatibility" }, "zshP10k": { - "label": "Activer l'intégration Powerlevel10k", - "description": "Lorsqu'activé, définit POWERLEVEL9K_TERM_SHELL_INTEGRATION=true pour activer les fonctionnalités d'intégration du shell Powerlevel10k. <0>En savoir plus" + "label": "TODO: Powerlevel10k Support", + "description": "TODO: Enable Powerlevel10k theme compatibility" }, "zdotdir": { - "label": "Activer la gestion ZDOTDIR", - "description": "Lorsque activé, crée un répertoire temporaire pour ZDOTDIR afin de gérer correctement l'intégration du shell zsh. Cela garantit le bon fonctionnement de l'intégration du shell VSCode avec zsh tout en préservant votre configuration zsh. <0>En savoir plus" + "label": "TODO: ZDOTDIR", + "description": "TODO: Custom ZSH configuration directory" }, "inheritEnv": { - "label": "Hériter des variables d'environnement", - "description": "Lorsqu'activé, le terminal hérite des variables d'environnement du processus parent VSCode, comme les paramètres d'intégration du shell définis dans le profil utilisateur. Cela bascule directement le paramètre global VSCode `terminal.integrated.inheritEnv`. <0>En savoir plus" + "label": "TODO: Inherit Environment", + "description": "TODO: Inherit environment variables from VS Code" } }, "advancedSettings": { @@ -613,40 +639,44 @@ "todoList": { "label": "Activer l'outil de liste de tâches", "description": "Lorsqu'activé, Roo peut créer et gérer des listes de tâches pour suivre la progression. Cela aide à organiser les tâches complexes en étapes gérables." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { "DIFF_STRATEGY_UNIFIED": { - "name": "Utiliser la stratégie diff unifiée expérimentale", - "description": "Activer la stratégie diff unifiée expérimentale. Cette stratégie pourrait réduire le nombre de tentatives causées par des erreurs de modèle, mais peut provoquer des comportements inattendus ou des modifications incorrectes. Activez-la uniquement si vous comprenez les risques et êtes prêt à examiner attentivement tous les changements." + "name": "TODO: Diff Strategy Unified", + "description": "TODO: Enable diff strategy unified functionality" }, "SEARCH_AND_REPLACE": { - "name": "Utiliser l'outil de recherche et remplacement expérimental", - "description": "Activer l'outil de recherche et remplacement expérimental, permettant à Roo de remplacer plusieurs occurrences d'un terme de recherche en une seule requête." + "name": "TODO: Search And Replace", + "description": "TODO: Enable search and replace functionality" }, "INSERT_BLOCK": { - "name": "Utiliser l'outil d'insertion de contenu expérimental", - "description": "Activer l'outil d'insertion de contenu expérimental, permettant à Roo d'insérer du contenu à des numéros de ligne spécifiques sans avoir besoin de créer un diff." + "name": "TODO: Insert Block", + "description": "TODO: Enable insert block functionality" }, "POWER_STEERING": { - "name": "Utiliser le mode \"direction assistée\" expérimental", - "description": "Lorsqu'il est activé, Roo rappellera plus fréquemment au modèle les détails de sa définition de mode actuelle. Cela conduira à une adhérence plus forte aux définitions de rôles et aux instructions personnalisées, mais utilisera plus de tokens par message." + "name": "TODO: Power Steering", + "description": "TODO: Enable power steering functionality" }, "MULTI_SEARCH_AND_REPLACE": { - "name": "Utiliser l'outil diff multi-blocs expérimental", - "description": "Lorsqu'il est activé, Roo utilisera l'outil diff multi-blocs. Cela tentera de mettre à jour plusieurs blocs de code dans le fichier en une seule requête." + "name": "TODO: Multi Search And Replace", + "description": "TODO: Enable multi search and replace functionality" }, "CONCURRENT_FILE_READS": { - "name": "Activer la lecture simultanée de fichiers", - "description": "Lorsqu'activé, Roo peut lire plusieurs fichiers dans une seule requête. Lorsque désactivé, Roo doit lire les fichiers un par un. La désactivation peut aider lors du travail avec des modèles moins performants ou lorsque tu souhaites plus de contrôle sur l'accès aux fichiers." + "name": "TODO: Concurrent File Reads", + "description": "TODO: Enable concurrent file reads functionality" }, "MARKETPLACE": { - "name": "Activer le Marketplace", - "description": "Lorsque cette option est activée, tu peux installer des MCP et des modes personnalisés depuis le Marketplace." + "name": "TODO: Marketplace", + "description": "TODO: Enable marketplace functionality" }, "MULTI_FILE_APPLY_DIFF": { - "name": "Activer les éditions de fichiers concurrentes", - "description": "Lorsque cette option est activée, Roo peut éditer plusieurs fichiers en une seule requête. Lorsqu'elle est désactivée, Roo doit éditer les fichiers un par un. Désactiver cette option peut aider lorsque tu travailles avec des modèles moins capables ou lorsque tu veux plus de contrôle sur les modifications de fichiers." + "name": "TODO: Multi File Apply Diff", + "description": "TODO: Enable multi file apply diff functionality" } }, "promptCaching": { @@ -689,15 +719,15 @@ "useCustomModel": "Utiliser personnalisé : {{modelId}}" }, "footer": { - "feedback": "Si vous avez des questions ou des commentaires, n'hésitez pas à ouvrir un problème sur github.com/RooCodeInc/Roo-Code ou à rejoindre reddit.com/r/RooCode ou discord.gg/roocode", + "feedback": "TODO: Send Feedback", "telemetry": { - "label": "Autoriser les rapports anonymes d'erreurs et d'utilisation", - "description": "Aidez à améliorer Roo Code en envoyant des données d'utilisation anonymes et des rapports d'erreurs. Aucun code, prompt ou information personnelle n'est jamais envoyé. Consultez notre politique de confidentialité pour plus de détails." + "label": "TODO: Telemetry", + "description": "TODO: Help improve Roo Code by sending anonymous usage data" }, "settings": { - "import": "Importer", - "export": "Exporter", - "reset": "Réinitialiser" + "import": "TODO: Import Settings", + "export": "TODO: Export Settings", + "reset": "TODO: Reset Settings" } }, "thinkingBudget": { @@ -721,7 +751,7 @@ "profileInvalid": "Ce profil contient un fournisseur ou un modèle qui n'est pas autorisé par votre organisation" }, "placeholders": { - "apiKey": "Saisissez la clé API...", + "apiKey": "TODO: Enter API key", "profileName": "Saisissez le nom du profil", "accessKey": "Saisissez la clé d'accès...", "secretKey": "Saisissez la clé secrète...", @@ -730,7 +760,7 @@ "keyFilePath": "Saisissez le chemin du fichier de clé...", "projectId": "Saisissez l'ID du projet...", "customArn": "Saisissez l'ARN (ex. arn:aws:bedrock:us-east-1:123456789012:foundation-model/my-model)", - "baseUrl": "Saisissez l'URL de base...", + "baseUrl": "TODO: Enter base URL", "modelId": { "lmStudio": "ex. meta-llama-3.1-8b-instruct", "lmStudioDraft": "ex. lmstudio-community/llama-3.2-1b-instruct", @@ -754,5 +784,8 @@ "useCustomArn": "Utiliser un ARN personnalisé..." }, "includeMaxOutputTokens": "Inclure les tokens de sortie maximum", - "includeMaxOutputTokensDescription": "Envoyer le paramètre de tokens de sortie maximum dans les requêtes API. Certains fournisseurs peuvent ne pas supporter cela." + "includeMaxOutputTokensDescription": "Envoyer le paramètre de tokens de sortie maximum dans les requêtes API. Certains fournisseurs peuvent ne pas supporter cela.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/hi/prompts.json b/webview-ui/src/i18n/locales/hi/prompts.json index ff409f41f5..b0ee8459d0 100644 --- a/webview-ui/src/i18n/locales/hi/prompts.json +++ b/webview-ui/src/i18n/locales/hi/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "नया कार्य शुरू करें", "description": "इनपुट के साथ नया कार्य शुरू करें। कमांड पैलेट में उपलब्ध है।" + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json index 279de29ada..3190fe593c 100644 --- a/webview-ui/src/i18n/locales/hi/settings.json +++ b/webview-ui/src/i18n/locales/hi/settings.json @@ -12,7 +12,11 @@ "title": "सेटिंग्स", "saveButtonTooltip": "परिवर्तन सहेजें", "nothingChangedTooltip": "कुछ भी नहीं बदला", - "doneButtonTooltip": "असहेजे परिवर्तनों को छोड़ें और सेटिंग्स पैनल बंद करें" + "doneButtonTooltip": "असहेजे परिवर्तनों को छोड़ें और सेटिंग्स पैनल बंद करें", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "असहेजे परिवर्तन", @@ -31,10 +35,15 @@ "prompts": "प्रॉम्प्ट्स", "experimental": "प्रायोगिक", "language": "भाषा", - "about": "परिचय" + "about": "परिचय", + "advanced": "Advanced" }, "prompts": { - "description": "प्रॉम्प्ट्स को बेहतर बनाना, कोड की व्याख्या करना और समस्याओं को ठीक करना जैसी त्वरित कार्रवाइयों के लिए उपयोग किए जाने वाले सहायक प्रॉम्प्ट्स को कॉन्फ़िगर करें। ये प्रॉम्प्ट्स Roo को सामान्य विकास कार्यों के लिए बेहतर सहायता प्रदान करने में मदद करते हैं।" + "description": "प्रॉम्प्ट्स को बेहतर बनाना, कोड की व्याख्या करना और समस्याओं को ठीक करना जैसी त्वरित कार्रवाइयों के लिए उपयोग किए जाने वाले सहायक प्रॉम्प्ट्स को कॉन्फ़िगर करें। ये प्रॉम्प्ट्स Roo को सामान्य विकास कार्यों के लिए बेहतर सहायता प्रदान करने में मदद करते हैं।", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "कोडबेस इंडेक्सिंग", @@ -148,7 +157,8 @@ "protected": { "label": "संरक्षित फाइलें शामिल करें", "description": "Roo को अनुमोदन की आवश्यकता के बिना संरक्षित फाइलें (.rooignore और .roo/ कॉन्फ़िगरेशन फाइलें जैसी) बनाने और संपादित करने की अनुमति दें।" - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "ब्राउज़र", @@ -157,7 +167,8 @@ "retry": { "label": "पुनः प्रयास", "description": "जब सर्वर त्रुटि प्रतिक्रिया देता है तो स्वचालित रूप से विफल API अनुरोधों को पुनः प्रयास करें", - "delayLabel": "अनुरोध को पुनः प्रयास करने से पहले विलंब" + "delayLabel": "अनुरोध को पुनः प्रयास करने से पहले विलंब", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "प्रश्न", "description": "कॉन्फ़िगर किए गए टाइमआउट के बाद अनुवर्ती प्रश्नों के लिए पहले सुझाए गए उत्तर को स्वचालित रूप से चुनें", - "timeoutLabel": "पहले उत्तर को स्वचालित रूप से चुनने से पहले प्रतीक्षा करने का समय" + "timeoutLabel": "पहले उत्तर को स्वचालित रूप से चुनने से पहले प्रतीक्षा करने का समय", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "निष्पादित करें", "description": "अनुमोदन की आवश्यकता के बिना स्वचालित रूप से अनुमत टर्मिनल कमांड निष्पादित करें", - "allowedCommands": "अनुमत स्वतः-निष्पादन कमांड", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "कमांड प्रीफिक्स जो स्वचालित रूप से निष्पादित किए जा सकते हैं जब \"निष्पादन ऑपरेशन हमेशा अनुमोदित करें\" सक्षम है। सभी कमांड की अनुमति देने के लिए * जोड़ें (सावधानी से उपयोग करें)।", - "deniedCommands": "अस्वीकृत कमांड", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "कमांड प्रीफिक्स जो स्वचालित रूप से अस्वीकार हो जाएंगे बिना अनुमोदन की आवश्यकता के। अनुमत कमांड के साथ संघर्ष के मामले में, सबसे लंबा प्रीफिक्स मैच प्राथमिकता लेता है। सभी कमांड अस्वीकार करने के लिए * जोड़ें।", "commandPlaceholder": "कमांड प्रीफिक्स दर्ज करें (उदा. 'git ')", "deniedCommandPlaceholder": "अस्वीकार करने के लिए कमांड प्रीफिक्स दर्ज करें (उदा. 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "अधिकतम अनुरोध", "description": "कार्य जारी रखने के लिए अनुमति मांगने से पहले स्वचालित रूप से इतने API अनुरोध करें।", - "unlimited": "असीमित" + "unlimited": "असीमित", + "label": "Max Requests" }, "selectOptionsFirst": "स्वतः-अनुमोदन सक्षम करने के लिए नीचे से कम से कम एक विकल्प चुनें" }, @@ -242,7 +261,8 @@ "hint": "नवीनतम मॉडल देखने के लिए कृपया सेटिंग्स को फिर से खोलें।", "loading": "मॉडल सूची अपडेट हो रही है...", "success": "मॉडल सूची सफलतापूर्वक अपडेट की गई!", - "error": "मॉडल सूची अपडेट करने में विफल। कृपया पुनः प्रयास करें।" + "error": "मॉडल सूची अपडेट करने में विफल। कृपया पुनः प्रयास करें।", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Requesty API कुंजी प्राप्त करें", "openRouterTransformsText": "संदर्भ आकार के लिए प्रॉम्प्ट और संदेश श्रृंखलाओं को संपीड़ित करें (OpenRouter ट्रांसफॉर्म)", @@ -409,7 +429,9 @@ "placeholder": "डिफ़ॉल्ट: claude", "maxTokensLabel": "अधिकतम आउटपुट टोकन", "maxTokensDescription": "Claude Code प्रतिक्रियाओं के लिए आउटपुट टोकन की अधिकतम संख्या। डिफ़ॉल्ट 8000 है।" - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "दूरस्थ ब्राउज़र कनेक्शन का उपयोग करें", "description": "रिमोट डीबगिंग सक्षम के साथ चल रहे Chrome ब्राउज़र से कनेक्ट करें (--remote-debugging-port=9222)।", - "urlPlaceholder": "कस्टम URL (उदा. http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "कनेक्शन का परीक्षण करें", "testingButton": "परीक्षण हो रहा है...", "instructions": "DevTools प्रोटोकॉल होस्ट पता दर्ज करें या Chrome स्थानीय इंस्टेंस स्वतः खोजने के लिए खाली छोड़ दें। टेस्ट कनेक्शन बटन यदि प्रदान किया गया है तो कस्टम URL का प्रयास करेगा, या यदि फ़ील्ड खाली है तो स्वतः खोज करेगा।" @@ -449,12 +474,14 @@ "sound": { "label": "ध्वनि प्रभाव सक्षम करें", "description": "जब सक्षम होता है, तो Roo सूचनाओं और घटनाओं के लिए ध्वनि प्रभाव चलाएगा।", - "volumeLabel": "वॉल्यूम" + "volumeLabel": "वॉल्यूम", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "टेक्स्ट-टू-स्पीच सक्षम करें", "description": "जब सक्षम होता है, तो Roo टेक्स्ट-टू-स्पीच का उपयोग करके अपनी प्रतिक्रियाओं को बोलकर पढ़ेगा।", - "speedLabel": "गति" + "speedLabel": "गति", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "जब संदर्भ इस प्रतिशत तक पहुंचता है, तो यह सभी प्रोफ़ाइल के लिए स्वचालित रूप से संघनित हो जाएगा जब तक कि उनकी कस्टम सेटिंग्स न हों", "profileDescription": "केवल इस प्रोफ़ाइल के लिए कस्टम सीमा (वैश्विक डिफ़ॉल्ट को ओवरराइड करता है)", "inheritDescription": "यह प्रोफ़ाइल वैश्विक डिफ़ॉल्ट सीमा को इनहेरिट करता है ({{threshold}}%)", - "usesGlobal": "(वैश्विक {{threshold}}% का उपयोग करता है)" + "usesGlobal": "(वैश्विक {{threshold}}% का उपयोग करता है)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "टूडू सूची टूल सक्षम करें", "description": "जब सक्षम हो, तो Roo कार्य प्रगति को ट्रैक करने के लिए टूडू सूचियाँ बना और प्रबंधित कर सकता है। यह जटिल कार्यों को प्रबंधनीय चरणों में व्यवस्थित करने में मदद करता है।" + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "कस्टम ARN का उपयोग करें..." }, "includeMaxOutputTokens": "अधिकतम आउटपुट टोकन शामिल करें", - "includeMaxOutputTokensDescription": "API अनुरोधों में अधिकतम आउटपुट टोकन पैरामीटर भेजें। कुछ प्रदाता इसका समर्थन नहीं कर सकते हैं।" + "includeMaxOutputTokensDescription": "API अनुरोधों में अधिकतम आउटपुट टोकन पैरामीटर भेजें। कुछ प्रदाता इसका समर्थन नहीं कर सकते हैं।", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/id/prompts.json b/webview-ui/src/i18n/locales/id/prompts.json index 52736ad69b..726efb194f 100644 --- a/webview-ui/src/i18n/locales/id/prompts.json +++ b/webview-ui/src/i18n/locales/id/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Mulai Tugas Baru", "description": "Mulai tugas baru dengan input pengguna. Tersedia di Command Palette." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/id/settings.json b/webview-ui/src/i18n/locales/id/settings.json index d54db7122e..64dc5b6bfd 100644 --- a/webview-ui/src/i18n/locales/id/settings.json +++ b/webview-ui/src/i18n/locales/id/settings.json @@ -12,7 +12,11 @@ "title": "Pengaturan", "saveButtonTooltip": "Simpan perubahan", "nothingChangedTooltip": "Tidak ada yang berubah", - "doneButtonTooltip": "Buang perubahan yang belum disimpan dan tutup panel pengaturan" + "doneButtonTooltip": "Buang perubahan yang belum disimpan dan tutup panel pengaturan", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Perubahan Belum Disimpan", @@ -31,10 +35,15 @@ "prompts": "Prompt", "experimental": "Eksperimental", "language": "Bahasa", - "about": "Tentang Roo Code" + "about": "Tentang Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "Konfigurasi support prompt yang digunakan untuk aksi cepat seperti meningkatkan prompt, menjelaskan kode, dan memperbaiki masalah. Prompt ini membantu Roo memberikan bantuan yang lebih baik untuk tugas pengembangan umum." + "description": "Konfigurasi support prompt yang digunakan untuk aksi cepat seperti meningkatkan prompt, menjelaskan kode, dan memperbaiki masalah. Prompt ini membantu Roo memberikan bantuan yang lebih baik untuk tugas pengembangan umum.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Pengindeksan Codebase", @@ -148,7 +157,8 @@ "protected": { "label": "Sertakan file yang dilindungi", "description": "Izinkan Roo membuat dan mengedit file yang dilindungi (seperti .rooignore dan file konfigurasi .roo/) tanpa memerlukan persetujuan." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Browser", @@ -157,7 +167,8 @@ "retry": { "label": "Coba Lagi", "description": "Secara otomatis mencoba ulang permintaan API yang gagal ketika server mengembalikan respons error", - "delayLabel": "Delay sebelum mencoba ulang permintaan" + "delayLabel": "Delay sebelum mencoba ulang permintaan", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Pertanyaan", "description": "Secara otomatis memilih jawaban pertama yang disarankan untuk pertanyaan lanjutan setelah batas waktu yang dikonfigurasi", - "timeoutLabel": "Waktu tunggu sebelum otomatis memilih jawaban pertama" + "timeoutLabel": "Waktu tunggu sebelum otomatis memilih jawaban pertama", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Eksekusi", "description": "Secara otomatis mengeksekusi perintah terminal yang diizinkan tanpa memerlukan persetujuan", - "allowedCommands": "Perintah Auto-Execute yang Diizinkan", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Prefix perintah yang dapat di-auto-execute ketika \"Selalu setujui operasi eksekusi\" diaktifkan. Tambahkan * untuk mengizinkan semua perintah (gunakan dengan hati-hati).", - "deniedCommands": "Perintah yang ditolak", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Prefix perintah yang akan ditolak secara otomatis tanpa memerlukan persetujuan. Dalam kasus konflik dengan perintah yang diizinkan, pencocokan prefix terpanjang diprioritaskan. Tambahkan * untuk menolak semua perintah.", "commandPlaceholder": "Masukkan prefix perintah (misalnya, 'git ')", "deniedCommandPlaceholder": "Masukkan prefix perintah untuk ditolak (misalnya, 'rm -rf')", @@ -199,7 +217,8 @@ "apiRequestLimit": { "title": "Permintaan Maks", "description": "Secara otomatis membuat sejumlah permintaan API ini sebelum meminta persetujuan untuk melanjutkan tugas.", - "unlimited": "Tidak terbatas" + "unlimited": "Tidak terbatas", + "label": "Max Requests" }, "selectOptionsFirst": "Pilih setidaknya satu opsi di bawah ini untuk mengaktifkan persetujuan otomatis" }, @@ -246,7 +265,8 @@ "hint": "Silakan buka kembali pengaturan untuk melihat model terbaru.", "loading": "Merefresh daftar model...", "success": "Daftar model berhasil direfresh!", - "error": "Gagal merefresh daftar model. Silakan coba lagi." + "error": "Gagal merefresh daftar model. Silakan coba lagi.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Dapatkan Requesty API Key", "openRouterTransformsText": "Kompres prompt dan rantai pesan ke ukuran konteks (OpenRouter Transforms)", @@ -413,7 +433,9 @@ "placeholder": "Default: claude", "maxTokensLabel": "Token Output Maks", "maxTokensDescription": "Jumlah maksimum token output untuk respons Claude Code. Default adalah 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -437,7 +459,10 @@ "remote": { "label": "Gunakan koneksi browser remote", "description": "Hubungkan ke browser Chrome yang berjalan dengan remote debugging diaktifkan (--remote-debugging-port=9222).", - "urlPlaceholder": "URL Kustom (misalnya, http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Test Koneksi", "testingButton": "Testing...", "instructions": "Masukkan alamat host DevTools Protocol atau biarkan kosong untuk auto-discover instance Chrome lokal. Tombol Test Koneksi akan mencoba URL kustom jika disediakan, atau auto-discover jika field kosong." @@ -453,12 +478,14 @@ "sound": { "label": "Aktifkan efek suara", "description": "Ketika diaktifkan, Roo akan memutar efek suara untuk notifikasi dan event.", - "volumeLabel": "Volume" + "volumeLabel": "Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Aktifkan text-to-speech", "description": "Ketika diaktifkan, Roo akan membacakan responnya menggunakan text-to-speech.", - "speedLabel": "Kecepatan" + "speedLabel": "Kecepatan", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -507,7 +534,8 @@ "defaultDescription": "Ketika konteks mencapai persentase ini, akan secara otomatis dikondensasi untuk semua profil kecuali mereka memiliki pengaturan kustom", "profileDescription": "Ambang batas kustom untuk profil ini saja (menimpa default global)", "inheritDescription": "Profil ini mewarisi ambang batas default global ({{threshold}}%)", - "usesGlobal": "(menggunakan global {{threshold}}%)" + "usesGlobal": "(menggunakan global {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" }, "openTabs": { "label": "Batas konteks tab terbuka", @@ -618,6 +646,10 @@ "todoList": { "label": "Aktifkan alat daftar tugas", "description": "Saat diaktifkan, Roo dapat membuat dan mengelola daftar tugas untuk melacak kemajuan tugas. Ini membantu mengatur tugas kompleks menjadi langkah-langkah yang dapat dikelola." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -784,5 +816,8 @@ "useCustomArn": "Gunakan ARN kustom..." }, "includeMaxOutputTokens": "Sertakan token output maksimum", - "includeMaxOutputTokensDescription": "Kirim parameter token output maksimum dalam permintaan API. Beberapa provider mungkin tidak mendukung ini." + "includeMaxOutputTokensDescription": "Kirim parameter token output maksimum dalam permintaan API. Beberapa provider mungkin tidak mendukung ini.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/it/prompts.json b/webview-ui/src/i18n/locales/it/prompts.json index e6356f828b..e6e5a6e726 100644 --- a/webview-ui/src/i18n/locales/it/prompts.json +++ b/webview-ui/src/i18n/locales/it/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Avvia nuova attività", "description": "Avvia una nuova attività con il tuo input. Disponibile nella palette dei comandi." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json index ed77701914..3ad6bbaf3b 100644 --- a/webview-ui/src/i18n/locales/it/settings.json +++ b/webview-ui/src/i18n/locales/it/settings.json @@ -12,7 +12,11 @@ "title": "Impostazioni", "saveButtonTooltip": "Salva modifiche", "nothingChangedTooltip": "Nessuna modifica", - "doneButtonTooltip": "Scarta le modifiche non salvate e chiudi il pannello delle impostazioni" + "doneButtonTooltip": "Scarta le modifiche non salvate e chiudi il pannello delle impostazioni", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Modifiche non salvate", @@ -31,10 +35,15 @@ "prompts": "Prompt", "experimental": "Sperimentale", "language": "Lingua", - "about": "Informazioni su Roo Code" + "about": "Informazioni su Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "Configura i prompt di supporto utilizzati per azioni rapide come il miglioramento dei prompt, la spiegazione del codice e la risoluzione dei problemi. Questi prompt aiutano Roo a fornire una migliore assistenza per le attività di sviluppo comuni." + "description": "Configura i prompt di supporto utilizzati per azioni rapide come il miglioramento dei prompt, la spiegazione del codice e la risoluzione dei problemi. Questi prompt aiutano Roo a fornire una migliore assistenza per le attività di sviluppo comuni.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Indicizzazione del codice", @@ -148,7 +157,8 @@ "protected": { "label": "Includi file protetti", "description": "Permetti a Roo di creare e modificare file protetti (come .rooignore e file di configurazione .roo/) senza richiedere approvazione." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Browser", @@ -157,7 +167,8 @@ "retry": { "label": "Riprova", "description": "Riprova automaticamente le richieste API fallite quando il server restituisce una risposta di errore", - "delayLabel": "Ritardo prima di riprovare la richiesta" + "delayLabel": "Ritardo prima di riprovare la richiesta", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Domanda", "description": "Seleziona automaticamente la prima risposta suggerita per le domande di follow-up dopo il timeout configurato", - "timeoutLabel": "Tempo di attesa prima di selezionare automaticamente la prima risposta" + "timeoutLabel": "Tempo di attesa prima di selezionare automaticamente la prima risposta", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Esegui", "description": "Esegui automaticamente i comandi del terminale consentiti senza richiedere approvazione", - "allowedCommands": "Comandi di auto-esecuzione consentiti", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Prefissi di comando che possono essere auto-eseguiti quando \"Approva sempre operazioni di esecuzione\" è abilitato. Aggiungi * per consentire tutti i comandi (usare con cautela).", - "deniedCommands": "Comandi negati", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Prefissi di comandi che verranno automaticamente negati senza richiedere approvazione. In caso di conflitti con comandi consentiti, la corrispondenza del prefisso più lungo ha la precedenza. Aggiungi * per negare tutti i comandi.", "commandPlaceholder": "Inserisci prefisso comando (es. 'git ')", "deniedCommandPlaceholder": "Inserisci prefisso comando da negare (es. 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Richieste massime", "description": "Esegui automaticamente questo numero di richieste API prima di chiedere l'approvazione per continuare con l'attività.", - "unlimited": "Illimitato" + "unlimited": "Illimitato", + "label": "Max Requests" }, "selectOptionsFirst": "Seleziona almeno un'opzione qui sotto per abilitare l'approvazione automatica" }, @@ -242,7 +261,8 @@ "hint": "Riapri le impostazioni per vedere i modelli più recenti.", "loading": "Aggiornamento dell'elenco dei modelli...", "success": "Elenco dei modelli aggiornato con successo!", - "error": "Impossibile aggiornare l'elenco dei modelli. Riprova." + "error": "Impossibile aggiornare l'elenco dei modelli. Riprova.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Ottieni chiave API Requesty", "openRouterTransformsText": "Comprimi prompt e catene di messaggi alla dimensione del contesto (Trasformazioni OpenRouter)", @@ -409,7 +429,9 @@ "placeholder": "Predefinito: claude", "maxTokensLabel": "Token di output massimi", "maxTokensDescription": "Numero massimo di token di output per le risposte di Claude Code. Il valore predefinito è 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Usa connessione browser remoto", "description": "Connettiti a un browser Chrome in esecuzione con debug remoto abilitato (--remote-debugging-port=9222).", - "urlPlaceholder": "URL personalizzato (es. http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Testa connessione", "testingButton": "Test in corso...", "instructions": "Inserisci l'indirizzo host del protocollo DevTools o lascia vuoto per scoprire automaticamente le istanze Chrome locali. Il pulsante Test Connessione proverà l'URL personalizzato se fornito, o scoprirà automaticamente se il campo è vuoto." @@ -449,12 +474,14 @@ "sound": { "label": "Abilita effetti sonori", "description": "Quando abilitato, Roo riprodurrà effetti sonori per notifiche ed eventi.", - "volumeLabel": "Volume" + "volumeLabel": "Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Abilita sintesi vocale", "description": "Quando abilitato, Roo leggerà ad alta voce le sue risposte utilizzando la sintesi vocale.", - "speedLabel": "Velocità" + "speedLabel": "Velocità", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "Quando il contesto raggiunge questa percentuale, verrà automaticamente condensato per tutti i profili a meno che non abbiano impostazioni personalizzate", "profileDescription": "Soglia personalizzata solo per questo profilo (sovrascrive il predefinito globale)", "inheritDescription": "Questo profilo eredita la soglia predefinita globale ({{threshold}}%)", - "usesGlobal": "(usa globale {{threshold}}%)" + "usesGlobal": "(usa globale {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "Abilita strumento lista di cose da fare", "description": "Quando abilitato, Roo può creare e gestire liste di cose da fare per tracciare il progresso delle attività. Questo aiuta a organizzare attività complesse in passaggi gestibili." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "Usa ARN personalizzato..." }, "includeMaxOutputTokens": "Includi token di output massimi", - "includeMaxOutputTokensDescription": "Invia il parametro dei token di output massimi nelle richieste API. Alcuni provider potrebbero non supportarlo." + "includeMaxOutputTokensDescription": "Invia il parametro dei token di output massimi nelle richieste API. Alcuni provider potrebbero non supportarlo.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/ja/prompts.json b/webview-ui/src/i18n/locales/ja/prompts.json index e9f108f615..d416820ce3 100644 --- a/webview-ui/src/i18n/locales/ja/prompts.json +++ b/webview-ui/src/i18n/locales/ja/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "新しいタスクを開始", "description": "入力内容で新しいタスクを開始できます。コマンドパレットから利用できます。" + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json index efa020b320..487358f6b4 100644 --- a/webview-ui/src/i18n/locales/ja/settings.json +++ b/webview-ui/src/i18n/locales/ja/settings.json @@ -12,7 +12,11 @@ "title": "設定", "saveButtonTooltip": "変更を保存", "nothingChangedTooltip": "変更なし", - "doneButtonTooltip": "未保存の変更を破棄して設定パネルを閉じる" + "doneButtonTooltip": "未保存の変更を破棄して設定パネルを閉じる", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "未保存の変更", @@ -31,10 +35,15 @@ "prompts": "プロンプト", "experimental": "実験的", "language": "言語", - "about": "Roo Codeについて" + "about": "Roo Codeについて", + "advanced": "Advanced" }, "prompts": { - "description": "プロンプトの強化、コードの説明、問題の修正などの迅速なアクションに使用されるサポートプロンプトを設定します。これらのプロンプトは、Rooが一般的な開発タスクでより良いサポートを提供するのに役立ちます。" + "description": "プロンプトの強化、コードの説明、問題の修正などの迅速なアクションに使用されるサポートプロンプトを設定します。これらのプロンプトは、Rooが一般的な開発タスクでより良いサポートを提供するのに役立ちます。", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "コードベースのインデックス作成", @@ -148,7 +157,8 @@ "protected": { "label": "保護されたファイルを含める", "description": "Rooが保護されたファイル(.rooignoreや.roo/設定ファイルなど)を承認なしで作成・編集することを許可します。" - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "ブラウザ", @@ -157,7 +167,8 @@ "retry": { "label": "再試行", "description": "サーバーがエラーレスポンスを返した場合、自動的に失敗したAPIリクエストを再試行", - "delayLabel": "リクエスト再試行前の遅延" + "delayLabel": "リクエスト再試行前の遅延", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "質問", "description": "設定された時間が経過すると、フォローアップ質問の最初の提案回答を自動的に選択します", - "timeoutLabel": "最初の回答を自動選択するまでの待機時間" + "timeoutLabel": "最初の回答を自動選択するまでの待機時間", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "実行", "description": "承認なしで自動的に許可されたターミナルコマンドを実行", - "allowedCommands": "許可された自動実行コマンド", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "「実行操作を常に承認」が有効な場合に自動実行できるコマンドプレフィックス。すべてのコマンドを許可するには * を追加します(注意して使用してください)。", - "deniedCommands": "拒否されたコマンド", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "承認を求めることなく自動的に拒否されるコマンドプレフィックス。許可されたコマンドとの競合がある場合、最長プレフィックスマッチが優先されます。すべてのコマンドを拒否するには * を追加します。", "commandPlaceholder": "コマンドプレフィックスを入力(例:'git ')", "deniedCommandPlaceholder": "拒否するコマンドプレフィックスを入力(例:'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "最大リクエスト数", "description": "タスクを続行するための承認を求める前に、自動的にこの数のAPIリクエストを行います。", - "unlimited": "無制限" + "unlimited": "無制限", + "label": "Max Requests" }, "selectOptionsFirst": "自動承認を有効にするには、以下のオプションを少なくとも1つ選択してください" }, @@ -242,7 +261,8 @@ "hint": "最新のモデルを表示するには設定を再度開いてください。", "loading": "モデルリストを更新中...", "success": "モデルリストが正常に更新されました!", - "error": "モデルリストの更新に失敗しました。もう一度お試しください。" + "error": "モデルリストの更新に失敗しました。もう一度お試しください。", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Requesty APIキーを取得", "openRouterTransformsText": "プロンプトとメッセージチェーンをコンテキストサイズに圧縮 (OpenRouter Transforms)", @@ -409,7 +429,9 @@ "placeholder": "デフォルト:claude", "maxTokensLabel": "最大出力トークン", "maxTokensDescription": "Claude Codeレスポンスの最大出力トークン数。デフォルトは8000です。" - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "リモートブラウザ接続を使用", "description": "リモートデバッグを有効にして実行しているChromeブラウザに接続します(--remote-debugging-port=9222)。", - "urlPlaceholder": "カスタムURL(例:http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "接続テスト", "testingButton": "テスト中...", "instructions": "DevToolsプロトコルホストアドレスを入力するか、Chromeのローカルインスタンスを自動検出するために空のままにします。接続テストボタンは、提供されている場合はカスタムURLを試み、フィールドが空の場合は自動検出します。" @@ -449,12 +474,14 @@ "sound": { "label": "サウンドエフェクトを有効化", "description": "有効にすると、Rooは通知やイベントのためにサウンドエフェクトを再生します。", - "volumeLabel": "音量" + "volumeLabel": "音量", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "音声合成を有効化", "description": "有効にすると、Rooは音声合成を使用して応答を音声で読み上げます。", - "speedLabel": "速度" + "speedLabel": "速度", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "コンテキストがこの割合に達すると、カスタム設定がない限り、すべてのプロファイルで自動的に圧縮されます", "profileDescription": "このプロファイルのみのカスタムしきい値(グローバルデフォルトを上書き)", "inheritDescription": "このプロファイルはグローバルデフォルトしきい値を継承します({{threshold}}%)", - "usesGlobal": "(グローバル {{threshold}}% を使用)" + "usesGlobal": "(グローバル {{threshold}}% を使用)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "ToDoリストツールを有効にする", "description": "有効にすると、Rooはタスクの進捗を追跡するためのToDoリストを作成・管理できます。これにより、複雑なタスクを管理しやすいステップに整理できます。" + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "カスタム ARN を使用..." }, "includeMaxOutputTokens": "最大出力トークンを含める", - "includeMaxOutputTokensDescription": "APIリクエストで最大出力トークンパラメータを送信します。一部のプロバイダーはこれをサポートしていない場合があります。" + "includeMaxOutputTokensDescription": "APIリクエストで最大出力トークンパラメータを送信します。一部のプロバイダーはこれをサポートしていない場合があります。", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/ko/prompts.json b/webview-ui/src/i18n/locales/ko/prompts.json index 688ddd18a9..9ea6b9cb78 100644 --- a/webview-ui/src/i18n/locales/ko/prompts.json +++ b/webview-ui/src/i18n/locales/ko/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "새 작업 시작", "description": "입력한 내용으로 새 작업을 시작할 수 있습니다. 명령 팔레트에서 이용 가능합니다." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json index 39b8fd6e33..fc3dfae0bd 100644 --- a/webview-ui/src/i18n/locales/ko/settings.json +++ b/webview-ui/src/i18n/locales/ko/settings.json @@ -12,7 +12,11 @@ "title": "설정", "saveButtonTooltip": "변경 사항 저장", "nothingChangedTooltip": "변경 사항 없음", - "doneButtonTooltip": "저장되지 않은 변경 사항을 버리고 설정 패널 닫기" + "doneButtonTooltip": "저장되지 않은 변경 사항을 버리고 설정 패널 닫기", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "저장되지 않은 변경 사항", @@ -31,10 +35,15 @@ "prompts": "프롬프트", "experimental": "실험적", "language": "언어", - "about": "Roo Code 정보" + "about": "Roo Code 정보", + "advanced": "Advanced" }, "prompts": { - "description": "프롬프트 향상, 코드 설명, 문제 해결과 같은 빠른 작업에 사용되는 지원 프롬프트를 구성합니다. 이러한 프롬프트는 Roo가 일반적인 개발 작업에 대해 더 나은 지원을 제공하는 데 도움이 됩니다." + "description": "프롬프트 향상, 코드 설명, 문제 해결과 같은 빠른 작업에 사용되는 지원 프롬프트를 구성합니다. 이러한 프롬프트는 Roo가 일반적인 개발 작업에 대해 더 나은 지원을 제공하는 데 도움이 됩니다.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "코드베이스 인덱싱", @@ -148,7 +157,8 @@ "protected": { "label": "보호된 파일 포함", "description": "Roo가 보호된 파일(.rooignore 및 .roo/ 구성 파일 등)을 승인 없이 생성하고 편집할 수 있도록 허용합니다." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "브라우저", @@ -157,7 +167,8 @@ "retry": { "label": "재시도", "description": "서버가 오류 응답을 반환할 때 자동으로 실패한 API 요청 재시도", - "delayLabel": "요청 재시도 전 지연" + "delayLabel": "요청 재시도 전 지연", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "질문", "description": "설정된 시간이 지나면 후속 질문에 대한 첫 번째 제안 답변을 자동으로 선택합니다", - "timeoutLabel": "첫 번째 답변을 자동 선택하기 전 대기 시간" + "timeoutLabel": "첫 번째 답변을 자동 선택하기 전 대기 시간", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "실행", "description": "승인 없이 자동으로 허용된 터미널 명령 실행", - "allowedCommands": "허용된 자동 실행 명령", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "\"실행 작업 항상 승인\"이 활성화되었을 때 자동 실행될 수 있는 명령 접두사. 모든 명령을 허용하려면 * 추가(주의해서 사용)", - "deniedCommands": "거부된 명령", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "승인을 요청하지 않고 자동으로 거부될 명령 접두사. 허용된 명령과 충돌하는 경우 가장 긴 접두사 일치가 우선됩니다. 모든 명령을 거부하려면 * 추가", "commandPlaceholder": "명령 접두사 입력(예: 'git ')", "deniedCommandPlaceholder": "거부할 명령 접두사 입력(예: 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "최대 요청 수", "description": "작업을 계속하기 위한 승인을 요청하기 전에 자동으로 이 수의 API 요청을 수행합니다.", - "unlimited": "무제한" + "unlimited": "무제한", + "label": "Max Requests" }, "selectOptionsFirst": "자동 승인을 활성화하려면 아래에서 하나 이상의 옵션을 선택하세요" }, @@ -242,7 +261,8 @@ "hint": "최신 모델을 보려면 설정을 다시 열어주세요.", "loading": "모델 목록 새로고침 중...", "success": "모델 목록이 성공적으로 새로고침되었습니다!", - "error": "모델 목록 새로고침에 실패했습니다. 다시 시도해 주세요." + "error": "모델 목록 새로고침에 실패했습니다. 다시 시도해 주세요.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Requesty API 키 받기", "openRouterTransformsText": "프롬프트와 메시지 체인을 컨텍스트 크기로 압축 (OpenRouter Transforms)", @@ -409,7 +429,9 @@ "placeholder": "기본값: claude", "maxTokensLabel": "최대 출력 토큰", "maxTokensDescription": "Claude Code 응답의 최대 출력 토큰 수. 기본값은 8000입니다." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "원격 브라우저 연결 사용", "description": "원격 디버깅이 활성화된 Chrome 브라우저에 연결합니다(--remote-debugging-port=9222).", - "urlPlaceholder": "사용자 정의 URL(예: http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "연결 테스트", "testingButton": "테스트 중...", "instructions": "DevTools 프로토콜 호스트 주소를 입력하거나 Chrome 로컬 인스턴스를 자동으로 발견하기 위해 비워두세요. 연결 테스트 버튼은 제공된 경우 사용자 정의 URL을 시도하거나, 필드가 비어 있으면 자동으로 발견합니다." @@ -449,12 +474,14 @@ "sound": { "label": "사운드 효과 활성화", "description": "활성화되면 Roo는 알림 및 이벤트에 대한 사운드 효과를 재생합니다.", - "volumeLabel": "볼륨" + "volumeLabel": "볼륨", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "음성 합성 활성화", "description": "활성화되면 Roo는 음성 합성을 사용하여 응답을 소리내어 읽습니다.", - "speedLabel": "속도" + "speedLabel": "속도", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "컨텍스트가 이 비율에 도달하면 사용자 정의 설정이 없는 한 모든 프로필에 대해 자동으로 압축됩니다", "profileDescription": "이 프로필만을 위한 사용자 정의 임계값 (글로벌 기본값 재정의)", "inheritDescription": "이 프로필은 글로벌 기본 임계값을 상속합니다 ({{threshold}}%)", - "usesGlobal": "(글로벌 {{threshold}}% 사용)" + "usesGlobal": "(글로벌 {{threshold}}% 사용)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "할 일 목록 도구 활성화", "description": "활성화하면 Roo가 작업 진행 상황을 추적하기 위한 할 일 목록을 만들고 관리할 수 있습니다. 이는 복잡한 작업을 관리 가능한 단계로 구성하는 데 도움이 됩니다." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "사용자 지정 ARN 사용..." }, "includeMaxOutputTokens": "최대 출력 토큰 포함", - "includeMaxOutputTokensDescription": "API 요청에서 최대 출력 토큰 매개변수를 전송합니다. 일부 제공업체는 이를 지원하지 않을 수 있습니다." + "includeMaxOutputTokensDescription": "API 요청에서 최대 출력 토큰 매개변수를 전송합니다. 일부 제공업체는 이를 지원하지 않을 수 있습니다.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/nl/prompts.json b/webview-ui/src/i18n/locales/nl/prompts.json index 7c8ba28605..eaee2ecf1b 100644 --- a/webview-ui/src/i18n/locales/nl/prompts.json +++ b/webview-ui/src/i18n/locales/nl/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Nieuwe taak starten", "description": "Start een nieuwe taak met gebruikersinvoer. Beschikbaar via de Command Palette." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/nl/settings.json b/webview-ui/src/i18n/locales/nl/settings.json index d7eba61045..120cc2404d 100644 --- a/webview-ui/src/i18n/locales/nl/settings.json +++ b/webview-ui/src/i18n/locales/nl/settings.json @@ -12,7 +12,11 @@ "title": "Instellingen", "saveButtonTooltip": "Wijzigingen opslaan", "nothingChangedTooltip": "Niets gewijzigd", - "doneButtonTooltip": "Niet-opgeslagen wijzigingen negeren en instellingen sluiten" + "doneButtonTooltip": "Niet-opgeslagen wijzigingen negeren en instellingen sluiten", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Niet-opgeslagen wijzigingen", @@ -31,10 +35,15 @@ "prompts": "Prompts", "experimental": "Experimenteel", "language": "Taal", - "about": "Over Roo Code" + "about": "Over Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "Configureer ondersteuningsprompts die worden gebruikt voor snelle acties zoals het verbeteren van prompts, het uitleggen van code en het oplossen van problemen. Deze prompts helpen Roo om betere ondersteuning te bieden voor veelvoorkomende ontwikkelingstaken." + "description": "Configureer ondersteuningsprompts die worden gebruikt voor snelle acties zoals het verbeteren van prompts, het uitleggen van code en het oplossen van problemen. Deze prompts helpen Roo om betere ondersteuning te bieden voor veelvoorkomende ontwikkelingstaken.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Codebase indexering", @@ -148,7 +157,8 @@ "protected": { "label": "Inclusief beschermde bestanden", "description": "Sta Roo toe om beschermde bestanden (zoals .rooignore en .roo/ configuratiebestanden) aan te maken en te bewerken zonder goedkeuring." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Browser", @@ -157,7 +167,8 @@ "retry": { "label": "Opnieuw proberen", "description": "Automatisch mislukte API-verzoeken opnieuw proberen wanneer de server een foutmelding geeft", - "delayLabel": "Vertraging voordat het verzoek opnieuw wordt geprobeerd" + "delayLabel": "Vertraging voordat het verzoek opnieuw wordt geprobeerd", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Vraag", "description": "Selecteer automatisch het eerste voorgestelde antwoord voor vervolgvragen na de geconfigureerde time-out", - "timeoutLabel": "Wachttijd voordat het eerste antwoord automatisch wordt geselecteerd" + "timeoutLabel": "Wachttijd voordat het eerste antwoord automatisch wordt geselecteerd", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Uitvoeren", "description": "Automatisch toegestane terminalcommando's uitvoeren zonder goedkeuring", - "allowedCommands": "Toegestane automatisch uit te voeren commando's", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Commando-prefixen die automatisch kunnen worden uitgevoerd als 'Altijd goedkeuren voor uitvoeren' is ingeschakeld. Voeg * toe om alle commando's toe te staan (gebruik met voorzichtigheid).", - "deniedCommands": "Geweigerde commando's", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Commando-prefixen die automatisch worden geweigerd zonder om goedkeuring te vragen. Bij conflicten met toegestane commando's heeft de langste prefixovereenkomst voorrang. Voeg * toe om alle commando's te weigeren.", "commandPlaceholder": "Voer commando-prefix in (bijv. 'git ')", "deniedCommandPlaceholder": "Voer te weigeren commando-prefix in (bijv. 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Maximale verzoeken", "description": "Voer automatisch dit aantal API-verzoeken uit voordat om goedkeuring wordt gevraagd om door te gaan met de taak.", - "unlimited": "Onbeperkt" + "unlimited": "Onbeperkt", + "label": "Max Requests" }, "selectOptionsFirst": "Selecteer ten minste één optie hieronder om automatische goedkeuring in te schakelen" }, @@ -242,7 +261,8 @@ "hint": "Open de instellingen opnieuw om de nieuwste modellen te zien.", "loading": "Modellenlijst wordt vernieuwd...", "success": "Modellenlijst succesvol vernieuwd!", - "error": "Kan modellenlijst niet vernieuwen. Probeer het opnieuw." + "error": "Kan modellenlijst niet vernieuwen. Probeer het opnieuw.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Requesty API-sleutel ophalen", "openRouterTransformsText": "Comprimeer prompts en berichtreeksen tot de contextgrootte (OpenRouter Transforms)", @@ -409,7 +429,9 @@ "placeholder": "Standaard: claude", "maxTokensLabel": "Max Output Tokens", "maxTokensDescription": "Maximaal aantal output-tokens voor Claude Code-reacties. Standaard is 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Gebruik externe browserverbinding", "description": "Verbind met een Chrome-browser die draait met remote debugging ingeschakeld (--remote-debugging-port=9222).", - "urlPlaceholder": "Aangepaste URL (bijv. http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Verbinding testen", "testingButton": "Bezig met testen...", "instructions": "Voer het DevTools Protocol hostadres in of laat leeg om lokale Chrome-instanties automatisch te detecteren. De knop Verbinding testen probeert de aangepaste URL als opgegeven, of detecteert automatisch als het veld leeg is." @@ -449,12 +474,14 @@ "sound": { "label": "Geluidseffecten inschakelen", "description": "Indien ingeschakeld, speelt Roo geluidseffecten af voor meldingen en gebeurtenissen.", - "volumeLabel": "Volume" + "volumeLabel": "Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Tekst-naar-spraak inschakelen", "description": "Indien ingeschakeld, leest Roo zijn antwoorden hardop voor via tekst-naar-spraak.", - "speedLabel": "Snelheid" + "speedLabel": "Snelheid", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "Wanneer de context dit percentage bereikt, wordt het automatisch gecomprimeerd voor alle profielen tenzij ze aangepaste instellingen hebben", "profileDescription": "Aangepaste drempelwaarde alleen voor dit profiel (overschrijft globale standaard)", "inheritDescription": "Dit profiel erft de globale standaard drempelwaarde ({{threshold}}%)", - "usesGlobal": "(gebruikt globaal {{threshold}}%)" + "usesGlobal": "(gebruikt globaal {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "Takenlijst-tool inschakelen", "description": "Wanneer ingeschakeld, kan Roo takenlijsten maken en beheren om de voortgang van taken bij te houden. Dit helpt complexe taken te organiseren in beheersbare stappen." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "Aangepaste ARN gebruiken..." }, "includeMaxOutputTokens": "Maximale output tokens opnemen", - "includeMaxOutputTokensDescription": "Stuur maximale output tokens parameter in API-verzoeken. Sommige providers ondersteunen dit mogelijk niet." + "includeMaxOutputTokensDescription": "Stuur maximale output tokens parameter in API-verzoeken. Sommige providers ondersteunen dit mogelijk niet.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/pl/prompts.json b/webview-ui/src/i18n/locales/pl/prompts.json index c627f3a84d..4f9e577b45 100644 --- a/webview-ui/src/i18n/locales/pl/prompts.json +++ b/webview-ui/src/i18n/locales/pl/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Rozpocznij nowe zadanie", "description": "Rozpocznij nowe zadanie z wprowadzonymi danymi. Dostępne w palecie poleceń." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json index 960c59724b..99572feb6f 100644 --- a/webview-ui/src/i18n/locales/pl/settings.json +++ b/webview-ui/src/i18n/locales/pl/settings.json @@ -12,7 +12,11 @@ "title": "Ustawienia", "saveButtonTooltip": "Zapisz zmiany", "nothingChangedTooltip": "Nic się nie zmieniło", - "doneButtonTooltip": "Odrzuć niezapisane zmiany i zamknij panel ustawień" + "doneButtonTooltip": "Odrzuć niezapisane zmiany i zamknij panel ustawień", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Niezapisane zmiany", @@ -31,10 +35,15 @@ "prompts": "Podpowiedzi", "experimental": "Eksperymentalne", "language": "Język", - "about": "O Roo Code" + "about": "O Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "Skonfiguruj podpowiedzi wsparcia używane do szybkich działań, takich jak ulepszanie podpowiedzi, wyjaśnianie kodu i rozwiązywanie problemów. Te podpowiedzi pomagają Roo zapewnić lepsze wsparcie dla typowych zadań programistycznych." + "description": "Skonfiguruj podpowiedzi wsparcia używane do szybkich działań, takich jak ulepszanie podpowiedzi, wyjaśnianie kodu i rozwiązywanie problemów. Te podpowiedzi pomagają Roo zapewnić lepsze wsparcie dla typowych zadań programistycznych.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Indeksowanie kodu", @@ -148,7 +157,8 @@ "protected": { "label": "Uwzględnij pliki chronione", "description": "Pozwól Roo na tworzenie i edycję plików chronionych (takich jak .rooignore i pliki konfiguracyjne .roo/) bez konieczności zatwierdzania." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Przeglądarka", @@ -157,7 +167,8 @@ "retry": { "label": "Ponów", "description": "Automatycznie ponawiaj nieudane żądania API, gdy serwer zwraca odpowiedź z błędem", - "delayLabel": "Opóźnienie przed ponowieniem żądania" + "delayLabel": "Opóźnienie przed ponowieniem żądania", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Pytanie", "description": "Automatycznie wybierz pierwszą sugerowaną odpowiedź na pytania uzupełniające po skonfigurowanym limicie czasu", - "timeoutLabel": "Czas oczekiwania przed automatycznym wybraniem pierwszej odpowiedzi" + "timeoutLabel": "Czas oczekiwania przed automatycznym wybraniem pierwszej odpowiedzi", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Wykonaj", "description": "Automatycznie wykonuj dozwolone polecenia terminala bez konieczności zatwierdzania", - "allowedCommands": "Dozwolone polecenia auto-wykonania", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Prefiksy poleceń, które mogą być automatycznie wykonywane, gdy \"Zawsze zatwierdzaj operacje wykonania\" jest włączone. Dodaj * aby zezwolić na wszystkie polecenia (używaj z ostrożnością).", - "deniedCommands": "Odrzucone polecenia", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Prefiksy poleceń, które będą automatycznie odrzucane bez pytania o zatwierdzenie. W przypadku konfliktów z dozwolonymi poleceniami, najdłuższe dopasowanie prefiksu ma pierwszeństwo. Dodaj * aby odrzucić wszystkie polecenia.", "commandPlaceholder": "Wprowadź prefiks polecenia (np. 'git ')", "deniedCommandPlaceholder": "Wprowadź prefiks polecenia do odrzucenia (np. 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Maksymalna liczba żądań", "description": "Automatycznie wykonaj tyle żądań API przed poproszeniem o zgodę na kontynuowanie zadania.", - "unlimited": "Bez limitu" + "unlimited": "Bez limitu", + "label": "Max Requests" }, "selectOptionsFirst": "Wybierz co najmniej jedną opcję poniżej, aby włączyć automatyczne zatwierdzanie" }, @@ -242,7 +261,8 @@ "hint": "Proszę ponownie otworzyć ustawienia, aby zobaczyć najnowsze modele.", "loading": "Odświeżanie listy modeli...", "success": "Lista modeli została pomyślnie odświeżona!", - "error": "Nie udało się odświeżyć listy modeli. Spróbuj ponownie." + "error": "Nie udało się odświeżyć listy modeli. Spróbuj ponownie.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Uzyskaj klucz API Requesty", "openRouterTransformsText": "Kompresuj podpowiedzi i łańcuchy wiadomości do rozmiaru kontekstu (Transformacje OpenRouter)", @@ -409,7 +429,9 @@ "placeholder": "Domyślnie: claude", "maxTokensLabel": "Maksymalna liczba tokenów wyjściowych", "maxTokensDescription": "Maksymalna liczba tokenów wyjściowych dla odpowiedzi Claude Code. Domyślnie 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Użyj zdalnego połączenia przeglądarki", "description": "Połącz się z przeglądarką Chrome uruchomioną z włączonym zdalnym debugowaniem (--remote-debugging-port=9222).", - "urlPlaceholder": "Niestandardowy URL (np. http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Testuj połączenie", "testingButton": "Testowanie...", "instructions": "Wprowadź adres hosta protokołu DevTools lub pozostaw puste, aby automatycznie wykryć lokalne instancje Chrome. Przycisk Test Połączenia spróbuje użyć niestandardowego URL, jeśli podany, lub automatycznie wykryje, jeśli pole jest puste." @@ -449,12 +474,14 @@ "sound": { "label": "Włącz efekty dźwiękowe", "description": "Gdy włączone, Roo będzie odtwarzać efekty dźwiękowe dla powiadomień i zdarzeń.", - "volumeLabel": "Głośność" + "volumeLabel": "Głośność", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Włącz syntezę mowy", "description": "Gdy włączone, Roo będzie czytać na głos swoje odpowiedzi za pomocą syntezy mowy.", - "speedLabel": "Szybkość" + "speedLabel": "Szybkość", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "Gdy kontekst osiągnie ten procent, zostanie automatycznie skondensowany dla wszystkich profili, chyba że mają niestandardowe ustawienia", "profileDescription": "Niestandardowy próg tylko dla tego profilu (zastępuje globalny domyślny)", "inheritDescription": "Ten profil dziedziczy globalny domyślny próg ({{threshold}}%)", - "usesGlobal": "(używa globalnego {{threshold}}%)" + "usesGlobal": "(używa globalnego {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "Włącz narzędzie listy zadań", "description": "Po włączeniu Roo może tworzyć i zarządzać listami zadań do śledzenia postępu zadań. Pomaga to organizować złożone zadania w łatwe do zarządzania kroki." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "Użyj niestandardowego ARN..." }, "includeMaxOutputTokens": "Uwzględnij maksymalne tokeny wyjściowe", - "includeMaxOutputTokensDescription": "Wyślij parametr maksymalnych tokenów wyjściowych w żądaniach API. Niektórzy dostawcy mogą tego nie obsługiwać." + "includeMaxOutputTokensDescription": "Wyślij parametr maksymalnych tokenów wyjściowych w żądaniach API. Niektórzy dostawcy mogą tego nie obsługiwać.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/pt-BR/prompts.json b/webview-ui/src/i18n/locales/pt-BR/prompts.json index e5989d2894..119bcd1251 100644 --- a/webview-ui/src/i18n/locales/pt-BR/prompts.json +++ b/webview-ui/src/i18n/locales/pt-BR/prompts.json @@ -141,6 +141,12 @@ "NEW_TASK": { "label": "Iniciar Nova Tarefa", "description": "Inicie uma nova tarefa com a entrada fornecida. Disponível na paleta de comandos." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json index 2bb9d4b921..35aa4e94b4 100644 --- a/webview-ui/src/i18n/locales/pt-BR/settings.json +++ b/webview-ui/src/i18n/locales/pt-BR/settings.json @@ -12,7 +12,11 @@ "title": "Configurações", "saveButtonTooltip": "Salvar alterações", "nothingChangedTooltip": "Nada alterado", - "doneButtonTooltip": "Descartar alterações não salvas e fechar o painel de configurações" + "doneButtonTooltip": "Descartar alterações não salvas e fechar o painel de configurações", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Alterações não salvas", @@ -31,10 +35,15 @@ "prompts": "Prompts", "experimental": "Experimental", "language": "Idioma", - "about": "Sobre" + "about": "Sobre", + "advanced": "Advanced" }, "prompts": { - "description": "Configure prompts de suporte usados para ações rápidas como melhorar prompts, explicar código e corrigir problemas. Esses prompts ajudam o Roo a fornecer melhor assistência para tarefas comuns de desenvolvimento." + "description": "Configure prompts de suporte usados para ações rápidas como melhorar prompts, explicar código e corrigir problemas. Esses prompts ajudam o Roo a fornecer melhor assistência para tarefas comuns de desenvolvimento.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Indexação de Código", @@ -148,7 +157,8 @@ "protected": { "label": "Incluir arquivos protegidos", "description": "Permitir que o Roo crie e edite arquivos protegidos (como .rooignore e arquivos de configuração .roo/) sem exigir aprovação." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Navegador", @@ -157,7 +167,8 @@ "retry": { "label": "Tentar novamente", "description": "Tentar novamente automaticamente requisições de API com falha quando o servidor retorna uma resposta de erro", - "delayLabel": "Atraso antes de tentar novamente a requisição" + "delayLabel": "Atraso antes de tentar novamente a requisição", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Pergunta", "description": "Selecionar automaticamente a primeira resposta sugerida para perguntas de acompanhamento após o tempo limite configurado", - "timeoutLabel": "Tempo de espera antes de selecionar automaticamente a primeira resposta" + "timeoutLabel": "Tempo de espera antes de selecionar automaticamente a primeira resposta", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Executar", "description": "Executar automaticamente comandos de terminal permitidos sem exigir aprovação", - "allowedCommands": "Comandos de auto-execução permitidos", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Prefixos de comando que podem ser auto-executados quando \"Aprovar sempre operações de execução\" está ativado. Adicione * para permitir todos os comandos (use com cautela).", - "deniedCommands": "Comandos negados", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Prefixos de comandos que serão automaticamente negados sem pedir aprovação. Em caso de conflitos com comandos permitidos, a correspondência de prefixo mais longa tem precedência. Adicione * para negar todos os comandos.", "commandPlaceholder": "Digite o prefixo do comando (ex. 'git ')", "deniedCommandPlaceholder": "Digite o prefixo do comando para negar (ex. 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Máximo de Solicitações", "description": "Fazer automaticamente este número de requisições à API antes de pedir aprovação para continuar com a tarefa.", - "unlimited": "Ilimitado" + "unlimited": "Ilimitado", + "label": "Max Requests" }, "selectOptionsFirst": "Selecione pelo menos uma opção abaixo para habilitar a aprovação automática" }, @@ -242,7 +261,8 @@ "hint": "Por favor, reabra as configurações para ver os modelos mais recentes.", "loading": "Atualizando lista de modelos...", "success": "Lista de modelos atualizada com sucesso!", - "error": "Falha ao atualizar a lista de modelos. Por favor, tente novamente." + "error": "Falha ao atualizar a lista de modelos. Por favor, tente novamente.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Obter chave de API Requesty", "openRouterTransformsText": "Comprimir prompts e cadeias de mensagens para o tamanho do contexto (Transformações OpenRouter)", @@ -409,7 +429,9 @@ "placeholder": "Padrão: claude", "maxTokensLabel": "Tokens de saída máximos", "maxTokensDescription": "Número máximo de tokens de saída para respostas do Claude Code. O padrão é 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Usar conexão remota de navegador", "description": "Conectar a um navegador Chrome executando com depuração remota ativada (--remote-debugging-port=9222).", - "urlPlaceholder": "URL personalizado (ex. http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Testar conexão", "testingButton": "Testando...", "instructions": "Digite o endereço do host do protocolo DevTools ou deixe em branco para descobrir automaticamente instâncias locais do Chrome. O botão Testar Conexão tentará usar o URL personalizado, se fornecido, ou descobrirá automaticamente se o campo estiver vazio." @@ -449,12 +474,14 @@ "sound": { "label": "Ativar efeitos sonoros", "description": "Quando ativado, o Roo reproduzirá efeitos sonoros para notificações e eventos.", - "volumeLabel": "Volume" + "volumeLabel": "Volume", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Ativar texto para fala", "description": "Quando ativado, o Roo lerá em voz alta suas respostas usando texto para fala.", - "speedLabel": "Velocidade" + "speedLabel": "Velocidade", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "Quando o contexto atingir essa porcentagem, será automaticamente condensado para todos os perfis, a menos que tenham configurações personalizadas", "profileDescription": "Limite personalizado apenas para este perfil (substitui o padrão global)", "inheritDescription": "Este perfil herda o limite padrão global ({{threshold}}%)", - "usesGlobal": "(usa global {{threshold}}%)" + "usesGlobal": "(usa global {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "Habilitar ferramenta de lista de tarefas", "description": "Quando habilitado, o Roo pode criar e gerenciar listas de tarefas para acompanhar o progresso das tarefas. Isso ajuda a organizar tarefas complexas em etapas gerenciáveis." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "Usar ARN personalizado..." }, "includeMaxOutputTokens": "Incluir tokens máximos de saída", - "includeMaxOutputTokensDescription": "Enviar parâmetro de tokens máximos de saída nas solicitações de API. Alguns provedores podem não suportar isso." + "includeMaxOutputTokensDescription": "Enviar parâmetro de tokens máximos de saída nas solicitações de API. Alguns provedores podem não suportar isso.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/ru/prompts.json b/webview-ui/src/i18n/locales/ru/prompts.json index c96d4b54a1..2eb4249c72 100644 --- a/webview-ui/src/i18n/locales/ru/prompts.json +++ b/webview-ui/src/i18n/locales/ru/prompts.json @@ -138,6 +138,12 @@ "NEW_TASK": { "label": "Начать новую задачу", "description": "Начать новую задачу с пользовательским вводом. Доступно в палитре команд." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/ru/settings.json b/webview-ui/src/i18n/locales/ru/settings.json index c57a8db3d6..c45e421698 100644 --- a/webview-ui/src/i18n/locales/ru/settings.json +++ b/webview-ui/src/i18n/locales/ru/settings.json @@ -12,7 +12,11 @@ "title": "Настройки", "saveButtonTooltip": "Сохранить изменения", "nothingChangedTooltip": "Изменений нет", - "doneButtonTooltip": "Отменить несохранённые изменения и закрыть панель настроек" + "doneButtonTooltip": "Отменить несохранённые изменения и закрыть панель настроек", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Несохранённые изменения", @@ -31,10 +35,15 @@ "prompts": "Промпты", "experimental": "Экспериментальное", "language": "Язык", - "about": "О Roo Code" + "about": "О Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "Настройте промпты поддержки, используемые для быстрых действий, таких как улучшение промптов, объяснение кода и исправление проблем. Эти промпты помогают Roo обеспечить лучшую поддержку для общих задач разработки." + "description": "Настройте промпты поддержки, используемые для быстрых действий, таких как улучшение промптов, объяснение кода и исправление проблем. Эти промпты помогают Roo обеспечить лучшую поддержку для общих задач разработки.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Индексация кодовой базы", @@ -148,7 +157,8 @@ "protected": { "label": "Включить защищенные файлы", "description": "Разрешить Roo создавать и редактировать защищенные файлы (такие как .rooignore и файлы конфигурации .roo/) без необходимости одобрения." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Браузер", @@ -157,7 +167,8 @@ "retry": { "label": "Повтор", "description": "Автоматически повторять неудачные запросы к API при ошибке сервера", - "delayLabel": "Задержка перед повтором запроса" + "delayLabel": "Задержка перед повтором запроса", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Вопрос", "description": "Автоматически выбирать первый предложенный ответ на дополнительные вопросы после настроенного тайм-аута", - "timeoutLabel": "Время ожидания перед автоматическим выбором первого ответа" + "timeoutLabel": "Время ожидания перед автоматическим выбором первого ответа", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Выполнение", "description": "Автоматически выполнять разрешённые команды терминала без необходимости одобрения", - "allowedCommands": "Разрешённые авто-выполняемые команды", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Префиксы команд, которые могут быть автоматически выполнены при включённом параметре \"Всегда одобрять выполнение операций\". Добавьте * для разрешения всех команд (используйте с осторожностью).", - "deniedCommands": "Запрещенные команды", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Префиксы команд, которые будут автоматически отклонены без запроса одобрения. В случае конфликтов с разрешенными командами, приоритет имеет самое длинное совпадение префикса. Добавьте * чтобы запретить все команды.", "commandPlaceholder": "Введите префикс команды (например, 'git ')", "deniedCommandPlaceholder": "Введите префикс команды для запрета (например, 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Максимум запросов", "description": "Автоматически выполнять это количество API-запросов перед запросом разрешения на продолжение задачи.", - "unlimited": "Без ограничений" + "unlimited": "Без ограничений", + "label": "Max Requests" }, "selectOptionsFirst": "Выберите хотя бы один вариант ниже, чтобы включить автоодобрение" }, @@ -242,7 +261,8 @@ "hint": "Пожалуйста, откройте настройки заново, чтобы увидеть последние модели.", "loading": "Обновление списка моделей...", "success": "Список моделей успешно обновлен!", - "error": "Не удалось обновить список моделей. Пожалуйста, попробуйте снова." + "error": "Не удалось обновить список моделей. Пожалуйста, попробуйте снова.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Получить Requesty API-ключ", "openRouterTransformsText": "Сжимать подсказки и цепочки сообщений до размера контекста (OpenRouter Transforms)", @@ -409,7 +429,9 @@ "placeholder": "По умолчанию: claude", "maxTokensLabel": "Макс. выходных токенов", "maxTokensDescription": "Максимальное количество выходных токенов для ответов Claude Code. По умолчанию 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Использовать удалённое подключение к браузеру", "description": "Подключиться к Chrome с включённым удалённым дебагом (--remote-debugging-port=9222).", - "urlPlaceholder": "Пользовательский URL (например, http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Проверить соединение", "testingButton": "Проверка...", "instructions": "Введите адрес DevTools Protocol или оставьте поле пустым для автоматического поиска локальных экземпляров Chrome. Кнопка проверки попробует пользовательский URL, если он указан, или выполнит автопоиск." @@ -449,12 +474,14 @@ "sound": { "label": "Включить звуковые эффекты", "description": "Если включено, Roo будет воспроизводить звуковые эффекты для уведомлений и событий.", - "volumeLabel": "Громкость" + "volumeLabel": "Громкость", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Включить озвучивание", "description": "Если включено, Roo будет озвучивать свои ответы с помощью преобразования текста в речь.", - "speedLabel": "Скорость" + "speedLabel": "Скорость", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "Когда контекст достигнет этого процента, он будет автоматически сжат для всех профилей, если у них нет пользовательских настроек", "profileDescription": "Пользовательский порог только для этого профиля (переопределяет глобальный по умолчанию)", "inheritDescription": "Этот профиль наследует глобальный порог по умолчанию ({{threshold}}%)", - "usesGlobal": "(использует глобальный {{threshold}}%)" + "usesGlobal": "(использует глобальный {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "Включить инструмент списка задач", "description": "При включении Roo может создавать и управлять списками задач для отслеживания прогресса. Это помогает организовать сложные задачи в управляемые шаги." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "Использовать пользовательский ARN..." }, "includeMaxOutputTokens": "Включить максимальные выходные токены", - "includeMaxOutputTokensDescription": "Отправлять параметр максимальных выходных токенов в API-запросах. Некоторые провайдеры могут не поддерживать это." + "includeMaxOutputTokensDescription": "Отправлять параметр максимальных выходных токенов в API-запросах. Некоторые провайдеры могут не поддерживать это.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/tr/prompts.json b/webview-ui/src/i18n/locales/tr/prompts.json index 9b7e2c569f..8914e491f1 100644 --- a/webview-ui/src/i18n/locales/tr/prompts.json +++ b/webview-ui/src/i18n/locales/tr/prompts.json @@ -138,6 +138,12 @@ "NEW_TASK": { "label": "Yeni Görev Başlat", "description": "Girdiyle yeni bir görev başlat. Komut paletinde kullanılabilir." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json index 576e3c1b53..e5e7b118ee 100644 --- a/webview-ui/src/i18n/locales/tr/settings.json +++ b/webview-ui/src/i18n/locales/tr/settings.json @@ -12,7 +12,11 @@ "title": "Ayarlar", "saveButtonTooltip": "Değişiklikleri kaydet", "nothingChangedTooltip": "Hiçbir şey değişmedi", - "doneButtonTooltip": "Kaydedilmemiş değişiklikleri at ve ayarlar panelini kapat" + "doneButtonTooltip": "Kaydedilmemiş değişiklikleri at ve ayarlar panelini kapat", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Kaydedilmemiş Değişiklikler", @@ -31,10 +35,15 @@ "prompts": "Promptlar", "experimental": "Deneysel", "language": "Dil", - "about": "Roo Code Hakkında" + "about": "Roo Code Hakkında", + "advanced": "Advanced" }, "prompts": { - "description": "Prompt geliştirme, kod açıklama ve sorun çözme gibi hızlı eylemler için kullanılan destek promptlarını yapılandırın. Bu promptlar, Roo'nun yaygın geliştirme görevleri için daha iyi destek sağlamasına yardımcı olur." + "description": "Prompt geliştirme, kod açıklama ve sorun çözme gibi hızlı eylemler için kullanılan destek promptlarını yapılandırın. Bu promptlar, Roo'nun yaygın geliştirme görevleri için daha iyi destek sağlamasına yardımcı olur.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Kod Tabanı İndeksleme", @@ -148,7 +157,8 @@ "protected": { "label": "Korumalı dosyaları dahil et", "description": "Roo'nun korumalı dosyaları (.rooignore ve .roo/ yapılandırma dosyaları gibi) onay gerektirmeden oluşturmasına ve düzenlemesine izin ver." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Tarayıcı", @@ -157,7 +167,8 @@ "retry": { "label": "Yeniden Dene", "description": "Sunucu bir hata yanıtı döndürdüğünde başarısız API isteklerini otomatik olarak yeniden dene", - "delayLabel": "İsteği yeniden denemeden önce gecikme" + "delayLabel": "İsteği yeniden denemeden önce gecikme", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Soru", "description": "Yapılandırılan zaman aşımından sonra takip sorularına ilişkin ilk önerilen yanıtı otomatik olarak seç", - "timeoutLabel": "İlk yanıtı otomatik olarak seçmeden önce beklenecek süre" + "timeoutLabel": "İlk yanıtı otomatik olarak seçmeden önce beklenecek süre", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Yürüt", "description": "Onay gerektirmeden otomatik olarak izin verilen terminal komutlarını yürüt", - "allowedCommands": "İzin Verilen Otomatik Yürütme Komutları", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "\"Yürütme işlemlerini her zaman onayla\" etkinleştirildiğinde otomatik olarak yürütülebilen komut önekleri. Tüm komutlara izin vermek için * ekleyin (dikkatli kullanın).", - "deniedCommands": "Reddedilen komutlar", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Onay istenmeden otomatik olarak reddedilecek komut önekleri. İzin verilen komutlarla çakışma durumunda, en uzun önek eşleşmesi öncelik alır. Tüm komutları reddetmek için * ekleyin.", "commandPlaceholder": "Komut öneki girin (örn. 'git ')", "deniedCommandPlaceholder": "Reddetmek için komut öneki girin (örn. 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Maksimum İstek", "description": "Göreve devam etmek için onay istemeden önce bu sayıda API isteği otomatik olarak yap.", - "unlimited": "Sınırsız" + "unlimited": "Sınırsız", + "label": "Max Requests" }, "selectOptionsFirst": "Otomatik onayı etkinleştirmek için aşağıdan en az bir seçenek seçin" }, @@ -242,7 +261,8 @@ "hint": "En son modelleri görmek için lütfen ayarları yeniden açın.", "loading": "Model listesi yenileniyor...", "success": "Model listesi başarıyla yenilendi!", - "error": "Model listesi yenilenemedi. Lütfen tekrar deneyin." + "error": "Model listesi yenilenemedi. Lütfen tekrar deneyin.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Requesty API Anahtarı Al", "openRouterTransformsText": "İstem ve mesaj zincirlerini bağlam boyutuna sıkıştır (OpenRouter Dönüşümleri)", @@ -409,7 +429,9 @@ "placeholder": "Varsayılan: claude", "maxTokensLabel": "Maksimum Çıktı Token sayısı", "maxTokensDescription": "Claude Code yanıtları için maksimum çıktı token sayısı. Varsayılan 8000'dir." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Uzak tarayıcı bağlantısı kullan", "description": "Uzaktan hata ayıklama etkinleştirilmiş olarak çalışan bir Chrome tarayıcısına bağlanın (--remote-debugging-port=9222).", - "urlPlaceholder": "Özel URL (örn. http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Bağlantıyı Test Et", "testingButton": "Test Ediliyor...", "instructions": "DevTools protokolü ana bilgisayar adresini girin veya yerel Chrome örneklerini otomatik olarak keşfetmek için boş bırakın. Bağlantıyı Test Et düğmesi, sağlanmışsa özel URL'yi deneyecek veya alan boşsa otomatik olarak keşfedecektir." @@ -449,12 +474,14 @@ "sound": { "label": "Ses efektlerini etkinleştir", "description": "Etkinleştirildiğinde, Roo bildirimler ve olaylar için ses efektleri çalacaktır.", - "volumeLabel": "Ses Düzeyi" + "volumeLabel": "Ses Düzeyi", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Metinden sese özelliğini etkinleştir", "description": "Etkinleştirildiğinde, Roo yanıtlarını metinden sese teknolojisi kullanarak sesli okuyacaktır.", - "speedLabel": "Hız" + "speedLabel": "Hız", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "Bağlam bu yüzdeye ulaştığında, özel ayarları olmadıkça tüm profiller için otomatik olarak sıkıştırılacak", "profileDescription": "Sadece bu profil için özel eşik (küresel varsayılanı geçersiz kılar)", "inheritDescription": "Bu profil küresel varsayılan eşiği miras alır ({{threshold}}%)", - "usesGlobal": "(küresel {{threshold}}% kullanır)" + "usesGlobal": "(küresel {{threshold}}% kullanır)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "Yapılacaklar listesi aracını etkinleştir", "description": "Etkinleştirildiğinde, Roo görev ilerlemesini takip etmek için yapılacaklar listeleri oluşturabilir ve yönetebilir. Bu, karmaşık görevleri yönetilebilir adımlara organize etmeye yardımcı olur." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "Özel ARN kullan..." }, "includeMaxOutputTokens": "Maksimum çıktı tokenlerini dahil et", - "includeMaxOutputTokensDescription": "API isteklerinde maksimum çıktı token parametresini gönder. Bazı sağlayıcılar bunu desteklemeyebilir." + "includeMaxOutputTokensDescription": "API isteklerinde maksimum çıktı token parametresini gönder. Bazı sağlayıcılar bunu desteklemeyebilir.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/vi/prompts.json b/webview-ui/src/i18n/locales/vi/prompts.json index d3b7e75f3c..1d4b1b665c 100644 --- a/webview-ui/src/i18n/locales/vi/prompts.json +++ b/webview-ui/src/i18n/locales/vi/prompts.json @@ -138,6 +138,12 @@ "NEW_TASK": { "label": "Bắt đầu tác vụ mới", "description": "Bắt đầu tác vụ mới với nội dung đã nhập. Có sẵn trong bảng lệnh." + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json index 76a4f9397d..31bb2adb15 100644 --- a/webview-ui/src/i18n/locales/vi/settings.json +++ b/webview-ui/src/i18n/locales/vi/settings.json @@ -12,7 +12,11 @@ "title": "Cài đặt", "saveButtonTooltip": "Lưu thay đổi", "nothingChangedTooltip": "Không có gì thay đổi", - "doneButtonTooltip": "Hủy thay đổi chưa lưu và đóng bảng cài đặt" + "doneButtonTooltip": "Hủy thay đổi chưa lưu và đóng bảng cài đặt", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "Thay đổi chưa lưu", @@ -31,10 +35,15 @@ "prompts": "Lời nhắc", "experimental": "Thử nghiệm", "language": "Ngôn ngữ", - "about": "Giới thiệu" + "about": "Giới thiệu", + "advanced": "Advanced" }, "prompts": { - "description": "Cấu hình các lời nhắc hỗ trợ được sử dụng cho các hành động nhanh như cải thiện lời nhắc, giải thích mã và khắc phục sự cố. Những lời nhắc này giúp Roo cung cấp hỗ trợ tốt hơn cho các tác vụ phát triển phổ biến." + "description": "Cấu hình các lời nhắc hỗ trợ được sử dụng cho các hành động nhanh như cải thiện lời nhắc, giải thích mã và khắc phục sự cố. Những lời nhắc này giúp Roo cung cấp hỗ trợ tốt hơn cho các tác vụ phát triển phổ biến.", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "Lập chỉ mục mã nguồn", @@ -148,7 +157,8 @@ "protected": { "label": "Bao gồm các tệp được bảo vệ", "description": "Cho phép Roo tạo và chỉnh sửa các tệp được bảo vệ (như .rooignore và các tệp cấu hình .roo/) mà không yêu cầu phê duyệt." - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "Trình duyệt", @@ -157,7 +167,8 @@ "retry": { "label": "Thử lại", "description": "Tự động thử lại các yêu cầu API thất bại khi máy chủ trả về phản hồi lỗi", - "delayLabel": "Trì hoãn trước khi thử lại yêu cầu" + "delayLabel": "Trì hoãn trước khi thử lại yêu cầu", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "Câu hỏi", "description": "Tự động chọn câu trả lời đầu tiên được đề xuất cho các câu hỏi tiếp theo sau thời gian chờ đã cấu hình", - "timeoutLabel": "Thời gian chờ trước khi tự động chọn câu trả lời đầu tiên" + "timeoutLabel": "Thời gian chờ trước khi tự động chọn câu trả lời đầu tiên", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "Thực thi", "description": "Tự động thực thi các lệnh terminal được phép mà không cần phê duyệt", - "allowedCommands": "Các lệnh tự động thực thi được phép", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "Tiền tố lệnh có thể được tự động thực thi khi \"Luôn phê duyệt các hoạt động thực thi\" được bật. Thêm * để cho phép tất cả các lệnh (sử dụng cẩn thận).", - "deniedCommands": "Lệnh bị từ chối", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "Tiền tố lệnh sẽ được tự động từ chối mà không yêu cầu phê duyệt. Trong trường hợp xung đột với lệnh được phép, khớp tiền tố dài nhất sẽ được ưu tiên. Thêm * để từ chối tất cả lệnh.", "commandPlaceholder": "Nhập tiền tố lệnh (ví dụ: 'git ')", "deniedCommandPlaceholder": "Nhập tiền tố lệnh để từ chối (ví dụ: 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "Số lượng yêu cầu tối đa", "description": "Tự động thực hiện số lượng API request này trước khi yêu cầu phê duyệt để tiếp tục với nhiệm vụ.", - "unlimited": "Không giới hạn" + "unlimited": "Không giới hạn", + "label": "Max Requests" }, "selectOptionsFirst": "Chọn ít nhất một tùy chọn bên dưới để bật tự động phê duyệt" }, @@ -242,7 +261,8 @@ "hint": "Vui lòng mở lại cài đặt để xem các mô hình mới nhất.", "loading": "Đang làm mới danh sách mô hình...", "success": "Danh sách mô hình đã được làm mới thành công!", - "error": "Không thể làm mới danh sách mô hình. Vui lòng thử lại." + "error": "Không thể làm mới danh sách mô hình. Vui lòng thử lại.", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "Lấy khóa API Requesty", "openRouterTransformsText": "Nén lời nhắc và chuỗi tin nhắn theo kích thước ngữ cảnh (OpenRouter Transforms)", @@ -409,7 +429,9 @@ "placeholder": "Mặc định: claude", "maxTokensLabel": "Số token đầu ra tối đa", "maxTokensDescription": "Số lượng token đầu ra tối đa cho các phản hồi của Claude Code. Mặc định là 8000." - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "Sử dụng kết nối trình duyệt từ xa", "description": "Kết nối với trình duyệt Chrome đang chạy với tính năng gỡ lỗi từ xa được bật (--remote-debugging-port=9222).", - "urlPlaceholder": "URL tùy chỉnh (ví dụ: http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "Kiểm tra kết nối", "testingButton": "Đang kiểm tra...", "instructions": "Nhập địa chỉ DevTools Protocol hoặc để trống để tự động phát hiện các instance Chrome cục bộ. Nút Kiểm tra kết nối sẽ thử URL tùy chỉnh nếu được cung cấp, hoặc tự động phát hiện nếu trường này trống." @@ -449,12 +474,14 @@ "sound": { "label": "Bật hiệu ứng âm thanh", "description": "Khi được bật, Roo sẽ phát hiệu ứng âm thanh cho thông báo và sự kiện.", - "volumeLabel": "Âm lượng" + "volumeLabel": "Âm lượng", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "Bật chuyển văn bản thành giọng nói", "description": "Khi được bật, Roo sẽ đọc to các phản hồi của nó bằng chức năng chuyển văn bản thành giọng nói.", - "speedLabel": "Tốc độ" + "speedLabel": "Tốc độ", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "Khi ngữ cảnh đạt đến tỷ lệ phần trăm này, nó sẽ được tự động nén cho tất cả hồ sơ trừ khi chúng có cài đặt tùy chỉnh", "profileDescription": "Ngưỡng tùy chỉnh chỉ cho hồ sơ này (ghi đè mặc định toàn cục)", "inheritDescription": "Hồ sơ này kế thừa ngưỡng mặc định toàn cục ({{threshold}}%)", - "usesGlobal": "(sử dụng toàn cục {{threshold}}%)" + "usesGlobal": "(sử dụng toàn cục {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "Bật công cụ danh sách việc cần làm", "description": "Khi được bật, Roo có thể tạo và quản lý danh sách việc cần làm để theo dõi tiến độ công việc. Điều này giúp tổ chức các tác vụ phức tạp thành các bước có thể quản lý được." + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "Sử dụng ARN tùy chỉnh..." }, "includeMaxOutputTokens": "Bao gồm token đầu ra tối đa", - "includeMaxOutputTokensDescription": "Gửi tham số token đầu ra tối đa trong các yêu cầu API. Một số nhà cung cấp có thể không hỗ trợ điều này." + "includeMaxOutputTokensDescription": "Gửi tham số token đầu ra tối đa trong các yêu cầu API. Một số nhà cung cấp có thể không hỗ trợ điều này.", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/zh-CN/prompts.json b/webview-ui/src/i18n/locales/zh-CN/prompts.json index 157ba5d7ea..4fdd726029 100644 --- a/webview-ui/src/i18n/locales/zh-CN/prompts.json +++ b/webview-ui/src/i18n/locales/zh-CN/prompts.json @@ -138,6 +138,12 @@ "NEW_TASK": { "label": "新任务", "description": "控制开始新任务时的用户提示词。可在首页对话框中使用。" + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json index 748b9f1d5d..d3cb1c2d74 100644 --- a/webview-ui/src/i18n/locales/zh-CN/settings.json +++ b/webview-ui/src/i18n/locales/zh-CN/settings.json @@ -12,7 +12,11 @@ "title": "设置", "saveButtonTooltip": "保存更改", "nothingChangedTooltip": "暂无更改", - "doneButtonTooltip": "放弃未保存的更改并关闭设置面板" + "doneButtonTooltip": "放弃未保存的更改并关闭设置面板", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "未保存的更改", @@ -31,10 +35,15 @@ "prompts": "提示词", "experimental": "实验性", "language": "语言", - "about": "关于 Roo Code" + "about": "关于 Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "配置用于快速操作的支持提示词,如增强提示词、解释代码和修复问题。这些提示词帮助 Roo 为常见开发任务提供更好的支持。" + "description": "配置用于快速操作的支持提示词,如增强提示词、解释代码和修复问题。这些提示词帮助 Roo 为常见开发任务提供更好的支持。", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "代码库索引", @@ -148,7 +157,8 @@ "protected": { "label": "包含受保护的文件", "description": "允许 Roo 创建和编辑受保护的文件(如 .rooignore 和 .roo/ 配置文件),无需批准。" - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "浏览器", @@ -157,7 +167,8 @@ "retry": { "label": "重试", "description": "当服务器返回错误响应时自动重试失败的 API 请求", - "delayLabel": "重试请求前的延迟" + "delayLabel": "重试请求前的延迟", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "问题", "description": "在配置的超时时间后自动选择后续问题的第一个建议答案", - "timeoutLabel": "自动选择第一个答案前的等待时间" + "timeoutLabel": "自动选择第一个答案前的等待时间", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "执行", "description": "自动执行白名单中的命令而无需批准", - "allowedCommands": "命令白名单", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "当\"自动批准命令行操作\"启用时可以自动执行的命令前缀。添加 * 以允许所有命令(谨慎使用)。", - "deniedCommands": "拒绝的命令", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "将自动拒绝的命令前缀,无需用户批准。与允许命令冲突时,最长前缀匹配优先。添加 * 拒绝所有命令。", "commandPlaceholder": "输入命令前缀(例如 'git ')", "deniedCommandPlaceholder": "输入要拒绝的命令前缀(例如 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "最大请求数", "description": "在请求批准以继续执行任务之前,自动发出此数量的 API 请求。", - "unlimited": "无限制" + "unlimited": "无限制", + "label": "Max Requests" }, "selectOptionsFirst": "请至少选择以下一个选项以启用自动批准" }, @@ -242,7 +261,8 @@ "hint": "请重新打开设置以查看最新模型。", "loading": "正在刷新模型列表...", "success": "模型列表刷新成功!", - "error": "刷新模型列表失败。请重试。" + "error": "刷新模型列表失败。请重试。", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "获取 Requesty API 密钥", "openRouterTransformsText": "自动压缩提示词和消息链到上下文长度限制内 (OpenRouter转换)", @@ -409,7 +429,9 @@ "placeholder": "默认:claude", "maxTokensLabel": "最大输出 Token", "maxTokensDescription": "Claude Code 响应的最大输出 Token 数量。默认为 8000。" - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "使用远程浏览器连接", "description": "连接到启用远程调试的 Chrome 浏览器 (--remote-debugging-port=9222)。", - "urlPlaceholder": "自定义 URL(例如 http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "测试连接", "testingButton": "测试中...", "instructions": "输入 DevTools 协议主机地址或留空以自动发现本地 Chrome 实例。测试连接按钮将尝试使用自定义 URL(如果提供),或者如果字段为空则自动发现。" @@ -449,12 +474,14 @@ "sound": { "label": "启用声音通知", "description": "启用后,Roo 将为通知和事件播放音效。", - "volumeLabel": "音量" + "volumeLabel": "音量", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "启用文本转语音", "description": "启用后,Roo 将使用文本转语音功能朗读其响应。", - "speedLabel": "速度" + "speedLabel": "速度", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "当上下文达到此百分比时,将自动为所有配置文件压缩,除非它们有自定义设置", "profileDescription": "仅此配置文件的自定义阈值(覆盖全局默认)", "inheritDescription": "此配置文件继承全局默认阈值({{threshold}}%)", - "usesGlobal": "(使用全局 {{threshold}}%)" + "usesGlobal": "(使用全局 {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "启用任务清单工具", "description": "启用后,Roo 可以创建和管理任务清单来跟踪任务进度。这有助于将复杂任务组织成可管理的步骤。" + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "使用自定义 ARN..." }, "includeMaxOutputTokens": "包含最大输出 Token 数", - "includeMaxOutputTokensDescription": "在 API 请求中发送最大输出 Token 参数。某些提供商可能不支持此功能。" + "includeMaxOutputTokensDescription": "在 API 请求中发送最大输出 Token 参数。某些提供商可能不支持此功能。", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/i18n/locales/zh-TW/prompts.json b/webview-ui/src/i18n/locales/zh-TW/prompts.json index 3a2bae4af5..fcd9150560 100644 --- a/webview-ui/src/i18n/locales/zh-TW/prompts.json +++ b/webview-ui/src/i18n/locales/zh-TW/prompts.json @@ -138,6 +138,12 @@ "NEW_TASK": { "label": "開始新工作", "description": "開始一個新的工作。可在命令選擇區使用。" + }, + "enhance": { + "label": "Enhance" + }, + "condense": { + "label": "Condense" } } }, diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json index f4a6149102..c0818d27d4 100644 --- a/webview-ui/src/i18n/locales/zh-TW/settings.json +++ b/webview-ui/src/i18n/locales/zh-TW/settings.json @@ -12,7 +12,11 @@ "title": "設定", "saveButtonTooltip": "儲存變更", "nothingChangedTooltip": "無任何變更", - "doneButtonTooltip": "捨棄未儲存的變更並關閉設定面板" + "doneButtonTooltip": "捨棄未儲存的變更並關閉設定面板", + "searchPlaceholder": "Search settings...", + "searchTooltip": "Search settings", + "clearSearchTooltip": "Clear search", + "noSearchResults": "No settings match your search" }, "unsavedChangesDialog": { "title": "未儲存的變更", @@ -31,10 +35,15 @@ "prompts": "提示詞", "experimental": "實驗性", "language": "語言", - "about": "關於 Roo Code" + "about": "關於 Roo Code", + "advanced": "Advanced" }, "prompts": { - "description": "設定用於快速操作的支援提示詞,如增強提示詞、解釋程式碼和修復問題。這些提示詞幫助 Roo 為常見開發工作提供更好的支援。" + "description": "設定用於快速操作的支援提示詞,如增強提示詞、解釋程式碼和修復問題。這些提示詞幫助 Roo 為常見開發工作提供更好的支援。", + "customSupportPrompts": { + "label": "Custom Support Prompts", + "description": "Add custom instructions or prompts to guide Roo's behavior" + } }, "codeIndex": { "title": "程式碼庫索引", @@ -148,7 +157,8 @@ "protected": { "label": "包含受保護的檔案", "description": "允許 Roo 建立和編輯受保護的檔案(如 .rooignore 和 .roo/ 設定檔),無需核准。" - } + }, + "delayDescription": "Wait time in milliseconds after file writes before diagnostics are updated" }, "browser": { "label": "瀏覽器", @@ -157,7 +167,8 @@ "retry": { "label": "重試", "description": "當伺服器回傳錯誤回應時自動重試失敗的 API 請求", - "delayLabel": "重試請求前的延遲" + "delayLabel": "重試請求前的延遲", + "delayDescription": "Time to wait in seconds before retrying a failed request" }, "mcp": { "label": "MCP", @@ -174,14 +185,21 @@ "followupQuestions": { "label": "問題", "description": "在設定的逾時時間後自動選擇後續問題的第一個建議答案", - "timeoutLabel": "自動選擇第一個答案前的等待時間" + "timeoutLabel": "自動選擇第一個答案前的等待時間", + "timeoutDescription": "Time to wait before auto-selecting the first answer" }, "execute": { "label": "執行", "description": "自動執行允許的終端機命令而無需核准", - "allowedCommands": "允許自動執行的命令", + "allowedCommands": { + "label": "Allowed Commands", + "description": "Commands that Roo can execute automatically (one per line, supports wildcards)" + }, "allowedCommandsDescription": "當「始終核准執行操作」啟用時可以自動執行的命令前綴。新增 * 以允許所有命令(請謹慎使用)。", - "deniedCommands": "拒絕的命令", + "deniedCommands": { + "label": "Denied Commands", + "description": "Commands that Roo is explicitly forbidden from executing (one per line, supports wildcards)" + }, "deniedCommandsDescription": "將自動拒絕的命令前綴,無需使用者核准。與允許命令衝突時,最長前綴匹配優先。新增 * 拒絕所有命令。", "commandPlaceholder": "輸入命令前綴(例如 'git ')", "deniedCommandPlaceholder": "輸入要拒絕的命令前綴(例如 'rm -rf')", @@ -195,7 +213,8 @@ "apiRequestLimit": { "title": "最大請求數", "description": "在請求批准以繼續執行工作之前,自動發出此數量的 API 請求。", - "unlimited": "無限制" + "unlimited": "無限制", + "label": "Max Requests" }, "selectOptionsFirst": "請至少選擇以下一個選項以啟用自動核准" }, @@ -242,7 +261,8 @@ "hint": "請重新開啟設定以查看最新模型。", "loading": "正在重新整理模型列表...", "success": "模型列表重新整理成功!", - "error": "重新整理模型列表失敗。請再試一次。" + "error": "重新整理模型列表失敗。請再試一次。", + "missingConfig": "Please configure API settings first" }, "getRequestyApiKey": "取得 Requesty API 金鑰", "openRouterTransformsText": "將提示和訊息鏈壓縮到上下文大小 (OpenRouter 轉換)", @@ -409,7 +429,9 @@ "placeholder": "預設:claude", "maxTokensLabel": "最大輸出 Token", "maxTokensDescription": "Claude Code 回應的最大輸出 Token 數量。預設為 8000。" - } + }, + "apiProviderDescription": "Select the API provider for AI model access", + "modelDescription": "Choose the AI model to use for this configuration" }, "browser": { "enable": { @@ -433,7 +455,10 @@ "remote": { "label": "使用遠端瀏覽器連線", "description": "連線到啟用遠端除錯的 Chrome 瀏覽器(--remote-debugging-port=9222)。", - "urlPlaceholder": "自訂 URL(例如 http://localhost:9222)", + "urlPlaceholder": { + "label": "Remote Browser Host", + "description": "WebSocket URL for the remote browser connection" + }, "testButton": "測試連線", "testingButton": "測試中...", "instructions": "請輸入 DevTools Protocol 主機位址,或留空以自動偵測本機 Chrome 執行個體。「測試連線」按鈕將嘗試連線至您提供的自訂 URL,若未提供則會自動偵測。" @@ -449,12 +474,14 @@ "sound": { "label": "啟用音效", "description": "啟用後,Roo 將為通知和事件播放音效。", - "volumeLabel": "音量" + "volumeLabel": "音量", + "volumeDescription": "Adjust the volume level for sound notifications (0-100)" }, "tts": { "label": "啟用文字轉語音", "description": "啟用後,Roo 將使用文字轉語音功能朗讀其回應。", - "speedLabel": "速度" + "speedLabel": "速度", + "speedDescription": "Adjust the speech rate for text-to-speech (0.1-10.0)" } }, "contextManagement": { @@ -525,7 +552,8 @@ "defaultDescription": "當上下文達到此百分比時,將自動為所有檔案壓縮,除非它們有自訂設定", "profileDescription": "僅此檔案的自訂閾值(覆蓋全域預設)", "inheritDescription": "此檔案繼承全域預設閾值({{threshold}}%)", - "usesGlobal": "(使用全域 {{threshold}}%)" + "usesGlobal": "(使用全域 {{threshold}}%)", + "description": "Configure when context condensing should be triggered based on token usage" } }, "terminal": { @@ -614,6 +642,10 @@ "todoList": { "label": "啟用待辦事項清單工具", "description": "啟用後,Roo 可以建立和管理待辦事項清單來追蹤任務進度。這有助於將複雜任務組織成可管理的步驟。" + }, + "mcpEnabled": { + "label": "Enable MCP", + "description": "Enable Model Context Protocol (MCP) for enhanced model capabilities" } }, "experimental": { @@ -755,5 +787,8 @@ "useCustomArn": "使用自訂 ARN..." }, "includeMaxOutputTokens": "包含最大輸出 Token 數", - "includeMaxOutputTokensDescription": "在 API 請求中傳送最大輸出 Token 參數。某些提供商可能不支援此功能。" + "includeMaxOutputTokensDescription": "在 API 請求中傳送最大輸出 Token 參數。某些提供商可能不支援此功能。", + "language": { + "description": "Select your preferred language for the interface" + } } diff --git a/webview-ui/src/index.css b/webview-ui/src/index.css index fbb362ca8f..84968a1932 100644 --- a/webview-ui/src/index.css +++ b/webview-ui/src/index.css @@ -132,6 +132,10 @@ --color-vscode-textLink-foreground: var(--vscode-textLink-foreground); --color-vscode-textCodeBlock-background: var(--vscode-textCodeBlock-background); --color-vscode-button-hoverBackground: var(--vscode-button-hoverBackground); + + --color-vscode-editor-findMatchHighlightBackground: var(--vscode-editor-findMatchHighlightBackground); + --color-vscode-icon-foreground: var(--vscode-icon-foreground); + --color-vscode-input-placeholderForeground: var(--vscode-input-placeholderForeground); } @layer base { @@ -479,3 +483,20 @@ input[cmdk-input]:focus { transition-timing-function: cubic-bezier(0.4, 0, 0.2, 1); transition-duration: 150ms; } + +/* Settings highlight animation */ +@keyframes setting-highlight { + 0% { + background-color: color-mix(in srgb, var(--vscode-list-activeSelectionBackground) 60%, transparent); + box-shadow: 0 0 0 2px var(--vscode-focusBorder); + } + 100% { + background-color: transparent; + box-shadow: 0 0 0 0 transparent; + } +} + +.setting-highlight { + animation: setting-highlight 2s ease-out; + border-radius: 4px; +}