Index: connectors/l10n_drupal/l10n_drupal.drupalorg.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/connectors/l10n_drupal/Attic/l10n_drupal.drupalorg.inc,v
retrieving revision 1.1.2.3.2.2
diff -u -p -r1.1.2.3.2.2 l10n_drupal.drupalorg.inc
--- connectors/l10n_drupal/l10n_drupal.drupalorg.inc	16 Feb 2011 12:30:14 -0000	1.1.2.3.2.2
+++ connectors/l10n_drupal/l10n_drupal.drupalorg.inc	16 Feb 2011 14:45:42 -0000
@@ -367,21 +367,23 @@ function l10n_drupal_drupalorg_parse_pac
         $files = _potx_explore_dir($temp_path);
         l10n_drupal_save_file(array($release->pid, $release->rid));
         $version = l10n_drupal_detect_major_version($package_file);
+        l10n_drupal_added_string_counter(NULL, TRUE);
         foreach ($files as $name) {
           _potx_process_file($name, strlen($temp_path) + 1, 'l10n_drupal_save_string', 'l10n_drupal_save_file', $version);
         }
+        $sid_count = l10n_drupal_added_string_counter();
 
         // Delete directory now that parsing is done.
         l10n_drupal_drupalorg_exec('rm -rf '. escapeshellarg($temp_path));
         unlink($package_file);
 
         // Record changes of the scanned project in the database.
-        $message_arguments = array('@filename' => basename($package_file), '@num' => count($files));
-        $message_t = t('@filename with @num files scanned.', $message_arguments);
-        $message = '@filename with @num files scanned.';
+        $message_arguments = array('@filename' => basename($package_file), '@files' => count($files), '@sids' => $sid_count);
+        $message_t = t('@filename (@files files, @sids strings) scanned.', $message_arguments);
+        $message = '@filename (@files files, @sids strings) scanned.';
 
         // Parsed this releases files.
-        db_query("UPDATE {l10n_server_release} SET last_parsed = %d WHERE rid = %d", time(), $release->rid);
+        db_query("UPDATE {l10n_server_release} SET sid_count = %d, last_parsed = %d WHERE rid = %d", $sid_count, time(), $release->rid);
 
         // Update error list for this release. Although the errors are related to
         // files, we are not interested in the fine details, the file names are in
Index: connectors/l10n_drupal/l10n_drupal.files.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/connectors/l10n_drupal/Attic/l10n_drupal.files.inc,v
retrieving revision 1.1.2.1.2.1
diff -u -p -r1.1.2.1.2.1 l10n_drupal.files.inc
--- connectors/l10n_drupal/l10n_drupal.files.inc	16 Feb 2011 12:30:14 -0000	1.1.2.1.2.1
+++ connectors/l10n_drupal/l10n_drupal.files.inc	16 Feb 2011 14:45:43 -0000
@@ -207,18 +207,20 @@ function l10n_drupal_parse_package($pack
       $files = _potx_explore_dir($temp_path);
       l10n_drupal_save_file(array($release->pid, $release->rid));
       $version = l10n_drupal_detect_major_version($package_file);
+      l10n_drupal_added_string_counter(NULL, TRUE);
       foreach ($files as $name) {
         _potx_process_file($name, strlen($temp_path) + 1, 'l10n_drupal_save_string', 'l10n_drupal_save_file', $version);
       }
+      $sid_count = l10n_drupal_added_string_counter();
 
       // Delete the extracted files.
       l10n_drupal_rmdir_recursive($temp_path);
 
       // Record changes of the scanned project in the database.
-      $message = t('@filename with @num files scanned.', array('@filename' => basename($package_file), '@num' => count($files)));
+      $message = t('@filename (@files files, @sids strings) scanned.', array('@filename' => basename($package_file), '@files' => count($files), '@sids' => $sid_count));
 
       // Parsed this releases files.
-      db_query("UPDATE {l10n_server_release} SET last_parsed = %d WHERE rid = %d", time(), $release->rid);
+      db_query("UPDATE {l10n_server_release} SET sid_count = %d, last_parsed = %d WHERE rid = %d", $sid_count, time(), $release->rid);
 
       // Update error list for this release. Although the errors are related to
       // files, we are not interested in the fine details, the file names are in
@@ -358,6 +360,24 @@ function l10n_drupal_save_string($value 
       // Location does not exist with this string.
       db_query("INSERT INTO {l10n_server_line} (pid, rid, fid, sid, lineno, type) VALUES (%d, %d, %d, %d, %d, %d)", $pid, $rid, $fid, $sid, $line, $string_type);
     }
+    l10n_drupal_added_string_counter($sid);
+  }
+}
+
+/**
+ * A counter we use for strings added. Each source strings is counted once.
+ */
+function l10n_drupal_added_string_counter($sid = NULL, $reset = FALSE) {
+  static $sids = array();
+
+  if ($reset) {
+    $sids = array();
+  }
+  elseif (empty($sid)) {
+    return count($sids);
+  }
+  else {
+    $sids[$sid] = 1;
   }
 }
 
