root / drupal7 / sites / all / modules / i18n / i18n_string / i18n_string.api.php @ 9faa5de0
1 | 85ad3d82 | Assos Assos | <?php
|
---|---|---|---|
2 | |||
3 | /**
|
||
4 | * @file
|
||
5 | * API documentation file for String translation module.
|
||
6 | *
|
||
7 | * Basically we are collecting translatable strings for each text group. There are two ways a
|
||
8 | * module can produce this list of strings. It should be one or the other, not both.
|
||
9 | *
|
||
10 | * 1. Provide a list of objects that are translatable for that text group either defining a
|
||
11 | * 'list callback' for that object type or implementing hook_i18n_string_objects($type) for
|
||
12 | * that object type.
|
||
13 | *
|
||
14 | * 2. Provide a full list of strings for that text group by implementing
|
||
15 | * hook_i18n_string_list()
|
||
16 | *
|
||
17 | * Then we have hook_i18n_string_list_TEXTGROUP_alter() for other modules to alter either the
|
||
18 | * list of strings for a single object or the full list of strings at the end.
|
||
19 | */
|
||
20 | |||
21 | /**
|
||
22 | * List text groups for string translation.
|
||
23 | *
|
||
24 | * This information will be automatically produced later for hook_locale()
|
||
25 | */
|
||
26 | function hook_i18n_string_info() { |
||
27 | $groups['menu'] = array( |
||
28 | 'title' => t('Menu'), |
||
29 | 'description' => t('Translatable menu items: title and description.'), |
||
30 | 'format' => FALSE, // This group doesn't have strings with format |
||
31 | 'list' => TRUE, // This group can list all strings |
||
32 | ); |
||
33 | return $groups; |
||
34 | } |
||
35 | |||
36 | /**
|
||
37 | * Provide list of translatable strings for text group.
|
||
38 | |||
39 | * A module can provide either a list of translatable strings using hook_i18n_string_list() or
|
||
40 | * it can provide a list of objects using hook_i18n_string_objects() from which the string
|
||
41 | * list will be produced automatically. But not both.
|
||
42 | *
|
||
43 | * @param $group
|
||
44 | * Text group name.
|
||
45 | */
|
||
46 | function hook_i18n_string_list($group) { |
||
47 | if ($group == 'mygroup') { |
||
48 | $strings['mygroup']['type1']['key1']['name'] = 'Name of object type1/key1'; |
||
49 | $strings['mygroup']['type1']['key1']['description'] = 'Description of object type1/key1'; |
||
50 | return $strings; |
||
51 | } |
||
52 | } |
||
53 | |||
54 | /**
|
||
55 | * Alter string list for objects of text group.
|
||
56 | *
|
||
57 | * To build a list of translatable strings for a text group, we'll follow these steps:
|
||
58 | * 1. Invoke hook_i18n_string_list($textgroup), that will get us an array of strings
|
||
59 | * 2. Get the object types for that textgroup, collectin it from i18n object information.
|
||
60 | * @see i18n_string_group_object_types()
|
||
61 | * 3. For each object type, collect the full list of objects invoking hook_i18n_string_objects($type)
|
||
62 | * @see i18n_string_object_type_string_list()
|
||
63 | * If an object defines a 'list callback' function that one will be called to get the list of strings.
|
||
64 | * 4. For each object, collect the properties for that specific object.
|
||
65 | * $properties = i18n_object($type, $object)->get_properties();
|
||
66 | * 5. Run this hook to alter the strings for that specific object. In this case we'll pass the
|
||
67 | * $type and $object parameters.
|
||
68 | * 6. Merge all strings from all objects in an array indexed by textgroup, type, id, name
|
||
69 | * 7. Run this hook once again to alter *all* strings for this textgroup. In this case we
|
||
70 | * don't have a $type and $object parameters.
|
||
71 | *
|
||
72 | * Thus this hook is really invoked once per object and once per textgroup on top of that.
|
||
73 | *
|
||
74 | * @see i18n_string_group_string_list()
|
||
75 | * @see i18n_string_object_type_string_list()
|
||
76 | * @see i18n_menu_i18n_string_list_menu_alter()
|
||
77 | *
|
||
78 | * @param $strings
|
||
79 | * Associative array with current string list indexed by textgroup, type, id, name
|
||
80 | * @param $type
|
||
81 | * Object type ad defined on i18n_object_info()
|
||
82 | * @param $object
|
||
83 | * Object defined on i18n_object_info()
|
||
84 | *
|
||
85 | * These last parameters are optional. If type and object are not present
|
||
86 | * we are altering the full list of strings for the text group that happens once at the end.
|
||
87 | */
|
||
88 | function hook_i18n_string_list_TEXTGROUP_alter(&$strings, $type = NULL, $object = NULL) { |
||
89 | if ($type == 'menu_link' && $object) { |
||
90 | if (isset($object['options']['attributes']['title'])) { |
||
91 | $strings['menu']['item'][$object['mlid']]['title']['string'] = $object['link_title']; |
||
92 | $strings['menu']['item'][$object['mlid']]['description']['string'] = $object['options']['attributes']['title']; |
||
93 | } |
||
94 | } |
||
95 | } |
||
96 | |||
97 | /**
|
||
98 | * List objects to collect translatable strings.
|
||
99 | *
|
||
100 | * A module can provide either a list of translatable strings using hook_i18n_string_list() or
|
||
101 | * it can provide a list of objects using hook_i18n_string_objects() from which the string
|
||
102 | * list will be produced automatically. But not both.
|
||
103 | *
|
||
104 | * @see i18n_object_info()
|
||
105 | * @see i18n_menu_i18n_string_objects()
|
||
106 | * @see i18n_string_i18n_string_list()
|
||
107 | *
|
||
108 | * @param $type string
|
||
109 | * Object type
|
||
110 | * @return $objects array
|
||
111 | * Associative array of objects indexed by object id
|
||
112 | */
|
||
113 | function hook_i18n_string_objects($type) { |
||
114 | if ($type == 'menu_link') { |
||
115 | // All menu items that have no language and are customized.
|
||
116 | return db_select('menu_links', 'm') |
||
117 | ->fields('m')
|
||
118 | ->condition('language', LANGUAGE_NONE) |
||
119 | ->condition('customized', 1) |
||
120 | ->execute() |
||
121 | ->fetchAllAssoc('mlid', PDO::FETCH_ASSOC); |
||
122 | } |
||
123 | } |