Introduction
1. Getting Started
	Thinking Globally: The Earth is Round
	Speaking the Same Language (in This Book?)
	Internationalization (I18N)
	Multinationalization (M18N)
	Translation
	Localization
	Code Pages
	Unicode: UCS-2, UCS-4, UTF-7, UTF-8, UTF-16, and So On
	Glyphs
	Fonts
	Character Sets
	Language and Locale
	Locale ID (LCID)
	Primary Language Identifier (PRIMARYLANGID)
	Sublanguage Identifier (SUBLANGID)
	Language Identifier (LANGID)
	Sort Identifier (SORTID)
	Sort Version (SORTVERSION):
	Worldwide EXE
	Input Method Editor

Part I: Globalization
	2. Working with Number, Date, and Currency Formats
	Handling dates
	Date/time formats
		COM and evil date guessing
		Are time zones a problem?
		Wrapping up dates
	Handling numbers and currency
		Locale-specific Numbers
		Getting optional calendars available and other currency format information
		Other number format information from the regional settings
		The euro: farewell to "one currency to a customer"

	3. Using Calendars
	The Gregorian Calendar
	Using the DTPicker and MonthView controls in VB
	Creating a calendar control without using DTPicker or MonthView
	The Hijri Calendar
	The Thai Calendar
	Other Calendars

	4. User Interface Issues
	Basic user interface (UI) issues
	All About Fonts
		Installing Fonts
		Using Fonts
		Font character sets
	Enough space to type
	Sorting Data
		European Language Sorting Differences
		Asian Language Sorting Differences
	Advanced UI issues
		Bi-directional (BiDi) support for Hebrew, Arabic, and Farsi
		Integrating the Input Method Editor (IME) for Far East languageS
		Using the IME
		Handling "Unicode only" languages such as Hindi, Tamil, and Georgian

	5. Regional Settings
	Differing systems of measurement
	Handling changes to the regional settings
	Working with LCIDs
	Intrinsic Visual Basic functions

Part II: Multinationalization
	6. VB - Is it ANSI vs Unicode?
	A Brief History of Microsoft Products and Unicode
		16-Bit Windows (Windows 3.0, 3.1, and 3.1x)
		COM in the 16-Bit World
		Visual Basic in the 16-Bit World
		Windows NT
		Windows 95
		COM in the 32-Bit World
		Windows 98
		Windows Millenium Edition (Windows Me)
		Data Storage Engines
		Data Access Methods
		Microsoft Office
		Windows 2000
		Windows CE
	Visual Basic in the 32-Bit World
	Looking at Future Versions of Visual Basic
	
	7. Understanding the Codepage Barrier
	Why Call it a Barrier?
		Barriers as Immaterial (Theoretical) Hinderences
		Barriers as Material (Real) Hinderances
		Ok, its a Barrier of One or Both Sorts. Why Cross It?
	Using Unicode to Handle All These Languages
		The Many Faces of the StrConv Function
		Using API Calls
		Why You Should Not Try to Do It Yourself
	File I/O Functions
	API Declarations
	Windows 95/98/Me ANSI Dependencies
	Where Does MLang Fit In?
	Handling Complex Scripts
		Problems With Calling Uniscribe
		The Standard Script* Uniscribe APIs
		The ScriptString* Functions
		A Real-World Example: A Multilingual Edit Control

	8. Handling VB Forms and Formats
	Using COM to Circumvent VB's Fear of Other Locales
		Keeping It Simple With VariantChangeTypeEx
		Handling Time Zones
	Right Back to Calendars
		A "Do It Yourself" MonthView Control
		Creating Your Own Calendar Without VB or the Windows Common Controls
	"Ruby" Forms in Visual Basic
		VB Edit Controls
		VB Static Controls
		Ruby Label Controls
		Using the MS Forms 2.0 (Forms^3) Controls
		The Windowless Controls From the Visual Basic CD
		Displaying ToolTips
		Handling Menu Items
		Third-Party RichEdit Controls

Part III: Localization
	9. Building the Localized Application
	Translation Versus Localization
	Keeping UI Elements in Resource Files
		Windows Resource Files
		Using Multiple Resource Files
		How Windows Decides What Resources to Load
		Using Resources in VB Code
	Keeping Localizable Resources in a Jet Database

	10. Handling Localized Resources with Sattelite DLL's
	The Worldwide EXE
	Choosing a Language
		The Default System Locale
		The Default User Locale
		The Windows 2000 UI Language
		The Office 2000 UI Language
		User Selected Locale
	Dealing with the Actual Resources You Have Chosen to Use
		Release Scheduling
		Code Maintenance and Upgrading
	Localizing an Existing Product That Was Never Designed with Such Issues in Mind
	Writing Your UI Strings
		Poor Source Language Knowledge
		Jargon
		Poor Technical Knowledge
	Defining Resources Properly (Word Order, When to Reuse Text, Avoiding Concatenation)
		Word Order
		Reusing Text
		Concatenating Phrases
		Using Placeholder Tokens in Text
	Avoding Machine Translation
	Beyond String Tables (Localizing Whole Dialogs)
		Dealing with Bidi Issues in Your Localized Forms
	Glossaries - Why Localizers Use Them, Why You Should Help Define Them
	Outsourcing Localization
		Selecting a Localization Company
		Working with a Localization Company
	Third-Party Localization Products for Visual Basic
	The Trigeminal Software Win32Dialog Tools
		The TsiWin32Dialog.dll Add-in
		Using the Win32Dialog Framework
		The Runtime Win32Dialog Components