Index: connectors/l10n_gettext/l10n_gettext.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/connectors/l10n_gettext/Attic/l10n_gettext.module,v
retrieving revision 1.1.2.1.2.1
diff -u -p -r1.1.2.1.2.1 l10n_gettext.module
--- connectors/l10n_gettext/l10n_gettext.module	16 Feb 2011 12:30:14 -0000	1.1.2.1.2.1
+++ connectors/l10n_gettext/l10n_gettext.module	16 Feb 2011 14:45:43 -0000
@@ -40,7 +40,9 @@ function l10n_gettext_upload_handler($fo
 
     // Do the actual parsing on the local file.
     if (l10n_server_parse_po($file, 'l10n_gettext_store_string', array($project->pid, $release->rid, $fid))) {
-      drupal_set_message(format_plural(l10n_gettext_store_string(), 'The source file was successfully imported. One source string was added.', 'The source file was successfully imported. @count source strings were added.'));
+      $sid_count = l10n_gettext_store_string();
+      drupal_set_message(format_plural($sid_count, 'The source file was successfully imported. One source string was added.', 'The source file was successfully imported. @count source strings were added.'));
+      db_query("UPDATE {l10n_server_release} SET sid_count = %d WHERE rid = %d", $sid_count, $release->rid);
     }
 
     // Update this only once the parsing process succeeds.
@@ -55,7 +57,7 @@ function l10n_gettext_upload_handler($fo
  * Store one source string as being available.
  */
 function l10n_gettext_store_string($value = NULL, $pid = NULL, $rid = NULL, $fid = NULL) {
-  static $added = 0;
+  static $sids = array();
 
   if (!empty($value['msgid'])) {
     // Initialize empty context if not speficied.
@@ -75,9 +77,9 @@ function l10n_gettext_store_string($valu
       // Location does not exist with this string.
       db_query("INSERT INTO {l10n_server_line} (pid, rid, fid, sid, lineno, type) VALUES (%d, %d, %d, %d, %d, %d)", $pid, $rid, $fid, $sid, 0, 2 /*POTX_STRING_RUNTIME*/);
     }
-    $added++;
+    $sids[$sid] = 1;
   }
   else {
-    return $added;
+    return count($sids);
   }
 }
Index: l10n_community/export.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/Attic/export.inc,v
retrieving revision 1.1.2.15.2.24.2.15.2.1
diff -u -p -r1.1.2.15.2.24.2.15.2.1 export.inc
--- l10n_community/export.inc	22 Dec 2010 19:12:54 -0000	1.1.2.15.2.24.2.15.2.1
+++ l10n_community/export.inc	16 Feb 2011 14:45:43 -0000
@@ -228,7 +228,7 @@ function l10n_community_export_form_subm
 
   if (isset($export_result) && is_array($export_result)) {
     // If we got an array back from the export build, tear that into pieces.
-    list($mime_type, $file_name, $serve_name) = $export_result;
+    list($mime_type, $file_name, $serve_name, $sid_count) = $export_result;
     // Return compressed archive to user.
     header('Content-Disposition: attachment; filename='. $serve_name);
     header('Content-Type: '. $mime_type);
@@ -481,7 +481,7 @@ function l10n_community_export($uri, $re
   $sql .= ' ORDER BY s.sid ASC'. ($template ? '' : ', t.is_suggestion ASC, t.time_entered DESC');
 
   $result = db_query($sql, $sql_args);
-  $previous_sid = 0;
+  $previous_sid = $sid_count = 0;
   $export_string = $string_files = array();
 
   while ($string = db_fetch_object($result)) {
@@ -502,6 +502,7 @@ function l10n_community_export($uri, $re
         'type'           => $string->type,
         'has_suggestion' => $string->has_suggestion,
       );
+      $sid_count++;
     }
     else {
       // Existing string but with new location information.
@@ -521,6 +522,7 @@ function l10n_community_export($uri, $re
   if ($previous_sid > 0) {
     // Store the last string.
     _l10n_community_export_string_files($string_files, $uri, $language, $template, $version, $export_string, $compact, $suggestions);
+    $sid_count++;
   }
 
   if (empty($string_files)) {
@@ -614,11 +616,11 @@ function l10n_community_export($uri, $re
 
   if ($version == 'all-in-one') {
     // Output a single PO(T) file in this case.
-    return array('text/plain', $tempfile, $uri .'-'. (isset($release) ? $release->title : 'all') . (isset($language) ? '.'. $language->language : '') . ($template ? '.pot' : '.po'));
+    return array('text/plain', $tempfile, $uri .'-'. (isset($release) ? $release->title : 'all') . (isset($language) ? '.'. $language->language : '') . ($template ? '.pot' : '.po'), $sid_count);
   }
   else {
     // Output a package in this case.
-    return array('application/x-compressed', $tempfile, $uri .'-'. (isset($release) ? $release->title : 'all') . (isset($language) ? '-'. $language->language : '') . ($template ? '-templates' : '-translations') .'.tgz');
+    return array('application/x-compressed', $tempfile, $uri .'-'. (isset($release) ? $release->title : 'all') . (isset($language) ? '-'. $language->language : '') . ($template ? '-templates' : '-translations') .'.tgz', $sid_count);
   }
 }
 
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.15.2.14.2.3
diff -u -p -r1.1.2.11.2.15.2.14.2.3 l10n_community.install
--- l10n_community/l10n_community.install	9 Jan 2011 16:59:20 -0000	1.1.2.11.2.15.2.14.2.3
+++ l10n_community/l10n_community.install	16 Feb 2011 14:45:43 -0000
@@ -518,7 +518,7 @@ function l10n_community_update_6022() {
   // Save approval history data with L10N_SERVER_ACTION_APPROVE (2) and
   // L10N_SERVER_MEDIUM_WEB (1).
   $ret[] = update_sql("INSERT INTO {l10n_server_translation_history} (tid, uid_action, type_action, time_action, medium_action) SELECT tid, uid_approved, 2, time_approved, 1 FROM {l10n_server_translation} WHERE is_active = 1 AND is_suggestion = 0");
-  
+
   // Save somewhat padded decline data with L10N_SERVER_ACTION_DECLINE (3) and
   // L10N_SERVER_MEDIUM_WEB (1). Use a second later time based on submission
   // time, so in time ordering of events, it will appear later. Actual display
@@ -533,11 +533,11 @@ function l10n_community_update_6022() {
 
   // Add the time_changed field.
   db_add_field($ret, 'l10n_server_translation', 'time_changed', array('type' => 'int', 'not null' => TRUE, 'default' => 0, 'disp-width' => '11'));
-  
+
   // The last change date we know is either the submission or approval time
   // for active strings.
   $ret[] = update_sql("UPDATE {l10n_server_translation} SET time_changed = GREATEST(time_entered, time_approved) WHERE is_active = 1");
-  
+
   // The last change date for declined strings is faked above to time_entered + 1,
   // so use that for consistency. That is sure to be later to time_entered and
   // will be consistent with the last history action on the string.
@@ -549,3 +549,20 @@ function l10n_community_update_6022() {
 
   return $ret;
 }
+
+/**
+ * Add sid_count to releases.
+ */
+function l10n_community_update_6023() {
+  $ret = array();
+
+  db_add_field($ret, 'l10n_server_release', 'sid_count', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
+
+  // Fill in with sid_count based on line data.
+  $sid_counts = db_query('SELECT rid, COUNT(DISTINCT sid) sid_count FROM {l10n_server_line} GROUP BY rid');
+  while ($row = db_fetch_object($sid_counts)) {
+    db_query('UPDATE {l10n_server_release} SET sid_count = %d WHERE rid = %d', $row->sid_count, $row->rid);
+  }
+
+  return $ret;
+}
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.66.2.25.2.2
diff -u -p -r1.1.2.23.2.66.2.25.2.2 l10n_community.module
--- l10n_community/l10n_community.module	9 Jan 2011 16:08:46 -0000	1.1.2.23.2.66.2.25.2.2
+++ l10n_community/l10n_community.module	16 Feb 2011 14:45:43 -0000
@@ -865,7 +865,7 @@ function l10n_community_build_filter_val
     'author' => !empty($params['author']) && ($account = user_load(array('name' => $params['author']))) ? $account : NULL,
     // Dropdown, validated by form API.
     'context' => isset($params['context']) ? (string) $params['context'] : 'all',
-    'limit' => (isset($params['limit']) && in_array($params['limit'], array(5, 10, 20, 30))) ? (int) $params['limit'] : 10,
+    'limit' => (isset($params['limit']) && in_array($params['limit'], array(5, 10, 20, 30, 50))) ? (int) $params['limit'] : 10,
     'sid'   => (!empty($params['sid']) && is_numeric($params['sid'])) ? $params['sid'] : 0,
   );
 
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.31.2.28.2.3
diff -u -p -r1.1.2.7.2.31.2.28.2.3 translate.inc
--- l10n_community/translate.inc	10 Jan 2011 02:04:45 -0000	1.1.2.7.2.31.2.28.2.3
+++ l10n_community/translate.inc	16 Feb 2011 14:45:43 -0000
@@ -163,7 +163,7 @@ function l10n_community_filter_form(&$fo
   $form['limit'] = array(
     '#type' => 'select',
     '#title' => t('Limit'),
-    '#options' => drupal_map_assoc(array(5, 10, 20, 30)),
+    '#options' => drupal_map_assoc(array(5, 10, 20, 30, 50)),
     '#default_value' => $form_state['values']['limit'],
     '#attributes' => array('class' => $form_state['values']['limit'] == 10 ? 'is-default' : 'is-not-default'),
     '#display_none' => $form_state['values']['limit'] == 10,
@@ -514,7 +514,7 @@ function _l10n_community_translate_trans
       }
       if (isset($string->username)) {
         $title = l10n_community_translate_byline($string->username, $string->uid_entered, $string->time_entered, -1, -1, FALSE);
-        
+
         $form['author'] = array(
           '#value' => $title,
           '#prefix' => '<div class="l10n-byline"><a href="'. url('translate/translation-details/'. $string->tid) .'" class="l10n-more-link" title="'. t('Show full history for translation.') .'">',
Index: l10n_community/tests/l10n_community.test
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_community/tests/Attic/l10n_community.test,v
retrieving revision 1.1.2.15.2.9
diff -u -p -r1.1.2.15.2.9 l10n_community.test
--- l10n_community/tests/l10n_community.test	25 Jun 2010 14:55:53 -0000	1.1.2.15.2.9
+++ l10n_community/tests/l10n_community.test	16 Feb 2011 14:45:43 -0000
@@ -136,81 +136,81 @@ class L10nServerTestCase extends DrupalW
     // PROJECTS ====
 
     // Check that the base list of strings are there.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50'));
     $this->assertMsgID('This is a test string.');
     $this->assertMsgID('Test menu item in 5');
     $this->assertMsgID('test potx permission');
     $this->assertMsgIDPlural('1 test string', '@count test strings');
     $this->assertMsgIDPlural('1 test string in JS', '@count test strings in JS');
     $this->assertMsgIDContext('Test string in context', 'Test context');
-    $this->assertCount('<td class="source"', 25);
+    $this->assertCount('<td class="source"', 33);
 
     // Check Drupal 5 specific pattern with strings.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[5]));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[5]));
     $this->assertMsgID('This is a test string.');
     $this->assertMsgID('Test menu item in 5');
     $this->assertMsgID('test potx permission');
     $this->assertMsgIDPlural('1 test string', '@count test strings');
     $this->assertMsgIDPlural('1 test string in JS', '@count test strings in JS', FALSE);
     $this->assertMsgIDContext('Test string in context', 'Test context', FALSE);
-    $this->assertCount('<td class="source"', 17);
+    $this->assertCount('<td class="source"', 19);
 
     // Check Drupal 6 specific pattern with strings.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[6]));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[6]));
     $this->assertMsgID('This is a test string.');
     $this->assertMsgID('Test menu item in 5', FALSE);
     $this->assertMsgID('test potx permission');
     $this->assertMsgIDPlural('1 test string', '@count test strings');
     $this->assertMsgIDPlural('1 test string in JS', '@count test strings in JS');
     $this->assertMsgIDContext('Test string in context', 'Test context', FALSE);
-    $this->assertCount('<td class="source"', 22);
+    $this->assertCount('<td class="source"', 28);
 
     // Check Drupal 7 specific pattern with strings.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[7]));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[7]));
     $this->assertMsgID('This is a test string.');
     $this->assertMsgID('Test menu item in 5', FALSE);
     $this->assertMsgID('test potx permission', FALSE);
     $this->assertMsgIDPlural('1 test string', '@count test strings');
     $this->assertMsgIDPlural('1 test string in JS', '@count test strings in JS');
     $this->assertMsgIDContext('Test string in context', 'Test context');
-    $this->assertCount('<td class="source"', 20);
+    $this->assertCount('<td class="source"', 26);
 
     // RELEASES ====
 
     // No JS release should not have JS strings.
     $rid = db_result(db_query("SELECT rid FROM {l10n_server_project} p LEFT JOIN {l10n_server_release} r ON p.pid = r.pid WHERE p.uri = '%s' AND r.title = '6.x-". $this->version_base . "'", $this->project_names[6]));
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[6] .'&release='. $rid));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[6] .'&release='. $rid));
     $this->assertMsgIDPlural('1 test string in JS', '@count test strings in JS', FALSE);
-    $this->assertCount('<td class="source"', 18);
+    $this->assertCount('<td class="source"', 24);
 
     // JS release should have JS strings.
     $rid = db_result(db_query("SELECT rid FROM {l10n_server_project} p LEFT JOIN {l10n_server_release} r ON p.pid = r.pid WHERE p.uri = '%s' AND r.title = '6.x-". $this->version_js . "'", $this->project_names[6]));
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[6] .'&release='. $rid));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[6] .'&release='. $rid));
     $this->assertMsgIDPlural('1 test string in JS', '@count test strings in JS');
-    $this->assertCount('<td class="source"', 22);
+    $this->assertCount('<td class="source"', 28);
 
     // CONTEXT ====
 
     // Filtering for context in general works.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&context=Test%20context'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&context=Test%20context'));
     $this->assertMsgIDContext('Test string in context', 'Test context');
     $this->assertMsgID('This is a test string.', FALSE);
     $this->assertCount('<td class="source"', 1);
 
     // Filtering for context with project works.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[7] .'&context=Test%20context'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[7] .'&context=Test%20context'));
     $this->assertMsgIDContext('Test string in context', 'Test context');
     $this->assertMsgID('This is a test string.', FALSE);
     $this->assertCount('<td class="source"', 1);
 
     // Filtering for context but with another project works (no result).
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[6] .'&context=Test%20context'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[6] .'&context=Test%20context'));
     $this->assertRaw(t('No strings found with this filter. Try adjusting the filter options.'));
 
     // SEARCH ====
 
     // Filtering for text contained works.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&search=is%20a'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&search=is%20a'));
     $this->assertMsgID('This is a test string.');
     $this->assertMsgID('This is a test menu item in 5');
     $this->assertMsgID('This is a test menu item');
@@ -219,7 +219,7 @@ class L10nServerTestCase extends DrupalW
     $this->assertCount('<td class="source"', 3);
 
     // Filtering for text contained works with project filter.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&project='. $this->project_names[6] .'&search=is%20a'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&project='. $this->project_names[6] .'&search=is%20a'));
     $this->assertMsgID('This is a test string.');
     $this->assertMsgID('This is a test menu item in 5', FALSE);
     $this->assertMsgID('This is a test menu item');
@@ -230,7 +230,7 @@ class L10nServerTestCase extends DrupalW
     // LOOKUP ====
 
     $sid = db_result(db_query("SELECT sid FROM {l10n_server_string} WHERE value = '%s'", 'This is a test string.'));
-    $this->drupalGet('translate/details/hu/'. $sid);
+    $this->drupalGet('translate/source-details/'. $sid);
     $this->assertPattern('!<em>'. preg_quote($this->project_names[5]) .':</em> '. preg_quote('5.x-'. $this->version_js) .' <span title="[^>]+">\(1\)</span>!');
     $this->assertPattern('!<em>'. preg_quote($this->project_names[6]) .':</em> '. preg_quote('6.x-'. $this->version_js) .' <span title="[^>]+">\(1\)</span>, '. preg_quote('6.x-'. $this->version_base) .' <span title="[^>]+">\(1\)</span>!');
     $this->assertPattern('!<em>'. preg_quote($this->project_names[7]) .':</em> '. preg_quote('7.x-'. $this->version_js) .' <span title="[^>]+">\(1\)</span>!');
@@ -260,7 +260,7 @@ class L10nServerTestCase extends DrupalW
 
     // Verify that we can see the suggestion submission screen.
     $this->drupalLogin($this->u_member_1);
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50'));
     $this->assertMsgID('This is a test string.');
 
     // SUBMIT SUGGESTIONS ====
@@ -276,7 +276,7 @@ class L10nServerTestCase extends DrupalW
     $sid4 = db_result(db_query("SELECT sid FROM {l10n_server_string} WHERE value = '%s'", "1 test string\0@count test strings"));
     $edit['strings['. $sid4 .'][new][value][0]'] = '1 test string suggestion';
     $edit['strings['. $sid4 .'][new][value][1]'] = '@count test strings suggestion';
-    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=30'));
+    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=50'));
     $this->assertRaw(t('@count suggestions added', array('@count' => 4)));
     $this->drupalGet('user/logout');
 
@@ -285,7 +285,7 @@ class L10nServerTestCase extends DrupalW
     $edit = array();
     $edit['strings['. $sid1 .'][new][value][0]'] = 'This is a test string. suggestion-2';
     $edit['strings['. $sid3 .'][new][value][0]'] = 'Test string in context. suggestion-3';
-    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=30'));
+    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=50'));
     $this->assertRaw(t('@count suggestions added', array('@count' => 2)));
 
     // CHECK SUGGESTIONS ====
@@ -296,26 +296,26 @@ class L10nServerTestCase extends DrupalW
     $this->assertMsgID('Test string in context. suggestion-2');
     $this->assertMsgID('Test string in context. suggestion-3');
     $this->assertMsgIDPlural('1 test string suggestion', '@count test strings suggestion');
-    $this->assertCount('<div class="author">suggested by '. $this->u_member_1->name .' ', 4);
-    $this->assertCount('<div class="author">suggested by '. $this->u_member_2->name .' ', 2);
+    $this->assertCount('>by '. $this->u_member_1->name .' ', 4);
+    $this->assertCount('>by '. $this->u_member_2->name .' ', 2);
 
     // CHECK LISTINGS ====
 
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30'));
-    $this->assertCount('<td class="source"', 25);
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50'));
+    $this->assertCount('<td class="source"', 33);
 
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=8&limit=30'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=8&limit=50'));
     $this->assertCount('<td class="source"', 4);
 
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=4&limit=30'));
-    $this->assertCount('<td class="source"', 21);
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=4&limit=50'));
+    $this->assertCount('<td class="source"', 29);
 
     // Look for translations per user.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&author='. $this->u_member_1->name));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&author='. $this->u_member_1->name));
     $this->assertMsgID('This is a test string. suggestion');
     $this->assertMsgIDPlural('1 test string', '@count test strings');
     $this->assertCount('<td class="source"', 4);
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&author='. $this->u_member_2->name));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&author='. $this->u_member_2->name));
     $this->assertMsgID('This is a test string. suggestion-2');
     $this->assertCount('<td class="source"', 2);
 
