LoginSignup
1
1

More than 3 years have passed since last update.

[OutSystems]Reactive Web AppでのSetCurrentLocaleは意味をなさない

Posted at

OutSystemsでは、ロケール(言語と地域のセット)をセッションごとに設定するAction(SetCurrentLocale)と設定値を取得するFunction(GetCurrentLocale)が標準提供されています。
Traditional Web Appではこれらを使って実行中アプリケーションのロケールを操作し、翻訳テキストを表示する機能があります。
(なお、翻訳テキストは開発中に設定しておく)

Reactive Web Appでは、この翻訳テキストを表示する公式の機能がありません(現時点。代わりに翻訳テキストを表示するためのForgeコンポーネントがある)。
とはいえ、SetCurrentLocale/GetCurrentLocaleを実行させることはできるので、試してみました。

参考資料

多言語機能の使い方

OutSystemsのTraditional Webで多言語化対応する
OutSystemsのReactive Web Appで多言語化対応する

公式ドキュメント

Localeの解説:多言語Webアプリケーション
SetCurrentLocale Action
GetCurrentLocale Function

サンプル

Forgeコンポーネント:https://www.outsystems.com/forge/component-overview/7086/housesoftsamplereactive
LocaleTest Screenを参照してください。

環境

Personal Environment(Version 11.9.0 (Build 16900))
Service Studio(Version 11.8.8)

APIの仕様を確認

SetCurrentLocaleはSystemモジュールのActionであるため、使うためには参照が必要。
パラメータは新たに設定するロケール1つだけ。
パラメータに設定するロケールはRFC 1766形式のもの、とドキュメントに書いてあります。
ja-JPとか、en-USみたいな形式です。使える値のリストは、Traditional Web App形式のモジュールで、Multilingual Localesを右クリック→Add Locale...で確認できます。

GetCurrentLocaleはBuilt-in Functionであるため、特に参照は必要なく使えます。しかもFunctionなのでExpressionなどで直接使えます。
GetCurrentLocaleのドキュメントでは、使用可能場所が、「サーバー側ロジック」「クライアント側ロジック」共に「可」となっています。このため、Client ActionでもServer Actionでも利用できるということに。

テスト用画面の実装

画面上にClient Actionで実行したGetCurrentLocale()の結果と、Server Actionで実行したGetCurrentLocale()の結果を並べて表示。
「設定(ja)」ボタンをクリックすると、SetCurrentLocaleにロケール「ja」を渡して実行し、表示を更新する仕組み。NewLine()はなんとなく気になったので同時に検証していました。
image.png

①Client ActionでのGetCurrentLocale()実行

画面のローカル変数を画面①のExpressionに紐付けておく。画面のOnReadyとロケール変更後にAssignの値の部分で「GetCurrentLocale()」を実行してローカル変数に保存。
image.png

Functionなので、Assignの中で直接実行できます。また、EncodeHtmlは画面に出力するので動作確認中につけたものです。この場合、GetCurrentLocaleの結果は特定の値の範囲に限られるので不要ですね。

②Server ActionでのGetCurrentLocale()実行

サーバー側で実行結果を確認したいので、Server ActionというよりData Actionで実装してみました(楽なので)。
上のスクリーンショットでいうと、RunOnServerというActionです。
Data Actionの出力変数GetCurrentLocaleResultOnServerにGetCurrentLocale()の結果を設定します。

③ボタンクリックでSetCurrentLocale()実行

ボタンクリック時のActionは以下の通り。
image.png

ChangeLocaleServer:呼び出したServer Actionで「SetCurrentLocale」にロケールを渡して実行する。SetCurrentLocaleはクライアント側で実行できないので、Server Actionを呼び出している
Refresh:②のData Actionを再実行
Assign:①の計算を再実行

結果

初期状態:
何故か、Client ActionでのGetCurrentLocaleは空文字列を返していますね。サーバー側は「en-US」です。これがPersonal Environmentのデフォルト値でしょうね。
image.png

ロケール変更後:
初期状態と全く変わりません。念の為、デバッグ実行して、サーバー側でSetCurrentLocaleの前後でGetCurrentLocaleを実行して確認しましたが、ちゃんと変わっていました。であるにも関わらず、GetCurrentLocaleをUIから再実行すると全く最初と同じ実行結果。さらにいうと、③のボタンを再クリックしたら、初期状態と同じ値でした。
image.png

というわけで、Reactive Web Appでは、SetCurrentLocaleしても、Localeは想定通りには変わってくれませんでした。
ちなみに、ForgeのMultilingual を使うときは、独自のActionでロケールを管理しているため、そちらは正しく動作します。

1
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1