diff --git modules/field/views_handler_field_field.inc modules/field/views_handler_field_field.inc
index d2ac0e4..cdbdc85 100644
--- modules/field/views_handler_field_field.inc
+++ modules/field/views_handler_field_field.inc
@@ -100,6 +100,13 @@ class views_handler_field_field extends views_handler_field {
     if ($use_groupby || !empty($this->definition['add fields to query'])) {
       $this->ensure_my_table();
       $this->add_additional_fields($fields);
+
+      // Filter by language, if field translation is enabled.
+      $field = $this->definition['field_info'];
+      if (field_is_translatable($this->entity_type, $field)) {
+        $column = $this->table_alias . ".language";
+        $this->query->add_where(0, $column, $this->query->options['field_language']);
+      }
     }
 
     // The revision id inhibits grouping.
@@ -124,7 +131,7 @@ class views_handler_field_field extends views_handler_field {
   function option_definition() {
     $options = parent::option_definition();
 
-    $field = field_info_field($this->definition['field_name']);
+    $field = $this->definition['field_info'];
     $field_type = field_info_field_types($field['type']);
     $column_names = array_keys($field['columns']);
 
@@ -151,7 +158,7 @@ class views_handler_field_field extends views_handler_field {
   function options_form(&$form, &$form_state) {
     parent::options_form($form, $form_state);
 
-    $field = field_info_field($this->definition['field_name']);
+    $field = $this->definition['field_info'];
     $formatters = _field_view_formatter_options($field['type']);
     $column_names = array_keys($field['columns']);
 
@@ -299,11 +306,32 @@ class views_handler_field_field extends views_handler_field {
         'label' => 'hidden',
       );
 
-      $render_array = field_view_field($entity_type, $entity, $this->definition['field_name'], $display);
+      $langcode = $this->field_language();
+      $render_array = field_view_field($entity_type, $entity, $this->definition['field_name'], $display, $langcode);
       return drupal_render($render_array);
     }
     else {
       return '';
     }
   }
+
+  /**
+   * Return the language code of the language the field should be displayed in,
+   * according to the settings.
+   */
+  function field_language() {
+    global $language_content;
+
+    if (field_is_translatable($this->entity_type, $this->definition['field_info'])) {
+      $default_language = language_default('language');
+      $language = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
+                              array($language_content->language, $default_language),
+                              $this->query->options['field_language']);
+
+      return $language;
+    }
+    else {
+      return LANGUAGE_NONE;
+    }
+  }
 }
diff --git modules/locale/views_handler_filter_locale_language.inc modules/locale/views_handler_filter_locale_language.inc
index 678197d..6407ba6 100644
--- modules/locale/views_handler_filter_locale_language.inc
+++ modules/locale/views_handler_filter_locale_language.inc
@@ -8,10 +8,13 @@ class views_handler_filter_locale_language extends views_handler_filter_in_opera
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Language');
-      $languages = array('***CURRENT_LANGUAGE***' => t("Current user's language"), '***DEFAULT_LANGUAGE***' => t("Default site language"), '***NO_LANGUAGE***' => t('No language'));
+      $languages = array(
+        '***CURRENT_LANGUAGE***' => t("Current user's language"),
+        '***DEFAULT_LANGUAGE***' => t("Default site language"),
+        LANGUAGE_NONE => t('No language')
+      );
       $languages = array_merge($languages, locale_language_list());
       $this->value_options = $languages;
     }
   }
 }
-
diff --git modules/translation/views_handler_filter_node_language.inc modules/translation/views_handler_filter_node_language.inc
index 64ac921..01de09c 100644
--- modules/translation/views_handler_filter_node_language.inc
+++ modules/translation/views_handler_filter_node_language.inc
@@ -7,10 +7,13 @@ class views_handler_filter_node_language extends views_handler_filter_in_operato
   function get_value_options() {
     if (!isset($this->value_options)) {
       $this->value_title = t('Language');
-      $languages = array('***CURRENT_LANGUAGE***' => t("Current user's language"), '***DEFAULT_LANGUAGE***' => t("Default site language"), '***NO_LANGUAGE***' => t('No language'));
+      $languages = array(
+        '***CURRENT_LANGUAGE***' => t("Current user's language"),
+        '***DEFAULT_LANGUAGE***' => t("Default site language"),
+        LANGUAGE_NONE => t('No language')
+      );
       $languages = array_merge($languages, locale_language_list());
       $this->value_options = $languages;
     }
   }
 }
