Curl® 言語は複数の自然言語で Web アプリケーション を デプロイ することをサポートするツールを提供しています。Curl 実行環境 (RTE) で完全にテストされサポートされている言語は、米国英語と日本語のみです。左から右に読むほとんどの言語は Curl アプレット によって表示でき、Curl コントロール から入力ができます。アプレットは適切なフォントを要求し、そのフォントはアプレットが実行されている環境で使用可能なものである必要があります。
Curl の複数言語サポートには 2 つのアプローチがあります。主にテキスト情報で構成されるアプリケーション部分では Curl を HTML のようにマークアップ言語として使用します。これらに対してはファイルの各言語バージョンを作成するのが最良のアプローチです。
Curl 言語の長所の 1 つは、これを高度なオブジェクト指向プログラミング言語として使い、インタラクティブ アプリケーションを開発できるという点ですが、この種の使用は翻訳上では別の問題を提起することにもなります。言語ごとにアプリケーション全体の複製を作成するのは効率的ではありません。さらに、アプリケーションで [送信] というラベルのボタンを何度でも使用することがあっても、そのたびに「送信」という単語を翻訳するのは避けたいものです。Curl 言語では、このような翻訳上の問題を解決するためのローカライゼーション メカニズムが提供されています。
ロケールの概念は、Curl アプリケーションの複数言語ディプロイメントの中心にあるものです。
Locale クラスには、アプリケーションに適した言語リソースを見つけるのに使われる言語および国情報が含まれています。ロケールはまた、日付の書式設定や大きな数値の桁区切り記号の選択など、地域特有の問題をアプレットでどのように処理するかを決定します。Curl RTE はロケール名を使って翻訳辞書を検索します。
ホスト ロケールとはアプリケーションを実行するシステムで設定されているロケールのことです。例えば Windows システムでは、Windows コントロール パネルの [地域のオプション] ツールを使ってマシンのロケールを設定します。
get-host-locale プロシージャはホスト ロケールを返します。さらに、各アプリケーションで作業ロケールを設定できます。
get-working-locale プロシージャは作業ロケールを返し、
set-working-locale プロシージャは作業ロケールを変更します。
既定では、作業ロケールはホスト ロケールに設定されているので、開発者が特に指定しなくてもアプレットは適切なロケールを使用することになります。
Curl アプリケーションに含まれるテキストには、翻訳が必要なものとそのまま使用すべきものがあります。エラー メッセージやボタンのラベルなど、ユーザー インターフェイスの一部であるテキストはエンドユーザーの言語に翻訳する必要があります。コマンド識別子やオプションの値など、内部使用のテキスト文字列は翻訳の必要はありません。アプレット内で翻訳すべきテキスト文字列を識別し、Curl 言語が提供する式のいずれかを使ってこれらをマークアップする必要があります。これらのマークアップ式の詳細は「
翻訳すべき文字列のマークアップ」を参照してください。
翻訳が必要な文字列のマークアップが済んだら、
extract-messages.xcurl という名前のスクリプトを使ってソース ファイルを処理し、Curl 翻訳システムが理解できる XML マークアップを使って翻訳対象文字列を含むファイルを書き出します。翻訳者はこのメッセージ ファイルを編集し、各メッセージの翻訳を追加します。このファイルの詳細は「
書き出したメッセージの翻訳」を参照してください。このメッセージ書き出しスクリプトは Curl 統合開発環境 (IDE) に含まれています。
翻訳ファイルはアプレットと一緒にディプロイしなければなりません。実行時には、アプレットは翻訳ファイルを使って各文字列の適切な翻訳を探し出し、ユーザーに表示します。ロケールごとに XML 形式の翻訳ファイルを提供することによって、複数のロケールをサポートできます。
アプレットの実行時には、翻訳ファイルは翻訳辞書として機能します。翻訳対象としてマークされた文字列が実行時に使われると、RTE は該当するロケールに関連付けられた辞書でその文字列を検索します。翻訳が見つかると、アプリケーションでその翻訳テキストを使います。ロケールの翻訳ファイルが見つからない場合、またはその文字列の翻訳が見つからない場合は、元の文字列が使われます。この方法では、翻訳が見つからない場合のフォールバック アクションを提供しています。さらに、管理の難しい数値形式のメッセージ識別子の使用を避けています。その他の利点には、一意の文字列は辞書に一度しか登録されず、一度翻訳するだけで済むことが挙げられます。
Curl 言語の翻訳システムを使用するために必要な手順は以下のとおりです。
上記の手順について、以下のセクションで詳細に解説していきます。
lmessage マクロはアプリケーション内のテキストの翻訳を提供するものです。この最も簡単な形式は次のとおりです。
{lmessage original-text}
アプリケーション内で翻訳対象のテキスト メッセージをすべてマークアップしたら、Curl スクリプト curl://install/ide/translate/bin/extract-messages.xcurl を実行してスケルトンの翻訳ファイルを生成します。このスクリプトはバッチ ファイルから実行することも、コマンド プロンプトで直接実行することもできます。スクリプトは、インクルード ステートメントに従いアプリケーション内のすべてのファイルを読み取り、すべてのローカライゼーション式を処理して指定ファイルに結果を出力します。
次の表は、メッセージを書き出すコマンド ライン インターフェイスの説明です。
構文 : | curl extract-messages.xcurl [--help] | -o filename file1, file2, ..., filen |
説明: |
オプション/引数 | 説明 |
--help | extract-messages スクリプトのオンライン ヘルプを表示します。 |
-o | 翻訳ファイルを指定します。filename をファイルのパスと名前に置き換えます。 |
file1, file2, ..., filen | 処理する Curl ソース ファイルを指定します。任意の数の入力ファイルを指定できます。files をソース ファイルのパスと名前に置き換えます。 |
|
たとえば、コマンド スクリプト ウィンドウで次のコマンドを 1 行に入力すると、Curl ソース ファイル source-file.curl でメッセージ書き出しツールが実行され、結果が translation-file.xml に出力されます。
d:\automated-build-temp\build\win32-atom\bin\curl.exe curl://install/ide/translate/bin/extract-messages.xcurl -o translation-file.xml source-file.curl
所与のロケールとパッケージ(もしくはアプレット)に翻訳ファイルの場所を指定する方法は2種類あります。
- マニフェスト検索システム の使用
適切なマニフェストにエントリーを追加します。パッケージの既定のマニフェスト (
get-default-manifest を参照してください。)とそのデリゲート マニフェストに対しパッケージとロケールが一致する翻訳のエントリの検索が行われます。
- ファイル検索システムの使用
この ファイル検索のアプローチは、マニフェスト検索のアプローチでファイルが検索できなかった場合にのみ使用されます。
この技術は以下に詳細に記述されています。
ファイルシステム内の検索を回避するため、この2つのうちマニフェスト検索の方がより効率的です。これは翻訳ファイルや、他のローカライズされたリソースの実際のロケーションに対してより柔軟性を持たせることができます。その短所は明示的にリソース エントリをマニフェストに追加する必要があるという点です。
ファイル検索システムは、次のような構造を持つファイル パスを使用します。
resource-directory/locale-directory/translation-file
アプリケーション内の各パッケージでは、リソース ディレクトリと翻訳ファイルを指定します。ロケール ディレクトリの名前は、アプレットが使うロケールの
rfc1766 で定義されている言語タグになります。ファイル検索は、存在するロケール ディレクトリ名で最も明確に指定されたものを使用します。
例えばアプレットが米国英語を使う場合、言語タグは en-US で、翻訳システムは次の場所 :
resource-directory/en-US/translation-file
で翻訳ファイルを探すか (このロケール ディレクトリが存在する場合)、または
resource-directory/en/translation-file
で (
en-US は存在しないが
en が存在する場合) 探します。英語の翻訳ファイルが存在しない場合、RTE は
default という名前のディレクトリがあるかどうか調べます。これが存在しない場合、アプリケーションは
TranslationDictionary を作成せず、
lmessage などのローカライゼーション式は元の翻訳されていないテキストを返します。
具体的な例として、次のパッケージ宣言と、
{package DOC.CHECKBUTTONS,
resource-directory = "resources",
translations-file = "messages.xml"
}
ロケール "ja" を使用するアプレットによって、resources/ja/messages.xml に翻訳ファイルが指定されることになります。
次の図は、ロケール名の指定とその結果の翻訳ファイルのパスの関係を示しています。
この図では、米国および他の全地域の英語、全地域のフランス語とドイツ語の翻訳ファイルを表しています。ロケール en-CA (カナダ圏英語) を指定したアプレットは resources\en\messages.xml を使用し、ロケール fr-CA (カナダ圏フランス語) を指定したアプレットは resources\fr\messages.xml を使用します。
翻訳ファイル指定すべてを applet 宣言に含めることもできます。
{applet
locale = "ja",
resource-directory = "resources",
translations-file = "messages.xml"
}
翻訳ファイルをアプリケーション ファイルとともにディプロイする必要があります。IDEドキュメンテーションのプロジェクトのディプロイメントを参照してください。
翻訳ファイルは XML ファイルで、元のテキスト、テキスト検索キー、コメント、および翻訳を区切るために XML タグを使用しています。翻訳ファイル内の各テキスト要素は <string></string> タグで表され、タグの内部にはそのテキストの情報が次の形式で含まれています。
<string>
<key></key>
<original></original>
<comment></comment>
<translation></translation>
</string>
メッセージ書き出しスクリプトは、ローカライゼーション式ごとに <string></string> 要素と、その中に <key></key>、<original></original>、<comment></comment> 要素を生成します。ソースのローカライゼーション式に含まれていない要素はすべて省略されます。
{lmessage "Submit"}
{lmessage key = "submit alternate", comment = "Use 'click here' instead.", "Submit"}
これらに対して、スケルトンの翻訳ファイルでは次のように項目が生成されます。
<translation-dictionary version="1">
<string>
<original>Submit</original>
</string>
<string>
<key>submit alternate</key>
<original>Submit</original>
<comment>Use 'click here' instead.</comment>
</string>
</translation-dictionary>
翻訳者は、<translation></translation> 要素に元のテキストの翻訳を含めて追加します。
Curl ソース コードのローカライゼーション式で異なるキーを明示的に指定しない限り、翻訳内容の検索には元のテキストがキーとして使われる点に注意してください。Curl ソース ファイルで元のテキストを変更した場合は、翻訳ファイルで該当するテキストにも変更を反映させる必要があります。
テキスト出力に引数を含める必要がある場合、
lformat または
lmessage 式を使います。
lformat は
format のバリアントで、フォーマット文字列で
localize を呼び出します。
lformat を使用する場合、
format で説明されているように残余引数にインデックスを使用します。たとえば文字列引数の場合、最初の引数のフォーマット識別子を
%1!s!、2 番目を
%2!s! のように指定します。この理由は、言語によって単語、句、データ値を異なる順序で表す必要性に対応するためです。
lmessage は lformat 呼び出しに展開され、Curl 式を lformat の文字列引数とフォーマット文字列の %s フォーマット識別子に置き換えます。生成される %s フォーマット識別子は残余引数インデックスを使用しています。次のコードは、
{lmessage
This uses lmessage. We're going to include some data values
here. This is int-min: {value int-min}, and this is int-max:
{value int-max}.
}
スケルトンの翻訳ファイルで次のように項目を生成します。
<string>
<original>
This uses lmessage. We're going to include some
data values here. This is int-min: %1!s!,
and this is int-max: %2!s!.
</original>
</string>
次のコードは、
{lformat
"formatting int-min %1!d!, formatting int-max %2!d!, and a number
%3!.2f!, and another %4!.2f!", int-min, int-max, 22/7, 45/9
}
スケルトンの翻訳ファイルで次のように項目を生成します。
<string>
<original>
formatting int-min %1!d!, formatting int-max %2!d!,
and a number %3!.2f!, and another %4!.2f!
</original>
</string>
特別な状況では、アプレット マシンの作業ロケールを明示的に指定しなければならない場合があります。指定がなければホスト ロケールが直接使われます。
アプリケーションによっては、アプレットを実行するマシンのホスト ロケールと異なる作業ロケールを設定する必要が生じます。例えば、大都市の美術館の来館者が道順やその他の情報を取得するために使うシステムを想定してみましょう。このシステムを実行するマシンは、ある特定の国の美術館に設置され、そのホスト ロケールはその国に対応する値に設定されています。システムを利用する来館者は、それぞれの国の言語でボタンやメッセージが表示されることを望みます。このようなアプリケーションで、ユーザーによる優先ロケールの選択を可能にすることができます。
アプレットが特定ロケールを必要とすることが明らかな場合は、
applet 宣言に
locale パラメータを追加して作業ロケールを指定します。
アプリケーション全体にはホスト ロケールと異なる作業ロケールが設定されている状態で、ホスト ロケールを使いたい場合があります。例えば前のセクションにある美術館アプリケーションの場合、地元の館員が読み取らなければならないエラー メッセージは、来館者が選択する言語ではなく、ローカルの言語で表示する必要があります。
Copyright © 1998-2019 SCSK Corporation.
All rights reserved.
Curl, the Curl logo, Surge, and the Surge logo are trademarks of SCSK Corporation.
that are registered in the United States. Surge
Lab, the Surge Lab logo, and the Surge Lab Visual Layout Editor (VLE)
logo are trademarks of SCSK Corporation.