共通ドキュメント

メッセージリソース

概要

固定文字列リソースの読み取り

  • 設定
  • メッセージリソースの作成
  • メッセージリソースの配置
  • メッセージリソースオブジェクトの取得
  • メッセージの取得

設定

基本設定

app.config/appSettings/name=MessageResourceAssemblyNameに メッセージリソースを格納するアセンブリ名称を指定する。

<appSettings>
    <add key="MessageResourceAssemblyName" value="Message.Resources"/>
  </appSettings>
				
				

指定するのはDllのファイル名ではなく「アセンブリ名称」。大抵はDllファイル名から".dll"を取り除いた形となる
省略した場合は "Message.Resources" を使用する。

メッセージリソースの作成

基本的な流れ

  • リソースの元となるテキストファイルを作成する。
  • resgen.exeを使用して .resourcesファイルを生成する。
  • al.exeを使用してアセンブリファイルを生成する

リソースの元となるテキストファイルを作成する。

"key = value" の形式でメッセージのキー、メッセージを記述する。";"(セミコロン)はコメントとして扱われる。

"(project name).(subsystem).(category).txt"等の様なファイル名でテキストファイルを保存する。"."(ドット)で分割された要素はプログラム内で可変扱いになり、メッセージの階層関係を表現できる

サンプル(common.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を使用して .resourcesファイルを生成する。

resgen.exe は.Net Frameworkに付属する。

実行例
c:\...\>resgen.exe proj.subsys.category.txt 

上記を実行すると proj.subsys.category.resources ファイルが生成される。

あるいは msbuildの GenerateResourceタスクを使用する。

al.exeを使用してアセンブリファイルを生成する

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タスクを使用する。

注意

  • 上記処理は src/build/message.resource.proj をmsbuildで実行する事により可能
  • 各案件でMessageResources.dllを作成する場合、CFW/dotnet/src/message/common.txt を必ず含めること。そこにはCFWが使用するメッセージが存在する。

メッセージリソースの配置

上で生成した 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");
				

その他

  • メッセージの内部に可変項目を設定する場合、TemplateTextParserスタイルにするか、string.Format()形式にするかのいずれかにする
  • 階層構造のデフォルト機能(指定した階層のリソースがない場合)の処理は実装されていない。