jeudi 1 avril 2010

Asp.net 3.5 - Gestionnaire de ressources multilingues en .NET 3.5

Dans cet article vous trouverez un petit exemple de gestionnaire de Ressource en VB.NET 3.5
Voici la présentation de la solution
clip_image001
Le dossier "Resource" à la racine est obligatoire, de plus un fichier ressource à la racine pour la langue neutre est également  obligatoire. (Ce fichier sert également à lister les futurs clés, très pratique pour créer de nouvelles langue, un simple copier-coller de ce fichier est suffisant).
Il faut également un sous dossier par langue. A l'intérieur, un fichier ressource nommé selon ce modèle : "NomDuFichierNeutre.Langue.resx"
Le fichier "snk" sert à signer votre projet. Essentiel pour partager les ressources avec d'autre projet. Pour créer une signature il suffit d'aller dans les propriétés du projet, onglet signature puis "New".
Avant de commencer nous allons définir quelques paramètres de base pour le projet : la langue par défaut et le nom du fichier de ressource par défaut. Pour ce faire il faut ajouter des "Settings" à votre projet. Ici aussi cela se passe dans les propriétés du projet.
clip_image002
Enfin le code :
Option Strict On
Option Explicit On
 
Imports System.Resources
Imports System.Threading
Imports System.Globalization
Imports System.Reflection
 
Public Class ResManager
    Private Shared m_Culture As CultureInfo
    Private Shared m_ResourceManager As ResourceManager
 
    ''' <summary>
    ''' Méthode permettant d'obtenir la valeur associée à une clé passée en paramètre.
    ''' </summary>
    ''' <param name="Key">Clef associée à la valeur voulue</param>
    ''' <returns>La valeur associée à la clé passée en paramètre</returns>
    ''' <remarks>
    ''' Culture par defaut : fr-FR. Modifiable dans le fichier de Settings.
    ''' Fichier de Ressource par défaut : StringLibrary. Modifiable dans le fichier de Settings.
    ''' Un fichier de ressource nommé "StringLibrary" aura pour dénomination dans les settings
    ''' "NomDuProjet.StringLibrary"
    ''' </remarks>
    Public Shared Function GetVal(ByVal Key As String) As String
 
        'Si la culture n'est pas défini, alors on utilise la culture par défaut.
        If (m_Culture Is Nothing) Then
            m_Culture = New CultureInfo(My.Settings.DefaultCulture)
            Thread.CurrentThread.CurrentUICulture = m_Culture
        End If
 
        'Si le "Resource Manager" n'est pas instancié alors on le crée avec pour paramètre
        'le nom des fichiers de ressources par defaut.
        Try
            If (m_ResourceManager Is Nothing) Then
                m_ResourceManager = New ResourceManager(My.Settings.ResourcesFile, Assembly.GetExecutingAssembly())
            End If
        Catch ex As Exception
            Return "{Resources File Not Found}"
        End Try
 
 
        'Si le paramètre Key est null alors
        If (String.IsNullOrEmpty(Key)) Then
            'On retourne la chaîne par défaut
            Return "{Undefined}"
        End If
 
        Dim l_res As String = m_ResourceManager.GetString(Key, m_Culture)
 
        'Si la méthode ne retourne rien
        If (String.IsNullOrEmpty(l_res)) Then
            'On retourne la chaîne par défaut
            Return "{Undefined}"
        End If
 
        'Retourne la valeur demandée
        Return l_res
    End Function
 
    ''' <summary>
    ''' Méthode permettant de choisir une nouvelle langue par défaut.
    ''' </summary>
    ''' <param name="Culture">Nouvelle culture</param>
    ''' <remarks>Exemple de formats : fr-FR, en, en-US...</remarks>
    Public Shared Sub SetCulture(ByVal Culture As String)
        'Si la culture est  null ou vide
        If (String.IsNullOrEmpty(Culture)) Then
            'On utilise la Culture par défaut
            m_Culture = New CultureInfo(My.Settings.DefaultCulture)
            Thread.CurrentThread.CurrentUICulture = m_Culture
        Else
            Try
                'Définition de la culture
                m_Culture = New CultureInfo(Culture)
                'Mémorisation de la nouvelle culture
                Thread.CurrentThread.CurrentUICulture = m_Culture
            Catch ex As Exception
                'Culture non supportée
                'Rem : Une culture ne disposant pas de fichier de ressources ne provoquera pas de messages d'erreurs
                'si elle est supporté.
                'On utilise la culture par défaut
                m_Culture = New CultureInfo(My.Settings.DefaultCulture)
                Thread.CurrentThread.CurrentUICulture = m_Culture
            End Try
        End If
    End Sub
 
 
End Class
 

Aucun commentaire:

Enregistrer un commentaire