WPGlobus – Multilingual Everything! - Version 2.6.1

Version Description

  • (Core/Options) Added handling of actions for the tabs.
  • (Core/Controller) Added filter googlesitekit_canonical_home_url.
  • (Core/WP_Options) Fixed PHP Notice: Array to string conversion.
  • (Core/Plugin Install) Fixed uasort warning.
  • (Core) Code clean-up.
  • (Vendor/RankMathSEO) Typo.
  • (Core/Updater) Updater v.1.0.10.
Download this release

Release Info

Developer tivnet
Plugin Icon 128x128 WPGlobus – Multilingual Everything!
Version 2.6.1
Comparing to
See all releases

Code changes from version 2.6.0 to 2.6.1

data/wpglobus-product-info.json CHANGED
@@ -1 +1 @@
1
- {"multilingual-woocommerce-nets-netaxept":{"title":"{:en}Multilingual WooCommerce Nets Netaxept{:}{:ru}\u041c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f WooCommerce Nets Netaxept{:}","_api_new_version":"1.0.3","_api_tested_up_to":"4.9.8"},"wpglobus-menu-visibility":{"title":"WPGlobus Menu Visibility","_api_new_version":"1.2.0","_api_tested_up_to":"4.9.6"},"wpglobus-multi-currency":{"title":"{:en}Multi-Currency for WooCommerce{:}{:ru}WPGlobus - \u041c\u0443\u043b\u044c\u0442\u0438\u0432\u0430\u043b\u044e\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f WooCommerce{:}","_api_new_version":"1.1.1","_api_tested_up_to":"4.9.4"},"wpglobus-language-widgets":{"title":"{:en}WPGlobus Language Widgets{:}{:ru}\u042f\u0437\u044b\u043a\u0438 WPGlobus \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432{:}","_api_new_version":"1.1.0","_api_tested_up_to":"5.4.0"},"wpglobus-header-images":{"title":"{:en}WPGlobus Header Images{:}{:ru}WPGlobus Header Images{:}","_api_new_version":"2.1.0","_api_tested_up_to":"5.5"},"wpglobus-mobile-menu":{"title":"{:en}WPGlobus Mobile Menu{:}{:ru}WPGlobus Mobile Menu{:}","_api_new_version":"2.1.0","_api_tested_up_to":"5.5.1"},"wpglobus-plus":{"title":"{:en}WPGlobus Plus multilingual extension{:}{:ru}WPGlobus \u041f\u043b\u044e\u0441{:}","_api_new_version":"1.5.1","_api_tested_up_to":"5.5.1"},"wpglobus-for-bridge-theme":{"title":"{:en}WPGlobus for the \"Bridge\" theme{:}{:ru}WPGlobus \u0434\u043b\u044f \u0442\u0435\u043c\u044b Bridge{:}","_api_new_version":"2.3.0","_api_tested_up_to":"5.5"},"wpglobus-multilingual-notices":{"title":"{:en}WPGlobus Multilingual Notices{:}{:ru}WPGlobus - \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f{:}","_api_new_version":"2.2.0","_api_tested_up_to":"5.5"},"woocommerce-wpglobus":{"title":"{:en}WPGlobus for WooCommerce{:}{:ru}\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 WooCommerce WPGlobus{:}","_api_new_version":"4.2.0","_api_tested_up_to":"5.6"}}
1
+ {"multilingual-woocommerce-nets-netaxept":{"title":"{:en}Multilingual WooCommerce Nets Netaxept{:}{:ru}\u041c\u0443\u043b\u044c\u0442\u0438\u044f\u0437\u044b\u0447\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f WooCommerce Nets Netaxept{:}","_api_new_version":"1.0.3","_api_tested_up_to":"4.9.8"},"wpglobus-menu-visibility":{"title":"WPGlobus Menu Visibility","_api_new_version":"1.2.0","_api_tested_up_to":"4.9.6"},"wpglobus-multi-currency":{"title":"{:en}Multi-Currency for WooCommerce{:}{:ru}WPGlobus - \u041c\u0443\u043b\u044c\u0442\u0438\u0432\u0430\u043b\u044e\u0442\u043d\u043e\u0441\u0442\u044c \u0434\u043b\u044f WooCommerce{:}","_api_new_version":"1.1.1","_api_tested_up_to":"4.9.4"},"wpglobus-header-images":{"title":"{:en}WPGlobus Header Images{:}{:ru}WPGlobus Header Images{:}","_api_new_version":"2.1.0","_api_tested_up_to":"5.5"},"wpglobus-mobile-menu":{"title":"{:en}WPGlobus Mobile Menu{:}{:ru}WPGlobus Mobile Menu{:}","_api_new_version":"2.1.0","_api_tested_up_to":"5.5.1"},"wpglobus-for-bridge-theme":{"title":"{:en}WPGlobus for the \"Bridge\" theme{:}{:ru}WPGlobus \u0434\u043b\u044f \u0442\u0435\u043c\u044b Bridge{:}","_api_new_version":"2.3.0","_api_tested_up_to":"5.5"},"wpglobus-multilingual-notices":{"title":"{:en}WPGlobus Multilingual Notices{:}{:ru}WPGlobus - \u043c\u043d\u043e\u0433\u043e\u044f\u0437\u044b\u0447\u043d\u044b\u0435 \u0443\u0432\u0435\u0434\u043e\u043c\u043b\u0435\u043d\u0438\u044f{:}","_api_new_version":"2.2.0","_api_tested_up_to":"5.5"},"woocommerce-wpglobus":{"title":"{:en}WPGlobus for WooCommerce{:}{:ru}\u0420\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 WooCommerce WPGlobus{:}","_api_new_version":"4.2.0","_api_tested_up_to":"5.6"},"wpglobus-plus":{"title":"{:en}WPGlobus Plus multilingual extension{:}{:ru}WPGlobus \u041f\u043b\u044e\u0441{:}","_api_new_version":"1.5.2","_api_tested_up_to":"5.6"},"wpglobus-language-widgets":{"title":"{:en}WPGlobus Language Widgets{:}{:ru}\u042f\u0437\u044b\u043a\u0438 WPGlobus \u0434\u043b\u044f \u0432\u0438\u0434\u0436\u0435\u0442\u043e\u0432{:}","_api_new_version":"2.0.0","_api_tested_up_to":"5.6.0"}}
includes/admin/class-wpglobus-plugin-install.php CHANGED
@@ -104,7 +104,7 @@ if ( ! class_exists( 'WPGlobus_Plugin_Install' ) ) :
104
  * @return int
105
  */
106
  public static function sort_paid_plugins( $a, $b ) {
107
- return $a['order'] > $b['order'];
108
  }
109
 
110
  /**
104
  * @return int
105
  */
106
  public static function sort_paid_plugins( $a, $b ) {
107
+ return ( $a['order'] < $b['order'] ) ? - 1 : 1;
108
  }
109
 
110
  /**
includes/class-wpglobus.php CHANGED
@@ -605,16 +605,7 @@ class WPGlobus {
605
 
606
  $type = empty( $post ) ? '' : $post->post_type;
607
  if ( ! $this->disabled_entity( $type ) ) {
608
-
609
  require_once 'vendor/wpglobus-aioseop.php';
610
- /**
611
- * @since 2.3.9 remove after testing.
612
- */
613
- //require_once 'vendor/class-wpglobus-aioseop.php';
614
- //if ( WPGlobus_WP::is_pagenow( array( 'post.php', 'post-new.php' ) ) ) {
615
- /** @noinspection PhpUnusedLocalVariableInspection */
616
- //$WPGlobus_aioseop = new WPGlobus_aioseop();
617
- //}
618
  }
619
  }
620
  }
605
 
606
  $type = empty( $post ) ? '' : $post->post_type;
607
  if ( ! $this->disabled_entity( $type ) ) {
 
608
  require_once 'vendor/wpglobus-aioseop.php';
 
 
 
 
 
 
 
 
609
  }
610
  }
611
  }
includes/js/wpglobus-options.js CHANGED
@@ -99,6 +99,11 @@ jQuery(document).ready(function ($) {
99
  setTimeout(function(){
100
  $('#section-tab-'+WPGlobusOptions.tab+' .wpglobus-options-menu .wpglobus-tab-link-subsection').eq(0).click();
101
  }, 200);
 
 
 
 
 
102
  },
103
  initLanguageTable: function() {
104
  var $items = $('.wpglobus-the-language-item-installed');
@@ -149,7 +154,11 @@ jQuery(document).ready(function ($) {
149
  $('#section-tab-'+tab+' .wpglobus-tab-link-subsection').eq(0).click();
150
  }
151
  }
 
 
 
152
  });
 
153
  /* @since 2.5.3 */
154
  $(document).on('click', '.wpglobus-tab-link-subsection', function(event){
155
  var tab = $(this).data('tab');
@@ -160,6 +169,28 @@ jQuery(document).ready(function ($) {
160
  $('#wpglobus-tab-link-subsection-'+tab).addClass('wpglobus-tab-link-active');
161
  });
162
  },
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
163
  initSpecs: function() {
164
  $(document).on('dblclick', '#section-tab-customizer h2', function(ev){
165
  $('.wpglobus-theme-info-spec').removeClass('hidden');
99
  setTimeout(function(){
100
  $('#section-tab-'+WPGlobusOptions.tab+' .wpglobus-options-menu .wpglobus-tab-link-subsection').eq(0).click();
101
  }, 200);
102
+
103
+ /**
104
+ * @since 2.6.1
105
+ */
106
+ api.tabActions( api.getCurrentTabID() );
107
  },
108
  initLanguageTable: function() {
109
  var $items = $('.wpglobus-the-language-item-installed');
154
  $('#section-tab-'+tab+' .wpglobus-tab-link-subsection').eq(0).click();
155
  }
156
  }
157
+
158
+ // @since 2.6.1
159
+ api.tabActions( $(this) );
160
  });
161
+
162
  /* @since 2.5.3 */
163
  $(document).on('click', '.wpglobus-tab-link-subsection', function(event){
164
  var tab = $(this).data('tab');
169
  $('#wpglobus-tab-link-subsection-'+tab).addClass('wpglobus-tab-link-active');
170
  });
171
  },
