国際化
メッセージ
プログラムにエラーがあった場合、例外が送出されます。送出される例外は、発生したエラーに関するヒントであるメッセージを含みます。
Riceのデフォルトのメッセージは英語ですが、メッセージが母国語であれば、より早くエラーの原因を理解することが出来るはずです。
Riceはメッセージを変更するためのインターフェースを提供しています。
このインターフェースを使えば、メッセージを英語以外に変更できます。
もし、新しい組み込みクラスを実装するなら、そのクラスのためのメッセージが必要になるかもしれませんが、新たなメッセージを追加することも容易にできます。
メッセージの仕様
Riceのメッセージは、メッセージ名とメッセージ本文の対です。
例えば、
interpreter_dummy > "Right-hand side is undefined."
Riceの内部では、メッセージはメッセージ名をキー、メッセージ本文を値とした連想配列として管理されています。
Ver 1.3.1.0 以前はメッセージ名にマイナス記号を使用していましたが、Ver 1.3.1.0 でメッセージ名のマイナス記号がアンダースコアに変更されました。
interpreter-dummy > interpreter_dummy
メッセージ管理のためのインターフェース
以下の、RiceManagerクラス(C#)の静的なメンバ関数がメッセージ管理のためのインターフェースです。
public static string GetMessage(string key)
public static string AddMessage(string key, string value)
public static string SetMessage(string key, string value)
public static void SetFromFile(string fileName)
public static void SetFromResource(ResourceManager manager)
public static void SetFromResource(ResourceManager manager, CultureInfo info)
public static bool ContainsKey(string key)
以下の関数がVer 1.3.1.0 で追加されています。
public static void SetFromResource(ResourceManager manager)
public static void SetFromResource(ResourceManager manager, CultureInfo info)
GetMessage(string)メンバ関数
シグネチャを以下に示します。
public static string GetMessage(string key)
このメンバ関数は、メッセージ名を引数として受け取り、対応するメッセージ本文を返します。
メッセージ名が存在しない場合は、KeyNotFoundException例外を送出します。
AddMessage(string,string)メンバ関数
シグネチャを以下に示します。
public static string AddMessage(string key, string value)
このメンバ関数は、メッセージ名(key)とメッセージ本文(value)を引数として受け取り、メッセージ本文を返します。
メッセージ名が存在しない場合は、メッセージ名と本文の対を登録して、登録した本文を返します。
メッセージ名が既に存在する場合は、新しい本文の登録は行なわず、既に登録されている古い本文を返します。
つまり、メッセージ本体は上書きされません。
SetMessage(string,string)メンバ関数
シグネチャを以下に示します。
public static string SetMessage(string key, string value)
このメンバ関数は、メッセージ名(key)とメッセージ本文(value)を引数として受け取り、メッセージ本文を返します。
メッセージ名が存在しない場合は、メッセージ名と本文の対を登録して、登録した本文を返します。
メッセージ名が既に存在する場合も、新しい本文を登録して、新しく登録した本文を返します。
つまり、メッセージの本文は上書きされます。
SetFromFile(string)メンバ関数
シグネチャを以下に示します。
public static void SetFromFile(string fileName)
このメンバ関数は、テキストファイルへのパスを引数として受け取り、メッセージを変更します。
メッセージ名が存在しない場合は、メッセージ名と本文の対を登録します。
メッセージ名が既に存在する場合も、新しい本文を登録します。
つまり、メッセージの本文は上書きされます。
このメンバ関数は、指定されたパスにファイルが存在しない場合は何もしません。
メッセージの登録に必要なファイルの形式は後述します。
SetFromResource(ResourceManager)メンバ関数
シグネチャを以下に示します。
public static void SetFromResource(ResourceManager manager)
このメンバ関数は、System.Resources.ResourceManager と現在のカルチャを使用してメッセージを変更します。
メッセージ名としてリソース名を使用します。メッセージ本文は対応するリソースの値です。文字列以外のリソースは無視されます。
メッセージ名が存在しない場合は、メッセージ名と本文の対を登録します。
メッセージ名が既に存在する場合も、新しい本文を登録します。
つまり、メッセージの本文は上書きされます。
Ver 1.3.1.0 で追加。
SetFromResource(ResourceManager,CultureInfo)メンバ関数
シグネチャを以下に示します。
public static void SetFromResource(ResourceManager manager, CultureInfo info)
このメンバ関数は、System.Resources.ResourceManager と System.Globalization.CultureInfo を使用してメッセージを変更します。
CultureInfo に対応するカルチャが無い場合はデフォルトのカルチャが使用されます。
メッセージ名としてリソース名を使用します。メッセージ本文は対応するリソースの値です。文字列以外のリソースは無視されます。
メッセージ名が存在しない場合は、メッセージ名と本文の対を登録します。
メッセージ名が既に存在する場合も、新しい本文を登録します。
つまり、メッセージの本文は上書きされます。
Ver 1.3.1.0 で追加。
ContainsKey(string)メンバ関数
シグネチャを以下に示します。
public static bool ContainsKey(string key)
このメンバ関数は、メッセージ名(key)が既に登録されているかどうかを返します。
メッセージ名が既に登録されている場合は、trueを返します。
メッセージ名が登録されていない場合は、falseを返します。
メッセージファイルの仕様
SetFromFileメンバ関数を使用する場合、変更に使用するファイルは一定の形式に準拠している必要があります。
まず、そのファイルがUTF-8エンコーディングされたテキストファイルである必要があります。
ファイル内の、行頭が#で始まる行はコメント行です。メッセージの登録の際には無視されます。
#で始まらない行は、メッセージ名と本文の対を示します。メッセージ名と本文は、:::(トリプルコロン)で区切られます。
:::で区切られた文字列の、最初がメッセージ名、二つ目が登録するメッセージ本文です。
メッセージ名と本文に使用する文字や長さに制限はありません。但し、:::はセパレータなので使用することは出来ません。
:::で区切られる文字列は、二つ以上有っても問題ありません。三つ目以降は無視されます。
Riceのダウンロードzipファイル内のmessage.txtでは、三つ目の文字列として英語のオリジナルメッセージを記載しています。
詳しくは、message.txtをご覧ください。