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

Windows Forms Discussion :

[C#] gestion multilingue


Sujet :

Windows Forms

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut [C#] gestion multilingue
    Bonjour,

    Je suis en C# sur VS2005 express sur framework 2.0
    J'ai fait une appli multilingue, je switch d'une langue à l'autre, tout fonctionne mais uniquement avec les composants graphiques (label, button etc..)

    Maintenant je veux ajouter des libellés à la main dans mon fichiers ressources (celui qui contient les libellés des boutons, label etc.. généré par VS2005) et y accéder depuis mon programme mais je n'y arrive pas.

    Je précise que j'ai lu le tutorial de morpheus.

    voilà la structure du projet (une class contenant une form + ressources)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    ImageRenamer.cs
    --ImageRenamer.Designer.cs
    --ImageRenamer.fr.resx
    --ImageRenamer.resx
    J'ai ajouter au 2 fichiers ressources une string :
    nom : zSimStart
    valeur (dans le defaultr) : Simulation start on {0}
    valeur (dans le fr) : Démarrage de la simulation sur le repertoire {0}

    J'essai maintenant de les récupérer par programme :
    private ResourceManager resourceManager = new ResourceManager("Xtream_ToolBox.ImagesRenamer", typeof(PhotosRenamerForm).Assembly);

    addLogs(String.Format(resourceManager.GetString("zSimStart"), imagesPathTextBox.Text));
    mais j'ai l'erreur suivante :
    Could not find any resources appropriate for the specified culture or the neutral culture. Make sure "Xtream_ToolBox.ImagesRenamer.resources" was correctly embedded or linked into assembly "Xtream's ToolBox" at compile time, or that all the satellite assemblies required are loadable and fully signed.
    y a donc un truc qui colle pas, et j'arrive pas à trouver quoi...

  2. #2
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Salut,

    Avec VS 2005 c'est encore plus simple que la méthode décrite par Morpheus.

    Quand tu localise une form, dans la methode InitialiseComponents de ta form tu as une nouvelle ligne qui apparait.


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(frmLogin));
    Après tu dois utiliser cette declaration pour justement appliquer les ressources aux composants que tu veux traduire.


    dans ta methode main, juste avant de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Application.Run(new form1());
    tu mets cette ligne qui te permets de changer de langue.:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr");

    Si c'est pas clair, dis moi je t expliquerais plus en détails si j ai le temps.
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    j'ai effectivement cette ligne dans la partie de ma classe généré par VS2005
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PhotosRenamerForm));
    Mais cette variable est déclarée au début de la méthode "InitializeComponent", elle est donc locale et ne peut servir dans le reste de la classe ou j'écrit mon code.

    Qu'a cela ne tienne, j'ai recopié la ligne au début de ma classe.
    private System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PhotosRenamerForm));
    ce qui me permet dans ma méthode de faire :
    addLogs(String.Format(resources.GetString("zSimStart"), imagesPathTextBox.Text));
    Je n'ai pas d'exception, il récupère bien la chaine "zSimStart" dans le fichier ressource mais il la prend dans le fichier de ressource par défaut et pas dans le localisé (fr) lors que je change la langue de mon appli (tout le reste de l'ihm bascule bien en fr, sauf les variables que je récupère via ressources.GetString).

    une idée ?

  4. #4
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    regarde si tu as bien changé la culture par défaut!!!



    as-tu mis cette ligne quelque part?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Threading.Thread.CurrentThread.CurrentUICulture = new System.Globalization.CultureInfo("fr");
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  5. #5
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    oui j'ai bien cette ligne, qui permet de changer la langue de mon application et qui fonctionne bien (en tout cas pour tout ce qui est composant graphique internationnalisé via l'IHM de VS2005). Il n'y a que sur les getString comme précisé ci dessus qu'elle ne semble pas fonctionner....

  6. #6
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    ah excuse j'ai pas bien lu ton post...

    en fait rien ne t'empeche de déclarer

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.ComponentModel.ComponentResourceManager resources = new System.ComponentModel.ComponentResourceManager(typeof(PhotosRenamerForm));
    en variable globale visible dans toute ta classe.

    au pire quand tu appelle GetString tu peux lui passer en paramètre la culture à utiliser...
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  7. #7
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    Désolé mais je vais te parler de mon pb en VS2003, tu verras si c'est le même en VS2005

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    private ResourceManager resourceManager = new ResourceManager("Xtream_ToolBox.ImagesRenamer", typeof(PhotosRenamerForm).Assembly);
    Ton pb est peut-être là : "Xtream_ToolBox.ImagesRenamer"

    Avec VS2003, j'ai créé un sous répertoire nommé Res, pour séparer les différents type de fichiers dans différents sous-répertoire.

    Après avoir fait ça, j'ai du écrire ca : "Xtream_ToolBox.Res.ImagesRenamer"

  8. #8
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    non rien à voir.. chez moi tout marche sans avoir à bidouiller les ressources....
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    bon, je comprend vraiment pas.
    Meme en passant la culture au getString, il prend toujours pas le bon.

    resources.GetString("zSimulationStart", new CultureInfo("fr"))
    j'ai virer les fichier temporaires (bin / obj), regénérer le tout au cas ou y aurai un probleme de cache ou autre mais rien n'y fait.

  10. #10
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    control si tu as bien un dossier par langue dans ton bin/release ou dans bin/debug???
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    j'ai trouvé !!!!

    Mon traitement se déroulant dans un BackgroundWorker, c'est un nouveau Thread auquel il faut réaffecter la culture. Il ne prend pas par défaut la culture qui avait été affecté au thread parent qui l'a créé.

    par contre j'ai un autre probleme.

    Les variables que j'ai rajoutées au fichier ressource au l'air de disparraitre dés qu'on touche à l'IHM via le designer de VS2005, ce qui pourrait m'obliger à faire un fichier de ressource à part de celui déja généré par le designer VS2005, ce qui m'arrange moyen.

  12. #12
    Expert confirmé Avatar de fregolo52
    Homme Profil pro
    Développeur C
    Inscrit en
    Août 2004
    Messages
    2 364
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur C

    Informations forums :
    Inscription : Août 2004
    Messages : 2 364
    Points : 5 378
    Points
    5 378
    Par défaut
    As-tu regardé si le designer supprime ou ne montre pas tes ressources ?

    En gros, quand tu édites le fichier de ressources dans IE (ou FireFox) est ce que toutes tes ressource sont là ou pas.

  13. #13
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    j'ai regardé, les ressources qui ne correspondent pas à un composant graphique du designer sont supprimées du fichier :-(

  14. #14
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    faut dire que y a un message plus ou moins explicite quand on ouvre un ressource associé à une Form :
    Vous essayez de modifier un fichier de ressources qui fait partie d'un autre élément de projet (par exemple un formulaire ou un controle). La modification de cet élément peut endommager l'élément de projet et vous devrez le récupérer manuellement. De plus, les modificatioins apportées à ce fichier ressources peuvent être perdues si d'autre modifications ont été apportées à l'élément du projet.
    donc en gros c'est "touche pas à ça p"tit con"... Alors comment faire ça proprement ?

  15. #15
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    bon j'ai trouvé en faisant différement.

    Puisqu'on ne peut pas utiliser les ComponentRessourceManager, j'utilise un RessourceManager simple.

    Comme je n'arrivais pas a lui faire manger un fichier ressource que je créé moi et que je plaçais à coté de ma classe .cs, je m'appuye sur le fichier ressource créé par défaut par VS2005 dans tout les projets.

    Il est dans le repertoire "Properties" et s'appel Ressources.resx
    j'ai ajouter une chaine dedans : nom : string1 valeur : test english
    J'ai duppliquer le fichier Ressources.resx en Ressources.fr.resx et j'ai mis comme valeur test french.

    Dans ma classe C#, je déclare le ressource manager comme suit :
    ResourceManager resources = Properties.Resources.ResourceManager;
    ensuite j'utilise :
    resources.GetString("string1")
    et cela fonctionne.

    Etant donné que j'avais déjà dans ce fichier ressource tout les icones de mon appli et que eux, ne sont pas différent entre français et anglais, j'ai supprimé tout les icones du fichier de ressource français, et C# est assez intelligent pour prendre les string dans le fichier français, et de continuer à prendre les images/icon dans le ressource par défaut (vu qu'il les trouve pas dans le .resx français).

    merci à tous!

  16. #16
    Candidat au Club
    Inscrit en
    Septembre 2006
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 5
    Points : 3
    Points
    3
    Par défaut
    Merci, ça peut servir!

    Dommage qu'on ne puisse pas créer son propre fichier de ressources, mais c'est déjà ça...

  17. #17
    Membre expérimenté Avatar de bossun
    Profil pro
    Inscrit en
    Novembre 2002
    Messages
    1 359
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : Suisse

    Informations forums :
    Inscription : Novembre 2002
    Messages : 1 359
    Points : 1 443
    Points
    1 443
    Par défaut
    Citation Envoyé par xtream
    j'ai trouvé !!!!

    Les variables que j'ai rajoutées au fichier ressource au l'air de disparraitre dés qu'on touche à l'IHM via le designer de VS2005, .

    tu ajoutes comment ces "variables"??? par programmation en mode exécution? ou par VS en mode édition de ton code???
    il vaut mieux prendre son pied que de se prendre la tête!!

    http://bossun.noxblog.com

  18. #18
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    73
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : France, Calvados (Basse Normandie)

    Informations forums :
    Inscription : Juin 2006
    Messages : 73
    Points : 58
    Points
    58
    Par défaut
    j'ajoutais ces variables dans visual studio en double cliquant sur le fichier ressource via l'interface de consultation/administration des fichiers ressource.

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

Discussions similaires

  1. [MySQL] gestion d'un site multilingue
    Par dedel53 dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 13/05/2007, 23h19
  2. Gestion multilingue et user control
    Par Radium133 dans le forum ASP.NET
    Réponses: 2
    Dernier message: 11/04/2007, 11h12
  3. [C#.NET] Gestion multilingue ?
    Par TheParadoX dans le forum Windows Forms
    Réponses: 1
    Dernier message: 12/10/2006, 15h51
  4. Delphi et gestion multilingue
    Par davels dans le forum Delphi
    Réponses: 2
    Dernier message: 06/09/2006, 13h29

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