LocaleSmith
El texto de cada clave .resx justo donde se usa la clave: los valores tras la línea, todas las traducciones al pasar el ratón, y las traducciones que faltan y los marcadores de posición incorrectos señalados antes de que los vean sus usuarios.
Gratis · Visual Studio 2022 y 2026 · 14 idiomas de interfaz · sin telemetría
Por qué LocaleSmith

Código que se lee
Strings.InvoiceSaved dice poco; «Invoice {0} saved» lo dice todo. El texto aparece tras la línea, discreto y en cursiva.
Todos los idiomas a mano
Pase el ratón sobre un valor para ver todas sus traducciones. O cambie todo el editor a alemán o japonés para ver sus pantallas antes de ejecutar la aplicación.
Errores detectados antes que sus usuarios
Traducciones que faltan, un {1} que el texto predeterminado no tiene, una errata en una clave, un string.Format con muy pocos argumentos: todo subrayado en el código.
Gratis y sin letra pequeña
Sin suscripción, sin período de prueba, sin avisos molestos, sin telemetría. Funciona en Visual Studio 2022 y 2026, x64 y ARM64.
Características
- Valores junto a las claves: el texto de cada clave tras su línea, entre comillas; los marcadores de posición como
{0}van en color y los saltos de línea se muestran como ↵. - Idioma de vista previa: los valores en cualquier idioma de sus recursos; un valor que .NET tomaría de los recursos predeterminados aparece en amarillo con ⚠.
- Todas las traducciones al pasar el ratón: una tarjeta con todos los idiomas de la clave; un clic abre el .resx de ese idioma justo en el valor, y si el valor falta, se añade automáticamente.
- Problemas en el código: traducciones que faltan, marcadores de posición que no coinciden, claves desconocidas y llamadas a
string.Formatcon un número incorrecto de argumentos, con subrayado ondulado. - Extraer a recurso: Ctrl+. sobre una cadena en C#, Visual Basic o XAML la mueve a un archivo .resx y pone la clave en su lugar.
- Siempre al día: los archivos .resx de la solución se leen en segundo plano y se vigilan; un cambio guardado se ve al instante.
- Temas oscuro y claro: los colores siguen el tema de Visual Studio.
Claves que reconoce
| En el código | Dónde |
|---|---|
Strings.Key, Properties.Resources.Key | C#, Visual Basic, F# |
{x:Static res:Strings.Key} | XAML (WPF, WinUI, MAUI, Avalonia) |
localizer["Key"], @Localizer["Key"] | ASP.NET Core y Blazor: IStringLocalizer, IViewLocalizer |
GetString("Key") | ResourceManager y localizadores |
Todas las traducciones al pasar el ratón
Deje el puntero sobre un valor: la tarjeta muestra la clave en todos los idiomas, y las que faltan, en amarillo. Haga clic en un idioma para abrir su .resx con el valor seleccionado; basta con escribir encima. Abrir en .resx y Copiar clave están arriba.

Problemas
Los problemas son subrayados ondulados como las advertencias del compilador, así que cualquier herramienta que muestre esas advertencias también los muestra; LensSmith los escribe al final de la línea. Cada regla se puede desactivar.

| Regla | Qué se subraya |
|---|---|
| LOC001 | Una clave que falta en algunos archivos de idioma, con la lista de esos idiomas. |
| LOC002 | Una traducción con marcadores de posición distintos de los del texto predeterminado; uno de más falla en tiempo de ejecución y se marca como error. |
| LOC003 | localizer["Key"] o GetString("Key") con una clave que no está en ningún archivo de recursos, junto con la clave existente más parecida. |
| LOC004 | string.Format(Strings.Key, …) con menos argumentos de los que necesita el texto (error) o más de los que usa (advertencia). |
Extraer a recurso
Ponga el cursor en una cadena y pulse Ctrl+.: Extraer a recurso… propone una clave a partir del texto y el archivo .resx más cercano. Si el archivo ya contiene el texto, se usa su clave. La cadena se sustituye por Strings.Key (con el espacio de nombres si el archivo no lo importa) o, en XAML, por {x:Static res:Strings.Key}, y el xmlns se añade automáticamente.

Configuración
Herramientas → Opciones → SmithWorks → LocaleSmith. Cada opción tiene una descripción, y la vista previa de la parte superior muestra al instante los valores en el idioma elegido.
| Opción | Predeterminado |
|---|---|
| Mostrar los valores de los recursos junto a las claves | activado |
| Idioma de vista previa | Recursos predeterminados |
| Longitud máxima | 80 |
| Problemas: LOC001–LOC004 | todos activados |
| Extraer a recurso en la bombilla | activado |
La configuración se guarda en %LocalAppData%\LocaleSmith.

Preguntas frecuentes
¿Qué archivos .resx lee?
Todos los archivos .resx dentro de la carpeta de la solución (la que contiene el archivo .sln o .slnx, o la raíz del repositorio), excepto bin, obj y node_modules. Las imágenes y otros recursos que no son texto se omiten.
¿Por qué no aparece ningún valor tras una clave?
La clave debe existir en un archivo .resx de la solución y el nombre de la clase debe coincidir con el del archivo (Strings.resx → Strings; los puntos se convierten en guiones bajos, como hace el generador). Los valores aparecen poco después de abrir una solución, cuando se leen los archivos.
Después de extraer, la nueva propiedad aparece subrayada. ¿Por qué?
La clase fuertemente tipada (Strings.Designer.cs) se regenera al momento si el proyecto usa una herramienta personalizada para ella. Los proyectos que la generan durante la compilación obtienen la propiedad tras la siguiente compilación.
{x:Static} no encuentra mi clase de recursos en XAML.
x:Static necesita una clase pública. En el diseñador de recursos, establezca el modificador de acceso del archivo .resx en Public, o use un contenedor público.
¿Funciona junto con LensSmith?
Sí. Ambos escriben al final de las líneas, así que comparten ese espacio: primero va el valor de la clave y después el mensaje de diagnóstico. Los problemas de LocaleSmith aparecen en LensSmith como cualquier otra advertencia.
¿LocaleSmith envía algún dato?
No. No hay telemetría ni acceso a la red; sus archivos de recursos se quedan en su equipo.
¿Dónde informo de un problema o sugiero una función?
Abra una incidencia en el repositorio Feedback de GitHub: hay formularios para errores e ideas (cambie los nombres privados). También puede usar la pestaña Q&A en Marketplace.
Historial de cambios
1.0.1
- Enlace «Valorar en Marketplace» en la configuración.
1.0.0
- Primera versión pública.