LazowskiAnton · Extensions

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

O mesmo código sem e com o LocaleSmith: chaves de recurso e seus textos

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

Chaves reconhecidas

No códigoOnde
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 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.

O cartão com as traduções de uma chave, duas delas ausentes

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.

Sublinhado ondulado em chaves com uma tradução ausente e com o número errado de argumentos de formato
RegraO que é sublinhado
LOC001Uma chave que falta em alguns arquivos de idioma, com a lista desses idiomas.
LOC002Uma 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.
LOC003localizer["Key"] ou GetString("Key") com uma chave que nenhum arquivo de recurso tem, junto com a chave existente mais parecida.
LOC004string.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ê.

A caixa de diálogo Extrair para recurso com a chave e o arquivo sugeridos

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çãoPadrão
Mostrar os valores dos recursos ao lado das chavesativado
Idioma de visualizaçãoRecursos padrão
Comprimento máximo80
Problemas: LOC001–LOC004todos ativados
Extrair para recurso na lâmpadaativado

As configurações ficam em %LocalAppData%\LocaleSmith.

Página de opções do LocaleSmith
A página de opções com a visualização ao vivo.

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

1.0.0