Mercurial > hg > isophonics-drupal-site
diff core/modules/language/language.api.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/language/language.api.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,116 @@ +<?php + +/** + * @file + * Hooks provided by the Language module. + */ + +/** + * @addtogroup hooks + * @{ + */ + +/** + * Define language types. + * + * @return array + * An associative array of language type definitions. The keys are the + * identifiers, which are also used as names for global variables representing + * the types in the bootstrap phase. The values are associative arrays that + * may contain the following elements: + * - name: The human-readable language type identifier. + * - description: A description of the language type. + * - locked: A boolean indicating if the user can choose whether to configure + * the language type or not using the UI. + * - fixed: A fixed array of language negotiation method identifiers to use to + * initialize this language. If locked is set to TRUE and fixed is set, it + * will always use the specified methods in the given priority order. If not + * present and locked is TRUE then language-interface will be + * used. + * + * @todo Rename the 'fixed' key to something more meaningful, for instance + * 'negotiation settings'. See https://www.drupal.org/node/2166879. + * + * @see hook_language_types_info_alter() + * @ingroup language_negotiation + */ +function hook_language_types_info() { + return [ + 'custom_language_type' => [ + 'name' => t('Custom language'), + 'description' => t('A custom language type.'), + 'locked' => FALSE, + ], + 'fixed_custom_language_type' => [ + 'locked' => TRUE, + 'fixed' => ['custom_language_negotiation_method'], + ], + ]; +} + +/** + * Perform alterations on language types. + * + * @param array $language_types + * Array of language type definitions. + * + * @see hook_language_types_info() + * @ingroup language_negotiation + */ +function hook_language_types_info_alter(array &$language_types) { + if (isset($language_types['custom_language_type'])) { + $language_types['custom_language_type_custom']['description'] = t('A far better description.'); + } +} + +/** + * Perform alterations on language negotiation methods. + * + * @param array $negotiation_info + * Array of language negotiation method definitions. + * + * @ingroup language_negotiation + */ +function hook_language_negotiation_info_alter(array &$negotiation_info) { + if (isset($negotiation_info['custom_language_method'])) { + $negotiation_info['custom_language_method']['config'] = 'admin/config/regional/language/detection/custom-language-method'; + } +} + +/** + * Allow modules to alter the language fallback candidates. + * + * @param array $candidates + * An array of language codes whose order will determine the language fallback + * order. + * @param array $context + * A language fallback context. + * + * @see \Drupal\Core\Language\LanguageManagerInterface::getFallbackCandidates() + */ +function hook_language_fallback_candidates_alter(array &$candidates, array $context) { + $candidates = array_reverse($candidates); +} + +/** + * Allow modules to alter the fallback candidates for specific operations. + * + * @param array $candidates + * An array of language codes whose order will determine the language fallback + * order. + * @param array $context + * A language fallback context. + * + * @see \Drupal\Core\Language\LanguageManagerInterface::getFallbackCandidates() + */ +function hook_language_fallback_candidates_OPERATION_alter(array &$candidates, array $context) { + // We know that the current OPERATION deals with entities so no need to check + // here. + if ($context['data']->getEntityTypeId() == 'node') { + $candidates = array_reverse($candidates); + } +} + +/** + * @} End of "addtogroup hooks". + */