76
Developing World-Ready Developing World-Ready Applications for Applications for Windows 2000/XP Windows 2000/XP Houman Pournasseh Houman Pournasseh Lead Program Manager Lead Program Manager Russ Rolfe Russ Rolfe Program Manager Program Manager Windows Division Windows Division

Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Embed Size (px)

Citation preview

Page 1: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Developing World-Ready Developing World-Ready Applications for Applications for

Windows 2000/XPWindows 2000/XP

Houman PournassehHouman PournassehLead Program ManagerLead Program Manager

Russ RolfeRuss RolfeProgram ManagerProgram Manager

Windows DivisionWindows Division

Page 2: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 3: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 4: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

DefinitionsDefinitions World-Ready:World-Ready:

Properly globalized and localizable.Properly globalized and localizable. Globalization:Globalization:

The process of designing and implementing The process of designing and implementing source code so that it can accommodate anysource code so that it can accommodate any local market (locale) or script.local market (locale) or script.

Localizability:Localizability: Designing software code and resources such thatDesigning software code and resources such thatresources can be localized for any local marketresources can be localized for any local market(locale) without changing the source code.(locale) without changing the source code.

Localization:Localization: The process of adapting a product (including bothThe process of adapting a product (including bothtext and non-text elements) to meet the language,text and non-text elements) to meet the language,cultural, and political expectations and/orcultural, and political expectations and/orrequirements of a specific local market (locale).requirements of a specific local market (locale).

Page 5: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Users and Locales:Users and Locales:To define their geographical location, users set the location

To define formatting for date, time…,users set the user localeTo run legacy

applications (non-Unicode), users set the system locale To enter text in

different languages, users set the input locale

To select a UI language, users set the UI language

Page 6: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Windows XP Windows XP International Enhancements International Enhancements Nine (9) new locales added to previous list of 126. Nine (9) new locales added to previous list of 126.

Punjabi, Gujarati, Telugu, Kannada, Kyrgyz, Mongolian Punjabi, Gujarati, Telugu, Kannada, Kyrgyz, Mongolian (Cyrillic), Galician, Divehi, Syriac (Cyrillic), Galician, Divehi, Syriac

New Indic and Arabic scriptsNew Indic and Arabic scripts Gujarati, Gurmukhi, Telugu, Kannada, Syriac, DivehiGujarati, Gurmukhi, Telugu, Kannada, Syriac, Divehi

More robust font display for East Asian languages. More robust font display for East Asian languages. Improved Regional Settings options. Improved Regional Settings options. Largely improved MUI supportLargely improved MUI support New location (GEO)New location (GEO) Support for GB18030Support for GB18030

Page 7: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 8: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Why invest in Why invest in World Ready products?World Ready products?

Get into international market (Get into international market (World WideWorld Wide Web Web era)era)

Create a single functionality binary to:Create a single functionality binary to: Reduce development effort and costReduce development effort and cost Ease support and maintenance painEase support and maintenance pain

Page 9: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Why invest in Why invest in World Ready products?World Ready products?

Sim-Ship all language versions at once saves Sim-Ship all language versions at once saves lost revenue.lost revenue.

English Dev Team

German Loc Team

Jan Feb Mar Apr May Jun Jul Aug Sep

Release Eng Ver 1.0

Release Ger Ver 1.0

Release Ger Ver 1.1

Release Eng Ver 1.1

Page 10: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 11: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Transforms of UnicodeTransforms of Unicode

UTF-7: 7 bit transformation format, seldom usedUTF-7: 7 bit transformation format, seldom used UTF-8 UTF-8

8 bit transformation format8 bit transformation format For transmission over unknown lines: e.g. Web pagesFor transmission over unknown lines: e.g. Web pages Codepage number CP_UTF8 = 65001Codepage number CP_UTF8 = 65001

UTF-16 and UCS-2UTF-16 and UCS-2 Microsoft uses UTF-16 little-endian as its standard for Microsoft uses UTF-16 little-endian as its standard for

Unicode encodingUnicode encoding

