diff --git a/config/schema/paragraphs_collection.schema.yml b/config/schema/paragraphs_collection.schema.yml
index aa83db1..a3d09e3 100644
--- a/config/schema/paragraphs_collection.schema.yml
+++ b/config/schema/paragraphs_collection.schema.yml
@@ -21,3 +21,18 @@ paragraphs.behavior.settings.grid_layout:
       sequence:
        type: string
       label: Available grid layouts
+paragraphs.behavior.settings.language:
+  type: paragraphs.behavior.settings_base
+  mapping:
+    container:
+      type: mapping
+      label: 'Language'
+      mapping:
+        languages:
+          type: sequence
+          label: 'Languages'
+          sequence:
+            type: string
+        visibility:
+          type: string
+          label: 'Visibility'
diff --git a/js/language.js b/js/language.js
new file mode 100644
index 0000000..471ff12
--- /dev/null
+++ b/js/language.js
@@ -0,0 +1,43 @@
+/**
+ * @file language.js
+ */
+(function ($, Drupal) {
+
+  "use strict";
+
+  /**
+   * Registers behaviours related to the Language behavior plugin.
+   */
+
+  Drupal.behaviors.language = {
+    attach: function (context) {
+
+      // Show instructions, only if '- Always visible -' is selected.
+      $('.paragraphs-behavior-language-visibility-behavior-form-visibility').change(function() {
+        var $desc = $(this).parent().children('.description');
+        var selected = $(this).find(':selected').val();
+        if (selected == 'always') {
+          $desc.show();
+        }
+        else {
+          $desc.hide();
+        }
+      });
+
+      // Use Select2 for better "select multiple languages" UI.
+      $('.paragraphs-behavior-language-visibility-behavior-form-languages').each(function () {
+        $(this).removeAttr('style');
+        var $desc = $(this).parent().children('.description');
+        $(this).select2({
+          placeholder: $desc.text().trim(),
+          width: '100%'
+        });
+        $desc.hide();
+        // Ensure that Select2 does not cut of the description.
+        $('.select2-search__field').removeAttr('style');
+      });
+
+    }
+  };
+
+}(jQuery, Drupal));
diff --git a/modules/paragraphs_collection_demo/config/install/field.field.paragraph.language.paragraphs_language_text.yml b/modules/paragraphs_collection_demo/config/install/field.field.paragraph.language.paragraphs_language_text.yml
new file mode 100644
index 0000000..72ae082
--- /dev/null
+++ b/modules/paragraphs_collection_demo/config/install/field.field.paragraph.language.paragraphs_language_text.yml
@@ -0,0 +1,20 @@
+langcode: en
+status: true
+dependencies:
+  config:
+    - field.storage.paragraph.paragraphs_language_text
+    - paragraphs.paragraphs_type.language
+  module:
+    - text
+id: paragraph.language.paragraphs_language_text
+field_name: paragraphs_language_text
+entity_type: paragraph
+bundle: language
+label: Language Text
+description: ''
+required: false
+translatable: false
+default_value: {  }
+default_value_callback: ''
+settings: {  }
+field_type: text
diff --git a/modules/paragraphs_collection_demo/config/install/field.storage.paragraph.paragraphs_language_text.yml b/modules/paragraphs_collection_demo/config/install/field.storage.paragraph.paragraphs_language_text.yml
new file mode 100644
index 0000000..cbb8c86
--- /dev/null
+++ b/modules/paragraphs_collection_demo/config/install/field.storage.paragraph.paragraphs_language_text.yml
@@ -0,0 +1,21 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - paragraphs
+    - text
+  enforced:
+    module:
+      - paragraphs_collection
+id: paragraph.paragraphs_language_text
+field_name: paragraphs_language_text
+entity_type: paragraph
+type: text_long
+settings: {  }
+module: image
+locked: false
+cardinality: 1
+translatable: true
+indexes: {  }
+persist_with_no_fields: false
+custom_storage: false
diff --git a/modules/paragraphs_collection_demo/config/install/paragraphs.paragraphs_type.language.yml b/modules/paragraphs_collection_demo/config/install/paragraphs.paragraphs_type.language.yml
new file mode 100644
index 0000000..2d98079
--- /dev/null
+++ b/modules/paragraphs_collection_demo/config/install/paragraphs.paragraphs_type.language.yml
@@ -0,0 +1,14 @@
+langcode: en
+status: true
+dependencies:
+  module:
+    - paragraphs_collection
+    - language
+  enforced:
+    module:
+      - paragraphs_collection
+id: language
+label: Language
+behavior_plugins:
+  language:
+    enabled: true
diff --git a/modules/paragraphs_collection_demo/paragraphs_collection_demo.install b/modules/paragraphs_collection_demo/paragraphs_collection_demo.install
index 64f17c6..f9c3456 100644
--- a/modules/paragraphs_collection_demo/paragraphs_collection_demo.install
+++ b/modules/paragraphs_collection_demo/paragraphs_collection_demo.install
@@ -101,6 +101,18 @@ function paragraphs_collection_demo_install() {
   $grid_paragraph->setBehaviorSettings('grid_layout', ['layout' => 'paragraphs_two_column']);
   $grid_paragraph->save();
 
+
+  // @todo Either find out how to enable the language plugin for the 'text'
+  //   paragraphs type from here, or use the newly defined 'language' paragraphs
+  //   type for demonstration purposes. Adjust the test accordingly.
+//  paragraphs_type_load('text')->getPluginCollections();
+  $language_paragraph = Paragraph::create([
+    'title' => 'Demo language paragraph',
+    'type' => 'language',
+  ]);
+  $grid_paragraph->setBehaviorSettings('language', []);
+  $grid_paragraph->save();
+
   // Add demo content with one paragraph.
   $node = Node::create([
     'type' => 'paragraphed_content_demo',
diff --git a/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php b/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php
index d8c988c..397e445 100644
--- a/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php
+++ b/modules/paragraphs_collection_demo/src/Tests/ParagraphsCollectionDemoTest.php
@@ -39,6 +39,9 @@ class ParagraphsCollectionDemoTest extends ParagraphsExperimentalTestBase{
     $this->assertFieldById('edit-behavior-plugins-style-settings-group', '');
     // @todo When other plugins are available, add assertion.
 
+    $this->drupalGet('admin/structure/paragraphs_type/text');
+    $this->assertFieldChecked('edit-behavior-plugins-language-enabled');
+
     // Check that demo content has paragraph with enabled plugins.
     $this->drupalGet('admin/content');
     $this->clickLink('Paragraphs Collection Demo Article!');
diff --git a/paragraphs_collection.libraries.yml b/paragraphs_collection.libraries.yml
index 6dc314d..9c5ba96 100644
--- a/paragraphs_collection.libraries.yml
+++ b/paragraphs_collection.libraries.yml
@@ -7,3 +7,23 @@ grid_layout:
   css:
     theme:
       css/grid-layout.css: {}
+
+language:
+  js:
+    js/language.js: {}
+
+
+select2:
+  remote: https://github.com/ivaynberg/select2
+  version: 4.0.3
+  license:
+    name: MIT
+    url: https://github.com/select2/select2/blob/master/LICENSE.md
+    gpl-compatible: true
+  js:
+    /libraries/select2/dist/js/select2.full.min.js: {}
+  css:
+    component:
+      /libraries/select2/dist/css/select2.min.css: {}
+  dependencies:
+    - core/jquery
diff --git a/src/Plugin/paragraphs/Behavior/ParagraphsLanguagePlugin.php b/src/Plugin/paragraphs/Behavior/ParagraphsLanguagePlugin.php
new file mode 100644
index 0000000..9e4f08d
--- /dev/null
+++ b/src/Plugin/paragraphs/Behavior/ParagraphsLanguagePlugin.php
@@ -0,0 +1,151 @@
+<?php
+
+namespace Drupal\paragraphs_collection\Plugin\paragraphs\Behavior;
+
+use Drupal\Core\Entity\Display\EntityViewDisplayInterface;
+use Drupal\Core\Entity\EntityFieldManager;
+use Drupal\Core\Form\FormStateInterface;
+use Drupal\Core\Language\LanguageManagerInterface;
+use Drupal\Core\Render\Element;
+use Drupal\paragraphs\Entity\Paragraph;
+use Drupal\paragraphs\ParagraphInterface;
+use Drupal\paragraphs\ParagraphsBehaviorBase;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+
+/**
+ * Provides a way to hide specific paragraphs depending on the current language.
+ *
+ * @ParagraphsBehavior(
+ *   id = "language",
+ *   label = @Translation("Language"),
+ *   description = @Translation("Restricts visibility of a paragraph per language."),
+ *   weight = 0
+ * )
+ */
+class ParagraphsLanguagePlugin extends ParagraphsBehaviorBase {
+
+  /**
+   * The language manager.
+   *
+   * @var \Drupal\Core\Language\LanguageManagerInterface
+   */
+  protected $languageManager;
+
+  /**
+   * ParagraphsLanguagePlugin constructor.
+   *
+   * @param array $configuration
+   *   A configuration array containing information about the plugin instance.
+   * @param string $plugin_id
+   *   The plugin_id for the plugin instance.
+   * @param mixed $plugin_definition
+   *   The plugin implementation definition.
+   * @param \Drupal\Core\Entity\EntityFieldManager $entity_field_manager
+   *   The entity field manager.
+   * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager
+   *   The language manager.
+   */
+  public function __construct(array $configuration, $plugin_id, $plugin_definition, EntityFieldManager $entity_field_manager, LanguageManagerInterface $language_manager) {
+    parent::__construct($configuration, $plugin_id, $plugin_definition, $entity_field_manager);
+
+    $this->languageManager = $language_manager;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container, array $configuration, $plugin_id, $plugin_definition) {
+    return new static($configuration, $plugin_id, $plugin_definition,
+      $container->get('entity_field.manager'),
+      $container->get('language_manager')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function buildBehaviorForm(ParagraphInterface $paragraph, array &$form, FormStateInterface $form_state) {
+    foreach ($this->languageManager->getLanguages() as $language_code => $language) {
+      $options[$language_code] = $language->getName();
+    }
+
+    $form['container'] = [
+      '#type' => 'fieldset',
+      '#title' => $this->t('Visibility per language'),
+    ];
+
+    $form['container']['visibility'] = [
+      '#type' => 'select',
+      '#description' => $this->t('Choose for which languages to hide or show this paragraph.'),
+      '#options' => [
+        'always' => $this->t('- Always visible -'),
+        'hide' => $this->t('Hide for'),
+        'show' => $this->t('Show for'),
+      ],
+      '#default_value' => $paragraph->getBehaviorSetting($this->getPluginId(), ['container', 'visibility']),
+      '#multiple' => FALSE,
+      '#attributes' => [
+        'id' => ['paragraphs-behavior-language-visibility-behavior-form-visibility-' . $paragraph->id()],
+        'class' => ['paragraphs-behavior-language-visibility-behavior-form-visibility'],
+      ],
+    ];
+
+    $form['container']['languages'] = [
+      '#type' => 'select',
+//      '#title' => $this->t('Languages'),
+      '#description' => $this->t('Select a language.'),
+      '#options' => $options,
+      '#empty_option' => $this->t('- None -'),
+      '#empty_value' => 'none',
+      '#default_value' => $paragraph->getBehaviorSetting($this->getPluginId(), ['container', 'languages']),
+      '#states' => [
+        'invisible' => [
+          ':input[id="paragraphs-behavior-language-visibility-behavior-form-visibility-' . $paragraph->id() . '"]' => ['value' => 'always'],
+        ],
+      ],
+      '#multiple' => TRUE,
+      '#attached' => ['library' => ['paragraphs_collection/select2', 'paragraphs_collection/language']],
+      '#attributes' => [
+        'class' => ['paragraphs-behavior-language-visibility-behavior-form-languages'],
+      ],
+    ];
+
+    return $form;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function view(array &$build, Paragraph $paragraphs_entity, EntityViewDisplayInterface $display, $view_mode) {
+    $current_language = $this->languageManager->getCurrentLanguage();
+    $languages = $paragraphs_entity->getBehaviorSetting($this->getPluginId(), ['container', 'languages']);
+    $visibility = $paragraphs_entity->getBehaviorSetting($this->getPluginId(), ['container', 'visibility']);
+
+    if (!$visibility || $visibility == 'always') {
+      return $build;
+    }
+
+    $show = TRUE;
+
+    // In the 'show' visibility mode: Hide the paragraph, if the current
+    // language is not among the selected ones.
+    if ($visibility == 'show' && !in_array($current_language->getId(), $languages)) {
+      $show = FALSE;
+    }
+
+    // In the 'hide' visibility mode: Hide the paragraph, if the current
+    // language is among the selected ones.
+    if ($visibility == 'hide' && in_array($current_language->getId(), $languages)) {
+      $show = FALSE;
+    }
+
+    if (!$show) {
+      foreach (Element::children($build) as $children) {
+        $build[$children]['#access'] = FALSE;
+      }
+    }
+
+    return $build;
+  }
+
+}
diff --git a/src/Tests/ParagraphsLanguagePluginTest.php b/src/Tests/ParagraphsLanguagePluginTest.php
new file mode 100644
index 0000000..a56c0a4
--- /dev/null
+++ b/src/Tests/ParagraphsLanguagePluginTest.php
@@ -0,0 +1,101 @@
+<?php
+
+namespace Drupal\paragraphs_collection\Tests;
+
+use Drupal\field_ui\Tests\FieldUiTestTrait;
+use Drupal\language\Entity\ConfigurableLanguage;
+use Drupal\paragraphs\Tests\Experimental\ParagraphsExperimentalTestBase;
+
+/**
+ * Tests the Language plugin.
+ *
+ * @group paragraphs_collection
+ * @requires module paragraphs
+ */
+class ParagraphsLanguagePluginTest extends ParagraphsExperimentalTestBase {
+
+  use FieldUiTestTrait;
+
+  /**
+   * Modules to be enabled.
+   */
+  public static $modules = [
+    'paragraphs_collection',
+    'language',
+  ];
+
+  /**
+   * Tests the Language plugin settings and functionality.
+   */
+  public function testVisibilityForLanguageSelection() {
+    // Create a content type with a paragraphs field.
+    $content_type = 'test_content_type';
+    $paragraphs_field = 'test_paragraphs_field';
+    $this->addParagraphedContentType($content_type, $paragraphs_field);
+    $this->loginAsAdmin([
+      'create ' . $content_type . ' content',
+      'edit any ' . $content_type . ' content',
+    ]);
+
+    // Create a paragraphs type with a text field.
+    $paragraphs_type = 'test_paragraphs_type';
+    $this->addParagraphsType($paragraphs_type);
+    static::fieldUIAddNewField('admin/structure/paragraphs_type/' . $paragraphs_type, 'test_text_field', 'Text', 'text_long', [], []);
+
+    // Add a second language (German) to the site.
+    ConfigurableLanguage::createFromLangcode('de')->save();
+
+    // Enable the Language plugin.
+    $this->drupalGet('admin/structure/paragraphs_type/' . $paragraphs_type);
+    $edit = [
+      'behavior_plugins[language][enabled]' => TRUE,
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save'));
+
+    // Create a paragraphed content node.
+    $this->drupalGet('node/add/' . $content_type);
+    $this->drupalPostAjaxForm(NULL, [], $paragraphs_field . '_' . $paragraphs_type . '_add_more');
+    $node_title = 'Test Node';
+    $node_text = 'This is a text.';
+    $edit = [
+      'title[0][value]' => $node_title,
+      $paragraphs_field . '[0][subform][field_test_text_field][0][value]' => $node_text,
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and publish'));
+
+    // Check that we are on the node page and the text field content is visible.
+    $this->assertTitle($node_title . ' | Drupal');
+    $this->assertText($node_text);
+
+    // Hide the text field with the Language plugin for English.
+    $node_id = $this->drupalGetNodeByTitle($node_title)->id();
+    $this->drupalGet('node/' . $node_id . '/edit');
+    $edit = [
+      $paragraphs_field . '[0][behavior_plugins][language][container][visibility]' => 'hide',
+      $paragraphs_field . '[0][behavior_plugins][language][container][languages][]' => ['en'],
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and keep published'));
+
+    // Check that we are on the node page and the text field content is not
+    // visible.
+    $this->drupalGet('node/' . $node_id);
+    $this->assertTitle($node_title . ' | Drupal');
+    $this->assertNoText($node_text);
+
+    // Hide the text field with the Language plugin for all languages but
+    // German.
+    $this->drupalGet('node/' . $node_id . '/edit');
+    $edit = [
+      $paragraphs_field . '[0][behavior_plugins][language][container][visibility]' => 'show',
+      $paragraphs_field . '[0][behavior_plugins][language][container][languages][]' => ['de'],
+    ];
+    $this->drupalPostForm(NULL, $edit, t('Save and keep published'));
+
+    // Check that we are on the node page and the text field content is again
+    // not visible.
+    $this->drupalGet('node/' . $node_id);
+    $this->assertTitle($node_title . ' | Drupal');
+    $this->assertNoText($node_text);
+  }
+
+}
