小工具,enum的国际化

有Person类一个:

public class Person{
    //... other field
    private PersonStatus status;
    //...getter,setter
}


其中的status字段是一个枚举类:

public enum PersonStatus{
A,B,C,D
}

有时候,显示PersonStatus时,不想使用其默认的name()方法,比如说中文。硬编码当然是可以实现的,不过不是好解决方案,所以鼓捣了一个国际化的小工具,很简单的,所以直接上代码,不解释。

public class EnumLocaleUtils {

	private static ResourceBundle getResourceBundle(Class<?> clazz, Locale locale) {
		return PropertyResourceBundle.getBundle(clazz.getName(), getLocale(locale));
	}

	private static Locale getLocale(Locale locale) {
		return locale == null?Locale.getDefault():locale;
	}
        
        //根据国际化名称取enum
        public static <T extends Enum<T>> T getByLocaleName(Class<T> clazz, String name, Locale locale) {
		ResourceBundle bundle = getResourceBundle(clazz, locale);
		if(bundle == null)
			return null;
		for(String key:bundle.keySet()) {
			if(bundle.getString(key).equals(name)) {
				return Enum.valueOf(clazz, key);
			}
		}
		return null;
	}


        //取得enum的国际化名称
	public static <T extends Enum<T>> String toLocalString(T e,Locale locale) {
		ResourceBundle bundle = getResourceBundle(e.getClass(), locale);
		if(bundle == null)
			return e.name();
		if(bundle.containsKey(e.name())) {
			return bundle.getString(e.name());
		}
		return "";
	}
}

测试下:

先写测试类,用不上junit,就写个main函数吧。

public class Test{
    public static main(String[] args){
        System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "优", new Locale("zh","CN")));//输出A
        System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "良", new Locale("zh","CN")));//输出B
        System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "中", new Locale("zh","CN")));//输出C
        System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "差", new Locale("zh","CN")));//输出D
        System.out.println(EnumLocaleUtils.getByLocaleName(X.class, "未知", new Locale("zh","CN")));//输出null
        System.out.println(EnumLocaleUtils.toLocalString(X.A,null));//输出优
        System.out.println(EnumLocaleUtils.toLocalString(X.A,new Locale("en","EN")));//也是输出优,找不到_en_EN,那么默认用唯一的一个_zh_CN代替
    }

}
enum X{
A,B,C,D
}
在同一个包下,建立一个X_zh_CN.properties

A=优
B=良
C=中
D=差

nativeToAscii。

运行之,输出如下:

A
B
C
D
null

符合预期。

这个小工具是可用的了,有用的上的只管拿去,成功能被分享,是一件快乐的事情。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值