diff --git a/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php b/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
index 6334895e88f7e3b34488c7fb14c4a42504a81320..b6b45f07c8e3611863c56dab24f5eb932776fe60 100644
--- a/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
+++ b/lib/Drupal/views/Plugin/views/cache/CachePluginBase.php
@@ -289,7 +289,7 @@ function get_results_key() {
         'build_info' => $build_info,
         'roles' => array_keys($user->roles),
         'super-user' => $user->uid == 1, // special caching for super user.
-        'language' => language(LANGUAGE_TYPE_INTERFACE)->langcode,
+        'langcode' => language(LANGUAGE_TYPE_INTERFACE)->langcode,
         'base_url' => $GLOBALS['base_url'],
       );
       foreach (array('exposed_info', 'page', 'sort', 'order', 'items_per_page', 'offset') as $key) {
@@ -312,7 +312,7 @@ function get_output_key() {
         'roles' => array_keys($user->roles),
         'super-user' => $user->uid == 1, // special caching for super user.
         'theme' => $GLOBALS['theme'],
-        'language' => language(LANGUAGE_TYPE_INTERFACE)->langcode,
+        'langcode' => language(LANGUAGE_TYPE_INTERFACE)->langcode,
         'base_url' => $GLOBALS['base_url'],
       );
 
diff --git a/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
index 31014ddb2f82307a405121e4072991225237ff27..a432506ca8952a333fbbe23cde8c17d49af9eb64 100644
--- a/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
+++ b/lib/Drupal/views/Plugin/views/display/DisplayPluginBase.php
@@ -134,6 +134,15 @@ function init(&$view, &$display, $options = NULL) {
       $this->unpack_options($this->options, $options);
     }
 
+    // Convert the field_language and field_language_add_to_query settings.
+    $field_language = $this->get_option('field_language');
+    $field_language_add_to_query = $this->get_option('field_language_add_to_query');
+    if (isset($field_langcode)) {
+      $this->set_option('field_langcode', $field_language);
+      $this->set_option('field_langcode_add_to_query', $field_language_add_to_query);
+      $changed = TRUE;
+    }
+
     // Mark the view as changed so the user has a chance to save it.
     if ($changed) {
       $this->view->changed = TRUE;
@@ -487,11 +496,12 @@ function option_definition() {
         'default' => FALSE,
         'bool' => TRUE,
       ),
-      'field_language' => array(
+      'field_langcode' => array(
         'default' => '***CURRENT_LANGUAGE***',
       ),
-      'field_language_add_to_query' => array(
-        'default' => 1,
+      'field_langcode_add_to_query' => array(
+        'default' => TRUE,
+        'bool' => TRUE,
       ),
 
       // These types are all plugins that can have individual settings
@@ -1213,11 +1223,10 @@ function options_summary(&$categories, &$options) {
     if (module_exists('language')) {
       $languages = array_merge($languages, language_list());
     }
-    $field_language = array();
-    $options['field_language'] = array(
+    $options['field_langcode'] = array(
       'category' => 'other',
       'title' => t('Field Language'),
-      'value' => $languages[$this->get_option('field_language')],
+      'value' => $languages[$this->get_option('field_langcode')],
       'desc' => t('All fields which support translations will be displayed in the selected language.'),
     );
 
@@ -1607,17 +1616,17 @@ function options_form(&$form, &$form_state) {
           );
           $languages = array_merge($languages, views_language_list());
 
-          $form['field_language'] = array(
+          $form['field_langcode'] = 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->get_option('field_language'),
+            '#default_value' => $this->get_option('field_langcode'),
           );
-          $form['field_language_add_to_query'] = array(
+          $form['field_langcode_add_to_query'] = array(
             '#type' => 'checkbox',
             '#title' => t('When needed, add the field language condition to the query'),
-            '#default_value' => $this->get_option('field_language_add_to_query'),
+            '#default_value' => $this->get_option('field_langcode_add_to_query'),
           );
         }
         else {
@@ -2281,8 +2290,8 @@ function options_submit(&$form, &$form_state) {
         $this->set_option($section, $form_state['values'][$section]);
         break;
       case 'field_language':
-        $this->set_option('field_language', $form_state['values']['field_language']);
-        $this->set_option('field_language_add_to_query', $form_state['values']['field_language_add_to_query']);
+        $this->set_option('field_langcode', $form_state['values']['field_langcode']);
+        $this->set_option('field_langcode_add_to_query', $form_state['values']['field_langcode_add_to_query']);
         break;
       case 'use_ajax':
       case 'hide_attachment_summary':
diff --git a/lib/Views/field/Plugin/views/field/Field.php b/lib/Views/field/Plugin/views/field/Field.php
index cfc406ff78ee03af235acfe3e0346f634aca7f72..b0f2fc42af3de0eb2349229c486051cf3046491a 100644
--- a/lib/Views/field/Plugin/views/field/Field.php
+++ b/lib/Views/field/Plugin/views/field/Field.php
@@ -223,26 +223,26 @@ function query($use_groupby = FALSE) {
       $this->ensure_my_table();
       $this->add_additional_fields($fields);
 
-      // Filter by language, if field translation is enabled.
+      // Filter by langcode, if field translation is enabled.
       $field = $this->field_info;
-      if (field_is_translatable($entity_type, $field) && !empty($this->view->display_handler->options['field_language_add_to_query'])) {
-        $column = $this->table_alias . '.language';
+      if (field_is_translatable($entity_type, $field) && !empty($this->view->display_handler->options['field_langcode_add_to_query'])) {
+        $column = $this->table_alias . '.langcode';
         // By the same reason as field_language the field might be LANGUAGE_NOT_SPECIFIED in reality so allow it as well.
-        // @see this::field_language()
-        $default_language = language_default()->langcode;
-        $language = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
-                                array(drupal_container()->get(LANGUAGE_TYPE_CONTENT)->langcode, $default_language),
-                                $this->view->display_handler->options['field_language']);
+        // @see this::field_langcode()
+        $default_langcode = language_default()->langcode;
+        $langcode = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
+                                array(drupal_container()->get(LANGUAGE_TYPE_CONTENT)->langcode, $default_langcode),
+                                $this->view->display_handler->options['field_langcode']);
         $placeholder = $this->placeholder();
-        $language_fallback_candidates = array($language);
+        $langcode_fallback_candidates = array($langcode);
         if (variable_get('locale_field_language_fallback', TRUE)) {
           require_once DRUPAL_ROOT . '/includes/language.inc';
-          $language_fallback_candidates = array_merge($language_fallback_candidates, language_fallback_get_candidates());
+          $langcode_fallback_candidates = array_merge($langcode_fallback_candidates, language_fallback_get_candidates());
         }
         else {
-          $language_fallback_candidates[] = LANGUAGE_NOT_SPECIFIED;
+          $langcode_fallback_candidates[] = LANGUAGE_NOT_SPECIFIED;
         }
-        $this->query->add_where_expression(0, "$column IN($placeholder) OR $column IS NULL", array($placeholder => $language_fallback_candidates));
+        $this->query->add_where_expression(0, "$column IN($placeholder) OR $column IS NULL", array($placeholder => $langcode_fallback_candidates));
       }
     }
 
@@ -719,7 +719,7 @@ function get_value($values, $field = NULL) {
     $entity = clone $values->_field_data[$this->field_alias]['entity'];
 
     $entity_type = $values->_field_data[$this->field_alias]['entity_type'];
-    $langcode = $this->field_language($entity_type, $entity);
+    $langcode = $this->field_langcode($entity_type, $entity);
     // If we are grouping, copy our group fields into the cloned entity.
     // It's possible this will cause some weirdness, but there's only
     // so much we can hope to do.
@@ -840,7 +840,7 @@ function set_items($values, $row_id) {
       return array();
     }
 
-    $langcode = $this->field_language($entity_type, $entity);
+    $langcode = $this->field_langcode($entity_type, $entity);
     $render_array = field_view_field($entity_type, $entity, $this->definition['field_name'], $display, $langcode);
 
     $items = array();
@@ -906,20 +906,20 @@ function add_self_tokens(&$tokens, $item) {
    * Return the language code of the language the field should be displayed in,
    * according to the settings.
    */
-  function field_language($entity_type, $entity) {
+  function field_langcode($entity_type, $entity) {
     if (field_is_translatable($entity_type, $this->field_info)) {
-      $default_language = language_default()->langcode;
-      $language = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
-                              array(drupal_container()->get(LANGUAGE_TYPE_CONTENT)->langcode, $default_language),
+      $default_langcode = language_default()->langcode;
+      $langcode = str_replace(array('***CURRENT_LANGUAGE***', '***DEFAULT_LANGUAGE***'),
+                              array(drupal_container()->get(LANGUAGE_TYPE_CONTENT)->langcode, $default_langcode),
                               $this->view->display_handler->options['field_language']);
 
       // Give the Field Language API a chance to fallback to a different language
       // (or LANGUAGE_NOT_SPECIFIED), in case the field has no data for the selected language.
       // field_view_field() does this as well, but since the returned language code
       // is used before calling it, the fallback needs to happen explicitly.
-      $language = field_language($entity_type, $entity, $this->field_info['field_name'], $language);
+      $langcode = field_language($entity_type, $entity, $this->field_info['field_name'], $langcode);
 
-      return $language;
+      return $langcode;
     }
     else {
       return LANGUAGE_NOT_SPECIFIED;
diff --git a/lib/Views/locale/Plugin/views/argument/Language.php b/lib/Views/locale/Plugin/views/argument/Language.php
index 56aed784dca7c96c1d18a7fed7e9211e98d975f4..f53041d10196db32fc38f01e6ffca19f0b34adc3 100644
--- a/lib/Views/locale/Plugin/views/argument/Language.php
+++ b/lib/Views/locale/Plugin/views/argument/Language.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Views\locale\Plugin\views\argument\Language.
+ * Definition of Views\language\Plugin\views\argument\Language.
  */
 
-namespace Views\locale\Plugin\views\argument;
+namespace Views\language\Plugin\views\argument;
 
 use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
 use Drupal\Core\Annotation\Plugin;
@@ -16,22 +16,18 @@
  * @ingroup views_argument_handlers
  *
  * @Plugin(
- *   id = "locale_language",
- *   module = "locale"
+ *   id = "language",
+ *   module = "language"
  * )
  */
 class Language extends ArgumentPluginBase {
 
-  function construct() {
-    parent::construct('language');
-  }
-
   /**
    * Override the behavior of summary_name(). Get the user friendly version
    * of the language.
    */
   function summary_name($data) {
-    return $this->locale_language($data->{$this->name_alias});
+    return $this->language($data->{$this->name_alias});
   }
 
   /**
@@ -39,10 +35,10 @@ function summary_name($data) {
    * of the language.
    */
   function title() {
-    return $this->locale_language($this->argument);
+    return $this->language($this->argument);
   }
 
-  function locale_language($langcode) {
+  function language($langcode) {
     $languages = views_language_list();
     return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
   }
diff --git a/lib/Views/locale/Plugin/views/field/Language.php b/lib/Views/locale/Plugin/views/field/Language.php
index d7d0cafb672ef4dd321e50a24bc0125463e22bdb..7b003c11d1c84926058074b4e5a03dfea356bbf6 100644
--- a/lib/Views/locale/Plugin/views/field/Language.php
+++ b/lib/Views/locale/Plugin/views/field/Language.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Views\locale\Plugin\views\field\Language.
+ * Definition of Views\language\Plugin\views\field\Language.
  */
 
-namespace Views\locale\Plugin\views\field;
+namespace Views\language\Plugin\views\field;
 
 use Drupal\views\Plugin\views\field\FieldPluginBase;
 use Drupal\Core\Annotation\Plugin;
@@ -16,8 +16,8 @@
  * @ingroup views_field_handlers
  *
  * @Plugin(
- *   id = "locale_language",
- *   module = "locale"
+ *   id = "language",
+ *   module = "language"
  * )
  */
 class Language extends FieldPluginBase {
@@ -40,9 +40,11 @@ function options_form(&$form, &$form_state) {
   }
 
   function render($values) {
-    $languages = locale_language_list(empty($this->options['native_language']) ? 'name' : 'native');
+    // @todo: Drupal Core dropped native language until config translation is
+    // ready, see http://drupal.org/node/1616594.
     $value = $this->get_value($values);
-    return isset($languages[$value]) ? $languages[$value] : '';
+    $language = language_load($value);
+    return $language ? $language->name : '';
   }
 
 }
diff --git a/lib/Views/locale/Plugin/views/field/NodeLanguage.php b/lib/Views/locale/Plugin/views/field/NodeLanguage.php
index af82aef954218255d91e06be019dbe5112d1c605..76ace42b46aff86927b8d8bcea11669dd87a9756 100644
--- a/lib/Views/locale/Plugin/views/field/NodeLanguage.php
+++ b/lib/Views/locale/Plugin/views/field/NodeLanguage.php
@@ -2,10 +2,10 @@
 
 /**
  * @file
- * Definition of Views\locale\Plugin\views\field\NodeLanguage.
+ * Definition of Views\node\Plugin\views\field\Language.
  */
 
-namespace Views\locale\Plugin\views\field;
+namespace Views\node\Plugin\views\field;
 
 use Views\node\Plugin\views\field\Node;
 use Drupal\Core\Annotation\Plugin;
@@ -17,10 +17,10 @@
  *
  * @Plugin(
  *   id = "node_language",
- *   module = "locale"
+ *   module = "node"
  * )
  */
-class NodeLanguage extends Node {
+class Language extends Node {
 
   function option_definition() {
     $options = parent::option_definition();
@@ -40,9 +40,11 @@ function options_form(&$form, &$form_state) {
   }
 
   function render($values) {
-    $languages = views_language_list(empty($this->options['native_language']) ? 'name' : 'native');
+    // @todo: Drupal Core dropped native language until config translation is
+    // ready, see http://drupal.org/node/1616594.
     $value = $this->get_value($values);
-    $value = isset($languages[$value]) ? $languages[$value] : '';
+    $language = language_load($value);
+    $value = $language ? $language->name : '';
     return $this->render_link($value, $values);
   }
 
diff --git a/lib/Views/locale/Plugin/views/filter/Language.php b/lib/Views/locale/Plugin/views/filter/Language.php
index 384a96783e59a80cc3282f2765e19b3dd7d78108..294690c97017156e204d5f664e083da435e4ef42 100644
--- a/lib/Views/locale/Plugin/views/filter/Language.php
+++ b/lib/Views/locale/Plugin/views/filter/Language.php
@@ -2,13 +2,13 @@
 
 /**
  * @file
- * Definition of Views\locale\Plugin\views\filter\Language.
+ * Definition of Views\language\Plugin\views\filter\Language.
  */
 
-namespace Views\locale\Plugin\views\filter;
+namespace Views\language\Plugin\views\filter;
 
-use Drupal\Core\Annotation\Plugin;
 use Drupal\views\Plugin\views\filter\InOperator;
+use Drupal\Core\Annotation\Plugin;
 
 /**
  * Filter by language.
@@ -16,8 +16,8 @@
  * @ingroup views_filter_handlers
  *
  * @Plugin(
- *   id = "locale_language",
- *   module = "locale"
+ *   id = "language",
+ *   module = "language"
  * )
  */
 class Language extends InOperator {
diff --git a/lib/Views/locale/Plugin/views/filter/NodeLanguage.php b/lib/Views/locale/Plugin/views/filter/NodeLanguage.php
deleted file mode 100644
index 1ee7fb47a85f7bda26446497b966171997ff3553..0000000000000000000000000000000000000000
--- a/lib/Views/locale/Plugin/views/filter/NodeLanguage.php
+++ /dev/null
@@ -1,38 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Views\locale\Plugin\views\filter\NodeLanguage.
- */
-
-namespace Views\locale\Plugin\views\filter;
-
-use Drupal\Core\Annotation\Plugin;
-use Drupal\views\Plugin\views\filter\InOperator;
-
-/**
- * Filter by language.
- *
- * @ingroup views_filter_handlers
- *
- * @Plugin(
- *   id = "node_language",
- *   module = "locale"
- * )
- */
-class NodeLanguage extends InOperator {
-
-  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"),
-        LANGUAGE_NOT_SPECIFIED => t('No language')
-      );
-      $languages = array_merge($languages, views_language_list());
-      $this->value_options = $languages;
-    }
-  }
-
-}
diff --git a/lib/Views/node/Plugin/views/argument/Language.php b/lib/Views/node/Plugin/views/argument/Language.php
deleted file mode 100644
index d03016d6c4ec0613332971b81aa93bee355c8618..0000000000000000000000000000000000000000
--- a/lib/Views/node/Plugin/views/argument/Language.php
+++ /dev/null
@@ -1,48 +0,0 @@
-<?php
-
-/**
- * @file
- * Definition of Views\node\Plugin\views\argument\Language.
- */
-
-namespace Views\node\Plugin\views\argument;
-
-use Drupal\views\Plugin\views\argument\ArgumentPluginBase;
-use Drupal\Core\Annotation\Plugin;
-
-/**
- * Argument handler to accept a language.
- *
- * @Plugin(
- *   id = "node_language",
- *   module = "node"
- * )
- */
-class Language extends ArgumentPluginBase {
-
-  function construct() {
-    parent::construct('language');
-  }
-
-  /**
-   * Override the behavior of summary_name(). Get the user friendly version
-   * of the language.
-   */
-  function summary_name($data) {
-    return $this->node_language($data->{$this->name_alias});
-  }
-
-  /**
-   * Override the behavior of title(). Get the user friendly version of the
-   * node type.
-   */
-  function title() {
-    return $this->node_language($this->argument);
-  }
-
-  function node_language($langcode) {
-    $languages = views_language_list();
-    return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
-  }
-
-}
diff --git a/lib/Views/node/Plugin/views/field/Node.php b/lib/Views/node/Plugin/views/field/Node.php
index 29d57fa345f610cc47d944442d271bf585e006c3..7bea6498de1ca4fbdbaf772814d4a1652acdd8ce 100644
--- a/lib/Views/node/Plugin/views/field/Node.php
+++ b/lib/Views/node/Plugin/views/field/Node.php
@@ -30,7 +30,7 @@ function init(&$view, &$options) {
     if (!empty($this->options['link_to_node'])) {
       $this->additional_fields['nid'] = array('table' => 'node', 'field' => 'nid');
       if (module_exists('translation')) {
-        $this->additional_fields['language'] = array('table' => 'node', 'field' => 'language');
+        $this->additional_fields['langcode'] = array('table' => 'node', 'field' => 'langcode');
       }
     }
   }
@@ -65,11 +65,11 @@ function render_link($data, $values) {
       if ($data !== NULL && $data !== '') {
         $this->options['alter']['make_link'] = TRUE;
         $this->options['alter']['path'] = "node/" . $this->get_value($values, 'nid');
-        if (isset($this->aliases['language'])) {
+        if (isset($this->aliases['langcode'])) {
           $languages = language_list();
-          $language = $this->get_value($values, 'language');
-          if (isset($languages[$language])) {
-            $this->options['alter']['language'] = $languages[$language];
+          $langcode = $this->get_value($values, 'langcode');
+          if (isset($languages[$langcode])) {
+            $this->options['alter']['language'] = $languages[$langcode];
           }
           else {
             unset($this->options['alter']['language']);
diff --git a/lib/Views/node/Plugin/views/field/Revision.php b/lib/Views/node/Plugin/views/field/Revision.php
index b110e766c554d913bfa913cee13b014958a98ce4..0882f480e3ecc4b25840a3b33ebd296412ac2fb0 100644
--- a/lib/Views/node/Plugin/views/field/Revision.php
+++ b/lib/Views/node/Plugin/views/field/Revision.php
@@ -28,7 +28,7 @@ function init(&$view, &$options) {
       $this->additional_fields['vid'] = 'vid';
       $this->additional_fields['nid'] = 'nid';
       if (module_exists('translation')) {
-        $this->additional_fields['language'] = array('table' => 'node', 'field' => 'language');
+        $this->additional_fields['langcode'] = array('table' => 'node', 'field' => 'langcode');
       }
     }
   }
@@ -63,10 +63,10 @@ function render_link($data, $values) {
       $vid = $this->get_value($values, 'vid');
       $this->options['alter']['path'] = "node/" . $nid . '/revisions/' . $vid . '/view';
       if (module_exists('translation')) {
-        $language = $this->get_value($values, 'language');
+        $langcode = $this->get_value($values, 'langcode');
         $languages = language_list();
-        if (isset($languages[$language])) {
-          $this->options['alter']['language'] = $languages[$language];
+        if (isset($languages[$langcode])) {
+          $this->options['alter']['langcode'] = $languages[$langcode];
         }
       }
     }
diff --git a/lib/Views/translation/Plugin/views/field/NodeLinkTranslate.php b/lib/Views/translation/Plugin/views/field/NodeLinkTranslate.php
index a430406a1e9ce3ebbb7e66e357f1108a2413ca68..b915c403ba41805e3a1805d9ebeb90f7d20338d4 100644
--- a/lib/Views/translation/Plugin/views/field/NodeLinkTranslate.php
+++ b/lib/Views/translation/Plugin/views/field/NodeLinkTranslate.php
@@ -26,7 +26,7 @@ function render_link($data, $values) {
     // ensure user has access to edit this node.
     $node = $this->get_value($values);
     $node->status = 1; // unpublished nodes ignore access control
-    if (empty($node->language) || !translation_supported_type($node->type) || !node_access('view', $node) || !user_access('translate content')) {
+    if (empty($node->langcode) || !translation_supported_type($node->type) || !node_access('view', $node) || !user_access('translate content')) {
       return;
     }
 
diff --git a/lib/Views/translation/Plugin/views/field/NodeTranslationLink.php b/lib/Views/translation/Plugin/views/field/NodeTranslationLink.php
index 0d9b0540d375cb9a8ad0a5277a62c6e039177bda..7c553f1cb393c7230015fafdf70c5dd88c9435d9 100644
--- a/lib/Views/translation/Plugin/views/field/NodeTranslationLink.php
+++ b/lib/Views/translation/Plugin/views/field/NodeTranslationLink.php
@@ -27,7 +27,7 @@ function construct() {
     $this->additional_fields['nid'] = 'nid';
     $this->additional_fields['tnid'] = 'tnid';
     $this->additional_fields['title'] = 'title';
-    $this->additional_fields['language'] = 'language';
+    $this->additional_fields['langcode'] = 'langcode';
   }
 
   function query() {
@@ -45,7 +45,7 @@ function render_link($data, $values) {
 
     $tnid = $this->get_value($values, 'tnid');
     // Only load translations if the node isn't in the current language.
-    if ($this->get_value($values, 'language') != $language_interface->langcode) {
+    if ($this->get_value($values, 'langcode') != $language_interface->langcode) {
       $translations = translation_node_get_translations($tnid);
       if (isset($translations[$language_interface->langcode])) {
         $values->{$this->aliases['nid']} = $translations[$language_interface->langcode]->nid;
diff --git a/lib/Views/translation/Plugin/views/relationship/Translation.php b/lib/Views/translation/Plugin/views/relationship/Translation.php
index 49311628e9b40c4ed50e23da60d0ce445065379e..1cb49697a4e9f614d52265127cb9b325dfbb31d3 100644
--- a/lib/Views/translation/Plugin/views/relationship/Translation.php
+++ b/lib/Views/translation/Plugin/views/relationship/Translation.php
@@ -41,7 +41,7 @@ function options_form(&$form, &$form_state) {
       'current' => t('Current language'),
       'default' => t('Default language'),
     );
-    $options = array_merge($options, locale_language_list());
+    $options = array_merge($options, views_language_list());
     $form['language'] = array(
       '#type' => 'select',
       '#options' => $options,
@@ -75,20 +75,20 @@ function query() {
       switch ($this->options['language']) {
         case 'current':
           $def['extra'][] = array(
-            'field' => 'language',
+            'field' => 'langcode',
             'value' => '***CURRENT_LANGUAGE***',
           );
           break;
         case 'default':
           $def['extra'][] = array(
-            'field' => 'language',
+            'field' => 'langcode',
             'value' => '***DEFAULT_LANGUAGE***',
           );
           break;
         // Other values will be the language codes.
         default:
           $def['extra'][] = array(
-            'field' => 'language',
+            'field' => 'langcode',
             'value' => $this->options['language'],
           );
           break;
diff --git a/modules/comment.views.inc b/modules/comment.views.inc
index 1b5990c391f24c199e7c8f4b8fd894ad5127b005..e9502985048128b0cd2e4082b73e7c64e2657e11 100644
--- a/modules/comment.views.inc
+++ b/modules/comment.views.inc
@@ -165,9 +165,10 @@ function comment_views_data() {
   );
 
 
-  // Language field
-  if (module_exists('locale')) {
-    $data['comment']['language'] = array(
+  // Langcode field
+  if (module_exists('language')) {
+    $data['comment']['language']['moved to'] = array('comment', 'langcode');
+    $data['comment']['langcode'] = array(
       'title' => t('Language'),
       'help' => t('The language the comment is in.'),
       'field' => array(
diff --git a/modules/field.views.inc b/modules/field.views.inc
index 6c9de818304790dff704cfeae5a474d6dc436430..1f2ed12700a7ec5199ed9d5215cb89590d6d11d2 100644
--- a/modules/field.views.inc
+++ b/modules/field.views.inc
@@ -165,7 +165,7 @@ function field_views_field_default_views_data($field) {
     $tables[FIELD_LOAD_REVISION] = $revision_table;
   }
 
-  $add_fields = array('delta', 'language', 'bundle');
+  $add_fields = array('delta', 'langcode', 'bundle');
   foreach ($field['columns'] as $column_name => $attributes) {
     $add_fields[] = _field_sql_storage_columnname($field['field_name'], $column_name);
   }
diff --git a/modules/language.views.inc b/modules/language.views.inc
index 17801913f2fe5609499fb40de697a0657c81ec9b..7521d52c6ff4c895c794f11f94bb4145e87a767e 100644
--- a/modules/language.views.inc
+++ b/modules/language.views.inc
@@ -19,10 +19,6 @@ function language_views_data() {
     'help' => t('A language used in drupal.'),
   );
 
-  // name
-  // direction
-  // weight
-
   $data['language']['langcode'] = array(
     'title' => t('Language code'),
     'help' => t("Language code, e.g. 'de' or 'en-US'."),
diff --git a/modules/locale.views.inc b/modules/locale.views.inc
index cdbb32bc9e47160ae161d1cebd6316cf20531712..a18c80ad5a89352c2deae275f1d25ebbea88d851 100644
--- a/modules/locale.views.inc
+++ b/modules/locale.views.inc
@@ -195,27 +195,3 @@ function locale_views_data() {
 
   return $data;
 }
-
-/**
- * Implements hook_views_data_alter().
- */
-function locale_views_data_alter(&$data) {
-  // Language field
-  $data['node']['language'] = array(
-    'title' => t('Language'),
-    'help' => t('The language the content is in.'),
-    'field' => array(
-      'id' => 'node_language',
-      'click sortable' => TRUE,
-    ),
-    'filter' => array(
-      'id' => 'node_language',
-    ),
-    'argument' => array(
-      'id' => 'node_language',
-    ),
-    'sort' => array(
-      'id' => 'standard',
-    ),
-  );
-}
diff --git a/modules/node.views.inc b/modules/node.views.inc
index cdabd847a9770f06b68be58ba5aadb2fa716d2e2..e2a6dab41469dff2e0b4e7b76dcf6486347bed80 100644
--- a/modules/node.views.inc
+++ b/modules/node.views.inc
@@ -221,6 +221,28 @@ function node_views_data() {
     ),
   );
 
+  // Language field
+  if (module_exists('language')) {
+    $data['node']['language']['moved to'] = array('node', 'langcode');
+    $data['node']['langcode'] = array(
+      'title' => t('Language'),
+      'help' => t('The language the content is in.'),
+      'field' => array(
+        'id' => 'node_language',
+        'click sortable' => TRUE,
+      ),
+      'filter' => array(
+        'id' => 'language',
+      ),
+      'argument' => array(
+        'id' => 'language',
+      ),
+      'sort' => array(
+        'id' => 'standard',
+      ),
+    );
+  }
+
   // Define some fields based upon views_handler_field_entity in the entity
   // table so they can be re-used with other query backends.
   // @see views_handler_field_entity
diff --git a/modules/user.views.inc b/modules/user.views.inc
index 8b925d6bc8768dfcdbedf27458c84a4dda6b4240..4f399c0137b3417a81a5276691ea339cb21e4668 100644
--- a/modules/user.views.inc
+++ b/modules/user.views.inc
@@ -151,7 +151,8 @@ function user_views_data() {
   );
 
   // language
-  $data['users']['language'] = array(
+  $data['users']['language']['moved to'] = array('users', 'langcode');
+  $data['users']['langcode'] = array(
     'title' => t('Language'), // The item it appears as on the UI,
     'help' => t('Language of the user'),
     'field' => array(
diff --git a/views.module b/views.module
index c9d96c98451fafea4e7721b4206dcba4cea0e5fc..b840c025affea1769f3bd073abb45661aec44d00 100644
--- a/views.module
+++ b/views.module
@@ -36,6 +36,7 @@ function views_core_modules() {
     'field',
     'filter',
     'file',
+    'language',
     'locale',
     'node',
     'search',
@@ -964,18 +965,18 @@ function views_add_contextual_links(&$render_element, $location, $view, $display
  *   Boolean to return all languages or only enabled ones
  *
  * @see locale_language_list()
+ * @todo Figure out whether we need this with language module.
  */
 function views_language_list($field = 'name', $all = FALSE) {
   if ($all) {
     $languages = language_list();
   }
   else {
-    $languages = language_list('enabled');
-    $languages = $languages[1];
+    $languages = language_list();
   }
   $list = array();
   foreach ($languages as $language) {
-    $list[$language->language] = ($field == 'name') ? t($language->name) : $language->$field;
+    $list[$language->langcode] = ($field == 'name') ? t($language->name) : $language->$field;
   }
   return $list;
 }
diff --git a/views.tokens.inc b/views.tokens.inc
index cc45b5cba903243a3c7ec00d9adcd41bb47c4cb0..efc2f419b17591db244db134145f4c34a0ca36df 100644
--- a/views.tokens.inc
+++ b/views.tokens.inc
@@ -48,7 +48,7 @@ function views_tokens($type, $tokens, array $data = array(), array $options = ar
     $url_options['language'] = $options['language'];
   }
   $sanitize = !empty($options['sanitize']);
-  $langcode = isset($options['language']) ? $options['language']->language : NULL;
+  $langcode = isset($options['language']) ? $options['language']->langcode : NULL;
 
   $replacements = array();