Skip to main content

This is documentation for Caché & Ensemble. See the InterSystems IRIS version of this content.Opens in a new tab

For information on migrating to InterSystems IRISOpens in a new tab, see Why Migrate to InterSystems IRIS?

CSP アプリケーションにおけるテキストのローカライズ

アプリケーションのテキストをローカライズする場合は、まず 1 つの言語でテキスト文字列のインベントリを作成します。次に、アプリケーションのロケールが異なるときに別の言語に翻訳したバージョンでこれらのメッセージを置き換えるための規則を確立します。提供されたローカライズ・ファイルは、install-dir\Mgr\Locale ディレクトリにインストールされます。

ローカライズされた CSP アプリケーションの簡単なデモを見るには、Caché の実行中に URL http://localhost:57772/csp/samples/language.cspOpens in a new tab を入力します。

Caché は、CSP アプリケーションのテキストをローカライズする以下のプロセスをサポートします。

  1. 開発者は、アプリケーションのユーザ・インタフェースのどこにテキスト文字列を表示するかを決定します。

  2. 開発者は、元の言語でテキスト文字列を記述した XML メッセージ・ファイルを作成します。

  3. 開発者は、その XML を Caché ネームスペースにインポートします。

    これにより、新規エントリがそのネームスペースのメッセージ・ディクショナリに追加されます。

  4. 開発者は、XML を翻訳者チームに渡します。

  5. 翻訳者は、元のテキストを翻訳したテキストに置き換えることで新規 XML メッセージ・ファイルを作成します。

  6. 開発者は、新規に作成されたこの XML を Caché ネームスペースにインポートします。

    翻訳したテキストと元のテキストは、メッセージ・ディクショナリに共存します。

  7. 実行時に、アプリケーションはブラウザの既定の言語に基づいて、表示するテキストを選択します。

この章では、以下の内容について説明します。

メッセージ・ディクショナリ

メッセージ・ディクショナリは、ドメイン名、言語名、メッセージ ID で構成されたテキスト文字列を格納する単純なデータベースです。

  • 各メッセージのテキストは、32,000 文字以下の文字列です。データベースで長い文字列が使用できる場合は、文字列長はさらに長くすることができますが、既定の最大長は 32,000 文字です。メッセージはテキストのみで構成できますが、%1%2 などのパラメータを 1 つ以上使用することもできます。アプリケーションのページでメッセージを表示する必要がある場合、Caché によって、これらのパラメータをテキストに置き換えることができます (エラー・メッセージ内のファイル名など)。

  • ドメイン名は任意の文字列です。特定のアプリケーションやページのすべてのメッセージなど、関連するテキスト・アイテムのグループはドメイン名で識別します。ドメインを一連のメッセージに割り当てると、Caché で同じドメインのすべてのメッセージに対して特定のアクションを後で実行することができます。

    ドメイン名は大文字と小文字が区別され、同じ文字の大文字と小文字を使用できます。ドメイン名が % で始まる場合、Caché では、ドメイン内のすべてのメッセージがすべてのネームスペースで表示可能なシステム・メッセージと見なされます。% で始めない場合は、メッセージを作成すると、それが定義されたネームスペースでのみ表示可能です。

  • 言語名は、RFC1766Opens in a new tab で定義されている、すべて小文字の言語タグです。これは、1 つ以上の部分で構成されており、主言語タグ (enja) の後に、オプションでハイフン (-) で区切られた 2 番目の言語タグ (en-gbja-jp) を記述します。

  • メッセージID は任意の文字列で、メッセージを一意に識別します。メッセージ ID はドメイン内で一意とすれば十分です。メッセージ ID は、メッセージを作成するための規則に応じて、ユーザ側で割り当てるか、Caché で自動的に割り当てます。メッセージ ID は大文字と小文字が区別され、同じ文字の大文字と小文字を使用できます。

メッセージ・ディクショナリの格納

Caché のそれぞれのユーザ定義ネームスペースでは、^CacheMsg という添え字付きグローバルにメッセージ・ディクショナリが格納されます。^CacheMsg の添え字の順序は、ドメイン、言語、メッセージ ID です。

