Version Description
- added option "Show displayed language prefix when content is not available for the selected language".
- compatibility with "BuddyPress" plugin and various improvements.
- custom CSS for "qTranslate Language Chooser" widget configurable via its properties.
- now always redirects to a canonical URL, as defined by options, before displaying a page.
- use of cookies to carry the language chosen from session to session.
Download this release
Release Info
Developer | johnclause |
Plugin | qTranslate X |
Version | 2.8 |
Comparing to | |
See all releases |
Code changes from version 2.9.2 to 2.8
- admin/xhaleera_addons.php +0 -356
- lang/qtranslate-sr_RS.mo +0 -0
- qtranslate.js +21 -95
- qtranslate.min.js +1 -1
- qtranslate.php +3 -10
- qtranslate_compatibility.php +4 -6
- qtranslate_configuration.php +16 -47
- qtranslate_core.php +81 -83
- qtranslate_frontend.php +4 -40
- qtranslate_services.php +1 -1
- readme.txt +12 -30
admin/xhaleera_addons.php
DELETED
@@ -1,356 +0,0 @@
|
|
1 |
-
<?php // encoding: utf-8
|
2 |
-
/*
|
3 |
-
Copyright 2014 qTranslate Team (email : qTranslateTeam@gmail.com )
|
4 |
-
|
5 |
-
This program is free software; you can redistribute it and/or modify
|
6 |
-
it under the terms of the GNU General Public License as published by
|
7 |
-
the Free Software Foundation; either version 2 of the License, or
|
8 |
-
(at your option) any later version.
|
9 |
-
|
10 |
-
This program is distributed in the hope that it will be useful,
|
11 |
-
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
12 |
-
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.See the
|
13 |
-
GNU General Public License for more details.
|
14 |
-
|
15 |
-
You should have received a copy of the GNU General Public License
|
16 |
-
along with this program; if not, write to the Free Software
|
17 |
-
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
18 |
-
*/
|
19 |
-
|
20 |
-
function mqtrans_import_settings_from_qtrans() {
|
21 |
-
global $wpdb;
|
22 |
-
|
23 |
-
$option_names = $wpdb->get_col("SELECT `option_name` FROM {$wpdb->options} WHERE `option_name` LIKE 'qtranslate\_%'");
|
24 |
-
foreach ($option_names as $name)
|
25 |
-
{
|
26 |
-
$opt = get_option($name);
|
27 |
-
|
28 |
-
$nn = "m{$name}";
|
29 |
-
if ( false !== get_option($nn) )
|
30 |
-
update_option($nn, $opt);
|
31 |
-
else
|
32 |
-
add_option($nn, $opt);
|
33 |
-
}
|
34 |
-
}
|
35 |
-
|
36 |
-
function mqtrans_export_setting_to_qtrans($updateOnly = false) {
|
37 |
-
global $wpdb;
|
38 |
-
|
39 |
-
$option_names = $wpdb->get_col("SELECT `option_name` FROM {$wpdb->options} WHERE `option_name` LIKE 'mqtranslate\_%'");
|
40 |
-
foreach ($option_names as $name)
|
41 |
-
{
|
42 |
-
$opt = get_option($name);
|
43 |
-
|
44 |
-
$nn = substr($name, 1);
|
45 |
-
if ( false !== get_option($nn) )
|
46 |
-
update_option($nn, $opt);
|
47 |
-
else if (!$updateOnly)
|
48 |
-
add_option($nn, $opt);
|
49 |
-
}
|
50 |
-
}
|
51 |
-
|
52 |
-
function mqtrans_currentUserCanEdit($lang) {
|
53 |
-
global $q_config;
|
54 |
-
|
55 |
-
$cu = wp_get_current_user();
|
56 |
-
if ($cu->has_cap('edit_users') || empty($q_config['ul_lang_protection']))
|
57 |
-
return true;
|
58 |
-
else
|
59 |
-
{
|
60 |
-
$user_meta = get_user_meta($cu->ID);
|
61 |
-
if (empty($user_meta) || !is_array($user_meta) || !array_key_exists('mqtranslate_language_access', $user_meta))
|
62 |
-
$user_langs = $q_config['enabled_languages'];
|
63 |
-
else
|
64 |
-
$user_langs = explode(',', get_user_meta($cu->ID, 'mqtranslate_language_access', true));
|
65 |
-
return in_array($lang, $user_langs);
|
66 |
-
}
|
67 |
-
}
|
68 |
-
|
69 |
-
function mqtrans_currentUserCanView($lang) {
|
70 |
-
global $q_config;
|
71 |
-
|
72 |
-
$cu = wp_get_current_user();
|
73 |
-
if ($cu->has_cap('edit_users') || empty($q_config['ul_lang_protection']))
|
74 |
-
return true;
|
75 |
-
else
|
76 |
-
{
|
77 |
-
$master_lang = get_user_meta($cu->ID, 'mqtranslate_master_language', true);
|
78 |
-
if (empty($master_lang))
|
79 |
-
return ($lang === $q_config['default_language']);
|
80 |
-
else
|
81 |
-
return ($lang === $master_lang || $lang === $q_config['default_language']);
|
82 |
-
}
|
83 |
-
}
|
84 |
-
|
85 |
-
function mqtrans_userProfile($user) {
|
86 |
-
global $q_config;
|
87 |
-
|
88 |
-
if (empty($q_config['ul_lang_protection']))
|
89 |
-
return;
|
90 |
-
|
91 |
-
$cu = wp_get_current_user();
|
92 |
-
$langs = qtrans_getSortedLanguages();
|
93 |
-
|
94 |
-
echo '<h3>'.__('mqTranslate User Language Settings', 'mqtranslate') . "</h3>\n";
|
95 |
-
echo "<table class=\"form-table\">\n<tbody>\n";
|
96 |
-
|
97 |
-
// Editable languages
|
98 |
-
$user_meta = get_user_meta($user->ID);
|
99 |
-
if (empty($user_meta) || !is_array($user_meta) || !array_key_exists('mqtranslate_language_access', $user_meta))
|
100 |
-
$user_langs = $q_config['enabled_languages'];
|
101 |
-
else
|
102 |
-
$user_langs = explode(',', get_user_meta($user->ID, 'mqtranslate_language_access', true));
|
103 |
-
echo "<tr>\n";
|
104 |
-
if ($cu->ID == $user->ID)
|
105 |
-
echo '<th>'.__('You can edit posts in', 'mqtranslate') . "</th>\n";
|
106 |
-
else
|
107 |
-
echo '<th>'.__('This user can edit posts in', 'mqtranslate') . "</th>\n";
|
108 |
-
echo "<td>";
|
109 |
-
if ($user->has_cap('edit_users'))
|
110 |
-
{
|
111 |
-
if (empty($langs))
|
112 |
-
_e('No language available', 'mqtranslate');
|
113 |
-
else if ($cu->ID == $user->ID)
|
114 |
-
_e('As an Administrator, you can edit posts in all languages.', 'mqtranslate');
|
115 |
-
else
|
116 |
-
_e('As an Administrator, this user can edit posts in all languages.', 'mqtranslate');
|
117 |
-
}
|
118 |
-
else if ($cu->has_cap('edit_users'))
|
119 |
-
{
|
120 |
-
if (empty($langs))
|
121 |
-
_e('No language available', 'mqtranslate')."\n";
|
122 |
-
else
|
123 |
-
{
|
124 |
-
$checkboxes = array();
|
125 |
-
foreach ($langs as $l) {
|
126 |
-
$name = "mqtrans_user_lang_{$l}";
|
127 |
-
$checked = (in_array($l, $user_langs)) ? 'checked' : '';
|
128 |
-
$checkboxes[] = "<label for=\"{$name}\"><input type=\"checkbox\" name=\"mqtrans_user_lang[]\" id=\"{$name}\" value=\"{$l}\" {$checked} /> {$q_config['language_name'][$l]}</label>\n";
|
129 |
-
}
|
130 |
-
echo implode("<br />\n", $checkboxes);
|
131 |
-
}
|
132 |
-
}
|
133 |
-
else
|
134 |
-
{
|
135 |
-
$intersect = array_intersect($langs, $user_langs);
|
136 |
-
if (empty($intersect))
|
137 |
-
_e('No language selected', 'mqtranslate')."\n";
|
138 |
-
else
|
139 |
-
{
|
140 |
-
$languages = array();
|
141 |
-
foreach ($intersect as $l)
|
142 |
-
$languages[] = $q_config['language_name'][$l];
|
143 |
-
echo implode(', ', $languages);
|
144 |
-
}
|
145 |
-
}
|
146 |
-
echo "</td>\n";
|
147 |
-
echo "</tr>\n";
|
148 |
-
|
149 |
-
// Master language
|
150 |
-
$user_master_lang = get_user_meta($user->ID, 'mqtranslate_master_language', true);
|
151 |
-
echo "<tr>\n";
|
152 |
-
echo '<th>' . __('Master language', 'mqtranslate') . "</th>\n";
|
153 |
-
echo "<td>\n";
|
154 |
-
if ($user->has_cap('edit_users'))
|
155 |
-
_e('Not applicable to Administrators', 'mqtranslate');
|
156 |
-
else if ($cu->has_cap('edit_users'))
|
157 |
-
{
|
158 |
-
echo "<select name=\"mqtrans_master_lang\">\n";
|
159 |
-
echo '<option value="">' . __('Default Language', 'mqtranslate') . "</option>\n";
|
160 |
-
foreach ($langs as $l)
|
161 |
-
{
|
162 |
-
if ($l == $q_config['default_language'])
|
163 |
-
continue;
|
164 |
-
$selected = ($user_master_lang == $l) ? ' selected' : '';
|
165 |
-
echo "<option value=\"{$l}\"{$selected}>{$q_config['language_name'][$l]}</option>\n";
|
166 |
-
}
|
167 |
-
echo "</select>\n";
|
168 |
-
echo '<span class="description">' . __('Language from which texts should be translated by this user', 'mqtranslate') . "</span>\n";
|
169 |
-
}
|
170 |
-
else
|
171 |
-
{
|
172 |
-
if (empty($langs) || empty($user_master_lang) || !in_array($user_master_lang, $langs))
|
173 |
-
_e('Default Language', 'mqtranslate');
|
174 |
-
else
|
175 |
-
echo $q_config['language_name'][$user_master_lang];
|
176 |
-
}
|
177 |
-
echo "</td>\n";
|
178 |
-
echo "</tr>\n";
|
179 |
-
|
180 |
-
echo "</tbody>\n</table>\n";
|
181 |
-
}
|
182 |
-
|
183 |
-
function mqtrans_userProfileUpdate($user_id) {
|
184 |
-
global $q_config;
|
185 |
-
$cu = wp_get_current_user();
|
186 |
-
if ($cu->has_cap('edit_users') && !empty($q_config['ul_lang_protection'])) {
|
187 |
-
// Editable languages
|
188 |
-
$langs = (empty($_POST['mqtrans_user_lang'])) ? array() : $_POST['mqtrans_user_lang'];
|
189 |
-
if (!is_array($langs))
|
190 |
-
$langs = array();
|
191 |
-
update_user_meta($user_id, 'mqtranslate_language_access', implode(',', $langs));
|
192 |
-
|
193 |
-
// Master language
|
194 |
-
if (empty($_POST['mqtrans_master_lang']))
|
195 |
-
delete_user_meta($user_id, 'mqtranslate_master_language');
|
196 |
-
else
|
197 |
-
update_user_meta($user_id, 'mqtranslate_master_language', $_POST['mqtrans_master_lang']);
|
198 |
-
}
|
199 |
-
}
|
200 |
-
|
201 |
-
function qtrans_isEmptyContent($value) {
|
202 |
-
$str = trim(strip_tags($value, '<img>,<embed>,<object>'));
|
203 |
-
return empty($str);
|
204 |
-
}
|
205 |
-
|
206 |
-
function mqtrans_postUpdated($post_ID, $after, $before) {
|
207 |
-
global $wpdb, $q_config;
|
208 |
-
|
209 |
-
// Don't handle custom post types
|
210 |
-
if (!in_array($after->post_type, array( 'post', 'page' )) && !in_array($after->post_type, $q_config['allowed_custom_post_types']))
|
211 |
-
return;
|
212 |
-
|
213 |
-
$titleMap = array();
|
214 |
-
$contentMap = array();
|
215 |
-
|
216 |
-
$cu = wp_get_current_user();
|
217 |
-
if ($cu->has_cap('edit_users') || empty($q_config['ul_lang_protection']))
|
218 |
-
{
|
219 |
-
$title = qtrans_split($after->post_title, true, $titleMap);
|
220 |
-
foreach ($title as $k => $v) {
|
221 |
-
if (qtrans_isEmptyContent($v))
|
222 |
-
unset($title[$k]);
|
223 |
-
}
|
224 |
-
$content = qtrans_split($after->post_content, true, $contentMap);
|
225 |
-
foreach ($content as $k => $v) {
|
226 |
-
if (qtrans_isEmptyContent($v))
|
227 |
-
unset($content[$k]);
|
228 |
-
}
|
229 |
-
}
|
230 |
-
else
|
231 |
-
{
|
232 |
-
$titleBeforeMap = array();
|
233 |
-
$titleBefore = qtrans_split($before->post_title, true, $titleBeforeMap);
|
234 |
-
$titleAfter = qtrans_split($after->post_title, true, $titleMap);
|
235 |
-
foreach ($titleAfter as $k => $v) {
|
236 |
-
if (!mqtrans_currentUserCanEdit($k))
|
237 |
-
unset($titleAfter[$k], $titleMap[$k]);
|
238 |
-
}
|
239 |
-
$title = array_merge($titleBefore, $titleAfter);
|
240 |
-
$titleMap = array_merge($titleBeforeMap, $titleMap);
|
241 |
-
|
242 |
-
$contentBeforeMap = array();
|
243 |
-
$contentBefore = qtrans_split($before->post_content, true, $contentBeforeMap);
|
244 |
-
$contentAfter = qtrans_split($after->post_content, true, $contentMap);
|
245 |
-
foreach ($contentAfter as $k => $v) {
|
246 |
-
if (qtrans_isEmptyContent($v) || !mqtrans_currentUserCanEdit($k))
|
247 |
-
unset($contentAfter[$k], $contentMap[$k]);
|
248 |
-
}
|
249 |
-
$content = array_merge($contentBefore, $contentAfter);
|
250 |
-
$contentMap = array_merge($contentBeforeMap, $contentMap);
|
251 |
-
}
|
252 |
-
|
253 |
-
$data = array('post_title' => qtrans_join($title, $titleMap), 'post_content' => qtrans_join($content, $contentMap));
|
254 |
-
if (get_magic_quotes_gpc())
|
255 |
-
$data = stripslashes_deep($data);
|
256 |
-
$where = array('ID' => $post_ID);
|
257 |
-
|
258 |
-
$wpdb->update($wpdb->posts, $data, $where);
|
259 |
-
}
|
260 |
-
|
261 |
-
function mqtrans_filterHomeURL($url, $path, $orig_scheme, $blog_id) {
|
262 |
-
global $q_config;
|
263 |
-
return ((empty($path) && $q_config['url_mode'] == QT_URL_PATH) || $path == '/' || !empty($q_config['url_info']['explicit_default_language'])) ? qtrans_convertURL($url, '', false, $q_config['url_info']['explicit_default_language']) : $url;
|
264 |
-
}
|
265 |
-
|
266 |
-
function mqtrans_filterPostMetaData($original_value, $object_id, $meta_key, $single) {
|
267 |
-
if ($meta_key == '_menu_item_url')
|
268 |
-
{
|
269 |
-
$meta = wp_cache_get($object_id, 'post_meta');
|
270 |
-
if (!empty($meta) && array_key_exists($meta_key, $meta) && !empty($meta[$meta_key]))
|
271 |
-
{
|
272 |
-
if ($single === false)
|
273 |
-
{
|
274 |
-
if (is_array($meta[$meta_key]))
|
275 |
-
$meta = $meta[$meta_key];
|
276 |
-
else
|
277 |
-
$meta = array($meta[$meta_key]);
|
278 |
-
$meta = array_map('qtrans_convertURL', $meta);
|
279 |
-
}
|
280 |
-
else
|
281 |
-
{
|
282 |
-
if (is_array($meta[$meta_key]))
|
283 |
-
$meta = $meta[$meta_key][0];
|
284 |
-
else
|
285 |
-
$meta = $meta[$meta_key];
|
286 |
-
$meta = qtrans_convertURL($meta);
|
287 |
-
}
|
288 |
-
return $meta;
|
289 |
-
}
|
290 |
-
}
|
291 |
-
return null;
|
292 |
-
}
|
293 |
-
|
294 |
-
function mqtrans_team_options() {
|
295 |
-
global $q_config;
|
296 |
-
?>
|
297 |
-
<h3><?php _e('mqTranslate Team Settings', 'mqtranslate') ?><span id="mqtranslate-show-team"> (<a name="mqtranslate_team_settings" href="#" onclick="return showTeamSettings();"><?php _e('Show / Hide', 'mqtranslate'); ?></a>)</span></h3>
|
298 |
-
<table class="form-table" id="mqtranslate-team" style="display: none">
|
299 |
-
<tr>
|
300 |
-
<th scope="row"><?php _e('User-level Language Protection', 'mqtranslate') ?></th>
|
301 |
-
<td>
|
302 |
-
<label for="ul_lang_protection"><input type="checkbox" name="ul_lang_protection" id="ul_lang_protection" value="1"<?php echo ($q_config['ul_lang_protection'])?' checked="checked"':''; ?>/> <?php _e('Enable user-level language protection', 'mqtranslate'); ?></label>
|
303 |
-
<br />
|
304 |
-
<small><?php _e('When enabled, this option allows you to select which language is editable on a user-level account basis.', 'mqtranslate') ?></small>
|
305 |
-
</td>
|
306 |
-
</tr>
|
307 |
-
</table>
|
308 |
-
<script type="text/javascript">
|
309 |
-
// <![CDATA[
|
310 |
-
function showTeamSettings() {
|
311 |
-
var el = document.getElementById('mqtranslate-team');
|
312 |
-
if (el.style.display == 'block')
|
313 |
-
el.style.display = 'none';
|
314 |
-
else
|
315 |
-
el.style.display='block';
|
316 |
-
return false;
|
317 |
-
}
|
318 |
-
// ]]>
|
319 |
-
</script>
|
320 |
-
<?php
|
321 |
-
}
|
322 |
-
|
323 |
-
function mqtrans_load_team_options() {
|
324 |
-
global $q_config;
|
325 |
-
$opt = get_option('mqtranslate_ul_lang_protection');
|
326 |
-
if ($opt === false)
|
327 |
-
$q_config['ul_lang_protection'] = true;
|
328 |
-
else
|
329 |
-
$q_config['ul_lang_protection'] = ($opt == '1');
|
330 |
-
}
|
331 |
-
|
332 |
-
function mqtrans_save_team_options() {
|
333 |
-
qtrans_checkSetting('ul_lang_protection', true, QT_BOOLEAN);
|
334 |
-
}
|
335 |
-
|
336 |
-
function mqtrans_editorExpand() {
|
337 |
-
return false;
|
338 |
-
}
|
339 |
-
|
340 |
-
if (!defined('WP_ADMIN'))
|
341 |
-
{
|
342 |
-
add_filter('home_url', 'mqtrans_filterHomeURL', 10, 4);
|
343 |
-
add_filter('get_post_metadata', 'mqtrans_filterPostMetaData', 10, 4);
|
344 |
-
}
|
345 |
-
else
|
346 |
-
add_filter('wp_editor_expand', 'mqtrans_editorExpand');
|
347 |
-
|
348 |
-
add_action('edit_user_profile', 'mqtrans_userProfile');
|
349 |
-
add_action('show_user_profile', 'mqtrans_userProfile');
|
350 |
-
add_action('profile_update', 'mqtrans_userProfileUpdate');
|
351 |
-
add_action('post_updated', 'mqtrans_postUpdated', 10, 3);
|
352 |
-
|
353 |
-
add_action('mqtranslate_configuration', 'mqtrans_team_options', 9);
|
354 |
-
add_action('mqtranslate_loadConfig', 'mqtrans_load_team_options');
|
355 |
-
add_action('mqtranslate_saveConfig', 'mqtrans_save_team_options');
|
356 |
-
?>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
lang/qtranslate-sr_RS.mo
DELETED
Binary file
|
qtranslate.js
CHANGED
@@ -1,4 +1,4 @@
|
|
1 |
-
/* this is
|
2 |
/*
|
3 |
//debuging tools, do not check in
|
4 |
var cc=0;
|
@@ -9,67 +9,7 @@ function ct(v){ c(v); console.trace(); }
|
|
9 |
qtranxj_split = function(text)
|
10 |
{
|
11 |
var result = new Object;
|
12 |
-
for(var i=0; i<qTranslateConfig.enabled_languages.length; ++
|
13 |
-
{
|
14 |
-
var lang=qTranslateConfig.enabled_languages[i];
|
15 |
-
result[lang] = '';
|
16 |
-
}
|
17 |
-
var split_regex_c = /<!--:-->/gi;
|
18 |
-
var blocks = text.xsplit(split_regex_c);
|
19 |
-
//c('qtranxj_split: blocks='+blocks);
|
20 |
-
//c('qtranxj_split: blocks.length='+blocks.length);
|
21 |
-
if(!qtranxj_isArray(blocks))
|
22 |
-
return result;
|
23 |
-
var matches, lang_regex, lang;
|
24 |
-
if(blocks.length>1){//there are matches
|
25 |
-
lang_regex = /<!--:([a-z]{2})-->/gi;
|
26 |
-
for(var i = 0;i<blocks.length;++i){
|
27 |
-
var b=blocks[i];
|
28 |
-
//c('blocks['+i+']='+b);
|
29 |
-
if(!b.length) continue;
|
30 |
-
matches = lang_regex.exec(b); lang_regex.lastIndex=0;
|
31 |
-
//c('matches='+matches);
|
32 |
-
if(matches==null) continue;
|
33 |
-
lang = matches[1];
|
34 |
-
result[lang] += b.substring(10);
|
35 |
-
//c('text='+result[lang]);
|
36 |
-
}
|
37 |
-
}else{
|
38 |
-
var split_regex_b = /(\[:[a-z]{2}\])/gi;
|
39 |
-
blocks = text.xsplit(split_regex_b);
|
40 |
-
if(!qtranxj_isArray(blocks))
|
41 |
-
return result;
|
42 |
-
if(blocks.length==1){//no language separator found, enter it to all languages
|
43 |
-
var b=blocks[0];
|
44 |
-
for(var j=0; j<qTranslateConfig.enabled_languages.length; ++j){
|
45 |
-
var lang=qTranslateConfig.enabled_languages[j];
|
46 |
-
result[lang] += b;
|
47 |
-
}
|
48 |
-
}else{
|
49 |
-
lang_regex = /\[:([a-z]{2})\]/gi;
|
50 |
-
lang = false;
|
51 |
-
for(var i = 0;i<blocks.length;++i){
|
52 |
-
var b=blocks[i];
|
53 |
-
//c('blocks['+i+']='+b+'; lang='+lang);
|
54 |
-
if(lang){
|
55 |
-
result[lang] += b;
|
56 |
-
lang = false;
|
57 |
-
}else{
|
58 |
-
matches = lang_regex.exec(b); lang_regex.lastIndex=0;
|
59 |
-
if(matches==null) continue;
|
60 |
-
lang = matches[1];
|
61 |
-
}
|
62 |
-
}
|
63 |
-
}
|
64 |
-
}
|
65 |
-
return result;
|
66 |
-
}
|
67 |
-
|
68 |
-
/*
|
69 |
-
qtranxj_split = function(text)
|
70 |
-
{
|
71 |
-
var result = new Object;
|
72 |
-
for(var i=0; i<qTranslateConfig.enabled_languages.length; ++i)
|
73 |
{
|
74 |
var lang=qTranslateConfig.enabled_languages[i];
|
75 |
result[lang] = '';
|
@@ -100,7 +40,7 @@ qtranxj_split = function(text)
|
|
100 |
}else{
|
101 |
var matches;
|
102 |
var lang = false;
|
103 |
-
for(var i = 0;i<blocks.length
|
104 |
var b=blocks[i];
|
105 |
//c('blocks['+i+']='+b);
|
106 |
if(!b.length) continue;
|
@@ -115,17 +55,17 @@ qtranxj_split = function(text)
|
|
115 |
}
|
116 |
}
|
117 |
var morenextpage_regex = /(<!--more-->|<!--nextpage-->)+$/gi;
|
118 |
-
for(var i = 0;i<result.length
|
119 |
result[i] = result[i].replace(morenextpage_regex,'');
|
120 |
}
|
121 |
return result;
|
122 |
}
|
123 |
-
|
124 |
//"_c" stands for "comment"
|
125 |
qtranxj_join_c = function(texts)
|
126 |
{
|
127 |
var text = '';
|
128 |
-
for(var i=0; i<qTranslateConfig.enabled_languages.length; ++
|
129 |
{
|
130 |
var lang=qTranslateConfig.enabled_languages[i];
|
131 |
var t = texts[lang];
|
@@ -141,7 +81,7 @@ qtranxj_join_c = function(texts)
|
|
141 |
qtranxj_join_b = function(texts)
|
142 |
{
|
143 |
var text = '';
|
144 |
-
for(var i=0; i<qTranslateConfig.enabled_languages.length; ++
|
145 |
{
|
146 |
var lang=qTranslateConfig.enabled_languages[i];
|
147 |
var t = texts[lang];
|
@@ -156,8 +96,7 @@ function qtranxj_get_cookie(cname)
|
|
156 |
{
|
157 |
var nm = cname + "=";
|
158 |
var ca = document.cookie.split(';');
|
159 |
-
|
160 |
-
for(var i=0; i<ca.length; ++i){
|
161 |
var s = ca[i];
|
162 |
var sa = s.split('=');
|
163 |
if(sa[0].trim()!=cname) continue;
|
@@ -225,7 +164,7 @@ var qTranslateX=function()
|
|
225 |
{
|
226 |
function ge(id){ return document.getElementById(id); }
|
227 |
|
228 |
-
var activeLanguage=qtranxj_get_cookie('
|
229 |
if(!activeLanguage)
|
230 |
activeLanguage=qTranslateConfig.language;
|
231 |
|
@@ -234,9 +173,8 @@ var qTranslateX=function()
|
|
234 |
{
|
235 |
var h=contentHooks[id];
|
236 |
var lang=languageSwitch.getActiveLanguage();
|
237 |
-
|
238 |
-
|
239 |
-
h.contents[lang]=value;
|
240 |
if(h.separator==='<'){
|
241 |
h.mlContentField.value = qtranxj_join_c(h.contents);
|
242 |
}else{
|
@@ -293,6 +231,8 @@ var qTranslateX=function()
|
|
293 |
return false;
|
294 |
}
|
295 |
|
|
|
|
|
296 |
var adminLanguage=qTranslateConfig.language;
|
297 |
|
298 |
build_translator=function(langF,langT)
|
@@ -323,7 +263,7 @@ var qTranslateX=function()
|
|
323 |
var tr=rows[r];
|
324 |
var td=tr.getElementsByTagName('TD')[0];
|
325 |
var items=td.getElementsByClassName('inline');
|
326 |
-
for(var i=0; i<items.length; ++
|
327 |
{
|
328 |
var e=items[i];
|
329 |
e.style.display='none';
|
@@ -358,7 +298,7 @@ var qTranslateX=function()
|
|
358 |
var nmF = nms[langF]||'';
|
359 |
var nmT = nms[langT]||'';
|
360 |
var items=td.getElementsByClassName('row-title');
|
361 |
-
for(var i=0; i<items.length; ++
|
362 |
{
|
363 |
var e=items[i];
|
364 |
if(nmF)
|
@@ -376,7 +316,7 @@ var qTranslateX=function()
|
|
376 |
var items=tagCloud.getElementsByTagName('A');
|
377 |
if(!items.length) return;
|
378 |
var translator=build_translator(langF,langT);
|
379 |
-
for(var i=0; i<items.length; ++
|
380 |
{
|
381 |
var e=items[i];
|
382 |
var nmF=e.innerHTML;
|
@@ -412,7 +352,7 @@ var qTranslateX=function()
|
|
412 |
|
413 |
var editinlines=document.getElementsByClassName('editinline');
|
414 |
//c('editinlines.length='+editinlines.length);
|
415 |
-
for(var i=0; i<editinlines.length; ++
|
416 |
{
|
417 |
var e=editinlines[i];
|
418 |
if(e.tagName!=='A') continue;
|
@@ -429,7 +369,7 @@ var qTranslateX=function()
|
|
429 |
|
430 |
var langs=qTranslateConfig.enabled_languages;
|
431 |
var newNameFields={};
|
432 |
-
for(var i=0; i<langs.length; ++
|
433 |
{
|
434 |
var lang=langs[i];
|
435 |
newNameFields[lang]=qtranxj_ce('input', {name: 'qtranx_term_'+lang, className: 'hidden', value: name[lang] || ''}, form, true);
|
@@ -477,20 +417,6 @@ var qTranslateX=function()
|
|
477 |
addContentHook(f,form,sep);
|
478 |
}
|
479 |
|
480 |
-
for(var i=0; i<qTranslateConfig.custom_field_classes.length; ++i){
|
481 |
-
var nm=qTranslateConfig.custom_field_classes[i];
|
482 |
-
var sep;
|
483 |
-
if(nm.indexOf('<')==0 || nm.indexOf('[')==0){
|
484 |
-
sep=nm.substring(0,1);
|
485 |
-
nm=nm.substring(1);
|
486 |
-
}
|
487 |
-
var fields=form.getElementsByClassName(nm);
|
488 |
-
for(var j=0; j<fields.length; ++j){
|
489 |
-
f=fields[j];
|
490 |
-
addContentHook(f,form,sep);
|
491 |
-
}
|
492 |
-
}
|
493 |
-
|
494 |
var alttextField=ge('attachment_alt');
|
495 |
if(alttextField) addContentHookB(alttextField,form);
|
496 |
|
@@ -638,7 +564,7 @@ var qTranslateX=function()
|
|
638 |
|
639 |
setLangCookie=function()
|
640 |
{
|
641 |
-
document.cookie='
|
642 |
}
|
643 |
|
644 |
var matches = location.pathname.match(/(\/wp-admin\/([^\/]*))$/);
|
@@ -692,13 +618,13 @@ function LanguageSwitch(target,initial_language)
|
|
692 |
}
|
693 |
activeLanguage=tabSwitch.lang;
|
694 |
tabSwitch.classList.add('active');
|
695 |
-
for(var i=0; i<onTabSwitch.length; ++
|
696 |
{
|
697 |
onTabSwitch[i].call(this);
|
698 |
}
|
699 |
}
|
700 |
location.pathname.indexOf();
|
701 |
-
for(var i=0; i<langs.length; ++
|
702 |
{
|
703 |
//var flags_location=qTranslateConfig.WP_CONTENT_URL+qTranslateConfig.flag_location;
|
704 |
var flag_location=qTranslateConfig.flag_location;
|
1 |
+
/* this is a developer version of qtranslate.min.js before it is minimized */
|
2 |
/*
|
3 |
//debuging tools, do not check in
|
4 |
var cc=0;
|
9 |
qtranxj_split = function(text)
|
10 |
{
|
11 |
var result = new Object;
|
12 |
+
for(var i=0; i<qTranslateConfig.enabled_languages.length; i++)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
13 |
{
|
14 |
var lang=qTranslateConfig.enabled_languages[i];
|
15 |
result[lang] = '';
|
40 |
}else{
|
41 |
var matches;
|
42 |
var lang = false;
|
43 |
+
for(var i = 0;i<blocks.length;i++){
|
44 |
var b=blocks[i];
|
45 |
//c('blocks['+i+']='+b);
|
46 |
if(!b.length) continue;
|
55 |
}
|
56 |
}
|
57 |
var morenextpage_regex = /(<!--more-->|<!--nextpage-->)+$/gi;
|
58 |
+
for(var i = 0;i<result.length;i++){
|
59 |
result[i] = result[i].replace(morenextpage_regex,'');
|
60 |
}
|
61 |
return result;
|
62 |
}
|
63 |
+
|
64 |
//"_c" stands for "comment"
|
65 |
qtranxj_join_c = function(texts)
|
66 |
{
|
67 |
var text = '';
|
68 |
+
for(var i=0; i<qTranslateConfig.enabled_languages.length; i++)
|
69 |
{
|
70 |
var lang=qTranslateConfig.enabled_languages[i];
|
71 |
var t = texts[lang];
|
81 |
qtranxj_join_b = function(texts)
|
82 |
{
|
83 |
var text = '';
|
84 |
+
for(var i=0; i<qTranslateConfig.enabled_languages.length; i++)
|
85 |
{
|
86 |
var lang=qTranslateConfig.enabled_languages[i];
|
87 |
var t = texts[lang];
|
96 |
{
|
97 |
var nm = cname + "=";
|
98 |
var ca = document.cookie.split(';');
|
99 |
+
for(var i=0; i<ca.length; i++){
|
|
|
100 |
var s = ca[i];
|
101 |
var sa = s.split('=');
|
102 |
if(sa[0].trim()!=cname) continue;
|
164 |
{
|
165 |
function ge(id){ return document.getElementById(id); }
|
166 |
|
167 |
+
var activeLanguage=qtranxj_get_cookie('qtrans_edit_language');
|
168 |
if(!activeLanguage)
|
169 |
activeLanguage=qTranslateConfig.language;
|
170 |
|
173 |
{
|
174 |
var h=contentHooks[id];
|
175 |
var lang=languageSwitch.getActiveLanguage();
|
176 |
+
var morenextpage_regex = /(<!--more-->|<!--nextpage-->)+$/gi;
|
177 |
+
h.contents[lang]=value.replace(morenextpage_regex,'');;
|
|
|
178 |
if(h.separator==='<'){
|
179 |
h.mlContentField.value = qtranxj_join_c(h.contents);
|
180 |
}else{
|
231 |
return false;
|
232 |
}
|
233 |
|
234 |
+
//var adminLanguage=qtranxj_get_cookie('qtrans_admin_language');
|
235 |
+
//if(!adminLanguage)
|
236 |
var adminLanguage=qTranslateConfig.language;
|
237 |
|
238 |
build_translator=function(langF,langT)
|
263 |
var tr=rows[r];
|
264 |
var td=tr.getElementsByTagName('TD')[0];
|
265 |
var items=td.getElementsByClassName('inline');
|
266 |
+
for(var i=0; i<items.length; i++)
|
267 |
{
|
268 |
var e=items[i];
|
269 |
e.style.display='none';
|
298 |
var nmF = nms[langF]||'';
|
299 |
var nmT = nms[langT]||'';
|
300 |
var items=td.getElementsByClassName('row-title');
|
301 |
+
for(var i=0; i<items.length; i++)
|
302 |
{
|
303 |
var e=items[i];
|
304 |
if(nmF)
|
316 |
var items=tagCloud.getElementsByTagName('A');
|
317 |
if(!items.length) return;
|
318 |
var translator=build_translator(langF,langT);
|
319 |
+
for(var i=0; i<items.length; i++)
|
320 |
{
|
321 |
var e=items[i];
|
322 |
var nmF=e.innerHTML;
|
352 |
|
353 |
var editinlines=document.getElementsByClassName('editinline');
|
354 |
//c('editinlines.length='+editinlines.length);
|
355 |
+
for(var i=0; i<editinlines.length; i++)
|
356 |
{
|
357 |
var e=editinlines[i];
|
358 |
if(e.tagName!=='A') continue;
|
369 |
|
370 |
var langs=qTranslateConfig.enabled_languages;
|
371 |
var newNameFields={};
|
372 |
+
for(var i=0; i<langs.length; i++)
|
373 |
{
|
374 |
var lang=langs[i];
|
375 |
newNameFields[lang]=qtranxj_ce('input', {name: 'qtranx_term_'+lang, className: 'hidden', value: name[lang] || ''}, form, true);
|
417 |
addContentHook(f,form,sep);
|
418 |
}
|
419 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
420 |
var alttextField=ge('attachment_alt');
|
421 |
if(alttextField) addContentHookB(alttextField,form);
|
422 |
|
564 |
|
565 |
setLangCookie=function()
|
566 |
{
|
567 |
+
document.cookie='qtrans_edit_language='+this.lang;
|
568 |
}
|
569 |
|
570 |
var matches = location.pathname.match(/(\/wp-admin\/([^\/]*))$/);
|
618 |
}
|
619 |
activeLanguage=tabSwitch.lang;
|
620 |
tabSwitch.classList.add('active');
|
621 |
+
for(var i=0; i<onTabSwitch.length; i++)
|
622 |
{
|
623 |
onTabSwitch[i].call(this);
|
624 |
}
|
625 |
}
|
626 |
location.pathname.indexOf();
|
627 |
+
for(var i=0; i<langs.length; i++)
|
628 |
{
|
629 |
//var flags_location=qTranslateConfig.WP_CONTENT_URL+qTranslateConfig.flag_location;
|
630 |
var flag_location=qTranslateConfig.flag_location;
|
qtranslate.min.js
CHANGED
@@ -1 +1 @@
|
|
1 |
-
function qtranxj_get_cookie(e){for(var
|
1 |
+
function qtranxj_get_cookie(e){for(var a=document.cookie.split(";"),n=0;n<a.length;n++){var t=a[n],r=t.split("=");if(r[0].trim()==e&&!(a.length<2))return r[1].trim()}return""}function qtranxj_isArray(e){return e.constructor.toString().indexOf("Array")>=0}function qtranxj_ce(e,a,n,t){var r=document.createElement(e);if(a)for(prop in a)r[prop]=a[prop];return n&&(t&&n.firstChild?n.insertBefore(r,n.firstChild):n.appendChild(r)),r}function LanguageSwitch(e,a){function n(){var e=this;if(!e.lang)return void alert("qTranslate-X: This should not have happened: Please, report this incident to the developers: !tabSwitch.lang");if(i!==e.lang){i&&l[i].classList.remove("active"),i=e.lang,e.classList.add("active");for(var a=0;a<o.length;a++)o[a].call(this)}}var t=qTranslateConfig.enabled_languages,r=qTranslateConfig.language_name,i=a,l={},o=[];location.pathname.indexOf();for(var s=0;s<t.length;s++){var g=qTranslateConfig.flag_location,u=t[s],c=qtranxj_ce("li",{lang:u,className:"qtranxs-lang-switch",onclick:n},e);qtranxj_ce("img",{src:g+qTranslateConfig.flag[u]},c),qtranxj_ce("span",{innerHTML:r[u]},c),l[u]=c,i==u&&c.classList.add("active")}this.getActiveLanguage=function(){return i},this.onSwitch=function(e){"function"==typeof e&&o.push(e)}}qtranxj_split=function(e){for(var a=new Object,n=0;n<qTranslateConfig.enabled_languages.length;n++){var t=qTranslateConfig.enabled_languages[n];a[t]=""}var r=/(<!--.*?-->)/gi,i=e.xsplit(r);if(!qtranxj_isArray(i))return a;var l,o;if(i.length>1)l=/<!--:([a-z]{2})-->/gi,o=/<!--:-->/gi;else{var s=/(\[:[a-z]{2}\])/gi;if(i=e.xsplit(s),!qtranxj_isArray(i))return a;l=/\[:([a-z]{2})\]/gi}if(!i.length)return a;if(1==i.length)for(var g=i[0],u=0;u<qTranslateConfig.enabled_languages.length;u++){var t=qTranslateConfig.enabled_languages[u];a[t]+=g}else for(var c,t=!1,n=0;n<i.length;n++){var g=i[n];g.length&&(null!=(c=l.exec(g))?t=c[1]:o&&o.test(g)?t=!1:t&&(a[t]+=g,t=!1))}for(var f=/(<!--more-->|<!--nextpage-->)+$/gi,n=0;n<a.length;n++)a[n]=a[n].replace(f,"");return a},qtranxj_join_c=function(e){for(var a="",n=0;n<qTranslateConfig.enabled_languages.length;n++){var t=qTranslateConfig.enabled_languages[n],r=e[t];r&&""!=r&&(a+="<!--:"+t+"-->",a+=r,a+="<!--:-->")}return a},qtranxj_join_b=function(e){for(var a="",n=0;n<qTranslateConfig.enabled_languages.length;n++){var t=qTranslateConfig.enabled_languages[n],r=e[t];r&&""!=r&&(a+="[:"+t+"]",a+=r)}return a},String.prototype.xsplit=function(e){if(3==="a~b".split(/(~)/).length)return this.split(e);e.global||(e=new RegExp(e.source,"g"+(e.ignoreCase?"i":"")));for(var a,n=0,t=[];null!=(a=e.exec(this));)t.push(this.slice(n,a.index)),a.length>1&&t.push(a[1]),n=e.lastIndex;return n<this.length&&t.push(this.slice(n)),n==this.length&&t.push(""),t};var qTranslateX=function(){function e(e){return document.getElementById(e)}function a(e,a){var n=g[e],t=languageSwitch.getActiveLanguage(),r=/(<!--more-->|<!--nextpage-->)+$/gi;n.contents[t]=a.replace(r,""),n.mlContentField.value="<"===n.separator?qtranxj_join_c(n.contents):qtranxj_join_b(n.contents)}function n(e,n,t){if(e){var r=g[e.id]={};r.contentField=e,r.contents=qtranxj_split(e.value),r.mlContentField=qtranxj_ce(e.tagName,{name:e.name,className:"hidden",value:e.value},n,!0),t||(t="TEXTAREA"===e.tagName?"<":"["),r.separator=t,e.name+="_edit",e.value=r.contents[s],e.onblur=function(){a(this.id,this.value)}}}function t(e,a){n(e,a,"<")}function r(e,a){n(e,a,"[")}function i(){var a,n,t=!!e("tag-name");t?(a="tag-",n="addtag"):(a="",n="edittag");var r=e(a+"name"),i=e(n);if(!i||!r)return!1;var l=qTranslateConfig.language;build_translator=function(e,a){var n={};for(var t in qTranslateConfig.term_name){var r=qTranslateConfig.term_name[t],i=r[e],l=r[a];if(!i||!l){var o=r[qTranslateConfig.default_language];if(!o)continue;i||(i=o+"("+qTranslateConfig.default_language+")"),l||(l=o+"("+qTranslateConfig.default_language+")")}n[i]=l}return n};var o=e("the-list");hideQuickEdit=function(){if(o)for(var e=o.getElementsByTagName("TR"),a=0;a<e.length;a++)for(var n=e[a],t=n.getElementsByTagName("TD")[0],r=t.getElementsByClassName("inline"),i=0;i<r.length;i++){var l=r[i];l.style.display="none"}},hideQuickEdit(),updateNames=function(e,a){if(o)for(var n=o.getElementsByTagName("TR"),t=0;t<n.length;t++){for(var r,i=n[t],s=i.getElementsByTagName("TD")[0],g=s.getElementsByTagName("DIV"),u=0;u<g.length;u++){var c=g[u];if("name"===c.className){r=c.innerHTML;break}}if(l!=qTranslateConfig.default_language){var f=build_translator(l,qTranslateConfig.default_language);r=f[r]}for(var d=qTranslateConfig.term_name[r]||{},h=d[e]||"",v=d[a]||"",m=s.getElementsByClassName("row-title"),p=0;p<m.length;p++){var c=m[p];h?c.innerHTML=c.innerHTML.replace(h,v):c.innerHTML+=v}}};var g=document.getElementsByClassName("tagcloud")[0];updateTagCloud=function(e,a){if(g){var n=g.getElementsByTagName("A");if(n.length)for(var t=build_translator(e,a),r=0;r<n.length;r++){var i=n[r],l=i.innerHTML,o=t[l];o&&(i.innerHTML=o)}}},updateNamesAndTagCloud=function(e,a){updateNames(e,a),updateTagCloud(e,a)},l!==s&&updateNamesAndTagCloud(l,s);var u=qtranxj_ce("input",{name:r.name,className:"hidden",value:r.value},i,!0);r.name="";var c=qTranslateConfig.term_name[r.value]||{};s!==qTranslateConfig.default_language&&(r.value=c[s]||""),editinline_activated=function(){return!0};for(var f=document.getElementsByClassName("editinline"),d=0;d<f.length;d++){var h=f[d];"A"===h.tagName&&h.addEventListener("click",editinline_activated)}onTabSwitch=function(){s!==this.lang&&(r.value=c[this.lang]||"",updateNamesAndTagCloud(s,this.lang),s=this.lang)};for(var v=qTranslateConfig.enabled_languages,m={},d=0;d<v.length;d++){var p=v[d];m[p]=qtranxj_ce("input",{name:"qtranx_term_"+p,className:"hidden",value:name[p]||""},i,!0)}return r.onblur=function(){var e=languageSwitch.getActiveLanguage();m[e].value=this.value,c[e]=this.value,e===qTranslateConfig.default_language&&(u.value=this.value)},!0}function l(){function i(e,a){switch(qTranslateConfig.url_mode.toString()){case"1":e.search?e.search+="&lang="+a:e.search="?lang="+a;break;case"2":var n=qTranslateConfig.url_info_home,t=e.pathname.indexOf(n);e.pathname=n+a+e.pathname.substring(t+n.length-1);break;case"3":e.host=a+"."+e.host}}function l(a){if(!q){var n=e("view-post-btn");if(!n||!n.children.length)return;if(q=n.children[0],"A"!=q.tagName)return;C=q.href,w=qtranxj_ce("a",{})}w.href=C,i(w,a),q.href=w.href;var t=e("preview-action");if(t&&t.children.length&&(t.children[0].href=w.href),1!=qTranslateConfig.url_mode){if(!x){var r=e("sample-permalink");r&&r.childNodes.length&&(x=r.childNodes[0],b=x.nodeValue)}x&&(w.href=b,i(w,a),x.nodeValue=w.href)}}function o(e){var n=e.id;if(n){var t=g[n];t.mce||(t.mce=e,e.getBody().addEventListener("blur",function(){a(e.id,e.getContent())}))}}var u=e("post");if(!u)return!1;var c=e("title");c&&t(c,u);for(var f=u.getElementsByClassName("wp-editor-area"),d=0;d<f.length;++d){var h=f[d];t(h,u)}var v=e("attachment_caption");v&&t(v,u);for(var d=0;d<qTranslateConfig.custom_fields.length;++d){var m,p=qTranslateConfig.custom_fields[d];(0==p.indexOf("<")||0==p.indexOf("["))&&(m=p.substring(0,1),p=p.substring(1));var _=e(p);n(_,u,m)}var T=e("attachment_alt");T&&r(T,u);var q,C,w,x,b;return l(s),onTabSwitch=function(){for(var e in g){var a=g[e];a.contentField.value=a.contents[this.lang]}if(T&&(T.value=alttexts[this.lang]),l(this.lang),window.tinyMCE)for(var n=0;n<tinyMCE.editors.length;++n){var t=tinyMCE.editors[n],a=g[t.id];a&&t.setContent(a.contentField.value)}},window.addEventListener("load",function(){if(window.tinyMCE){for(var e=0;e<tinyMCE.editors.length;++e){var a=tinyMCE.editors[e];o(a)}for(var n in g){var t=g[n];t.mce||"TEXTAREA"===t.contentField.tagName&&(tinyMCEPreInit.mceInit[n].init_instance_callback=function(e){o(e)})}}}),!0}function o(){var a=document.getElementsByTagName("FORM");if(!a.length)return!1;var n=a[0];return r(e("blogname"),n),r(e("blogdescription"),n),onTabSwitch=function(){for(var e in g){var a=g[e];a.contentField.value=a.contents[this.lang]}},!0}var s=qtranxj_get_cookie("qtrans_edit_language");s||(s=qTranslateConfig.language);var g={};setLangCookie=function(){document.cookie="qtrans_edit_language="+this.lang};var u=location.pathname.match(/(\/wp-admin\/([^\/]*))$/);switch(u&&u[1]){case"/wp-admin/post.php":case"/wp-admin/post-new.php":if(!l())return;break;case"/wp-admin/edit-tags.php":if(!i())return;break;case"/wp-admin/options-general.php":if(location.search.indexOf("page=")>=0)return;if(!o())return;break;default:return}var c=qtranxj_ce("ul",{className:"qtranxs-lang-switch-wrap"}),f=document.getElementsByClassName("wrap")[0],d=f.getElementsByTagName("form")[0];d.parentNode.insertBefore(c,d),languageSwitch=new LanguageSwitch(c,s),languageSwitch.onSwitch(onTabSwitch),languageSwitch.onSwitch(setLangCookie)};new qTranslateX;
|
qtranslate.php
CHANGED
@@ -1,9 +1,9 @@
|
|
1 |
<?php // encoding: utf-8
|
2 |
/**
|
3 |
-
Plugin Name: qTranslate
|
4 |
Plugin URI: http://wordpress.org/plugins/qtranslate-x/
|
5 |
Description: Adds user-friendly and database-friendly multilingual content support into WordPress.
|
6 |
-
Version: 2.
|
7 |
Author: John Clause based on original code by Qian Qin
|
8 |
Author URI: http://qtranslatexteam.wordpress.com/about
|
9 |
Tags: multilingual, multi, language, admin, tinymce, Polyglot, bilingual, widget, switcher, professional, human, translation, service, qTranslate, zTranslate, mqTranslate, qTranslate Plus, WPML
|
@@ -122,8 +122,7 @@ define('QTX_DATE_OVERRIDE', 2);
|
|
122 |
define('QTX_DATE', 3);
|
123 |
define('QTX_STRFTIME', 4);
|
124 |
|
125 |
-
define('
|
126 |
-
define('QTX_COOKIE_NAME_ADMIN','wp_qtrans_admin_language');
|
127 |
|
128 |
define('QTX_IGNORE_FILE_TYPES','gif,jpg,jpeg,png,pdf,swf,tif,rar,zip,7z,mpg,divx,mpeg,avi,css,js');
|
129 |
|
@@ -153,9 +152,6 @@ $q_config['auto_update_mo'] = true;
|
|
153 |
// hide language tag for default language
|
154 |
$q_config['hide_default_language'] = true;
|
155 |
|
156 |
-
//enables compatibility with former qtrans_* functions
|
157 |
-
$q_config['qtrans_compatibility'] = false;
|
158 |
-
|
159 |
// sets default url mode
|
160 |
// QTX_URL_QUERY(1) - query (questionmark)
|
161 |
// QTX_URL_PATH(2) - pre-path
|
@@ -322,9 +318,6 @@ $q_config['flag_location'] = 'plugins/qtranslate-x/flags/';
|
|
322 |
|
323 |
// Don't convert URLs to this file types
|
324 |
//$q_config['ignore_file_types'] = explode(',',QTX_IGNORE_FILE_TYPES);
|
325 |
-
$q_config['custom_fields'] = array();
|
326 |
-
$q_config['custom_field_classes'] = array();
|
327 |
-
$q_config['text_field_filters'] = array();
|
328 |
|
329 |
/* DEFAULT CONFIGURATION PART ENDS HERE */
|
330 |
|
1 |
<?php // encoding: utf-8
|
2 |
/**
|
3 |
+
Plugin Name: qTranslate-X
|
4 |
Plugin URI: http://wordpress.org/plugins/qtranslate-x/
|
5 |
Description: Adds user-friendly and database-friendly multilingual content support into WordPress.
|
6 |
+
Version: 2.8
|
7 |
Author: John Clause based on original code by Qian Qin
|
8 |
Author URI: http://qtranslatexteam.wordpress.com/about
|
9 |
Tags: multilingual, multi, language, admin, tinymce, Polyglot, bilingual, widget, switcher, professional, human, translation, service, qTranslate, zTranslate, mqTranslate, qTranslate Plus, WPML
|
122 |
define('QTX_DATE', 3);
|
123 |
define('QTX_STRFTIME', 4);
|
124 |
|
125 |
+
define('QTX_COOKIE_NAME','language');
|
|
|
126 |
|
127 |
define('QTX_IGNORE_FILE_TYPES','gif,jpg,jpeg,png,pdf,swf,tif,rar,zip,7z,mpg,divx,mpeg,avi,css,js');
|
128 |
|
152 |
// hide language tag for default language
|
153 |
$q_config['hide_default_language'] = true;
|
154 |
|
|
|
|
|
|
|
155 |
// sets default url mode
|
156 |
// QTX_URL_QUERY(1) - query (questionmark)
|
157 |
// QTX_URL_PATH(2) - pre-path
|
318 |
|
319 |
// Don't convert URLs to this file types
|
320 |
//$q_config['ignore_file_types'] = explode(',',QTX_IGNORE_FILE_TYPES);
|
|
|
|
|
|
|
321 |
|
322 |
/* DEFAULT CONFIGURATION PART ENDS HERE */
|
323 |
|
qtranslate_compatibility.php
CHANGED
@@ -19,10 +19,8 @@ if (!function_exists('qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage')){
|
|
19 |
return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($content);
|
20 |
}
|
21 |
}
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
function qtrans_getSortedLanguages($reverse = false){ return qtranxf_getSortedLanguages($reverse); }
|
27 |
-
}
|
28 |
?>
|
19 |
return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($content);
|
20 |
}
|
21 |
}
|
22 |
+
|
23 |
+
//if(!function_exists('qtrans_useTermLib')){//is not available any more
|
24 |
+
// function qtrans_useTermLib($obj){ return qtranxf_useTermLib($obj);
|
25 |
+
//}
|
|
|
|
|
26 |
?>
|
qtranslate_configuration.php
CHANGED
@@ -47,7 +47,6 @@ function qtranxf_update_config()
|
|
47 |
delete_option('qtranslate_auto_update_mo');
|
48 |
delete_option('qtranslate_next_update_mo');
|
49 |
delete_option('qtranslate_hide_default_language');
|
50 |
-
delete_option('qtranslate_qtrans_compatibility');
|
51 |
delete_option('qtranslate_custom_fields');
|
52 |
if(isset($_POST['qtranslate_reset3'])) {
|
53 |
delete_option('qtranslate_term_name');
|
@@ -67,7 +66,7 @@ function qtranxf_add_admin_js () {
|
|
67 |
wp_deregister_script( 'autosave' );//autosave script saves the active language only and messes it up later in a hard way
|
68 |
|
69 |
//echo '<script>var qTranslateConfig='.json_encode($q_config).';</script>';
|
70 |
-
$keys=array('enabled_languages','default_language','language','term_name','custom_fields','
|
71 |
foreach($keys as $key){
|
72 |
$config[$key]=$q_config[$key];
|
73 |
}
|
@@ -256,7 +255,7 @@ function qtranxf_language_form($lang = '', $language_code = '', $language_name =
|
|
256 |
<label for="language_locale"><?php _e('Locale', 'qtranslate') ?></label>
|
257 |
<input name="language_locale" id="language_locale" type="text" value="<?php echo $language_locale; ?>" size="5" maxlength="5"/>
|
258 |
<p>
|
259 |
-
<?php _e('PHP and Wordpress Locale for the language. (Example: en_US)', 'qtranslate'); ?><br/>
|
260 |
<?php _e('You will need to install the .mo file for this language.', 'qtranslate'); ?>
|
261 |
</p>
|
262 |
</div>
|
@@ -274,8 +273,8 @@ function qtranxf_language_form($lang = '', $language_code = '', $language_name =
|
|
274 |
<label for="language_na_message"><?php _e('Not Available Message', 'qtranslate') ?></label>
|
275 |
<input name="language_na_message" id="language_na_message" type="text" value="<?php echo $language_na_message; ?>"/>
|
276 |
<p>
|
277 |
-
<?php _e('Message to display if post is not available in the requested language. (Example: Sorry, this entry is only available in %LANG:, : and %.)', 'qtranslate'); ?><br/>
|
278 |
-
<?php _e('%LANG:<normal_seperator>:<last_seperator>% generates a list of languages seperated by <normal_seperator> except for the last one, where <last_seperator> will be used instead.', 'qtranslate'); ?><br/>
|
279 |
</p>
|
280 |
</div>
|
281 |
<?php
|
@@ -436,10 +435,7 @@ function qtranxf_conf() {
|
|
436 |
qtranxf_updateSetting('url_mode', QTX_INTEGER);
|
437 |
qtranxf_updateSetting('auto_update_mo', QTX_BOOLEAN);
|
438 |
qtranxf_updateSetting('hide_default_language', QTX_BOOLEAN);
|
439 |
-
qtranxf_updateSetting('qtrans_compatibility', QTX_BOOLEAN);
|
440 |
qtranxf_updateSetting('custom_fields', QTX_ARRAY);
|
441 |
-
qtranxf_updateSetting('custom_field_classes', QTX_ARRAY);
|
442 |
-
qtranxf_updateSetting('text_field_filters', QTX_ARRAY);
|
443 |
if(isset($_POST['update_mo_now']) && $_POST['update_mo_now']=='1' && qtranxf_updateGettextDatabases(true))
|
444 |
$message = __('Gettext databases updated.', 'qtranslate');
|
445 |
}
|
@@ -670,7 +666,7 @@ function qtranxf_conf() {
|
|
670 |
echo ' <a href="'.add_query_arg('moveup', $language, $clean_uri).'"><img src="'.WP_PLUGIN_URL.'/qtranslate-x/arrowup.png" alt="up" /></a>';
|
671 |
echo ' <a href="'.add_query_arg('movedown', $language, $clean_uri).'"><img src="'.WP_PLUGIN_URL.'/qtranslate-x/arrowdown.png" alt="down" /></a>';
|
672 |
echo ' <img src="' . trailingslashit(WP_CONTENT_URL) .$q_config['flag_location'].$q_config['flag'][$language] . '" alt="' . $q_config['language_name'][$language] . '" /> ';
|
673 |
-
echo ' '.$q_config['language_name'][$language] . "</label><br/>\n";
|
674 |
}
|
675 |
?>
|
676 |
<small><?php printf(__('Choose the default language of your blog. This is the language which will be shown on %s. You can also change the order the languages by clicking on the arrows above.', 'qtranslate'), get_bloginfo('url')); ?></small>
|
@@ -704,9 +700,9 @@ function qtranxf_conf() {
|
|
704 |
<th scope="row"><?php _e('URL Modification Mode', 'qtranslate') ?></th>
|
705 |
<td>
|
706 |
<fieldset><legend class="hidden"><?php _e('URL Modification Mode', 'qtranslate') ?></legend>
|
707 |
-
<label title="Pre-Path Mode"><input type="radio" name="url_mode" value="<?php echo QTX_URL_PATH; ?>" <?php echo ($q_config['url_mode']==QTX_URL_PATH)?"checked=\"checked\"":""; ?> /> <?php echo __('Use Pre-Path Mode (Default, puts /en/ in front of URL)', 'qtranslate').'. SEO '.__('friendly', 'qtranslate').'.'; ?></label><br/>
|
708 |
-
<label title="Pre-Domain Mode"><input type="radio" name="url_mode" value="<?php echo QTX_URL_DOMAIN; ?>" <?php echo ($q_config['url_mode']==QTX_URL_DOMAIN)?"checked=\"checked\"":""; ?> /> <?php echo __('Use Pre-Domain Mode (uses http://en.yoursite.com)', 'qtranslate').'. '.__('You will need to configure DNS sub-domains on your site.', 'qtranslate'); ?></label><br/>
|
709 |
-
<label title="Query Mode"><input type="radio" name="url_mode" value="<?php echo QTX_URL_QUERY; ?>" <?php echo ($q_config['url_mode']==QTX_URL_QUERY)?"checked=\"checked\"":""; ?> /> <?php echo __('Use Query Mode (?lang=en)', 'qtranslate').'. '.__('Most SEO unfriendly, not recommended.', 'qtranslate'); ?></label><br/>
|
710 |
</fieldset>
|
711 |
<small><?php _e('Pre-Path and Pre-Domain mode will only work with mod_rewrite/pretty permalinks. Additional Configuration is needed for Pre-Domain mode!', 'qtranslate'); ?></small>
|
712 |
<br/><br/>
|
@@ -742,45 +738,18 @@ function qtranxf_conf() {
|
|
742 |
<tr valign="top">
|
743 |
<th scope="row"><?php _e('Date / Time Conversion', 'qtranslate');?></th>
|
744 |
<td>
|
745 |
-
<label><input type="radio" name="use_strftime" value="<?php echo QTX_DATE; ?>" <?php echo ($q_config['use_strftime']==QTX_DATE)?' checked="checked"':''; ?>/> <?php _e('Use emulated date function.', 'qtranslate'); ?></label><br/>
|
746 |
-
<label><input type="radio" name="use_strftime" value="<?php echo QTX_DATE_OVERRIDE; ?>" <?php echo ($q_config['use_strftime']==QTX_DATE_OVERRIDE)?' checked="checked"':''; ?>/> <?php _e('Use emulated date function and replace formats with the predefined formats for each language.', 'qtranslate'); ?></label><br/>
|
747 |
-
<label><input type="radio" name="use_strftime" value="<?php echo QTX_STRFTIME; ?>" <?php echo ($q_config['use_strftime']==QTX_STRFTIME)?' checked="checked"':''; ?>/> <?php _e('Use strftime instead of date.', 'qtranslate'); ?></label><br/>
|
748 |
-
<label><input type="radio" name="use_strftime" value="<?php echo QTX_STRFTIME_OVERRIDE; ?>" <?php echo ($q_config['use_strftime']==QTX_STRFTIME_OVERRIDE)?' checked="checked"':''; ?>/> <?php _e('Use strftime instead of date and replace formats with the predefined formats for each language.', 'qtranslate'); ?></label><br/>
|
749 |
<small><?php _e('Depending on the mode selected, additional customizations of the theme may be needed.', 'qtranslate'); ?></small>
|
750 |
</td>
|
751 |
</tr>
|
752 |
<tr valign="top">
|
753 |
-
<th scope="row"><?php
|
754 |
<td>
|
755 |
-
|
756 |
-
|
757 |
-
</tr>
|
758 |
-
<tr valign="top">
|
759 |
-
<th scope="row" style="text-align: right">id:</th>
|
760 |
-
<td>
|
761 |
-
<input type="text" name="custom_fields" id="qtranxs_custom_fields" value="<?php echo implode(' ',$q_config['custom_fields']); ?>" style="width:100%"><br/>
|
762 |
-
<small><?php _e('The value of "id" attribute is normally unique within one page, otherwise the first field found, having an id specified, is picked up.', 'qtranslate'); ?></small>
|
763 |
-
</td>
|
764 |
-
</tr>
|
765 |
-
<tr valign="top">
|
766 |
-
<th scope="row" style="text-align: right">class:</th>
|
767 |
-
<td>
|
768 |
-
<input type="text" name="custom_field_classes" id="qtranxs_custom_field_classes" value="<?php echo implode(' ',$q_config['custom_field_classes']); ?>" style="width:100%"><br>
|
769 |
-
<small><?php printf(__('All the fields of specified classes will respond to Language Switching Buttons. Be careful not to include a class, which would affect language-neutral fields. If you cannot uniquely identify a field needed neither by %s, nor by %s attribute, report the issue on %sSupport Forum%s', 'qtranslate'),'"id"', '"class"', '<a href="https://wordpress.org/support/plugin/qtranslate-x">','</a>'); ?></small>
|
770 |
-
</td>
|
771 |
-
</tr>
|
772 |
-
<tr valign="top">
|
773 |
-
<th scope="row"><?php echo __('Custom Filters', 'qtranslate');?></th>
|
774 |
-
<td>
|
775 |
-
<input type="text" name="text_field_filters" id="qtranxs_text_field_filters" value="<?php echo implode(' ',$q_config['text_field_filters']); ?>" style="width:100%"><br>
|
776 |
-
<small><?php printf(__('Names of filters (which are enabled on theme or other plugins via %s function) to add translation to. For more information, read %sFAQ%s.', 'qtranslate'),'apply_filters()','<a href="https://wordpress.org/plugins/qtranslate-x/faq/">','</a>'); ?></small>
|
777 |
-
</td>
|
778 |
-
</tr>
|
779 |
-
<tr valign="top">
|
780 |
-
<th scope="row"><?php _e('Compatibility Functions', 'qtranslate');?></th>
|
781 |
-
<td>
|
782 |
-
<label for="qtrans_compatibility"><input type="checkbox" name="qtrans_compatibility" id="qtrans_compatibility" value="1"<?php echo ($q_config['qtrans_compatibility'])?' checked="checked"':''; ?>/> <?php printf(__('Enable function names compatibility for %s.', 'qtranslate'), 'qtrans_getLanguage, qtrans_convertURL, qtrans_use, qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage, qtranxf_useTermLib and qtrans_getSortedLanguages'); ?></label><br/>
|
783 |
-
<small><?php printf(__('Some plugins and themes use direct calls to the functions listed, which are defined in former %s plugin and some of its forks. Turning this flag on will enable those function to exists, which will make the dependent plugins and themes to work. WordPress policy prohibits to define functions with the same names as in other plugins, since it generates user-unfriendly fatal errors, when two conflicting plugins are activated simultaneously. Before turning this option on, you have to make sure that there are no other plugins active, which define those functions.', 'qtranslate'), '<a href="https://wordpress.org/plugins/qtranslate/" target="_blank">qTranslate</a>'); ?></small>
|
784 |
</td>
|
785 |
</tr>
|
786 |
<?php /*
|
@@ -918,7 +887,7 @@ function qtranxf_nav_menu_metabox( $object )
|
|
918 |
</div>
|
919 |
<span class="list-controls hide-if-no-js">
|
920 |
<a href="javascript:void(0);" class="help" onclick="jQuery( '#help-login-links' ).toggle();"><?php _e( 'Help' ); ?></a>
|
921 |
-
<span class="hide-if-js" id="help-login-links"><br/><a name="help-login-links"></a>
|
922 |
Menu item added is replaced with a sub-menu of available languages when menu is rendered. Depending on how your theme renders menu you may need to override and customize css entries .qtranxs-lang-menu and .qtranxs-lang-menu-item, originally defined in qtranslate.css.
|
923 |
</span>
|
924 |
</span>
|
47 |
delete_option('qtranslate_auto_update_mo');
|
48 |
delete_option('qtranslate_next_update_mo');
|
49 |
delete_option('qtranslate_hide_default_language');
|
|
|
50 |
delete_option('qtranslate_custom_fields');
|
51 |
if(isset($_POST['qtranslate_reset3'])) {
|
52 |
delete_option('qtranslate_term_name');
|
66 |
wp_deregister_script( 'autosave' );//autosave script saves the active language only and messes it up later in a hard way
|
67 |
|
68 |
//echo '<script>var qTranslateConfig='.json_encode($q_config).';</script>';
|
69 |
+
$keys=array('enabled_languages','default_language','language','term_name','custom_fields','url_mode');
|
70 |
foreach($keys as $key){
|
71 |
$config[$key]=$q_config[$key];
|
72 |
}
|
255 |
<label for="language_locale"><?php _e('Locale', 'qtranslate') ?></label>
|
256 |
<input name="language_locale" id="language_locale" type="text" value="<?php echo $language_locale; ?>" size="5" maxlength="5"/>
|
257 |
<p>
|
258 |
+
<?php _e('PHP and Wordpress Locale for the language. (Example: en_US)', 'qtranslate'); ?><br />
|
259 |
<?php _e('You will need to install the .mo file for this language.', 'qtranslate'); ?>
|
260 |
</p>
|
261 |
</div>
|
273 |
<label for="language_na_message"><?php _e('Not Available Message', 'qtranslate') ?></label>
|
274 |
<input name="language_na_message" id="language_na_message" type="text" value="<?php echo $language_na_message; ?>"/>
|
275 |
<p>
|
276 |
+
<?php _e('Message to display if post is not available in the requested language. (Example: Sorry, this entry is only available in %LANG:, : and %.)', 'qtranslate'); ?><br />
|
277 |
+
<?php _e('%LANG:<normal_seperator>:<last_seperator>% generates a list of languages seperated by <normal_seperator> except for the last one, where <last_seperator> will be used instead.', 'qtranslate'); ?><br />
|
278 |
</p>
|
279 |
</div>
|
280 |
<?php
|
435 |
qtranxf_updateSetting('url_mode', QTX_INTEGER);
|
436 |
qtranxf_updateSetting('auto_update_mo', QTX_BOOLEAN);
|
437 |
qtranxf_updateSetting('hide_default_language', QTX_BOOLEAN);
|
|
|
438 |
qtranxf_updateSetting('custom_fields', QTX_ARRAY);
|
|
|
|
|
439 |
if(isset($_POST['update_mo_now']) && $_POST['update_mo_now']=='1' && qtranxf_updateGettextDatabases(true))
|
440 |
$message = __('Gettext databases updated.', 'qtranslate');
|
441 |
}
|
666 |
echo ' <a href="'.add_query_arg('moveup', $language, $clean_uri).'"><img src="'.WP_PLUGIN_URL.'/qtranslate-x/arrowup.png" alt="up" /></a>';
|
667 |
echo ' <a href="'.add_query_arg('movedown', $language, $clean_uri).'"><img src="'.WP_PLUGIN_URL.'/qtranslate-x/arrowdown.png" alt="down" /></a>';
|
668 |
echo ' <img src="' . trailingslashit(WP_CONTENT_URL) .$q_config['flag_location'].$q_config['flag'][$language] . '" alt="' . $q_config['language_name'][$language] . '" /> ';
|
669 |
+
echo ' '.$q_config['language_name'][$language] . "</label><br />\n";
|
670 |
}
|
671 |
?>
|
672 |
<small><?php printf(__('Choose the default language of your blog. This is the language which will be shown on %s. You can also change the order the languages by clicking on the arrows above.', 'qtranslate'), get_bloginfo('url')); ?></small>
|
700 |
<th scope="row"><?php _e('URL Modification Mode', 'qtranslate') ?></th>
|
701 |
<td>
|
702 |
<fieldset><legend class="hidden"><?php _e('URL Modification Mode', 'qtranslate') ?></legend>
|
703 |
+
<label title="Pre-Path Mode"><input type="radio" name="url_mode" value="<?php echo QTX_URL_PATH; ?>" <?php echo ($q_config['url_mode']==QTX_URL_PATH)?"checked=\"checked\"":""; ?> /> <?php echo __('Use Pre-Path Mode (Default, puts /en/ in front of URL)', 'qtranslate').'. SEO '.__('friendly', 'qtranslate').'.'; ?></label><br />
|
704 |
+
<label title="Pre-Domain Mode"><input type="radio" name="url_mode" value="<?php echo QTX_URL_DOMAIN; ?>" <?php echo ($q_config['url_mode']==QTX_URL_DOMAIN)?"checked=\"checked\"":""; ?> /> <?php echo __('Use Pre-Domain Mode (uses http://en.yoursite.com)', 'qtranslate').'. '.__('You will need to configure DNS sub-domains on your site.', 'qtranslate'); ?></label><br />
|
705 |
+
<label title="Query Mode"><input type="radio" name="url_mode" value="<?php echo QTX_URL_QUERY; ?>" <?php echo ($q_config['url_mode']==QTX_URL_QUERY)?"checked=\"checked\"":""; ?> /> <?php echo __('Use Query Mode (?lang=en)', 'qtranslate').'. '.__('Most SEO unfriendly, not recommended.', 'qtranslate'); ?></label><br />
|
706 |
</fieldset>
|
707 |
<small><?php _e('Pre-Path and Pre-Domain mode will only work with mod_rewrite/pretty permalinks. Additional Configuration is needed for Pre-Domain mode!', 'qtranslate'); ?></small>
|
708 |
<br/><br/>
|
738 |
<tr valign="top">
|
739 |
<th scope="row"><?php _e('Date / Time Conversion', 'qtranslate');?></th>
|
740 |
<td>
|
741 |
+
<label><input type="radio" name="use_strftime" value="<?php echo QTX_DATE; ?>" <?php echo ($q_config['use_strftime']==QTX_DATE)?' checked="checked"':''; ?>/> <?php _e('Use emulated date function.', 'qtranslate'); ?></label><br />
|
742 |
+
<label><input type="radio" name="use_strftime" value="<?php echo QTX_DATE_OVERRIDE; ?>" <?php echo ($q_config['use_strftime']==QTX_DATE_OVERRIDE)?' checked="checked"':''; ?>/> <?php _e('Use emulated date function and replace formats with the predefined formats for each language.', 'qtranslate'); ?></label><br />
|
743 |
+
<label><input type="radio" name="use_strftime" value="<?php echo QTX_STRFTIME; ?>" <?php echo ($q_config['use_strftime']==QTX_STRFTIME)?' checked="checked"':''; ?>/> <?php _e('Use strftime instead of date.', 'qtranslate'); ?></label><br />
|
744 |
+
<label><input type="radio" name="use_strftime" value="<?php echo QTX_STRFTIME_OVERRIDE; ?>" <?php echo ($q_config['use_strftime']==QTX_STRFTIME_OVERRIDE)?' checked="checked"':''; ?>/> <?php _e('Use strftime instead of date and replace formats with the predefined formats for each language.', 'qtranslate'); ?></label><br />
|
745 |
<small><?php _e('Depending on the mode selected, additional customizations of the theme may be needed.', 'qtranslate'); ?></small>
|
746 |
</td>
|
747 |
</tr>
|
748 |
<tr valign="top">
|
749 |
+
<th scope="row"><?php _e('Custom Fields', 'qtranslate');?></th>
|
750 |
<td>
|
751 |
+
<input type="text" name="custom_fields" id="qtranxs_custom_fields" value="<?php echo implode(' ',$q_config['custom_fields']); ?>" style="width:100%">
|
752 |
+
<p><small><?php printf(__('Enter "id" attribute of text fields from your theme, which you wish to translate. This applies to post, page and media editors (/wp-admin/post*). To lookup "id", right-click on the field in the post or the page editor and choose "Inspect Element". Look for an attribute of the field named "id". Enter it here, as many as you need, space-separated. After saving configuration, these fields will start responding to the language switching buttons, and you can enter different text for each language. For more information, read %sFAQ%s.', 'qtranslate'),'<a href="https://wordpress.org/plugins/qtranslate-x/faq/">','</a>'); ?></small></p>
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
753 |
</td>
|
754 |
</tr>
|
755 |
<?php /*
|
887 |
</div>
|
888 |
<span class="list-controls hide-if-no-js">
|
889 |
<a href="javascript:void(0);" class="help" onclick="jQuery( '#help-login-links' ).toggle();"><?php _e( 'Help' ); ?></a>
|
890 |
+
<span class="hide-if-js" id="help-login-links"><br /><a name="help-login-links"></a>
|
891 |
Menu item added is replaced with a sub-menu of available languages when menu is rendered. Depending on how your theme renders menu you may need to override and customize css entries .qtranxs-lang-menu and .qtranxs-lang-menu-item, originally defined in qtranslate.css.
|
892 |
</span>
|
893 |
</span>
|
qtranslate_core.php
CHANGED
@@ -37,13 +37,14 @@ function qtranxf_init() {
|
|
37 |
if($q_config['auto_update_mo']) qtranxf_updateGettextDatabases();
|
38 |
// update definitions if neccesary
|
39 |
if(current_user_can('manage_categories')) qtranxf_updateTermLibrary();
|
40 |
-
|
41 |
-
}else{
|
42 |
-
|
43 |
}
|
|
|
44 |
|
45 |
$host=$_SERVER['HTTP_HOST'];
|
46 |
-
//on different port
|
47 |
//if(isset($_SERVER['SERVER_PORT']) && !empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT']!='80'){
|
48 |
// $host.=':'.$_SERVER['SERVER_PORT'];
|
49 |
//}
|
@@ -52,6 +53,61 @@ function qtranxf_init() {
|
|
52 |
//qtranxf_dbg_log('qtranxf_init: POST: ',$_POST);
|
53 |
$q_config['url_info'] = qtranxf_detect_language($_SERVER['REQUEST_URI'], $host, isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');
|
54 |
//qtranxf_dbg_log('qtranxf_init: url_info: ',$q_config['url_info']);
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
55 |
|
56 |
$q_config['language'] = $q_config['url_info']['language'];
|
57 |
$q_config['language'] = apply_filters('qtranslate_language', $q_config['language']);
|
@@ -86,10 +142,6 @@ function qtranxf_init() {
|
|
86 |
// fix url to prevent xss
|
87 |
$q_config['url_info']['url'] = qtranxf_convertURL(add_query_arg('lang',$q_config['default_language'],$q_config['url_info']['url']));
|
88 |
|
89 |
-
if($q_config['qtrans_compatibility']){
|
90 |
-
require_once(dirname(__FILE__)."/qtranslate_compatibility.php");
|
91 |
-
}
|
92 |
-
|
93 |
//allow other plugins to initialize whatever they need
|
94 |
do_action('qtranxf_init');
|
95 |
|
@@ -121,28 +173,16 @@ function qtranxf_resolveLangCase($lang,&$caseredirect)
|
|
121 |
return FALSE;
|
122 |
}
|
123 |
|
124 |
-
function qtranxf_get_language_cookie()
|
125 |
-
{
|
126 |
-
if(defined('WP_ADMIN')){
|
127 |
-
if(isset($_COOKIE[QTX_COOKIE_NAME_ADMIN])) return $_COOKIE[QTX_COOKIE_NAME_ADMIN];
|
128 |
-
}else{
|
129 |
-
if(isset($_COOKIE[QTX_COOKIE_NAME_FRONT])) return $_COOKIE[QTX_COOKIE_NAME_FRONT];
|
130 |
-
}
|
131 |
-
return false;
|
132 |
-
}
|
133 |
-
|
134 |
function qtranxf_set_language_cookie($lang,$cookie_path)
|
135 |
{
|
136 |
if(defined('WP_ADMIN')){
|
137 |
-
$cookie_name = QTX_COOKIE_NAME_ADMIN;
|
138 |
$cookie_path = trailingslashit($cookie_path).'wp-admin';
|
139 |
}else{
|
140 |
-
$cookie_name = QTX_COOKIE_NAME_FRONT;
|
141 |
if(strlen($cookie_path)>1)
|
142 |
$cookie_path=untrailingslashit($cookie_path);
|
143 |
}
|
144 |
//qtranxf_dbg_log('qtranxf_set_language_cookie: COOKIEPATH='.COOKIEPATH.'; cookie_path='.$cookie_path.'; lang='.$lang);
|
145 |
-
setcookie(
|
146 |
//two weeks 1209600
|
147 |
}
|
148 |
|
@@ -239,10 +279,10 @@ function qtranxf_detect_language($url, $host, $referer) {
|
|
239 |
if($q_config['hide_default_language'] && $lang_url == $q_config['default_language'])
|
240 |
$doredirect=true;
|
241 |
}else{
|
242 |
-
|
243 |
-
if($
|
244 |
$cs=false;
|
245 |
-
$lang=qtranxf_resolveLangCase($
|
246 |
//qtranxf_dbg_log('qtranxf_detect_language: cookie: lang='.$lang);
|
247 |
}
|
248 |
|
@@ -348,27 +388,6 @@ function qtranxf_validateBool($var, $default) {
|
|
348 |
if($var==='0') return false; elseif($var==='1') return true; else return $default;
|
349 |
}
|
350 |
|
351 |
-
function qtranxf_load_option($nm) {
|
352 |
-
global $q_config;
|
353 |
-
$val = get_option('qtranslate_'.$nm);
|
354 |
-
if(empty($val)) return;
|
355 |
-
$q_config[$nm]=$val;
|
356 |
-
}
|
357 |
-
|
358 |
-
function qtranxf_load_option_array($nm) {
|
359 |
-
global $q_config;
|
360 |
-
$val = get_option('qtranslate_'.$nm);
|
361 |
-
if(!is_array($val)) return;
|
362 |
-
$q_config[$nm]=$val;
|
363 |
-
}
|
364 |
-
|
365 |
-
function qtranxf_load_option_bool($nm) {
|
366 |
-
global $q_config;
|
367 |
-
$val = get_option('qtranslate_'.$nm);
|
368 |
-
if($val==='0') $q_config[$nm] = false;
|
369 |
-
elseif($val==='1') $q_config[$nm] = true;
|
370 |
-
}
|
371 |
-
|
372 |
// loads config via get_option and defaults to values set on top
|
373 |
function qtranxf_loadConfig() {
|
374 |
global $q_config;
|
@@ -389,11 +408,13 @@ function qtranxf_loadConfig() {
|
|
389 |
$use_strftime = get_option('qtranslate_use_strftime');
|
390 |
$ignore_file_types = get_option('qtranslate_ignore_file_types');
|
391 |
$url_mode = get_option('qtranslate_url_mode');
|
|
|
|
|
|
|
|
|
392 |
$term_name = get_option('qtranslate_term_name');
|
393 |
-
|
394 |
-
|
395 |
-
qtranxf_load_option_array('custom_field_classes');
|
396 |
-
qtranxf_load_option_array('text_field_filters');
|
397 |
|
398 |
// default if not set
|
399 |
if(!is_array($date_formats)) $date_formats = $q_config['date_format'];
|
@@ -404,36 +425,18 @@ function qtranxf_loadConfig() {
|
|
404 |
if(!is_array($language_names)) $language_names = $q_config['language_name'];
|
405 |
if(!is_array($enabled_languages)) $enabled_languages = $q_config['enabled_languages'];
|
406 |
if(!is_array($term_name)) $term_name = $q_config['term_name'];
|
|
|
|
|
407 |
if(empty($default_language)) $default_language = $q_config['default_language'];
|
408 |
if(empty($use_strftime)) $use_strftime = $q_config['use_strftime'];
|
409 |
if(empty($url_mode)) $url_mode = $q_config['url_mode'];
|
410 |
if(!is_string($flag_location) || $flag_location==='') $flag_location = $q_config['flag_location'];
|
411 |
-
|
412 |
-
qtranxf_load_option_bool('detect_browser_language');
|
413 |
-
qtranxf_load_option_bool('hide_untranslated');
|
414 |
-
qtranxf_load_option_bool('show_displayed_language_prefix');
|
415 |
-
qtranxf_load_option_bool('auto_update_mo');
|
416 |
-
qtranxf_load_option_bool('hide_default_language');
|
417 |
-
qtranxf_load_option_bool('qtrans_compatibility');
|
418 |
-
/*
|
419 |
-
$detect_browser_language = get_option('qtranslate_detect_browser_language');
|
420 |
-
$hide_untranslated = get_option('qtranslate_hide_untranslated');
|
421 |
-
$show_displayed_language_prefix = get_option('qtranslate_show_displayed_language_prefix');
|
422 |
-
$auto_update_mo = get_option('qtranslate_auto_update_mo');
|
423 |
-
$hide_default_language = get_option('qtranslate_hide_default_language');
|
424 |
-
|
425 |
$detect_browser_language = qtranxf_validateBool($detect_browser_language, $q_config['detect_browser_language']);
|
426 |
$hide_untranslated = qtranxf_validateBool($hide_untranslated, $q_config['hide_untranslated']);
|
427 |
$show_displayed_language_prefix = qtranxf_validateBool($show_displayed_language_prefix, $q_config['show_displayed_language_prefix']);
|
428 |
$auto_update_mo = qtranxf_validateBool($auto_update_mo, $q_config['auto_update_mo']);
|
429 |
$hide_default_language = qtranxf_validateBool($hide_default_language, $q_config['hide_default_language']);
|
430 |
-
|
431 |
-
$q_config['detect_browser_language'] = $detect_browser_language;
|
432 |
-
$q_config['hide_untranslated'] = $hide_untranslated;
|
433 |
-
$q_config['show_displayed_language_prefix'] = $show_displayed_language_prefix;
|
434 |
-
$q_config['auto_update_mo'] = $auto_update_mo;
|
435 |
-
$q_config['hide_default_language'] = $hide_default_language;
|
436 |
-
*/
|
437 |
// url fix for upgrading users
|
438 |
$flag_location = trailingslashit(preg_replace('#^wp-content/#','',$flag_location));
|
439 |
|
@@ -466,19 +469,17 @@ function qtranxf_loadConfig() {
|
|
466 |
$q_config['ignore_file_types'] = $val;
|
467 |
|
468 |
$q_config['url_mode'] = $url_mode;
|
|
|
|
|
|
|
|
|
|
|
469 |
$q_config['term_name'] = $term_name;
|
|
|
470 |
|
471 |
-
foreach($q_config['text_field_filters'] as $nm){
|
472 |
-
add_filter($nm, 'qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage',0);
|
473 |
-
}
|
474 |
do_action('qtranslate_loadConfig');
|
475 |
}
|
476 |
|
477 |
-
function qtranxf_update_option($nm) {
|
478 |
-
global $q_config;
|
479 |
-
update_option('qtranslate_'.$nm, $q_config[$nm]);
|
480 |
-
}
|
481 |
-
|
482 |
function qtranxf_update_option_bool($nm) {
|
483 |
global $q_config;
|
484 |
if($q_config[$nm])
|
@@ -487,7 +488,7 @@ function qtranxf_update_option_bool($nm) {
|
|
487 |
update_option('qtranslate_'.$nm, '0');
|
488 |
}
|
489 |
|
490 |
-
// saves entire configuration
|
491 |
function qtranxf_saveConfig() {
|
492 |
global $q_config;
|
493 |
|
@@ -504,10 +505,7 @@ function qtranxf_saveConfig() {
|
|
504 |
update_option('qtranslate_url_mode', $q_config['url_mode']);
|
505 |
update_option('qtranslate_term_name', $q_config['term_name']);
|
506 |
update_option('qtranslate_use_strftime', $q_config['use_strftime']);
|
507 |
-
|
508 |
-
qtranxf_update_option('custom_fields');
|
509 |
-
qtranxf_update_option('custom_field_classes');
|
510 |
-
qtranxf_update_option('text_field_filters');
|
511 |
|
512 |
qtranxf_update_option_bool('detect_browser_language');
|
513 |
qtranxf_update_option_bool('hide_untranslated');
|
37 |
if($q_config['auto_update_mo']) qtranxf_updateGettextDatabases();
|
38 |
// update definitions if neccesary
|
39 |
if(current_user_can('manage_categories')) qtranxf_updateTermLibrary();
|
40 |
+
// $cookie_name = 'qtrans_admin_language';
|
41 |
+
//}else{
|
42 |
+
// $cookie_name = 'language';
|
43 |
}
|
44 |
+
$q_config['cookie_enabled']=isset($_COOKIE[QTX_COOKIE_NAME]);
|
45 |
|
46 |
$host=$_SERVER['HTTP_HOST'];
|
47 |
+
//on different port it will not work for now
|
48 |
//if(isset($_SERVER['SERVER_PORT']) && !empty($_SERVER['SERVER_PORT']) && $_SERVER['SERVER_PORT']!='80'){
|
49 |
// $host.=':'.$_SERVER['SERVER_PORT'];
|
50 |
//}
|
53 |
//qtranxf_dbg_log('qtranxf_init: POST: ',$_POST);
|
54 |
$q_config['url_info'] = qtranxf_detect_language($_SERVER['REQUEST_URI'], $host, isset($_SERVER['HTTP_REFERER']) ? $_SERVER['HTTP_REFERER'] : '');
|
55 |
//qtranxf_dbg_log('qtranxf_init: url_info: ',$q_config['url_info']);
|
56 |
+
/*
|
57 |
+
// set test cookie
|
58 |
+
//setcookie('qtrans_cookie_test', 'qTranslateookie Test', 0, $q_config['url_info']['home'], $q_config['url_info']['host']);
|
59 |
+
// check cookies for admin
|
60 |
+
if(defined('WP_ADMIN')) {
|
61 |
+
if(isset($_GET['lang']) && qtranxf_isEnabled($_GET['lang'])) {
|
62 |
+
$q_config['language'] = $q_config['url_info']['language'];
|
63 |
+
setcookie('qtrans_admin_language', $q_config['language'], time()+60*60*24*30);
|
64 |
+
} elseif(isset($_COOKIE['qtrans_admin_language']) && qtranxf_isEnabled($_COOKIE['qtrans_admin_language'])) {
|
65 |
+
$q_config['language'] = $_COOKIE['qtrans_admin_language'];
|
66 |
+
} else {
|
67 |
+
$q_config['language'] = $q_config['default_language'];
|
68 |
+
}
|
69 |
+
} else {
|
70 |
+
$q_config['language'] = $q_config['url_info']['language'];
|
71 |
+
}
|
72 |
+
|
73 |
+
//qtranxf_dbg_log('qtranxf_init: url_info:',$q_config['url_info']);
|
74 |
+
//http_negotiate_language
|
75 |
+
if(!$q_config['url_info']['language']){
|
76 |
+
// detect language and forward if needed
|
77 |
+
if($q_config['detect_browser_language'] && $q_config['url_info']['redirect'] && !isset($_COOKIE['qtrans_cookie_test']) && $q_config['url_info']['language'] == $q_config['default_language']) {
|
78 |
+
$target = false;
|
79 |
+
$prefered_languages = array();
|
80 |
+
if(isset($_SERVER["HTTP_ACCEPT_LANGUAGE"]) && preg_match_all("#([^;,]+)(;[^,0-9]*([0-9\.]+)[^,]*)?#i",$_SERVER["HTTP_ACCEPT_LANGUAGE"], $matches, PREG_SET_ORDER)) {
|
81 |
+
$priority = 1.0;
|
82 |
+
foreach($matches as $match) {
|
83 |
+
if(!isset($match[3])) {
|
84 |
+
$pr = $priority;
|
85 |
+
$priority -= 0.001;
|
86 |
+
} else {
|
87 |
+
$pr = floatval($match[3]);
|
88 |
+
}
|
89 |
+
$prefered_languages[$match[1]] = $pr;
|
90 |
+
}
|
91 |
+
arsort($prefered_languages, SORT_NUMERIC);
|
92 |
+
foreach($prefered_languages as $language => $priority) {
|
93 |
+
if(strlen($language)>2) $language = substr($language,0,2);
|
94 |
+
if(qtranxf_isEnabled($language)) {
|
95 |
+
if($q_config['hide_default_language'] && $language == $q_config['default_language']) break;
|
96 |
+
$target = qtranxf_convertURL(get_option('home'),$language);
|
97 |
+
break;
|
98 |
+
}
|
99 |
+
}
|
100 |
+
}
|
101 |
+
$target = apply_filters('qtranslate_language_detect_redirect', $target);
|
102 |
+
if($target !== false) {
|
103 |
+
//qtranxf_dbg_log('qtranxf_init:detect_redirect: target='.$target);
|
104 |
+
wp_redirect($target);
|
105 |
+
exit();
|
106 |
+
}
|
107 |
+
}
|
108 |
+
$q_config['url_info']['language']=$q_config['default_language'];
|
109 |
+
}
|
110 |
+
*/
|
111 |
|
112 |
$q_config['language'] = $q_config['url_info']['language'];
|
113 |
$q_config['language'] = apply_filters('qtranslate_language', $q_config['language']);
|
142 |
// fix url to prevent xss
|
143 |
$q_config['url_info']['url'] = qtranxf_convertURL(add_query_arg('lang',$q_config['default_language'],$q_config['url_info']['url']));
|
144 |
|
|
|
|
|
|
|
|
|
145 |
//allow other plugins to initialize whatever they need
|
146 |
do_action('qtranxf_init');
|
147 |
|
173 |
return FALSE;
|
174 |
}
|
175 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
176 |
function qtranxf_set_language_cookie($lang,$cookie_path)
|
177 |
{
|
178 |
if(defined('WP_ADMIN')){
|
|
|
179 |
$cookie_path = trailingslashit($cookie_path).'wp-admin';
|
180 |
}else{
|
|
|
181 |
if(strlen($cookie_path)>1)
|
182 |
$cookie_path=untrailingslashit($cookie_path);
|
183 |
}
|
184 |
//qtranxf_dbg_log('qtranxf_set_language_cookie: COOKIEPATH='.COOKIEPATH.'; cookie_path='.$cookie_path.'; lang='.$lang);
|
185 |
+
setcookie(QTX_COOKIE_NAME, $lang, time()+31536000, $cookie_path);//one year
|
186 |
//two weeks 1209600
|
187 |
}
|
188 |
|
279 |
if($q_config['hide_default_language'] && $lang_url == $q_config['default_language'])
|
280 |
$doredirect=true;
|
281 |
}else{
|
282 |
+
|
283 |
+
if(isset($_COOKIE[QTX_COOKIE_NAME])){
|
284 |
$cs=false;
|
285 |
+
$lang=qtranxf_resolveLangCase($_COOKIE[QTX_COOKIE_NAME],$cs);
|
286 |
//qtranxf_dbg_log('qtranxf_detect_language: cookie: lang='.$lang);
|
287 |
}
|
288 |
|
388 |
if($var==='0') return false; elseif($var==='1') return true; else return $default;
|
389 |
}
|
390 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
391 |
// loads config via get_option and defaults to values set on top
|
392 |
function qtranxf_loadConfig() {
|
393 |
global $q_config;
|
408 |
$use_strftime = get_option('qtranslate_use_strftime');
|
409 |
$ignore_file_types = get_option('qtranslate_ignore_file_types');
|
410 |
$url_mode = get_option('qtranslate_url_mode');
|
411 |
+
$detect_browser_language = get_option('qtranslate_detect_browser_language');
|
412 |
+
$hide_untranslated = get_option('qtranslate_hide_untranslated');
|
413 |
+
$show_displayed_language_prefix = get_option('qtranslate_show_displayed_language_prefix');
|
414 |
+
$auto_update_mo = get_option('qtranslate_auto_update_mo');
|
415 |
$term_name = get_option('qtranslate_term_name');
|
416 |
+
$hide_default_language = get_option('qtranslate_hide_default_language');
|
417 |
+
$custom_fields = get_option('qtranslate_custom_fields');
|
|
|
|
|
418 |
|
419 |
// default if not set
|
420 |
if(!is_array($date_formats)) $date_formats = $q_config['date_format'];
|
425 |
if(!is_array($language_names)) $language_names = $q_config['language_name'];
|
426 |
if(!is_array($enabled_languages)) $enabled_languages = $q_config['enabled_languages'];
|
427 |
if(!is_array($term_name)) $term_name = $q_config['term_name'];
|
428 |
+
if(!is_array($custom_fields)) $custom_fields = array();
|
429 |
+
//if(empty($ignore_file_types)) $ignore_file_types = $q_config['ignore_file_types'];
|
430 |
if(empty($default_language)) $default_language = $q_config['default_language'];
|
431 |
if(empty($use_strftime)) $use_strftime = $q_config['use_strftime'];
|
432 |
if(empty($url_mode)) $url_mode = $q_config['url_mode'];
|
433 |
if(!is_string($flag_location) || $flag_location==='') $flag_location = $q_config['flag_location'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
434 |
$detect_browser_language = qtranxf_validateBool($detect_browser_language, $q_config['detect_browser_language']);
|
435 |
$hide_untranslated = qtranxf_validateBool($hide_untranslated, $q_config['hide_untranslated']);
|
436 |
$show_displayed_language_prefix = qtranxf_validateBool($show_displayed_language_prefix, $q_config['show_displayed_language_prefix']);
|
437 |
$auto_update_mo = qtranxf_validateBool($auto_update_mo, $q_config['auto_update_mo']);
|
438 |
$hide_default_language = qtranxf_validateBool($hide_default_language, $q_config['hide_default_language']);
|
439 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
440 |
// url fix for upgrading users
|
441 |
$flag_location = trailingslashit(preg_replace('#^wp-content/#','',$flag_location));
|
442 |
|
469 |
$q_config['ignore_file_types'] = $val;
|
470 |
|
471 |
$q_config['url_mode'] = $url_mode;
|
472 |
+
$q_config['detect_browser_language'] = $detect_browser_language;
|
473 |
+
$q_config['hide_untranslated'] = $hide_untranslated;
|
474 |
+
$q_config['show_displayed_language_prefix'] = $show_displayed_language_prefix;
|
475 |
+
$q_config['auto_update_mo'] = $auto_update_mo;
|
476 |
+
$q_config['hide_default_language'] = $hide_default_language;
|
477 |
$q_config['term_name'] = $term_name;
|
478 |
+
$q_config['custom_fields'] = $custom_fields;
|
479 |
|
|
|
|
|
|
|
480 |
do_action('qtranslate_loadConfig');
|
481 |
}
|
482 |
|
|
|
|
|
|
|
|
|
|
|
483 |
function qtranxf_update_option_bool($nm) {
|
484 |
global $q_config;
|
485 |
if($q_config[$nm])
|
488 |
update_option('qtranslate_'.$nm, '0');
|
489 |
}
|
490 |
|
491 |
+
// saves entire configuration
|
492 |
function qtranxf_saveConfig() {
|
493 |
global $q_config;
|
494 |
|
505 |
update_option('qtranslate_url_mode', $q_config['url_mode']);
|
506 |
update_option('qtranslate_term_name', $q_config['term_name']);
|
507 |
update_option('qtranslate_use_strftime', $q_config['use_strftime']);
|
508 |
+
update_option('qtranslate_custom_fields', $q_config['custom_fields']);
|
|
|
|
|
|
|
509 |
|
510 |
qtranxf_update_option_bool('detect_browser_language');
|
511 |
qtranxf_update_option_bool('hide_untranslated');
|
qtranslate_frontend.php
CHANGED
@@ -71,54 +71,21 @@ function qtranxf_get_nav_menu_items( $items, $menu, $args )
|
|
71 |
$itemid=0;
|
72 |
$menu_order=0;
|
73 |
$qtransmenu=null;
|
74 |
-
$altlang=null;
|
75 |
-
$url='';//it will keep the same page
|
76 |
-
$tp='LM';
|
77 |
-
$flags=true;
|
78 |
foreach($items as $item)
|
79 |
{
|
80 |
if($itemid<$item->ID) $itemid=$item->ID;
|
81 |
if($menu_order<$item->menu_order) $menu_order=$item->menu_order;
|
82 |
if( !isset( $item->url ) || strstr( $item->url, '#qtransLangSw' ) === FALSE ) continue;
|
83 |
-
$
|
84 |
-
|
85 |
-
$pars=explode('&',$qs[1]);
|
86 |
-
foreach($pars as $par){
|
87 |
-
$ps=explode('=',$par);
|
88 |
-
switch($ps[0]){
|
89 |
-
case 'flags': $flags=($ps[1]!='no'); break;
|
90 |
-
case 'type': $tp=$ps[1]; break;
|
91 |
-
}
|
92 |
-
}
|
93 |
-
}
|
94 |
-
if($tp=='AL'){
|
95 |
-
foreach($q_config['enabled_languages'] as $lang){
|
96 |
-
if($lang==$language) continue;
|
97 |
-
$toplang=$lang;
|
98 |
-
$altlang=$lang;
|
99 |
-
break;
|
100 |
-
}
|
101 |
-
$item->title=$q_config['language_name'][$toplang];
|
102 |
-
$item->url=qtranxf_convertURL($url, $altlang, false, true);
|
103 |
-
}else{
|
104 |
-
$toplang=$language;
|
105 |
-
$item->title=__('Language','qtranslate');
|
106 |
-
$item->url=null;
|
107 |
-
}
|
108 |
-
if($flags){
|
109 |
-
$item->title.=': <img src="'.$flag_location.$q_config['flag'][$toplang].'">';
|
110 |
-
}
|
111 |
//$item->classes[] = 'qtranxs_flag_'.$language;
|
112 |
$item->classes[] = 'qtranxs-lang-menu';
|
113 |
$qtransmenu = $item;
|
114 |
}
|
115 |
if(!$qtransmenu) return $items;
|
|
|
116 |
foreach($q_config['enabled_languages'] as $lang)
|
117 |
{
|
118 |
-
if($tp=='AL'){
|
119 |
-
if($lang==$language) continue;
|
120 |
-
if($lang==$altlang ) continue;
|
121 |
-
}
|
122 |
$item=new WP_Post((object)array('ID' => ++$itemid));
|
123 |
//$item->db_id=$item->ID;
|
124 |
$item->menu_item_parent=$qtransmenu->ID;
|
@@ -128,10 +95,7 @@ function qtranxf_get_nav_menu_items( $items, $menu, $args )
|
|
128 |
//$item->object_id=0;
|
129 |
$item->type='custom';
|
130 |
$item->type_label='Custom';
|
131 |
-
$item->title
|
132 |
-
if($flags){
|
133 |
-
$item->title='<img src="'.$flag_location.$q_config['flag'][$lang].'"> '.$item->title;
|
134 |
-
}
|
135 |
$item->post_title=$item->title;
|
136 |
$item->post_name='language-menuitem-'.$lang;
|
137 |
if($lang!=$language)
|
71 |
$itemid=0;
|
72 |
$menu_order=0;
|
73 |
$qtransmenu=null;
|
|
|
|
|
|
|
|
|
74 |
foreach($items as $item)
|
75 |
{
|
76 |
if($itemid<$item->ID) $itemid=$item->ID;
|
77 |
if($menu_order<$item->menu_order) $menu_order=$item->menu_order;
|
78 |
if( !isset( $item->url ) || strstr( $item->url, '#qtransLangSw' ) === FALSE ) continue;
|
79 |
+
$item->title=__('Language','qtranslate').':'.' <img src="'.$flag_location.$q_config['flag'][$language].'">';
|
80 |
+
$item->url=null;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
//$item->classes[] = 'qtranxs_flag_'.$language;
|
82 |
$item->classes[] = 'qtranxs-lang-menu';
|
83 |
$qtransmenu = $item;
|
84 |
}
|
85 |
if(!$qtransmenu) return $items;
|
86 |
+
$url='';//it will keep the same page
|
87 |
foreach($q_config['enabled_languages'] as $lang)
|
88 |
{
|
|
|
|
|
|
|
|
|
89 |
$item=new WP_Post((object)array('ID' => ++$itemid));
|
90 |
//$item->db_id=$item->ID;
|
91 |
$item->menu_item_parent=$qtransmenu->ID;
|
95 |
//$item->object_id=0;
|
96 |
$item->type='custom';
|
97 |
$item->type_label='Custom';
|
98 |
+
$item->title='<img src="'.$flag_location.$q_config['flag'][$lang].'"> '.$q_config['language_name'][$lang];
|
|
|
|
|
|
|
99 |
$item->post_title=$item->title;
|
100 |
$item->post_name='language-menuitem-'.$lang;
|
101 |
if($lang!=$language)
|
qtranslate_services.php
CHANGED
@@ -630,7 +630,7 @@ function qts_service() {
|
|
630 |
if(isset($answer['error'])) {
|
631 |
$error = sprintf(__('An error occured: %s', 'qtranslate'), $qts_error_messages[$answer['error']]);
|
632 |
if($answer['message']!='') {
|
633 |
-
$error.='<br/>'.sprintf(__('Additional information: %s', 'qtranslate'), qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($answer['message']));
|
634 |
}
|
635 |
}
|
636 |
if(isset($answer['order_id'])) {
|
630 |
if(isset($answer['error'])) {
|
631 |
$error = sprintf(__('An error occured: %s', 'qtranslate'), $qts_error_messages[$answer['error']]);
|
632 |
if($answer['message']!='') {
|
633 |
+
$error.='<br />'.sprintf(__('Additional information: %s', 'qtranslate'), qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($answer['message']));
|
634 |
}
|
635 |
}
|
636 |
if(isset($answer['order_id'])) {
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
-
=== qTranslate
|
2 |
Developed by: qTranslate Team based on original code by Qian Qin
|
3 |
Contributors: johnclause, chineseleper, Vavooon
|
4 |
Tags: multilingual, language, admin, tinymce, bilingual, widget, switcher, i18n, l10n, multilanguage, translation
|
5 |
Requires at least: 3.9
|
6 |
Tested up to: 4.1
|
7 |
-
Stable tag: 2.
|
8 |
License: GPLv3 or later
|
9 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QEXEK3HX8AR6U
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
@@ -36,8 +36,6 @@ You may still find a lot of useful information through reading [qTranslate](http
|
|
36 |
|
37 |
We suggest all mentioned authors to get together and to continue supporting one single qTranslate-ish plugin in a joint effort.
|
38 |
|
39 |
-
GitHub repository is available: https://github.com/qTranslate-Team/qtranslate-x.git
|
40 |
-
|
41 |
== Installation ==
|
42 |
|
43 |
Installation of this plugin is no different from any other plugin:
|
@@ -57,11 +55,11 @@ Installation of this plugin is no different from any other plugin:
|
|
57 |
|
58 |
= Is it possible to translate theme custom fields? =
|
59 |
|
60 |
-
Yes, some themes put additional text fields per page or per post. By default, those fields have no way to respond to language switching buttons in editors. However, you may enter "id"
|
61 |
|
62 |
-
The theme must pass those values through [translation](http://codex.wordpress.org/Function_Reference/_2) function '__()' before displaying on the
|
63 |
|
64 |
-
|
65 |
|
66 |
- all input fields of class "wp-editor-area", which normally include all TinyMCE visual editors.
|
67 |
- fields with the following id: "title", "attachment_caption", "attachment_alt".
|
@@ -115,19 +113,6 @@ One can find the original qTranslate FAQ [here](https://wordpress.org/plugins/qt
|
|
115 |
|
116 |
== Changelog ==
|
117 |
|
118 |
-
= 2.9.2 =
|
119 |
-
* Option "Compatibility Functions" to enable former qTranslate function names: qtrans_getLanguage, qtrans_convertURL, qtrans_use, qtrans_useCurrentLanguageIfNotFoundUseDefaultLanguage, qtranxf_useTermLib and qtrans_getSortedLanguages
|
120 |
-
* "Language Switcher" menu options: flags=[yes|no], type=[LM|AL]. They can be used in a query string in URL field of Language Menu.
|
121 |
-
|
122 |
-
= 2.9.1 =
|
123 |
-
* JS bug fixed, which would not show any field value if no languages are yet configured for that field.
|
124 |
-
|
125 |
-
= 2.9 =
|
126 |
-
* ability to enable "Custom Fields" by either "id" or "class" attribute.
|
127 |
-
* ability to specify filters, which other theme or plugins define, to pass relevant data through the translation.
|
128 |
-
* support for <!--more--> and <!--nextpage--> tags.
|
129 |
-
* language cookie are renamed to minimize possible interference with other sites.
|
130 |
-
|
131 |
= 2.8 =
|
132 |
* added option "Show displayed language prefix when content is not available for the selected language".
|
133 |
* compatibility with "BuddyPress" plugin and various improvements.
|
@@ -184,13 +169,6 @@ One can find the original qTranslate FAQ [here](https://wordpress.org/plugins/qt
|
|
184 |
* added 'post_title' filter to translate all titles fetched for display purpose
|
185 |
* fixed problem with comment date display in some themes
|
186 |
|
187 |
-
== Known Bugs ==
|
188 |
-
|
189 |
-
* Incompatibility with plugin [WP Editor](https://wordpress.org/support/plugin/wp-editor). Language switching buttons do not change the content of main editor in pages and posts. For now, you would need to deactivate "WP Editor".
|
190 |
-
* Sometimes after a new plugin update is released, the language switching buttons disappear on the first editor page load. Refresh the page to bring them back. Apparently, it has something to do with browse caching mechanism.
|
191 |
-
* Message "The backup of this post in your browser is different from the version below" appears sometimes in the post editor. Clicking on "Restore the backup" may produce unexpected result, since backup has one language only,
|
192 |
-
the one which was active at the time of the last pressing of button "Update". The code which causes this is in /wp-includes/js/autosave.js.
|
193 |
-
|
194 |
== Credentials ==
|
195 |
|
196 |
* The code of this plugin mostly originally based on [qTranslate](https://wordpress.org/plugins/qtranslate/ "qTranslate original plugin") and [zTranslate](https://wordpress.org/plugins/ztranslate/ "zTranslate fork").
|
@@ -198,7 +176,11 @@ the one which was active at the time of the last pressing of button "Update". Th
|
|
198 |
|
199 |
== Desirable Unimplemented Features ==
|
200 |
|
201 |
-
* Add ability to put Language Switching buttons on other editors besides, post, pages and taxonomies.
|
202 |
* "Quick Edit" action in category or tag list pages will update the default language only.
|
203 |
-
*
|
204 |
-
*
|
|
|
|
|
|
|
|
|
|
1 |
+
=== qTranslate-X ===
|
2 |
Developed by: qTranslate Team based on original code by Qian Qin
|
3 |
Contributors: johnclause, chineseleper, Vavooon
|
4 |
Tags: multilingual, language, admin, tinymce, bilingual, widget, switcher, i18n, l10n, multilanguage, translation
|
5 |
Requires at least: 3.9
|
6 |
Tested up to: 4.1
|
7 |
+
Stable tag: 2.8
|
8 |
License: GPLv3 or later
|
9 |
Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=QEXEK3HX8AR6U
|
10 |
License URI: http://www.gnu.org/licenses/gpl-3.0.html
|
36 |
|
37 |
We suggest all mentioned authors to get together and to continue supporting one single qTranslate-ish plugin in a joint effort.
|
38 |
|
|
|
|
|
39 |
== Installation ==
|
40 |
|
41 |
Installation of this plugin is no different from any other plugin:
|
55 |
|
56 |
= Is it possible to translate theme custom fields? =
|
57 |
|
58 |
+
Yes, some themes put additional text fields per page or per post. By default, those fields have no way to respond to language switching buttons in editors. However, you may enter "id" attribute of those fields into "Custom Fields" section of "Languages" configuration page in "Settings", and they will then respond to the language switching buttons allowing you to enter different text for each language. To lookup "id", right-click on the field in the post or the page editor, choose "Inspect Element", and look for an attribute of the field named "id".
|
59 |
|
60 |
+
The theme must pass those values through [translation](http://codex.wordpress.org/Function_Reference/_2) function '__()' before displaying on the output. Most themes do this by default, otherwise you may ask theme author to make this little modification for each field you need to be translatable.
|
61 |
|
62 |
+
Translatable fields, pre-configured by default:
|
63 |
|
64 |
- all input fields of class "wp-editor-area", which normally include all TinyMCE visual editors.
|
65 |
- fields with the following id: "title", "attachment_caption", "attachment_alt".
|
113 |
|
114 |
== Changelog ==
|
115 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
116 |
= 2.8 =
|
117 |
* added option "Show displayed language prefix when content is not available for the selected language".
|
118 |
* compatibility with "BuddyPress" plugin and various improvements.
|
169 |
* added 'post_title' filter to translate all titles fetched for display purpose
|
170 |
* fixed problem with comment date display in some themes
|
171 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
== Credentials ==
|
173 |
|
174 |
* The code of this plugin mostly originally based on [qTranslate](https://wordpress.org/plugins/qtranslate/ "qTranslate original plugin") and [zTranslate](https://wordpress.org/plugins/ztranslate/ "zTranslate fork").
|
176 |
|
177 |
== Desirable Unimplemented Features ==
|
178 |
|
|
|
179 |
* "Quick Edit" action in category or tag list pages will update the default language only.
|
180 |
+
* Full screen editor mode does not have language switch buttons
|
181 |
+
* If a language was switched on a page or post, but no edits were done, browser still complains about page changes, when leaving page.
|
182 |
+
|
183 |
+
== Known Bugs ==
|
184 |
+
|
185 |
+
* Message "The backup of this post in your browser is different from the version below" appears sometimes in the post editor. Clicking on "Restore the backup" may produce unexpected result, since backup has one language only,
|
186 |
+
the one which was active at the time of the last pressing of button "Update". The code which causes this is in /wp-includes/js/autosave.js.
|