diff --git a/core/modules/locale/lib/Drupal/locale/Form/DateFormatLocalizeResetForm.php b/core/modules/locale/lib/Drupal/locale/Form/DateFormatLocalizeResetForm.php
new file mode 100644
index 0000000..8c7b078
--- /dev/null
+++ b/core/modules/locale/lib/Drupal/locale/Form/DateFormatLocalizeResetForm.php
@@ -0,0 +1,112 @@
+<?php
+
+/**
+ * @file
+ * Contains \Drupal\system\Form\DateFormatLocalizeResetForm.
+ */
+
+namespace Drupal\system\Form;
+
+use Drupal\Core\Controller\ControllerInterface;
+use Drupal\Core\Form\ConfirmFormBase;
+use Drupal\Core\Config\ConfigFactory;
+use Symfony\Component\DependencyInjection\ContainerInterface;
+use Symfony\Component\HttpFoundation\Request;
+
+/**
+ * Builds a form for enabling a module.
+ */
+class DateFormatLocalizeResetForm extends ConfirmFormBase implements ControllerInterface {
+
+  /**
+   * The language to be reset.
+   *
+   * @var \Drupal\Core\Language\Language;
+   */
+  protected $language;
+
+  /**
+   * The config factory.
+   *
+   * @var \Drupal\Core\Config\ConfigFactory
+   */
+  protected $configFactory;
+
+  /**
+   * Constructs a DateFormatLocalizeResetForm object.
+   */
+  public function __construct(ConfigFactory $config_factory) {
+    $this->configFactory = $config_factory;
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public static function create(ContainerInterface $container) {
+    return new static(
+      $container->get('config.factory')
+    );
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getFormID() {
+    return 'locale_date_format_localize_reset_form';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getQuestion() {
+    return t('Are you sure you want to reset the date formats for %language to the global defaults?', array(
+      '%language' => $this->language->name,
+    ));
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getConfirmText() {
+    return t('Reset');
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getCancelPath() {
+    return 'admin/config/regional/translate/date-time';
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function getDescription() {
+    return t('Resetting will remove all localized date formats for this language. This action cannot be undone.');
+  }
+
+  /**
+   * {@inheritdoc}
+   *
+   * @param string $langcode
+   *   The language code.
+   *
+   */
+  public function buildForm(array $form, array &$form_state, $langcode = NULL, Request $request = NULL) {
+    $this->language = language_load($langcode);
+
+    return parent::buildForm($form, $form_state, $request);
+  }
+
+  /**
+   * {@inheritdoc}
+   */
+  public function submitForm(array &$form, array &$form_state) {
+    foreach (config_get_storage_names_with_prefix('locale.config.' . $this->language->id . '.system.date_format.') as $config_id) {
+      $this->configFactory->get($config_id)->delete();
+    }
+
+    $form_state['redirect'] = 'admin/config/regional/translate/date-time';
+  }
+
+}
diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module
index c83ff19..201a995 100644
--- a/core/modules/locale/locale.module
+++ b/core/modules/locale/locale.module
@@ -179,9 +179,23 @@ function locale_menu() {
     'weight' => -5,
   );
   $items['admin/config/regional/translate/translate'] = array(
-    'title' => 'Translate',
+    'title' => 'Translate strings',
     'type' => MENU_DEFAULT_LOCAL_TASK,
   );
+  $items['admin/config/regional/translate/date-time'] = array(
+    'title' => 'Translate dates',
+    'description' => 'Translate date and time formats.',
+    'page callback' => 'locale_translate_date_page',
+    'access arguments' => array('translate interface'),
+    'file' => 'locale.pages.inc',
+    'type' => MENU_LOCAL_TASK,
+    'weight' => 10,
+  );
+  $items['admin/config/regional/translate/date-time/%/reset'] = array(
+    'title' => 'Reset date formats',
+    'description' => 'Reset localized date formats to global defaults',
+    'route_name' => 'date_format_localize_reset',
+  );
   $items['admin/config/regional/translate/import'] = array(
     'title' => 'Import',
     'page callback' => 'drupal_get_form',
@@ -240,6 +254,10 @@ function locale_theme() {
       'render element' => 'form',
       'file' => 'locale.pages.inc',
     ),
+    'locale_translate_edit_form_dates' => array(
+      'render element' => 'form',
+      'file' => 'locale.pages.inc',
+    ),
     'locale_translation_last_check' => array(
       'variables' => array('last' => NULL),
       'file' => 'locale.pages.inc',
diff --git a/core/modules/locale/locale.pages.inc b/core/modules/locale/locale.pages.inc
index 83777b6..4f71414 100644
--- a/core/modules/locale/locale.pages.inc
+++ b/core/modules/locale/locale.pages.inc
@@ -4,7 +4,9 @@
  * @file
  * Interface translation summary, editing and deletion user interfaces.
  */
-
+use Drupal\Core\Ajax\AjaxResponse;
+use Drupal\Core\Ajax\ReplaceCommand;
+use Drupal\Core\Datetime\DrupalDateTime;
 use Drupal\Core\Language\Language;
 use Drupal\locale\SourceString;
 use Drupal\locale\TranslationString;
@@ -94,8 +96,11 @@ function locale_translate_filter_values() {
 
 /**
  * List locale translation filters that can be applied.
+ *
+ * @param string $type
+ *   Form tipe: 'strings' | 'dates'
  */
-function locale_translate_filters() {
+function locale_translate_filters($type = 'strings') {
   $filters = array();
 
   // Get all languages, except English.
@@ -115,11 +120,13 @@ function locale_translate_filters() {
     $default_langcode = array_shift($available_langcodes);
   }
 
-  $filters['string'] = array(
-    'title' => t('String contains'),
-    'description' => t('Leave blank to show all strings. The search is case sensitive.'),
-    'default' => '',
-  );
+  if ($type == 'strings') {
+    $filters['string'] = array(
+      'title' => t('String contains'),
+      'description' => t('Leave blank to show all strings. The search is case sensitive.'),
+      'default' => '',
+    );
+  }
 
   $filters['langcode'] = array(
     'title' => t('Translation language'),
@@ -127,30 +134,32 @@ function locale_translate_filters() {
     'default' => $default_langcode,
   );
 
-  $filters['translation'] = array(
-    'title' => t('Search in'),
-    'options' => array(
-      'all' => t('Both translated and untranslated strings'),
-      'translated' => t('Only translated strings'),
-      'untranslated' => t('Only untranslated strings'),
-    ),
-    'default' => 'all',
-  );
+  if ($type == 'strings') {
+    $filters['translation'] = array(
+      'title' => t('Search in'),
+      'options' => array(
+        'all' => t('Both translated and untranslated strings'),
+        'translated' => t('Only translated strings'),
+        'untranslated' => t('Only untranslated strings'),
+      ),
+      'default' => 'all',
+    );
 
-  $filters['customized'] = array(
-    'title' => t('Translation type'),
-    'options' => array(
-      'all' => t('All'),
-      LOCALE_NOT_CUSTOMIZED => t('Non-customized translation'),
-      LOCALE_CUSTOMIZED => t('Customized translation'),
-    ),
-    'states' => array(
-      'visible' => array(
-        ':input[name=translation]' => array('value' => 'translated'),
+    $filters['customized'] = array(
+      'title' => t('Translation type'),
+      'options' => array(
+        'all' => t('All'),
+        LOCALE_NOT_CUSTOMIZED => t('Non-customized translation'),
+        LOCALE_CUSTOMIZED => t('Customized translation'),
       ),
-    ),
-    'default' => 'all',
-  );
+      'states' => array(
+        'visible' => array(
+          ':input[name=translation]' => array('value' => 'translated'),
+        ),
+      ),
+      'default' => 'all',
+    );
+  }
 
   return $filters;
 }
@@ -160,8 +169,8 @@ function locale_translate_filters() {
  *
  * @ingroup forms
  */
-function locale_translate_filter_form($form, &$form_state) {
-  $filters = locale_translate_filters();
+function locale_translate_filter_form($form, &$form_state, $type = 'strings') {
+  $filters = locale_translate_filters($type);
   $filter_values = locale_translate_filter_values();
 
   $form['#attached']['css'] = array(
@@ -170,7 +179,7 @@ function locale_translate_filter_form($form, &$form_state) {
 
   $form['filters'] = array(
     '#type' => 'details',
-    '#title' => t('Filter translatable strings'),
+    '#title' => $type == 'strings' ? t('Filter translatable strings') : t('Filter translatable dates'),
     '#collapsed' => FALSE,
   );
   foreach ($filters as $key => $filter) {
@@ -239,7 +248,7 @@ function locale_translate_filter_form_submit($form, &$form_state) {
 
   }
 
-  $form_state['redirect'] = 'admin/config/regional/translate/translate';
+  //$form_state['redirect'] = 'admin/config/regional/translate/translate';
 }
 
 /**
@@ -469,6 +478,163 @@ function locale_translate_edit_form_submit($form, &$form_state) {
 }
 
 /**
+ * Page callback: Shows the string search screen.
+ *
+ * @see locale_menu()
+ */
+function locale_translate_date_page() {
+  return array(
+    'filter' => drupal_get_form('locale_translate_filter_form', 'dates'),
+    'form' => drupal_get_form('locale_translate_date_edit_form'),
+  );
+}
+
+/**
+ * Form constructor for the date editing form.
+ *
+ * @see locale_menu()
+ * @see locale_translate_edit_form_validate()
+ * @see locale_translate_edit_form_submit()
+ *
+ * @ingroup forms
+ */
+function locale_translate_date_edit_form($form, &$form_state) {
+  $filter_values = locale_translate_filter_values();
+  $langcode = $filter_values['langcode'];
+
+  drupal_static_reset('language_list');
+  $languages = language_list();
+
+  $langname = isset($langcode) ? $languages[$langcode]->name : "- None -";
+
+  $path = drupal_get_path('module', 'locale');
+  $form['#attached']['css'] = array(
+    $path . '/css/locale.admin.css',
+  );
+  $form['#attached']['library'][] = array('locale', 'drupal.locale.admin');
+
+  $form['langcode'] = array(
+    '#type' => 'value',
+    '#value' => $filter_values['langcode'],
+  );
+
+  $form['strings'] = array(
+    '#type' => 'item',
+    '#tree' => TRUE,
+    '#language' => $langname,
+    '#theme' => 'locale_translate_edit_form_dates',
+  );
+
+  if (isset($langcode)) {
+    // Get list of available formats.
+    config_context_enter('config.context.free');
+    $date_service = Drupal::service('date');
+    $formats = Drupal::entityManager()
+      ->getStorageController('date_format')
+      ->loadMultiple();
+    // Check the pattern type to use
+    $date = new DrupalDateTime();
+    $patternType = $date->canUseIntl() ? DrupalDateTime::INTL : DrupalDateTime::PHP;
+    $form['pattern_type'] = array('#type' => 'value', '#value' => $patternType);
+
+    foreach ($formats as $date_format_id => $format_info) {
+      // @todo Ignore values that are localized.
+      $form['strings'][$date_format_id]['name'] = array(
+          '#type' => 'item',
+          '#title' => t('Format name'),
+          '#title_display' => 'invisible',
+          '#markup' => '<span lang="en">' . check_plain($format_info->label). '</span>',
+      );
+      $form['strings'][$date_format_id]['original'] = array(
+          '#type' => 'item',
+          '#title' => t('Format string'),
+          '#title_display' => 'invisible',
+          '#markup' => '<span lang="en">' . $format_info->getPattern($patternType). '</span>',
+      );
+      $form['strings'][$date_format_id]['sample'] = array(
+          '#type' => 'item',
+          '#title' => t('Date format'),
+          '#title_display' => 'invisible',
+          '#markup' => '<span lang="en">' . $date_service->format(REQUEST_TIME, $date_format_id) . '</span>',
+      );
+      // Find translated string if available.
+      $config_translation = _locale_translation_date_get_format($date_format_id, $langcode);
+      $translation_pattern = $config_translation->get('pattern.' . $patternType);
+      $translation_display = $translation_pattern ? \Drupal::service('date')->format(REQUEST_TIME, 'custom', $translation_pattern) : '';
+      $form['strings'][$date_format_id]['translation'] = array(
+        '#type' => 'textfield',
+        '#title' => t('Translated string (@language)', array('@language' => $langname)),
+        '#title_display' => 'invisible',
+        '#default_value' => $translation_pattern ?: '',
+        '#attributes' => array('lang' => $langcode),
+        '#size' => 20,
+        '#ajax' => array(
+          'callback' => '_locale_translation_date_ajax_format',
+          'event' => 'keyup',
+          'progress' => array('type' => 'throbber', 'message' => NULL),
+        ),
+      );
+      $form['strings'][$date_format_id]['display'] = array(
+        '#type' => 'item',
+        '#title' => t('Date display'),
+        '#title_display' => 'invisible',
+        '#markup' => $translation_display ?: '',
+        '#attributes' => array('lang' => $langcode),
+        '#field_prefix' => '<small id="edit-date-format-' . $date_format_id . '-display">',
+        '#field_suffix' => ' </small>',
+
+      );
+    }
+
+    if (count(element_children($form['strings']))) {
+      $form['actions'] = array('#type' => 'actions');
+      $form['actions']['submit'] = array('#type' => 'submit', '#value' => t('Save translations'));
+    }
+    $form['actions']['reset'] = array('#type' => 'markup', '#markup' => l(t('Reset date formats'), 'admin/config/regional/translate/date-time/' . $langcode . '/reset'));
+    // Leave free config context.
+    config_context_leave();
+  }
+  return $form;
+}
+
+/**
+ * Form submission handler for locale_translate_edit_form().
+ *
+ * @see locale_translate_edit_form_validate()
+ */
+function locale_translate_date_edit_form_submit($form, &$form_state) {
+  $langcode = $form_state['values']['langcode'];
+  $patternType = $form_state['values']['pattern_type'];
+  // Get all translations for format strings in the form.
+  $translations = $form_state['values']['strings'];
+
+  // Get list of available formats.
+  config_context_enter('config.context.free');
+  $date_service = Drupal::service('date');
+  $formats = Drupal::entityManager()
+    ->getStorageController('date_format')
+    ->loadMultiple();
+
+  // Check each translation for changes.
+  foreach ($formats as $format_id => $format_info) {
+    $config_translation = _locale_translation_date_get_format($format_id, $langcode);
+    $source_pattern = $format_info->getPattern($patternType);
+    $translation_pattern = $config_translation->get('pattern.' . $patternType);
+    if (isset($translations[$format_id]) && !empty($translations[$format_id]['translation']) && $translations[$format_id]['translation'] != $source_pattern ) {
+      $config_translation->set('pattern.' . $patternType , $translations[$format_id]['translation'])
+        ->save();
+    }
+    elseif ($config_translation->get('pattern.' . $patternType)) {
+      $config_translation->clear('pattern.' . $patternType)->save();
+    }
+  }
+
+  // Leave free config context.
+  config_context_leave();
+}
+
+
+/**
  * Page callback: Display the current translation status.
  *
  * @see locale_menu()
@@ -687,6 +853,49 @@ function _locale_translation_status_debug_info($source) {
 }
 
 /**
+ * Gets configuration translation for a date format and language.
+ *
+ * @param string $format_id
+ *   Date format unique id.
+ * @param string $langcode
+ *   Language code
+ *
+ * @return \Drupal\Core\Config
+ *   Configuration object.
+ */
+function _locale_translation_date_get_format($format_id, $langcode) {
+  return config('locale.config.' . $langcode . '.system.date_format.' . $format_id);
+}
+
+/**
+ * Returns the date for a given format string.
+ *
+ * @param array $form
+ *   An associative array containing the structure of the form.
+ * @param array $form_state
+ *   An associative array containing the current state of the form.
+ *
+ * @return \Drupal\Core\Ajax\AjaxResponse
+ *   An AJAX Response to update the date-time value of the date format.
+ */
+function _locale_translation_date_ajax_format(array $form, array $form_state) {
+  $element = $form_state['triggering_element'];
+  $format_id = $element['#parents'][1];
+  $format = '';
+  if (!empty($form_state['values']['strings'][$format_id]['translation'])) {
+    $format = \Drupal::service('date')->format(REQUEST_TIME, 'custom', $form_state['values']['strings'][$format_id]['translation']);
+  }
+  // Return a command instead of a string, since the Ajax framework
+  // automatically prepends an additional empty DIV element for a string, which
+  // breaks the layout.
+  $response = new AjaxResponse();
+  $replace_id = 'edit-date-format-' . $format_id . '-display';
+  $response->addCommand(new ReplaceCommand('#' . $replace_id, '<small id="' . $replace_id . '">' . $format . '</small>'));
+  return $response;
+}
+
+
+/**
  * Returns HTML for translation edit form.
  *
  * @param array $variables
@@ -727,6 +936,46 @@ function theme_locale_translate_edit_form_strings($variables) {
   $output .= theme('pager');
   return $output;
 }
+/**
+ * Returns HTML for translation edit form.
+ *
+ * @param array $variables
+ *   An associative array containing:
+ *   - form: The form that contains the language information.
+ *
+ * @see locale_translate_edit_form()
+ * @ingroup themeable
+ */
+function theme_locale_translate_edit_form_dates($variables) {
+  $output = '';
+  $form = $variables['form'];
+  $header = array(
+    t('Name'),
+    t('Format string'),
+    t('Current date'),
+    t('Translation for @language', array('@language' => $form['#language'])),
+    t('Displayed as'),
+  );
+  $rows = array();
+  foreach (element_children($form) as $format_id) {
+    $format = $form[$format_id];
+    $rows[] = array(
+      array('data' => drupal_render($format['name'])),
+      array('data' => drupal_render($format['original'])),
+      array('data' => drupal_render($format['sample'])),
+      array('data' => drupal_render($format['translation'])),
+      array('data' => drupal_render($format['display'])),
+    );
+  }
+  $output .= theme('table', array(
+    'header' => $header,
+    'rows' => $rows,
+    'empty' => t('No date formats available.'),
+    'attributes' => array('class' => array('locale-translate-edit-table')),
+  ));
+
+  return $output;
+}
 
 /**
  * Prepares variables for translation status information templates.
diff --git a/core/modules/locale/locale.routing.yml b/core/modules/locale/locale.routing.yml
index 2047229..362d8a1 100644
--- a/core/modules/locale/locale.routing.yml
+++ b/core/modules/locale/locale.routing.yml
@@ -11,3 +11,10 @@ locale_check_translation:
     _controller: 'Drupal\locale\Controller\LocaleController::checkTranslation'
   requirements:
     _permission: 'translate interface'
+
+date_format_localize_reset:
+  pattern: 'admin/config/regional/translate/date-time/{langcode}/reset'
+  defaults:
+    _form: '\Drupal\locale\Form\DateFormatLocalizeResetForm'
+  requirements:
+    _permission: 'administer site configuration'
\ No newline at end of file
diff --git a/core/modules/system/lib/Drupal/system/Form/DateFormatLocalizeResetForm.php b/core/modules/system/lib/Drupal/system/Form/DateFormatLocalizeResetForm.php
deleted file mode 100644
index d3de481..0000000
--- a/core/modules/system/lib/Drupal/system/Form/DateFormatLocalizeResetForm.php
+++ /dev/null
@@ -1,112 +0,0 @@
-<?php
-
-/**
- * @file
- * Contains \Drupal\system\Form\DateFormatLocalizeResetForm.
- */
-
-namespace Drupal\system\Form;
-
-use Drupal\Core\Controller\ControllerInterface;
-use Drupal\Core\Form\ConfirmFormBase;
-use Drupal\Core\Config\ConfigFactory;
-use Symfony\Component\DependencyInjection\ContainerInterface;
-use Symfony\Component\HttpFoundation\Request;
-
-/**
- * Builds a form for enabling a module.
- */
-class DateFormatLocalizeResetForm extends ConfirmFormBase implements ControllerInterface {
-
-  /**
-   * The language to be reset.
-   *
-   * @var \Drupal\Core\Language\Language;
-   */
-  protected $language;
-
-  /**
-   * The config factory.
-   *
-   * @var \Drupal\Core\Config\ConfigFactory
-   */
-  protected $configFactory;
-
-  /**
-   * Constructs a DateFormatLocalizeResetForm object.
-   */
-  public function __construct(ConfigFactory $config_factory) {
-    $this->configFactory = $config_factory;
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public static function create(ContainerInterface $container) {
-    return new static(
-      $container->get('config.factory')
-    );
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getFormID() {
-    return 'system_date_format_localize_reset_form';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getQuestion() {
-    return t('Are you sure you want to reset the date formats for %language to the global defaults?', array(
-      '%language' => $this->language->name,
-    ));
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getConfirmText() {
-    return t('Reset');
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getCancelPath() {
-    return 'admin/config/regional/date-time/locale';
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function getDescription() {
-    return t('Resetting will remove all localized date formats for this language. This action cannot be undone.');
-  }
-
-  /**
-   * {@inheritdoc}
-   *
-   * @param string $langcode
-   *   The language code.
-   *
-   */
-  public function buildForm(array $form, array &$form_state, $langcode = NULL, Request $request = NULL) {
-    $this->language = language_load($langcode);
-
-    return parent::buildForm($form, $form_state, $request);
-  }
-
-  /**
-   * {@inheritdoc}
-   */
-  public function submitForm(array &$form, array &$form_state) {
-    foreach (config_get_storage_names_with_prefix('locale.config.' . $this->language->id . '.system.date_format.') as $config_id) {
-      $this->configFactory->get($config_id)->delete();
-    }
-
-    $form_state['redirect'] = 'admin/config/regional/date-time/locale';
-  }
-
-}
diff --git a/core/modules/system/system.admin.inc b/core/modules/system/system.admin.inc
index 05c67a7..d4fac7b 100644
--- a/core/modules/system/system.admin.inc
+++ b/core/modules/system/system.admin.inc
@@ -823,165 +823,3 @@ function theme_system_themes_page($variables) {
   return $output;
 }
 
-/**
- * Page callback: Displays edit date format links for each language.
- *
- * @see locale_menu()
- */
-function system_date_format_language_overview_page() {
-  $header = array(t('Language'), t('Operations'));
-
-  $languages = language_list();
-  foreach ($languages as $langcode => $language) {
-    $row = array();
-    $row[] = $language->name;
-    $links = array();
-    $links['edit'] = array(
-      'title' => t('Edit'),
-      'href' => "admin/config/regional/date-time/locale/$langcode/edit",
-    );
-    $links['reset'] = array(
-      'title' => t('Reset'),
-      'href' => "admin/config/regional/date-time/locale/$langcode/reset",
-    );
-    $row[] = array(
-      'data' => array(
-        '#type' => 'operations',
-        '#links' => $links,
-      ),
-    );
-    $rows[] = $row;
-  }
-
-  return theme('table', array('header' => $header, 'rows' => $rows));
-}
-
-/**
- * Form constructor for the date localization configuration form.
- *
- * @param $langcode
- *   The code for the current language.
- *
- * @see locale_menu()
- * @see system_date_format_localize_form_submit()
- * @ingroup forms
- */
-function system_date_format_localize_form($form, &$form_state, $langcode) {
-  // Display the current language name.
-  $form['language'] = array(
-    '#type' => 'item',
-    '#title' => t('Language'),
-    '#markup' => language_load($langcode)->name,
-    '#weight' => -10,
-  );
-  $form['langcode'] = array(
-    '#type' => 'value',
-    '#value' => $langcode,
-  );
-
-  // Get list of available formats.
-  $date_service = Drupal::service('date');
-  $formats = Drupal::entityManager()
-    ->getStorageController('date_format')
-    ->loadMultiple();
-  $choices = array();
-  foreach ($formats as $date_format_id => $format_info) {
-    // Ignore values that are localized.
-    if (!$format_info->hasLocales()) {
-      $choices[$date_format_id] = $date_service->format(REQUEST_TIME, $date_format_id);
-    }
-  }
-
-  // Get configured formats for each language.
-  $config_prefix = 'locale.config.' . $langcode . '.system.date_format.';
-  foreach (config_get_storage_names_with_prefix($config_prefix) as $config_id) {
-    $date_format_id = substr($config_id, strlen($config_prefix));
-    $choices[$date_format_id] = $date_service->format(REQUEST_TIME, $date_format_id);
-  }
-
-  // Display a form field for each format type.
-  foreach ($formats as $date_format_id => $format_info) {
-    // Show date format select list.
-    $form['date_formats']['date_format_' . $date_format_id] = array(
-      '#type' => 'select',
-      '#title' => check_plain($format_info->label()),
-      '#attributes' => array('class' => array('date-format')),
-      '#default_value' => isset($choices[$date_format_id]) ? $date_format_id : 'custom',
-      '#options' => $choices,
-    );
-  }
-
-  $form['actions'] = array('#type' => 'actions');
-  $form['actions']['submit'] = array(
-    '#type' => 'submit',
-    '#value' => t('Save configuration'),
-  );
-
-  return $form;
-}
-
-/**
- * Form submission handler for system_date_format_localize_form().
- */
-function system_date_format_localize_form_submit($form, &$form_state) {
-  $langcode = $form_state['values']['langcode'];
-
-  $formats = entity_load_multiple('date_format');
-  foreach ($formats as $date_format_id => $format_info) {
-    if (isset($form_state['values']['date_format_' . $date_format_id])) {
-      $format = $form_state['values']['date_format_' . $date_format_id];
-      system_date_format_localize_form_save($langcode, $date_format_id, $formats[$format]);
-    }
-  }
-  drupal_set_message(t('Configuration saved.'));
-  $form_state['redirect'] = 'admin/config/regional/date-time/locale';
-}
-
-/**
- * Returns HTML for a locale date format form.
- *
- * @param $variables
- *   An associative array containing:
- *   - form: A render element representing the form.
- *
- * @ingroup themeable
- */
-function theme_system_date_format_localize_form($variables) {
-  $form = $variables['form'];
-  $header = array(
-    'machine_name' => t('Machine Name'),
-    'pattern' => t('Format'),
-  );
-
-  foreach (element_children($form['date_formats']) as $key) {
-    $row = array();
-    $row[] = $form['date_formats'][$key]['#title'];
-    unset($form['date_formats'][$key]['#title']);
-    $row[] = array('data' => drupal_render($form['date_formats'][$key]));
-    $rows[] = $row;
-  }
-
-  $output = drupal_render($form['language']);
-  $output .= theme('table', array('header' => $header, 'rows' => $rows));
-  $output .= drupal_render_children($form);
-
-  return $output;
-}
-
-/**
- * Save locale specific date formats to the database.
- *
- * @param string $langcode
- *   Language code, can be 2 characters, e.g. 'en' or 5 characters, e.g.
- *   'en-CA'.
- * @param string $date_format_id
- *   Date format id, e.g. 'short', 'medium'.
- * @param \Drupal\system\DateFormatInterface $format
- *   The date format entity.
- */
-function system_date_format_localize_form_save($langcode, $date_format_id, DateFormatInterface $format) {
-  $format->addLocale($langcode)->save();
-  config('locale.config.' . $langcode . '.system.date_format.' . $date_format_id)
-    ->set('pattern', $format->get('pattern'))
-    ->save();
-}
diff --git a/core/modules/system/system.module b/core/modules/system/system.module
index fc7bb6d..b3ae7f3 100644
--- a/core/modules/system/system.module
+++ b/core/modules/system/system.module
@@ -938,32 +938,6 @@ function system_menu() {
     'file' => 'system.admin.inc',
   );
 
-  // Localize date formats.
-  if (module_exists('language')) {
-    $items['admin/config/regional/date-time/locale'] = array(
-      'title' => 'Localize',
-      'description' => 'Configure date formats for each locale',
-      'page callback' => 'system_date_format_language_overview_page',
-      'access arguments' => array('administer site configuration'),
-      'type' => MENU_LOCAL_TASK,
-      'weight' => -8,
-      'file' => 'system.admin.inc',
-    );
-    $items['admin/config/regional/date-time/locale/%/edit'] = array(
-      'title' => 'Localize date formats',
-      'description' => 'Configure date formats for each locale',
-      'page callback' => 'drupal_get_form',
-      'page arguments' => array('system_date_format_localize_form', 5),
-      'access arguments' => array('administer site configuration'),
-      'file' => 'system.admin.inc',
-    );
-    $items['admin/config/regional/date-time/locale/%/reset'] = array(
-      'title' => 'Reset date formats',
-      'description' => 'Reset localized date formats to global defaults',
-      'route_name' => 'date_format_localize_reset',
-    );
-  }
-
   foreach (drupal_container()->get('plugin.manager.system.plugin_ui')->getDefinitions() as $plugin_id => $plugin) {
     if ($plugin['menu'] === TRUE) {
       $items[$plugin['path'] . '/' . $plugin_id . '/' . $plugin['suffix']] = array(
diff --git a/core/modules/system/system.routing.yml b/core/modules/system/system.routing.yml
index 61363d6..f715633 100644
--- a/core/modules/system/system.routing.yml
+++ b/core/modules/system/system.routing.yml
@@ -115,13 +115,6 @@ date_format_delete:
   requirements:
     _entity_access: 'date_format.delete'
 
-date_format_localize_reset:
-  pattern: 'admin/config/regional/date-time/locale/{langcode}/reset'
-  defaults:
-    _form: '\Drupal\system\Form\DateFormatLocalizeResetForm'
-  requirements:
-    _permission: 'administer site configuration'
-
 system_modules_list:
   pattern: 'admin/modules'
   defaults:
