Just to follow up on what Niels and Michael have said here, the direction is not to copy/paste code all over the place un-DRY-ing everything. The idea is that separate parts should be separate. Quite a bit of the platform was written to bridge gaps in PHP. Either bridging from PHP4 to PHP5 (eg. JObject, JSimpleXML) or just filling in things we found as holes here and there. In a few places we tried to bridge the gap between PHP installations such as JFTP, which is designed to use the native FTP methods if present and fall back on our own implementation if they are not present. Not all hosts have the FTP extension installed, and we felt it was necessary at the time to make things less painful for lots of new users. As these things become less necessary we will re-evaluate their lease on life.
With respect to Exception messages, I am strongly against having translation within those messages. The reality of the situation is that exception messages are for developers, not users. A well built application will catch exceptions, inspect them, and then either direct or message the user gracefully. As pointed out we don't know if the exception may have occurred within the mechanism to translate the message, or some dependency of that translation mechanism. As a project we are certainly committed to internationalization and localization, but I don't see the reward vs the risk on translating exception messages ... especially at the point where they are thrown.
Lastly, with respect to separation of platform packages, this is something we want to work towards. It isn't an absolute, but it is a principle. Similarly, DRY is a principle. Sometimes it is just insane not to repeat a block of code somewhere else. Other times it is insane to do so. One of our goals is to build the platform in such a way that we can only select the packages we actually need for a project. We'll continue to work towards that end, and also continue to work towards not repeating ourselves. When those two principles conflict we will have to assess, make a judgement call, and move forwards.
I hope that helps.
- Louis