私のアプリケーションにバックエンドメッセージを翻訳しています。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")
を呼び出すと、メッセージは表示されますが、デフォルトのアプリの言語(スペイン語)では選択したもの(英語など)は無視されます。
私は間違っていますか?おかげさまで
これは質問に対する答えを提供しません。批評をしたり、著者の説明を求めるには、投稿の下にコメントを残してください。 - [レビューから](/レビュー/低品質の投稿/ 17996891) – aaron
選択した言語は、デフォルトではない言語です。私はあなたの助言に従い、 '@ RequestScoped'をプロデューサに追加しました。しかし、動作していない、UnproxyableResolutionExceptionをスローします。 – Santiago