Si certo.
A grandi linee...
I file di risorse sono file appositamente creati per queste esigenze. Per utilizzarli nel tuo sito devi creare una directory "resources" nella root e tenere li tutti i file .resources.
La sintassi di un file resources è semplice:
codice:
;commento
variabile1 = valore1
variabile2 = valore2
...
variabileN = valoreN
Deve esistere un file .resources di default che sarà poi la tua lingua di default. Solitamente come nome di file si utilizza "strings.resources". I file di risorsa sono però file compilati quindi prima ti devi creare un file txt in chiaro.
Facciamo un esempio: il mio sito è di 2 lingue, inglese (default) e italiano. Creo 2 file:
strings.txt
strings.it.txt
strings.txt è il file di default per il sito e qui metto i testi in lingua inglese. Mentre per tutte le altre lingue bisogna indicare il suffisso della nazione nel nome del file (quel ".it" non è a caso). Volendo aggiungere un testo per i tedeschi: strings.de.txt
Ok ci siamo? Una volta completato il file delle risorse va compilato da riga di comando con:
RESGEN strings.txt
(va fatto per ogni file di risorse ovviamente)
A questo punto abbiamo pronte le ns risorse. Per poterle ora utilizzare nelle pagine del sito bisogna richiamare alcuni metodi/proprietà dei namespace Globalization e Resources. Io per es. utilizzo sempre una semplice classe creata al volo qualche tempo fa:
codice:
namespace Languages {
using System;
using System.IO;
using System.Globalization;
using System.Resources;
using System.Threading;
using System.Web.UI;
using System.Web.UI.WebControls;
public class Translate {
private static ResourceManager rm;
private static CultureInfo ci;
public Translate() {
//ci = new CultureInfo("en"); // con questo imposto a EN la lingua
ci = CultureInfo.CurrentCulture;
rm = ResourceManager.CreateFileBasedResourceManager("strings",
PathFileRisorse, null);
}
~ Translate() {
rm.ReleaseAllResources();
}
public string GetLabel(string strLabel) {
return rm.GetString(strLabel, ci);
}
public string Culture {
get {
return ci.Name;
}
set {
ci = new CultureInfo(value);
}
}
}
}
In questo modo dalle mie pagine ASP.NET le stringhe tradotte in questo modo:
<%= myTranslate.GetLabel("variabile1") %>
Dove l'oggetto myTranslate è stato inizializzato così:
codice:
Translate myTranslate {
get {
Translate tmpTranslate;
if ( Session["myTranslate"] == null ) {
tmpTranslate = new Translate();
} else {
tmpTranslate = (Translate) Session["myTranslate"];
}
Session["myTranslate"] = tmpTranslate;
return tmpTranslate;
}
}
Info: il framework di default assegna all'oggetto Culture la lingua che utilizza il visitatore del tuo sito (sempre che sia presente). Quindi avendo IT e EN, un italiano vede il sito in IT, mentre un inglese (o tutti gli altri) lo vedono in EN.
Così anche se richiami Label inesistenti in una lingua: in questo caso vengono richiamate quelle del file di default.
Scusa ho scritto un pò velocemente