function NegotiationBrowserForm::buildForm

Same name in other branches
  1. 9 core/modules/language/src/Form/NegotiationBrowserForm.php \Drupal\language\Form\NegotiationBrowserForm::buildForm()
  2. 8.9.x core/modules/language/src/Form/NegotiationBrowserForm.php \Drupal\language\Form\NegotiationBrowserForm::buildForm()
  3. 10 core/modules/language/src/Form/NegotiationBrowserForm.php \Drupal\language\Form\NegotiationBrowserForm::buildForm()

Overrides ConfigFormBase::buildForm

File

core/modules/language/src/Form/NegotiationBrowserForm.php, line 63

Class

NegotiationBrowserForm
Configure the browser language negotiation method for this site.

Namespace

Drupal\language\Form

Code

public function buildForm(array $form, FormStateInterface $form_state) {
    $form = [];
    // Initialize a language list to the ones available, including English.
    $languages = $this->languageManager
        ->getLanguages();
    $existing_languages = [];
    foreach ($languages as $langcode => $language) {
        $existing_languages[$langcode] = $language->getName();
    }
    // If we have no languages available, present the list of predefined languages
    // only. If we do have already added languages, set up two option groups with
    // the list of existing and then predefined languages.
    if (empty($existing_languages)) {
        $language_options = $this->languageManager
            ->getStandardLanguageListWithoutConfigured();
    }
    else {
        $language_options = [
            (string) $this->t('Existing languages') => $existing_languages,
            (string) $this->t('Languages not yet added') => $this->languageManager
                ->getStandardLanguageListWithoutConfigured(),
        ];
    }
    $form['mappings'] = [
        '#type' => 'table',
        '#header' => [
            $this->t('Browser language code'),
            $this->t('Site language'),
            $this->t('Operations'),
        ],
        '#attributes' => [
            'id' => 'language-negotiation-browser',
        ],
        '#empty' => $this->t('No browser language mappings available.'),
    ];
    $mappings = $this->language_get_browser_drupal_langcode_mappings();
    foreach ($mappings as $browser_langcode => $drupal_langcode) {
        $form['mappings'][$browser_langcode] = [
            'browser_langcode' => [
                '#title' => $this->t('Browser language code'),
                '#title_display' => 'invisible',
                '#type' => 'textfield',
                '#default_value' => $browser_langcode,
                '#size' => 20,
                '#required' => TRUE,
            ],
            'drupal_langcode' => [
                '#title' => $this->t('Site language'),
                '#title_display' => 'invisible',
                '#type' => 'select',
                '#options' => $language_options,
                '#default_value' => $drupal_langcode,
                '#required' => TRUE,
            ],
        ];
        // Operations column.
        $form['mappings'][$browser_langcode]['operations'] = [
            '#type' => 'operations',
            '#links' => [],
        ];
        $form['mappings'][$browser_langcode]['operations']['#links']['delete'] = [
            'title' => $this->t('Delete'),
            'url' => Url::fromRoute('language.negotiation_browser_delete', [
                'browser_langcode' => $browser_langcode,
            ]),
        ];
    }
    // Add empty row.
    $form['new_mapping'] = [
        '#type' => 'details',
        '#title' => $this->t('Add a new mapping'),
        '#tree' => TRUE,
    ];
    $form['new_mapping']['browser_langcode'] = [
        '#type' => 'textfield',
        '#title' => $this->t('Browser language code'),
        '#description' => $this->t('Use language codes as <a href=":w3ctags">defined by the W3C</a> for interoperability. <em>Examples: "en", "en-gb" and "zh-hant".</em>', [
            ':w3ctags' => 'https://www.w3.org/International/articles/language-tags/',
        ]),
        '#size' => 20,
    ];
    $form['new_mapping']['drupal_langcode'] = [
        '#type' => 'select',
        '#title' => $this->t('Site language'),
        '#options' => $language_options,
    ];
    return parent::buildForm($form, $form_state);
}

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