begin process at 2012 02 17 10:43:30
  Trouver un code source :
 
dans
 
Accueil > 

Tutoriels

 > 

Trucs & Astuces

 > APPLICATION MULTILINGUE CHOIX USAGER.

APPLICATION MULTILINGUE CHOIX USAGER.


 Information sur le tutoriel

Note :
Aucune note

 Description

Permettre à un usager de choisir un language d'application différent de celui par défaut du système.
Plus permettre des mises à niveaux plus faciles, ne demandant que de télécharger un seul fichier.

Tutorial

APPLICATION MULTILINGUE CHOIX USAGER.

Pour permettre la possibilité de choix à l'usager et rendre les mises à niveaux facile, if faut utiliser un ficher type CSV L'extension n'a pas d'importance car ce fichier sera lu comme un bloc binaire. Mais avoir un fichier CSV permettra l'ouverture dand un tableur pour modifications ultérieures.

Voici un exemple du contenu d'un tel ficher:

ctrlID,Francais;Anglais[vbCRLF]
btnOK,Accepter;OK[vbCRLF]
btnCancel,Canceller;Cancel[vbCRLF]
btnSuivant,Suivant;Next (fin de fichier, pas de vbCRLF)

Pour en extraire la structure (parsing) il faut ouvrir le ficher en binaire.
' ============================================
' Idéalement mettre ce block dans une fonction...
' ============================================
Dim nFh as Integer, lngLen as Long
DIM strBuffer as String
nFh = FREEFILE
lngLen =Filelen("lang.dat")
Open "lang.dat" for BINARY as #nFh
strBuffer= String$(lngLen,"0") ' remplir avec des zeros.

Get #nFh,,strBuffer ' le paramètre vide veut dire commencer au début.
' lire en un coup: rapide.

Close #nFH ' important
Dim strLines() as string ' définir comme un array dynamique
strLines = Split(strBuffer,vbCRLF)

'Cet array contiendra autant de string distinctes qu'il y avait de lignes dans le CSV.

Dim i as Integer, k As Integer
Dim nLo as Integer
Dim nHi as Integer
Dim strOneLile() as String

On error Resume Next ' au cas out strLines ne serait pas initialisé
nLo = LBound(strLines) ' toujours vérifier les index possibles.
nHI = UBound(strLines)
if Err.Number<> 0 Then Exit Sub

Dim blnFound as Boolean
' Mettre ceci dans un module au cas ou il y aurait plusieurds formes.
Public arrGlobal() as String
Public nIndex as Integer ' Index unique pour indiquer laquelle colonne sélectionner
Public nNumLanguage as Integer
strOneLine = Split(strLines(0),";")
' il faut détecter combien il y a de langues.
' et pour fixer les limites des index d'array...sinon runtime Error: index out of bound
nNumLanguage = UBound(strOneLine) - LBound(strOneLine) + 1
' Ceci donnera un nouvel array contenant la structure suivante:
' "ctrlID" = strOneLine(0)
' "Francais" = strOneLine(1)
' "Anglais" = strOneLine(2)
' "Autre langue dans le futur

' Détecter et fixer ici l'index de la langue à utiliser
For k = LBound(strOneLine) to UBound(strOneLine) Step 1
if strOneLine(k) = "Francais" Then - selon le choix de l'usager.
nIndex = k ' Ex.: Francais serais l'index 1
blnFound = True
Exit For ' Inutile de continer
End If
Next k
' il serait prudent de mettre ici un language par défaut si le choix sélectionné dans le INI file n'est pas trouvé.
If Not blnFound Then
nIndex = 1 ' celui du language original par défault.
End If
' ============================================
' Fin de fonction
' ============================================
' Nous avons maintenant l'index du language à utiliser.
' Il faut maintenant remplir l'array qui donnera les mots exacts pour touts les controles

Redim arrGlobal(nLo to nHi)
Redim arrID(nLo to nHI)

For i=nLo to nHi Step 1
strOneLine = Split(strLines(i),",")
arrGlobal(i) = strOneline(nIndex)
arrID(i) = strOneline(0) ' L'ID du control permet de mettre ceux-ci en vrac et facilite les modifications ultérieures.
' Pour traduire, onvrir le dossier CSV dans Excel: chaque langue aura sa propre colonne.
Next i
' L'index des nIDs des controls et de leur "captions" étant toujours les mêmes, il suffit d'orienter correctement la propriété

Sub Form_Load()
Dim i as Integer, nLo as Integer, nHi as Integer
' fonction regroupant tout le code ci-dessus.
GetAllCorrectLanguages(valeur sauvée dans un Ini file.)
nLo = LBound(arrGlobal)
nHi = UBound(arrGlobal)
for i = nLo to nHI Step 1
Select Case arrID(i)
Case "btnOK"
buttonOK.Caption=arrGlobal(i)
Case "btnCancel"
buttonCancel.Caption = arrGlobal(i)
Case "btnSuivant"
buttonNext.Caption= arrGlobal(i)
Case else
' ne rien faire
End Select
Next i

End Sub

Voila.

Bonne chance !

 Historique

06 mars 2009 21:58:43 :
Modifié pour inclure une clé d'identification des contrôles.

Commentaires

Commentaire de radcur le 03/03/2009 19:30:09

salut

ta facon d'aborder le problème est plutôt restrictive.  Dans ton exemple, tu n'as que 3 controles (les boutons ok, cancel et next) et tu obliges à utiliser un certain ordre(arrGlobal(0), 1 et 2) imagines comment ca devient difficile à gérer dans une forme qui contient 30 controles.

Pourquoi que dans ton fichier, tu ne créé pas une valeur que tu associes à la propriété TAG des controles ?   Exemple :
BtnOk;Accepter;Ok
BtnNext;Suivant;Next
etc..

ensuite tu récupère la bonne valeur à assigner au controle.

Commentaire de bitshifter le 04/03/2009 02:10:28

C'est vrai.
Le tutorial vient d'être corrigé.

Commentaire de lassad_haddaji le 14/03/2009 16:41:46

ok en attendant la nouvelle version du tuto

Commentaire de spidermario le 14/03/2009 17:48:36

Canceller -> Annuler, non ?

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,827 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales