Index: modules/field/field.multilingual.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.multilingual.inc,v
retrieving revision 1.11
diff -u -p -r1.11 field.multilingual.inc
--- modules/field/field.multilingual.inc	1 Jun 2010 18:29:41 -0000	1.11
+++ modules/field/field.multilingual.inc	3 Aug 2010 13:51:51 -0000
@@ -216,10 +216,11 @@ function field_language($entity_type, $e
   if (!isset($display_languages[$entity_type][$id][$langcode])) {
     $display_language = array();
 
-    // By default display language is set to LANGUAGE_NONE. It is up to
-    // translation handlers to implement language fallback rules.
+    // By default display language is set to LANGUAGE_NONE if the field
+    // translation is not available. It is up to translation handlers to
+    // implement language fallback rules.
     foreach (field_info_instances($entity_type, $bundle) as $instance) {
-      $display_language[$instance['field_name']] = LANGUAGE_NONE;
+      $display_language[$instance['field_name']] = isset($entity->{$instance['field_name']}[$langcode]) ? $langcode : LANGUAGE_NONE;
     }
 
     if (field_has_translation_handler($entity_type)) {
Index: modules/field/tests/field.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/tests/field.test,v
retrieving revision 1.34
diff -u -p -r1.34 field.test
--- modules/field/tests/field.test	2 Aug 2010 05:40:17 -0000	1.34
+++ modules/field/tests/field.test	3 Aug 2010 13:52:44 -0000
@@ -2639,8 +2639,7 @@ class FieldTranslationsTestCase extends 
     field_create_instance($instance);
 
     $entity = field_test_create_stub_entity(1, 1, $this->instance['bundle']);
-    list(, , $bundle) = entity_extract_ids($entity_type, $entity);
-    $instances = field_info_instances($entity_type, $bundle);
+    $instances = field_info_instances($entity_type, $this->instance['bundle']);
 
     $enabled_languages = field_content_languages();
     $languages = array();
@@ -2688,6 +2687,13 @@ class FieldTranslationsTestCase extends 
     drupal_static_reset('field_language');
     $langcode = field_language($entity_type, $entity, $this->field_name, $requested_language);
     $this->assertTrue(isset($entity->{$this->field_name}[$langcode]) && $langcode != $requested_language, t('The display language for the (single) field %field_name is %language.', array('%field_name' => $field_name, '%language' => $langcode)));
+
+    // Test field_language() basic behavior without language fallback.
+    variable_set('field_test_language_fallback', FALSE);
+    $entity->{$this->field_name}[$requested_language] = mt_rand(1, 127);
+    drupal_static_reset('field_language');
+    $display_language = field_language($entity_type, $entity, $this->field_name, $requested_language);
+    $this->assertEqual($display_language, $requested_language, t('Display language behave correctly when language fallback is disabled'));
   }
 
   /**
Index: modules/field/tests/field_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/tests/field_test.module,v
retrieving revision 1.8
diff -u -p -r1.8 field_test.module
--- modules/field/tests/field_test.module	24 Jun 2010 17:24:40 -0000	1.8
+++ modules/field/tests/field_test.module	3 Aug 2010 13:34:22 -0000
@@ -103,7 +103,9 @@ function field_test_field_available_lang
  * Implements hook_field_language_alter().
  */
 function field_test_field_language_alter(&$display_language, $context) {
-  locale_field_language_fallback($display_language, $context['entity'], $context['language']);
+  if (variable_get('field_test_language_fallback', TRUE)) {
+    locale_field_language_fallback($display_language, $context['entity'], $context['language']);
+  }
 }
 
 /**
