Index: includes/bootstrap.inc
===================================================================
RCS file: /cvs/drupal/drupal/includes/bootstrap.inc,v
retrieving revision 1.421
diff -u -p -r1.421 bootstrap.inc
--- includes/bootstrap.inc	27 Sep 2010 01:14:10 -0000	1.421
+++ includes/bootstrap.inc	29 Sep 2010 01:02:11 -0000
@@ -2386,6 +2386,12 @@ function language_list($field = 'languag
   if (!isset($languages)) {
     if (drupal_multilingual() || module_exists('locale')) {
       $languages['language'] = db_query('SELECT * FROM {languages} ORDER BY weight ASC, name ASC')->fetchAllAssoc('language');
+      // Users cannot uninstall the native English language. However, we allow
+      // it to be hidden from the installed languages. Therefore, at least one
+      // other language must be enabled then.
+      if (!$languages['language']['en']->enabled && !variable_get('language_native_enabled', TRUE)) {
+        unset($languages['language']['en']);
+      }
     }
     else {
       // No locale module, so use the default language only.
Index: modules/field/field.multilingual.inc
===================================================================
RCS file: /cvs/drupal/drupal/modules/field/field.multilingual.inc,v
retrieving revision 1.13
diff -u -p -r1.13 field.multilingual.inc
--- modules/field/field.multilingual.inc	31 Aug 2010 15:02:39 -0000	1.13
+++ modules/field/field.multilingual.inc	29 Sep 2010 00:28:38 -0000
@@ -153,8 +153,7 @@ function _field_language_suggestion($ava
  *   An array of language codes.
  */
 function field_content_languages() {
-  $languages = language_list('enabled');
-  return array_keys($languages[1] + array(LANGUAGE_NONE => NULL));
+  return array_keys(language_list() + array(LANGUAGE_NONE => NULL));
 }
 
 /**
Index: modules/translation/translation.module
===================================================================
RCS file: /cvs/drupal/drupal/modules/translation/translation.module,v
retrieving revision 1.84
diff -u -p -r1.84 translation.module
--- modules/translation/translation.module	9 Sep 2010 23:01:48 -0000	1.84
+++ modules/translation/translation.module	29 Sep 2010 00:28:38 -0000
@@ -126,6 +126,10 @@ function translation_form_node_type_form
 function translation_form_node_form_alter(&$form, &$form_state) {
   if (translation_supported_type($form['#node']->type)) {
     $node = $form['#node'];
+    // Allow translators to enter content in disabled languages.
+    if (user_access('translate content')) {
+      $form['language']['#options'] = array(LANGUAGE_NONE => t('Language neutral')) + locale_language_list('name', TRUE);
+    }
     if (!empty($node->translation_source)) {
       // We are creating a translation. Add values and lock language field.
       $form['translation_source'] = array('#type' => 'value', '#value' => $node->translation_source);
Index: modules/translation/translation.test
===================================================================
RCS file: /cvs/drupal/drupal/modules/translation/translation.test,v
retrieving revision 1.29
diff -u -p -r1.29 translation.test
--- modules/translation/translation.test	5 Aug 2010 23:53:39 -0000	1.29
+++ modules/translation/translation.test	29 Sep 2010 00:46:35 -0000
@@ -83,6 +83,23 @@ class TranslationTestCase extends Drupal
     $edit['translation[status]'] = FALSE;
     $this->drupalPost('node/' . $node_translation->nid . '/edit', $edit, t('Save'));
     $this->assertRaw(t('Basic page %title has been updated.', array('%title' => $node_translation_title)), t('Translated node updated.'));
+
+    $this->drupalLogin($admin_user);
+
+    // Disable Spanish and confirm that links to the Spanish translations do
+    // not appear on the English node.
+    $edit = array();
+    $edit['enabled[es]'] = FALSE;
+    $this->drupalPost('admin/config/regional/language', $edit, t('Save configuration'));
+    $this->drupalGet('node/' . $node->nid);
+    $languages = language_list();
+    $this->assertNoText($languages['es']->native);
+
+    $this->drupalLogin($translator);
+
+    // Confirm that Spanish is still an option for translators when creating nodes.
+    $this->drupalGet('node/add/page');
+    $this->assertRaw('value="' . 'es' .'"', t('Spanish is available in language selection'));
   }
 
   /**
