我正在将后端邮件翻译成我的应用。
我为此写了一个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
时,它会显示该消息,但是使用默认应用程序的语言(西班牙语),忽略所选的一个(例如,英语) )。
我做错了什么? 感谢。
答案 0 :(得分:0)
您对所选语言的定义是什么?
FacesContext
可以根据当前请求确定当前区域设置,但在会话范围或应用程序范围内,没有当前请求。
将@Produces
替换为@Produces @RequestScoped
可能会有所帮助。目前,您获得的默认范围是@Dependent
。