Friday, June 20, 2008

Understanding Globalization and Localization in .NET

Understanding Globalization and Localization in .NET

Now days as the audience for web applications has bursted from computers to pda's, cell phones and many other gadgets, Globalization has become must for web application. Globalization allows your web application to be useful for different people in different parts of the world who speaks different languages. Thanks to Microsoft .Net Globalization feature. Using this feature one can easily build a web application available to dispersed audience throughout the world. In this article I will walkthrough the steps that are essential for creating a multi cultured application. This example will include the use of Global and Local resource files that are heart for multi cultured web application. ASP.Net supports two types of resources Local Resource and Global Resource. Both types of Resources are xml based resource files that can contain text translated into particular language

 Local Resources: Local resource is specific to particular webpage. All the resource files related to particular webpage must be placed in a special .Net folder named App_LocalResources. This folder must be in the same folder of the webpage that you want to localize. So App_LocalResources can be subfolder for any folder of your website.

 Global Resources: They are the resource files for the entire web application. They are not specific to any page. They can be accessed from the entire web application. Global resource files must be located in a special .Net folder named App_GlobalResources. App_GlobalResources must be at the root of the web application.

 Steps to create local Resource file.
1) Switch to design view of the webpage for which you want to create the resource file.
2) Go to Tools menu and click Generate Local Resource.
3) As the result of step 2 .Net generates the .resx file. Naming conventions that Resource files follow is as explained below: <PageName>.aspx.<language>.resx Example myWebPage.aspx.resx: This is the default resource file of your page. If no culture matches than this resource file is used. myWebPage.aspx.es.resx: For Neutral Spanish culture it may look like this. myWebPage.aspx.es-MX.resx: For Specific Spanish Mexican culture it may look like this. What do you mean by neutral and specific cultures? I leave this small exercise to readers.

 Steps to create global Resource file.
1) Their are no specific utilities in .Net to generate Global resource files automatically. But you can create App_GlobalResources folder at root level and add a resource file manually Or you may copy the local resource file and change it at your will.  

Ways in which you can Globalize or localize your application. Implicit Localization
<asp:Label ID="lblLoadLocalResource" runat="server" 

Text="Local Resource" 

meta:resourcekey="lblLoadLocalResourceResource1">

</asp:Label>

Implicit Globalization
<asp:Label ID="lblLoadGlobalResource" runat="server" 

Text="<%$ Resources:Resource, commonHeader %>" 

ToolTip="<%$ Resources:Resource, commonHeader %>">

</asp:Label>

Programmatic Localization
lblLoadLocalResource.Text = GetLocalResourceObject
("lblLoadLocalResourceResource1.Text").ToString();

lblLoadLocalResource.ToolTip = GetLocalResourceObject
("lblLoadLocalResourceResource1.ToolTip").ToString();

Programmatic Globalization
lblLoadGlobalResource.Text = GetGlobalResourceObject
("Resource", "commonHeader").ToString();

lblLoadGlobalResource.ToolTip = GetGlobalResourceObject
("Resource", "commonHeader").ToString();

How to change the UI Culture? Steps to check and configure the UI Culture of your webpage 1) To change it programmatically you need to override the InitializeCulture() of your web page.
protected override void InitializeCulture()
{
 UICulture = "en";
}
2) To change it implicitly from .aspx page Set
<%@ Page Language="C#" UICulture="en" %>
3)To change it globally from web.config file
<system.web>
 <globalization uiCulture="es"/>
</system.web>
 
Note: If you set UICulture="auto" then .Net runtime will automatically detect the requesting browsers preferred language setting and will compile the related resource file for that culture. In this case you do not have to write a single piece of code for setting UICulture.

 How to check this?
1) Open IE and go to Tools > internet Options
2) Click Languages tab.
 3) This will open language Preference dialog box window.
4) Add the language by clicking the add button. Make sure to add the language for which you have configured the resource file of your web page.
5) Select the language that you have added and using Move Up button, bring it to the first topmost position in the language list.
 6) Press Ok and again Ok to return. Open your webpage in the browser and enjoy the taste of globalized web application. I believe that few lines of code can speak thousand words and so I have prepared a small demo that includes both Globalization and Localization.  

To download the entire source code Click Here.  

Note: Globalizing the web application entirely, requires lots of other things like changing the Culture, formatting dates and currency and lot more. I will try to incorporate all this stuff in my next article.

7 comments:

ahuu said...

great article, it took me a while to find out a thorough explanation of globalization and localization.

thanks

Maheshchoudhary said...

Hi Sir,

very Stright Forward Expalnation.

pls Let me know when will U provide ur Next Article.

Thanks

Dhaval Upadhyaya said...

Hi, I am little bit busy with my research on Flex with .Net. If you have any queries than you can let me know. I will be glad to solve it for you. Thanks for your comment.

imran said...

Can you please provide a sample project to build multilingual application.

Amit More said...

I am having a problem with date time.
my client is in Netherland and i am making a web app. for them
my clients pc is in NL format and even from code when i tried to change the current culture to en-US its not getting converted at the clients end..at my side it works fine.can you plz help me out ASAP.

2010 in review « Dhaval Upadhyaya said...

[...] Understanding Globalization and Localization in .NET June 20084 comments 3 [...]

Mohd Abdul Kareem said...

Very good article, i am searching this kind of explanation since long time. Very Nice.