Module language pack (chargement , creation, traduction)

2/5 (2 avis)

Vue 8 005 fois - Téléchargée 609 fois

Description

Ci joint un module pour créer et gérer les languages dans son appli !!!

Je joint un zip pour exemple d'utilisation mais cela reste trés simple !!

Aprés avoir creé l'appli , il suffit de lancer cette commande :

EcritLng LaForm, chemin du fichier
ex : EcritLng Me, App.Path & "/French.lng"

A faire pour chaque form !!!

ça créer un fichier "ini" avec extention "Lng" et pour chaque Section la propriétée Name de la form concerné, dans cette section il y a la propriétée name des controles avec le texte a afficher!!!

Ensuite pour charger le language de la form par exemple :
(Dans le load de la form)
ChargeLng Form1, App.Path & "/French.lng"

Il y aussi un fonction pour traduire le fichier directement depuis le soft, mais ça revient au mm que de traduire le fichier lng de base du Français vers l'anglais par exemple.

Pour l'utiliser :
TraduireLng Form1, App.Path & "/Anglais.lng"

Ca ouvre pour chaque controle une inputbox qui demande le texte a ecrire dans le fichier lng...

Voila c'est tous simple et ça me fait gagner pas mal de temps!!!! Donc je la post ici afin peu étre, de vous en faire gagner aussi!!!!

Source / Exemple :


Dim Controle As Control
Dim TypeCtrl As String

Public Declare Function GetWindow Lib "user32" (ByVal hwnd As Long, ByVal wCmd As Long) As Long
Public Declare Function ShowWindow Lib "user32" (ByVal hwnd As Long, ByVal nCmdShow As Long) As Long

Public Const SW_HIDE = 0
Public Const GW_OWNER = 4

Private Declare Function GetPrivateProfileString Lib "kernel32" Alias "GetPrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpDefault As String, ByVal lpReturnedString As String, ByVal nSize As Long, ByVal lpFileName As String) As Long

Private Declare Function WritePrivateProfileString Lib "kernel32" Alias "WritePrivateProfileStringA" (ByVal lpApplicationName As String, ByVal lpKeyName As Any, ByVal lpString As Any, ByVal lpFileName As String) As Long

Function LireINI(Entete As String, Variable As String, Fichier As String) As String
    Dim Retour As String
    Retour = String(255, Chr(0))
    LireINI = Left$(Retour, GetPrivateProfileString(Entete, ByVal Variable, "", Retour, Len(Retour), Fichier))
End Function

Function EcrireINI(Entete As String, Variable As String, Valeur As String, Fichier As String) As String
     WriteINI = WritePrivateProfileString(Entete, Variable, Valeur, Fichier)
End Function

Public Function EcritLng(Feuille As Form, Strpath As String)
EcrireINI Feuille.Name, Feuille.Name, Feuille.Caption, Strpath

For Each Controle In Feuille.Controls
    TypeCtrl = TypeName(Controle)

    Select Case TypeCtrl
    
    Case "Label"
    EcrireINI Feuille.Name, Controle.Name, Controle.Caption, Strpath
    
    Case "TextBox"
    EcrireINI Feuille.Name, Controle.Name, Controle.Text, Strpath
    
    Case "CommandButton"
    EcrireINI Feuille.Name, Controle.Name, Controle.Caption, Strpath
    
    Case "CheckBox"
    EcrireINI Feuille.Name, Controle.Name, Controle.Caption, Strpath
    
    Case "OptionButton"
    EcrireINI Feuille.Name, Controle.Name, Controle.Caption, Strpath
    
    Case "Menu"
    EcrireINI Feuille.Name, Controle.Name, Controle.Caption, Strpath
    
    Case "Frame"
    EcrireINI Feuille.Name, Controle.Name, Controle.Caption, Strpath
    End Select

Next

End Function

