TranslatePress – Translate Multilingual sites - Version 1.0.7

Version Description

  • Fixed a small bug in js regarding the translation editor sidebar with
  • Fixed Language Switcher for Woocommerce product categories and product tags going to 404 pages
  • Fixed issues with Woocommerce and permalinks when the default language was not english
  • Excluded more functions from getting gettext wraps
Download this release

Release Info

Developer madalin.ungureanu
Plugin Icon 128x128 TranslatePress – Translate Multilingual sites
Version 1.0.7
Comparing to
See all releases

Code changes from version 1.0.6 to 1.0.7

assets/images/translator-accounts-addon.png ADDED
Binary file
assets/js/trp-editor-script.js CHANGED
@@ -355,7 +355,7 @@ function TRP_Editor(){
355
  }
356
 
357
  preview_container.css('right', width );
358
- preview_container.css('left', ( width - 298 ) );
359
  preview_container.css('width', (total_width - width));
360
  }
361
 
355
  }
356
 
357
  preview_container.css('right', width );
358
+ preview_container.css('left', ( width - 348 ) );
359
  preview_container.css('width', (total_width - width));
360
  }
361
 
class-translate-press.php CHANGED
@@ -39,7 +39,7 @@ class TRP_Translate_Press{
39
  define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
40
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
  define( 'TRP_PLUGIN_SLUG', 'translatepress' );
42
- define( 'TRP_PLUGIN_VERSION', '1.0.6' );
43
 
44
  $this->load_dependencies();
45
  $this->initialize_components();
@@ -179,6 +179,13 @@ class TRP_Translate_Press{
179
 
180
  /* hide php errors and notice when we are storing strings in db */
181
  $this->loader->add_action( 'wp', $this->translation_render, 'trp_debug_mode_off' );
 
 
 
 
 
 
 
182
  }
183
 
184
  /**
39
  define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
40
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
  define( 'TRP_PLUGIN_SLUG', 'translatepress' );
42
+ define( 'TRP_PLUGIN_VERSION', '1.0.7' );
43
 
44
  $this->load_dependencies();
45
  $this->initialize_components();
179
 
180
  /* hide php errors and notice when we are storing strings in db */
181
  $this->loader->add_action( 'wp', $this->translation_render, 'trp_debug_mode_off' );
182
+
183
+ /**
184
+ * we need to modify the permalinks structure for woocommerce when we switch languages
185
+ * when woo registers post_types and taxonomies in the rewrite parameter of the function they change the slugs of the items (they are localized with _x )
186
+ * we can't flush the permalinks on every page load so we filter the rewrite_rules option
187
+ */
188
+ $this->loader->add_filter( "option_rewrite_rules", $this->url_converter, 'woocommerce_filter_permalinks_on_other_languages' );
189
  }
190
 
191
  /**
includes/class-translation-manager.php CHANGED
@@ -654,10 +654,18 @@ class TRP_Translation_Manager{
654
  $callstack_function['function'] == 'wp_localize_script'||
655
  $callstack_function['function'] == 'wp_print_media_templates' ||
656
  $callstack_function['function'] == 'get_bloginfo' ||
657
- $callstack_function['function'] == 'wptexturize'
 
 
658
  ) {
659
  return $translation;
660
  }
 
 
 
 
 
 
661
  }
662
  }
663
 
654
  $callstack_function['function'] == 'wp_localize_script'||
655
  $callstack_function['function'] == 'wp_print_media_templates' ||
656
  $callstack_function['function'] == 'get_bloginfo' ||
657
+ $callstack_function['function'] == 'wp_get_document_title' ||
658
+ $callstack_function['function'] == 'wp_title' ||
659
+ $callstack_function['function'] == 'wptexturize'
660
  ) {
661
  return $translation;
662
  }
663
+
664
+ /* make sure we don't touch the woocommerce permalink rewrite slugs that are translated */
665
+ if( $callstack_function['function'] == 'wc_get_permalink_structure' ){
666
+ return $translation;
667
+ }
668
+
669
  }
