在c#代码中计数不同的字符串

本文关键字:字符串 代码 | 更新日期: 2023-09-27 17:49:24

我需要估计遗留项目所需的本地化工作。我正在寻找一个工具,我可以指向一个目录,它会:

    解析目录结构中的所有*.cs文件
  • 从代码
  • 中提取所有c#字符串字面值
  • 计算字符串出现的总次数

你知道有什么工具可以做到这一点吗?写它会很简单,但如果可以节省一些时间,那为什么不节省呢?

在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中推荐的方法。

就像这篇文章

更多教程更多教程