Source trés simple permettant de charger un fichier ressource créé avec visual studio (projet complet inclus dans le fichier zip à télécharger), pour afficher la langue désirée dans la page web.
Source / Exemple :
'Pour voir tout le code, veuillez télécharger le code source
'Côté code de la web form:
'----------------------------------------
Imports System.Resources
Imports System.Globalization
Imports System.Threading
Public Class WebForm2
Inherits System.Web.UI.Page
Private rm As ResourceManager
#Region " Code généré par le Concepteur Web Form "
'Cet appel est requis par le Concepteur Web Form.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
End Sub
Protected WithEvents Label1 As System.Web.UI.WebControls.Label
Protected WithEvents Button1 As System.Web.UI.WebControls.Button
Protected WithEvents Button2 As System.Web.UI.WebControls.Button
Protected WithEvents Button3 As System.Web.UI.WebControls.Button
'REMARQUE : la déclaration d'espace réservé suivante est requise par le Concepteur Web Form.
'Ne pas supprimer ou déplacer.
Private designerPlaceholderDeclaration As System.Object
Private Sub Page_Init(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Init
'CODEGEN : cet appel de méthode est requis par le Concepteur Web Form
'Ne le modifiez pas en utilisant l'éditeur de code.
InitializeComponent()
rm = Application("myRM")
End Sub
#End Region
Private Sub Page_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
'Placez ici le code utilisateur pour initialiser la page
mDisplay_Language()
End Sub
Private Sub mDisplay_Language()
'On appelle les traductions par cette méthode
Label1.Text = rm.GetString("IdMessage1")
End Sub
Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click
'Pour changer de langue, on change la culture en cours
'ATTENTION: si vous mettez juste "fr", vous aurez une erreur, il faut préciser
'pour chaque langue la région: "fr-FR"
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR", True)
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
mDisplay_Language()
End Sub
Private Sub Button2_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button2.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("en-US", True)
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
mDisplay_Language()
End Sub
Private Sub Button3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button3.Click
Thread.CurrentThread.CurrentCulture = New CultureInfo("es-ES", True)
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
mDisplay_Language()
End Sub
End Class
'Côté code du global.asax:
'----------------------------------------
Imports System.Web
Imports System.Web.SessionState
Imports System.Globalization
Imports System.Threading
Public Class Global
Inherits System.Web.HttpApplication
#Region " Code généré par le Concepteur de composants "
Public Sub New()
MyBase.New()
'Cet appel est requis par le Concepteur de composants.
InitializeComponent()
'Ajoutez une initialisation quelconque après l'appel InitializeComponent()
End Sub
'Requis par le Concepteur de composants
Private components As System.ComponentModel.IContainer
'REMARQUE : la procédure suivante est requise par le Concepteur de composants
'Elle peut être modifiée à l'aide du Concepteur de composants.
'Ne la modifiez pas en utilisant l'éditeur de code.
<System.Diagnostics.DebuggerStepThrough()> Private Sub InitializeComponent()
components = New System.ComponentModel.Container
End Sub
#End Region
Sub Application_Start(ByVal sender As Object, ByVal e As EventArgs)
' Se déclenche lorsque l'application est démarrée
'**ATTENTION: Si on met pas le nom du projet devant le nom de la ressource : marche pas !!(eh oui c précisé nulle part).
Application("MyRM") = New System.Resources.ResourceManager("Ressource.test", System.Reflection.Assembly.GetExecutingAssembly())
'Note: pour charger le fichier ressource qui est généré automatiquement par visual studio, il
'existe plusieurs techniques, malheureusement celle que je présente ici est la seule que j'ai réussi
'à faire fonctionner.
End Sub
Sub Session_Start(ByVal sender As Object, ByVal e As EventArgs)
' Se déclenche lorsque la session est démarrée
'Détection de la langue
Try
'On regarde si il y a des langues indiqué dans le navigateur
If Not Request.UserLanguages() Is Nothing Then
'Récupére la premiére langue du navigateur
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
End If
Catch ex As Exception
'Si pas trouvé de langue par défaut on peut en attribuer une par défaut ou laisser
'le .NET rechercher par lui même le language racine
Thread.CurrentThread.CurrentCulture = New CultureInfo("fr-FR")
Thread.CurrentThread.CurrentUICulture = Thread.CurrentThread.CurrentCulture
End Try
End Sub
Conclusion :
Il existe plusieurs méthode pour charger le fichier ressource(du global.Asax), dont une trés intéressante ( Application("MyRM") = New System.Resources.ResourceManager(GetType(myWebForm)) qui permet de de charger le fichier ressource par webform, mais impossible de la faire fonctionner chez moi: conflit dans le nom des fichiers .resX(même en supprimante le webform1.resx)... Bref voici une méthode qui fonctionne.
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.