ネームスペースの ^CacheMsg fを表示するには、以下の手順に従います。

  1. 管理ポータルを起動します。

  2. システム, 構成, ローカルデータベース ページに移動します。

  3. ネームスペース名の右側の [グローバル] をクリックします。

  4. [CacheMsg] の行の [データ] をクリックします。

    Caché では、そのネームスペースのメッセージ・ディクショナリ全体が表示されます。

以下は、Caché SAMPLES ネームスペースから抜粋した例です。これは、sample というドメインでローカライズ・ドメインにある 2 つの言語 (英語とスペイン語) のエントリを示します。行が長すぎてこの表示に収まらない場合は、この例の右側が切り捨てられます。


^CacheMsg("sample","en","LangComment") = "Demo of displaying a page in the local
^CacheMsg("sample","en","LangDesc") = "This sample demonstrates how to display a
^CacheMsg("sample","en","LangDisplay") = "Display Resource"
^CacheMsg("sample","en","LangEnglish") = "English"
^CacheMsg("sample","en","LangSet") = "Set Language"
^CacheMsg("sample","en","LangText1") = $c(13,10)_"This page has been translated
^CacheMsg("sample","en","LangText2") = $c(13,10)_"To display this page in a lang
^CacheMsg("sample","en","LangText3") = $c(13,10)_"To display the XML resource fi
^CacheMsg("sample","en","LangText4") = $c(13,10)_"The source code of this page s
^CacheMsg("sample","en","LangTitle") = "Language Localization Example"
^CacheMsg("sample","en","Language") = "English"
^CacheMsg("sample","en","menu") = "Samples Menu"
^CacheMsg("sample","en","source") = "Source"
^CacheMsg("sample","es","LangComment") = "Demo de presentación de una p
^CacheMsg("sample","es","LangDesc") = "Este ejemplo muestra como presentar una p
^CacheMsg("sample","es","LangDisplay") = "Mostrar Recurso"
^CacheMsg("sample","es","LangEnglish") = "Spanish"
^CacheMsg("sample","es","LangSet") = "Establecer Lenguaje"
^CacheMsg("sample","es","LangText1") = $c(13,10)_"Esta página ha sido tra
^CacheMsg("sample","es","LangText2") = $c(13,10)_"Para mostrar esta págin
^CacheMsg("sample","es","LangText3") = $c(13,10)_"Para mostrar el fichero fuente
^CacheMsg("sample","es","LangText4") = $c(13,10)_"El código fuente de esta
^CacheMsg("sample","es","LangTitle") = "Ejemplo de Localización de Lenguaj
^CacheMsg("sample","es","Language") = "Español"
^CacheMsg("sample","es","menu") = "Menú Samples"
^CacheMsg("sample","es","source") = "Fuente"

メッセージ・ディクショナリへのエントリの追加

メッセージをメッセージ・ディクショナリに提供するには、以下のテーブルのオプションを使用することができます。オプションごとにテーブルには本章のセクションが表示され、詳細情報を参照できます。

作業の条件 メッセージ・ディクショナリへのエントリの追加方法 詳細
タグまたはクラスを使用した CSP 開発 テキスト・エディタまたは XML 編集ツールを使用して XML メッセージ・ファイルを編集します。この XML ファイルを Caché ネームスペースにインポートします。 XML メッセージ・ファイル
タグのみを使用した CSP 開発 特定のローカライズ構文を使用するタグを使用した CSP ページを送信することにより、コンパイル時に自動的にメッセージ・ディクショナリを生成します。 タグを使用したファイルのローカライズ
クラスのみを使用した CSP 開発 $$$Text マクロ呼び出しを使用した CSP クラス・ページを送信することにより、コンパイル時に自動的にメッセージ・ディクショナリを生成します。 クラス・コードからのローカライズ

これらの開発オプションのいずれか、またはすべてを同じアプリケーションで使用することができます。

開発オプションを組み合わせる場合は、アプリケーション・メッセージを別の言語に翻訳するときに、Export コマンドを実行することにより、メッセージ・ディクショナリからオリジナルの言語のメッセージの完全なリストをエクスポートできます。これにより、完全な XML メッセージ・ファイルが元の言語で生成されます。

Important:

エクスポートおよびインポートの手順は、“メッセージ・ディクショナリの管理” のセクションを参照してください。

XML メッセージ・ファイル

