diff --git a/core/modules/locale/lib/Drupal/locale/Form/ExportForm.php b/core/modules/locale/lib/Drupal/locale/Form/ExportForm.php new file mode 100644 index 0000000..549e6b1 --- /dev/null +++ b/core/modules/locale/lib/Drupal/locale/Form/ExportForm.php @@ -0,0 +1,171 @@ +loadInclude('language', 'inc', 'language.admin'); + $languages = language_list(); + $language_options = array(); + foreach ($languages as $langcode => $language) { + if ($langcode != 'en' || locale_translate_english()) { + $language_options[$langcode] = $language->name; + } + } + $language_default = language_default(); + + if (empty($language_options)) { + $form['langcode'] = array( + '#type' => 'value', + '#value' => LANGUAGE_SYSTEM, + ); + $form['langcode_text'] = array( + '#type' => 'item', + '#title' => t('Language'), + '#markup' => t('No language available. The export will only contain source strings.'), + ); + } + else { + $form['langcode'] = array( + '#type' => 'select', + '#title' => t('Language'), + '#options' => $language_options, + '#default_value' => $language_default->langcode, + '#empty_option' => t('Source text only, no translations'), + '#empty_value' => LANGUAGE_SYSTEM, + ); + $form['content_options'] = array( + '#type' => 'details', + '#title' => t('Export options'), + '#collapsed' => TRUE, + '#tree' => TRUE, + '#states' => array( + 'invisible' => array( + ':input[name="langcode"]' => array('value' => LANGUAGE_SYSTEM), + ), + ), + ); + $form['content_options']['not_customized'] = array( + '#type' => 'checkbox', + '#title' => t('Include non-customized translations'), + '#default_value' => TRUE, + ); + $form['content_options']['customized'] = array( + '#type' => 'checkbox', + '#title' => t('Include customized translations'), + '#default_value' => TRUE, + ); + $form['content_options']['not_translated'] = array( + '#type' => 'checkbox', + '#title' => t('Include untranslated text'), + '#default_value' => TRUE, + ); + } + + $form['actions'] = array( + '#type' => 'actions' + ); + $form['actions']['submit'] = array( + '#type' => 'submit', + '#value' => t('Export') + ); + return $form; + } + + /** + * {@inheritdoc} + */ + public function validateForm(array &$form, array &$form_state) { + } + + /** + * {@inheritdoc} + */ + public function submitForm(array &$form, array &$form_state) { + // If template is required, language code is not given. + if ($form_state['values']['langcode'] != LANGUAGE_SYSTEM) { + $language = language_load($form_state['values']['langcode']); + } + else { + $language = NULL; + } + $content_options = isset($form_state['values']['content_options']) ? $form_state['values']['content_options'] : array(); + $reader = new PoDatabaseReader(); + $languageName = ''; + if ($language != NULL) { + $reader->setLangcode($language->langcode); + $reader->setOptions($content_options); + $languages = language_list(); + $languageName = isset($languages[$language->langcode]) ? $languages[$language->langcode]->name : ''; + $filename = $language->langcode .'.po'; + } + else { + // Template required. + $filename = 'drupal.pot'; + } + + $item = $reader->readItem(); + if (!empty($item)) { + $uri = tempnam('temporary://', 'po_'); + $header = $reader->getHeader(); + $header->setProjectName(config('system.site')->get('name')); + $header->setLanguageName($languageName); + + $writer = new PoStreamWriter; + $writer->setUri($uri); + $writer->setHeader($header); + + $writer->open(); + $writer->writeItem($item); + $writer->writeItems($reader); + $writer->close(); + + header("Content-Disposition: attachment; filename=$filename"); + header("Content-Type: text/plain; charset=utf-8"); + print file_get_contents($uri); + drupal_exit(); + } + else { + drupal_set_message('Nothing to export.'); + } + } +} diff --git a/core/modules/locale/locale.bulk.inc b/core/modules/locale/locale.bulk.inc index 5173132..58f19f6 100644 --- a/core/modules/locale/locale.bulk.inc +++ b/core/modules/locale/locale.bulk.inc @@ -5,9 +5,7 @@ * Mass import-export and batch import functionality for Gettext .po files. */ -use Drupal\Component\Gettext\PoStreamWriter; use Drupal\locale\Gettext; -use Drupal\locale\PoDatabaseReader; use Drupal\Core\Language\Language; @@ -139,132 +137,6 @@ function locale_translate_import_form_submit($form, &$form_state) { } /** - * Form constructor for the Gettext translation files export form. - * - * @see locale_translate_export_form_submit() - * @ingroup forms - */ -function locale_translate_export_form($form, &$form_state) { - $languages = language_list(); - $language_options = array(); - foreach ($languages as $langcode => $language) { - if ($langcode != 'en' || locale_translate_english()) { - $language_options[$langcode] = $language->name; - } - } - $language_default = language_default(); - - if (empty($language_options)) { - $form['langcode'] = array( - '#type' => 'value', - '#value' => LANGUAGE_SYSTEM, - ); - $form['langcode_text'] = array( - '#type' => 'item', - '#title' => t('Language'), - '#markup' => t('No language available. The export will only contain source strings.'), - ); - } - else { - $form['langcode'] = array( - '#type' => 'select', - '#title' => t('Language'), - '#options' => $language_options, - '#default_value' => $language_default->langcode, - '#empty_option' => t('Source text only, no translations'), - '#empty_value' => LANGUAGE_SYSTEM, - ); - $form['content_options'] = array( - '#type' => 'details', - '#title' => t('Export options'), - '#collapsed' => TRUE, - '#tree' => TRUE, - '#states' => array( - 'invisible' => array( - ':input[name="langcode"]' => array('value' => LANGUAGE_SYSTEM), - ), - ), - ); - $form['content_options']['not_customized'] = array( - '#type' => 'checkbox', - '#title' => t('Include non-customized translations'), - '#default_value' => TRUE, - ); - $form['content_options']['customized'] = array( - '#type' => 'checkbox', - '#title' => t('Include customized translations'), - '#default_value' => TRUE, - ); - $form['content_options']['not_translated'] = array( - '#type' => 'checkbox', - '#title' => t('Include untranslated text'), - '#default_value' => TRUE, - ); - } - - $form['actions'] = array( - '#type' => 'actions' - ); - $form['actions']['submit'] = array( - '#type' => 'submit', - '#value' => t('Export') - ); - return $form; -} - -/** - * Form submission handler for locale_translate_export_form(). - */ -function locale_translate_export_form_submit($form, &$form_state) { - // If template is required, language code is not given. - if ($form_state['values']['langcode'] != LANGUAGE_SYSTEM) { - $language = language_load($form_state['values']['langcode']); - } - else { - $language = NULL; - } - $content_options = isset($form_state['values']['content_options']) ? $form_state['values']['content_options'] : array(); - $reader = new PoDatabaseReader(); - $languageName = ''; - if ($language != NULL) { - $reader->setLangcode($language->langcode); - $reader->setOptions($content_options); - $languages = language_list(); - $languageName = isset($languages[$language->langcode]) ? $languages[$language->langcode]->name : ''; - $filename = $language->langcode .'.po'; - } - else { - // Template required. - $filename = 'drupal.pot'; - } - - $item = $reader->readItem(); - if (!empty($item)) { - $uri = tempnam('temporary://', 'po_'); - $header = $reader->getHeader(); - $header->setProjectName(config('system.site')->get('name')); - $header->setLanguageName($languageName); - - $writer = new PoStreamWriter; - $writer->setUri($uri); - $writer->setHeader($header); - - $writer->open(); - $writer->writeItem($item); - $writer->writeItems($reader); - $writer->close(); - - header("Content-Disposition: attachment; filename=$filename"); - header("Content-Type: text/plain; charset=utf-8"); - print file_get_contents($uri); - drupal_exit(); - } - else { - drupal_set_message('Nothing to export.'); - } -} - -/** * Prepare a batch to import all translations. * * @param array $options diff --git a/core/modules/locale/locale.module b/core/modules/locale/locale.module index 75e0a22..a03ef42 100644 --- a/core/modules/locale/locale.module +++ b/core/modules/locale/locale.module @@ -207,12 +207,9 @@ function locale_menu() { ); $items['admin/config/regional/translate/export'] = array( 'title' => 'Export', - 'page callback' => 'drupal_get_form', - 'page arguments' => array('locale_translate_export_form'), - 'access arguments' => array('translate interface'), + 'route_name' => 'locale_translate_export', 'weight' => 30, 'type' => MENU_LOCAL_TASK, - 'file' => 'locale.bulk.inc', ); $items['admin/config/regional/translate/settings'] = array( 'title' => 'Settings', diff --git a/core/modules/locale/locale.routing.yml b/core/modules/locale/locale.routing.yml index a2a5820..dace935 100644 --- a/core/modules/locale/locale.routing.yml +++ b/core/modules/locale/locale.routing.yml @@ -4,3 +4,10 @@ locale_settings: _form: 'Drupal\locale\Form\LocaleSettingsForm' requirements: _permission: 'translate interface' + +locale_translate_export: + pattern: 'admin/config/regional/translate/export' + defaults: + _form: 'Drupal\locale\Form\ExportForm' + requirements: + _permission: 'translate interface'