UTF-32 and UCS-4UTF-32 and UCS-4

Page 12: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Windows 2000/XP:Windows 2000/XP: Unicode & Single BinaryUnicode & Single Binary

Built in support for hundreds of languagesBuilt in support for hundreds of languages

Any (well behaved) language Win32 Any (well behaved) language Win32 application can run on any language version of application can run on any language version of Windows 2000/XPWindows 2000/XP

Native Unicode support for new scriptsNative Unicode support for new scripts

Support for supplementary charactersSupport for supplementary characters

Page 13: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Unicode EncodingUnicode Encoding

Non-Unicode applications behavior depends on Non-Unicode applications behavior depends on user’s settings and makes data exchange user’s settings and makes data exchange between OS language versions impossible.between OS language versions impossible.

Page 14: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Legacy systems supportLegacy systems support

Few exceptions for not fully Unicode apps:Few exceptions for not fully Unicode apps: App has to run on Win9x and NTApp has to run on Win9x and NT Existing Internet protocols and standards require Existing Internet protocols and standards require

special encoding special encoding

Supporting apps that need to run on Win9xSupporting apps that need to run on Win9x Create two separate binaries: one ANSI & one Create two separate binaries: one ANSI & one

UnicodeUnicode Register as ANSI and internally convert to/from Register as ANSI and internally convert to/from

Unicode as neededUnicode as needed Use MSLU!Use MSLU!

Page 15: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

TCHARTCHAR LPTSTRLPTSTR

wchar_twchar_t charchar wchar_t *wchar_t * char *char *

For 8 bit and double-byte characters:For 8 bit and double-byte characters:typedef chartypedef char CHARCHAR;; // 8 bit character// 8 bit character

typedef char *typedef char *LPSTRLPSTR;; // pointer to 8 bit string// pointer to 8 bit string

For Unicode (“Wide”) characters:For Unicode (“Wide”) characters:typedef unsigned shorttypedef unsigned short WCHARWCHAR; // 16 bit character; // 16 bit character

typedef WCHAR *typedef WCHAR *LPWSTRLPWSTR; //pointer to 16 bit string; //pointer to 16 bit string

Data typesData types

Page 16: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Win32 API prototypesWin32 API prototypes

Generic function prototypes:Generic function prototypes:

// winuser.h#ifdef UNICODE#define SetWindowText SetWindowTextW#else#define SetWindowText SetWindowTextA#endif // UNICODE

A routines behavior under Windows 2000/XPA routines behavior under Windows 2000/XP W routines behavior under Win9xW routines behavior under Win9x

Page 17: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

String manipulation functions String manipulation functions and macrosand macros

Generic CRT 8 bit codepage Unicode

_tcscpy strcpy wcscpy_tcscmp strcmp wcscmp

Generic Win32 8 bit codepage Unicode

lstrcpy lstrcpyA lstrcpyWlstrcmp lstrcmpA lstrcmpW

Compile with –D_UNICODE to get Unicode version

Compile with –DUNICODE to get Unicode version

#ifdef UNICODE#define TEXT(string) L#string #else#define TEXT(string) string#endif // UNICODE

Page 18: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Unicode Unicode ANSI ANSI

Converting between ANSI and UnicodeConverting between ANSI and Unicode MultiByteToWideChar for codepage MultiByteToWideChar for codepage Unicode Unicode WideCharToMultiByte for Unicode WideCharToMultiByte for Unicode codepage codepage

CP can be any legal codepage number or a predefined such CP can be any legal codepage number or a predefined such as: CP_ACP, CP_SYMBOL, CP_UTF8, etc.as: CP_ACP, CP_SYMBOL, CP_UTF8, etc.

Tips for writing Unicode:Tips for writing Unicode: Use generic data types and function prototypesUse generic data types and function prototypes Replace p++/p-- with CharNext/CharPrevReplace p++/p-- with CharNext/CharPrev Compute buffer sizes in TCHARCompute buffer sizes in TCHAR

