Bonjour je voudrais internationaliser mon application en utilisant la base de données.
Mais j'ai une erreur sur la "Base Name" de la ressource Bundle.Bref je ne sais pas comment le définir sans utiliser les fichiers properties.

voici mon entite pour stocker les messages
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
@Entity
@Table(uniqueConstraints ={@UniqueConstraint(name = "cleUnique",columnNames = {"cle","langue"})} )
@NamedQueries({@NamedQuery(name =Messages.BY_LANGUE,query = "SELECT m.cle,m.name FROM Messages m WHERE m.langue=:langue")})
public class Messages implements Serializable {
    public static final String BY_LANGUE="Messages.BY_LANGUE";
    private static final long serialVersionUID = 1L;
    @Id
    @GeneratedValue(strategy = GenerationType.AUTO)
    private Long id;
 
    private String cle;
    private String name;
    private String langue;
 
//getter setter
}
Voici ma classe pour recuperer la Resource Bundle
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
 
@Component
public class CustomResourceBundle extends ResourceBundle {
 
    protected static final String BASE_NAME = "Messages"; 
    protected static final Control DB_CONTROL = new DBControl();
 
    private Map<String, String> messages;
 
    public CustomResourceBundle() {
        setParent(ResourceBundle.getBundle(BASE_NAME,
                FacesContext.getCurrentInstance().getViewRoot().getLocale(), DB_CONTROL));
    }
 
    protected CustomResourceBundle(Map<String, String> messages) {
        this.messages = messages;
    }
 
    @Override
    protected Object handleGetObject(String key) {
        return messages != null ? messages.get(key) : parent.getObject(key);
    }
 
    @Override
    public Enumeration<String> getKeys() {
        return messages != null ? Collections.enumeration(messages.keySet()) : parent.getKeys();
    }
 
    protected static class DBControl extends Control {
 
        @Inject
        IMessages messageServices;
 
        @Override
        public ResourceBundle newBundle(String baseName, Locale locale, String format, ClassLoader loader, boolean reload)
                throws IllegalAccessException, InstantiationException, IOException {
            String language = locale.getLanguage();
            Map<String, String> messages = messageServices.getMessagesByName(language); // Do your JPA thing. The baseName can be used as @NamedQuery name.
            return new CustomResourceBundle(messages);
        }
 
    }
}
A note que c;est la variable BASE_NAME qui me pose problème.
enfin voici mon fichier de configurationfaces-config.xml
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
 <resource-bundle>
           <base-name>utils.CustomResourceBundle</base-name>
            <var>msg</var>
        </resource-bundle>
Voici enfin l'exception
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
Caused by: java.util.MissingResourceException: Can't find bundle for base name Messages, locale fr_FR
	at java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:1499) ~[na:1.7.0_21]
	at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1322) ~[na:1.7.0_21]
	at java.util.ResourceBundle.getBundle(ResourceBundle.java:841) ~[na:1.7.0_21]
	at utils.CustomResourceBundle.<init>(CustomResourceBundle.java:37) ~[CustomResourceBundle.class:na]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[na:1.7.0_21]
	at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57) ~[na:1.7.0_21]
	at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[na:1.7.0_21]
	at java.lang.reflect.Constructor.newInstance(Constructor.java:525) ~[na:1.7.0_21]
	at org.springframework.beans.BeanUtils.instantiateClass(BeanUtils.java:148) ~[spring-beans-4.0.5.RELEASE.jar:4.0.5.RELEASE]
	... 59 common frames omitted
Caused by: java.lang.NullPointerException: null
	at utils.CustomResourceBundle$DBControl.newBundle(CustomResourceBundle.java:64) ~[CustomResourceBundle$DBControl.class:na]
	at java.util.ResourceBundle.loadBundle(ResourceBundle.java:1436) ~[na:1.7.0_21]
	at java.util.ResourceBundle.findBundle(ResourceBundle.java:1400) ~[na:1.7.0_21]
	at java.util.ResourceBundle.findBundle(ResourceBundle.java:1354) ~[na:1.7.0_21]
	at java.util.ResourceBundle.findBundle(ResourceBundle.java:1354) ~[na:1.7.0_21]
	at java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1296) ~[na:1.7.0_21]
Comment faut t-il definir la variable BASE_NAME?
Merci d'avance