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