固定文字列リソースの読み取り
app.config/appSettings/name=MessageResourceAssemblyNameに メッセージリソースを格納するアセンブリ名称を指定する。
<appSettings>
<add key="MessageResourceAssemblyName" value="Message.Resources"/>
</appSettings>
指定するのはDllのファイル名ではなく「アセンブリ名称」。大抵はDllファイル名から".dll"を取り除いた形となる
省略した場合は "Message.Resources" を使用する。
"key = value" の形式でメッセージのキー、メッセージを記述する。";"(セミコロン)はコメントとして扱われる。
"(project name).(subsystem).(category).txt"等の様なファイル名でテキストファイルを保存する。"."(ドット)で分割された要素はプログラム内で可変扱いになり、メッセージの階層関係を表現できる
;
; Messge Resource File
; Language = ja
;
; MessageID = Message の形式で記述
;
; 入力項目名などの可変項目は{0},{1},...として記述し、プログラムで設定
;
; Error Messages?
; 入力チェックなどのメッセージ
ERR_INPUT_TOO_LONG = {0} 入力文字が長すぎます。{1}文字まで
ERR_INVALID_FORMAT = {0} 入力形式が違います。
ERR_INVALID_RANGE = {0} 範囲を超えています。{1} から {2}
ERR_REQUIRED_MISSING = {0} 必須入力です。
;
; 例外時のメッセージ
;
EXCEPTION_INVALID_ARG_LENGTH = 入力引数の長さが不正です。
EXCEPTION_INVALID_ARG_CHARACTERS = 入力引数に認識できない文字が含まれています。
MSG_RESULT_NO_DATA = 検索条件に一致するものが見つかりませんでした。
resgen.exe は.Net Frameworkに付属する。
c:\...\>resgen.exe proj.subsys.category.txt
上記を実行すると proj.subsys.category.resources ファイルが生成される。
あるいは msbuildの GenerateResourceタスクを使用する。
al.exe は.Net Frameworkに付属する。
c:\...\>al.exe /out:Message.Resources.dll /embed:proj.subsys.category.txt
上記を実行すると Message.Resources.dll ファイルが生成される。この時の"Message.Resources"をapp.config/appSettings/name=MessageResourceAssemblyName に指定する。
あるいは msbuildの ALタスクを使用する。
上で生成した Message.Resources.dll(または別に生成したdll) を実行環境にコピーする。
asp.netであれば(asp.net仮想フォルダ)/bin、windowsアプリケーションであれば .exeと同じフォルダに配置。または(厳密名をつけた場合のみ)GACディレクトリ、app.config/system.runtime以下に設定したprobeパスに配置。
click onceアプリケーションの場合 Message.Resources.dllを マニフェストに含めなければならない。
CFW.MessageResources.MessageResourceFacotory.GetInstance を使用してCFW.MessageResources.MessageResourceオブジェクトを取得する。
// 階層 "proj","subsys","category" のリソースを取得する。
CFW.MessageResources.MessageResource resource =
CFW.MessageResources.MessageResourceFacotory.GetInstance("proj","subsys","category");
// 階層 (拠点コード),"category" のリソースを取得する。
string baseCode = "X001"; // 拠点 = X001 を指定
CFW.MessageResources.MessageResource resource =
CFW.MessageResources.MessageResourceFacotory.GetInstance(baseCode ,"category");
上で取得したメッセージリソースオブジェクトから必要なキーを指定してメッセージを取り出す。
// 階層 "proj","subsys","category" のリソースを取得する。
CFW.MessageResources.MessageResource resource =
CFW.MessageResources.MessageResourceFacotory.GetInstance("proj","subsys","category");
// キー ERR_INPUT_TOO_LONGに設定されたメッセージを取得
string message = resource.GetString("ERR_INPUT_TOO_LONG");