LocaleSmith
O texto por trás de cada chave .resx, bem onde a chave é usada: valores no fim da linha, todas as traduções ao passar o mouse, traduções ausentes e espaços reservados errados sinalizados antes que seus usuários os vejam.
Gratuito · Visual Studio 2022 e 2026 · 14 idiomas de interface · sem telemetria
Por que o LocaleSmith

Código legível
Strings.InvoiceSaved diz pouco; “Invoice {0} saved” diz tudo. O texto fica depois da linha, discreto e em itálico.
Todos os idiomas à mão
Passe o mouse sobre um valor para ver todas as traduções dele, ou mude o editor inteiro para alemão ou japonês e veja suas telas antes de executar o aplicativo.
Erros antes que os usuários os vejam
Traduções ausentes, um {1} que o texto padrão não tem, um erro de digitação numa chave, um string.Format com argumentos de menos — tudo sublinhado no código.
Gratuito, sem pegadinhas
Sem assinatura, sem período de avaliação, sem avisos insistentes, sem telemetria. Funciona no Visual Studio 2022 e 2026, x64 e ARM64.
Recursos
- Valores ao lado das chaves: o texto de cada chave depois da linha, entre aspas; espaços reservados como
{0}ficam coloridos, e as quebras de linha aparecem como ↵. - Idioma de visualização: os valores em qualquer idioma dos seus recursos; um valor que o .NET pegaria dos recursos padrão fica amarelo, com ⚠.
- Todas as traduções ao passar o mouse: um cartão com todos os idiomas da chave; um clique abre o .resx desse idioma direto no valor — se o valor faltar, ele é adicionado para você.
- Problemas no código: traduções ausentes, espaços reservados divergentes, chaves desconhecidas e chamadas a
string.Formatcom o número errado de argumentos, com sublinhado ondulado. - Extrair para recurso: Ctrl+. numa string em C#, Visual Basic ou XAML move a string para um arquivo .resx e coloca a chave no lugar dela.
- Sempre atualizado: os arquivos .resx da solução são lidos em segundo plano e monitorados; uma alteração salva aparece na hora.
- Temas escuro e claro: as cores seguem o tema do Visual Studio.
Chaves reconhecidas
| No código | Onde |
|---|---|
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 e Blazor: IStringLocalizer, IViewLocalizer |
GetString("Key") | ResourceManager e localizadores |
Todas as traduções ao passar o mouse
Deixe o ponteiro sobre um valor: o cartão lista a chave em todos os idiomas, com as ausentes em amarelo. Clique num idioma para abrir o .resx dele com o valor selecionado — é só digitar por cima. Abrir no .resx e Copiar chave ficam no topo.

Problemas
Os problemas aparecem com sublinhado ondulado, como os avisos do compilador; por isso, qualquer ferramenta que mostra esses avisos mostra estes também — o LensSmith os escreve no fim da linha. Cada regra pode ser desativada.

| Regra | O que é sublinhado |
|---|---|
| LOC001 | Uma chave que falta em alguns arquivos de idioma, com a lista desses idiomas. |
| LOC002 | Uma tradução com espaços reservados diferentes dos do texto padrão; um espaço reservado a mais falha em tempo de execução e é um erro. |
| LOC003 | localizer["Key"] ou GetString("Key") com uma chave que nenhum arquivo de recurso tem, junto com a chave existente mais parecida. |
| LOC004 | string.Format(Strings.Key, …) com menos argumentos do que o texto precisa (erro) ou mais do que ele usa (aviso). |
Extrair para recurso
Coloque o cursor numa string e pressione Ctrl+. — Extrair para recurso… sugere uma chave a partir do texto e o arquivo .resx mais próximo. Se o arquivo já tiver o texto, a chave dele é usada. A string é substituída por Strings.Key (com o namespace, quando o arquivo não o importa) ou, em XAML, por {x:Static res:Strings.Key}, e o xmlns é adicionado para você.

Configurações
Ferramentas → Opções → SmithWorks → LocaleSmith. Cada opção tem uma descrição, e a visualização no topo mostra na hora os valores no idioma escolhido.
| Opção | Padrão |
|---|---|
| Mostrar os valores dos recursos ao lado das chaves | ativado |
| Idioma de visualização | Recursos padrão |
| Comprimento máximo | 80 |
| Problemas: LOC001–LOC004 | todos ativados |
| Extrair para recurso na lâmpada | ativado |
As configurações ficam em %LocalAppData%\LocaleSmith.

Perguntas frequentes
Quais arquivos .resx ele lê?
Todos os arquivos .resx dentro da pasta da solução (a que tem o arquivo .sln ou .slnx, ou a raiz do repositório), exceto em bin, obj e node_modules. Imagens e outros recursos que não são texto são ignorados.
Por que não aparece valor depois de uma chave?
A chave precisa existir num arquivo .resx da solução, e o nome da classe precisa corresponder ao nome do arquivo (Strings.resx → Strings; os pontos viram sublinhados, como faz o gerador). Os valores aparecem logo depois que a solução é aberta, quando os arquivos são lidos.
Depois de extrair, a nova propriedade fica sublinhada. Por quê?
A classe fortemente tipada (Strings.Designer.cs) é regenerada na hora quando o projeto usa uma ferramenta personalizada para ela; nos projetos que a geram durante o build, a propriedade aparece depois do próximo build.
{x:Static} não encontra minha classe de recursos em XAML.
x:Static precisa de uma classe pública. Defina o modificador de acesso do arquivo .resx como Public no designer de recursos ou use um wrapper público.
Funciona junto com o LensSmith?
Sim. Os dois escrevem no fim das linhas e dividem esse espaço: primeiro vem o valor da chave, depois a mensagem do diagnóstico. Os problemas do LocaleSmith aparecem no LensSmith como qualquer outro aviso.
O LocaleSmith envia algum dado?
Não. Não há telemetria nem acesso à rede; seus arquivos de recursos ficam na sua máquina.
Onde relato um problema ou sugiro um recurso?
Abra um issue no repositório Feedback no GitHub — há formulários para bugs e ideias (troque os nomes privados). Você também pode usar a guia Q&A no Marketplace.
Histórico de alterações
1.0.1
- Link “Avaliar no Marketplace” nas configurações.
1.0.0
- Primeira versão pública.