XML メッセージ・ファイルは、XML 形式でのメッセージ・ディクショナリの説明です。これは、Caché でメッセージ・ディクショナリの内容を外部ファイルにエクスポートするための形式です。これは、Caché XML にインポートするメッセージに必要な形式でもあります。

Important:

エクスポートおよびインポートの手順は、“メッセージ・ディクショナリの管理” のセクションを参照してください。

XML メッセージ・ファイルには 1 つの言語と複数のドメインに対するメッセージを記述できます。このファイルは以下の DTD に準拠しています。

InstallDir\dev\csp\rules\CacheMessages.dtd

ここで、InstallDir は Caché のインストール・ディレクトリです。

可能な場合、XML メッセージ・ファイルは UTF-8 エンコードを使用する必要があります。ただし、開発者または翻訳者は、XML メッセージ・ファイルの編集を容易にするために shift-jis などのローカル・プラットフォーム・エンコードを使用できます。XML ファイルにどのエンコードを使用するかにかかわらず、エンコードはアプリケーションの Caché ロケールによってサポートされ、言語のメッセージを表現できなければなりません。

<MsgFile> 要素

<MsgFile> 要素は XML メッセージ・ファイルの最上位のコンテナです。<MsgFile> 要素はファイルごとに 1 つのみです。

<MsgFile> は 1 つの必須属性 Language を持ちます。<MsgFile>Language 属性の値は、ファイルの言語を識別する、すべて小文字の RFC1766Opens in a new tab コードです。 これは、1 つ以上の部分で構成されており、主言語タグ (enja) の後に、オプションでハイフン (-) で区切られた 2 番目の言語タグ (en-gbja-jp) を記述します。

以下の例では、この言語は「en」 (英語) です。

<?xml version="1.0" encoding="utf-8" ?>
<MsgFile Language="en">
    <MsgDomain Domain="sample">
        <Message Id="source">Source</Message>
        <Message Id="menu">Samples Menu</Message>
    </MsgDomain>
</MsgFile>

<MsgFile> には少なくとも 1 つの <MsgDomain> 要素を指定する必要があります。複数の <MsgDomain> を指定できます。

<MsgDomain> 要素

<MsgDomain> は 1 つの必須属性 Domain を持ちます。<MsgDomain>Domain 属性の値は、アプリケーションでメッセージを整理するために使用しているドメイン名の 1 つです。

<MsgDomain> 要素にはゼロ個以上の <Message> 要素を指定できます。

<Message> 要素

<Message> は 1 つの必須属性 Id を持ちます。<Message>Id 属性の値は、アプリケーションでメッセージを整理するために使用しているメッセージ ID の 1 つです。

<Message> 要素にはテキスト文字列を記述できます。この文字列は以下の項目を個別に、または組み合わせて構成することができます。

  • ファイル形式によって許容される単純なテキスト

  • 置換引数 %1%2%3、または %4

  • HTML フォーマット

  • ObjectScript 形式での文字列式

以下の例では、%1%2、太字フォーマットの HTML タグ、および連続する 2 つの二重引用符で 1 つの二重引用符を示す ObjectScript 文字列規則を使用しています。

<Message>
  The session $Username="&lt;b&gt;%1&lt;/b&gt;" $Roles="&lt;b>%2&lt;/b&gt;"
</Message>

タグを使用したファイルのローカライズ

タグを使用した CSP ページの開発では、メッセージになっていないリテラル・テキストをメッセージ・ディクショナリのエントリに置き換えるようにタグを構成できます。そのためには、タグ内にローカライズ属性 languagedomain、または textid を指定します。これらの属性では以下のタグを使用できます。

ほとんどの場合、languagedomain、および textid に指定された値がメッセージ・ディクショナリから取得するメッセージを示す場合、これらのタグは実行時にのみ機能します。

ただし、これらのタグはコンパイル時と実行時とでは異なる目的に使用される場合があります。その場合、コンパイル時にはメッセージ・ディクショナリのエントリを自動的に生成し、実行時にはこれらのエントリを取得し、表示します。以下のセクションでは、この動作について説明します。

実行時のローカライズ・タグ

Important:

このトピックは、CSP タグ <csp:text><span><div><input>、および <button> のみが該当します。

