ResourceBundle属性不会根据所选语言提供消息

时间:2017-11-15 21:36:25

标签: java jsf internationalization cdi javabeans

我正在将后端邮件翻译成我的应用。

我为此写了一个BundleProducer:

package util;

import javax.enterprise.inject.Model;
import javax.enterprise.inject.Produces;
import javax.faces.context.FacesContext;
import java.util.PropertyResourceBundle;

@Model
public class BundleProducer{
    @Produces
    public PropertyResourceBundle getBundle() {
        FacesContext facesContext = FacesContext.getCurrentInstance();
        return facesContext.getApplication().evaluateExpressionGet(facesContext, "#{msg}", PropertyResourceBundle.class);
    }
}

注入:

protected transient @Inject
PropertyResourceBundle msg;

呼叫:

FacesMessage m = new FacesMessage(FacesMessage.SEVERITY_ERROR, msg.getString("inactive-user"), "");
fc.addMessage(null, m);

该代码适用于@RequestScoped@ConversationScoped个bean;属性消息显示根据所选语言进行翻译。

但是当我在msg.getString("some-property")@SessionScoped bean中调用@ApplicationScoped时,它会显示该消息,但是使用默认应用程序的语言(西班牙语),忽略所选的一个(例如,英语) )。

我做错了什么? 感谢。

1 个答案:

答案 0 :(得分:0)

您对所选语言的定义是什么?

FacesContext可以根据当前请求确定当前区域设置,但在会话范围或应用程序范围内,没有当前请求。

@Produces替换为@Produces @RequestScoped可能会有所帮助。目前,您获得的默认范围是@Dependent