Among the various possible approaches under discussion for object translation in core, see http://groups.drupal.org/node/18735 for a complete list:
1. Each item that has translatable properties declares them on its fields ('translatable' => TRUE).
2. Locale module creates and maintains a parallel table for each table that includes translatable properties. E.g. if myobject has three translatable fields ('name', 'title', 'description'), Locale would create a table 'locale_myobject' and assign it the fields name, title, and description plus the primary key field or fields plus a language field.
3. In the db_select object, we add a method, $query->translate(). This would iterate through all existing tables, consult the schema, and (a) if fields have already been added, join on their locale_x table and load the translated version of the fields or (b) if it's a query for all fields, fetch all translated fields. $query->translate() could accept an array of languages, in which case there would be a join per language.
4. Add a method to db_delete to run any deletions also on locale_x tables.