無料で使えるシステムトレードフレームワーク「Jiji」 をリリースしました!

・OANDA Trade APIを利用した、オープンソースのシステムトレードフレームワークです。
・自分だけの取引アルゴリズムで、誰でも、いますぐ、かんたんに、自動取引を開始できます。

リソースの探索候補リストを作成する関数

"ja"や"en"などをキーとして各言語に対応する文字列を格納するMapがあって、そこから指定されたロケールにマッチする文字列を取り出して使う、ということなのだけど、ResourceBundleの取得先特定ってvariantとかも考慮してたよなー。一応その辺と仕様をあわせておこうか、と思って指定されたLocaleに対応する探索候補リストを作成する関数を書いてみました。

/**
 * 探索対象の候補名一覧を取得する。
 * {@link ResourceBundle#getBundle(String)}で使用されるデフォルトの候補一覧と
 * 同じ動作をする。
 *
 * @param locale ロケール
 * @return 候補名一覧
 */
static Collection<String> getCandidates( final Locale locale ) {
    return new LinkedHashSet<String>() {{
        for ( Locale loc : new Locale[] { locale, Locale.getDefault() } ) {
            String l = loc.getLanguage();
            String c = loc.getCountry();
            String v = loc.getVariant();
            if ( v.length() > 0 ) add( new Locale( l,c,v ).toString() );
            if ( c.length() > 0 ) add( new Locale( l,c ).toString() );
            add( new Locale( l ).toString() );
        }
        add( Locale.ROOT.toString() );
    }};
}
...
Locale.setDefault( Locale.ENGLISH );
for ( String candidate : getCandidates( Locale.JAPAN ) ) {
    System.out.println( candidate );
}

実行結果です。

ja_JP
ja
en

Mapからの文字列探索時には、返される候補リストの順に探していけばOKですかね。