在c#代码中计数不同的字符串
本文关键字:字符串 代码 | 更新日期: 2023-09-27 17:49:24
我需要估计遗留项目所需的本地化工作。我正在寻找一个工具,我可以指向一个目录,它会:
- 解析目录结构中的所有*.cs文件
- 从代码 中提取所有c#字符串字面值
- 计算字符串出现的总次数
你知道有什么工具可以做到这一点吗?写它会很简单,但如果可以节省一些时间,那为什么不节省呢?
使用ILDASM对. dll/. exe进行反编译。
我只是使用选项转储所有,你得到一个.il文件与部分"用户字符串":
User Strings
-------------------------------------------------------
70000001 : (14) L"Starting up..."
7000001f : (12) L"progressBar1"
70000039 : (21) L"$this.BackgroundImage"
70000065 : (10) L"$this.Icon"
7000007b : ( 6) L"Splash"
现在如果你想知道某个字符串被使用了多少次。像这样搜索"ldstr":
IL_003c: /* 72 | (70)000001 */ ldstr "Starting up..." /* 70000001 */
经过快速搜索,我发现以下工具可能对您有用,也可能没用。
http://www.devincook.com/goldparser/我还发现另一个SO用户也在尝试做类似的事情。
Regex解析c#源代码查找所有字符串
如果对字符串进行了硬编码,那么首先需要知道您的i18n努力是什么(取消硬编码可能会非常痛苦)。另一个问题:您需要计算可翻译的单词,而不是不同的字符串,这是翻译提供程序的输入。即使字符串看起来是重复的,它也可以根据上下文以不同的方式翻译,所以你不需要关心"distinct",你只需要计算所有单词…根据我的经验,这就是本地化的工作方式。
在大多数常见的开发中,您应该将字符串放在程序源代码的外部。在您的情况下,您是否可以省去将字符串提取到资源文件中的工作?
如果是,那么你可以使用。net中默认的本地化解决方案,即
resource.resx,
resource.fr.resx,
resources.es.resx
存储不同地区的字符串。
更新:
实际的实现取决于你的项目架构/技术,资源文件不是最好的方法,但它是最简单的,也是。net中推荐的方法。
就像这篇文章
更多教程更多教程