diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/LanguageSelectWidget.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/LanguageSelectWidget.php
index cff646d..697c603 100644
--- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/LanguageSelectWidget.php
+++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldWidget/LanguageSelectWidget.php
@@ -27,10 +27,35 @@ public function formElement(FieldItemListInterface $items, $delta, array $elemen
$element['value'] = $element + array(
'#type' => 'language_select',
'#default_value' => $items[$delta]->value,
- '#languages' => LanguageInterface::STATE_ALL,
+ '#languages' => $this->getSetting('include_locked') ? LanguageInterface::STATE_ALL : LanguageInterface::STATE_CONFIGURABLE,
);
return $element;
}
+ /**
+ * {@inheritdoc}
+ */
+ public static function defaultSettings() {
+ $settings = parent::defaultSettings();
+ $settings['include_locked'] = TRUE;
+
+ return $settings;
+ }
+
+ /**
+ * {@inheritdoc}
+ */
+ public function settingsForm(array $form, FormStateInterface $form_state) {
+ $element = parent::settingsForm($form, $form_state);
+
+ $element['include_locked'] = [
+ '#type' => 'checkbox',
+ '#title' => $this->t('Include locked languages such as Not specified and Not applicable'),
+ '#default_value' => $this->getSetting('include_locked'),
+ ];
+
+ return $element;
+ }
+
}
diff --git a/core/modules/language/src/Tests/LanguageSelectWidgetTest.php b/core/modules/language/src/Tests/LanguageSelectWidgetTest.php
new file mode 100644
index 0000000..7eb4c9d
--- /dev/null
+++ b/core/modules/language/src/Tests/LanguageSelectWidgetTest.php
@@ -0,0 +1,134 @@
+drupalPostForm(
+ 'admin/config/regional/language/add',
+ $edit,
+ t('Add language')
+ );
+
+ $this->fieldLanguageLocked = FieldStorageConfig::create([
+ 'field_name' => 'language_locked',
+ 'entity_type' => 'entity_test',
+ 'type' => 'language_select',
+ 'languages' => LanguageInterface::STATE_ALL,
+ ]);
+
+ $this->fieldLanguageLocked->save();
+
+ $this->fieldLanguageUnlocked = FieldStorageConfig::create([
+ 'field_name' => 'language_unlocked',
+ 'entity_type' => 'entity_test',
+ 'type' => 'language_select',
+ 'languages' => LanguageInterface::STATE_CONFIGURABLE,
+ ]);
+
+ $this->fieldLanguageUnlocked->save();
+ }
+
+ /**
+ * Check that default settings with include_locked languages TRUE.
+ */
+ public function testWithIncludedLockedLanguage() {
+
+ // Create an instance of the 'single value' field.
+ $field = FieldConfig::create([
+ 'field_storage' => $this->fieldLanguageLocked,
+ 'bundle' => 'entity_test',
+ ]);
+
+ $field->save();
+
+ // Create an entity.
+ $entity = EntityTest::create(array(
+ 'user_id' => 1,
+ 'name' => $this->randomMachineName(),
+ ));
+ $entity->save();
+
+ // Display form.
+ $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
+ $this->assertOptionSelected('edit-language-locked', LanguageInterface::LANGCODE_NOT_APPLICABLE);
+ $this->assertOptionSelected('edit-language-locked', LanguageInterface::LANGCODE_NOT_SPECIFIED);
+ $this->assertOptionSelected('edit-language-locked', 'pt-br');
+ }
+
+ /**
+ * Check the settings with include_locked languages FALSE.
+ */
+ public function testWithoutIncludedLockedLanguage() {
+
+ // Create an instance of the 'single value' field.
+ $field = FieldConfig::create([
+ 'field_storage' => $this->fieldLanguageUnlocked,
+ 'bundle' => 'entity_test',
+ ]);
+
+ $field->save();
+
+ // Create an entity.
+ $entity = EntityTest::create(array(
+ 'user_id' => 1,
+ 'name' => $this->randomMachineName(),
+ ));
+ $entity->save();
+
+ // Display form.
+ $this->drupalGet('entity_test/manage/' . $entity->id() . '/edit');
+ $this->assertNoOptionSelected('edit-language-locked', LanguageInterface::LANGCODE_NOT_APPLICABLE);
+ $this->assertNoOptionSelected('edit-language-locked', LanguageInterface::LANGCODE_NOT_SPECIFIED);
+ $this->assertOptionSelected('edit-language-locked', 'pt-br');
+ }
+
+}