Initial Drupal 11 with DDEV setup
This commit is contained in:
		
							
								
								
									
										151
									
								
								web/core/modules/language/language.module
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										151
									
								
								web/core/modules/language/language.module
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,151 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @file
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
use Drupal\Core\Entity\EntityFormInterface;
 | 
			
		||||
use Drupal\Core\Form\FormStateInterface;
 | 
			
		||||
use Drupal\Core\Language\LanguageInterface;
 | 
			
		||||
use Drupal\language\Entity\ContentLanguageSettings;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Processes a language select list form element.
 | 
			
		||||
 *
 | 
			
		||||
 * @param array $element
 | 
			
		||||
 *   The form element to process.
 | 
			
		||||
 *
 | 
			
		||||
 * @return array
 | 
			
		||||
 *   The processed form element.
 | 
			
		||||
 */
 | 
			
		||||
function language_process_language_select($element) {
 | 
			
		||||
  // Don't set the options if another module (translation for example) already
 | 
			
		||||
  // set the options.
 | 
			
		||||
  if (!isset($element['#options'])) {
 | 
			
		||||
    $element['#options'] = [];
 | 
			
		||||
    foreach (\Drupal::languageManager()->getLanguages($element['#languages']) as $langcode => $language) {
 | 
			
		||||
      $element['#options'][$langcode] = $language->isLocked() ? t('- @name -', ['@name' => $language->getName()]) : $language->getName();
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
  return $element;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Submit handler for the forms that have a language_configuration element.
 | 
			
		||||
 */
 | 
			
		||||
function language_configuration_element_submit(&$form, FormStateInterface $form_state): void {
 | 
			
		||||
  // Iterate through all the language_configuration elements and save their
 | 
			
		||||
  // values.
 | 
			
		||||
  // In case we are editing a bundle, we must check the new bundle name,
 | 
			
		||||
  // because e.g. hook_ENTITY_update fired before.
 | 
			
		||||
  if ($language = $form_state->get('language')) {
 | 
			
		||||
    foreach ($language as $element_name => $values) {
 | 
			
		||||
      $entity_type_id = $values['entity_type'];
 | 
			
		||||
      $bundle = $values['bundle'];
 | 
			
		||||
      $form_object = $form_state->getFormObject();
 | 
			
		||||
      if ($form_object instanceof EntityFormInterface) {
 | 
			
		||||
        /** @var \Drupal\Core\Entity\EntityFormInterface $form_object */
 | 
			
		||||
        $entity = $form_object->getEntity();
 | 
			
		||||
        if ($entity->getEntityType()->getBundleOf()) {
 | 
			
		||||
          $bundle = $entity->id();
 | 
			
		||||
          $language[$element_name]['bundle'] = $bundle;
 | 
			
		||||
        }
 | 
			
		||||
      }
 | 
			
		||||
      $config = ContentLanguageSettings::loadByEntityTypeBundle($entity_type_id, $bundle);
 | 
			
		||||
      $config->setDefaultLangcode($form_state->getValue([$element_name, 'langcode']));
 | 
			
		||||
      $config->setLanguageAlterable($form_state->getValue([$element_name, 'language_alterable']));
 | 
			
		||||
      $config->save();
 | 
			
		||||
 | 
			
		||||
      // Set the form_state language with the updated bundle.
 | 
			
		||||
      $form_state->set('language', $language);
 | 
			
		||||
    }
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Returns the default language code assigned to an entity type and a bundle.
 | 
			
		||||
 *
 | 
			
		||||
 * @param string $entity_type
 | 
			
		||||
 *   The entity type.
 | 
			
		||||
 * @param string $bundle
 | 
			
		||||
 *   The bundle name.
 | 
			
		||||
 *
 | 
			
		||||
 * @return string
 | 
			
		||||
 *   The language code.
 | 
			
		||||
 */
 | 
			
		||||
function language_get_default_langcode($entity_type, $bundle) {
 | 
			
		||||
  $configuration = ContentLanguageSettings::loadByEntityTypeBundle($entity_type, $bundle);
 | 
			
		||||
 | 
			
		||||
  $default_value = NULL;
 | 
			
		||||
  $language_interface = \Drupal::languageManager()->getCurrentLanguage();
 | 
			
		||||
  switch ($configuration->getDefaultLangcode()) {
 | 
			
		||||
    case LanguageInterface::LANGCODE_SITE_DEFAULT:
 | 
			
		||||
      $default_value = \Drupal::languageManager()->getDefaultLanguage()->getId();
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case 'current_interface':
 | 
			
		||||
      $default_value = $language_interface->getId();
 | 
			
		||||
      break;
 | 
			
		||||
 | 
			
		||||
    case 'authors_default':
 | 
			
		||||
      $user = \Drupal::currentUser();
 | 
			
		||||
      $language_code = $user->getPreferredLangcode();
 | 
			
		||||
      if (!empty($language_code)) {
 | 
			
		||||
        $default_value = $language_code;
 | 
			
		||||
      }
 | 
			
		||||
      else {
 | 
			
		||||
        $default_value = $language_interface->getId();
 | 
			
		||||
      }
 | 
			
		||||
      break;
 | 
			
		||||
  }
 | 
			
		||||
  if ($default_value) {
 | 
			
		||||
    return $default_value;
 | 
			
		||||
  }
 | 
			
		||||
 | 
			
		||||
  // If we still do not have a default value, just return the value stored in
 | 
			
		||||
  // the configuration; it has to be an actual language code.
 | 
			
		||||
  return $configuration->getDefaultLangcode();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Update the list of prefixes from the installed languages.
 | 
			
		||||
 */
 | 
			
		||||
function language_negotiation_url_prefixes_update(): void {
 | 
			
		||||
  $config = \Drupal::configFactory()->getEditable('language.negotiation');
 | 
			
		||||
  $prefixes = $config->get('url.prefixes');
 | 
			
		||||
  foreach (\Drupal::languageManager()->getLanguages() as $language) {
 | 
			
		||||
    // The prefix for this language should be updated if it's not assigned yet
 | 
			
		||||
    // or the prefix is set to the empty string.
 | 
			
		||||
    if (empty($prefixes[$language->getId()])) {
 | 
			
		||||
      // For the default language, set the prefix to the empty string,
 | 
			
		||||
      // otherwise use the langcode.
 | 
			
		||||
      $prefixes[$language->getId()] = $language->isDefault() ? '' : $language->getId();
 | 
			
		||||
    }
 | 
			
		||||
    // Otherwise we keep the configured prefix.
 | 
			
		||||
  }
 | 
			
		||||
  $config->set('url.prefixes', $prefixes)->save(TRUE);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Implements hook_preprocess_HOOK() for block templates.
 | 
			
		||||
 */
 | 
			
		||||
function language_preprocess_block(&$variables): void {
 | 
			
		||||
  if ($variables['configuration']['provider'] == 'language') {
 | 
			
		||||
    $variables['attributes']['role'] = 'navigation';
 | 
			
		||||
  }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * Returns language mappings between browser and Drupal language codes.
 | 
			
		||||
 *
 | 
			
		||||
 * @return array
 | 
			
		||||
 *   An array containing browser language codes as keys with corresponding
 | 
			
		||||
 *   Drupal language codes as values.
 | 
			
		||||
 */
 | 
			
		||||
function language_get_browser_drupal_langcode_mappings() {
 | 
			
		||||
  $config = \Drupal::config('language.mappings');
 | 
			
		||||
  if ($config->isNew()) {
 | 
			
		||||
    return [];
 | 
			
		||||
  }
 | 
			
		||||
  return $config->get('map');
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user