Index: wordfilter.module
===================================================================
RCS file: /cvs/drupal/contributions/modules/wordfilter/wordfilter.module,v
retrieving revision 1.7.2.9.2.9
diff -u -r1.7.2.9.2.9 wordfilter.module
--- wordfilter.module	6 Oct 2008 16:16:38 -0000	1.7.2.9.2.9
+++ wordfilter.module	20 Nov 2008 22:57:11 -0000
@@ -339,7 +339,20 @@
 function _wordfilter_list($refresh = 0) {
   static $list = NULL;
   if (is_null($list) || $refresh) {
-    $result = db_query('SELECT * FROM {wordfilter} ORDER BY words DESC');
+    if (module_exists('locale')) {
+      $node = menu_get_object();
+      // We're viewing a node. If it has a language, apply its language's filter plus the global one.
+      if ($node && $node->language) {
+        $result = db_query("SELECT * FROM {wordfilter} WHERE language = '' OR language = '%s' ORDER BY words DESC", $node->language);
+      }
+    }
+
+    // The locale module is not enabled, or we don't know the context, so
+    // apply all word filters.
+    if (!isset($result)) {
+      $result = db_query('SELECT * FROM {wordfilter} ORDER BY words DESC');
+    }
+    
     $list = array();
     while ($a = db_fetch_object($result)) {
       $list[] = $a;
@@ -372,16 +385,27 @@
     array('data' => t('Standalone'), 'field' => 'standalone'),
     array('data' => t('Operations'), 'colspan' => 2)
   );
+
+  if (module_exists('locale')) {
+    array_unshift($header, array('data' => t('Language'), 'field' => 'language', 'sort' => 'asc'));
+  }
+
   $rows = array();
   $list = _wordfilter_admin_list($header);
   foreach ($list as $word) {
-    $rows[] = array(
+    $row = array(
       check_plain($word->words),
       ($word->replacement) ? $word->replacement : variable_get('wordfilter_default_replacement', '[filtered word]'),
       ($word->standalone) ? t('Yes') : t('No'),
       l(t('Edit word'), 'admin/settings/wordfilter/edit/'. $word->id),
       l(t('Delete word'), 'admin/settings/wordfilter/delete/'. $word->id),
     );
+
+    if (module_exists('locale')) {
+      array_unshift($row, locale_language_name($word->language));
+    }
+
+    $rows[] = $row;
   }
   $output .= drupal_get_form('wordfilter_settings_form');
   $output .= theme('table', $header, $rows);
@@ -404,6 +428,7 @@
     '#value' => $word->id,
   );
 
+  $form['language'] = _wordfilter_language_field($word->language);
   $form['words'] = array(
     '#type' => 'textfield',
     '#title' => t('Word to filter'),
@@ -447,9 +472,9 @@
 }
 
 function wordfilter_admin_edit_form_submit($form, &$form_state) {
-  db_query("UPDATE {wordfilter} SET words = '%s', replacement = '%s', standalone = %d WHERE id = %d", $form_state['values']['words'], $form_state['values']['replacement'], $form_state['values']['standalone'], $form_state['values']['id']);
-  watchdog('wordfilter', 'Updated filter for: %form_state', array('%form_state' => $form_state['values']['words']));
-  drupal_set_message(t('Updated filter for:') . $form_state['values']['words']);
+  db_query("UPDATE {wordfilter} SET language = '%s', words = '%s', replacement = '%s', standalone = %d WHERE id = %d", $form_state['values']['language'], $form_state['values']['words'], $form_state['values']['replacement'], $form_state['values']['standalone'], $form_state['values']['id']);
+  watchdog('wordfilter', t('Updated filter for %word.', array('%word' => $form_state['values']['words'])));
+  drupal_set_message(t('Updated filter for %word.', array('%word' => $form_state['values']['words'])));
   $form_state['redirect'] = 'admin/settings/wordfilter';
 }
 
@@ -459,6 +484,7 @@
 function wordfilter_admin_add_form() {
   $form = array();
 
+  $form['language'] = _wordfilter_language_field($word->language);
   $form['help'] = array(
     '#type' => 'markup',
     '#value' => t("Enter a word or phrase you want to filter followed by '|' and the replacement word or phrase. You can enter multiple word and replacement word pairs by hitting return and adding more word pairs. Any word or phrases that do not have a replacement word or phrase will use the default replacement word below."),
@@ -511,9 +537,30 @@
     if (!$replacement) {
       $replacement = $form_state['values']['replacement'];
     }
-    db_query("INSERT INTO {wordfilter} (words, replacement, standalone) VALUES ('%s', '%s', %d)", $word, $replacement, $form_state['values']["standalone"]);
-    watchdog('wordfilter', 'Added filter for: %word', array('%word' => $word));
-    drupal_set_message(t('Added filter for: @word', array('@word' => $word)));
+    db_query("INSERT INTO {wordfilter} (language, words, replacement, standalone) VALUES ('%s', '%s', '%s', %d)", $form_state['values']['language'], $word, $replacement, $form_state['values']["standalone"]);
+    watchdog('wordfilter', t('Added filter for %word.', array('%word' => $word)));
+    drupal_set_message(t('Added filter for %word.', array('%word' => $word)));
   }
   $form_state['redirect'] = 'admin/settings/wordfilter';
 }
+
+/**
+ * Generate language selection field.
+ */
+function _wordfilter_language_field($default_value = '') {
+  if (module_exists('locale')) {
+    return array(
+      '#type' => 'select',
+      '#title' => t('Language'),
+      '#default_value' => $default_value,
+      '#options' => array('' => t('Language neutral')) + locale_language_list('name'),
+      '#description' => t('Choose for which language you want to apply the word replacement.'),
+    );
+  }
+  else {
+    return array(
+      '#type' => 'value',
+      '#value' => $default_value,
+    );
+  }
+}
Index: wordfilter.install
===================================================================
RCS file: /cvs/drupal/contributions/modules/wordfilter/wordfilter.install,v
retrieving revision 1.4.2.1.2.2
diff -u -r1.4.2.1.2.2 wordfilter.install
--- wordfilter.install	21 May 2008 05:41:02 -0000	1.4.2.1.2.2
+++ wordfilter.install	20 Nov 2008 22:57:10 -0000
@@ -25,6 +25,13 @@
         'not null' => TRUE,
         'default' => '',
       ),
+      'language' => array(
+        'description' => t('The {languages}.language of this word to filter.'),
+        'type' => 'varchar',
+        'length' => 12,
+        'not null' => TRUE,
+        'default' => '',
+      ),
       'standalone' => array(
         'description' => t('A boolean to indicate if the word filtering should only be done if the word is not part of another word.'),
         'type' => 'int',
@@ -70,6 +77,17 @@
 }
 
 /**
+ * Update function to add a language column to the wordfilter
+ * table so that words and replacement words can be set on 
+ * a per language basis
+ */
+function wordfilter_update_6100() {
+  $ret = array();
+  db_add_field($ret, 'wordfilter', 'language', array('type' => 'varchar', 'length' => 12, 'not null' => TRUE, 'default' => ''));
+  return $ret;
+}
+
+/**
  * Implementation of hook_uninstall().
  */
 function wordfilter_uninstall() {
