Index: modules/field/field.multilingual.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.multilingual.inc,v
retrieving revision 1.10
diff -u -p -r1.10 field.multilingual.inc
--- modules/field/field.multilingual.inc	25 Mar 2010 11:46:20 -0000	1.10
+++ modules/field/field.multilingual.inc	4 Apr 2010 17:56:06 -0000
@@ -3,7 +3,65 @@
 
 /**
  * @file
- * Multilingual field API helper functions.
+ * Functions implementing Field API multilingual support.
+ */
+
+/**
+ * @defgroup field_language Field language API
+ * @{
+ * Handling of multilingual fields.
+ *
+ * Fields natively implement multilingual support, and all fields use the
+ * following structure:
+ * @code
+ * $entity->{$field_name}[$langcode][$delta][$column_name]
+ * @endcode
+ * Every field can hold a single or multiple values for each language belonging
+ * to the available languages:
+ * - Untranslatable fields have a cardinality of 1 and only contain
+ *   LANGUAGE_NONE.
+ * - Translatable fields can contain any language code. By default, it is the
+ *   list returned by field_content_languages(), which contains all enabled
+ *   languages with the addition of LANGUAGE_NONE. This default can be altered
+ *   by modules implementing hook_field_available_languages_alter().
+ *
+ * Whether a field is translatable is determined by calling
+ * field_is_translatable(), which checks the 'translatable' property in the data
+ * returned by field_info_field(), and whether there is a translation handler
+ * available for the field.
+ *
+ * A translation handler is a module that registers itself via
+ * hook_entity_info() to handle field translations. A field is translatable if
+ * its 'translatable' property is set to TRUE and it has at least one available
+ * translation handler.
+ *
+ * The available languages for a particular field are returned by
+ * field_available_languages(). By default, _field_invoke() and
+ * _field_invoke_multiple() are processing a field in all available languages,
+ * unless they are given a language suggestion. Based on that suggestion,
+ * _field_language_suggestion() determines the languages to act on.
+ *
+ * Most of field_attach_*() functions act on all available languages, except for
+ * the following:
+ * - field_attach_form() only takes a single language code, specifying in which
+ *   language the field values will be submitted in.
+ * - field_attach_view() requires a language code the entity is displayed in.
+ *   Since it is unknown whether a field translation exists for the requested
+ *   language, the translation handler is responsible for performing one of the
+ *   possible actions:
+ *   - Ignore missing translations, i.e. do not show any field values for the
+ *     requested language. For example, see locale_field_language_alter().
+ *   - Provide a value in a different language as fallback. By default, the
+ *     fallback logic is applied separately to each field to ensure that there
+ *     is a value for each field to display.
+ *   The field language fallback logic relies on the global language fallback
+ *   configuration. Therefore, the displayed field values can be in the
+ *   requested language, but may be different if no values for the requested
+ *   language are available. The default language fallback rules inspect all the
+ *   enabled languages ordered by their weight. This behavior can be altered or
+ *   even disabled by modules implementing hook_field_language_alter(), making
+ *   it possible to choose the first approach. The display language for each
+ *   field is returned by field_language().
  */
 
 /**
Index: modules/system/system.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.api.php,v
retrieving revision 1.149
diff -u -p -r1.149 system.api.php
--- modules/system/system.api.php	4 Apr 2010 12:48:18 -0000	1.149
+++ modules/system/system.api.php	4 Apr 2010 17:57:00 -0000
@@ -74,6 +74,10 @@ function hook_hook_info() {
  *     uri elements of the entity, e.g. 'path' and 'options'. The actual entity
  *     uri can be constructed by passing these elements to url().
  *   - fieldable: Set to TRUE if you want your entity type to be fieldable.
+ *   - translation: An associative array of modules registered as field
+ *     translation handlers. Array keys are the module names, array values
+ *     can be any data structure the module uses to provide field translation.
+ *     Any empty value disallows the module to appear as a translation handler.
  *   - entity keys: An array describing how the Field API can extract the
  *     information it needs from the objects of the type. Elements:
  *     - id: The name of the property that contains the primary id of the
@@ -131,6 +135,9 @@ function hook_entity_info() {
       'revision table' => 'node_revision',
       'path callback' => 'node_path',
       'fieldable' => TRUE,
+      'translation' => array(
+        'locale' => TRUE,
+      ),
       'entity keys' => array(
         'id' => 'nid',
         'revision' => 'vid',