Page 19: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Porting an ANSI Porting an ANSI application to Unicodeapplication to Unicode

Page 20: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Encodings in Web pagesEncodings in Web pages

ANSI codepages or ISO character encodingsANSI codepages or ISO character encodings Mono-lingual or restricted to one scriptMono-lingual or restricted to one script

Raw Unicode: UTF-16Raw Unicode: UTF-16 OK for Windows NT networksOK for Windows NT networks

Number entities: कNumber entities: क OK for occasional useOK for occasional use

UTF-8: Recommended encodingUTF-8: Recommended encoding Supported by IE 4.0+ and Netscape 4.0+Supported by IE 4.0+ and Netscape 4.0+

Page 21: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Setting web encodingSetting web encoding HTML/DHTML: HTML/DHTML:

Tag in the head of the documentTag in the head of the document<META HTTP-EQUIV="Content-Type" <META HTTP-EQUIV="Content-Type" CONTENT="text/html; CONTENT="text/html; charset=<value>charset=<value>">">

XML:XML:<?xml version=“1.0” <?xml version=“1.0” encoding=<value>encoding=<value>?>?>

ASP:ASP: Specify charset using ASP directives:Specify charset using ASP directives:

Per session:Per session:

<%Session.CodePage=<%Session.CodePage=<charset><charset>%>%> Per page:Per page:

<%@CODEPAGE=<%@CODEPAGE=<charset><charset>%>%>

Page 22: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Setting encodings for .NETSetting encodings for .NET

Class: System.TextClass: System.Text

Distinction between: File, Request, and Response encodingsDistinction between: File, Request, and Response encodings

in code:in code:Response.ContentEncoding=Response.ContentEncoding=<value><value>

in page directive:in page directive:<%@Page ResponseEncoding=<%@Page ResponseEncoding=<value><value>%>%>

in configuration file:in configuration file:

<globalization <globalization

requestEncoding=requestEncoding=<value><value>

responseEncoding=responseEncoding=<value><value>

fileEncoding=fileEncoding=<value><value> /> />

Page 23: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Universally encoded pageUniversally encoded page

Page 24: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 25: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Windows 2000/XP:Windows 2000/XP: National Language SettingsNational Language Settings NLS APIs allow you to automatically adjust to NLS APIs allow you to automatically adjust to

users formatting preferences:users formatting preferences: Date:Date:

07/04/01 is 07/04/01 is 平成 平成 1313 年年 77 月月 44 日 日 in Japanin Japan Time:Time: 9:00PM is 21:00 in the France 9:00PM is 21:00 in the France Currency:Currency: $1,000.00 is 1.000,00 $ in Germany $1,000.00 is 1.000,00 $ in Germany Large Numbers:Large Numbers:

123,456,789.00 is 12,34,56,789.00 in Hindi 123,456,789.00 is 12,34,56,789.00 in Hindi Sort Order:Sort Order:

German German ä comes after aä comes after a Swedish Swedish ä comes after zä comes after z

Page 26: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Locale awarenessLocale awareness

Eliminate implicit locale assumptions from Eliminate implicit locale assumptions from code:code:

#define ToUpper(ch) \#define ToUpper(ch) \

((ch)<='Z' ? (ch) : (ch)+'A' - ((ch)<='Z' ? (ch) : (ch)+'A' - 'a')'a')

Query system to format locale-dependent data Query system to format locale-dependent data using NLS APIs and LCIDs.using NLS APIs and LCIDs.

6 bits6 bits 10 bits4 bits12 bits

Reserved Sub-language

Sort ID Primary Language

Language ID

Page 27: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

NLS APIsNLS APIs Getting and setting locales Getting and setting locales Querying localesQuerying locales

LCID GetSystemDefaultLCIDLCID GetSystemDefaultLCID EnumSystemLocalesEnumSystemLocales LCID GetUserDefaultLCID()LCID GetUserDefaultLCID() LCID GetThreadLocale()LCID GetThreadLocale()

