「[[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]]」は、「[[Open棟梁Project>https://github.com/OpenTouryoProject/]]」,「[[OSSコンソーシアム .NET開発基盤部会>https://www.osscons.jp/dotNetDevelopmentInfrastructure/]]」によって運営されています。 -[[戻る>国際化対応項目]] * 目次 [#o6265dd0] #contents *概要 [#u9a525a1] -リソースファイル(マネージリソースファイル)は、 --文字列や画像などのリソース情報をKey-Valueで保持する、~ 拡張子が .resources または .resx のファイルのことである。 --いろいろな言語のリソースファイルを用意すると、~ 多言語対応のアプリケーションを作成できる。 --アセンブリ・ファイル(dll, exe)に含められる。 -参考~ --リソースファイルからリソースを取得する: .NET Tips: C#, VB.NET~ http://dobon.net/vb/dotnet/programing/resourcemanager.html *特徴 [#jcc6b1af] **仕組み [#td4db012] -*.resxファイル と *.designer.cs(vb)ファイルから成る。 -*.resxファイル~ 埋め込まれたリソースとして埋め込まれるXMLファイル。 -*.designer.cs(vb)ファイル~ 埋め込まれたリソースを読み取るコードが自動生成される。 **メッセージ等の隠蔽化が可能 [#iafdc4e0] -アセンブリ・ファイル(dll, exe)に含められるため、改竄されにくい。 -アセンブリ・ファイル(dll, exe)に含められるため、改ざんされにくい。 -ただし、リソースファイルの修正を反映するには再ビルドが必要。~ ※ ILSpy等の逆アセンブルツールにてリソースファイルの内容が抽出されることは防げない **実行中の差し替えが可能 [#e51a06bf] -リソースファイルをdllに含めることにより、実行時に差し替えが可能 -参考 --ResourceManager.ReleaseAllResources メソッド (System.Resources)~ http://msdn.microsoft.com/ja-jp/library/system.resources.resourcemanager.releaseallresources.aspx **文字列以外も扱うことが可能 [#td614c9f] リソースファイルに画像などのバイナリファイルを文字列と同様に含めることが可能である。~ この際、BASE64エンコードされた文字列がresxファイルに格納される。 -参考 --リソースファイルからリソースを取得する: .NET Tips: C#, VB.NET~ http://dobon.net/vb/dotnet/programing/resourcemanager.html **多言語化対応が可能 [#mdf325f7] [[カルチャ]]を使用し、対応したリソースファイルから情報を取得することで~ 文言や、UI要素の多言語対応が可能となる(詳細は後述)。 *詳細 [#c18806be] **作成方法 [#ne6b622e] リソースファイルの作成方法には下記の様なものがある。 ***Visual Studio上でリソースファイルを作成、編集する [#x6e51353] -Visual Studioでリソースを作成、編集できる。 -通常 Key-Value だが、画像 / アイコン / テキスト・ファイルも追加できる。 --参考 ---Visual Studioでリソースを管理する: .NET Tips: C#, VB.NET~ http://dobon.net/vb/dotnet/programing/vsresource.html -Visual Studioでリソース中に改行コードを入れる方法 >リソース作成画面にて >>[Shift]+[Enter]キー >を押下すると改行コードを挿入できる。 --参考 ---文字列のリソースに改行コードを埋め込むには?[VS 2005、VS 2008] - @IT~ http://www.atmarkit.co.jp/fdotnet/dotnettips/825resourcesstrlf/resourcesstrlf.html ***.NETプログラムからリソースファイルを作成する方法 [#h786d960] リソースファイルを作成するAPIが用意されている。 -参考 --プログラムによる .resx ファイルの使用~ http://msdn.microsoft.com/ja-jp/library/vstudio/gg418542.aspx~ ---.resxファイルの作成 ***テキストファイルからリソースファイルを作成する方法 [#o43d80b1] .txtファイルからリソースファイルを作成するResgen.exeが用意されている。~ -参考 --@IT:.NET TIPS [ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには? - C# VB.NET Webフォーム~ http://www.atmarkit.co.jp/fdotnet/dotnettips/192aspmultilang/aspmultilang.html --Resgen.exe (リソース ファイル ジェネレーター)~ http://msdn.microsoft.com/ja-jp/library/ccec7sz1.aspx **使用方法 [#p1acb07c] リソースファイルの使用方法には下記の様なものがある。 ***Visual Studio上で既存のリソースファイルを開く [#i83a57fb] -*.resxファイルを開く。 -カスタム・ツールを設定する。 --ダブルクリックしてデザイナのDDLからInternal or Publicを選択する。 --プロパティ・グリッドのカスタム・ツールに以下を設定する。 ---ResXFileCodeGenerator(Internal) ---PublicResXFileCodeGenerator(Public) -これにより、 --*.resxファイルと、 --*.designer.cs(vb)ファイルが >グループ化される。 ***Internal、Publicの選定基準と利用方法 [#e866edf6] -Internal~ エントリ・アセンブリ ※1 内でのみ使用する場合コチラを選択する。~ (※ 1: 現在の AppDomain のエントリポイントを含むアセンブリ) -Public --他のアセンブリで利用する場合コチラを選択する。 --この場合、双方のアセンブリのルート名前空間を一致させる必要がある。 --c# - What does MissingManifestResourceException mean and how to fix it? - Stack Overflow~ https://stackoverflow.com/questions/1327692/what-does-missingmanifestresourceexception-mean-and-how-to-fix-it ***.NETプログラムからリソースファイルを使用する方法 [#rf015e1d] -*.designer.cs(vb)に実装された、~ プロパティ・プロシージャ経由でリソースにアクセスできる。 -リソースファイルを使用するAPIが用意されている。 -参考 --プログラムによる .resx ファイルの使用~ http://msdn.microsoft.com/ja-jp/library/vstudio/gg418542.aspx ---リソースを列挙する ---特定のリソースを取得する ---.resx ファイルをバイナリ .resources ファイルに変換する ***制限事項 [#b01689ed] -リソースの名前に"="(半角イコール)を含めることができません。 -リソースの値にLF(Line Feed)を含めることができません。 *多言語対応 [#i8d141f1] スレッド毎に保持しているCurrentUICultureに設定されている[[カルチャ]]を使用して、~ 対応したリソースファイルから情報を取得することで文言や、UI要素の多言語対応が可能となる。 **リソースの構造 [#q30f144d] -ファイル名と拡張子の間に[[カルチャ]]名を挿入して~ 各[[カルチャ]]向けのリソースファイルを作成する。 -下位カルチャ用のリソースファイルには差分のみ定義可能。 R1.resx 既定カルチャ用リソースファイル ├R1.ja.resx 日本語用リソースファイル ├R1.en.resx 英語用リソースファイル ├R1.zh-Hans.resx 簡体字中国語用リソースファイル └R1.zh-Hant.resx 繁体字中国語用リソースファイル R2.resx 既定カルチャ用リソースファイル ├R2.ja-JP.resx 日本語(日本)用リソースファイル └R2.en-US.resx 英語(米国)用リソースファイル **フォールバック機能 [#e79f2f05] ***リソースファイルのフォールバック機能とは [#deb3f2b4] -使用するリソースファイルをシステムが判断することを指す。 -CurrentUICultureの[[カルチャ]]と一致するリソースファイルが存在しない場合、親カルチャ用のリソースファイルを順に検索する。 ***フォールバックのカスタマイズ [#d10ac75c] -Parentプロパティで上位のカルチャを取得可能なので単純なアルゴリズムで作成可能。 -また、メッセージを言語毎に用意するのであればTwoLetterISOLanguageNameプロパティで2階層目の値を取得することが可能なため、その値で分岐すれば良い。 ***参考 [#jadbd486] -ローカリゼーション用リソースの階層編成~ http://msdn.microsoft.com/ja-jp/library/vstudio/756hydy4.aspx **サテライトアセンブリ [#r7d9737d] -サテライトアセンブリ(*.resources.dllという名称)~ で[[カルチャ]]名フォルダに配置される。 -サテライト アセンブリの作成 | Microsoft Docs~ https://docs.microsoft.com/ja-jp/previous-versions/dotnet/netframework-4.0/21a15yht(v%3dvs.100) **UIの多言語対応 [#f18796ed] リソースファイルを使用することで、UIの多言語対応が可能である。 [[Windows Forms]]と[[ASP.NET Web Forms]]で実装の方法が異なる。 ***[[Windows Forms]]の場合 [#of96bde4] -[[Windows Formsの国際化対応]] ***[[ASP.NET]]の場合 [#y495de2c] -[[ASP.NET の 国際化対応]] --[[ASP.NET Web Formsの国際化対応]] --[[ASP.NET MVCの国際化対応]] ***[[WPF/Silverlight]]の場合 [#j8e3fd88] -[[WPF/Silverlightの国際化対応>WPF/Silverlight#a71cee5a]] *参考 [#w42d4e18] **msdn.microsoft.com [#ra2b1a06] -グローバリゼーションとローカリゼーションのベスト プラクティス~ http://msdn.microsoft.com/ja-jp/library/aa291552.aspx -Visual Studio のグローバリゼーションおよびローカリゼーションの名前空間~ http://msdn.microsoft.com/ja-jp/library/3xbc3357.aspx -ローカリゼーションとグローバリゼーション (Visual Basic 6.0 ユーザー向け)~ http://msdn.microsoft.com/ja-jp/library/150x5ys0.aspx -Windows Phone のグローバリゼーションとローカリゼーション~ http://msdn.microsoft.com/ja-jp/library/ff637522.aspx -アプリケーションのグローバライズとローカライズ~ http://msdn.microsoft.com/ja-jp/library/vstudio/1021kkz0.aspx --アプリケーションのグローバル化~ http://msdn.microsoft.com/ja-jp/library/vstudio/eaa7b9c0.aspx ---Windows フォームのグローバル化~ http://msdn.microsoft.com/ja-jp/library/vstudio/9xdxwwkc.aspx ---ASP.NET のグローバリゼーションおよびローカリゼーション~ http://msdn.microsoft.com/ja-jp/library/vstudio/c6zyy3s9.aspx ---グローバライズとローカライズ(WPF)~ http://msdn.microsoft.com/ja-jp/library/vstudio/ms753931.aspx **.NET Tips (VB.NET,C#...) [#td1120cb] -Visual Studioでリソースを管理する~ https://dobon.net/vb/dotnet/programing/vsresource.html -.resxファイル(XMLリソースファイル)を作成する、読み込む~ https://dobon.net/vb/dotnet/programing/resxresourcewriter.html ---- Tags: [[:.NET開発]], [[:国際化対応]]