Globalization Support in Microsoft .NET Framework

basiliskcanoeSoftware and s/w Development

Nov 2, 2013 (3 years and 11 months ago)

59 views

Globalization Support

in

Microsoft .NET Framework


François Liger

Program Manager

Microsoft Corporation


What is .NET Framework?


.NET is Microsoft's platform for building,
deploying, operating and integrating XML Web
services.


Rich XML, standard protocols, stateless


Cross
-
language development


Common language runtime


Common type system for all languages


Rich runtime environment


Rich class libraries (.NET Framework)


Base class libraries, ADO.NET and XML


Windows Forms for rich, Win32 applications


Web application platform ASP.NET


Easier to deploy, run, & maintain applications


For components, versioning, availability

Key Terms
(as used in this talk)


Globalization

(a.k.a. Internationalization)


Core application handles international data


Character encodings


Date and time, numeric, currency formats





Market adaptation


Additional functionality for a given market


Localization

= translation


Localizable

= ready for translation


Resources


Application elements (error messages, UI) to be
translated in localized versions


Why include international support in
the Framework ?


Consistency


.NET Framework is Unicode internally


.NET Framework carries NLS+ classes, sorting
tables


Consistent results on Windows XP, Windows
2000, Windows NT 4, Windows Millennium,
Windows 98


Note: there are a few limitations on down
-
level
Unicode support:


Underlying operating system limitations


Windows Code pages


File I/O

System

System.Data

System.Xml

System.Web

Globalization

Diagnostics

Configuration

Collections

Resources

Reflection

Net

IO

Threading

Text

ServiceProcess

Security

Design

ADO

SQLTypes

SQL

XPath

XSLT

Runtime

InteropServices

Remoting

Serialization

Serialization

Configuration

SessionState

Caching


Security

Services

Description

Discovery

Protocols

UI

HtmlControls

WebControls

System.Drawing

Imaging

Drawing2D


Text

Printing

System.WinForms

Design


ComponentModel

.NET Framework Namespace

System.Globalization Namespace


Includes classes for functionality such as:


Culture
-
aware string comparison


AABC vs. ABCC

(ordinal: codepoint values)


Coté vs. Côte


(culture dependent)


Date & Time formatting


yy/mm/dd vs. dd/mm/yy


Numeric formatting


12,000.00 vs. 12.000,00


Calendars


Gregorian and non
-
Gregorian


Starting point : the CultureInfo class

CultureInfo


Provider of cultural preferences


Two roles


CurrentCulture


Date and number formatting


String comparison and casing





CurrentUICulture


Resource selection for user interface


Can be controlled on a per thread basis


RFC 1766 derived hierarchy


CultureInfo.CreateSpecificCulture


Optional mapping from neutral to specific


CultureInfo


Cultural preferences provider


Invariant culture


culture
-
invariant default


Neutral culture


Based on language


Resource only


No formatting


CurrentUICulture only


Specific culture


Based on language & region


Resource & Formatting specifics


CurrentCulture & CurrentUICulture


invariant

de

de
-
AT

de
-
CH

de
-
DE

de
-
LI

de
-
LU

en

CultureInfo and related classes Demo

How to Set Culture and UICulture

Implicitly


CurrentUICulture


Picked up from GetUserDefaultUILanguage



On Windows XP and Windows 2000 MUI SKUs, this
setting can be set by end
-
user


Otherwise, set from OS resources language


CurrentCulture


Picked up from GetUserDefaultLCID


Affected by changes to

Control Panel | Regional Options | Set Locale

How to Set CurrentCulture, CurrentUICulture


Explicitly


Thread.CurrentThread.CurrentUICulture = new CultureInfo(“ja”)


Thread.CurrentThread.CurrentCulture = new CultureInfo(“ja
-
JP”)


Thread.CurrentThread.CurrentCulture =
CultureInfo.CreateSpecificCulture(Request.UserLanguages(0))



Within an individual API that takes a culture


Str = DateTime.Now.ToString(cultureInfo);




What if I don’t want formatting to
change by culture?


For UI, prefer culture
-
sensitive formatting


However, for wire
-
transfer, database
storage, you may want stable, culture
-
unrelated format, such as


#,###.##


dd MMMM yyyy HH:mm:ss GMT


international currency symbol


Use CultureInfo.InvariantCulture

Culture
-
aware Classes


Any API which takes a culture, or an
IFormatProvider


Culture
-
sensitive by default


Examples


System.Globalization.CompareInfo


System.Globalization.StringInfo


System.Globalization.Calendar


System.Resources


System.DateTime


System.String

Culture
-
aware Classes


Calendar classes


Includes support for


Gregorian Calendar


Hebrew Calendar


Hijiri Calendar


Japanese Calendar


Julian Calendar


Korean Calendar


Taiwan Calendar


Thai Buddhist Calendar


Base Calendar class from which custom
calendars can be derived


Culture
-
aware Classes


DateTime


Provides methods that enable culture
-
sensitive
operations on a DateTime.


Use the DateTimeFormatInfo Class to format
and display a DateTime based on culture.


DateTimeFormatInfo


Defines how DateTime values are formatted
and displayed, depending on the culture.

Culture
-
aware Classes


NumberFormatInfo


Defines how currency, decimal separator and
other numeric symbols are formatted and
displayed based on culture



Culture
-
aware Classes


CompareInfo


Provides a set of methods that can be used to
perfomr culture
-
sensitive string comparisons


The CultureInfo class has a CompareInfo
property that is an instance of the
CompareInfo class


The String.Compare method uses the
information in the CultureInfo.CompareInfo
property to compare strings


Unicode support


Unicode everywhere


Unicode internally


UTF
-
8 and UTF
-
16 encoding classes


String operations


Surrogates & Combining characters support


Character type information


Based on Unicode 3.0 tables


Unicode category enumeration


CultureInfo data


Caveats


OS dependent operations


Controls support


File System


ASP.NET And International


ASP.NET delivers improved support for
international application development:



Can leverage .NET Framework base classes


System.Globalization


System.Text (encodings)


System.Resources


Can separate resources from source code


Unicode
-
enabled


More options for specifying encoding

ASP.NET

setting culture and encoding:


Programmatically


Thread.CurrentThread.CurrentCulture =……….


In a Page directive


<%@Page ResponseEncoding=“utf
-
8” %>



In a Configuration file

(web.config)

Per application or per machine


<globalization



culture=“de
-
DE”



fileEncoding=“utf
-
8” />


The most specific setting has precedence

:


Programmatic overrides Page Directive,


Page Directive overrides Configuration file

ASP.NET Demo

Additional References


Documentation


.NET Framework SDK:


Developing World
-
Ready Applications


Tutorials


Samples


Visual Studio :


Visual Studio.NET
\
Visual Basic and VisualC#
\
Globalizing
and Localizing
\
Walkthroughs


General info on .NET Framework:


http://msdn.microsoft.com/net


http://www.GotDotNet.com



General info on globalization:


http://www.microsoft.com/globaldev

Questions ?