Chi ha
mai provato a sviluppare una applicazione Localizzata quando
addirittura non Globalizzata
, si sarà reso conto di quanto sia noioso
mano a mano che si sviluppa porre nei file di risorse le stringhe che poi
dovranno essere tradotte nelle varie lingue. Mi riferisco soprattutto alle
stringhe perchè in realtà sono quelle che riguardano almeno l'80% della fatica
necessaria. Personalmente trovo questa attività molto deconcentrante.
Tipicamente mentre sto scrivendo una porzione di codice, dover copiare una
stringa nel file di risorse per poi referenziarla mi fa perdere il filo di
quello che stavo realizzando, mentre lasciare le stringhe ad un passaggio
successivo fa sì che me dimentichi sempre qualcuna. Per questo ho elaborato un
metodo che sto usando proficuamente con IMHO 2.0, e che riesce a salvare le
proverbiali capra e cavoli. Il mio metodo si basa sulla seguente
classe:
using System.Reflection;
using System.Resources;
namespace Elite.Imho2.Resources
{
public sealed class Strings
{
private static readonly ResourceManager mResourceManager =
new ResourceManager(
"Elite.Imho2.Resources.Strings",
Assembly.GetExecutingAssembly());
private Strings()
{}
public static string Get(string name)
{
if (mResourceManager.GetString(name) as string != null)
return mResourceManager.GetString(name) as string;
return name;
}
}
}
La classina, un po'
banale se vogliamo è un singleton che permette di accedere ad un ResourceManager
creato al primo accesso. La particolarità della classe è che il metodo Get()
qualora non trovi una risorsa corrispondente a "name" ritornerà
"name
" stesso come stringa invece che sollevare un'eccezione. In queso modo,
con un po' di astuzia si potranno scrivere delle righe che usano questa classe
come in questo eempio:
MessageBox.Show(Strings.Get("IMHO 2.0"), Strings.Get("Please enter the title"));
In questo modo l'applicazione sarà popolata con delle stringhe
reali anche durante lo sviluppo e in fase di localizzazione sarà molto
semplice tradurre le stringhe senza dover rincorrere astruse sigle in giro per
il codice.
powered by IMHO
1.3