feat(webview-ui): add Nebius provider i18n keys for hi,id,it,ko,pt-BR

This commit is contained in:
Roo Code 2025-10-10 07:10:45 +00:00
parent 371d81c779
commit 14f0d23f99
12 changed files with 117 additions and 1 deletions

View file

@ -73,6 +73,7 @@ interface LocalCodeIndexSettings {
codebaseIndexGeminiApiKey?: string
codebaseIndexMistralApiKey?: string
codebaseIndexVercelAiGatewayApiKey?: string
codebaseIndexNebiusApiKey?: string
}
// Validation schema for codebase index settings
@ -149,6 +150,14 @@ const createValidationSchema = (provider: EmbedderProvider, t: any) => {
.min(1, t("settings:codeIndex.validation.modelSelectionRequired")),
})
case "nebius":
return baseSchema.extend({
codebaseIndexNebiusApiKey: z.string().min(1, t("settings:codeIndex.validation.apiKeyRequired")),
codebaseIndexEmbedderModelId: z
.string()
.min(1, t("settings:codeIndex.validation.modelSelectionRequired")),
})
default:
return baseSchema
}
@ -194,6 +203,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
codebaseIndexGeminiApiKey: "",
codebaseIndexMistralApiKey: "",
codebaseIndexVercelAiGatewayApiKey: "",
codebaseIndexNebiusApiKey: "",
})
// Initial settings state - stores the settings when popover opens
@ -229,6 +239,7 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
codebaseIndexGeminiApiKey: "",
codebaseIndexMistralApiKey: "",
codebaseIndexVercelAiGatewayApiKey: "",
codebaseIndexNebiusApiKey: "",
}
setInitialSettings(settings)
setCurrentSettings(settings)
@ -345,6 +356,9 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
? SECRET_PLACEHOLDER
: ""
}
if (!prev.codebaseIndexNebiusApiKey || prev.codebaseIndexNebiusApiKey === SECRET_PLACEHOLDER) {
updated.codebaseIndexNebiusApiKey = secretStatus.hasNebiusApiKey ? SECRET_PLACEHOLDER : ""
}
return updated
}
@ -418,7 +432,8 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
key === "codebaseIndexOpenAiCompatibleApiKey" ||
key === "codebaseIndexGeminiApiKey" ||
key === "codebaseIndexMistralApiKey" ||
key === "codebaseIndexVercelAiGatewayApiKey"
key === "codebaseIndexVercelAiGatewayApiKey" ||
key === "codebaseIndexNebiusApiKey"
) {
dataToValidate[key] = "placeholder-valid"
}
@ -669,6 +684,9 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
<SelectItem value="vercel-ai-gateway">
{t("settings:codeIndex.vercelAiGatewayProvider")}
</SelectItem>
<SelectItem value="nebius">
{t("settings:codeIndex.nebiusProvider")}
</SelectItem>
</SelectContent>
</Select>
</div>
@ -1131,6 +1149,71 @@ export const CodeIndexPopover: React.FC<CodeIndexPopoverProps> = ({
</>
)}
{currentSettings.codebaseIndexEmbedderProvider === "nebius" && (
<>
<div className="space-y-2">
<label className="text-sm font-medium">
{t("settings:codeIndex.nebiusApiKeyLabel")}
</label>
<VSCodeTextField
type="password"
value={currentSettings.codebaseIndexNebiusApiKey || ""}
onInput={(e: any) =>
updateSetting("codebaseIndexNebiusApiKey", e.target.value)
}
placeholder={t("settings:codeIndex.nebiusApiKeyPlaceholder")}
className={cn("w-full", {
"border-red-500": formErrors.codebaseIndexNebiusApiKey,
})}
/>
{formErrors.codebaseIndexNebiusApiKey && (
<p className="text-xs text-vscode-errorForeground mt-1 mb-0">
{formErrors.codebaseIndexNebiusApiKey}
</p>
)}
</div>
<div className="space-y-2">
<label className="text-sm font-medium">
{t("settings:codeIndex.modelLabel")}
</label>
<VSCodeDropdown
value={currentSettings.codebaseIndexEmbedderModelId}
onChange={(e: any) =>
updateSetting("codebaseIndexEmbedderModelId", e.target.value)
}
className={cn("w-full", {
"border-red-500": formErrors.codebaseIndexEmbedderModelId,
})}>
<VSCodeOption value="" className="p-2">
{t("settings:codeIndex.selectModel")}
</VSCodeOption>
{getAvailableModels().map((modelId) => {
const model =
codebaseIndexModels?.[
currentSettings.codebaseIndexEmbedderProvider
]?.[modelId]
return (
<VSCodeOption key={modelId} value={modelId} className="p-2">
{modelId}{" "}
{model
? t("settings:codeIndex.modelDimensions", {
dimension: model.dimension,
})
: ""}
</VSCodeOption>
)
})}
</VSCodeDropdown>
{formErrors.codebaseIndexEmbedderModelId && (
<p className="text-xs text-vscode-errorForeground mt-1 mb-0">
{formErrors.codebaseIndexEmbedderModelId}
</p>
)}
</div>
</>
)}
{/* Qdrant Settings */}
<div className="space-y-2">
<label className="text-sm font-medium">

