Index: l10n_community/extractor.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/extractor.inc,v
retrieving revision 1.1.2.13.2.6
diff -u -p -r1.1.2.13.2.6 extractor.inc
--- l10n_community/extractor.inc	19 Sep 2009 09:19:17 -0000	1.1.2.13.2.6
+++ l10n_community/extractor.inc	16 Oct 2009 06:48:55 -0000
@@ -197,7 +197,8 @@ function l10n_community_save_string($val
     // to handle later, and we don't need the individual string parts.
     if (!$sid = db_result(db_query("SELECT sid FROM {l10n_community_string} WHERE value = BINARY '%s' AND context = '%s'", $value, $context))) {
       // String does not exist.
-      db_query("INSERT INTO {l10n_community_string} (value, context) VALUES ('%s', '%s')", $value, $context);
+      $is_plural = (strpos($value, "\0") !== FALSE) ? 1 : 0;
+      db_query("INSERT INTO {l10n_community_string} (value, context, is_plural) VALUES ('%s', '%s', %d)", $value, $context, $is_plural);
       $sid = db_result(db_query("SELECT sid FROM {l10n_community_string} WHERE value = BINARY '%s' AND context = '%s'", $value, $context));
     }
     if (!db_result(db_query("SELECT fid FROM {l10n_community_line} WHERE fid = %d AND sid = %d AND lineno = %d AND type = %d", $fid, $sid, $line, $string_type))) {
Index: l10n_community/l10n_community.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/l10n_community.install,v
retrieving revision 1.1.2.11.2.12
diff -u -p -r1.1.2.11.2.12 l10n_community.install
--- l10n_community/l10n_community.install	18 Sep 2009 18:03:19 -0000	1.1.2.11.2.12
+++ l10n_community/l10n_community.install	16 Oct 2009 06:48:55 -0000
@@ -589,3 +589,25 @@ function l10n_community_update_6007() {
   }
   return $ret;
 }
+
+/**
+ * Add a boolean field that shows if a string has plural.
+ */
+function l10n_community_update_6008() {
+  $ret = array();
+  
+  // Add the field and its corresponding index.
+  db_add_field($ret, 'l10n_community_string', 'is_plural', array(
+    'type'      =>  'int',
+    'size'      =>  'tiny',
+    'unsigned'  =>  TRUE,
+    'not null'  =>  TRUE,
+    'default'   =>  0,
+  ));
+  db_add_index($ret, 'l10n_community_string', 'is_plural', array('is_plural'));
+  
+  // Update existing strings.
+  $ret[] = update_sql("UPDATE {l10n_community_string} SET is_plural = IF(LOCATE(CHAR(0), value) > 0, 1, 0)");
+
+  return $ret;
+}
\ No newline at end of file
Index: l10n_community/l10n_community.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/l10n_community.module,v
retrieving revision 1.1.2.23.2.57
diff -u -p -r1.1.2.23.2.57 l10n_community.module
--- l10n_community/l10n_community.module	7 Oct 2009 18:21:36 -0000	1.1.2.23.2.57
+++ l10n_community/l10n_community.module	16 Oct 2009 06:48:55 -0000
@@ -50,6 +50,16 @@ define('L10N_STATUS_NO_SUGGESTION', 4);
  */
 define('L10N_STATUS_HAS_SUGGESTION', 8);
 
+/**
+ * Has no plural.
+ */
+define('L10N_STATUS_NO_PLURAL', 16);
+
+/**
+ * Has plural.
+ */
+define('L10N_STATUS_HAS_PLURAL', 32);
+
 // = Core hooks ================================================================
 
 /**
Index: l10n_community/translate.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/translate.inc,v
retrieving revision 1.1.2.7.2.21
diff -u -p -r1.1.2.7.2.21 translate.inc
--- l10n_community/translate.inc	15 Oct 2009 08:46:40 -0000	1.1.2.7.2.21
+++ l10n_community/translate.inc	16 Oct 2009 06:48:55 -0000
@@ -74,6 +74,12 @@ function l10n_community_filter_form(&$fo
     L10N_STATUS_NO_SUGGESTION  => t('Has no suggestion'),
     L10N_STATUS_HAS_SUGGESTION => t('Has suggestion'),
   );
+
+  $plural_options = array(
+    L10N_STATUS_ALL            => t('<Any>'),
+    L10N_STATUS_NO_PLURAL      => t('Has no plural'),
+    L10N_STATUS_HAS_PLURAL     => t('Has plural'),
+  );
   
   $form['project'] = array(
     '#title' => t('Project'),
@@ -136,6 +142,11 @@ function l10n_community_filter_form(&$fo
       '#default_value' => $filters['status'] & (L10N_STATUS_HAS_SUGGESTION | L10N_STATUS_NO_SUGGESTION),
     );
   }
+  $form['status']['plural'] = array(
+    '#type' => 'select',
+    '#options' => $plural_options,
+    '#default_value' => $filters['status'] & (L10N_STATUS_HAS_PLURAL | L10N_STATUS_NO_PLURAL),
+  );
 
   $form['author']= array(
     '#type' => 'textfield',
@@ -527,7 +538,7 @@ function theme_l10n_community_filter_for
   $row = array();
   $labels = array();
   // Only display these elements in distinct table cells
-  $elements = array('project', 'release', 'context', 'status', 'author', 'search', 'limit');
+  $elements = array('project', 'release', 'context', 'status', 'author', 'search', 'plural', 'limit');
   foreach ($form as $id => &$element) {
     if (in_array($id, $elements)) {
       $labels[] = $element['#title'];
@@ -693,7 +704,13 @@ function l10n_community_get_strings($lan
   elseif ($filters['status'] & L10N_STATUS_NO_SUGGESTION) {
     $where[] = "((t.has_suggestion IS NULL) OR (t.has_suggestion = 0))";
   }
-
+  if ($filters['status'] & L10N_STATUS_HAS_PLURAL) {
+    $where[] = "s.is_plural = 1";
+  }
+  elseif ($filters['status'] & L10N_STATUS_NO_PLURAL) {
+    $where[] = "s.is_plural = 0";
+  }
+  
   // Build the queries
   $sql_args = array_merge($join_args, $where_args);
   $sql_where = implode(' ', $join) . (count($where) ? (' WHERE '. implode(' AND ', $where)) : '');
@@ -728,10 +745,10 @@ function l10n_community_build_filter_val
   // Convert array representation of flags to one integer.
   if (isset($params['status']) && is_array($params['status'])) {
     if (isset($params['status']['suggestion'])) {
-      $params['status'] = ((int) $params['status']['translation']) | ((int) $params['status']['suggestion']);
+      $params['status'] = ((int) $params['status']['translation']) | ((int) $params['status']['suggestion']) | ((int) $params['status']['plural']);
     }
     else {
-      $params['status'] = (int) $params['status']['translation'];
+      $params['status'] = (int) $params['status']['translation'] | ((int) $params['status']['plural']);
     }
   }
 
