外部リソース定数($$定数)¶
$$で始まるシンボルは、外部リソース定数として識別されます。
外部リソース定数は、CRSファイルと同じディレクトリに置かれているXML形式のファイルで以下のように記述します。
このファイルをリソースファイルと言います。
<?xml version="1.0"?>
<resource>
<symbol_1>String Text 1</symbol_1>
<cust>
<name>顧客名</name>
<addr>顧客住所</addr>
</cust>
:
</resource>
シンボルには、英数字とアンダーバー ( _ )だけから成るXMLのノード名として指定可能な任意の名前が利用できます。
String Text 1は$$symbol_1を置き換える文字列です。
Button1.Title = $$symbol_1;
と記述すると、ボタンには"String Text 1"と表示されます。
深い階層になるエレメントを取り出すためには、ピリオド ( . ) でノード名を接続します。 例えば、$$cust.addrは"顧客住所"に置き換えられます。
$$シンボルは、文字列定数として置き換えられます。 式や別の型の定数として置き換える事はできないので、必要に応じてCRSスクリプトによる変換を併用します。
Form1. BgColor = val( $$color ); /* 数値変換例 */
シンボルに該当するノードがリソースファイルに見つからない場合、定数の置き換えは行われず、通常の変数名として処理されます。エラーとはなりません。
リソースファイル名と配置場所¶
リソースファイルの名前は、resource.lang.xmlに固定されています。
ファイル名のlang部分は、実行時の言語識別子で置き換えられます。 置き換えの規則は下記の順に行われます。
適用順 |
形式 |
"lang"に指定できる言語識別子例 |
---|---|---|
1(最初) |
ISO639(言語)/ISO3166(地域)形式 |
ja_JP, en_US, ko_KR, zh_CN |
2 |
BCP47形式 |
ja, en, ko, zh, zh-tw |
3(最後) |
なし |
実行時の言語によらず常に同じです。
"resource.xml"と記述します。
|
例として、日本語環境の場合ja_JPまたはjaとなり、resource.ja_JP.xml, resource.ja.xml, resource.xmlの順で検索されます。
この仕組みにより、異なる言語をサポートするCRSスクリプトは、文字列定数部分を$$シンボルを利用して記述することで、resource.lang.xmlを翻訳するだけで複数の言語に対応する事が可能です。
リソースファイルは特に指定しない場合、CRSファイルと同階層にあるものが使用されます。
CRSファイルと異なる階層にあるリソースファイルへアクセスする場合は、@resourceプラグマを指定します。
@resource "../" /* CRSファイルのある一つ上のディレクトリにあるリソースファイルをダウンロードし使用します。 /
ダウンロードとキャッシュ¶
リソースファイルは、最初に$$シンボルをCRSコンパイラが検出したときに1回だけダウンロードされ、メモリ上に維持されます。
同一のリソースファイルを参照する複数のCRSファイルを連続して実行する場合でも、ダウンロードは1回だけとなります。
また、リソースァイルもCRSファイルと同じルールでキャッシュされます。
このダウンロードと置き換えはコンパイル時に行われます。
従って、最初の実行時には、CRSファイルのほかにresource.lang.xmlファイルもダウンロードされるため、 直接CRSファイルに"String Text 1"と記述したときよりも、多くの通信時間、多くの実行時間、多くのメモリを必要としますが、 2回目以降にキャッシュから実行される場合にはオーバーヘッドは発生しません。