ローカライゼーションインスペクションとクイックフィックス
ReSharper は、リソースファイル内のローカライズ可能な文字列、リソースの問題などを検出することにより、アプリケーションをローカライズするのに役立つ多数のコードインスペクションを提供します。これらのインスペクションは、オープンドキュメントの設計時にローカライゼーションの問題を検出し、ソリューション全体まで特定の範囲でローカライゼーションの問題を見つけることができます。
設計時には、検出された問題があなたの注意を引くためにハイライトされます。ハイライトされた問題を解決するために、ReSharper は多数のリソース固有のクイックフィックスを提供します。
「要素はローカライズ可能」インスペクション
このインスペクションは、ハードコードされた文字列リテラルを検出し、リソースファイルに移動することを提案します。同じ文字列がすでにリソースに定義されている場合、ReSharper はリテラルを既存のリソースエントリに置き換えることを提案します。
すべての文字列をリソースに移動してローカライズする必要があるわけではないため、ReSharper は、このインスペクションを構成するいくつかの方法を提供します。「Element is localizable」インスペクションが有効になっている場合、以下のフローチャートに従って動作します。アルゴリズムの各ステップは、チャートで説明されています。
逐語的な文字列には
@
が接頭部として付けられます(例:@"Hello world"
デフォルトでは、逐語的文字列はローカライゼーションインスペクションによって無視されますが、ReSharper オプション Alt+R, O の ページの逐語的な文字列を分析しないオプションを使用して変更できます。
Localizable プロジェクトプロパティは、プロジェクト内の文字列の処理方法を定義します。このプロパティを変更するには、ソリューションエクスプローラーでプロジェクトを右クリックし、プロジェクト項目のプロパティを編集するを選択してから、ローカライズ可能> [ デフォルト | はい | いいえ ] を選択します。
現在のプロジェクトまたはそれが参照する他のプロジェクトに少なくとも 1 つのリソースファイル(.resx)が含まれている場合、ReSharper はそのプロジェクトをデフォルトでローカライズ可能と見なします。
LocalizableAttribute
でマークすることにより、文字列値を消費できる特定の関数およびプロパティをさらに構成できます。これにより、[Localizable(true)]
を明示的に有効にしたり、消費された文字列のローカライゼーションインスペクションで[Localizable(false)]
を無効にしたりできます。シンボルは、外部アノテーションを介してこの属性でマークできることに注意してください。例: 外部アノテーションは、
Console.WriteLine
を[Localizable(true)]
でマークするために使用されます。ローカライズ可能なインスペクタ プロジェクトプロパティは、
LocalizableAttribute
でマークされたメンバーによって消費されない文字列リテラルを処理する方法を定義します。楽観的アルゴリズムはそのような文字列を無視し、悲観的はそれらにローカライズ可能としてフラグを立てます。このプロジェクトプロパティを変更するには、ソリューションエクスプローラーでプロジェクトを右クリックし、プロジェクト項目のプロパティを編集するを選択してから、ローカライズ可能なインスペクター> [ 楽観的 | 悲観的 ] を選択します。
現在のプロジェクトでローカライゼーションインスペクションを無効にする最も簡単な方法は、エディターでハイライト表示された文字列の上に Alt+Enter を押して、アクションリストの対応するコマンドを使用することです。
このコマンドは、現在のプロジェクトの Localizable プロパティをいいえに設定します。
ローカライゼーションの問題のクイックフィックス
ローカライズインスペクションで検出されたコードの問題でクイックフィックスが利用可能な場合、ReSharper はキャレットの左側に対応するアクションインジケーターを表示します。Alt+Enter を押すか、インジケータアイコンをクリックして、使用可能なアクションのリストを表示できます。目的のアクションを適用するには、それをクリックするか、リストで選択して Enter を押します。
ローカライゼーションインスペクションのクイックフィックスは次のとおりです。
リソースに移動
このクイックフィックスはリソースに移動リファクタリングを呼び出し、ローカライズ可能な文字列をリソースファイルに移動します。文字列が中括弧でハイライトされている場合に使用できます。
リテラルの代わりにリソースエントリを使用する
ReSharper が何らかの文字列リテラルがすでにリソースに定義されていることを検出した場合は、文字列を対応するリソースの使用方法に置き換えることをお勧めします。
このクイックフィックスを適用すると、文字列はリソースの使用に置き換えられます。
タイプに「Localizable(false)」のアノテーションを付ける
このクイックフィックスのグループを使用すると、選択したタイプまたはメンバーに [Localizable(false)]
属性を追加して、このシンボルのすべての使用について「要素はローカライズ可能」インスペクションを抑制することができます。
リソースファイルを作成する
リソースファイル名がコードファイルで使用されているが、リソースファイルをまだ作成していない場合は、ReSharper で作成できます。リソースファイル名を赤でハイライトし、対応するクイックフィックスを提案します。
クイックフィックスを適用すると、不足しているリソースファイルが作成されます。
リソース項目を作成する
リソース名がコードファイルで使用されているにもかかわらず、このリソースをまだ宣言していない場合、ReSharper はそれを行うことができます。リソース名を赤でハイライトし、対応するクイックフィックスを提案します。
クイックフィックスを適用すると、不足しているリソース宣言がリソースファイルに追加されます。
リソースエントリを宣言する
カルチャ階層に編成されたカルチャがいくつかあり、カルチャ固有のリソースファイルで宣言されているがデフォルトカルチャでは宣言されていないリソースエントリがある場合、ReSharper はリソース宣言をハイライトして対応するクイックフィックスを提案します。
クイックフィックスを適用した後、リソース宣言はデフォルトのカルチャに挿入され、そこで新しい値に置き換えることができます。
リソースエントリを上書きする
カルチャ階層に編成されたカルチャがいくつかあり、デフォルトカルチャで宣言されているが他のカルチャでオーバーライドされていないリソースエントリがある場合、ReSharper はリソースの名前をハイライトして対応するクイックフィックスを提案します。):
クイックフィックスを適用すると、リソース宣言がカルチャ固有のリソースファイルに挿入され、そこで正しい値を指定できます。
リソースエントリを削除する
ReSharper は以下の場合にこのクイックフィックスを提案します:
資源項目は、中立および特定の文化において等しい値を有します。
同じリソース名を持つ宣言が 2 つ以上あります。
カルチャ階層で編成されたカルチャがいくつかあり、特定のカルチャで宣言されているがデフォルトカルチャでは宣言されていないリソースエントリがあります。
クイックフィックスを適用すると、現在のリソースファイルからリソース宣言が削除されます。
冗長なリソースエントリタイプを削除する
リソース項目の文字列・タイプを指定することは、それがデフォルトのリソース項目タイプであるため、冗長です。ReSharper は冗長な属性を削除することを提案します。
安全な削除
カルチャ階層に編成されたカルチャがいくつかあり、デフォルトカルチャで宣言されているがカルチャ固有のリソースファイルではオーバーライドされていないリソースエントリがある場合、ReSharper はこのクイックフィックスを提案するリソースの名前をハイライトします。
このクイックフィックスを適用した後、安全なリソース削除リファクタリングの手順に従います。
関連ページ:
設計時にコードの問題を分析する
ReSharper は、エディターでコードファイルを開くとすぐに分析を開始し、最後まで編集を続けます。検出されたすべてのコードの問題は、重大度に従ってエディターでハイライトされます。問題のマップは、エディターウィンドウの右側のマーカーバーにも表示されます。ここでは、ファイルのステータスを即座に確認し、マークをクリックして特定のコードの問題に移動できます。デザインタイムインスペクションの機能:ReSharper によって実行されるデザインタイムコードインスペクションを説明するために、エディターに...
特定の範囲でコードの問題を見つける
設計時コードインスペクションは、エディターでコーディングしたり、特定のファイルを見直したりするときに役立ちます。ただし、ReSharper を使用すると、ソリューション全体または狭い範囲でスタティックコード分析を実行し、結果をフレンドリーな視点で調べることもできます。必要に応じてインスペクション結果を共有することもできます。開始コードインスペクション:ソリューション、プロジェクト、カスタムスコープのコードをインスペクションするソリューションワイドのインスペクションの結果(たとえば、未使用のパブ...
ローカライゼーションリファクタリング
ReSharper は、プロジェクトの国際化を大幅に簡素化する一連のリソース関連のリファクタリングを提供します。リソースに移動:プロジェクトの内部化に取り組むときは、ローカライズ可能な文字列をリソースファイルに格納するのが一般的です。ReSharper はローカライズ対象の文字列を検出してハイライトするため、そのような文字列を簡単に見つけてソースコードからリソースファイルに移動できます。ReSharper は対応するリソースエントリを宣言し、コード内の文字列をリソース使用量に置き換えます。ロー...
コードインスペクション設定を構成する
設計時コードインスペクションを構成する:デフォルトでは、ReSharper は、サポートされている言語に対応するすべてのファイルで設計時コードインスペクションを有効にします。必要に応じて、無効にすることができます。設計時コードインスペクションが有効かどうかに関係なく、コードインスペクションは常に特定のスコープで実行できます。メインメニューからを選択するか、Alt+R O を押してから、左側のを選択します。設計時コードインスペクションを切り替えるには、コード分析を有効にするチェックボックスを使用し...
外部アノテーション
使い方:ソースが利用できない外部ライブラリを使用している場合、コードアノテーションを指定するための属性をそこで使用することは現実的ではないようです。この場合、外部アノテーションを使用すると、すでにコンパイルされたエンティティを、ReSharper のコード分析エンジンによって認識される属性で補完できます。外部アノテーションを使用すると、ライブラリのコンパイル時に宣言されていなかった属性 (メソッド、パラメーター、その他の宣言) をエンジンに参照させることで、エンジンを「騙す」ことができます。外...
プロジェクト固有のプロパティを構成する
ReSharper の設定のメインセット(ReSharper | オプションダイアログで設定)は、グローバルまたはソリューションごとに適用されます。各プロジェクトまたはフォルダーごとに個別に設定できる環境設定もあります。これらの設定は、プロジェクトアイテムのプロパティポップアップで利用できます。プロジェクトアイテムのプロパティポップアップは、ソリューションエクスプローラーでプロジェクトのコンテキストメニューからプロジェクト項目のプロパティを編集するを選択して呼び出すことができます。他の ReSh...