|
F
or
reasons of profitability, modern computer programs must be useful and attractive
to users all over the world. Naturally, people in different countries prefer
to interact with their computers in their respective native languages.
Ideally, computer programs should be adaptable to all conceivable local
languages and cultural conventions. As developers of products that aim
for high international acceptance, we must build into our programs the
ability to adapt to local conventions. This design issue is known as the
internationalization of computer software.
International Programming
for Microsoft Windows
explains how programmers can use various APIs
to internationalize C and C++ programs that must run on Microsoft Windows
platforms.
David
A. Schmitt's book begins by describing the need and reasons for internationalizing
computer programs. Experience with international programming is not required.
Schmitt takes a broad look at cultural differences in general and how they
impinge on software development in particular. This includes a brilliant,
brief history of character sets: how they evolved from EBCDIC on mainframes
and 7-bit-ASCII codes over ANSI encodings to Unicode, which is today's
standard on Win32. After this introduction to the topic, he delves deeply
into the details of international programming in C and C++.
As
can be expected from a book with this title, it is predominantly geared
towards Windows programmers. Schmitt covers all C and C++ programming interfaces
that are available for internationalization on the Windows platform?including
Windows-specific APIs, such as locales in Win32, and international standards
such as the ANSI C locales and the standard C++ locales, which support
development of portable internationalized programs. Thanks to this coverage
of standardized APIs,
International Programming for Microsoft Windows
is also valuable to developers who aim to provide portable programs for
several platforms, Windows being just one of the target platforms. The
author is aware of portability issues and clearly points out where you
can leave the portability platform guaranteed by a standard and resort
to system-specific, non-portable functionality.
Three
chapters are devoted to the various standard and non-standard locales that
address roughly the same problem area?namely, text-processing issues such
as formatting of monetary, date, and time values; language-dependent sorting
order, etc. However, international programs must also solve problems such
as selection of code pages and fonts or handling of different keyboard
layouts. Solutions to these problems typically require support by operating
system services. For this reason, the C and C++ standard standards deliberately
stay silent about these system-dependent issues. Because this is a book
specifically for Windows programmers, Schmitt naturally includes a discussion
of system-dependent APIs such as the Windows support for multilingual input
and output.
All
APIs relevant to international programming are explained in detail and
their use is demonstrated by means of instructive sample programs, which
are available on the CD-ROM in the book. The author even addresses very
practical issues, such as the fact that Visual C++ 6.0 does not provide
a standard-compliant implementation of the C++ standard locales, how you
can find workarounds, and where you can obtain a standard-compliant implementation.
International
Programming for Microsoft Windows
excels at being deep and broad at
the same time. Despite the fact that it provides an abundance of technical
details, it's very readable?not just for programmers who have not yet been
exposed to international programming, but also pros who look for details
regarding the internationalization APIs available for Windows programming.
Naturally,
you can find alternative titles that are devoted to one particular aspect
out of the numerous topics that Schmitt covers in his book. For instance,
there is Nadine Kano's
Developing International Software for Windows
95 and NT
(
Microsoft
Press, 1995
; now apparently out of print), which provides extensive
details for those who want to know more about the system-specific international
aspects of Windows. Although it has not been updated since 1995, most of
the content is still valid. For more details on the standard C++ locales
there is our own book,
Standard C++ IOStreams and Locales
(
Addison-Wesley,
2000
). The ultimate information about Unicode, however, is available
in the
Unicode
Standard
published by the Unicode Consortium. The best coverage of
multibyte character handling that we've come across so far is in Ken Lunde's
Understanding
Japanese Information Processing
(
O'Reilly,
1993
; now out of print). And so on, and so forth... Schmitt's bibliography
is very helpful and points you to alternative and further reading.
These
other books notwithstanding,
International Programming for Microsoft
Windows
gives you an excellent introduction to the problem of international
programming and a lucid overview of all relevant APIs. Not only does it
provide sufficient detail, but it's up-do-date as well.
Angelika
Langer
develops and teaches classes on advanced C++, STL, multithreading,
internationalization, and Java. She served on the ANSI/ISO C++ Committee
from 1993 to 1998.
Klaus Kreft
is a software architect and consultant
with 15+ years of experience in industrial software development. He works
for Siemens Business Services in Germany. Langer and Kreft are authors
of "Standard C++ IOStreams and Locales: Advanced Programmer's Guide and
Reference" (Addison-Wesley, 1999) and are columnists for
C++
Report
magazine.
|