Localisation et JavaScript – utilisation des ScriptResources et WebResources – ASP.net Ajax
Lorsque l’on fait une application web contenant du JavaScript, tôt ou tard se pose la question de la localisation, c’est à dire l’affichage des textes en différentes langues. ASP.net Ajax propose une solution utilisant les ressources .net, les fichiers resx.
Afin de mettre en place cette solution, plusieurs étapes sont nécessaires. Tout d’abord il faut utiliser un projet de type “Class Library” puis ajouter un fichier JavaScript que l’on inclut en “Embedded Resource”, il faut également rajouter les fichiers de ressources contenant les différents textes.
Il faut ensuite indiquer que notre fichier JavaScript est une WebResource, nous allons pour cela utiliser l’attribut WebResource. Le premier argument, correspond au nom de votre ressource, il est composé du namespace et du nom du fichier, vous pouvez retrouver ce nom en utilisant Reflector.
[assembly: WebResource("ClassLibrary1.Pouet.js", "application/x-javascript")]
Il est également nécessaire d’indiquer que notre WebResource est un ScriptResource, on utilise pour cela l’attribut ScriptResource. C’est ici que l’on associe le fichier Javascript avec notre fichier de ressource. Le premier argument correspond au nom de la WebRessource, le second au nom de la ressource contenant le texte, le dernier au nom de l’objet contenant le texte coté client.
[assembly: ScriptResource("ClassLibrary1.Pouet.js", "ClassLibrary1.Pouet", "Pouet.Res")]
Il ne reste plus qu’à ajouter votre fichier JavaScript à votre page, pour cela 2 possibilités :
public class MyControl : ScriptControl
{
// ...
protected override IEnumerable<ScriptDescriptor> GetScriptDescriptors()
{
yield break;
}
protected override IEnumerable<ScriptReference> GetScriptReferences()
{
yield return new ScriptReference("ClassLibrary1.Pouet.js",
typeof(MyControl).Assembly.FullName);
}
}
- Soit vous ajoutez votre script via le ScriptManager :
<asp:ScriptManager runat="server">
<Scripts>
<asp:ScriptReference Assembly="ClassLibrary1" Name="ClassLibrary1.Pouet.js" />
</Scripts>
</asp:ScriptManager>
Dans les 2 cas, votre page pointera vers un nouveau fichier JavaScript :
On peut voir qu’un nouvel objet à été créé côté client. Cet objet contient les différents textes localisés. Il est alors possible d’accéder aux ressources via :
Comment est géré le choix de la langue à utiliser ?
Tout comme ASP.net, le choix de la ressource à utiliser est sélectionné en fonction de la culture du thread courant.
Il est possible de spécifier cette culture au niveau du web.config via la section system.web/globalization. Les valeurs possibles sont “auto” pour utiliser la langue du navigateur ou une culture existante par exemple “FR-fr”
<configuration>
...
<system.web>
...
<globalization uiCulture="auto"/>
</system.web>
</configuration>
Et vous ? Comment gérez-vous la localisation en JavaScript ?