@@ -333,11 +333,11 @@ class L10nServerTestCase extends DrupalW
     $edit['strings['. $sid2 .']['. $tid1 .'][declined]'] = 1;
     $edit['strings['. $sid3 .']['. $tid2 .'][declined]'] = 1;
     $edit['strings['. $sid3 .']['. $tid3 .'][declined]'] = 1;
-    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=30'));
+    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=50'));
     $this->assertRaw(t('3 suggestions declined'));
 
     // Now we should be down to 3 suggestions.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=8&limit=30'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=8&limit=50'));
     $this->assertCount('<input type="checkbox"', 3);
 
     // INDIVIDUAL APPROVE ====
@@ -347,11 +347,11 @@ class L10nServerTestCase extends DrupalW
     $edit = array();
     $edit['strings['. $sid1 .'][active]'] = $tid1;
     $edit['strings['. $sid4 .'][active]'] = $tid2;
-    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=30'));
+    $this->drupalPost('translate/languages/hu/translate', $edit, t('Save changes'), array('query' => 'limit=50'));
     $this->assertRaw(t('2 translations approved'));
 
     // Now we should be down to 1 suggestion and 1 translation.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=8&limit=30'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'status=8&limit=50'));
     $this->assertCount('<td class="source"', 1);
     $this->assertCount('<input type="checkbox"', 2);
     $this->assertRaw('This is a test string. suggestion');