実行時に、CSP ページが表示されるときに、タグとその内容はメッセージ・ディクショナリから得られたテキストに置き換えられます。テキストの選択は、タグによって指定される languagedomain、および textid の各属性によって指定されます。

例えば、以下の構文は fr (フランス語)、sample ドメイン、および menu メッセージ ID によって指定されるメッセージに置き換えられます。<csp:text> タグ (この場合は Menu) 内のテキストは無視されます。

<csp:text textid="menu" language="fr" domain="sample">Menu</csp:text>

languagedomain、および textid の既定値は、属性が省略されるか、空 (値 "") の場合に使用されます。

  • language 属性を指定しない場合は、%response.Language の値が使用されます。

  • domain 属性を指定しない場合は、%response.Domain の値が使用されます。

  • textid は必須です (例外があります。“コンパイル時のローカライズ・タグ” のセクションを参照してください)。

既定の言語

ほとんどの開発者は、実行時に対象の言語がロケールの既定に適切に設定されるように、language 属性を意図的に指定しません。language を指定しない場合、既定で %response.Language の値に設定され、ブラウザ設定から実行時の値を自動的に取得します。

SAMPLES ネームスペースのローカライズ例のソース・コードにこの規則の例を示します。これは、以下のように表示します。

  1. スタジオを開始します。

  2. SAMPLES ネームスペースに変更します。

  3. [ワークスペース] ウィンドウの [ネームスペース] タブをクリックします。

  4. [CSP ファイル] を選択します。

  5. ファイル /csp/samples/language.csp を開きます。

既定のドメイン

%response.Domain プロパティは、CSP ページ・クラスの DOMAIN パラメータの値で初期化されます。以下のように <csp:class> タグの domain 属性を使用して %response.Domain の値を設定することもできます。

<csp:class domain="myDomainName">

メッセージ引数

メッセージ・テキストに引数 (%1%2%3%4 など) が含まれる場合は、arg1arg2arg3arg4 などの各タグ属性により、対応する置換テキストを指定できます。リテラル値を指定するか、変数を使用することができます。以下はその例です。

<csp:text textid="sessionInfo" arg1="#(userName)#" arg2="#(roleID)#" />

ボタン・テキスト

タグを使用した CSP ファイルで、ボタンに表示されるテキストは、通常、<input type="button"> タグまたは <button> タグの value 属性を使用して指定します。

<input> タグでローカライズ属性 (languagedomain、または textid) を使用している場合、value 属性は無視されます。ボタンに表示されるテキストは、メッセージ・ディクショナリから得られたテキストです。<button> タグでテキストをローカライズする場合、<csp:text> タグの languagedomain、または textid 属性を使用します。

コンパイル時のローカライズ・タグ

Important:

このトピックは、CSP タグ <csp:text><span><div>、および <input> タグのみが該当します。

textid 属性には空の値 "" を指定できます。その場合は、タグを使用した CSP ファイルをコンパイルするときに、新規メッセージが自動的にメッセージ・ディクショナリに生成されます。生成されたメッセージのテキストは、CSP タグのコンテンツから構成されます。Caché は、このテキストの 32 ビット CRC (冗長巡回検査) を計算してメッセージ ID を生成します。

必須の textid 属性を実際に省略できるのは、<csp:text> タグを使用した場合のみです。他のローカライズ・タグでは、少なくとも空の値 "" を指定する必要があります。

<csp:text> タグに textid 属性が指定されていない場合は、システムは新規メッセージとメッセージ ID 値を自動的に生成します。<csp:text> から textid を省略すると、タグ内部テキストの先頭にオプションの @textID@ 文字列を追加できます。textID は、メッセージに割り当てるメッセージ ID です。以下はその例です。

<csp:text>@simpleMenu@Menu</csp:text>

上記の例では、Caché は、メッセージ ID を生成しません。テキストが Menu であるメッセージを生成し、そのメッセージにメッセージ ID simpleMenu を割り当てます。

コンパイル時にメッセージ・ディクショナリのエントリを生成するために使用している CSP タグであっても、実行時にはそのエントリを取得するための参照として機能します。“実行時のローカライズ・タグ” のセクションを参照してください。

クラス・コードからのローカライズ

コードを使用した CSP ページの開発では、メッセージになっていないリテラル・テキストをメッセージ・ディクショナリのエントリに置き換えるコードを指定できます。以下のテーブルのオプションを使用して、これを行うことができます。オプションごとにテーブルには本章のセクションが表示され、詳細情報を参照できます。

