Internationalization is the process of designing and building an application to facilitate localization. Localization, in turn, is the cultural and linguistic adaptation of an internationalized application to two or more culturally-distinct markets. When users launch a well-localized application, they should feel fully at home with it and not feel like it originated from some other country.
Internationalization and localization are complementary activities. By internationalizing an application, you create the programmatic infrastructure needed to support localized content. By localizing that application, you then add resources that are customized for people of a different culture. Localizing an application often involves translating the user-visible text of the application, but that is only part of the work that must be done. Other parts of your application must also be modified, including the following:
Nib files (windows, views, menus) must be modified to accept translated text.
Static text must be translated.
Icons and graphics (especially those containing culture-specific images) must be changed to be more culturally appropriate.
Sound files that contain spoken language must be rerecorded for each supported language.
Dynamic text generated by your program (including dates, times, and numerical values) must be formatted using the current locale information.
Text handling code must calculate word breaks using the current locale information.
Tabular data must be sortable using the current locale information.
Much like previous versions of Mac OS, the Mac OS X programming environments make internationalizing your application easy. The application's executable code resides in one file while individual resources are located in separate files. The resource files for a single localization are stored together in a language-specific project directory. More than one language-specific directory may exist for the same executable file, making it possible for a single application bundle to support multiple localizations easily. This support even allows you to store localizations for single-byte and double-byte languages together in the same bundle.
To simplify the development of an internationalized application, you need to identify all culture-specific information in your application. Scour your user interface for culture-specific text, images, and sounds and put them into resource files. At the same time, make sure the code that uses those resources loads them from the corresponding resource files. You should also look for places where your user interface displays dates and currency values and make sure you are formatting them using the current locale information.
Once your application’s user interface is frozen (which may be before the code freeze), you can begin to localize it. For each localization, the localization team creates language-specific versions of the nib files, text, images, and sound files. If your application is properly internationalized, the process doesn’t require modifications to your source code. You can therefore create the translations in-house or contract with an outside localization service.
Even if you do not plan to support multiple languages immediately, internationalizing your application up front is a good idea. Storing resources outside of your executable file makes it easier to change the appearance of your application without requiring a complete revalidation of its behavior. This reduces the likelihood of introducing bugs to your code if you do choose to localize. There is also no penalty for building internationalization support into your application. Even if your application is monolingual, you still need to test all available code paths. If your code is properly internationalized for one language,it should require little additional testing to support other languages.
Last updated: 2005-09-08