我们的 .NET 4.0 C# 项目中的本地化基本上如下:
MyCompany.Resources.dll
包含两个 RESX 文件:A.resx
以及B.resx
它们的本地化对应文件(A_de.resx
、B_hu.resx
等)。这些文件由通常的 RESX xml 元素组成,例如<data name="key" xml:space="preserve"><value>value</value></data>
MyCompany.Common.dll
包含一个公共(单例)类,该类MyCompanyResourceManager
具有两种方法,用于通过键访问本地化值,例如A.resx
和。B.resx
GetA(string key)
GetB(string key)
无论 C# 代码中有什么字符串需要本地化,我们手动打开
A.resx
或者B.resx
使用 XML 编辑器(Visual Studio 资源编辑器搞砸了 xml 中的某些内容),<data>
使用新键向 XML 文档添加新标签,在 C# 代码中,我们手动将字符串替换为对MyCompanyResourceManager.Instance.GetA(...)
(orGetB(...)
) 的调用。
这项工作可以通过 ReSharper 中的代码片段和实时模板来加速,但我觉得需要一个更好的解决方案来解决这个“工作流程”(而不是本地化机制,不能改变 :))。这就是为什么要编写一个 ReSharper 插件来执行重复部分的原因。我想达到的目标:
- 当插入符号位于 C# 代码中的字符串文字上时,提供上下文操作
Localize in A
和Localize in B
- 当我选择其中任何一个时,弹出一个对话框以提示用户在 RESX 中使用的密钥
- 将新
<data>
标记放在相应的 RESX 文件中,并用调用适当的方法替换字符串文字。MyCompanyResourceManager
如果需要,导入类的命名空间,并在需要时引用它的程序集。(引用程序集不是必须的,因为可以假设它MyCompany.Common
在任何地方都被引用) - 打开所选的 RESX 文件以查看更改
可选功能(使插件更广泛地使用):
- 设置页面指定RESX文件(甚至两个以上),对应的方法调用,以及包含这些方法的类
- 在提示密钥之前,在所选的 RESX 文件中搜索字符串文字,以防它已经本地化
我的问题/疑问:
- 我有点迷失在ReSharper SDK 参考及其不完整的文档中,所以关于可用类/接口的综合材料/教程会很棒(如果有的话)
- 如何使用 ReSharper API 在 Visual Studio 中打开项目/解决方案文件?
- 如何使用 ReSharper API 操作 XML 文件?示例上下文操作是一个反向字符串,因此访问插入符号下的文字是可以的。
- 对于这种情况,我应该使用上下文操作还是重构?
- 如何从上下文操作开始重构?
- 从哪里开始,这个任务的API应该很好理解什么?
提前致谢!