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

VB.NET Discussion :

Charger son module à la demande


Sujet :

VB.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut Charger son module à la demande
    Bonjours à tous.

    Je voudrais tenter une application multilangue. J'ai vu l'excellent tuto : http://morpheus.developpez.com/localisationdotnet/ mais, à l'essai, c'est, pour l'instant, trop long et compliqué pour moi.

    D'autant que (pour ceux qui le connaissent) if faut sans cesse revenir sur la langue de la culture de base avant d'en choisir une autre. Par ex : Culture de base FR. Je veux voir ce que ça donne en EN puis en JA, il faut faire FR -> EN -> FR -> JA. Donc, semble-t-il, avec ma très très faible connaissance, il y a un détail qui cloche.

    J'ai donc pensé (et testé) un module qui regroupe toutes les variables et leur traduction : Public MainText as string = "Hello Word !"

    Mais il faut un module par langue (pour la traduction, le doc entier en français est traduit direct - merci Google). Reste qu'il n'est pas possible de charger les 12 modules ensemble. On se retrouverait avec 12 fois la variable MainText et ce serait la dernière lue qui aurait raison.

    Comment faire ?

    Bien sûr, tout cela pour éviter le fichier extérieur car là, effectivement, c'est du velours.

    J'ai entendu parler, sur le forum, de gens qui avaient tenté les classes (je suppose que c'est la même chose que je veux faire avec des modules...). Mais je ne vois pas, là non plus, comment les utiliser.

    Quelqu'un aurait une idée ?

    Merci d'avance.

    Cordialement.

    Whombat

  2. #2
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    C'est pas très clair tout ça pour moi.
    Tu n'as pas besoin de revenir au FR pour changer de langue.
    Il faudrait voir comment tu t'y es pris, je pourrais te montrer de mon côté comment j'ai fait.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut
    Merci de ta réponse. J'attendais une aide depuis des heures... Mais je travaille de nuit faut dire

    Peu importe le truc du FR, mais merci de m'avoir proposé ton aide. A moins que... A moins que je me sois totalement planté dans mon analyse. Bon, revoyons le film :
    J'ai télécharger le script d'exemple et je l'ai lancé avec VB 2010. Puis je suis allé voir comment c'était goupillé et effectivement c'était ce que j'avais compris du tuto. Pour une fois (je suis extrèmement débutant en Net et ça veut pas rentrer...) pour une fois disais-je le ramage correspondait au plumage. J'ai voulu voir si j'avais bien compris et j'ai recommencé avec une Form2 mais 4 radioButtons : FR, EN, AR et JA, pour les types de caractères of course...

    2 constatations : la première celle énoncée sur mon message précédent (j'affirme que j'ai exactement les mêmes lignes, augmentées de celles correspondant aux radioButtons de plus, bien sûr).

    La seconde c'est le travail que ça va me demander. Soit je fais une application localisable soit pas. Mais si oui, je veux avoir toutes (ou presque) les possibilités, tant qu'à faire. Mon appli contient, en boutons, textes et messages, sûrement 2500 à 3000 mots... Multipliés par 40 langues... Or, si j'ai bien compris, la traduction se fait feuille par feuille, donc langue par langue, et mot par mot.

    Je cherche plutôt à peaufiner mon fichier, ma feuille, ma class ou mon module (no se) en français et ensuite l'envoyer traduire par Google. en 10 minutes j'ai mes 40 langues. C'est autre chose.

    Voilà pourquoi je cherche à savoir s'il est possible de choisir son module (ou sa class mais là j'aurai besoin d'un conseil).

    Est-ce que ça va mieux comme ça ?

  4. #4
    Membre Expert
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Novembre 2010
    Messages
    793
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 35
    Localisation : France, Mayenne (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Novembre 2010
    Messages : 793
    Par défaut
    Pour tout ce qui est graphique tu peux gérer tes 40 langues graphiquement.
    Dans ta form, ton usercontrol, ou autre, tu as "langage"
    Il est en "Par défaut", si tu choisit un différent langage, et que tu modifies derrière un text, une position, une ancre, etc, ces modifications seront propres au langage que tu as choisit.
    Ensuite tu dois gérer tout ça avec un ressourcemanager.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
        Private rm_configure As System.Resources.ResourceManager = New System.Resources.ResourceManager("DMS.frm_configure", System.Reflection.Assembly.GetExecutingAssembly)
        Private rm_configure_messages As System.Resources.ResourceManager = New System.Resources.ResourceManager("DMS.frm_configure_msg", System.Reflection.Assembly.GetExecutingAssembly)
     
        Private EnglishCulture As CultureInfo = New CultureInfo("en-US")
        Private FrenchCulture As CultureInfo = New CultureInfo("fr-FR")
    "DMS" est le nom de mon projet, "frm_configure" est la nom de ma form

    A ton événement qui choisit la culture Française tu fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    System.Threading.Thread.CurrentThread.CurrentUICulture = FrenchCulture
    Ensuite tu dois traduire ta fenêtre :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    btn_validate.Text = rm_configure.GetString("btn_validate.Text")
            btn_cancel.Text = rm_configure.GetString("btn_cancel.Text")
    etc.
    Pour les messages là tu dois le gérer toi même, c'est le rôle de mon rm_configure_message, un fichier de ressource que j'ai ajouté manuellement à mon projet.
    Pour les différentes cultures tu dois manuellement créer les fichiers de ressource des différentes langues.
    Par exemple ici :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    frm_configure_msg.en-US.resx
    pour la culture en-US, pour la culture par défaut

    Du coup à l'affichage de tes messages tu fais par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MessageBox.Show(rm_configure_messages.GetString("msg_nameplate_printer_test_fail"), rm_configure_messages.GetString("ton_libellé"), MessageBoxButtons.OK, MessageBoxIcon.Error)
    Tous les messages que tu veux avoir il suffit de les ajouter dans tes fichiers de ressource de chaque langue.

    Je ne te cache pas que je n'ai as fait 50 applications dans différentes langues donc il y avait peut être un moyen de réduire mon code ou autre, mais j'éspère que ça va t'éclairer et que tu pourras t'inspirer de ça

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Mars 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 183
    Par défaut
    C'est exactement ce que j'ai fait, pas tout à fait avec le même code (je me suis aidé de celui du tuto, je ne vous connaissais pas...) et, au final, pour 40 langues il va me falloir déjà 6 mois pour rentrer un vrai dictionnaire.

    Le fichier externe est d'une simplicité déconcertante. Inconvénient, si l'utilisateur le perd ou le modifie, tout risque d'être par terre. Encore que, il suffit de prévoir une soupape de sécurité dans le code (inviolable donc). Inconvénient également, jusqu'à présent on ne pouvait pas y mettre des caractères arabes ou japonais.

    Le grand intérêt de la fonction du FrameWork c'est de prendre en compte les caractères Unicode (islandais, grecs, arabes, chinois et autres...). Mais Word le fait très bien (aujourd'hui). Cependant, là aussi je suis coincé, si j'ai trouvé pléthore de scripts sur les différentes façons d'ouvrir un fichier Word, je n'en ai pas trouvé un seul, pas un (!!!), qui me dise comment lire les lignes. Alors je n'ai pas essayé avec le classique StreamRead mais si vous avez tenté de voir avec le notePad comment se présente un fichier Word... C'est assez fou.

    Je ne suis pas assez naïf pour croire que Microsoft ne sait pas lire du Microsoft, seulement j'aimerai bien savoir comment. Et là, ce sera du velours...

    Mais, je manque à tous mes devoirs, merci infiniment pour votre aide. En plus j'y ai appris des choses (les commentaires sont très clairs, merci). On sent que vous maîtrisez votre sujet.

    Pour le Word, si vous avez une idée... Elle sera plus que la bien venue.

    Là, pour l'instant (si je n'abuse pas) je me heurte à un truc de fou :

    J'ai 2 form, form1 et form2. Sur la form2 j'ai un Public Sub MaSub(ByVal MaVal as string)
    Sur la form1 je fais MaSub("Coucou") et VB me refuse la ligne : Ce n'est pas déclaré...

    J'ai tout contrôlé, je ne vois pas où j'aurais pu me tromper. J'ai essayé : form2.MaSub("Coucou") encore plus refusé. Je suis largué !

    On peut accéder à la Sub d'une autre form alors que se passe-t-il ? No se.

    De toutes façon, re re et re-merci pour votre aide.

    Sans réponse cet après-midi, je suppose que ceux qui sont passés sèchent comme moi (du moins certains...).

    J'ai un tuyau qui est un bon départ : (c'est pas la totalité du problème mais ça met sur la voie : http://visualbasic.about.com/od/usin.../aa080703a.htm

    Pour le reste, je suis sec...

    Suite du message précédent...

    En fait, l'adresse est bonne mais ne pointe pas sur la page exacte. Il faut donc faire, dans Google ; VB .Net Application Multi Forms'

    Puis, sur la page des résultats qui arrivent, cliquer sur : ' Gestion des formulaires - VB . NET style '

    Et là on obtient la bonne page, sur l'adresse donnée dans le message précédent.

    Oualà.

  6. #6
    Membre extrêmement actif
    Inscrit en
    Avril 2008
    Messages
    2 573
    Détails du profil
    Informations personnelles :
    Âge : 65

    Informations forums :
    Inscription : Avril 2008
    Messages : 2 573
    Par défaut clases et controles
    bonjour whombat
    A propos des applications à plusieurs formes......
    Apparemment tu n'as pas encore assimile la notion de type et plus encore la notion de classe....
    Sache en complement de ce que je t'ai dit dans un post precedent qu'l y a lieu lorsque on manipule des variables en .net de distinguer 2 grandes categories :
    -les types valeurs: ce sont ceux que nous manipulons habituement en math....integer,double.....
    -les types classes : string ,char ,les controles entres autres y compris monsieur le Form. et les classes de notre propre cru.
    Pour utiliser un type valeur il faut et il suffit de le declarer(CNS)...
    Pour utiliser un type classe il faut le declarer mais de plus il est necessaire de l'instancier par New ...Alors gare à l'utilisation des 2 sortes de type.....
    Si j'ose dire pour le type classe: Dieu le pere a cree la classe Adam et Eve(les 2 types) mais combien d'instances d'Adam comme toi et moi il lui a fallu creer pour peupler sa creation.
    Il fallait à chaque fois qu'il dise "new " c.à.ad soit mabrouki, soit whombat(New ) pour que nous fumes ........
    Et nous avons des membres comme en vb.net les classe ont des membres... voici les etapes : 2 formes avec chacun un bouton .Le Form2 instancie le Form1....copie et colle le code.....
    code exemple:
    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
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
     
     
    'la classe Form1.Eh oui voici une classe gratis fournie par VB.Net 
    'Portee :public
    'peut etre "instancie" dans n'importe quels Forms (je mets un "s" expres) de ce projet
    Public Class Form1
    	' Declaration d'abord....
    	' Variable privee "membre" ou "enfant"  de la classe Form1 de type Valeur .
    	Private nb As Integer
     
    	' Variable privee "membre" ou "enfant"  de la classe Form1 
    	' de type Control=Classe mais visuelle s.v.p.
    	Private myTextBox1 As TextBox
     
    	' Variable privee "membre" ou "enfant"  de la classe Form1 de type Classe non visuelle s.v.p.
    	Private myPersonne As Personne
     
    	' Declaration d'abord....
    	' Sub statut "private" à usage interne exclusif de Form1 
    	Private Sub methodInterne(ByVal monParamatre As String)
    		MessageBox.Show(monParamatre)
    	End Sub
    	' Sub statut "public" reservee à usage externe Form1 
    	Public Sub methodExterne1(ByVal monParamatre As String)
    		MessageBox.Show(monParamatre)
    	End Sub
    	'Utilisation 
    	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    		'Affectation
    		nb = 10
     
    		'Instancier.Obligatoire(le soit de Dieu le Pere)
    		myPersonne = New Personne
    		'Affectation 
    		myPersonne.nom = "Olé..."
    		myPersonne.prenom = "Jose..."
    		myPersonne.age = "50"
     
    		'Obligatoire
    		myTextBox1 = New TextBox	'whombat soit et il fut
    		myTextBox1.Multiline = True
    		'Pour les "visuels" il faut qu'il soit ajoutes à la collection Controls de Form.
    		myTextBox1.Location = New Point(100, 100)
    		myTextBox1.Size = New Size(150, 50)
    		Me.Controls.Add(myTextBox1)
     
    		'Affectation (remarque le point pour les membres) 
    		myTextBox1.Text = myPersonne.nom & " " & myPersonne.prenom & " " & myPersonne.age.ToString
    	End Sub
    End Class
    'Portee :public =>
    'peut etre  "instancie" dans n'importe quels Forms (je mets un "s" expres) de ce projet
    Public Class Personne
    	'Declaration d'abord....
    	'3 membres "publics" de la classe Person  
    	Public nom As String
    	Public prenom As String
    	Public age As Integer
    End Class
     
    'la classe Form2 va utiliser Form1.
    'La mettre comme form de demarrage
    'Portee :public
    Public Class Form2
    	'Declaration d'abord....
    	Private myTextBox1 As TextBox
    	Private myForm As Form1
    	Private myPersonne As Personne
     
     
    	Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
    		'Instancier.Obligatoire
    		myPersonne = New Personne
    		'Affectation 
    		myPersonne.nom = "autre instance Olébis..."
    		myPersonne.prenom = "Josebis..."
    		myPersonne.age = "60"
     
    		'Obligatoire
    		myTextBox1 = New TextBox
     
    		'Pour les "visuels" il faut qu'il soit ajoutes à la collection Controls de Form.
    		myTextBox1.Location = New Point(100, 100)
    		myTextBox1.Multiline = True
    		myTextBox1.Size = New Size(150, 50)
    		Me.Controls.Add(myTextBox1)
     
    		'Affectation
    		myTextBox1.Text = myPersonne.nom & " " & myPersonne.prenom & " " & myPersonne.age.ToString
     
    		'Instancier.Obligatoire
    		myForm = New Form1
    		'utilise l'instance myForm
    		' methode publique de myForm 
    		myForm.methodExterne1("coucou !")
    		'affiche myForm grace à sa methode intrinseque publique show
    		myForm.Show()
    	End Sub
    End Class
    Quant à l'automatisation des resources si tu as 40 langues ou bien tu te les tapes à la main ou bien il existe des logiciels -payants- axialis,infralution- qui automatise la traduction des resources encore que la traduction n'etant pas humaine ,il faut la verifier......c.à.d la lire ......ce qui egalement prends un delai............... Il y a là nettement un probleme de cout....
    Une autre solution c'est google api ,tu te connecte et tu traduis le fichier .resx de chacun de tes forme neutral....
    regarde ici sur le site codeproject ou un gars a mis une petite appli qui se connecte à google api ,parcours le fichier .resx saisi et le traduis dans la ou les 40 langues de ton choix en un clic...
    lien:
    http://www.google.fr/url?sa=t&source...PBnWp7vLcjRkhw

    Quant à les mettre en memoire ,c'est penalisant pour la gestion memoire de l'appli et ca necessitera un temps de codage equivalent à celui de la traduction que tu as fuis........Ne te fourvoie pas .....mon ami.
    Ensuite les fichiers .resx distribues sont des fichiers binaires .dll, non lisible humainement......
    bon code................

Discussions similaires

  1. [Installation] Charger le module mysql
    Par arcane dans le forum Apache
    Réponses: 4
    Dernier message: 15/11/2006, 12h54
  2. [Installation] Problème pour charger les modules
    Par PierrotY dans le forum Apache
    Réponses: 2
    Dernier message: 19/07/2006, 10h09
  3. créer son module?
    Par Jim_Nastiq dans le forum Modules
    Réponses: 4
    Dernier message: 24/05/2006, 11h04
  4. Charger un module automatiquement avec des options debian
    Par ZiMo dans le forum Administration système
    Réponses: 4
    Dernier message: 22/12/2005, 14h22
  5. [py2exe] Impossible de charger un module...
    Par Mr Hyde dans le forum Py2exe
    Réponses: 3
    Dernier message: 28/09/2005, 17h17

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