文字列のローカライズの概要
ここでは、インターシステムズ製品の文字列のローカライズの概要を示します。文字列のローカライズは、ローカリゼーション・サポートの重要な要素です。
アプリケーションのテキストをローカライズする場合、ある言語のテキスト文字列のインベントリを作成してから、アプリケーションのロケールが異なるときに別言語の変換バージョンのメッセージに置き換える規約を設定します。そのため、インターシステムズ製品は、文字列をローカライズするために以下のプロセスをサポートします。
-
開発者が、ローカライズ可能な文字列をコード内 (Web アプリケーションまたはビジネス・インテリジェンス・モデル内) に含めます。
このメカニズムはさまざまですが、最も一般的なメカニズムは $$$Text マクロです。ハードコードされたリテラル文字列の代わりに、$$$Text マクロのインスタンスを記述して、マクロ引数の値を以下のように指定します。
-
既定の文字列
-
この文字列の所属先のドメイン (文字列がドメインにグループ化されている場合、ローカライズの管理が簡単になります)
-
既定の文字列の言語コード
例えば、以下を指定するのではなく、
write "Hello world"
以下を記述します。
write $$$TEXT("Hello world","sampledomain","en-us")
-
-
コードをコンパイルすると、コンパイラによって、$$$Text マクロの一意のインスタンスごとに、メッセージ・ディクショナリにエントリが生成されます。
メッセージ・ディクショナリはグローバルであるため、(例えば) 管理ポータルで簡単に確認できます。データを管理するためのクラス・メソッドがあります。
-
開発が完了したら、リリース・エンジニアは、対象のドメインまたはすべてのドメインのメッセージ・ディクショナリをエクスポートします。
結果は、元の言語でのテキスト文字列を含む 1 つ以上の XML メッセージ・ファイルになります。
-
リリース・エンジニアは、これらのファイルをトランスレータに送信し、変換されたバージョンを要求します。
-
トランスレータは、好みの XML オーサリング・ツールを使用してファイルで作業します。基本的には、前後の XML を変更することなく、テキストを元の言語から新しい言語に変換します。
-
トランスレータは、同じ構造を持つ以下のような新しいファイルを返します。
-
<MsgFile> 要素の language 属性の RFC1766Opens in a new tab 値を識別する
-
識別された言語の変換済みテキストを格納する
-
-
リリース・エンジニアは、変換された XML メッセージ・ファイルを、元のファイルのエクスポート元である同じネームスペースにインポートします。
メッセージ・ディクショナリに、変換されたテキストと元のテキストが共存します。
-
実行時に、アプリケーションは、ブラウザの既定の言語に基づいてどのテキストを表示するかを選択します。
ローカリゼーションのマクロ
ここでは、ローカリゼーションに使用されるマクロについて詳しく説明します。これらのマクロは、%occInclude.inc) に含まれる %occMessages.inc に格納されています。
-
$$$Text は文字列を返します
-
$$$TextJS は JavaScript で使用するためにエスケープされた文字列を返します
-
$$$TextHTML は HTML で使用するためにエスケープされた文字列を返します
これらの各マクロは、既定の文字列、この文字列が属するドメイン、既定の文字列の言語コードの 3 つの引数を取ります。コードをコンパイルすると、コンパイラによって、引数の値の一意のセットごとに、メッセージ・ディクショナリにエントリが生成されます。
マクロの詳細
$$$Text、$$$TextJS、および $$$TextHTML マクロは、順番に以下の引数を取ります。
空でないリテラル文字列。text に使用される形式は次のとおりです。
"actualText"
または
"@textId@actualText"
textId はメッセージ ID で、actualText はメッセージのテキストです。
文字列 actualText は、以下の項目を個別に構成するか、組み合わせて構成することができます。
-
使用可能なファイル形式のシンプル・テキスト
-
置換引数 %1、%2、%3、%4
-
HTML 形式
-
ObjectScript 文字列式
指定すると、textId がメッセージ ID として使用されます。@textId@ を指定していない場合、このテキストの 32 ビット CRC (冗長巡回検査) が計算されて、新しい textId が生成されます。textId が指定されていて、この ID のメッセージが既に存在する場合、その既存のメッセージに actualText と同じテキストがあるかどうかが確認されます。ない場合、エラーが報告されます。
(オプション) 新しいメッセージのドメインを指定する文字列。指定されない場合、domain は既定でコンパイル時には DOMAIN クラス・パラメータの値に設定され、実行時には %response.Domain に設定されます。
(オプション) 言語を指定する RFC1766Opens in a new tab コード。InterSystems IRIS ではこの文字列はすべて小文字に変換されます。指定されない場合、language は既定で以下に設定されます。
-
コンパイル時 : $$$DefaultLanguage。
-
実行時 (CSP ベースの Web アプリケーション内) : 既定値は %response.Language で、%response.Language の値が定義されていない場合は $$$DefaultLanguage。
-
実行時 (その他のコンテキスト) : $$$DefaultLanguage。
メッセージの引数と $$$FormatText マクロ
メッセージ・テキストに引数 (%1、%2、%3、%4) が含まれる場合、テキストを表示する前に対応する置換テキストを指定する必要があります。$$$Text は文字列を返すため、コーディング言語にネイティブな任意の文字列操作を使用できます。例えば、JavaScript では以下のようになります。
var prompt = '#($$$TextHTML("Remove user %1 from this Role?"))#';
prompt = prompt.replace(/%1/g,member.userName);
インターシステムズは、メッセージの引数のテキストを置換するための追加のマクロを提供しています。
-
$$$FormatText
-
$$$FormatTextJS ($$$FormatText の結果に JavaScript エスケープを適用)
-
$$$FormatTextHTML ($$$FormatText の結果に HTML エスケープを適用)
これらのマクロは、%occInclude.inc に含まれる %occMessages.inc にあります。これらのマクロは、順番に以下の引数を取ります。
メッセージ・テキスト、文字列。$$$Text から返された値を使用します。
メッセージ引数の置換テキスト。