@@ -397,20 +397,20 @@ class L10nServerTestCase extends DrupalW
     $this->drupalLogin($this->u_moderator);
 
     // Check whether it is there.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&status=8'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&status=8'));
     $this->assertMsgID('This is a test string.');
     $this->assertMsgIDPlural('1 test string', '@count test strings');
     $this->assertMsgIDContext('Test string in context', 'Test context');
     $this->assertCount('<td class="source"', 3);
 
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&status=2'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&status=2'));
     $this->assertNoRaw('<td class="source"');
 
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50'));
     $this->assertMsgID('This is a test string. - imported translation');
     $this->assertMsgIDPlural('1 test string - imported translation', '@count test strings - imported translation');
     $this->assertMsgID('Test string in context - imported translation');
-    $this->assertCount('suggested by '. $this->u_member_1->name .' ', 3);
+    $this->assertCount('by '. $this->u_member_1->name .' ', 3);
 
     // IMPORT AS MODERATOR
 
@@ -441,17 +441,17 @@ class L10nServerTestCase extends DrupalW
     $this->assertRaw(t('1 duplicate translation not saved'));
     $this->assertRaw(t('@count source strings not found; their translations were ignored', array('@count' => 2)));
 
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50'));
     $this->assertMsgID('saved for testing');
     $this->assertMsgID('This is a test string. - imported translation');
     $this->assertMsgIDPlural('1 saved for testing', '@count saved for testing');
     $this->assertMsgIDPlural('1 test string - imported translation', '@count test strings - imported translation');
     $this->assertMsgID('saved string in context');
     $this->assertMsgID('Test string in context - imported translation');
