function TranslationStatusForm::buildForm

Same name in other branches
  1. 8.9.x core/modules/locale/src/Form/TranslationStatusForm.php \Drupal\locale\Form\TranslationStatusForm::buildForm()
  2. 10 core/modules/locale/src/Form/TranslationStatusForm.php \Drupal\locale\Form\TranslationStatusForm::buildForm()
  3. 11.x 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\Form

Code

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;
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.