Index: casetracker.module
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/casetracker/casetracker.module,v
retrieving revision 1.123.2.14
diff -u -r1.123.2.14 casetracker.module
--- casetracker.module	13 Aug 2009 04:48:15 -0000	1.123.2.14
+++ casetracker.module	23 Nov 2009 19:25:55 -0000
@@ -534,12 +534,13 @@
                          FROM {casetracker_case_states} ORDER BY weight");
     $states_lookup = array();
     while ($row = db_fetch_object($results)) {
+      $row->display = casetracker_tt("case_states:$row->csid:name", $row->name);
       $states_lookup[$row->realm][$row->csid] = $states_lookup['all'][$row->csid] = $row;
     }
   }
 
   if ($csid && $realm) {
-    return $states_lookup['all'][$csid]->name;
+    return $states_lookup['all'][$csid]->display;
   }
   elseif ($csid && !$realm) {
     return $states_lookup['all'][$csid];
@@ -548,7 +549,7 @@
     $options = array(); // suitable for form api.
     if (!empty($states_lookup[$realm])) {
       foreach ($states_lookup[$realm] as $state) {
-        $options[$state->csid] = $state->name;
+        $options[$state->csid] = $state->display;
       }
     }
     return $options;
@@ -556,10 +557,53 @@
 }
 
 /**
+ * Translate user defined string. Wrapper function for tt() if i18nstrings enabled.
+ * 
+ * The string id for case states will be: case:[realm]#[csid]:name
+ * 
+ * @param $name
+ *   String id without 'casetracker', which will be prepended automatically
+ */
+function casetracker_tt($name, $string, $langcode = NULL, $update = FALSE) {
+  if (function_exists('tt')) {
+    return tt('casetracker:' . $name, $string, $langcode, $update);
+  }
+  else {
+    return $string;
+  }
+}
+
+/**
+ * Implementation of hook_locale().
+ */
+function casetracker_locale($op = 'groups', $group = NULL) {
+  switch ($op) {
+    case 'groups':
+      return array('casetracker' => t('Case Tracker'));
+    case 'info':
+      $info['casetracker']['refresh callback'] = 'casetracker_locale_refresh';
+      return $info;
+  }
+}
+
+/**
+ * Refresh locale strings.
+ */
+function casetracker_locale_refresh() {
+  $results = db_query("SELECT csid, case_state_name AS name, case_state_realm AS realm FROM {casetracker_case_states}");
+  while ($row = db_fetch_object($results)) {
+    casetracker_tt("case_states:$row->csid:name", $row->name, NULL, TRUE);
+  }
+  // Meaning it completed with no issues. @see i18nmenu_locale_refresh().
+  return TRUE;
+}
+
+/**
  * Load states for a particular realm. Wrapper around casetracker_case_state_load()
  *
  * @param $realm
  *   Name of the realm ('status', 'priority', or 'type').
+ *
  * @return
  *   array with the keys being the state ID and the values being their names.
  */
@@ -592,6 +636,9 @@
   else {
     drupal_write_record('casetracker_case_states', $record);
   }
+  // Update translations
+  casetracker_tt('case_states:'. $record['csid'] .':name', $case_state['name'], NULL, TRUE);
+
   return $result;
 }
 
Index: casetracker_admin.inc
===================================================================
RCS file: /cvs/drupal-contrib/contributions/modules/casetracker/casetracker_admin.inc,v
retrieving revision 1.2.2.4
diff -u -r1.2.2.4 casetracker_admin.inc
--- casetracker_admin.inc	12 Jun 2009 20:04:45 -0000	1.2.2.4
+++ casetracker_admin.inc	23 Nov 2009 19:25:56 -0000
@@ -155,9 +155,9 @@
       'colspan' => 2)
     );
   foreach (array('priority', 'status', 'type') as $realm) {
-    foreach (casetracker_realm_load($realm) as $csid => $name) {
+    foreach (casetracker_realm_load($realm, FALSE) as $csid => $name) {
       $rows[] = array(
-        t($name), 
+        $name,
         $realm,
         l(t('edit'), 'admin/settings/casetracker/states/edit/'. $csid),
         l(t('delete'), 'admin/settings/casetracker/states/delete/'. $csid), );
