2024年9月12日木曜日

Oracle APEXがサポートしているランタイム・メッセージの翻訳を確認する

Oracle APEX 24.1ではウクライナ語とベトナム語が、ランタイム・メッセージの翻訳に追加されました。今までサポートしていた言語と合わせると34言語の翻訳を提供しています。

提供されているランタイム・メッセージの翻訳は以下です。


Oracle APEXの管理ツールやアプリケーション・ビルダーは、10言語(ドイツ語、英語、スペイン語、フランス語、イタリア語、ポルトガル語(ブラジル)簡体中国語、繁体中国語、日本語、韓国語)に翻訳されています。

ランタイム・メッセージというのは主にOracle APEXの組み込みコンポーネントが扱うメッセージになります。具体的には対話モード・レポートや対話グリッドです。

サポートされている34言語はどのような言語なのか、自動的に切り替えるアプリケーションを作成してみました。

以下のように動作します。ボタンStart LoopをクリックするとIntervalで指定した秒ごとにランタイム・メッセージの言語を切り替えていきます。

開発ツールも翻訳されている言語では、Welcomeの表示がそれぞれの言語に翻訳されます。また、アラビア語とヘブライ語については、表示をRTL(Right-to-Left)に切り替えています。


このAPEXアプリケーションのエクスポートを以下に置きました。
https://github.com/ujnak/apexapps/blob/master/exports/oracle-apex-support-languages.zip

対話モード・レポートのソースとして、サンプル・データセットEMP/DEPTに含まれる表EMPが必要です。

作り方はあまり参考にならないアプリケーションですが、いくつかの実装のポイントを紹介します。すべての機能をホーム・ページに実装しています。


ボタンSTART_LOOPを押すとJavaScriptのファンクションstartLoop()を呼び出します。STOP_LOOPではstopLoop()を呼び出します。翻訳を選択するページ・アイテムP1_LANGは値が変更されると、動的アクションでページの送信を実行します。

ページ・アイテムP1_LANGは以前の値を保存させるため、セッション・ステートストレージセッションごと(永続)にします。

ページ・アイテムP1_LANGが変更され、ページの送信が実行されたときに呼び出されるプロセスでは、以下のコードが実行されます。
begin
    apex_util.set_preference(
        p_preference => 'FSP_LANGUAGE_PREFERENCE'
        ,p_value => :P1_LANG
    );
    /*
     * autoChangeでの呼び出しであれば、P1_AUTO_ENABLEDをYとする。
     * 手動切り替えのときはP1_AUTO_SUBMITは空になるため、自動切り替えは
     * 継続しない。
     */
    if :P1_AUTO_SUBMIT = 'Y' then
        :P1_AUTO_ENABLED := 'Y';
    else
        :P1_AUTO_ENABLED := '';
    end if;
end;
プリファレンスFSP_LANGUAGE_PREFERENCEに言語コードを設定することにより、ランタイム・メッセージの翻訳を切り替えています。


アプリケーション定義グローバリゼーションアプリケーション言語の導出元として、アプリケーション・プリファレンス(FSP_LANGUAGE_PREFERENCEを使用)を選択しています。


ページ・プロパティJavaScriptファンクションおよびグローバル変数の宣言に、以下を記述しています。


ページ・ロー時に実行に以下を記述しています。自動的に発生したページ・ロードのときは、自動ロードを継続します。
/*
 * 言語の自動切り替えが有効であれば、startLoopを呼び出す。
 */
if ( apex.item("P1_AUTO_ENABLED").getValue() === "Y" ) {
    startLoop();
}
else
{
    document.getElementById("START_LOOP").disabled = false;
    document.getElementById("STOP_LOOP").disabled  = true;    
}

ページ・ロード時に言語がarまたはhe(つまりアラビア語またはヘブライ語)のときは、動的アクションでRight-to-Leftに変更しています。

document.documentElement.setAttribute('dir', 'rtl');


開発言語のリージョンに表示している「ようこそ」の翻訳文は、以下のコードを記述した動的コンテンツとして実装しています。
declare
    l_message clob;
begin
    l_message := apex_lang.message('INSTALLER.WELCOME');
    return l_message;
end;

Oracle APEXの製品としてはメッセージ・キーINSTALLER.WELCOMEで取得できるメッセージの言語は10言語ですが、以下のようにAPEX_LANG.CREATE_MESSAGEを呼び出すか、または共有コンポーネントテキスト・メッセージから、それぞれの言語のメッセージを追加することで、標準では翻訳文が提供されていない言語にも対応できます。


今回の記事は以上になります。

Oracle APEXのアプリケーション作成の参考になれば幸いです。