Setting localesSetting locales BOOL SetThreadLocale(LCID dwNewLocale)BOOL SetThreadLocale(LCID dwNewLocale) BOOL SetLocaleInfo(LCID,…)BOOL SetLocaleInfo(LCID,…)

// Works for standard locales only!// Works for standard locales only!

No APIs to set System locale, User locale, and No APIs to set System locale, User locale, and UI languageUI language

Page 28: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

NLS APIsNLS APIs Querying locale informationQuerying locale information

To retrieve information specific to a given locale: To retrieve information specific to a given locale: GetLocaleInfoGetLocaleInfo Gives information for any valid locale (takes an LCID).Gives information for any valid locale (takes an LCID). LCTYPE input tells type of info to retrieve for a given locale LCTYPE input tells type of info to retrieve for a given locale

(e.g. currency symbol, name of months…).(e.g. currency symbol, name of months…). Returns info in string buffer (LPTSTR).Returns info in string buffer (LPTSTR).

To retrieve information specific to a location: To retrieve information specific to a location: GetGeoInfoGetGeoInfo Gives information for any valid location (takes an LCID).Gives information for any valid location (takes an LCID). SYSGEOTYPE input tells type of info to retrieve for a given SYSGEOTYPE input tells type of info to retrieve for a given

location(e.g. LCID, Time zones…).location(e.g. LCID, Time zones…).

Page 29: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

NLS APIsNLS APIs Formatting dataFormatting data

To enumerate formats:To enumerate formats: EnumCalendarInfo(Ex)EnumCalendarInfo(Ex) EnumDateFormatsEnumDateFormats EnumTimeFormatsEnumTimeFormats

To format data directly:To format data directly: GetCurrencyFormatGetCurrencyFormat GetDateFormatGetDateFormat GetTimeFormatGetTimeFormat

Page 30: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

A locale aware A locale aware applicationapplication

Page 31: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Locale awareness in web Locale awareness in web pagespages To retrieve user locale:To retrieve user locale:

A server variable:A server variable:Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")Request.ServerVariables("HTTP_ACCEPT_LANGUAGE")

A property of the navigator object:A property of the navigator object:navigator.UserLanguagenavigator.UserLanguage

To set a locale:To set a locale: In DHTML:In DHTML:

SetLocale("de")SetLocale("de")DateData = FormatDateTime(now(), vbShortDate)DateData = FormatDateTime(now(), vbShortDate)

In ASP:In ASP:<% Session.LCID = 1041 %><% Session.LCID = 1041 %>

<% Response.Write( FormatDateTime(dtNow) ) %><% Response.Write( FormatDateTime(dtNow) ) %>

Page 32: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Locale awareness in .NETLocale awareness in .NET

Class: System.GlobalizationClass: System.Globalization

Referenced as Referenced as CultureInfoCultureInfo – set of preferences – set of preferences based on language and culture.based on language and culture.

Pattern: xx-XX, such as fr-CA, de-ATPattern: xx-XX, such as fr-CA, de-AT (RFC-1766)(RFC-1766)

Setting the CultureInfo:Setting the CultureInfo: Implicit: Picked up from User Locale Implicit: Picked up from User Locale Explicit:Explicit:

In code: In code: Thread.CurrentThread.CurrentCulture = new Thread.CurrentThread.CurrentCulture = new CultureInfo (“de-DE”)CultureInfo (“de-DE”)

In page directive:In page directive: <%@Page Culture= <%@Page Culture=<value><value>%>%>

In config:In config: <globalization <globalization culture=culture=<value> <value> />/>

Page 33: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Locale aware web siteLocale aware web site

Page 34: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 35: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Handling Input methodsHandling Input methods

Easiest: Using edit controls (recommended)Easiest: Using edit controls (recommended) Responding directly to user inputResponding directly to user input

Input locales (language + input method): HKLInput locales (language + input method): HKL• GetKeyboardLayoutGetKeyboardLayout

• ActivateKeyboardLayoutActivateKeyboardLayout

• LoadKeyboardLayoutLoadKeyboardLayout

