IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

version multilingue asp.net


Sujet :

ASP.NET

  1. #1
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Par défaut version multilingue asp.net
    Salut tout le monde
    Je voudrais réaliser une application multilingue (français et anglais).
    En faite j'utilise les fichiers .resx pour sauvegarder les données. Donc pour chaque page.aspx on trouve un fichier.aspx.resx pour la version française(version par défaut) et un autre .aspx.en.resx pour la version anglaise.
    Sauriez vous m'indiquer comment je devrais faire pour switcher entre les deux langues à chaque fois que je click sur le linkbutton indiquant la langue ?

    Merci de m'aider.

  2. #2
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Bonjour,

    Je pense qu'il te suffit simplement de changer la Culture et le bon fichier ressource sera automatiquement utilisé.

    Par exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CultureInfo culture_object = new CultureInfo ("fr-FR");
     
    System.Threading.Thread.CurrentThread.CurrentCulture = culture_object;
    System.Threading.Thread.CurrentThread.CurrentUICulture = culture_object;
    Et tu remplaces "fr-FR" par le choix de l'utilisateur.

    En espérant t'avoir aidé.

  3. #3
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Par défaut
    merci Nicolas mais j'ai essayé ta solution mais ça marche pas.
    Peut être il faudrait que j'explique mieux mon cas :
    J'ai une page d'accueil (page d'authentification) qui contient un formulaire composé de deux text box afin d'insérer nom utilisateur et mot de passe. J'ai également mis deux liens (linkbutton) afin de changer la langue.
    Je veux quand je clique sur l'un de ces deux linkbutton la langue se change automatiquement c.a.d le fichier ressource .resx correspond à la langue choisit se charge automatiquement.
    Par exemple si je clique sur anglais la page d'accueil se charge et au lieu de trouver nom utilisateur et mot de passe je trouve login password. C'est un exemple et j'espère que je suis claire.
    J'ai mis ton code(le code fourni par Nicolas) suite au clique sur le lien mais rien se passe)
    Merci pour vos collaborations

  4. #4
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Par défaut
    je m'excuse Nicolas ta solution fonctionne (elle n'a pas fonctionné car j'utilise auto détection dans le navigateur en même temps que ta solution proposé mais quand j'ai supprimer la langue que j'ai choisit dans options de navigateur ça fonctionne.) le problème c'est que la valeur de culture se perd dés que je change de page même dans la même page lors d'un clique ça revient à la langue par défaut
    donc solution si vous connaissiez et merci

  5. #5
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Salut,

    As-tu bien regardé ce tuto: http://jlambert.developpez.com/tutor...isationvs2005/

    A+
    "Winter is coming" (ma nouvelle page d'accueil)

  6. #6
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Par défaut
    En faite Immobilis ce tuto montre comment réaliser un site multilingue sans donner la main à l'utilisateur de choisir sa langue préféré.
    pour moi ce qui existe dans le tuto je le sais et je l'ai essayé et ça fonctionne (merci comme même pour ton aide)
    c'est ce que je cherche c'est comment donner la main à l'utilisateur afin de choisir sa langue préférée en cliquant sur un linkbutton .
    j'ai trouvé une solution fournie par mon ami Nicolas mais dés qu'on change de page ça revient vers la langue par défaut donc comment faire pour s'assurer que la langue choisie par l'utilisateur lors de la page d'accueil reste celle tout au long du projet .
    merci

  7. #7
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Un petit exemple simple. Dans ta MasterPage (histoire de n'avoir à le gérer qu'à un endroit), tu as deux boutons :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    <asp:ImageButton ID="imbFrench" runat="server" ImageUrl="~/images/flags/fr.gif" AlternateText="Français" OnClick="imbFrench_Click" /
    <asp:ImageButton ID="imbGerman" runat="server" ImageUrl="~/images/flags/de.gif" AlternateText="Deutsch" OnClick="imbGerman_Click" />
    Dans ton code-behind de ta MasterPage tu as ce code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
     protected void imbFrench_Click(object sender, ImageClickEventArgs e)
            {
                string _Culture;
                Session["Culture"] = "fr";
     
                _Culture = Session["Culture"].ToString().ToUpper();
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(_Culture);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(_Culture);
            }
            protected void imbGerman_Click(object sender, ImageClickEventArgs e)
            {
                string _Culture;
                Session["Culture"] = "de";
                _Culture = Session["Culture"].ToString().ToUpper().ToUpper();
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(_Culture);
                Thread.CurrentThread.CurrentUICulture = new CultureInfo(_Culture);
            }

    Et dans le PageLoad de ta MasterPage ceci :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     protected void Page_Load(object sender, EventArgs e)
            {   
                //LocRM = new DBResourceProvider("CommonTerms");
                try
                {
                    string _Culture;
                    _Culture = Session["Culture"].ToString().ToUpper();
                    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(_Culture);
                    Thread.CurrentThread.CurrentUICulture = new CultureInfo(_Culture);
                }
                catch{}
    Attention, ce n'est pas la meilleure des solutions. Si tu as de nombreuses langues à gérer... ça risque d'être redondant comme code. Il te suffira de rendre tout cela un peu plus générique (méthode click, et une dropdownlist pour proposer les différentes langues).

    En espérant t'avoir aidé.

  8. #8
    Expert confirmé
    Avatar de Immobilis
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Mars 2004
    Messages
    6 559
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur .NET

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 559
    Par défaut
    Tu peux aussi le faire en testant les langues du navigateur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    private static CultureInfo SetCulture(HttpContext context)
    {
        try
        {
            return new CultureInfo(context.Request.UserLanguages[0].ToString());
        }
        catch
        {
            return new CultureInfo("fr-FR");
        }
    }
    Quel que soit le moyen de sélectionner la langue, je te conseil de mettre ce choix dans l'url.
    Cela donne:

    Tu récupères l'url et tu extraits le segment. Tous les grands sites le font. Mais bon, cela suppose que tu fais de la réécriture d'url.

    Cela permet d'être très explicite, d'éviter les variables de session, c'est RESTfull
    "Winter is coming" (ma nouvelle page d'accueil)

  9. #9
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Citation Envoyé par Immobilis Voir le message
    Quel que soit le moyen de sélectionner la langue, je te conseil de mettre ce choix dans l'url.
    +1

    Citation Envoyé par Immobilis Voir le message
    Mais bon, cela suppose que tu fais de la réécriture d'url.
    Sujet de mon prochain article (déjà en cours de relecture dans la partie privée du forum)

  10. #10
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Par défaut
    Merci Nicolas et Immobilis pour votre aide;
    en faite j'ai adopté la solution proposée par Nicolas car ,en réalité, j'ai pas bien compris ou je sais pas comment réaliser la solution proposée par Immobilis.
    Mais et malgré que j'aime pas travaillé avec les sessions le problème persiste donc je suppose qu'il y 'a un truc qui ne vas pas dans mon code donc est ce que vous voulez que je vous fournisse des détails supplémentaires pour que vous puissiez m'aider.
    j'ai vraiment honte de vous gêner.
    voici un doc word expliquant ma démarche

  11. #11
    Membre confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2009
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Avril 2009
    Messages : 183
    Par défaut
    Bonjour en faite j'ai trouvé la solution en ajoutant ce bout de code dans le fichier global.asax
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Protected Sub Application_BeginRequest(ByVal sender As Object, ByVal e As System.EventArgs)
            Dim culturePref As String
            Try
                If Not (Request.Cookies("langue").Value.ToString() Is Nothing) Then
                    culturePref = Request.Cookies("langue").Value.ToString()
                    System.Threading.Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(culturePref)
                End If
            Catch
                System.Threading.Thread.CurrentThread.CurrentUICulture = New CultureInfo("en-GB")
     
            End Try
            System.Threading.Thread.CurrentThread.CurrentUICulture = System.Threading.Thread.CurrentThread.CurrentCulture
        End Sub
    merci pour vos contributions

  12. #12
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Novembre 2010
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Novembre 2010
    Messages : 2
    Par défaut
    Je vais reprendre un texte que j'ai écrit sur un autre forum pour expliquer un peu plus comment je m'y suis pris.

    Alors, voilà :

    Afin de bien référencer un site web multilingue, nous avons élaboré quelques techniques bien simples. Je vous présenterai une façon simple développée en asp.net, mais qui pourrait certainement être faite en PHP.

    Notre solution ne comporte ni nom de domaine par langue, ni un répertoire par langue, ni un sous-domaine par langue.

    Je prendrai comme exemple http://www.secure-anonymous-email.com. Ce site a été créé dans le but d'être bien référencé en français et en anglais.

    Comme vous pourrez le constater, le site comporte 6 pages visibles : Accueil, Envoyer un nouveau mail anonyme et Condition d'utilisations pour le français et Home, Send new anonymous email et Terms of service pour l'anglais.

    En réalité, ce site ne comporte que 3 pages qui s'adaptent au langage choisi par le visiteur. Pour ceux qui connaissent ASP.Net, vous devez certainement connaitre les fichiers ressources qui permettent de changer dynamiquement les textes et images d'un site à l'aide de UICulture et Culture.

    Une fois les fichiers ressources (.resx) mis au point, rien de plus simple. Il s’agit de faire changer la langue de la page à l'aide de quelques méthodes simple.

    Je vous donne une partie de mon code qui vous permettra de faire de la rétro-ingénierie. Ce code vb.net est placé dans Application_BeginRequest du fichier Global.asax.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    If (fullOrigionalpath.EndsWith("secure-anonymous-email.com") Or fullOrigionalpath.EndsWith("secure-anonymous-email.com/") Or fullOrigionalpath.Contains("secure-anonymous-email.com/default.aspx")) Then
                Try
                    Dim currentthread As String = HttpContext.Current.Request.UserLanguages(0).Substring(0, 2)
                    Try
                        If Request.Cookies("CultureInfoSAE").Value = "fr" Then
                            Response.Redirect("/fr", False)
                        End If
                    Catch ex As Exception
                        If currentthread = "fr" Then
                            Response.Redirect("/fr")
                        End If
                    End Try
                Catch ex As Exception
     
                End Try
     
     
                Thread.CurrentThread.CurrentUICulture = New CultureInfo("en")
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en")
     
                url = "/default.aspx?lang=en"
     
            ElseIf (fullOrigionalpath.EndsWith("secure-anonymous-email.com/fr")) Or fullOrigionalpath.EndsWith("secure-anonymous-email.com/fr/") Then
                Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr")
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr")
     
                url = "/default.aspx?lang=fr"
     
            ElseIf (fullOrigionalpath.EndsWith("/send-anonymous-email")) Or fullOrigionalpath.EndsWith("/send-anonymous-email/") Then
                Thread.CurrentThread.CurrentUICulture = New CultureInfo("en")
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en")
     
                url = "/send-anonymous-email.aspx?lang=en"
     
            ElseIf (fullOrigionalpath.EndsWith("/envoyer-mail-anonyme")) Or fullOrigionalpath.EndsWith("/envoyer-mail-anonyme/") Then
                Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr")
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr")
     
                url = "/send-anonymous-email.aspx?lang=fr"
     
            ElseIf (fullOrigionalpath.EndsWith("/fr/tos")) Or fullOrigionalpath.EndsWith("/fr/tos/") Then
                Thread.CurrentThread.CurrentUICulture = New CultureInfo("fr")
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr")
     
                url = "/tos.aspx?lang=fr"
     
            ElseIf (fullOrigionalpath.EndsWith("/tos") Or fullOrigionalpath.EndsWith("/tos/")) Then
                Thread.CurrentThread.CurrentUICulture = New CultureInfo("en")
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("en")
     
                url = "/tos.aspx?lang=en"
     
            End If
     
            If URL <> "" Then
                Context.RewritePath(URL)
            End If
    Le paramètre lang sert à la mise en cache des pages.

    Visitez le site et regardez les URL et comparez-les à l'aide du code plus haut afin de mieux comprendre.

    Si vous avez des questions, n'hésitez pas.

  13. #13
    Membre Expert
    Avatar de Nicolas Esprit
    Homme Profil pro
    Consultant en technologies
    Inscrit en
    Février 2010
    Messages
    1 467
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en technologies
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2010
    Messages : 1 467
    Par défaut
    Oui, mais déjà cité pour les fichiers ressources : http://jlambert.developpez.com/tutor...isationvs2005/

    Ou avec une base de données : http://immobilis.developpez.com/arti...-base-donnees/

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Unable to use SQL Server because ASP.NET version 2.0
    Par Khrysby dans le forum Accès aux données
    Réponses: 0
    Dernier message: 19/10/2009, 16h07
  2. Version Framework ASP.NET
    Par UoLad dans le forum ASP.NET
    Réponses: 2
    Dernier message: 18/12/2008, 18h43
  3. version ASP.net sous IIS pour VS2008 pro
    Par Hepil dans le forum IIS
    Réponses: 6
    Dernier message: 12/01/2008, 08h30
  4. [D3] erreur dans faq asp.net, version Delphi.NET
    Par adaneels dans le forum Contribuez
    Réponses: 1
    Dernier message: 01/11/2006, 21h38

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo