public function TranslationStatusForm::buildForm in Drupal 10
Same name and namespace in other branches
- 8 core/modules/locale/src/Form/TranslationStatusForm.php \Drupal\locale\Form\TranslationStatusForm::buildForm()
- 9 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 68
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 = [];
$languages_update = [];
$languages_not_found = [];
$projects_update = [];
// 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 = [
'#theme' => 'locale_translation_update_info',
];
foreach ([
'updates',
'not_found',
] as $update_status) {
if (isset($update[$update_status])) {
$locale_translation_update_info['#' . $update_status] = $update[$update_status];
}
}
$options[$langcode] = [
'title' => [
'data' => [
'#title' => $title,
'#plain_text' => $title,
],
],
'status' => [
'class' => [
'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'] = [
'#theme' => 'locale_translation_last_check',
'#last' => $last_checked,
];
$header = [
'title' => [
'data' => $this
->t('Language'),
'class' => [
'title',
],
],
'status' => [
'data' => $this
->t('Status'),
'class' => [
'status',
'priority-low',
],
],
];
if (!$languages) {
$empty = $this
->t('No translatable languages available. <a href=":add_language">Add a language</a> first.', [
':add_language' => Url::fromRoute('entity.configurable_language.collection')
->toString(),
]);
}
elseif ($status) {
$empty = $this
->t('All translations up to date.');
}
else {
$empty = $this
->t('No translation status available. <a href=":check">Check manually</a>.', [
':check' => Url::fromRoute('locale.check_translation')
->toString(),
]);
}
// The projects which require an update. Used by the _submit callback.
$form['projects_update'] = [
'#type' => 'value',
'#value' => $projects_update,
];
$form['langcodes'] = [
'#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' => [
'locale_translation_language_table',
],
];
$form['#attached']['library'][] = 'locale/drupal.locale.admin';
$form['actions'] = [
'#type' => 'actions',
];
if ($languages_update) {
$form['actions']['submit'] = [
'#type' => 'submit',
'#value' => $this
->t('Update translations'),
];
}
return $form;
}