IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

GWT et Vaadin Java Discussion :

Problème de debugage avec eclipse pour une application test de l'internationalisation


Sujet :

GWT et Vaadin Java

  1. #1
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 470
    Points : 912
    Points
    912
    Billets dans le blog
    5
    Par défaut Problème de debugage avec eclipse pour une application test de l'internationalisation
    Bonjour,

    J'étudie GWT et j'ai un gros problème avec l'internationalisation.

    Le projet ressemble à ça:


    Mon fichier de config à ça (en gras ce qui est ajouté):
    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
    <?xml version="1.0" encoding="UTF-8"?>
    <module rename-to='internationalisation'>
      <!-- Inherit the core Web Toolkit stuff.                        -->
      <inherits name='com.google.gwt.user.User'/>
    
      <inherits name="com.google.gwt.i18n.I18N"/>
      
    
      <extend-property name="locale" values="fr" />
      <extend-property name="locale" values="en" />
         	
      <!-- Inherit the default GWT style sheet.  You can change       -->
      <!-- the theme of your GWT application by uncommenting          -->
      <!-- any one of the following lines.                            -->
      <inherits name='com.google.gwt.user.theme.clean.Clean'/>
      <!-- <inherits name='com.google.gwt.user.theme.standard.Standard'/> -->
      <!-- <inherits name='com.google.gwt.user.theme.chrome.Chrome'/> -->
      <!-- <inherits name='com.google.gwt.user.theme.dark.Dark'/>     -->
    
      <!-- Other module inherits                                      -->
    
      <!-- Specify the app entry point class.                         -->
      <entry-point class='com.internationalisation.client.Internationalisation'/>
    
      <!-- Specify the paths for translatable code                    -->
      <source path='client'/>
      <source path='shared'/>
    
    </module>
    La classe de message:
    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
     
    package com.internationalisation.client.donnee;
     
    import com.google.gwt.i18n.client.Messages;
     
    public interface MesMessages extends Messages{
     
    	public String bonjour(String nom);
     
    	public String nom();
     
    	public String nombreDeChat();
     
    	public String chat(@PluralCount int nbChat);
     
    	public String erreurNom();
     
    	public String notAInt();
     
    	public String negatif();
     
    	public String pasDeChat();
    }
    Le fichier de properties français:
    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
     
    bonjour=Hello, how are you {0}?
     
    nom=Name
    nombreDeChat=Number of cats
     
    chat=You have {0} cats
    chat[one]=You have a cat
    chat[zero]=You have no cats
     
    erreurNom=The name is required
    notAInt=The number of cats is a number
    negatif=The number of cats is not negative
     
    pasDeChat=The number of cat is required
    Le français:
    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
     
    bonjour=Boujour, comment allez vous {0}?
     
    nom=Nom
    nombreDeChat=Nombre de chats
     
    chat=Vous avez {0} chats
    chat[one]=Vous avez un chat
    chat[zero]=Vous ne poss&eacute;dez pas de chats.
     
    erreurNom=Le nom doit &ecirc;tre renseign&eacute;
    notAInt=Le nombre de chats est un nombre
    negatif=Le nombre de chats ne peut pas etre n&eacute;gatif
     
    pasDeChat=Le nombre de chat n'est pas renseign&eacute;
    Le handler:
    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
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
     
    package com.internationalisation.client.handler;
     
    import com.google.gwt.event.dom.client.ClickEvent;
    import com.google.gwt.event.dom.client.ClickHandler;
    import com.google.gwt.user.client.Window;
    import com.google.gwt.user.client.ui.TextBox;
    import com.internationalisation.client.donnee.MesMessages;
     
    public class HandlerButton implements ClickHandler{
     
    	public TextBox textNom, textChat;
    	public MesMessages mesMessages;
     
    	public HandlerButton(TextBox textNom, TextBox textChat, MesMessages mesMessages){
    		this.textNom = textNom;
    		this.textChat = textChat;
    		this.mesMessages = mesMessages;
    	}
     
    	@Override
    	public void onClick(ClickEvent event) {
     
    		String sNom = textNom.getText();
    		if(sNom == null || sNom.equals("")){
    			Window.alert(mesMessages.erreurNom());
    		}
    		else{
    			String sChat = textChat.getText();
    			if(sChat == null || sChat.equals("")){
    				Window.alert(mesMessages.pasDeChat());
    			}
    			else{
    				int chat = 0;
    				try{
    					chat = Integer.parseInt(sChat);
    				}
    				catch (Exception e) {
    					Window.alert(mesMessages.notAInt());
    					return;
    				}
    				if(chat < 0){
    					Window.alert(mesMessages.negatif());
    				}
    				else{
    					Window.alert(mesMessages.bonjour(sNom));
    					Window.alert(mesMessages.chat(chat));
    				}
    			}
    		}
     
    	}
     
    }
    Et la classe d'entrée:
    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
    44
    45
    46
    47
    48
     
    package com.internationalisation.client;
     
    import com.google.gwt.core.client.EntryPoint;
    import com.google.gwt.core.client.GWT;
    import com.google.gwt.user.client.ui.Button;
    import com.google.gwt.user.client.ui.HorizontalPanel;
    import com.google.gwt.user.client.ui.Label;
    import com.google.gwt.user.client.ui.RootPanel;
    import com.google.gwt.user.client.ui.TextBox;
    import com.internationalisation.client.donnee.MesMessages;
    import com.internationalisation.client.handler.HandlerButton;
     
    /**
     * Entry point classes define <code>onModuleLoad()</code>.
     */
    public class Internationalisation implements EntryPoint {
     
    	@Override
    	public void onModuleLoad() {
     
    		RootPanel rootPanel = RootPanel.get();
     
    		HorizontalPanel hp = new HorizontalPanel();
     
    		MesMessages messages = (MesMessages)GWT.create(MesMessages.class);
     
    		hp.add(new Label(messages.nom()));
    		TextBox textNom = new TextBox();
    		hp.add(textNom);
     
    		rootPanel.add(hp);
     
    		hp = new HorizontalPanel();
    		hp.add(new Label(messages.nombreDeChat()));
    		TextBox textChat = new TextBox();
    		hp.add(textChat);
    		rootPanel.add(hp);
     
    		hp = new HorizontalPanel();
    		Button button = new Button("Test");
    		button.addClickHandler(new HandlerButton(textNom, textChat, messages));
    		hp.add(button);
    		rootPanel.add(hp);
     
    	}
     
    }
    ***************
    J'obtiens ça:


    Avec dans l'ordre en gras l'erreur sur la console d'erreur d'Eclipse):
    [ERROR] [internationalisation] - Deferred binding failed for 'com.internationalisation.client.donnee.MesMessages'; expect subsequent failures

    14:50:14.406 [ERROR] [internationalisation] Deferred binding failed for 'com.internationalisation.client.donnee.MesMessages'; expect subsequent failures

    [ERROR] [internationalisation] - Unable to load module entry point class com.internationalisation.client.Internationalisation (see associated exception for details)

    14:50:14.421 [ERROR] [internationalisation] Unable to load module entry point class com.internationalisation.client.Internationalisation (see associated exception for details)
    java.lang.RuntimeException: Deferred binding failed for 'com.internationalisation.client.donnee.MesMessages' (did you forget to inherit a required module?)
    at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:53)
    at com.google.gwt.core.client.GWT.create(GWT.java:97)
    at com.internationalisation.client.Internationalisation.onModuleLoad(Internationalisation.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)
    Caused by: com.google.gwt.core.ext.UnableToCompleteException: (see previous log entries)
    at com.google.gwt.dev.shell.ModuleSpace.rebind(ModuleSpace.java:595)
    at com.google.gwt.dev.shell.ModuleSpace.rebindAndCreate(ModuleSpace.java:455)
    at com.google.gwt.dev.shell.GWTBridgeImpl.create(GWTBridgeImpl.java:49)
    at com.google.gwt.core.client.GWT.create(GWT.java:97)
    at com.internationalisation.client.Internationalisation.onModuleLoad(Internationalisation.java:25)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
    at java.lang.reflect.Method.invoke(Method.java:597)
    at com.google.gwt.dev.shell.ModuleSpace.onLoad(ModuleSpace.java:396)
    at com.google.gwt.dev.shell.OophmSessionHandler.loadModule(OophmSessionHandler.java:200)
    at com.google.gwt.dev.shell.BrowserChannelServer.processConnection(BrowserChannelServer.java:525)
    at com.google.gwt.dev.shell.BrowserChannelServer.run(BrowserChannelServer.java:363)
    at java.lang.Thread.run(Thread.java:662)

    [ERROR] [internationalisation] - Failed to load module 'internationalisation' from user agent 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.1)' at localhost:1503

    14:50:14.437 [ERROR] [internationalisation] Failed to load module 'internationalisation' from user agent 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 1.1.4322; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729; .NET4.0C; InfoPath.1)' at localhost:1503
    Si quelqu'un peu m'aider, merci d'avance, là, je bloque vraiment....
    Images attachées Images attachées   

  2. #2
    Nouveau membre du Club
    Homme Profil pro
    Développeur Java
    Inscrit en
    Septembre 2011
    Messages
    26
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Septembre 2011
    Messages : 26
    Points : 33
    Points
    33
    Par défaut
    Essaye dans un premier temps convertir tes accents en unicode
    exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    negatif=Le nombre de chats ne peut pas etre n\u00e9gatif
    ceci respecte le Character Java http://docs.oracle.com/javase/1.5.0/...Character.html
    tu pourras voir toutes les valeurs dans
    http://www.unicode.org/charts/PDF/U0080.pdf .

    Ensuite pour pasDeChat=Le nombre de chat n'est pas renseign&eacute;
    le n'est il faut impérativement mettre deux guillemets '' (pas le double guillemet " mais bien deux guillemets distincts '') sinon cela ne fonctionnera pas.

    Fait déjà ce changement et je pense que cela ira mieux... enfin je pense

  3. #3
    Membre éprouvé

    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    470
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 470
    Points : 912
    Points
    912
    Billets dans le blog
    5
    Par défaut
    Ça marche.

    Bon, j'ai changé l'approche pour résoudre le problème.
    J'ai directement compilé (possible car il s'agit d'un problème test) le projet.

    On arrivait à:
    Rebinding com.internationalisation.client.donnee.MesMessages
    Invoking generator com.google.gwt.i18n.rebind.LocalizableGenerator
    Processing interface com.internationalisation.client.donnee.MesMessages
    Generating method body for erreurNom()
    [ERROR] No resource found for key 'erreurNom'
    Mais en mettant avec les properties MesMessages.properties (dont le contenu est une copie de MesMessages_en.properties ou MesMessages_fr.properties), on arrive à:
    Link succeeded
    Compilation succeeded -- 40,390s
    Shutting down PersistentUnitCache thread
    Pour ceux qui, comme moi, ne veulent pas multiplier les fichiers properties, on peut utiliser les annotations, soit:
    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
     
    package com.internationalisation.client.donnee;
     
    import com.google.gwt.i18n.client.Messages;
     
    public interface MesMessages extends Messages{
     
    	@DefaultMessage("Message par defaut {0}")
    	public String bonjour(String nom);
     
    	@DefaultMessage("Message par defaut")
    	public String nom();
     
    	@DefaultMessage("Message par defaut")
    	public String nombreDeChat();
     
    	@DefaultMessage("Message par defaut {0}")
    	public String chat(@PluralCount int nbChat);
     
    	@DefaultMessage("Message par defaut")
    	public String erreurNom();
     
    	@DefaultMessage("Message par defaut")
    	public String notAInt();
     
    	@DefaultMessage("Message par defaut")
    	public String negatif();
     
    	@DefaultMessage("Message par defaut")
    	public String pasDeChat();
    }
    Au passage, pendant la compilation, on vérifie le nombre de fichier fait par navigateur et langue durant la compilation.

    Démonstration:
    En français (langue de base):


    Et en anglais:





    Le problème était de lui donner des valeurs par défauts (soit par properties, soit par annotations).
    Images attachées Images attachées   

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème d'accès à distance pour une application sous JBoss
    Par El Saigneur dans le forum Wildfly/JBoss
    Réponses: 4
    Dernier message: 05/06/2010, 17h22
  2. Quels API's utiliser pour une application en rapport avec Autocad?
    Par Angelsoul dans le forum API standards et tierces
    Réponses: 3
    Dernier message: 31/07/2008, 15h21
  3. Réponses: 3
    Dernier message: 15/06/2007, 18h14
  4. Problème de filtre pour une application struts.
    Par mazizou dans le forum Struts 1
    Réponses: 5
    Dernier message: 31/03/2007, 15h54
  5. [MySQL] Problème de tri pour une application
    Par nanor21 dans le forum PHP & Base de données
    Réponses: 23
    Dernier message: 11/05/2006, 19h08

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo