Invest in people before investing in tools

Il blog di Matteo Baglini
posts - 118, comments - 95, trackbacks - 697

[Spring.NET #22] Spring.Core, IMessageSource by ResourceSetMessageSource

Nel post precedente ho parlato dell'interfaccia IMessageSource e della sua implementazione più semplice, StaticMessageSource. In questo post invece vedremo la più utile implementazione ResourceSetMessageSource, la quale permette di leggere le risorse in maniera localizzata da file .resx direttamente con l' ApplicationContext, definendo il funzionamento tramite il file di configurazione. Come di consueto creiamo una Console Application ed in seguito aggiungiamo due file di risorse di nome AppRescource.resx ed AppResource.en-US.resx, nel primo inseriamo, utilizzando come chiave la stringa "HelloMessage", la frase localizzata in italiano, nel secondo invece, sempre con la solita chiave, inseriamo la frase localizzagta in inglese. Adesso aggiungendo un file di configurazione dell'applicazione (App.config), proseguiamo inserendo la definizione dell'assembly contenente i file di risorse:

<object name="myResourceManager"
  type="Spring.Objects.Factory.Config.ResourceManagerFactoryObject, Spring.Core">
  <property name="baseName" value="SpringSeries.Core.ResourceSetMessageSource.AppResource" />
  <property name="assemblyName" value="20.ResourceSetMessageSource" />
</object>

per accedere alle risorse definite dobbiamo definire uno o più ResourceManager indicandoli tramite il tag List:

<object name="messageSource" type="Spring.Context.Support.ResourceSetMessageSource, Spring.Core">
  <property name="resourceManagers">
    <list>
      <ref object="myResourceManager" />
    </list>
  </property>
</object>

quanfo richiederemo una risorsa tramite la sua chiave Spring.NET si occupera di effettuare il search all'interno di tutti i ResourceManager definiti. In fine non resterà altro che creare il nostro ApplicationContext e richedere la risorsa con i metodi di IMessageSource:

   1:  using System;
   2:  using System.Globalization;
   3:  using Spring.Context;
   4:  using Spring.Context.Support;
   5:   
   6:  namespace SpringSeries.Core.ResourceSetMessageSource {
   7:      class Program {
   8:          static void Main(string[] args) {
   9:              string KEY = "HelloMessage";
  10:   
  11:              IApplicationContext _ctx = ContextRegistry.GetContext();
  12:   
  13:              CultureInfo _usCulture = new CultureInfo("en-US");
  14:   
  15:              Console.WriteLine("Culture corrente: {0}", System.Threading.Thread.CurrentThread.CurrentUICulture.DisplayName);
  16:              Console.WriteLine("Messaggio con la Culture corrente: {0}", _ctx.GetMessage(KEY));
  17:              Console.WriteLine("Messaggio con la Culture en-US: {0}", _ctx.GetMessage(KEY, _usCulture));
  18:   
  19:              Console.Read();
  20:          }
  21:      }
  22:  }
Technorati Tag:

Print | posted on lunedì 10 dicembre 2007 21:55 | Filed Under [ .NET OpenSource Spring.NET ]

Powered by:
Powered By Subtext Powered By ASP.NET