qTranslate X - Version 3.4.6.8

Version Description

Download this release

Release Info

Developer johnclause
Plugin Icon wp plugin qTranslate X
Version 3.4.6.8
Comparing to
See all releases

Code changes from version 3.4.6.7 to 3.4.6.8

admin/qtx_admin.php CHANGED
@@ -777,7 +777,7 @@ function qtranxf_admin_notices_config() {
777
* A term name containing '&' is stored in database with '&' instead of '&',
778
* but search in get_terms is done on raw '&' coming from $_POST variable.
779
*/
780
- function qtranxf_get_terms_args($args) {
781
if(!empty($args['name'])){
782
$p = 0;
783
while(($p = strpos($args['name'],'&',$p)) !== false){
@@ -789,10 +789,33 @@ function qtranxf_get_terms_args($args) {
789
$p += 4;
790
}
791
}
792
}
793
return $args;
794
}
795
- add_filter('get_terms_args', 'qtranxf_get_terms_args');
796
//apply_filters( 'get_terms_args', $args, $taxonomies );
797
798
/**
777
* A term name containing '&' is stored in database with '&' instead of '&',
778
* but search in get_terms is done on raw '&' coming from $_POST variable.
779
*/
780
+ function qtranxf_get_terms_args($args, $taxonomies=null) {
781
if(!empty($args['name'])){
782
$p = 0;
783
while(($p = strpos($args['name'],'&',$p)) !== false){
789
$p += 4;
790
}
791
}
792
+ global $q_config;
793
+ $lang = $q_config['language'];
794
+ if($lang != $q_config['default_language']){
795
+ $args['name'] = qtranxf_find_term($lang, $args['name']);
796
+ }
797
+ }
798
+ if(!empty($args['name__like'])){
799
+ global $q_config;
800
+ $lang = $q_config['language'];
801
+ if($lang != $q_config['default_language']){
802
+ $s = $args['name__like'];
803
+ foreach($q_config['term_name'] as $nm => $ts){
804
+ if(empty($ts[$lang])) continue;
805
+ $t = $ts[$lang];
806
+ if(function_exists('mb_stripos'))
807
+ $p = mb_stripos($t,$s);
808
+ else
809
+ $p = stripos($t,$s);
810
+ if($p === false) continue;
811
+ $args['name__like'] = $nm;
812
+ break;
813
+ }
814
+ }
815
}
816
return $args;
817
}
818
+ add_filter('get_terms_args', 'qtranxf_get_terms_args', 5, 2);
819
//apply_filters( 'get_terms_args', $args, $taxonomies );
820
821
/**
admin/qtx_admin_utils.php CHANGED
@@ -351,6 +351,46 @@ function qtranxf_get_term_joined($obj,$taxonomy=null) {
351
return $obj;
352
}
353
354
function qtranxf_get_terms_joined($terms, $taxonomy=null, $args=null) {
355
global $q_config;
356
if(is_array($terms)){
@@ -382,6 +422,19 @@ function qtranxf_useAdminTermLibJoin($obj, $taxonomies=null, $args=null) {
382
add_filter('get_term', 'qtranxf_useAdminTermLibJoin', 5, 2);
383
add_filter('get_terms', 'qtranxf_useAdminTermLibJoin', 5, 3);
384
385
//does someone use it?
386
function qtranxf_useAdminTermLib($obj) {
387
//qtranxf_dbg_echo('qtranxf_useAdminTermLib: $obj: ',$obj,true);
351
return $obj;
352
}
353
354
+ /**
355
+ * @since 3.4.6.8
356
+ * @return string default language name of term $nm in langulage $lang
357
+ * @param string $lang two-letter language code to search for $nm
358
+ * @param string $nm name of term in language $lang
359
+ * @param string $taxonomy
360
+ */
361
+ function qtranxf_find_term($lang, $term, $taxonomy=null) {
362
+ global $q_config;
363
+ if($lang != $q_config['default_language']){
364
+ foreach($q_config['term_name'] as $nm => $ts){
365
+ if(empty($ts[$lang])) continue;
366
+ if( $ts[$lang] == $term ) return $nm;
367
+ }
368
+ }
369
+ return $term;
370
+ }
371
+
372
+ /*
373
+ * @since 3.4.6.8
374
+ * @return string default language name of term $nm in langulage $lang
375
+ * @param string $lang two-letter language code to search for $nm
376
+ * @param string $nm name of term in language $lang
377
+ * @param string $taxonomy
378
+ *
379
+ function qtranxf_find_term_like($lang, $s, $taxonomy=null) {
380
+ global $q_config;
381
+ if($lang != $q_config['default_language']){
382
+ foreach($q_config['term_name'] as $nm => $ts){
383
+ if(empty($ts[$lang])) continue;
384
+ if(function_exists('mb_stripos'))
385
+ $p = stripos($ts[$lang],$s);
386
+ else
387
+ $p = stripos($ts[$lang],$s);
388
+ if( $p !== false) return $nm;
389
+ }
390
+ }
391
+ return $s;
392
+ } */
393
+
394
function qtranxf_get_terms_joined($terms, $taxonomy=null, $args=null) {
395
global $q_config;
396
if(is_array($terms)){
422
add_filter('get_term', 'qtranxf_useAdminTermLibJoin', 5, 2);
423
add_filter('get_terms', 'qtranxf_useAdminTermLibJoin', 5, 3);
424
425
+ /*
426
+ * @since 3.4.6.8
427
+ */
428
+ function qtranxf_admin_term_name($value, $term_id, $taxonomy = null, $context = null){
429
+ global $pagenow;
430
+ if( !empty($context) && $pagenow == 'edit.php' )
431
+ switch($context){
432
+ case 'display': return qtranxf_useCurrentLanguageIfNotFoundUseDefaultLanguage($value);
433
+ }
434
+ return $value;
435
+ }
436
+ add_filter('term_name', 'qtranxf_admin_term_name', 5, 4);//used in function sanitize_term_field
437
+
438
//does someone use it?
439
function qtranxf_useAdminTermLib($obj) {
440
//qtranxf_dbg_echo('qtranxf_useAdminTermLib: $obj: ',$obj,true);
inc/qtx_dbg.php CHANGED
@@ -5,7 +5,7 @@ if(WP_DEBUG){
5
if(!function_exists('qtranxf_dbg_log')){
6
function qtranxf_dbg_log($msg,$var='novar',$bt=false,$exit=false){
7
global $pagenow, $wp_current_filter;
8
- if(isset($_SERVER['REQUEST_TIME_FLOAT'])) $h = $_SERVER['REQUEST_TIME_FLOAT'];
9
if(!empty($pagenow)) $h = $h.'('.$pagenow.')';
10
if(!empty($wp_current_filter)){
11
$cf = end($wp_current_filter);
5
if(!function_exists('qtranxf_dbg_log')){
6
function qtranxf_dbg_log($msg,$var='novar',$bt=false,$exit=false){
7
global $pagenow, $wp_current_filter;
8
+ $h = isset($_SERVER['REQUEST_TIME_FLOAT']) ? $_SERVER['REQUEST_TIME_FLOAT'] : '';
9
if(!empty($pagenow)) $h = $h.'('.$pagenow.')';
10
if(!empty($wp_current_filter)){
11
$cf = end($wp_current_filter);
qtranslate.php CHANGED
@@ -3,7 +3,7 @@
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.
6
- Version: 3.4.6.7
7
Author: qTranslate Team
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
@@ -62,6 +62,7 @@ GitHub Branch: master
62
'gl' by Andrés Bott
63
'it' by Lorenzo De Tomasi
64
'ja' by Brian Parker
65
'nl' by RobV
66
'pt'(pt_PT) by netolazaro, Pedro Mendonça
67
'pb'(pt_BR) by Pedro Mendonça
@@ -121,7 +122,7 @@ if ( ! function_exists( 'add_filter' ) ) {
121
* Designed as interface for other plugin integration. The documentation is available at
122
* https://qtranslatexteam.wordpress.com/integration/
123
*/
124
- define('QTX_VERSION','3.4.6.7');
125
126
if ( ! defined( 'QTRANSLATE_FILE' ) ) {
127
define( 'QTRANSLATE_FILE', __FILE__ );
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.
6
+ Version: 3.4.6.8
7
Author: qTranslate Team
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
62
'gl' by Andrés Bott
63
'it' by Lorenzo De Tomasi
64
'ja' by Brian Parker
65
+ 'lt' by Vytas M.
66
'nl' by RobV
67
'pt'(pt_PT) by netolazaro, Pedro Mendonça
68
'pb'(pt_BR) by Pedro Mendonça
122
* Designed as interface for other plugin integration. The documentation is available at
123
* https://qtranslatexteam.wordpress.com/integration/
124
*/
125
+ define('QTX_VERSION','3.4.6.8');
126
127
if ( ! defined( 'QTRANSLATE_FILE' ) ) {
128
define( 'QTRANSLATE_FILE', __FILE__ );
qtranslate_core.php CHANGED
@@ -20,11 +20,15 @@ function qtranxf_init_language() {
20
21
$url_info = &$q_config['url_info'];
22
$url_info['cookie_enabled'] = isset($_COOKIE[QTX_COOKIE_NAME_FRONT]) || isset($_COOKIE[QTX_COOKIE_NAME_ADMIN]);
23
24
25
if(WP_DEBUG){
26
$url_info['pagenow'] = $pagenow;
27
- $url_info['REQUEST_METHOD'] = $_SERVER['REQUEST_METHOD'];
28
if(defined('WP_ADMIN')&&WP_ADMIN) $url_info['WP_ADMIN'] = true;
29
if(defined('DOING_AJAX')) $url_info['DOING_AJAX_POST'] = $_POST;
30
if(defined('DOING_CRON')) $url_info['DOING_CRON_POST'] = $_POST;
@@ -32,7 +36,7 @@ function qtranxf_init_language() {
32
33
//fill $url_info the same way as _parseURL does
34
$url_info['scheme'] = is_ssl() ? 'https' : 'http';
35
- $url_info['host'] = $_SERVER['HTTP_HOST'];
36
37
if(empty($_SERVER['REQUEST_URI'])){
38
$url_info['path'] = '';
@@ -63,9 +67,8 @@ function qtranxf_init_language() {
63
64
//qtranxf_dbg_log('qtranxf_init_language: SERVER: ',$_SERVER);
65
$url_info['language'] = qtranxf_detect_language($url_info);
66
- //qtranxf_dbg_log('qtranxf_init_language: detected: url_info: ',$url_info);
67
-
68
$q_config['language'] = apply_filters('qtranslate_language', $url_info['language'], $url_info);
69
70
if( $q_config['url_info']['doing_front_end'] && qtranxf_can_redirect() ){
71
$lang = $q_config['language'];
@@ -76,10 +79,11 @@ function qtranxf_init_language() {
76
}
77
if(isset($url_info['doredirect'])){
78
$target = apply_filters('qtranslate_language_detect_redirect', $url_lang, $url_orig, $url_info);
79
if($target!==false && $target != $url_orig){
80
- //qtranxf_dbg_log('qtranxf_init_language: doredirect to '.$lang.PHP_EOL .'urlorg:'.$url_orig.PHP_EOL .'target:'.$target.PHP_EOL .'url_info: ',$url_info);
81
wp_redirect($target);
82
- //header('Location: '.$target);
83
exit();
84
}else{
85
//neutral path
@@ -566,8 +570,23 @@ function qtranxf_load_option_bool( $nm, $default_value=null ) {
566
global $q_config;
567
$val = get_option('qtranslate_'.$nm);
568
if($val===FALSE){ if(!is_null($default_value)) $q_config[$nm] = $default_value; }
569
- elseif($val==='0') $q_config[$nm] = false;
570
- elseif($val==='1') $q_config[$nm] = true;
571
}
572
573
function qtranxf_load_option_func($nm, $opn=null, $func=null) {
@@ -952,7 +971,7 @@ function qtranxf_url_set_language($urlinfo,$lang,$showLanguage) {
952
953
954
// see if cookies are activated
955
- if( !$showLanguage//there still no language information in the converted URL
956
&& !$q_config['url_info']['cookie_enabled']// there will be no way to take language from the cookie
957
//&& empty($urlinfo['path']) //why this was here?
958
//&& !isset($q_config['url_info']['internal_referer'])//three below replace this one?
@@ -1009,7 +1028,8 @@ function qtranxf_get_url_for_language($url, $lang, $showLanguage=true) {
1009
return $complete;
1010
}
1011
1012
- }else{
1013
$urlinfo = qtranxf_get_url_info($url);
1014
1015
// check if it's an external link
@@ -1390,7 +1410,7 @@ function qtranxf_use($lang, $text, $show_available=false, $show_empty=false) {
1390
if(is_array($text)) {
1391
// handle arrays recursively
1392
foreach($text as $key => $t) {
1393
- $text[$key] = qtranxf_use($lang,$text[$key],$show_available,$show_empty);
1394
}
1395
return $text;
1396
}
@@ -1398,7 +1418,7 @@ function qtranxf_use($lang, $text, $show_available=false, $show_empty=false) {
1398
if( is_object($text) || $text instanceof __PHP_Incomplete_Class ) {//since 3.2-b1 instead of @get_class($text) == '__PHP_Incomplete_Class'
1399
foreach(get_object_vars($text) as $key => $t) {
1400
if(!isset($text->$key)) continue;
1401
- $text->$key = qtranxf_use($lang,$text->$key,$show_available,$show_empty);
1402
}
1403
return $text;
1404
}
20
21
$url_info = &$q_config['url_info'];
22
$url_info['cookie_enabled'] = isset($_COOKIE[QTX_COOKIE_NAME_FRONT]) || isset($_COOKIE[QTX_COOKIE_NAME_ADMIN]);
23
+ if($url_info['cookie_enabled']){
24
+ if(isset($_COOKIE[QTX_COOKIE_NAME_FRONT])) $url_info['cookie_lang_front'] = $_COOKIE[QTX_COOKIE_NAME_FRONT];
25
+ if(isset($_COOKIE[QTX_COOKIE_NAME_ADMIN])) $url_info['cookie_lang_admin'] = $_COOKIE[QTX_COOKIE_NAME_ADMIN];
26
+ }
27
28
29
if(WP_DEBUG){
30
$url_info['pagenow'] = $pagenow;
31
+ $url_info['REQUEST_METHOD'] = isset($_SERVER['REQUEST_METHOD']) ? $_SERVER['REQUEST_METHOD'] : '';
32
if(defined('WP_ADMIN')&&WP_ADMIN) $url_info['WP_ADMIN'] = true;
33
if(defined('DOING_AJAX')) $url_info['DOING_AJAX_POST'] = $_POST;
34
if(defined('DOING_CRON')) $url_info['DOING_CRON_POST'] = $_POST;
36
37
//fill $url_info the same way as _parseURL does
38
$url_info['scheme'] = is_ssl() ? 'https' : 'http';
39
+ $url_info['host'] = isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : ''; //https://wordpress.org/support/topic/messy-wp-cronphp-command-line-output
40
41
if(empty($_SERVER['REQUEST_URI'])){
42
$url_info['path'] = '';
67
68
//qtranxf_dbg_log('qtranxf_init_language: SERVER: ',$_SERVER);
69
$url_info['language'] = qtranxf_detect_language($url_info);
70
$q_config['language'] = apply_filters('qtranslate_language', $url_info['language'], $url_info);
71
+ //qtranxf_dbg_log('qtranxf_init_language: detected: url_info: ',$url_info);
72
73
if( $q_config['url_info']['doing_front_end'] && qtranxf_can_redirect() ){
74
$lang = $q_config['language'];
79
}
80
if(isset($url_info['doredirect'])){
81
$target = apply_filters('qtranslate_language_detect_redirect', $url_lang, $url_orig, $url_info);
82
+ //qtranxf_dbg_log('qtranxf_init_language: doredirect to '.$lang.PHP_EOL .'urlorg:'.$url_orig.PHP_EOL .'target:'.$target.PHP_EOL .'url_info: ',$url_info);
83
if($target!==false && $target != $url_orig){
84
wp_redirect($target);
85
+ //header('Location: '.$target, true, 302);
86
+ nocache_headers();//prevent browser from caching redirection
87
exit();
88
}else{
89
//neutral path
570
global $q_config;
571
$val = get_option('qtranslate_'.$nm);
572
if($val===FALSE){ if(!is_null($default_value)) $q_config[$nm] = $default_value; }
573
+ else{
574
+ switch($val){
575
+ case '0': $q_config[$nm] = false; break;
576
+ case '1': $q_config[$nm] = true; break;
577
+ default: $val = strtolower($val);
578
+ switch($val){
579
+ case 'n':
580
+ case 'no': $q_config[$nm] = false; break;
581
+ case 'y':
582
+ case 'yes': $q_config[$nm] = true; break;
583
+ default: $q_config[$nm] == !empty($val); break;
584
+ }
585
+ break;
586
+ }
587
+ }
588
+ //elseif($val==='0') $q_config[$nm] = false;
589
+ //elseif($val==='1') $q_config[$nm] = true;
590
}
591
592
function qtranxf_load_option_func($nm, $opn=null, $func=null) {
971
972
973
// see if cookies are activated
974
+ if( !$showLanguage//there still is no language information in the converted URL
975
&& !$q_config['url_info']['cookie_enabled']// there will be no way to take language from the cookie
976
//&& empty($urlinfo['path']) //why this was here?
977
//&& !isset($q_config['url_info']['internal_referer'])//three below replace this one?
1028
return $complete;
1029
}
1030
1031
+ }
1032
+ else{
1033
$urlinfo = qtranxf_get_url_info($url);
1034
1035
// check if it's an external link
1410
if(is_array($text)) {
1411
// handle arrays recursively
1412
foreach($text as $key => $t) {
1413
+ $text[$key] = qtranxf_use($lang,$t,$show_available,$show_empty);
1414
}
1415
return $text;
1416
}
1418
if( is_object($text) || $text instanceof __PHP_Incomplete_Class ) {//since 3.2-b1 instead of @get_class($text) == '__PHP_Incomplete_Class'
1419
foreach(get_object_vars($text) as $key => $t) {
1420
if(!isset($text->$key)) continue;
1421
+ $text->$key = qtranxf_use($lang,$t,$show_available,$show_empty);
1422
}
1423
return $text;
1424
}
qtranslate_frontend.php CHANGED
@@ -389,6 +389,7 @@ function qtranxf_translate_deep($value,$lang){
389
}
390
}else if(is_object($value) || $value instanceof __PHP_Incomplete_Class){
391
foreach(get_object_vars($value) as $k => $v) {
392
$value->$k = qtranxf_translate_deep($v,$lang);
393
}
394
}
389
}
390
}else if(is_object($value) || $value instanceof __PHP_Incomplete_Class){
391
foreach(get_object_vars($value) as $k => $v) {
392
+ if(!isset($value->$k)) continue;
393
$value->$k = qtranxf_translate_deep($v,$lang);
394
}
395
}
qtranslate_options.php CHANGED
@@ -186,6 +186,7 @@ function qtranxf_default_language_name()
186
$nnm['cy'] = 'Cymraeg';// Oct 22 2015
187
$nnm['ca'] = 'Català';//Nov 6 2015
188
$nnm['sk'] = 'Slovenčina';//Nov 12 2015
189
//$nnm['tw'] = '繁體中文';
190
return $nnm;
191
}
@@ -226,6 +227,7 @@ function qtranxf_default_locale()
226
$loc['cy'] = 'cy';// not 'cy_GB'
227
$loc['ca'] = 'ca';
228
$loc['sk'] = 'sk_SK';
229
//$loc['tw'] = 'zh_TW';
230
return $loc;
231
}
@@ -279,6 +281,7 @@ function qtranxf_default_not_available()
279
$nam['cy'] = 'Mae’n ddrwg gen i, mae\'r cofnod hwn dim ond ar gael mewn %LANG:, : a %.';//ok
280
$nam['ca'] = 'Ho sentim, aquesta entrada es troba disponible únicament en %LANG:, : i %.';//ok
281
$nam['sk'] = 'Ľutujeme, táto stránka je dostupná len v %LANG:, : a %.';//ok
282
//$nam['tw'] = '对不起,此内容只适用于%LANG:,:和%。';
283
return $nam;
284
}
@@ -319,6 +322,7 @@ function qtranxf_default_date_format()
319
$dtf['cy'] = '%A %B %e%q, %Y';//not verified
320
$dtf['ca'] = 'j F, Y';
321
$dtf['sk'] = 'j.F Y';
322
//$dtf['tw'] = '%x %A';
323
return $dtf;
324
}
@@ -358,6 +362,7 @@ function qtranxf_default_time_format()
358
$tmf['cy'] = '%I:%M %p';//not verified
359
$tmf['ca'] = 'G:i';
360
$tmf['sk'] = 'G:i';
361
//$tmf['tw'] = '%I:%M%p';
362
return $tmf;
363
}
@@ -398,6 +403,7 @@ function qtranxf_default_flag()
398
$flg['cy'] = 'cy_GB.png';
399
$flg['ca'] = 'catala.png';
400
$flg['sk'] = 'sk.png';
401
//$flg['tw'] = 'tw.png';
402
return $flg;
403
}
186
$nnm['cy'] = 'Cymraeg';// Oct 22 2015
187
$nnm['ca'] = 'Català';//Nov 6 2015
188
$nnm['sk'] = 'Slovenčina';//Nov 12 2015
189
+ $nnm['lt'] = 'Lietuvių';//May 3 2016
190
//$nnm['tw'] = '繁體中文';
191
return $nnm;
192
}
227
$loc['cy'] = 'cy';// not 'cy_GB'
228
$loc['ca'] = 'ca';
229
$loc['sk'] = 'sk_SK';
230
+ $loc['lt'] = 'lt_LT';
231
//$loc['tw'] = 'zh_TW';
232
return $loc;
233
}
281
$nam['cy'] = 'Mae’n ddrwg gen i, mae\'r cofnod hwn dim ond ar gael mewn %LANG:, : a %.';//ok
282
$nam['ca'] = 'Ho sentim, aquesta entrada es troba disponible únicament en %LANG:, : i %.';//ok
283
$nam['sk'] = 'Ľutujeme, táto stránka je dostupná len v %LANG:, : a %.';//ok
284
+ $nam['lt'] = 'Atsiprašome, šis puslapis galimas tik %LANG:, : ir %.';
285
//$nam['tw'] = '对不起,此内容只适用于%LANG:,:和%。';
286
return $nam;
287
}
322
$dtf['cy'] = '%A %B %e%q, %Y';//not verified
323
$dtf['ca'] = 'j F, Y';
324
$dtf['sk'] = 'j.F Y';
325
+ $dtf['lt'] = '%Y.%m.%d';
326
//$dtf['tw'] = '%x %A';
327
return $dtf;
328
}
362
$tmf['cy'] = '%I:%M %p';//not verified
363
$tmf['ca'] = 'G:i';
364
$tmf['sk'] = 'G:i';
365
+ $tmf['lt'] = '%H:%M';
366
//$tmf['tw'] = '%I:%M%p';
367
return $tmf;
368
}
403
$flg['cy'] = 'cy_GB.png';
404
$flg['ca'] = 'catala.png';
405
$flg['sk'] = 'sk.png';
406
+ $flg['lt'] = 'lt.png';
407
//$flg['tw'] = 'tw.png';
408
return $flg;
409
}
readme.txt CHANGED
@@ -4,7 +4,7 @@ Contributors: johnclause, chineseleper, Vavooon, grafcom
4
Tags: multilingual, language, admin, tinymce, bilingual, widget, switcher, i18n, l10n, multilanguage, translation
5
Requires at least: 3.9
6
Tested up to: 4.5
7
- Stable tag: 3.4.6.7
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
@@ -121,6 +121,11 @@ This version recovers translation of parent of a category on category edit page.
121
122
## Changelog ##
123
124
### 3.4.6.7 ###
125
* Fix: for `/wp-login/` and `/login/`. Thanks to [extremecarver](http://qtranslate-x.com/support/index.php?action=profile;u=373).
126
* Fix: unexpected menu behaviour for empty menu label when option "Hide Content which is not available for the selected language" is on: [WP Topic](https://wordpress.org/support/topic/menu-visible-despite-empty-label).
4
Tags: multilingual, language, admin, tinymce, bilingual, widget, switcher, i18n, l10n, multilanguage, translation
5
Requires at least: 3.9
6
Tested up to: 4.5
7
+ Stable tag: 3.4.6.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
121
122
## Changelog ##
123
124
+ ### 3.4.6.8 ###
125
+ * Imrovement: translation of taxonomies on page `/wp-admin/edit.php`.
126
+ * Improvement: disable browsing caching before redirection based on languge [Issue #306](https://github.com/qTranslate-Team/qtranslate-x/issues/306).
127
+ * Fix: proper tag editing on page `post.php` [Issue #366](https://github.com/qTranslate-Team/qtranslate-x/issues/366).
128
+
129
### 3.4.6.7 ###
130
* Fix: for `/wp-login/` and `/login/`. Thanks to [extremecarver](http://qtranslate-x.com/support/index.php?action=profile;u=373).
131
* Fix: unexpected menu behaviour for empty menu label when option "Hide Content which is not available for the selected language" is on: [WP Topic](https://wordpress.org/support/topic/menu-visible-despite-empty-label).