 includes/locale.inc             | 14 +++++++++++++-
 modules/locale/locale.admin.inc | 14 ++++++++++++--
 2 files changed, 25 insertions(+), 3 deletions(-)

diff --git a/includes/locale.inc b/includes/locale.inc
index c7f9583..c431de5 100644
--- a/includes/locale.inc
+++ b/includes/locale.inc
@@ -1856,6 +1856,8 @@ function _locale_translate_seek() {
       'group' => 'all',
       'language' => 'all',
       'string' => '',
+      'context' => '',
+      'location' => '',
     );
   }
 
@@ -1898,6 +1900,16 @@ function _locale_translate_seek() {
       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']);
@@ -1950,7 +1962,7 @@ 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];
diff --git a/modules/locale/locale.admin.inc b/modules/locale/locale.admin.inc
index e813962..8e12379 100644
--- a/modules/locale/locale.admin.inc
+++ b/modules/locale/locale.admin.inc
@@ -816,6 +816,16 @@ function locale_translation_filters() {
     '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),
@@ -851,8 +861,8 @@ function locale_translation_filter_form() {
   );
   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'],