670
  }
671
 
includes/class-url-converter.php CHANGED
@@ -136,6 +136,19 @@ class TRP_Url_Converter {
136
  }
137
  }
138
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
139
 
140
  if ( empty( $new_url ) ) {
141
  $new_url = $url;
@@ -281,4 +294,43 @@ class TRP_Url_Converter {
281
  return $pageURL;
282
  }
283
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
284
  }
136
  }
137
  }
138
  }
139
+
140
+ /* fix links for woocommerce on language switcher for product categories and product tags */
141
+ if( class_exists( 'WooCommerce' ) ){
142
+ if ( is_product_category() ) {
143
+ $current_cat_slug = trp_x( 'product-category', 'slug', 'woocommerce', $TRP_LANGUAGE );
144
+ $translated_cat_slug = trp_x( 'product-category', 'slug', 'woocommerce', $language );
145
+ $new_url = str_replace( '/'.$current_cat_slug.'/', '/'.$translated_cat_slug.'/', $new_url );
146
+ }elseif( is_product_tag() ){
147
+ $current_tag_slug = trp_x( 'product-tag', 'slug', 'woocommerce', $TRP_LANGUAGE );
148
+ $translated_tag_slug = trp_x( 'product-tag', 'slug', 'woocommerce', $language );
149
+ $new_url = str_replace( '/'.$current_tag_slug.'/', '/'.$translated_tag_slug.'/', $new_url );
150
+ }
151
+ }
152
 
153
  if ( empty( $new_url ) ) {
154
  $new_url = $url;
294
  return $pageURL;
295
  }
296
 
297
+ /**
298
+ * we need to modify the permalinks structure for woocommerce when we switch languages
299
+ * when woo registers post_types and taxonomies in the rewrite parameter of the function they change the slugs of the items (they are localized with _x )
300
+ * we can't flush the permalinks on every page load so we filter the rewrite_rules option
301
+ */
302
+ public function woocommerce_filter_permalinks_on_other_languages( $rewrite_rules ){
303
+ if( class_exists( 'WooCommerce' ) ){
304
+ global $TRP_LANGUAGE;
305
+ if( $TRP_LANGUAGE != $this->settings['default-language'] ){
306
+ global $default_language_wc_permalink_structure; //we use a global because apparently you can't do switch to locale and restore multiple times. I should keep an eye on this
307
+ /* get rewrite rules from original language */
308
+ if( empty($default_language_wc_permalink_structure) ) {
309
+ switch_to_locale($this->settings['default-language']);
310
+ $default_language_wc_permalink_structure = wc_get_permalink_structure();
311
+ restore_previous_locale();
312
+ }
313
+
314
+ $current_language_permalink_structure = wc_get_permalink_structure();
315
+
316
+ $new_rewrite_rules = array();
317
+
318
+ $search = array( '/^'.$default_language_wc_permalink_structure['product_rewrite_slug'].'\//', '/^'.$default_language_wc_permalink_structure['category_rewrite_slug'].'\//', '/^'.$default_language_wc_permalink_structure['tag_rewrite_slug'].'\//' );
319
+ $replace = array( $current_language_permalink_structure['product_rewrite_slug'].'/', $current_language_permalink_structure['category_rewrite_slug'].'/', $current_language_permalink_structure['tag_rewrite_slug'].'/' );
320
+
321
+ foreach( $rewrite_rules as $rewrite_key => $rewrite_values ){
322
+ $new_rewrite_rules[preg_replace( $search, $replace, $rewrite_key )] = preg_replace( $search, $replace, $rewrite_values );
323
+ }
324
+
325
+ }
326
+ }
327
+
328
+ if( !empty($new_rewrite_rules) ) {
329
+ return $new_rewrite_rules;
330
+ }
331
+ else
332
+ return $rewrite_rules;
333
+ }
334
+
335
+
336
  }