作業の条件 詳細
XML メッセージ・ファイルを編集して、Caché にインポートします。これによって、メッセージ・ディクショナリが作成されます。 XML メッセージ・ファイル
さまざまな "get message" ルーチンおよび "format text" ルーチンとマクロを呼び出します。これらはメッセージ・ディクショナリからテキストを取得し、そのメッセージを表示できるようにします。 実行時のメッセージの取得
$$$Text マクロの 1 回の呼び出しにより、メッセージを作成、取得および表示します。$$$Text は、コンパイル時にはメッセージを自動的に作成し、実行時にはメッセージを取得するコードを生成します。 コンパイル時および実行時の $$$Text マクロ

実行時のメッセージの取得

ここでは、実行時にメッセージ・ディクショナリからメッセージ・テキストを取得する方法について説明します。メッセージに引数 %1%2%3%4 などを記述している場合は、対応する置換テキストを指定した後でそのテキストをページに表示する必要があります。

このトピックで説明する呼び出しは、メッセージ・ディクショナリに既にエントリを配置している場合にのみ有効です。例えば、XML メッセージ・ファイルを編集し、Caché にインポートしてエントリを配置します。1 回の呼び出しでメッセージを作成、取得、および表示する場合は、コンパイル時および実行時の “$$$Text マクロ のセクション” を参照してください。

%response.GetText メソッド

%CSP.ResponseOpens in a new tab クラスは、メッセージ・ディクショナリからテキストを取得してメッセージの引数を値に置き換えることができる GetText インスタンス・メソッドを提供します。CSP クラス・コードでは、現在インスタンス化されている %CSP.ResponseOpens in a new tab オブジェクトが変数 %response で表されます。このトピックでは、メソッドを %response.GetText として参照します。

メソッド・シグニチャは以下のようになります。

 method GetText(language As %String = "",
                domain As %String = "",
                id As %String,
                default As %String,
                args...) returns %String
引数 説明
domain (オプション) メッセージのドメインを指定する文字列。指定しない場合、domain は既定で %response.Domain に設定されます。
language (オプション) 言語を指定する RFC1766Opens in a new tab コード。Caché では、この文字列はすべて小文字に変換されます。language を指定しない場合、既定で %response.Language の値に設定され、ブラウザ設定から実行時の値を自動的に取得します。
id メッセージ ID。
default languagedomain、および id で識別されるメッセージが見つからない場合に使用する文字列。
arg1arg2 など メッセージ引数の置換テキスト。これらはすべてオプションなので、メッセージに引数がない場合でも %response.GetText を使用できます。

FormatText メソッド

%Library.MessageDictionaryOpens in a new tab クラスは、メッセージ引数をテキストに置き換える FormatText クラス・メソッドを提供します。メッセージ・ディクショナリからメッセージ・テキストを既に取得している場合は、FormatText を使用できます。

メソッド・シグニチャは以下のようになります。

ClassMethod FormatText(text As %String, args...) As %String
引数 説明
text メッセージ・テキスト。%response.GetText または $$$Text によって返される %String を使用します。
arg1arg2 など メッセージ引数の置換テキスト。

$$$FormatText マクロ

これらのマクロを使用すると、メッセージ引数をテキストに置き換えることができます。メッセージ・ディクショナリからメッセージ・テキストを既に取得している場合は、以下のようにそれを使用できます。

  • $$$FormatText

  • $$$FormatTextJS ($$$FormatText の結果に JavaScript エスケープを適用します。)

  • $$$FormatTextHTML ($$$FormatText の結果に HTML エスケープを適用します。)

$$$FormatText マクロは %String を返します。構文は、以下のとおりです。

$$$FormatText(text,arg1,arg2,...)

引数 説明
text メッセージ・テキスト。%response.GetText または $$$Text によって返される %String を使用します。
arg1arg2 など メッセージ引数の置換テキスト。

コンパイル時および実行時の $$$Text マクロ

$$$Text マクロはローカライズへのショートカットを提供します。$$$Text マクロを 1 回呼び出すだけで、ローカライズしたメッセージを作成、取得、および表示できます。$$$Text は、このメッセージをコンパイル時に自動的に作成し、実行時にはそのメッセージを取得するコードを生成します。

