I actually just did translate parts of WP for my homepage into Swiss-German (hey, there are strange languages out there) and made the language configurable. I currently can switch between English and Swiss-German. I might do a German translation as well.
However, I've only translated part of the user interface that I need for the people reading my blog in Swiss-German, i.e. admin user interface is not translated, the comments handling is not translated, installation is not translated, etc.
The approach I took was to create a language file WPINC . "/lang/" . LANG ".php" including all the strings I needed for the limited translation into my language. The strings are define()d in there, so it should be fairly straight forward to translate it into other languages.
All I had to do then was to define a LANG var in wp-config.php and then include the correct language strings file in wp-settings.php. Note, the definition of LANG and inclusion of the language file would have to be fixed for a proper translation of WP. I.e. my stuff does not work (yet) so that it could be used for the installation, but it is a start. However, it supports everything I need right now.
Also the language could be automatically detected (or at least, what language is set in the browser through HTTP_ACCEPT_LANGUAGE), but I do prefer the configurable setting of the language in a file or DB (let's me enforce a language for my private site).
My partial translation is based on WP1.0 and if there is interest, I can send diffs or whatever is needed to the developers with what I started to do. Unfortunately, I will not have time the next few days and I also will have to sort through my other changes I did before providing any patches. I hope to have time this weekend or at latest next weekend to sort it out though.
Some add-ons to the discussion here:
1) using separate language files is fairly straight forward to extend and translate. One file vs. multiple files: might make sense to split it up, depending on how big and manageable the files would be. Or it could be split up by functionality: installation, admin, (read only) user, etc, which enables step-wise translation.
2) having different files for each language shipped and installed is the easiest way. No headache with generating (replacing texts) at installation time or shipping different language version for WP as proposed earlier
3) Don't use text files, use php files/code to include (ok, catalog files would be kind of standard, but I don't know if PHP supports them). Simple vars are not good enough. I did use define()s because some texts are used as default parameters for functions
4) Translation should also include correct default configuration for time, date, etc. formats (easy to fix since most is already configurable)
5) One should sift through the code and check for localization problems. This could be things as fixing up the order of parameters for printf()s (easy to do), getting rid of any pictures that are language dependant or support different ones. There's more topics, such as different charsets, etc