0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

DataSpiderSDKと多言語化対応

Last updated at Posted at 2022-10-15

DataSpiderの多言語対応

DataSpiderの本体は、日本語と英語に対応しています。
DataSpiderのログイン時のダイアログにて、言語に日本もしくは英語を指定し切り替えることができます。

ログイン画面

ha_login.png

日本語版のデザイナ画面

ja.png

英語版のデザイナ画面

en.png

アダプタ開発と多言語化

Java言語での多言語化は、一般的なお作法が存在します。
java.util.ResourceBundleを使用することに多言語化に対応することができる当記事がWeb上で多くみられます。

今回行うこと

今回は、java.util.ResourceBundleの仕組みを使って、DataSpiderSDKによるオリジナルのアダプタを開発する際に、GUIおよびログ出力を多言語化(国際化)に対応してみます。

前提条件

こちらの記事にある内容にて、DataSpider本体およびSDK開発環境が整っていること。

多言語化対応のための実装について

只今Bitcoin連携のためのアドレス生成アダプタを製造しているということもあり、以下の点について多言語化を対応してみたいと思います。

  • アダプタプロパティ画面
  • ツールパレットに表示されるアイコン名
  • デバッグログメッセージ

使用するパッケージとファイル構成

ここでは、多言語化対応に必要となる部分を抜粋して説明します。
必要となるパッケージおよびファイルを用意して多言語化対応します。
メッセージを管理するプロパティファイルは、ResourceBundleのルールに沿って用意します。

パッケージ

別途用意するライブラリはありません。

  • java.util.ResourceBundle
  • com.appresso.ds.common.fw.i18n.MessageUtil
    その他、エラーハンドリングやDataSpiderに対応するため必要なパッケージをimportします。

ファイル構成

多言語化にあたり、以下のクラス、およびプロパティファイルを追加します。

ファイル群

  • MultiLangMessage.java
    多言語化対応のためのメインとなるクラス
  • multilangmessages_en.properties
    英語の文字列を管理するpropertieファイル
  • multilangmessages_ja.properties
    日本語の文字列を管理するpropertieファイル
  • multilangmessages.properties
    文字列を管理するpropertieファイル

ファイル構成詳細

アダプタのソースコードと同階層にファイルを上記配置します。
tree1.JPG

ファイルの内容と実装詳細

ファイルの内容

MultiLangMessage.java

package com.jpn.linux.dp.modules.adapter.BitcoinGenerateAddress;

import java.util.MissingResourceException;
import java.util.ResourceBundle;

import com.appresso.ds.common.fw.i18n.MessageUtil;
import com.appresso.ds.common.locale.ThreadLocaleManager;

public class MultiLangMessage {

    // クラス名MultiLangMessage、multilangmessagesとファイル名の先頭の文字列を合せる
	private static String prefixName = ".multilangmessages";

	public static String getString(String key) {
		try {
			return getMultiLangMessageText().getString(key);
		} catch (MissingResourceException var2) {
			return '!' + key + '!';
		}
	}

	public static String getString(String key, Object... args) {
		return MessageUtil.getString(getMultiLangMessageText(), key, args);
	}

	private static ResourceBundle getMultiLangMessageText() {
		return ResourceBundle.getBundle(
			MultiLangMessage.class.getPackage().getName() + prefixName,
			ThreadLocaleManager.get());
	}

}

multilangmessages_en.properties

read.operation.label=BTC Generate Address
group.type.label=Required settings
group.type.label.legacy=Legacy
group.type.label.p2sh=P2SH
constraint.type.label=Address type
constraint.type.desc=delect address BTC type
log.generate.address=Generated [{0}] of BTC address.

multilangmessages_ja.properties

read.operation.label=BTCアドレス生成
group.type.label=必須設定
group.type.label.legacy=レガシ
group.type.label.p2sh=P2SH
constraint.type.label=生成アドレスタイプ
constraint.type.desc=BTCのアドレスタイプを選択します
log.generate.address=[{0}] アドレスを生成しました

注意
全角文字列(日本語など)を含む内容をpropertiesファイルに記載する場合は、プロパティエディタを使用すること。
上記内容は、視認性を確保するため、プロパティエディタにより全角文字として解釈後を表示している。
通常のエディタで開くと以下の16進の羅列になっている。read.operation.label=BTC\u30a2\u30c9\u30ec\u30b9\u751f\u6210
group.type.label=\u5fc5\u9808\u8a2d\u5b9a
group.type.label.legacy=\u30ec\u30ac\u30b7

multilangmessages.properties

read.operation.label=BTC Generate Address
group.type.label=Required settings
group.type.label.legacy=Legacy
group.type.label.p2sh=P2SH
constraint.type.label=Address type
constraint.type.desc=delect address BTC type
log.generate.address=Generated [{0}] of BTC address.

プロパティファイル内の文字列の参照方法

Javaコード内で文字列を取得する実装例

	@Override
	public OperationMetaData getOperationMetaData(OperationContext context) throws Exception {
		OperationMetaData meta = new OperationMetaData(this, context);

		// ツールパレットの表示される名前 多言語化をしない場合は、コードに直書きする
		// meta.setLabel("BTCアドレス生成");
        // 多言語化する際は以下のゲッターを使用して実装する
        // MultiLangMessage:上記で用意したクラスおよびそのゲッターを呼び出す
		meta.setLabel(MultiLangMessage.getString("read.operation.label"));

		// デフォルトのアイコン名称
		meta.setBaseName("generate");

		return meta;
	}

まとめ

DataSpiderSDKを用いた独自のアダプタ開発においても多言語化できることがわかりました。
ただし、今回の検証では、ラジオボタンのテキスト文字については、同メソッドにより多言語化対応ができませんでした。
別途さらに検証が必要(おそらく実装の問題)と思われるので、別途確認を進めたいと思います。

日本語版と英語版の画面イメージ

  • 日本語版
    ja_画面全体.JPG
  • 英語版
    en_画面全体.JPG

多言語化対応ができなかった実装例

public interface Constants の中で、固定値としてStringオブジェクトに格納する場合は、多言語化できませんでした。
Javaの実装上の制限と思われる。実装する場所、タイミングを変更すると正常に実装できると思われるがまだ確認ができていません。
radio.JPG
赤枠部分:「Legacy」と「レガシ」で切り替わる想定でした。
en_画面全体_failer.JPG

次回は

外部ライブラリの利用について紹介します。

0
0
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
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?