-
diff --git plugins/views_plugin_query_default.inc plugins/views_plugin_query_default.inc
index ba8931f..192a9fb 100644
--- plugins/views_plugin_query_default.inc
+++ plugins/views_plugin_query_default.inc
@@ -170,6 +170,9 @@ class views_plugin_query_default extends views_plugin_query {
       'default' => FALSE,
       'bool' => TRUE,
     );
+    $options['field_language'] = array(
+      'default' => '***CURRENT_LANGUAGE***',
+    );
 
     return $options;
   }
@@ -197,6 +200,36 @@ class views_plugin_query_default extends views_plugin_query {
       '#description' => t('This will make the query attempt to connect to a slave server if available.  If no slave server is defined or available, it will fall back to the default server.'),
       '#default_value' => !empty($this->options['slave']),
     );
+
+    $entities = entity_get_info();
+    $entity_tables = array();
+    $has_translation_handlers = FALSE;
+    foreach ($entities as $type => $entity_info) {
+      $entity_tables[] = $entity_info['base table'];
+
+      if (!empty($entity_info['translation'])) {
+        $has_translation_handlers = TRUE;
+      }
+    }
+
+    // Doesn't make sense to show a field setting here if we aren't querying
+    // an entity base table, or if there's only one language defined.
+    if (in_array($this->base_table, $entity_tables) && $has_translation_handlers) {
+      $languages = array(
+        '***CURRENT_LANGUAGE***' => t("Current user's language"),
+        '***DEFAULT_LANGUAGE***' => t("Default site language"),
+        LANGUAGE_NONE => t('No language')
+      );
+      $languages = array_merge($languages, locale_language_list());
+
+      $form['field_language'] = array(
+        '#type' => 'select',
+        '#title' => t('Field Language'),
+        '#description' => t('All fields which support translations will be displayed in the selected language.'),
+        '#options' => $languages,
+        '#default_value' => $this->options['field_language'],
+      );
+    }
   }
 
   // ----------------------------------------------------------------
@@ -780,7 +813,7 @@ class views_plugin_query_default extends views_plugin_query {
    * The caller is reponsible for ensuring that all fields are fully qualified
    * (TABLE.FIELD) and that the table already exists in the query.
    * Internally the dbtng method "where" is used.
-   * 
+   *
    * @param $group
    *   The WHERE group to add these to; groups are used to create AND/OR
    *   sections. Groups cannot be nested. Use 0 as the default group.
@@ -814,7 +847,7 @@ class views_plugin_query_default extends views_plugin_query {
 
   /**
    * Add a simple HAVING clause to the query.
-   * 
+   *
    * The caller is responsible for ensuring that all fields are fully qualified
    * (TABLE.FIELD) and that the table and an appropriate GROUP BY already exist in the query.
    * Internally the dbtng method "havingCondition" is used.
diff --git views.module views.module
index 7b131a7..3412399 100644
--- views.module
+++ views.module
@@ -133,7 +133,7 @@ function views_theme($existing, $type, $theme, $path) {
  *   The existing cache of theme hooks to test against.
  * @param $path
  *   The path to search.
- * 
+ *
  * @see drupal_find_theme_templates
  */
 function _views_find_module_templates($cache, $path) {
@@ -1290,13 +1290,12 @@ function views_theme_functions($hook, $view, $display = NULL) {
  * Substitute current time; this works with cached queries.
  */
 function views_views_query_substitutions($view) {
-  global $language;
+  global $language_content;
   return array(
     '***CURRENT_VERSION***' => VERSION,
     '***CURRENT_TIME***' => REQUEST_TIME,
-    '***CURRENT_LANGUAGE***' => $language->language,
+    '***CURRENT_LANGUAGE***' => $language_content->language,
     '***DEFAULT_LANGUAGE***' => language_default('language'),
-    '***NO_LANGUAGE***' => '',
   );
 }
 
