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

C# Discussion :

Infobulles multilangues avec "Localizable"


Sujet :

C#

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut Infobulles multilangues avec "Localizable"
    Bonjour,

    Je suis sur une application proposée en plusieurs langues. J'ai opté pour la méthode de traduction proposé dans le tutoriel de Thomas LEBRUN. Les traductions sont en dures dans mon application: utilisation de l'option Localizable

    J'ai implémenté les infobulles à travers la classe ToolTip.
    Il me reste néanmoins un souci concernant le texte.
    En effet, je me demande comment faire pour appliquer la "culture" courante sur ce type d'objet d'une part. Et d'autre part où loger les traductions.

    En vous remerciant d'avance pour votre aide.

    Léo.

  2. #2
    Membre éclairé
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Par défaut
    Bonjour,

    Sur certain contrôle, comme les TextBox ou DateTimePicker, il existe une propriété ToolTip sur toolTip où l'on saisie le message de l'infobulle.
    Dans le cas où tu utilise Localizable, tu n'as qu'à saisir le texte pour chaque langue comme tu le fait pour la propriété Text.

    Si le contrôle ne contient pas cette propriété, tu peux rajouter un fichier de ressource .resx par langue, mettre tes traductions dedans, et appeler ces chaines lorsque tu fais ton SetToolTip du ToolTip.

    Je ne sais pas si je me suis bien fait comprendre, dans le doute n'hésite pas ^^

  3. #3
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut
    Merci pour ta réponse.

    Comme tu m'as dit de ne pas hésiter, alors j'hésite pas :
    Aucune propriété de type ToolTip en direct.
    Donc je la crée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ToolTip toolTip1 = new ToolTip();
    
    toolTip1.SetToolTip(this.button, "infobullle du bouton");
    Reste maintenant la partie du multi langue. Avec localizable, depuis la windows form, je bascule dans la langue voulue et rendre les libéllés souhaités. Pour les infobulles, je dois le faire manuellement en allant directement dans le fichier "Form1.en.resx". Dans celui-ci, je rentre une string à la main.(cf sanstitre.jpg) Là, un message apparait:
    Vous essayez de modifier un fichier de ressources qui fait partie d'un autre élément de projet. La modification de cet élément peut endommager l'élément de projet et vous devrez le récupérer manuellement. De plus, les modifications apportées à ce fichier de ressources peuvent être perdues si d'autres modifications ont été appoartées à l'élément de projet...
    Après il demande de continuer ou non.
    Je n'ose pas cliquer sur oui, car au début où je cherchais à mettre en place la "localisation" j'avais cliqué sur oui, et ça m'avait gamelé mon application. Il faut dire que je n'avais pas encore le tuto, et je testais au taton...

    Dois suivre tout de même ce chemin ?

    en te remerciant pour ta réponse et de celle à venir
    Images attachées Images attachées  

  4. #4
    Membre éclairé
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Par défaut
    Bonjour,
    excuses-moi du retard, mais je n'ai pas eu le temps de te répondre plus rapidement.

    TU es sur le bon chemin, mais ne continue pas sur cette voie, car j'ai déjà eu des problèmes en insérant directement dans Form1.en.resx, des fois mes chaines disparaissaient :s

    Pour résoudre ce problème, il faut créer un fichier de ressource par langage.

    Vas donc dans Projet -> ajouter un nouvel élément
    Choisis "Fichier de resource", nomme le par exemple Dico.resx.
    Ce sera ton fichier de ressource ou tu mettra tes chaine pour la langue par défaut (chez moi en générale c'est l'appli en français)

    Repete cette opération pour chacune de tes langue, mais au lieu de le nommer Dico.resx, nomme le Dico.en.resx pour la langue anglaise, ou Dico.de.resx pour la langue allemande.

    Ensuite dans le code, il faut créer un ResourceManager comme ceci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ResourceManager rm = new ResourceManager("NomDeLaSolution.Dico", typeof(NomDeLaClasseOuTuTravaille).Assembly);
    puis ensuite pour récuperer les chaines de caractère, tu fait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ToolTip toolTip1 = new ToolTip();
     
    toolTip1.SetToolTip(this.button, rm.GetString("NomDeLaChaine");
    Attention à bien mettre les guillemets, tu passe en paramètre a GetString une chaine de caractère

    Voilà, j'espere que ça va t'aider, dans le cas contraire je reste à ton entiere disposition

    Bonne journée

  5. #5
    Membre confirmé
    Inscrit en
    Avril 2006
    Messages
    90
    Détails du profil
    Informations forums :
    Inscription : Avril 2006
    Messages : 90
    Par défaut
    Salut,

    Je te remercie pour ta réponse, que je trouve bien rapide

    J'ai mis en application ce que tu m'as proposé. Cela "fonctionne", avec cependant une icone Rouge avec point d'exclamation dedans.

    Explication:

    J'ai pris mes anciens fichiers ressources Form1.fr.resx et Form1.en.resx, et j'ai porté les champs dans les nouveaux fichiers de ressources. Pour celui en Anglais(dico.en.resx), tout se passe bien. Concernant celui en Français, il me met la chose suivante (cf image1): le nom de ressource n'est pas un identificateur valide.

    Je pourrais renommer les champs en remplaçant les points par des underscore , cela engendrai de reprendre tout mon code qui met à jour les champs...

    Au final, avec les points d'exclamations rouge, cela fonctionne tout de même.

    Du coup, qu'est ce que je dois faire ? tout renommer, laisser en l'état ? Est ce que je peux supprimer mes anciens fichiers ressources de la solution ? (j'ose pas trop toucher à sa, de peur qu'il me faille tout recommencer mon IHM).

    En tout cas, je te remercie pour tes réponses, elles m'ont été d'une vrai aide.

    Bonne journée.

    Léo.
    Images attachées Images attachées  

  6. #6
    Membre éclairé
    Inscrit en
    Mai 2010
    Messages
    72
    Détails du profil
    Informations forums :
    Inscription : Mai 2010
    Messages : 72
    Par défaut
    Mais de rien, on est la pour ça

    En faite, il faut que tu couple les deux solutions, c'est à dire le localizable sur la Form en "dur" pour tout ce qui est traduction de Label, Button et autre, et ne mettre dans Dico que les traduction qui seront "Dynamique" on va dire, c'est à dire pour la traduction du texte d'un message box, ou pour stocker des chaînes qui seront affecté à un composant en fonction d'une certaine condition.

    Ce qui veut dire que dans ton Form1.resx, tu doit avoir les traductions des Label & Cie (label1.Text pas exemple), et dans Dico, tu dois avoir des noms de chaine sans "." car sinon Visual n'aime pas.
    Là il te met un point d'exclamation car il cherche un composant qui porte ce dans la classe Dico.cs, alors qu'il n'existe pas, vu qu'on a créer que un fichier resource.

    Normalement un fichier resource est lié à une classe.

    Par contre il faut surtout pas que tu supprime tes fichiers ressources Form1.resx etc, sinon je pense que Visual Studio va être dans les choux :s

    En espérant que tu m'ai compris :s

    Je te le redis, mais n'hésite pas ^^

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

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