[[Open棟梁Project>http://opentouryo.osscons.jp/]] - [[マイクロソフト系技術情報 Wiki>http://techinfoofmicrosofttech.osscons.jp/]] -[[戻る>国際化対応項目]] * 目次 [#o6265dd0] #contents *概要 [#u9a525a1] -リソースファイル(マネージリソースファイル)は、 --文字列や画像などのリソース情報をKey-Valueで保持する、~ 拡張子が .resources または .resx のファイルのことである。 --いろいろな言語のリソースファイルを用意すると、~ 多言語対応のアプリケーションを作成できる。 --アセンブリファイル(dll,exe)に含められる。 -参考~ --リソースファイルからリソースを取得する: .NET Tips: C#, VB.NET~ http://dobon.net/vb/dotnet/programing/resourcemanager.html *特徴 [#jcc6b1af] **メッセージ等の隠蔽化が可能 [#iafdc4e0] -アセンブリファイル(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要素の多言語対応が可能となる(詳細は後述)。 *作成方法 [#ne6b622e] リソースファイルの作成方法には下記の様なものがある。 **Visual Studio上でリソースファイルを作成、編集する [#x6e51353] -Visual Studioでリソースを作成、編集できる。 --参考 ---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] リソースファイルの使用方法には下記の様なものがある。 **.NETプログラムからリソースファイルを使用する方法 [#rf015e1d] リソースファイルを使用するAPIが用意されている。 -参考 --プログラムによる .resx ファイルの使用~ http://msdn.microsoft.com/ja-jp/library/vstudio/gg418542.aspx~ ---.resxファイルの作成 *制限事項 [#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 **UIの多言語対応 [#f18796ed] リソースファイルを使用することで、UIの多言語対応が可能である。 [[Windows Forms]]と[[ASP.NET Web Forms]]で実装の方法が異なる。 ***[[Windows Forms]]の場合 [#of96bde4] -Windows Formでは、Formのデザインタイム・プロパティに存在するLanguageプロパティを変更することにより、各カルチャ用の画面をデザイナ上で作成できる。 -画面上のコントロールの配置・キャプションなどの各種プロパティ値を保存するリソース ファイルが選択した言語毎に生成・適用される [[Windows Forms]]の機能で以下には対応していないことが判明しています。 -コントロールの階層型プロパティ値をカルチャ毎に変える -DataGridの列の順番をカルチャ毎に変える できることを確認しながら実装する様にしてください。 -参考 --@IT > Insider.NET > .NET TIPS > Windowsフォームを多言語対応にするには?~ http://www.atmarkit.co.jp/fdotnet/dotnettips/314winmultilang/winmultilang.html >プロジェクトをビルドすると、カルチャ毎にフォルダが分けられてDLLファイルが生成される。~ これらのDLLファイルは、単一のカルチャのリソース(=文字列や画像などの情報)のみを~ 含むアセンブリとなるので、通常のメイン・アセンブリに対比して、「サテライト・アセンブリ」と呼ばれる。 --C#による多言語対応アプリケーション開発のコツ(1-3):CodeZine~ http://codezine.jp/article/detail/3288 --多言語対応 - C# フォーム しっかり入門~ http://www.wgag.net/csforms/0087.html ***[[ASP.NET Web Forms]]、[[ASP.NET Web MVC]]の場合 [#y495de2c] -各カルチャ用のリソースファイルを用意しておきコードで国際化対応する。 -ASP.NETには、以下のリリソースファイルがある。 --グローバル・リソース(App_GlobalResources) --ローカル・リソース(App_LocalResources) -参考 --@IT > Insider.NET > .NET TIPS > [ASP.NET]リソース・ファイル活用で国際化対応サイトを構築するには? ---http://www.atmarkit.co.jp/fdotnet/dotnettips/192aspmultilang/aspmultilang.html ---http://www.atmarkit.co.jp/fdotnet/dotnettips/445aspmultilangres/aspmultilangres.html >ブラウザの言語設定で、HTTPリクエスト ヘッダに「Accept-Language: ja」と~ カルチャ情報が付与されるためデフォルトでこれを使用してもよいが、通常システムで制御した方が良い。 --MSDNライブラリ > ASP.NET Webプロジェクト > ASP.NET Webページのグローバリゼーション用のカルチャおよびUIカルチャを設定する~ http://msdn.microsoft.com/ja-jp/library/bz9tc508.aspx >アプリケーションによっては、それらを個別に設定することが必要な場合もある。~ 例えばWeb オークション サイトではWeb ブラウザごとに UI カルチャは変わるが、 カルチャ自体は変更されない(価格に適用される通貨と表示形式は常に一定になる)。 --ASP.NET MVC 3 の Razor でも多言語対応を試してみる - しばやん雑記~ http://shiba-yan.hatenablog.jp/entry/20110121/1295543963 ***その他 [#s0ca0b33] -WPFの場合 --WPF のグローバリゼーションおよびローカリゼーションの概要~ http://msdn.microsoft.com/ja-jp/library/ms788718.aspx -Silverlightの場合 --Silverlight のロケール リソースを読み込むためのヒントと秘訣~ http://msdn.microsoft.com/ja-jp/magazine/gg650657.aspx --Alex Golesh's Blog About Silverlight Development (英語) ~ http://blogs.microsoft.co.il/blogs/alex_golesh/archive/2009/07/14/silverlight-quick-tip-resx-image-resources.aspx *参考 [#w42d4e18] -グローバリゼーションとローカリゼーションのベスト プラクティス~ 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 ---- Tags: [[:.NET開発]]