LazowskiAnton · Extensions

LocaleSmith

每个 .resx 键的文本,就显示在使用该键的位置:值显示在行尾,悬停即可查看所有翻译;缺失的翻译和错误的占位符会在用户看到之前被标出。

免费 · Visual Studio 2022 和 2026 · 14 种界面语言 · 无遥测

为什么选择 LocaleSmith

没有和使用 LocaleSmith 时的同一段代码:资源键及其文本

一读就懂的代码

Strings.InvoiceSaved 说明不了多少,“Invoice {0} saved” 却一目了然。文本显示在行尾,以低调的斜体呈现。

所有语言触手可及

悬停在值上即可查看它的所有翻译;也可以把整个编辑器切换为德语或日语,在运行应用之前就看到界面效果。

赶在用户之前发现错误

缺失的翻译、默认文本中没有的 {1}、键名拼写错误、参数不足的 string.Format——都会在代码中加上下划线。

免费,没有附加条件

没有订阅、没有试用期、没有催促弹窗、没有遥测。支持 Visual Studio 2022 和 2026,x64 和 ARM64。

功能

可识别的键

代码中的写法适用场景
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 和 Blazor:IStringLocalizer、IViewLocalizer
GetString("Key")ResourceManager 和本地化器

悬停查看所有翻译

将指针停在值上:卡片会列出该键的所有语言,缺失的以黄色显示。单击某种语言,会打开其 .resx 并选中该值——直接输入覆盖即可。顶部有 在 .resx 中打开 和 复制键。

显示某个键各语言翻译的悬停卡片,其中两个缺失

问题

问题与编译器警告一样以波浪线显示,因此凡是能显示警告的工具也能显示它们——LensSmith 会把它们写在行尾。每条规则都可以单独关闭。

缺失翻译的键和格式参数数量错误的键下方的波浪线
规则标出的内容
LOC001某些语言文件中没有的键,并列出这些语言。
LOC002占位符与默认文本不同的翻译;多出的占位符会在运行时失败,因此视为错误。
LOC003使用了任何资源文件中都没有的键的 localizer["Key"] 或 GetString("Key"),并给出最接近的现有键。
LOC004参数少于文本所需(错误)或多于文本所用(警告)的 string.Format(Strings.Key, …)。

提取到资源

将插入点放在字符串中并按 Ctrl+.——提取到资源… 会根据文本建议一个键,并选择最近的 .resx 文件。如果文件中已有相同文本,则使用其键。字符串会被替换为 Strings.Key(文件未导入命名空间时会带上命名空间),在 XAML 中则替换为 {x:Static res:Strings.Key},并自动添加 xmlns。

“提取到资源”对话框,显示建议的键和文件

设置

工具 → 选项 → SmithWorks → LocaleSmith。每个选项都有说明,顶部的预览会立即以所选语言显示值。

选项默认值
在键旁边显示资源值开
预览语言默认资源
最大长度80
问题:LOC001–LOC004全部开启
在灯泡菜单中提供“提取到资源”开

设置保存在 %LocalAppData%\LocaleSmith 中。

LocaleSmith 选项页
带实时预览的选项页。

常见问题

它会读取哪些 .resx 文件?

解决方案文件夹(包含 .sln 或 .slnx 文件的文件夹,或仓库根目录)下的所有 .resx 文件,但 bin、obj 和 node_modules 除外。图像和其他非文本资源会被跳过。

为什么键后面没有显示值?

该键必须存在于解决方案的某个 .resx 文件中,且类名必须与文件名一致(Strings.resx → Strings;与生成器一样,点会变成下划线)。打开解决方案后,文件读取完毕,值会稍后出现。

提取后,新属性下方出现了下划线,为什么?

如果项目使用自定义工具生成强类型类(Strings.Designer.cs),该类会立即重新生成;在生成过程中生成该类的项目,会在下次生成后才有这个属性。

XAML 中的 {x:Static} 找不到我的资源类。

x:Static 需要 public 类。请在资源设计器中将 .resx 文件的访问修饰符设为 Public,或使用一个 public 包装类。

它能与 LensSmith 一起使用吗?

可以。两者都在行尾显示内容,因此会共享这块空间:先显示键的值,再显示诊断消息。LocaleSmith 的问题会像其他警告一样显示在 LensSmith 中。

LocaleSmith 会发送任何数据吗?

不会。没有遥测,也不访问网络;你的资源文件始终留在你的计算机上。

在哪里报告问题或提出功能建议?

请在 GitHub 上的 Feedback 仓库中提交 issue——那里有用于报告错误和提出建议的表单(如有私密名称,请先替换)。也可以使用 Marketplace 上的 Q&A 选项卡。

更新日志

1.0.1

1.0.0