languageManager = $language_manager; } /** * {@inheritdoc} */ public static function create(ContainerInterface $container) { return new static( $container->get('language_manager') ); } /** * Common elements of the language addition and editing form. */ public function commonForm(array &$form) { /* @var $language \Drupal\language\ConfigurableLanguageInterface */ $language = $this->entity; if ($language->getId()) { $form['langcode_view'] = [ '#type' => 'item', '#title' => $this->t('Language code'), '#markup' => $language->id() ]; $form['langcode'] = [ '#type' => 'value', '#value' => $language->id() ]; } else { $form['langcode'] = [ '#type' => 'textfield', '#title' => $this->t('Language code'), '#maxlength' => 12, '#required' => TRUE, '#default_value' => '', '#disabled' => FALSE, '#description' => $this->t('Use language codes as defined by the W3C for interoperability. Examples: "en", "en-gb" and "zh-hant".', [':w3ctags' => 'http://www.w3.org/International/articles/language-tags/']), ]; } $form['label'] = [ '#type' => 'textfield', '#title' => $this->t('Language name'), '#maxlength' => 64, '#default_value' => $language->label(), '#required' => TRUE, ]; $form['direction'] = [ '#type' => 'radios', '#title' => $this->t('Direction'), '#required' => TRUE, '#description' => $this->t('Direction that text in this language is presented.'), '#default_value' => $language->getDirection(), '#options' => [ LanguageInterface::DIRECTION_LTR => $this->t('Left to right'), LanguageInterface::DIRECTION_RTL => $this->t('Right to left'), ], ]; return $form; } /** * Validates the language editing element. */ public function validateCommon(array $form, FormStateInterface $form_state) { // Ensure sane field values for langcode and name. if (!isset($form['langcode_view']) && !preg_match('@^[a-zA-Z]{1,8}(-[a-zA-Z0-9]{1,8})*$@', $form_state->getValue('langcode'))) { $form_state->setErrorByName('langcode', $this->t('%field must be a valid language tag as defined by the W3C.', [ '%field' => $form['langcode']['#title'], ':url' => 'http://www.w3.org/International/articles/language-tags/', ])); } if ($form_state->getValue('label') != Html::escape($form_state->getValue('label'))) { $form_state->setErrorByName('label', $this->t('%field cannot contain any markup.', ['%field' => $form['label']['#title']])); } } }