July 3, 2011, 10:51 a.m.
posted by stackme
Managing Localization Resources
Two techniques simplify the management of your localization resources. The first is making the new language of an object'for example, Canadian English'extend from a similar existing language, such as American English. You only have to change the words and phrases in the new object that differ from the original language.
The second technique: to track what phrases still need to be translated in new languages, put stubs in the new language object that have the same value as in your base language. By finding which values are the same in the base language and the new language, you can then generate a list of words and phrases to translate.
The catalog-compare.php program shown in Figure prints out messages that are the same in two catalogs, as well as messages that are missing from one catalog but present in another.
To use this program, put each message catalog object in a file with the same name as the object (e.g., the pc_MC_en_US class should be in a file named pc_MC_en_US.php, and the pc_MC_es_US class should be in a file named pc_MC_es_US.php). You then call the program with the two locale names as arguments on the command line:
% php catalog-compare.php en_US es_US
In a web context, it can be useful to use a different locale and message catalog on a per-request basis. The locale to use may come from the browser (in an Accept-Language header), or it may be explicitly set by the server (different virtual hosts may be set up to display the same content in different languages). If the same code needs to select a message catalog on a per-request basis, the message catalog class can be instantiated as in Figure.
Instantiating message catalogs
19.4 for a discussion of message catalogs; Recipe 7.19 for information on finding the methods and properties of an object.