LazowskiAnton · Extensions

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

El mismo código sin LocaleSmith y con él: claves de recursos y sus textos

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

Claves que reconoce

En el códigoDónde
Strings.Key, Properties.Resources.KeyC#, 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.

La tarjeta emergente con las traducciones de una clave, dos de ellas sin traducir

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.

Subrayado ondulado en claves con una traducción que falta y con un número incorrecto de argumentos de formato
ReglaQué se subraya
LOC001Una clave que falta en algunos archivos de idioma, con la lista de esos idiomas.
LOC002Una 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.
LOC003localizer["Key"] o GetString("Key") con una clave que no está en ningún archivo de recursos, junto con la clave existente más parecida.
LOC004string.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.

El cuadro de diálogo Extraer a recurso con la clave y el archivo propuestos

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ónPredeterminado
Mostrar los valores de los recursos junto a las clavesactivado
Idioma de vista previaRecursos predeterminados
Longitud máxima80
Problemas: LOC001–LOC004todos activados
Extraer a recurso en la bombillaactivado

La configuración se guarda en %LocalAppData%\LocaleSmith.

Página de opciones de LocaleSmith
La página de opciones con su vista previa en vivo.

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

1.0.0