小工具,enum的国际化

来源:互联网 发布:util-linux 编辑:程序博客网 时间:2024/05/22 05:26

有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 0
原创粉丝点击