Index: includes/locale.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/locale.inc,v
retrieving revision 1.254
diff -u -p -r1.254 locale.inc
--- includes/locale.inc	1 May 2010 08:12:22 -0000	1.254
+++ includes/locale.inc	3 May 2010 10:48:12 -0000
@@ -7,6 +7,32 @@
  */
 
 /**
+ * The language is determined using a URL language indicator:
+ * path prefix or domain according to the configuration.
+ */
+define('LOCALE_LANGUAGE_NEGOTIATION_URL', 'locale-url');
+
+/**
+ * The language is set based on the browser language settings.
+ */
+define('LOCALE_LANGUAGE_NEGOTIATION_BROWSER', 'locale-browser');
+
+/**
+ * The language is determined using the current interface language.
+ */
+define('LOCALE_LANGUAGE_NEGOTIATION_INTERFACE', 'locale-interface');
+
+/**
+ * The language is set based on the user language settings.
+ */
+define('LOCALE_LANGUAGE_NEGOTIATION_USER', 'locale-user');
+
+/**
+ * The language is set based on the request/session parameters.
+ */
+define('LOCALE_LANGUAGE_NEGOTIATION_SESSION', 'locale-session');
+
+/**
  * Regular expression pattern used to localize JavaScript strings.
  */
 define('LOCALE_JS_STRING', '(?:(?:\'(?:\\\\\'|[^\'])*\'|"(?:\\\\"|[^"])*")(?:\s*\+\s*)?)+');
