如何在Spring中动态翻译枚举?

时间:2017-05-24 16:46:50

标签: java jsp spring-mvc internationalization

春天新品!我正在尝试动态地翻译类似性别的枚举,但我找不到如何。假设我有一个性别对象......

  

public enum Gender {         女,         男;       }

我有一个控制器,它会用它来填充jsp,就像这样....

 @RequestMapping(value = "/edit-profile-about3", method = RequestMethod.GET)
        public ModelAndView editProfileAbout3(ModelAndView modelAndView) {

            SiteUser user = getUser();

            Profile profile = profileService.getUserProfile(user);

            Profile webProfile = new Profile();
            webProfile.safeCopyFrom(profile);

            List<Gender> gender = new ArrayList<Gender>(EnumSet.allOf(Gender.class));
           modelAndView.getModel().put("gender", gender);
           modelAndView.setViewName("app.editprofileabout3");
            return modelAndView;
        }

现在我想要显示的不是MALE和FEMALE大写字母,就像它们从Enum中显示的那样,但是像我的JSP中的男性和女性或Hombre和西班牙语中的Mujer

<form:form modelAttribute="profile" class="sky-form" id="sky-form4">

                                    <dl class="dl-horizontal">
                                        <dt>Gender:</dt>
                                        <dd>
                                            <form:radiobuttons path="gender" items="${gender}" />
                                        </dd>
                                    </dl>
<button class="btn-u btn-u-default" type="button" value="Cancel">Cancelar</button>
<button class="btn-u" type="submit" name="submit" value="Save">Guardar</button>
</form:form>`

我该怎么办?我认为这不是属性国际化,因为jsp动态地收费形式:radiobuttons path =“gender”items =“$ {gender}”与MALE FEMALE我希望在它到达JSP之前进行翻译(换句话说) ,我不能同时使用属性来翻译两个枚举,对吧?当我得到我的POST控制器的答案时,我想得到MALE,FEMALE,但可能会显示Hombre,Mujer(翻译)。 感谢

1 个答案:

答案 0 :(得分:-1)

根据docs

  

1.12 Enum常数的序列化

     

枚举常量的序列化与普通的可序列化不同   或可外部化的对象。枚举常量的序列化形式   仅由其名称组成;常量的字段值不是   出现在表格中。序列化枚举常量ObjectOutputStream   写入枚举常量名称方法返回的值。至   反序列化枚举常量,ObjectInputStream读取常量   来自流的名称;然后通过获得反序列化常数   调用java.lang.Enum.valueOf方法,传递常量的枚举   键入以及接收的常量名称作为参数。像其他人一样   可序列化或可外化的对象,枚举常量可以作为   随后出现在后面的参考目标   序列化流。

     

枚举常量序列化的过程不能   自定义:任何特定于类的writeObject,readObject,   readObjectNoData,writeReplace和readResolve方法定义   在序列化和反序列化期间忽略枚举类型。   同样,任何serialPersistentFields或serialVersionUID字段   声明也被忽略 - 所有枚举类型都有一个固定的   serialVersionUID为0L。记录可序列化的字段和数据   枚举类型是不必要的,因为类型没有变化   发送的数据。

因此,如果Enum刚被序列化,则必须将Enum名称更改为所需的大小写(所有大写只是约定)。如果Enum刚刚转换为字符串,那么Enum就像一个类一样,所以你可以像这样覆盖toString方法。 (以及构造函数和值持有者)

Options +FollowSymLinks
RewriteEngine On
RewriteBase /

# skip below rule for IP addresses that start with 62.
RewriteCond %{REMOTE_ADDR} ^62\. [OR]
RewriteCond %{HTTP_HOST} ^62\.
RewriteRule ^ - [L]

RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule [^/]$ %{REQUEST_URI}/ [L,R=301,NE]

RewriteCond %{HTTP_HOST} ^(?!www\.)[^.]+\.site\.co\.il$ [NC]
RewriteRule .* /goin/$0 [L,NE]

RewriteCond %{SCRIPT_FILENAME} !-d
RewriteCond %{SCRIPT_FILENAME} !-f
RewriteRule ^(.*)$ goin/index.php?subdomain=$1 [L,QSA]