diff --git a/core/modules/language/config/language.mappings.yml b/core/modules/language/config/language.mappings.yml
index f7fc321..c2022f1 100644
--- a/core/modules/language/config/language.mappings.yml
+++ b/core/modules/language/config/language.mappings.yml
@@ -6,7 +6,5 @@ zh: 'zh-hans' # Default Chinese to simplified script
 zh-tw: 'zh-hant' # Taiwan Chinese in traditional script
 zh-hk: 'zh-hant' # Hong Kong Chinese in traditional script
 zh-mo: 'zh-hant' # Macao Chinese in traditional script
-zh-cht: 'zh-hant' # traditional Chinese
 zh-cn: 'zh-hans' # PRC Mainland Chinese in simplified script
 zh-sg: 'zh-hans' # Singapore Chinese in simplified script
-zh-chs: 'zh-hans' # simplified Chinese
diff --git a/core/modules/language/language.admin.inc b/core/modules/language/language.admin.inc
index 47eea47..5631d64 100644
--- a/core/modules/language/language.admin.inc
+++ b/core/modules/language/language.admin.inc
@@ -491,6 +491,11 @@ function language_negotiation_configure_form_submit($form, &$form_state) {
 
 /**
  * Builds the browser language negotiation method configuration form.
+ *
+ * @see language_negotiation_configure_browser_form_validate()
+ * @see language_negotiation_configure_browser_form_submit()
+ *
+ * @ingroup forms
  */
 function language_negotiation_configure_browser_form($form, &$form_state) {
   $form = array();
@@ -512,7 +517,7 @@ function language_negotiation_configure_browser_form($form, &$form_state) {
   else {
     $language_options = array(
       t('Existing languages') => $existing_languages,
-      t('Languages not yet added') => language_admin_predefined_list()
+      t('Languages not yet added') => language_admin_predefined_list(),
     );
   }
 
@@ -525,12 +530,16 @@ function language_negotiation_configure_browser_form($form, &$form_state) {
   foreach ($mappings as $browser_langcode => $drupal_langcode) {
     $form['mappings'][$browser_langcode] = array(
       'browser_langcode' => array(
+        '#title' => t('Browser language code'),
+        '#title_display' => 'invisible',
         '#type' => 'textfield',
         '#default_value' => $browser_langcode,
         '#size' => 20,
         '#required' => TRUE,
       ),
       'drupal_langcode' => array(
+        '#title' => t('Site language'),
+        '#title_display' => 'invisible',
         '#type' => 'select',
         '#options' => $language_options,
         '#default_value' => $drupal_langcode,
@@ -555,7 +564,7 @@ function language_negotiation_configure_browser_form($form, &$form_state) {
   );
   $form['new_mapping']['drupal_langcode'] = array(
     '#type' => 'select',
-    '#title' => t('Drupal language'),
+    '#title' => t('Site language'),
     '#options' => $language_options,
     '#default_value' => '',
   );
@@ -589,9 +598,6 @@ function theme_language_negotiation_configure_browser_form_table($variables) {
     $links['delete'] = array(
       'title' => t('Delete'),
       'href' => "admin/config/regional/language/detection/browser/delete/$key",
-      'attributes' => array(
-        'class' => array('image-style-link'),
-      ),
     );
     $row[] = array(
       'data' => array(
@@ -605,7 +611,7 @@ function theme_language_negotiation_configure_browser_form_table($variables) {
 
   $header = array(
     t('Browser language code'),
-    t('Drupal language'),
+    t('Site language'),
     t('Operations'),
   );
 
@@ -613,7 +619,8 @@ function theme_language_negotiation_configure_browser_form_table($variables) {
     '#theme' => 'table',
     '#header' => $header,
     '#rows' => $rows,
-    '#attributes' => array('id' => 'lang-neg-browser'),
+    '#empty' => t('No browser language mappings available.'),
+    '#attributes' => array('id' => 'language-negotiation-browser'),
   );
   $output = drupal_render($table);
 
@@ -622,6 +629,8 @@ function theme_language_negotiation_configure_browser_form_table($variables) {
 
 /**
  * Browser language negotiation form validation.
+ *
+ * @see language_negotiation_configure_browser_form_submit()
  */
 function language_negotiation_configure_browser_form_validate($form, &$form_state) {
   // Array to check if all browser language codes are unique.
@@ -648,10 +657,10 @@ function language_negotiation_configure_browser_form_validate($form, &$form_stat
   if (!empty($data['browser_langcode'])) {
     // Make sure browser_langcode is unique.
     if (array_key_exists($data['browser_langcode'], $unique_values)) {
-      form_set_error('mappings][' . $key . '][browser_langcode', t('Browser language codes must be unique.'));
+      form_set_error('mappings][new_mapping][browser_langcode', t('Browser language codes must be unique.'));
     }
     elseif (preg_match('/[^a-z\-]/', $data['browser_langcode'])) {
-      form_set_error('mappings][' . $key . '][browser_langcode', t('Browser language codes can only contain lowercase letters and a hyphen(-).'));
+      form_set_error('mappings][new_mapping][browser_langcode', t('Browser language codes can only contain lowercase letters and a hyphen(-).'));
     }
     $unique_values[$data['browser_langcode']] = $data['drupal_langcode'];
   }
@@ -666,6 +675,7 @@ function language_negotiation_configure_browser_form_submit($form, &$form_state)
   $mappings = $form_state['mappings'];
   if (!empty($mappings)) {
     language_set_browser_drupal_langcode_mappings($mappings);
+    drupal_set_message(t('The configuration options have been saved.'));
   }
   $form_state['redirect'] = 'admin/config/regional/language/detection';
 }
diff --git a/core/modules/language/language.module b/core/modules/language/language.module
index f092c86..e48b153 100644
--- a/core/modules/language/language.module
+++ b/core/modules/language/language.module
@@ -41,7 +41,7 @@ function language_help($path, $arg) {
       return $output;
 
     case 'admin/config/regional/language/detection/browser':
-      $output = '<p>' . t('Browsers use different language codes to refer to the same languages. You can add and edit mappings from browser language codes to the <a href="@configure-languages">languages used by Drupal</a>.', array('@configure-languages' => url('admin/config/regional/language'))) . '</p>';
+      $output = '<p>' . t('Browsers use different language codes to refer to the same languages. Drupal will make a best effort to determine the correct language based on the code that the browser sends, but for finer control you can add and edit mappings from browser language codes to the <a href="@configure-languages">languages used by Drupal</a>.', array('@configure-languages' => url('admin/config/regional/language'))) . '</p>';
       return $output;
 
     case 'admin/config/regional/language/detection/selected':
diff --git a/core/modules/language/lib/Drupal/language/Tests/LanguageBrowserDetectionUnitTest.php b/core/modules/language/lib/Drupal/language/Tests/LanguageBrowserDetectionUnitTest.php
index 07ea3d5..e644331 100644
--- a/core/modules/language/lib/Drupal/language/Tests/LanguageBrowserDetectionUnitTest.php
+++ b/core/modules/language/lib/Drupal/language/Tests/LanguageBrowserDetectionUnitTest.php
@@ -149,8 +149,6 @@ function testLanguageFromBrowser() {
       'zh-mo' => 'zh-hant',
       'zh-hans' => 'zh-hans',
       'zh-hant' => 'zh-hant',
-      'zh-chs' => 'zh-hans',
-      'zh-cht' => 'zh-hant',
     );
 
     foreach ($test_cases as $accept_language => $expected_result) {
