Salut, alors voilà une classe *.cls et un éditeur de langue (avec une option Google ^^) qui permettent de gérer plusieurs langues dans un projet. Leur utilisation est vraiment ULTRA simple.
Mon code est déjà présent sur ce site, mais c'est une version USERCONTROL.
M'étant aperçu d'un bug avec un gros projet (mon UserControl a changé la langue dans l'IDE !!), j'ai décidé de refaire une version AVEC UNE CLASSE.
Plus léger, donc, et ne nécessite qu'une ligne de code de plus.
J'ai en mêem temps légèrement retouché le code (changé la syntaxe + allégé l'éditeur de langue).
Si vous pensez que cela ne justifie pas une deuxième source, faites moi signe et je supprimerai une des deux...
Mais bon, c'est aussi pour l'éditeur de langue que je poste (il n'était qu'une MAJ de la précédente source).
POUR COMPRENDRE LE FONCTIONNEMENT, MERCI DE TOUT LIRE. DE PLUS, UN EXEMPLE TRES DETAILLE EST DONNE DANS LE FICHIER *.ZIP.
Tout d'abord, pourquoi ce code ?
==> parce que j'ai déjà un projet assez lourd, c'est à dire beaucoup de form, de controles, de menus (là c'est affreux !), de listbox pleines de string rentrée directement dans l'IDE...etc
Donc créer un fichier *.ini (moi même) qui contient les Captions, Text, Item, Tooltip... de tous mes controles/form/menus aurait été du suicide ! D'où l'idée de créer un code qui permettrait d'automatiser cela. Peut être que çà existe déjà, aucune idée, mais de toutes façons je voulais tout coder moi même ;)
Le principe du code est bien sur basé sur les fichiers *.ini.
Le but ?
==> Ce code permet de changer automatiquement toutes les propriétés Caption, Text, ToolTipText des composants standarts (label, commandbutton, textbox, optionbutton, checkbox, form, menus, frame, tab, listview... mais aussi combobox et listbox ==> sauvegarde des items si l'on le souhaite, voir exemple dans zip pour comprendre). De plus, les composants indexés sont supportés.
Donc en gros, un appel à une méthode de la classe se charge d'accéder au fichier *.ini et de changer toutes les propriétés.
Evidemment, il est également aussi possible de stocker des string dans le fichier *.ini, et de les rappeler par la suite (traduites), par exemple pour afficher un msgbox.
Ensuite, comment s'en servir ?
==> c'est une classe à ajouter à votre projet.
Ses propriétés sont :
-LangFolder (c'est le dossier qui contiendra les fichiers de langue)
-Language , c'est une string qui conient le nom de la langue (si Usercontrol.Language="French", il faut qu'il existe un fichier French.ini dans le dossier LangFolder)
Ses méthodes sont :
-AddSimpleStringToFile : permet d'ajouter une string (désignée par un ID string) au fichier *.ini. A n'utiliser que dans l'IDE (pas très utile)
-GetString : permet de récupérer une string à partir de son ID (string)
-LoadControlsCaption : permet d'appliquer à la form qui contient le UserControl la traduction ; affecte à chacun des composants supportés les traductions des propriétés supportées
-WriteIniFileFormIDEform : voilà ce qui fait gagner du temps, cette fonction créé le fichier *.ini de la langue dans laquelle la form est conçue. Donc si vous avez une form déjà pleine de controles/menus..., alors vous avez juste à appeler cette fonction pour créer automatiquement le fichier *.ini avec toutes les sections nécessaires.
-ActiveLang ==> permet de lancer l'activation du changement de langue. Prend en paramètre la form qui a besoin d'être traduite.
Un event également :
-LanguageChanged (donc déclarer la classe en WithEvents pour en profiter...)
Rien compris ? ==> ok, c'est pour çà qu'il y a un exemple ultra-commenté dans le fichier *.zip ;)
EDITEUR DE LANGUE
Ce projet inclut également un éditeur de langue pour permettre de créer tranquillement des fichiers de langue sans mettre la main dans les fichiers *.ini ;)
Cet éditeur est lui même traduit en 2 langues (anglais + français) pour être distribué tel quel et être compris par le plus grand nombre.
Cet éditeur inclut une fonctionnalité qui permet de créer un fichier de langue A PARTIR DE LA TRADUCTION GOOGLE, en 3 coups de souris (mais ne marche pas avec l'espagnol à cause du '&').
Si google est capricieux avec la traduction (si le résultat de la traduction est identique au texte à traduire), relancez là plusieurs fois en rechoisissant le type de traduction (par ex. de Eng --> Ita) il çà finira par marcher.
Fonctionnement :
1) Choisir un modèle, c'est à dire un fichier de langue déjà existant (l'anglais étant le mieux)
2) Créer votre fichier de langue en traduisant dans la colonne de gauche les textes de droite (ou alors ouvrez un fichier de langue existant à modifier)
3) Sauvegarder votre nouveau fichier de langue
Vous pouvez également 'Copier le modèle dans le presse papier', coller dans google traduction, copier le résultat traduit, et 'Insérer depuis le presse papier' pour récupérer une version traduite par google.
Il est (très fortement) conseillé de faire une traduction depuis le modèle anglais (meilleurs résultats sous google).
-------------------------------
CONTROLES SUPPORTES
-------------------------------
Label (caption), TextBox (text), OptionButton (caption), CheckBox (caption), CommandButton (Capion), Frame (caption), ListBox (les items contenus dans la listbox), Combobox (idem que listbox), Menu (caption), Form (caption), TabStrip (Caption des Tabs), ListView (ColumnHeader).
Et aussi, la propriété ToolTipText de chaque controle.
Egalement, sont supportés tous les composants indexés.
-------------------------------
FONCTIONNEMENT DU CODE
-------------------------------
APIs de lecture/écriture dans les fichiers *.ini, et TypeOf [controle] pour tester chaque type de controle.
On error resume next barbare, je sais, mais c'est beaucoup plus simple comme çà (sinon énooooormément d'erreurs à gérer).
-------------------------------
COMMENTAIRES
-------------------------------
Je suis content du résultat (je ne me prononce pas sur le code, mais sur le résultat final) ==> je trouve que c'est très très simple de faire une traduction de son programme avec mon usercontrol ! ;)
De même, ayant utilisé la version UserControl depuis un moment sur un gros projet (45 form, fichier *.ini de 100Ko), je peux dire que çà ne rame pas du tout !
Bugs, commentaires, n'héistez pas ! Et notez aussi (çà prend 2s ^^).
Source / Exemple :
'code à ajouter dans le form_load :
'on instancie la classe
Set Lang = New clsLang
'active le changement de langue
'Ce code est obligatoire !!
Call Lang.ActiveLang(Me)
'ne pas oublier de libérer dans le form_unload
Private Sub Form_Unload(Cancel As Integer)
Set Lang = Nothing
End Sub
'ajout d'une string en brut dans le fichier *.ini
'Bon, il est plutot conseillé d'éditer le fichier *.ini hors du code ^^
Lang.AddSimpleStringToFile "MonMotCle", "Salut tout le monde !"
'switch basique de langue
If Lang.Language = "French" Then
Lang.Language = "English"
Else
Lang.Language = "French"
End If
'récupéraion d'une valeur traduite
'MonMotCle désigne un identifiant unique qui détermine ma string.
MsgBox Lang.GetString("_MonMotCle")
'création automatique de la version francaise (ou du moins de la version de l'IDE)
Lang.WriteIniFileFormIDEform
Conclusion :
Mon code est déjà présent sur ce site, mais c'est une version USERCONTROL.
M'étant aperçu d'un bug avec un gros projet (mon UserControl a changé la langue dans l'IDE !!), j'ai décidé de refaire une version AVEC UNE CLASSE.
Plus léger, donc, et ne nécessite qu'une ligne de code de plus.
J'ai en mêem temps légèrement retouché le code (changé la syntaxe + allégé l'éditeur de langue).
Si vous pensez que cela ne justifie pas une deuxième source, faites moi signe et je supprimerai une des deux...
Mais bon, c'est aussi pour l'éditeur de langue que je poste (il n'était qu'une MAJ de la précédente source).
@+
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.