views_plugin_localization.inc
4.68 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
<?php
/**
* @file
* Contains the base class for views localization plugins.
*/
/**
* @defgroup views_localization_plugins Views localization plugins
* @{
* @todo.
*
* @see hook_views_plugins()
*/
/**
* The base plugin to handle localization of Views strings.
*/
class views_plugin_localization extends views_plugin {
// Store for exported strings
var $export_strings = array();
var $translate = TRUE;
/**
* Initialize the plugin.
*
* @param $view
* The view object.
*/
function init(&$view) {
$this->view = &$view;
}
/**
* Translate a string / text with format
*
* The $source parameter is an array with the following elements:
* - value, source string
* - format, input format in case the text has some format to be applied
* - keys. An array of keys to identify the string. Generally constructed from
* view name, display_id, and a property, e.g., 'header'.
*
* @param $source
* Full data for the string to be translated.
*
* @return string
* Translated string / text
*/
function translate($source) {
// Allow other modules to make changes to the string before and after translation
$source['pre_process'] = $this->invoke_translation_process($source, 'pre');
$source['translation'] = $this->translate_string($source['value'], $source['keys'], $source['format']);
$source['post_process'] = $this->invoke_translation_process($source, 'post');
return $source['translation'];
}
/**
* Translate a string.
*
* @param $string
* The string to be translated.
* @param $keys
* An array of keys to identify the string. Generally constructed from
* view name, display_id, and a property, e.g., 'header'.
* @param $format
* The input format of the string. This is optional.
*/
function translate_string($string, $keys = array(), $format = '') {}
/**
* Save string source for translation.
*
* @param $source
* Full data for the string to be translated.
*/
function save($source) {
// Allow other modules to make changes to the string before saving
$source['pre_process'] = $this->invoke_translation_process($source, 'pre');
$this->save_string($source['value'], $source['keys'], isset($source['format']) ? $source['format'] : '');
}
/**
* Save a string for translation
*
* @param $string
* The string to be translated.
* @param $keys
* An array of keys to identify the string. Generally constructed from
* view name, display_id, and a property, e.g., 'header'.
* @param $format
* The input format of the string. This is optional.
*/
function save_string($string, $keys = array(), $format = '') {}
/**
* Delete a string.
*
* @param $source
* Full data for the string to be translated.
*/
function delete($source) { }
/**
* Collect strings to be exported to code.
*
* @param $source
* Full data for the string to be translated.
*/
function export($source) { }
/**
* Render any collected exported strings to code.
*
* @param $indent
* An optional indentation for prettifying nested code.
*/
function export_render($indent = ' ') { }
/**
* Invoke hook_translation_pre_process() or hook_translation_post_process().
*
* Like node_invoke_nodeapi(), this function is needed to enable both passing
* by reference and fetching return values.
*/
function invoke_translation_process(&$value, $op) {
$return = array();
$hook = 'translation_' . $op . '_process';
foreach (module_implements($hook) as $module) {
$function = $module . '_' . $hook;
$result = $function($value);
if (isset($result)) {
$return[$module] = $result;
}
}
return $return;
}
function process_locale_strings($op) {
$this->view->init_display();
foreach ($this->view->display as $display_id => $display) {
$translatable = array();
// Special handling for display title.
if (isset($display->display_title)) {
$translatable[] = array('value' => $display->display_title, 'keys' => array('display_title'));
}
// Unpack handlers.
if (is_object($this->view->display[$display_id]->handler)) {
$this->view->display[$display_id]->handler->unpack_translatables($translatable);
}
foreach ($translatable as $data) {
$data['keys'] = array_merge(array($this->view->name, $display_id), $data['keys']);
switch ($op) {
case 'save':
$this->save($data);
break;
case 'delete':
$this->delete($data);
break;
case 'export':
$this->export($data);
break;
}
}
}
}
}
/**
* @}
*/