Localiser ses applications
Des outils ont été intégrés au Framework.NET pour permettre la localisation des applications Web.
Creation des ressources
Ouvrir un fichier .aspx en mode design et choisir le menu Tools > Generate Local Resouces
Cela va créer un fichier .aspx.resx dans le dossier, vous pouvez le copier en rajoutant le code de la langue désiré pour obtenir un fichier de cette forme : .aspx..resx .
exemple : Default.aspx.en.resx
Ce fichier est un fichier XML contenant les champs des controles pouvant être traduits. Il ne peut pas être mis a jour pour prendre en compte de nouveaux contrôles, cependant ceux ci peuvent être ajoutés manuellement.
Dans le code du fichier aspx on ajoute l'attribut meta:ressourcekey="" au contrôle désiré.
Dans les fichiers .resx on ajoute la valeur du tag meta:resourcekey suivi de l'attribut a traduire.
exemple :
Default.aspx
Default.aspx.resx
[ helloWorld.Text ] [Bonjour le monde]
Default.aspx.en.resx
[ helloWorld.Text ] [Hello world]
Accéder aux ressources en code behind
On aura souvent besoin de définir des champs textuels a partir du code behind, pour cela nous pouvons utiliser les resources déjà crées avec la fonction.
exemple :
string helloString = this.GetLocalResourceObject("helloWorld.Text");
Localiser ses bases de données
Il arrive que du texte traduisible soit inclu dans les bases de données. On prendra soin de créer un nouveau champ ayant le nom d'origine auquel est accolé une extension de langage.
exemple :
[id]
[champ1]
[champ1_en]
Ensuite deux cas de figure peuvent se produire :
-1- La requète pour accéder aux données est construite en code behind, on ajoute dynamiquement l'extention.
exemple :
string langExt = "";
if (Session["language"] != "fr-FR")
{
langExt = "_en";
}
string sqlQuery = "SELECT champ1"+ langExt + " FROM table";
-2- L'accès aux données se fait par un controle SqlDataSource , il faudra créer deux controles et subtituer les identifiants de ces controles selon la langue voulue lors de l'initialisation et le chargement de la page ( Page_Load() et Page_Init() ) Attention , il faut effectuer ces modifications même en cas de postback car les controles retrouvent leur identifiant d'origine a chaque chargement de page.
exemple :
protected void Page_Init(object sender, EventArgs e)
{
if (Session["Language"] != "fr-FR")
{
SqlDataSource.ID = "SqlDataSourceBak";
SqlDataSourceEn.ID = "SqlDataSource";
}
}
Attention a la contruction de votre datasource contenant le texte traduit !! Il faudra que la requète soit de cette forme :
SELECT champ1_en AS champ1 FROM table