0

长版

在我使用的 Web 应用程序中,我们将所有翻译放入 .resx 文件中,然后通过调用(如http://msdn.microsoft.comResources.FileName.KeyName的“使用强类型检索全局资源”部分中指定的那样)引用这些文件/en-us/library/ms227982%28v=vs.100%29.aspx)。

在某些地方我们直接检索值,但在很多情况下我们检索要在 JavaScript 中使用的值,所以我们需要做这样的事情:HttpUtility.JavaScriptStringEncode(Resources.FileName.KeyName)

问题是有成千上万这样的行需要通过调用来HttpUtility.JavaScriptStringEncode追溯。

必须有更好的方法来做到这一点,而不是遍历整个源代码并手动包装对资源的每个引用。

TL;DR 版本

我需要一种更好的方法来包装每个Resources.FileName.KeyName调用,而HttpUtility.JavaScriptStringEncode()不是手动转到每个引用并自己添加它。

4

1 回答 1

0

我无法为此想出一个真正的解决方案,所以我决定使用正则表达式来解决这个问题。

现在,问题是我们仍在使用 Visual Studio 2010,它有自己的正则表达式子集,与许多高级技巧不兼容,因此不能选择断言。

相反,我只是找到了所有实例<Resources\.Thread.{[a-zA-Z0-9_]+}并将其替换为HttpUtility.JavaScriptStringEncode( Resources.Thread.\1 ).

如果您已经有一些正确调用 JavaScriptStringEncode 的实例,这可能会创建重复调用,所以不幸的是,在此之后我必须找到所有实例HttpUtility.JavaScriptStringEncode\(HttpUtility.JavaScriptStringEncode\( {[a-zA-Z0-9_ \.\)]+}\)\)并将其替换为HttpUtility.JavaScriptStringEncode( \1).

括号内的替换字符串末尾缺少空格是为了格式化而设计的。

还有其他衍生物需要整理(括号之间的空格),但这是基线。经过几次搜索以清理重复调用后,它就完成了。

不是我最好的工作,但我能想到的最好的工作是升级到 Visual Studio 2012/2013 并使用带有断言的真正正则表达式一次性完成所有工作(如果你能做到,这显然是推荐的)。

于 2013-08-01T18:00:58.970 回答