2021年11月2日火曜日

Oracle APEX 21.2新機能(9) - 対応言語の追加

Oracle APEX 21.2より、アプリケーション実行時のメッセージの翻訳言語が追加されました。それまでの10から21の言語が追加され、31となっています。

翻訳を含む言語の一覧は以下になります。太字となっている言語は開発環境および管理画面が翻訳されている言語になります。それ以外が今回翻訳が追加された言語です。主にアプリケーションに含まれるコンポーネントの文字列が翻訳されています。

  1. English - 英語 - en
  2. Español - スペイン語 - es
  3. suomi - フィンランド語 - fi
  4. Français - フランス語 - fr
  5. Français (Canada) - フランス語(カナダ) - fr-ca
  6. עברית - ヘブライ語 - he
  7. Hrvatski - クロアチア語 - hr
  8. magyar - ハンガリー語 - hu
  9. Italiano - イタリア語 - it
  10. 日本語 - 日本語 - ja
  11. 한국어 - 韓国語 - ko
  12. Nederlands - オランダ後 - nl
  13. Norsk - ノルウェー語 - no
  14. polski - ポーランド語 - po
  15. Português (Portugal) - ポルトガル語 - pt
  16. Português (Brasil) - ポルトガル語(ブラジル) - pt-br
  17. Română - ルーマニア語 - ro
  18. Русский - ロシア語 - ru
  19. Slovenčina - スロバキア語 - sk
  20. Slovenščina - スロベニア語 - sl
  21. српски - セルビア語 - sr
  22. Svenska - スウェーデン語 - sv
  23. ไทย - タイ語 - th
  24. Türkçe - トルコ語 - tr
  25. 中文(简体)- 簡体中国語 - zh-cn
  26. 中文 (繁體) - 繁体中国語 - zh-tw
  27. العربية - アラビア語 - ar
  28. čeština - チェコ語 - cs
  29. Dansk - デンマーク語 - da
  30. Deutsch - ドイツ語 - de
  31. Ελληνικά - ギリシャ語 - el
翻訳を確認するためのアプリケーションを作成してみました。


System Messagesのリージョンに置換文字&APP_TEXT$DELETE_MSG.を出力しています。それ以外に対話モード・レポート対話グリッドのリージョンを作成しています。最上部に言語を選択する選択リストがあります。

日本語を表示している画面です。サンプル・データセットに含まれる表EMPの内容をレポートに表示しています。表EMPの内容はアプリケーションの翻訳対象ではないため、保存されているデータがそのまま表示されます。今回はデータセット作成時に日本語(Japanese)を選択しているので、データは日本語になっています。


言語に英語を選択すると以下の画面になります。置換文字&APP_TEXT$DELETE_MSG.および対話モード・レポートと対話グリッドのアクション・メニューが翻訳されていることが確認できます。


タイ語を選択してみます。タイ語では置換文字&APP_TEXT$DELETE_MSG.が翻訳されていません。対話モード・レポートおよび対話グリッドのアクション・メニューは翻訳されています。


今回の翻訳対象はアプリケーション実行時のメッセージなので、システムが提供しているメッセージは翻訳されているべきです。追加された21の言語全て置換文字&APP_TEXT$DELETE_MSG.は英語になっていました。

共有コンポーネントテキスト・メッセージとして翻訳メッセージを登録することが、ワークアラウンドになります。


名前DELETE_MSGとして、言語th(タイ語)のテキストを作成します。テキスト・メッセージの作成をクリックするとダイアログが表示されます。


フォームの表示は以下になります。すでにメッセージ・テキストは登録済であるため、これは変更画面です。


このようにしてテキスト・メッセージが登録されていると、未翻訳の文字列を翻訳することができます。


日本でタイ語やその他のロシア語、スロベニア語、アラビア語、ヘブライ語といった言語の翻訳ニーズがどれほどあるかは分かりませんが、製品としてリリースされる際には対応されていることを期待しています。

アプリケーションに少々コードを追加し、ヘブライ語とアラビア語を選択したときにRTL(Right To Left - 右横書き)となるようにしてみました。

アラビア語を選択した結果が以下になります。


ページ・プロパティのJavaScriptのページ・ロード時に実行に以下のコードを記述しています。CSSクラスのu-RTLはOracle APEXのユニバーサル・テーマで定義されています。
const rtl = ["he","ar"];
if (rtl.includes($v("P1_LANG"))) {
    if ( ! $('html').hasClass('u-RTL') ) {
        sessionStorage.setItem('dir', 'rtl');
        $('html').addClass('u-RTL').attr('dir', 'rtl');
    }
} else {
    if ( $('html').hasClass('u-RTL') ) {
        sessionStorage.removeItem('dir');
        $('html').removeClass('u-RTL').attr('dir', 'ltr');
    }
}

置換文字列&APP_TEXT$DELETE_MSG.について、マニュアルの記載によると「オプションの$Langパラメータは特定の翻訳にアクセスするために使用でき」と説明されていますが、以下のどれを指定しても、そのときのセッション言語での文字列に置き換えられました。(つまり&APP_TEXT$DELETE_MSG.と同じ文字列になる)

&APP_TEXT$DELETE_MSG.
&APP_TEXT$DELETE_MSG$JA.
&APP_TEXT$DELETE_MSG$EN.
&APP_TEXT$DELETE_MSG$FR.

セッション言語以外の文字列に置き換える用途は、ほとんど無いと思います。それでもマニュアルに記載のある動作と異なるのは気になります。

アプリケーションのプライマリ言語として設定できる言語の種類は、31よりはるかに多いです。製品として翻訳が提供されていない言語については、今まで通りアプリケーション開発者が翻訳を準備する必要があります。そのような場合には、有志によるAPEXの翻訳が提供されているTranslate APEXなどが参考になります。


少し横道にそれた気もしますが、以上でOracle APEX 21.2で追加された翻訳についての紹介は終了です。

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

追記

Oracle APEXの配布メディアに含まれているbuilder以下に、今回追加された言語の翻訳が含まれています。ただし、追加された言語の翻訳は実行環境のみなので、足りない翻訳もあります。例えば本記事で扱ったDELETE_MSGは含まれていませんでした。

[oracle@localhost builder]$ ls

ar  de  f4000.sql  f4155.sql  f4411.sql  f4550.sql  f4700.sql  f4900.sql  fr-ca  hu  ko  pl     ro  sl       sv  zh-cn

cs  el  f4020.sql  f4300.sql  f4470.sql  f4600.sql  f4750.sql  fi         he     it  nl  pt     ru  sr       th  zh-tw

da  es  f4050.sql  f4350.sql  f4500.sql  f4650.sql  f4850.sql  fr         hr     ja  no  pt-br  sk  sr-latn  tr

[oracle@localhost builder]$ 


インストールはload_trans.sqlが導入される以前の方法、つまり言語毎のディレクトリへ移動し、load_言語.sqlを実行します。タイ語(th)を例にとると以下の作業になります。

[oracle@localhost builder]$ export NLS_LANG=American_America.AL32UTF8

[oracle@localhost builder]$ cd th

[oracle@localhost th]$ ls

afiedt.buf  f4470_th.sql  load_th.sql  unload_th.sql

[oracle@localhost th]$ sqlplus sys/oracle@localhost/xepdb1 as sysdba


SQL*Plus: Release 21.0.0.0.0 - Production on Mon Nov 22 22:32:19 2021

Version 21.3.0.0.0


Copyright (c) 1982, 2021, Oracle.  All rights reserved.



Connected to:

Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

Version 21.3.0.0.0


SQL> alter session set current_schema = apex_210200;


Session altered.


SQL> @load_th

. ORACLE

.

. Application Express Runtime Messages Installation.

....................................................


PL/SQL procedure successfully completed.


--application/set_environment

APPLICATION 4493 - Oracle APEX Runtime Messages

--application/delete_application

--application/create_application

--application/plugin_settings

--application/shared_components/navigation/navigation_bar

--application/shared_components/logic/application_settings

--application/shared_components/navigation/tabs/standard

--application/shared_components/navigation/tabs/parent

--application/pages/page_groups


[中略]


--application/shared_components/security/authentications/no_auth

--application/user_interfaces

--application/user_interfaces/combined_files

--application/pages/page_00001

--application/end_environment

...done

Adjust instance settings


PL/SQL procedure successfully completed.


SQL> exit

Disconnected from Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production

Version 21.3.0.0.0

[oracle@localhost th]$