Translations for these system messages are usually provided by means of a PHP file with oodles of strings stuffed in an associative array. While this is workable with translators, it isn't for site admins who want to customize text. Thus, there is often a database layer over the regular translations that lets people without write access to the webserver to change system messages to things like "ERROR CORE MELTDOWN OHNOHZORZ!!!"
It may be reasonably asserted, then, that the whole subject of messages, including their retrieval from multiple data sources, their caching, parameter substitution, etc, is a complicated issue that merits their own class, which we shall term Messages or Translation.
Messages, however, aren't the only game in town: a language has to support things like dates, numbers, and genitive noun forms to be truly accurate: messages are only a part (albeit a very large one) of the mix. So, I pose to you a question of dependencies:
Is the language dependent on the messages? Or are the messages just a component of the language? Or are they two separate entities that have dependencies on each other? Or is there a third gateway two these two objects? (The association is not always one to one: there may be multiple languages on one page)
Some examples: MediaWiki contains a MessageCache which is used for retrieving messages. this object considers the Language object only one of many places where a message could be squirreled away. The PEAR packages Translation2 and I18Nv2 appear to be blithely unaware of one another (even though the former is dependent on the latter). I am not currently aware of any other translation packages.
I'm looking for something light, thank you very much, since this will be used for an error reporting system.