includes/functions.php CHANGED
@@ -56,4 +56,22 @@ function trp_utf8ize($mixed) {
56
  return utf8_encode($mixed);
57
  }
58
  return $mixed;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
59
  }
56
  return utf8_encode($mixed);
57
  }
58
  return $mixed;
59
+ }
60
+
61
+ /**
62
+ * function that gets the translation for a string with context directly from a .mo file
63
+ * @TODO this was developped firstly for woocommerce so it needs further development. It only works for plugins at the moment
64
+ */
65
+ function trp_x( $text, $context, $domain, $language ){
66
+ $mo_file = new MO();
67
+
68
+ if( file_exists( WP_LANG_DIR . '/plugins/'. $domain .'-' . $language . '.mo') ) {
69
+ if (!$mo_file->import_from_file(WP_LANG_DIR . '/plugins/' . $domain . '-' . $language . '.mo')) return $text;
70
+
71
+
72
+ if (!empty($mo_file->entries[$context . '' . $text]))
73
+ $text = $mo_file->entries[$context . '' . $text]->translations[0];
74
+ }
75
+
76
+ return $text;
77
  }
index.php CHANGED
@@ -3,7 +3,7 @@
3
  Plugin Name: TranslatePress - Multilingual
4
  Plugin URI: https://translatepress.com/
5
  Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
6
- Version: 1.0.6
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  License: GPL2
3
  Plugin Name: TranslatePress - Multilingual
4
  Plugin URI: https://translatepress.com/
5
  Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
6
+ Version: 1.0.7
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  License: GPL2
partials/addons-settings-page.php CHANGED
@@ -27,4 +27,11 @@
27
  </div>
28
  </div>
29
 
 
 
 
 
 
 
 
30
  </div>
27
  </div>
28
  </div>
29
 
30
+ <div class="grid">
31
+ <div class="grid-cell" style="overflow:hidden;">
32
+ <a href="https://translatepress.com/pricing/" target="_blank"><img src="<?php echo plugins_url('../assets/images/translator-accounts-addon.png', __FILE__) ?>" alt="Translator Account" style="float: left; margin: 0 1.5rem 1.5rem 0;"></a>
33
+ <h3><a href="https://translatepress.com/pricing/" target="_blank">Translator Accounts</a></h3>
34
+ <p>Create translator accounts for new users or allow existing users <br/>that are not administrators to translate your website.</p>
35
+ </div>
36
+ </div>
37
  </div>
partials/translation-manager.php CHANGED
@@ -126,17 +126,17 @@
126
  <?php
127
  // upsell to PRO from Translation Editor.
128
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
129
- if ( !( is_plugin_active('tp-add-on-extra-languages/index.php') || is_plugin_active('tp-add-on-seo-pack/index.php') ) ) :
130
  ?>
131
  <div class="trp-controls-section wp-core-ui">
132
  <div id="trp-upsell-section" class="trp-controls-section-content">
133
  <h3><?php _e('Your Website <br/> Multiple Languages', TRP_PLUGIN_SLUG ); ?></h3>
134
  <ul>
135
  <li><?php _e('Support for 221 Languages', TRP_PLUGIN_SLUG ); ?></li>
136
- <li><?php _e('Publish languages when the translation is done', TRP_PLUGIN_SLUG ); ?></li>
137
- <li><?php _e('Translate SEO Title and Description', TRP_PLUGIN_SLUG ); ?></li>
138
- <li><?php _e('Translate SEO Slug', TRP_PLUGIN_SLUG ); ?></li>
139
  <li><?php _e('Translate Facebook Tags', TRP_PLUGIN_SLUG ); ?></li>
 
 
140
  </ul>
141
  <p><span style="background: #f5fb9d;"><?php _e('Supported By Real People', TRP_PLUGIN_SLUG ); ?></span></p>
