Sometimes our application may need to cater content in different languages for different country users. Let us see in this article how to cater different contents based on the culture using Globalization in ASP.NET.
Globalization is the process of designing and developing a software product that function for multiple cultures. A web forms page have two culture values ,Culture and UICulture. Culture is used to determine culture dependent function such as Date, Currency. So it is used for date formatting ,number formatting. UICulture values is used to determine which language the resources should load that is which UIstring the resource should use. The two culture settings do not need to have same values. It may be different depending on the application.
Setting Culture and UICulture
1. Through Web.Config
<configuration>
<system.web>
<globalization fileEncoding="utf-8" requestEncoding="utf-8" responseEncoding="utf-8" culture="en-US" uiCulture="fr-FR"/>
</system.web>
</configuration>
2. In Code-inline (aspx) Page
<%@ Page UICulture="fr" Culture="en-US" ....%>
3. In Code-Behind (aspx.cs) Page
Thread.CurrentThread.CurrentCulture = CultureInfo.CreateSpecificCulture ("fr-FR");
Thread.CurrentThread.CurrentUICulture=new CultureInfo("fr-FR");
ASP.NET wont automatically translate the contents in one language to another language by using Culture. For this we need to put strings in resources file and have to load the strings based on the culture. Let us see how to create resources and use.
Resources
Resources represents embedded data such as strings or images, which can be retrieved during runtime and displayed in the user interface. Resource Management is a feature of .NET framework which is used to extract localized element from source code and to store them with a string key as resources . At runtime, ResourceManager class instance is used to resolve key to the original resource or localized version. Resources can be stored as an independent file or part of an assembly.
ResourceWriter and resgen.exe can be used to create .resources file. To include .resources file inside an assembly use related compiler switch or Al.exe.
Create Resource Text Files:
In resource.en-US.txt
Test = Hello there, friend!
In resource.fr-FR.txt
Test = Bonjour là, ami!
Generate .resources file:
Goto VisualStudio.Net command prompt and use resgen command utility to generate .resources file
resgen resource.en-US.txt
resgen resource.fr-FR.txt
This commands will create .resources file.
In TestGlobalization.aspx Page,
<asp:RadioButtonList id="RadioButtonList1" style="Z-INDEX: 101; LEFT:144px; POSITION: absolute; TOP: 144px" runat="server" AutoPostBack="True">
<asp:ListItem Value="en-US" Selected="True">English</asp:ListItem>
<asp:ListItem Value="fr-FR">French</asp:ListItem>
</asp:RadioButtonList>
In TestGlobalization.aspx.cs Page,on Page_Load Event
CultureInfo objCI = new CultureInfo ( RadioButtonList1 .SelectedValue .ToString ()) ;
Thread.CurrentThread.CurrentCulture = objCI;
Thread.CurrentThread.CurrentUICulture = objCI;
ResourceManager rm = ResourceManager .CreateFileBasedResourceManager ("resource", Server.MapPath("resources") + Path.DirectorySeparatorChar, null);
Response.Write( rm.GetString("Test"));
This will output the content based on the option selected. Hope this article would have helped you all.
Good Day....