Pagina 2 di 3 primaprima 1 2 3 ultimoultimo
Visualizzazione dei risultati da 11 a 20 su 22
  1. #11
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    il best match credo consista nel fatto che se imposti l'inglese di Inghilterra e non lo trova, imposta l'inglese d'America, se lo trova, e cosi' via...



    di solito quando non va (fra le pagine) è colpa dei cookies/httpsession.. almeno dalla mia esperienza (un paio di volte), poi non so

  2. #12
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    L'uso delle risorse era nell'esempio: la classe Resources gestisce le label sulla pagina (io ci ho messo in mezzo la classe Messages): Resources.Messages.lbl_hrefschema

    ___________________________________
    In generale, se hai un file di risorse che si chiamano ad esempio "risorse_linguaggi.resx" e "risorse_linguaggi.en-US.resx", "risorse_linguaggi.es-MX.resx" basta fare:

    Resources.risorse_linguaggi.nomeLabel

    "Resources" è il namespace che mette il framework in automatico quando aggiungi files di risorse nella cartella App_GlobalResources
    Ultima modifica di djciko; 04-03-2019 a 18:01

  3. #13
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    Comunque, se si vuole farlo a Runtime (cioe' non dalla pagina di login, ma durante l'uso dell'applicazione), mi è bastato fare (ad esempio il francese):

    codice:
    Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture("fr-FR");
    Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture("fr-FR");


    ovviamente il francese deve essere fra le lingue/culture disponibili nel sistema operativo...
    a me cambia anche il sistema di gesgtione della valuta e quello numerico..

    PS: scusa, nel primo intervento ho corretto, era CultureInfo.CreateSpecificCulture, non new CultureInfo
    Ultima modifica di djciko; 03-03-2019 a 14:29

  4. #14
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    se proprio non ci riesci, Mac, l'evento in cui settare la culture nel Global.asax è Application_PreRequestHandlerExecute.

    In quest'altro esempio usavo la session con la stringa selectedLanguage (valorizzata nella pagina di login) con it-IT oppure en-US, etc:

    codice:
    protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
    {
        if (System.Web.HttpContext.Current.Session != null)
        {
            if (HttpContext.Current.Session["selectedLanguage"] != null)
            {
                string selectedLanguage = HttpContext.Current.Session["selectedLanguage"].ToString();
    
                Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
                Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
            }
        }
    }

    PS: Negli altri eventi del Global.asax la sessione non è disponibile

  5. #15
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    nel link che avevo postato prima indicano l'evento Application_AcquireRequestState... la cosa antipatica è che viene lanciato ad ogni http request quindi piuttosto spesso
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  6. #16
    Moderatore di ASP.net L'avatar di djciko
    Registrato dal
    Nov 2002
    Messaggi
    6,886
    in effetti hai ragione, con i nuovi framework non mantiene la cultura, ho verificato...

    si deve fare per tutte le richieste, in un evento (l'uno vale l'altro) del global in cui la sessione è visibile...(se vuoi usare la sessione per memorizzare la scelta dell'utente).


    altrimenti ci sono le personalizzazioni che includono la lingua, ma e' tutto un altro mondo...

    Ho fatto un esempio ora:

    WEB.Config:
    codice:
     <system.web>
        <globalization culture="en-US" uiCulture="en-US" />
        ....

    GLOBAL.asax
    codice:
    protected void Application_PreRequestHandlerExecute(Object sender, EventArgs e)
    {
    	if (System.Web.HttpContext.Current.Session != null)
    	{
    		if (HttpContext.Current.Session["selectedLanguage"] != null)
    		{
    			//
    			// Setta la lingua selezionata dall'utente (messa in sessione nella pagina di login)
    			//
    			string selectedLanguage = HttpContext.Current.Session["selectedLanguage"].ToString();
    			Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    			Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    		}
    	}
    }

    LOGIN.aspx
    codice:
    <form id="form1" runat="server">
    	<div>
    		<div style="background-color:blue; color: white; text-shadow:initial; text-align:center; vertical-align:central;">
    			<h1><span>Culture (Club)</span></h1>
    			<br />
    			Culture disponibili nel sistema:
    			<asp:DropDownList ID="ddlanguagesAvailable" runat="server"></asp:DropDownList>
    			<br /> 
    			<br />
    		</div>		
    		<hr /><br />
    		Seleziona la cultura/linguaggio desiderato:
    		<asp:DropDownList Width="100px" ID="ddlanguages" runat="server"></asp:DropDownList>&nbsp;&nbsp;<asp:Button ID="btnLogin" runat="server" Text="Login" OnClick="btnLogin_Click" />
    	</div>
    </form>

    LOGIN.aspx.cs
    codice:
    protected void Page_Load(object sender, EventArgs e)
    {
    	string defaultLanguage = string.Empty;
    
    
    	// ---------------------------------------------------------------
    	// Tutte le lingue disponibili nel SO (per elencarle, per info)
    	// ---------------------------------------------------------------
    	CultureInfo[] cinfo = CultureInfo.GetCultures(CultureTypes.AllCultures); //  & ~CultureTypes.NeutralCultures -- non associate 
    
    
    	foreach (CultureInfo culture in cinfo)
    		ddlanguagesAvailable.Items.Add(new ListItem(culture.DisplayName + " " + culture.Name, culture.Name)); 
    	// -----------------------------------------------------------------------------------------------------------------------------
    
    
       
    	if (!IsPostBack)
    	{
    		// Inizialmente, è settata la Culture di configurazione, presente in Web.Config
    		//   <system.web>
    		//     <globalization culture = "en-US" uiCulture = "en-US" />
    		defaultLanguage = Thread.CurrentThread.CurrentUICulture.ToString();
    
    
    
    
    		// Dropdown Init
    		//
    		ddlanguages.Items.Add(new ListItem("", ""));
    		ddlanguages.Items.Add(new ListItem("it-IT", "it-IT"));
    		ddlanguages.Items.Add(new ListItem("en-US", "en-US"));
    		ddlanguages.Items.Add(new ListItem("es-MX", "es-MX"));
    	}
    	else 
    	{
    		if (ddlanguages.SelectedValue != String.Empty)
    		{
    			// Setta la lingua selezionata dall'utente
    			//
    			String selectedLanguage = ddlanguages.SelectedValue;
    			UICulture = selectedLanguage;
    			Culture = selectedLanguage;
    
    
    			Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    			Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(selectedLanguage);
    
    
    			System.Web.HttpContext.Current.Session.Add("selectedLanguage", selectedLanguage.ToString());
    		}
    		else
    		{
    			// Lingua definita nel Web.Config
    			//
    			Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture(defaultLanguage);
    			Thread.CurrentThread.CurrentUICulture = CultureInfo.CreateSpecificCulture(defaultLanguage);
    		}
    	}
    }
    
    
    protected void btnLogin_Click(object sender, EventArgs e)
    {
    	Response.Redirect("Default.aspx");
    }

    DEFAULT.aspx
    codice:
    <form id="form1" runat="server">
    	<div>
    		<h2><span id="sp_welcome" runat="server"></span></h2>
    		<br />
    		<asp:Button ID="btChangeCulture" OnClick="btChangeCulture_Click" Text="<%$ Resources:Resource, btChangeCultureText %>" runat="server" />
    	</div>
    </form>

    DEFAULT.aspx.cs
    codice:
    protected void Page_Load(object sender, EventArgs e)
    {
    	// la cultura è settata nel global.asax, nell'evento <Application_PreRequestHandlerExecute> 
    	sp_welcome.InnerText = Resources.Resource.lbl_welcome;
    	sp_welcome.InnerText += " " + Resources.Resource.lbl_today + " " + DateTime.Now;
    }
    
    
    protected void btChangeCulture_Click(object sender, EventArgs e)
    {
    	Response.Redirect("Login.aspx");
    }


    ...e nella cartella App_GlobalResources i files:

    Resource.it-IT.resx
    Resource.resx // ( quello di default)
    Resource.es-MX.resx



    con (all'interno) le label diversificate per lingua:
    codice:
      /.... omissis/
      <data name="btChangeCultureText" xml:space="preserve">
        <value>Cambiar idioma</value>
      </data>
      <data name="lbl_today" xml:space="preserve">
        <value>Hoy es el</value>
      </data>
      <data name="lbl_welcome" xml:space="preserve">
        <value>Bienvenida !</value>
      </data>
    </root>

  7. #17
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  8. #18

  9. #19
    Utente di HTML.it L'avatar di supermac
    Registrato dal
    Jun 2001
    Messaggi
    1,857
    si mi pare vada tutto
    comunque per pigrizia ho lasciato il codice nel global.asa nell'evento Application_AcquireRequestState
    W la Ferari effetrenavenave!
    il computer è un somaro veloce! (neanche tanto ndr)

  10. #20

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2024 vBulletin Solutions, Inc. All rights reserved.