453 messaggi dal 11 febbraio 2013
ultima domanda sul tema

ho creato i file di risorse nella cartella AppGlobalResources (resource.resx,resource.en.resx,resource.es.resx...)

al login creo il cookie

protected void ddlLanguages_SelectedIndexChanged(object sender, EventArgs e) 
    {
       
        HttpCookie language = new HttpCookie("UserLanguage");

        switch (ddlLanguages.SelectedItem.ToString())
        {
            case "Ita":
                language.Values["UserLanguage"] = "it-IT";
                break;
            case "Eng":
                language.Values["UserLanguage"] = "en-US";
                break;
            case "Esp":
                language.Values["UserLanguage"] = "es-AR";
                break;
           
        }

        language.Expires = DateTime.Now.AddDays(1);
        Response.Cookies.Add(language);
    }


in una classe che deriva da Page imposto la culture
protected override void InitializeCulture()
    {
        
        String userLang = "";  
        if (Request.Cookies["UserLanguage"] != null)
        {
            HttpCookie CookieKey = Request.Cookies["UserLanguage"];
            String cookieValue = CookieKey.Value.Split('=')[1];
            switch (cookieValue)
            {
                case ("it-IT"):
                    userLang = cookieValue;
                    break;
                case ("en-US"):
                    userLang = cookieValue;
                    break;
                case ("es-AR"):
                    userLang = cookieValue;
                    break;
            }

            Thread.CurrentThread.CurrentCulture = new CultureInfo(userLang);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(userLang);
        }
        else
        {
            userLang = "it-IT";
            Thread.CurrentThread.CurrentCulture = new CultureInfo(userLang);
            Thread.CurrentThread.CurrentUICulture = new CultureInfo(userLang);
        }

        //Response.Write(Thread.CurrentThread.CurrentCulture.Name);
    }


Funziona tutto correttamente ...però se lascio la culture it-IT alla lettura del cookie ottengo sempre null
cosi debbo aggiungere un ramo else
  public IQueryable<string> selectCollezione()
    {
        
        List<Collection> collezione = new List<Collection> {new Collection{ COLLEZIONE="A",DESCRIZIONE="B"} };

        if (Request.Cookies["UserLanguage"] != null)
        {
            HttpCookie CookieKey = Request.Cookies["UserLanguage"];
            String cookieValue = CookieKey.Value.Split('=')[1];
            switch (cookieValue)
            {
                case ("it-IT"):
                    collezione =... COLONNA ITALIANO;
                    break;
                case ("en-US"):
                    collezione = ecc...
            }
        }
        else
        {
            collezione = ... COLONNA ITALIANO;// DEBBO RIPETERE QUI *****
        }

        return collezioneSorted.AsQueryable();

    }


Non capisco perchè succede e vorrei eliminare questa duplicazione

grazie per la competenza e la pazienza
Modificato da jjchuck il 11 settembre 2017 16.28 -
10.265 messaggi dal 09 febbraio 2002
Contributi
Ciao,
la lettura del cookie dovresti averla solo in un punto, nel metodo InitializeCulture.
Nel resto dell'applicazione puoi leggere il valore di Thread.CurrentThread.CurrentCulture, che ormai è stato valorizzato.

//lingua avrà valore "it", oppure "en", ecc... in base alla lingua selezionata
var lingua = System.Threading.Thread.CurrentThread.CurrentCulture.TwoLetterISOLanguageName;


ciao,
Moreno

Enjoy learning and just keep making
453 messaggi dal 11 febbraio 2013
Hai ragione
domanda davvero stupida

sorry

grazie

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.