提供されているランタイム・メッセージの翻訳は以下です。
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に言語コードを設定することにより、ランタイム・メッセージの翻訳を切り替えています。
ページ・プロパティのJavaScriptのファンクションおよびグローバル変数の宣言に、以下を記述しています。
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* Oracle APEX 24.1 でサポートされているランタイム言語 */ | |
const SUPPORTED_LANGUAGES = "ar,pt-br,hr,cs,da,nl,fi,fr,fr-ca,de,el,he,hu,is,it,ja,ko,no,pl,pt,ro,ru,sr-cyrl,sr-latn,zh-cn,sk,sl,es,sv,th,zh-tw,tr,uk,vi".split(','); | |
var taskId; | |
/* | |
* ページ・アイテムP1_LANGに切り替える言語を設定する。P1_LANGには、値の変更でページを送信する | |
* 動的アクションが設定されている。結果として切り替えた言語でAPEX_UTIL.SET_PREFENCEが呼び出され、 | |
* FSP_LANGUAGE_PREFERENCEが変更される。 | |
* | |
* P1_AUTO_SUBMITにYが設定されていると、言語の自動切り替えを継続する。 | |
*/ | |
function autoChange() { | |
let currentIndex = SUPPORTED_LANGUAGES.findIndex(lang => lang === apex.item("P1_LANG").getValue()); | |
let nextIndex = currentIndex === (SUPPORTED_LANGUAGES.length - 1) ? 0 : currentIndex + 1; | |
apex.item("P1_LANG").setValue(SUPPORTED_LANGUAGES[nextIndex]); | |
apex.item("P1_AUTO_SUBMIT").setValue("Y"); | |
} | |
/* | |
* 言語の自動切り替えを開始する。 | |
* ボタンSTART_LOOPのクリック時に呼び出される。 | |
*/ | |
function startLoop() { | |
if ( !taskId ) { | |
let interval = apex.item("P1_INTERVAL").getValue() * 1000; | |
taskId = setInterval(autoChange, interval); | |
document.getElementById("START_LOOP").disabled = true; | |
document.getElementById("STOP_LOOP").disabled = false; | |
console.log('Start Language selection changed task ', taskId); | |
} | |
} | |
/* | |
* 言語の自動切り替えを停止する。 | |
* ボタンSTOP_LOOPのクリック時に呼び出される。 | |
*/ | |
function stopLoop() { | |
if (taskId) { | |
clearInterval(taskId); | |
document.getElementById("START_LOOP").disabled = false; | |
document.getElementById("STOP_LOOP").disabled = true; | |
console.log('Stop Language selection changed task ', taskId); | |
taskId = null; | |
} | |
} |
ページ・ロー時に実行に以下を記述しています。自動的に発生したページ・ロードのときは、自動ロードを継続します。
/*
* 言語の自動切り替えが有効であれば、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;
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
declare | |
l_app_id number := :APP_ID; | |
l_name varchar2(80) := 'INSTALLER.WELCOME'; | |
begin | |
apex_lang.create_message(l_app_id, l_name, 'ar', 'أهلا وسهلا'); | |
apex_lang.create_message(l_app_id, l_name, 'hr', 'Dobrodošli'); | |
apex_lang.create_message(l_app_id, l_name, 'cs', 'Vítejte'); | |
apex_lang.create_message(l_app_id, l_name, 'da', 'Velkommen'); | |
apex_lang.create_message(l_app_id, l_name, 'nl', 'Welkom'); | |
apex_lang.create_message(l_app_id, l_name, 'fi', 'Tervetuloa'); | |
apex_lang.create_message(l_app_id, l_name, 'el', 'Καλώς ήρθατε'); | |
apex_lang.create_message(l_app_id, l_name, 'he', 'ברוך הבא'); | |
apex_lang.create_message(l_app_id, l_name, 'hu', 'Üdvözöljük'); | |
apex_lang.create_message(l_app_id, l_name, 'is', 'Velkomin'); | |
apex_lang.create_message(l_app_id, l_name, 'no', 'Velkommen'); | |
apex_lang.create_message(l_app_id, l_name, 'pl', 'Witamy'); | |
apex_lang.create_message(l_app_id, l_name, 'pt', 'Bem-vinda'); | |
apex_lang.create_message(l_app_id, l_name, 'ro', 'Bine ați venit'); | |
apex_lang.create_message(l_app_id, l_name, 'ru', 'Добро пожаловать'); | |
apex_lang.create_message(l_app_id, l_name, 'sr-cyrl', 'Добродошли'); | |
apex_lang.create_message(l_app_id, l_name, 'sr-latn', 'Dobrodošli'); | |
apex_lang.create_message(l_app_id, l_name, 'sk', 'Vitajte'); | |
apex_lang.create_message(l_app_id, l_name, 'sl', 'Dobrodošli'); | |
apex_lang.create_message(l_app_id, l_name, 'sv', 'Välkommen'); | |
apex_lang.create_message(l_app_id, l_name, 'th', 'ยินดีต้อนรับ'); | |
apex_lang.create_message(l_app_id, l_name, 'tr', 'Hoş geldiniz'); | |
apex_lang.create_message(l_app_id, l_name, 'uk', 'Ласкаво просимо'); | |
apex_lang.create_message(l_app_id, l_name, 'vi', 'Chào mừng'); | |
end; |
Oracle APEXのアプリケーション作成の参考になれば幸いです。
完