annotate modules/system/language.api.php @ 3:b28be78d8160

alpha1.0 version
author danieleb <danielebarchiesi@me.com>
date Thu, 19 Sep 2013 10:33:07 +0100
parents ff03f76ab3fe
children
rev   line source
danielebarchiesi@0 1 <?php
danielebarchiesi@0 2
danielebarchiesi@0 3 /**
danielebarchiesi@0 4 * @file
danielebarchiesi@0 5 * Hooks provided by the base system for language support.
danielebarchiesi@0 6 */
danielebarchiesi@0 7
danielebarchiesi@0 8 /**
danielebarchiesi@0 9 * @addtogroup hooks
danielebarchiesi@0 10 * @{
danielebarchiesi@0 11 */
danielebarchiesi@0 12
danielebarchiesi@0 13 /**
danielebarchiesi@0 14 * Allows modules to act after language initialization has been performed.
danielebarchiesi@0 15 *
danielebarchiesi@0 16 * This is primarily needed to provide translation for configuration variables
danielebarchiesi@0 17 * in the proper bootstrap phase. Variables are user-defined strings and
danielebarchiesi@0 18 * therefore should not be translated via t(), since the source string can
danielebarchiesi@0 19 * change without notice and any previous translation would be lost. Moreover,
danielebarchiesi@0 20 * since variables can be used in the bootstrap phase, we need a bootstrap hook
danielebarchiesi@0 21 * to provide a translation early enough to avoid misalignments between code
danielebarchiesi@0 22 * using the original values and code using the translated values. However
danielebarchiesi@0 23 * modules implementing hook_boot() should be aware that language initialization
danielebarchiesi@0 24 * did not happen yet and thus they cannot rely on translated variables.
danielebarchiesi@0 25 */
danielebarchiesi@0 26 function hook_language_init() {
danielebarchiesi@0 27 global $language, $conf;
danielebarchiesi@0 28
danielebarchiesi@0 29 switch ($language->language) {
danielebarchiesi@0 30 case 'it':
danielebarchiesi@0 31 $conf['site_name'] = 'Il mio sito Drupal';
danielebarchiesi@0 32 break;
danielebarchiesi@0 33
danielebarchiesi@0 34 case 'fr':
danielebarchiesi@0 35 $conf['site_name'] = 'Mon site Drupal';
danielebarchiesi@0 36 break;
danielebarchiesi@0 37 }
danielebarchiesi@0 38 }
danielebarchiesi@0 39
danielebarchiesi@0 40 /**
danielebarchiesi@0 41 * Perform alterations on language switcher links.
danielebarchiesi@0 42 *
danielebarchiesi@0 43 * A language switcher link may need to point to a different path or use a
danielebarchiesi@0 44 * translated link text before going through l(), which will just handle the
danielebarchiesi@0 45 * path aliases.
danielebarchiesi@0 46 *
danielebarchiesi@0 47 * @param $links
danielebarchiesi@0 48 * Nested array of links keyed by language code.
danielebarchiesi@0 49 * @param $type
danielebarchiesi@0 50 * The language type the links will switch.
danielebarchiesi@0 51 * @param $path
danielebarchiesi@0 52 * The current path.
danielebarchiesi@0 53 */
danielebarchiesi@0 54 function hook_language_switch_links_alter(array &$links, $type, $path) {
danielebarchiesi@0 55 global $language;
danielebarchiesi@0 56
danielebarchiesi@0 57 if ($type == LANGUAGE_TYPE_CONTENT && isset($links[$language->language])) {
danielebarchiesi@0 58 foreach ($links[$language->language] as $link) {
danielebarchiesi@0 59 $link['attributes']['class'][] = 'active-language';
danielebarchiesi@0 60 }
danielebarchiesi@0 61 }
danielebarchiesi@0 62 }
danielebarchiesi@0 63
danielebarchiesi@0 64 /**
danielebarchiesi@0 65 * Define language types.
danielebarchiesi@0 66 *
danielebarchiesi@0 67 * @return
danielebarchiesi@0 68 * An associative array of language type definitions. The keys are the
danielebarchiesi@0 69 * identifiers, which are also used as names for global variables representing
danielebarchiesi@0 70 * the types in the bootstrap phase. The values are associative arrays that
danielebarchiesi@0 71 * may contain the following elements:
danielebarchiesi@0 72 * - name: The human-readable language type identifier.
danielebarchiesi@0 73 * - description: A description of the language type.
danielebarchiesi@0 74 * - fixed: A fixed array of language negotiation provider identifiers to use
danielebarchiesi@0 75 * to initialize this language. Defining this key makes the language type
danielebarchiesi@0 76 * non-configurable, so it will always use the specified providers in the
danielebarchiesi@0 77 * given priority order. Omit to make the language type configurable.
danielebarchiesi@0 78 *
danielebarchiesi@0 79 * @see hook_language_types_info_alter()
danielebarchiesi@0 80 * @ingroup language_negotiation
danielebarchiesi@0 81 */
danielebarchiesi@0 82 function hook_language_types_info() {
danielebarchiesi@0 83 return array(
danielebarchiesi@0 84 'custom_language_type' => array(
danielebarchiesi@0 85 'name' => t('Custom language'),
danielebarchiesi@0 86 'description' => t('A custom language type.'),
danielebarchiesi@0 87 ),
danielebarchiesi@0 88 'fixed_custom_language_type' => array(
danielebarchiesi@0 89 'fixed' => array('custom_language_provider'),
danielebarchiesi@0 90 ),
danielebarchiesi@0 91 );
danielebarchiesi@0 92 }
danielebarchiesi@0 93
danielebarchiesi@0 94 /**
danielebarchiesi@0 95 * Perform alterations on language types.
danielebarchiesi@0 96 *
danielebarchiesi@0 97 * @param $language_types
danielebarchiesi@0 98 * Array of language type definitions.
danielebarchiesi@0 99 *
danielebarchiesi@0 100 * @see hook_language_types_info()
danielebarchiesi@0 101 * @ingroup language_negotiation
danielebarchiesi@0 102 */
danielebarchiesi@0 103 function hook_language_types_info_alter(array &$language_types) {
danielebarchiesi@0 104 if (isset($language_types['custom_language_type'])) {
danielebarchiesi@0 105 $language_types['custom_language_type_custom']['description'] = t('A far better description.');
danielebarchiesi@0 106 }
danielebarchiesi@0 107 }
danielebarchiesi@0 108
danielebarchiesi@0 109 /**
danielebarchiesi@0 110 * Define language negotiation providers.
danielebarchiesi@0 111 *
danielebarchiesi@0 112 * @return
danielebarchiesi@0 113 * An associative array of language negotiation provider definitions. The keys
danielebarchiesi@0 114 * are provider identifiers, and the values are associative arrays definining
danielebarchiesi@0 115 * each provider, with the following elements:
danielebarchiesi@0 116 * - types: An array of allowed language types. If a language negotiation
danielebarchiesi@0 117 * provider does not specify which language types it should be used with, it
danielebarchiesi@0 118 * will be available for all the configurable language types.
danielebarchiesi@0 119 * - callbacks: An associative array of functions that will be called to
danielebarchiesi@0 120 * perform various tasks. Possible elements are:
danielebarchiesi@0 121 * - negotiation: (required) Name of the callback function that determines
danielebarchiesi@0 122 * the language value.
danielebarchiesi@0 123 * - language_switch: (optional) Name of the callback function that
danielebarchiesi@0 124 * determines links for a language switcher block associated with this
danielebarchiesi@0 125 * provider. See language_switcher_url() for an example.
danielebarchiesi@0 126 * - url_rewrite: (optional) Name of the callback function that provides URL
danielebarchiesi@0 127 * rewriting, if needed by this provider.
danielebarchiesi@0 128 * - file: The file where callback functions are defined (this file will be
danielebarchiesi@0 129 * included before the callbacks are invoked).
danielebarchiesi@0 130 * - weight: The default weight of the provider.
danielebarchiesi@0 131 * - name: The translated human-readable name for the provider.
danielebarchiesi@0 132 * - description: A translated longer description of the provider.
danielebarchiesi@0 133 * - config: An internal path pointing to the provider's configuration page.
danielebarchiesi@0 134 * - cache: The value Drupal's page cache should be set to for the current
danielebarchiesi@0 135 * provider to be invoked.
danielebarchiesi@0 136 *
danielebarchiesi@0 137 * @see hook_language_negotiation_info_alter()
danielebarchiesi@0 138 * @ingroup language_negotiation
danielebarchiesi@0 139 */
danielebarchiesi@0 140 function hook_language_negotiation_info() {
danielebarchiesi@0 141 return array(
danielebarchiesi@0 142 'custom_language_provider' => array(
danielebarchiesi@0 143 'callbacks' => array(
danielebarchiesi@0 144 'language' => 'custom_language_provider_callback',
danielebarchiesi@0 145 'switcher' => 'custom_language_switcher_callback',
danielebarchiesi@0 146 'url_rewrite' => 'custom_language_url_rewrite_callback',
danielebarchiesi@0 147 ),
danielebarchiesi@0 148 'file' => drupal_get_path('module', 'custom') . '/custom.module',
danielebarchiesi@0 149 'weight' => -4,
danielebarchiesi@0 150 'types' => array('custom_language_type'),
danielebarchiesi@0 151 'name' => t('Custom language negotiation provider'),
danielebarchiesi@0 152 'description' => t('This is a custom language negotiation provider.'),
danielebarchiesi@0 153 'cache' => 0,
danielebarchiesi@0 154 ),
danielebarchiesi@0 155 );
danielebarchiesi@0 156 }
danielebarchiesi@0 157
danielebarchiesi@0 158 /**
danielebarchiesi@0 159 * Perform alterations on language negoiation providers.
danielebarchiesi@0 160 *
danielebarchiesi@0 161 * @param $language_providers
danielebarchiesi@0 162 * Array of language negotiation provider definitions.
danielebarchiesi@0 163 *
danielebarchiesi@0 164 * @see hook_language_negotiation_info()
danielebarchiesi@0 165 * @ingroup language_negotiation
danielebarchiesi@0 166 */
danielebarchiesi@0 167 function hook_language_negotiation_info_alter(array &$language_providers) {
danielebarchiesi@0 168 if (isset($language_providers['custom_language_provider'])) {
danielebarchiesi@0 169 $language_providers['custom_language_provider']['config'] = 'admin/config/regional/language/configure/custom-language-provider';
danielebarchiesi@0 170 }
danielebarchiesi@0 171 }
danielebarchiesi@0 172
danielebarchiesi@0 173 /**
danielebarchiesi@0 174 * Perform alterations on the language fallback candidates.
danielebarchiesi@0 175 *
danielebarchiesi@0 176 * @param $fallback_candidates
danielebarchiesi@0 177 * An array of language codes whose order will determine the language fallback
danielebarchiesi@0 178 * order.
danielebarchiesi@0 179 */
danielebarchiesi@0 180 function hook_language_fallback_candidates_alter(array &$fallback_candidates) {
danielebarchiesi@0 181 $fallback_candidates = array_reverse($fallback_candidates);
danielebarchiesi@0 182 }
danielebarchiesi@0 183
danielebarchiesi@0 184 /**
danielebarchiesi@0 185 * @} End of "addtogroup hooks".
danielebarchiesi@0 186 */