Utilisation des fichiers ressources pour du multilignue

Description

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.

Codes Sources

A voir également

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.