【问题标题】:Find all source hardcoded strings查找所有源硬编码字符串
【发布时间】:2017-12-19 22:39:18
【问题描述】:

我需要将源代码中的所有硬编码字符串移动到 .resx 文件中。是否有工具可以帮助我找到 C# 代码中的所有硬编码字符串?

【问题讨论】:

标签: c# .net visual-studio localization


【解决方案1】:

ReSharper 5 显然是一个选择,但必须设置许多技巧才能实现您的目标,

  1. 开启解决方案范围的分析。
  2. 转到ReSharper|Options|Code Inspection|Inspection Severity|Potential Code Quality Issues|Element is localizable 设置为Show as error
  3. 返回解决方案资源管理器并单击项目 (csproj)。
  4. 在 ReSharper 类别下的“属性”面板中,将 Localizable 设置为 Yes,将 Localizable Inspector 设置为 Pessimistic。

然后你可以在解决方案面板的错误中找到几乎所有你需要的东西。

希望这会有所帮助。

【讨论】:

  • 这也适用于 XAML 文件吗? R# 似乎没有在 XAML 中看到 Content/Text 属性,只在后面的代码中?
  • 还没有。 JetBrains 的人还没有为 XAML 实现这个。
  • 谢谢你,Lex Li。我发现这个正则表达式可以在 xaml 文件devnet.jetbrains.com/thread/… 中查找所有潜在的可本地化字符串。该正则表达式中缺少的一项是搜索标签属性。
  • 对我来说它不起作用 - 即使在一个 cs 文件中,许多字符串仍然没有标记,而其他的则标记为 ok。
  • @VojtěchDohnal,ReSharper 方法只是尽力而为,因为它依赖于 ReSharper 引擎,它可能并非始终 100% 正确。当然,您可以将此类问题报告给 JetBrains,并希望他们能够解决。
【解决方案2】:

或者根据这里讨论的正则表达式进行搜索:

https://vosseburchttechblog.azurewebsites.net/index.php/2014/12/16/find-all-string-literals-in-c-code-files-but-not-the-ones-in-comments/

(?=(^((?!///).)*$)).*((".+?")|('.+?')).*

【讨论】:

  • 很好的答案!此外,如果有人不知道如何使用它:按“Ctrl + F”,然后将正则表达式写入标准搜索文本框,然后按“Alt + E”,然后照常搜索。
【解决方案3】:

您始终可以在所有 .cs 文件中搜索 " 符号。这应该可以让您了解其中的大多数,而不会产生太多噪音。

【讨论】:

  • 嗯,这有点暴力,例如 cmets。我仍然建议将它与赋值运算符配对以缩小搜索范围 - 或使用额外的过滤 - 谢谢有 linq:) 。使用一些 powershell 脚本或编写一个简单的 cs 程序来为您制作。一般做一个reg表达式来查找所有
【解决方案4】:

此工具http://visuallocalizer.codeplex.com/ 允许将字符串批量移动到资源以及其他功能。它是 FOSS,所以也许你可以试一试。 (我参与)

【讨论】:

  • 不错的工具,但不支持 xaml :/
【解决方案5】:

Resharper 5.0 (Beta) 允许您将字符串移动到资源中(它具有内置的本地化功能)。试试看。 Beta 工作正常,我每天都使用它,没有任何问题。最重要的是它在测试版结束之前是免费的。我什至建议使用night builds,因为它们看起来很稳定。

软件本地化和全球化对于开发人员来说一直是艰巨的,有时甚至是不必要的任务。 ReSharper 5 通过在 C# 和 VB.NET 代码以及 ASP.NET 和 XAML 标记中为 resx 文件和资源使用提供一整套功能,极大地简化了资源的使用。

专用功能包括将字符串移动到资源、查找资源的使用情况和其他导航操作。结合重构支持、检查和修复,您可以获得方便的本地化环境。

【讨论】:

  • 很好的提醒,但我不认为它可以帮助您首先找到它们,这就是问题的主要问题。
【解决方案6】:

有些是由 FxCop 发现的。不确定它的限制是什么,我认为它取决于参数和属性名称(例如:一个名为“Text”的属性被认为是本地化的)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-06-04
    • 1970-01-01
    • 2015-08-28
    • 1970-01-01
    • 1970-01-01
    • 2022-11-23
    • 1970-01-01
    • 2021-03-14
    相关资源
    最近更新 更多