Index: includes/menu.inc =================================================================== RCS file: /cvs/drupal/drupal/includes/menu.inc,v retrieving revision 1.233 diff -u -p -r1.233 menu.inc --- includes/menu.inc 20 Dec 2007 09:20:41 -0000 1.233 +++ includes/menu.inc 20 Dec 2007 23:52:38 -0000 @@ -464,7 +464,7 @@ function _menu_item_localize(&$item, $ma $item['title'] = t($item['title'], menu_unserialize($item['title_arguments'], $map)); } } - else { + elseif ($callback) { if (empty($item['title_arguments'])) { $item['title'] = $callback($item['title']); } @@ -579,6 +579,7 @@ function menu_tail_to_arg($arg, $map, $i * $item['title'] is generated from link_title, and may be localized. */ function _menu_link_translate(&$item) { + $item['options'] = unserialize($item['options']); if ($item['external']) { $item['access'] = 1; $map = array(); @@ -604,16 +605,33 @@ function _menu_link_translate(&$item) { } _menu_check_access($item, $map); } - // If the link title matches that of a router item, localize it. - if (!empty($item['title']) && (($item['title'] == $item['link_title']) || ($item['title_callback'] != 't'))) { - _menu_item_localize($item, $map); + + // If the link title matches that of its router item, localize it. + if (!empty($item['title']) && ($item['title'] == $item['link_title'])){ + if (!empty($item['title_arguments']) && $item['title_callback'] == 't') { + $item['title'] = t($item['title'], menu_unserialize($item['title_arguments'], $map)); + } + else { + $item['title'] = t($item['title']); + } } else { $item['title'] = $item['link_title']; } + // Localize the description and title attribute. + if (!empty($item['description'])) { + $original_description = $item['description']; + $item['description'] = t($item['description']); + // Localize the title attribute only if it matches the description. + if ($item['options']['attributes']['title'] == $original_description) { + $item['options']['attributes']['title'] = $item['description']; + } + } + // Store the map if it may be needed for use later by a title callback. + if (!empty($item['title_callback']) && ($item['title_callback'] != 't')) { + $item['map'] = $map; + } } - $item['options'] = unserialize($item['options']); - return $map; } @@ -759,7 +777,7 @@ function menu_tree_all_data($menu_name = // LEFT JOIN since there is no match in {menu_router} for an external // link. $data['tree'] = menu_tree_data(db_query(" - SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.type, ml.* + SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.type, m.description, ml.* FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path WHERE ml.menu_name = '%s'". $where ." ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC", $args), $parents); @@ -849,7 +867,7 @@ function menu_tree_page_data($menu_name // LEFT JOIN since there is no match in {menu_router} for an external // link. $data['tree'] = menu_tree_data(db_query(" - SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.type, ml.* + SELECT m.load_functions, m.to_arg_functions, m.access_callback, m.access_arguments, m.page_callback, m.page_arguments, m.title, m.title_callback, m.title_arguments, m.type, m.description, ml.* FROM {menu_links} ml LEFT JOIN {menu_router} m ON m.path = ml.router_path WHERE ml.menu_name = '%s' AND ml.plid IN (". $placeholders .") ORDER BY p1 ASC, p2 ASC, p3 ASC, p4 ASC, p5 ASC, p6 ASC, p7 ASC, p8 ASC, p9 ASC", $args), $parents); @@ -1445,6 +1463,12 @@ function menu_set_active_trail($new_trai if ($trail[$last]['href'] != $item['href'] && !(bool)($item['type'] & MENU_IS_LOCAL_TASK) && !drupal_is_front_page()) { $trail[] = $item; } + // Apply title callbacks for items in the active trail (breadcrumb). + foreach ($trail as $key => $item) { + if (!empty($item['title_callback']) && $item['title_callback'] != 't') { + _menu_item_localize($trail[$key], $item['map']); + } + } } return $trail; } Index: modules/filter/filter.admin.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.admin.inc,v retrieving revision 1.5 diff -u -p -r1.5 filter.admin.inc --- modules/filter/filter.admin.inc 6 Dec 2007 09:58:31 -0000 1.5 +++ modules/filter/filter.admin.inc 20 Dec 2007 23:52:38 -0000 @@ -74,16 +74,13 @@ function theme_filter_admin_overview($fo } /** - * Display a filter format form. + * Menu callback; Display a filter format form. */ function filter_admin_format_page($format = NULL) { if (!isset($format->name)) { drupal_set_title(t("Add input format")); $format = (object)array('name' => '', 'roles' => '', 'format' => ''); } - else { - drupal_set_title(t("%format input format", array('%format' => $format->name))); - } return drupal_get_form('filter_admin_format_form', $format); } Index: modules/filter/filter.module =================================================================== RCS file: /cvs/drupal/drupal/modules/filter/filter.module,v retrieving revision 1.198 diff -u -p -r1.198 filter.module --- modules/filter/filter.module 20 Dec 2007 21:55:57 -0000 1.198 +++ modules/filter/filter.module 20 Dec 2007 23:52:38 -0000 @@ -102,6 +102,8 @@ function filter_menu() { ); $items['admin/settings/filters/%filter_format'] = array( 'type' => MENU_CALLBACK, + 'title callback' => 'filter_admin_format_title', + 'title arguments' => array(3), 'page callback' => 'filter_admin_format_page', 'page arguments' => array(3), 'access arguments' => array('administer filters'), @@ -138,6 +140,13 @@ function filter_format_load($arg) { } /** + * Display a filter format form title. + */ +function filter_admin_format_title($format) { + return $format->name; +} + +/** * Implementation of hook_perm(). */ function filter_perm() { Index: modules/node/node.module =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.module,v retrieving revision 1.930 diff -u -p -r1.930 node.module --- modules/node/node.module 20 Dec 2007 09:20:41 -0000 1.930 +++ modules/node/node.module 20 Dec 2007 23:52:39 -0000 @@ -1445,7 +1445,8 @@ function node_menu() { ); } $items['node/%node'] = array( - 'title' => 'View', + 'title callback' => 'node_page_title', + 'title arguments' => array(1), 'page callback' => 'node_page_view', 'page arguments' => array(1), 'access callback' => 'node_access', @@ -1513,6 +1514,13 @@ function node_menu() { return $items; } +/** + * Title callback. + */ +function node_page_title($node) { + return $node->title; +} + function node_init() { drupal_add_css(drupal_get_path('module', 'node') .'/node.css'); } Index: modules/node/node.pages.inc =================================================================== RCS file: /cvs/drupal/drupal/modules/node/node.pages.inc,v retrieving revision 1.19 diff -u -p -r1.19 node.pages.inc --- modules/node/node.pages.inc 20 Dec 2007 09:20:41 -0000 1.19 +++ modules/node/node.pages.inc 20 Dec 2007 23:52:39 -0000 @@ -401,7 +401,6 @@ function node_preview($node) { $output = theme('node_preview', $cloned_node); } drupal_set_title(t('Preview')); - drupal_set_breadcrumb(array(l(t('Home'), NULL), l(t('Create content'), 'node/add'), l(t('Submit @name', array('@name' => node_get_types('name', $node))), 'node/add/'. $node->type))); return $output; } Index: modules/user/user.module =================================================================== RCS file: /cvs/drupal/drupal/modules/user/user.module,v retrieving revision 1.877 diff -u -p -r1.877 user.module --- modules/user/user.module 20 Dec 2007 21:59:17 -0000 1.877 +++ modules/user/user.module 20 Dec 2007 23:52:39 -0000 @@ -1028,6 +1028,8 @@ function user_menu() { $items['user/%user_current'] = array( 'title' => 'My account', + 'title callback' => 'user_page_title', + 'title arguments' => array(1), 'page callback' => 'user_view', 'page arguments' => array(1), 'access callback' => 'user_view_access', @@ -1151,6 +1153,16 @@ function user_current_to_arg($arg) { } /** + * Menu item title callback - use the user name if it's not the current user. + */ +function user_page_title($account) { + if ($account->uid == $GLOBALS['user']->uid) { + return t('My account'); + } + return $account->name; +} + +/** * Accepts an user object, $account, or a DA name and returns an associative * array of modules and DA names. Called at external login. */