Part IV: Databases
	11. Handling external formats
	Handling user data that may be in their locale
		Getting data into a database
		Storing your data
		Getting data out of a database
	Using VB's Data Controls to display the data
	Working with the IISAM and HTML files
		Reading Text/HTML Files into a Database
		Specify International Options in a schema.ini File
		Where do the text and html "specifications" in Microsoft Access fit in?
	Dealing with XML and Other Internet Formats

	12. Jet, SQL Server, and other databases
	Database Schema Issues
	Using Jet 4.0 and SQL Server 7.0/8.0 -- Unicode (UCS-2) and spanning code pages
	Using Jet 3.5 and SQL Server 6.5: One Code Page at a Time
	When the Database is Not Jet, and Not SQL Server
		Oracle and Sybase
		FoxPro
		Excel
	Collation Orders: Just One Sort at a Time, Even with Unicode
		Problems with case sensitivity in ADO and DAO
		Sorting/searching within a given collation order
		Handling Unicode Strings in SQL Queries
		Sorting outside of a given collation order
	Handling More Than One Locale Per Database
		More on SQL Server 2000 International Features
		Using Sort Keys (and Creating Your Own)
	Using Replication to Use the Same Data Under Multiple Sort Orders
		Unique Indexes on Text Fields
		Jet Partial Replicas and SQL Server Partitioned Replicas
	Case-Sensitive SQL Servers, ADO, and DAO
	The i18N Issues With Dates and Databases
		Jet Dates
		SQL Server Dates

Part V: Internet Applications
	13. Web Interface Issues
	Basic Web Interface Issues
		ASPCodePage and the Metabase
		@CODEPAGE
		Session.CodePage
		charset
		Getting Multilingual Text In and Out of a Database on a Web Site
		@LCID
		Session.LCID
		GetLocale/SetLocale
		The Role of VBScrpt and JScript on the Server Side
		The Role of Client-Side Scripting
		Fitting XML Into the Mix
	Server Issues: Operating Systems, Software, and Other Decisions
		What Operating System to Use?
		What Software Needs to Be on the Server?
	
	14. Extending Web Applications with Components and Services
	Visual Basic's Role in International Web Applications
	Extending ASP with Visual Basic Components
	Providing Locale-Dependent Services
	Creating Locale-Independent Services
	The i18N Implications of Page Navigation and Inclusion
		Response.Redirect
		Server-Side Includes
		Server.Transfer
		Server.Execute
	Using Third-Party Components

Part VI: Application Content and Help Systems
	15. Extending Localization and Globalization Concepts
	Some Examples of Locale-Specific Misunderstandings
	Spell Checking and Synonym Lookups with Different Languages
	Holidays and Other Content-Based Calendar Issues
	Issues to Look Out for in Your Content
		Keep Examples From Being Locale Specific
		Keeping Geography Out of It
		Humor Is Often Not the Way to Make Users Comfortable
	Bad Usability Assumptions for Localized Applications
	The HTML Help Workshop and Other Languages
	Dangerous Assumptions to Make in Applications
	Paper Sizes
	At a Minimum Testing (and Possibly Developing/Deploying) on Windows 2000
	Names, Addresses, Phone Numbers, Postal Codes, and Other Formats That Can Change from Place to Place

	16. Creating Documentation and Using HTML Help
	Planning Out What to Test?
		Category 1: Regional Settings
		Category 2: Input Locales and Data Storage
		Category 3: Default System Language
		Category 4: Faux-Localized Operating Systems
		Category 5: Truly Localized Operating Systems
	Choosing Which Category From Table 16.1 to Support
	Language Tiers
	Installation of the Application Under Test (AUT)
	Execution of Your International Test Cases
		Things to Keep in Mind for i18N
		Things to Keep in Mind for L10N
		Things to Keep in Mind for Complex Scripts

Part VII: Reference
	A. Resources and Links
	Interesting and Important Web Sites
	Books
	
	B. Code Pages
	Font Character Sets
	Unicode 2.0 and Unicode 3.0 Character Ranges and Beyond
		General Scripts Area
		Symbols Area
		CJK Phonetics and Symbols Area
		Braille
		CJK Ideographs Area
		Hangul Syllables Area
		Surrogates Area
		Private Use Area
		Compatibility Areas and Specials

	C. Locale IDs (LCIDs)
	Removed LCIDs
	User-Defined LCIDs
	Primary Language Identifiers (PRIMARYLANGIDs)
	User-Defined Primary Language Identifiers
	Sub-language Identifiers (SUBLANGIDs)
	User-Defined Sublanguage Identifiers
	Sort Identifiers
	Country Codes

	D. Formats
	Currency Formats
	Date/Time Formats
	Address Formats

	E. International Keyboard Layouts
	
	Index