Public Function ChargeLng(Feuille As Form, Strpath As String)
Feuille.Caption = LireINI(Feuille.Name, Feuille.Name, Strpath)
For Each Controle In Feuille.Controls
    TypeCtrl = TypeName(Controle)
    
Select Case TypeCtrl
    Case "Label"
    Controle.Caption = LireINI(Feuille.Name, Controle.Name, Strpath)
    
    Case "TextBox"
    Controle.Text = LireINI(Feuille.Name, Controle.Name, Strpath)
    
    Case "CommandButton"
    Controle.Caption = LireINI(Feuille.Name, Controle.Name, Strpath)
    
    Case "CheckBox"
    Controle.Caption = LireINI(Feuille.Name, Controle.Name, Strpath)
    
    Case "OptionButton"
    Controle.Caption = LireINI(Feuille.Name, Controle.Name, Strpath)
    
    Case "Menu"
    Controle.Caption = LireINI(Feuille.Name, Controle.Name, Strpath)
    
    Case "Frame"
    Controle.Caption = LireINI(Feuille.Name, Controle.Name, Strpath)
    End Select
Next
End Function

Public Function TraduireLng(Feuille As Form, Strpath As String)

Dim Tmp As String
Tmp = InputBox("Caption de : " & Feuille.Caption)
EcrireINI Feuille.Name, Feuille.Name, Tmp, Strpath

For Each Controle In Feuille.Controls
    TypeCtrl = TypeName(Controle)

    Select Case TypeCtrl
    
    Case "Label"
    Tmp = InputBox("Caption de : " & Controle.Caption, "Label")
    EcrireINI Feuille.Name, Controle.Name, Tmp, Strpath
    
    Case "TextBox"
    Tmp = InputBox("Text de : " & Controle.Text, "TextBox")
    EcrireINI Feuille.Name, Controle.Name, Tmp, Strpath
    
    Case "CommandButton"
    Tmp = InputBox("Caption de : " & Controle.Caption, "Bouton de commande")
    EcrireINI Feuille.Name, Controle.Name, Tmp, Strpath
    
    Case "CheckBox"
    Tmp = InputBox("Caption de : " & Controle.Caption, "CheckBox")
    EcrireINI Feuille.Name, Controle.Name, Tmp, Strpath
    
    Case "OptionButton"
    Tmp = InputBox("Caption de : " & Controle.Caption, "Bouton d'option")
    EcrireINI Feuille.Name, Controle.Name, Tmp, Strpath
    
    Case "Menu"
    Tmp = InputBox("Texte de : " & Controle.Caption, "Menu")
    EcrireINI Feuille.Name, Controle.Name, Tmp, Strpath
    
    Case "Frame"
    Tmp = InputBox("Texte de : " & Controle.Caption, "Frame")
    EcrireINI Feuille.Name, Controle.Name, Tmp, Strpath
    
    End Select

Next
End Function

Conclusion :


Ps : Pas de capture d'écran : ça sert a rien tous est expliqué en commentaire!!! mais je joint la Src avec un Exemple d'utilisation.

Je n'ai pas gérer le contenu des listbox car dans mon soft je charge des données d'un fichier externe , mais il est facile de rajouter le code afin de les gérer!!!

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

shadowmoy
Messages postés
340
Date d'inscription
jeudi 25 juillet 2002
Statut
Membre
Dernière intervention
25 août 2007
-
c'est simple mais pas tres rapide g deja testé plusieurs solutions dont celle ci dans de grosse applis et le mieux reste de definir un tableau de message que tu save/load en binaire ce qui te permet de le remplacer instantanement via un copymemory d'un buffer vers ton tableau apres tu cree un petit prog qui te permet de cree tes fichiers de langages et le tour et jouer :)
en gros c'est un peu comme des ressources externes avec uniquement des chaines de charactere ...
stumpy
Messages postés
27
Date d'inscription
mercredi 1 janvier 2003
Statut
Membre
Dernière intervention
22 novembre 2004
-
c'est assez pratique oui.
J'utilise aussi ce systeme dans mes applications.

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.