Index: includes/locale.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/locale.inc,v
retrieving revision 1.221
diff -u -p -r1.221 locale.inc
--- includes/locale.inc	30 Jul 2009 08:40:22 -0000	1.221
+++ includes/locale.inc	3 Aug 2009 23:08:04 -0000
@@ -89,7 +89,7 @@ function theme_locale_languages_overview
           array('data' => drupal_render($form['enabled'][$key]), 'align' => 'center'),
           drupal_render($form['site_default'][$key]),
           drupal_render($form['weight'][$key]),
-          l(t('edit'), 'admin/international/language/edit/' . $key) . (($key != 'en' && $key != $default->language) ? ' ' . l(t('delete'), 'admin/international/language/delete/' . $key) : '')
+          l(t('edit'), 'admin/config/international/language/edit/' . $key) . (($key != 'en' && $key != $default->language) ? ' ' . l(t('delete'), 'admin/config/international/language/delete/' . $key) : '')
         ),
         'class' => 'draggable'
       );
@@ -142,7 +142,7 @@ function locale_languages_overview_form_
   // Changing the language settings impacts the interface.
   cache_clear_all('*', 'cache_page', TRUE);
 
-  $form_state['redirect'] = 'admin/international/language';
+  $form_state['redirect'] = 'admin/config/international/language';
   return;
 }
 /**
@@ -345,7 +345,7 @@ function locale_languages_predefined_for
     batch_set($batch);
   }
 
-  $form_state['redirect'] = 'admin/international/language';
+  $form_state['redirect'] = 'admin/config/international/language';
   return;
 }
 
@@ -391,7 +391,7 @@ function locale_languages_edit_form_subm
     }
     variable_set('language_default', $default);
   }
-  $form_state['redirect'] = 'admin/international/language';
+  $form_state['redirect'] = 'admin/config/international/language';
   return;
 }
 /**
@@ -411,12 +411,12 @@ function locale_languages_delete_form(&$
   // Do not allow deletion of English locale.
   if ($langcode == 'en') {
     drupal_set_message(t('The English language cannot be deleted.'));
-    drupal_goto('admin/international/language');
+    drupal_goto('admin/config/international/language');
   }
 
   if (language_default('language') == $langcode) {
     drupal_set_message(t('The default language cannot be deleted.'));
-    drupal_goto('admin/international/language');
+    drupal_goto('admin/config/international/language');
   }
 
   // For other languages, warn user that data loss is ahead.
@@ -427,7 +427,7 @@ function locale_languages_delete_form(&$
   }
   else {
     $form['langcode'] = array('#type' => 'value', '#value' => $langcode);
-    return confirm_form($form, t('Are you sure you want to delete the language %name?', array('%name' => t($languages[$langcode]->name))), 'admin/international/language', t('Deleting a language will remove all interface translations associated with it, and posts in this language will be set to be language neutral. This action cannot be undone.'), t('Delete'), t('Cancel'));
+    return confirm_form($form, t('Are you sure you want to delete the language %name?', array('%name' => t($languages[$langcode]->name))), 'admin/config/international/language', t('Deleting a language will remove all interface translations associated with it, and posts in this language will be set to be language neutral. This action cannot be undone.'), t('Delete'), t('Cancel'));
   }
 }
 
@@ -460,7 +460,7 @@ function locale_languages_delete_form_su
   // Changing the language settings impacts the interface:
   cache_clear_all('*', 'cache_page', TRUE);
 
-  $form_state['redirect'] = 'admin/international/language';
+  $form_state['redirect'] = 'admin/config/international/language';
   return;
 }
 /**
@@ -500,7 +500,7 @@ function locale_languages_configure_form
 function locale_languages_configure_form_submit($form, &$form_state) {
   variable_set('language_negotiation', $form_state['values']['language_negotiation']);
   drupal_set_message(t('Language negotiation configuration saved.'));
-  $form_state['redirect'] = 'admin/international/language';
+  $form_state['redirect'] = 'admin/config/international/language';
   return;
 }
 /**
@@ -687,7 +687,7 @@ function locale_translation_filter_form_
       break;
   }
 
-  $form_state['redirect'] = 'admin/international/translate/translate';
+  $form_state['redirect'] = 'admin/config/international/translate/translate';
 }
 
 /**
@@ -777,11 +777,11 @@ function locale_translate_import_form_su
   }
   else {
     drupal_set_message(t('File to import not found.'), 'error');
-    $form_state['redirect'] = 'admin/international/translate/import';
+    $form_state['redirect'] = 'admin/config/international/translate/import';
     return;
   }
 
-  $form_state['redirect'] = 'admin/international/translate';
+  $form_state['redirect'] = 'admin/config/international/translate';
   return;
 }
 /**
@@ -886,7 +886,7 @@ function locale_translate_edit_form(&$fo
   $source = db_query('SELECT source, context, textgroup, location FROM {locales_source} WHERE lid = :lid', array(':lid' => $lid))->fetchObject();
   if (!$source) {
     drupal_set_message(t('String not found.'), 'error');
-    drupal_goto('admin/international/translate/translate');
+    drupal_goto('admin/config/international/translate/translate');
   }
 
   // Add original text to the top and some values for form altering.
@@ -1024,7 +1024,7 @@ function locale_translate_edit_form_subm
   _locale_invalidate_js();
   cache_clear_all('locale:', 'cache', TRUE);
 
-  $form_state['redirect'] = 'admin/international/translate/translate';
+  $form_state['redirect'] = 'admin/config/international/translate/translate';
   return;
 }
 /**
@@ -1053,7 +1053,7 @@ function locale_translate_delete_page($l
  */
 function locale_translate_delete_form(&$form_state, $source) {
   $form['lid'] = array('#type' => 'value', '#value' => $source->lid);
-  return confirm_form($form, t('Are you sure you want to delete the string "%source"?', array('%source' => $source->source)), 'admin/international/translate/translate', t('Deleting the string will remove all translations of this string in all languages. This action cannot be undone.'), t('Delete'), t('Cancel'));
+  return confirm_form($form, t('Are you sure you want to delete the string "%source"?', array('%source' => $source->source)), 'admin/config/international/translate/translate', t('Deleting the string will remove all translations of this string in all languages. This action cannot be undone.'), t('Delete'), t('Cancel'));
 }
 
 /**
@@ -1070,7 +1070,7 @@ function locale_translate_delete_form_su
   _locale_invalidate_js();
   cache_clear_all('locale:', 'cache', TRUE);
   drupal_set_message(t('The string has been removed.'));
-  $form_state['redirect'] = 'admin/international/translate/translate';
+  $form_state['redirect'] = 'admin/config/international/translate/translate';
 }
 /**
  * @} End of "locale-translate-delete"
@@ -2305,8 +2305,8 @@ function _locale_translate_seek() {
       array('data' => check_plain(truncate_utf8($string['source'], 150, FALSE, TRUE)) . '<br /><small>' . $string['location'] . '</small>'),
       $string['context'],
       array('data' => _locale_translate_language_list($string['languages'], $limit_language), 'align' => 'center'),
-      array('data' => l(t('edit'), "admin/international/translate/edit/$lid", array('query' => drupal_get_destination())), 'class' => 'nowrap'),
-      array('data' => l(t('delete'), "admin/international/translate/delete/$lid", array('query' => drupal_get_destination())), 'class' => 'nowrap'),
+      array('data' => l(t('edit'), "admin/config/international/translate/edit/$lid", array('query' => drupal_get_destination())), 'class' => 'nowrap'),
+      array('data' => l(t('delete'), "admin/config/international/translate/delete/$lid", array('query' => drupal_get_destination())), 'class' => 'nowrap'),
     );
   }
 
Index: modules/locale/locale.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v
retrieving revision 1.246
diff -u -p -r1.246 locale.module
--- modules/locale/locale.module	2 Aug 2009 15:44:08 -0000	1.246
+++ modules/locale/locale.module	3 Aug 2009 23:08:09 -0000
@@ -70,35 +70,35 @@ function locale_help($path, $arg) {
  */
 function locale_menu() {
   // Manage languages
-  $items['admin/international'] = array(
+  $items['admin/config/international'] = array(
    'title' => 'International',
    'description' => 'Localization and translation.',
    'position' => 'left',
    'weight' => -7,
    'page callback' => 'system_admin_menu_block_page',
    'access callback' => 'system_admin_menu_block_access',
-   'access arguments' => array('admin/international', 'access administration pages'),
+   'access arguments' => array('admin/config/international', 'access administration pages'),
   );
-  $items['admin/international/language'] = array(
+  $items['admin/config/international/language'] = array(
     'title' => 'Languages',
     'description' => 'Configure languages for content and the user interface.',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('locale_languages_overview_form'),
     'access arguments' => array('administer languages'),
   );
-  $items['admin/international/language/overview'] = array(
+  $items['admin/config/international/language/overview'] = array(
     'title' => 'List',
     'weight' => 0,
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
-  $items['admin/international/language/add'] = array(
+  $items['admin/config/international/language/add'] = array(
     'title' => 'Add language',
     'page callback' => 'locale_languages_add_screen', // two forms concatenated
     'access arguments' => array('administer languages'),
     'weight' => 5,
     'type' => MENU_LOCAL_TASK,
   );
-  $items['admin/international/language/configure'] = array(
+  $items['admin/config/international/language/configure'] = array(
     'title' => 'Configure',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('locale_languages_configure_form'),
@@ -106,41 +106,41 @@ function locale_menu() {
     'weight' => 10,
     'type' => MENU_LOCAL_TASK,
   );
-  $items['admin/international/language/edit/%'] = array(
+  $items['admin/config/international/language/edit/%'] = array(
     'title' => 'Edit language',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_languages_edit_form', 4),
+    'page arguments' => array('locale_languages_edit_form', 5),
     'access arguments' => array('administer languages'),
     'type' => MENU_CALLBACK,
   );
-  $items['admin/international/language/delete/%'] = array(
+  $items['admin/config/international/language/delete/%'] = array(
     'title' => 'Confirm',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_languages_delete_form', 4),
+    'page arguments' => array('locale_languages_delete_form', 5),
     'access arguments' => array('administer languages'),
     'type' => MENU_CALLBACK,
   );
 
   // Translation functionality
-  $items['admin/international/translate'] = array(
+  $items['admin/config/international/translate'] = array(
     'title' => 'Translate interface',
     'description' => 'Translate the built in interface and optionally other text.',
     'page callback' => 'locale_translate_overview_screen', // not a form, just a table
     'access arguments' => array('translate interface'),
   );
-  $items['admin/international/translate/overview'] = array(
+  $items['admin/config/international/translate/overview'] = array(
     'title' => 'Overview',
     'weight' => 0,
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
-  $items['admin/international/translate/translate'] = array(
+  $items['admin/config/international/translate/translate'] = array(
     'title' => 'Translate',
     'weight' => 10,
     'type' => MENU_LOCAL_TASK,
     'page callback' => 'locale_translate_seek_screen', // search results and form concatenated
     'access arguments' => array('translate interface'),
   );
-  $items['admin/international/translate/import'] = array(
+  $items['admin/config/international/translate/import'] = array(
     'title' => 'Import',
     'page callback' => 'drupal_get_form',
     'page arguments' => array('locale_translate_import_form'),
@@ -148,24 +148,24 @@ function locale_menu() {
     'weight' => 20,
     'type' => MENU_LOCAL_TASK,
   );
-  $items['admin/international/translate/export'] = array(
+  $items['admin/config/international/translate/export'] = array(
     'title' => 'Export',
     'page callback' => 'locale_translate_export_screen',  // possibly multiple forms concatenated
     'access arguments' => array('translate interface'),
     'weight' => 30,
     'type' => MENU_LOCAL_TASK,
   );
-  $items['admin/international/translate/edit/%'] = array(
+  $items['admin/config/international/translate/edit/%'] = array(
     'title' => 'Edit string',
     'page callback' => 'drupal_get_form',
-    'page arguments' => array('locale_translate_edit_form', 4),
+    'page arguments' => array('locale_translate_edit_form', 5),
     'access arguments' => array('translate interface'),
     'type' => MENU_CALLBACK,
   );
-  $items['admin/international/translate/delete/%'] = array(
+  $items['admin/config/international/translate/delete/%'] = array(
     'title' => 'Delete string',
     'page callback' => 'locale_translate_delete_page',
-    'page arguments' => array(4),
+    'page arguments' => array(5),
     'access arguments' => array('translate interface'),
     'type' => MENU_CALLBACK,
   );
@@ -286,7 +286,7 @@ function locale_form_node_type_form_alte
       '#title' => t('Multilingual support'),
       '#default_value' => variable_get('language_content_type_' . $form['#node_type']->type, 0),
       '#options' => array(t('Disabled'), t('Enabled')),
-      '#description' => t('Enable multilingual support for this content type. If enabled, a language selection field will be added to the editing form, allowing you to select from one of the <a href="!languages">enabled languages</a>. If disabled, new posts are saved with the default language. Existing content will not be affected by changing this option.', array('!languages' => url('admin/international/language'))),
+      '#description' => t('Enable multilingual support for this content type. If enabled, a language selection field will be added to the editing form, allowing you to select from one of the <a href="!languages">enabled languages</a>. If disabled, new posts are saved with the default language. Existing content will not be affected by changing this option.', array('!languages' => url('admin/config/international/language'))),
     );
   }
 }
Index: modules/locale/locale.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.test,v
retrieving revision 1.32
diff -u -p -r1.32 locale.test
--- modules/locale/locale.test	20 Jul 2009 18:51:33 -0000	1.32
+++ modules/locale/locale.test	3 Aug 2009 23:08:09 -0000
@@ -49,9 +49,9 @@ class LocaleConfigurationTest extends Dr
     $edit = array(
       'langcode' => 'fr',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add language'));
     $this->assertText('fr', t('Language added successfully.'));
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
 
     // Add custom language.
     // Code for the language.
@@ -69,15 +69,15 @@ class LocaleConfigurationTest extends Dr
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->assertText($langcode, t('Language code found.'));
     $this->assertText($name, t('Name found.'));
     $this->assertText($native, t('Native found.'));
     $this->assertText($native, t('Test language added.'));
 
     // Check if we can change the default language.
-    $path = 'admin/international/language';
+    $path = 'admin/config/international/language';
     $this->drupalGet($path);
     // Set up the raw HTML strings we need to search for.
     $elements = $this->xpath('//input[@id="edit-site-default-en"]');
@@ -89,12 +89,12 @@ class LocaleConfigurationTest extends Dr
     $this->drupalPost($path, $edit, t('Save configuration'));
     $elements = $this->xpath('//input[@id="edit-site-default-en"]');
     $this->assertTrue(isset($elements[0]) && empty($elements[0]['checked']), t('Default language updated.'));
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
 
     // Ensure we can't delete the default language.
-    $path = 'admin/international/language/delete/' . $langcode;
+    $path = 'admin/config/international/language/delete/' . $langcode;
     $this->drupalGet($path);
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->assertText(t('The default language cannot be deleted.'), t('Failed to delete the default language.'));
 
     // Check if we can disable a language.
@@ -117,33 +117,33 @@ class LocaleConfigurationTest extends Dr
     $this->clickLink(t('edit'));
     $this->assertTitle(t('Edit language | Drupal'), t('Page title is "Edit language".'));
     // Edit a language.
-    $path = 'admin/international/language/edit/' . $langcode;
+    $path = 'admin/config/international/language/edit/' . $langcode;
     $name = $this->randomName(16);
     $edit = array(
       'name' => $name,
     );
     $this->drupalPost($path, $edit, t('Save language'));
     $this->assertRaw($name, t('The language has been updated.'));
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
 
     // Ensure 'delete' link works.
-    $path = 'admin/international/language';
+    $path = 'admin/config/international/language';
     $this->drupalGet($path);
     $this->clickLink(t('delete'));
     $this->assertText(t('Are you sure you want to delete the language'), t('"delete" link is correct.'));
     // Delete the language.
-    $path = 'admin/international/language/delete/' . $langcode;
+    $path = 'admin/config/international/language/delete/' . $langcode;
     $this->drupalGet($path);
     // First test the 'cancel' link.
     $this->clickLink(t('Cancel'));
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->assertRaw($name, t('The language was not deleted.'));
     // Delete the language for real. This a confirm form, we do not need any
     // fields changed.
     $this->drupalPost($path, array(), t('Delete'));
     // We need raw here because %locale will add HTML.
     $this->assertRaw(t('The language %locale has been removed.', array('%locale' => $name)), t('The test language has been removed.'));
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
     // Reload to remove $name.
     $this->drupalGet($path);
     $this->assertNoText($langcode, t('Language code not found.'));
@@ -151,9 +151,9 @@ class LocaleConfigurationTest extends Dr
     $this->assertNoText($native, t('Native not found.'));
 
     // Ensure we can't delete the English language.
-    $path = 'admin/international/language/delete/en';
+    $path = 'admin/config/international/language/delete/en';
     $this->drupalGet($path);
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->assertText(t('The English language cannot be deleted.'), t('Failed to delete English language.'));
 
     $this->drupalLogout();
@@ -210,7 +210,7 @@ class LocaleTranslationFunctionalTest ex
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
     // Add string.
     t($name, array(), array('langcode' => $langcode));
     // Reset locale cache.
@@ -231,7 +231,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'all',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     // assertText() seems to remove the input field where $name always could be
     // found, so this is not a false assert. See how assertNoText succeeds
     // later.
@@ -241,7 +241,7 @@ class LocaleTranslationFunctionalTest ex
     $this->clickLink(t('edit'));
     // We save the lid from the path.
     $matches = array();
-    preg_match('!admin/international/translate/edit/(\d)+!', $this->getUrl(), $matches);
+    preg_match('!admin/config/international/translate/edit/(\d)+!', $this->getUrl(), $matches);
     $lid = $matches[1];
     // No t() here, it's surely not translated yet.
     $this->assertText($name, t('name found on edit screen.'));
@@ -250,23 +250,23 @@ class LocaleTranslationFunctionalTest ex
     );
     $this->drupalPost(NULL, $edit, t('Save translations'));
     $this->assertText(t('The string has been saved.'), t('The string has been saved.'));
-    $this->assertEqual($this->getUrl(), url('admin/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->assertTrue($name != $translation && t($name, array(), array('langcode' => $langcode)) == $translation, t('t() works.'));
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     // The indicator should not be here.
     $this->assertNoRaw($language_indicator, t('String is translated.'));
 
     // Try to edit a non-existent string and ensure we're redirected correctly.
     // Assuming we don't have 999,999 strings already.
     $random_lid = 999999;
-    $this->drupalGet('admin/international/translate/edit/' . $random_lid);
+    $this->drupalGet('admin/config/international/translate/edit/' . $random_lid);
     $this->assertText(t('String not found'), t('String not found.'));
-    $this->assertEqual($this->getUrl(), url('admin/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->drupalLogout();
 
     // Delete the language.
     $this->drupalLogin($admin_user);
-    $path = 'admin/international/language/delete/' . $langcode;
+    $path = 'admin/config/international/language/delete/' . $langcode;
     // This a confirm form, we do not need any fields changed.
     $this->drupalPost($path, array(), t('Delete'));
     // We need raw here because %locale will add HTML.
@@ -286,22 +286,22 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'all',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     // Assume this is the only result, given the random name.
     $this->clickLink(t('delete'));
     $this->assertText(t('Are you sure you want to delete the string'), t('"delete" link is correct.'));
     // Delete the string.
-    $path = 'admin/international/translate/delete/' . $lid;
+    $path = 'admin/config/international/translate/delete/' . $lid;
     $this->drupalGet($path);
     // First test the 'cancel' link.
     $this->clickLink(t('Cancel'));
-    $this->assertEqual($this->getUrl(), url('admin/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->assertRaw($name, t('The string was not deleted.'));
     // Delete the name string.
-    $this->drupalPost('admin/international/translate/delete/' . $lid, array(), t('Delete'));
+    $this->drupalPost('admin/config/international/translate/delete/' . $lid, array(), t('Delete'));
     $this->assertText(t('The string has been removed.'), t('The string has been removed message.'));
-    $this->assertEqual($this->getUrl(), url('admin/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/translate/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertNoText($name, t('Search now can not find the name.'));
   }
 
@@ -342,7 +342,7 @@ class LocaleTranslationFunctionalTest ex
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
     // Add string.
     t($name, array(), array('langcode' => $langcode));
     // Reset locale cache.
@@ -352,10 +352,10 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'all',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     // Find the edit path.
     $content = $this->drupalGetContent();
-    $this->assertTrue(preg_match('@(admin/international/translate/edit/[0-9]+)@', $content, $matches), t('Found the edit path.'));
+    $this->assertTrue(preg_match('@(admin/config/international/translate/edit/[0-9]+)@', $content, $matches), t('Found the edit path.'));
     $path = $matches[0];
     foreach ($bad_translations as $key => $translation) {
       $edit = array(
@@ -403,7 +403,7 @@ class LocaleTranslationFunctionalTest ex
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
     // Add string.
     t($name, array(), array('langcode' => $langcode));
     // Reset locale cache.
@@ -418,7 +418,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'all',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     // assertText() seems to remove the input field where $name always could be
     // found, so this is not a false assert. See how assertNoText succeeds
     // later.
@@ -432,7 +432,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'translated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertText(t('No strings found for your search.'), t("Search didn't find the string."));
 
     // Ensure untranslated string appears if searching on 'only untranslated
@@ -443,7 +443,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'untranslated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertNoText(t('No strings found for your search.'), t('Search found the string.'));
 
     // Add translation.
@@ -451,7 +451,7 @@ class LocaleTranslationFunctionalTest ex
     $this->clickLink(t('edit'));
     // We save the lid from the path.
     $matches = array();
-    preg_match('!admin/international/translate/edit/(\d)+!', $this->getUrl(), $matches);
+    preg_match('!admin/config/international/translate/edit/(\d)+!', $this->getUrl(), $matches);
     $lid = $matches[1];
     $edit = array(
       "translations[$langcode]" => $translation,
@@ -466,7 +466,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'translated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertNoText(t('No strings found for your search.'), t('Search found the translation.'));
 
     // Ensure translated source string doesn't appear if searching on 'only
@@ -477,7 +477,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'untranslated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertText(t('No strings found for your search.'), t("Search didn't find the source string."));
 
     // Ensure translated string doesn't appear if searching on 'only
@@ -488,7 +488,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'untranslated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertText(t('No strings found for your search.'), t("Search didn't find the translation."));
 
     // Ensure translated string does appear if searching on the custom language.
@@ -498,7 +498,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'all',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertNoText(t('No strings found for your search.'), t('Search found the translation.'));
 
     // Ensure translated string doesn't appear if searching on English.
@@ -508,7 +508,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'all',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertText(t('No strings found for your search.'), t("Search didn't find the translation."));
 
     // Search for a string that isn't in the system.
@@ -519,7 +519,7 @@ class LocaleTranslationFunctionalTest ex
       'translation' => 'all',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertText(t('No strings found for your search.'), t("Search didn't find the invalid string."));
   }
 }
@@ -564,7 +564,7 @@ class LocaleImportFunctionalTest extends
     $this->assertRaw(t('The translation was successfully imported. There are %number newly created translated strings, %update strings were updated and %delete strings were removed.', array('%number' => 7, '%update' => 0, '%delete' => 0)), t('The translation file was successfully imported.'));
 
     // Ensure we were redirected correctly.
-    $this->assertEqual($this->getUrl(), url('admin/international/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/translate', array('absolute' => TRUE)), t('Correct page redirection.'));
 
 
     // Try importing a .po file with invalid tags in the default text group.
@@ -590,12 +590,12 @@ class LocaleImportFunctionalTest extends
 
     // Try importing a .po file which doesn't exist.
     $name = $this->randomName(16);
-    $this->drupalPost('admin/international/translate/import', array(
+    $this->drupalPost('admin/config/international/translate/import', array(
       'langcode' => 'fr',
       'files[file]' => $name,
       'group' => 'custom',
     ), t('Import'));
-    $this->assertEqual($this->getUrl(), url('admin/international/translate/import', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/translate/import', array('absolute' => TRUE)), t('Correct page redirection.'));
     $this->assertText(t('File to import not found.'), t('File to import not found message.'));
 
 
@@ -615,7 +615,7 @@ class LocaleImportFunctionalTest extends
       'translation' => 'translated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertText(t('No strings found for your search.'), t('String not overwritten by imported string.'));
 
 
@@ -635,7 +635,7 @@ class LocaleImportFunctionalTest extends
       'translation' => 'translated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertNoText(t('No strings found for your search.'), t('String overwritten by imported string.'));
   }
 
@@ -661,7 +661,7 @@ class LocaleImportFunctionalTest extends
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
 
     // Ensure the translation file was automatically imported when language was
     // added.
@@ -674,7 +674,7 @@ class LocaleImportFunctionalTest extends
       'translation' => 'translated',
       'group' => 'all',
     );
-    $this->drupalPost('admin/international/translate/translate', $search, t('Filter'));
+    $this->drupalPost('admin/config/international/translate/translate', $search, t('Filter'));
     $this->assertNoText(t('No strings found for your search.'), t('String successfully imported.'));
   }
 
@@ -704,7 +704,7 @@ class LocaleImportFunctionalTest extends
     $name = tempnam(file_directory_temp(), "po_");
     file_put_contents($name, $contents);
     $options['files[file]'] = $name;
-    $this->drupalPost('admin/international/translate/import', $options, t('Import'));
+    $this->drupalPost('admin/config/international/translate/import', $options, t('Import'));
     unlink($name);
   }
 
@@ -850,14 +850,14 @@ class LocaleExportFunctionalTest extends
     // This will also automatically enable the 'fr' language.
     $name = tempnam(file_directory_temp(), "po_");
     file_put_contents($name, $this->getPoFile());
-    $this->drupalPost('admin/international/translate/import', array(
+    $this->drupalPost('admin/config/international/translate/import', array(
       'langcode' => 'fr',
       'files[file]' => $name,
     ), t('Import'));
     unlink($name);
 
     // Get the French translations.
-    $this->drupalPost('admin/international/translate/export', array(
+    $this->drupalPost('admin/config/international/translate/export', array(
       'langcode' => 'fr',
     ), t('Export'));
 
@@ -875,7 +875,7 @@ class LocaleExportFunctionalTest extends
     // There are two 'Export' buttons on this page, but it somehow works.  It'd
     // be better if we could use the submit button id like documented but that
     // doesn't work.
-    $this->drupalPost('admin/international/translate/export', array(), t('Export'));
+    $this->drupalPost('admin/config/international/translate/export', array(), t('Export'));
     // Ensure we have a translation file.
     $this->assertRaw('# LANGUAGE translation of PROJECT', t('Exported translation template file.'));
   }
@@ -949,13 +949,13 @@ class LocaleUninstallFunctionalTest exte
     // Build the JavaScript translation file for French.
     $user = $this->drupalCreateUser(array('translate interface', 'access administration pages'));
     $this->drupalLogin($user);
-    $this->drupalGet('admin/international/translate/translate');
+    $this->drupalGet('admin/config/international/translate/translate');
     $string = db_query('SELECT min(lid) AS lid FROM {locales_source} WHERE location LIKE :location AND textgroup = :textgroup', array(
       ':location' => '%.js%',
       ':textgroup' => 'default',
     ))->fetchObject();
     $edit = array('translations[fr]' => 'french translation');
-    $this->drupalPost('admin/international/translate/edit/' . $string->lid, $edit, t('Save translations'));
+    $this->drupalPost('admin/config/international/translate/edit/' . $string->lid, $edit, t('Save translations'));
     _locale_rebuild_js('fr');
     $file = db_query('SELECT javascript FROM {languages} WHERE language = :language', array(':language' => 'fr'))->fetchObject();
     $js_file = file_create_path(variable_get('locale_js_directory', 'languages')) . '/fr_' . $file->javascript . '.js';
@@ -1063,14 +1063,14 @@ class LanguageSwitchingFunctionalTest ex
     $edit = array(
       'langcode' => 'fr',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add language'));
 
     // Set language negotiation.
     $edit = array(
       'language_negotiation' => LANGUAGE_NEGOTIATION_PATH_DEFAULT,
     );
-    $this->drupalPost('admin/international/language/configure', $edit, t('Save settings'));
-    $this->assertEqual($this->getUrl(), url('admin/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
+    $this->drupalPost('admin/config/international/language/configure', $edit, t('Save settings'));
+    $this->assertEqual($this->getUrl(), url('admin/config/international/language', array('absolute' => TRUE)), t('Correct page redirection.'));
 
     // Assert that the language switching block is displayed on the frontpage.
     $this->drupalGet('');
@@ -1152,7 +1152,7 @@ class LocaleUserLanguageFunctionalTest e
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
 
     // Add custom language and disable it.
     // Code for the language.
@@ -1170,12 +1170,12 @@ class LocaleUserLanguageFunctionalTest e
       'prefix' => $prefix_disabled,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
     // Disable the language.
     $edit = array(
       'enabled[' . $langcode_disabled . ']' => FALSE,
     );
-    $this->drupalPost('admin/international/language', $edit, t('Save configuration'));
+    $this->drupalPost('admin/config/international/language', $edit, t('Save configuration'));
     $this->drupalLogout();
 
     // Login as normal user and edit account settings.
@@ -1245,13 +1245,13 @@ class LocalePathFunctionalTest extends D
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
 
     // Set language negotiation.
     $edit = array(
       'language_negotiation' => LANGUAGE_NEGOTIATION_PATH_DEFAULT,
     );
-    $this->drupalPost('admin/international/language/configure', $edit, t('Save settings'));
+    $this->drupalPost('admin/config/international/language/configure', $edit, t('Save settings'));
 
     // Create a node.
     $node = $this->drupalCreateNode(array('type' => 'page'));
@@ -1331,7 +1331,7 @@ class LocaleContentFunctionalTest extend
       'prefix' => $prefix,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
 
     // Add disabled custom language.
     // Code for the language.
@@ -1349,9 +1349,9 @@ class LocaleContentFunctionalTest extend
       'prefix' => $prefix_disabled,
       'direction' => '0',
     );
-    $this->drupalPost('admin/international/language/add', $edit, t('Add custom language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add custom language'));
     // Disable second custom language.
-    $path = 'admin/international/language';
+    $path = 'admin/config/international/language';
     $edit = array(
       'enabled[' . $langcode_disabled . ']' => FALSE,
     );
@@ -1361,7 +1361,7 @@ class LocaleContentFunctionalTest extend
     $edit = array(
       'language_negotiation' => LANGUAGE_NEGOTIATION_PATH_DEFAULT,
     );
-    $this->drupalPost('admin/international/language/configure', $edit, t('Save settings'));
+    $this->drupalPost('admin/config/international/language/configure', $edit, t('Save settings'));
 
     // Set page content type to use multilingual support.
     $this->drupalGet('admin/structure/node-type/page');
Index: modules/path/path.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.test,v
retrieving revision 1.16
diff -u -p -r1.16 path.test
--- modules/path/path.test	14 Jul 2009 10:22:17 -0000	1.16
+++ modules/path/path.test	3 Aug 2009 23:08:09 -0000
@@ -179,7 +179,7 @@ class PathLanguageTestCase extends Drupa
     $edit = array();
     $edit['langcode'] = 'fr';
 
-    $this->drupalPost('admin/international/language/add', $edit, t('Add language'));
+    $this->drupalPost('admin/config/international/language/add', $edit, t('Add language'));
 
     // Set language negotiation to "Path prefix with fallback".
     variable_set('language_negotiation', LANGUAGE_NEGOTIATION_PATH);
Index: modules/system/system.admin.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.admin.inc,v
retrieving revision 1.166
diff -u -p -r1.166 system.admin.inc
--- modules/system/system.admin.inc	31 Jul 2009 11:20:42 -0000	1.166
+++ modules/system/system.admin.inc	3 Aug 2009 23:08:13 -0000
@@ -59,6 +59,51 @@ function system_main_admin_page($arg = N
   }
 }
 
+/**
+ * Menu callback; Provide the administration overview page.
+ */
+function system_admin_config_page() {
+  // Check for status report errors.
+  if (system_status(TRUE) && user_access('administer site configuration')) {
+    drupal_set_message(t('One or more problems were detected with your Drupal installation. Check the <a href="@status">status report</a> for more information.', array('@status' => url('admin/reports/status'))), 'error');
+  }
+  $blocks = array();
+  if ($admin = db_query("SELECT menu_name, mlid FROM {menu_links} WHERE link_path = 'admin/config' AND module = 'system'")->fetchAssoc()) {
+    $result = db_query("
+      SELECT m.*, ml.*
+      FROM {menu_links} ml
+      INNER JOIN {menu_router} m ON ml.router_path = m.path
+      WHERE ml.link_path != 'admin/help' AND menu_name = :menu_name AND ml.plid = :mlid AND hidden = 0", $admin, array('fetch' => PDO::FETCH_ASSOC));
+    foreach ($result as $item) {
+      _menu_link_translate($item);
+      if (!$item['access']) {
+        continue;
+      }
+      // The link 'description' either derived from the hook_menu 'description'
+      // or entered by the user via menu module is saved as the title attribute.
+      if (!empty($item['localized_options']['attributes']['title'])) {
+        $item['description'] = $item['localized_options']['attributes']['title'];
+      }
+      $block = $item;
+      $block['content'] = '';
+      if ($item['block_callback'] && function_exists($item['block_callback'])) {
+        $function = $item['block_callback'];
+        $block['content'] .= $function();
+      }
+      $block['content'] .= theme('admin_block_content', system_admin_menu_block($item));
+      // Prepare for sorting as in function _menu_tree_check_access().
+      // The weight is offset so it is always positive, with a uniform 5-digits.
+      $blocks[(50000 + $item['weight']) . ' ' . $item['title'] . ' ' . $item['mlid']] = $block;
+    }
+  }
+  if ($blocks) {
+    ksort($blocks);
+    return theme('admin_page', $blocks);
+  }
+  else {
+    return t('You do not have any administrative items.');
+  }
+}
 
 /**
  * Provide a single block from the administration menu as a page.
Index: modules/system/system.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/system/system.module,v
retrieving revision 1.733
diff -u -p -r1.733 system.module
--- modules/system/system.module	31 Jul 2009 19:01:02 -0000	1.733
+++ modules/system/system.module	3 Aug 2009 23:08:17 -0000
@@ -529,6 +529,13 @@ function system_menu() {
     'access callback' => 'system_admin_menu_block_access',
     'access arguments' => array('admin/settings', 'access administration pages'),
   );
+  $items['admin/config'] = array(
+    'title' => 'Configuration and modules',
+    'page callback' => 'system_admin_config_page',
+    'position' => 'right',
+    'access callback' => array('system_admin_menu_block_access'),
+    'access arguments' => array('admin/config', 'access administration pages'),
+  );
   $items['admin/structure'] = array(
     'title' => 'Structure',
     'description' => 'Control how your site looks and feels.',
Index: modules/translation/translation.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/translation/translation.test,v
retrieving revision 1.14
diff -u -p -r1.14 translation.test
--- modules/translation/translation.test	20 Jul 2009 18:51:34 -0000	1.14
+++ modules/translation/translation.test	3 Aug 2009 23:08:20 -0000
@@ -92,13 +92,13 @@ class TranslationTestCase extends Drupal
    */
   function addLanguage($language_code) {
     // Check to make sure that language has not already been installed.
-    $this->drupalGet('admin/international/language');
+    $this->drupalGet('admin/config/international/language');
 
     if (strpos($this->drupalGetContent(), 'enabled[' . $language_code . ']') === FALSE) {
       // Doesn't have language installed so add it.
       $edit = array();
       $edit['langcode'] = $language_code;
-      $this->drupalPost('admin/international/language/add', $edit, t('Add language'));
+      $this->drupalPost('admin/config/international/language/add', $edit, t('Add language'));
 
       // Make sure we're not using a stale list.
       drupal_static_reset('language_list');