142
  <p><a class="button-primary" target="_blank" href="https://translatepress.com/pricing/?utm_source=wpbackend&utm_medium=clientsite&utm_content=tpeditor&utm_campaign=tpfree"><?php _e('Learn More', TRP_PLUGIN_SLUG ); ?></a></p>
126
  <?php
127
  // upsell to PRO from Translation Editor.
128
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
129
+ if ( !( is_plugin_active('tp-add-on-extra-languages/tp-extra-languages.php') || is_plugin_active('tp-add-on-seo-pack/tp-seo-pack.php') || is_plugin_active('tp-add-on-translator-accounts/index.php') ) ) :
130
  ?>
131
  <div class="trp-controls-section wp-core-ui">
132
  <div id="trp-upsell-section" class="trp-controls-section-content">
133
  <h3><?php _e('Your Website <br/> Multiple Languages', TRP_PLUGIN_SLUG ); ?></h3>
134
  <ul>
135
  <li><?php _e('Support for 221 Languages', TRP_PLUGIN_SLUG ); ?></li>
136
+ <li><?php _e('Translate SEO Title, Description, Slug', TRP_PLUGIN_SLUG ); ?></li>
 
 
137
  <li><?php _e('Translate Facebook Tags', TRP_PLUGIN_SLUG ); ?></li>
138
+ <li><?php _e('Create Translator Accounts', TRP_PLUGIN_SLUG ); ?></li>
139
+ <li><?php _e('Publish when the translation is done', TRP_PLUGIN_SLUG ); ?></li>
140
  </ul>
141
  <p><span style="background: #f5fb9d;"><?php _e('Supported By Real People', TRP_PLUGIN_SLUG ); ?></span></p>
142
  <p><a class="button-primary" target="_blank" href="https://translatepress.com/pricing/?utm_source=wpbackend&utm_medium=clientsite&utm_content=tpeditor&utm_campaign=tpfree"><?php _e('Learn More', TRP_PLUGIN_SLUG ); ?></a></p>
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.cozmoslabs.com/
4
  Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate, bilingual
5
  Requires at least: 3.1.0
6
  Tested up to: 4.8.3
7
- Stable tag: 1.0.6
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -107,12 +107,18 @@ For more information please check out [TranslatePress documentation](https://tra
107
 
108
  == Changelog ==
109
 
 
 
 
 
 
 
110
  = 1.0.6 =
111
- Added filter on capabilities to allow other roles to edit translations:'trp_translating_capability'
112
- Don't show php errors and notices when we are storing strings in the database
113
- Fixed issues with attributes that contain json content, for instance in woocommerce variations
114
- We no longer wrap gettext inside the wptexturize function
115
- We no longer wrap gettexts that appear in the bloginfo function
116
 
117
  = 1.0.5 =
118
  * Added possibility to edit gettext strings from themes and plugins from english to english, without adding another language. Basically, string-replace functionality.
4
  Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate, bilingual
5
  Requires at least: 3.1.0
6
  Tested up to: 4.8.3
7
+ Stable tag: 1.0.7
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
107
 
108
  == Changelog ==
109
 
110
+ = 1.0.7 =
111
+ * Fixed a small bug in js regarding the translation editor sidebar with
112
+ * Fixed Language Switcher for Woocommerce product categories and product tags going to 404 pages
113
+ * Fixed issues with Woocommerce and permalinks when the default language was not english
114
+ * Excluded more functions from getting gettext wraps
115
+
116
  = 1.0.6 =
117
+ * Added filter on capabilities to allow other roles to edit translations:'trp_translating_capability'
118
+ * Don't show php errors and notices when we are storing strings in the database
119
+ * Fixed issues with attributes that contain json content, for instance in woocommerce variations
120
+ * We no longer wrap gettext inside the wptexturize function
121
+ * We no longer wrap gettexts that appear in the bloginfo function
122
 
123
  = 1.0.5 =
124
  * Added possibility to edit gettext strings from themes and plugins from english to english, without adding another language. Basically, string-replace functionality.