This i18n system for Drupal consists on a few core patches and one main module, which also integrates somehow with Localization system.
Adding language to all content cannot -or I don't know how to do it- only as a module, as there is some basic support that needs to be put into the core. The idea is also to put in place some multilanguage support that other modules can take advantage of, and this is also why it has to be at some lower level.
- Added 'language' fields to node, term_data and vocabulary tables.
- Translation relations are kept in different tables for each object, with a 'translation id' -'trid' field- which identifies different language translations for the same object.
- Language initialization and initial path rewriting is done in the init hook, so if any other module uses arg() or $_GET['q'] in the init hook it can cause some trouble.
- Added a hook to common.inc::url to rewrite all outgoing urls: 'i18n_url_rewrite'
- The selection of nodes and terms in current language is done taking advantage of *_rewrite_sql hooks, so it should work smoothly with any node type, and also play well with permission systems. ** Both systems, i18n and permissions, put in some additional conditions when selecting node lists.
- As the language is in the node/term table itself, only a simple where clause is required -no need for complex join conditions-. This should be added -I just did some- to all the queries retrieving nodes and terms.
- Permissions are not defined yet, but will be something like: 'administer translations', 'create translations'...
- Language dependent tables -having some tables duplicated for each language- are not required anymore. But the functionality will be kept -it's just 10 lines of code- for some future use. It will remain as a low-level configurable option.