$$$Text マクロの返り値は %String です。使用する正しい $$$Text マクロは、この出力文字列に必要な形式によって異なります。

  • $$$Text

  • $$$TextJS ($$$Text の結果に JavaScript エスケープを適用します。)

  • $$$TextHTML ($$$Text の結果に HTML エスケープを適用します。)

$$$Text によって返される %String は、変数に割り当てることができます。この変数を以降の呼び出しで使用して、そのメッセージを表現できます。以下はその例です。

 Set tmsg = $$$TextJS("Error saving production")
 &js<alert('#(tmsg)#: #($ZCVT($ZE,"O","JS"))#');>

または、文字列が必要な場所に $$$Text マクロを挿入できます。

 &js<alert('#($$$TextJS("Error saving production"))#: #($ZCVT($ZE,"O","JS"))#');>

$$$Text は、次のテーブルに示す引数 textdomain、および language を持ちます。先頭の引数、text のみが必須です。

引数 説明
text

空でない文字列 text には、リテラル文字列を指定する必要があります。#()# 構文で囲んだ CSP ランタイム式の値は指定できません。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 はコンパイル時に DOMAIN クラス・パラメータの値に設定され、実行時に %response.Domain に設定されます。
language

(オプション) 言語を指定する RFC1766Opens in a new tab コード。Caché では、この文字列はすべて小文字に変換されます。指定しない場合、language は既定で以下のようになります。

  • コンパイル時 : $$$DefaultLanguage

  • 実行時 : %response.Language%response.Language に値が定義されていない場合は $$$DefaultLanguage

タグを使用した CSP ページでは、ブラウザ設定から %response.Language の値を自動的に取得し、既定の言語として使用可能です。クラス・ベースの CSP ページの場合はこれと異なり、既定値として使用する %response.Language の値を明示的に設定する必要があります。

%Library.MessageDictionaryOpens in a new tab クラス・メソッド MatchLanguage の返り値を指定することにより、%response.Language に値を割り当てることができます。このメソッドでは、言語のリストとドメイン名を指定することで、HTTP 1.1 に適合するルール (RFC2616Opens in a new tab) を使用してドメイン内での最適な言語を見つけます。

コンパイル時の $$$Text

$$$Text$$$TextJS、または $$$TextHTML の各マクロの呼び出しを含むクラスをコンパイルするときに、これらの呼び出しごとに、マクロ引数で指定された textmessage IDdomain、および language を使用してメッセージ・ディクショナリにメッセージが生成されます。

$$$Text によりメッセージが初めてドメインに追加されるときは、言語引数の指定の有無にかかわらず、$$$SessionLanguage が使用されます。 同じドメインに対する以降の $$$Text マクロでは、最初に追加されたメッセージと同じ言語でメッセージが追加されます。

実行時の $$$Text

メッセージに引数 %1%2%3%4 などを記述している場合は、対応する置換テキストを指定した後でそのテキストを表示する必要があります。$$$Text は文字列を返すので、コーディング言語に固有の文字列操作を使用できます。例えば JavaScript では以下のとおりです。

 var prompt = '#($$$TextHTML("Remove user %1 from this Role?"))#';
 prompt = prompt.replace(/%1/g,member.userName);

$$$Text 文字列を %response.FormatText メソッドまたは $$$FormatText マクロの最初の引数に入力することもできます。

メッセージ・ディクショナリの翻訳

メッセージ・ディクショナリの翻訳の規則は、以下のとおりです。

  1. 開発者はアプリケーションのネームスペースから XML メッセージ・ファイルをエクスポートします。

    Important:

    背景情報は、“XML メッセージ・ファイル” のセクションを参照してください。エクスポートの手順は、“メッセージ・ディクショナリの管理” のセクションを参照してください。

    XML メッセージ・ファイルを編集して Caché にインポートするだけでメッセージ・ディクショナリを作成する場合は、この手順を省略できます。

  2. 開発者は XML メッセージ・ファイルおよび CacheMessages.dtd を翻訳者に送信します。翻訳者は、任意の XML 編集ツールを使用して XML メッセージ・ファイルを編集します。特に、XML 部分は変更せずにテキストを元の言語から新規言語に翻訳します。

  3. 翻訳者は以下の条件を満たす新規メッセージ・ファイルを返送します。

    • CacheMessages.dtd に適合する。

    • <MsgFile>language 属性の新規 RFC1766Opens in a new tab 値を特定できる。

    • 識別された言語の翻訳済みテキストを含む。

  4. 開発者は新規 XML メッセージ・ファイルをアプリケーションのネームスペースにインポートします。

    Important:

    インポートの手順は、“メッセージ・ディクショナリの管理” のセクションを参照してください。

    これで、アプリケーションは別の言語をサポートするようになります。