-    $this->assertCount('suggested by '. $this->u_member_1->name .' ', 3);
-    $this->assertCount('suggested by '. $this->u_team->name .' ', 3);
+    $this->assertCount('by '. $this->u_member_1->name .' ', 3);
+    $this->assertCount('by '. $this->u_team->name .' ', 3);
 
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&status=2'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&status=2'));
     $this->assertNoRaw('<td class="source"');
 
     // IMPORT AS TRANSLATION (KICKED TO SUGGESTION)
@@ -472,11 +472,11 @@ class L10nServerTestCase extends DrupalW
     $this->assertRaw(t('@count source strings not found; their translations were ignored', array('@count' => 2)));
 
     // Should still have 3 strings with outstanding suggestions.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&status=8'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&status=8'));
     $this->assertCount('<td class="source"', 3);
 
     // Should now have 3 strings with approved translations.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&status=2'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&status=2'));
     $this->assertCount('<td class="source"', 3);
 
     // IMPORT AS TRANSLATION
@@ -490,11 +490,11 @@ class L10nServerTestCase extends DrupalW
     $this->assertRaw(t('@count source strings not found; their translations were ignored', array('@count' => 2)));
 
     // No string should have suggestions submitted at this point.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&status=8'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&status=8'));
     $this->assertNoRaw('<td class="source"');
 
     // Three strings should now have translations submitted by us.
