Index: modules/node.views.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/views/modules/node.views.inc,v
retrieving revision 1.28
diff -u -r1.28 node.views.inc
--- modules/node.views.inc	21 Mar 2008 23:20:06 -0000	1.28
+++ modules/node.views.inc	24 Mar 2008 20:15:40 -0000
@@ -189,6 +189,24 @@
     ),
   );
 
+  // Language field if translation module enabled
+  if (module_exists('translation')) {
+    $data['node']['language'] = array(
+      'title' => t('Language'),
+      'help' => t('Content language'),
+      'field' => array(
+        'handler' => 'views_handler_field_node_language',
+        'click sortable' => TRUE,
+      ),
+      'filter' => array(
+        'handler' => 'views_handler_filter_node_language',
+      ),
+      'argument' => array(
+        'handler' => 'views_handler_argument_node_language',
+      ),      
+    );
+  }
+
   // Bogus fields for aliasing purposes.
 
   $data['node']['created_year_month'] = array(
@@ -487,6 +505,67 @@
   }
 }
 
+/**
+ I Filter by language
+ */
+class views_handler_filter_node_language extends views_handler_filter_in_operator {
+  function construct() {
+    parent::construct();
+    $this->value_title = t('Node language');
+    $this->value_options = locale_language_list();
+  }
+
+  function options(&$options) {
+    parent::options($options);
+    // Set the default value to the default language
+    $options['value'] = language_default('language');
+  }
+}
+
+/**
+ * Field handler to translate a language into its readable form.
+ *
+ * @ingroup views_field_handlers
+ */
+class views_handler_field_node_language extends views_handler_field_node {
+  function render($values) {
+    $languages = locale_language_list();
+    $value = $languages[$values->{$this->field_alias}];
+    return $this->render_link($value, $values);
+  }
+}
+
+/**
+ * Argument handler to accept a language.
+ *
+ * @ingroup views_argument_handlers
+ */
+class views_handler_argument_node_language extends views_handler_argument {
+  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 = locale_language_list();
+    return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
+  }
+}
 
 /**
  * Implementation of hook_views_plugins
