Creer une application multilingue vraiment tres facilement (+ editeur de langue)

Soyez le premier à donner votre avis sur cette source.

Vue 13 272 fois - Téléchargée 1 814 fois

Description

Salut, alors voilà un UserControl (+ un éditeur de langue dans le zip) qui permet de gérer plusieurs langues dans un projet. Son utilisation est vraiment ULTRA simple.

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 directelebt 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, 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 au usercontrol 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 un usercontrol à placer dans votre form.
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
-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.

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 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
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
4) Vous pouvez '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 assez 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 ! ;)

Bugs, commentaires, n'héistez pas ! Et notez aussi (çà prend 2s ^^).

Source / Exemple :


'ajout d'une string en brut dans le fichier *.ini
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 :


Commentaires et note svp !

J'ai implanté cet UserControl dans mon projet, et le résultat est bon : j'ai 41 forms, des fichiers *.ini de 60Ko chacun, et le temps mis pour ouvrir une langue (à chaque Form_Load) est négligeable (passe inaperçu) ==> c'est cool !

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

génial tout simplement génial
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

ta source est vraiment super, bravo !!!

j'ai egalement apprécié l'ajout du support SSTab, mais celui ci ne semble par marcher.
la mise ne oeuvre a été d'ajouter les bouts de code à la fin de ta précédente source
mais sans résultats.
le fait de désactiver le "On error resume next", fait planter le programme avec une erreur tableau.

as tu des infos ?

merci par avance
Messages postés
17
Date d'inscription
lundi 19 avril 2004
Statut
Membre
Dernière intervention
4 avril 2007

Bonjour à tous,
J'ai ajouté le support des SSTab (voir code ci-dessous a ajouter au ctrl). Par contre je bute sur le TreeView. En effet j'ai ajouté la ligne "If TypeOf Obj Is TreeView Then" mais le treeview n'est pas détecté, donc ne passe pas dans la boucle. Si quelqu'un a une idée...



Public Sub LoadControlsCaption()

If TypeOf Obj Is SSTab Then
'on prend les captions des tab

'vérifie que le tag est Ok
If InStr(1, Obj.Tag, "lang_ok", vbBinaryCompare) Then
'c'est bon, ol loade

'récupère le nombre d'éléments
Y = Val(Me.GetString(s & "|Count"))

'ajoute les éléments
For X = 0 To Y
Obj.TabCaption(X) = Me.GetString(s & "|Item" & Trim$(Str$(X)))
Next X

End If

End if

End Sub

'=========================================================================================
Public Sub WriteIniFileFormIDEform()

If TypeOf Obj Is SSTab Then

'vérifie que le Tag est OK
If InStr(1, Obj.Tag, "lang_ok", vbBinaryCompare) Then
'c'est bon, on sauvegarde

'récupère le nombre d'éléments
LetPref mParent.Name, s & "|Count", Obj.Tabs.Count, sFile
Y = Val(Me.GetString(s & "|Count"))

'ajoute les éléments
For X = 0 To Y
LetPref mParent.Name, s & "|Item" & Trim$(Str$(X)), Obj.TabCaption(X), sFile
Next X

End If

End if

End Sub
Messages postés
1822
Date d'inscription
mardi 31 mai 2005
Statut
Membre
Dernière intervention
26 octobre 2010

Bonjour, oui, mon OCX peut supporter autant de langues que souhaité.
@+
Messages postés
239
Date d'inscription
mercredi 9 octobre 2002
Statut
Membre
Dernière intervention
20 février 2012

Bonjour,

Désolé j'ai pas lu tous les posts, mais ton ocx peut il supporter plus de 2 langues?
Afficher les 41 commentaires

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.