Skip to main content

Globalization and Localization with ASP.NET



Configuring Globalization and Localization

ASP.Net provides infrastructure to automatically adjust the appearance and formatting based on the client’s browser’s culture settings.

Using Resource Files:
          Visual studio automatically generates the XML resource file for the controls on the page that can even used by non-technical people to create other versions in different languages.

There are two types of resource files global and local.

Local Resources:
Local resources are specific to pages stored in App_LocalResources folder in that same folder of page.
Local resource file names are named as <PageNumber>[.languages].resx

The Term Culture refers to regional difference in dates, currency. It’s automatically handled by ASP.NET.

<PageName>.resx: Default to use when no other resource file available.
<PageName>.de.resx: German.
<PageName>.es.resx: Spanish.
<PageName>.es-mx.resx: Spanish (Mexico).

To Generate Local Resource Right Click Page select Generate Local Resource. OR
From Tools | Generate Local Resource.

It also includes meta:resourcekey attribute to all server controls.

Regenerate the resource file after adding new controls. It will update the default <PageName>.resx file. You have to manually update the other culture files.

To test other resource file in IE:
Select Internet Options à Select Languages à in Language Preferences dialog Click Add and Select the Language à OK à Move Up the specific Language à OK.

Global Resources:
They can be read from any where. Placed in App_GlobalResources folder at root.

Binding of controls with Local Resources is Implicit Localization.
To bind control to a Global Resource is Explicit Localization.
To add a Global Resource simply add the App_BlobalResource folder and add the respective resource file.

Binding control properties to Global Resources:

Select control, select properties, select Expression, select a Bindable property.

Select Expression Type as Resources.
Provide ClassKey that is resource file name without extension.
Provide ResourceKey that is Resource Key name.

It adds the following script to resource file:
Text = “<%$ Resources: CompanyGlobalInfo, SloganText %>”
Format is : <%$ Resources: Resource, Name %>

After saving global resources VS creates strongly typed members Resources.CompanyGlobalInfo object for every global resource.

Use LocalizeControl instead of LiteralControl for Localization.

To access resource when they are not available at design time:


HTML Layout Best Preactices:

Some languages are structured from right to left. So to handle them as well follow the recommendations:

  1. Avoid absolution positioning size for control
  2. Use the Entire width (100%) and height of the from
  3. Size elements relative to overall size
  4. Use the Separate table cell for each control
  5. Avoid enabling NoWarp property in tables
  6. Avoid specifying the align property in tables

Setting the Culture:

A browser in Germany will present information in German Language as its configuration. And a foreigner UK would like to view information in English. So provide a dopdown of available languages from where he can select his/her language.

After then override the page’s InitalizaeCulture Method to specify the culture.

protected override void InitalizeCulture()
{
          UICulture = Session[“SelectedUICultureName”];
          Culture = Session[“SelectedCultureName”];
}

Culture defines the formatting for the number, currency, date etc.
UICulture defines the resource files to be used.

Defining Culture information in Web.config:
<globalization uiculture="en" culture="es-MX" /> 

Defining Culture information for each page:

<%@Page UICulture="en" Culture="es-MX" %>


System.Globalization.CulturesInfo.GetCultures(CultureTypes enum) to retrieve the desired culture list.

Popular posts from this blog

Culture Information and Localization in .NET

Namespace: System.Globalization CultureInfo Class:                 It provides information like the Format of numbers and dates, Culture’s Calendar, Culture’s language and sublanguage (if applicable), Country and region of the culture. The Basic use of CultureInfo class is shown here: • How string Comparisons are performed • How Number Comparison & Formats are performed • Date Comparison and Formats. • How resources are retrieved and used. Cultures are grouped into three categories: Invariant Culture : It’s Culture Insensitive. It can be used to build some trial application. It can be also used to build an application with hard-coded expiry date that ignores cultures. But using it for every comparison will be incorrect and inappropriate. Neutral Culture : English(en), Frensh(fr), and Spanish(sp). A neutral culture is related to language but it’s not related to specific regi...

Concept of App Domain in .Net

Creating Application Domains: Application domain is just like process, provides separate memory space, and isolates from other code. But it’s quite light weight. It also provides the following advantages: 1-       Reliability : If a domain crashes, it can be unloaded. Hence doesn’t affect the other assemblies. 2-       Efficiency : Loading all assemblies in one domain can be cumbersome and can make the process heavy but Appdomains are efficient in this manner. Important properties of AppDomain: ApplicationIdentity , ApplicationTrust , BaseDirectory , CurrentDomain , DomainManager , DomainDirectory , Evidence , FriendlyName , ID , RelativeSearchPath , SetupInformation , ShadowCopyFiles . Important methods of AppDomain: ApplyPolicy , CreateCOMInstanceFrom , CreateDomain , CreateInstance (Assembly). To create an AppDomain: AppDomain adomain = AppDomain.CreateDomain(“D”); To execute an assembly:...

ASP.NET Working With Data-Bound Web Server Controls

Suppose we have: List<Car> vCars = new List<Car>(); There are three types of databound controls: Simple databound controls(List, AdRotater), Composite data bound controls(GridView, DetailsView, FormView that inherit from CompositeDataBoundControl), and Hierarchal data bound controls (TreeView, Menu).   DataBoundControl has a DataBind method that can be used when data is ready. It calls DataBind for child controls as well. Page.DataBind() will call DataBind for all child controls. Using DataSource Objects:                                       BaseDataBound control exposes DataSource property that accepts objects that implement IEnumerable , IListSource , IDataSource , or IHierarchalDataSource . DataSourceID accepts ID of SqlDataSource . If both specified Data...