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:
- Avoid absolution positioning size for control
- Use the Entire width (100%) and height of the from
- Size elements relative to overall size
- Use the Separate table cell for each control
- Avoid enabling NoWarp property in tables
- 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.
<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.