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 !