在所有对Resources翻译的引用上运行HttpUtility.JavaScriptStringEncode?

时间:2013-07-25 14:51:43

标签: c# javascript asp.net encoding

长版

在我处理的网络应用中,我们将所有翻译放入.resx文件中,然后通过调用Resources.FileName.KeyName来引用这些文件(如“使用强类型检索全局资源”一节中所述){ {3}})。

在某些地方,我们会直接检索值,但在很多情况下,我们检索要在JavaScript中使用的值,因此我们需要执行以下操作:HttpUtility.JavaScriptStringEncode(Resources.FileName.KeyName)

问题在于,需要通过追溯调用HttpUtility.JavaScriptStringEncode来包含数千种此类行。

必须有更好的方法来实现这一点,而不是通过整个源代码并手动将每个引用包装到资源。

TL; DR版本

我需要一种更好的方式来使用Resources.FileName.KeyName包裹每个HttpUtility.JavaScriptStringEncode()来电,而不是手动转到每个参考并自行添加。

1 个答案:

答案 0 :(得分: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并使用带有断言的真正正则表达式一次性完成所有操作(显然,如果你能做到这一点,这显然是推荐的)。