diff --git a/core/lib/Drupal/Core/Field/FormatterBase.php b/core/lib/Drupal/Core/Field/FormatterBase.php index bc46730..eed52ba 100644 --- a/core/lib/Drupal/Core/Field/FormatterBase.php +++ b/core/lib/Drupal/Core/Field/FormatterBase.php @@ -8,6 +8,8 @@ namespace Drupal\Core\Field; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Language\LanguageInterface; +use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Render\Element; /** @@ -46,6 +48,13 @@ protected $viewMode; /** + * The language manager. + * + * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + */ + protected $languageManager; + + /** * Constructs a FormatterBase object. * * @param string $plugin_id @@ -62,8 +71,10 @@ * The view mode. * @param array $third_party_settings * Any third party settings. + * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + * The language manager. */ - public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings) { + public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, LanguageManagerInterface $language_manager) { parent::__construct(array(), $plugin_id, $plugin_definition); $this->fieldDefinition = $field_definition; @@ -71,12 +82,16 @@ public function __construct($plugin_id, $plugin_definition, FieldDefinitionInter $this->label = $label; $this->viewMode = $view_mode; $this->thirdPartySettings = $third_party_settings; + $this->languageManager = $language_manager; } /** * {@inheritdoc} */ public function view(FieldItemListInterface $items, $langcode = NULL) { + if (empty($langcode)) { + $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + } $elements = $this->viewElements($items, $langcode); // If there are actual renderable children, use #theme => field, otherwise, diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php index 71b2809..36cf3f6 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceFormatterBase.php @@ -13,6 +13,7 @@ use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\Plugin\Field\FieldType\EntityReferenceItem; use Drupal\Core\Field\FormatterBase; +use Drupal\Core\Language\LanguageInterface; use Drupal\Core\TypedData\TranslatableInterface; /** @@ -44,14 +45,9 @@ * * @see ::prepareView() */ - protected function getEntitiesToView(EntityReferenceFieldItemListInterface $items, $langcode = NULL) { + protected function getEntitiesToView(EntityReferenceFieldItemListInterface $items, $langcode) { $entities = array(); - // TODO - if (!isset($langcode)) { - $langcode = $items->getEntity()->language()->getId(); - } - foreach ($items as $delta => $item) { // Ignore items where no entity could be loaded in prepareView(). if (!empty($item->_loaded)) { diff --git a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php index 5b5cf52..6b442f3 100644 --- a/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php +++ b/core/lib/Drupal/Core/Field/Plugin/Field/FieldFormatter/EntityReferenceLabelFormatter.php @@ -11,6 +11,7 @@ use Drupal\Core\Entity\Exception\UndefinedLinkTemplateException; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Form\FormStateInterface; +use Drupal\Core\Language\LanguageInterface; /** * Plugin implementation of the 'entity reference label' formatter. @@ -63,6 +64,9 @@ public function settingsSummary() { public function viewElements(FieldItemListInterface $items, $langcode = NULL) { $elements = array(); $output_as_link = $this->getSetting('link'); + if (empty($langcode)) { + $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + } foreach ($this->getEntitiesToView($items, $langcode) as $delta => $entity) { $label = $entity->label(); diff --git a/core/modules/entity_reference/src/Tests/EntityReferenceFieldTranslatedReferenceViewTest.php b/core/modules/entity_reference/src/Tests/EntityReferenceFieldTranslatedReferenceViewTest.php index 267c9f3..191d505 100644 --- a/core/modules/entity_reference/src/Tests/EntityReferenceFieldTranslatedReferenceViewTest.php +++ b/core/modules/entity_reference/src/Tests/EntityReferenceFieldTranslatedReferenceViewTest.php @@ -18,12 +18,14 @@ * @group entity_reference */ class EntityReferenceFieldTranslatedReferenceViewTest extends WebTestBase { + /** * Flag indicating whether the field is translatable. * * @var bool */ protected $translatable = TRUE; + /** * The langcode of the source language. * diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php index 5f15073..8290557 100644 --- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatter.php @@ -10,6 +10,8 @@ use Drupal\Core\Entity\EntityStorageInterface; use Drupal\Core\Field\FieldItemListInterface; use Drupal\Core\Field\FieldDefinitionInterface; +use Drupal\Core\Language\LanguageInterface; +use Drupal\Core\Language\LanguageManagerInterface; use Drupal\Core\Plugin\ContainerFactoryPluginInterface; use Drupal\Core\Routing\UrlGeneratorInterface; use Drupal\Core\Session\AccountInterface; @@ -47,6 +49,13 @@ class ImageFormatter extends ImageFormatterBase implements ContainerFactoryPlugi protected $linkGenerator; /** + * The language manager. + * + * @param \Drupal\Core\Language\LanguageManagerInterface $language_manager + */ + protected $languageManager; + + /** * The image style entity storage. * * @var \Drupal\Core\Entity\EntityStorageInterface @@ -75,11 +84,12 @@ class ImageFormatter extends ImageFormatterBase implements ContainerFactoryPlugi * @param \Drupal\Core\Utility\LinkGeneratorInterface $link_generator * The link generator service. */ - public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, LinkGeneratorInterface $link_generator, EntityStorageInterface $image_style_storage) { + public function __construct($plugin_id, $plugin_definition, FieldDefinitionInterface $field_definition, array $settings, $label, $view_mode, array $third_party_settings, AccountInterface $current_user, LinkGeneratorInterface $link_generator, EntityStorageInterface $image_style_storage, LanguageManagerInterface $language_manager) { parent::__construct($plugin_id, $plugin_definition, $field_definition, $settings, $label, $view_mode, $third_party_settings); $this->currentUser = $current_user; $this->linkGenerator = $link_generator; $this->imageStyleStorage = $image_style_storage; + $this->languageManager = $language_manager; } /** @@ -176,9 +186,12 @@ public function settingsSummary() { /** * {@inheritdoc} */ - public function viewElements(FieldItemListInterface $items) { + public function viewElements(FieldItemListInterface $items, $langcode = NULL) { $elements = array(); - $files = $this->getEntitiesToView($items); + if (empty($langcode)) { + $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + } + $files = $this->getEntitiesToView($items, $langcode); // Early opt-out if the field is empty. if (empty($files)) { diff --git a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php index 691bfeb..4bcd7ec 100644 --- a/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php +++ b/core/modules/image/src/Plugin/Field/FieldFormatter/ImageFormatterBase.php @@ -8,6 +8,7 @@ namespace Drupal\image\Plugin\Field\FieldFormatter; use Drupal\Core\Field\EntityReferenceFieldItemListInterface; +use Drupal\Core\Language\LanguageInterface; use Drupal\field\FieldConfigInterface; use Drupal\file\Plugin\Field\FieldFormatter\FileFormatterBase; @@ -19,7 +20,7 @@ /** * {@inheritdoc} */ - protected function getEntitiesToView(EntityReferenceFieldItemListInterface $items, $langcode = NULL) { + protected function getEntitiesToView(EntityReferenceFieldItemListInterface $items, $langcode) { // Add the default image if needed. if ($items->isEmpty()) { $default_image = $this->getFieldSetting('default_image'); @@ -28,6 +29,9 @@ protected function getEntitiesToView(EntityReferenceFieldItemListInterface $item if (empty($default_image['uuid']) && $this->fieldDefinition instanceof FieldConfigInterface) { $default_image = $this->fieldDefinition->getFieldStorageDefinition()->getSetting('default_image'); } + if (empty($langcode)) { + $langcode = $this->languageManager->getCurrentLanguage(LanguageInterface::TYPE_CONTENT)->getId(); + } if (!empty($default_image['uuid']) && $file = \Drupal::entityManager()->loadEntityByUuid('file', $default_image['uuid'])) { // Clone the FieldItemList into a runtime-only object for the formatter, @@ -48,7 +52,7 @@ protected function getEntitiesToView(EntityReferenceFieldItemListInterface $item } } - return parent::getEntitiesToView($items); + return parent::getEntitiesToView($items, $langcode); } }