Index: includes/menu.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/menu.inc,v
retrieving revision 1.310
diff -u -p -r1.310 menu.inc
--- includes/menu.inc	4 Jan 2009 20:04:32 -0000	1.310
+++ includes/menu.inc	15 Jan 2009 21:24:06 -0000
@@ -549,7 +549,7 @@ function _menu_item_localize(&$item, $ma
         $item['title'] = t($item['title'], menu_unserialize($item['title_arguments'], $map));
       }
     }
-    elseif (drupal_function_exists($callback)) {
+    elseif ($callback && drupal_function_exists($callback)) {
       if (empty($item['title_arguments'])) {
         $item['title'] = $callback($item['title']);
       }
Index: modules/menu/menu.api.php
===================================================================
RCS file: /cvs/drupal/drupal/modules/menu/menu.api.php,v
retrieving revision 1.2
diff -u -p -r1.2 menu.api.php
--- modules/menu/menu.api.php	20 Dec 2008 18:24:37 -0000	1.2
+++ modules/menu/menu.api.php	15 Jan 2009 21:24:07 -0000
@@ -27,6 +27,9 @@
  *   contain the following key-value pairs:
  *
  *   - "title": Required. The untranslated title of the menu item.
+ *   - "title callback": Function to generate the title, defaults to t(.)
+ *     If you require only the raw string to be output, set this to FALSE.
+ *   - "title arguments": Arguments to send to t() or your custom callback.
  *   - "description": The untranslated description of the menu item.
  *   - "page callback": The function to call to display a web page when the user
  *     visits the path. If omitted, the parent menu item's callback will be used
Index: modules/simpletest/tests/menu.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu.test,v
retrieving revision 1.4
diff -u -p -r1.4 menu.test
--- modules/simpletest/tests/menu.test	28 Dec 2008 18:27:14 -0000	1.4
+++ modules/simpletest/tests/menu.test	15 Jan 2009 21:24:07 -0000
@@ -21,6 +21,15 @@ class MenuIncTestCase extends DrupalWebT
   }
 
   /**
+   * Test title callback set to FALSE.
+   */
+  function testTitleCallbackFalse() {
+    $this->drupalGet('node');
+    $this->assertText('A title with @placeholder', t('Raw text found on the page'));
+    $this->assertNoText(t('A title with @placeholder', array('@placeholder' => 'some other text')), t('Text with placeholder substitutions not found.'));
+  }
+
+  /**
    * Tests for menu_name parameter for hook_menu().
    */
   function testMenuName() {
@@ -51,7 +60,7 @@ class MenuRebuildTestCase extends Drupal
       'group' => t('Menu'),
     );
   }
-  
+
   /**
    * Test if the 'menu_rebuild_needed' variable triggers a menu_rebuild() call.
    */
Index: modules/simpletest/tests/menu_test.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/simpletest/tests/menu_test.module,v
retrieving revision 1.1
diff -u -p -r1.1 menu_test.module
--- modules/simpletest/tests/menu_test.module	28 Dec 2008 18:27:14 -0000	1.1
+++ modules/simpletest/tests/menu_test.module	15 Jan 2009 21:24:07 -0000
@@ -3,18 +3,36 @@
 
 /**
  * @file
- * Dummy module implementing hook menu to test changing the menu name.
+ * Dummy module implementing hook menu.
  */
 
- /**
- * The name of the menu changes during the course of this test. Use a $_GET.
+/**
+ * Implementation of hook_menu().
  */
 function menu_test_menu() {
-
+  // The name of the menu changes during the course of the test. Using a $_GET.
   $items['menu_name_test'] = array(
-    'title' => t('Test menu_name router item'),
+    'title' => 'Test menu_name router item',
     'page callback' => 'node_save',
     'menu_name' => isset($_GET["hook_menu_name"]) ? $_GET["hook_menu_name"] : 'original',
   );
+  // Use FALSE as 'title callback' to bypass t().
+  $items['menu_no_title_callback'] = array(
+    'title' => 'A title with @placeholder',
+    'title callback' => FALSE,
+    'title arguments' => array('@placeholder' => 'some other text'),
+    'page callback' => 'menu_test_callback',
+    'access arguments' => array('access content'),
+  );
   return $items;
-}
\ No newline at end of file
+}
+
+/**
+ * Dummy callback for hook_menu() to point to.
+ *
+ * @return
+ *  A random string.
+ */
+function menu_test_callback() {
+  return $this->randomName();
+}
