Creer une application multilingue tres facilement + editeur de langue (v2, classe)

Soyez le premier à donner votre avis sur cette source.

Vue 12 557 fois - Téléchargée 1 748 fois

Description

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).

@+

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_dekdek
Messages postés
1
Date d'inscription
lundi 24 avril 2006
Statut
Membre
Dernière intervention
12 avril 2010

Merci beaucoup pour cette source!
Je viens des environement VB.net et C# du coup elle va m'être très utils pour mon stage qui se déroule en VB6!
Je dois faire l'i18n de leur application et grâce à toi je vais gagner pas mal de temps!
Source complète et en plus super bien commenté :) d'ou mon 10/10


Juste une question pourquoi tu mets toujours la ptté ToolTipText pour chaque composant? Raison particulière?
Philippe222
Messages postés
6
Date d'inscription
mercredi 21 décembre 2005
Statut
Membre
Dernière intervention
26 juillet 2009

La note ! Pardon !
Philippe222
Messages postés
6
Date d'inscription
mercredi 21 décembre 2005
Statut
Membre
Dernière intervention
26 juillet 2009

Avec qq modifs j'ai utilisé sans pb le programme de VK. J'obtiens un fichier INI de plusieurs ko de toutes mes "forms".

J'utilise une variable de compilation conditionnelle. Au chargement de la première feuille (et si la variable de compil est OK), je fais défiler toutes les autres et je récupère tous les textes de l'IHM

Par contre, j'ai plusieurs dizaines de msgbox à traiter de la même façon, mais dans le code et pas dans l'IHM. Pas compliqué à faire avec la classe mise à dispo par VK. On peut bâtir un pgm qui lit ces textes de mon pgm et les classe dans le fichier INI, toutefois leurs déclarations risque de prendre pas mal de temps.

Vu qu'autrement, c'est pire, je vais continuer ainsi.

Si vous avez une meilleure astuce, je suis preneur.

Sinon, pour tout ce qui pu être fait chez moi, je sais que déjà cela vaut 10/10. félicitations à VK.
Renfield
Messages postés
17286
Date d'inscription
mercredi 2 janvier 2002
Statut
Modérateur
Dernière intervention
23 décembre 2019
61
C'est bien ainsi qu'il faut jouer...

y'a certaines choses, qu'on ne peut faire qu'avec un On Error
cs_ABF
Messages postés
227
Date d'inscription
samedi 21 mai 2005
Statut
Membre
Dernière intervention
26 avril 2012

Pour ma part j'ai fait :

Function isGroupe(ByRef obj As Object) As Boolean
On Error Resume Next
isGroupe = (obj.Index > -1)
End Function

comme tu dis Renfield mais c'est pas très beau d'ou ma question ;)

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.