View file

@ -60,6 +60,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "API-Schlüssel",
"vercelAiGatewayApiKeyPlaceholder": "Gib deinen Vercel AI Gateway API-Schlüssel ein",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "API-Schlüssel",
"nebiusApiKeyPlaceholder": "Gib deinen Nebius API-Schlüssel ein",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "API-Schlüssel:",
"mistralApiKeyPlaceholder": "Gib deinen Mistral-API-Schlüssel ein",

View file

@ -69,6 +69,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "API Key",
"vercelAiGatewayApiKeyPlaceholder": "Enter your Vercel AI Gateway API key",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "API Key",
"nebiusApiKeyPlaceholder": "Enter your Nebius API key",
"openaiCompatibleProvider": "OpenAI Compatible",
"openAiKeyLabel": "OpenAI API Key",
"openAiKeyPlaceholder": "Enter your OpenAI API key",

View file

@ -60,6 +60,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "Clave API",
"vercelAiGatewayApiKeyPlaceholder": "Introduce tu clave API de Vercel AI Gateway",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "Clave API",
"nebiusApiKeyPlaceholder": "Introduce tu clave API de Nebius",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "Clave API:",
"mistralApiKeyPlaceholder": "Introduce tu clave de API de Mistral",

View file

@ -60,6 +60,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "Clé API",
"vercelAiGatewayApiKeyPlaceholder": "Entrez votre clé API Vercel AI Gateway",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "Clé API",
"nebiusApiKeyPlaceholder": "Entrez votre clé API Nebius",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "Clé d'API:",
"mistralApiKeyPlaceholder": "Entrez votre clé d'API Mistral",

View file

@ -55,6 +55,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "API कुंजी",
"vercelAiGatewayApiKeyPlaceholder": "अपनी Vercel AI Gateway API कुंजी दर्ज करें",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "API कुंजी",
"nebiusApiKeyPlaceholder": "अपनी Nebius API कुंजी दर्ज करें",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "API कुंजी:",
"mistralApiKeyPlaceholder": "अपनी मिस्ट्रल एपीआई कुंजी दर्ज करें",

View file

@ -55,6 +55,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "API Key",
"vercelAiGatewayApiKeyPlaceholder": "Masukkan kunci API Vercel AI Gateway Anda",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "API Key",
"nebiusApiKeyPlaceholder": "Masukkan kunci API Nebius Anda",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "Kunci API:",
"mistralApiKeyPlaceholder": "Masukkan kunci API Mistral Anda",

View file

@ -55,6 +55,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "Chiave API",
"vercelAiGatewayApiKeyPlaceholder": "Inserisci la tua chiave API Vercel AI Gateway",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "Chiave API",
"nebiusApiKeyPlaceholder": "Inserisci la tua chiave API Nebius",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "Chiave API:",
"mistralApiKeyPlaceholder": "Inserisci la tua chiave API Mistral",

View file

@ -55,6 +55,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "APIキー",
"vercelAiGatewayApiKeyPlaceholder": "Vercel AI GatewayのAPIキーを入力してください",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "APIキー",
"nebiusApiKeyPlaceholder": "Nebius APIキーを入力してください",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "APIキー:",
"mistralApiKeyPlaceholder": "Mistral APIキーを入力してください",

View file

@ -58,6 +58,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "API 키",
"vercelAiGatewayApiKeyPlaceholder": "Vercel AI Gateway API 키를 입력하세요",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "API 키",
"nebiusApiKeyPlaceholder": "Nebius API 키를 입력하세요",
"openaiCompatibleProvider": "OpenAI 호환",
"openAiKeyLabel": "OpenAI API 키",
"openAiKeyPlaceholder": "OpenAI API 키를 입력하세요",

View file

@ -55,6 +55,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "Chave de API",
"vercelAiGatewayApiKeyPlaceholder": "Digite sua chave de API do Vercel AI Gateway",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "Chave de API",
"nebiusApiKeyPlaceholder": "Digite sua chave de API Nebius",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "Chave de API:",
"mistralApiKeyPlaceholder": "Digite sua chave de API da Mistral",

View file

@ -60,6 +60,9 @@
"vercelAiGatewayProvider": "Vercel AI Gateway",
"vercelAiGatewayApiKeyLabel": "API 密钥",
"vercelAiGatewayApiKeyPlaceholder": "输入您的 Vercel AI Gateway API 密钥",
"nebiusProvider": "Nebius AI",
"nebiusApiKeyLabel": "API 密钥",
"nebiusApiKeyPlaceholder": "输入您的 Nebius API 密钥",
"mistralProvider": "Mistral",
"mistralApiKeyLabel": "API 密钥:",
"mistralApiKeyPlaceholder": "输入您的 Mistral API 密钥",