2017-11-15 6 views
0

저는 백엔드 메시지를 내 앱으로 번역하고 있습니다. ResourceBundle 속성이 선택된 언어에 따라 메시지를 가져 오지 않습니다.

은 그위한 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 콩을 위해 완벽하게 작동합니다; 선택한 언어에 따라 번역 된 속성 메시지가 표시됩니다.

@SessionScoped 또는 @ApplicationScoped 콩에서 msg.getString("some-property")을 호출하면 메시지가 표시되지만 선택한 앱 (예 : 영어)을 무시하고 기본 앱의 언어 (스페인어)로 표시됩니다.

내가 뭘 잘못하고있어? 감사합니다. .

답변

0

의 정의는 어떤 언어입니까?은 무엇입니까?

FacesContext은 현재 요청을 기반으로 현재 로캘을 확인할 수 있지만 세션 범위 또는 응용 프로그램 범위에서는 현재 요청이 없습니다.

@Produces@Produces @RequestScoped으로 대체하는 것이 도움이 될 수 있습니다. 현재 기본 범위는 @Dependent입니다.

+1

이 질문에 대한 답변을 제공하지 않습니다. 비평하거나 저자의 설명을 요청하려면 게시물 아래에 의견을 남겨 둡니다. - [검토 중] (리뷰/저품절 포스트/17996891) – aaron

+0

선택한 언어는 not_ app의 기본값입니다. 나는 당신의 충고에 따라 제작자에게'@ RequestScoped '를 추가했다. 그러나 작동하지 않는 경우 UnproxyableResolutionException이 발생합니다. – Santiago

관련 문제