Oracle APEXによるアプリケーション作成の利点として、多言語への対応が容易であることが挙げられます。以前にOracle APEXのアプリケーションの翻訳手順を紹介しているのですが、その記事を更新するにあたって、APEXが生成するXLIFFファイルの翻訳を支援するアプリケーションを作成してみました。
作成するアプリケーションは以下のように動作します。それぞれの文字列を翻訳するにあたって、DeepLによる翻訳APIを呼び出しています。また、あらかじめデータベースに翻訳結果が用意されていれば、一括で翻訳することも可能です。
テストのために作成したXLIFFファイルは以下になります。このファイルをアプリケーションにアップロードしています。<?xml version="1.0" encoding="UTF-8"?> | |
<xliff version="1.0"> | |
<file original="world-diner.xlf" source-language="ja" target-language="en" datatype="html"> | |
<header/> | |
<body> | |
<trans-unit id="WR_TITLE"> | |
<source>世界食堂</source> | |
<target>世界食堂</target> | |
</trans-unit> | |
<trans-unit id="1"> | |
<source>牛丼</source> | |
<target>牛丼</target> | |
</trans-unit> | |
<trans-unit id="2"> | |
<source>炸醤麺</source> | |
<target>炸醤麺</target> | |
</trans-unit> | |
<trans-unit id="3"> | |
<source>参鶏湯</source> | |
<target>参鶏湯</target> | |
</trans-unit> | |
<trans-unit id="4"> | |
<source>ハンバーガー</source> | |
<target>ハンバーガー</target> | |
</trans-unit> | |
</body> | |
</file> | |
</xliff> |
翻訳されたXLIFFファイルは以下になります。
<?xml version="1.0" encoding="UTF-8"?> | |
<xliff version="1.0"> | |
<file original="world-diner.xlf" source-language="ja" target-language="en" datatype="html"> | |
<header/> | |
<body> | |
<trans-unit id="WR_TITLE"> | |
<source>世界食堂</source> | |
<target>World Diner</target> | |
</trans-unit> | |
<trans-unit id="1"> | |
<source>牛丼</source> | |
<target>Beef Bowl</target> | |
</trans-unit> | |
<trans-unit id="2"> | |
<source>炸醤麺</source> | |
<target>Fried Source Noodles</target> | |
</trans-unit> | |
<trans-unit id="3"> | |
<source>参鶏湯</source> | |
<target>Ginseng Chicken Soup</target> | |
</trans-unit> | |
<trans-unit id="4"> | |
<source>ハンバーガー</source> | |
<target>Hamburger</target> | |
</trans-unit> | |
</body> | |
</file> | |
</xliff> |
最初に雛形となるAPEXアプリケーションの作成から始めます。
表の作成
クイックSQLの以下のモデルより、翻訳前と翻訳後のXLIFFファイルを保存する表CWR_XLIFF_FILESおよび、翻訳に使用する文字列を保存する表CWR_MESSAGESを作成します。
# prefix: cwr
xliff_files
name vc255 /nn
source_lang vc50
target_lang vc50
xliff_result file
xliff_source file
messages
name vc255
message_language vc50
message_text vc4000
SQLワークショップのユーティリティよりクイックSQLを実行します。左ペインに上記のモデルを記述し、SQLの生成、SQLスクリプトの保存、レビューおよび実行を順次実行します。
いくつか確認の画面が開くので、それぞれ実行、即時実行を実施します。アプリケーションの作成は行いません。
表CWR_XLIFF_FILESおよびCWR_MESSAGESが作成されます。
初期アプリケーションの作成
APEXアプリケーションを作成します。
今回作成するアプリケーションのボタンなどのラベルは、英語で記述することにします。アプリケーション作成ウィザードによって設定されるラベルは、アプリケーション・ビルダーの言語で生成されます。そのため、アプリケーション作成ウィザードを実行する間だけ、環境を英語に切り替えます。
アプリケーション・ビルダーの先頭ページを開き、言語をEnglishに切り替えます。
App BuilderのCreateからNew Applicationを実行し、アプリケーション作成ウィザードを起動します。
アプリケーションのName(名前)はXLIFF Translateとします。デフォルトで作成されているページHomeは削除し、対話モード・レポートのページXLIFF Files、対話グリッドのページTranslate、同じく対話グリッドのページMessagesを追加します。
アプリケーション自体は日本語で動作させるため、SettingsのLanguageとしてJapanese(ja)を選択します。
ページXLIFF Filesを追加するために、Add Page(ページの追加)をクリックしInteractive Report(対話モード・レポート)を選択します。レポートとフォームで構成される一般的な表の操作画面を、表CWR_XLIFF_FILESに対して作成します。
Page Name(ページ名)はXLIFF Filesとします。Table or View(表またはビュー)、Interactive Report(対話モード・レポート)を選択し、Table or View(表またはビュー)としてCWR_XLIFF_FILESを選択します。Include Form(フォームを含める)にチェックを入れます。
Advanced(詳細)を開き、Set as Home Page(ホームページとして設定)にチェックが入っていることを確認します。
Add Page(ページの追加)をクリックします。
select | |
seq_id | |
, c001 as "ID" | |
, c002 as "SOURCE_TEXT" | |
, c003 as "TARGET_TEXT" | |
from apex_collections | |
where collection_name = :G_TRANSLATE_COLLECTION |
アプリケーションが作成された後は、開発環境を日本語に切り替えます。
BLOB列の調整
表CWR_XLIFF_FILESに含まれるBLOB列、XLIFF_SOURCEとXLIFF_RESULTが適切に扱われるように属性を調整します。
ページ番号1のXLIFF Filesの対話モード・レポートの列XLIFF_RESULTのBLOB属性として以下を設定します。
MIMEタイプ列 - XLIFF_RESULT_MIMETYPE