-    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=30&status=2'));
+    $this->drupalGet('translate/languages/hu/translate', array('query' => 'limit=50&status=2'));
     $this->assertCount('<td class="source"', 3);
   }
 
@@ -607,10 +607,12 @@ class L10nServerTestCase extends DrupalW
     // Add .info file tailored to the module filename (although this is not
     // important for potx, just to be clear about identification).
     $tar->addString('potx_test_'. $api_version .'.info', file_get_contents(drupal_get_path('module', 'potx') .'/tests/potx_test_6.info'));
+    $num_files = 2;
     if ($include_js) {
       // Add .js file regardless of api version. Although Drupal 5 parsing should
       // not pick this up, this packaging allows us to test for that exactly.
       $tar->addString('potx_test_'. $api_version .'.js', file_get_contents(drupal_get_path('module', 'potx') .'/tests/potx_test.js'));
+      $num_files = 3;
     }
 
     $this->assertTrue(file_exists($package_file), t('Test package created.'));
@@ -624,7 +626,16 @@ class L10nServerTestCase extends DrupalW
     // Replace full path name to relative path name to ensure that we check for
     // the right feedback in the output.
     $package_file = str_replace($this->full_temp_path, $this->temp_path, $package_file);
-    $this->assertRaw(t('Contents of %filename have been scanned.', array('%filename' => $package_file)));
+
+    // Number of strings we expect to find.
+    $strings_to_find = array(
+      5 => array(TRUE => 19),
+      6 => array(TRUE => 28, FALSE => 24),
+      7 => array(TRUE => 26),
+    );
+    // Assert the right pattern for this feedback message.
+    $this->assertRaw(t('@filename (@files files, @sids strings) scanned.', array('@filename' => basename($package_file), '@files' => $num_files, '@sids' => $strings_to_find[$api_version][$include_js])));
+
     $this->drupalGet('user/logout');
   }
 
