=== modified file 'modules/locale/locale.module'
--- modules/locale/locale.module	2009-03-26 06:31:31 +0000
+++ modules/locale/locale.module	2009-10-20 08:01:14 +0000
@@ -266,6 +266,11 @@
         );
       }
       break;
+      
+    // Bulk language update operations for nodes
+    case 'node_admin_content':
+      $form['admin']['options']['submit']['#submit'][] = 'locale_form_node_admin_content_submit';
+      break;
 
     // Language field for nodes
     default:
@@ -585,3 +590,33 @@
     return $block;
   }
 }
+
+/**
+ * Implementation of hook_node_operations().
+ */
+function locale_node_operations() {
+  $languages = array('' => t('Language neutral')) + locale_language_list();
+  $setops = array();
+  foreach ($languages as $lid => $name) {
+    $setops['language_set-'. $lid] = $name;
+  }
+  $operations = array(
+    t('Set language') => array(
+      'label' => $setops,
+    ),
+  );
+  return $operations;
+}
+
+/**
+ * Submit callback for Update options at admin/content/node:
+ * Update the selected nodes' language.
+ */
+function locale_form_node_admin_content_submit($form, &$form_state) {
+  $operation_langcode = explode('-', $form_state['values']['operation']);
+  $operation = $operation_langcode[0];
+  if ($operation == 'language_set') {
+    $langcode = $operation_langcode[1];
+    node_mass_update(array_filter($form_state['values']['nodes']), array('language' => $langcode));
+  }
+}