Windows messages:Windows messages:• WM_INPUTLANGCHANGEREQUESTWM_INPUTLANGCHANGEREQUEST

• WM_INPUTLANGCHANGEWM_INPUTLANGCHANGE

• WM_IME*.* WM_IME*.* (f(for IME support only)or IME support only)

• WM_CHAR and WM_IME_CHARWM_CHAR and WM_IME_CHAR

Page 36: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 37: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Complex Scripts have one or more of the Complex Scripts have one or more of the following attributes:following attributes:

Bi-directional (BiDi) Bi-directional (BiDi) reorderingreordering (Arabic, Hebrew) (Arabic, Hebrew)

Contextual shaping Contextual shaping (Arabic, Indic family)(Arabic, Indic family)

Display of Display of combining characters combining characters (Arabic, Thai, (Arabic, Thai, Indic)Indic)

Specialized word-breaking (Thai)Specialized word-breaking (Thai)

Text Text Justification Justification (Arabic)(Arabic)

Windows 2000/XP:Windows 2000/XP: Complex Scripts Complex Scripts

Page 38: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Back

Complex ScriptsComplex Scripts BiDi reorderingBiDi reordering

Page 39: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Back

Complex ScriptsComplex Scripts Contextual ShapingContextual Shaping

Page 40: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Back

Complex ScriptsComplex Scripts Combining CharactersCombining Characters

Page 41: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Back

Complex ScriptsComplex Scripts JustificationJustification

Page 42: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

UniscribeUniscribe

Clients: Windows 2000/XP, Trident, Microsoft Office Clients: Windows 2000/XP, Trident, Microsoft Office 2000/XP2000/XP

A collection of exported APIs (high and low level)A collection of exported APIs (high and low level) Hides implementation detailsHides implementation details A shaping engine per languageA shaping engine per language

USERUSERGDIGDI

LPK.LPK.DLLDLL USPUSP

ApplicationApplication

Page 43: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Options to display textOptions to display text

Plain textPlain text in application in application Standard edit control orStandard edit control or Win32 API (Win32 API (ExtTextOutExtTextOut / / DrawTextDrawText).).

Simple formatted Simple formatted text text In Win32 apps, use Richedit control.In Win32 apps, use Richedit control. For Web pages, use Document Object Model For Web pages, use Document Object Model

(DHTML).(DHTML).

Advanced formattingAdvanced formatting Use Uniscribe (see SDK and MSJ article).Use Uniscribe (see SDK and MSJ article).

Page 44: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Special considerationsSpecial considerations When dealing with BiDi, set RTL When dealing with BiDi, set RTL

reading order and alignmentreading order and alignment• SetTextAlignSetTextAlign / / GetTextAlignGetTextAlign with with

TA_RIGHTTA_RIGHT• ExtTextOutExtTextOut with with ETO_RTLREADINGETO_RTLREADING• DrawTextDrawText with with DT_RTLREADINGDT_RTLREADING

To measure line lengths:To measure line lengths: Do notDo not sum cached character widthssum cached character widths DoDo use a use a GetTextExtentGetTextExtent function or function or

UniscribeUniscribe

When displaying typed text:When displaying typed text: Do notDo not output characters one at a time! output characters one at a time! DoDo save text in a buffer and display the save text in a buffer and display the

whole string with Uniscribe or Win32 APIwhole string with Uniscribe or Win32 API

Page 45: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 46: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Windows 2000/XP:Windows 2000/XP: Font supportFont support

Introduction of OpenType fonts: Introduction of OpenType fonts: • Extended TTF with glyphs for PE, ME, Thai, Greek, Extended TTF with glyphs for PE, ME, Thai, Greek,

Turkish, Cyrillic…Turkish, Cyrillic…

Font fallback mechanism for CS and Eastern Font fallback mechanism for CS and Eastern Asian scripts used by UniscribeAsian scripts used by Uniscribe

Font linking mechanism used by GDIFont linking mechanism used by GDI

Page 47: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Font independencyFont independency Win32 programmingWin32 programming Not to do:Not to do:

Hard code font face namesHard code font face names Assume a given font is installedAssume a given font is installed Assume selected font supports the desired scriptAssume selected font supports the desired script

To do:To do: Use Use MS Shell Dlg MS Shell Dlg face face

name in Dialog resourcesname in Dialog resources EnumFontFamiliesExEnumFontFamiliesEx or or

ChooseFontChooseFont to select fonts to select fonts

Page 48: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Font independencyFont independency In Web pagesIn Web pages

Avoid placing text formatting values into in-line style.Avoid placing text formatting values into in-line style.<span style = "font-size: 10pt; font-family: Arial;"> <span style = "font-size: 10pt; font-family: Arial;"> Hello </span>Hello </span>

Declare text style in CSS files:Declare text style in CSS files:<style><style>

.myStyle.myStyle {font-size: 10pt; font-family: Arial;} {font-size: 10pt; font-family: Arial;}

</style></style>

<span class = <span class = myStylemyStyle> Hello </span>> Hello </span>

Use WEFT to embed fonts to your web pages (IE only):Use WEFT to embed fonts to your web pages (IE only):

http://www.microsoft.com/typography/web/http://www.microsoft.com/typography/web/default.htmdefault.htm

Page 49: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 50: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Windows 2000/XP:Windows 2000/XP: Multilanguage UIMultilanguage UI

Multilanguage version of Windows 2000/XP allows Multilanguage version of Windows 2000/XP allows you to:you to:

Switch the language of UI without rebootingSwitch the language of UI without rebooting

Set the language of UI per userSet the language of UI per user

Add/Remove language modulesAdd/Remove language modules

Offer your own solution for a multilingual UIOffer your own solution for a multilingual UI

Page 51: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Multilingual UI ApplicationsMultilingual UI Applications Possible optionsPossible options

One localized .exe per target languageOne localized .exe per target language

Eng.exe Ger.exe Jpn.exe

Myapp.exe Eng Ger Jpn

Myapp.exe Eng.dll Ger.dll Jpn.dll

One multilingual language resource DLLOne multilingual language resource DLL

One resource DLL per target language

Page 52: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Satellite DLLSatellite DLL

Initialize to current UI language.Initialize to current UI language. Windows 2000/XP: Windows 2000/XP:

GetUserDefaultUILanguage()GetUserDefaultUILanguage() Down-level platforms: Down-level platforms: See “Writing Multilingual User See “Writing Multilingual User

Interface Applications” on Globaldev.Interface Applications” on Globaldev.

Allow user to select UI language.Allow user to select UI language. Use naming convention, for example: Use naming convention, for example:

resres<LANGID><LANGID>.dll.dll Find all resource DLLs using Find all resource DLLs using FindFirstFile FindFirstFile

and and FindNextFileFindNextFile Use Use LoadLibrary(Ex)LoadLibrary(Ex) to load DLL file to load DLL file

Page 53: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 54: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Windows 2000/XP:Windows 2000/XP: Mirroring technologyMirroring technology

To create an automatic right-to-left layout of the user interface for localized versions of bidirectional languages (Arabic and Hebrew).

Page 55: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Coordinate transformationCoordinate transformation

Origin (0,0) in upper Origin (0,0) in upper RIGHTRIGHT corner of window corner of window X scale factor = -1X scale factor = -1 X values increase from right to leftX values increase from right to left

Default (LTR) windowDefault (LTR) windowDefault (LTR) windowDefault (LTR) window

OriginOriginOriginOrigin

Increasing xIncreasing xIncreasing xIncreasing x

00 11

Mirrored (RTL) windowMirrored (RTL) windowMirrored (RTL) windowMirrored (RTL) window

OriginOriginOriginOrigin

Increasing xIncreasing xIncreasing xIncreasing x

0011

Page 56: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Controlling the mirroring styleControlling the mirroring style

Per Process:Per Process: GetProcessDefaultLayoutGetProcessDefaultLayout SetProcessDefaultLayout (LAYOUT_RTL)SetProcessDefaultLayout (LAYOUT_RTL)

