CSP アプリケーションにおけるテキストのローカライズ
アプリケーションのテキストをローカライズする場合は、まず 1 つの言語でテキスト文字列のインベントリを作成します。次に、アプリケーションのロケールが異なるときに別の言語に翻訳したバージョンでこれらのメッセージを置き換えるための規則を確立します。提供されたローカライズ・ファイルは、install-dir\Mgr\Locale ディレクトリにインストールされます。
ローカライズされた CSP アプリケーションの簡単なデモを見るには、Caché の実行中に URL http://localhost:57772/csp/samples/language.cspOpens in a new tab を入力します。
Caché は、CSP アプリケーションのテキストをローカライズする以下のプロセスをサポートします。
-
開発者は、アプリケーションのユーザ・インタフェースのどこにテキスト文字列を表示するかを決定します。
-
開発者は、元の言語でテキスト文字列を記述した XML メッセージ・ファイルを作成します。
-
開発者は、その XML を Caché ネームスペースにインポートします。
これにより、新規エントリがそのネームスペースのメッセージ・ディクショナリに追加されます。
-
開発者は、XML を翻訳者チームに渡します。
-
翻訳者は、元のテキストを翻訳したテキストに置き換えることで新規 XML メッセージ・ファイルを作成します。
-
開発者は、新規に作成されたこの XML を Caché ネームスペースにインポートします。
翻訳したテキストと元のテキストは、メッセージ・ディクショナリに共存します。
-
実行時に、アプリケーションはブラウザの既定の言語に基づいて、表示するテキストを選択します。
この章では、以下の内容について説明します。
-
タグを使用した CSP ページのテキストをローカライズする方法
-
クラス・ベースの CSP ページのテキストをローカライズする方法
-
アプリケーションに新規言語への翻訳を追加する方法
メッセージ・ディクショナリ
メッセージ・ディクショナリは、ドメイン名、言語名、メッセージ ID で構成されたテキスト文字列を格納する単純なデータベースです。
-
各メッセージのテキストは、32,000 文字以下の文字列です。データベースで長い文字列が使用できる場合は、文字列長はさらに長くすることができますが、既定の最大長は 32,000 文字です。メッセージはテキストのみで構成できますが、%1、%2 などのパラメータを 1 つ以上使用することもできます。アプリケーションのページでメッセージを表示する必要がある場合、Caché によって、これらのパラメータをテキストに置き換えることができます (エラー・メッセージ内のファイル名など)。
-
ドメイン名は任意の文字列です。特定のアプリケーションやページのすべてのメッセージなど、関連するテキスト・アイテムのグループはドメイン名で識別します。ドメインを一連のメッセージに割り当てると、Caché で同じドメインのすべてのメッセージに対して特定のアクションを後で実行することができます。
ドメイン名は大文字と小文字が区別され、同じ文字の大文字と小文字を使用できます。ドメイン名が % で始まる場合、Caché では、ドメイン内のすべてのメッセージがすべてのネームスペースで表示可能なシステム・メッセージと見なされます。% で始めない場合は、メッセージを作成すると、それが定義されたネームスペースでのみ表示可能です。
-
言語名は、RFC1766Opens in a new tab で定義されている、すべて小文字の言語タグです。これは、1 つ以上の部分で構成されており、主言語タグ (en や ja) の後に、オプションでハイフン (-) で区切られた 2 番目の言語タグ (en-gb や ja-jp) を記述します。
-
メッセージID は任意の文字列で、メッセージを一意に識別します。メッセージ ID はドメイン内で一意とすれば十分です。メッセージ ID は、メッセージを作成するための規則に応じて、ユーザ側で割り当てるか、Caché で自動的に割り当てます。メッセージ ID は大文字と小文字が区別され、同じ文字の大文字と小文字を使用できます。
メッセージ・ディクショナリの格納
Caché のそれぞれのユーザ定義ネームスペースでは、^CacheMsg という添え字付きグローバルにメッセージ・ディクショナリが格納されます。^CacheMsg の添え字の順序は、ドメイン、言語、メッセージ ID です。
ネームスペースの ^CacheMsg fを表示するには、以下の手順に従います。
-
管理ポータルを起動します。
-
システム, 構成, ローカルデータベース ページに移動します。
-
ネームスペース名の右側の [グローバル] をクリックします。
-
[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 メッセージ・ファイルが元の言語で生成されます。
エクスポートおよびインポートの手順は、“メッセージ・ディクショナリの管理” のセクションを参照してください。
XML メッセージ・ファイル
XML メッセージ・ファイルは、XML 形式でのメッセージ・ディクショナリの説明です。これは、Caché でメッセージ・ディクショナリの内容を外部ファイルにエクスポートするための形式です。これは、Caché XML にインポートするメッセージに必要な形式でもあります。
エクスポートおよびインポートの手順は、“メッセージ・ディクショナリの管理” のセクションを参照してください。
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 つ以上の部分で構成されており、主言語タグ (en や ja) の後に、オプションでハイフン (-) で区切られた 2 番目の言語タグ (en-gb や ja-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="<b>%1</b>" $Roles="<b>%2</b>"
</Message>
クラス・コードからのローカライズ
コードを使用した 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 | language、domain、および id で識別されるメッセージが見つからない場合に使用する文字列。 |
arg1、arg2 など | メッセージ引数の置換テキスト。これらはすべてオプションなので、メッセージに引数がない場合でも %response.GetText を使用できます。 |
FormatText メソッド
%Library.MessageDictionaryOpens in a new tab クラスは、メッセージ引数をテキストに置き換える FormatText クラス・メソッドを提供します。メッセージ・ディクショナリからメッセージ・テキストを既に取得している場合は、FormatText を使用できます。
メソッド・シグニチャは以下のようになります。
ClassMethod FormatText(text As %String, args...) As %String
引数 | 説明 |
---|---|
text | メッセージ・テキスト。%response.GetText または $$$Text によって返される %String を使用します。 |
arg1、arg2 など | メッセージ引数の置換テキスト。 |
$$$FormatText マクロ
これらのマクロを使用すると、メッセージ引数をテキストに置き換えることができます。メッセージ・ディクショナリからメッセージ・テキストを既に取得している場合は、以下のようにそれを使用できます。
-
$$$FormatText
-
$$$FormatTextJS ($$$FormatText の結果に JavaScript エスケープを適用します。)
-
$$$FormatTextHTML ($$$FormatText の結果に HTML エスケープを適用します。)
$$$FormatText マクロは %String を返します。構文は、以下のとおりです。
$$$FormatText(text,arg1,arg2,...)
引数 | 説明 |
---|---|
text | メッセージ・テキスト。%response.GetText または $$$Text によって返される %String を使用します。 |
arg1、arg2 など | メッセージ引数の置換テキスト。 |
コンパイル時および実行時の $$$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 は、次のテーブルに示す引数 text、domain、および language を持ちます。先頭の引数、text のみが必須です。
引数 | 説明 |
---|---|
text |
空でない文字列 text には、リテラル文字列を指定する必要があります。#()# 構文で囲んだ CSP ランタイム式の値は指定できません。text では、次の形式を使用できます。 "actualText" または以下のようにします。 "@textId@actualText" textId はメッセージ ID で、actualText はメッセージのテキストです。 文字列 actualText には以下のものを指定できます。これらを組み合わせて指定することもできます。
指定されている場合、textId がメッセージ ID として使用されます。@textId@ が指定されていない場合、このテキストの 32 ビット CRC (冗長巡回検査) を計算して新規の textId が生成されます。指定した textId と同じ ID を持つメッセージが既に存在する場合は、その既存のメッセージと actualText が同じ内容のテキストであるかどうかがチェックされます。同じテキストではない場合は、エラーが報告されます。 |
domain | (オプション) 新規メッセージのドメインを指定する文字列。指定しない場合、既定では domain はコンパイル時に DOMAIN クラス・パラメータの値に設定され、実行時に %response.Domain に設定されます。 |
language |
(オプション) 言語を指定する RFC1766Opens in a new tab コード。Caché では、この文字列はすべて小文字に変換されます。指定しない場合、language は既定で以下のようになります。
タグを使用した 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 の各マクロの呼び出しを含むクラスをコンパイルするときに、これらの呼び出しごとに、マクロ引数で指定された text、message ID、domain、および 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 マクロの最初の引数に入力することもできます。
メッセージ・ディクショナリの翻訳
メッセージ・ディクショナリの翻訳の規則は、以下のとおりです。
-
開発者はアプリケーションのネームスペースから XML メッセージ・ファイルをエクスポートします。
Important:背景情報は、“XML メッセージ・ファイル” のセクションを参照してください。エクスポートの手順は、“メッセージ・ディクショナリの管理” のセクションを参照してください。
XML メッセージ・ファイルを編集して Caché にインポートするだけでメッセージ・ディクショナリを作成する場合は、この手順を省略できます。
-
開発者は XML メッセージ・ファイルおよび CacheMessages.dtd を翻訳者に送信します。翻訳者は、任意の XML 編集ツールを使用して XML メッセージ・ファイルを編集します。特に、XML 部分は変更せずにテキストを元の言語から新規言語に翻訳します。
-
翻訳者は以下の条件を満たす新規メッセージ・ファイルを返送します。
-
CacheMessages.dtd に適合する。
-
<MsgFile> の language 属性の新規 RFC1766Opens in a new tab 値を特定できる。
-
識別された言語の翻訳済みテキストを含む。
-
-
開発者は新規 XML メッセージ・ファイルをアプリケーションのネームスペースにインポートします。
これで、アプリケーションは別の言語をサポートするようになります。
メッセージ・ディクショナリの管理
このセクションでは、CSP アプリケーションをローカライズするときに広く使用されている %Library.MessageDictionaryOpens in a new tab メソッドの要約を示します。これらのメソッドを使用して以下の作業を行います。
-
XML メッセージ・ファイルからメッセージをインポートします。
-
XML メッセージ・ファイルへメッセージをエクスポートします。
-
メッセージ・ディクショナリからメッセージを削除します。
-
メッセージ・ディクショナリでメッセージをリストします。
XML メッセージ・ファイルのインポート
Caché には XML メッセージ・ファイルをインポートするためのユーティリティ・メソッドが用意されています。
ターミナル・プロンプトでの入力
-
アプリケーションを開発しているネームスペースに変更します。
ZN "myNamespace"
-
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")
-
-
ネームスペースの ^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 メッセージ・ファイルにエクスポートするためのユーティリティ・メソッドが用意されています。ターミナル・プロンプトでの入力
-
アプリケーションを開発しているネームスペースに変更します。
ZN "myNamespace"
-
出力ファイルとその場所を特定します。
SET file="C:\myLocation\Messages.xml"
-
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 を指定した場合)、アプリケーション・メッセージとの一致を検索するかを示します。