diff --git a/core/modules/datetime_range/config/schema/datetime_range.schema.yml b/core/modules/datetime_range/config/schema/datetime_range.schema.yml index 90bbd38b2f2aa26d598b0af0fca165ac8b3c6c3d..f0f93259d34075cf2653bb89dc64c0f1cd4562ba 100644 --- a/core/modules/datetime_range/config/schema/datetime_range.schema.yml +++ b/core/modules/datetime_range/config/schema/datetime_range.schema.yml @@ -32,24 +32,27 @@ field.formatter.settings.daterange_default: label: 'Date range default display format settings' mapping: separator: - type: string + type: label label: 'Separator' + translation context: 'Date range separator' field.formatter.settings.daterange_plain: type: field.formatter.settings.datetime_plain label: 'Date range plain display format settings' mapping: separator: - type: string + type: label label: 'Separator' + translation context: 'Date range separator' field.formatter.settings.daterange_custom: type: field.formatter.settings.datetime_custom label: 'Date range custom display format settings' mapping: separator: - type: string + type: label label: 'Separator' + translation context: 'Date range separator' field.widget.settings.daterange_datelist: type: mapping diff --git a/core/modules/datetime_range/datetime_range.post_update.php b/core/modules/datetime_range/datetime_range.post_update.php new file mode 100644 index 0000000000000000000000000000000000000000..48a866bac98ff3c96cb062f060bf4031734a12ee --- /dev/null +++ b/core/modules/datetime_range/datetime_range.post_update.php @@ -0,0 +1,22 @@ +<?php + +/** + * @file + * Post-update functions for Datetime Range module. + */ + +/** + * @addtogroup updates-8.2.x + * @{ + */ + +/** + * Clear caches to ensure schema changes are read. + */ +function datetime_range_post_update_translatable_separator() { + // Empty post-update hook to cause a cache rebuild. +} + +/** + * @} End of "addtogroup updates-8.2.x". + */ diff --git a/core/modules/datetime_range/tests/src/Kernel/SeparatorTranslationTest.php b/core/modules/datetime_range/tests/src/Kernel/SeparatorTranslationTest.php new file mode 100644 index 0000000000000000000000000000000000000000..155bb61d10ee0ca6778bbb01ff42f60902c9b5ac --- /dev/null +++ b/core/modules/datetime_range/tests/src/Kernel/SeparatorTranslationTest.php @@ -0,0 +1,131 @@ +<?php + +namespace Drupal\Tests\datetime_range\Kernel; + +use Drupal\Component\Utility\Unicode; +use Drupal\Core\Entity\Entity\EntityViewDisplay; +use Drupal\Core\Language\Language; +use Drupal\datetime\Plugin\Field\FieldType\DateTimeItem; +use Drupal\entity_test\Entity\EntityTest; +use Drupal\field\Entity\FieldConfig; +use Drupal\field\Entity\FieldStorageConfig; +use Drupal\KernelTests\KernelTestBase; +use Drupal\language\Entity\ConfigurableLanguage; + +/** + * Test to ensure the datetime range separator is translatable. + * + * @group datetime + */ +class SeparatorTranslationTest extends KernelTestBase { + + /** + * A field storage to use in this test class. + * + * @var \Drupal\field\Entity\FieldStorageConfig + */ + protected $fieldStorage; + + /** + * The field used in this test class. + * + * @var \Drupal\field\Entity\FieldConfig + */ + protected $field; + + /** + * {@inheritdoc} + */ + public static $modules = [ + 'datetime', + 'datetime_range', + 'entity_test', + 'field', + 'language', + 'system', + 'user', + ]; + + /** + * {@inheritdoc} + */ + protected function setUp() { + parent::setUp(); + + $this->installEntitySchema('entity_test'); + $this->installEntitySchema('user'); + $this->installConfig(['system']); + $this->installSchema('system', ['sequences', 'key_value']); + + // Add a datetime range field. + $this->fieldStorage = FieldStorageConfig::create([ + 'field_name' => Unicode::strtolower($this->randomMachineName()), + 'entity_type' => 'entity_test', + 'type' => 'daterange', + 'settings' => ['datetime_type' => DateTimeItem::DATETIME_TYPE_DATE], + ]); + $this->fieldStorage->save(); + + $this->field = FieldConfig::create([ + 'field_storage' => $this->fieldStorage, + 'bundle' => 'entity_test', + 'required' => TRUE, + ]); + $this->field->save(); + + $display_options = [ + 'type' => 'daterange_default', + 'label' => 'hidden', + 'settings' => [ + 'format_type' => 'fallback', + 'separator' => 'UNTRANSLATED', + ], + ]; + EntityViewDisplay::create([ + 'targetEntityType' => $this->field->getTargetEntityTypeId(), + 'bundle' => $this->field->getTargetBundle(), + 'mode' => 'default', + 'status' => TRUE, + ])->setComponent($this->fieldStorage->getName(), $display_options) + ->save(); + } + + /** + * Tests the translation of the range separator. + */ + public function testSeparatorTranslation() { + // Create an entity. + $entity = EntityTest::create([ + 'name' => $this->randomString(), + $this->fieldStorage->getName() => [ + 'value' => '2016-09-20', + 'end_value' => '2016-09-21', + ], + ]); + + // Verify the untranslated separator. + $display = EntityViewDisplay::collectRenderDisplay($entity, 'default'); + $build = $display->build($entity); + $output = $this->container->get('renderer')->renderRoot($build); + $this->verbose($output); + $this->assertContains('UNTRANSLATED', (string) $output); + + // Translate the separator. + ConfigurableLanguage::createFromLangcode('nl')->save(); + /** @var \Drupal\language\ConfigurableLanguageManagerInterface $language_manager */ + $language_manager = $this->container->get('language_manager'); + $language_manager->getLanguageConfigOverride('nl', 'core.entity_view_display.entity_test.entity_test.default') + ->set('content.' . $this->fieldStorage->getName() . '.settings.separator', 'NL_TRANSLATED!') + ->save(); + + $this->container->get('language.config_factory_override') + ->setLanguage(new Language(['id' => 'nl'])); + $this->container->get('cache_tags.invalidator')->invalidateTags($entity->getCacheTags()); + $display = EntityViewDisplay::collectRenderDisplay($entity, 'default'); + $build = $display->build($entity); + $output = $this->container->get('renderer')->renderRoot($build); + $this->verbose($output); + $this->assertContains('NL_TRANSLATED!', (string) $output); + } + +}