プロジェクトでは、文字列をロケールに解析する必要があることがよくありますが、使いやすいクラスはありません。
Java 自体には 3 つのコンストラクタが用意されていますが、実際に使用する場合は自分で解析する必要があり、比較的面倒です。
ロケール(言語)
ロケール(言語、国)
ロケール(文字列言語、文字列国、文字列バリアント)
Apache には LocaleUtils.toLocale(String language) がありますが、最後の 2 文字の小文字はサポートされていません。たとえば、zh_CN はサポートしていますが、zh_cn はサポートしていません。
他の方法を参考に、同じような問題を解決する人の参考になれば幸いです。
次のようにコードをコピーします。
java.util.Localeをインポートします。
パブリック クラス LocaleUtil
{
プライベート最終静的ロケール DEFAULT_LOCALE = Locale.ENGLISH;
パブリック最終静的文字列 IETF_SEPARATOR = "-";
public Final static String SEPARATOR = "_";
パブリック最終静的文字列 EMPTY_STRING = "";
public static Locale toLocale( String language )
{
if( !StringUtil.isNullOrEmpty( 言語 ) )
{
return langToLocale( 言語, SEPARATOR );
}
DEFAULT_LOCALE を返します。
}
public static Locale langToLocale( String lang , String separator )
{
if( StringUtil.isNullOrEmpty( lang ) )
{
DEFAULT_LOCALE を返します。
}
文字列言語 = EMPTY_STRING;
文字列国 = EMPTY_STRING;
文字列バリアント = EMPTY_STRING;
int i1 = lang.indexOf(セパレータ);
if ( i1 < 0 )
{
言語 = ラング;
} それ以外
{
言語 = lang.substring(0, i1);
++i1;
int i2 = lang.indexOf( セパレータ, i1);
if (i2 < 0)
{
国 = lang.substring(i1);
} それ以外
{
国 = lang.substring(i1, i2);
バリアント = lang.substring(i2+1);
}
}
if(言語.length() == 2)
{
言語 = language.toLowerCase();
}それ以外
{
言語 = EMPTY_STRING;
}
if(国.長さ() == 2)
{
国 = 国.toUpperCase();
}それ以外
{
国 = EMPTY_STRING;
}
if( (variant.length() > 0) &&
((言語.length() == 2) ||(country.length() == 2)) )
{
バリアント = バリアント.toUpperCase();
}それ以外
{
バリアント = EMPTY_STRING;
}
新しいロケール(言語、国、バリアント)を返します;
}
}
知らせ:
次のようにコードをコピーします。
パブリッククラスStringUtil
{
public static boolean isNullOrEmpty(String target) {
return target == null "".equals(target);
}
}