Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Différentes langues suivant utilisateur

10 réponses
Avatar
PLC
Bonjour à tous
J'ai une petite db utilisable en différentes langues suivant les utilisateurs
Cette db evolue et ma methode devient un peu lourde : traduction de chaque "Caption" une à une
Quelqu'un a-t-il une expérience ou une idée pour accelerer les choses
Ex. traduction automatique de toutes les "Captions" des formulaires à l'ouverture ...
Merci d'avance.

10 réponses

Avatar
Raymond [mvp]
Bonjour.

peut-être quelques idées à piocher sur :
http://access.seneque.free.fr/utilitaires_et_gadgets.htm N° 2
http://access.seneque.free.fr/bases_exemples.htm N° 30
(sources disponibles)
--
@+
Raymond Access MVP
http://access.seneque.free.fr/
http://access.vba.free.fr/
http://access2003.free.fr/
http://users.skynet.be/mpfa/ pour débuter sur le forum


"PLC" a écrit dans le message de
news:
Bonjour à tous,
J'ai une petite db utilisable en différentes langues suivant les
utilisateurs.

Cette db evolue et ma methode devient un peu lourde : traduction de chaque
"Caption" une à une.

Quelqu'un a-t-il une expérience ou une idée pour accelerer les choses ?
Ex. traduction automatique de toutes les "Captions" des formulaires à
l'ouverture ...

Merci d'avance.


Avatar
Anor
Bonjour,

PLC wrote:
| Bonjour à tous,
| J'ai une petite db utilisable en différentes langues suivant les
| utilisateurs.
| Cette db evolue et ma methode devient un peu lourde : traduction de
| chaque "Caption" une à une. Quelqu'un a-t-il une expérience ou une
| idée pour accelerer les choses ?
| Ex. traduction automatique de toutes les "Captions" des formulaires à
| l'ouverture ...
| Merci d'avance.

Ma suggestion :

1 - fichiers langfr.ini, lang_en.ini, lang_de.ini dans le répertoire de la base
2 - sur ouverture du formulaire, une procédure va lire ligne par ligne le fichier ini
2bis - qui correspond à la langue de l'utilisateur (fonction API)
3 - cette même procédure alimentera les propriétés caption des étiquettes

Voilà pour le principe, mais j'en appelle au forum car je coince sur le point 3 au niveau de la
syntaxe
pour proposer la procédure complète :

*Donc voici ma question chers amis :*

J'ai :

Private Sub Form_Open(Cancel As Integer)
Dim txtLine as String
Dim arrayLine as Variant
txtLine = "MonEtiquette;Le Libellé de mon étiquette :"
arrayLine = Split(txtLine, ";")
'Debug.Print "Me!" & arrayLine(0) & ".Caption = """ & arrayLine(1) & """"
'Debug.Print "Me(""" & arrayLine(0) & """).Caption = """ & arrayLine(1) & """"
End Sub

Voilà, mais mon problème, c'est que si je sors le debug.print, access ne comprend pas
que je veux alimenter mes légendes......
Qui peut me rafraîchir la mémoire sur la bonne syntaxe à utiliser ?

Par avance merci

--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
Anor
J'ai trouvé :

Me(arrayLine(0)).Caption = arrayLine(1)

Il suffisait de se creuser un peu les méninges !!!

Bon je fignole ça et je reviendrai pour proposer une procédure
opérationnelle après tests de non régressivité ;-)))))
à+
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------

Anor wrote:

| Ma suggestion :
|
| 1 - fichiers langfr.ini, lang_en.ini, lang_de.ini dans le répertoire
| de la base 2 - sur ouverture du formulaire, une procédure va lire
| ligne par ligne le fichier ini 2bis - qui correspond à la langue de
| l'utilisateur (fonction API) 3 - cette même procédure alimentera les
| propriétés caption des étiquettes
|
| Voilà pour le principe, mais j'en appelle au forum car je coince sur
| le point 3 au niveau de la syntaxe
| pour proposer la procédure complète :
|
| *Donc voici ma question chers amis :*
|
| J'ai :
|
| Private Sub Form_Open(Cancel As Integer)
| Dim txtLine as String
| Dim arrayLine as Variant
| txtLine = "MonEtiquette;Le Libellé de mon étiquette :"
| arrayLine = Split(txtLine, ";")
| 'Debug.Print "Me!" & arrayLine(0) & ".Caption = """ & arrayLine(1) &
| """" 'Debug.Print "Me(""" & arrayLine(0) & """).Caption = """ &
| arrayLine(1) & """"
| End Sub
|
| Voilà, mais mon problème, c'est que si je sors le debug.print, access
| ne comprend pas
| que je veux alimenter mes légendes......
| Qui peut me rafraîchir la mémoire sur la bonne syntaxe à utiliser ?
|
| Par avance merci
Avatar
Anor
Anor wrote:
| tests de non régressivité ;-)))))

je voulais dire de non régression, mais à notre niveau, ça ne veut rien dire :-)
Avatar
Eric
Bonsoir Arnaud

Remplaces ta ligne "Me!" & arrayLine(0) & ".Caption = """ & arrayLine
(1)...
par Forms!NomFormulaire(arrayline(0)).Caption= arrayLine(1)
et ca devrait rouler.

