<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://dotnetumbria.org/utility/FeedStylesheets/atom.xsl" media="screen"?><feed xmlns="http://www.w3.org/2005/Atom" xml:lang="it"><title type="html">Fabrizio Bernabei&amp;#39; Blog</title><subtitle type="html" /><id>http://dotnetumbria.org/blogs/bernabei/atom.aspx</id><link rel="alternate" type="text/html" href="http://dotnetumbria.org/blogs/bernabei/default.aspx" /><link rel="self" type="application/atom+xml" href="http://dotnetumbria.org/blogs/bernabei/atom.aspx" /><generator uri="http://communityserver.org" version="4.0.30417.1769">Community Server</generator><updated>2008-04-06T12:10:41Z</updated><entry><title>Localizzazione lato client con ASP.NET Ajax</title><link rel="alternate" type="text/html" href="/blogs/bernabei/archive/2008/08/06/localizzazione-lato-client-con-asp-net-ajax.aspx" /><id>/blogs/bernabei/archive/2008/08/06/localizzazione-lato-client-con-asp-net-ajax.aspx</id><published>2008-08-06T15:30:00Z</published><updated>2008-08-06T15:30:00Z</updated><content type="html">&lt;p&gt;Il framework ASP.NET Ajax implementa un sistema per la localizzazione delle applicazioni &amp;quot;lato client&amp;quot;. Se abbiamo uno ScriptManager in una pagina, impostando l&amp;#39;attributo&amp;nbsp; EnableScriptLocalization a &amp;quot;true&amp;quot; abilitiamo questa funzionalit&amp;agrave; che in sostanza &amp;quot;serve&amp;quot; dei file javascript in base alla cultura corrente. Prendiamo ad esempio il codice seguente e supponiamo che venga eseguita su un PC con impostata la localizzazione in lingua inglese (&lt;a href="http://it.wikipedia.org/wiki/Internazionalizzazione_e_localizzazione" target="_blank"&gt;en-US&lt;/a&gt; ad esempio):&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ScriptManager&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TheScriptManager&amp;quot;&lt;/span&gt; &lt;br /&gt;&lt;span style="color:#ff0000;"&gt;                         EnableScriptLocalization&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;true&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Scripts&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ScriptReference&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;~/js/Risorse.js&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Scripts&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ScriptManager&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Viene referenziato nello script manager il file Risorse.js, questo significa che il file in questione verr&amp;agrave; inviato (o meglio la direttiva script..ecc verr&amp;agrave; inserita nell&amp;#39;html prodotto dalla pagina) al client ql momento della richiesta della pagina. La particolarit&amp;agrave; &amp;egrave; che, avendo abilitato l&amp;#39;apposita opzione dello ScriptManager (che per default &amp;egrave; impostata a false) per la localizzazione, se nella posizione dove si trova il file js ne esiste una versione con nome Risorse.en-US.js, verr&amp;agrave; servita questa in quanto corrisponde alla cultura correntemente impostata.&lt;/p&gt;
&lt;p&gt;In questo modo &amp;egrave; possibile creare dei file js contenenti le risorse necessarie alla localizzazione in diverse lingue e ASP.NET Ajax provveder&amp;agrave; in automatico ad inviarci quello corretto per la lingua in uso. Un esempio di utilizzo potrebbe essere il seguente, un file di risorse fatto in questo modo:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; Risorse = {&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#006080;"&gt;&amp;quot;Lingua&amp;quot;&lt;/span&gt; : &lt;span style="color:#006080;"&gt;&amp;quot;it-IT&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#006080;"&gt;&amp;quot;testoBtnAnnulla&amp;quot;&lt;/span&gt; : &lt;span style="color:#006080;"&gt;&amp;quot;Annulla&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; };&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;oppure in questo nella sua versione per la lingua inglese (con estensione .en-US.js)&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; Risorse = {&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#006080;"&gt;&amp;quot;Lingua&amp;quot;&lt;/span&gt; : &lt;span style="color:#006080;"&gt;&amp;quot;en-US&amp;quot;&lt;/span&gt;,&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#006080;"&gt;&amp;quot;testoBtnAnnulla&amp;quot;&lt;/span&gt; : &lt;span style="color:#006080;"&gt;&amp;quot;Cancel&amp;quot;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt; };&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Nel codice javascript del client ci baster&amp;agrave; scrivere qualcosa tipo:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; alert(&amp;quot;La lingua corrente è: &amp;quot; + Risorse.Lingua);&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;Per ottenere un alert contenente un messaggio che cambier&amp;agrave; in base alla lingua correntemente selezionata.&lt;/p&gt;
&lt;p&gt;Fin qui tutto ok; qualche perplessit&amp;agrave; potrerbbe per&amp;ograve; nascere nel momento in cui la nostra applicazione debba gestire/memorizzare la cultura da utilizzare sul server. Gi&amp;agrave; perche il sistema appena illustrato tiene conto in realt&amp;agrave; della cultura corrente del client (dove gira il browser per intenderci) e non quella del server. Nella nostra applicazione invece potrebbe servire la cosa opposta perch&amp;egrave; ad esempio la lingua impostata da utilizzare pu&amp;ograve; essere impostata manualmente dall&amp;#39;utente attraverso l&amp;#39;interfaccia dell&amp;#39;applicazione e poi salvata nel profilo personale o in un cookie, e magari ci serve che sia lato server per localizzare altre parti/pagine dell&amp;#39;applicazione che &amp;quot;girano&amp;quot; soltanto sul server.&lt;/p&gt;
&lt;p&gt;In questi casi si pu&amp;ograve; comunque continuare ad utilizzare la tecnica appena descritta, con pochi accorgimenti. Prima di tutto possiamo in questo caso non abilitare la localizzazione automatica degli script, semplicemente impostando a false l&amp;#39;attributo EnableScriptLocalization dello ScriptManager o non impostandolo affatto in quanto come detto per default non &amp;egrave; abilitato.&lt;br /&gt;Ora possiamo sfruttare un&amp;#39;altra possibilit&amp;agrave; della localizzazione che consiste nel poter forzare per mezzo di un attributo la cultura con cui deve essere servito un particolare script dallo ScriptManager, semplicemente impostandola sul singolo riferimento per mezzo della propriet&amp;agrave; ResourceUICultures come nell&amp;#39;esempio seguente:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ScriptManager&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;runat&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;server&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;ID&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;TheScriptManager&amp;quot;&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;Scripts&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;         &lt;span style="color:#0000ff;"&gt;&amp;lt;&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ScriptReference&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;Path&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;~/js/Risorse.js&amp;quot;&lt;/span&gt; &lt;span style="color:#ff0000;"&gt;&lt;br /&gt;                                   ResourceUICultures&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;=&amp;quot;it-IT&amp;quot;&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;/&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;Scripts&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;&amp;lt;/&lt;/span&gt;&lt;span style="color:#800000;"&gt;asp:ScriptManager&lt;/span&gt;&lt;span style="color:#0000ff;"&gt;&amp;gt;&lt;/span&gt;&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;In questo modo lo ScriptManager cercher&amp;agrave; di utilizzare sempre e comunque un file scritto per la cultura italiana, indipendentemente da quella impostata sul client. Il prossimo passo per sfruttare questo meccanismo per il nostro scopo, &amp;egrave; quello di fare in modo che il file di risorse javascript venga effettivamente inviato specificandone la cultura, ma quest&amp;#39;ultima sia impostata dal server prima della renderizzazione della pagina. Quello che serve quindi &amp;egrave; semplicemente specificare il riferimento al file di risorse nello ScriptManager da codice a runtime impostandone di volta in volta la cultura da utilizzare (che ovviamente pu&amp;ograve; cambiare anche da un postback all&amp;#39;altro.. l&amp;#39;importante &amp;egrave; che per la cultura che si imposta ci sia un file js corrispondente, altrimenti le risorse non saranno inviate al client). Per farlo basta togliere dallo ScriptManager il riferimento al file Risorse.js dell&amp;#39;esempio ed aggiungerlo a runtime nel codice eseguito lato server, ad esempio nell&amp;#39;evento PageLoad della pagina in questo modo:&lt;/p&gt;
&lt;div&gt;
&lt;div style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   1:&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;protected&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;void&lt;/span&gt; Page_Load(&lt;span style="color:#0000ff;"&gt;object&lt;/span&gt; sender, EventArgs e)&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   2:&lt;/span&gt; {&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   3:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// Riferimento al file di risorse da utilizzare&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   4:&lt;/span&gt;     ScriptReference jsRisorse = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; ScriptReference(&lt;span style="color:#006080;"&gt;&amp;quot;~/js/Risorse.js&amp;quot;&lt;/span&gt;);&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   5:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   6:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// la cultura viene impostata leggendola dal thread corrente,&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   7:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// potrebbe essere diversa da quella del client&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   8:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// e anche da quella di altri processi che girano sul server web&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;   9:&lt;/span&gt;     jsRisorse.ResourceUICultures = &lt;span style="color:#0000ff;"&gt;new&lt;/span&gt; &lt;span style="color:#0000ff;"&gt;string&lt;/span&gt;[1] &lt;br /&gt;              { System.Threading.Thread.CurrentThread.CurrentUICulture.ToString() };&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  10:&lt;/span&gt;  &lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  11:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// il riferimento con la cultura specificata viene aggiunto allo&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  12:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// ScriptManager. Se ad esempio la cultura impostata fosse en-US &lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  13:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// è necessario che sia presente il file ~/js/Risorse.en-US.js&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  14:&lt;/span&gt;     &lt;span style="color:#008000;"&gt;// perchè questo verrà effettivamente referenziato nell&amp;#39;HTML&lt;/span&gt;&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:white;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  15:&lt;/span&gt;     TheScriptManager.Scripts.Add(jsRisorse);&lt;/pre&gt;
&lt;pre style="padding-right:0px;padding-left:0px;font-size:8pt;padding-bottom:0px;margin:0em;overflow:visible;width:100%;color:black;border-top-style:none;line-height:12pt;padding-top:0px;font-family:consolas, &amp;#39;Courier New&amp;#39;, courier, monospace;border-right-style:none;border-left-style:none;background-color:#f4f4f4;border-bottom-style:none;"&gt;&lt;span style="color:#606060;"&gt;  16:&lt;/span&gt; }&lt;/pre&gt;
&lt;/div&gt;
&lt;/div&gt;
&lt;p&gt;E con questo abbiamo raggiunto il nostro scopo, cio&amp;egrave; sul client verra servito il file js di risorse localizzato in base alle impostazioni memorizzate sul server, magari n el profilo dell&amp;#39;utente, e queste ultime possono essere diverse da quelle del PC client dove gira l&amp;#39;applicazione all&amp;#39;interno del browser.&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;
&lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:4ac4c524-3eb4-4d88-9c64-7fa5ef5c826e" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/ASP.NET" rel="tag"&gt;ASP.NET&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Ajax" rel="tag"&gt;Ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Localization" rel="tag"&gt;Localization&lt;/a&gt;&lt;/div&gt;
&lt;p&gt;&amp;nbsp;&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetumbria.org/aggbug.aspx?PostID=508" width="1" height="1"&gt;</content><author><name>fberna</name><uri>http://dotnetumbria.org/members/fberna/default.aspx</uri></author><category term="Ajax" scheme="http://dotnetumbria.org/blogs/bernabei/archive/tags/Ajax/default.aspx" /><category term="ASP.NET" scheme="http://dotnetumbria.org/blogs/bernabei/archive/tags/ASP.NET/default.aspx" /></entry><entry><title>Prova il microframework e vinci!!!</title><link rel="alternate" type="text/html" href="/blogs/bernabei/archive/2008/07/29/prova-il-microframework-e-vinci.aspx" /><id>/blogs/bernabei/archive/2008/07/29/prova-il-microframework-e-vinci.aspx</id><published>2008-07-29T07:16:00Z</published><updated>2008-07-29T07:16:00Z</updated><content type="html">&lt;p&gt;Il titolo di questo post non &amp;egrave; solo uno slogan da cartellone pubblicitario (anche se l&amp;#39;obiettivo &amp;egrave; quello &lt;img alt="Smile" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif" /&gt;) ma un&amp;#39;iniziativa &amp;quot;lanciata&amp;quot; dal team del Microsoft MF per incoraggiare gli sviluppatori a prendere parte al programma di beta della nuova versione 3.0.&lt;br /&gt;In sostanza, registrandosi al programma beta e scaricando l&amp;#39;SDK dal sito &lt;a title="http://connect.microsoft.com/netmf" href="http://connect.microsoft.com/netmf"&gt;http://connect.microsoft.com/netmf&lt;/a&gt; entro il 31 Agosto, si riceve un &amp;quot;biglietto elettronico&amp;quot; ed il 15 Settembre verr&amp;agrave; &amp;quot;estratto&amp;quot; il fortunato vincitore di un &lt;a title="RicaVision Universal Remote Control" href="http://www.amazon.com/Ricavision-VAVE100-SideShow-Universal-Control/dp/B00169YM9O" target="_blank"&gt;RicaVision Universal Remote Control&lt;/a&gt; (non so quanto utile, ma sicuramente un bell&amp;#39;oggettino)...&lt;/p&gt;
&lt;p&gt;&lt;img src="http://connect.microsoft.com/siteimages/6558f529-b337-4e13-a9bc-03b85c665d6d.jpg" align="left" alt="" /&gt; &lt;/p&gt;
&lt;p&gt;Per i &lt;a href="http://dotnetumbria.org/blogs/articoli/archive/2008/06/25/primi-passi-con-il-net-microframework.aspx" target="_blank"&gt;numerosi&lt;/a&gt; &lt;a href="http://dotnetumbria.org/blogs/cruciani/archive/2008/05/31/book-review-expert-net-micro-framework.aspx" target="_blank"&gt;appassionati&lt;/a&gt; di Micro Framework che ci sono da queste parti, una buona scusa per studiarsi le novit&amp;agrave; della nuova versione di questo framework che, a prescindere dalle trovate marketing, promette veramente molto bene. Ecco una sintesi delle novit&amp;agrave; che saranno introdotte (tratte dal sito ufficiale):&lt;/p&gt;
&lt;p&gt;&amp;bull; Interop and native code linking&lt;br /&gt;&amp;bull; Touch screen and inking/gesturing support&lt;br /&gt;&amp;bull; USB device&lt;br /&gt;&amp;bull; SSL (secure sockets) for the TCP/IP stack&lt;br /&gt;&amp;bull; Visual Studio 2008 support&lt;br /&gt;&amp;bull; DPWS (Devices Profile for Web Services), including new codegen tools&lt;br /&gt;&amp;bull; 4bpp font support&lt;br /&gt;&amp;bull; Enhanced and more compatible serial/UART model&lt;br /&gt;&amp;bull; &lt;i&gt;File system*&lt;/i&gt;&lt;br /&gt;&amp;bull; &lt;i&gt;802.11 Wi-Fi infrastructure*&lt;/i&gt;&lt;br /&gt;&amp;bull; &lt;i&gt;Support for more cores and processor architectures*&lt;/i&gt;&lt;br /&gt;&amp;bull; &lt;i&gt;Publicly available Porting Kit for purchase* (separate product not included with the SDK)&lt;/i&gt;&lt;br /&gt;(Features noted with &lt;b&gt;*&lt;/b&gt; will not be available in the first public beta)&lt;/p&gt;
&lt;p&gt;&lt;br /&gt;A questo punto non resta altro che provare...&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetumbria.org/aggbug.aspx?PostID=479" width="1" height="1"&gt;</content><author><name>fberna</name><uri>http://dotnetumbria.org/members/fberna/default.aspx</uri></author><category term="microframework" scheme="http://dotnetumbria.org/blogs/bernabei/archive/tags/microframework/default.aspx" /></entry><entry><title>ASP.NET Ajax - Tips &amp; Links</title><link rel="alternate" type="text/html" href="/blogs/bernabei/archive/2008/05/05/asp-net-ajax-tips-amp-links.aspx" /><id>/blogs/bernabei/archive/2008/05/05/asp-net-ajax-tips-amp-links.aspx</id><published>2008-05-05T13:44:31Z</published><updated>2008-05-05T13:44:31Z</updated><content type="html">&lt;p&gt;Microsoft ASP.NET Ajax e l&amp;#39;Ajax Control Toolkit (di cui abbiamo parlato durante l&amp;#39;&lt;a href="http://dotnetumbria.org/blogs/eventi/archive/2008/02/13/programma-del-visual-studio-2008-community-launch.aspx" target="_blank"&gt;ultimo evento&lt;/a&gt;) mettono a disposizione numerosi controlli subito utilizzabili nella pallicazioni web per aggiungere funzionalità Ajax con il minimo sforzo. Spesso però per ottenere effetti e comportamenti un po&amp;#39; più &amp;quot;sofisticati&amp;quot; ed alla moda, c&amp;#39;è bisogno di scrivere qualche riga di codice in più.&lt;/p&gt; &lt;p&gt;Di seguito segnalo alcuni utili link di brevissimi articoli o vere e proprie &amp;quot;pillole&amp;quot; per personalizzare/migliorare l&amp;#39;utilizzo di alcuni controlli o semplicemente per capirne meglio il funzionamento:&lt;/p&gt; &lt;ul&gt; &lt;li&gt;&lt;a href="http://weblogs.asp.net/pglavich/archive/2008/04/07/reducing-page-load-times-with-updatepanels-and-timers.aspx" target="_blank"&gt;Reducing page load times with UpdatePanels and timers&lt;/a&gt; (ENG)&lt;br /&gt;Breve articolo su come caricare in modo &amp;quot;differito&amp;quot; il contenuto dei tabs di un Tab control dell&amp;#39;Ajax Control Toolkit.&lt;/li&gt; &lt;li&gt;&lt;a href="http://aspnetcafe.com/post/Focusing-controls-from-serverside-with-and-without-AJAX-Extensions.aspx" target="_blank"&gt;Focusing controls from serverside with and without AJAX Extensions&lt;/a&gt; (ENG)&lt;br /&gt;Tip per dare il fuoco ad un controllo di una pagina ASP.NET con e senza l&amp;#39;utilizzo di Ajax.&lt;/li&gt; &lt;li&gt;&lt;a href="http://mattberseth.com/blog/2008/04/ajaxcontroltoolkit_tabcontaine.html" target="_blank"&gt;AjaxControlToolkit TabContainer Theme Gallery&lt;/a&gt; (ENG)&lt;br /&gt;Stili per la personalizzazione grafica del Tab control dell&amp;#39;Ajax Control Toolkit. Inoltre consiglio di guardare anche gli altri post di questo autore perchè ricchi di contenuti simili e molto utili sulla personalizzazione di controlli ASP.NET e Ajax.&lt;/li&gt; &lt;li&gt;&lt;a href="http://blogs.ugidotnet.org/dinoes/archive/2008/04/09/92146.aspx" target="_blank"&gt;La proprietà BehaviorID&lt;/a&gt; (ITA)&lt;br /&gt;Interessante post di Dino Esposito che illustra l&amp;#39;utilità dell&amp;#39;utilizzo di questa proprietà dei controlli dell&amp;#39;Ajax Control Toolkit.&lt;/li&gt; &lt;li&gt;&lt;a href="http://www.aspitalia.com/articoli/asp.net3.5/ajax-custom-extender-p-2.aspx" target="_blank"&gt;Realizzare un custom extender AJAX con ASP.NET 3.5&lt;/a&gt; (ITA)&lt;br /&gt;Articolo completo che spiega passo-passo la realizzazione di un custom extender Ajax (argomento tra l&amp;#39;altro trattato proprio durante l&amp;#39;evento)&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;Per ora è tutto. Ovviamente se qualcuno volesse condividere qualche altro link utile è liberissimo di lasciare un commento a questo post &lt;img alt="Winking" src="http://us.i1.yimg.com/us.yimg.com/i/mesg/emoticons7/3.gif" /&gt; oppure si potrrebbe aprire una discussione direttamente sul forum.&lt;/p&gt; &lt;p&gt;&amp;nbsp;&lt;/p&gt; &lt;div class="wlWriterSmartContent" id="scid:0767317B-992E-4b12-91E0-4F059A8CECA8:8437d99a-f780-48bc-a9d5-29a514400e88" style="padding-right:0px;display:inline;padding-left:0px;padding-bottom:0px;margin:0px;padding-top:0px;"&gt;Technorati tags: &lt;a href="http://technorati.com/tags/Ajax" rel="tag"&gt;Ajax&lt;/a&gt;, &lt;a href="http://technorati.com/tags/Tips" rel="tag"&gt;Tips&lt;/a&gt;&lt;/div&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetumbria.org/aggbug.aspx?PostID=347" width="1" height="1"&gt;</content><author><name>fberna</name><uri>http://dotnetumbria.org/members/fberna/default.aspx</uri></author><category term="Tips" scheme="http://dotnetumbria.org/blogs/bernabei/archive/tags/Tips/default.aspx" /><category term="Ajax" scheme="http://dotnetumbria.org/blogs/bernabei/archive/tags/Ajax/default.aspx" /></entry><entry><title>Nuova avventura</title><link rel="alternate" type="text/html" href="/blogs/bernabei/archive/2008/04/06/nuova-avventura.aspx" /><id>/blogs/bernabei/archive/2008/04/06/nuova-avventura.aspx</id><published>2008-04-06T10:10:41Z</published><updated>2008-04-06T10:10:41Z</updated><content type="html">&lt;p&gt;Questo è il primo post (spero di una lunga serie &lt;img alt="Tongue out" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/tongue_smile.gif" /&gt;) su dotNetUmbria quindi cosa dire se non.. un caloroso benvenuto a me &lt;img alt="Smile" src="http://messenger.msn.com/MMM2006-04-19_17.00/Resource/emoticons/regular_smile.gif" /&gt;.&lt;/p&gt; &lt;p&gt;Ormai a poche ore dall&amp;#39;&lt;a href="http://dotnetumbria.org/blogs/eventi/archive/2008/02/13/programma-del-visual-studio-2008-community-launch.aspx" target="_blank"&gt;evento&lt;/a&gt; vorrei approfittare subito per ringraziare &lt;a href="http://dotnetumbria.org/blogs/cruciani/" target="_blank"&gt;Andrea&lt;/a&gt; e &lt;a href="http://dotnetumbria.org/blogs/possanzini/" target="_blank"&gt;Paolo&lt;/a&gt; per la fiducia e la possibilità offerta sia a me che al &amp;quot;compare&amp;quot; &lt;a href="http://dotnetumbria.org/blogs/belia/" target="_blank"&gt;Simone&lt;/a&gt;. Condividere queste avventure con amici vecchi e nuovi, parafrasando il famoso spot, non ha prezzo.&lt;/p&gt; &lt;p&gt;Per ora un saluto a tutti, ci vediamo l&amp;#39;8 Aprile mi raccomando!&lt;/p&gt;&lt;div style="clear:both;"&gt;&lt;/div&gt;&lt;img src="http://dotnetumbria.org/aggbug.aspx?PostID=293" width="1" height="1"&gt;</content><author><name>fberna</name><uri>http://dotnetumbria.org/members/fberna/default.aspx</uri></author><category term="evento" scheme="http://dotnetumbria.org/blogs/bernabei/archive/tags/evento/default.aspx" /></entry></feed>