Traduire un site web sans fichier de ressource
Bonjour,
Je souhaite réaliser une application en plusieurs langues c'est-à-dire que mes labels et autres informations se mettront dans la langue choisie par l'utilisateur dans une liste.
Je ne peux pas utilisée de fichiers de ressources car des administrateurs peuvent à tout moment modifier des labels donc tous les libellés doivent être stockés en table dans une base de données.
J'utilise donc une fonction pour effectuer la traduction.
Le hic, c'est que je ne suis pas experte ASP.NET donc je suis obligée de copier/coller ma fonction dans toutes mes pages car je n'arrive pas à modifier des contrôles d'une page à partir d'une classe.
Pourriez-vous m'aider à trouver une solution qui m'évite d'effectuer un copier/coller ??
Voici ma fonction :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75
| 'Cette procédure permet de traduire les contrôles de la page
Private Sub TranslatePage(ByVal PageName As String)
'Filtre le DataView sur le nom de la page
Dim dtsLabel As DataSet = Application("DS_LABEL")
Dim dtvLabel As DataView = dtsLabel.Tables("tabLabel").DefaultView
dtvLabel.RowFilter = "ELBL_PAGE = '" & PageName & "'"
'Définition des variables
Dim myContent As ContentPlaceHolder = CType(Master.FindControl("main"), ContentPlaceHolder)
Dim myControl As Control
Dim myCtrlText As String
Dim myLabel As Label
Dim myLinkButton As LinkButton
Dim myButton As Button
Dim myRadioButton As RadioButton
Dim myRadioButtonList As RadioButtonList
Dim myGridView As GridView
Dim myReqFldVld As RequiredFieldValidator
Dim myRegExpVld As RegularExpressionValidator
Dim myCompVld As CompareValidator
Dim myVldSumm As ValidationSummary
Dim j As Long = 0
'Pour chaque ligne du DataView
For Each rowView As DataRowView In dtvLabel
'Recherche le contrôle dans la page
myControl = myContent.FindControl(rowView("ELBL_NAME"))
myCtrlText = rowView("ELBL_TEXT_" & Session("VG_USERLANG"))
j = rowView("ELBL_INDEX")
'Si le contrôle existe, on le traduit en fonction de son type
If Not myControl Is Nothing Then
Select Case rowView("ELBL_TYPE")
Case "Label"
myLabel = CType(myControl, Label)
myLabel.Text = myCtrlText
Case "LinkButton"
myLinkButton = CType(myControl, LinkButton)
myLinkButton.Text = myCtrlText
Case "Button"
myButton = CType(myControl, Button)
myButton.Text = myCtrlText
Case "RadioButton"
myRadioButton = CType(myControl, RadioButton)
myRadioButton.Text = myCtrlText
Case "RadioButtonList"
myRadioButtonList = CType(myControl, RadioButtonList)
myRadioButtonList.Items(j).Text = myCtrlText
Case "GridView"
myGridView = CType(myControl, GridView)
myGridView.Columns(j).HeaderText = myCtrlText
Case "RequiredFieldValidator"
myReqFldVld = CType(myControl, RequiredFieldValidator)
myReqFldVld.ErrorMessage = myCtrlText
Case "RegularExpressionValidator"
myRegExpVld = CType(myControl, RegularExpressionValidator)
myRegExpVld.ErrorMessage = myCtrlText
Case "CompareValidator"
myCompVld = CType(myControl, CompareValidator)
myCompVld.ErrorMessage = myCtrlText
Case "ValidationSummary"
myVldSumm = CType(myControl, ValidationSummary)
myVldSumm.HeaderText = myCtrlText
Case Else
'LE CONTRÔLE NE SERA PAS TRADUIT
End Select
Else
'Affiche le nom de la page
If (rowView("ELBL_NAME") = "TitlePage") Then Me.Title = myCtrlText
End If
Next
End Sub |
Merci pour votre aide.
Biz
re.: Traduire un site web sans fichier ressource
Tu peux toujours rajouter une méthode dans ta page et ensuite produire toutes tes pages en héritant de l objet nouvelle page. Ou utiliser un web user controle invisible avec ta méthode et rajouter ce contrôle partout. Comme cela tu réutilise ton code!