--- original-aron/locale.module	2007-07-19 18:09:00.000000000 +0200
+++ locale.module	2007-08-29 08:42:14.000000000 +0200
@@ -183,27 +183,34 @@ function locale($string) {
 
   // We do not have this translation cached, so get it from the DB.
   else {
-    $result = db_query("SELECT s.lid, t.translation FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid WHERE s.source = '%s' AND t.locale = '%s'", $string, $locale);
+    $result = db_query("SELECT s.lid, s.version, t.translation FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid WHERE s.source = '%s' AND t.locale = '%s'", $string, $locale);
     // Translation found
     if ($trans = db_fetch_object($result)) {
       if (!empty($trans->translation)) {
         $locale_t[$string] = $trans->translation;
         $string = $trans->translation;
       }
+      if ($trans->version != VERSION) {  // NEW CODE!!!
+        db_query("UPDATE {locales_source} SET version = '%s' WHERE lid = %d LIMIT 1", VERSION, $trans->lid);
+        cache_clear_all("locale:$locale", 'cache');
+      }
     }
 
     // Either we have no such source string, or no translation
     else {
-      $result = db_query("SELECT lid, source FROM {locales_source} WHERE source = '%s'", $string);
+      $result = db_query("SELECT lid, source, version FROM {locales_source} WHERE source = '%s'", $string);
       // We have no such translation
       if ($obj = db_fetch_object($result)) {
         if ($locale) {
           db_query("INSERT INTO {locales_target} (lid, locale, translation) VALUES (%d, '%s', '')", $obj->lid, $locale);
         }
+        if ($obj->version != VERSION) {  // NEW CODE!!!
+          db_query("UPDATE {locales_source} SET version = '%s' WHERE lid = %d LIMIT 1", VERSION, $obj->lid);
+        }
       }
       // We have no such source string
       else {
-        db_query("INSERT INTO {locales_source} (location, source) VALUES ('%s', '%s')", request_uri(), $string);
+        db_query("INSERT INTO {locales_source} (location, source, version) VALUES ('%s', '%s', '%s')", request_uri(), $string, VERSION);
         if ($locale) {
           $lid = db_fetch_object(db_query("SELECT lid FROM {locales_source} WHERE source = '%s'", $string));
           db_query("INSERT INTO {locales_target} (lid, locale, translation) VALUES (%d, '%s', '')", $lid->lid, $locale);
@@ -226,7 +233,7 @@ function locale_refresh_cache() {
   $languages = locale_supported_languages();
 
   foreach (array_keys($languages['name']) as $locale) {
-    $result = db_query("SELECT s.source, t.translation, t.locale FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid WHERE t.locale = '%s' AND LENGTH(s.source) < 75", $locale);
+    $result = db_query("SELECT s.source, s.version, t.translation, t.locale FROM {locales_source} s INNER JOIN {locales_target} t ON s.lid = t.lid WHERE t.locale = '%s' AND s.version = '%s' AND LENGTH(s.source) < 75", $locale, VERSION); // NEW CODE!!! (changed)
     $t = array();
     while ($data = db_fetch_object($result)) {
       $t[$data->source] = (empty($data->translation) ? TRUE : $data->translation);
