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 :

Localization en ASP.NET 2.0


Sujet :

ASP.NET

  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut Localization en ASP.NET 2.0
    Bonjour,

    Je développe une appli web qui devra être déployée dans différents pays, mais à chaque fois sur une serveur avec un OS en US.

    Mon objectif est de rendre l'appli multilingue. 2 possibilités s'offrent à moi :
    - utiliser la culture du client
    - forcer la culture dans le paramétrage de l'appli.

    Les deux solutions sont envisageables, d'après ce que j'ai compris, par une simple configuration dans le web.config. Perso, je préfère la seconde solution, et j'ai donc essayé la ligne suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    <globalization uiCulture="es" culture="es-MX" />
    ... sans succès.

    J'ai donc forcé la culture au niveau de la page par l'ajout du code suivant :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    protected override void InitializeCulture()
            {
                string lang = "es-MX";
                this.UICulture = lang;
                this.Culture = lang;
     
                System.Threading.Thread.CurrentThread.CurrentCulture =
                    System.Globalization.CultureInfo.CreateSpecificCulture(lang);
                System.Threading.Thread.CurrentThread.CurrentUICulture =
                    System.Globalization.CultureInfo.CreateSpecificCulture(lang);
                base.InitializeCulture();
            }
    ... là ça fonctionne, c'est à dire que le bon fichier resx est utilisé. De plus, je retrouve bien "es" quand je fais dans le Page_Load :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Response.Write("culture:"+System.Threading.Thread.CurrentThread.CurrentUICulture.TwoLetterISOLanguageName);
    Response.Write("<br>cultureUI:"+System.Globalization.CultureInfo.CurrentUICulture.TwoLetterISOLanguageName);
    Cependant, cette solution n'est pas satisfaisante. Comment se fait-il que la première solution ne fonctionne pas ??
    Pour info, j'ai trouvé le how to ici :
    http://msdn2.microsoft.com/en-us/lib...08(VS.80).aspx

    Merci d'avance !

  2. #2
    Expert confirmé
    Avatar de Ditch
    Inscrit en
    Mars 2003
    Messages
    4 160
    Détails du profil
    Informations personnelles :
    Âge : 43

    Informations forums :
    Inscription : Mars 2003
    Messages : 4 160
    Par défaut
    Sans aucune certitude, UICulture n'est pas case-sensitive?

    Sinon les pistes différentes pour la localization se trouvent ici: http://ditch.developpez.com/aspnet/tome5/

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut
    Le uiCulture est bien case sensitive, mais s'écrit comme je l'avais précisé.

    J'ai jeté un coup d'oeil du côté du machine.config, mais rien n'est précisé pour la globalization...

    Je ne comprends pas ... configurer un web.config est tout de même extrêmement simple, quelque chose d'autre doit passer au dessus du web.config... je ne vois que ça, mais quoi ?

    Toute piste sera étudiée !

  4. #4
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Le problème vient des headers qu'envoit ton navigateur avec tes préférences. Celles-ci sont prioritaires par rapport au web.config.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut
    Effectivement,

    J'ai changé la langue par défaut de mon navigateur (dans ie --> Options Internet --> Général --> bouton Langues...), et effectivement, ça a pris le dessus.

    Ensuite, j'ai carrément enlevé toutes les langues, et je pensais que la ligne de mon web.config allait être prise en compte.

    Et bien non, toujours en fr-FR ! J'ai du mal à comprendre où il est allé le chercher ! sur mon OS ? Mais dans ce cas, comment arriver à utiliser les paramétrages globalization du web.config ???

  6. #6
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Oui, il a pris le regional setting de l'OS. Concernant ta question, je n'ai pas de réponse immédiate. Par contre, je peux t'expliquer comment je gère la langue dans mon application: j'ai écrit un HttpModule qui force la langue sur le thread selon certains critères.

  7. #7
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut
    Oui neptune, je suis preneur ! Merci.

    Par contre, si jamais qq1 pouvait m'expliquer l'ordre dans lequel ça fonctionne :

    1. La langue spécifié dans le code de la page (cas du override InitializeCulture)
    2. La langue du navigateur du client
    3. La langue de l"OS du client
    4. La langue dans le uiCulture et/ou culture du web.config
    5. La langue du machine.config de la version .NET utilisée sur le serveur.


    ... bref, j'ai du mal à comprendre qd on va bien pouvoir utiliser 4 ou 5 !!! Parce que l'OS aura toujours une langue associée !

  8. #8
    Membre émérite Avatar de neptune
    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    835
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2003
    Messages : 835
    Par défaut
    Citation Envoyé par nicoboud2 Voir le message
    Oui neptune, je suis preneur ! Merci.
    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
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
     
    using System;
    using System.Collections.Generic;
    using System.Text;
    using System.Web;
    using System.Threading;
    using System.Globalization;
     
    namespace Pfizer.WPO.Belgium.Architecture.ExtranetUtilities.HttpModules
    {
        public class LanguageModule : IHttpModule
        {
            private const string LANGUAGE_COOKIE = "Language";
            private const string LANGUAGE_KEY = "Language";
            private static string[] VALID_LANGUAGES = { "en", "fr", "nl" };
     
            #region IHttpModule Members
     
            public void Dispose()
            {
            }
     
            public void Init(HttpApplication context)
            {
                context.BeginRequest += new EventHandler(context_BeginRequest);
            }
     
            #endregion
     
            void context_BeginRequest(object sender, EventArgs e)
            {
                // Check if a language is set in the query string (case we come from a partner site)
                string queryStringLanguage = HttpContext.Current.Request.QueryString[LANGUAGE_KEY];
                if (!String.IsNullOrEmpty(queryStringLanguage))
                {
                    if (SetLanguage(queryStringLanguage))
                    {
                        return;
                    }
                }
     
                // Check if a language is set in a preference cookie
                HttpCookie languageCookie = HttpContext.Current.Request.Cookies.Get(LANGUAGE_COOKIE);
                if (languageCookie != null)
                {
                    if (SetLanguage(languageCookie[LANGUAGE_KEY]))
                    {
                        return;
                    }
                }
     
                // Get browser sent language preferences
                if ((HttpContext.Current.Request.UserLanguages != null) && (HttpContext.Current.Request.UserLanguages.Length > 0))
                {
                    if (SetLanguage(HttpContext.Current.Request.UserLanguages[0].Substring(0, 2)))
                    {
                        return;
                    }
                }
     
                // Fallback to default
                SetLanguage("en");
            }
     
            private static bool SetLanguage(string language)
            {
                return SetLanguage(language, false);
            }
     
            private static bool SetLanguage(string language, bool savePreference)
            {
                bool result = false;
     
                // Verify if language is one of the valid ones
                if (Array.Exists<string>(VALID_LANGUAGES, delegate(string valid)
                {
                    return String.Compare(language, valid, true) == 0;
                }))
                {
                    if (savePreference)
                    {
                        HttpCookie cookie = new HttpCookie(LANGUAGE_COOKIE);
                        cookie.Values[LANGUAGE_KEY] = language;
                        cookie.Expires = DateTime.MaxValue;
                        HttpContext.Current.Response.Cookies.Add(cookie);
                    }
     
                    CultureInfo culture = GetCultureInfo(language);
                    Thread.CurrentThread.CurrentCulture = culture;
                    Thread.CurrentThread.CurrentUICulture = culture;
     
                    result = true;
                }
     
                return result;
            }
     
            public static CultureInfo GetCultureInfo(string language)
            {
                switch (language.ToLower())
                {
                    case "en":
                        return new CultureInfo("en-US");
                    case "fr":
                        return new CultureInfo("fr-BE");
                    case "nl":
                        return new CultureInfo("nl-BE");
                    default:
                        return CultureInfo.InvariantCulture;
                }
            }
     
            public static void ChangeLanguage(string language)
            {
                if (SetLanguage(language, true))
                {
                    HttpContext.Current.Response.Redirect(HttpContext.Current.Request.FilePath);
                }
            }
        }
    }

  9. #9
    Membre averti
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    39
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 39
    Par défaut
    Je n'ai pas eu le temps de tester, mais j'ajouterai un commentaire quand je l'aurai fait.

Discussions similaires

  1. mise en ligne local d'un site asp.net
    Par ecco27 dans le forum IIS
    Réponses: 2
    Dernier message: 29/10/2008, 15h16
  2. Réponses: 3
    Dernier message: 31/10/2007, 11h38
  3. Site Asp.net et report server en local
    Par Ruddy dans le forum ASP.NET
    Réponses: 2
    Dernier message: 24/04/2007, 12h13
  4. Réponses: 5
    Dernier message: 28/06/2006, 23h27
  5. [CR10][ASP.NET] PB Impression locale
    Par David.V dans le forum SAP Crystal Reports
    Réponses: 4
    Dernier message: 17/05/2004, 11h53

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