複数言語対応(3)モバイルでモバイルアプリケーションを多言語対応させる方法を確認しました。この手順では、Resourcesに配置したJSONファイルから設定を読み込むため、オンラインでなければ、読み込みができません。
今回は、LocalDBに設定を持って、オフラインでも設定できる方法を確認してみます。
動作確認環境
Platform Version:11.0.212.0
Service Studio Version:11.0.537.0
Multilingual Mobile Component:2.0.1
Table of Contents
サーバ側で設定を管理する
運用を考えると、アプリケーション毎に共通の設定をサーバ側で行うことになるはずです。
そこで、OutSystemsのWebアプリケーションを作成し、管理者が設定値を登録できるようにします。
必要なAttributeは、多言語対応する項目を特定するKey、どの言語で翻訳するかを示すLocale、翻訳結果の文言を表すValueの3つ。また、モバイルのモジュールから操作できるようにPublic=Yesにします。
今回は動作確認なので、作成したEntityを右クリックしてCreate List Screen、Create Detail Screenを選択し、スキャフォーディングによって一覧画面と更新画面を作成します。
前回と同様の設定を登録しておきます。
同期処理でサーバの設定を端末にコピーする
ここまででサーバ側のデータの準備はできました。
LocalDBを用意
まずは、端末側の入れ物としてLocalDBを用意します。このLocalDBは端末内に保存されるsqliteファイル内に保持されるため、オフライン時であっても操作可能です。
サーバ側に作成したEntityと同じ構造のLocalDB Entityを簡単に作成できます。
Data > Entities > Local Storageを右クリック⇒Add Entity from Database…で出てくるダイアログで先ほど作成したEntityを選択してください。
サーバの設定をLocalDBにコピー
OutSystemsのモバイルアプリケーションでは、サーバと端末間でデータのやりとりをするために、同期という仕組みが用意されています。
本来は、モバイルアプリケーションを作成するときは、この同期をどのタイミングで行うか、業務要件に応じて意思決定することになります。しかし、今回は動作確認目的なので、ログイン実行時に行うことにしましょう。
自動的に同期を開始させるためには、Logic > Client Actions > OfflineDataSync > OfflineDataSyncConfiguration ActionでBoolean型変数にTrueを設定します。
(SyncOnLoginという変数をTrueにすることでログイン時に自動で同期が開始)
これで、ログインと同時に同期されるようになったので、サーバの設定をLocalDBにコピーする処理を書いてみましょう。
サーバから全件取得して、LocalDBのデータを洗い替えする処理が自動作成できます。LocalDBを右クリック⇒Create Action to Sync Data (Read-Only)。
作成されたActionを同期の本体(Logic > Client Actions > OfflineDataSync > OfflineDataSync Action)へ。
元からあるServerDataSyncの下に作成した設定Entityの同期Action(SyncLocalTranslationSettings)と、LocalDBにおいた設定をMultilingual Mobile Componentに登録する自作のAction LoadTranslationsをおいています。
参考までにLoadTranslationsの実装。
Multilingual Mobile ComponentのAddTranslationsが要求する入力パラメータは、「ロケールごとにKey-Valueの組み合わせのリスト」をさらにリスト化したものです。そのため、LocalDBを全件取得後、ロケールごとにデータをまとめ直し、最後にAddTranslationsに渡しています。
端末にコピーした設定を利用する
翻訳対象の項目にKeyを設定する、ロケールをSetLocale(Multilingual Mobile Component)で変更する点は前回の記事と同じなのでそちらを参照してください。
動かしたときの画面イメージも前回と同じです。