以下の内容はhttps://unageanu.hatenablog.com/entry/20090916/1253098124より取得しました。


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

"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ですかね。




以上の内容はhttps://unageanu.hatenablog.com/entry/20090916/1253098124より取得しました。
このページはhttp://font.textar.tv/のウェブフォントを使用してます

不具合報告/要望等はこちらへお願いします。
モバイルやる夫Viewer Ver0.14