Localization Support in Microsoft.NET Framework François Liger Program Manager Microsoft...

Preview:

Citation preview

Localization Support in

Microsoft .NET Framework

François LigerProgram Manager

Microsoft Corporation

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

.NET Framework Namespace

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

RuntimeInteropServices

Remoting

Serialization

Serialization

Configuration SessionState

Caching Security

ServicesDescription

Discovery

Protocols

UIHtmlControls

WebControls

System.Drawing

Imaging

Drawing2DTextPrinting

System.WinForms

Design ComponentModel

System.Resources namespace ResourceManager

Provides access to culture-correct resources at runtime.

ResourceWriter Writes resources to an output stream or file

ResourceReader Reads resources name-value pairs from

resources files and streams ResourceSet

Stores all resources localized for a particular culture

System.Globalization.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 Neutral culture

Based on language Resource only No formatting CurrentUICulture only

Specific culture Based on language & region Resource & Formatting specifics CurrentCulture & CurrentUICulture

Resource Model .NET Framework uses a new resource

model ResX file format Resources files Satellite Resources DLLs

Naming conventions Resource Fallback

ResX Files Simple, (almost) human-readable XML

format Can include arbitrary objects Created with .NET Framework SDK Can also be created with Visual Studio

See other talk on this topic

Resource generation process .resx file

XML-based file Describes resources

.resources file binary compiled file

Satellite .resources.dll: Embedded .resources

file(s)

.resx file

.resources file

.resources.dll file

Naming convention Naming pattern conventions

.resources files: <myproject>.<xx-XX>.resources

Satellite assemblies <myproject>.resources.dll

Directory locations for satellites: A subdirectory per culture either neutral or specific cultures can be used Myproject.dll

\fr\myproject.resources.dll (neutral) \de-DE\myproject.resources.dll (specific)

Resource Fallback

Main Assembly•Code•Default resources (fallback)

Greeting=“Hello”Farewell=“Goodbye”Logo=<graphic data>

French•No code•“fr” resources

Greeting = “Bonjour”Farewell = “Au revoir”

French (France) (fr-FR)•No code•“fr-FR” resources

Greeting=“Salut”

Loading Resources Creating a Resource Manager

The RM constructor indicates the file from which resources are to be loaded.

Several alternatives Load from a loose .resources file Load from this assembly Load from another assembly Load from a custom resource format if you write

your own resource manager (e.g. a database)

See .NET SDK, Samples and Tutorials, ASP.NET QuickStarts, and How Do I … samples

Loading Resources, continued

Resource manager can be used to load both strings and objects: RM.GetString (“mystring”, new CultureInfo(“en-NZ”) ) RM.GetString (“mystring”) RM.GetObject(“Button1.Cursor”)

Loads requested resources based on Thread.CurrentThread.CurrentUICulture

Fallback hierarchy derived from RFC 1766

Localization Process Start with a .txt or a .resx file

.txt files (string data only) .resx files (string data and arbitrary objects) XML tools can be used with .resx files External localization tools vendor support

Lionbridge, http://www.lionbridge.com WinRes

Resize WindowsForms forms WinRes does not require access to source Visual Studio IDE: integrates this capability

ResGen: Compile data to .resources binary files

Localization Process AL (or compiler):

add .resources into assembly. (AL is an SDK linker)

al /t:lib /culture:en-NZ /embed:strings.en-NZ.resources /out:myapp.resources.dll

Optional: use SN for strong-naming VS IDE : add translated .resx file into

project

ASP.NET And Localization ASP.NET has a flexible resource model

There is not one single way to organize localizable resources

Applications vary; developers can choose. The following section shows a few

alternatives. .NET Framework SDK has additional samples

ASP.NET QuickStarts, localization section, working with resources files.

ASP.NET Localization OptionsA: Resources included in source (like ASP) Copy of each page per language Specify culture in page directive or web.config

Advantages: Good for static content Rapid initial development

Disadvantages: High maintenance costs Not suitable for dynamic content Localizers and developers are working on the same

source file. Potential for conflicting updates

Not recommended

ASP.NET Localization OptionsB: Resources separated from source Use Resource Manager to load resources

• Resources could be in • Loose .resources files• Satellites below each main assembly• A separate (parallel) main assembly with satellites below

it

• One .resources file or satellite per language

• Slightly different ResourceManager constructors for each case

ASP.NET Localization Options

B: Resources separate from source, continued:

Advantages: Can deploy additional languages incrementally, without

redeploying core code Lower maintenance costs, as there is one central app, not many

parallel versions.

Disadvantages: More files Loose .resources can have locking issue.

No locking issue for satellites or parallel main assembly with satellites.

Shadow-copying done for exes and dlls (main assemblies and satellites).

Samples: ASP.NET Quickstarts, Localization section

ASP.NET Localization OptionsC: Satellite Resource DLLs Advantages:

Can deploy additional languages incrementally, without redeploying core code

Lower maintenance costs, as there is one central app, not many parallel versions.

Shadow-copying done for exes and dlls (main assemblies and satellites).

Disadvantages: More files Added initial application development complexity

Demo Localizing a WebForm application

Summary .NET Framework provides built-in support for

localization and globalization ASP.NET builds on Framework support for

international app development More options for specifying encoding Can separate code from resources Can utilize .NET Frameworks classes Developers can develop/host multi-cultural apps on a

single server Visual Studio makes it easier to build localized

apps See Achim Ruopp’s talk

Additional References .NET Framework SDK Tutorial:

Resources and localization (includes tools)

.NET Framework SDK Samples ASP.NET Quickstart Localization section WinForms Quickstart Localization sample How Do I … samples: Resources

Globalization

.NET Framework SDK Tools: ResGen, WinRes, AL, SN

Additional References Documentation

.NET Framework SDK: Developing World-Ready Applications

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

Questions ?

Recommended