diff --git a/modules/locale.views.inc b/modules/locale.views.inc
index 3bff7db..fe6d050 100644
--- a/modules/locale.views.inc
+++ b/modules/locale.views.inc
@@ -218,4 +218,11 @@ function locale_views_data_alter(&$data) {
       'handler' => 'views_handler_sort',
     ),
   );
+  $data['node']['specific_language'] = array(
+    'title' => t('Specific language'),
+    'help' => t('Sort by a specific language that the content is in.'),
+    'sort' => array(
+      'handler' => 'views_handler_sort_node_language',
+    ),
+  );
 }
diff --git a/modules/locale/views_handler_sort_node_language.inc b/modules/locale/views_handler_sort_node_language.inc
new file mode 100644
index 0000000..ab7fbb1
--- /dev/null
+++ b/modules/locale/views_handler_sort_node_language.inc
@@ -0,0 +1,109 @@
+<?php
+
+/**
+ * @file
+ * @todo.
+ */
+
+/**
+ * @defgroup views_sort_handlers Views sort handlers
+ * @{
+ * Handlers to tell Views how to sort queries.
+ */
+
+/**
+ * Sort handler that allows sorting on a specific language.
+ *
+ * @ingroup views_sort_handlers
+ */
+class views_handler_sort_node_language extends views_handler_sort {
+
+  function can_expose() {
+    return FALSE;
+  }
+
+  /**
+   * Called to add the sort to a query.
+   */
+  function query() {
+    if (isset($this->options['language'])) {
+      $langcode = $this->get_system_langcode($this->options['language']);
+      // Validate the langcode.
+      if (preg_match('/^[a-z0-9\-]+$/i', $langcode)) {
+        $this->ensure_my_table();
+        // See https://stackoverflow.com/questions/14104055/ordering-by-specific-field-value-first
+        $formula = "{$this->table_alias}_language = '{$langcode}'";
+        $this->query->add_orderby($this->table_alias, NULL, $this->options['order'], $formula);
+      }
+    }
+  }
+
+  /**
+   * Converts a views language code into a Drupal language code.
+   */
+  function get_system_langcode($langcode) {
+    global $language_content;
+    $default_language = language_default('language');
+    $system_langcode = str_replace(array(
+      '***CURRENT_LANGUAGE***',
+      '***DEFAULT_LANGUAGE***',
+      ),
+      array(
+        $language_content->language,
+        $default_language,
+      ),
+      $langcode);
+    return $system_langcode;
+  }
+
+  function option_definition() {
+    $options = parent::option_definition();
+    $options['language'] = array('default' => '***CURRENT_LANGUAGE***');
+    return $options;
+  }
+
+  function admin_summary() {
+    $summary = parent::admin_summary();
+    if ($this->options['language']) {
+      $language_options = $this->get_language_options();
+      $summary = t('@order, @language', array(
+        '@order' => $summary,
+        '@language' => $language_options[$this->options['language']],
+      ));
+    }
+    return $summary;
+  }
+
+  /**
+   * Returns languages to sort by.
+   *
+   * @return array
+   *   All the languages.
+   */
+  function get_language_options() {
+    $languages = array(
+      '***CURRENT_LANGUAGE***' => t("Current user's language"),
+      '***DEFAULT_LANGUAGE***' => t("Default site language"),
+      LANGUAGE_NONE => t('No language')
+    );
+    $languages = array_merge($languages, views_language_list());
+    return $languages;
+  }
+
+  /**
+   * Shortcut to display the value form.
+   */
+  function show_sort_form(&$form, &$form_state) {
+    parent::show_sort_form($form, $form_state);
+
+    $form['language'] = array(
+      '#type' => 'radios',
+      '#title' => t("Specific language"),
+      '#description' => t("Choose which specific language to sort by. Not to be confused with the 'Language' sort handler, which sorts by language."),
+      '#options' => $this->get_language_options(),
+      '#default_value' => $this->options['language'],
+    );
+  }
+
+}
+
diff --git a/views.info b/views.info
index e03d886..3283598 100644
--- a/views.info
+++ b/views.info
@@ -118,6 +118,7 @@ files[] = modules/locale/views_handler_field_locale_link_edit.inc
 files[] = modules/locale/views_handler_filter_locale_group.inc
 files[] = modules/locale/views_handler_filter_locale_language.inc
 files[] = modules/locale/views_handler_filter_locale_version.inc
+files[] = modules/locale/views_handler_sort_node_language.inc
 files[] = modules/node/views_handler_argument_dates_various.inc
 files[] = modules/node/views_handler_argument_node_language.inc
 files[] = modules/node/views_handler_argument_node_nid.inc
