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 をまだ使用していることです。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 にアップグレードし、アサーションを使用して実際の正規表現を使用してすべてを 1 回で実行することを除いて、私が思いついた最高の仕事です (それができる場合は明らかにお勧めします)。

于 2013-08-01T18:00:58.970 に答える