2023年1月12日木曜日

XLIFFファイル翻訳支援アプリの作成(2) - 翻訳ページの作成

 翻訳作業に使用するページを完成させます。


APEXコレクション名の設定


翻訳元と翻訳済みの文字列は、APEXコレクションに保存した上で対話グリッドから操作します。APEXコレクション名をSQLやPL/SQLに直書きすることを避けるため、置換文字列を設定します。

アプリケーション定義を開き、置換文字列G_TRANSLATE_COLLECTIONに対して、置換値としてTRANSLATEを設定します。

変更の適用をクリックします。

翻訳に使用するAPEXコレクションの名前はTRANSLATEになります。


ページ・アイテムとボタンの配置


ページ・デザイナでページ番号のページTranslateを開きます。

このページで行う4つの作業を実行するボタンを作成します。ボタン名はそれぞれLOAD_FROM_SOURCESTORE_AS_RESULTLOAD_FROM_RESULTBATCH_TRANSLATEとします。ラベルボタン名から生成されたものを使用します。

作成したボタンを横一列に並べるため、LOAD_FROM_SOURCEを除くボタンのレイアウト新規行の開始OFFにします。


翻訳対象となっている表CWR_XLIFF_FILESの列のIDの値を保持するページ・アイテムを作成します。

ページ・アイテムの識別名前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ファイルの一覧から翻訳作業のページを開くために、リンクを作成します。

ページ番号XLIFF Filesのページを開き、対話モード・レポートの列Nameを選択します。

識別タイプリンクに変更し、リンクの属性を更新します。


ターゲットをクリックし、リンク・ビルダー・ターゲットの画面を開きます。

ターゲットタイプとしてこのアプリケーションのページを選択し、ページ(ページTranslate)を指定します。

アイテムの設定として名前P3_ID#ID#を指定することで、選択したID値をページ・アイテムP3_IDに渡します。

以上でOKをクリックします。




プロセスの作成



対話グリッドに更新した翻訳済み文字列がAPEXコレクションに保存されるように、作成済みのプロセスTranslate - Save Interactive Grid Dataを更新します。

ページ・デザイナにてページ番号のページ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_idp_source_langp_target_langには、(p_またはP3_を除いた名前が一致するため)デフォルトでページ・アイテムP3_IDP3_SOURCE_LANGP3_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の画面でアップロードします。


XLIFFファイルをアップロードしたら、Nameをクリックして翻訳ページ(Translate)を開きます。


ボタン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を使った翻訳を追加します。

続く