From 68dd2d5a0d1436a9000598086c45689ae7a36bd4 Mon Sep 17 00:00:00 2001
From: OnkelTem <OnkelTem@239962.no-reply.drupal.org>
Date: Sat, 11 Aug 2012 15:06:26 +0400
Subject: [PATCH] Issue #1723810 by OnkeTem: Reworking langauge handlers for
 locale and node.

---
 .../views_handler_argument_locale_language.inc     |    3 +--
 .../locale/views_handler_field_locale_language.inc |    3 +--
 .../locale/views_handler_field_node_language.inc   |    4 +--
 .../views_handler_filter_locale_language.inc       |    2 +-
 .../locale/views_handler_filter_node_language.inc  |    2 +-
 .../node/views_handler_argument_node_language.inc  |    3 +--
 views.module                                       |   26 ++++++++++++++++++++
 7 files changed, 32 insertions(+), 11 deletions(-)

diff --git a/modules/locale/views_handler_argument_locale_language.inc b/modules/locale/views_handler_argument_locale_language.inc
index 316d4b1..c2101fd 100644
--- a/modules/locale/views_handler_argument_locale_language.inc
+++ b/modules/locale/views_handler_argument_locale_language.inc
@@ -32,7 +32,6 @@ class views_handler_argument_locale_language extends views_handler_argument {
   }
 
   function locale_language($langcode) {
-    $languages = views_language_list();
-    return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
+    return views_language_name(views_language_list(), $langcode);
   }
 }
diff --git a/modules/locale/views_handler_field_locale_language.inc b/modules/locale/views_handler_field_locale_language.inc
index 8038e2b..dd1319e 100644
--- a/modules/locale/views_handler_field_locale_language.inc
+++ b/modules/locale/views_handler_field_locale_language.inc
@@ -30,7 +30,6 @@ class views_handler_field_locale_language extends views_handler_field {
 
   function render($values) {
     $languages = locale_language_list(empty($this->options['native_language']) ? 'name' : 'native');
-    $value = $this->get_value($values);
-    return isset($languages[$value]) ? $languages[$value] : '';
+    return views_language_name($languages, $this->get_value($values));
   }
 }
diff --git a/modules/locale/views_handler_field_node_language.inc b/modules/locale/views_handler_field_node_language.inc
index 467605b..a9a91f1 100644
--- a/modules/locale/views_handler_field_node_language.inc
+++ b/modules/locale/views_handler_field_node_language.inc
@@ -30,8 +30,6 @@ class views_handler_field_node_language extends views_handler_field_node {
 
   function render($values) {
     $languages = views_language_list(empty($this->options['native_language']) ? 'name' : 'native');
-    $value = $this->get_value($values);
-    $value = isset($languages[$value]) ? $languages[$value] : '';
-    return $this->render_link($value, $values);
+    return $this->render_link(views_language_name($languages, $this->get_value($values)), $values);
   }
 }
diff --git a/modules/locale/views_handler_filter_locale_language.inc b/modules/locale/views_handler_filter_locale_language.inc
index eee12a6..45c550e 100644
--- a/modules/locale/views_handler_filter_locale_language.inc
+++ b/modules/locale/views_handler_filter_locale_language.inc
@@ -17,7 +17,7 @@ class views_handler_filter_locale_language extends views_handler_filter_in_opera
       $languages = array(
         '***CURRENT_LANGUAGE***' => t("Current user's language"),
         '***DEFAULT_LANGUAGE***' => t("Default site language"),
-        LANGUAGE_NONE => t('No language')
+        LANGUAGE_NONE => t('Language neutral')
       );
       $languages = array_merge($languages, views_language_list());
       $this->value_options = $languages;
diff --git a/modules/locale/views_handler_filter_node_language.inc b/modules/locale/views_handler_filter_node_language.inc
index 7592577..c865f33 100644
--- a/modules/locale/views_handler_filter_node_language.inc
+++ b/modules/locale/views_handler_filter_node_language.inc
@@ -17,7 +17,7 @@ class views_handler_filter_node_language extends views_handler_filter_in_operato
       $languages = array(
         '***CURRENT_LANGUAGE***' => t("Current user's language"),
         '***DEFAULT_LANGUAGE***' => t("Default site language"),
-        LANGUAGE_NONE => t('No language')
+        LANGUAGE_NONE => t('Language neutral')
       );
       $languages = array_merge($languages, views_language_list());
       $this->value_options = $languages;
diff --git a/modules/node/views_handler_argument_node_language.inc b/modules/node/views_handler_argument_node_language.inc
index 170388a..64950e8 100644
--- a/modules/node/views_handler_argument_node_language.inc
+++ b/modules/node/views_handler_argument_node_language.inc
@@ -30,7 +30,6 @@ class views_handler_argument_node_language extends views_handler_argument {
   }
 
   function node_language($langcode) {
-    $languages = views_language_list();
-    return isset($languages[$langcode]) ? $languages[$langcode] : t('Unknown language');
+    return views_language_name(views_language_list(), $langcode);
   }
 }
diff --git a/views.module b/views.module
index fc427f4..1a9960a 100644
--- a/views.module
+++ b/views.module
@@ -887,6 +887,32 @@ function views_language_list($field = 'name', $all = FALSE) {
 }
 
 /**
+ * Returns langauge name.
+ *
+ * This is a helper function.
+ *
+ * @param $languages
+ *   List of languages
+ * @param $langcode
+ *   Langauge code
+ *
+ */
+function views_language_name($langauges, $langcode) {
+  if (empty($langcode)) {
+    return "";
+  }
+  elseif ($langcode == LANGUAGE_NONE) {
+    return t('Language neutral');
+  }
+  elseif (isset($langauges[$langcode])) {
+    return t($langauges[$langcode]);
+  }
+  else {
+    return t('Undefined language (@langcode)', array('@langcode' => $langcode));
+  }
+}
+
+/**
  * Implements hook_flush_caches().
  */
 function views_flush_caches() {
-- 
1.7.9.5

