Translate WordPress with GTranslate - Version 2.8.5

Version Description

  • Show languages in their native names
  • Automatically select default language based on wordpress locale
  • Coding issue with PHP Strict Standards and Fatal Error on some PHP versions fixed
  • Error messages more informative
Download this release

Release Info

Developer edo888
Plugin Icon 128x128 Translate WordPress with GTranslate
Version 2.8.5
Comparing to
See all releases

Code changes from version 2.8.4 to 2.8.5

Files changed (3) hide show
  1. gtranslate.php +104 -106
  2. native_names_map.php +107 -0
  3. readme.txt +10 -3
gtranslate.php CHANGED
@@ -3,14 +3,14 @@
3
  Plugin Name: GTranslate
4
  Plugin URI: https://gtranslate.io/?xyz=998
5
  Description: Makes your website <strong>multilingual</strong> and available to the world using Google Translate. For support visit <a href="https://wordpress.org/support/plugin/gtranslate">GTranslate Support</a>.
6
- Version: 2.8.4
7
  Author: Edvard Ananyan
8
  Author URI: https://gtranslate.io
9
  Text Domain: gtranslate
10
 
11
  */
12
 
13
- /* Copyright 2010 - 2016 Edvard Ananyan (email : edo888@gmail.com)
14
 
15
  This program is free software; you can redistribute it and/or modify
16
  it under the terms of the GNU General Public License as published by
@@ -37,58 +37,6 @@ add_action('plugins_loaded', array('GTranslate', 'load_textdomain'));
37
  add_shortcode('GTranslate', array('GTranslate', 'get_widget_code'));
38
  add_shortcode('gtranslate', array('GTranslate', 'get_widget_code'));
39
 
40
- if(is_admin()) {
41
- global $pagenow;
42
-
43
- if(!defined('DOING_AJAX') or !DOING_AJAX)
44
- new GTranslate_Notices();
45
- }
46
-
47
- $data = get_option('GTranslate');
48
- GTranslate::load_defaults($data);
49
-
50
- if(!empty($data['show_in_menu'])) {
51
- add_filter('wp_nav_menu_items', 'gtranslate_menu_item', 10, 2);
52
- function gtranslate_menu_item($items, $args) {
53
- $data = get_option('GTranslate');
54
- GTranslate::load_defaults($data);
55
-
56
- if($args->theme_location == $data['show_in_menu'])
57
- $items .= '<li style="position:relative;" class="menu-item menu-item-gtranslate"><div style="position:absolute;">'.GTranslate::get_widget_code(false).'</div></li>';
58
- return $items;
59
- }
60
- }
61
-
62
- if($data['floating_language_selector'] != 'no' and !is_admin()) {
63
- add_action('wp_footer', 'gtranslate_display_floating');
64
- function gtranslate_display_floating() {
65
- $data = get_option('GTranslate');
66
- GTranslate::load_defaults($data);
67
-
68
- if($data['widget_look'] == 'dropdown_with_flags')
69
- $vertical_location = '0';
70
- else
71
- $vertical_location = '5%';
72
-
73
- switch($data['floating_language_selector']) {
74
- case 'top_left': $html = '<div style="position:fixed;top:'.$vertical_location.';left:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
75
- case 'top_right': $html = '<div style="position:fixed;top:'.$vertical_location.';right:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
76
- case 'bottom_left': $html = '<div style="position:fixed;bottom:'.$vertical_location.';left:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
77
- case 'bottom_right': $html = '<div style="position:fixed;bottom:'.$vertical_location.';right:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
78
- default: $html = ''; break;
79
- }
80
-
81
- echo $html;
82
- }
83
- }
84
-
85
- if($data['url_translation'] and ($data['pro_version'] or $data['enterprise_version'])) {
86
- add_action('wp_head', 'gtranslate_url_translation_meta', 1);
87
- function gtranslate_url_translation_meta() {
88
- echo '<meta name="uri-translation" content="on" />';
89
- }
90
- }
91
-
92
  class GTranslate extends WP_Widget {
93
  public static function activate() {
94
  $data = array(
@@ -172,7 +120,7 @@ class GTranslate extends WP_Widget {
172
  echo $args['after_widget'];
173
  }
174
 
175
- function get_widget_code($atts) {
176
  $data = get_option('GTranslate');
177
  GTranslate::load_defaults($data);
178
 
@@ -215,6 +163,9 @@ class GTranslate extends WP_Widget {
215
 
216
  $gt_lang_array_json = '{"af":"Afrikaans","sq":"Albanian","am":"Amharic","ar":"Arabic","hy":"Armenian","az":"Azerbaijani","eu":"Basque","be":"Belarusian","bn":"Bengali","bs":"Bosnian","bg":"Bulgarian","ca":"Catalan","ceb":"Cebuano","ny":"Chichewa","zh-CN":"Chinese (Simplified)","zh-TW":"Chinese (Traditional)","co":"Corsican","hr":"Croatian","cs":"Czech","da":"Danish","nl":"Dutch","en":"English","eo":"Esperanto","et":"Estonian","tl":"Filipino","fi":"Finnish","fr":"French","fy":"Frisian","gl":"Galician","ka":"Georgian","de":"German","el":"Greek","gu":"Gujarati","ht":"Haitian Creole","ha":"Hausa","haw":"Hawaiian","iw":"Hebrew","hi":"Hindi","hmn":"Hmong","hu":"Hungarian","is":"Icelandic","ig":"Igbo","id":"Indonesian","ga":"Irish","it":"Italian","ja":"Japanese","jw":"Javanese","kn":"Kannada","kk":"Kazakh","km":"Khmer","ko":"Korean","ku":"Kurdish (Kurmanji)","ky":"Kyrgyz","lo":"Lao","la":"Latin","lv":"Latvian","lt":"Lithuanian","lb":"Luxembourgish","mk":"Macedonian","mg":"Malagasy","ms":"Malay","ml":"Malayalam","mt":"Maltese","mi":"Maori","mr":"Marathi","mn":"Mongolian","my":"Myanmar (Burmese)","ne":"Nepali","no":"Norwegian","ps":"Pashto","fa":"Persian","pl":"Polish","pt":"Portuguese","pa":"Punjabi","ro":"Romanian","ru":"Russian","sm":"Samoan","gd":"Scottish Gaelic","sr":"Serbian","st":"Sesotho","sn":"Shona","sd":"Sindhi","si":"Sinhala","sk":"Slovak","sl":"Slovenian","so":"Somali","es":"Spanish","su":"Sudanese","sw":"Swahili","sv":"Swedish","tg":"Tajik","ta":"Tamil","te":"Telugu","th":"Thai","tr":"Turkish","uk":"Ukrainian","ur":"Urdu","uz":"Uzbek","vi":"Vietnamese","cy":"Welsh","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","zu":"Zulu"}';
217
  $gt_lang_array = get_object_vars(json_decode($gt_lang_array_json));
 
 
 
218
 
219
  if(!empty($language_codes))
220
  $gt_lang_codes_json = json_encode(explode(',', $language_codes));
@@ -226,13 +177,11 @@ class GTranslate extends WP_Widget {
226
  else
227
  $gt_lang_codes2_json = '[]';
228
 
229
-
230
- #unset($data['widget_code']);
231
- #echo '<pre>', print_r($data, true), '</pre>';
232
-
233
  $script = <<<EOT
234
 
235
- var gt_lang_array = $gt_lang_array_json;
 
 
236
  var languages = [], language_codes = $gt_lang_codes_json, language_codes2 = $gt_lang_codes2_json;
237
 
238
  //for(var key in gt_lang_array)
@@ -250,7 +199,7 @@ function RefreshDoWidgetCode() {
250
  var new_line = "\\n";
251
  var widget_preview = '<!-- GTranslate: https://gtranslate.io/ -->'+new_line;
252
  var widget_code = '';
253
- var translation_method = 'onfly'; //jQuery('#translation_method').val();
254
  var widget_look = jQuery('#widget_look').val();
255
  var default_language = jQuery('#default_language').val();
256
  var flag_size = jQuery('#flag_size').val();
@@ -259,6 +208,7 @@ function RefreshDoWidgetCode() {
259
  var new_window = jQuery('#new_window:checked').length > 0 ? true : false;
260
  var show_in_menu = jQuery('#show_in_menu').val();
261
  var floating_language_selector = jQuery('#floating_language_selector').val();
 
262
  var analytics = jQuery('#analytics:checked').length > 0 ? true : false;
263
 
264
  if(pro_version || enterprise_version) {
@@ -303,13 +253,22 @@ function RefreshDoWidgetCode() {
303
  jQuery('#flag_size_option').show();
304
  }
305
 
 
 
 
 
 
 
 
 
 
 
306
  if(pro_version && enterprise_version)
307
  pro_version = false;
308
 
309
  if(translation_method == 'on_fly' || translation_method == 'redirect' || translation_method == 'onfly') {
310
  // Adding flags
311
- if(widget_look == 'flags' || widget_look == 'flags_dropdown' /* jQuery('#show_flags:checked').length */) {
312
- //console.log('adding flags');
313
  jQuery.each(language_codes, function(i, val) {
314
  lang = language_codes[i];
315
  if(jQuery('#fincl_langs'+lang+':checked').length) {
@@ -336,9 +295,8 @@ function RefreshDoWidgetCode() {
336
  }
337
 
338
  // Adding dropdown
339
- if(widget_look == 'dropdown' || widget_look == 'flags_dropdown' /* jQuery('#show_dropdown:checked').length */) {
340
- //console.log('adding dropdown');
341
- if(/* jQuery('#show_flags:checked').length*/ (widget_look == 'flags' || widget_look == 'flags_dropdown') && jQuery('#add_new_line:checked').length)
342
  widget_preview += '<br />';
343
  else
344
  widget_preview += ' ';
@@ -356,8 +314,6 @@ function RefreshDoWidgetCode() {
356
 
357
  // Adding onfly html and css
358
  if(translation_method == 'onfly') {
359
- //console.log('adding onfly html, css and javascript');
360
-
361
  widget_code += '<style type="text/css">'+new_line;
362
  widget_code += '<!--'+new_line;
363
  widget_code += "#goog-gt-tt {display:none !important;}"+new_line;
@@ -372,8 +328,6 @@ function RefreshDoWidgetCode() {
372
  widget_code += 'function googleTranslateElementInit2() {new google.translate.TranslateElement({pageLanguage: \'';
373
  widget_code += default_language;
374
  widget_code += '\',autoDisplay: false';
375
- //if(analytics)
376
- // widget_code += ",gaTrack: (typeof ga!='undefined'),gaId: (typeof ga!='undefined' ? ga.getAll()[0].get('trackingId') : '')";
377
  widget_code += "}, 'google_translate_element2');}"+new_line;
378
  widget_code += '<\/script>';
379
  widget_code += '<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit2"><\/script>'+new_line;
@@ -386,7 +340,6 @@ function RefreshDoWidgetCode() {
386
  widget_preview += '<style type="text/css">'+new_line;
387
  widget_preview += '.gglobe {background-image:url($wp_plugin_url/gtglobe.svg);opacity:0.8;border-radius:50%;height:40px;width:40px;cursor:pointer;display:block;-moz-transition: all 0.3s;-webkit-transition: all 0.3s;transition: all 0.3s;}'+new_line;
388
  widget_preview += '.gglobe:hover {opacity:1;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);transform: scale(1.2);}'+new_line;
389
- //widget_preview += '.gsatelites {position:relative;}'+new_line;
390
  widget_preview += '.gsatelite {background-color:#777777;opacity:0.95;border-radius:50%;height:24px;width:24px;cursor:pointer;position:absolute;z-index:100000;display:none;-moz-transition: all 0.3s;-webkit-transition: all 0.3s;transition: all 0.3s;}'+new_line;
391
  widget_preview += '.gsatelite:hover {opacity:1;-moz-transform: scale(1.3);-webkit-transform: scale(1.3);transform: scale(1.3);}'+new_line;
392
  widget_preview += '</style>'+new_line+new_line;
@@ -538,8 +491,6 @@ function hideGSatelites($) {
538
  }
539
 
540
  // Adding javascript
541
- //console.log('adding doGTranslate javascript');
542
-
543
  widget_code += new_line+new_line;
544
  widget_code += '<script type="text/javascript">'+new_line;
545
  if(pro_version && translation_method == 'redirect' && new_window) {
@@ -599,12 +550,10 @@ jQuery('#url_translation').attr('checked', '$url_translation'.length > 0);
599
  jQuery('#new_window').attr('checked', '$new_window'.length > 0);
600
  jQuery('#show_in_menu').val('$show_in_menu');
601
  jQuery('#floating_language_selector').val('$floating_language_selector');
 
602
  jQuery('#analytics').attr('checked', '$analytics'.length > 0);
603
- jQuery('#load_jquery').attr('checked', '$load_jquery'.length > 0);
604
  jQuery('#add_new_line').attr('checked', '$add_new_line'.length > 0);
605
-
606
  jQuery('#default_language').val('$default_language');
607
- //jQuery('#translation_method').val('$translation_method');
608
  jQuery('#widget_look').val('$widget_look');
609
  jQuery('#flag_size').val('$flag_size');
610
 
@@ -689,7 +638,7 @@ foreach($alt_flags as $flag)
689
  $script .= "jQuery('#alt_$flag').attr('checked', true);\n";
690
  ?>
691
 
692
- <form id="gtranslate" name="form1" method="post" action="<?php echo admin_url('options-general.php?page=gtranslate_options'); ?>">
693
 
694
  <div class="postbox-container og_left_col">
695
 
@@ -698,16 +647,6 @@ foreach($alt_flags as $flag)
698
  <h3 id="settings"><?php _e('Widget options', 'gtranslate'); ?></h3>
699
  <div class="inside">
700
  <table style="width:100%;" cellpadding="4">
701
- <!--tr>
702
- <td class="option_name">Translation method:</td>
703
- <td>
704
- <select id="translation_method" name="translation_method" onChange="RefreshDoWidgetCode()">
705
- <option value="google_default">Google Default</option>
706
- <option value="redirect">Redirect</option>
707
- <option value="onfly">On Fly</option>
708
- </select>
709
- </td>
710
- </tr-->
711
  <tr>
712
  <td class="option_name"><?php _e('Widget look', 'gtranslate'); ?>:</td>
713
  <td>
@@ -861,7 +800,6 @@ foreach($alt_flags as $flag)
861
  <option value="<?php echo $location; ?>"><?php echo $description; ?></option>
862
  <?php endforeach; ?>
863
  </select>
864
- <!--input id="show_in_primary_menu" name="show_in_primary_menu" value="1" type="checkbox" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()"/-->
865
  </td>
866
  </tr>
867
  <tr id="floating_option">
@@ -876,11 +814,10 @@ foreach($alt_flags as $flag)
876
  </select>
877
  </td>
878
  </tr>
879
-
880
- <!--tr>
881
- <td class="option_name">Show flags:</td>
882
- <td><input id="show_flags" name="show_flags" value="1" type="checkbox" checked="checked" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()"/></td>
883
- </tr-->
884
  <tr id="flag_size_option">
885
  <td class="option_name"><?php _e('Flag size', 'gtranslate'); ?>:</td>
886
  <td>
@@ -900,7 +837,7 @@ foreach($alt_flags as $flag)
900
  <ul style="list-style-type:none;width:25%;float:left;" class="connectedSortable1">
901
  <?php for($j = $i * 15; $j < 15 * ($i+1); $j++): ?>
902
  <?php if(isset($gt_lang_codes[$j])): ?>
903
- <li><input type="checkbox" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()" id="fincl_langs<?php echo $gt_lang_codes[$j]; ?>" name="fincl_langs[]" value="<?php echo $gt_lang_codes[$j]; ?>"><label for="fincl_langs<?php echo $gt_lang_codes[$j]; ?>"><?php _e($gt_lang_array[$gt_lang_codes[$j]], 'gtranslate'); ?></label></li>
904
  <?php endif; ?>
905
  <?php endfor; ?>
906
  </ul>
@@ -919,10 +856,6 @@ foreach($alt_flags as $flag)
919
  <td class="option_name"><?php _e('Line break after flags', 'gtranslate'); ?>:</td>
920
  <td><input id="add_new_line" name="add_new_line" value="1" type="checkbox" checked="checked" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()"/></td>
921
  </tr>
922
- <!--tr>
923
- <td class="option_name">Show dropdown:</td>
924
- <td><input id="show_dropdown" name="show_dropdown" value="1" type="checkbox" checked="checked" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()"/></td>
925
- </tr-->
926
  <tr id="dropdown_languages_option" style="display:none;">
927
  <td class="option_name" colspan="2"><?php _e('Languages', 'gtranslate'); ?>: <a onclick="jQuery('.connectedSortable2 input').attr('checked', true);RefreshDoWidgetCode()" style="cursor:pointer;text-decoration:underline;"><?php _e('Check All', 'gtranslate'); ?></a> | <a onclick="jQuery('.connectedSortable2 input').attr('checked', false);RefreshDoWidgetCode()" style="cursor:pointer;text-decoration:underline;"><?php _e('Uncheck All', 'gtranslate'); ?></a><br /><br />
928
  <div>
@@ -931,7 +864,7 @@ foreach($alt_flags as $flag)
931
  <ul style="list-style-type:none;width:25%;float:left;" class="connectedSortable2">
932
  <?php for($j = $i * 26; $j < 26 * ($i+1); $j++): ?>
933
  <?php if(isset($gt_lang_codes[$j])): ?>
934
- <li><input type="checkbox" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()" id="incl_langs<?php echo $gt_lang_codes[$j]; ?>" name="incl_langs[]" value="<?php echo $gt_lang_codes[$j]; ?>"><label for="incl_langs<?php echo $gt_lang_codes[$j]; ?>"><?php _e($gt_lang_array[$gt_lang_codes[$j]], 'gtranslate'); ?></label></li>
935
  <?php endif; ?>
936
  <?php endfor; ?>
937
  </ul>
@@ -1071,8 +1004,8 @@ foreach($alt_flags as $flag)
1071
  $data['new_window'] = isset($_POST['new_window']) ? intval($_POST['new_window']) : '';
1072
  $data['show_in_menu'] = isset($_POST['show_in_menu']) ? sanitize_text_field($_POST['show_in_menu']) : '';
1073
  $data['floating_language_selector'] = isset($_POST['floating_language_selector']) ? sanitize_text_field($_POST['floating_language_selector']) : 'no';
 
1074
  $data['analytics'] = isset($_POST['analytics']) ? intval($_POST['analytics']) : '';
1075
- $data['load_jquery'] = isset($_POST['load_jquery']) ? intval($_POST['load_jquery']) : '';
1076
  $data['add_new_line'] = isset($_POST['add_new_line']) ? intval($_POST['add_new_line']) : '';
1077
  $data['default_language'] = isset($_POST['default_language']) ? sanitize_text_field($_POST['default_language']) : 'en';
1078
  $data['translation_method'] = 'onfly';
@@ -1085,7 +1018,7 @@ foreach($alt_flags as $flag)
1085
  $data['language_codes'] = (isset($_POST['language_codes']) and !empty($_POST['language_codes'])) ? sanitize_text_field($_POST['language_codes']) : 'af,sq,ar,hy,az,eu,be,bg,ca,zh-CN,zh-TW,hr,cs,da,nl,en,et,tl,fi,fr,gl,ka,de,el,ht,iw,hi,hu,is,id,ga,it,ja,ko,lv,lt,mk,ms,mt,no,fa,pl,pt,ro,ru,sr,sk,sl,es,sw,sv,th,tr,uk,ur,vi,cy,yi';
1086
  $data['language_codes2'] = (isset($_POST['language_codes2']) and !empty($_POST['language_codes2'])) ? sanitize_text_field($_POST['language_codes2']) : 'af,sq,am,ar,hy,az,eu,be,bn,bs,bg,ca,ceb,ny,zh-CN,zh-TW,co,hr,cs,da,nl,en,eo,et,tl,fi,fr,fy,gl,ka,de,el,gu,ht,ha,haw,iw,hi,hmn,hu,is,ig,id,ga,it,ja,jw,kn,kk,km,ko,ku,ky,lo,la,lv,lt,lb,mk,mg,ms,ml,mt,mi,mr,mn,my,ne,no,ps,fa,pl,pt,pa,ro,ru,sm,gd,sr,st,sn,sd,si,sk,sl,so,es,su,sw,sv,tg,ta,te,th,tr,uk,ur,uz,vi,cy,xh,yi,yo,zu';
1087
 
1088
- echo '<p style="color:red;">' . __('Changes Saved') . '</p>';
1089
  update_option('GTranslate', $data);
1090
 
1091
  if($data['pro_version']) { // check if rewrite rules are in place
@@ -1099,9 +1032,15 @@ foreach($alt_flags as $flag)
1099
  $htaccess = $rewrite_rules . "\r\n\r\n" . $htaccess;
1100
  if(!empty($htaccess)) { // going to update .htaccess
1101
  file_put_contents($htaccess_file, $htaccess);
1102
- echo '<p style="color:red;">' . __('.htaccess file updated') . '</p>';
1103
  }
1104
  }
 
 
 
 
 
 
1105
  }
1106
 
1107
  // update main_lang in config.php
@@ -1110,6 +1049,8 @@ foreach($alt_flags as $flag)
1110
  $config = file_get_contents($config_file);
1111
  $config = preg_replace('/\$main_lang = \'[a-z-]{2,5}\'/i', '$main_lang = \''.$data['default_language'].'\'', $config);
1112
  file_put_contents($config_file, $config);
 
 
1113
  }
1114
 
1115
  } else { // todo: remove rewrite rules
@@ -1124,14 +1065,19 @@ foreach($alt_flags as $flag)
1124
  $data['new_window'] = isset($data['new_window']) ? $data['new_window'] : '';
1125
  $data['show_in_menu'] = isset($data['show_in_menu']) ? $data['show_in_menu'] : ((isset($data['show_in_primary_menu']) and $data['show_in_primary_menu'] == 1) ? 'primary' : '');
1126
  $data['floating_language_selector'] = isset($data['floating_language_selector']) ? $data['floating_language_selector'] : 'no';
 
1127
  $data['analytics'] = isset($data['analytics']) ? $data['analytics'] : '';
1128
- $data['load_jquery'] = isset($data['load_jquery']) ? $data['load_jquery'] : '1';
1129
  $data['add_new_line'] = isset($data['add_new_line']) ? $data['add_new_line'] : '1';
1130
- //$data['show_dropdown'] = isset($data['show_dropdown']) ? $data['show_dropdown'] : '1';
1131
- //$data['show_flags'] = isset($data['show_flags']) ? $data['show_flags'] : '1';
1132
- $data['default_language'] = isset($data['default_language']) ? $data['default_language'] : 'en';
 
 
 
 
1133
  $data['translation_method'] = isset($data['translation_method']) ? $data['translation_method'] : 'onfly';
1134
  if($data['translation_method'] == 'on_fly') $data['translation_method'] = 'redirect';
 
1135
  $data['widget_look'] = isset($data['widget_look']) ? $data['widget_look'] : 'flags_dropdown';
1136
  $data['flag_size'] = isset($data['flag_size']) ? $data['flag_size'] : '16';
1137
  $data['widget_code'] = isset($data['widget_code']) ? $data['widget_code'] : '';
@@ -1431,3 +1377,55 @@ class GTranslate_Notices {
1431
  }
1432
 
1433
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
3
  Plugin Name: GTranslate
4
  Plugin URI: https://gtranslate.io/?xyz=998
5
  Description: Makes your website <strong>multilingual</strong> and available to the world using Google Translate. For support visit <a href="https://wordpress.org/support/plugin/gtranslate">GTranslate Support</a>.
6
+ Version: 2.8.5
7
  Author: Edvard Ananyan
8
  Author URI: https://gtranslate.io
9
  Text Domain: gtranslate
10
 
11
  */
12
 
13
+ /* Copyright 2010 - 2017 Edvard Ananyan (email : edo888@gmail.com)
14
 
15
  This program is free software; you can redistribute it and/or modify
16
  it under the terms of the GNU General Public License as published by
37
  add_shortcode('GTranslate', array('GTranslate', 'get_widget_code'));
38
  add_shortcode('gtranslate', array('GTranslate', 'get_widget_code'));
39
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
40
  class GTranslate extends WP_Widget {
41
  public static function activate() {
42
  $data = array(
120
  echo $args['after_widget'];
121
  }
122
 
123
+ public static function get_widget_code($atts) {
124
  $data = get_option('GTranslate');
125
  GTranslate::load_defaults($data);
126
 
163
 
164
  $gt_lang_array_json = '{"af":"Afrikaans","sq":"Albanian","am":"Amharic","ar":"Arabic","hy":"Armenian","az":"Azerbaijani","eu":"Basque","be":"Belarusian","bn":"Bengali","bs":"Bosnian","bg":"Bulgarian","ca":"Catalan","ceb":"Cebuano","ny":"Chichewa","zh-CN":"Chinese (Simplified)","zh-TW":"Chinese (Traditional)","co":"Corsican","hr":"Croatian","cs":"Czech","da":"Danish","nl":"Dutch","en":"English","eo":"Esperanto","et":"Estonian","tl":"Filipino","fi":"Finnish","fr":"French","fy":"Frisian","gl":"Galician","ka":"Georgian","de":"German","el":"Greek","gu":"Gujarati","ht":"Haitian Creole","ha":"Hausa","haw":"Hawaiian","iw":"Hebrew","hi":"Hindi","hmn":"Hmong","hu":"Hungarian","is":"Icelandic","ig":"Igbo","id":"Indonesian","ga":"Irish","it":"Italian","ja":"Japanese","jw":"Javanese","kn":"Kannada","kk":"Kazakh","km":"Khmer","ko":"Korean","ku":"Kurdish (Kurmanji)","ky":"Kyrgyz","lo":"Lao","la":"Latin","lv":"Latvian","lt":"Lithuanian","lb":"Luxembourgish","mk":"Macedonian","mg":"Malagasy","ms":"Malay","ml":"Malayalam","mt":"Maltese","mi":"Maori","mr":"Marathi","mn":"Mongolian","my":"Myanmar (Burmese)","ne":"Nepali","no":"Norwegian","ps":"Pashto","fa":"Persian","pl":"Polish","pt":"Portuguese","pa":"Punjabi","ro":"Romanian","ru":"Russian","sm":"Samoan","gd":"Scottish Gaelic","sr":"Serbian","st":"Sesotho","sn":"Shona","sd":"Sindhi","si":"Sinhala","sk":"Slovak","sl":"Slovenian","so":"Somali","es":"Spanish","su":"Sudanese","sw":"Swahili","sv":"Swedish","tg":"Tajik","ta":"Tamil","te":"Telugu","th":"Thai","tr":"Turkish","uk":"Ukrainian","ur":"Urdu","uz":"Uzbek","vi":"Vietnamese","cy":"Welsh","xh":"Xhosa","yi":"Yiddish","yo":"Yoruba","zu":"Zulu"}';
165
  $gt_lang_array = get_object_vars(json_decode($gt_lang_array_json));
166
+ include dirname(__FILE__) . '/native_names_map.php'; // defines $native_names_map array
167
+ //echo '<pre>' . print_r($native_names_map, true) . '</pre>';
168
+ $gt_lang_array_native_json = json_encode($native_names_map);
169
 
170
  if(!empty($language_codes))
171
  $gt_lang_codes_json = json_encode(explode(',', $language_codes));
177
  else
178
  $gt_lang_codes2_json = '[]';
179
 
 
 
 
 
180
  $script = <<<EOT
181
 
182
+ var gt_lang_array_english = $gt_lang_array_json;
183
+ var gt_lang_array_native = $gt_lang_array_native_json;
184
+ var gt_lang_array = gt_lang_array_english;
185
  var languages = [], language_codes = $gt_lang_codes_json, language_codes2 = $gt_lang_codes2_json;
186
 
187
  //for(var key in gt_lang_array)
199
  var new_line = "\\n";
200
  var widget_preview = '<!-- GTranslate: https://gtranslate.io/ -->'+new_line;
201
  var widget_code = '';
202
+ var translation_method = 'onfly';
203
  var widget_look = jQuery('#widget_look').val();
204
  var default_language = jQuery('#default_language').val();
205
  var flag_size = jQuery('#flag_size').val();
208
  var new_window = jQuery('#new_window:checked').length > 0 ? true : false;
209
  var show_in_menu = jQuery('#show_in_menu').val();
210
  var floating_language_selector = jQuery('#floating_language_selector').val();
211
+ var native_language_names = jQuery('#native_language_names:checked').length > 0 ? true : false;
212
  var analytics = jQuery('#analytics:checked').length > 0 ? true : false;
213
 
214
  if(pro_version || enterprise_version) {
253
  jQuery('#flag_size_option').show();
254
  }
255
 
256
+ if(native_language_names) {
257
+ gt_lang_array = gt_lang_array_native;
258
+ jQuery('.en_names').hide();
259
+ jQuery('.native_names').show();
260
+ } else {
261
+ gt_lang_array = gt_lang_array_english;
262
+ jQuery('.native_names').hide();
263
+ jQuery('.en_names').show();
264
+ }
265
+
266
  if(pro_version && enterprise_version)
267
  pro_version = false;
268
 
269
  if(translation_method == 'on_fly' || translation_method == 'redirect' || translation_method == 'onfly') {
270
  // Adding flags
271
+ if(widget_look == 'flags' || widget_look == 'flags_dropdown') {
 
272
  jQuery.each(language_codes, function(i, val) {
273
  lang = language_codes[i];
274
  if(jQuery('#fincl_langs'+lang+':checked').length) {
295
  }
296
 
297
  // Adding dropdown
298
+ if(widget_look == 'dropdown' || widget_look == 'flags_dropdown') {
299
+ if((widget_look == 'flags' || widget_look == 'flags_dropdown') && jQuery('#add_new_line:checked').length)
 
300
  widget_preview += '<br />';
301
  else
302
  widget_preview += ' ';
314
 
315
  // Adding onfly html and css
316
  if(translation_method == 'onfly') {
 
 
317
  widget_code += '<style type="text/css">'+new_line;
318
  widget_code += '<!--'+new_line;
319
  widget_code += "#goog-gt-tt {display:none !important;}"+new_line;
328
  widget_code += 'function googleTranslateElementInit2() {new google.translate.TranslateElement({pageLanguage: \'';
329
  widget_code += default_language;
330
  widget_code += '\',autoDisplay: false';
 
 
331
  widget_code += "}, 'google_translate_element2');}"+new_line;
332
  widget_code += '<\/script>';
333
  widget_code += '<script type="text/javascript" src="//translate.google.com/translate_a/element.js?cb=googleTranslateElementInit2"><\/script>'+new_line;
340
  widget_preview += '<style type="text/css">'+new_line;
341
  widget_preview += '.gglobe {background-image:url($wp_plugin_url/gtglobe.svg);opacity:0.8;border-radius:50%;height:40px;width:40px;cursor:pointer;display:block;-moz-transition: all 0.3s;-webkit-transition: all 0.3s;transition: all 0.3s;}'+new_line;
342
  widget_preview += '.gglobe:hover {opacity:1;-moz-transform: scale(1.2);-webkit-transform: scale(1.2);transform: scale(1.2);}'+new_line;
 
343
  widget_preview += '.gsatelite {background-color:#777777;opacity:0.95;border-radius:50%;height:24px;width:24px;cursor:pointer;position:absolute;z-index:100000;display:none;-moz-transition: all 0.3s;-webkit-transition: all 0.3s;transition: all 0.3s;}'+new_line;
344
  widget_preview += '.gsatelite:hover {opacity:1;-moz-transform: scale(1.3);-webkit-transform: scale(1.3);transform: scale(1.3);}'+new_line;
345
  widget_preview += '</style>'+new_line+new_line;
491
  }
492
 
493
  // Adding javascript
 
 
494
  widget_code += new_line+new_line;
495
  widget_code += '<script type="text/javascript">'+new_line;
496
  if(pro_version && translation_method == 'redirect' && new_window) {
550
  jQuery('#new_window').attr('checked', '$new_window'.length > 0);
551
  jQuery('#show_in_menu').val('$show_in_menu');
552
  jQuery('#floating_language_selector').val('$floating_language_selector');
553
+ jQuery('#native_language_names').attr('checked', '$native_language_names'.length > 0);
554
  jQuery('#analytics').attr('checked', '$analytics'.length > 0);
 
555
  jQuery('#add_new_line').attr('checked', '$add_new_line'.length > 0);
 
556
  jQuery('#default_language').val('$default_language');
 
557
  jQuery('#widget_look').val('$widget_look');
558
  jQuery('#flag_size').val('$flag_size');
559
 
638
  $script .= "jQuery('#alt_$flag').attr('checked', true);\n";
639
  ?>
640
 
641
+ <form id="gtranslate" name="form1" method="post" class="notranslate" action="<?php echo admin_url('options-general.php?page=gtranslate_options'); ?>">
642
 
643
  <div class="postbox-container og_left_col">
644
 
647
  <h3 id="settings"><?php _e('Widget options', 'gtranslate'); ?></h3>
648
  <div class="inside">
649
  <table style="width:100%;" cellpadding="4">
 
 
 
 
 
 
 
 
 
 
650
  <tr>
651
  <td class="option_name"><?php _e('Widget look', 'gtranslate'); ?>:</td>
652
  <td>
800
  <option value="<?php echo $location; ?>"><?php echo $description; ?></option>
801
  <?php endforeach; ?>
802
  </select>
 
803
  </td>
804
  </tr>
805
  <tr id="floating_option">
814
  </select>
815
  </td>
816
  </tr>
817
+ <td class="option_name"><?php _e('Show native language names', 'gtranslate'); ?>:</td>
818
+ <td><input id="native_language_names" name="native_language_names" value="1" type="checkbox" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()"/></td>
819
+ <tr>
820
+ </tr>
 
821
  <tr id="flag_size_option">
822
  <td class="option_name"><?php _e('Flag size', 'gtranslate'); ?>:</td>
823
  <td>
837
  <ul style="list-style-type:none;width:25%;float:left;" class="connectedSortable1">
838
  <?php for($j = $i * 15; $j < 15 * ($i+1); $j++): ?>
839
  <?php if(isset($gt_lang_codes[$j])): ?>
840
+ <li><input type="checkbox" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()" id="fincl_langs<?php echo $gt_lang_codes[$j]; ?>" name="fincl_langs[]" value="<?php echo $gt_lang_codes[$j]; ?>"><label for="fincl_langs<?php echo $gt_lang_codes[$j]; ?>"><span class="en_names"><?php _e($gt_lang_array[$gt_lang_codes[$j]], 'gtranslate'); ?></span><span class="native_names" style="display:none;"><?php echo $native_names_map[$gt_lang_codes[$j]]; ?></span></label></li>
841
  <?php endif; ?>
842
  <?php endfor; ?>
843
  </ul>
856
  <td class="option_name"><?php _e('Line break after flags', 'gtranslate'); ?>:</td>
857
  <td><input id="add_new_line" name="add_new_line" value="1" type="checkbox" checked="checked" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()"/></td>
858
  </tr>
 
 
 
 
859
  <tr id="dropdown_languages_option" style="display:none;">
860
  <td class="option_name" colspan="2"><?php _e('Languages', 'gtranslate'); ?>: <a onclick="jQuery('.connectedSortable2 input').attr('checked', true);RefreshDoWidgetCode()" style="cursor:pointer;text-decoration:underline;"><?php _e('Check All', 'gtranslate'); ?></a> | <a onclick="jQuery('.connectedSortable2 input').attr('checked', false);RefreshDoWidgetCode()" style="cursor:pointer;text-decoration:underline;"><?php _e('Uncheck All', 'gtranslate'); ?></a><br /><br />
861
  <div>
864
  <ul style="list-style-type:none;width:25%;float:left;" class="connectedSortable2">
865
  <?php for($j = $i * 26; $j < 26 * ($i+1); $j++): ?>
866
  <?php if(isset($gt_lang_codes[$j])): ?>
867
+ <li><input type="checkbox" onclick="RefreshDoWidgetCode()" onchange="RefreshDoWidgetCode()" id="incl_langs<?php echo $gt_lang_codes[$j]; ?>" name="incl_langs[]" value="<?php echo $gt_lang_codes[$j]; ?>"><label for="incl_langs<?php echo $gt_lang_codes[$j]; ?>"><span class="en_names"><?php _e($gt_lang_array[$gt_lang_codes[$j]], 'gtranslate'); ?></span><span class="native_names" style="display:none;"><?php echo $native_names_map[$gt_lang_codes[$j]]; ?></span></label></li>
868
  <?php endif; ?>
869
  <?php endfor; ?>
870
  </ul>
1004
  $data['new_window'] = isset($_POST['new_window']) ? intval($_POST['new_window']) : '';
1005
  $data['show_in_menu'] = isset($_POST['show_in_menu']) ? sanitize_text_field($_POST['show_in_menu']) : '';
1006
  $data['floating_language_selector'] = isset($_POST['floating_language_selector']) ? sanitize_text_field($_POST['floating_language_selector']) : 'no';
1007
+ $data['native_language_names'] = isset($_POST['native_language_names']) ? intval($_POST['native_language_names']) : '';
1008
  $data['analytics'] = isset($_POST['analytics']) ? intval($_POST['analytics']) : '';
 
1009
  $data['add_new_line'] = isset($_POST['add_new_line']) ? intval($_POST['add_new_line']) : '';
1010
  $data['default_language'] = isset($_POST['default_language']) ? sanitize_text_field($_POST['default_language']) : 'en';
1011
  $data['translation_method'] = 'onfly';
1018
  $data['language_codes'] = (isset($_POST['language_codes']) and !empty($_POST['language_codes'])) ? sanitize_text_field($_POST['language_codes']) : 'af,sq,ar,hy,az,eu,be,bg,ca,zh-CN,zh-TW,hr,cs,da,nl,en,et,tl,fi,fr,gl,ka,de,el,ht,iw,hi,hu,is,id,ga,it,ja,ko,lv,lt,mk,ms,mt,no,fa,pl,pt,ro,ru,sr,sk,sl,es,sw,sv,th,tr,uk,ur,vi,cy,yi';
1019
  $data['language_codes2'] = (isset($_POST['language_codes2']) and !empty($_POST['language_codes2'])) ? sanitize_text_field($_POST['language_codes2']) : 'af,sq,am,ar,hy,az,eu,be,bn,bs,bg,ca,ceb,ny,zh-CN,zh-TW,co,hr,cs,da,nl,en,eo,et,tl,fi,fr,fy,gl,ka,de,el,gu,ht,ha,haw,iw,hi,hmn,hu,is,ig,id,ga,it,ja,jw,kn,kk,km,ko,ku,ky,lo,la,lv,lt,lb,mk,mg,ms,ml,mt,mi,mr,mn,my,ne,no,ps,fa,pl,pt,pa,ro,ru,sm,gd,sr,st,sn,sd,si,sk,sl,so,es,su,sw,sv,tg,ta,te,th,tr,uk,ur,uz,vi,cy,xh,yi,yo,zu';
1020
 
1021
+ echo '<p style="color:red;">' . __('Changes Saved', 'gtranslate') . '</p>';
1022
  update_option('GTranslate', $data);
1023
 
1024
  if($data['pro_version']) { // check if rewrite rules are in place
1032
  $htaccess = $rewrite_rules . "\r\n\r\n" . $htaccess;
1033
  if(!empty($htaccess)) { // going to update .htaccess
1034
  file_put_contents($htaccess_file, $htaccess);
1035
+ echo '<p style="color:red;">' . __('.htaccess file updated', 'gtranslate') . '</p>';
1036
  }
1037
  }
1038
+ } else {
1039
+ $rewrite_rules = file_get_contents(dirname(__FILE__) . '/url_addon/rewrite.txt');
1040
+ $rewrite_rules = str_replace('GTRANSLATE_PLUGIN_PATH', plugins_url() . '/gtranslate', $rewrite_rules);
1041
+
1042
+ echo '<p style="color:red;">' . __('Please add the following rules to the top of your .htaccess file', 'gtranslate') . '</p>';
1043
+ echo '<pre style="background-color:#eaeaea;">' . $rewrite_rules . '</pre>';
1044
  }
1045
 
1046
  // update main_lang in config.php
1049
  $config = file_get_contents($config_file);
1050
  $config = preg_replace('/\$main_lang = \'[a-z-]{2,5}\'/i', '$main_lang = \''.$data['default_language'].'\'', $config);
1051
  file_put_contents($config_file, $config);
1052
+ } else {
1053
+ echo '<p style="color:red;">' . __('Cannot update gtranslate/url_addon/config.php file. Make sure to update it manually and set correct $main_lang.', 'gtranslate') . '</p>';
1054
  }
1055
 
1056
  } else { // todo: remove rewrite rules
1065
  $data['new_window'] = isset($data['new_window']) ? $data['new_window'] : '';
1066
  $data['show_in_menu'] = isset($data['show_in_menu']) ? $data['show_in_menu'] : ((isset($data['show_in_primary_menu']) and $data['show_in_primary_menu'] == 1) ? 'primary' : '');
1067
  $data['floating_language_selector'] = isset($data['floating_language_selector']) ? $data['floating_language_selector'] : 'no';
1068
+ $data['native_language_names'] = isset($data['native_language_names']) ? $data['native_language_names'] : '';
1069
  $data['analytics'] = isset($data['analytics']) ? $data['analytics'] : '';
 
1070
  $data['add_new_line'] = isset($data['add_new_line']) ? $data['add_new_line'] : '1';
1071
+
1072
+ if(!isset($data['default_language'])) {
1073
+ $locale_map = array('af'=>'af','am'=>'am','arq'=>'ar','ar'=>'ar','ary'=>'ar','az'=>'az','az_TR'=>'az','azb'=>'az','bel'=>'be','bg_BG'=>'bg','bn_BD'=>'bn','bs_BA'=>'bs','ca'=>'ca','bal'=>'ca','ceb'=>'ceb','co'=>'co','cs_CZ'=>'cs','cy'=>'cy','da_DK'=>'da','de_DE'=>'de','de_CH'=>'de','gsw'=>'de','el'=>'el','en_AU'=>'en','en_CA'=>'en','en_NZ'=>'en','en_ZA'=>'en','en_GB'=>'en','eo'=>'eo','es_AR'=>'es','es_CL'=>'es','es_CO'=>'es','es_GT'=>'es','es_MX'=>'es','es_PE'=>'es','es_PR'=>'es','es_ES'=>'es','es_VE'=>'es','et'=>'et','eu'=>'eu','fa_IR'=>'fa','fa_AF'=>'fa','fi'=>'fi','fr_BE'=>'fr','fr_CA'=>'fr','fr_FR'=>'fr','fy'=>'fy','ga'=>'ga','gd'=>'gd','gl_ES'=>'gl','gu'=>'gu','hau'=>'ha','haw_US'=>'haw','hi_IN'=>'hi','hr'=>'hr','hat'=>'ht','hu_HU'=>'hu','hy'=>'hy','id_ID'=>'id','is_IS'=>'is','it_IT'=>'it','he_IL'=>'iw','ja'=>'ja','jv_ID'=>'jw','ka_GE'=>'ka','kk'=>'kk','km'=>'km','kn'=>'kn','ko_KR'=>'ko','ckb'=>'ku','kir'=>'ky','lb_LU'=>'lb','lo'=>'lo','lt_LT'=>'lt','lv'=>'lv','mg_MG'=>'mg','mri'=>'mi','mk_MK'=>'mk','ml_IN'=>'ml','mn'=>'mn','mr'=>'mr','ms_MY'=>'ms','my_MM'=>'my','ne_NP'=>'ne','nl_NL'=>'nl','nl_BE'=>'nl','nb_NO'=>'no','nn_NO'=>'no','pa_IN'=>'pa','pl_PL'=>'pl','ps'=>'ps','pt_BR'=>'pt','pt_PT'=>'pt','ro_RO'=>'ro','ru_RU'=>'ru','snd'=>'sd','si_LK'=>'si','sk_SK'=>'sk','sl_SI'=>'sl','so_SO'=>'so','sq'=>'sq','sr_RS'=>'sr','su_ID'=>'su','sv_SE'=>'sv','sw'=>'sw','ta_IN'=>'ta','ta_LK'=>'ta','te'=>'te','tg'=>'tg','th'=>'th','tr_TR'=>'tr','uk'=>'uk','ur'=>'ur','uz_UZ'=>'uz','vi'=>'vi','xho'=>'xh','yor'=>'yo','zh_CN'=>'zh-CN','zh_HK'=>'zh-CN','zh_TW'=>'zh-TW');
1074
+ $locale = get_locale();
1075
+ $data['default_language'] = isset($locale_map[$locale]) ? $locale_map[$locale] : 'en';
1076
+ }
1077
+
1078
  $data['translation_method'] = isset($data['translation_method']) ? $data['translation_method'] : 'onfly';
1079
  if($data['translation_method'] == 'on_fly') $data['translation_method'] = 'redirect';
1080
+
1081
  $data['widget_look'] = isset($data['widget_look']) ? $data['widget_look'] : 'flags_dropdown';
1082
  $data['flag_size'] = isset($data['flag_size']) ? $data['flag_size'] : '16';
1083
  $data['widget_code'] = isset($data['widget_code']) ? $data['widget_code'] : '';
1377
  }
1378
 
1379
  }
1380
+
1381
+ if(is_admin()) {
1382
+ global $pagenow;
1383
+
1384
+ if(!defined('DOING_AJAX') or !DOING_AJAX)
1385
+ new GTranslate_Notices();
1386
+ }
1387
+
1388
+ $data = get_option('GTranslate');
1389
+ GTranslate::load_defaults($data);
1390
+
1391
+ if(!empty($data['show_in_menu'])) {
1392
+ add_filter('wp_nav_menu_items', 'gtranslate_menu_item', 10, 2);
1393
+ function gtranslate_menu_item($items, $args) {
1394
+ $data = get_option('GTranslate');
1395
+ GTranslate::load_defaults($data);
1396
+
1397
+ if($args->theme_location == $data['show_in_menu'])
1398
+ $items .= '<li style="position:relative;" class="menu-item menu-item-gtranslate"><div style="position:absolute;">'.GTranslate::get_widget_code(false).'</div></li>';
1399
+ return $items;
1400
+ }
1401
+ }
1402
+
1403
+ if($data['floating_language_selector'] != 'no' and !is_admin()) {
1404
+ add_action('wp_footer', 'gtranslate_display_floating');
1405
+ function gtranslate_display_floating() {
1406
+ $data = get_option('GTranslate');
1407
+ GTranslate::load_defaults($data);
1408
+
1409
+ if($data['widget_look'] == 'dropdown_with_flags')
1410
+ $vertical_location = '0';
1411
+ else
1412
+ $vertical_location = '5%';
1413
+
1414
+ switch($data['floating_language_selector']) {
1415
+ case 'top_left': $html = '<div style="position:fixed;top:'.$vertical_location.';left:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
1416
+ case 'top_right': $html = '<div style="position:fixed;top:'.$vertical_location.';right:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
1417
+ case 'bottom_left': $html = '<div style="position:fixed;bottom:'.$vertical_location.';left:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
1418
+ case 'bottom_right': $html = '<div style="position:fixed;bottom:'.$vertical_location.';right:8%;z-index:999999;">'.GTranslate::get_widget_code(false).'</div>'; break;
1419
+ default: $html = ''; break;
1420
+ }
1421
+
1422
+ echo $html;
1423
+ }
1424
+ }
1425
+
1426
+ if($data['url_translation'] and ($data['pro_version'] or $data['enterprise_version'])) {
1427
+ add_action('wp_head', 'gtranslate_url_translation_meta', 1);
1428
+ function gtranslate_url_translation_meta() {
1429
+ echo '<meta name="uri-translation" content="on" />';
1430
+ }
1431
+ }
native_names_map.php ADDED
@@ -0,0 +1,107 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ $native_names_map = array(
3
+ 'af' => 'Afrikaans',
4
+ 'sq' => 'Shqip',
5
+ 'am' => 'አማርኛ',
6
+ 'ar' => 'العربية',
7
+ 'hy' => 'Հայերեն',
8
+ 'az' => 'Azərbaycan dili',
9
+ 'eu' => 'Euskara',
10
+ 'be' => 'Беларуская мова',
11
+ 'bn' => 'বাংলা',
12
+ 'bs' => 'Bosanski',
13
+ 'bg' => 'Български',
14
+ 'ca' => 'Català',
15
+ 'ceb' => 'Cebuano',
16
+ 'ny' => 'Chichewa',
17
+ 'zh-CN' => '简体中文',
18
+ 'zh-TW' => '繁體中文',
19
+ 'co' => 'Corsu',
20
+ 'hr' => 'Hrvatski',
21
+ 'cs' => 'Čeština‎',
22
+ 'da' => 'Dansk',
23
+ 'nl' => 'Nederlands',
24
+ 'en' => 'English',
25
+ 'eo' => 'Esperanto',
26
+ 'et' => 'Eesti',
27
+ 'tl' => 'Filipino',
28
+ 'fi' => 'Suomi',
29
+ 'fr' => 'Français',
30
+ 'fy' => 'Frysk',
31
+ 'gl' => 'Galego',
32
+ 'ka' => 'ქართული',
33
+ 'de' => 'Deutsch',
34
+ 'el' => 'Greek',
35
+ 'gu' => 'ગુજરાતી',
36
+ 'ht' => 'Kreyol ayisyen',
37
+ 'ha' => 'Harshen Hausa',
38
+ 'haw' => 'Ōlelo Hawaiʻi',
39
+ 'iw' => 'עִבְרִית',
40
+ 'hi' => 'हिन्दी',
41
+ 'hmn' => 'Hmong',
42
+ 'hu' => 'Magyar',
43
+ 'is' => 'Íslenska',
44
+ 'ig' => 'Igbo',
45
+ 'id' => 'Bahasa Indonesia',
46
+ 'ga' => 'Gaelige',
47
+ 'it' => 'Italiano',
48
+ 'ja' => '日本語',
49
+ 'jw' => 'Basa Jawa',
50
+ 'kn' => 'ಕನ್ನಡ',
51
+ 'kk' => 'Қазақ тілі',
52
+ 'km' => 'ភាសាខ្មែរ',
53
+ 'ko' => '한국어',
54
+ 'ku' => 'كوردی‎',
55
+ 'ky' => 'Кыргызча',
56
+ 'lo' => 'ພາສາລາວ',
57
+ 'la' => 'Latin',
58
+ 'lv' => 'Latviešu valoda',
59
+ 'lt' => 'Lietuvių kalba',
60
+ 'lb' => 'Lëtzebuergesch',
61
+ 'mk' => 'Македонски јазик',
62
+ 'mg' => 'Malagasy',
63
+ 'ms' => 'Bahasa Melayu',
64
+ 'ml' => 'മലയാളം',
65
+ 'mt' => 'Maltese',
66
+ 'mi' => 'Te Reo Māori',
67
+ 'mr' => 'मराठी',
68
+ 'mn' => 'Монгол',
69
+ 'my' => 'ဗမာစာ',
70
+ 'ne' => 'नेपाली',
71
+ 'no' => 'Norsk bokmål',
72
+ 'ps' => 'پښتو',
73
+ 'fa' => 'فارسی',
74
+ 'pl' => 'Polski',
75
+ 'pt' => 'Português',
76
+ 'pa' => 'ਪੰਜਾਬੀ',
77
+ 'ro' => 'Română',
78
+ 'ru' => 'Русский',
79
+ 'sm' => 'Samoan',
80
+ 'gd' => 'Gàidhlig',
81
+ 'sr' => 'Српски језик',
82
+ 'st' => 'Sesotho',
83
+ 'sn' => 'Shona',
84
+ 'sd' => 'سنڌي',
85
+ 'si' => 'සිංහල',
86
+ 'sk' => 'Slovenčina',
87
+ 'sl' => 'Slovenščina',
88
+ 'so' => 'Afsoomaali',
89
+ 'es' => 'Español',
90
+ 'su' => 'Basa Sunda',
91
+ 'sw' => 'Kiswahili',
92
+ 'sv' => 'Svenska',
93
+ 'tg' => 'Тоҷикӣ',
94
+ 'ta' => 'தமிழ்',
95
+ 'te' => 'తెలుగు',
96
+ 'th' => 'ไทย',
97
+ 'tr' => 'Türkçe',
98
+ 'uk' => 'Українська',
99
+ 'ur' => 'اردو',
100
+ 'uz' => 'O‘zbekcha',
101
+ 'vi' => 'Tiếng Việt',
102
+ 'cy' => 'Cymraeg',
103
+ 'xh' => 'isiXhosa',
104
+ 'yi' => 'יידיש',
105
+ 'yo' => 'Yorùbá',
106
+ 'zu' => 'Zulu'
107
+ );
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === Translate Wordpress with GTranslate ===
2
  Contributors: edo888
3
  Author: Edvard Ananyan
4
- Tags: translation proxy, localization, translate, translation, localization, google translate, language, multilingual, multilanguage, bilingual, tradurre, traducir, traduire, traduzione, ubersetzung, mehrsprachig, oversette, oversatta, vertaling, vertaler, meertalig, polylang, qtranslate, transposh
5
  Requires at least: 2.8
6
  Tested up to: 4.7
7
- Stable tag: 2.8.4
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
  Donate link: https://gtranslate.io/?xyz=998#pricing
@@ -33,7 +33,8 @@ Please check our [FAQ](https://gtranslate.io/?xyz=998#faq) to get quick answers.
33
  * Google language translator widget
34
  * Available styles Dropdown/Flags/Flags with dropdown/Nice dropdown with flags/Globe
35
  * Floating language selector
36
- * Valid XHTML
 
37
  * Alternative for WPML, qtranslate, transposh, loco translate and polylang
38
  * (paid) You can manually correct translations
39
  * (paid) You can have sub-directory (example.com/**es**/) or sub-domain (**es.**example.com) URL structure
@@ -410,6 +411,12 @@ You need to go to the language you want to edit, for instance, French: http://do
410
 
411
  == Changelog ==
412
 
 
 
 
 
 
 
413
  = 2.8.4 =
414
  * New option to select in which menu the selector should appear
415
 
1
  === Translate Wordpress with GTranslate ===
2
  Contributors: edo888
3
  Author: Edvard Ananyan
4
+ Tags: translation proxy, localization, translate, translation, google translate, language, multilingual, multilanguage, bilingual, tradurre, traducir, traduire, traduzione, ubersetzung, mehrsprachig, oversette, oversatta, vertaling, vertaler, meertalig, polylang, qtranslate, transposh, wpml
5
  Requires at least: 2.8
6
  Tested up to: 4.7
7
+ Stable tag: 2.8.5
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
  Donate link: https://gtranslate.io/?xyz=998#pricing
33
  * Google language translator widget
34
  * Available styles Dropdown/Flags/Flags with dropdown/Nice dropdown with flags/Globe
35
  * Floating language selector
36
+ * Language bar in menu
37
+ * Multilanguage
38
  * Alternative for WPML, qtranslate, transposh, loco translate and polylang
39
  * (paid) You can manually correct translations
40
  * (paid) You can have sub-directory (example.com/**es**/) or sub-domain (**es.**example.com) URL structure
411
 
412
  == Changelog ==
413
 
414
+ = 2.8.5 =
415
+ * Show languages in their native names
416
+ * Automatically select default language based on wordpress locale
417
+ * Coding issue with PHP Strict Standards and Fatal Error on some PHP versions fixed
418
+ * Error messages more informative
419
+
420
  = 2.8.4 =
421
  * New option to select in which menu the selector should appear
422