Repository: RooVetGit/Roo-Code
Pull request #1738: fix missing settings key and add find i18n key scripts
Author: login: feifei325
Labels: name: size:L
description: This PR changes 100-499 lines, ignoring generated files.
name: lgtm
description: This PR has been approved by a maintainer
Created: 2025-03-17T16:38:43Z | Merged: 2025-03-17T16:49:56Z

## Context

Some keys were found that have not been internationalized in the code. To address this, I added a script to help users check if all internationalization keys in the code exist in the language configuration files. The script will scan the code for internationalization keys and compare them with the entries in the language configuration files to ensure that every required key is covered.

## Implementation

<!--

Some description of HOW you achieved it. Perhaps give a high level description of the program flow. Did you need to refactor something? What tradeoffs did you take? Are there things in here which you’d particularly like people to pay close attention to?

-->

## Screenshots

| before | after |
| ------ | ----- |
|        |       |

## How to Test
1.	Run the `node scripts/find-missing-i18n-key.js` script to find any un-internationalized keys.
2.	Ensure that every un-internationalized key is properly added to the corresponding language configuration file.
3.	Perform regular testing to ensure the new internationalization keys are loaded and displayed correctly.

## Get in Touch

<!-- We'd love to have a way to chat with you about your changes if necessary. If you're in the [Roo Code Discord](https://discord.gg/roocode), please share your handle here. -->

<!-- ELLIPSIS_HIDDEN -->

----

> [!IMPORTANT]
> Add script to find missing i18n keys and update language files with new keys, fixing a missing key in `ChatView.tsx`.
> 
>   - **Scripts**:
>     - Add `find-missing-i18n-key.js` script to `scripts/` to identify missing i18n keys by comparing code with language files.
>     - Supports options for specific locale and file checks.
>   - **Language Files**:
>     - Update `settings.json` in `locales/ca`, `locales/de`, `locales/en`, `locales/es`, `locales/fr`, `locales/hi`, `locales/it`, `locales/ja`, `locales/ko`, `locales/pl`, `locales/pt-BR`, `locales/tr`, `locales/vi`, `locales/zh-CN`, `locales/zh-TW` to add missing i18n keys.
>   - **Components**:
>     - Fix missing settings key in `ChatView.tsx` by changing `t("chat:completeSubtaskAndReturn.title")` to `t("chat:completeSubtaskAndReturn")`.
> 
> <sup>This description was created by </sup>[<img alt="Ellipsis" src="https://img.shields.io/badge/Ellipsis-blue?color=175173">](https://www.ellipsis.dev?ref=RooVetGit%2FRoo-Code&utm_source=github&utm_medium=referral)<sup> for 73d7bcb8ab454ac7b8b2ccdf4bceb12cb01c6044. It will automatically update as commits are pushed.</sup>

<!-- ELLIPSIS_HIDDEN -->


Diff:
diff --git a/scripts/find-missing-i18n-key.js b/scripts/find-missing-i18n-key.js
new file mode 100644
index 00000000000..3c21dfb4108
--- /dev/null
+++ b/scripts/find-missing-i18n-key.js
@@ -0,0 +1,176 @@
+const fs = require("fs")
+const path = require("path")
+
+// Parse command-line arguments
+const args = process.argv.slice(2).reduce((acc, arg) => {
+	if (arg === "--help") {
+		acc.help = true
+	} else if (arg.startsWith("--locale=")) {
+		acc.locale = arg.split("=")[1]
+	} else if (arg.startsWith("--file=")) {
+		acc.file = arg.split("=")[1]
+	}
+	return acc
+}, {})
+
+// Display help information
+if (args.help) {
+	console.log(`
+Find missing i18n translations
+
+A useful script to identify whether the i18n keys used in component files exist in all language files.
+
+Usage:
+  node scripts/find-missing-i18n-key.js [options]
+
+Options:
+  --locale=<locale>   Only check a specific language (e.g., --locale=de)
+  --file=<file>       Only check a specific file (e.g., --file=chat.json)
+  --help              Display help information
+
+Output:
+  - Generate a report of missing translations
+  `)
+	process.exit(0)
+}
+
+// Directory to traverse
+const TARGET_DIR = path.join(__dirname, "../webview-ui/src/components")
+const LOCALES_DIR = path.join(__dirname, "../webview-ui/src/i18n/locales")
+
+// Regular expressions to match i18n keys
+const i18nPatterns = [
+	/{t\("([^"]+)"\)}/g, // Match {t("key")} format
+	/i18nKey="([^"]+)"/g, // Match i18nKey="key" format
+	/t\("([a-zA-Z][a-zA-Z0-9_]*[:.][a-zA-Z0-9_.]+)"\)/g, // Match t("key") format, where key contains a colon or dot
+]
+
+// Get all language directories
+function getLocaleDirs() {
+	const allLocales = fs.readdirSync(LOCALES_DIR).filter((file) => {
+		const stats = fs.statSync(path.join(LOCALES_DIR, file))
+		return stats.isDirectory() // Do not exclude any language directories
+	})
+
+	// Filter to a specific language if specified
+	return args.locale ? allLocales.filter((locale) => locale === args.locale) : allLocales
+}
+
+// Get the value from JSON by path
+function getValueByPath(obj, path) {
+	const parts = path.split(".")
+	let current = obj
+
+	for (const part of parts) {
+		if (current === undefined || current === null) {
+			return undefined
+		}
+		current = current[part]
+	}
+
+	return current
+}
+
+// Check if the key exists in all language files, return a list of missing language files
+function checkKeyInLocales(key, localeDirs) {
+	const [file, ...pathParts] = key.split(":")
+	const jsonPath = pathParts.join(".")
+
+	const missingLocales = []
+
+	localeDirs.forEach((locale) => {
+		const filePath = path.join(LOCALES_DIR, locale, `${file}.json`)
+		if (!fs.existsSync(filePath)) {
+			missingLocales.push(`${locale}/${file}.json`)
+			return
+		}
+
+		const json = JSON.parse(fs.readFileSync(filePath, "utf8"))
+		if (getValueByPath(json, jsonPath) === undefined) {
+			missingLocales.push(`${locale}/${file}.json`)
+		}
+	})
+
+	return missingLocales
+}
+
+// Recursively traverse the directory
+function findMissingI18nKeys() {
+	const localeDirs = getLocaleDirs()
+	const results = []
+
+	function walk(dir) {
+		const files = fs.readdirSync(dir)
+
+		for (const file of files) {
+			const filePath = path.join(dir, file)
+			const stat = fs.statSync(filePath)
+
+			// Exclude test files
+			if (filePath.includes(".test.")) continue
+
+			if (stat.isDirectory()) {
+				walk(filePath) // Recursively traverse subdirectories
+			} else if (stat.isFile() && [".ts", ".tsx", ".js", ".jsx"].includes(path.extname(filePath))) {
+				const content = fs.readFileSync(filePath, "utf8")
+
+				// Match all i18n keys
+				for (const pattern of i18nPatterns) {
+					let match
+					while ((match = pattern.exec(content)) !== null) {
+						const key = match[1]
+						const missingLocales = checkKeyInLocales(key, localeDirs)
+						if (missingLocales.length > 0) {
+							results.push({
+								key,
+								missingLocales,
+								file: path.relative(TARGET_DIR, filePath),
+							})
+						}
+					}
+				}
+			}
+		}
+	}
+
+	walk(TARGET_DIR)
+	return results
+}
+
+// Execute and output the results
+function main() {
+	try {
+		const localeDirs = getLocaleDirs()
+		if (args.locale && localeDirs.length === 0) {
+			console.error(`Error: Language '${args.locale}' not found in ${LOCALES_DIR}`)
+			process.exit(1)
+		}
+
+		console.log(`Checking ${localeDirs.length} non-English languages: ${localeDirs.join(", ")}`)
+
+		const missingKeys = findMissingI18nKeys()
+
+		if (missingKeys.length === 0) {
+			console.log("\n✅ All i18n keys are present!")
+			return
+		}
+
+		console.log("\nMissing i18n keys:\n")
+		missingKeys.forEach(({ key, missingLocales, file }) => {
+			console.log(`File: ${file}`)
+			console.log(`Key: ${key}`)
+			console.log("Missing in:")
+			missingLocales.forEach((file) => console.log(`  - ${file}`))
+			console.log("-------------------")
+		})
+
+		// Exit code 1 indicates missing keys
+		process.exit(1)
+	} catch (error) {
+		console.error("Error:", error.message)
+		console.error(error.stack)
+		process.exit(1)
+	}
+}
+
+main()
diff --git a/webview-ui/src/components/chat/ChatView.tsx b/webview-ui/src/components/chat/ChatView.tsx
index d0569e6f916..643a9834033 100644
--- a/webview-ui/src/components/chat/ChatView.tsx
+++ b/webview-ui/src/components/chat/ChatView.tsx
@@ -152,7 +152,7 @@ const ChatView = ({ isHidden, showAnnouncement, hideAnnouncement, showHistoryVie
 									setSecondaryButtonText(t("chat:reject.title"))
 									break
 								case "finishTask":
-									setPrimaryButtonText(t("chat:completeSubtaskAndReturn.title"))
+									setPrimaryButtonText(t("chat:completeSubtaskAndReturn"))
 									setSecondaryButtonText(undefined)
 									break
 								default:
diff --git a/webview-ui/src/components/settings/ApiOptions.tsx b/webview-ui/src/components/settings/ApiOptions.tsx
index a4babf2ab43..02cd1c93752 100644
--- a/webview-ui/src/components/settings/ApiOptions.tsx
+++ b/webview-ui/src/components/settings/ApiOptions.tsx
@@ -1448,6 +1448,18 @@ const ApiOptions = ({
 								<span className="font-medium">Custom ARN</span>
 							</VSCodeTextField>
 							<div className="text-sm text-vscode-descriptionForeground -mt-2">
+								{t("settings:providers.awsCustomArnUse")}
+								<ul className="list-disc pl-5 mt-1">
+									<li>
+										arn:aws:bedrock:us-east-1:123456789012:foundation-model/anthropic.claude-3-sonnet-20240229-v1:0
+									</li>
+									<li>
+										arn:aws:bedrock:us-west-2:123456789012:provisioned-model/my-provisioned-model
+									</li>
+									<li>
+										arn:aws:bedrock:us-east-1:123456789012:default-prompt-router/anthropic.claude:1
+									</li>
+								</ul>
 								{t("settings:providers.awsCustomArnDesc")}
 							</div>
 							{apiConfiguration?.awsCustomArn &&
diff --git a/webview-ui/src/i18n/locales/ca/settings.json b/webview-ui/src/i18n/locales/ca/settings.json
index 31048ef4837..8ddd8d01c52 100644
--- a/webview-ui/src/i18n/locales/ca/settings.json
+++ b/webview-ui/src/i18n/locales/ca/settings.json
@@ -74,6 +74,20 @@
 		"description": "Descripció",
 		"apiProvider": "Proveïdor d'API",
 		"openRouterApiKey": "Clau API d'OpenRouter",
+		"nameEmpty": "El nom no pot estar buit",
+		"nameExists": "Ja existeix un perfil amb aquest nom",
+		"deleteProfile": "Esborrar perfil",
+		"invalidArnFormat": "Format ARN no vàlid. Comprova els exemples anteriors.",
+		"enterNewName": "Introduïu un nou nom",
+		"addProfile": "Afegeix perfil",
+		"renameProfile": "Canvia el nom del perfil",
+		"newProfile": "Nou perfil de configuració",
+		"enterProfileName": "Introduïu el nom del perfil",
+		"createProfile": "Crea perfil",
+		"cannotDeleteOnlyProfile": "No es pot eliminar l'únic perfil",
+		"vscodeLmDescription": "L'API del model de llenguatge de VS Code us permet executar models proporcionats per altres extensions de VS Code (incloent-hi, però no limitat a, GitHub Copilot). La manera més senzilla de començar és instal·lar les extensions Copilot i Copilot Chat des del VS Code Marketplace.",
+		"awsCustomArnUse": "Introduïu un ARN vàlid d'AWS Bedrock per al model que voleu utilitzar. Exemples de format:",
+		"awsCustomArnDesc": "Assegureu-vos que la regió a l'ARN coincideix amb la regió d'AWS seleccionada anteriorment.",
 		"apiKeyStorageNotice": "Les claus API s'emmagatzemen de forma segura a l'Emmagatzematge Secret de VSCode",
 		"useCustomBaseUrl": "Utilitzar URL base personalitzada",
 		"openRouterTransformsText": "Comprimir prompts i cadenes de missatges a la mida del context (<a>Transformacions d'OpenRouter</a>)",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "Token de sessió d'AWS",
 		"awsRegion": "Regió d'AWS",
 		"awsCrossRegion": "Utilitzar inferència entre regions",
+		"vscodeLmModel": "Model de llenguatge",
+		"vscodeLmWarning": "Nota: Aquesta és una integració molt experimental i el suport del proveïdor variarà. Si rebeu un error sobre un model no compatible, és un problema del proveïdor.",
 		"googleCloudSetup": {
 			"title": "Per utilitzar Google Cloud Vertex AI, necessiteu:",
 			"step1": "1. Crear un compte de Google Cloud, habilitar l'API de Vertex AI i habilitar els models Claude necessaris.",
diff --git a/webview-ui/src/i18n/locales/de/settings.json b/webview-ui/src/i18n/locales/de/settings.json
index c945610a345..8dc76333021 100644
--- a/webview-ui/src/i18n/locales/de/settings.json
+++ b/webview-ui/src/i18n/locales/de/settings.json
@@ -74,6 +74,20 @@
 		"description": "Beschreibung",
 		"apiProvider": "API-Anbieter",
 		"model": "Modell",
+		"nameEmpty": "Name darf nicht leer sein",
+		"nameExists": "Ein Profil mit diesem Namen existiert bereits",
+		"deleteProfile": "Profil löschen",
+		"invalidArnFormat": "Ungültiges ARN-Format. Überprüfen Sie die obigen Beispiele.",
+		"enterNewName": "Neuen Namen eingeben",
+		"addProfile": "Profil hinzufügen",
+		"renameProfile": "Profil umbenennen",
+		"newProfile": "Neues Konfigurationsprofil",
+		"enterProfileName": "Profilnamen eingeben",
+		"createProfile": "Profil erstellen",
+		"cannotDeleteOnlyProfile": "Das einzige Profil kann nicht gelöscht werden",
+		"vscodeLmDescription": "Die VS Code Language Model API ermöglicht das Ausführen von Modellen, die von anderen VS Code-Erweiterungen bereitgestellt werden (einschließlich, aber nicht beschränkt auf GitHub Copilot). Der einfachste Weg, um zu starten, besteht darin, die Erweiterungen Copilot und Copilot Chat aus dem VS Code Marketplace zu installieren.",
+		"awsCustomArnUse": "Geben Sie eine gültige AWS Bedrock ARN für das Modell ein, das Sie verwenden möchten. Formatbeispiele:",
+		"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",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWS Sitzungstoken",
 		"awsRegion": "AWS Region",
 		"awsCrossRegion": "Regionsübergreifende Inferenz verwenden",
+		"vscodeLmModel": "Sprachmodell",
+		"vscodeLmWarning": "Hinweis: Dies ist eine sehr experimentelle Integration und die Anbieterunterstützung variiert. Wenn Sie einen Fehler über ein nicht unterstütztes Modell erhalten, liegt das Problem auf Anbieterseite.",
 		"googleCloudSetup": {
 			"title": "Um Google Cloud Vertex AI zu verwenden, müssen Sie:",
 			"step1": "1. Ein Google Cloud-Konto erstellen, die Vertex AI API aktivieren & die gewünschten Claude-Modelle aktivieren.",
diff --git a/webview-ui/src/i18n/locales/en/settings.json b/webview-ui/src/i18n/locales/en/settings.json
index 0ce8dff96d9..3d3ae02a582 100644
--- a/webview-ui/src/i18n/locales/en/settings.json
+++ b/webview-ui/src/i18n/locales/en/settings.json
@@ -74,6 +74,20 @@
 		"description": "Description",
 		"apiProvider": "API Provider",
 		"model": "Model",
+		"nameEmpty": "Name cannot be empty",
+		"nameExists": "A profile with this name already exists",
+		"deleteProfile": "Delete Profile",
+		"invalidArnFormat": "Invalid ARN format. Please check the examples above.",
+		"enterNewName": "Enter new name",
+		"addProfile": "Add Profile",
+		"renameProfile": "Rename Profile",
+		"newProfile": "New Configuration Profile",
+		"enterProfileName": "Enter profile name",
+		"createProfile": "Create Profile",
+		"cannotDeleteOnlyProfile": "Cannot delete the only profile",
+		"vscodeLmDescription": " The VS Code Language Model API allows you to run models provided by other VS Code extensions (including but not limited to GitHub Copilot). The easiest way to get started is to install the Copilot and Copilot Chat extensions from the VS Code Marketplace.",
+		"awsCustomArnUse": "Enter a valid AWS Bedrock ARN for the model you want to use. Format examples:",
+		"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",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWS Session Token",
 		"awsRegion": "AWS Region",
 		"awsCrossRegion": "Use cross-region inference",
+		"vscodeLmModel": "Language Model",
+		"vscodeLmWarning": "Note: This is a very experimental integration and provider support will vary. If you get an error about a model not being supported, that's an issue on the provider's end.",
 		"googleCloudSetup": {
 			"title": "To use Google Cloud Vertex AI, you need to:",
 			"step1": "1. Create a Google Cloud account, enable the Vertex AI API & enable the desired Claude models.",
diff --git a/webview-ui/src/i18n/locales/es/settings.json b/webview-ui/src/i18n/locales/es/settings.json
index 3afde74e05e..e28b4289211 100644
--- a/webview-ui/src/i18n/locales/es/settings.json
+++ b/webview-ui/src/i18n/locales/es/settings.json
@@ -74,6 +74,20 @@
 		"description": "Descripción",
 		"apiProvider": "Proveedor de API",
 		"model": "Modelo",
+		"nameEmpty": "El nombre no puede estar vacío",
+		"nameExists": "Ya existe un perfil con este nombre",
+		"deleteProfile": "Eliminar perfil",
+		"invalidArnFormat": "Formato de ARN no válido. Verifica los ejemplos anteriores.",
+		"enterNewName": "Ingrese un nuevo nombre",
+		"addProfile": "Agregar perfil",
+		"renameProfile": "Renombrar perfil",
+		"newProfile": "Nuevo perfil de configuración",
+		"enterProfileName": "Ingrese el nombre del perfil",
+		"createProfile": "Crear perfil",
+		"cannotDeleteOnlyProfile": "No se puede eliminar el único perfil",
+		"vscodeLmDescription": "La API del Modelo de Lenguaje de VS Code le permite ejecutar modelos proporcionados por otras extensiones de VS Code (incluido, entre otros, GitHub Copilot). La forma más sencilla de empezar es instalar las extensiones Copilot y Copilot Chat desde el VS Code Marketplace.",
+		"awsCustomArnUse": "Ingrese un ARN de AWS Bedrock válido para el modelo que desea utilizar. Ejemplos de formato:",
+		"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",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "Token de sesión de AWS",
 		"awsRegion": "Región de AWS",
 		"awsCrossRegion": "Usar inferencia entre regiones",
+		"vscodeLmModel": "Modelo de lenguaje",
+		"vscodeLmWarning": "Nota: Esta es una integración muy experimental y el soporte del proveedor variará. Si recibe un error sobre un modelo no compatible, es un problema del proveedor.",
 		"googleCloudSetup": {
 			"title": "Para usar Google Cloud Vertex AI, necesita:",
 			"step1": "1. Crear una cuenta de Google Cloud, habilitar la API de Vertex AI y habilitar los modelos Claude deseados.",
diff --git a/webview-ui/src/i18n/locales/fr/settings.json b/webview-ui/src/i18n/locales/fr/settings.json
index 32400c6dd28..07e4264677a 100644
--- a/webview-ui/src/i18n/locales/fr/settings.json
+++ b/webview-ui/src/i18n/locales/fr/settings.json
@@ -74,6 +74,20 @@
 		"description": "Description",
 		"apiProvider": "Fournisseur d'API",
 		"model": "Modèle",
+		"nameEmpty": "Le nom ne peut pas être vide",
+		"nameExists": "Un profil avec ce nom existe déjà",
+		"deleteProfile": "Supprimer le profil",
+		"invalidArnFormat": "Format ARN invalide. Veuillez vérifier les exemples ci-dessus.",
+		"enterNewName": "Entrez un nouveau nom",
+		"addProfile": "Ajouter un profil",
+		"renameProfile": "Renommer le profil",
+		"newProfile": "Nouveau profil de configuration",
+		"enterProfileName": "Entrez le nom du profil",
+		"createProfile": "Créer un profil",
+		"cannotDeleteOnlyProfile": "Impossible de supprimer le seul profil",
+		"vscodeLmDescription": "L'API du modèle de langage VS Code vous permet d'exécuter des modèles fournis par d'autres extensions VS Code (y compris, mais sans s'y limiter, GitHub Copilot). Le moyen le plus simple de commencer est d'installer les extensions Copilot et Copilot Chat depuis le VS Code Marketplace.",
+		"awsCustomArnUse": "Entrez un ARN AWS Bedrock valide pour le modèle que vous souhaitez utiliser. Exemples de format :",
+		"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",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "Jeton de session AWS",
 		"awsRegion": "Région AWS",
 		"awsCrossRegion": "Utiliser l'inférence inter-régions",
+		"vscodeLmModel": "Modèle de langage",
+		"vscodeLmWarning": "Remarque : Il s'agit d'une intégration très expérimentale et le support des fournisseurs variera. Si vous recevez une erreur concernant un modèle non pris en charge, c'est un problème du côté du fournisseur.",
 		"googleCloudSetup": {
 			"title": "Pour utiliser Google Cloud Vertex AI, vous devez :",
 			"step1": "1. Créer un compte Google Cloud, activer l'API Vertex AI et activer les modèles Claude souhaités.",
diff --git a/webview-ui/src/i18n/locales/hi/settings.json b/webview-ui/src/i18n/locales/hi/settings.json
index ad0c9463b7d..639628dd078 100644
--- a/webview-ui/src/i18n/locales/hi/settings.json
+++ b/webview-ui/src/i18n/locales/hi/settings.json
@@ -74,6 +74,20 @@
 		"description": "विवरण",
 		"apiProvider": "API प्रदाता",
 		"model": "मॉडल",
+		"nameEmpty": "नाम खाली नहीं हो सकता",
+		"nameExists": "इस नाम वाला प्रोफ़ाइल पहले से मौजूद है",
+		"deleteProfile": "प्रोफ़ाइल हटाएं",
+		"invalidArnFormat": "अमान्य ARN प्रारूप। कृपया ऊपर दिए गए उदाहरण देखें।",
+		"enterNewName": "नया नाम दर्ज करें",
+		"addProfile": "प्रोफ़ाइल जोड़ें",
+		"renameProfile": "प्रोफ़ाइल का नाम बदलें",
+		"newProfile": "नया कॉन्फ़िगरेशन प्रोफ़ाइल",
+		"enterProfileName": "प्रोफ़ाइल नाम दर्ज करें",
+		"createProfile": "प्रोफ़ाइल बनाएं",
+		"cannotDeleteOnlyProfile": "केवल एकमात्र प्रोफ़ाइल को हटाया नहीं जा सकता",
+		"vscodeLmDescription": "VS कोड भाषा मॉडल API आपको अन्य VS कोड एक्सटेंशन (जैसे GitHub Copilot) द्वारा प्रदान किए गए मॉडल चलाने की अनुमति देता है। शुरू करने का सबसे आसान तरीका VS कोड मार्केटप्लेस से Copilot और Copilot चैट एक्सटेंशन इंस्टॉल करना है।",
+		"awsCustomArnUse": "आप जिस मॉडल का उपयोग करना चाहते हैं, उसके लिए एक वैध AWS बेडरॉक ARN दर्ज करें। प्रारूप उदाहरण:",
+		"awsCustomArnDesc": "सुनिश्चित करें कि ARN में क्षेत्र ऊपर चयनित AWS क्षेत्र से मेल खाता है।",
 		"openRouterApiKey": "OpenRouter API कुंजी",
 		"getOpenRouterApiKey": "OpenRouter API कुंजी प्राप्त करें",
 		"apiKeyStorageNotice": "API कुंजियाँ VSCode के सुरक्षित स्टोरेज में सुरक्षित रूप से संग्रहीत हैं",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWS सत्र टोकन",
 		"awsRegion": "AWS क्षेत्र",
 		"awsCrossRegion": "क्रॉस-क्षेत्र अनुमान का उपयोग करें",
+		"vscodeLmModel": "भाषा मॉडल",
+		"vscodeLmWarning": "नोट: यह एक बहुत ही प्रायोगिक एकीकरण है और प्रदाता समर्थन भिन्न होगा। यदि आपको किसी मॉडल के समर्थित न होने की त्रुटि मिलती है, तो यह प्रदाता की ओर से एक समस्या है।",
 		"googleCloudSetup": {
 			"title": "Google Cloud Vertex AI का उपयोग करने के लिए, आपको आवश्यकता है:",
 			"step1": "1. Google Cloud खाता बनाएं, Vertex AI API सक्षम करें और वांछित Claude मॉडल सक्षम करें।",
diff --git a/webview-ui/src/i18n/locales/it/settings.json b/webview-ui/src/i18n/locales/it/settings.json
index 405a7c1929e..d1d0ffb0ee9 100644
--- a/webview-ui/src/i18n/locales/it/settings.json
+++ b/webview-ui/src/i18n/locales/it/settings.json
@@ -74,6 +74,20 @@
 		"description": "Descrizione",
 		"apiProvider": "Fornitore API",
 		"model": "Modello",
+		"nameEmpty": "Il nome non può essere vuoto",
+		"nameExists": "Esiste già un profilo con questo nome",
+		"deleteProfile": "Elimina profilo",
+		"invalidArnFormat": "Formato ARN non valido. Controlla gli esempi sopra.",
+		"enterNewName": "Inserisci un nuovo nome",
+		"addProfile": "Aggiungi profilo",
+		"renameProfile": "Rinomina profilo",
+		"newProfile": "Nuovo profilo di configurazione",
+		"enterProfileName": "Inserisci il nome del profilo",
+		"createProfile": "Crea profilo",
+		"cannotDeleteOnlyProfile": "Impossibile eliminare l'unico profilo",
+		"vscodeLmDescription": "L'API del Modello di Linguaggio di VS Code consente di eseguire modelli forniti da altre estensioni di VS Code (incluso, ma non limitato a, GitHub Copilot). Il modo più semplice per iniziare è installare le estensioni Copilot e Copilot Chat dal VS Code Marketplace.",
+		"awsCustomArnUse": "Inserisci un ARN AWS Bedrock valido per il modello che desideri utilizzare. Esempi di formato:",
+		"awsCustomArnDesc": "Assicurati che la regione nell'ARN corrisponda alla regione AWS selezionata sopra.",
 		"openRouterApiKey": "Chiave API OpenRouter",
 		"getOpenRouterApiKey": "Ottieni chiave API OpenRouter",
 		"apiKeyStorageNotice": "Le chiavi API sono memorizzate in modo sicuro nell'Archivio Segreto di VSCode",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "Token di sessione AWS",
 		"awsRegion": "Regione AWS",
 		"awsCrossRegion": "Usa inferenza cross-regione",
+		"vscodeLmModel": "Modello linguistico",
+		"vscodeLmWarning": "Nota: Questa è un'integrazione molto sperimentale e il supporto del fornitore varierà. Se ricevi un errore relativo a un modello non supportato, si tratta di un problema del fornitore.",
 		"googleCloudSetup": {
 			"title": "Per utilizzare Google Cloud Vertex AI, è necessario:",
 			"step1": "1. Creare un account Google Cloud, abilitare l'API Vertex AI e abilitare i modelli Claude desiderati.",
diff --git a/webview-ui/src/i18n/locales/ja/settings.json b/webview-ui/src/i18n/locales/ja/settings.json
index b9147af1863..17ce51c7e3f 100644
--- a/webview-ui/src/i18n/locales/ja/settings.json
+++ b/webview-ui/src/i18n/locales/ja/settings.json
@@ -74,6 +74,20 @@
 		"description": "説明",
 		"apiProvider": "APIプロバイダー",
 		"model": "モデル",
+		"nameEmpty": "名前を空にすることはできません",
+		"nameExists": "この名前のプロファイルは既に存在します",
+		"deleteProfile": "プロファイルを削除",
+		"invalidArnFormat": "無効なARN形式です。上記の例を確認してください。",
+		"enterNewName": "新しい名前を入力してください",
+		"addProfile": "プロファイルを追加",
+		"renameProfile": "プロファイル名を変更",
+		"newProfile": "新しい構成プロファイル",
+		"enterProfileName": "プロファイル名を入力",
+		"createProfile": "プロファイルを作成",
+		"cannotDeleteOnlyProfile": "唯一のプロファイルは削除できません",
+		"vscodeLmDescription": "VS Code言語モデルAPIを使用すると、他のVS Code拡張機能（GitHub Copilotなど）が提供するモデルを実行できます。最も簡単な方法は、VS Code MarketplaceからCopilotおよびCopilot Chat拡張機能をインストールすることです。",
+		"awsCustomArnUse": "使用したいモデルの有効なAWS Bedrock ARNを入力してください。形式の例:",
+		"awsCustomArnDesc": "ARN内のリージョンが上で選択したAWSリージョンと一致していることを確認してください。",
 		"openRouterApiKey": "OpenRouter APIキー",
 		"getOpenRouterApiKey": "OpenRouter APIキーを取得",
 		"apiKeyStorageNotice": "APIキーはVSCodeのシークレットストレージに安全に保存されます",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWSセッショントークン",
 		"awsRegion": "AWSリージョン",
 		"awsCrossRegion": "クロスリージョン推論を使用",
+		"vscodeLmModel": "言語モデル",
+		"vscodeLmWarning": "注意：これは非常に実験的な統合であり、プロバイダーのサポートは異なります。モデルがサポートされていないというエラーが表示された場合、それはプロバイダー側の問題です。",
 		"googleCloudSetup": {
 			"title": "Google Cloud Vertex AIを使用するには：",
 			"step1": "1. Google Cloudアカウントを作成し、Vertex AI APIを有効にして、希望するClaudeモデルを有効にします。",
diff --git a/webview-ui/src/i18n/locales/ko/settings.json b/webview-ui/src/i18n/locales/ko/settings.json
index ce95af236a6..7ea2082d189 100644
--- a/webview-ui/src/i18n/locales/ko/settings.json
+++ b/webview-ui/src/i18n/locales/ko/settings.json
@@ -74,6 +74,20 @@
 		"description": "설명",
 		"apiProvider": "API 제공자",
 		"model": "모델",
+		"nameEmpty": "이름은 비워둘 수 없습니다",
+		"nameExists": "이 이름의 프로필이 이미 존재합니다",
+		"deleteProfile": "프로필 삭제",
+		"invalidArnFormat": "잘못된 ARN 형식입니다. 위의 예시를 확인하세요.",
+		"enterNewName": "새 이름 입력",
+		"addProfile": "프로필 추가",
+		"renameProfile": "프로필 이름 변경",
+		"newProfile": "새 구성 프로필",
+		"enterProfileName": "프로필 이름 입력",
+		"createProfile": "프로필 생성",
+		"cannotDeleteOnlyProfile": "유일한 프로필은 삭제할 수 없습니다",
+		"vscodeLmDescription": "VS Code 언어 모델 API를 사용하면 GitHub Copilot을 포함한 기타 VS Code 확장 프로그램이 제공하는 모델을 실행할 수 있습니다. 시작하려면 VS Code 마켓플레이스에서 Copilot 및 Copilot Chat 확장 프로그램을 설치하는 것이 가장 쉽습니다.",
+		"awsCustomArnUse": "사용하려는 모델의 유효한 AWS Bedrock ARN을 입력하세요. 형식 예시:",
+		"awsCustomArnDesc": "ARN의 리전이 위에서 선택한 AWS 리전과 일치하는지 확인하세요.",
 		"openRouterApiKey": "OpenRouter API 키",
 		"getOpenRouterApiKey": "OpenRouter API 키 받기",
 		"apiKeyStorageNotice": "API 키는 VSCode의 보안 저장소에 안전하게 저장됩니다",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWS 세션 토큰",
 		"awsRegion": "AWS 리전",
 		"awsCrossRegion": "교차 리전 추론 사용",
+		"vscodeLmModel": "언어 모델",
+		"vscodeLmWarning": "참고: 이는 매우 실험적인 통합이며, 공급자 지원은 다를 수 있습니다. 모델이 지원되지 않는다는 오류가 발생하면, 이는 공급자 측의 문제입니다.",
 		"googleCloudSetup": {
 			"title": "Google Cloud Vertex AI를 사용하려면:",
 			"step1": "1. Google Cloud 계정을 만들고, Vertex AI API를 활성화하고, 원하는 Claude 모델을 활성화하세요.",
diff --git a/webview-ui/src/i18n/locales/pl/settings.json b/webview-ui/src/i18n/locales/pl/settings.json
index cb874365e2e..3534915c988 100644
--- a/webview-ui/src/i18n/locales/pl/settings.json
+++ b/webview-ui/src/i18n/locales/pl/settings.json
@@ -74,6 +74,20 @@
 		"description": "Opis",
 		"apiProvider": "Dostawca API",
 		"model": "Model",
+		"nameEmpty": "Nazwa nie może być pusta",
+		"nameExists": "Profil o tej nazwie już istnieje",
+		"deleteProfile": "Usuń profil",
+		"invalidArnFormat": "Nieprawidłowy format ARN. Sprawdź powyższe przykłady.",
+		"enterNewName": "Wprowadź nową nazwę",
+		"addProfile": "Dodaj profil",
+		"renameProfile": "Zmień nazwę profilu",
+		"newProfile": "Nowy profil konfiguracji",
+		"enterProfileName": "Wprowadź nazwę profilu",
+		"createProfile": "Utwórz profil",
+		"cannotDeleteOnlyProfile": "Nie można usunąć jedynego profilu",
+		"vscodeLmDescription": "Interfejs API modelu językowego VS Code umożliwia uruchamianie modeli dostarczanych przez inne rozszerzenia VS Code (w tym, ale nie tylko, GitHub Copilot). Najłatwiejszym sposobem na rozpoczęcie jest zainstalowanie rozszerzeń Copilot i Copilot Chat z VS Code Marketplace.",
+		"awsCustomArnUse": "Wprowadź prawidłowy AWS Bedrock ARN dla modelu, którego chcesz użyć. Przykłady formatu:",
+		"awsCustomArnDesc": "Upewnij się, że region w ARN odpowiada wybranemu powyżej regionowi AWS.",
 		"openRouterApiKey": "Klucz API OpenRouter",
 		"getOpenRouterApiKey": "Uzyskaj klucz API OpenRouter",
 		"apiKeyStorageNotice": "Klucze API są bezpiecznie przechowywane w Tajnym Magazynie VSCode",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "Token sesji AWS",
 		"awsRegion": "Region AWS",
 		"awsCrossRegion": "Użyj wnioskowania międzyregionalnego",
+		"vscodeLmModel": "Model językowy",
+		"vscodeLmWarning": "Uwaga: To bardzo eksperymentalna integracja, a wsparcie dostawcy może się różnić. Jeśli otrzymasz błąd dotyczący nieobsługiwanego modelu, jest to problem po stronie dostawcy.",
 		"googleCloudSetup": {
 			"title": "Aby korzystać z Google Cloud Vertex AI, potrzebujesz:",
 			"step1": "1. Utworzyć konto Google Cloud, włączyć API Vertex AI i włączyć żądane modele Claude.",
diff --git a/webview-ui/src/i18n/locales/pt-BR/settings.json b/webview-ui/src/i18n/locales/pt-BR/settings.json
index c109779d040..677e005e3ff 100644
--- a/webview-ui/src/i18n/locales/pt-BR/settings.json
+++ b/webview-ui/src/i18n/locales/pt-BR/settings.json
@@ -74,6 +74,20 @@
 		"description": "Descrição",
 		"apiProvider": "Provedor de API",
 		"model": "Modelo",
+		"nameEmpty": "O nome não pode estar vazio",
+		"nameExists": "Já existe um perfil com este nome",
+		"deleteProfile": "Excluir perfil",
+		"invalidArnFormat": "Formato de ARN inválido. Verifique os exemplos acima.",
+		"enterNewName": "Digite um novo nome",
+		"addProfile": "Adicionar perfil",
+		"renameProfile": "Renomear perfil",
+		"newProfile": "Novo perfil de configuração",
+		"enterProfileName": "Digite o nome do perfil",
+		"createProfile": "Criar perfil",
+		"cannotDeleteOnlyProfile": "Não é possível excluir o único perfil",
+		"vscodeLmDescription": "A API do Modelo de Linguagem do VS Code permite executar modelos fornecidos por outras extensões do VS Code (incluindo, mas não se limitando, ao GitHub Copilot). A maneira mais fácil de começar é instalar as extensões Copilot e Copilot Chat no VS Code Marketplace.",
+		"awsCustomArnUse": "Insira um ARN AWS Bedrock válido para o modelo que deseja usar. Exemplos de formato:",
+		"awsCustomArnDesc": "Certifique-se de que a região no ARN corresponde à região AWS selecionada acima.",
 		"openRouterApiKey": "Chave de API OpenRouter",
 		"getOpenRouterApiKey": "Obter chave de API OpenRouter",
 		"apiKeyStorageNotice": "As chaves de API são armazenadas com segurança no Armazenamento Secreto do VSCode",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "Token de Sessão AWS",
 		"awsRegion": "Região AWS",
 		"awsCrossRegion": "Usar inferência entre regiões",
+		"vscodeLmModel": "Modelo de Linguagem",
+		"vscodeLmWarning": "Nota: Esta é uma integração muito experimental e o suporte do provedor pode variar. Se você receber um erro sobre um modelo não ser suportado, isso é um problema do lado do provedor.",
 		"googleCloudSetup": {
 			"title": "Para usar o Google Cloud Vertex AI, você precisa:",
 			"step1": "1. Criar uma conta Google Cloud, ativar a API Vertex AI e ativar os modelos Claude desejados.",
diff --git a/webview-ui/src/i18n/locales/tr/settings.json b/webview-ui/src/i18n/locales/tr/settings.json
index 05d05c60774..a1babd31560 100644
--- a/webview-ui/src/i18n/locales/tr/settings.json
+++ b/webview-ui/src/i18n/locales/tr/settings.json
@@ -74,6 +74,20 @@
 		"description": "Açıklama",
 		"apiProvider": "API Sağlayıcı",
 		"model": "Model",
+		"nameEmpty": "İsim boş olamaz",
+		"nameExists": "Bu isme sahip bir profil zaten mevcut",
+		"deleteProfile": "Profili sil",
+		"invalidArnFormat": "Geçersiz ARN formatı. Yukarıdaki örnekleri kontrol edin.",
+		"enterNewName": "Yeni ad girin",
+		"addProfile": "Profil ekle",
+		"renameProfile": "Profili yeniden adlandır",
+		"newProfile": "Yeni yapılandırma profili",
+		"enterProfileName": "Profil adını girin",
+		"createProfile": "Profil oluştur",
+		"cannotDeleteOnlyProfile": "Yalnızca tek profili silemezsiniz",
+		"vscodeLmDescription": "VS Code Dil Modeli API'si, diğer VS Code uzantıları tarafından sağlanan modelleri çalıştırmanıza olanak tanır (GitHub Copilot dahil ancak bunlarla sınırlı değildir). Başlamanın en kolay yolu, VS Code Marketplace'ten Copilot ve Copilot Chat uzantılarını yüklemektir.",
+		"awsCustomArnUse": "Kullanmak istediğiniz model için geçerli bir AWS Bedrock ARN'si girin. Format örnekleri:",
+		"awsCustomArnDesc": "ARN içindeki bölgenin yukarıda seçilen AWS Bölgesiyle eşleştiğinden emin olun.",
 		"openRouterApiKey": "OpenRouter API Anahtarı",
 		"getOpenRouterApiKey": "OpenRouter API Anahtarı Al",
 		"apiKeyStorageNotice": "API anahtarları VSCode'un Gizli Depolamasında güvenli bir şekilde saklanır",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWS Oturum Belirteci",
 		"awsRegion": "AWS Bölgesi",
 		"awsCrossRegion": "Bölgeler arası çıkarım kullan",
+		"vscodeLmModel": "Dil Modeli",
+		"vscodeLmWarning": "Not: Bu çok deneysel bir entegrasyondur ve sağlayıcı desteği değişebilir. Bir modelin desteklenmediğine dair bir hata alırsanız, bu sağlayıcı tarafındaki bir sorundur.",
 		"googleCloudSetup": {
 			"title": "Google Cloud Vertex AI'yi kullanmak için şunları yapmanız gerekir:",
 			"step1": "1. Google Cloud hesabı oluşturun, Vertex AI API'sini etkinleştirin ve istediğiniz Claude modellerini etkinleştirin.",
diff --git a/webview-ui/src/i18n/locales/vi/settings.json b/webview-ui/src/i18n/locales/vi/settings.json
index 8ad97455a2e..5a56bbc7cce 100644
--- a/webview-ui/src/i18n/locales/vi/settings.json
+++ b/webview-ui/src/i18n/locales/vi/settings.json
@@ -74,6 +74,20 @@
 		"description": "Mô tả",
 		"apiProvider": "Nhà cung cấp API",
 		"model": "Mẫu",
+		"nameEmpty": "Tên không được để trống",
+		"nameExists": "Đã tồn tại một hồ sơ với tên này",
+		"deleteProfile": "Xóa hồ sơ",
+		"invalidArnFormat": "Định dạng ARN không hợp lệ. Vui lòng kiểm tra các ví dụ ở trên.",
+		"enterNewName": "Nhập tên mới",
+		"addProfile": "Thêm hồ sơ",
+		"renameProfile": "Đổi tên hồ sơ",
+		"newProfile": "Hồ sơ cấu hình mới",
+		"enterProfileName": "Nhập tên hồ sơ",
+		"createProfile": "Tạo hồ sơ",
+		"cannotDeleteOnlyProfile": "Không thể xóa hồ sơ duy nhất",
+		"vscodeLmDescription": "API Mô hình Ngôn ngữ VS Code cho phép bạn chạy các mô hình được cung cấp bởi các tiện ích mở rộng khác của VS Code (bao gồm nhưng không giới hạn ở GitHub Copilot). Cách dễ nhất để bắt đầu là cài đặt các tiện ích mở rộng Copilot và Copilot Chat từ VS Code Marketplace.",
+		"awsCustomArnUse": "Nhập một ARN AWS Bedrock hợp lệ cho mô hình bạn muốn sử dụng. Ví dụ về định dạng:",
+		"awsCustomArnDesc": "Đảm bảo rằng vùng trong ARN khớp với vùng AWS đã chọn ở trên.",
 		"openRouterApiKey": "Khóa API OpenRouter",
 		"getOpenRouterApiKey": "Lấy khóa API OpenRouter",
 		"apiKeyStorageNotice": "Khóa API được lưu trữ an toàn trong Bộ lưu trữ bí mật của VSCode",
@@ -103,6 +117,8 @@
 		"awsSessionToken": "Token phiên AWS",
 		"awsRegion": "Vùng AWS",
 		"awsCrossRegion": "Sử dụng suy luận liên vùng",
+		"vscodeLmModel": "Mô hình ngôn ngữ",
+		"vscodeLmWarning": "Lưu ý: Đây là tích hợp thử nghiệm và hỗ trợ nhà cung cấp có thể khác nhau. Nếu bạn nhận được lỗi về mô hình không được hỗ trợ, đó là vấn đề từ phía nhà cung cấp.",
 		"googleCloudSetup": {
 			"title": "Để sử dụng Google Cloud Vertex AI, bạn cần:",
 			"step1": "1. Tạo tài khoản Google Cloud, kích hoạt Vertex AI API và kích hoạt các mô hình Claude mong muốn.",
diff --git a/webview-ui/src/i18n/locales/zh-CN/settings.json b/webview-ui/src/i18n/locales/zh-CN/settings.json
index a55c94e940d..85220108be8 100644
--- a/webview-ui/src/i18n/locales/zh-CN/settings.json
+++ b/webview-ui/src/i18n/locales/zh-CN/settings.json
@@ -74,6 +74,20 @@
 		"description": "描述",
 		"apiProvider": "API 提供商",
 		"model": "模型",
+		"nameEmpty": "名称不能为空",
+		"nameExists": "已存在同名的配置文件",
+		"deleteProfile": "删除配置文件",
+		"invalidArnFormat": "无效的 ARN 格式。请检查上面的示例。",
+		"enterNewName": "输入新名称",
+		"addProfile": "添加配置文件",
+		"renameProfile": "重命名配置文件",
+		"newProfile": "新建配置文件",
+		"enterProfileName": "输入新配置文件名称",
+		"createProfile": "创建配置文件",
+		"cannotDeleteOnlyProfile": "无法删除唯一的配置文件",
+		"vscodeLmDescription": "VS Code 语言模型 API 允许您运行由其他 VS Code 扩展（包括但不限于 GitHub Copilot）提供的模型。最简单的方法是从 VS Code 市场安装 Copilot 和 Copilot Chat 扩展。",
+		"awsCustomArnUse": "输入您要使用的模型的有效 AWS Bedrock ARN。格式示例：",
+		"awsCustomArnDesc": "确保 ARN 中的区域与您上面选择的 AWS 区域匹配。",
 		"openRouterApiKey": "OpenRouter API 密钥",
 		"getOpenRouterApiKey": "获取 OpenRouter API 密钥",
 		"apiKeyStorageNotice": "API 密钥安全存储在 VSCode 的密钥存储中",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWS 会话令牌",
 		"awsRegion": "AWS 区域",
 		"awsCrossRegion": "使用跨区域推理",
+		"vscodeLmModel": "VSCode LM 模型",
+		"vscodeLmWarning": "注意：这是一个非常实验性的集成，提供商支持会有所不同。如果您收到有关不支持模型的错误，则这是提供商方面的问题。",
 		"googleCloudSetup": {
 			"title": "要使用 Google Cloud Vertex AI，您需要：",
 			"step1": "1. 创建 Google Cloud 账户，启用 Vertex AI API 并启用所需的 Claude 模型。",
diff --git a/webview-ui/src/i18n/locales/zh-TW/settings.json b/webview-ui/src/i18n/locales/zh-TW/settings.json
index d6c531db266..a46ff308a63 100644
--- a/webview-ui/src/i18n/locales/zh-TW/settings.json
+++ b/webview-ui/src/i18n/locales/zh-TW/settings.json
@@ -74,6 +74,20 @@
 		"description": "描述",
 		"apiProvider": "API 提供者",
 		"model": "模型",
+		"nameEmpty": "名稱不能為空",
+		"nameExists": "已存在同名的設定檔",
+		"deleteProfile": "刪除設定檔",
+		"invalidArnFormat": "無效的 ARN 格式。請檢查上面的範例。",
+		"enterNewName": "輸入新名稱",
+		"addProfile": "新增設定檔",
+		"renameProfile": "重新命名設定檔",
+		"newProfile": "新建設定檔",
+		"enterProfileName": "輸入設定檔名稱",
+		"createProfile": "建立設定檔",
+		"cannotDeleteOnlyProfile": "無法刪除唯一的設定檔",
+		"vscodeLmDescription": "VS Code 語言模型 API 允許您運行其他 VS Code 擴展提供的模型（包括但不限於 GitHub Copilot）。最簡單的方式是從 VS Code Marketplace 安裝 Copilot 和 Copilot Chat 擴展。",
+		"awsCustomArnUse": "輸入您要使用的模型的有效 AWS Bedrock ARN。格式範例：",
+		"awsCustomArnDesc": "確保 ARN 中的區域與您上面選擇的 AWS 區域匹配。",
 		"openRouterApiKey": "OpenRouter API 金鑰",
 		"getOpenRouterApiKey": "取得 OpenRouter API 金鑰",
 		"apiKeyStorageNotice": "API 金鑰安全儲存在 VSCode 的秘密儲存中",
@@ -104,6 +118,8 @@
 		"awsSessionToken": "AWS 工作階段權杖",
 		"awsRegion": "AWS 區域",
 		"awsCrossRegion": "使用跨區域推論",
+		"vscodeLmModel": "VSCode LM 模型",
+		"vscodeLmWarning": "注意：這是一個非常實驗性的集成，提供者支援會有所不同。如果您收到有關不支援模型的錯誤，那麼這是提供者方面的問題。",
 		"googleCloudSetup": {
 			"title": "要使用 Google Cloud Vertex AI，您需要：",
 			"step1": "1. 建立 Google Cloud 帳戶，啟用 Vertex AI API 並啟用所需的 Claude 模型。",


Reviews:
user: login: ellipsis-dev[bot]
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T16:42:22Z
user: login: feifei325
state: COMMENTED
author_association: CONTRIBUTOR
submitted_at: 2025-03-17T16:47:35Z
user: login: mrubens
state: APPROVED
author_association: COLLABORATOR
submitted_at: 2025-03-17T16:49:07Z

Review comments:
diff_hunk: @@ -0,0 +1,195 @@
+const fs = require("fs")
+const path = require("path")
+
+// Parse command-line arguments
+const args = process.argv.slice(2).reduce((acc, arg) => {
+	if (arg === "--help") {
+		acc.help = true
+	} else if (arg.startsWith("--locale=")) {
+		acc.locale = arg.split("=")[1]
+	} else if (arg.startsWith("--file=")) {
+		acc.file = arg.split("=")[1]
+	}
+	return acc
+}, {})
+
+// Display help information
+if (args.help) {
+	console.log(`
+Find missing i18n translations
+
+A useful script to identify whether the i18n keys used in component files exist in all language files.
+
+Usage:
+  node scripts/find-missing-i18n-key.js [options]
+
+Options:
+  --locale=<locale>   Only check a specific language (e.g., --locale=de)
+  --file=<file>       Only check a specific file (e.g., --file=chat.json)
+  --help              Display help information
+
+Output:
+  - Generate a report of missing translations
+  `)
+	process.exit(0)
+}
+
+// Directory to traverse
+const TARGET_DIR = path.join(__dirname, "../webview-ui/src/components")
+const LOCALES_DIR = path.join(__dirname, "../webview-ui/src/i18n/locales")
+
+// Regular expressions to match i18n keys
+const i18nPatterns = [
+	/{t\("([^"]+)"\)}/g, // Match {t("key")} format
+	/i18nKey="([^"]+)"/g, // Match i18nKey="key" format
+	/t\("([a-zA-Z][a-zA-Z0-9_]*[:.][a-zA-Z0-9_.]+)"\)/g, // Match t("key") format, where key contains a colon or dot
+]
+
+// Get all language directories
+function getLocaleDirs() {
+	const allLocales = fs.readdirSync(LOCALES_DIR).filter((file) => {
+		const stats = fs.statSync(path.join(LOCALES_DIR, file))
+		return stats.isDirectory() // Do not exclude any language directories
+	})
+
+	// Filter to a specific language if specified
+	return args.locale ? allLocales.filter((locale) => locale === args.locale) : allLocales
+}
+
+// Recursively find all keys in an object
+function findKeys(obj, parentKey = "") {
path: scripts/find-missing-i18n-key.js
user: login: ellipsis-dev[bot]
body: This is an exact duplicate of the existing `findKeys` function. Consider reusing the existing implementation.

- function `findKeys` ([find-missing-translations.js](https://github.com/RooVetGit/Roo-Code/blob/73d7bcb8ab454ac7b8b2ccdf4bceb12cb01c6044/scripts/find-missing-translations.js#L54-L70))
created_at: 2025-03-17T16:42:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -74,6 +74,20 @@
 		"description": "描述",
 		"apiProvider": "API 提供者",
 		"model": "模型",
+		"nameEmpty": "名稱不能為空",
+		"nameExists": "已存在同名的設定檔",
+		"deleteProfile": "刪除設定檔",
+		"invalidArnFormat": "無效的 ARN 格式。請檢查上面的範例。",
+		"enterNewName": "輸入新名稱",
+		"addProfile": "新增設定檔",
+		"renameProfile": "重新命名設定檔",
+		"newProfile": "新建配置檔案",
path: webview-ui/src/i18n/locales/zh-TW/settings.json
user: login: ellipsis-dev[bot]
body: The key `newProfile` uses the text '新建配置檔案', whereas other similar keys use '設定檔'. Consider using consistent terminology (e.g., '新建設定檔') unless the difference is intentional.
```suggestion
		"newProfile": "新建設定檔",
```
created_at: 2025-03-17T16:42:21Z
author_association: CONTRIBUTOR
diff_hunk: @@ -74,6 +74,20 @@
 		"description": "描述",
 		"apiProvider": "API 提供者",
 		"model": "模型",
+		"nameEmpty": "名稱不能為空",
+		"nameExists": "已存在同名的設定檔",
+		"deleteProfile": "刪除設定檔",
+		"invalidArnFormat": "無效的 ARN 格式。請檢查上面的範例。",
+		"enterNewName": "輸入新名稱",
+		"addProfile": "新增設定檔",
+		"renameProfile": "重新命名設定檔",
+		"newProfile": "新建配置檔案",
path: webview-ui/src/i18n/locales/zh-TW/settings.json
user: login: feifei325
body: ok
created_at: 2025-03-17T16:47:35Z
author_association: CONTRIBUTOR

PR comments:
user: login: changeset-bot[bot]
created_at: 2025-03-17T16:38:47Z
body: ###  ⚠️  No Changeset found

Latest commit: fddb611c88e1d7105db480593303839f2524ad0c

Merging this PR will not cause a version bump for any packages. If these changes should not result in a new version, you're good to go. **If these changes should result in a version bump, you need to add a changeset.**

<details><summary>This PR includes no changesets</summary>

  When changesets are added to this PR, you'll see the packages that this PR includes changesets for and the associated semver types

</details>

[Click here to learn what changesets are, and how to add one](https://github.com/changesets/changesets/blob/main/docs/adding-a-changeset.md).

[Click here if you're a maintainer who wants to add a changeset to this PR](https://github.com/feifei325/Roo-Code/new/i18n/fix_missing_settings_key?filename=.changeset/dry-numbers-perform.md&value=---%0A%22roo-cline%22%3A%20patch%0A---%0A%0Afix%20missing%20settings%20key%20and%20add%20find%20i18n%20key%20scripts%0A)


author_association: NONE
user: login: ellipsis-dev[bot]
created_at: 2025-03-17T16:40:34Z
body: The pull request includes changes across 18 files, with 448 lines added and 1 line removed. The changes are primarily focused on adding new localization keys for various languages and introducing a script for finding missing i18n keys. These changes are interconnected as the script supports the localization effort by identifying missing keys. Therefore, it seems appropriate to keep these changes in a single pull request as they serve a unified purpose.
author_association: CONTRIBUTOR