@@ -151,25 +177,27 @@ function locale_language_from_session($l
 function locale_language_from_url($languages) {
   $language_url = FALSE;
 
-  switch (variable_get('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX)) {
-    case LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX:
-      // $_GET['q'] might not be available at this time, because
-      // path initialization runs after the language bootstrap phase.
-      list($language, $_GET['q']) = language_url_split_prefix(isset($_GET['q']) ? $_GET['q'] : NULL, $languages);
-      if ($language !== FALSE) {
-        $language_url = $language->language;
-      }
-      break;
-
-    case LOCALE_LANGUAGE_NEGOTIATION_URL_DOMAIN:
-      foreach ($languages as $language) {
-        $host = parse_url($language->domain, PHP_URL_HOST);
-        if ($host && ($_SERVER['HTTP_HOST'] == $host)) {
+  if (language_negotiation_get_any(LOCALE_LANGUAGE_NEGOTIATION_URL)) {
+    switch (variable_get('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX)) {
+      case LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX:
+        // $_GET['q'] might not be available at this time, because
+        // path initialization runs after the language bootstrap phase.
+        list($language, $_GET['q']) = language_url_split_prefix(isset($_GET['q']) ? $_GET['q'] : NULL, $languages);
+        if ($language !== FALSE) {
           $language_url = $language->language;
-          break;
         }
-      }
-      break;
+        break;
+
+      case LOCALE_LANGUAGE_NEGOTIATION_URL_DOMAIN:
+        foreach ($languages as $language) {
+          $host = parse_url($language->domain, PHP_URL_HOST);
+          if ($host && ($_SERVER['HTTP_HOST'] == $host)) {
+            $language_url = $language->language;
+            break;
+          }
+        }
+        break;
+    }
   }
 
   return $language_url;
Index: modules/locale/locale.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v
retrieving revision 1.292
diff -u -p -r1.292 locale.module
--- modules/locale/locale.module	29 Apr 2010 05:15:43 -0000	1.292
+++ modules/locale/locale.module	3 May 2010 10:48:12 -0000
@@ -12,32 +12,6 @@
  *   Gettext portable object files are supported.
  */
 
-/**
- * The language is determined using a URL language indicator:
- * path prefix or domain according to the configuration.
- */
-define('LOCALE_LANGUAGE_NEGOTIATION_URL', 'locale-url');
-
-/**
- * The language is set based on the browser language settings.
- */
-define('LOCALE_LANGUAGE_NEGOTIATION_BROWSER', 'locale-browser');
-
-/**
- * The language is determined using the current interface language.
- */
-define('LOCALE_LANGUAGE_NEGOTIATION_INTERFACE', 'locale-interface');
-
-/**
- * The language is set based on the user language settings.
- */
-define('LOCALE_LANGUAGE_NEGOTIATION_USER', 'locale-user');
-
-/**
- * The language is set based on the request/session parameters.
- */
-define('LOCALE_LANGUAGE_NEGOTIATION_SESSION', 'locale-session');
-
 // ---------------------------------------------------------------------------------
 // Hook implementations
 
Index: modules/locale/locale.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.test,v
retrieving revision 1.70
diff -u -p -r1.70 locale.test
--- modules/locale/locale.test	28 Apr 2010 05:12:43 -0000	1.70
+++ modules/locale/locale.test	3 May 2010 10:48:49 -0000
@@ -1170,10 +1170,11 @@ class LocaleLanguageSwitchingFunctionalT
     );
     $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
 
-    // Set language negotiation.
-    drupal_load('module', 'locale');
-    include_once DRUPAL_ROOT . '/includes/language.inc';
-    language_negotiation_set($language_type, locale_language_negotiation_info());
+    // Enable path language prefixes.
+    $edit = array(
+      'language[enabled][locale-url]' => '1',
+    );
+    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
 
     // Assert that the language switching block is displayed on the frontpage.
     $this->drupalGet('');
@@ -1451,9 +1452,17 @@ class LocalePathFunctionalTest extends D
     );
     $this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language'));
 
-    // Set language negotiation.
-    drupal_load('module', 'locale');
-    variable_set('language_negotiation_' . LANGUAGE_TYPE_CONTENT, locale_language_negotiation_info());
+    // Check that the "xx" front page is not available when path prefixes are
+    // not enabled yet.
+    $this->drupalPost('admin/config/regional/language/configure', array(), t('Save settings'));
+    $this->drupalGet($prefix);
+    $this->assertResponse(404, t('The "xx" front page is not available yet.'));
+
+    // Enable path language prefixes.
+    $edit = array(
+      'language[enabled][locale-url]' => '1',
+    );
+    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
 
     // Create a node.
     $node = $this->drupalCreateNode(array('type' => 'page'));
@@ -1834,6 +1843,12 @@ class LocaleMultilingualFieldsFunctional
     require_once DRUPAL_ROOT . '/includes/locale.inc';
     locale_add_language('it', 'Italian', 'Italiano', LANGUAGE_LTR, '', '', TRUE, FALSE);
 
+    // Enable path language prefixes.
+    $edit = array(
+      'language[enabled][locale-url]' => '1',
+    );
+    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
+
     // Set "Basic page" content type to use multilingual support.
     $edit = array(
       'language_content_type' => 1,
Index: modules/path/path.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/path/path.test,v
retrieving revision 1.35
diff -u -p -r1.35 path.test
--- modules/path/path.test	26 Mar 2010 12:37:30 -0000	1.35
+++ modules/path/path.test	3 May 2010 10:48:12 -0000
@@ -251,10 +251,11 @@ class PathLanguageTestCase extends Drupa
 
     $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
 
-    // Set language negotiation to "Path prefix with fallback".
-    include_once DRUPAL_ROOT . '/includes/locale.inc';
-    variable_set('language_negotiation_' . LANGUAGE_TYPE_CONTENT, locale_language_negotiation_info());
-    variable_set('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX);
+    // Enable path language prefixes.
+    $edit = array(
+      'language[enabled][locale-url]' => '1',
+    );
+    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
 
     // Force inclusion of language.inc.
     drupal_language_initialize();
@@ -334,10 +335,11 @@ class PathLanguageUITestCase extends Dru
 
     $this->drupalPost('admin/config/regional/language/add', $edit, t('Add language'));
 
-    // Set language negotiation to "Path prefix with fallback".
-    include_once DRUPAL_ROOT . '/includes/locale.inc';
-    variable_set('language_negotiation_' . LANGUAGE_TYPE_CONTENT, locale_language_negotiation_info());
-    variable_set('locale_language_negotiation_url_part', LOCALE_LANGUAGE_NEGOTIATION_URL_PREFIX);
+    // Enable path language prefixes.
+    $edit = array(
+      'language[enabled][locale-url]' => '1',
+    );
+    $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
 
     // Force inclusion of language.inc.
     drupal_language_initialize();