Index: l10n_packager/l10n_packager.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_packager/Attic/l10n_packager.inc,v
retrieving revision 1.1.2.1.2.4.2.1
diff -u -p -r1.1.2.1.2.4.2.1 l10n_packager.inc
--- l10n_packager/l10n_packager.inc	22 Dec 2010 19:12:54 -0000	1.1.2.1.2.4.2.1
+++ l10n_packager/l10n_packager.inc	16 Feb 2011 14:45:43 -0000
@@ -123,7 +123,7 @@ function l10n_packager_release_package($
   if (!empty($export_result) && is_array($export_result)) {
 
     // If we got an array back from the export build, tear that into pieces.
-    list($mime_type, $export_name, $serve_name) = $export_result;
+    list($mime_type, $export_name, $serve_name, $sid_count) = $export_result;
 
     // Get the destination file path.
     $file_path = l10n_packager_get_filepath($release, $language);
@@ -143,6 +143,7 @@ function l10n_packager_release_package($
     $file->filepath = $file_path;
     file_move($export_name, $file->filepath, FILE_EXISTS_REPLACE);
     $file->filesize = filesize($file->filepath);
+    $file->sid_count = $sid_count;
 
     // Create / update file record and link to release.
     drupal_write_record('files', $file, !empty($file->fid) ? 'fid' : array());
Index: l10n_packager/l10n_packager.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_packager/Attic/l10n_packager.install,v
retrieving revision 1.1.2.1.2.3
diff -u -p -r1.1.2.1.2.3 l10n_packager.install
--- l10n_packager/l10n_packager.install	25 Jun 2010 14:55:53 -0000	1.1.2.1.2.3
+++ l10n_packager/l10n_packager.install	16 Feb 2011 14:45:43 -0000
@@ -73,6 +73,12 @@ function l10n_packager_schema() {
         'not null' => FALSE,
         'disp-width' => '11'
       ),
+      'sid_count' => array(
+        'description' => 'Count of source strings exported in this file.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
     ),
     'primary key' => array('drid'),
   );
@@ -132,3 +138,12 @@ function l10n_packager_update_6002() {
   }
   return array();
 }
+
+/**
+ * Add sid_count to release exports.
+ */
+function l10n_packager_update_6003() {
+  $ret = array();
+  db_add_field($ret, 'l10n_packager_file', 'sid_count', array('type' => 'int', 'not null' => TRUE, 'default' => 0));
+  return $ret;
+}
Index: l10n_server/l10n_server.install
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/l10n_server/l10n_server/Attic/l10n_server.install,v
retrieving revision 1.1.2.3.2.2
diff -u -p -r1.1.2.3.2.2 l10n_server.install
--- l10n_server/l10n_server.install	9 Jan 2011 16:08:46 -0000	1.1.2.3.2.2
+++ l10n_server/l10n_server.install	16 Feb 2011 14:45:43 -0000
@@ -12,7 +12,7 @@
 function l10n_server_install() {
   if (!db_table_exists('l10n_community_project')) {
     // Only run the schema installation if l10n_community was
-    // not installed previously. Used to help the transition process. 
+    // not installed previously. Used to help the transition process.
     drupal_install_schema('l10n_server');
   }
 }
@@ -138,6 +138,12 @@ function l10n_server_schema() {
         'type' => 'int',
         'not null' => TRUE,
       ),
+      'sid_count' => array(
+        'description' => 'Count of source strings in this project release.',
+        'type' => 'int',
+        'not null' => TRUE,
+        'default' => 0,
+      ),
     ),
     'primary key' => array('rid'),
     'indexes' => array(
@@ -364,7 +370,7 @@ function l10n_server_schema() {
       'sid_language_is_suggestion_is_active' => array('sid', 'language', 'is_suggestion', 'is_active')
     ),
   );
-  
+
   $schema['l10n_server_translation_history'] = array(
     'fields' => array(
       'tid' => array(
@@ -447,4 +453,4 @@ function l10n_server_schema() {
   return $schema;
 }
 
-?>
\ No newline at end of file
+?>
