2017-11-15 13 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豆のために完璧に動作します。プロパティメッセージは、選択された言語に従って翻訳されて表示されます。

または@ApplicationScoped beanにmsg.getString("some-property")を呼び出すと、メッセージは表示されますが、デフォルトのアプリの言語(スペイン語)では選択したもの(英語など)は無視されます。

私は間違っていますか?おかげさまで

答えて

0

の定義言語はですか?

FacesContextは現在の要求に基づいて現在のロケールを判断できますが、セッションスコープまたはアプリケーションスコープでは現在の要求はありません。

@Produces@Produces @RequestScopedで置き換えると役立つ場合があります。現時点では、デフォルトスコープは@Dependentです。

+1

これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 17996891) – aaron

+0

選択した言語は、デフォルトではない言語です。私はあなたの助言に従い、 '@ RequestScoped'をプロデューサに追加しました。しかし、動作していない、UnproxyableResolutionExceptionをスローします。 – Santiago

関連する問題