Friday, July 2, 2010

ASP.NET Localization


I have written some blog post on globalization before, but all this was something to do with desktop application or general best practices. This week I was interested in localizing ASP.NET applications (well, I was forced to :))

So, let me start by giving an introduction to ASP.NET resource assignment features. Basically it's the same .NET concept, you create resource files, compile and create satellite assemblies and link it to the main DLL.
The resource assignment would happen through the resource manager.

Although you can compile your resources before deploying, you can also take the feature of a ASP.NET folder named App_LocalResources, you can just plaace all your resource files with these folder and ASP.NET will automatically compile and create satellite assemblies.

The screen shot on the left shows a screen shot of my solution.

Here I have added the resource files for the Local.aspx into the App_LocalResources folder; I have added 3 different resource files, one for the default (Engligh), one for French (fr-FR) and the other one for Spanish (es-ES).

The Local.aspx file contains a button with id button1, If I need to assign resource text to the button I can do it in 3 ways, I will examine the first 2 ways in this post and the last one in the next post (hopefully !).

The first way I can do this is using an explicit declaration like this.
By doing the above declaration, ASP.NET will fetch the correct resource string from the local resource file (i.e is the resource file with the App_LocaResources folder that matches the aspx file name and the culture suffix eg Local.aspx.fr-FR.resx).

The second way is to actually call the resource manager from the code behind, like this.

Button1.Text = GetLocalResourceObject("button.Text") .ToString();

The GetLocalResourceObject is method within the Page base class.

You can also access global resources using the GetGlobalResourceObject().

The other cleaner and faster way of assigning resources to controls is by using the implicit assignments, which I will post in my next blog post.

On a final note, although the default implementation of the resource manager queries resource files, you can always extend this with your own resource provider that queries a text file or a database or any other data store, this is a great link where you can start doing that.

No comments:

Post a Comment