Index: includes/locale.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/locale.inc,v
retrieving revision 1.258
diff -u -p -r1.258 locale.inc
--- includes/locale.inc	30 Jul 2010 02:47:27 -0000	1.258
+++ includes/locale.inc	5 Oct 2010 13:19:58 -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*)?)+');
@@ -156,6 +182,10 @@ function locale_language_from_session($l
 function locale_language_from_url($languages) {
   $language_url = FALSE;
 
+  if (!language_negotiation_get_any(LOCALE_LANGUAGE_NEGOTIATION_URL)) {
+    return $language_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
Index: modules/locale/locale.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.module,v
retrieving revision 1.300
diff -u -p -r1.300 locale.module
--- modules/locale/locale.module	1 Oct 2010 15:24:18 -0000	1.300
+++ modules/locale/locale.module	5 Oct 2010 13:19:58 -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
 
@@ -533,6 +507,7 @@ function locale_entity_info_alter(&$enti
  *   specified.
  */
 function locale_language_types_info() {
+  require_once DRUPAL_ROOT . '/includes/locale.inc';
   return array(
     LANGUAGE_TYPE_INTERFACE => array(
       'name' => t('User interface text'),
Index: modules/locale/locale.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/locale/locale.test,v
retrieving revision 1.79
diff -u -p -r1.79 locale.test
--- modules/locale/locale.test	1 Sep 2010 20:08:17 -0000	1.79
+++ modules/locale/locale.test	5 Oct 2010 13:19:58 -0000
@@ -1170,10 +1170,9 @@ 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 URL language detection and selection.
+    $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('');
@@ -1452,6 +1451,12 @@ class LocalePathFunctionalTest extends D
     );
     $this->drupalPost('admin/config/regional/language/add', $edit, t('Add custom language'));
 
+    // 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 URL language detection and selection.
     $edit = array('language[enabled][locale-url]' => 1);
     $this->drupalPost('admin/config/regional/language/configure', $edit, t('Save settings'));
@@ -1835,6 +1840,10 @@ class LocaleMultilingualFieldsFunctional
     require_once DRUPAL_ROOT . '/includes/locale.inc';
     locale_add_language('it', 'Italian', 'Italiano', LANGUAGE_LTR, '', '', TRUE, FALSE);
 
+    // Enable URL language detection and selection.
+    $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,
