翻訳作業に使用するページを完成させます。
APEXコレクション名の設定
翻訳元と翻訳済みの文字列は、APEXコレクションに保存した上で対話グリッドから操作します。APEXコレクション名をSQLやPL/SQLに直書きすることを避けるため、置換文字列を設定します。
アプリケーション定義を開き、置換文字列G_TRANSLATE_COLLECTIONに対して、置換値としてTRANSLATEを設定します。
変更の適用をクリックします。
翻訳に使用するAPEXコレクションの名前はTRANSLATEになります。
ページ・アイテムとボタンの配置
ページ・デザイナでページ番号3のページTranslateを開きます。
このページで行う4つの作業を実行するボタンを作成します。ボタン名はそれぞれLOAD_FROM_SOURCE、STORE_AS_RESULT、LOAD_FROM_RESULT、BATCH_TRANSLATEとします。ラベルはボタン名から生成されたものを使用します。
作成したボタンを横一列に並べるため、LOAD_FROM_SOURCEを除くボタンのレイアウトの新規行の開始はOFFにします。
ページ・アイテムの識別の名前をP3_ID、タイプとして選択リストを選びます。ラベルはXLIFF Nameとします。アプリケーションとしては列IDの値が保存されていれば十分ですが、ユーザーには分かりやすくIDに代えて列Nameの値を表示します。
LOVのタイプはSQL問合せ、SQL問合せとして以下を記述します。追加値の表示、NULL値の表示は共にOFFです。
select name, id from cwr_xliff_files where id = :P3_ID
ユーザーが設定する値ではないため、読取り専用のタイプとして常時を指定します。
XLIFFの属性であるsource_langとtarget_langを画面に表示するために使用する、ページ・アイテムを作成します。
source_langを表示するページ・アイテムは識別の名前はP3_SOURCE_LANGとします。タイプとして表示のみを選択します。ラベルはSource Langとします。
設定のページの送信時に送信はOFFにし、ページ・アイテムP3_IDの右隣に配置されるよう、レイアウトの新規行の開始はOFFにします。
target_langを表示するページ・アイテムP3_TARGET_LANGも同様に作成します。ラベルはTarget Langです。
以上でボタンとページ・アイテムの配置は完了です。
対話グリッドの調整
対話グリッドで実施できる作業を、翻訳結果となる文字列の更新に限定します。
対話グリッドTranslateを選択し右ペインで属性を開きます。
編集の実行可能な操作から行の追加と行の削除のチェックを外します。また、ツールバーのコントロールにある保存ボタンのチェックを外します。
対話グリッドの列セレクタ(APEX$ROW_SELECTOR)と行アクション(APEX$ROW_ACTION)は不要なので、構成のビルド・オプションでCommented Out(コメント・アウト)します。
APEXコレクションを一意に指定する列はSEQ_IDです。列SEQ_IDを選択し、ソースの主キーをONにします。
列IDを更新することはないため、識別のタイプは表示のみとし、ソースの問合せのみをONにします。
翻訳元となる文字列を保持する列SOURCE_TEXTも更新することはないため、タイプを表示のみに変更し、ソースの問合せのみをONにします。
以上で対話グリッドの調整は完了です。
対話モード・レポートからリンク
アップロードしたXLIFFファイルの一覧から翻訳作業のページを開くために、リンクを作成します。
ページ番号1のXLIFF Filesのページを開き、対話モード・レポートの列Nameを選択します。
識別のタイプをリンクに変更し、リンクの属性を更新します。
ターゲットのタイプとしてこのアプリケーションのページを選択し、ページに3(ページTranslate)を指定します。
アイテムの設定として名前にP3_ID、値に#ID#を指定することで、選択したID値をページ・アイテムP3_IDに渡します。
以上でOKをクリックします。
プロセスの作成
対話グリッドに更新した翻訳済み文字列がAPEXコレクションに保存されるように、作成済みのプロセスTranslate - Save Interactive Grid Dataを更新します。
ページ・デザイナにてページ番号3のページTranslateを開きます。
左ペインでプロセス・ビューを表示し、プロセスTranslate - Save Interactive Grid Dataを選択します。
設定のターゲット・タイプをPL/SQL Codeに変更し、挿入/更新/削除するPL/SQLコードとして以下を記述します。この対話グリッドで許可されている操作は更新のみなので、更新に対応する処理のみ記述します。
失われた更新の防止はOFF、行のロックはNoにします。APEXコレクションとして保持されているデータはAPEXセッションにアクセスが限定されているため、これらの保護は必要ありません。
サーバー側の条件としてボタン押下時にSTORE_AS_RESULTを指定します。
作成済みの4つのボタンの処理を行うプロセスを、それぞれ作成します。
最初にボタンが行う処理を記述したパッケージCWR_UTILを作成します。パッケージCWR_UTILのコードは以下になります。ボタン名がクリックされたときに、同名のプロシージャが呼び出されるようにします。
パッケージの作成には、SQLワークショップのSQLスクリプトなどを使用できます。Autonomous Databaseであれば、この記事による実行も可能です。
プロセスを作成し、識別の名前をLoad From Sourceとします。タイプとしてAPIの呼出しを選択します。
設定のパッケージとしてCWR_UTILを選択し、プロシージャまたはファンクションとしてLOAD_FROM_SOURCEを選択します。サーバー側の条件のボタン押下時にLOAD_FROM_SOURCEを選択し、このボタンが押された時に実行されるようにします。
パラメータのp_id、p_source_lang、p_target_langには、(p_またはP3_を除いた名前が一致するため)デフォルトでページ・アイテムP3_ID、P3_SOURCE_LANG、P3_TARGET_LANGが設定されます。
パラメータp_collection_nameのタイプはAPIデフォルトになっているので(APIのデフォルトはTRANSLATEになっているため、実際はこのままでも動作します)、値のタイプをアイテムに変更し、アイテムとして置換文字列として設定されているG_TRANSLATE_COLLECTIONを指定します。
同様の手順でプロセスStore As Resultを作成します。パラメータのp_collection_nameも同じくアイテムとしてG_TRANSLATE_COLLECTIONを指定します。
プロセスStore As ResultはプロセスTranslate - Save Interactive Grid Dataより下に配置します。表CWR_XLIFF_FILESの列XLIFF_RESULTに翻訳済みのデータを保存する前に、対話グリッドの更新データがAPEXコレクションに保存されている必要があります。
プロセスLoad From Resultも同様に作成します。
最後にプロセスBatch Translateを作成します。
以上でプロセスの作成は完了です。
翻訳テスト
一括翻訳をテストするために以下のINSERT文を実行し、表CWR_MESSAGESにデータを用意します。
SQLワークショップのSQLスクリプトなどを使用して実行します。
実行が正常に完了していると、Messagesのページより挿入された翻訳を確認することができます。
以上でテストの準備ができました。
最初の記事に添付されているworld-diner.xlfををダウンロードし、XLIFF Filesの画面でアップロードします。
ボタンLoad From Sourceをクリックして、表CWR_XLIFF_FILESの列XLIFF_SOURCEとして保存されているXLIFFファイルの内容をAPEXコレクションにロードします。
列Target Textをひとつひとつ手入力で更新することもでできますが、ここではボタンBatch Translateをクリックして、表CWR_MESSAGESの内容を使って一括翻訳します。
翻訳結果がAPEXコレクションに反映されます。ボタンStore As Resultをクリックし、表CWR_XLIFF_FILESの列XLIFF_RESULTにXLIFFファイルとして保存します。
XLIFF Filesの画面に戻るとXLIFF Resultとして、ファイルのダウンロードができるようになっています。これをクリックして翻訳済みのXLIFFファイルをダウンロードして内容を確認します。
ダウンロードされたファイルの名前はworld-diner_ja_en.xlfになります。ファイルを開いて内容が翻訳されていることを確認します。
以上で翻訳作業を行うページは完成です。
次の記事で、DeepLを使った翻訳を追加します。
続く