public function TranslationStatusForm::buildForm in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/locale/src/Form/TranslationStatusForm.php \Drupal\locale\Form\TranslationStatusForm::buildForm()
Form builder for displaying the current translation status.
Overrides FormInterface::buildForm
File
- core/
modules/ locale/ src/ Form/ TranslationStatusForm.php, line 70 - Contains \Drupal\locale\Form\TranslationStatusForm.
Class
- TranslationStatusForm
- Provides a translation status form.
Namespace
Drupal\locale\FormCode
public function buildForm(array $form, FormStateInterface $form_state) {
$languages = locale_translatable_language_list();
$status = locale_translation_get_status();
$options = array();
$languages_update = array();
$languages_not_found = array();
$projects_update = array();
// Prepare information about projects which have available translation
// updates.
if ($languages && $status) {
$updates = $this
->prepareUpdateData($status);
// Build data options for the select table.
foreach ($updates as $langcode => $update) {
$title = $languages[$langcode]
->getName();
$locale_translation_update_info = array(
'#theme' => 'locale_translation_update_info',
);
foreach (array(
'updates',
'not_found',
) as $update_status) {
if (isset($update[$update_status])) {
$locale_translation_update_info['#' . $update_status] = $update[$update_status];
}
}
$options[$langcode] = array(
'title' => array(
'data' => array(
'#title' => $title,
'#plain_text' => $title,
),
),
'status' => array(
'class' => array(
'description',
'priority-low',
),
'data' => $locale_translation_update_info,
),
);
if (!empty($update['not_found'])) {
$languages_not_found[$langcode] = $langcode;
}
if (!empty($update['updates'])) {
$languages_update[$langcode] = $langcode;
}
}
// Sort the table data on language name.
uasort($options, function ($a, $b) {
return strcasecmp($a['title']['data']['#title'], $b['title']['data']['#title']);
});
$languages_not_found = array_diff($languages_not_found, $languages_update);
}
$last_checked = $this->state
->get('locale.translation_last_checked');
$form['last_checked'] = array(
'#theme' => 'locale_translation_last_check',
'#last' => $last_checked,
);
$header = array(
'title' => array(
'data' => $this
->t('Language'),
'class' => array(
'title',
),
),
'status' => array(
'data' => $this
->t('Status'),
'class' => array(
'status',
'priority-low',
),
),
);
if (!$languages) {
$empty = $this
->t('No translatable languages available. <a href=":add_language">Add a language</a> first.', array(
':add_language' => $this
->url('entity.configurable_language.collection'),
));
}
elseif ($status) {
$empty = $this
->t('All translations up to date.');
}
else {
$empty = $this
->t('No translation status available. <a href=":check">Check manually</a>.', array(
':check' => $this
->url('locale.check_translation'),
));
}
// The projects which require an update. Used by the _submit callback.
$form['projects_update'] = array(
'#type' => 'value',
'#value' => $projects_update,
);
$form['langcodes'] = array(
'#type' => 'tableselect',
'#header' => $header,
'#options' => $options,
'#default_value' => $languages_update,
'#empty' => $empty,
'#js_select' => TRUE,
'#multiple' => TRUE,
'#required' => TRUE,
'#not_found' => $languages_not_found,
'#after_build' => array(
'locale_translation_language_table',
),
);
$form['#attached']['library'][] = 'locale/drupal.locale.admin';
$form['actions'] = array(
'#type' => 'actions',
);
if ($languages_update) {
$form['actions']['submit'] = array(
'#type' => 'submit',
'#value' => $this
->t('Update translations'),
);
}
return $form;
}