Per window:Per window: CreateWindowEx (WS_EX_LAYOUTRTL | CreateWindowEx (WS_EX_LAYOUTRTL |

WS_EX_NOINHERITLAYOUT ) WS_EX_NOINHERITLAYOUT ) SetWindowLongSetWindowLong

Per DC:Per DC: GetLayout / SetLayoutGetLayout / SetLayout LAYOUT_BITMAPORIENTATIONPRESERVED ; LAYOUT_BITMAPORIENTATIONPRESERVED ;

Page 57: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Controlling the mirroring styleControlling the mirroring style

Dialog Resources:Dialog Resources: Set Set WS_EX_LAYOUTRTLWS_EX_LAYOUTRTL in dialog template in dialog template

Message boxes:Message boxes: Use Use MB_RTLLAYOUTMB_RTLLAYOUT option option

BitBlt/StretchBlt: BitBlt/StretchBlt: UseUse NOMIRRORBITMAP NOMIRRORBITMAP flagflag

Page 58: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Mirrored bitmap!Mirrored bitmap! Off screen bitbltOff screen bitblt

Mirroring common issuesMirroring common issues

Page 59: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

BiDi & mirroring in web pagesBiDi & mirroring in web pages

In a web context, mirroring and RTL reading order In a web context, mirroring and RTL reading order go hand-in-hand:go hand-in-hand:

Using Using DIRDIR attribute would: attribute would: Set the “right” alignment of the textSet the “right” alignment of the text Set the right_to_left reading order of the textSet the right_to_left reading order of the text Mirror the page contextMirror the page context Leave the orientation of stationary elements Leave the orientation of stationary elements

To set To set DIRDIR attribute: attribute: Html: Html: <html dir=RTL><html dir=RTL> At an element level At an element level <span dir = RTL><span dir = RTL> DHTML object: DHTML object: document.Dir = "RTL“document.Dir = "RTL“

Page 60: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Tips for BiDi web pagesTips for BiDi web pages Directional images:Directional images:

<IMG style=filter:<IMG style=filter:flipHflipH SRC=arrow.jpg > SRC=arrow.jpg >

Avoid explicit alignments:Avoid explicit alignments: Obsolete usage of “align=left” in tables and cellsObsolete usage of “align=left” in tables and cells

Avoid absolute positioning of elementsAvoid absolute positioning of elements Remember: tables get mirrored automatically, use Remember: tables get mirrored automatically, use

them for robust reversibility!them for robust reversibility!

Page 61: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Mirrored DHTMLMirrored DHTML

Page 62: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 63: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

LocalizabilityLocalizability

Localization of software: Adapting user Localization of software: Adapting user interface elements to a specific languageinterface elements to a specific language

Localization should require no engineering Localization should require no engineering changes!changes!

Changes to code are part of Changes to code are part of localizabilitylocalizability process process Source code changes, due to localization, are Source code changes, due to localization, are

bugs in the core code!bugs in the core code!

Page 64: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

ChallengesChallenges

Developers are focused on their primary Developers are focused on their primary languagelanguage

Coding “tricks” to save work (saves a few $)Coding “tricks” to save work (saves a few $) Hardcoded stringsHardcoded strings Creating text strings from phrases by concatenationCreating text strings from phrases by concatenation Creates dialog boxes using overlapped controlsCreates dialog boxes using overlapped controls

The “tricks” cost lots of $ because:The “tricks” cost lots of $ because: Bugs difficult to detect before localization is doneBugs difficult to detect before localization is done Code change required to address the issueCode change required to address the issue

Page 65: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Unbreakable rules (1/3)Unbreakable rules (1/3)

Remove all localizable resources from Remove all localizable resources from source code, place in standard resource source code, place in standard resource filefile

Do not place non-localizable strings in Do not place non-localizable strings in resource fileresource file

Page 66: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Avoid composite strings that are built at runtime:Avoid composite strings that are built at runtime: Wrong wayWrong way::var t1_text = "Not enough memory to";t2_text = "the file";v1_text = "open";v2_text = "copy";v3_text = "save";...text = t1_text+" "+v2_text+" "+t2_text+" "+filename+"."; Right wayRight wayvar t1_text = "Not enough memory to open the file %s1."; var t2_text = "Not enough memory to copy the file %s1.";var t3_text = "Not enough memory to save the file %s1.";

Use FormatMessage for multiple variable sentencesUse FormatMessage for multiple variable sentences Thus: Thus: "Not enough memory to %s1 the file %s2."; Becomes: Becomes: ”Liian vähän muistia tiedoston %2 %1.”:

Unbreakable rules (2/3)Unbreakable rules (2/3)

Page 67: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Unbreakable rules (3/3)Unbreakable rules (3/3)

Do not reuse string resources: Do not reuse string resources: If the same string resource is to be used in more If the same string resource is to be used in more

than one place, create one instance of the resource than one place, create one instance of the resource per useper use

Use the same resource identifiers throughout Use the same resource identifiers throughout the life of a productthe life of a product

Page 68: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Rule of thumb:Rule of thumb:• < 10 = 300%< 10 = 300%• > 10 = 30%> 10 = 30%

Text ExpansionText Expansion

Allow for text expansionAllow for text expansion

Page 69: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Text Expansion (web pages)Text Expansion (web pages)

Design so Entire Dialog Consists of Tables:Design so Entire Dialog Consists of Tables:<body><body><!-- Use one main table --><!-- Use one main table --><table width=100%><table width=100%><… can contain other tables …><… can contain other tables …></table></table>

</body> </body>

Avoid Fixed Width Items Avoid Fixed Width Items Each Control Should be in a Separate Cell Each Control Should be in a Separate Cell Allow Text Wrapping - do not use Allow Text Wrapping - do not use “nowrap”“nowrap” Separate Check Boxes and Radio Buttons from LabelsSeparate Check Boxes and Radio Buttons from Labels

Page 70: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Text Expansion HTML DialogsText Expansion HTML Dialogs

Page 71: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Mirroring HTML DialogsMirroring HTML Dialogs

Page 72: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

LocalizabilityLocalizability

Pseudo-Localization is a good way to test Pseudo-Localization is a good way to test LocalizabilityLocalizability

Page 73: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

AgendaAgenda

DefinitionsDefinitions Why invest in World-Ready products?Why invest in World-Ready products? Globalization – step-by-stepGlobalization – step-by-step

Universal encoding - UnicodeUniversal encoding - Unicode Locale awareLocale aware Handle different input methodsHandle different input methods Complex script awareComplex script aware Font independencyFont independency Multi-lingual UI awareMulti-lingual UI aware Mirroring awareMirroring aware LocalizabilityLocalizability

Conclusion & ReferencesConclusion & References

Page 74: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

Final ConclusionsFinal Conclusions

Benefits of investing in development of World-Benefits of investing in development of World-Ready applications are realReady applications are real

Windows 2000/XP eases the pain and sets the Windows 2000/XP eases the pain and sets the standardstandard

The biggest task in implementing World-Ready The biggest task in implementing World-Ready applications is setting the designers and applications is setting the designers and engineers mind-set to think GLOBALengineers mind-set to think GLOBAL

Page 75: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division

MSDN for latest documentation about new APIsMSDN for latest documentation about new APIs

Developing International Software for Windows Developing International Software for Windows 95 and Windows NT95 and Windows NT

Windows 2000/XP Globalization: Windows 2000/XP Globalization: http://www.microsoft.com/globaldevhttp://www.microsoft.com/globaldev

World-Ready GuideWorld-Ready Guide You are not World-Ready If…You are not World-Ready If…

E-Mail aliases:E-Mail aliases:[email protected]@[email protected]@microsoft.com

ResourcesResources

Page 76: Developing World-Ready Applications for Windows 2000/XP Houman Pournasseh Lead Program Manager Russ Rolfe Program Manager Windows Division