comparison modules/system/language.api.php @ 0:ff03f76ab3fe

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