--- a/includes/locale.inc
+++ b/includes/locale.inc
@@ -1853,12 +1853,14 @@
   if (!($query = _locale_translate_seek_query())) {
     $query = array(
       'translation' => 'all',
       'group' => 'all',
       'language' => 'all',
       'string' => '',
+      'context' => '',
+      'location' => '',
     );
   }
 
   $sql_query = db_select('locales_source', 's');
 
   $limit_language = NULL;
@@ -1893,12 +1895,22 @@
       if ($query['language'] != 'en') {
         // Only search in translations if the language is not forced to English.
         $condition->condition('t.translation', '%' . db_like($query['string']) . '%', 'LIKE');
       }
       $sql_query->condition($condition);
       break;
+  }
+
+  // Filter on string context.
+  if (!empty($query['context'])) {
+    $sql_query->condition('s.context', '%' . db_like($query['context']) . '%', 'LIKE');
+  }
+
+  // Filter on string location.
+  if (!empty($query['location'])) {
+    $sql_query->condition('s.location', '%' . db_like($query['location']) . '%', 'LIKE');
   }
 
   // Add a condition on the text group.
   if (!empty($query['group']) && $query['group'] != 'all') {
     $sql_query->condition('s.textgroup', $query['group']);
   }
@@ -1947,13 +1959,13 @@
  * Build array out of search criteria specified in request variables
  */
 function _locale_translate_seek_query() {
   $query = &drupal_static(__FUNCTION__);
   if (!isset($query)) {
     $query = array();
-    $fields = array('string', 'language', 'translation', 'group');
+    $fields = array('string', 'context', 'location', 'language', 'translation', 'group');
     foreach ($fields as $field) {
       if (isset($_SESSION['locale_translation_filter'][$field])) {
         $query[$field] = $_SESSION['locale_translation_filter'][$field];
       }
     }
   }
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -813,12 +813,22 @@
 
   $filters['string'] = array(
     'title' => t('String contains'),
     'description' => t('Leave blank to show all strings. The search is case sensitive.'),
   );
 
+  $filters['context'] = array(
+    'title' => t('Context contains'),
+    'description' => t('Leave blank to include all contexts.'),
+  );
+
+  $filters['location'] = array(
+    'title' => t('Location contains'),
+    'description' => t('Leave blank to include all locations.'),
+  );
+
   $filters['language'] = array(
     'title' => t('Language'),
     'options' => array_merge(array('all' => t('All languages'), 'en' => t('English (provided by Drupal)')), $languages),
   );
 
   $filters['translation'] = array(
@@ -848,14 +858,14 @@
     '#title' => t('Filter translatable strings'),
     '#collapsible' => TRUE,
     '#collapsed' => FALSE,
   );
   foreach ($filters as $key => $filter) {
     // Special case for 'string' filter.
-    if ($key == 'string') {
-      $form['filters']['status']['string'] = array(
+    if ($key == 'string' || $key == 'context' || $key == 'location') {
+      $form['filters']['status'][$key] = array(
         '#type' => 'textfield',
         '#title' => $filter['title'],
         '#description' => $filter['description'],
       );
     }
     else {