A+
Eric

"Anor" <http://memoaccess.free.fr/anor/email.htm> écrivait
news:#:

Bonjour,

PLC wrote:
| Bonjour à tous,
| J'ai une petite db utilisable en différentes langues suivant les
| utilisateurs.
| Cette db evolue et ma methode devient un peu lourde : traduction de
| chaque "Caption" une à une. Quelqu'un a-t-il une expérience ou une
| idée pour accelerer les choses ?
| Ex. traduction automatique de toutes les "Captions" des formulaires à
| l'ouverture ...
| Merci d'avance.

Ma suggestion :

1 - fichiers langfr.ini, lang_en.ini, lang_de.ini dans le répertoire
de la base 2 - sur ouverture du formulaire, une procédure va lire
ligne par ligne le fichier ini 2bis - qui correspond à la langue de
l'utilisateur (fonction API) 3 - cette même procédure alimentera les
propriétés caption des étiquettes

Voilà pour le principe, mais j'en appelle au forum car je coince sur
le point 3 au niveau de la syntaxe
pour proposer la procédure complète :

*Donc voici ma question chers amis :*

J'ai :

Private Sub Form_Open(Cancel As Integer)
Dim txtLine as String
Dim arrayLine as Variant
txtLine = "MonEtiquette;Le Libellé de mon étiquette :"
arrayLine = Split(txtLine, ";")
'Debug.Print "Me!" & arrayLine(0) & ".Caption = """ & arrayLine(1) &
"""" 'Debug.Print "Me(""" & arrayLine(0) & """).Caption = """ &
arrayLine(1) & """" End Sub

Voilà, mais mon problème, c'est que si je sors le debug.print, access
ne comprend pas que je veux alimenter mes légendes......
Qui peut me rafraîchir la mémoire sur la bonne syntaxe à utiliser ?

Par avance merci



Avatar
Eric
"Anor" <http://memoaccess.free.fr/anor/email.htm> écrivait
news:#:

Anor wrote:
| tests de non régressivité ;-)))))

je voulais dire de non régression, mais à notre niveau, ça ne veut
rien dire :-)







Trop tard je t'ai répondu ;-)
Eric

Avatar
Anor
Salut Eric

Eric wrote:
| Trop tard je t'ai répondu ;-)
| Eric

Merci c'était bien ça.
Alors pour la peine, voici une procédure complète à titre d'exemple
qui charge le formulaire dans la langue de l'utilisateur.

- un fichier lang_FRA.ini situé dans le même dossier que la base de données.
Contenu du fichier (extrait) avec nomducontrole£propriété£valeur

Def£Rowsource£A;Vital;B;Principal;C;Secondaire
lblPu£Caption£Prix Unitaire(EUR):
lblDAj£Caption£Délai d 'Approvisionnement (jours) :
lblTs£Caption£Taux de Stockage :
Ts£ControlTipText£Total Coût Annuel de gestion du stock / Valeur Totale du Stock
lblDef£Caption£Criticité Moyenne Défaillances :
lblSC£Caption£Stock de Couverture :
SC£ControlTipText£Consommation prévisible pendant le délai d'approvisionnement

- un formulaire avec quelques étiquettes pour la propriété Caption,
une zone de liste déroulante pour la propriété RowSource
(à cause d'elle, j'ai changé de séparateur car besoin du point virgule)
et des zones de texte pour la propriété ControlTipText.

- Puis le code VBA du formulaire :

Option Compare Database
Option Explicit

Private Declare Function GetLocaleInfo Lib "kernel32" _
Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long

Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()

Const LOCALE_SABBREVLANGNAME = &H3

Private Function LangueAbregee() As String
Dim Symbol As String
Dim iRet1 As Long
Dim iRet2 As Long
Dim lpLCDataVar As String
Dim pos As Integer
Dim Locale As Long

Locale = GetUserDefaultLCID()
iRet1 = GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, lpLCDataVar, 0)

Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, Symbol, iRet1)
pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
LangueAbregee = Symbol
End If
End Function


Private Sub Form_Open(Cancel As Integer)
Call PopulateCaptions
End Sub


Sub PopulateCaptions()
On Error Resume Next

Dim F As Integer
Dim LeFichier As String
Dim txtLine As String
Dim arrayLine As Variant

LeFichier = Left(CurrentDb.Name, InStr(1, CurrentDb.Name, _
Dir(CurrentDb.Name)) - 1) & "lang_" & LangueAbregee() & ".ini"
F = FreeFile

Open LeFichier For Input As #F
If Err.Number > 0 Then: GoTo Fin
Do While Not EOF(F)
Line Input #F, txtLine
arrayLine = Split(txtLine, "£")
Me(arrayLine(0)).Properties(arrayLine(1)) = arrayLine(2)

Loop
Close #F
Fin:
End Sub


Voilà le genre de petites procédures qui je l'espère font plaisir à retrouver sur MPFA
;-))
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
Eric
Bonsoir Arnaud,

Bô travail, Super

J'ai pas testé(ferai ca sous peu) mais à la lecture des procédures et
fonctions, on sent la grande maîtrise ... ( me reste des heures de taf
avant d'atteindre ton niveau)

J'espere que tu vas mettre ca sur ton site.

A+
Eric



"Anor" <http://memoaccess.free.fr/anor/email.htm> écrivait
news::

Salut Eric

Eric wrote:
| Trop tard je t'ai répondu ;-)
| Eric

Merci c'était bien ça.
Alors pour la peine, voici une procédure complète à titre d'exemple
qui charge le formulaire dans la langue de l'utilisateur.

- un fichier lang_FRA.ini situé dans le même dossier que la base de
données. Contenu du fichier (extrait) avec
nomducontrole£propriété£valeur

Def£Rowsource£A;Vital;B;Principal;C;Secondaire
lblPu£Caption£Prix Unitaire(EUR):
lblDAj£Caption£Délai d 'Approvisionnement (jours) :
lblTs£Caption£Taux de Stockage :
Ts£ControlTipText£Total Coût Annuel de gestion du stock / Valeur
Totale du Stock lblDef£Caption£Criticité Moyenne Défaillances :
lblSC£Caption£Stock de Couverture :
SC£ControlTipText£Consommation prévisible pendant le délai
d'approvisionnement

- un formulaire avec quelques étiquettes pour la propriété Caption,
une zone de liste déroulante pour la propriété RowSource
(à cause d'elle, j'ai changé de séparateur car besoin du point
virgule) et des zones de texte pour la propriété ControlTipText.

- Puis le code VBA du formulaire :

Option Compare Database
Option Explicit

Private Declare Function GetLocaleInfo Lib "kernel32" _
Alias "GetLocaleInfoA" _
(ByVal Locale As Long, _
ByVal LCType As Long, _
ByVal lpLCData As String, _
ByVal cchData As Long) As Long

Private Declare Function GetUserDefaultLCID% Lib "kernel32" ()

Const LOCALE_SABBREVLANGNAME = &H3

Private Function LangueAbregee() As String
Dim Symbol As String
Dim iRet1 As Long
Dim iRet2 As Long
Dim lpLCDataVar As String
Dim pos As Integer
Dim Locale As Long

Locale = GetUserDefaultLCID()
iRet1 = GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, lpLCDataVar,
0)

Symbol = String$(iRet1, 0)
iRet2 = GetLocaleInfo(Locale, LOCALE_SABBREVLANGNAME, Symbol,
iRet1) pos = InStr(Symbol, Chr$(0))
If pos > 0 Then
Symbol = Left$(Symbol, pos - 1)
LangueAbregee = Symbol
End If
End Function


Private Sub Form_Open(Cancel As Integer)
Call PopulateCaptions
End Sub


Sub PopulateCaptions()
On Error Resume Next

Dim F As Integer
Dim LeFichier As String
Dim txtLine As String
Dim arrayLine As Variant

LeFichier = Left(CurrentDb.Name, InStr(1, CurrentDb.Name, _
Dir(CurrentDb.Name)) - 1) & "lang_" & LangueAbregee() &
".ini"
F = FreeFile

Open LeFichier For Input As #F
If Err.Number > 0 Then: GoTo Fin
Do While Not EOF(F)
Line Input #F, txtLine
arrayLine = Split(txtLine, "£")
Me(arrayLine(0)).Properties(arrayLine(1)) = arrayLine(2)

Loop
Close #F
Fin:
End Sub


Voilà le genre de petites procédures qui je l'espère font plaisir à
retrouver sur MPFA ;-))


Avatar
Anor
Salut,

Eric wrote:
| Bonsoir Arnaud,
|
| Bô travail, Super

il y a des jours (qui se font rares) on on a plus d'imagination que d'autres !!

| J'ai pas testé(ferai ca sous peu) mais à la lecture des procédures et
| fonctions, on sent la grande maîtrise ... ( me reste des heures de taf
| avant d'atteindre ton niveau)

que de la poudre aux yeux j'te dis !!

| J'espere que tu vas mettre ca sur ton site.
|
| A+
| Eric
|

Et voilà qui est fait
http://memoaccess.free.fr/forms.htm#Populate

a+
--
Arnaud
--------------------------------------------------
Conseils d'utilisation : http://users.skynet.be/mpfa/
Site Perso : http://memoaccess.free.fr
/Réponses souhaitées sur ce forum, merci/
--------------------------------------------------
Avatar
3stone
"Anor"

<snip>
Et voilà qui est fait
http://memoaccess.free.fr/forms.htm#Populate



Faut garder espoir...

Private joke ;-))))))))))))))))



--
A+
Pierre (3stone) Access MVP
-----------------------------
http://users.skynet.be/mpfa
-----------------------------