メッセージ・ディクショナリの管理

このセクションでは、CSP アプリケーションをローカライズするときに広く使用されている %Library.MessageDictionaryOpens in a new tab メソッドの要約を示します。これらのメソッドを使用して以下の作業を行います。

XML メッセージ・ファイルのインポート

Caché には XML メッセージ・ファイルをインポートするためのユーティリティ・メソッドが用意されています。

ターミナル・プロンプトでの入力

  1. アプリケーションを開発しているネームスペースに変更します。

     ZN "myNamespace"
    
  2. import コマンドを実行します。Caché では各言語が個別の XML メッセージ・ファイルに格納され、言語名が各ファイルの名前に付加されています。以下にコード例を示します。

    • 以下では、特定の言語で記述されたメッセージのみをインポートできます。

       SET file="C:\myLocation\Messages_ja-jp.xml"
       DO ##class(%Library.MessageDictionary).Import(file)
      
    • 以下では、同じアプリケーションに対して複数の言語をインポートします。

       SET myFiles="C:\myLocation"
       DO ##class(%Library.MessageDictionary).ImportDir(myFiles,"d")
      
  3. ネームスペースの ^CacheMsg グローバルを検査して結果を確認します。

以下のトピックでは、両方のインポート・メソッドの概要を示します。

特定の XML メッセージ・ファイルのインポート

%Library.MessageDictionaryOpens in a new tab クラス・メソッド Import には以下のシグニチャがあります。

classmethod Import(filepath As %String,
                   flag As %String = "") returns %Status
引数 説明
filepath filepath で指定した XML メッセージ・ファイルがインポートされます。そのディレクトリにあるファイルが XML メッセージ・ファイルのみであることを確認してください。他の XML ファイルがあると、エラーが生成されます。
flag (オプション) d 表示フラグを指定すると、ファイルがインポートされたときにターミナル・コンソールに確認メッセージが表示されます。指定しない場合、この確認は行われません。

ディレクトリ内のすべての XML メッセージ・ファイルのインポート

%Library.MessageDictionaryOpens in a new tab クラス・メソッド ImportDir には以下のシグニチャがあります。

classmethod ImportDir(directory As %String,
                      flag As %String = "") returns %Status
引数 説明
directory すべての XML メッセージ・ファイルを指定されたディレクトリにインポートします。
flag (オプション) d 表示フラグを指定すると、ファイルがインポートされたときにターミナル・コンソールに確認メッセージが表示されます。指定しない場合、この確認は行われません。

XML メッセージ・ファイルのエクスポート

Caché には、メッセージ・ディクショナリの一部を XML メッセージ・ファイルにエクスポートするためのユーティリティ・メソッドが用意されています。ターミナル・プロンプトでの入力

  1. アプリケーションを開発しているネームスペースに変更します。

     ZN "myNamespace"
    
  2. 出力ファイルとその場所を特定します。

     SET file="C:\myLocation\Messages.xml"
    
  3. export コマンドを実行します。

    • 特定のドメインにあるメッセージのみをエクスポートすることが実際的な場合があります。この場合は次のように指定します。

       DO ##class(%Library.MessageDictionary).ExportDomainList(file,"myDomain")
      
    • ネームスペースにあるすべてのメッセージをエクスポートするには次のように指定します。

       DO ##class(%Library.MessageDictionary).Export(file)
      

以下のトピックでは、両方のエクスポート・メソッドの概要を示します。

1 つの言語での特定のドメインのエクスポート

%Library.MessageDictionaryOpens in a new tab クラス・メソッド ExportDomainList には以下のシグニチャがあります。

classmethod ExportDomainList(file As %String,
                             domainList As %String,
                             language As %String) returns %Status
引数 説明
file

(必須) この形式での出力ファイル名のテンプレート。

filepath.ext

Caché では、ext 拡張子と共に language 値を filepath に付加することにより出力ファイルを命名します。

domainList (オプション) エクスポートするドメインのコンマで区切られたリスト。
language (オプション) 指定した language のみがエクスポートされます。値はすべて小文字の RFC1766Opens in a new tab コードとする必要があります。指定しないと、値はシステム既定の言語、つまり、特殊変数 $$$DefaultLanguage に格納されている値に設定されます。

特定の言語でのすべてのドメインのエクスポート

%Library.MessageDictionaryOpens in a new tab クラス・メソッド Export には以下のシグニチャがあります。

classmethod Export(file As %String,
                   languages As %String = "",
                   flag As %String = "") returns %Status
引数 説明
file

(必須) この形式での出力ファイル名のテンプレート。

filepath.ext

Caché では、ext 拡張子と共に languages 値を filepath に付加することにより出力ファイルを命名します。

languages (必須) コンマで区切られた言語リスト。リストの各値は、すべて小文字の RFC1766Opens in a new tab コードとする必要があります。languages を指定しない場合、または空である場合は、データベースにあるすべての言語がエクスポートされます。Caché では、file 引数について記述された規則を使用して、各言語が個別のファイルにエクスポートされます。
flag (オプション) s システム・フラグを指定すると、システム・メッセージ・ディクショナリがエクスポートされます。指定しない場合は、アプリケーション・メッセージ・ディクショナリのみがエクスポートされます。

メッセージの削除

以下のようにして、メッセージを削除します。

 Set status = ##class(%MessageDictionary).Delete(languages,flag)

languages は、オプションのコンマ区切りの言語リストです。languages が指定されていない場合、すべての言語が削除されます。既定では、アプリケーション・メッセージのみを削除します。s はオプションのシステム・フラグで、システム・メッセージを削除するかどうかを示します。インクルード・ファイルに関連するメッセージは常に削除されますが、ファイル自体は削除されません。d 表示フラグもサポートされています。

メッセージのリスト

指定されたドメインにロードされたメッセージを持つすべての言語リストは、GetLanguages 関数を使用して取得できます。

 Set list = ##class(%MessageDictionary).GetLanguages(domain,flag)

GetLanguages は、標準の RFC1766Opens in a new tab 形式で、言語の %ListofDateTimes 形式リストをすべて小文字で返します。domain が指定されている場合、指定されたドメインに存在する言語のみがリストに返されます。そうでない場合、すべての言語がリストに返されます。s はオプションのシステム・フラグで、システム・メッセージまたはアプリケーション・メッセージのどちらでサポートされる言語を返すかを示します。既定では、アプリケーション・メッセージの言語が返されます。d 表示フラグもサポートされています。

一致言語の検索

要求に最適な言語の検索には、以下を実行します。

 Set language = ##class(%MessageDictionary).MatchLanguage(languages,domain,flag)

HTTP 1.1 一致規則 (RFC 2616Opens in a new tab) を使用して、指定されたドメインの言語リストにある言語に最適な言語が検索されます。言語リストは、コンマで区切られた RFC1766Opens in a new tab 形式の言語名のリストです。そのリストの言語それぞれに対応する品質値があり、指定された言語に対しユーザが選択した言語の評価を示します。既定の品質値は、q=1 です。

例えば、da, en-gb;q=0.8, en;q=0.7 は、デンマーク語を選択し、イギリス英語と他の英語も許可することを意味します。リストの言語がサポート対象の言語タグと一致する場合、またはリストの言語に付く接頭語の後の最初のタグ文字がハイフン (-) である場合、リストの言語はサポート対象の言語タグに一致します。特殊な言語を示すアスタリスク (*) が入力リストにある場合、リストにある他の言語に一致しない、すべてのサポート対象の言語に一致します。

言語品質要素は、リストにある最長言語で言語タグに一致するものの品質値により、サポート対象の言語タグに割り当てられます。返される言語は、高品質要素を割り当てられたサポート言語です。

s はオプションのシステム・フラグで、システム・メッセージとの一致を検索するか (s を指定した場合)、アプリケーション・メッセージとの一致を検索するかを示します。

FeedbackOpens in a new tab