172
+ tabActions: function($tab) {
173
+ /**
174
+ * @since 2.6.1
175
+ */
176
+ if ( 'string' === typeof $tab ) {
177
+ $tab = $('#wpglobus-tab-link-'+$tab).eq(0);
178
+ }
179
+
180
+ if ( $tab.length == 0 ) {
181
+ return;
182
+ }
183
+
184
+ /**
185
+ * Hide/Show submit button.
186
+ * @since 2.6.1
187
+ */
188
+ if ( $tab.hasClass('wpglobus-tab-hide-submit-button') ) {
189
+ $('#form-wpglobus-options .submit').addClass('hidden');
190
+ } else {
191
+ $('#form-wpglobus-options .submit').removeClass('hidden');
192
+ }
193
+ },
194
  initSpecs: function() {
195
  $(document).on('dblclick', '#section-tab-customizer h2', function(ev){
196
  $('.wpglobus-theme-info-spec').removeClass('hidden');
includes/js/wpglobus-options.min.js CHANGED
@@ -1 +1 @@
1
- jQuery(document).ready(function(s){"use strict";var e;"undefined"!=typeof WPGlobusOptions&&(e={currentTabID:"",firstLanguageCb:null,init:function(){e.initTab(),e.checkHandlers(),e.addListeners(),e.initSpecs()},setCurrentTabID:function(t){e.currentTabID=t},getCurrentTabID:function(){return e.currentTabID},setFirstLanguageCb:function(){null!==e.firstLanguageCb&&e.firstLanguageCb.off("click"),s('#enabled_languages-list li input[type="checkbox"]').prop("disabled",!1);var t=s("#enabled_languages-list li").eq(0);e.firstLanguageCb=t.find('input[type="checkbox"]'),e.firstLanguageCb.prop("checked","checked"),e.firstLanguageCb.prop("disabled","disabled"),e.firstLanguageCb.css({visibility:"hidden"}),e.firstLanguageCb.on("click",function(t){return t.preventDefault(),!1})},handlerEnabled_languages:function(){s(".wpglobus-sortable").sortable({placeholder:"ui-state-highlight",update:function(t,n){s('#enabled_languages-list li input[type="checkbox"]').css({visibility:"visible"}),e.setFirstLanguageCb()}}),s(".wpglobus-sortable").disableSelection(),e.setFirstLanguageCb()},handlerLanguagesTable:function(){var e=s("#wpglobus-options-languagesTable").parents(".wpglobus-options-tab").data("tab");s("#wpglobus-options-languagesTable .manage-column.sortable a").each(function(t,n){var a=s(n).attr("href");-1!=a.indexOf("tab")?-1==a.indexOf("tab-from")&&(a=a.replace(/tab/,"tab-from"),a+="&tab="+e):a+="&tab="+e,s(n).attr("href",a)})},checkHandlers:function(){s(".wpglobus-options-field").each(function(t,n){if(void 0===s(n).data("js-handler"))return!0;var a=s(n).data("js-handler");"function"==typeof e[a]&&e[a]()})},initTab:function(){var t=s("#section-tab-"+WPGlobusOptions.tab);e.setCurrentTabID(WPGlobusOptions.tab),0==t.length&&(e.setCurrentTabID(WPGlobusOptions.defaultTab),t=s("#section-tab-"+e.currentTabID)),t.css({display:"block"}),s("#wpglobus-tab-link-"+e.currentTabID).addClass("wpglobus-tab-link-active"),e.initLanguageTable(),s(".wpglobus-options-wrap .no-inline-js").attr("onclick","return false;"),setTimeout(function(){s("#section-tab-"+WPGlobusOptions.tab+" .wpglobus-options-menu .wpglobus-tab-link-subsection").eq(0).click()},200)},initLanguageTable:function(){var a,e,t=s(".wpglobus-the-language-item-installed");9<t.length||(a=[],t.each(function(t){var n=+s(this).data("order");a[n]=s(this)}),e=s("#wpglobus-options-languagesTable #the-list tr").eq(0),s.each(a,function(t,n){s(e).before(n)}))},addListeners:function(){s(document).on("click","input.wpglobus-enabled_languages",function(t){var n=s(this).prop("checked"),a=s(this).attr("rel");n?s("#"+a).val("1"):s("#"+a).val("")}),s(document).on("click",".wpglobus-tab-link",function(t){var n=s(this).data("tab");e.setCurrentTabID(n),window.history.pushState("data","Title",WPGlobusOptions.newUrl.replace("{*}",n)),s(".wpglobus-options-tab").css({display:"none"}),s("#section-tab-"+n).css({display:"block"}),s(".wpglobus-tab-link").removeClass("wpglobus-tab-link-active"),s("#wpglobus-tab-link-"+n).addClass("wpglobus-tab-link-active"),s("#wpglobus_options_current_tab").val(n),1==s("#section-tab-"+n+" .wpglobus-tab-link-subsection.wpglobus-tab-link-active").length?s("#section-tab-"+n+" .wpglobus-tab-link-subsection.wpglobus-tab-link-active").click():0<s("#section-tab-"+n+" .wpglobus-tab-link-subsection").length&&s("#section-tab-"+n+" .wpglobus-tab-link-subsection").eq(0).click()}),s(document).on("click",".wpglobus-tab-link-subsection",function(t){var n=s(this).data("tab");s(".wpglobus-options-tab-subsection").css({display:"none"}),s("#subsection-tab-"+n).css({display:"block"}),s(".wpglobus-tab-link-subsection").removeClass("wpglobus-tab-link-active"),s("#wpglobus-tab-link-subsection-"+n).addClass("wpglobus-tab-link-active")})},initSpecs:function(){s(document).on("dblclick","#section-tab-customizer h2",function(t){s(".wpglobus-theme-info-spec").removeClass("hidden")}),s(document).on("dblclick",".column-wpglobus_flag",function(t){location=location.href+"&flags"})}},(WPGlobusOptions=s.extend({},WPGlobusOptions,e)).init())});
1
+ jQuery(document).ready(function(e){"use strict";var s;"undefined"!=typeof WPGlobusOptions&&(s={currentTabID:"",firstLanguageCb:null,init:function(){s.initTab(),s.checkHandlers(),s.addListeners(),s.initSpecs()},setCurrentTabID:function(t){s.currentTabID=t},getCurrentTabID:function(){return s.currentTabID},setFirstLanguageCb:function(){null!==s.firstLanguageCb&&s.firstLanguageCb.off("click"),e('#enabled_languages-list li input[type="checkbox"]').prop("disabled",!1);var t=e("#enabled_languages-list li").eq(0);s.firstLanguageCb=t.find('input[type="checkbox"]'),s.firstLanguageCb.prop("checked","checked"),s.firstLanguageCb.prop("disabled","disabled"),s.firstLanguageCb.css({visibility:"hidden"}),s.firstLanguageCb.on("click",function(t){return t.preventDefault(),!1})},handlerEnabled_languages:function(){e(".wpglobus-sortable").sortable({placeholder:"ui-state-highlight",update:function(t,n){e('#enabled_languages-list li input[type="checkbox"]').css({visibility:"visible"}),s.setFirstLanguageCb()}}),e(".wpglobus-sortable").disableSelection(),s.setFirstLanguageCb()},handlerLanguagesTable:function(){var s=e("#wpglobus-options-languagesTable").parents(".wpglobus-options-tab").data("tab");e("#wpglobus-options-languagesTable .manage-column.sortable a").each(function(t,n){var a=e(n).attr("href");-1!=a.indexOf("tab")?-1==a.indexOf("tab-from")&&(a=a.replace(/tab/,"tab-from"),a+="&tab="+s):a+="&tab="+s,e(n).attr("href",a)})},checkHandlers:function(){e(".wpglobus-options-field").each(function(t,n){if(void 0===e(n).data("js-handler"))return!0;var a=e(n).data("js-handler");"function"==typeof s[a]&&s[a]()})},initTab:function(){var t=e("#section-tab-"+WPGlobusOptions.tab);s.setCurrentTabID(WPGlobusOptions.tab),0==t.length&&(s.setCurrentTabID(WPGlobusOptions.defaultTab),t=e("#section-tab-"+s.currentTabID)),t.css({display:"block"}),e("#wpglobus-tab-link-"+s.currentTabID).addClass("wpglobus-tab-link-active"),s.initLanguageTable(),e(".wpglobus-options-wrap .no-inline-js").attr("onclick","return false;"),setTimeout(function(){e("#section-tab-"+WPGlobusOptions.tab+" .wpglobus-options-menu .wpglobus-tab-link-subsection").eq(0).click()},200),s.tabActions(s.getCurrentTabID())},initLanguageTable:function(){var a,s,t=e(".wpglobus-the-language-item-installed");9<t.length||(a=[],t.each(function(t){var n=+e(this).data("order");a[n]=e(this)}),s=e("#wpglobus-options-languagesTable #the-list tr").eq(0),e.each(a,function(t,n){e(s).before(n)}))},addListeners:function(){e(document).on("click","input.wpglobus-enabled_languages",function(t){var n=e(this).prop("checked"),a=e(this).attr("rel");n?e("#"+a).val("1"):e("#"+a).val("")}),e(document).on("click",".wpglobus-tab-link",function(t){var n=e(this).data("tab");s.setCurrentTabID(n),window.history.pushState("data","Title",WPGlobusOptions.newUrl.replace("{*}",n)),e(".wpglobus-options-tab").css({display:"none"}),e("#section-tab-"+n).css({display:"block"}),e(".wpglobus-tab-link").removeClass("wpglobus-tab-link-active"),e("#wpglobus-tab-link-"+n).addClass("wpglobus-tab-link-active"),e("#wpglobus_options_current_tab").val(n),1==e("#section-tab-"+n+" .wpglobus-tab-link-subsection.wpglobus-tab-link-active").length?e("#section-tab-"+n+" .wpglobus-tab-link-subsection.wpglobus-tab-link-active").click():0<e("#section-tab-"+n+" .wpglobus-tab-link-subsection").length&&e("#section-tab-"+n+" .wpglobus-tab-link-subsection").eq(0).click(),s.tabActions(e(this))}),e(document).on("click",".wpglobus-tab-link-subsection",function(t){var n=e(this).data("tab");e(".wpglobus-options-tab-subsection").css({display:"none"}),e("#subsection-tab-"+n).css({display:"block"}),e(".wpglobus-tab-link-subsection").removeClass("wpglobus-tab-link-active"),e("#wpglobus-tab-link-subsection-"+n).addClass("wpglobus-tab-link-active")})},tabActions:function(t){"string"==typeof t&&(t=e("#wpglobus-tab-link-"+t).eq(0)),0!=t.length&&(t.hasClass("wpglobus-tab-hide-submit-button")?e("#form-wpglobus-options .submit").addClass("hidden"):e("#form-wpglobus-options .submit").removeClass("hidden"))},initSpecs:function(){e(document).on("dblclick","#section-tab-customizer h2",function(t){e(".wpglobus-theme-info-spec").removeClass("hidden")}),e(document).on("dblclick",".column-wpglobus_flag",function(t){location=location.href+"&flags"})}},(WPGlobusOptions=e.extend({},WPGlobusOptions,s)).init())});
includes/vendor/rank-math-seo/class-wpglobus-vendor-rank_math_seo-front.php CHANGED
@@ -1,82 +1,82 @@
1
- <?php
2
- /**
3
- * File: class-wpglobus-vendor-rank_math_seo-front.php
4
- *
5
- * @since 2.4.3
6
- * @since 2.4.4 Add filters for title, description.
7
- *
8
- * @package WPGlobus\Builders\RankMathSEO.
9
- * @author Alex Gor(alexgff)
10
- */
11
-
12
- /**
13
- * Class WPGlobus_Vendor_RankMathSEO_Front.
14
- */
15
- if ( ! class_exists( 'WPGlobus_Vendor_RankMathSEO_Front' ) ) :
16
-
17
- class WPGlobus_Vendor_RankMathSEO_Front {
18
-
19
- public static function controller() {
20
- add_filter( 'wpglobus_multilingual_meta_keys', array( __CLASS__, 'filter__multilingual_meta_keys' ), 5 );
21
-
22
- /**
23
- * We need this filter when title is empty and use macro.
24
- *
25
- * @since 2.4.4
26
- * @see seo-by-rank-math\includes\frontend\paper\class-paper.php
27
- * @see seo-by-rank-math\includes\traits\class-hooker.php
28
- */
29
- add_filter( 'rank_math/frontend/title', array( __CLASS__, 'filter__frontend_title' ), 5 );
30
-
31
- /**
32
- * @since 2.4.4
33
- * @see seo-by-rank-math\includes\frontend\paper\class-paper.php
34
- * @see seo-by-rank-math\includes\traits\class-hooker.php
35
- */
36
- add_filter( 'rank_math/frontend/description', array( __CLASS__, 'filter__frontend_description' ), 5 );
37
- }
38
-
39
- /**
40
- * Filter the title.
41
- * @since 2.4.4
42
- *
43
- * @param string $title The title being put out.
44
- */
45
- public static function filter__frontend_title( $title ) {
46
-
47
- if ( WPGlobus_Core::has_translations($title) ) {
48
- return WPGlobus_Core::extract_text($title);
49
- }
50
-
51
- return $title;
52
- }
53
-
54
- /**
55
- * Filter the description.
56
- * @since 2.4.4
57
- *
58
- * @param string $description The description sentence.
59
- */
60
- public static function filter__frontend_description( $description ) {
61
-
62
- if ( WPGlobus_Core::has_translations($description) ) {
63
- return WPGlobus_Core::extract_text($description);
64
- }
65
-
66
- return $description;
67
- }
68
-
69
- /**
70
- * Specify meta keys where the meta data can be multilingual.
71
- */
72
- public static function filter__multilingual_meta_keys( $multilingual_meta_keys ) {
73
- $multilingual_meta_keys['rank_math_title'] = true;
74
- $multilingual_meta_keys['rank_math_description'] = true;
75
- $multilingual_meta_keys['rank_math_focus_keyword'] = true;
76
- return $multilingual_meta_keys;
77
- }
78
- }
79
-
80
- endif;
81
-
82
  # --- EOF
1
+ <?php
2
+ /**
3
+ * File: class-wpglobus-vendor-rank_math_seo-front.php
4
+ *
5
+ * @since 2.4.3
6
+ * @since 2.4.4 Add filters for title, description.
7
+ *
8
+ * @package WPGlobus\Vendors\RankMathSEO.
9
+ * @author Alex Gor(alexgff)
10
+ */
11
+
12
+ /**
13
+ * Class WPGlobus_Vendor_RankMathSEO_Front.
14
+ */
15
+ if ( ! class_exists( 'WPGlobus_Vendor_RankMathSEO_Front' ) ) :
16
+
17
+ class WPGlobus_Vendor_RankMathSEO_Front {
18
+
19
+ public static function controller() {
20
+ add_filter( 'wpglobus_multilingual_meta_keys', array( __CLASS__, 'filter__multilingual_meta_keys' ), 5 );
21
+
22
+ /**
23
+ * We need this filter when title is empty and use macro.
24
+ *
25
+ * @since 2.4.4
26
+ * @see seo-by-rank-math\includes\frontend\paper\class-paper.php
27
+ * @see seo-by-rank-math\includes\traits\class-hooker.php
28
+ */
29
+ add_filter( 'rank_math/frontend/title', array( __CLASS__, 'filter__frontend_title' ), 5 );
30
+
31
+ /**
32
+ * @since 2.4.4
33
+ * @see seo-by-rank-math\includes\frontend\paper\class-paper.php
34
+ * @see seo-by-rank-math\includes\traits\class-hooker.php
35
+ */
36
+ add_filter( 'rank_math/frontend/description', array( __CLASS__, 'filter__frontend_description' ), 5 );
37
+ }
38
+
39
+ /**
40
+ * Filter the title.
41
+ * @since 2.4.4
42
+ *
43
+ * @param string $title The title being put out.
44
+ */
45
+ public static function filter__frontend_title( $title ) {
46
+
47
+ if ( WPGlobus_Core::has_translations($title) ) {
48
+ return WPGlobus_Core::extract_text($title);
49
+ }
50
+
51
+ return $title;
52
+ }
53
+
54
+ /**
55
+ * Filter the description.
56
+ * @since 2.4.4
57
+ *
58
+ * @param string $description The description sentence.
59
+ */
60
+ public static function filter__frontend_description( $description ) {
61
+
62
+ if ( WPGlobus_Core::has_translations($description) ) {
63
+ return WPGlobus_Core::extract_text($description);
64
+ }
65
+
66
+ return $description;
67
+ }
68
+
69
+ /**
70
+ * Specify meta keys where the meta data can be multilingual.
71
+ */
72
+ public static function filter__multilingual_meta_keys( $multilingual_meta_keys ) {
73
+ $multilingual_meta_keys['rank_math_title'] = true;
74
+ $multilingual_meta_keys['rank_math_description'] = true;
75
+ $multilingual_meta_keys['rank_math_focus_keyword'] = true;
76
+ return $multilingual_meta_keys;
77
+ }
78
+ }
79
+
80
+ endif;
81
+
82
  # --- EOF
includes/vendor/rank-math-seo/class-wpglobus-vendor-rank_math_seo.php CHANGED
@@ -1,104 +1,104 @@
1
- <?php
2
- /**
3
- * File: class-wpglobus-vendor-rank_math_seo.php
4
- *
5
- * @since 2.4.3
6
- *
7
- * @package WPGlobus\Builders\RankMathSEO.
8
- * @author Alex Gor(alexgff)
9
- */
10
- /**
11
- * Class WPGlobus_Vendor_RankMathSEO.
12
- */
13
- if ( ! class_exists( 'WPGlobus_Vendor_RankMathSEO' ) ) :
14
-
15
- class WPGlobus_Vendor_RankMathSEO {
16
-
17
- protected static $post_meta_fields = null;
18
-
19
- /**
20
- * List of fields to add `wpglobus-translatable` class.
21
- */
22
- protected static $post_multilingual_fields = null;
23
-
24
- /**
25
- * @var object Instance of this class.
26
- */
27
- protected static $instance;
28
-
29
- /**
30
- * Constructor.
31
- */
32
- protected function __construct(){}
33
-
34
- /**
35
- * Get instance of this class.
36
- *
37
- * @return WPGlobus_Vendor_RankMathSEO
38
- */
39
- public static function get_instance() {
40
- if ( ! ( self::$instance instanceof WPGlobus_Vendor_RankMathSEO ) ) {
41
- self::$instance = new self();
42
- }
43
-
44
- return self::$instance;
45
- }
46
-
47
- /**
48
- * Get multilingual fields.
49
- */
50
- public static function get_post_multilingual_fields() {
51
- if ( is_null( self::$post_multilingual_fields ) ) {
52
- return false;
53
- }
54
-
55
- return self::$post_multilingual_fields;
56
- }
57
-
58
- /**
59
- * Get post meta.
60
- *
61
- * Don't call WPGlobus::Config() inside function to prevent the resetting of `meta` property.
62
- *
63
- * @param $post_id
64
- * @param string $post_type
65
- *
66
- * @return array
67
- */
68
- public static function get_post_meta_fields( $post_id, $post_type = 'post' ) {
69
-
70
- if ( ! is_null( self::$post_meta_fields ) ) {
71
- return self::$post_meta_fields;
72
- }
73
-
74
- $post_id = (int) $post_id;
75
-
76
- if ( $post_id > 0 ) {
77
-
78
- self::$post_meta_fields = array(
79
- 'rank_math_title',
80
- 'rank_math_description',
81
- 'rank_math_focus_keyword',
82
- );
83
- }
84
-
85
- return self::$post_meta_fields;
86
- }
87
-
88
- /**
89
- * Check 3rd party plugin to enable/disable field.
90
- *
91
- * @param array $field
92
- *
93
- * @return bool
94
- */
95
- protected static function get_3rd_party_field_status( $field ) {
96
- // @see wpglobus\includes\vendor\acf\class-wpglobus-acf.php for example.
97
- return true;
98
- }
99
-
100
- }
101
-
102
- endif;
103
-
104
  # --- EOF
1
+ <?php
2
+ /**
3
+ * File: class-wpglobus-vendor-rank_math_seo.php
4
+ *
5
+ * @since 2.4.3
6
+ *
7
+ * @package WPGlobus\Vendors\RankMathSEO.
8
+ * @author Alex Gor(alexgff)
9
+ */
10
+ /**
11
+ * Class WPGlobus_Vendor_RankMathSEO.
12
+ */
13
+ if ( ! class_exists( 'WPGlobus_Vendor_RankMathSEO' ) ) :
14
+
15
+ class WPGlobus_Vendor_RankMathSEO {
16
+
17
+ protected static $post_meta_fields = null;
18
+
19
+ /**
20
+ * List of fields to add `wpglobus-translatable` class.
21
+ */
22
+ protected static $post_multilingual_fields = null;
23
+
24
+ /**
25
+ * @var object Instance of this class.
26
+ */
27
+ protected static $instance;
28
+
29
+ /**
30
+ * Constructor.
31
+ */
32
+ protected function __construct(){}
33
+
34
+ /**
35
+ * Get instance of this class.
36
+ *
37
+ * @return WPGlobus_Vendor_RankMathSEO
38
+ */
39
+ public static function get_instance() {
40
+ if ( ! ( self::$instance instanceof WPGlobus_Vendor_RankMathSEO ) ) {
41
+ self::$instance = new self();
42
+ }
43
+
44
+ return self::$instance;
45
+ }
46
+
47
+ /**
48
+ * Get multilingual fields.
49
+ */
50
+ public static function get_post_multilingual_fields() {
51
+ if ( is_null( self::$post_multilingual_fields ) ) {
52
+ return false;
53
+ }
54
+
55
+ return self::$post_multilingual_fields;
56
+ }
57
+
58
+ /**
59
+ * Get post meta.
60
+ *
61
+ * Don't call WPGlobus::Config() inside function to prevent the resetting of `meta` property.
62
+ *
63
+ * @param $post_id
64
+ * @param string $post_type
65
+ *
66
+ * @return array
67
+ */
68
+ public static function get_post_meta_fields( $post_id, $post_type = 'post' ) {
69
+
70
+ if ( ! is_null( self::$post_meta_fields ) ) {
71
+ return self::$post_meta_fields;
72
+ }
73
+
74
+ $post_id = (int) $post_id;
75
+
76
+ if ( $post_id > 0 ) {
77
+
78
+ self::$post_meta_fields = array(
79
+ 'rank_math_title',
80
+ 'rank_math_description',
81
+ 'rank_math_focus_keyword',
82
+ );
83
+ }
84
+
85
+ return self::$post_meta_fields;
86
+ }
87
+
88
+ /**
89
+ * Check 3rd party plugin to enable/disable field.
90
+ *
91
+ * @param array $field
92
+ *
93
+ * @return bool
94
+ */
95
+ protected static function get_3rd_party_field_status( $field ) {
96
+ // @see wpglobus\includes\vendor\acf\class-wpglobus-acf.php for example.
97
+ return true;
98
+ }
99
+
100
+ }
101
+
102
+ endif;
103
+
104
  # --- EOF
includes/vendor/wpglobus-aioseop.php CHANGED
@@ -1,39 +1,40 @@
1
- <?php
2
- /**
3
- * File: wpglobus-aioseop.php
4
- * Support Standard/Classic mode.
5
- *
6
- * @since 2.3.9
7
- *
8
- * @package WPGlobus\All-in-One-SEO
9
- */
10
-
11
- if ( defined( 'AIOSEOP_VERSION' ) ) {
12
-
13
- if ( version_compare( AIOSEOP_VERSION, '3.4.2', '>=' ) ) {
14
-
15
- /**
16
- * Load `WPGlobus_aioseop` class after loading of vendor class.
17
- * @see `plugins_loaded` action in all-in-one-seo-pack\class-aioseop-core.php
18
- */
19
- function wpglobus_vendor__aioseop_load() {
20
- require_once 'class-wpglobus-aioseop.php';
21
- if ( WPGlobus_WP::is_pagenow( array( 'post.php', 'post-new.php' ) ) ) {
22
- /** @noinspection PhpUnusedLocalVariableInspection */
23
- $WPGlobus_aioseop = new WPGlobus_aioseop();
24
- }
25
- }
26
- add_action( 'plugins_loaded', 'wpglobus_vendor__aioseop_load', 6 );
27
-
28
- } else {
29
-
30
- require_once 'class-wpglobus-aioseop.php';
31
- if ( WPGlobus_WP::is_pagenow( array( 'post.php', 'post-new.php' ) ) ) {
32
- /** @noinspection PhpUnusedLocalVariableInspection */
33
- $WPGlobus_aioseop = new WPGlobus_aioseop();
34
- }
35
- }
36
-
37
- }
38
-
 
39
  # --- EOF
1
+ <?php
2
+ /**
3
+ * File: wpglobus-aioseop.php
4
+ * Support Standard/Classic mode.
5
+ *
6
+ * @since 2.3.9
7
+ * @since 2.6.1 Support All in One SEO v.3 only.
8
+ *
9
+ * @package WPGlobus\All-in-One-SEO
10
+ */
11
+
12
+ if ( defined( 'AIOSEOP_VERSION' ) ) {
13
+
14
+ if ( version_compare( AIOSEOP_VERSION, '3.4.2', '>=' ) ) {
15
+
16
+ /**
17
+ * Load `WPGlobus_aioseop` class after loading of vendor class.
18
+ * @see `plugins_loaded` action in all-in-one-seo-pack\class-aioseop-core.php
19
+ */
20
+ function wpglobus_vendor__aioseop_load() {
21
+ require_once 'class-wpglobus-aioseop.php';
22
+ if ( WPGlobus_WP::is_pagenow( array( 'post.php', 'post-new.php' ) ) ) {
23
+ /** @noinspection PhpUnusedLocalVariableInspection */
24
+ $WPGlobus_aioseop = new WPGlobus_aioseop();
25
+ }
26
+ }
27
+ add_action( 'plugins_loaded', 'wpglobus_vendor__aioseop_load', 6 );
28
+
29
+ } else {
30
+
31
+ require_once 'class-wpglobus-aioseop.php';
32
+ if ( WPGlobus_WP::is_pagenow( array( 'post.php', 'post-new.php' ) ) ) {
33
+ /** @noinspection PhpUnusedLocalVariableInspection */
34
+ $WPGlobus_aioseop = new WPGlobus_aioseop();
35
+ }
36
+ }
37
+
38
+ }
39
+
40
  # --- EOF
includes/wp_options/class-wpglobus-wp_options.php CHANGED
@@ -1,11 +1,15 @@
1
  <?php
2
  /**
3
- * Class WPGlobus_WP_Options
4
  *
5
  * @package WPGlobus\WP_Options
6
  * @author Alex Gor(alexgff)
7
  */
8
 
 
 
 
 
9
  if ( ! class_exists( 'WPGlobus_WP_Options' ) ) :
10
 
11
  class WPGlobus_WP_Options {
@@ -30,10 +34,15 @@ if ( ! class_exists( 'WPGlobus_WP_Options' ) ) :
30
 
31
  if ( is_admin() ) {
32
  foreach ( $wp_options as $option ) {
33
- add_filter( 'option_' . $option, array( __CLASS__, 'filter__translate_option' ) );
 
 
 
 
 
 
34
  }
35
  }
36
-
37
  }
38
 
39
  /**
@@ -78,3 +87,5 @@ if ( ! class_exists( 'WPGlobus_WP_Options' ) ) :
78
  }
79
 
80
  endif;
 
 
1
  <?php
2
  /**
3
+ * File: class-wpglobus-wp_options.php
4
  *
5
  * @package WPGlobus\WP_Options
6
  * @author Alex Gor(alexgff)
7
  */
8
 
9
+ /**
10
+ * Class WPGlobus_WP_Options.
11
+ * To filter the options from `wp_options` table.
12
+ */
13
  if ( ! class_exists( 'WPGlobus_WP_Options' ) ) :
14
 
15
  class WPGlobus_WP_Options {
34
 
35
  if ( is_admin() ) {
36
  foreach ( $wp_options as $option ) {
37
+ if ( ! empty( $option ) ) {
38
+ if ( is_string( $option ) ) {
39
+ add_filter( 'option_' . $option, array( __CLASS__, 'filter__translate_option' ) );
40
+ } else {
41
+ // @since 2.6.1 Case for array.
42
+ }
43
+ }
44
  }
45
  }
 
46
  }
47
 
48
  /**
87
  }
88
 
89
  endif;
90
+
91
+ # --- EOF
includes/wpglobus-controller.php CHANGED
@@ -552,4 +552,16 @@ if ( defined('APL_VERSION') ) {
552
  }
553
  }
554
 
555
- # --- EOF
 
 
 
 
 
 
 
 
 
 
 
 
552
  }
553
  }
554
 
555
+ /**
556
+ * https://sitekit.withgoogle.com/
557
+ * https://github.com/WPGlobus/WPGlobus/issues/94
558
+ * @since 2.6.1
559
+ */
560
+ add_filter(
561
+ 'googlesitekit_canonical_home_url',
562
+ function() {
563
+ return get_option( 'home' );
564
+ }
565
+ );
566
+
567
+ # --- EOF
languages/wpglobus.pot CHANGED
@@ -1,1074 +1,1074 @@
1
- # Copyright (C) 2020 WPGlobus 2.6.0
2
- # This file is distributed under the same license as the WPGlobus 2.6.0 package.
3
- msgid ""
4
- msgstr ""
5
- "Project-Id-Version: WPGlobus 2.6.0\n"
6
- "MIME-Version: 1.0\n"
7
- "Content-Type: text/plain; charset=UTF-8\n"
8
- "Content-Transfer-Encoding: 8bit\n"
9
- "Last-Translator: The WPGlobus Team <support@wpglobus.com>\n"
10
- "Report-Msgid-Bugs-To: support@wpglobus.com\n"
11
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
12
-
13
- msgid "Guide"
14
- msgstr ""
15
-
16
- msgid "WPGlobus Help Desk"
17
- msgstr ""
18
-
19
- msgid "Add-ons"
20
- msgstr ""
21
-
22
- msgid "Quick Start"
23
- msgstr ""
24
-
25
- msgid "FAQ"
26
- msgstr ""
27
-
28
- msgid "Attention: the Multibyte String PHP extension (`mbstring`) is not loaded!"
29
- msgstr ""
30
-
31
- msgid "The mbstring extension is required for the full UTF-8 compatibility and better performance. Without it, some parts of WordPress and WPGlobus may function incorrectly. Please contact your hosting company or systems administrator."
32
- msgstr ""
33
-
34
- msgid "Go to WPGlobus Settings"
35
- msgstr ""
36
-
37
- msgid "Easy as 1-2-3:"
38
- msgstr ""
39
-
40
- msgid "Go to WPGlobus admin menu and choose the countries / languages;"
41
- msgstr ""
42
-
43
- msgid "Enter the translations to the posts, pages, categories, tags and menus using a clean and simple interface."
44
- msgstr ""
45
-
46
- msgid "Switch languages at the front-end using a drop-down menu with language names and country flags."
47
- msgstr ""
48
-
49
- msgid "Links:"
50
- msgstr ""
51
-
52
- msgid "FAQs"
53
- msgstr ""
54
-
55
- msgid "Contact Us"
56
- msgstr ""
57
-
58
- msgid "Please give us 5 stars!"
59
- msgstr ""
60
-
61
- msgid "WPGlobus does not translate texts automatically!"
62
- msgstr ""
63
-
64
- msgid "There are many translation companies and individual translators who can help you write and proofread the texts."
65
- msgstr ""
66
-
67
- msgid "When you choose a translator, please look at their native language, country of residence, specialization and knowledge of WordPress."
68
- msgstr ""
69
-
70
- #. translators: %s are used to insert HTML link. Keep them in place.
71
- msgid "We are planning to maintain a %s list of translators %s on the WPGlobus website. This is not an endorsement, just a courtesy. Please contact them directly and let us know how did it work for you!"
72
- msgstr ""
73
-
74
- msgid "Important notes:"
75
- msgstr ""
76
-
77
- msgid "WPGlobus only supports the localization URLs in the form of <code>example.com/xx/page/</code>. We do not plan to support subdomains <code>xx.example.com</code> and language queries <code>example.com?lang=xx</code>."
78
- msgstr ""
79
-
80
- msgid "Some themes and plugins are <strong>not multilingual-ready</strong>."
81
- msgstr ""
82
-
83
- msgid "They might display some texts with no translation, or with all languages mixed together."
84
- msgstr ""
85
-
86
- #. translators: %s are used to insert HTML link. Keep them in place.
87
- msgid "Please contact the theme / plugin author. If they are unable to assist, consider %s hiring the WPGlobus Team %s to write a custom code for you."
88
- msgstr ""
89
-
90
- msgid "Language was set on your profile page"
91
- msgstr ""
92
-
93
- msgid "Add"
94
- msgstr ""
95
-
96
- msgid "Multilingual Everything!"
97
- msgstr ""
98
-
99
- msgid "WPGlobus is a family of WordPress plugins assisting you in making multilingual WordPress blogs and sites."
100
- msgstr ""
101
-
102
- msgid "Remove the WPGlobus settings (not recommended)"
103
- msgstr ""
104
-
105
- msgid "Clean-up Tool"
106
- msgstr ""
107
-
108
- msgid "Support"
109
- msgstr ""
110
-
111
- msgid "WARNING: this operation is non-reversible. It is strongly recommended that you backup your database before proceeding."
112
- msgstr ""
113
-
114
- msgid "This tool should be used only if you plan to completely uninstall WPGlobus. By running it, you will remove ALL translations you have entered to your post, pages, etc., keeping only the MAIN language texts. Please make sure that all entries have some content in the main language. Otherwise, you might end up with empty titles, no content, no excerpts, blank comments and so on."
115
- msgstr ""
116
-
117
- msgid "Make sure that your active theme does not have any code related to WPGlobus. Such code could be added by you or by a 3rd party developer. If that code runs without first verifying that WPGlobus is active, WordPress may die with a fatal error."
118
- msgstr ""
119
-
120
- #. translators: %1$s - language name, %2$s - language code. Do not remove.
121
- msgid "The main language is currently set to %1$s (%2$s). ALL TEXTS THAT ARE NOT IN %1$s WILL BE DELETED! To change the main language, please go to {{settings}}."
122
- msgstr ""
123
-
124
- msgid "You are about to clean the content of the following database tables:"
125
- msgstr ""
126
-
127
- msgid "The operations log"
128
- msgstr ""
129
-
130
- msgid "We are going to write a detailed log of all the database changes performed. It should help in the case you need to restore something important. The log will be written to the file:"
131
- msgstr ""
132
-
133
- msgid "Uncheck if you do not want to write the operations log (we recommend to keep it checked)"
134
- msgstr ""
135
-
136
- msgid "You have been warned..."
137
- msgstr ""
138
-
139
- msgid "Please confirm by checking the box below:"
140
- msgstr ""
141
-
142
- msgid "I have read and understood everything written on this page. I am aware that by using this tool I may loose some content of my website. I have made a database backup and know how to restore it if necessary. I am fully responsible for the results."
143
- msgstr ""
144
-
145
- msgid "YES, I CONFIRM"
146
- msgstr ""
147
-
148
- msgid "Process with the Clean-up"
149
- msgstr ""
150
-
151
- msgid "Default"
152
- msgstr ""
153
-
154
- msgid "Section"
155
- msgstr ""
156
-
157
- msgid "Show all sections"
158
- msgstr ""
159
-
160
- msgid "Save &amp; Reload"
161
- msgstr ""
162
-
163
- msgid "WPGlobus"
164
- msgstr ""
165
-
166
- msgid "You need to update WordPress to 4.5 or later to get Fields Settings section"
167
- msgstr ""
168
-
169
- msgid "Fields Settings"
170
- msgstr ""
171
-
172
- msgid "WPGlobus Settings"
173
- msgstr ""
174
-
175
- msgid "Help"
176
- msgstr ""
177
-
178
- msgid "Languages"
179
- msgstr ""
180
-
181
- msgid "Enabled Languages"
182
- msgstr ""
183
-
184
- msgid "These languages are currently enabled on your site."
185
- msgstr ""
186
-
187
- msgid "Choose a language you would like to enable."
188
- msgstr ""
189
-
190
- msgid "Press the [Save & Publish] button to confirm."
191
- msgstr ""
192
-
193
- #. translators: %1$s and %2$s - placeholders to insert HTML link around 'here'
194
- #. translators: %1$s and %2$s - placeholders to insert HTML link around 'here'.
195
- msgid "or Add new Language %1$s here %2$s"
196
- msgstr ""
197
-
198
- msgid "Add Languages"
199
- msgstr ""
200
-
201
- msgid "Language Selector Mode"
202
- msgstr ""
203
-
204
- msgid "Two-letter Code with flag (en, ru, it, etc.)"
205
- msgstr ""
206
-
207
- msgid "Full Name (English, Russian, Italian, etc.)"
208
- msgstr ""
209
-
210
- msgid "Full Name with flag (English, Russian, Italian, etc.)"
211
- msgstr ""
212
-
213
- msgid "Flags only"
214
- msgstr ""
215
-
216
- msgid "Choose the way language name and country flag are shown in the drop-down menu"
217
- msgstr ""
218
-
219
- msgid "select navigation menu"
220
- msgstr ""
221
-
222
- msgid "Language Selector Menu"
223
- msgstr ""
224
-
225
- msgid "Choose the navigation menu where the language selector will be shown"
226
- msgstr ""
227
-
228
- msgid "No menus have been created yet. Create some."
229
- msgstr ""
230
-
231
- msgid "\"All Pages\" menus Language selector"
232
- msgstr ""
233
-
234
- msgid "Adds language selector to the menus that automatically list all existing pages (using `wp_list_pages`)"
235
- msgstr ""
236
-
237
- msgid "Custom CSS"
238
- msgstr ""
239
-
240
- msgid "Here you can enter the CSS rules to adjust the language selector menu for your theme. Look at the examples in the `style-samples.css` file."
241
- msgstr ""
242
-
243
- msgid "Post types"
244
- msgstr ""
245
-
246
- msgid "Uncheck to disable WPGlobus"
247
- msgstr ""
248
-
249
- msgid "Redirect"
250
- msgstr ""
251
-
252
- msgid "Choose the language automatically, based on:"
253
- msgstr ""
254
-
255
- msgid "Preferred language set in the browser"
256
- msgstr ""
257
-
258
- msgid "When a user comes to the site for the first time, try to find the best matching language version of the page."
259
- msgstr ""
260
-
261
- msgid "Custom JS Code"
262
- msgstr ""
263
-
264
- msgid "Title"
265
- msgstr ""
266
-
267
- msgid "(Paste your JS code here.)"
268
- msgstr ""
269
-
270
- msgid "To add a Custom JS Code in Customizer, you need to upgrade WordPress to version 4.9 or later."
271
- msgstr ""
272
-
273
- msgid "With your version of WordPress, please use the"
274
- msgstr ""
275
-
276
- msgid "WPGlobus Settings page"
277
- msgstr ""
278
-
279
- msgid "Label"
280
- msgstr ""
281
-
282
- msgid "Description"
283
- msgstr ""
284
-
285
- msgid "Here you can specify which fields should be considered multilingual by WPGlobus. To exclude a field, uncheck it and then press the button %s below."
286
- msgstr ""
287
-
288
- msgid "Thank you for installing WPGlobus!"
289
- msgstr ""
290
-
291
- msgid "Read About WPGlobus"
292
- msgstr ""
293
-
294
- msgid "Click the <strong>[Languages]</strong> tab at the left to setup the options."
295
- msgstr ""
296
-
297
- msgid "Should you have any questions or comments, please do not hesitate to contact us."
298
- msgstr ""
299
-
300
- msgid "Sincerely Yours,"
301
- msgstr ""
302
-
303
- msgid "The WPGlobus Team"
304
- msgstr ""
305
-
306
- #. translators: %?$s: HTML codes for hyperlink. Do not remove.
307
- #. translators: %?$s: HTML codes for hyperlink. Do not remove.
308
- msgid "We would hate to see you go. If something goes wrong, do not uninstall WPGlobus yet. Please %1$stalk to us%2$s and let us help!"
309
- msgstr ""
310
-
311
- msgid "Please note that if you deactivate WPGlobus, your site will show all the languages together, mixed up. You will need to remove all translations, keeping only one language."
312
- msgstr ""
313
-
314
- #. translators: %s: link to the Clean-up Tool
315
- #. translators: %s: link to the Clean-up Tool.
316
- msgid "If there are just a few places, you should edit them manually. To automatically remove all translations at once, you can use the %s. WARNING: The clean-up operation is irreversible, so use it only if you need to completely uninstall WPGlobus."
317
- msgstr ""
318
-
319
- #. translators: %?$s: HTML codes for hyperlink. Do not remove.
320
- #. translators: %?$s: HTML codes for hyperlink. Do not remove.
321
- msgid "%1$sClean-up Tool%2$s"
322
- msgstr ""
323
-
324
- #. translators: %s: name of current theme
325
- msgid "Sorry, WPGlobus customizer doesn't support current theme %s."
326
- msgstr ""
327
-
328
- #. translators: %?$s: HTML codes for hyperlink. Do not remove.
329
- msgid "Please use %1$sWPGlobus options page%2$s instead."
330
- msgstr ""
331
-
332
- msgid "Expand/Shrink"
333
- msgstr ""
334
-
335
- msgid "WPGlobus News"
336
- msgstr ""
337
-
338
- msgid "Options updated"
339
- msgstr ""
340
-
341
- msgid "Please enter a language code!"
342
- msgstr ""
343
-
344
- msgid "Language code already exists!"
345
- msgstr ""
346
-
347
- msgid "Please specify the language flag!"
348
- msgstr ""
349
-
350
- msgid "Please enter the language name!"
351
- msgstr ""
352
-
353
- msgid "Please enter the language name in English!"
354
- msgstr ""
355
-
356
- msgid "Please enter the locale!"
357
- msgstr ""
358
-
359
- msgid "Add Language"
360
- msgstr ""
361
-
362
- msgid "Delete Language"
363
- msgstr ""
364
-
365
- msgid "Edit Language"
366
- msgstr ""
367
-
368
- msgid "Language Code"
369
- msgstr ""
370
-
371
- msgid "2-Letter ISO Language Code for the Language you want to insert. (Example: en)"
372
- msgstr ""
373
-
374
- msgid "Language flag"
375
- msgstr ""
376
-
377
- msgid "Name"
378
- msgstr ""
379
-
380
- msgid "The name of the language in its native alphabet. (Examples: English, Русский)"
381
- msgstr ""
382
-
383
- msgid "Name in English"
384
- msgstr ""
385
-
386
- msgid "The name of the language in English"
387
- msgstr ""
388
-
389
- msgid "Locale"
390
- msgstr ""
391
-
392
- msgid "PHP/WordPress Locale of the language. (Examples: en_US, ru_RU)"
393
- msgstr ""
394
-
395
- msgid "Are you sure you want to delete?"
396
- msgstr ""
397
-
398
- msgid "Save Changes"
399
- msgstr ""
400
-
401
- msgid "Back to the WPGlobus Settings"
402
- msgstr ""
403
-
404
- msgid "Current Version"
405
- msgstr ""
406
-
407
- msgid "Premium add-on"
408
- msgstr ""
409
-
410
- msgid "Installed"
411
- msgstr ""
412
-
413
- msgid "Get it now!"
414
- msgstr ""
415
-
416
- #. translators: placeholders are for the HTML tags.
417
- msgid "If you have already purchased a WPGlobus premium extension, please read %1$sthe installation instructions here%2$s"
418
- msgstr ""
419
-
420
- msgid "Help Desk"
421
- msgstr ""
422
-
423
- msgid "Email not sent. Please fill in the entire form."
424
- msgstr ""
425
-
426
- msgid "Email not sent. Please verify that your name and email are entered correctly."
427
- msgstr ""
428
-
429
- msgid "Email sent."
430
- msgstr ""
431
-
432
- msgid "Thank you for using WPGlobus!"
433
- msgstr ""
434
-
435
- msgid "Our Support Team is here to answer your questions or concerns."
436
- msgstr ""
437
-
438
- msgid "To help us serve you better:"
439
- msgstr ""
440
-
441
- msgid "Please check if the problem persists if you switch to a standard WordPress theme."
442
- msgstr ""
443
-
444
- msgid "Try deactivating other plugins to see if any of them conflicts with WPGlobus."
445
- msgstr ""
446
-
447
- msgid "Please fill in and submit the contact form:"
448
- msgstr ""
449
-
450
- msgid "Please make sure the email address is correct."
451
- msgstr ""
452
-
453
- msgid "Subject"
454
- msgstr ""
455
-
456
- msgid "Short description of the problem"
457
- msgstr ""
458
-
459
- msgid "Detailed description"
460
- msgstr ""
461
-
462
- msgid "Technical Information"
463
- msgstr ""
464
-
465
- msgid "This information helps us to find the problem source"
466
- msgstr ""
467
-
468
- msgid "Alternatively, please email %s. Do not forget to copy and paste the technical information to your email message."
469
- msgstr ""
470
-
471
- msgid "WPGlobus Recommends:"
472
- msgstr ""
473
-
474
- msgid "WPGlobus for WooCommerce"
475
- msgstr ""
476
-
477
- msgid "Translate product titles and descriptions, product categories, tags and attributes."
478
- msgstr ""
479
-
480
- msgid "Get it now:"
481
- msgstr ""
482
-
483
- msgid "WooCommerce Multi-Currency"
484
- msgstr ""
485
-
486
- msgid "Accept multiple currencies in your online store!"
487
- msgstr ""
488
-
489
- msgid "Check it out:"
490
- msgstr ""
491
-
492
- msgid "To translate permalinks, please activate the module Slug."
493
- msgstr ""
494
-
495
- msgid "Translate permalinks with our premium add-on, WPGlobus Plus!"
496
- msgstr ""
497
-
498
- #. translators: %1$s - this plugin name. %2$s - the required PHP version.
499
- msgid "For %1$s to work correctly, PHP version %2$s or later is required."
500
- msgstr ""
501
-
502
- #. translators: %3$s - the current PHP version.
503
- msgid "The PHP version on your server is %3$s."
504
- msgstr ""
505
-
506
- #. translators: %1$s - this plugin name. %2$s - the required WordPress version.
507
- msgid "For %1$s to work correctly, WordPress version %2$s or later is required."
508
- msgstr ""
509
-
510
- msgid "Save draft before using extra language."
511
- msgstr ""
512
-
513
- msgid "Builder"
514
- msgstr ""
515
-
516
- msgid "Сompatibility Settings"
517
- msgstr ""
518
-
519
- #. translators: ON/OFF status of WPGlobus on the edit pages.
520
- #. translators: ON/OFF status of WPGlobus on the edit pages.
521
- msgid "ON"
522
- msgstr ""
523
-
524
- msgid "Turn off"
525
- msgstr ""
526
-
527
- msgid "OFF"
528
- msgstr ""
529
-
530
- msgid "Turn on"
531
- msgstr ""
532
-
533
- msgid "Elementor"
534
- msgstr ""
535
-
536
- msgid "WPGlobus languages"
537
- msgstr ""
538
-
539
- msgid "current"
540
- msgstr ""
541
-
542
- msgid "WPGlobus provides multilingual support for Elementor only when the option %1$s%2$s%3$s is set to %4$s."
543
- msgstr ""
544
-
545
- msgid "Before switching the language, please save draft or publish."
546
- msgstr ""
547
-
548
- #. translators: Metabox title FOR language.
549
- msgctxt "filter__seo_meta_box_title"
550
- msgid "for"
551
- msgstr ""
552
-
553
- msgid "Page is being reloaded. Please wait..."
554
- msgstr ""
555
-
556
- msgid "Before switching the language, please save draft or publish, then reload page."
557
- msgstr ""
558
-
559
- msgid "WPGlobus provides multilingual support for Elementor only when the option `CSS Print Method` is set to `External File`."
560
- msgstr ""
561
-
562
- msgid "Open Elementor Settings page"
563
- msgstr ""
564
-
565
- msgid "WPGlobus widget"
566
- msgstr ""
567
-
568
- msgid "Add language switcher"
569
- msgstr ""
570
-
571
- msgid "Flags"
572
- msgstr ""
573
-
574
- msgid "List"
575
- msgstr ""
576
-
577
- msgid "List with flags"
578
- msgstr ""
579
-
580
- msgid "Select"
581
- msgstr ""
582
-
583
- msgid "Select with language code"
584
- msgstr ""
585
-
586
- msgid "Dropdown"
587
- msgstr ""
588
-
589
- msgid "Dropdown with flags"
590
- msgstr ""
591
-
592
- msgid "Selector type"
593
- msgstr ""
594
-
595
- msgid "You cannot disable the main language."
596
- msgstr ""
597
-
598
- msgid "Need a multilingual slug?"
599
- msgstr ""
600
-
601
- msgid "*) Available after the menu is saved."
602
- msgstr ""
603
-
604
- #. translators: %s are for A tags.
605
- msgid "To have the %1$sImage%2$s widget varying by language,"
606
- msgstr ""
607
-
608
- #. translators: %s are for A tags.
609
- msgid "please use the %1$sWPGlobus language widgets%2$s add-on"
610
- msgstr ""
611
-
612
- msgid "You must enable Pretty Permalinks to use WPGlobus."
613
- msgstr ""
614
-
615
- msgid "Please go to Settings > Permalinks > Common Settings and choose a non-default option."
616
- msgstr ""
617
-
618
- msgid "Language Selector Menu Style"
619
- msgstr ""
620
-
621
- msgid "WPGlobus Plus"
622
- msgstr ""
623
-
624
- msgid "Drop-down languages menu or Flat (in one line)"
625
- msgstr ""
626
-
627
- msgid "Do not change"
628
- msgstr ""
629
-
630
- msgid "Drop-down (vertical)"
631
- msgstr ""
632
-
633
- msgid "Flat (horizontal)"
634
- msgstr ""
635
-
636
- msgid "If you see this message then your browser may not display the WPGlobus Settings panel properly. Please try another browser."
637
- msgstr ""
638
-
639
- msgid "Сompatibility"
640
- msgstr ""
641
-
642
- #. translators: placeholders for "strong" tags.
643
- msgid "Click the %1$s[Languages]%2$s tab at the left to setup the options."
644
- msgstr ""
645
-
646
- #. translators: placeholders for "strong" tags.
647
- msgid "Use the %1$s[Languages Table]%2$s section to add a new language or to edit the language attributes: name, code, flag icon, etc."
648
- msgstr ""
649
-
650
- msgid "Important notes"
651
- msgstr ""
652
-
653
- #. translators: placeholders for "strong" tags.
654
- msgid "Version %1$s1.9.17%2$s "
655
- msgstr ""
656
-
657
- #. translators: placeholders for "strong" tags.
658
- msgid "Starting from this version, %1$sWPGlobus%2$s operates in two modes"
659
- msgstr ""
660
-
661
- #. translators: placeholders for "strong" tags; compatibility tab link.
662
- msgid "%1$sBuilder mode%2$s: WPGlobus turns this mode on automatically when it discovers any of the plugins/add-ons listed on the %1$s[%3$s]%2$s tab."
663
- msgstr ""
664
-
665
- #. translators: placeholders for "strong" tags; compatibility tab link.
666
- msgid "%1$sStandard/Classic mode%2$s: is used when there are no plugins `Builder` or if you explicitly turned off builder support on the %1$s[%3$s]%2$s tab."
667
- msgstr ""
668
-
669
- #. translators: placeholders for "strong" tags.
670
- msgid "Version %1$s2.2.11%2$s "
671
- msgstr ""
672
-
673
- msgid "Starting from this version"
674
- msgstr ""
675
-
676
- #. translators: placeholders for "strong" tags.
677
- msgid "The %1$sBuilder mode%2$s is turned OFF by default for all custom post types (CPT)."
678
- msgstr ""
679
-
680
- #. translators: placeholders for "strong" tags.
681
- msgid "To turn on the %1$sBuilder mode%2$s for specific post types, please visit the %1$s[%3$s]%2$s tab."
682
- msgstr ""
683
-
684
- msgid "Welcome!"
685
- msgstr ""
686
-
687
- msgid "Deactivating / Uninstalling"
688
- msgstr ""
689
-
690
- msgid "Uninstall"
691
- msgstr ""
692
-
693
- msgid "All add-ons"
694
- msgstr ""
695
-
696
- msgid "Mobile Menu"
697
- msgstr ""
698
-
699
- msgid "Language Widgets"
700
- msgstr ""
701
-
702
- msgid "We Recommend..."
703
- msgstr ""
704
-
705
- msgid "Our premium add-on, WPGlobus Plus, will add several features to your website, such as:"
706
- msgstr ""
707
-
708
- msgid "- Ability to write a post in one language and immediately publish it, not waiting for the translation to other languages;"
709
- msgstr ""
710
-
711
- msgid "- Set different URLs for each translation;"
712
- msgstr ""
713
-
714
- msgid "- In Yoast SEO, set the focus keyword and do the Page Analysis separately for each translation;"
715
- msgstr ""
716
-
717
- msgid "- and more..."
718
- msgstr ""
719
-
720
- msgid "Click here to download"
721
- msgstr ""
722
-
723
- msgid "Thanks for installing WPGlobus! Now you have a multilingual website and can translate your blog posts and pages to many languages."
724
- msgstr ""
725
-
726
- msgid "The next step is to translate your WooCommerce-based store!"
727
- msgstr ""
728
-
729
- msgid "With the WPGlobus for WooCommerce premium add-on, you will be able to translate product titles and descriptions, categories, tags and attributes."
730
- msgstr ""
731
-
732
- msgid "Multi-currency"
733
- msgstr ""
734
-
735
- msgid "Your WooCommerce-powered store is set to show prices and accept payments in a single currency only."
736
- msgstr ""
737
-
738
- msgid "With WPGlobus, you can add multiple currencies to your store and charge UK customers in Pounds, US customers in Dollars, Spanish clients in Euros, etc. Accepting multiple currencies will strengthen your competitive edge and positioning for global growth!"
739
- msgstr ""
740
-
741
- msgid "The WPGlobus Multi-Currency premium add-on provides switching currencies and re-calculating prices on-the-fly."
742
- msgstr ""
743
-
744
- msgid "WPGlobus Premium Add-ons"
745
- msgstr ""
746
-
747
- msgid "We have written several Premium add-ons for WPGlobus. With those add-ons, you will be able to:"
748
- msgstr ""
749
-
750
- msgid "<strong>Translate URLs</strong> (/my-page/ translates to /fr/ma-page, /ru/моя-страница and so on);"
751
- msgstr ""
752
-
753
- msgid "Postpone translation to some languages and <strong>publish only the translated texts</strong>;"
754
- msgstr ""
755
-
756
- msgid "Maintain <strong>separate menus and widgets for each language</strong>;"
757
- msgstr ""
758
-
759
- msgid "<strong>Translate WooCommerce</strong> products and taxonomies;"
760
- msgstr ""
761
-
762
- msgid "Enter separate focus keywords for each language in the <strong>Yoast SEO</strong>;"
763
- msgstr ""
764
-
765
- msgid "...and more."
766
- msgstr ""
767
-
768
- msgid "Click here to visit the WPGlobus Store"
769
- msgstr ""
770
-
771
- msgid "Select a language"
772
- msgstr ""
773
-
774
- #. translators: %3$s placeholder for the icon (actual picture).
775
- msgid "Place the %1$smain language%2$s of your site at the top of the list by dragging the %3$s icons."
776
- msgstr ""
777
-
778
- #. translators: placeholders for the "strong" HTML tags.
779
- msgid "%1$sUncheck%2$s the languages you do not plan to use."
780
- msgstr ""
781
-
782
- #. translators: placeholders for the "strong" HTML tags.
783
- msgid "%1$sAdd%2$s more languages using the section below."
784
- msgstr ""
785
-
786
- msgid "When done, click the [Save Changes] button."
787
- msgstr ""
788
-
789
- #. translators: %s - placeholder for the "Save Changes" button text.
790
- msgid "Press the %s button to confirm."
791
- msgstr ""
792
-
793
- #. translators: dropdown option meaning that none of the navigation menus should show the language selector.
794
- msgid "-- none --"
795
- msgstr ""
796
-
797
- msgid "All menus"
798
- msgstr ""
799
-
800
- msgid "Instructions:"
801
- msgstr ""
802
-
803
- msgid "(Found in some themes)"
804
- msgstr ""
805
-
806
- msgid "Enable"
807
- msgstr ""
808
-
809
- msgid "Languages table"
810
- msgstr ""
811
-
812
- msgid "Use this table to add, edit or delete languages."
813
- msgstr ""
814
-
815
- msgid "NOTE: you cannot remove the main language."
816
- msgstr ""
817
-
818
- msgid "WPGlobus is enabled on these Post Types"
819
- msgstr ""
820
-
821
- msgid "Uncheck to disable"
822
- msgstr ""
823
-
824
- msgid "Please note that there are post types, which status is managed by other plugins and cannot be changed here."
825
- msgstr ""
826
-
827
- msgid "Post Types"
828
- msgstr ""
829
-
830
- msgid "You should put here only the code provided by WPGlobus Support. Do not write anything else in the sections below as it might break the functionality of your website!"
831
- msgstr ""
832
-
833
- msgid "Custom Code"
834
- msgstr ""
835
-
836
- msgid "Enabled"
837
- msgstr ""
838
-
839
- msgid "Builders support"
840
- msgstr ""
841
-
842
- msgid "Builder mode is enabled on these Post Types"
843
- msgstr ""
844
-
845
- msgid "Old fashioned language switcher"
846
- msgstr ""
847
-
848
- msgid "Block Editor"
849
- msgstr ""
850
-
851
- msgid "Block Editor Options"
852
- msgstr ""
853
-
854
- msgid "With the current settings, you will see the following lines in the section HEAD of your site pages"
855
- msgstr ""
856
-
857
- msgid "(example for two languages)"
858
- msgstr ""
859
-
860
- msgid "Tell search engines about localized versions of your pages using the hreflang tag"
861
- msgstr ""
862
-
863
- msgid "Output the hreflang tag as"
864
- msgstr ""
865
-
866
- msgid "Language- and region-specific (en-US, ru-RU, etc.)"
867
- msgstr ""
868
-
869
- msgid "Language- and region-specific (en-us, ru-ru, etc.)"
870
- msgstr ""
871
-
872
- msgid "Language code only (en, ru, etc.)"
873
- msgstr ""
874
-
875
- msgid "Use the code `x-default` for the main language"
876
- msgstr ""
877
-
878
- msgid "Multilingual SEO"
879
- msgstr ""
880
-
881
- msgid "Multilingual SEO Options"
882
- msgstr ""
883
-
884
- msgid "With WPGlobus, you can get translations for posts and pages using REST API."
885
- msgstr ""
886
-
887
- msgid "Go to %1$s%2$s%3$s to see the content in language: %4$s."
888
- msgstr ""
889
-
890
- msgid "For demonstration, you can try the first post that WordPress creates at the initial installation."
891
- msgstr ""
892
-
893
- msgid "Please read the %1$sWordPress REST API documentation%2$s for more information."
894
- msgstr ""
895
-
896
- msgid "In the REST API response, you can find the %1$stranslation%2$s field, which shows whether translations exist for the fields %1$stitle%2$s, %1$scontent%2$s and %1$sexcerpt%2$s or not, for each language. See the screenshot below:"
897
- msgstr ""
898
-
899
- msgid "Description:"
900
- msgstr ""
901
-
902
- msgid "REST API"
903
- msgstr ""
904
-
905
- msgid "Translate strings"
906
- msgstr ""
907
-
908
- msgid "item"
909
- msgstr ""
910
-
911
- msgid "items"
912
- msgstr ""
913
-
914
- msgid "Code"
915
- msgstr ""
916
-
917
- msgid "Edit"
918
- msgstr ""
919
-
920
- msgid "Delete"
921
- msgstr ""
922
-
923
- msgid "File"
924
- msgstr ""
925
-
926
- msgid "Flag"
927
- msgstr ""
928
-
929
- msgid "Language name"
930
- msgstr ""
931
-
932
- msgid "English language name"
933
- msgstr ""
934
-
935
- msgid "No items found"
936
- msgstr ""
937
-
938
- msgid "Add new Language"
939
- msgstr ""
940
-
941
- msgid "No items of this type were found."
942
- msgstr ""
943
-
944
- msgid "Select an item"
945
- msgstr ""
946
-
947
- msgid "Multilingual support of this add-on is currently in Beta stage."
948
- msgstr ""
949
-
950
- msgid "We do not recommend using it on production sites."
951
- msgstr ""
952
-
953
- msgid "Please report all problems to %1$sWPGlobus Technical Support%2$s."
954
- msgstr ""
955
-
956
- msgid "WordPress version"
957
- msgstr ""
958
-
959
- msgid "In the WordPress core"
960
- msgstr ""
961
-
962
- msgid "Core"
963
- msgstr ""
964
-
965
- msgid "Current version"
966
- msgstr ""
967
-
968
- msgid "Stage"
969
- msgstr ""
970
-
971
- msgid "Status"
972
- msgstr ""
973
-
974
- msgid "Block editor"
975
- msgstr ""
976
-
977
- msgid "production"
978
- msgstr ""
979
-
980
- msgid "List of supported add-ons"
981
- msgstr ""
982
-
983
- msgid "Add-on"
984
- msgstr ""
985
-
986
- msgid "Supported minimum version"
987
- msgstr ""
988
-
989
- msgid "Not installed"
990
- msgstr ""
991
-
992
- msgid "Installed, inactive"
993
- msgstr ""
994
-
995
- msgid "Active"
996
- msgstr ""
997
-
998
- msgid "WPGlobus Customizer is integrated into the Customize Theme panel"
999
- msgstr ""
1000
-
1001
- msgid "However, some themes do not follow all WordPress standards strictly."
1002
- msgstr ""
1003
-
1004
- msgid "WPGlobus Customizer may behave incorrectly with those themes."
1005
- msgstr ""
1006
-
1007
- msgid "To avoid conflicts, you can switch the WPGlobus Customizer off:"
1008
- msgstr ""
1009
-
1010
- msgid "Below is the list of themes that do not support the WPGlobus Customizer. With those themes, WPGlobus Customizer is switched off by default"
1011
- msgstr ""
1012
-
1013
- msgid "The currently active theme is"
1014
- msgstr ""
1015
-
1016
- msgid "In the current version, WPGlobus Customizer does not support"
1017
- msgstr ""
1018
-
1019
- msgid "translation of the navigation menus"
1020
- msgstr ""
1021
-
1022
- msgid "to translate, please go to"
1023
- msgstr ""
1024
-
1025
- msgid "Go to Customizer"
1026
- msgstr ""
1027
-
1028
- msgid "is undefined"
1029
- msgstr ""
1030
-
1031
- msgid "is set to"
1032
- msgstr ""
1033
-
1034
- msgid "by adding to the file wp-config.php"
1035
- msgstr ""
1036
-
1037
- msgid "now"
1038
- msgstr ""
1039
-
1040
- msgid "We rely on your support!"
1041
- msgstr ""
1042
-
1043
- msgid "Please consider a small donation to support the future development."
1044
- msgstr ""
1045
-
1046
- msgid "Thank you!"
1047
- msgstr ""
1048
-
1049
- msgid "WPGlobus Plus!"
1050
- msgstr ""
1051
-
1052
- msgid "Advanced features and tweaks: URL translation, multilingual SEO analysis, separate publishing and more! "
1053
- msgstr ""
1054
-
1055
- msgid "Get WPGlobus Plus now!"
1056
- msgstr ""
1057
-
1058
- msgid "Bulk editing of the multilingual titles and descriptions is not supported by the current version."
1059
- msgstr ""
1060
-
1061
- msgid "Therefore, to avoid any data loss, we do not recommend using this."
1062
- msgstr ""
1063
-
1064
- msgid "WPGlobus warning: "
1065
- msgstr ""
1066
-
1067
- msgid "https://github.com/WPGlobus/WPGlobus"
1068
- msgstr ""
1069
-
1070
- msgid "A WordPress Globalization / Multilingual Plugin. Posts, pages, menus, widgets and even custom fields - in multiple languages!"
1071
- msgstr ""
1072
-
1073
- msgid "https://wpglobus.com/"
1074
- msgstr ""
1
+ # Copyright (C) 2021 WPGlobus 2.6.1
2
+ # This file is distributed under the same license as the WPGlobus 2.6.1 package.
3
+ msgid ""
4
+ msgstr ""
5
+ "Project-Id-Version: WPGlobus 2.6.1\n"
6
+ "MIME-Version: 1.0\n"
7
+ "Content-Type: text/plain; charset=UTF-8\n"
8
+ "Content-Transfer-Encoding: 8bit\n"
9
+ "Last-Translator: The WPGlobus Team <support@wpglobus.com>\n"
10
+ "Report-Msgid-Bugs-To: support@wpglobus.com\n"
11
+ "Plural-Forms: nplurals=2; plural=(n != 1);\n"
12
+
13
+ msgid "Guide"
14
+ msgstr ""
15
+
16
+ msgid "WPGlobus Help Desk"
17
+ msgstr ""
18
+
19
+ msgid "Add-ons"
20
+ msgstr ""
21
+
22
+ msgid "Quick Start"
23
+ msgstr ""
24
+
25
+ msgid "FAQ"
26
+ msgstr ""
27
+
28
+ msgid "Attention: the Multibyte String PHP extension (`mbstring`) is not loaded!"
29
+ msgstr ""
30
+
31
+ msgid "The mbstring extension is required for the full UTF-8 compatibility and better performance. Without it, some parts of WordPress and WPGlobus may function incorrectly. Please contact your hosting company or systems administrator."
32
+ msgstr ""
33
+
34
+ msgid "Go to WPGlobus Settings"
35
+ msgstr ""
36
+
37
+ msgid "Easy as 1-2-3:"
38
+ msgstr ""
39
+
40
+ msgid "Go to WPGlobus admin menu and choose the countries / languages;"
41
+ msgstr ""
42
+
43
+ msgid "Enter the translations to the posts, pages, categories, tags and menus using a clean and simple interface."
44
+ msgstr ""
45
+
46
+ msgid "Switch languages at the front-end using a drop-down menu with language names and country flags."
47
+ msgstr ""
48
+
49
+ msgid "Links:"
50
+ msgstr ""
51
+
52
+ msgid "FAQs"
53
+ msgstr ""
54
+
55
+ msgid "Contact Us"
56
+ msgstr ""
57
+
58
+ msgid "Please give us 5 stars!"
59
+ msgstr ""
60
+
61
+ msgid "WPGlobus does not translate texts automatically!"
62
+ msgstr ""
63
+
64
+ msgid "There are many translation companies and individual translators who can help you write and proofread the texts."
65
+ msgstr ""
66
+
67
+ msgid "When you choose a translator, please look at their native language, country of residence, specialization and knowledge of WordPress."
68
+ msgstr ""
69
+
70
+ #. translators: %s are used to insert HTML link. Keep them in place.
71
+ msgid "We are planning to maintain a %s list of translators %s on the WPGlobus website. This is not an endorsement, just a courtesy. Please contact them directly and let us know how did it work for you!"
72
+ msgstr ""
73
+
74
+ msgid "Important notes:"
75
+ msgstr ""
76
+
77
+ msgid "WPGlobus only supports the localization URLs in the form of <code>example.com/xx/page/</code>. We do not plan to support subdomains <code>xx.example.com</code> and language queries <code>example.com?lang=xx</code>."
78
+ msgstr ""
79
+
80
+ msgid "Some themes and plugins are <strong>not multilingual-ready</strong>."
81
+ msgstr ""
82
+
83
+ msgid "They might display some texts with no translation, or with all languages mixed together."
84
+ msgstr ""
85
+
86
+ #. translators: %s are used to insert HTML link. Keep them in place.
87
+ msgid "Please contact the theme / plugin author. If they are unable to assist, consider %s hiring the WPGlobus Team %s to write a custom code for you."
88
+ msgstr ""
89
+
90
+ msgid "Language was set on your profile page"
91
+ msgstr ""
92
+
93
+ msgid "Add"
94
+ msgstr ""
95
+
96
+ msgid "Multilingual Everything!"
97
+ msgstr ""
98
+
99
+ msgid "WPGlobus is a family of WordPress plugins assisting you in making multilingual WordPress blogs and sites."
100
+ msgstr ""
101
+
102
+ msgid "Remove the WPGlobus settings (not recommended)"
103
+ msgstr ""
104
+
105
+ msgid "Clean-up Tool"
106
+ msgstr ""
107
+
108
+ msgid "Support"
109
+ msgstr ""
110
+
111
+ msgid "WARNING: this operation is non-reversible. It is strongly recommended that you backup your database before proceeding."
112
+ msgstr ""
113
+
114
+ msgid "This tool should be used only if you plan to completely uninstall WPGlobus. By running it, you will remove ALL translations you have entered to your post, pages, etc., keeping only the MAIN language texts. Please make sure that all entries have some content in the main language. Otherwise, you might end up with empty titles, no content, no excerpts, blank comments and so on."
115
+ msgstr ""
116
+
117
+ msgid "Make sure that your active theme does not have any code related to WPGlobus. Such code could be added by you or by a 3rd party developer. If that code runs without first verifying that WPGlobus is active, WordPress may die with a fatal error."
118
+ msgstr ""
119
+
120
+ #. translators: %1$s - language name, %2$s - language code. Do not remove.
121
+ msgid "The main language is currently set to %1$s (%2$s). ALL TEXTS THAT ARE NOT IN %1$s WILL BE DELETED! To change the main language, please go to {{settings}}."
122
+ msgstr ""
123
+
124
+ msgid "You are about to clean the content of the following database tables:"
125
+ msgstr ""
126
+
127
+ msgid "The operations log"
128
+ msgstr ""
129
+
130
+ msgid "We are going to write a detailed log of all the database changes performed. It should help in the case you need to restore something important. The log will be written to the file:"
131
+ msgstr ""
132
+
133
+ msgid "Uncheck if you do not want to write the operations log (we recommend to keep it checked)"
134
+ msgstr ""
135
+
136
+ msgid "You have been warned..."
137
+ msgstr ""
138
+
139
+ msgid "Please confirm by checking the box below:"
140
+ msgstr ""
141
+
142
+ msgid "I have read and understood everything written on this page. I am aware that by using this tool I may loose some content of my website. I have made a database backup and know how to restore it if necessary. I am fully responsible for the results."
143
+ msgstr ""
144
+
145
+ msgid "YES, I CONFIRM"
146
+ msgstr ""
147
+
148
+ msgid "Process with the Clean-up"
149
+ msgstr ""
150
+
151
+ msgid "Default"
152
+ msgstr ""
153
+
154
+ msgid "Section"
155
+ msgstr ""
156
+
157
+ msgid "Show all sections"
158
+ msgstr ""
159
+
160
+ msgid "Save &amp; Reload"
161
+ msgstr ""
162
+
163
+ msgid "WPGlobus"
164
+ msgstr ""
165
+
166
+ msgid "You need to update WordPress to 4.5 or later to get Fields Settings section"
167
+ msgstr ""
168
+
169
+ msgid "Fields Settings"
170
+ msgstr ""
171
+
172
+ msgid "WPGlobus Settings"
173
+ msgstr ""
174
+
175
+ msgid "Help"
176
+ msgstr ""
177
+
178
+ msgid "Languages"
179
+ msgstr ""
180
+
181
+ msgid "Enabled Languages"
182
+ msgstr ""
183
+
184
+ msgid "These languages are currently enabled on your site."
185
+ msgstr ""
186
+
187
+ msgid "Choose a language you would like to enable."
188
+ msgstr ""
189
+
190
+ msgid "Press the [Save & Publish] button to confirm."
191
+ msgstr ""
192
+
193
+ #. translators: %1$s and %2$s - placeholders to insert HTML link around 'here'
194
+ #. translators: %1$s and %2$s - placeholders to insert HTML link around 'here'.
195
+ msgid "or Add new Language %1$s here %2$s"
196
+ msgstr ""
197
+
198
+ msgid "Add Languages"
199
+ msgstr ""
200
+
201
+ msgid "Language Selector Mode"
202
+ msgstr ""
203
+
204
+ msgid "Two-letter Code with flag (en, ru, it, etc.)"
205
+ msgstr ""
206
+
207
+ msgid "Full Name (English, Russian, Italian, etc.)"
208
+ msgstr ""
209
+
210
+ msgid "Full Name with flag (English, Russian, Italian, etc.)"
211
+ msgstr ""
212
+
213
+ msgid "Flags only"
214
+ msgstr ""
215
+
216
+ msgid "Choose the way language name and country flag are shown in the drop-down menu"
217
+ msgstr ""
218
+
219
+ msgid "select navigation menu"
220
+ msgstr ""
221
+
222
+ msgid "Language Selector Menu"
223
+ msgstr ""
224
+
225
+ msgid "Choose the navigation menu where the language selector will be shown"
226
+ msgstr ""
227
+
228
+ msgid "No menus have been created yet. Create some."
229
+ msgstr ""
230
+
231
+ msgid "\"All Pages\" menus Language selector"
232
+ msgstr ""
233
+
234
+ msgid "Adds language selector to the menus that automatically list all existing pages (using `wp_list_pages`)"
235
+ msgstr ""
236
+
237
+ msgid "Custom CSS"
238
+ msgstr ""
239
+
240
+ msgid "Here you can enter the CSS rules to adjust the language selector menu for your theme. Look at the examples in the `style-samples.css` file."
241
+ msgstr ""
242
+
243
+ msgid "Post types"
244
+ msgstr ""
245
+
246
+ msgid "Uncheck to disable WPGlobus"
247
+ msgstr ""
248
+
249
+ msgid "Redirect"
250
+ msgstr ""
251
+
252
+ msgid "Choose the language automatically, based on:"
253
+ msgstr ""
254
+
255
+ msgid "Preferred language set in the browser"
256
+ msgstr ""
257
+
258
+ msgid "When a user comes to the site for the first time, try to find the best matching language version of the page."
259
+ msgstr ""
260
+
261
+ msgid "Custom JS Code"
262
+ msgstr ""
263
+
264
+ msgid "Title"
265
+ msgstr ""
266
+
267
+ msgid "(Paste your JS code here.)"
268
+ msgstr ""
269
+
270
+ msgid "To add a Custom JS Code in Customizer, you need to upgrade WordPress to version 4.9 or later."
271
+ msgstr ""
272
+
273
+ msgid "With your version of WordPress, please use the"
274
+ msgstr ""
275
+
276
+ msgid "WPGlobus Settings page"
277
+ msgstr ""
278
+
279
+ msgid "Label"
280
+ msgstr ""
281
+
282
+ msgid "Description"
283
+ msgstr ""
284
+
285
+ msgid "Here you can specify which fields should be considered multilingual by WPGlobus. To exclude a field, uncheck it and then press the button %s below."
286
+ msgstr ""
287
+
288
+ msgid "Thank you for installing WPGlobus!"
289
+ msgstr ""
290
+
291
+ msgid "Read About WPGlobus"
292
+ msgstr ""
293
+
294
+ msgid "Click the <strong>[Languages]</strong> tab at the left to setup the options."
295
+ msgstr ""
296
+
297
+ msgid "Should you have any questions or comments, please do not hesitate to contact us."
298
+ msgstr ""
299
+
300
+ msgid "Sincerely Yours,"
301
+ msgstr ""
302
+
303
+ msgid "The WPGlobus Team"
304
+ msgstr ""
305
+
306
+ #. translators: %?$s: HTML codes for hyperlink. Do not remove.
307
+ #. translators: %?$s: HTML codes for hyperlink. Do not remove.
308
+ msgid "We would hate to see you go. If something goes wrong, do not uninstall WPGlobus yet. Please %1$stalk to us%2$s and let us help!"
309
+ msgstr ""
310
+
311
+ msgid "Please note that if you deactivate WPGlobus, your site will show all the languages together, mixed up. You will need to remove all translations, keeping only one language."
312
+ msgstr ""
313
+
314
+ #. translators: %s: link to the Clean-up Tool
315
+ #. translators: %s: link to the Clean-up Tool.
316
+ msgid "If there are just a few places, you should edit them manually. To automatically remove all translations at once, you can use the %s. WARNING: The clean-up operation is irreversible, so use it only if you need to completely uninstall WPGlobus."
317
+ msgstr ""
318
+
319
+ #. translators: %?$s: HTML codes for hyperlink. Do not remove.
320
+ #. translators: %?$s: HTML codes for hyperlink. Do not remove.
321
+ msgid "%1$sClean-up Tool%2$s"
322
+ msgstr ""
323
+
324
+ #. translators: %s: name of current theme
325
+ msgid "Sorry, WPGlobus customizer doesn't support current theme %s."
326
+ msgstr ""
327
+
328
+ #. translators: %?$s: HTML codes for hyperlink. Do not remove.
329
+ msgid "Please use %1$sWPGlobus options page%2$s instead."
330
+ msgstr ""
331
+
332
+ msgid "Expand/Shrink"
333
+ msgstr ""
334
+
335
+ msgid "WPGlobus News"
336
+ msgstr ""
337
+
338
+ msgid "Options updated"
339
+ msgstr ""
340
+
341
+ msgid "Please enter a language code!"
342
+ msgstr ""
343
+
344
+ msgid "Language code already exists!"
345
+ msgstr ""
346
+
347
+ msgid "Please specify the language flag!"
348
+ msgstr ""
349
+
350
+ msgid "Please enter the language name!"
351
+ msgstr ""
352
+
353
+ msgid "Please enter the language name in English!"
354
+ msgstr ""
355
+
356
+ msgid "Please enter the locale!"
357
+ msgstr ""
358
+
359
+ msgid "Add Language"
360
+ msgstr ""
361
+
362
+ msgid "Delete Language"
363
+ msgstr ""
364
+
365
+ msgid "Edit Language"
366
+ msgstr ""
367
+
368
+ msgid "Language Code"
369
+ msgstr ""
370
+
371
+ msgid "2-Letter ISO Language Code for the Language you want to insert. (Example: en)"
372
+ msgstr ""
373
+
374
+ msgid "Language flag"
375
+ msgstr ""
376
+
377
+ msgid "Name"
378
+ msgstr ""
379
+
380
+ msgid "The name of the language in its native alphabet. (Examples: English, Русский)"
381
+ msgstr ""
382
+
383
+ msgid "Name in English"
384
+ msgstr ""
385
+
386
+ msgid "The name of the language in English"
387
+ msgstr ""
388
+
389
+ msgid "Locale"
390
+ msgstr ""
391
+
392
+ msgid "PHP/WordPress Locale of the language. (Examples: en_US, ru_RU)"
393
+ msgstr ""
394
+
395
+ msgid "Are you sure you want to delete?"
396
+ msgstr ""
397
+
398
+ msgid "Save Changes"
399
+ msgstr ""
400
+
401
+ msgid "Back to the WPGlobus Settings"
402
+ msgstr ""
403
+
404
+ msgid "Current Version"
405
+ msgstr ""
406
+
407
+ msgid "Premium add-on"
408
+ msgstr ""
409
+
410
+ msgid "Installed"
411
+ msgstr ""
412
+
413
+ msgid "Get it now!"
414
+ msgstr ""
415
+
416
+ #. translators: placeholders are for the HTML tags.
417
+ msgid "If you have already purchased a WPGlobus premium extension, please read %1$sthe installation instructions here%2$s"
418
+ msgstr ""
419
+
420
+ msgid "Help Desk"
421
+ msgstr ""
422
+
423
+ msgid "Email not sent. Please fill in the entire form."
424
+ msgstr ""
425
+
426
+ msgid "Email not sent. Please verify that your name and email are entered correctly."
427
+ msgstr ""
428
+
429
+ msgid "Email sent."
430
+ msgstr ""
431
+
432
+ msgid "Thank you for using WPGlobus!"
433
+ msgstr ""
434
+
435
+ msgid "Our Support Team is here to answer your questions or concerns."
436
+ msgstr ""
437
+
438
+ msgid "To help us serve you better:"
439
+ msgstr ""
440
+
441
+ msgid "Please check if the problem persists if you switch to a standard WordPress theme."
442
+ msgstr ""
443
+
444
+ msgid "Try deactivating other plugins to see if any of them conflicts with WPGlobus."
445
+ msgstr ""
446
+
447
+ msgid "Please fill in and submit the contact form:"
448
+ msgstr ""
449
+
450
+ msgid "Please make sure the email address is correct."
451
+ msgstr ""
452
+
453
+ msgid "Subject"
454
+ msgstr ""
455
+
456
+ msgid "Short description of the problem"
457
+ msgstr ""
458
+
459
+ msgid "Detailed description"
460
+ msgstr ""
461
+
462
+ msgid "Technical Information"
463
+ msgstr ""
464
+
465
+ msgid "This information helps us to find the problem source"
466
+ msgstr ""
467
+
468
+ msgid "Alternatively, please email %s. Do not forget to copy and paste the technical information to your email message."
469
+ msgstr ""
470
+
471
+ msgid "WPGlobus Recommends:"
472
+ msgstr ""
473
+
474
+ msgid "WPGlobus for WooCommerce"
475
+ msgstr ""
476
+
477
+ msgid "Translate product titles and descriptions, product categories, tags and attributes."
478
+ msgstr ""
479
+
480
+ msgid "Get it now:"
481
+ msgstr ""
482
+
483
+ msgid "WooCommerce Multi-Currency"
484
+ msgstr ""
485
+
486
+ msgid "Accept multiple currencies in your online store!"
487
+ msgstr ""
488
+
489
+ msgid "Check it out:"
490
+ msgstr ""
491
+
492
+ msgid "To translate permalinks, please activate the module Slug."
493
+ msgstr ""
494
+
495
+ msgid "Translate permalinks with our premium add-on, WPGlobus Plus!"
496
+ msgstr ""
497
+
498
+ #. translators: %1$s - this plugin name. %2$s - the required PHP version.
499
+ msgid "For %1$s to work correctly, PHP version %2$s or later is required."
500
+ msgstr ""
501
+
502
+ #. translators: %3$s - the current PHP version.
503
+ msgid "The PHP version on your server is %3$s."
504
+ msgstr ""
505
+
506
+ #. translators: %1$s - this plugin name. %2$s - the required WordPress version.
507
+ msgid "For %1$s to work correctly, WordPress version %2$s or later is required."
508
+ msgstr ""
509
+
510
+ msgid "Save draft before using extra language."
511
+ msgstr ""
512
+
513
+ msgid "Builder"
514
+ msgstr ""
515
+
516
+ msgid "Сompatibility Settings"
517
+ msgstr ""
518
+
519
+ #. translators: ON/OFF status of WPGlobus on the edit pages.
520
+ #. translators: ON/OFF status of WPGlobus on the edit pages.
521
+ msgid "ON"
522
+ msgstr ""
523
+
524
+ msgid "Turn off"
525
+ msgstr ""
526
+
527
+ msgid "OFF"
528
+ msgstr ""
529
+
530
+ msgid "Turn on"
531
+ msgstr ""
532
+
533
+ msgid "Elementor"
534
+ msgstr ""
535
+
536
+ msgid "WPGlobus languages"
537
+ msgstr ""
538
+
539
+ msgid "current"
540
+ msgstr ""
541
+
542
+ msgid "WPGlobus provides multilingual support for Elementor only when the option %1$s%2$s%3$s is set to %4$s."
543
+ msgstr ""
544
+
545
+ msgid "Before switching the language, please save draft or publish."
546
+ msgstr ""
547
+
548
+ #. translators: Metabox title FOR language.
549
+ msgctxt "filter__seo_meta_box_title"
550
+ msgid "for"
551
+ msgstr ""
552
+
553
+ msgid "Page is being reloaded. Please wait..."
554
+ msgstr ""
555
+
556
+ msgid "Before switching the language, please save draft or publish, then reload page."
557
+ msgstr ""
558
+
559
+ msgid "WPGlobus provides multilingual support for Elementor only when the option `CSS Print Method` is set to `External File`."
560
+ msgstr ""
561
+
562
+ msgid "Open Elementor Settings page"
563
+ msgstr ""
564
+
565
+ msgid "WPGlobus widget"
566
+ msgstr ""
567
+
568
+ msgid "Add language switcher"
569
+ msgstr ""
570
+
571
+ msgid "Flags"
572
+ msgstr ""
573
+
574
+ msgid "List"
575
+ msgstr ""
576
+
577
+ msgid "List with flags"
578
+ msgstr ""
579
+
580
+ msgid "Select"
581
+ msgstr ""
582
+
583
+ msgid "Select with language code"
584
+ msgstr ""
585
+
586
+ msgid "Dropdown"
587
+ msgstr ""
588
+
589
+ msgid "Dropdown with flags"
590
+ msgstr ""
591
+
592
+ msgid "Selector type"
593
+ msgstr ""
594
+
595
+ msgid "You cannot disable the main language."
596
+ msgstr ""
597
+
598
+ msgid "Need a multilingual slug?"
599
+ msgstr ""
600
+
601
+ msgid "*) Available after the menu is saved."
602
+ msgstr ""
603
+
604
+ #. translators: %s are for A tags.
605
+ msgid "To have the %1$sImage%2$s widget varying by language,"
606
+ msgstr ""
607
+
608
+ #. translators: %s are for A tags.
609
+ msgid "please use the %1$sWPGlobus language widgets%2$s add-on"
610
+ msgstr ""
611
+
612
+ msgid "You must enable Pretty Permalinks to use WPGlobus."
613
+ msgstr ""
614
+
615
+ msgid "Please go to Settings > Permalinks > Common Settings and choose a non-default option."
616
+ msgstr ""
617
+
618
+ msgid "Language Selector Menu Style"
619
+ msgstr ""
620
+
621
+ msgid "WPGlobus Plus"
622
+ msgstr ""
623
+
624
+ msgid "Drop-down languages menu or Flat (in one line)"
625
+ msgstr ""
626
+
627
+ msgid "Do not change"
628
+ msgstr ""
629
+
630
+ msgid "Drop-down (vertical)"
631
+ msgstr ""
632
+
633
+ msgid "Flat (horizontal)"
634
+ msgstr ""
635
+
636
+ msgid "If you see this message then your browser may not display the WPGlobus Settings panel properly. Please try another browser."
637
+ msgstr ""
638
+
639
+ msgid "Сompatibility"
640
+ msgstr ""
641
+
642
+ #. translators: placeholders for "strong" tags.
643
+ msgid "Click the %1$s[Languages]%2$s tab at the left to setup the options."
644
+ msgstr ""
645
+
646
+ #. translators: placeholders for "strong" tags.
647
+ msgid "Use the %1$s[Languages Table]%2$s section to add a new language or to edit the language attributes: name, code, flag icon, etc."
648
+ msgstr ""
649
+
650
+ msgid "Important notes"
651
+ msgstr ""
652
+
653
+ #. translators: placeholders for "strong" tags.
654
+ msgid "Version %1$s1.9.17%2$s "
655
+ msgstr ""
656
+
657
+ #. translators: placeholders for "strong" tags.
658
+ msgid "Starting from this version, %1$sWPGlobus%2$s operates in two modes"
659
+ msgstr ""
660
+
661
+ #. translators: placeholders for "strong" tags; compatibility tab link.
662
+ msgid "%1$sBuilder mode%2$s: WPGlobus turns this mode on automatically when it discovers any of the plugins/add-ons listed on the %1$s[%3$s]%2$s tab."
663
+ msgstr ""
664
+
665
+ #. translators: placeholders for "strong" tags; compatibility tab link.
666
+ msgid "%1$sStandard/Classic mode%2$s: is used when there are no plugins `Builder` or if you explicitly turned off builder support on the %1$s[%3$s]%2$s tab."
667
+ msgstr ""
668
+
669
+ #. translators: placeholders for "strong" tags.
670
+ msgid "Version %1$s2.2.11%2$s "
671
+ msgstr ""
672
+
673
+ msgid "Starting from this version"
674
+ msgstr ""
675
+
676
+ #. translators: placeholders for "strong" tags.
677
+ msgid "The %1$sBuilder mode%2$s is turned OFF by default for all custom post types (CPT)."
678
+ msgstr ""
679
+
680
+ #. translators: placeholders for "strong" tags.
681
+ msgid "To turn on the %1$sBuilder mode%2$s for specific post types, please visit the %1$s[%3$s]%2$s tab."
682
+ msgstr ""
683
+
684
+ msgid "Welcome!"
685
+ msgstr ""
686
+
687
+ msgid "Deactivating / Uninstalling"
688
+ msgstr ""
689
+
690
+ msgid "Uninstall"
691
+ msgstr ""
692
+
693
+ msgid "All add-ons"
694
+ msgstr ""
695
+
696
+ msgid "Mobile Menu"
697
+ msgstr ""
698
+
699
+ msgid "Language Widgets"
700
+ msgstr ""
701
+
702
+ msgid "We Recommend..."
703
+ msgstr ""
704
+
705
+ msgid "Our premium add-on, WPGlobus Plus, will add several features to your website, such as:"
706
+ msgstr ""
707
+
708
+ msgid "- Ability to write a post in one language and immediately publish it, not waiting for the translation to other languages;"
709
+ msgstr ""
710
+
711
+ msgid "- Set different URLs for each translation;"
712
+ msgstr ""
713
+
714
+ msgid "- In Yoast SEO, set the focus keyword and do the Page Analysis separately for each translation;"
715
+ msgstr ""
716
+
717
+ msgid "- and more..."
718
+ msgstr ""
719
+
720
+ msgid "Click here to download"
721
+ msgstr ""
722
+
723
+ msgid "Thanks for installing WPGlobus! Now you have a multilingual website and can translate your blog posts and pages to many languages."
724
+ msgstr ""
725
+
726
+ msgid "The next step is to translate your WooCommerce-based store!"
727
+ msgstr ""
728
+
729
+ msgid "With the WPGlobus for WooCommerce premium add-on, you will be able to translate product titles and descriptions, categories, tags and attributes."
730
+ msgstr ""
731
+
732
+ msgid "Multi-currency"
733
+ msgstr ""
734
+
735
+ msgid "Your WooCommerce-powered store is set to show prices and accept payments in a single currency only."
736
+ msgstr ""
737
+
738
+ msgid "With WPGlobus, you can add multiple currencies to your store and charge UK customers in Pounds, US customers in Dollars, Spanish clients in Euros, etc. Accepting multiple currencies will strengthen your competitive edge and positioning for global growth!"
739
+ msgstr ""
740
+
741
+ msgid "The WPGlobus Multi-Currency premium add-on provides switching currencies and re-calculating prices on-the-fly."
742
+ msgstr ""
743
+
744
+ msgid "WPGlobus Premium Add-ons"
745
+ msgstr ""
746
+
747
+ msgid "We have written several Premium add-ons for WPGlobus. With those add-ons, you will be able to:"
748
+ msgstr ""
749
+
750
+ msgid "<strong>Translate URLs</strong> (/my-page/ translates to /fr/ma-page, /ru/моя-страница and so on);"
751
+ msgstr ""
752
+
753
+ msgid "Postpone translation to some languages and <strong>publish only the translated texts</strong>;"
754
+ msgstr ""
755
+
756
+ msgid "Maintain <strong>separate menus and widgets for each language</strong>;"
757
+ msgstr ""
758
+
759
+ msgid "<strong>Translate WooCommerce</strong> products and taxonomies;"
760
+ msgstr ""
761
+
762
+ msgid "Enter separate focus keywords for each language in the <strong>Yoast SEO</strong>;"
763
+ msgstr ""
764
+
765
+ msgid "...and more."
766
+ msgstr ""
767
+
768
+ msgid "Click here to visit the WPGlobus Store"
769
+ msgstr ""
770
+
771
+ msgid "Select a language"
772
+ msgstr ""
773
+
774
+ #. translators: %3$s placeholder for the icon (actual picture).
775
+ msgid "Place the %1$smain language%2$s of your site at the top of the list by dragging the %3$s icons."
776
+ msgstr ""
777
+
778
+ #. translators: placeholders for the "strong" HTML tags.
779
+ msgid "%1$sUncheck%2$s the languages you do not plan to use."
780
+ msgstr ""
781
+
782
+ #. translators: placeholders for the "strong" HTML tags.
783
+ msgid "%1$sAdd%2$s more languages using the section below."
784
+ msgstr ""
785
+
786
+ msgid "When done, click the [Save Changes] button."
787
+ msgstr ""
788
+
789
+ #. translators: %s - placeholder for the "Save Changes" button text.
790
+ msgid "Press the %s button to confirm."
791
+ msgstr ""
792
+
793
+ #. translators: dropdown option meaning that none of the navigation menus should show the language selector.
794
+ msgid "-- none --"
795
+ msgstr ""
796
+
797
+ msgid "All menus"
798
+ msgstr ""
799
+
800
+ msgid "Instructions:"
801
+ msgstr ""
802
+
803
+ msgid "(Found in some themes)"
804
+ msgstr ""
805
+
806
+ msgid "Enable"
807
+ msgstr ""
808
+
809
+ msgid "Languages table"
810
+ msgstr ""
811
+
812
+ msgid "Use this table to add, edit or delete languages."
813
+ msgstr ""
814
+
815
+ msgid "NOTE: you cannot remove the main language."
816
+ msgstr ""
817
+
818
+ msgid "WPGlobus is enabled on these Post Types"
819
+ msgstr ""
820
+
821
+ msgid "Uncheck to disable"
822
+ msgstr ""
823
+
824
+ msgid "Please note that there are post types, which status is managed by other plugins and cannot be changed here."
825
+ msgstr ""
826
+
827
+ msgid "Post Types"
828
+ msgstr ""
829
+
830
+ msgid "You should put here only the code provided by WPGlobus Support. Do not write anything else in the sections below as it might break the functionality of your website!"
831
+ msgstr ""
832
+
833
+ msgid "Custom Code"
834
+ msgstr ""
835
+
836
+ msgid "Enabled"
837
+ msgstr ""
838
+
839
+ msgid "Builders support"
840
+ msgstr ""
841
+
842
+ msgid "Builder mode is enabled on these Post Types"
843
+ msgstr ""
844
+
845
+ msgid "Old fashioned language switcher"
846
+ msgstr ""
847
+
848
+ msgid "Block Editor"
849
+ msgstr ""
850
+
851
+ msgid "Block Editor Options"
852
+ msgstr ""
853
+
854
+ msgid "With the current settings, you will see the following lines in the section HEAD of your site pages"
855
+ msgstr ""
856
+
857
+ msgid "(example for two languages)"
858
+ msgstr ""
859
+
860
+ msgid "Tell search engines about localized versions of your pages using the hreflang tag"
861
+ msgstr ""
862
+
863
+ msgid "Output the hreflang tag as"
864
+ msgstr ""
865
+
866
+ msgid "Language- and region-specific (en-US, ru-RU, etc.)"
867
+ msgstr ""
868
+
869
+ msgid "Language- and region-specific (en-us, ru-ru, etc.)"
870
+ msgstr ""
871
+
872
+ msgid "Language code only (en, ru, etc.)"
873
+ msgstr ""
874
+
875
+ msgid "Use the code `x-default` for the main language"
876
+ msgstr ""
877
+
878
+ msgid "Multilingual SEO"
879
+ msgstr ""
880
+
881
+ msgid "Multilingual SEO Options"
882
+ msgstr ""
883
+
884
+ msgid "With WPGlobus, you can get translations for posts and pages using REST API."
885
+ msgstr ""
886
+
887
+ msgid "Go to %1$s%2$s%3$s to see the content in language: %4$s."
888
+ msgstr ""
889
+
890
+ msgid "For demonstration, you can try the first post that WordPress creates at the initial installation."
891
+ msgstr ""
892
+
893
+ msgid "Please read the %1$sWordPress REST API documentation%2$s for more information."
894
+ msgstr ""
895
+
896
+ msgid "In the REST API response, you can find the %1$stranslation%2$s field, which shows whether translations exist for the fields %1$stitle%2$s, %1$scontent%2$s and %1$sexcerpt%2$s or not, for each language. See the screenshot below:"
897
+ msgstr ""
898
+
899
+ msgid "Description:"
900
+ msgstr ""
901
+
902
+ msgid "REST API"
903
+ msgstr ""
904
+
905
+ msgid "Translate strings"
906
+ msgstr ""
907
+
908
+ msgid "item"
909
+ msgstr ""
910
+
911
+ msgid "items"
912
+ msgstr ""
913
+
914
+ msgid "Code"
915
+ msgstr ""
916
+
917
+ msgid "Edit"
918
+ msgstr ""
919
+
920
+ msgid "Delete"
921
+ msgstr ""
922
+
923
+ msgid "File"
924
+ msgstr ""
925
+
926
+ msgid "Flag"
927
+ msgstr ""
928
+
929
+ msgid "Language name"
930
+ msgstr ""
931
+
932
+ msgid "English language name"
933
+ msgstr ""
934
+
935
+ msgid "No items found"
936
+ msgstr ""
937
+
938
+ msgid "Add new Language"
939
+ msgstr ""
940
+
941
+ msgid "No items of this type were found."
942
+ msgstr ""
943
+
944
+ msgid "Select an item"
945
+ msgstr ""
946
+
947
+ msgid "Multilingual support of this add-on is currently in Beta stage."
948
+ msgstr ""
949
+
950
+ msgid "We do not recommend using it on production sites."
951
+ msgstr ""
952
+
953
+ msgid "Please report all problems to %1$sWPGlobus Technical Support%2$s."
954
+ msgstr ""
955
+
956
+ msgid "WordPress version"
957
+ msgstr ""
958
+
959
+ msgid "In the WordPress core"
960
+ msgstr ""
961
+
962
+ msgid "Core"
963
+ msgstr ""
964
+
965
+ msgid "Current version"
966
+ msgstr ""
967
+
968
+ msgid "Stage"
969
+ msgstr ""
970
+
971
+ msgid "Status"
972
+ msgstr ""
973
+
974
+ msgid "Block editor"
975
+ msgstr ""
976
+
977
+ msgid "production"
978
+ msgstr ""
979
+
980
+ msgid "List of supported add-ons"
981
+ msgstr ""
982
+
983
+ msgid "Add-on"
984
+ msgstr ""
985
+
986
+ msgid "Supported minimum version"
987
+ msgstr ""
988
+
989
+ msgid "Not installed"
990
+ msgstr ""
991
+
992
+ msgid "Installed, inactive"
993
+ msgstr ""
994
+
995
+ msgid "Active"
996
+ msgstr ""
997
+
998
+ msgid "WPGlobus Customizer is integrated into the Customize Theme panel"
999
+ msgstr ""
1000
+
1001
+ msgid "However, some themes do not follow all WordPress standards strictly."
1002
+ msgstr ""
1003
+
1004
+ msgid "WPGlobus Customizer may behave incorrectly with those themes."
1005
+ msgstr ""
1006
+
1007
+ msgid "To avoid conflicts, you can switch the WPGlobus Customizer off:"
1008
+ msgstr ""
1009
+
1010
+ msgid "Below is the list of themes that do not support the WPGlobus Customizer. With those themes, WPGlobus Customizer is switched off by default"
1011
+ msgstr ""
1012
+
1013
+ msgid "The currently active theme is"
1014
+ msgstr ""
1015
+
1016
+ msgid "In the current version, WPGlobus Customizer does not support"
1017
+ msgstr ""
1018
+
1019
+ msgid "translation of the navigation menus"
1020
+ msgstr ""
1021
+
1022
+ msgid "to translate, please go to"
1023
+ msgstr ""
1024
+
1025
+ msgid "Go to Customizer"
1026
+ msgstr ""
1027
+
1028
+ msgid "is undefined"
1029
+ msgstr ""
1030
+
1031
+ msgid "is set to"
1032
+ msgstr ""
1033
+
1034
+ msgid "by adding to the file wp-config.php"
1035
+ msgstr ""
1036
+
1037
+ msgid "now"
1038
+ msgstr ""
1039
+
1040
+ msgid "We rely on your support!"
1041
+ msgstr ""
1042
+
1043
+ msgid "Please consider a small donation to support the future development."
1044
+ msgstr ""
1045
+
1046
+ msgid "Thank you!"
1047
+ msgstr ""
1048
+
1049
+ msgid "WPGlobus Plus!"
1050
+ msgstr ""
1051
+
1052
+ msgid "Advanced features and tweaks: URL translation, multilingual SEO analysis, separate publishing and more! "
1053
+ msgstr ""
1054
+
1055
+ msgid "Get WPGlobus Plus now!"
1056
+ msgstr ""
1057
+
1058
+ msgid "Bulk editing of the multilingual titles and descriptions is not supported by the current version."
1059
+ msgstr ""
1060
+
1061
+ msgid "Therefore, to avoid any data loss, we do not recommend using this."
1062
+ msgstr ""
1063
+
1064
+ msgid "WPGlobus warning: "
1065
+ msgstr ""
1066
+
1067
+ msgid "https://github.com/WPGlobus/WPGlobus"
1068
+ msgstr ""
1069
+
1070
+ msgid "A WordPress Globalization / Multilingual Plugin. Posts, pages, menus, widgets and even custom fields - in multiple languages!"
1071
+ msgstr ""
1072
+
1073
+ msgid "https://wpglobus.com/"
1074
+ msgstr ""
readme.txt CHANGED
@@ -1,260 +1,269 @@
1
- === WPGlobus - Multilingual Everything! ===
2
- Contributors: tivnetinc, alexgff, tivnet
3
- Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SLF8M4YNZHNQN
4
- Tags: WPGlobus, localization, multilanguage, multilingual, translate
5
- Requires at least: 5.5
6
- Tested up to: 5.6
7
- Requires PHP: 5.6
8
- Stable tag: trunk
9
- License: GPL-3.0-or-later
10
- License URI: https://spdx.org/licenses/GPL-3.0-or-later.html
11
-
12
- Multilingual/Globalization: URL-based multilanguage; easy translation interface, compatible with Gutenberg, Yoast SEO, All in One SEO Pack and ACF!
13
-
14
- == Description ==
15
-
16
- **WPGlobus** is a family of WordPress plugins assisting you in translating and maintaining bilingual/multilingual WordPress blogs and sites.
17
-
18
- = Quick Start Video =
19
-
20
- https://www.youtube.com/watch?v=zoTWY9JrXLs
21
-
22
- Please also read the [Quick Start Guide](https://wpglobus.com/quick-start/).
23
-
24
- = Important Notes: please read before using WPGlobus! =
25
-
26
- * NO AUTOMATIC TRANSLATION:
27
- * WPGlobus does NOT translate texts automatically! You will **translate texts manually**.
28
- * PAGE BUILDERS / COMPOSERS:
29
- * Starting from the version 1.9.17, WPGlobus supports Gutenberg, WPBakery Page Builder and Elementor. Other builders, such as "Page Builder by SiteOrigin", "Beaver Builder", Fusion ("Avada"), Elegant ("Divi"), etc. are currently in development.
30
- * IF YOU UNINSTALL, YOU LOSE TRANSLATIONS:
31
- * WPGlobus stores all translations using a special format: `{:en}English{:}{:fr}French{:}{:es}Spanish{:}`. If you decide to **deactivate and uninstall WPGlobus**, you **must run the clean-up tool** to keep only one language. See the details on the "Welcome" tab in the WPGlobus Settings.
32
- * COOKIES:
33
- * WPGlobus use browser cookies to store the selected language in the form `wpglobus-language=xx` where `xx` is a two-letter language code: `en`, `de`, `fr`, etc.
34
- * NO MULTISITE:
35
- * The **multisite** mode (multiple virtual sites sharing a single WordPress installation) is **not tested and not supported**.
36
- * FREE PLUGIN with PAID EXTENSIONS:
37
- * Some functionality is available only with our **premium add-ons**. Details below.
38
- * OLD PHP / OLD WORDPRESS:
39
- * We develop and test our software using the **latest versions of PHP, WordPress, and all plugins**. If you have an older version and something is not working properly - please upgrade before contacting us.
40
- * MBSTRING:
41
- * For the full UTF-8 compatibility and better performance, please make sure that the [Multibyte String](http://php.net/manual/en/intro.mbstring.php) PHP extension is enabled.
42
-
43
- = What is in the FREE version of WPGlobus? =
44
-
45
- The WPGlobus plugin provides you with the general multilingual tools.
46
-
47
- * **Manually translate** posts, pages, categories, tags, menus, and widgets;
48
- * **Add one or several languages** to your WP blog/site using custom combinations of country flags, locales and language names;
49
- * **Enable multilingual SEO features** of "Yoast SEO" and "All in One SEO" plugins;
50
- * **Switch the languages at the front-end** using: a drop-down menu extension and/or a customizable widget with various display options;
51
- * **Switch the Administrator interface language** using a top bar selector;
52
-
53
- The WPGlobus plugin serves as the **foundation** to other plugins in the family.
54
-
55
- = There are several Free Add-ons: =
56
-
57
- * [WPGlobus Featured Images](https://wordpress.org/plugins/wpglobus-featured-images/): allows setting featured images separately for each language.
58
- * [WPGlobus Translate Options](https://wordpress.org/plugins/wpglobus-translate-options/): enables selective translation of the `wp_options` table strings. You need to use it when your theme or a 3rd party plugin (a slider, for example) allows you to enter some texts (headings, buttons, etc.) and stores them in the `options` table.
59
- * [WPGlobus for WPBakery Page Builder](https://wordpress.org/plugins/wpglobus-for-wpbakery-visual-composer/): enables WPGlobus on certain themes that use WPBakery's Builder in the standard ("classic") mode.
60
- * [WPGlobus for Black Studio TinyMCE Widget](https://wordpress.org/plugins/wpglobus-for-black-studio-tinymce-widget/): adds multilingual editing capabilities to the visual editor widget.
61
-
62
- = When do I need WPGlobus Premium Add-ons? =
63
-
64
- * To translate URLs (`/my-page/` translates to `/fr/ma-page`, `/ru/моя-страница` and so on);
65
- * To "postpone" translation to all languages and publish only those that are ready;
66
- * To have completely separate menus for each language;
67
- * To translate WooCommerce products and taxonomies;
68
- * To have separate "focus keywords" for each language in the Yoast SEO;
69
- * ...and more.
70
-
71
- For more details, please check out the descriptions of each paid add-on on our website:
72
-
73
- * [WooCommerce WPGlobus](https://wpglobus.com/product/woocommerce-wpglobus/): adds multilingual capabilities to WooCommerce-based online stores.
74
- * [WPGlobus Plus](https://wpglobus.com/product/wpglobus-plus/): adds URL fine-tuning, publishing status per translation, multilingual Yoast SEO analysis and more.
75
- * [WPGlobus Language Widgets](https://wpglobus.com/product/wpglobus-language-widget/): Multilingual widget logic: show and hide widget depending on the current language.
76
- * [WPGlobus Header Images](https://wpglobus.com/product/wpglobus-header-images/): Display different header images per language. Show images depending on the settings in the Customizer.
77
- * [WPGlobus Menu Visibility](https://wpglobus.com/product/wpglobus-menu-visibility/): Show or hide menu items depending on the current language.
78
- * [WPGlobus Mobile Menu](https://wpglobus.com/product/wpglobus-mobile-menu/): makes the WPGlobus language switcher menu compatible with mobile devices and narrow screens.
79
- * [WPGlobus for the "Bridge" theme](https://wpglobus.com/product/wpglobus-for-bridge-theme/): create different sliders for each language when using theme "Bridge".
80
- * [Multilingual WooCommerce Nets Netaxept](https://wpglobus.com/product/multilingual-woocommerce-nets-netaxept/): with this add-on, you will be able to translate the Nets payment methods' titles and descriptions to multiple languages.
81
-
82
- = Compatibility with WordPress Themes =
83
-
84
- * WPGlobus works correctly with all themes that apply proper filtering before outputting content.
85
- * As most of the themes save their settings in the `options` table, you can use the [WPGlobus Translate Options](https://wordpress.org/plugins/wpglobus-translate-options/) plugin to process those settings correctly.
86
- * Some themes incorporate 3rd party plugins (e.g., sliders, forms, composers) - not all of them are 100% multilingual-ready. When you see elements that cannot be translated, please **tell the theme/plugin authors**. We are ready to help them.
87
- * Read more on the topic [here](https://wpglobus.com/documentation/wpglobus-compatibility-with-themes-and-plugins/).
88
-
89
- = Compatibility with WordPress Plugins =
90
-
91
- We have checked WPGlobus together with many plugins, including:
92
-
93
- * ACF - Advanced Custom Fields. [WPGlobus Plus](https://wpglobus.com/product/wpglobus-plus/) premium add-on is required for WYSIWYG fields support,
94
- * Advanced Post List,
95
- * All in One SEO Pack,
96
- * WordPress SEO Plugin – Rank Math,
97
- * Black Studio TinyMCE Widget (with our free add-on),
98
- * MailChimp for WordPress,
99
- * Max Mega Menu,
100
- * Popups - WordPress Popup,
101
- * Sidebar Login,
102
- * WPBakery Page Builder,
103
- * Whistles,
104
- * Widget Logic,
105
- * Yoast SEO. [WPGlobus Plus](https://wpglobus.com/product/wpglobus-plus/) premium add-on is required for multilingual focus keyword and SEO analysis.
106
-
107
- Some 3rd-party plugins are supported with our [premium add-ons](https://wpglobus.com/shop/):
108
-
109
- * [TablePress](https://wpglobus.com/product/wpglobus-plus/#tablepress),
110
- * [WooCommerce and some of its extensions](https://wpglobus.com/product/woocommerce-wpglobus/),
111
- * [WooCommerce Nets Netaxept Payment Plugin](https://wpglobus.com/product/multilingual-woocommerce-nets-netaxept/)
112
-
113
- WPGlobus is compatible with ClassicPress Version 1.
114
-
115
- = Permalinks =
116
-
117
- **IMPORTANT:** WPGlobus will not work if your URLs look like `example.com?p=123` or `example.com/index.php/category/post/`.
118
-
119
- Please go to `Settings->Permalinks` and change the permalink structure to non-default and with no `index.php` in it. If you are unable to do that for some reason, please talk to your hosting provider or systems administrator.
120
-
121
- **Note:** WooCommerce adds their own section to the Permalinks. It is important to fill in all the information. For example, you need to specify your Shop Base, for example, `/product/`. If you leave it blank, WooCommerce will try to translate the base (eg `/produkt/` for German), which will result in a 404 error.
122
-
123
- = Developing on `localhost` or custom ports =
124
-
125
- WPGlobus may not work correctly on development servers having URLs like `//localhost/mysite` or on custom ports like `//myserver.dev:3000`. Please use a proper domain name (a fake one from `/etc/hosts` is OK), and port 80.
126
-
127
- = More info and ways to contact the WPGlobus Development Team =
128
-
129
- * [WPGlobus.com website](https://wpglobus.com/).
130
- * [Open source code on GitHub](https://github.com/WPGlobus).
131
-
132
- = Admin interface translations: =
133
-
134
- **NOTE:** Please do not translate anything using the WordPress interface! Join our translation team on Transifex or translate the POT file using `POEdit`. Thank you!
135
-
136
- * `de_DE` by [Tobias Hopp](http://www.tobiashopp.info/) ~ [WPGlobus ist ein Paket von mehreren WordPress-Plugins, die Möglichkeiten zur Übersetzung von Wordpress-Installationen bieten.](https://de.wordpress.org/plugins/wpglobus/)
137
- * `es_ES` by [FX Bénard](http://wp-translations.org/) and [Patricia Casado](http://mascositas.com/) ~ [WPGlobus es una familia de plugins de WordPress que ayudan en la traducción de blogs de WordPress.](https://es.wordpress.org/plugins/wpglobus/)
138
- * `fr_FR` by [FX Bénard](http://wp-translations.org/) ~ [WPGlobus fait partie des extensions WordPress qui vous aident à rendre les blogs et les sites WordPress multilingues.](https://fr.wordpress.org/plugins/wpglobus/)
139
- * `id_ID` by [ChameleonJohn](https://www.chameleonjohn.com/) ~ [WPGlobus adalah keluarga plugin WordPress yang membantu Anda dalam membuat blog dan situs WordPress multibahasa.](https://id.wordpress.org/plugins/wpglobus/)
140
- * `pl_PL` by [Maciej Gryniuk](http://maciej-gryniuk.tk/) ~ [WPGlobus jest rodziną wtyczek do WordPress'a pomocnych w tworzeniu wielojęzycznych blogów i stron na WordPress'ie.](https://pl.wordpress.org/plugins/wpglobus/)
141
- * `ro_RO` by [Rodica-Elena Andronache](http://themeisle.com/) ~ [WPGlobus este o familie de plugin-uri WordPress ce te asistă în realizarea de bloguri și site-uri WordPress multilingve.](https://ro.wordpress.org/plugins/wpglobus/)
142
- * `ru_RU` by [The WPGlobus Team](https://wpglobus.com/ru/) ~ [WPGlobus - это коллекция плагинов ВордПресс для создания мультиязычных сайтов](https://ru.wordpress.org/plugins/wpglobus/)
143
- * `sv_SE` by [Elger Lindgren](http://bilddigital.se/) ~ [WPGlobus är en familj av WordPress-tillägg som hjälper dig att göra flerspråkiga Wordpressbloggar och webbplatser.](https://sv.wordpress.org/plugins/wpglobus/)
144
- * `tr_TR` by [Borahan Conkeroglu](https://twitter.com/boracon68) ~ [WPGlobus WordPress bloglarını ve sitelerini çokdilli yapmakta size yardım eden bir WordPress eklentileri ailesidir.](https://tr.wordpress.org/plugins/wpglobus/)
145
- * `uk` by [Pavlo Novak](https://plus.google.com/u/0/114797816817149043222) ~ ["WPGlobus - це колекція ВордПресс плагінів для створення багатомовних сайтів."](https://uk.wordpress.org/plugins/wpglobus/)
146
-
147
- == Installation ==
148
-
149
- You can install this plugin directly from your WordPress dashboard:
150
-
151
- 1. Go to the *Plugins* menu and click *Add New*.
152
- 1. Search for *WPGlobus*.
153
- 1. Click *Install Now* next to the WPGlobus plugin.
154
- 1. Activate the plugin.
155
-
156
- Alternatively, see the guide to [Manually Installing Plugins](https://codex.wordpress.org/Managing_Plugins#Manual_Plugin_Installation).
157
-
158
- To install with PHP Composer:
159
-
160
- * https://wpackagist.org/search?q=wpglobus
161
- * https://packagist.org/packages/wpglobus/wpglobus
162
-
163
- == Frequently Asked Questions ==
164
-
165
- = Please read these first: =
166
-
167
- * [The Quick Start Guide](https://wpglobus.com/quick-start/)
168
- * [Before contacting Support...](https://wpglobus.com/before-contacting-wpglobus-support/)
169
-
170
- = No automatic translation =
171
-
172
- WPGlobus does NOT translate texts! You need to **translate texts manually**.
173
-
174
- = After deactivating WPGlobus, all my pages look like garbage! =
175
-
176
- What you see is a mix of the languages, which WPGlobus knows how to handle when it's active.
177
- When you deactivate WPGlobus, your site is not multilingual anymore, and you have to remove all translations.
178
-
179
- WPGlobus stores all translations using a special format: `{:en}English{:}{:fr}French{:}{:es}Spanish{:}`. If you decide to **deactivate WPGlobus**, you **must run the clean-up tool** to keep only one language. See the details on the "Uninstall" tab in the WPGlobus Settings.
180
-
181
- = When I switch language, I am getting 404 on all pages =
182
-
183
- Please go to the `Admin - Settings - Permalinks` page. Make sure that the `Common Settings` is not set to "Plain" and then press the `Save Changes` button. It should help.
184
-
185
- = Is there a PRO version? =
186
-
187
- We do not make a "PRO" plugin that replaces the free one. Instead, we have a set of add-ons that extend the WPGlobus functionality. Please found them on [our website](https://wpglobus.com).
188
-
189
- **NOTE:** When you install an add-on, such as **WPGlobus Plus**, you must keep the WPGlobus plugin activated!
190
-
191
- = From the WPGlobus.com FAQ Archives: =
192
-
193
- * [Do you support PHP 5.x? PHP 7.x?](https://wpglobus.com/faq/support-php-5-2/)
194
- * [Do you support MSIE / Opera / Safari / Chrome / Firefox - Version x.x?](https://wpglobus.com/faq/support-msie-opera-safari-chrome-firefox/)
195
- * [Do you plan to support subdomains and URL query parameters?](https://wpglobus.com/faq/subdomains-and-url-query-parameters/)
196
- * [I am using WPML, qTranslate-X, Polylang, Multilingual Press, etc. Can I switch to WPGlobus?](https://wpglobus.com/faq/i-am-using-wpml-qtranslate-polylang-multilingual-press-etc-can-i-switch-to-wpglobus/)
197
- * [Do you support WooCommerce, EDD, other e-Commerce plugins?](https://wpglobus.com/faq/support-woocommerce-edd/)
198
- * [Is it possible to set the user's language automatically based on IP and/or browser language?](https://wpglobus.com/faq/set-language-by-ip/)
199
- * [How do I contribute to WPGlobus?](https://wpglobus.com/faq/how-do-i-contribute-to-wpglobus/)
200
-
201
- == Screenshots ==
202
-
203
- 1. The Welcome screen.
204
- 2. Settings panel.
205
- 3. Languages setup.
206
- 4. Attaching language switcher to a menu.
207
- 5. Editing post in multiple languages.
208
- 6. Multilingual Yoast SEO and Featured Images.
209
- 7. Language Switcher widget and Multilingual Editor dialog.
210
- 8. Multilingual WooCommerce store powered by [WooCommerce WPGlobus](https://wpglobus.com/product/woocommerce-wpglobus/).
211
-
212
- == Upgrade Notice ==
213
-
214
- = 2.0.0 =
215
-
216
- WPGlobus Version 2 supports WordPress 5.x, with Gutenberg.
217
-
218
- == Changelog ==
219
-
220
- = 2.6.0 =
221
- * (Compatibility) Admin and Builders JavaScript code refactored to work with WordPress 5.6.*
222
- * (Core) Revised filters on `widgets.php` page.
223
- * (Core/WidgetsJS) Code refactored for Image widgets.
224
-
225
- = 2.5.23 =
226
- * (Vendor/Yoast) Fixed filter for the post title when post meta is empty.
227
-
228
- = 2.5.22 =
229
-
230
- * (Vendor/Yoast) Added filters for the taxonomy title, description, Open Graph title and description.
231
- * (Vendor/Yoast) Fixed filter for the post title.
232
-
233
- = 2.5.21 =
234
-
235
- * (Customizer) WPGlobus Customizer is switched off for the `NewYork City` theme.
236
- * (Customizer) CSS tweak for the `description` field.
237
-
238
- = 2.5.20 =
239
-
240
- * (Core/Recommendations) Added admin notices about required versions of WordPress PHP.
241
-
242
- = 2.5.19 =
243
-
244
- * (Options/Languages table) Added Georgian language and flag image.
245
- * (Vendor/Yoast) Added multilingual support for the fields in the Social tab.
246
-
247
- = 2.5.18 =
248
-
249
- * (Builders/Pods) Fixed `Uncaught Error: Call to a member function fields() on bool`.
250
-
251
- = Earlier versions and Add-ons =
252
-
253
- * [See the complete changelog here](https://github.com/WPGlobus/WPGlobus/blob/master/CHANGELOG.md)
254
- * [WPGlobus for WooCommerce](https://wpglobus.com/extensions/woocommerce-wpglobus/woocommerce-wpglobus-changelog/)
255
- * [WPGlobus Plus](https://wpglobus.com/extensions/wpglobus-plus/changelog/)
256
-
257
- == Demo Sites ==
258
-
259
- * [WPGlobus.com](https://wpglobus.com/):
260
- * Bilingual site using a variety of posts, pages, custom post types, forms, and a WooCommerce store with Subscription and API extensions.
 
 
 
 
 
 
 
 
 
1
+ === WPGlobus - Multilingual Everything! ===
2
+ Contributors: tivnetinc, alexgff, tivnet
3
+ Donate link: https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=SLF8M4YNZHNQN
4
+ Tags: WPGlobus, localization, multilanguage, multilingual, translate
5
+ Requires at least: 5.5
6
+ Tested up to: 5.6
7
+ Requires PHP: 5.6
8
+ Stable tag: trunk
9
+ License: GPL-3.0-or-later
10
+ License URI: https://spdx.org/licenses/GPL-3.0-or-later.html
11
+
12
+ Multilingual/Globalization: URL-based multilanguage; easy translation interface, compatible with Gutenberg, Yoast SEO, All in One SEO Pack and ACF!
13
+
14
+ == Description ==
15
+
16
+ **WPGlobus** is a family of WordPress plugins assisting you in translating and maintaining bilingual/multilingual WordPress blogs and sites.
17
+
18
+ = Quick Start Video =
19
+
20
+ https://www.youtube.com/watch?v=zoTWY9JrXLs
21
+
22
+ Please also read the [Quick Start Guide](https://wpglobus.com/quick-start/).
23
+
24
+ = Important Notes: please read before using WPGlobus! =
25
+
26
+ * NO AUTOMATIC TRANSLATION:
27
+ * WPGlobus does NOT translate texts automatically! You will **translate texts manually**.
28
+ * PAGE BUILDERS / COMPOSERS:
29
+ * Starting from the version 1.9.17, WPGlobus supports Gutenberg, WPBakery Page Builder and Elementor. Other builders, such as "Page Builder by SiteOrigin", "Beaver Builder", Fusion ("Avada"), Elegant ("Divi"), etc. are currently in development.
30
+ * IF YOU UNINSTALL, YOU LOSE TRANSLATIONS:
31
+ * WPGlobus stores all translations using a special format: `{:en}English{:}{:fr}French{:}{:es}Spanish{:}`. If you decide to **deactivate and uninstall WPGlobus**, you **must run the clean-up tool** to keep only one language. See the details on the "Welcome" tab in the WPGlobus Settings.
32
+ * COOKIES:
33
+ * WPGlobus use browser cookies to store the selected language in the form `wpglobus-language=xx` where `xx` is a two-letter language code: `en`, `de`, `fr`, etc.
34
+ * NO MULTISITE:
35
+ * The **multisite** mode (multiple virtual sites sharing a single WordPress installation) is **not tested and not supported**.
36
+ * FREE PLUGIN with PAID EXTENSIONS:
37
+ * Some functionality is available only with our **premium add-ons**. Details below.
38
+ * OLD PHP / OLD WORDPRESS:
39
+ * We develop and test our software using the **latest versions of PHP, WordPress, and all plugins**. If you have an older version and something is not working properly - please upgrade before contacting us.
40
+ * MBSTRING:
41
+ * For the full UTF-8 compatibility and better performance, please make sure that the [Multibyte String](http://php.net/manual/en/intro.mbstring.php) PHP extension is enabled.
42
+
43
+ = What is in the FREE version of WPGlobus? =
44
+
45
+ The WPGlobus plugin provides you with the general multilingual tools.
46
+
47
+ * **Manually translate** posts, pages, categories, tags, menus, and widgets;
48
+ * **Add one or several languages** to your WP blog/site using custom combinations of country flags, locales and language names;
49
+ * **Enable multilingual SEO features** of "Yoast SEO" and "All in One SEO" plugins;
50
+ * **Switch the languages at the front-end** using: a drop-down menu extension and/or a customizable widget with various display options;
51
+ * **Switch the Administrator interface language** using a top bar selector;
52
+
53
+ The WPGlobus plugin serves as the **foundation** to other plugins in the family.
54
+
55
+ = There are several Free Add-ons: =
56
+
57
+ * [WPGlobus Featured Images](https://wordpress.org/plugins/wpglobus-featured-images/): allows setting featured images separately for each language.
58
+ * [WPGlobus Translate Options](https://wordpress.org/plugins/wpglobus-translate-options/): enables selective translation of the `wp_options` table strings. You need to use it when your theme or a 3rd party plugin (a slider, for example) allows you to enter some texts (headings, buttons, etc.) and stores them in the `options` table.
59
+ * [WPGlobus for WPBakery Page Builder](https://wordpress.org/plugins/wpglobus-for-wpbakery-visual-composer/): enables WPGlobus on certain themes that use WPBakery's Builder in the standard ("classic") mode.
60
+ * [WPGlobus for Black Studio TinyMCE Widget](https://wordpress.org/plugins/wpglobus-for-black-studio-tinymce-widget/): adds multilingual editing capabilities to the visual editor widget.
61
+
62
+ = When do I need WPGlobus Premium Add-ons? =
63
+
64
+ * To translate URLs (`/my-page/` translates to `/fr/ma-page`, `/ru/моя-страница` and so on);
65
+ * To "postpone" translation to all languages and publish only those that are ready;
66
+ * To have completely separate menus for each language;
67
+ * To translate WooCommerce products and taxonomies;
68
+ * To have separate "focus keywords" for each language in the Yoast SEO;
69
+ * ...and more.
70
+
71
+ For more details, please check out the descriptions of each paid add-on on our website:
72
+
73
+ * [WooCommerce WPGlobus](https://wpglobus.com/product/woocommerce-wpglobus/): adds multilingual capabilities to WooCommerce-based online stores.
74
+ * [WPGlobus Plus](https://wpglobus.com/product/wpglobus-plus/): adds URL fine-tuning, publishing status per translation, multilingual Yoast SEO analysis and more.
75
+ * [WPGlobus Language Widgets](https://wpglobus.com/product/wpglobus-language-widget/): Multilingual widget logic: show and hide widget depending on the current language.
76
+ * [WPGlobus Header Images](https://wpglobus.com/product/wpglobus-header-images/): Display different header images per language. Show images depending on the settings in the Customizer.
77
+ * [WPGlobus Menu Visibility](https://wpglobus.com/product/wpglobus-menu-visibility/): Show or hide menu items depending on the current language.
78
+ * [WPGlobus Mobile Menu](https://wpglobus.com/product/wpglobus-mobile-menu/): makes the WPGlobus language switcher menu compatible with mobile devices and narrow screens.
79
+ * [WPGlobus for the "Bridge" theme](https://wpglobus.com/product/wpglobus-for-bridge-theme/): create different sliders for each language when using theme "Bridge".
80
+ * [Multilingual WooCommerce Nets Netaxept](https://wpglobus.com/product/multilingual-woocommerce-nets-netaxept/): with this add-on, you will be able to translate the Nets payment methods' titles and descriptions to multiple languages.
81
+
82
+ = Compatibility with WordPress Themes =
83
+
84
+ * WPGlobus works correctly with all themes that apply proper filtering before outputting content.
85
+ * As most of the themes save their settings in the `options` table, you can use the [WPGlobus Translate Options](https://wordpress.org/plugins/wpglobus-translate-options/) plugin to process those settings correctly.
86
+ * Some themes incorporate 3rd party plugins (e.g., sliders, forms, composers) - not all of them are 100% multilingual-ready. When you see elements that cannot be translated, please **tell the theme/plugin authors**. We are ready to help them.
87
+ * Read more on the topic [here](https://wpglobus.com/documentation/wpglobus-compatibility-with-themes-and-plugins/).
88
+
89
+ = Compatibility with WordPress Plugins =
90
+
91
+ We have checked WPGlobus together with many plugins, including:
92
+
93
+ * ACF - Advanced Custom Fields. [WPGlobus Plus](https://wpglobus.com/product/wpglobus-plus/) premium add-on is required for WYSIWYG fields support,
94
+ * Advanced Post List,
95
+ * All in One SEO Pack,
96
+ * WordPress SEO Plugin – Rank Math,
97
+ * Black Studio TinyMCE Widget (with our free add-on),
98
+ * MailChimp for WordPress,
99
+ * Max Mega Menu,
100
+ * Popups - WordPress Popup,
101
+ * Sidebar Login,
102
+ * WPBakery Page Builder,
103
+ * Whistles,
104
+ * Widget Logic,
105
+ * Yoast SEO. [WPGlobus Plus](https://wpglobus.com/product/wpglobus-plus/) premium add-on is required for multilingual focus keyword and SEO analysis.
106
+
107
+ Some 3rd-party plugins are supported with our [premium add-ons](https://wpglobus.com/shop/):
108
+
109
+ * [TablePress](https://wpglobus.com/product/wpglobus-plus/#tablepress),
110
+ * [WooCommerce and some of its extensions](https://wpglobus.com/product/woocommerce-wpglobus/),
111
+ * [WooCommerce Nets Netaxept Payment Plugin](https://wpglobus.com/product/multilingual-woocommerce-nets-netaxept/)
112
+
113
+ WPGlobus is compatible with ClassicPress Version 1.
114
+
115
+ = Permalinks =
116
+
117
+ **IMPORTANT:** WPGlobus will not work if your URLs look like `example.com?p=123` or `example.com/index.php/category/post/`.
118
+
119
+ Please go to `Settings->Permalinks` and change the permalink structure to non-default and with no `index.php` in it. If you are unable to do that for some reason, please talk to your hosting provider or systems administrator.
120
+
121
+ **Note:** WooCommerce adds their own section to the Permalinks. It is important to fill in all the information. For example, you need to specify your Shop Base, for example, `/product/`. If you leave it blank, WooCommerce will try to translate the base (eg `/produkt/` for German), which will result in a 404 error.
122
+
123
+ = Developing on `localhost` or custom ports =
124
+
125
+ WPGlobus may not work correctly on development servers having URLs like `//localhost/mysite` or on custom ports like `//myserver.dev:3000`. Please use a proper domain name (a fake one from `/etc/hosts` is OK), and port 80.
126
+
127
+ = More info and ways to contact the WPGlobus Development Team =
128
+
129
+ * [WPGlobus.com website](https://wpglobus.com/).
130
+ * [Open source code on GitHub](https://github.com/WPGlobus).
131
+
132
+ = Admin interface translations: =
133
+
134
+ **NOTE:** Please do not translate anything using the WordPress interface! Join our translation team on Transifex or translate the POT file using `POEdit`. Thank you!
135
+
136
+ * `de_DE` by [Tobias Hopp](http://www.tobiashopp.info/) ~ [WPGlobus ist ein Paket von mehreren WordPress-Plugins, die Möglichkeiten zur Übersetzung von Wordpress-Installationen bieten.](https://de.wordpress.org/plugins/wpglobus/)
137
+ * `es_ES` by [FX Bénard](http://wp-translations.org/) and [Patricia Casado](http://mascositas.com/) ~ [WPGlobus es una familia de plugins de WordPress que ayudan en la traducción de blogs de WordPress.](https://es.wordpress.org/plugins/wpglobus/)
138
+ * `fr_FR` by [FX Bénard](http://wp-translations.org/) ~ [WPGlobus fait partie des extensions WordPress qui vous aident à rendre les blogs et les sites WordPress multilingues.](https://fr.wordpress.org/plugins/wpglobus/)
139
+ * `id_ID` by [ChameleonJohn](https://www.chameleonjohn.com/) ~ [WPGlobus adalah keluarga plugin WordPress yang membantu Anda dalam membuat blog dan situs WordPress multibahasa.](https://id.wordpress.org/plugins/wpglobus/)
140
+ * `pl_PL` by [Maciej Gryniuk](http://maciej-gryniuk.tk/) ~ [WPGlobus jest rodziną wtyczek do WordPress'a pomocnych w tworzeniu wielojęzycznych blogów i stron na WordPress'ie.](https://pl.wordpress.org/plugins/wpglobus/)
141
+ * `ro_RO` by [Rodica-Elena Andronache](http://themeisle.com/) ~ [WPGlobus este o familie de plugin-uri WordPress ce te asistă în realizarea de bloguri și site-uri WordPress multilingve.](https://ro.wordpress.org/plugins/wpglobus/)
142
+ * `ru_RU` by [The WPGlobus Team](https://wpglobus.com/ru/) ~ [WPGlobus - это коллекция плагинов ВордПресс для создания мультиязычных сайтов](https://ru.wordpress.org/plugins/wpglobus/)
143
+ * `sv_SE` by [Elger Lindgren](http://bilddigital.se/) ~ [WPGlobus är en familj av WordPress-tillägg som hjälper dig att göra flerspråkiga Wordpressbloggar och webbplatser.](https://sv.wordpress.org/plugins/wpglobus/)
144
+ * `tr_TR` by [Borahan Conkeroglu](https://twitter.com/boracon68) ~ [WPGlobus WordPress bloglarını ve sitelerini çokdilli yapmakta size yardım eden bir WordPress eklentileri ailesidir.](https://tr.wordpress.org/plugins/wpglobus/)
145
+ * `uk` by [Pavlo Novak](https://plus.google.com/u/0/114797816817149043222) ~ ["WPGlobus - це колекція ВордПресс плагінів для створення багатомовних сайтів."](https://uk.wordpress.org/plugins/wpglobus/)
146
+
147
+ == Installation ==
148
+
149
+ You can install this plugin directly from your WordPress dashboard:
150
+
151
+ 1. Go to the *Plugins* menu and click *Add New*.
152
+ 1. Search for *WPGlobus*.
153
+ 1. Click *Install Now* next to the WPGlobus plugin.
154
+ 1. Activate the plugin.
155
+
156
+ Alternatively, see the guide to [Manually Installing Plugins](https://codex.wordpress.org/Managing_Plugins#Manual_Plugin_Installation).
157
+
158
+ To install with PHP Composer:
159
+
160
+ * https://wpackagist.org/search?q=wpglobus
161
+ * https://packagist.org/packages/wpglobus/wpglobus
162
+
163
+ == Frequently Asked Questions ==
164
+
165
+ = Please read these first: =
166
+
167
+ * [The Quick Start Guide](https://wpglobus.com/quick-start/)
168
+ * [Before contacting Support...](https://wpglobus.com/before-contacting-wpglobus-support/)
169
+
170
+ = No automatic translation =
171
+
172
+ WPGlobus does NOT translate texts! You need to **translate texts manually**.
173
+
174
+ = After deactivating WPGlobus, all my pages look like garbage! =
175
+
176
+ What you see is a mix of the languages, which WPGlobus knows how to handle when it's active.
177
+ When you deactivate WPGlobus, your site is not multilingual anymore, and you have to remove all translations.
178
+
179
+ WPGlobus stores all translations using a special format: `{:en}English{:}{:fr}French{:}{:es}Spanish{:}`. If you decide to **deactivate WPGlobus**, you **must run the clean-up tool** to keep only one language. See the details on the "Uninstall" tab in the WPGlobus Settings.
180
+
181
+ = When I switch language, I am getting 404 on all pages =
182
+
183
+ Please go to the `Admin - Settings - Permalinks` page. Make sure that the `Common Settings` is not set to "Plain" and then press the `Save Changes` button. It should help.
184
+
185
+ = Is there a PRO version? =
186
+
187
+ We do not make a "PRO" plugin that replaces the free one. Instead, we have a set of add-ons that extend the WPGlobus functionality. Please found them on [our website](https://wpglobus.com).
188
+
189
+ **NOTE:** When you install an add-on, such as **WPGlobus Plus**, you must keep the WPGlobus plugin activated!
190
+
191
+ = From the WPGlobus.com FAQ Archives: =
192
+
193
+ * [Do you support PHP 5.x? PHP 7.x?](https://wpglobus.com/faq/support-php-5-2/)
194
+ * [Do you support MSIE / Opera / Safari / Chrome / Firefox - Version x.x?](https://wpglobus.com/faq/support-msie-opera-safari-chrome-firefox/)
195
+ * [Do you plan to support subdomains and URL query parameters?](https://wpglobus.com/faq/subdomains-and-url-query-parameters/)
196
+ * [I am using WPML, qTranslate-X, Polylang, Multilingual Press, etc. Can I switch to WPGlobus?](https://wpglobus.com/faq/i-am-using-wpml-qtranslate-polylang-multilingual-press-etc-can-i-switch-to-wpglobus/)
197
+ * [Do you support WooCommerce, EDD, other e-Commerce plugins?](https://wpglobus.com/faq/support-woocommerce-edd/)
198
+ * [Is it possible to set the user's language automatically based on IP and/or browser language?](https://wpglobus.com/faq/set-language-by-ip/)
199
+ * [How do I contribute to WPGlobus?](https://wpglobus.com/faq/how-do-i-contribute-to-wpglobus/)
200
+
201
+ == Screenshots ==
202
+
203
+ 1. The Welcome screen.
204
+ 2. Settings panel.
205
+ 3. Languages setup.
206
+ 4. Attaching language switcher to a menu.
207
+ 5. Editing post in multiple languages.
208
+ 6. Multilingual Yoast SEO and Featured Images.
209
+ 7. Language Switcher widget and Multilingual Editor dialog.
210
+ 8. Multilingual WooCommerce store powered by [WooCommerce WPGlobus](https://wpglobus.com/product/woocommerce-wpglobus/).
211
+
212
+ == Upgrade Notice ==
213
+
214
+ = 2.0.0 =
215
+
216
+ WPGlobus Version 2 supports WordPress 5.x, with Gutenberg.
217
+
218
+ == Changelog ==
219
+
220
+ = 2.6.1 =
221
+ * (Core/Options) Added handling of actions for the tabs.
222
+ * (Core/Controller) Added filter `googlesitekit_canonical_home_url`.
223
+ * (Core/WP_Options) Fixed PHP Notice: `Array to string conversion`.
224
+ * (Core/Plugin Install) Fixed `uasort` warning.
225
+ * (Core) Code clean-up.
226
+ * (Vendor/RankMathSEO) Typo.
227
+ * (Core/Updater) Updater v.1.0.10.
228
+
229
+ = 2.6.0 =
230
+ * (Compatibility) Admin and Builders JavaScript code refactored to work with WordPress 5.6.*
231
+ * (Core) Revised filters on `widgets.php` page.
232
+ * (Core/WidgetsJS) Code refactored for Image widgets.
233
+
234
+ = 2.5.23 =
235
+ * (Vendor/Yoast) Fixed filter for the post title when post meta is empty.
236
+
237
+ = 2.5.22 =
238
+
239
+ * (Vendor/Yoast) Added filters for the taxonomy title, description, Open Graph title and description.
240
+ * (Vendor/Yoast) Fixed filter for the post title.
241
+
242
+ = 2.5.21 =
243
+
244
+ * (Customizer) WPGlobus Customizer is switched off for the `NewYork City` theme.
245
+ * (Customizer) CSS tweak for the `description` field.
246
+
247
+ = 2.5.20 =
248
+
249
+ * (Core/Recommendations) Added admin notices about required versions of WordPress PHP.
250
+
251
+ = 2.5.19 =
252
+
253
+ * (Options/Languages table) Added Georgian language and flag image.
254
+ * (Vendor/Yoast) Added multilingual support for the fields in the Social tab.
255
+
256
+ = 2.5.18 =
257
+
258
+ * (Builders/Pods) Fixed `Uncaught Error: Call to a member function fields() on bool`.
259
+
260
+ = Earlier versions and Add-ons =
261
+
262
+ * [See the complete changelog here](https://github.com/WPGlobus/WPGlobus/blob/master/CHANGELOG.md)
263
+ * [WPGlobus for WooCommerce](https://wpglobus.com/extensions/woocommerce-wpglobus/woocommerce-wpglobus-changelog/)
264
+ * [WPGlobus Plus](https://wpglobus.com/extensions/wpglobus-plus/changelog/)
265
+
266
+ == Demo Sites ==
267
+
268
+ * [WPGlobus.com](https://wpglobus.com/):
269
+ * Bilingual site using a variety of posts, pages, custom post types, forms, and a WooCommerce store with Subscription and API extensions.
vendor/composer/ClassLoader.php CHANGED
@@ -37,8 +37,8 @@ namespace Composer\Autoload;
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
- * @see http://www.php-fig.org/psr/psr-0/
41
- * @see http://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
@@ -60,7 +60,7 @@ class ClassLoader
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
63
- return call_user_func_array('array_merge', $this->prefixesPsr0);
64
  }
65
 
66
  return array();
37
  *
38
  * @author Fabien Potencier <fabien@symfony.com>
39
  * @author Jordi Boggiano <j.boggiano@seld.be>
40
+ * @see https://www.php-fig.org/psr/psr-0/
41
+ * @see https://www.php-fig.org/psr/psr-4/
42
  */
43
  class ClassLoader
44
  {
60
  public function getPrefixes()
61
  {
62
  if (!empty($this->prefixesPsr0)) {
63
+ return call_user_func_array('array_merge', array_values($this->prefixesPsr0));
64
  }
65
 
66
  return array();
vendor/composer/InstalledVersions.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ namespace Composer;
4
+
5
+ use Composer\Semver\VersionParser;
6
+
7
+
8
+
9
+
10
+
11
+
12
+ class InstalledVersions
13
+ {
14
+ private static $installed = array (
15
+ 'root' =>
16
+ array (
17
+ 'pretty_version' => 'dev-develop',
18
+ 'version' => 'dev-develop',
19
+ 'aliases' =>
20
+ array (
21
+ ),
22
+ 'reference' => '8be7f5ab873c73ea567597fdd26f07e620363071',
23
+ 'name' => 'wpglobus/wpglobus',
24
+ ),
25
+ 'versions' =>
26
+ array (
27
+ 'bemailr/wp-requirements' =>
28
+ array (
29
+ 'pretty_version' => '2.0.3',
30
+ 'version' => '2.0.3.0',
31
+ 'aliases' =>
32
+ array (
33
+ ),
34
+ 'reference' => 'e903973b0dfc1178f89c757bd205327811ea4658',
35
+ ),
36
+ 'tivwp/updater' =>
37
+ array (
38
+ 'pretty_version' => '1.0.10',
39
+ 'version' => '1.0.10.0',
40
+ 'aliases' =>
41
+ array (
42
+ ),
43
+ 'reference' => 'c380367c0e30359c16dde53d023208e349257be2',
44
+ ),
45
+ 'wpglobus/wpglobus' =>
46
+ array (
47
+ 'pretty_version' => 'dev-develop',
48
+ 'version' => 'dev-develop',
49
+ 'aliases' =>
50
+ array (
51
+ ),
52
+ 'reference' => '8be7f5ab873c73ea567597fdd26f07e620363071',
53
+ ),
54
+ ),
55
+ );
56
+
57
+
58
+
59
+
60
+
61
+
62
+
63
+ public static function getInstalledPackages()
64
+ {
65
+ return array_keys(self::$installed['versions']);
66
+ }
67
+
68
+
69
+
70
+
71
+
72
+
73
+
74
+
75
+
76
+ public static function isInstalled($packageName)
77
+ {
78
+ return isset(self::$installed['versions'][$packageName]);
79
+ }
80
+
81
+
82
+
83
+
84
+
85
+
86
+
87
+
88
+
89
+
90
+
91
+
92
+
93
+
94
+ public static function satisfies(VersionParser $parser, $packageName, $constraint)
95
+ {
96
+ $constraint = $parser->parseConstraints($constraint);
97
+ $provided = $parser->parseConstraints(self::getVersionRanges($packageName));
98
+
99
+ return $provided->matches($constraint);
100
+ }
101
+
102
+
103
+
104
+
105
+
106
+
107
+
108
+
109
+
110
+
111
+ public static function getVersionRanges($packageName)
112
+ {
113
+ if (!isset(self::$installed['versions'][$packageName])) {
114
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
115
+ }
116
+
117
+ $ranges = array();
118
+ if (isset(self::$installed['versions'][$packageName]['pretty_version'])) {
119
+ $ranges[] = self::$installed['versions'][$packageName]['pretty_version'];
120
+ }
121
+ if (array_key_exists('aliases', self::$installed['versions'][$packageName])) {
122
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['aliases']);
123
+ }
124
+ if (array_key_exists('replaced', self::$installed['versions'][$packageName])) {
125
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['replaced']);
126
+ }
127
+ if (array_key_exists('provided', self::$installed['versions'][$packageName])) {
128
+ $ranges = array_merge($ranges, self::$installed['versions'][$packageName]['provided']);
129
+ }
130
+
131
+ return implode(' || ', $ranges);
132
+ }
133
+
134
+
135
+
136
+
137
+
138
+ public static function getVersion($packageName)
139
+ {
140
+ if (!isset(self::$installed['versions'][$packageName])) {
141
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
142
+ }
143
+
144
+ if (!isset(self::$installed['versions'][$packageName]['version'])) {
145
+ return null;
146
+ }
147
+
148
+ return self::$installed['versions'][$packageName]['version'];
149
+ }
150
+
151
+
152
+
153
+
154
+
155
+ public static function getPrettyVersion($packageName)
156
+ {
157
+ if (!isset(self::$installed['versions'][$packageName])) {
158
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
159
+ }
160
+
161
+ if (!isset(self::$installed['versions'][$packageName]['pretty_version'])) {
162
+ return null;
163
+ }
164
+
165
+ return self::$installed['versions'][$packageName]['pretty_version'];
166
+ }
167
+
168
+
169
+
170
+
171
+
172
+ public static function getReference($packageName)
173
+ {
174
+ if (!isset(self::$installed['versions'][$packageName])) {
175
+ throw new \OutOfBoundsException('Package "' . $packageName . '" is not installed');
176
+ }
177
+
178
+ if (!isset(self::$installed['versions'][$packageName]['reference'])) {
179
+ return null;
180
+ }
181
+
182
+ return self::$installed['versions'][$packageName]['reference'];
183
+ }
184
+
185
+
186
+
187
+
188
+
189
+ public static function getRootPackage()
190
+ {
191
+ return self::$installed['root'];
192
+ }
193
+
194
+
195
+
196
+
197
+
198
+
199
+
200
+ public static function getRawData()
201
+ {
202
+ return self::$installed;
203
+ }
204
+
205
+
206
+
207
+
208
+
209
+
210
+
211
+
212
+
213
+
214
+
215
+
216
+
217
+
218
+
219
+
220
+
221
+
222
+
223
+ public static function reload($data)
224
+ {
225
+ self::$installed = $data;
226
+ }
227
+ }
vendor/composer/autoload_classmap.php CHANGED
@@ -6,4 +6,5 @@ $vendorDir = dirname(dirname(__FILE__));
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
 
9
  );
6
  $baseDir = dirname($vendorDir);
7
 
8
  return array(
9
+ 'Composer\\InstalledVersions' => $vendorDir . '/composer/InstalledVersions.php',
10
  );
vendor/composer/autoload_real.php CHANGED
@@ -13,6 +13,9 @@ class ComposerAutoloaderInit73ad96349088be86890408600b0d3e35
13
  }
14
  }
15
 
 
 
 
16
  public static function getLoader()
17
  {
18
  if (null !== self::$loader) {
@@ -25,7 +28,7 @@ class ComposerAutoloaderInit73ad96349088be86890408600b0d3e35
25
 
26
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
27
  if ($useStaticLoader) {
28
- require_once __DIR__ . '/autoload_static.php';
29
 
30
  call_user_func(\Composer\Autoload\ComposerStaticInit73ad96349088be86890408600b0d3e35::getInitializer($loader));
31
  } else {
13
  }
14
  }
15
 
16
+ /**
17
+ * @return \Composer\Autoload\ClassLoader
18
+ */
19
  public static function getLoader()
20
  {
21
  if (null !== self::$loader) {
28
 
29
  $useStaticLoader = PHP_VERSION_ID >= 50600 && !defined('HHVM_VERSION') && (!function_exists('zend_loader_file_encoded') || !zend_loader_file_encoded());
30
  if ($useStaticLoader) {
31
+ require __DIR__ . '/autoload_static.php';
32
 
33
  call_user_func(\Composer\Autoload\ComposerStaticInit73ad96349088be86890408600b0d3e35::getInitializer($loader));
34
  } else {
vendor/composer/autoload_static.php CHANGED
@@ -6,9 +6,14 @@ namespace Composer\Autoload;
6
 
7
  class ComposerStaticInit73ad96349088be86890408600b0d3e35
8
  {
 
 
 
 
9
  public static function getInitializer(ClassLoader $loader)
10
  {
11
  return \Closure::bind(function () use ($loader) {
 
12
 
13
  }, null, ClassLoader::class);
14
  }
6
 
7
  class ComposerStaticInit73ad96349088be86890408600b0d3e35
8
  {
9
+ public static $classMap = array (
10
+ 'Composer\\InstalledVersions' => __DIR__ . '/..' . '/composer/InstalledVersions.php',
11
+ );
12
+
13
  public static function getInitializer(ClassLoader $loader)
14
  {
15
  return \Closure::bind(function () use ($loader) {
16
+ $loader->classMap = ComposerStaticInit73ad96349088be86890408600b0d3e35::$classMap;
17
 
18
  }, null, ClassLoader::class);
19
  }
vendor/composer/installed.json CHANGED
@@ -1,62 +1,68 @@
1
- [
2
- {
3
- "name": "bemailr/wp-requirements",
4
- "version": "2.0.3",
5
- "version_normalized": "2.0.3.0",
6
- "source": {
7
- "type": "git",
8
- "url": "https://github.com/bemailr/wp-requirements.git",
9
- "reference": "e903973b0dfc1178f89c757bd205327811ea4658"
10
- },
11
- "dist": {
12
- "type": "zip",
13
- "url": "https://api.github.com/repos/bemailr/wp-requirements/zipball/e903973b0dfc1178f89c757bd205327811ea4658",
14
- "reference": "e903973b0dfc1178f89c757bd205327811ea4658",
15
- "shasum": ""
16
- },
17
- "time": "2016-10-18T23:09:16+00:00",
18
- "type": "library",
19
- "installation-source": "dist",
20
- "notification-url": "https://packagist.org/downloads/",
21
- "license": [
22
- "GPL-3.0"
23
- ],
24
- "description": "A helpful library for checking the prerequisites when activating / running a WordPress plugin.",
25
- "keywords": [
26
- "wordpress"
27
- ]
28
- },
29
- {
30
- "name": "tivwp/updater",
31
- "version": "1.0.9",
32
- "version_normalized": "1.0.9.0",
33
- "source": {
34
- "type": "git",
35
- "url": "https://bitbucket.org/tivwp/tivwp-updater.git",
36
- "reference": "6bd2adb27bc18e7cdbdba1eaf269a39fa8a0f729"
37
- },
38
- "dist": {
39
- "type": "zip",
40
- "url": "https://bitbucket.org/tivwp/tivwp-updater/get/6bd2adb27bc18e7cdbdba1eaf269a39fa8a0f729.zip",
41
- "reference": "6bd2adb27bc18e7cdbdba1eaf269a39fa8a0f729",
42
- "shasum": ""
43
- },
44
- "time": "2018-03-23T12:14:51+00:00",
45
- "type": "library",
46
- "installation-source": "dist",
47
- "license": [
48
- "GPL-3.0"
49
- ],
50
- "authors": [
51
- {
52
- "name": "Gregory Karpinsky",
53
- "email": "gregory@tiv.net"
54
- }
55
- ],
56
- "description": "Interface to WooCommerce API Manager",
57
- "homepage": "https://bitbucket.org/tivwp/tivwp-updater",
58
- "support": {
59
- "source": "https://bitbucket.org/tivwp/tivwp-updater/src/6bd2adb27bc18e7cdbdba1eaf269a39fa8a0f729/?at=1.0.9"
60
- }
61
- }
62
- ]
 
 
 
 
 
 
1
+ {
2
+ "packages": [
3
+ {
4
+ "name": "bemailr/wp-requirements",
5
+ "version": "2.0.3",
6
+ "version_normalized": "2.0.3.0",
7
+ "source": {
8
+ "type": "git",
9
+ "url": "https://github.com/bemailr/wp-requirements.git",
10
+ "reference": "e903973b0dfc1178f89c757bd205327811ea4658"
11
+ },
12
+ "dist": {
13
+ "type": "zip",
14
+ "url": "https://api.github.com/repos/bemailr/wp-requirements/zipball/e903973b0dfc1178f89c757bd205327811ea4658",
15
+ "reference": "e903973b0dfc1178f89c757bd205327811ea4658",
16
+ "shasum": ""
17
+ },
18
+ "time": "2016-10-18T23:09:16+00:00",
19
+ "type": "library",
20
+ "installation-source": "dist",
21
+ "notification-url": "https://packagist.org/downloads/",
22
+ "license": [
23
+ "GPL-3.0"
24
+ ],
25
+ "description": "A helpful library for checking the prerequisites when activating / running a WordPress plugin.",
26
+ "keywords": [
27
+ "wordpress"
28
+ ],
29
+ "install-path": "../bemailr/wp-requirements"
30
+ },
31
+ {
32
+ "name": "tivwp/updater",
33
+ "version": "1.0.10",
34
+ "version_normalized": "1.0.10.0",
35
+ "source": {
36
+ "type": "git",
37
+ "url": "https://bitbucket.org/tivwp/tivwp-updater.git",
38
+ "reference": "c380367c0e30359c16dde53d023208e349257be2"
39
+ },
40
+ "dist": {
41
+ "type": "zip",
42
+ "url": "https://bitbucket.org/tivwp/tivwp-updater/get/c380367c0e30359c16dde53d023208e349257be2.zip",
43
+ "reference": "c380367c0e30359c16dde53d023208e349257be2",
44
+ "shasum": ""
45
+ },
46
+ "time": "2020-12-25T19:34:18+00:00",
47
+ "type": "library",
48
+ "installation-source": "dist",
49
+ "license": [
50
+ "GPL-3.0"
51
+ ],
52
+ "authors": [
53
+ {
54
+ "name": "Gregory Karpinsky",
55
+ "email": "gregory@tiv.net"
56
+ }
57
+ ],
58
+ "description": "Interface to WooCommerce API Manager",
59
+ "homepage": "https://bitbucket.org/tivwp/tivwp-updater",
60
+ "support": {
61
+ "source": "https://bitbucket.org/tivwp/tivwp-updater/src/c380367c0e30359c16dde53d023208e349257be2/?at=1.0.10"
62
+ },
63
+ "install-path": "../tivwp/updater"
64
+ }
65
+ ],
66
+ "dev": true,
67
+ "dev-package-names": []
68
+ }
vendor/composer/installed.php ADDED
@@ -0,0 +1,42 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php return array (
2
+ 'root' =>
3
+ array (
4
+ 'pretty_version' => 'dev-develop',
5
+ 'version' => 'dev-develop',
6
+ 'aliases' =>
7
+ array (
8
+ ),
9
+ 'reference' => '8be7f5ab873c73ea567597fdd26f07e620363071',
10
+ 'name' => 'wpglobus/wpglobus',
11
+ ),
12
+ 'versions' =>
13
+ array (
14
+ 'bemailr/wp-requirements' =>
15
+ array (
16
+ 'pretty_version' => '2.0.3',
17
+ 'version' => '2.0.3.0',
18
+ 'aliases' =>
19
+ array (
20
+ ),
21
+ 'reference' => 'e903973b0dfc1178f89c757bd205327811ea4658',
22
+ ),
23
+ 'tivwp/updater' =>
24
+ array (
25
+ 'pretty_version' => '1.0.10',
26
+ 'version' => '1.0.10.0',
27
+ 'aliases' =>
28
+ array (
29
+ ),
30
+ 'reference' => 'c380367c0e30359c16dde53d023208e349257be2',
31
+ ),
32
+ 'wpglobus/wpglobus' =>
33
+ array (
34
+ 'pretty_version' => 'dev-develop',
35
+ 'version' => 'dev-develop',
36
+ 'aliases' =>
37
+ array (
38
+ ),
39
+ 'reference' => '8be7f5ab873c73ea567597fdd26f07e620363071',
40
+ ),
41
+ ),
42
+ );
vendor/tivwp/updater/class-tivwp-updater.php CHANGED
@@ -5,9 +5,13 @@
5
  * @package TIVWP_Updater
6
  */
7
 
8
- // This is to avoid the PHPStorm warning about multiple Updater classes in the project.
9
- // Had to place it file-wide because otherwise PHPCS complains about improper class comment.
10
- /* @noinspection PhpUndefinedClassInspection */
 
 
 
 
11
 
12
  /**
13
  * Class TIVWP_Updater
@@ -149,7 +153,7 @@ class TIVWP_Updater {
149
  */
150
  public function __construct( array $args = array() ) {
151
 
152
- $this->_initialize_class_variables( $args );
153
 
154
  // Note: these settings are for a specific plugin, so cannot do it at the loader.
155
  $ok_to_run = true;
@@ -162,18 +166,18 @@ class TIVWP_Updater {
162
  /**
163
  * Override the $ok_to_run value.
164
  *
165
- * @example
166
- * <code>
167
- * add_filter( 'tivwp-updater-ok-to-run', '__return_true' );
168
- * </code>
169
- *
170
  * @param bool $ok_to_run The value.
171
  * @param TIVWP_Updater $this The Updater class instance.
 
 
 
 
 
172
  */
173
- $ok_to_run = apply_filters( 'tivwp-updater-ok-to-run', $ok_to_run, $this );
174
 
175
  if ( $ok_to_run ) {
176
- $this->_set_hooks();
177
  }
178
 
179
  }
@@ -183,7 +187,7 @@ class TIVWP_Updater {
183
  *
184
  * @param array $args To initialize class variables.
185
  */
186
- protected function _initialize_class_variables( array $args ) {
187
  foreach ( explode( ',', self::CONSTRUCTOR_VARS ) as $var_name ) {
188
  if ( isset( $args[ $var_name ] ) ) {
189
  /* @noinspection PhpVariableVariableInspection */
@@ -206,10 +210,11 @@ class TIVWP_Updater {
206
  /**
207
  * Setup filters and actions.
208
  */
209
- protected function _set_hooks() {
210
 
211
  // Tell WP where to check for plugin updates.
212
- add_filter( 'pre_set_site_transient_update_plugins',
 
213
  array(
214
  $this,
215
  'filter__pre_set_site_transient_update_plugins',
@@ -230,17 +235,12 @@ class TIVWP_Updater {
230
  */
231
  public function action__init() {
232
  foreach ( explode( ',', self::PERSISTENT_VARS ) as $key ) {
233
- $this->_var_load( $key );
234
  }
235
 
236
- /**
237
- * These two methods will work only if there is no instance yet.
238
- * Migration should be tried first, and then - generate a new instance.
239
- */
240
- $this->_migration();
241
- $this->_maybe_generate_instance();
242
 
243
- $this->_process_admin_requests();
244
 
245
  /**
246
  * This action will display the License Management Form after the plugin row.
@@ -262,7 +262,7 @@ class TIVWP_Updater {
262
  */
263
  public function action__shutdown() {
264
  foreach ( explode( ',', self::PERSISTENT_VARS ) as $key ) {
265
- $this->_var_save( $key );
266
  }
267
  }
268
 
@@ -271,7 +271,7 @@ class TIVWP_Updater {
271
  *
272
  * @param string $key The variable name.
273
  */
274
- protected function _var_save( $key ) {
275
  /* @noinspection PhpVariableVariableInspection */
276
  if ( ! isset( $this->$key ) ) {
277
  return;
@@ -296,7 +296,7 @@ class TIVWP_Updater {
296
  *
297
  * @param string $key The variable name.
298
  */
299
- protected function _var_load( $key ) {
300
  /* @noinspection PhpVariableVariableInspection */
301
  if ( ! isset( $this->$key ) ) {
302
  return;
@@ -305,6 +305,8 @@ class TIVWP_Updater {
305
  if ( null !== $stored_value ) {
306
  /* @noinspection PhpVariableVariableInspection */
307
  $this->$key = $stored_value;
 
 
308
  }
309
  }
310
 
@@ -325,7 +327,7 @@ class TIVWP_Updater {
325
  * @return array The response array.
326
  */
327
  public function get_status() {
328
- return $this->_get_server_response( $this->_url_status() );
329
  }
330
 
331
  /**
@@ -334,7 +336,7 @@ class TIVWP_Updater {
334
  * @return array The response array.
335
  */
336
  public function activate() {
337
- return $this->_get_server_response( $this->_url_activation() );
338
  }
339
 
340
  /**
@@ -343,7 +345,7 @@ class TIVWP_Updater {
343
  * @return array The response array.
344
  */
345
  public function deactivate() {
346
- return $this->_get_server_response( $this->_url_deactivation() );
347
  }
348
 
349
  /**
@@ -353,7 +355,7 @@ class TIVWP_Updater {
353
  *
354
  * @see set_site_transient
355
  *
356
- * @param mixed $transient The value of site transient.
357
  *
358
  * @return mixed $transient Updated value of site transient.
359
  */
@@ -363,7 +365,7 @@ class TIVWP_Updater {
363
  // Not our business?
364
  empty( $transient->checked[ $this->plugin_name ] )
365
  // Do we have data?
366
- || ! $this->_is_license_pair_filled_in()
367
  ) {
368
  return $transient;
369
  }
@@ -376,10 +378,11 @@ class TIVWP_Updater {
376
  'version' => $current_version,
377
  );
378
 
379
- $response = $this->_get_upgrade_api_response( $request_parameters );
380
 
381
- if ( isset( $response->new_version )
382
- && version_compare( (string) $response->new_version, $current_version, '>' )
 
383
  ) {
384
  $transient->response[ $this->plugin_name ] = $response;
385
  }
@@ -423,7 +426,7 @@ class TIVWP_Updater {
423
  'software_version' => $current_version,
424
  );
425
 
426
- $response = $this->_get_upgrade_api_response( $request_parameters );
427
 
428
  // If everything is okay return the $response.
429
  if ( isset( $response->sections ) ) {
@@ -490,17 +493,9 @@ class TIVWP_Updater {
490
  * Images must not go wider than their container.
491
  */
492
  public function fix_info_sections_style() {
493
- ?>
494
- <style id="tivwp-updater-fix-info-css">
495
- #section-holder .section h2 {
496
- clear: none;
497
- }
498
-
499
- #section-holder .section img {
500
- max-width: 100%
501
- }
502
- </style>
503
- <?php
504
  }
505
 
506
  /**
@@ -510,18 +505,20 @@ class TIVWP_Updater {
510
  *
511
  * @return stdClass The response.
512
  */
513
- protected function _get_upgrade_api_response( array $request_parameters ) {
514
- $request_parameters = array_merge( array(
515
- 'activation_email' => $this->email,
516
- 'api_key' => $this->licence_key,
517
- 'domain' => $this->platform,
518
- 'instance' => $this->instance,
519
- 'plugin_name' => $this->plugin_name,
520
- 'product_id' => $this->product_id,
521
- ), $request_parameters );
 
 
 
522
 
523
- $url = add_query_arg( 'wc-api', 'upgrade-api', $this->url_product ) . '&' .
524
- http_build_query( $request_parameters, '', '&' );
525
 
526
  $result = wp_safe_remote_get( esc_url_raw( $url ) );
527
 
@@ -533,9 +530,7 @@ class TIVWP_Updater {
533
  || ( 200 !== (int) wp_remote_retrieve_response_code( $result ) )
534
  ) {
535
 
536
- $error_message = '<h3>' .
537
- esc_html__( 'Licensing server connection error.', 'tivwp-updater' ) .
538
- '</h3>';
539
 
540
  /* @noinspection NotOptimalIfConditionsInspection */
541
  if ( is_wp_error( $result ) ) {
@@ -574,9 +569,9 @@ class TIVWP_Updater {
574
  */
575
 
576
  $response_body = wp_remote_retrieve_body( $result );
577
- if ( is_serialized( $response_body ) ) :
578
 
579
- $response_object = unserialize( $response_body );
580
 
581
  if ( is_object( $response_object ) ) {
582
  /**
@@ -599,7 +594,7 @@ class TIVWP_Updater {
599
 
600
  return $response_object;
601
  }
602
- endif;
603
 
604
  /**
605
  * And this is an "impossible" case. WP will show a default error message.
@@ -614,18 +609,19 @@ class TIVWP_Updater {
614
  *
615
  * @return string The response.
616
  */
617
- protected function _build_url( array $args ) {
618
- $args = array_merge( array(
619
- 'product_id' => $this->product_id,
620
- 'instance' => $this->instance,
621
- 'email' => $this->email,
622
- 'licence_key' => $this->licence_key,
623
- 'platform' => $this->platform,
624
- ), $args );
625
-
 
 
626
 
627
- $url = add_query_arg( 'wc-api', 'am-software-api', $this->url_product ) . '&' .
628
- http_build_query( $args, '', '&' );
629
 
630
  if ( class_exists( 'TIVWP_Debug_Bar' ) ) {
631
  TIVWP_Debug_Bar::print_link( $url );
@@ -639,10 +635,8 @@ class TIVWP_Updater {
639
  *
640
  * @return string The URL.
641
  */
642
- protected function _url_status() {
643
- return $this->_build_url( array(
644
- 'request' => 'status',
645
- ) );
646
  }
647
 
648
  /**
@@ -650,10 +644,8 @@ class TIVWP_Updater {
650
  *
651
  * @return string The URL.
652
  */
653
- protected function _url_activation() {
654
- return $this->_build_url( array(
655
- 'request' => 'activation',
656
- ) );
657
  }
658
 
659
  /**
@@ -661,10 +653,8 @@ class TIVWP_Updater {
661
  *
662
  * @return string The URL.
663
  */
664
- protected function _url_deactivation() {
665
- return $this->_build_url( array(
666
- 'request' => 'deactivation',
667
- ) );
668
  }
669
 
670
  /**
@@ -674,16 +664,18 @@ class TIVWP_Updater {
674
  *
675
  * @return array Response from the server.
676
  */
677
- protected function _get_server_response( $url ) {
678
 
679
- if ( ! $this->_is_license_pair_filled_in() ) {
680
- $response_body = wp_json_encode( array(
681
- self::KEY_ERROR =>
682
- __( 'License / email is empty or invalid.', 'tivwp-updater' ),
683
- ) );
 
 
684
 
685
  } else {
686
- $result = wp_safe_remote_get( $url );
687
  if ( is_wp_error( $result ) ) {
688
 
689
  $error_message = '';
@@ -693,44 +685,58 @@ class TIVWP_Updater {
693
  $error_message = implode( '; ', $error_messages );
694
  }
695
 
696
- $response_body = wp_json_encode( array(
697
- self::KEY_ERROR => implode( ' ', array(
698
- __( 'Licensing server connection error.', 'tivwp-updater' ),
699
- $error_message,
700
- ) ),
701
- ) );
 
 
 
 
 
702
 
703
  } elseif ( 200 !== (int) wp_remote_retrieve_response_code( $result ) ) {
704
 
705
- $response_body = wp_json_encode( array(
706
- self::KEY_ERROR => implode( ' ', array(
707
- __( 'Licensing server connection error.', 'tivwp-updater' ),
708
- $result['response']['code'] . ' - '
709
- . $result['response']['message'],
710
- ) ),
711
- ) );
 
 
 
 
 
712
  } else {
713
  $response_body = wp_remote_retrieve_body( $result );
714
  }
715
  }
716
 
717
- // The JSON_OBJECT_AS_ARRAY constant exists since PHP 5.4
 
 
 
 
718
  return json_decode( $response_body, true );
719
  }
720
 
721
  /**
722
  * Generate a new instance if not set yet.
723
  */
724
- protected function _maybe_generate_instance() {
725
  if ( ! $this->instance ) {
726
- $this->instance = substr( sha1( site_url() . (string) mt_rand( 100, 999 ) ), 0, 12 );
727
 
728
  /**
729
  * If a new instance has been generated, we must update the state.
730
  * Updating must be hooked, and not run here, when we are called from
731
  * the Constructor.
732
  */
733
- $this->_reset_state();
734
  add_action( 'admin_init', array( $this, 'update_state' ) );
735
  }
736
  }
@@ -740,7 +746,7 @@ class TIVWP_Updater {
740
  *
741
  * @todo nonce.
742
  */
743
- protected function _process_admin_requests() {
744
  // @codingStandardsIgnoreStart
745
  if ( empty( $_POST ) ) {
746
  return;
@@ -772,18 +778,15 @@ class TIVWP_Updater {
772
 
773
  $key = 'action';
774
  $_sk = $this->slug . '_' . $key;
775
- if ( 1
776
- && $this->licence_key
777
- && $this->email
778
- && isset( $form_data[ $_sk ] )
779
-
780
- ) {
781
  if ( 'activate' === $form_data[ $_sk ] ) {
782
- $this->_try_to_activate();
 
783
  } elseif ( 'deactivate' === $form_data[ $_sk ] ) {
784
- $this->_try_to_deactivate();
 
785
  } elseif ( 'status' === $form_data[ $_sk ] ) {
786
- $this->_try_to_get_status();
787
  }
788
  }
789
 
@@ -792,8 +795,8 @@ class TIVWP_Updater {
792
  /**
793
  * Reset the state: clear notification and the transient.
794
  */
795
- protected function _reset_state() {
796
- $this->_notification_clear_all();
797
  delete_site_transient( 'update_plugins' );
798
  }
799
 
@@ -801,7 +804,7 @@ class TIVWP_Updater {
801
  * Public wrapper to use in callbacks.
802
  */
803
  public function update_state() {
804
- $this->_try_to_get_status();
805
  }
806
 
807
  /**
@@ -809,7 +812,7 @@ class TIVWP_Updater {
809
  *
810
  * @param string|string[] $message Message or array of messages.
811
  */
812
- protected function _notifications_set( $message = '' ) {
813
  $this->notifications = (array) $message;
814
  }
815
 
@@ -818,103 +821,41 @@ class TIVWP_Updater {
818
  *
819
  * @param string $message The message.
820
  */
821
- protected function _notification_add( $message ) {
822
  $this->notifications[] = $message;
823
  }
824
 
825
  /**
826
  * Clear all notification messages.
827
  */
828
- protected function _notification_clear_all() {
829
  $this->notifications = array();
830
  }
831
 
832
- /**
833
- * Migrate options from the old WPGlobus Updater.
834
- * Works only if there is no instance yet.
835
- */
836
- protected function _migration() {
837
-
838
- if ( $this->instance ) {
839
- return;
840
- }
841
-
842
- /**
843
- * Example of the old options. (slug is `wpglobus_plus`)
844
- *
845
- * <code>
846
- * wpgupd_wpglobus_plus_act
847
- * Activated
848
- *
849
- * wpgupd_wpglobus_plus_data
850
- * a:2:{s:24:"wpgupd_wpglobus_plus_api";s:38:"wc_order_****";
851
- * s:37:"wpgupd_wpglobus_plus_activation_email";s:20:"email@example.com";}
852
- *
853
- * wpgupd_wpglobus_plus_dea_cb_key
854
- * on
855
- *
856
- * wpgupd_wpglobus_plus_inst
857
- * d91ae12*****
858
- *
859
- * wpgupd_wpglobus_plus_pid
860
- * WPGlobus Plus
861
- * </code>
862
- */
863
-
864
- // Options prefix - code snipped copied from the WPGlobus Updater.
865
- $prefix = $this->product_id;
866
- $prefix = strtolower( $prefix );
867
- $prefix = preg_replace( '/[^%a-z0-9 _-]/', '', $prefix );
868
- $prefix = preg_replace( '/[\s-_]+/', '_', $prefix );
869
- $prefix = trim( $prefix, '_' );
870
- $prefix = 'wpgupd_' . $prefix;
871
-
872
- // Migrate instance.
873
- $_old_instance = get_option( $prefix . '_inst' );
874
- if ( $_old_instance ) {
875
- $this->instance = $_old_instance;
876
- }
877
-
878
- // Migrate license and email (serialized in `_data`).
879
- $_old_data = get_option( $prefix . '_data' );
880
- if ( ! $this->licence_key && ! empty( $_old_data[ $prefix . '_api' ] ) ) {
881
- $this->licence_key = $_old_data[ $prefix . '_api' ];
882
- }
883
- if ( ! $this->email && ! empty( $_old_data[ $prefix . '_activation_email' ] ) ) {
884
- $this->email = $_old_data[ $prefix . '_activation_email' ];
885
- }
886
-
887
- // Update status after migration.
888
- $this->_try_to_get_status();
889
-
890
- }
891
-
892
  /**
893
  * Try to activate and update status.
894
  */
895
- protected function _try_to_activate() {
896
- $this->_reset_state();
897
  $result = $this->activate();
898
  if ( ! empty( $result[ self::KEY_ERROR ] ) ) {
899
- $this->_notification_add( $result[ self::KEY_ERROR ] );
900
- } elseif ( isset( $result['activated'] )
901
- && $result['activated']
902
- ) {
903
  $this->status = self::STATUS_ACTIVE;
904
- $this->_notification_add( $result['message'] );
905
  }
906
  }
907
 
908
  /**
909
  * Try to deactivate and update status.
910
  */
911
- protected function _try_to_deactivate() {
912
- $this->_reset_state();
913
  $result = $this->deactivate();
914
  if ( ! empty( $result[ self::KEY_ERROR ] ) ) {
915
- $this->_notification_add( $result[ self::KEY_ERROR ] );
916
  if ( ! empty( $result[ self::KEY_ADDITIONAL_INFO ] ) ) {
917
- $this->_notification_add( $result[ self::KEY_ADDITIONAL_INFO ] );
918
  }
919
  /**
920
  * If the server returns status "inactive" then we assume that the
@@ -927,12 +868,10 @@ class TIVWP_Updater {
927
  if ( isset( $result['activated'] ) && self::STATUS_INACTIVE === $result['activated'] ) {
928
  $this->status = self::STATUS_INACTIVE;
929
  }
930
- } elseif ( isset( $result['deactivated'] )
931
- && $result['deactivated']
932
- ) {
933
  $this->status = self::STATUS_INACTIVE;
934
  if ( ! empty( $result['activations_remaining'] ) ) {
935
- $this->_notification_add( $result['activations_remaining'] );
936
  }
937
  }
938
  }
@@ -940,16 +879,16 @@ class TIVWP_Updater {
940
  /**
941
  * Get status from the Licensing server and update the class variables.
942
  */
943
- protected function _try_to_get_status() {
944
 
945
  $result = $this->get_status();
946
  if ( ! empty( $result[ self::KEY_ERROR ] ) ) {
947
  $this->status = self::STATUS_INACTIVE;
948
- $this->_notifications_set( $result[ self::KEY_ERROR ] );
949
  } elseif ( ! empty( $result['status_check'] ) ) {
950
  $this->status = $result['status_check'];
951
  if ( ! empty( $result['activations_remaining'] ) ) {
952
- $this->_notifications_set( $result['activations_remaining'] );
953
  }
954
  }
955
  }
@@ -959,7 +898,7 @@ class TIVWP_Updater {
959
  *
960
  * @return bool True if both are not empty.
961
  */
962
- protected function _is_license_pair_filled_in() {
963
  return ( $this->licence_key && $this->email );
964
  }
965
  }
5
  * @package TIVWP_Updater
6
  */
7
 
8
+ /**
9
+ * This is to avoid the PHPStorm warning about multiple Updater classes in the project.
10
+ * Had to place it file-wide because otherwise PHPCS complains about improper class comment.
11
+ *
12
+ * @noinspection RedundantSuppression
13
+ * @noinspection PhpUndefinedClassInspection
14
+ */
15
 
16
  /**
17
  * Class TIVWP_Updater
153
  */
154
  public function __construct( array $args = array() ) {
155
 
156
+ $this->initialize_class_variables( $args );
157
 
158
  // Note: these settings are for a specific plugin, so cannot do it at the loader.
159
  $ok_to_run = true;
166
  /**
167
  * Override the $ok_to_run value.
168
  *
 
 
 
 
 
169
  * @param bool $ok_to_run The value.
170
  * @param TIVWP_Updater $this The Updater class instance.
171
+ *
172
+ * @example
173
+ * <code>
174
+ * add_filter( 'tivwp-updater-ok-to-run', '__return_true' );
175
+ * </code>
176
  */
177
+ $ok_to_run = apply_filters( 'tivwp_updater_ok_to_run', $ok_to_run, $this );
178
 
179
  if ( $ok_to_run ) {
180
+ $this->set_hooks();
181
  }
182
 
183
  }
187
  *
188
  * @param array $args To initialize class variables.
189
  */
190
+ protected function initialize_class_variables( array $args ) {
191
  foreach ( explode( ',', self::CONSTRUCTOR_VARS ) as $var_name ) {
192
  if ( isset( $args[ $var_name ] ) ) {
193
  /* @noinspection PhpVariableVariableInspection */
210
  /**
211
  * Setup filters and actions.
212
  */
213
+ protected function set_hooks() {
214
 
215
  // Tell WP where to check for plugin updates.
216
+ add_filter(
217
+ 'pre_set_site_transient_update_plugins',
218
  array(
219
  $this,
220
  'filter__pre_set_site_transient_update_plugins',
235
  */
236
  public function action__init() {
237
  foreach ( explode( ',', self::PERSISTENT_VARS ) as $key ) {
238
+ $this->var_load( $key );
239
  }
240
 
241
+ $this->maybe_generate_instance();
 
 
 
 
 
242
 
243
+ $this->process_admin_requests();
244
 
245
  /**
246
  * This action will display the License Management Form after the plugin row.
262
  */
263
  public function action__shutdown() {
264
  foreach ( explode( ',', self::PERSISTENT_VARS ) as $key ) {
265
+ $this->var_save( $key );
266
  }
267
  }
268
 
271
  *
272
  * @param string $key The variable name.
273
  */
274
+ protected function var_save( $key ) {
275
  /* @noinspection PhpVariableVariableInspection */
276
  if ( ! isset( $this->$key ) ) {
277
  return;
296
  *
297
  * @param string $key The variable name.
298
  */
299
+ protected function var_load( $key ) {
300
  /* @noinspection PhpVariableVariableInspection */
301
  if ( ! isset( $this->$key ) ) {
302
  return;
305
  if ( null !== $stored_value ) {
306
  /* @noinspection PhpVariableVariableInspection */
307
  $this->$key = $stored_value;
308
+ } elseif ( 'email' === $key ) {
309
+ $this->email = get_option( 'admin_email', '' );
310
  }
311
  }
312
 
327
  * @return array The response array.
328
  */
329
  public function get_status() {
330
+ return $this->get_server_response( $this->url_status() );
331
  }
332
 
333
  /**
336
  * @return array The response array.
337
  */
338
  public function activate() {
339
+ return $this->get_server_response( $this->url_activation() );
340
  }
341
 
342
  /**
345
  * @return array The response array.
346
  */
347
  public function deactivate() {
348
+ return $this->get_server_response( $this->url_deactivation() );
349
  }
350
 
351
  /**
355
  *
356
  * @see set_site_transient
357
  *
358
+ * @param mixed $transient The value of site transient.
359
  *
360
  * @return mixed $transient Updated value of site transient.
361
  */
365
  // Not our business?
366
  empty( $transient->checked[ $this->plugin_name ] )
367
  // Do we have data?
368
+ || ! $this->is_license_pair_filled_in()
369
  ) {
370
  return $transient;
371
  }
378
  'version' => $current_version,
379
  );
380
 
381
+ $response = $this->get_upgrade_api_response( $request_parameters );
382
 
383
+ if (
384
+ isset( $response->new_version )
385
+ && version_compare( (string) $response->new_version, $current_version, '>' )
386
  ) {
387
  $transient->response[ $this->plugin_name ] = $response;
388
  }
426
  'software_version' => $current_version,
427
  );
428
 
429
+ $response = $this->get_upgrade_api_response( $request_parameters );
430
 
431
  // If everything is okay return the $response.
432
  if ( isset( $response->sections ) ) {
493
  * Images must not go wider than their container.
494
  */
495
  public function fix_info_sections_style() {
496
+ echo '<style id="tivwp-updater-fix-info-css">';
497
+ include __DIR__ . '/assets/css/fix-info-sections.css';
498
+ echo '</style>';
 
 
 
 
 
 
 
 
499
  }
500
 
501
  /**
505
  *
506
  * @return stdClass The response.
507
  */
508
+ protected function get_upgrade_api_response( array $request_parameters ) {
509
+ $request_parameters = array_merge(
510
+ array(
511
+ 'activation_email' => $this->email,
512
+ 'api_key' => $this->licence_key,
513
+ 'domain' => $this->platform,
514
+ 'instance' => $this->instance,
515
+ 'plugin_name' => $this->plugin_name,
516
+ 'product_id' => $this->product_id,
517
+ ),
518
+ $request_parameters
519
+ );
520
 
521
+ $url = add_query_arg( 'wc-api', 'upgrade-api', $this->url_product ) . '&' . http_build_query( $request_parameters, '', '&' );
 
522
 
523
  $result = wp_safe_remote_get( esc_url_raw( $url ) );
524
 
530
  || ( 200 !== (int) wp_remote_retrieve_response_code( $result ) )
531
  ) {
532
 
533
+ $error_message = '<h3>' . esc_html__( 'Licensing server connection error.', 'tivwp-updater' ) . '</h3>';
 
 
534
 
535
  /* @noinspection NotOptimalIfConditionsInspection */
536
  if ( is_wp_error( $result ) ) {
569
  */
570
 
571
  $response_body = wp_remote_retrieve_body( $result );
572
+ if ( is_serialized( $response_body ) ) {
573
 
574
+ $response_object = maybe_unserialize( $response_body );
575
 
576
  if ( is_object( $response_object ) ) {
577
  /**
594
 
595
  return $response_object;
596
  }
597
+ }
598
 
599
  /**
600
  * And this is an "impossible" case. WP will show a default error message.
609
  *
610
  * @return string The response.
611
  */
612
+ protected function build_url( array $args ) {
613
+ $args = array_merge(
614
+ array(
615
+ 'product_id' => $this->product_id,
616
+ 'instance' => $this->instance,
617
+ 'email' => $this->email,
618
+ 'licence_key' => $this->licence_key,
619
+ 'platform' => $this->platform,
620
+ ),
621
+ $args
622
+ );
623
 
624
+ $url = add_query_arg( 'wc-api', 'am-software-api', $this->url_product ) . '&' . http_build_query( $args, '', '&' );
 
625
 
626
  if ( class_exists( 'TIVWP_Debug_Bar' ) ) {
627
  TIVWP_Debug_Bar::print_link( $url );
635
  *
636
  * @return string The URL.
637
  */
638
+ protected function url_status() {
639
+ return $this->build_url( array( 'request' => 'status' ) );
 
 
640
  }
641
 
642
  /**
644
  *
645
  * @return string The URL.
646
  */
647
+ protected function url_activation() {
648
+ return $this->build_url( array( 'request' => 'activation' ) );
 
 
649
  }
650
 
651
  /**
653
  *
654
  * @return string The URL.
655
  */
656
+ protected function url_deactivation() {
657
+ return $this->build_url( array( 'request' => 'deactivation' ) );
 
 
658
  }
659
 
660
  /**
664
  *
665
  * @return array Response from the server.
666
  */
667
+ protected function get_server_response( $url ) {
668
 
669
+ if ( ! $this->is_license_pair_filled_in() ) {
670
+ $response_body = wp_json_encode(
671
+ array(
672
+ self::KEY_ERROR =>
673
+ __( 'License / email is empty or invalid.', 'tivwp-updater' ),
674
+ )
675
+ );
676
 
677
  } else {
678
+ $result = wp_safe_remote_get( $url, array( 'sslverify' => false ) );
679
  if ( is_wp_error( $result ) ) {
680
 
681
  $error_message = '';
685
  $error_message = implode( '; ', $error_messages );
686
  }
687
 
688
+ $response_body = wp_json_encode(
689
+ array(
690
+ self::KEY_ERROR => implode(
691
+ ' ',
692
+ array(
693
+ __( 'Licensing server connection error.', 'tivwp-updater' ),
694
+ $error_message,
695
+ )
696
+ ),
697
+ )
698
+ );
699
 
700
  } elseif ( 200 !== (int) wp_remote_retrieve_response_code( $result ) ) {
701
 
702
+ $response_body = wp_json_encode(
703
+ array(
704
+ self::KEY_ERROR => implode(
705
+ ' ',
706
+ array(
707
+ __( 'Licensing server connection error.', 'tivwp-updater' ),
708
+ $result['response']['code'] . ' - '
709
+ . $result['response']['message'],
710
+ )
711
+ ),
712
+ )
713
+ );
714
  } else {
715
  $response_body = wp_remote_retrieve_body( $result );
716
  }
717
  }
718
 
719
+ /**
720
+ * The JSON_OBJECT_AS_ARRAY constant exists since PHP 5.4
721
+ *
722
+ * @noinspection PhpComposerExtensionStubsInspection
723
+ */
724
  return json_decode( $response_body, true );
725
  }
726
 
727
  /**
728
  * Generate a new instance if not set yet.
729
  */
730
+ protected function maybe_generate_instance() {
731
  if ( ! $this->instance ) {
732
+ $this->instance = substr( sha1( site_url() . (string) wp_rand( 100, 999 ) ), 0, 12 );
733
 
734
  /**
735
  * If a new instance has been generated, we must update the state.
736
  * Updating must be hooked, and not run here, when we are called from
737
  * the Constructor.
738
  */
739
+ $this->reset_state();
740
  add_action( 'admin_init', array( $this, 'update_state' ) );
741
  }
742
  }
746
  *
747
  * @todo nonce.
748
  */
749
+ protected function process_admin_requests() {
750
  // @codingStandardsIgnoreStart
751
  if ( empty( $_POST ) ) {
752
  return;
778
 
779
  $key = 'action';
780
  $_sk = $this->slug . '_' . $key;
781
+ if ( $this->licence_key && $this->email && isset( $form_data[ $_sk ] ) ) {
 
 
 
 
 
782
  if ( 'activate' === $form_data[ $_sk ] ) {
783
+ $this->try_to_activate();
784
+ $this->update_state();
785
  } elseif ( 'deactivate' === $form_data[ $_sk ] ) {
786
+ $this->try_to_deactivate();
787
+ $this->update_state();
788
  } elseif ( 'status' === $form_data[ $_sk ] ) {
789
+ $this->try_to_get_status();
790
  }
791
  }
792
 
795
  /**
796
  * Reset the state: clear notification and the transient.
797
  */
798
+ protected function reset_state() {
799
+ $this->notification_clear_all();
800
  delete_site_transient( 'update_plugins' );
801
  }
802
 
804
  * Public wrapper to use in callbacks.
805
  */
806
  public function update_state() {
807
+ $this->try_to_get_status();
808
  }
809
 
810
  /**
812
  *
813
  * @param string|string[] $message Message or array of messages.
814
  */
815
+ protected function notifications_set( $message = '' ) {
816
  $this->notifications = (array) $message;
817
  }
818
 
821
  *
822
  * @param string $message The message.
823
  */
824
+ protected function notification_add( $message ) {
825
  $this->notifications[] = $message;
826
  }
827
 
828
  /**
829
  * Clear all notification messages.
830
  */
831
+ protected function notification_clear_all() {
832
  $this->notifications = array();
833
  }
834
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
835
  /**
836
  * Try to activate and update status.
837
  */
838
+ protected function try_to_activate() {
839
+ $this->reset_state();
840
  $result = $this->activate();
841
  if ( ! empty( $result[ self::KEY_ERROR ] ) ) {
842
+ $this->notification_add( $result[ self::KEY_ERROR ] );
843
+ } elseif ( isset( $result['activated'] ) && $result['activated'] ) {
 
 
844
  $this->status = self::STATUS_ACTIVE;
845
+ $this->notification_add( $result['message'] );
846
  }
847
  }
848
 
849
  /**
850
  * Try to deactivate and update status.
851
  */
852
+ protected function try_to_deactivate() {
853
+ $this->reset_state();
854
  $result = $this->deactivate();
855
  if ( ! empty( $result[ self::KEY_ERROR ] ) ) {
856
+ $this->notification_add( $result[ self::KEY_ERROR ] );
857
  if ( ! empty( $result[ self::KEY_ADDITIONAL_INFO ] ) ) {
858
+ $this->notification_add( $result[ self::KEY_ADDITIONAL_INFO ] );
859
  }
860
  /**
861
  * If the server returns status "inactive" then we assume that the
868
  if ( isset( $result['activated'] ) && self::STATUS_INACTIVE === $result['activated'] ) {
869
  $this->status = self::STATUS_INACTIVE;
870
  }
871
+ } elseif ( isset( $result['deactivated'] ) && $result['deactivated'] ) {
 
 
872
  $this->status = self::STATUS_INACTIVE;
873
  if ( ! empty( $result['activations_remaining'] ) ) {
874
+ $this->notification_add( $result['activations_remaining'] );
875
  }
876
  }
877
  }
879
  /**
880
  * Get status from the Licensing server and update the class variables.
881
  */
882
+ protected function try_to_get_status() {
883
 
884
  $result = $this->get_status();
885
  if ( ! empty( $result[ self::KEY_ERROR ] ) ) {
886
  $this->status = self::STATUS_INACTIVE;
887
+ $this->notifications_set( $result[ self::KEY_ERROR ] );
888
  } elseif ( ! empty( $result['status_check'] ) ) {
889
  $this->status = $result['status_check'];
890
  if ( ! empty( $result['activations_remaining'] ) ) {
891
+ $this->notifications_set( $result['activations_remaining'] );
892
  }
893
  }
894
  }
898
  *
899
  * @return bool True if both are not empty.
900
  */
901
+ protected function is_license_pair_filled_in() {
902
  return ( $this->licence_key && $this->email );
903
  }
904
  }
vendor/tivwp/updater/doc/sample-usage.php CHANGED
@@ -5,6 +5,11 @@
5
  * @package TIVWP_Updater
6
  */
7
 
 
 
 
 
 
8
  /**
9
  * Load.
10
  */
@@ -12,8 +17,11 @@ if (
12
  version_compare( PHP_VERSION, '5.3.0', '>=' )
13
  && file_exists( dirname( __FILE__ ) . '/vendor/tivwp/updater/updater.php' )
14
  ) {
15
- // No warning about missing file. This is a sample.
16
- /** @noinspection PhpIncludeInspection */
 
 
 
17
  require_once dirname( __FILE__ ) . '/vendor/tivwp/updater/updater.php';
18
  }
19
 
@@ -21,15 +29,20 @@ if (
21
  * Setup.
22
  */
23
  function tivwp_updater_sample_plugin__setup_updater() {
24
- // No warning about possible multiple files having this library.
25
- /** @noinspection PhpUndefinedClassInspection */
26
- new TIVWP_Updater( array(
27
- 'plugin_file' => __FILE__,
28
- 'product_id' => 'My Plugin',
29
- 'url_product' => 'http://www.example.com/product/my-plugin/',
30
- ) );
 
 
 
 
 
 
31
  }
32
 
33
  add_action( 'tivwp_updater_factory', 'tivwp_updater_sample_plugin__setup_updater' );
34
 
35
- /* EOF */
5
  * @package TIVWP_Updater
6
  */
7
 
8
+ // Exit if accessed directly.
9
+ if ( ! defined( 'ABSPATH' ) ) {
10
+ exit;
11
+ }
12
+
13
  /**
14
  * Load.
15
  */
17
  version_compare( PHP_VERSION, '5.3.0', '>=' )
18
  && file_exists( dirname( __FILE__ ) . '/vendor/tivwp/updater/updater.php' )
19
  ) {
20
+ /**
21
+ * No warning about missing file. This is a sample.
22
+ *
23
+ * @noinspection PhpIncludeInspection
24
+ */
25
  require_once dirname( __FILE__ ) . '/vendor/tivwp/updater/updater.php';
26
  }
27
 
29
  * Setup.
30
  */
31
  function tivwp_updater_sample_plugin__setup_updater() {
32
+ /**
33
+ * No warning about possible multiple files having this library.
34
+ *
35
+ * @noinspection RedundantSuppression
36
+ * @noinspection PhpUndefinedClassInspection
37
+ */
38
+ new TIVWP_Updater(
39
+ array(
40
+ 'plugin_file' => __FILE__,
41
+ 'product_id' => 'My Plugin',
42
+ 'url_product' => 'http://www.example.com/product/my-plugin/',
43
+ )
44
+ );
45
  }
46
 
47
  add_action( 'tivwp_updater_factory', 'tivwp_updater_sample_plugin__setup_updater' );
48
 
 
vendor/tivwp/updater/includes/class-tivwp-updater-setup-admin-area.php CHANGED
@@ -5,9 +5,12 @@
5
  * @package TIVWP_Updater
6
  */
7
 
8
- // This is to avoid the PHPStorm warning about multiple Updater classes in the project.
9
- // Had to place it file-wide because otherwise PHPCS complains about improper class comment.
10
- /* @noinspection PhpUndefinedClassInspection */
 
 
 
11
 
12
  /**
13
  * Class TIVWP_Updater_Setup_Admin_Area
@@ -33,36 +36,10 @@ class TIVWP_Updater_Setup_Admin_Area {
33
  * Embed the stylesheet.
34
  */
35
  public static function embed_css() {
36
- ob_start();
37
- ?>
38
-
39
- <!--suppress CssUnusedSymbol -->
40
- <style id="tivwp-updater-css" data-version="<?php echo esc_attr( TIVWP_UPDATER_VERSION ); ?>">
41
- .tivwp-updater-status-value {
42
- font-weight: 700;
43
- }
44
 
45
- .tivwp-updater-status-inactive .tivwp-updater-status-value {
46
- color: #cc0000;
47
- background-color: #ffffff;
48
- }
49
-
50
- .tivwp-updater-instance,
51
- .tivwp-updater-notifications {
52
- opacity: .6;
53
- }
54
- </style>
55
- <?php
56
- $the_css = ob_get_clean();
57
- if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) {
58
- $the_css = preg_replace( '/\s+/', ' ', $the_css );
59
- }
60
- echo wp_kses( $the_css, array(
61
- 'style' => array(
62
- 'id' => array(),
63
- 'data-version' => array(),
64
- ),
65
- ) );
66
  }
67
 
68
  /**
@@ -72,30 +49,9 @@ class TIVWP_Updater_Setup_Admin_Area {
72
  * @since 1.0.2
73
  */
74
  public static function embed_js() {
75
- ob_start();
76
- ?>
77
-
78
- <script id="tivwp-updater-js" data-version="<?php echo esc_attr( TIVWP_UPDATER_VERSION ); ?>">
79
- jQuery(function ($) {
80
- $('.tivwp-updater-action-button').on("click", function () {
81
- var dataPlugin = $(this).data('tivwp-updater-plugin');
82
- $(this).css({cursor: "wait", opacity: ".3"});
83
- $('input[type="checkbox"]').prop("checked", false);
84
- $('tr[data-plugin="' + dataPlugin + '"]').find('input[type="checkbox"]').prop("checked", true);
85
- })
86
- });
87
- </script>
88
- <?php
89
- $the_script = ob_get_clean();
90
- if ( ! defined( 'SCRIPT_DEBUG' ) || ! SCRIPT_DEBUG ) {
91
- $the_script = preg_replace( '/\s+/', ' ', $the_script );
92
- }
93
- echo wp_kses( $the_script, array(
94
- 'script' => array(
95
- 'id' => array(),
96
- 'data-version' => array(),
97
- ),
98
- ) );
99
  }
100
 
101
  /**
@@ -107,14 +63,27 @@ class TIVWP_Updater_Setup_Admin_Area {
107
  protected static function load_translations() {
108
 
109
  $domain = 'tivwp-updater';
110
- $locale = get_locale();
111
- $mofile = $domain . '-' . $locale . '.mo';
 
 
 
 
 
 
 
112
 
113
  // Try to load from the languages directory first.
114
- if ( ! load_textdomain( $domain, WP_LANG_DIR . '/' . $mofile ) ) {
115
- // Then try to load from our languages folder.
116
- load_textdomain( $domain, dirname( __FILE__ ) . '/../languages/' . $mofile );
 
 
117
  }
118
 
 
 
 
 
119
  }
120
  }
5
  * @package TIVWP_Updater
6
  */
7
 
8
+ /**
9
+ * This is to avoid the PHPStorm warning about multiple Updater classes in the project.
10
+ * Had to place it file-wide because otherwise PHPCS complains about improper class comment.
11
+ * @noinspection RedundantSuppression
12
+ * @noinspection PhpUndefinedClassInspection
13
+ */
14
 
15
  /**
16
  * Class TIVWP_Updater_Setup_Admin_Area
36
  * Embed the stylesheet.
37
  */
38
  public static function embed_css() {
 
 
 
 
 
 
 
 
39
 
40
+ echo '<style id="tivwp-updater-css">';
41
+ include __DIR__ . '/../assets/css/tivwp-updater.css';
42
+ echo '</style>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
43
  }
44
 
45
  /**
49
  * @since 1.0.2
50
  */
51
  public static function embed_js() {
52
+ echo '<script id="tivwp-updater-js">';
53
+ include __DIR__ . '/../assets/js/tivwp-updater.js';
54
+ echo '</script>';
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
55
  }
56
 
57
  /**
63
  protected static function load_translations() {
64
 
65
  $domain = 'tivwp-updater';
66
+
67
+ if ( function_exists( 'determine_locale' ) ) {
68
+ $locale = determine_locale();
69
+ } else {
70
+ $locale = is_admin() ? get_user_locale() : get_locale();
71
+ }
72
+ $locale = apply_filters( 'plugin_locale', $locale, $domain );
73
+
74
+ $mofile_name = $domain . '-' . $locale . '.mo';
75
 
76
  // Try to load from the languages directory first.
77
+ if ( defined( 'WP_LANG_DIR' ) ) {
78
+ $mofile = WP_LANG_DIR . '/' . $mofile_name;
79
+ if ( load_textdomain( $domain, $mofile ) ) {
80
+ return;
81
+ }
82
  }
83
 
84
+ // Then try to load from our languages folder.
85
+ $mofile = __DIR__ . '/../languages/' . $mofile_name;
86
+ load_textdomain( $domain, $mofile );
87
+
88
  }
89
  }
vendor/tivwp/updater/includes/license-management-form.php CHANGED
@@ -2,11 +2,15 @@
2
  /**
3
  * View: License management form.
4
  *
5
- * @package TIVWP_Updater
6
- *
7
  * @var TIVWP_Updater $this
 
8
  */
9
 
 
 
 
 
 
10
  $_slug = sanitize_title( $this->slug );
11
  ?>
12
 
@@ -30,7 +34,7 @@ $_slug = sanitize_title( $this->slug );
30
  <?php echo esc_html( $this->instance ); ?>
31
  </div>
32
  <button type="submit"
33
- class="tivwp-updater-action-button"
34
  data-tivwp-updater-slug="<?php echo esc_attr( $_slug ); ?>"
35
  data-tivwp-updater-plugin="<?php echo esc_attr( $this->plugin_name ); ?>"
36
  name="<?php echo esc_attr( $_slug ); ?>_action"
@@ -51,22 +55,28 @@ $_slug = sanitize_title( $this->slug );
51
  </div>
52
  <?php endif; ?>
53
  <div>
54
- <label for="<?php echo esc_attr( $_slug ); ?>_licence_key">
55
  <?php esc_html_e( 'Key' ); ?>:
56
- </label>
57
- <input type="text" id="<?php echo esc_attr( $_slug ); ?>_licence_key"
58
- name="<?php echo esc_attr( $_slug ); ?>_licence_key"
59
- value="<?php echo esc_attr( $this->licence_key ); ?>"
60
- <?php disabled( TIVWP_Updater::STATUS_ACTIVE === $this->status && $this->licence_key ); ?>
61
- />
62
- <label for="<?php echo esc_attr( $_slug ); ?>_email">
63
  <?php esc_html_e( 'Email' ); ?>:
64
- </label>
65
- <input type="email" id="<?php echo esc_attr( $_slug ); ?>_email"
66
- name="<?php echo esc_attr( $_slug ); ?>_email"
67
- value="<?php echo esc_attr( $this->email ); ?>"
68
- <?php disabled( TIVWP_Updater::STATUS_ACTIVE === $this->status && $this->email ); ?>
69
- />
 
 
 
 
 
 
 
 
 
 
 
70
  <?php
71
  $_action = ( TIVWP_Updater::STATUS_ACTIVE === $this->status ? 'deactivate' : 'activate' );
72
  $_action_label = ( TIVWP_Updater::STATUS_ACTIVE === $this->status
@@ -75,7 +85,7 @@ $_slug = sanitize_title( $this->slug );
75
  );
76
  ?>
77
  <button type="submit"
78
- class="tivwp-updater-action-button"
79
  data-tivwp-updater-slug="<?php echo esc_attr( $_slug ); ?>"
80
  data-tivwp-updater-plugin="<?php echo esc_attr( $this->plugin_name ); ?>"
81
  name="<?php echo esc_attr( $_slug ); ?>_action"
@@ -95,4 +105,7 @@ $_slug = sanitize_title( $this->slug );
95
  }
96
  ?>
97
  </td>
 
 
 
98
  </tr>
2
  /**
3
  * View: License management form.
4
  *
 
 
5
  * @var TIVWP_Updater $this
6
+ * @package TIVWP_Updater
7
  */
8
 
9
+ // Exit if accessed directly.
10
+ if ( ! defined( 'ABSPATH' ) ) {
11
+ exit;
12
+ }
13
+
14
  $_slug = sanitize_title( $this->slug );
15
  ?>
16
 
34
  <?php echo esc_html( $this->instance ); ?>
35
  </div>
36
  <button type="submit"
37
+ class="button tivwp-updater-action-button"
38
  data-tivwp-updater-slug="<?php echo esc_attr( $_slug ); ?>"
39
  data-tivwp-updater-plugin="<?php echo esc_attr( $this->plugin_name ); ?>"
40
  name="<?php echo esc_attr( $_slug ); ?>_action"
55
  </div>
56
  <?php endif; ?>
57
  <div>
58
+ <?php if ( TIVWP_Updater::STATUS_ACTIVE === $this->status ) : ?>
59
  <?php esc_html_e( 'Key' ); ?>:
60
+ <code>'<?php echo esc_attr( $this->licence_key ); ?>'</code>
61
+
 
 
 
 
 
62
  <?php esc_html_e( 'Email' ); ?>:
63
+ <code>'<?php echo esc_attr( $this->email ); ?>'</code>
64
+ <?php else : ?>
65
+ <label for="<?php echo esc_attr( $_slug ); ?>_licence_key">
66
+ <?php esc_html_e( 'Key' ); ?>:
67
+ </label>
68
+ <input type="text" id="<?php echo esc_attr( $_slug ); ?>_licence_key"
69
+ name="<?php echo esc_attr( $_slug ); ?>_licence_key"
70
+ value="<?php echo esc_attr( $this->licence_key ); ?>"
71
+ />
72
+ <label for="<?php echo esc_attr( $_slug ); ?>_email">
73
+ <?php esc_html_e( 'Email' ); ?>:
74
+ </label>
75
+ <input type="email" id="<?php echo esc_attr( $_slug ); ?>_email"
76
+ name="<?php echo esc_attr( $_slug ); ?>_email"
77
+ value="<?php echo esc_attr( $this->email ); ?>"
78
+ />
79
+ <?php endif; ?>
80
  <?php
81
  $_action = ( TIVWP_Updater::STATUS_ACTIVE === $this->status ? 'deactivate' : 'activate' );
82
  $_action_label = ( TIVWP_Updater::STATUS_ACTIVE === $this->status
85
  );
86
  ?>
87
  <button type="submit"
88
+ class="button tivwp-updater-action-button"
89
  data-tivwp-updater-slug="<?php echo esc_attr( $_slug ); ?>"
90
  data-tivwp-updater-plugin="<?php echo esc_attr( $this->plugin_name ); ?>"
91
  name="<?php echo esc_attr( $_slug ); ?>_action"
105
  }
106
  ?>
107
  </td>
108
+ <?php if ( version_compare( $GLOBALS['wp_version'], '5.5.0', '>=' ) ) : ?>
109
+ <td class="column-auto-updates">&nbsp;</td>
110
+ <?php endif; ?>
111
  </tr>
vendor/tivwp/updater/updater.php CHANGED
@@ -7,9 +7,7 @@
7
  *
8
  * @link https://woocommerce.com/products/woocommerce-api-manager/
9
  *
10
- * @package TIVWP_Updater
11
- * @author WPGlobus
12
- * @copyright Copyright 2018 TIV.NET INC. and Gregory Karpinsky
13
  */
14
 
15
  // Exit if accessed directly.
@@ -17,49 +15,52 @@ if ( ! defined( 'ABSPATH' ) ) {
17
  exit;
18
  }
19
 
20
- if ( is_admin() ) {
21
- add_action( 'plugins_loaded',
 
 
 
 
 
 
 
 
22
  /**
23
- * The Updater "Factory".
 
 
 
 
 
 
24
  */
25
- function () {
26
- /**
27
- * Bail out it:
28
- * - Already loaded.
29
- * - WP is old (we do not test and do not want to support older WP).
30
- * - Multisite (we do not support it in general).
31
- * Additional checks are done for specific plugins,
32
- * @see \TIVWP_Updater::__construct
33
- */
34
- if (
35
- defined( 'TIVWP_UPDATER_VERSION' )
36
- || is_multisite()
37
- || version_compare( $GLOBALS['wp_version'], '4.5', '<' )
38
- ) {
39
- return;
40
- }
41
 
42
- /**
43
- * Load the class and tell others that it's done.
44
- */
45
- require_once dirname( __FILE__ ) . '/class-tivwp-updater.php';
46
- define( 'TIVWP_UPDATER_VERSION', '1.0.9' );
47
 
48
- if ( isset( $GLOBALS['pagenow'] ) && 'plugins.php' === $GLOBALS['pagenow'] ) {
49
- require_once dirname( __FILE__ ) .
50
- '/includes/class-tivwp-updater-setup-admin-area.php';
51
- /* @noinspection PhpUndefinedClassInspection */
52
- TIVWP_Updater_Setup_Admin_Area::construct();
53
- }
54
 
55
- /**
56
- * Let everyone create the uploader objects.
57
- */
58
- do_action( 'tivwp_updater_factory' );
59
  }
60
- // TODO: Increase the "minus" part with every new release.
61
- , 9999 - 10
62
- );
63
- }
64
 
65
- /*EOF*/
 
 
 
 
 
 
 
 
 
7
  *
8
  * @link https://woocommerce.com/products/woocommerce-api-manager/
9
  *
10
+ * @copyright Copyright 2020 TIV.NET INC.
 
 
11
  */
12
 
13
  // Exit if accessed directly.
15
  exit;
16
  }
17
 
18
+ if ( ! is_admin() ) {
19
+ return;
20
+ }
21
+
22
+ add_action(
23
+ 'plugins_loaded',
24
+ /**
25
+ * The Updater "Factory".
26
+ */
27
+ function () {
28
  /**
29
+ * Bail out it:
30
+ * - Already loaded.
31
+ * - WP is old (we do not test and do not want to support older WP).
32
+ * - Multisite (we do not support it in general).
33
+ * Additional checks are done for specific plugins,
34
+ *
35
+ * @see \TIVWP_Updater::__construct
36
  */
37
+ if (
38
+ defined( 'TIVWP_UPDATER_VERSION' )
39
+ || is_multisite()
40
+ || version_compare( $GLOBALS['wp_version'], '4.5', '<' )
41
+ ) {
42
+ return;
43
+ }
 
 
 
 
 
 
 
 
 
44
 
45
+ define( 'TIVWP_UPDATER_VERSION', '1.0.10' );
 
 
 
 
46
 
47
+ /**
48
+ * Load the class and tell others that it's done.
49
+ */
50
+ require_once dirname( __FILE__ ) . '/class-tivwp-updater.php';
 
 
51
 
52
+ if ( isset( $GLOBALS['pagenow'] ) && 'plugins.php' === $GLOBALS['pagenow'] ) {
53
+ require_once dirname( __FILE__ ) . '/includes/class-tivwp-updater-setup-admin-area.php';
54
+ TIVWP_Updater_Setup_Admin_Area::construct();
 
55
  }
 
 
 
 
56
 
57
+ /**
58
+ * Let everyone create the uploader objects.
59
+ */
60
+ do_action( 'tivwp_updater_factory' );
61
+ },
62
+ // TODO: Increase the "minus" part with every new release.
63
+ 9999 - 11
64
+ );
65
+
66
+
wpglobus.php CHANGED
@@ -15,7 +15,7 @@
15
  * Description: A WordPress Globalization / Multilingual Plugin. Posts, pages, menus, widgets and even custom fields - in multiple languages!
16
  * Text Domain: wpglobus
17
  * Domain Path: /languages/
18
- * Version: 2.6.0
19
  * Author: WPGlobus
20
  * Author URI: https://wpglobus.com/
21
  * Network: false
@@ -44,7 +44,7 @@ if ( ! defined( 'ABSPATH' ) ) {
44
  exit;
45
  }
46
 
47
- define( 'WPGLOBUS_VERSION', '2.6.0' );
48
  define( 'WPGLOBUS_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
49
  define( 'WPGLOBUS_AJAX', 'wpglobus-ajax' );
50
 
15
  * Description: A WordPress Globalization / Multilingual Plugin. Posts, pages, menus, widgets and even custom fields - in multiple languages!
16
  * Text Domain: wpglobus
17
  * Domain Path: /languages/
18
+ * Version: 2.6.1
19
  * Author: WPGlobus
20
  * Author URI: https://wpglobus.com/
21
  * Network: false
44
  exit;
45
  }
46
 
47
+ define( 'WPGLOBUS_VERSION', '2.6.1' );
48
  define( 'WPGLOBUS_PLUGIN_BASENAME', plugin_basename( __FILE__ ) );
49
  define( 'WPGLOBUS_AJAX', 'wpglobus-ajax' );
50