diff --git a/src/API/DrupalClient.php b/src/API/DrupalClient.php
index cf79b6b..f16074c 100644
--- a/src/API/DrupalClient.php
+++ b/src/API/DrupalClient.php
@@ -30,6 +30,8 @@ use Symfony\Component\DependencyInjection\ContainerInterface;
 
 class DrupalClient extends Client implements DrupalClientInterface {
 
+  const MAX_EXPECTED_LANGUAGES_LENGTH = 64;
+
   /**
    * The settings configuration.
    *
@@ -308,4 +310,11 @@ class DrupalClient extends Client implements DrupalClientInterface {
     // @todo array_intersect_key($options, $installed_languages) + $options;
     return $options;
   }
+
+  /**
+   * Implements flattenExpectedLanguages().
+   */
+  public static function flattenExpectedLanguages(array $languages) {
+    return implode(',', $languages);
+  }
 }
diff --git a/src/API/DrupalClientInterface.php b/src/API/DrupalClientInterface.php
index ca52fbb..dfe24e7 100644
--- a/src/API/DrupalClientInterface.php
+++ b/src/API/DrupalClientInterface.php
@@ -394,4 +394,14 @@ interface DrupalClientInterface {
    *   - tracking_id: the tracking id generated
    */
   public function getTrackingImage();
+
+  /**
+   * Convert array of expected languages to a string for storage.
+   *
+   * @param array $languages
+   *   An array of ISO-639-1 language codes
+   * @return string
+   *   A flattened string.
+   */
+  public static function flattenExpectedLanguages(array $languages);
 }
diff --git a/src/Form/Settings.php b/src/Form/Settings.php
index cd7afd0..6d44a41 100644
--- a/src/Form/Settings.php
+++ b/src/Form/Settings.php
@@ -186,6 +186,11 @@ class Settings extends ConfigFormBase {
     if (!empty($message)) {
       $form_state->setError($form['keys']['private'], $message);
     }
+    $languages = $form_state->getValue('languages_expected', []);
+    $flattened_languages = DrupalClient::flattenExpectedLanguages($languages);
+    if (strlen($flattened_languages) > DrupalClient::MAX_EXPECTED_LANGUAGES_LENGTH) {
+      $form_state->setError($form['expected_languages'], $this->t('You have selected too many expected languages.  Mollom can only accept approximately 20 expected languages.'));
+    }
   }
 
   /**
