TranslatePress – Translate Multilingual sites - Version 1.5.2

Version Description

  • Fixed blank page when opening Translation Editor in some localized languages
  • Added -Advanced- tab with various custom settings
  • Added compatibility to allow translating SeedProd plugin Coming Soon page
Download this release

Release Info

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

Code changes from version 1.5.1 to 1.5.2

assets/css/trp-back-end-style.css CHANGED
@@ -152,4 +152,27 @@ input.trp-translation-published{
152
  .trp-invalid-license{
153
  line-height: 29px;
154
  color:#ca4a1f;
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
155
  }
152
  .trp-invalid-license{
153
  line-height: 29px;
154
  color:#ca4a1f;
155
+ }
156
+
157
+ /* Advanced Settings Page */
158
+
159
+ table.trp-adst-list-option{
160
+ width: 1px;
161
+ margin-left: -30px
162
+ }
163
+ table.trp-adst-list-option td{
164
+ padding: 5px;
165
+ }
166
+ table.trp-adst-list-option th{
167
+ text-align: center;
168
+ }
169
+ .trp-adst-list-option textarea{
170
+ width: 250px;
171
+ }
172
+ .trp-adst-remove-element{
173
+ color: #a00;
174
+ cursor: pointer;
175
+ }
176
+ .trp-adst-remove-element:hover{
177
+ color: red;
178
  }
assets/js/trp-back-end-script.js CHANGED
@@ -185,6 +185,60 @@ jQuery( function() {
185
  };
186
  };
187
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
188
  var trpSettingsLanguages = new TRP_Settings_Language_Selector();
189
 
190
  jQuery('#trp-default-language').on("select2:selecting", function(e) {
@@ -194,5 +248,12 @@ jQuery( function() {
194
  var trpGoogleTranslate = TRP_Field_Toggler();
195
  trpGoogleTranslate.init('#trp-g-translate', '#trp-g-translate-key', 'yes' );
196
 
 
 
 
 
 
 
 
197
  });
198
 
185
  };
186
  };
187
 
188
+ /*
189
+ * Manage adding and removing items from an option of tpe list from Advanced Settings page
190
+ */
191
+ function TRP_Advanced_Settings_List( table ){
192
+
193
+ var _this = this
194
+
195
+ this.addEventHandlers = function( table ){
196
+ var add_list_entry = table.querySelector( '.trp-add-list-entry' );
197
+
198
+ // add event listener on ADD button
199
+ add_list_entry.querySelector('.trp-adst-button-add-new-item').addEventListener("click", function(){
200
+
201
+ var clone = add_list_entry.cloneNode(true)
202
+
203
+ // Show Add button, hide Remove button
204
+ clone.querySelector( '.trp-adst-button-add-new-item' ).style.display = 'none'
205
+ clone.querySelector( '.trp-adst-remove-element' ).style.display = 'block'
206
+
207
+ // Add row with new item in the html table
208
+ var itemInserted = add_list_entry.parentElement.insertBefore( clone, add_list_entry );
209
+
210
+ // Set name attributes
211
+ var dataNames = clone.querySelectorAll( '[data-name]' )
212
+ for( var i = 0 ; i < dataNames.length ; i++ ) {
213
+ dataNames[i].setAttribute( 'name', dataNames[i].getAttribute('data-name') );
214
+ }
215
+
216
+ // Reset values of textareas with new items
217
+ var dataValues = add_list_entry.querySelectorAll( '[data-name]' )
218
+ for( var i = 0 ; i < dataValues.length ; i++ ) {
219
+ dataValues[i].value = ''
220
+ }
221
+
222
+ // Add click listener on new row's Remove button
223
+ var removeButton = itemInserted.querySelector('.trp-adst-remove-element');
224
+ removeButton.addEventListener("click", _this.remove_item );
225
+ });
226
+
227
+ var removeButtons = table.querySelectorAll( '.trp-adst-remove-element' );
228
+ for( var i = 0 ; i < removeButtons.length ; i++ ) {
229
+ removeButtons[i].addEventListener("click", _this.remove_item)
230
+ }
231
+ }
232
+
233
+ this.remove_item = function( event ){
234
+ if ( confirm( event.target.getAttribute( 'data-confirm-message' ) ) ){
235
+ jQuery( event.target ).closest( '.trp-list-entry' ).remove()
236
+ }
237
+ }
238
+
239
+ _this.addEventHandlers( table )
240
+ }
241
+
242
  var trpSettingsLanguages = new TRP_Settings_Language_Selector();
243
 
244
  jQuery('#trp-default-language').on("select2:selecting", function(e) {
248
  var trpGoogleTranslate = TRP_Field_Toggler();
249
  trpGoogleTranslate.init('#trp-g-translate', '#trp-g-translate-key', 'yes' );
250
 
251
+ // Options of type List adding, from Advanced Settings page
252
+ var trpListOptions = document.querySelectorAll( '.trp-adst-list-option' );
253
+ for ( var i = 0 ; i < trpListOptions.length ; i++ ){
254
+ new TRP_Advanced_Settings_List( trpListOptions[i] );
255
+ }
256
+
257
+
258
  });
259
 
class-translate-press.php CHANGED
@@ -22,6 +22,7 @@ class TRP_Translate_Press{
22
  protected $upgrade;
23
  protected $plugin_updater;
24
  protected $license_page;
 
25
  public $active_pro_addons = array();
26
  public static $translate_press = null;
27
 
@@ -46,7 +47,7 @@ class TRP_Translate_Press{
46
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
47
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
48
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
49
- define( 'TRP_PLUGIN_VERSION', '1.5.1' );
50
 
51
  wp_cache_add_non_persistent_groups(array('trp'));
52
 
@@ -88,6 +89,7 @@ class TRP_Translate_Press{
88
  require_once TRP_PLUGIN_DIR . 'includes/class-uri.php';
89
  require_once TRP_PLUGIN_DIR . 'includes/class-upgrade.php';
90
  require_once TRP_PLUGIN_DIR . 'includes/class-plugin-notices.php';
 
91
  require_once TRP_PLUGIN_DIR . 'includes/external-functions.php';
92
  require_once TRP_PLUGIN_DIR . 'includes/functions.php';
93
  require_once TRP_PLUGIN_DIR . 'assets/lib/simplehtmldom/simple_html_dom.php';
@@ -98,6 +100,9 @@ class TRP_Translate_Press{
98
  * Instantiates components.
99
  */
100
  protected function initialize_components() {
 
 
 
101
  $this->loader = new TRP_Hooks_Loader();
102
  $this->languages = new TRP_Languages();
103
  $this->settings = new TRP_Settings();
@@ -155,6 +160,12 @@ class TRP_Translate_Press{
155
  $this->loader->add_action( 'trp_settings_navigation_tabs', $this->settings, 'add_navigation_tabs' );
156
  $this->loader->add_action( 'trp_language_selector', $this->settings, 'languages_selector', 10, 1 );
157
 
 
 
 
 
 
 
158
 
159
  $this->loader->add_action( 'wp_ajax_nopriv_trp_get_translations', $this->editor_api_regular_strings, 'get_translations' );
160
 
22
  protected $upgrade;
23
  protected $plugin_updater;
24
  protected $license_page;
25
+ protected $advanced_tab;
26
  public $active_pro_addons = array();
27
  public static $translate_press = null;
28
 
47
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
48
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
49
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
50
+ define( 'TRP_PLUGIN_VERSION', '1.5.2' );
51
 
52
  wp_cache_add_non_persistent_groups(array('trp'));
53
 
89
  require_once TRP_PLUGIN_DIR . 'includes/class-uri.php';
90
  require_once TRP_PLUGIN_DIR . 'includes/class-upgrade.php';
91
  require_once TRP_PLUGIN_DIR . 'includes/class-plugin-notices.php';
92
+ require_once TRP_PLUGIN_DIR . 'includes/class-advanced-tab.php';
93
  require_once TRP_PLUGIN_DIR . 'includes/external-functions.php';
94
  require_once TRP_PLUGIN_DIR . 'includes/functions.php';
95
  require_once TRP_PLUGIN_DIR . 'assets/lib/simplehtmldom/simple_html_dom.php';
100
  * Instantiates components.
101
  */
102
  protected function initialize_components() {
103
+ $this->advanced_tab = new TRP_Advanced_Tab();
104
+ $this->advanced_tab->include_custom_codes();
105
+
106
  $this->loader = new TRP_Hooks_Loader();
107
  $this->languages = new TRP_Languages();
108
  $this->settings = new TRP_Settings();
160
  $this->loader->add_action( 'trp_settings_navigation_tabs', $this->settings, 'add_navigation_tabs' );
161
  $this->loader->add_action( 'trp_language_selector', $this->settings, 'languages_selector', 10, 1 );
162
 
163
+ $this->loader->add_action( 'trp_settings_tabs', $this->advanced_tab, 'add_advanced_tab_to_settings', 10, 1 );
164
+ $this->loader->add_action( 'admin_menu', $this->advanced_tab, 'add_submenu_page_advanced' );
165
+ $this->loader->add_action( 'trp_output_advanced_settings_options', $this->advanced_tab, 'output_advanced_options' );
166
+ $this->loader->add_action( 'admin_init', $this->advanced_tab, 'register_setting' );
167
+ $this->loader->add_action( 'admin_notices', $this->advanced_tab, 'admin_notices' );
168
+
169
 
170
  $this->loader->add_action( 'wp_ajax_nopriv_trp_get_translations', $this->editor_api_regular_strings, 'get_translations' );
171
 
includes/advanced-settings/disable-dynamic-translation.php ADDED
@@ -0,0 +1,21 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_disable_dynamic_translation', 30 );
4
+ function trp_register_disable_dynamic_translation( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'disable_dynamic_translation',
7
+ 'type' => 'checkbox',
8
+ 'label' => esc_html__( 'Disable dynamic translation', 'translatepress-multilingual' ),
9
+ 'description' => wp_kses( __( 'It disables detection of strings displayed dynamically using JavaScript. <br/>Strings loaded via a server side AJAX call will still be translated.', 'translatepress-multilingual' ), array( 'br' => array() ) ),
10
+ );
11
+ return $settings_array;
12
+ }
13
+
14
+ add_filter( 'trp_enable_dynamic_translation', 'trp_adst_disable_dynamic' );
15
+ function trp_adst_disable_dynamic( $enable ){
16
+ $option = get_option( 'trp_advanced_settings', true );
17
+ if ( isset( $option['disable_dynamic_translation'] ) && $option['disable_dynamic_translation'] === 'yes' ){
18
+ return false;
19
+ }
20
+ return $enable;
21
+ }
includes/advanced-settings/enable-auto-translate-slug.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_enable_auto_translate_slug', 80 );
4
+ function trp_register_enable_auto_translate_slug( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'enable_auto_translate_slug',
7
+ 'type' => 'checkbox',
8
+ 'label' => esc_html__( 'Automatically translate slugs', 'translatepress-multilingual' ),
9
+ 'description' => wp_kses( __( 'Generate automatic translations of slugs for posts, pages and Custom Post Types.<br/>Requires <a href="https://translatepress.com/docs/addons/seo-pack/" title="TranslatePress Add-on SEO Pack documentation" target="_blank"> SEO Pack Add-on</a> to be installed and activated.', 'translatepress-multilingual' ), array( 'br' => array(), 'a' => array( 'href' => array(), 'title' => array(), 'target' => array() ) ) ),
10
+ );
11
+ return $settings_array;
12
+ }
13
+
14
+ add_filter('trp_machine_translate_slug', 'trp_enable_auto_translate_slug');
15
+ function trp_enable_auto_translate_slug($allow) {
16
+
17
+ $option = get_option( 'trp_advanced_settings', true );
18
+ if ( isset( $option['enable_auto_translate_slug'] ) && $option['enable_auto_translate_slug'] === 'yes' ) {
19
+ return true;
20
+ }
21
+ return $allow;
22
+ }
includes/advanced-settings/exclude-gettext-strings.php ADDED
@@ -0,0 +1,33 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_exclude_gettext_strings', 100 );
4
+ function trp_register_exclude_gettext_strings( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'exclude_gettext_strings',
7
+ 'type' => 'list',
8
+ 'columns' => array(
9
+ 'string' => __('Gettext String', 'translatepress-multilingual' ),
10
+ 'domain' => __('Domain', 'translatepress-multilingual')
11
+ ),
12
+ 'label' => esc_html__( 'Exclude Gettext Strings', 'translatepress-multilingual' ),
13
+ 'description' => wp_kses( __( 'Exclude these strings from being translated as Gettext strings. <br/>Can still be translated as regular strings.', 'translatepress-multilingual' ), array( 'br' => array() ) ),
14
+ );
15
+ return $settings_array;
16
+ }
17
+
18
+ /**
19
+ * Exclude gettext from being translated
20
+ */
21
+ add_filter('gettext', 'trpc_exclude_strings', 1000, 3 );
22
+ function trpc_exclude_strings ($translation, $text, $domain ){
23
+ $option = get_option( 'trp_advanced_settings', true );
24
+ if ( isset( $option['exclude_gettext_strings'] ) ) {
25
+
26
+ foreach( $option['exclude_gettext_strings']['domain'] as $key => $value ){
27
+ if ( $domain === $value && $text === $option['exclude_gettext_strings']['string'][$key] ){
28
+ return $text;
29
+ }
30
+ }
31
+ }
32
+ return $translation;
33
+ }
includes/advanced-settings/fix-broken-html.php ADDED
@@ -0,0 +1,22 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_fix_broken_html', 50 );
4
+ function trp_register_fix_broken_html( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'fix_broken_html',
7
+ 'type' => 'checkbox',
8
+ 'label' => esc_html__( 'Fix broken HTML', 'translatepress-multilingual' ),
9
+ 'description' => wp_kses( __( 'General attempt to fix broken or missing HTML on translated pages.<br/><strong>Only try this if the "Fix spaces between html attribute" did not solve the issue.</strong>', 'translatepress-multilingual' ), array( 'br' => array(), 'strong' => array() ) ),
10
+ );
11
+ return $settings_array;
12
+ }
13
+
14
+ add_filter('trp_try_fixing_invalid_html', 'trp_fix_broken_html');
15
+ function trp_fix_broken_html($allow) {
16
+
17
+ $option = get_option( 'trp_advanced_settings', true );
18
+ if ( isset( $option['fix_broken_html'] ) && $option['fix_broken_html'] === 'yes' ) {
19
+ return true;
20
+ }
21
+ return $allow;
22
+ }
includes/advanced-settings/fix-invalid-space-between-html-attr.php ADDED
@@ -0,0 +1,56 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_fix_invalid_space_between_html_attr', 40 );
4
+ function trp_register_fix_invalid_space_between_html_attr( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'fix_invalid_space_between_html_attr',
7
+ 'type' => 'checkbox',
8
+ 'label' => esc_html__( 'Fix spaces between HTML attributes', 'translatepress-multilingual' ),
9
+ 'description' => wp_kses( __( 'Fixes attributes without spaces between them because they are not valid HTML.<br> May help fix missing or broken content from the HTML on translated pages.', 'translatepress-multilingual' ), array( 'br' => array()) ),
10
+ );
11
+ return $settings_array;
12
+ }
13
+
14
+ add_filter('trp_before_translate_content', 'trp_fix_html_attributes_without_spaces');
15
+ function trp_fix_html_attributes_without_spaces($output){
16
+
17
+ $option = get_option( 'trp_advanced_settings', true );
18
+ if ( isset( $option['fix_invalid_space_between_html_attr'] ) && $option['fix_invalid_space_between_html_attr'] === 'yes' ){
19
+ $size = strlen($output);
20
+ $pos = 0;
21
+ $pos_c = 0;
22
+
23
+ while ($pos_c < $size){
24
+
25
+ $len = strcspn($output, '<' , $pos);
26
+ $pos += $len;
27
+
28
+ $len_c = strcspn($output, '>' , $pos);
29
+ $pos_c += $len_c;
30
+
31
+ $even_detection_apostrophe = 0;
32
+ $even_detection_quote = 0;
33
+ for ($i = $pos; $i < $pos_c; $i++){
34
+ $char = $output[$i]; //next
35
+ if ($char == '"' ){
36
+ $even_detection_quote ++;
37
+ if ( $even_detection_quote % 2 == 0){
38
+ $output = substr_replace( $output, ' ', $i+1, 0 );
39
+ }
40
+ }
41
+
42
+ if ($char == "'" ){
43
+ $even_detection_apostrophe ++;
44
+ if ( $even_detection_apostrophe % 2 == 0){
45
+ $output = substr_replace( $output, ' ', $i+1, 0 );
46
+ }
47
+ }
48
+ }
49
+
50
+ $pos_c ++;
51
+ $pos = $pos_c;
52
+ }
53
+ }
54
+
55
+ return $output;
56
+ }
includes/advanced-settings/show-dynamic-content-before-translation.php ADDED
@@ -0,0 +1,25 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_show_dynamic_content_before_translation', 20 );
4
+ function trp_register_show_dynamic_content_before_translation( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'show_dynamic_content_before_translation',
7
+ 'type' => 'checkbox',
8
+ 'label' => esc_html__( 'Show dynamic content before translation', 'translatepress-multilingual' ),
9
+ 'description' => wp_kses( __( 'Shows dynamically inserted content in original language for a moment before the translation request is finished. <br> May help fix missing content inserted using JavaScript.', 'translatepress-multilingual' ), array( 'br' => array()) ),
10
+ );
11
+ return $settings_array;
12
+ }
13
+
14
+
15
+ /**
16
+ * Apply "show dynamic content before translation" fix only on front page
17
+ */
18
+ add_filter( 'trp_show_dynamic_content_before_translation', 'trp_show_dynamic_content_before_translation' );
19
+ function trp_show_dynamic_content_before_translation( $allow ){
20
+ $option = get_option( 'trp_advanced_settings', true );
21
+ if ( isset( $option['show_dynamic_content_before_translation'] ) && $option['show_dynamic_content_before_translation'] === 'yes' ){
22
+ return true;
23
+ }
24
+ return $allow;
25
+ }
includes/advanced-settings/skip-dynamic-selectors.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_skip_dynamic_selectors', 110 );
4
+ function trp_register_skip_dynamic_selectors( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'skip_dynamic_selectors',
7
+ 'type' => 'list',
8
+ 'columns' => array(
9
+ 'selector' => __('Selector', 'translatepress-multilingual' ),
10
+ ),
11
+ 'label' => esc_html__( 'Exclude from dynamic translation', 'translatepress-multilingual' ),
12
+ 'description' => wp_kses( __( 'Do not dynamically translate strings that are found in html nodes matching these selectors.<br>Excludes all the children of HTML nodes matching these selectors from being translated using JavaScript.<br/>These strings will still be translated on the server side if possible.', 'translatepress-multilingual' ), array( 'br' => array() ) ),
13
+ );
14
+ return $settings_array;
15
+ }
16
+
17
+
18
+ add_filter( 'trp_skip_selectors_from_dynamic_translation', 'trp_skip_dynamic_translation_for_selectors' );
19
+ function trp_skip_dynamic_translation_for_selectors( $skip_selectors ){
20
+ $option = get_option( 'trp_advanced_settings', true );
21
+ $add_skip_selectors = array( );
22
+ if ( isset( $option['skip_dynamic_selectors'] ) && is_array( $option['skip_dynamic_selectors']['selector'] ) ) {
23
+ $add_skip_selectors = $option['skip_dynamic_selectors']['selector'];
24
+ }
25
+ return array_merge( $skip_selectors, $add_skip_selectors );
26
+ }
includes/advanced-settings/strip-gettext-post-content.php ADDED
@@ -0,0 +1,26 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ add_filter( 'trp_register_advanced_settings', 'trp_register_strip_gettext_post_content', 60 );
3
+ function trp_register_strip_gettext_post_content( $settings_array ){
4
+ $settings_array[] = array(
5
+ 'name' => 'strip_gettext_post_content',
6
+ 'type' => 'checkbox',
7
+ 'label' => esc_html__( 'Filter Gettext wrapping from post content and title', 'translatepress-multilingual' ),
8
+ 'description' => wp_kses( __( 'Filters gettext wrapping such as #!trpst#trp-gettext from all updated post content and post title. Does not affect previous post content. <br/><strong>Database backup is recommended before switching on.</strong>', 'translatepress-multilingual' ), array( 'br' => array(), 'strong' => array()) ),
9
+ );
10
+ return $settings_array;
11
+ }
12
+
13
+ /**
14
+ * Strip gettext wrapping from post title and content.
15
+ * They will be regular strings, written in the language they were submitted.
16
+ * Filter called both for wp_insert_post and wp_update_post
17
+ */
18
+ add_filter('wp_insert_post_data', 'trp_filter_trpgettext_from_post_content', 10, 2 );
19
+ function trp_filter_trpgettext_from_post_content($data, $postarr ){
20
+ $option = get_option( 'trp_advanced_settings', true );
21
+ if ( isset( $option['strip_gettext_post_content'] ) && $option['strip_gettext_post_content'] === 'yes' && class_exists( 'TRP_Translation_Manager' ) ){
22
+ $data['post_content'] = TRP_Translation_Manager::strip_gettext_tags($data['post_content']);
23
+ $data['post_title'] = TRP_Translation_Manager::strip_gettext_tags($data['post_title']);
24
+ }
25
+ return $data;
26
+ }
includes/advanced-settings/strip-gettext-post-meta.php ADDED
@@ -0,0 +1,47 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ add_filter( 'trp_register_advanced_settings', 'trp_register_strip_gettext_post_meta', 70 );
4
+ function trp_register_strip_gettext_post_meta( $settings_array ){
5
+ $settings_array[] = array(
6
+ 'name' => 'strip_gettext_post_meta',
7
+ 'type' => 'checkbox',
8
+ 'label' => esc_html__( 'Filter Gettext wrapping from post meta', 'translatepress-multilingual' ),
9
+ 'description' => wp_kses( __( 'Filters gettext wrapping such as #!trpst#trp-gettext from all updated post meta. Does not affect previous post meta. <br/><strong>Database backup is recommended before switching on.</strong>', 'translatepress-multilingual' ), array( 'br' => array(), 'strong' => array()) ),
10
+ );
11
+ return $settings_array;
12
+ }
13
+
14
+ /**
15
+ * Stripped gettext wrapping from wp_update_post_meta
16
+ */
17
+ add_action( 'added_post_meta', 'trp_filter_trpgettext_from_updated_post_meta', 10, 4);
18
+ add_action( 'updated_postmeta', 'trp_filter_trpgettext_from_updated_post_meta', 10, 4);
19
+ function trp_filter_trpgettext_from_updated_post_meta($meta_id, $object_id, $meta_key, $meta_value){
20
+ $option = get_option( 'trp_advanced_settings', true );
21
+ if ( isset( $option['strip_gettext_post_meta'] ) && $option['strip_gettext_post_meta'] === 'yes' && class_exists( 'TRP_Translation_Manager' ) ){
22
+ if ( is_serialized($meta_value) ){
23
+ $unserialized_meta_value = unserialize($meta_value);
24
+ $stripped_meta_value = trp_strip_gettext_array( $unserialized_meta_value );
25
+ $stripped_meta_value = serialize( $stripped_meta_value );
26
+ }else{
27
+ $stripped_meta_value = trp_strip_gettext_array( $meta_value );
28
+ }
29
+
30
+ if ( $stripped_meta_value != $meta_value){
31
+ remove_action('updated_postmeta','trp_filter_trpgettext_from_updated_post_meta' );
32
+ update_post_meta( $object_id, $meta_key, $stripped_meta_value );
33
+ add_action( 'updated_postmeta', 'trp_filter_trpgettext_from_updated_post_meta', 10, 4);
34
+ }
35
+ }
36
+ }
37
+
38
+ function trp_strip_gettext_array( $value ){
39
+ if ( is_array( $value ) ){
40
+ foreach( $value as $key => $item ){
41
+ $value[$key] = trp_strip_gettext_array( $item );
42
+ }
43
+ return $value;
44
+ }else{
45
+ return TRP_Translation_Manager::strip_gettext_tags( $value );
46
+ }
47
+ }
includes/class-advanced-tab.php ADDED
@@ -0,0 +1,227 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+
3
+ class TRP_Advanced_Tab {
4
+
5
+ /*
6
+ * Add new tab to TP settings
7
+ *
8
+ * Hooked to trp_settings_tabs
9
+ */
10
+ public function add_advanced_tab_to_settings( $tab_array ){
11
+ $tab_array[] = array(
12
+ 'name' => __( 'Advanced', 'translatepress-multilingual' ),
13
+ 'url' => admin_url( 'admin.php?page=trp_advanced_page' ),
14
+ 'page' => 'trp_advanced_page'
15
+ );
16
+ return $tab_array;
17
+ }
18
+
19
+ /*
20
+ * Add submenu for advanced page tab
21
+ *
22
+ * Hooked to admin_menu
23
+ */
24
+ public function add_submenu_page_advanced() {
25
+ add_submenu_page( 'TRPHidden', 'TranslatePress Advanced Settings', 'TRPHidden', 'manage_options', 'trp_advanced_page', array(
26
+ $this,
27
+ 'advanced_page_content'
28
+ ) );
29
+ }
30
+
31
+ /**
32
+ * Register setting
33
+ *
34
+ * Hooked to admin_init
35
+ */
36
+ public function register_setting(){
37
+ register_setting( 'trp_advanced_settings', 'trp_advanced_settings', array( $this, 'sanitize_settings' ) );
38
+ }
39
+
40
+ /**
41
+ * Output admin notices after saving settings.
42
+ */
43
+ public function admin_notices(){
44
+ settings_errors( 'trp_advanced_settings' );
45
+ }
46
+
47
+ /*
48
+ * Sanitize settings
49
+ */
50
+ public function sanitize_settings( $submitted_settings ){
51
+ $registered_settings = $this->get_settings();
52
+ $settings = array();
53
+ foreach ( $registered_settings as $registered_setting ){
54
+ if ( isset( $submitted_settings[$registered_setting['name']] ) ){
55
+ switch ($registered_setting['type'] ) {
56
+ case 'checkbox': {
57
+ $settings[ $registered_setting['name'] ] = ( $submitted_settings[ $registered_setting['name'] ] === 'yes' ) ? 'yes' : 'no';
58
+ break;
59
+ }
60
+ case 'list': {
61
+ $settings[ $registered_setting['name'] ] = array();
62
+ foreach ( $registered_setting['columns'] as $column => $column_name ) {
63
+ $one_column = $column;
64
+ $settings[ $registered_setting['name'] ][ $column ] = array();
65
+ foreach ( $submitted_settings[ $registered_setting['name'] ][ $column ] as $key => $value ) {
66
+ $settings[ $registered_setting['name'] ][ $column ][] = sanitize_text_field( $value );
67
+ }
68
+ }
69
+
70
+ // remove empty rows
71
+ foreach ( $settings[ $registered_setting['name'] ][ $one_column ] as $key => $value ) {
72
+ $is_empty = true;
73
+ foreach ( $registered_setting['columns'] as $column => $column_name ) {
74
+ if ( $settings[ $registered_setting['name'] ][$column][$key] != "" ) {
75
+ $is_empty = false;
76
+ break;
77
+ }
78
+ }
79
+ if ( $is_empty ){
80
+ foreach ( $registered_setting['columns'] as $column => $column_name ) {
81
+ unset( $settings[ $registered_setting['name'] ][$column][$key] );
82
+ }
83
+ }
84
+ }
85
+
86
+ foreach ( $settings[ $registered_setting['name'] ] as $column => $value ) {
87
+ $settings[ $registered_setting['name'] ][ $column ] = array_values( $settings[ $registered_setting['name'] ][ $column ] );
88
+ }
89
+ break;
90
+ }
91
+ }
92
+ }
93
+ }
94
+ add_settings_error( 'trp_advanced_settings', 'settings_updated', __( 'Settings saved.' ), 'updated' );
95
+
96
+ return apply_filters( 'trp_extra_sanitize_advanced_settings', $settings, $submitted_settings );
97
+ }
98
+
99
+ /*
100
+ * Advanced page content
101
+ */
102
+ public function advanced_page_content(){
103
+ require_once TRP_PLUGIN_DIR . 'partials/advanced-settings-page.php';
104
+ }
105
+
106
+ /*
107
+ * Require the custom codes from the specified folder
108
+ */
109
+ public function include_custom_codes(){
110
+ $paths = apply_filters( 'trp_custom_code_path_folder', array( TRP_PLUGIN_DIR . 'includes/advanced-settings/*.php' ) );
111
+
112
+ foreach( $paths as $path ) {
113
+ $path = glob( $path );
114
+ foreach ( $path as $file ) {
115
+ require( $file );
116
+ }
117
+ }
118
+ }
119
+
120
+ /*
121
+ * Get array of registered options from custom code to display in Advanced Settings page
122
+ */
123
+ public function get_settings(){
124
+ return apply_filters( 'trp_register_advanced_settings', array() );
125
+ }
126
+
127
+ /*
128
+ * Hooked to trp_settings_navigation_tabs
129
+ */
130
+ public function output_advanced_options(){
131
+ $advanced_settings_array = $this->get_settings();
132
+ foreach( $advanced_settings_array as $setting ){
133
+ switch( $setting['type'] ){
134
+ case 'checkbox':
135
+ echo $this->checkbox_setting( $setting );
136
+ break;
137
+ case 'list':
138
+ echo $this->add_to_list_setting( $setting );
139
+ break;
140
+ }
141
+ }
142
+ }
143
+
144
+ /**
145
+ * Return HTML of a checkbox type setting
146
+ *
147
+ * @param $setting
148
+ *
149
+ * @return 'string'
150
+ */
151
+ public function checkbox_setting( $setting ){
152
+ $option = get_option( 'trp_advanced_settings', true );
153
+ $checked = ( isset( $option[ $setting['name'] ] ) && $option[ $setting['name'] ] === 'yes' ) ? 'checked' : '';
154
+ $html = "
155
+ <tr>
156
+ <th scope='row'>" . $setting['label'] . "</th>
157
+ <td>
158
+ <label>
159
+ <input type='checkbox' id='" . $setting['name'] . "' name='trp_advanced_settings[" . $setting['name'] . "]' value='yes' " . $checked . ">
160
+ " . __('Yes', 'translatepress-multilingual' ). "
161
+ </label>
162
+ <p class='description'>
163
+ " . $setting['description'] . "
164
+ </p>
165
+ </td>
166
+ </tr>";
167
+ return apply_filters('trp_advanced_setting_checkbox', $html );
168
+ }
169
+
170
+ /**
171
+ * Return HTML of a checkbox type setting
172
+ *
173
+ * @param $setting
174
+ *
175
+ * @return 'string'
176
+ */
177
+ public function add_to_list_setting( $setting ){
178
+ $option = get_option( 'trp_advanced_settings', true );
179
+ $html = "
180
+ <tr>
181
+ <th scope='row'>" . $setting['label'] . "</th>
182
+ <td>
183
+ <table class='trp-adst-list-option'>
184
+ <thead>
185
+ ";
186
+ foreach( $setting['columns'] as $key => $value ){
187
+ $html .= '<th><strong>' . $value . '</strong></th>';
188
+ }
189
+ //"Remove" button
190
+ $html .= "<th></th>";
191
+
192
+ // list existing entries
193
+ $html .= " </thead>";
194
+
195
+ $first_column = '';
196
+ foreach( $setting['columns'] as $column => $column_name ) {
197
+ $first_column = $column;
198
+ break;
199
+ }
200
+ if ( isset( $option[ $setting['name'] ] ) && is_array( $option[ $setting['name'] ] ) ) {
201
+ foreach ( $option[ $setting['name'] ][ $first_column ] as $index => $value ) {
202
+ $html .= "<tr class='trp-list-entry'>";
203
+ foreach ( $setting['columns'] as $column => $column_name ) {
204
+ $html .= "<td><textarea name='trp_advanced_settings[" . $setting['name'] . "][" . $column . "][]'>" . $option[ $setting['name'] ][ $column ][ $index ] . "</textarea></td>";
205
+ }
206
+ $html .= "<td><span class='trp-adst-remove-element' data-confirm-message='" . __('Are you sure you want to remove this item?', 'translatepress-multilingual') . "'>" . __( 'Remove', 'translatepress-multilingual' ) . "</span></td>";
207
+ $html .= "</tr>";
208
+ }
209
+ }
210
+
211
+ // add new entry to list
212
+ $html .= "<tr class='trp-add-list-entry trp-list-entry'>";
213
+ foreach( $setting['columns'] as $column => $column_name ) {
214
+ $html .= "<td><textarea id='new_entry_" . $setting['name'] . "_" . $column . "' data-name='trp_advanced_settings[" . $setting['name'] . "][" . $column . "][]' data-setting-name='" . $setting['name'] . "' data-column-name='" . $column . "'></textarea></td>";
215
+ }
216
+ $html .= "<td><input type='button' class='button-secondary trp-adst-button-add-new-item' value='" . __( 'Add', 'translatepress-multilingual' ) . "'><span class='trp-adst-remove-element' style='display: none;' data-confirm-message='" . __('Are you sure you want to remove this item?', 'translatepress-multilingual') . "'>" . __( 'Remove', 'translatepress-multilingual' ) . "</span></td>";
217
+ $html .= "</tr></table>";
218
+
219
+ $html .= "<p class='description'>
220
+ " . $setting['description'] . "
221
+ </p>
222
+ </td>
223
+ </tr>";
224
+ return apply_filters( 'trp_advanced_setting_checkbox', $html );
225
+ }
226
+
227
+ }
includes/class-plugin-notices.php CHANGED
@@ -70,7 +70,7 @@ Class TRP_Plugin_Notifications {
70
  private static $_instance = null;
71
  private $prefix = 'trp';
72
  private $menu_slug = 'options-general.php';
73
- public $pluginPages = array( 'translate-press', 'trp_addons_page', 'trp_license_key' );
74
 
75
  protected function __construct() {
76
  add_action( 'admin_init', array( $this, 'dismiss_admin_notifications' ), 200 );
70
  private static $_instance = null;
71
  private $prefix = 'trp';
72
  private $menu_slug = 'options-general.php';
73
+ public $pluginPages = array( 'translate-press', 'trp_addons_page', 'trp_license_key', 'trp_advanced_page' );
74
 
75
  protected function __construct() {
76
  add_action( 'admin_init', array( $this, 'dismiss_admin_notifications' ), 200 );
includes/class-settings.php CHANGED
@@ -287,7 +287,7 @@ class TRP_Settings{
287
  * @param string $hook Admin page.
288
  */
289
  public function enqueue_scripts_and_styles( $hook ) {
290
- if ( $hook == 'settings_page_translate-press' || $hook == 'admin_page_trp_license_key' || $hook == 'admin_page_trp_addons_page' ) {
291
  wp_enqueue_style(
292
  'trp-settings-style',
293
  TRP_PLUGIN_URL . 'assets/css/trp-back-end-style.css',
@@ -296,7 +296,7 @@ class TRP_Settings{
296
  );
297
  }
298
 
299
- if ( $hook == 'settings_page_translate-press' ) {
300
  wp_enqueue_script( 'trp-settings-script', TRP_PLUGIN_URL . 'assets/js/trp-back-end-script.js', array( 'jquery', 'jquery-ui-sortable' ), TRP_PLUGIN_VERSION );
301
  if ( ! $this->trp_languages ){
302
  $trp = TRP_Translate_Press::get_trp_instance();
@@ -379,7 +379,7 @@ class TRP_Settings{
379
  *
380
  */
381
  public function add_navigation_tabs(){
382
- $tabs = apply_filters( 'trp_settings_tabs', array(
383
  array(
384
  'name' => __( 'General', 'translatepress-multilingual' ),
385
  'url' => admin_url( 'options-general.php?page=translate-press' ),
@@ -389,13 +389,12 @@ class TRP_Settings{
389
  'name' => __( 'Translate Site', 'translatepress-multilingual' ),
390
  'url' => add_query_arg( 'trp-edit-translation', 'true', home_url() ),
391
  'page' => 'trp_translation_editor'
392
- )
393
- ));
394
-
395
- $tabs[] = array(
396
- 'name' => __( 'Addons', 'translatepress-multilingual' ),
397
- 'url' => admin_url( 'admin.php?page=trp_addons_page' ),
398
- 'page' => 'trp_addons_page'
399
  );
400
 
401
  if( class_exists('TRP_LICENSE_PAGE') ) {
@@ -406,6 +405,8 @@ class TRP_Settings{
406
  );
407
  }
408
 
 
 
409
  $active_tab = 'translate-press';
410
  if ( isset( $_GET['page'] ) ){
411
  $active_tab = esc_attr( wp_unslash( $_GET['page'] ) );
287
  * @param string $hook Admin page.
288
  */
289
  public function enqueue_scripts_and_styles( $hook ) {
290
+ if ( $hook == 'settings_page_translate-press' || $hook == 'admin_page_trp_license_key' || $hook == 'admin_page_trp_addons_page' || $hook == 'admin_page_trp_advanced_page' ) {
291
  wp_enqueue_style(
292
  'trp-settings-style',
293
  TRP_PLUGIN_URL . 'assets/css/trp-back-end-style.css',
296
  );
297
  }
298
 
299
+ if ( $hook == 'settings_page_translate-press' || $hook == 'admin_page_trp_advanced_page' ) {
300
  wp_enqueue_script( 'trp-settings-script', TRP_PLUGIN_URL . 'assets/js/trp-back-end-script.js', array( 'jquery', 'jquery-ui-sortable' ), TRP_PLUGIN_VERSION );
301
  if ( ! $this->trp_languages ){
302
  $trp = TRP_Translate_Press::get_trp_instance();
379
  *
380
  */
381
  public function add_navigation_tabs(){
382
+ $tabs = array(
383
  array(
384
  'name' => __( 'General', 'translatepress-multilingual' ),
385
  'url' => admin_url( 'options-general.php?page=translate-press' ),
389
  'name' => __( 'Translate Site', 'translatepress-multilingual' ),
390
  'url' => add_query_arg( 'trp-edit-translation', 'true', home_url() ),
391
  'page' => 'trp_translation_editor'
392
+ ),
393
+ array(
394
+ 'name' => __( 'Addons', 'translatepress-multilingual' ),
395
+ 'url' => admin_url( 'admin.php?page=trp_addons_page' ),
396
+ 'page' => 'trp_addons_page'
397
+ )
 
398
  );
399
 
400
  if( class_exists('TRP_LICENSE_PAGE') ) {
405
  );
406
  }
407
 
408
+ $tabs = apply_filters( 'trp_settings_tabs', $tabs );
409
+
410
  $active_tab = 'translate-press';
411
  if ( isset( $_GET['page'] ) ){
412
  $active_tab = esc_attr( wp_unslash( $_GET['page'] ) );
includes/class-translation-render.php CHANGED
@@ -743,7 +743,7 @@ class TRP_Translation_Render{
743
  /* perform preg replace on the remaining trp-gettext tags */
744
  $final_html = $this->remove_trp_html_tags( $final_html );
745
 
746
- return apply_filters( 'trp_translated_html', $final_html, $TRP_LANGUAGE, $language_code );
747
  }
748
 
749
  /*
@@ -1188,6 +1188,41 @@ class TRP_Translation_Render{
1188
 
1189
  }
1190
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1191
  /**
1192
  * Enqueue dynamic translation script.
1193
  */
@@ -1200,38 +1235,9 @@ class TRP_Translation_Render{
1200
  global $TRP_LANGUAGE;
1201
 
1202
  if ( $TRP_LANGUAGE != $this->settings['default-language'] || ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview' ) ) {
1203
- $language_to_query = $TRP_LANGUAGE;
1204
- if ( $TRP_LANGUAGE == $this->settings['default-language'] ) {
1205
- foreach ($this->settings['translation-languages'] as $language) {
1206
- if ( $language != $this->settings['default-language'] ) {
1207
- $language_to_query = $language;
1208
- break;
1209
- }
1210
- }
1211
- }
1212
- $language_to_query = ( count ( $this->settings['translation-languages'] ) < 2 ) ? '' : $language_to_query;
1213
-
1214
- $trp = TRP_Translate_Press::get_trp_instance();
1215
- if ( ! $this->translation_manager ) {
1216
- $this->translation_manager = $trp->get_component( 'translation_manager' );
1217
- }
1218
- $nonces = $this->translation_manager->editor_nonces();
1219
- $trp_data = array(
1220
- 'trp_custom_ajax_url' => apply_filters('trp_custom_ajax_url', TRP_PLUGIN_URL . 'includes/trp-ajax.php' ),
1221
- 'trp_wp_ajax_url' => apply_filters('trp_wp_ajax_url', admin_url('admin-ajax.php')),
1222
- 'trp_language_to_query' => $language_to_query,
1223
- 'trp_original_language' => $this->settings['default-language'],
1224
- 'trp_current_language' => $TRP_LANGUAGE,
1225
- 'trp_skip_selectors' => apply_filters( 'trp_skip_selectors_from_dynamic_translation', array( '[data-no-translation]', '[data-no-dynamic-translation]', '[data-trp-translate-id-innertext]', 'script', 'style', 'head', 'trp-span', 'translate-press' ), $TRP_LANGUAGE, $this->settings ), // data-trp-translate-id-innertext refers to translation block and it shouldn't be detected
1226
- 'trp_base_selectors' => $this->get_base_attribute_selectors(),
1227
- 'trp_attributes_selectors' => $this->get_node_accessors(),
1228
- 'trp_attributes_accessors' => $this->get_accessors_array(),
1229
- 'gettranslationsnonceregular' => $nonces['gettranslationsnonceregular'],
1230
- 'showdynamiccontentbeforetranslation' => apply_filters( 'trp_show_dynamic_content_before_translation', false )
1231
- );
1232
 
1233
  wp_enqueue_script('trp-dynamic-translator', TRP_PLUGIN_URL . 'assets/js/trp-translate-dom-changes.js', array('jquery'), TRP_PLUGIN_VERSION, true );
1234
- wp_localize_script('trp-dynamic-translator', 'trp_data', $trp_data);
1235
  }
1236
  }
1237
 
743
  /* perform preg replace on the remaining trp-gettext tags */
744
  $final_html = $this->remove_trp_html_tags( $final_html );
745
 
746
+ return apply_filters( 'trp_translated_html', $final_html, $TRP_LANGUAGE, $language_code, $preview_mode );
747
  }
748
 
749
  /*
1188
 
1189
  }
1190
 
1191
+ public function get_trp_data(){
1192
+ global $TRP_LANGUAGE;
1193
+
1194
+ $trp = TRP_Translate_Press::get_trp_instance();
1195
+ if ( ! $this->translation_manager ) {
1196
+ $this->translation_manager = $trp->get_component( 'translation_manager' );
1197
+ }
1198
+ $nonces = $this->translation_manager->editor_nonces();
1199
+
1200
+ $language_to_query = $TRP_LANGUAGE;
1201
+ if ( $TRP_LANGUAGE == $this->settings['default-language'] ) {
1202
+ foreach ($this->settings['translation-languages'] as $language) {
1203
+ if ( $language != $this->settings['default-language'] ) {
1204
+ $language_to_query = $language;
1205
+ break;
1206
+ }
1207
+ }
1208
+ }
1209
+ $language_to_query = ( count ( $this->settings['translation-languages'] ) < 2 ) ? '' : $language_to_query;
1210
+
1211
+ return array(
1212
+ 'trp_custom_ajax_url' => apply_filters('trp_custom_ajax_url', TRP_PLUGIN_URL . 'includes/trp-ajax.php' ),
1213
+ 'trp_wp_ajax_url' => apply_filters('trp_wp_ajax_url', admin_url('admin-ajax.php')),
1214
+ 'trp_language_to_query' => $language_to_query,
1215
+ 'trp_original_language' => $this->settings['default-language'],
1216
+ 'trp_current_language' => $TRP_LANGUAGE,
1217
+ 'trp_skip_selectors' => apply_filters( 'trp_skip_selectors_from_dynamic_translation', array( '[data-no-translation]', '[data-no-dynamic-translation]', '[data-trp-translate-id-innertext]', 'script', 'style', 'head', 'trp-span', 'translate-press' ), $TRP_LANGUAGE, $this->settings ), // data-trp-translate-id-innertext refers to translation block and it shouldn't be detected
1218
+ 'trp_base_selectors' => $this->get_base_attribute_selectors(),
1219
+ 'trp_attributes_selectors' => $this->get_node_accessors(),
1220
+ 'trp_attributes_accessors' => $this->get_accessors_array(),
1221
+ 'gettranslationsnonceregular' => $nonces['gettranslationsnonceregular'],
1222
+ 'showdynamiccontentbeforetranslation' => apply_filters( 'trp_show_dynamic_content_before_translation', false )
1223
+ );
1224
+ }
1225
+
1226
  /**
1227
  * Enqueue dynamic translation script.
1228
  */
1235
  global $TRP_LANGUAGE;
1236
 
1237
  if ( $TRP_LANGUAGE != $this->settings['default-language'] || ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview' ) ) {
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1238
 
1239
  wp_enqueue_script('trp-dynamic-translator', TRP_PLUGIN_URL . 'assets/js/trp-translate-dom-changes.js', array('jquery'), TRP_PLUGIN_VERSION, true );
1240
+ wp_localize_script('trp-dynamic-translator', 'trp_data', $this->get_trp_data() );
1241
  }
1242
  }
1243
 
includes/functions.php CHANGED
@@ -750,3 +750,48 @@ function trp_qm_strip_gettext( $data ){
750
  }
751
  return $data;
752
  }
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
750
  }
751
  return $data;
752
  }
753
+
754
+ /**
755
+ * Compatibility with SeedProd Coming Soon
756
+ *
757
+ * Manually include the scripts and styles if do_action('enqueue_scripts') is not called
758
+ */
759
+ add_filter( 'trp_translated_html', 'trp_force_include_scripts', 10, 4 );
760
+ function trp_force_include_scripts( $final_html, $TRP_LANGUAGE, $language_code, $preview_mode ){
761
+ if ( $preview_mode ){
762
+ $trp = TRP_Translate_Press::get_trp_instance();
763
+ $translation_render = $trp->get_component( 'translation_render' );
764
+ $trp_data = $translation_render->get_trp_data();
765
+
766
+ $scripts_and_styles = apply_filters('trp_editor_missing_scripts_and_styles', array(
767
+ 'jquery' => "<script type='text/javascript' src='" . includes_url( '/js/jquery/jquery.js' ) . "'></script>",
768
+ 'trp-iframe-preview-script.js' => "<script type='text/javascript' src='" . TRP_PLUGIN_URL . "assets/js/trp-iframe-preview-script.js'></script>",
769
+ 'trp-translate-dom-changes.js' => "<script>trp_data = '" . addslashes(json_encode($trp_data) ) . "'; trp_data = JSON.parse(trp_data);</script><script type='text/javascript' src='" . TRP_PLUGIN_URL . "assets/js/trp-translate-dom-changes.js'></script>",
770
+ 'trp-preview-iframe-style-css' => "<link rel='stylesheet' id='trp-preview-iframe-style-css' href='" . TRP_PLUGIN_URL . "assets/css/trp-preview-iframe-style.css' type='text/css' media='all' />",
771
+ 'dashicons' => "<link rel='stylesheet' id='dashicons-css' href='" . includes_url( '/css/dashicons.min.css' ) . "' type='text/css' media='all' />"
772
+ ));
773
+
774
+ $missing_script = '';
775
+ foreach($scripts_and_styles as $key => $value ){
776
+ if ( strpos( $final_html, $key ) === false ){
777
+ $missing_script .= $value;
778
+ }
779
+ }
780
+
781
+ if ( $missing_script !== '' ){
782
+ $html = TranslatePress\str_get_html( $final_html, true, true, TRP_DEFAULT_TARGET_CHARSET, false, TRP_DEFAULT_BR_TEXT, TRP_DEFAULT_SPAN_TEXT );
783
+ if ( $html === false ) {
784
+ return $final_html;
785
+ }
786
+
787
+ $body = $html->find( 'body', 0 );
788
+ if ( $body ) {
789
+ $body->innertext = $body->innertext . $missing_script;
790
+ }
791
+
792
+ $final_html = $html->save();
793
+ }
794
+ }
795
+ return $final_html;
796
+ }
797
+
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.5.1
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
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.5.2
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
languages/translatepress-multilingual.catalog.php CHANGED
@@ -25,6 +25,30 @@
25
  <?php __("Limit this menu item to the following languages", "translatepress-multilingual"); ?>
26
  <?php __("The Yoast SEO Sitemaps will now contain the default language slug: example.com/en/sitemap_index.xml <br/> This works perfectly, just take it into account when submitting the sitemap to Google.", "translatepress-multilingual"); ?>
27
  <?php __("Post Slug", "translatepress-multilingual"); ?>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
28
  <?php __("An error occurred, please try again.", "translatepress-multilingual"); ?>
29
  <?php __("Your license key expired on %s.", "translatepress-multilingual"); ?>
30
  <?php __("Your license key has been disabled.", "translatepress-multilingual"); ?>
@@ -153,6 +177,8 @@
153
  <?php __("Free Addons", "translatepress-multilingual"); ?>
154
  <?php __("Extend your translation plugin with these free addons.", "translatepress-multilingual"); ?>
155
  <?php __("Use GET parameter to encode language in the url, replacing the language directory. </br> Your urls will look like this: www.example.com?lang=en", "translatepress-multilingual"); ?>
 
 
156
  <?php __("Active on this site", "translatepress-multilingual"); ?>
157
  <?php __("Your license is invalid", "translatepress-multilingual"); ?>
158
  <?php __("If you do not have any of the <a href=\"%s\">Advanced or Pro Addons</a> activated you do not need a license key", "translatepress-multilingual"); ?>
@@ -167,7 +193,6 @@
167
  <?php __("replace the default flag", "translatepress-multilingual"); ?>
168
  <?php __("Native language name", "translatepress-multilingual"); ?>
169
  <?php __("No", "translatepress-multilingual"); ?>
170
- <?php __("Yes", "translatepress-multilingual"); ?>
171
  <?php __("Select Yes if you want to display languages in their native names. Otherwise, languages will be displayed in English.", "translatepress-multilingual"); ?>
172
  <?php __("Use a subdirectory for the default language", "translatepress-multilingual"); ?>
173
  <?php __("Select Yes if you want to add the subdirectory in the URL for the default language.</br>By selecting Yes, the default language seen by website visitors will become the first one in the \"All Languages\" list.", "translatepress-multilingual"); ?>
25
  <?php __("Limit this menu item to the following languages", "translatepress-multilingual"); ?>
26
  <?php __("The Yoast SEO Sitemaps will now contain the default language slug: example.com/en/sitemap_index.xml <br/> This works perfectly, just take it into account when submitting the sitemap to Google.", "translatepress-multilingual"); ?>
27
  <?php __("Post Slug", "translatepress-multilingual"); ?>
28
+ <?php __("Disable dynamic translation", "translatepress-multilingual"); ?>
29
+ <?php __("It disables detection of strings displayed dynamically using JavaScript. <br/>Strings loaded via a server side AJAX call will still be translated.", "translatepress-multilingual"); ?>
30
+ <?php __("Automatically translate slugs", "translatepress-multilingual"); ?>
31
+ <?php __("Generate automatic translations of slugs for posts, pages and Custom Post Types.<br/>Requires <a href=\"https://translatepress.com/docs/addons/seo-pack/\" title=\"TranslatePress Add-on SEO Pack documentation\" target=\"_blank\"> SEO Pack Add-on</a> to be installed and activated.", "translatepress-multilingual"); ?>
32
+ <?php __("Gettext String", "translatepress-multilingual"); ?>
33
+ <?php __("Domain", "translatepress-multilingual"); ?>
34
+ <?php __("Exclude Gettext Strings", "translatepress-multilingual"); ?>
35
+ <?php __("Exclude these strings from being translated as Gettext strings. <br/>Can still be translated as regular strings.", "translatepress-multilingual"); ?>
36
+ <?php __("Fix broken HTML", "translatepress-multilingual"); ?>
37
+ <?php __("General attempt to fix broken or missing HTML on translated pages.<br/><strong>Only try this if the \"Fix spaces between html attribute\" did not solve the issue.</strong>", "translatepress-multilingual"); ?>
38
+ <?php __("Fix spaces between HTML attributes", "translatepress-multilingual"); ?>
39
+ <?php __("Fixes attributes without spaces between them because they are not valid HTML.<br> May help fix missing or broken content from the HTML on translated pages.", "translatepress-multilingual"); ?>
40
+ <?php __("Show dynamic content before translation", "translatepress-multilingual"); ?>
41
+ <?php __("Shows dynamically inserted content in original language for a moment before the translation request is finished. <br> May help fix missing content inserted using JavaScript.", "translatepress-multilingual"); ?>
42
+ <?php __("Selector", "translatepress-multilingual"); ?>
43
+ <?php __("Exclude from dynamic translation", "translatepress-multilingual"); ?>
44
+ <?php __("Do not dynamically translate strings that are found in html nodes matching these selectors.<br>Excludes all the children of HTML nodes matching these selectors from being translated using JavaScript.<br/>These strings will still be translated on the server side if possible.", "translatepress-multilingual"); ?>
45
+ <?php __("Filter Gettext wrapping from post content and title", "translatepress-multilingual"); ?>
46
+ <?php __("Filters gettext wrapping such as #!trpst#trp-gettext from all updated post content and post title. Does not affect previous post content. <br/><strong>Database backup is recommended before switching on.</strong>", "translatepress-multilingual"); ?>
47
+ <?php __("Filter Gettext wrapping from post meta", "translatepress-multilingual"); ?>
48
+ <?php __("Filters gettext wrapping such as #!trpst#trp-gettext from all updated post meta. Does not affect previous post meta. <br/><strong>Database backup is recommended before switching on.</strong>", "translatepress-multilingual"); ?>
49
+ <?php __("Advanced", "translatepress-multilingual"); ?>
50
+ <?php __("Yes", "translatepress-multilingual"); ?>
51
+ <?php __("Are you sure you want to remove this item?", "translatepress-multilingual"); ?>
52
  <?php __("An error occurred, please try again.", "translatepress-multilingual"); ?>
53
  <?php __("Your license key expired on %s.", "translatepress-multilingual"); ?>
54
  <?php __("Your license key has been disabled.", "translatepress-multilingual"); ?>
177
  <?php __("Free Addons", "translatepress-multilingual"); ?>
178
  <?php __("Extend your translation plugin with these free addons.", "translatepress-multilingual"); ?>
179
  <?php __("Use GET parameter to encode language in the url, replacing the language directory. </br> Your urls will look like this: www.example.com?lang=en", "translatepress-multilingual"); ?>
180
+ <?php __("TranslatePress Advanced Settings", "translatepress-multilingual"); ?>
181
+ <?php __("Save Changes", "translatepress-multilingual"); ?>
182
  <?php __("Active on this site", "translatepress-multilingual"); ?>
183
  <?php __("Your license is invalid", "translatepress-multilingual"); ?>
184
  <?php __("If you do not have any of the <a href=\"%s\">Advanced or Pro Addons</a> activated you do not need a license key", "translatepress-multilingual"); ?>
193
  <?php __("replace the default flag", "translatepress-multilingual"); ?>
194
  <?php __("Native language name", "translatepress-multilingual"); ?>
195
  <?php __("No", "translatepress-multilingual"); ?>
 
196
  <?php __("Select Yes if you want to display languages in their native names. Otherwise, languages will be displayed in English.", "translatepress-multilingual"); ?>
197
  <?php __("Use a subdirectory for the default language", "translatepress-multilingual"); ?>
198
  <?php __("Select Yes if you want to add the subdirectory in the URL for the default language.</br>By selecting Yes, the default language seen by website visitors will become the first one in the \"All Languages\" list.", "translatepress-multilingual"); ?>
languages/translatepress-multilingual.pot CHANGED
@@ -89,7 +89,7 @@ msgstr ""
89
  msgid "Are you sure you want to remove this language?"
90
  msgstr ""
91
 
92
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:43, ../translatepress/partials/main-settings-language-selector.php:40
93
  msgid "Remove"
94
  msgstr ""
95
 
@@ -97,7 +97,7 @@ msgstr ""
97
  msgid "Choose..."
98
  msgstr ""
99
 
100
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:58, ../translatepress/partials/main-settings-language-selector.php:55
101
  msgid "Add"
102
  msgstr ""
103
 
@@ -117,6 +117,102 @@ msgstr ""
117
  msgid "Post Slug"
118
  msgstr ""
119
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
120
  #: ../translatepress/includes/class-edd-sl-plugin-updater.php:681, ../translatepress/includes/class-edd-sl-plugin-updater.php:713, ../translatepress/includes/class-edd-sl-plugin-updater.php:784
121
  msgid "An error occurred, please try again."
122
  msgstr ""
@@ -209,19 +305,19 @@ msgstr ""
209
  msgid "Translate Site"
210
  msgstr ""
211
 
212
- #: ../translatepress/includes/class-settings.php:396
213
  msgid "Addons"
214
  msgstr ""
215
 
216
- #: ../translatepress/includes/class-settings.php:403
217
  msgid "License"
218
  msgstr ""
219
 
220
- #: ../translatepress/includes/class-settings.php:429, ../translatepress/includes/class-translation-manager.php:265
221
  msgid "Settings"
222
  msgstr ""
223
 
224
- #: ../translatepress/includes/class-settings.php:433
225
  msgid "Pro Features"
226
  msgstr ""
227
 
@@ -629,6 +725,14 @@ msgstr ""
629
  msgid "Use GET parameter to encode language in the url, replacing the language directory. </br> Your urls will look like this: www.example.com?lang=en"
630
  msgstr ""
631
 
 
 
 
 
 
 
 
 
632
  #: ../translatepress/partials/license-settings-page.php:25
633
  msgid "Active on this site"
634
  msgstr ""
@@ -685,10 +789,6 @@ msgstr ""
685
  msgid "No"
686
  msgstr ""
687
 
688
- #: ../translatepress/partials/main-settings-page.php:41, ../translatepress/partials/main-settings-page.php:54, ../translatepress/partials/main-settings-page.php:67, ../translatepress/partials/main-settings-page.php:80
689
- msgid "Yes"
690
- msgstr ""
691
-
692
  #: ../translatepress/partials/main-settings-page.php:44
693
  msgid "Select Yes if you want to display languages in their native names. Otherwise, languages will be displayed in English."
694
  msgstr ""
89
  msgid "Are you sure you want to remove this language?"
90
  msgstr ""
91
 
92
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:43, ../translatepress/includes/class-advanced-tab.php:206, ../translatepress/includes/class-advanced-tab.php:216, ../translatepress/partials/main-settings-language-selector.php:40
93
  msgid "Remove"
94
  msgstr ""
95
 
97
  msgid "Choose..."
98
  msgstr ""
99
 
100
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:58, ../translatepress/includes/class-advanced-tab.php:216, ../translatepress/partials/main-settings-language-selector.php:55
101
  msgid "Add"
102
  msgstr ""
103
 
117
  msgid "Post Slug"
118
  msgstr ""
119
 
120
+ #: ../translatepress/includes/advanced-settings/disable-dynamic-translation.php:8
121
+ msgid "Disable dynamic translation"
122
+ msgstr ""
123
+
124
+ #: ../translatepress/includes/advanced-settings/disable-dynamic-translation.php:9
125
+ msgid "It disables detection of strings displayed dynamically using JavaScript. <br/>Strings loaded via a server side AJAX call will still be translated."
126
+ msgstr ""
127
+
128
+ #: ../translatepress/includes/advanced-settings/enable-auto-translate-slug.php:8
129
+ msgid "Automatically translate slugs"
130
+ msgstr ""
131
+
132
+ #: ../translatepress/includes/advanced-settings/enable-auto-translate-slug.php:9
133
+ msgid "Generate automatic translations of slugs for posts, pages and Custom Post Types.<br/>Requires <a href=\"https://translatepress.com/docs/addons/seo-pack/\" title=\"TranslatePress Add-on SEO Pack documentation\" target=\"_blank\"> SEO Pack Add-on</a> to be installed and activated."
134
+ msgstr ""
135
+
136
+ #: ../translatepress/includes/advanced-settings/exclude-gettext-strings.php:9
137
+ msgid "Gettext String"
138
+ msgstr ""
139
+
140
+ #: ../translatepress/includes/advanced-settings/exclude-gettext-strings.php:10
141
+ msgid "Domain"
142
+ msgstr ""
143
+
144
+ #: ../translatepress/includes/advanced-settings/exclude-gettext-strings.php:12
145
+ msgid "Exclude Gettext Strings"
146
+ msgstr ""
147
+
148
+ #: ../translatepress/includes/advanced-settings/exclude-gettext-strings.php:13
149
+ msgid "Exclude these strings from being translated as Gettext strings. <br/>Can still be translated as regular strings."
150
+ msgstr ""
151
+
152
+ #: ../translatepress/includes/advanced-settings/fix-broken-html.php:8
153
+ msgid "Fix broken HTML"
154
+ msgstr ""
155
+
156
+ #: ../translatepress/includes/advanced-settings/fix-broken-html.php:9
157
+ msgid "General attempt to fix broken or missing HTML on translated pages.<br/><strong>Only try this if the \"Fix spaces between html attribute\" did not solve the issue.</strong>"
158
+ msgstr ""
159
+
160
+ #: ../translatepress/includes/advanced-settings/fix-invalid-space-between-html-attr.php:8
161
+ msgid "Fix spaces between HTML attributes"
162
+ msgstr ""
163
+
164
+ #: ../translatepress/includes/advanced-settings/fix-invalid-space-between-html-attr.php:9
165
+ msgid "Fixes attributes without spaces between them because they are not valid HTML.<br> May help fix missing or broken content from the HTML on translated pages."
166
+ msgstr ""
167
+
168
+ #: ../translatepress/includes/advanced-settings/show-dynamic-content-before-translation.php:8
169
+ msgid "Show dynamic content before translation"
170
+ msgstr ""
171
+
172
+ #: ../translatepress/includes/advanced-settings/show-dynamic-content-before-translation.php:9
173
+ msgid "Shows dynamically inserted content in original language for a moment before the translation request is finished. <br> May help fix missing content inserted using JavaScript."
174
+ msgstr ""
175
+
176
+ #: ../translatepress/includes/advanced-settings/skip-dynamic-selectors.php:9
177
+ msgid "Selector"
178
+ msgstr ""
179
+
180
+ #: ../translatepress/includes/advanced-settings/skip-dynamic-selectors.php:11
181
+ msgid "Exclude from dynamic translation"
182
+ msgstr ""
183
+
184
+ #: ../translatepress/includes/advanced-settings/skip-dynamic-selectors.php:12
185
+ msgid "Do not dynamically translate strings that are found in html nodes matching these selectors.<br>Excludes all the children of HTML nodes matching these selectors from being translated using JavaScript.<br/>These strings will still be translated on the server side if possible."
186
+ msgstr ""
187
+
188
+ #: ../translatepress/includes/advanced-settings/strip-gettext-post-content.php:7
189
+ msgid "Filter Gettext wrapping from post content and title"
190
+ msgstr ""
191
+
192
+ #: ../translatepress/includes/advanced-settings/strip-gettext-post-content.php:8
193
+ msgid "Filters gettext wrapping such as #!trpst#trp-gettext from all updated post content and post title. Does not affect previous post content. <br/><strong>Database backup is recommended before switching on.</strong>"
194
+ msgstr ""
195
+
196
+ #: ../translatepress/includes/advanced-settings/strip-gettext-post-meta.php:8
197
+ msgid "Filter Gettext wrapping from post meta"
198
+ msgstr ""
199
+
200
+ #: ../translatepress/includes/advanced-settings/strip-gettext-post-meta.php:9
201
+ msgid "Filters gettext wrapping such as #!trpst#trp-gettext from all updated post meta. Does not affect previous post meta. <br/><strong>Database backup is recommended before switching on.</strong>"
202
+ msgstr ""
203
+
204
+ #: ../translatepress/includes/class-advanced-tab.php:12
205
+ msgid "Advanced"
206
+ msgstr ""
207
+
208
+ #: ../translatepress/includes/class-advanced-tab.php:160, ../translatepress/partials/main-settings-page.php:41, ../translatepress/partials/main-settings-page.php:54, ../translatepress/partials/main-settings-page.php:67, ../translatepress/partials/main-settings-page.php:80
209
+ msgid "Yes"
210
+ msgstr ""
211
+
212
+ #: ../translatepress/includes/class-advanced-tab.php:206, ../translatepress/includes/class-advanced-tab.php:216
213
+ msgid "Are you sure you want to remove this item?"
214
+ msgstr ""
215
+
216
  #: ../translatepress/includes/class-edd-sl-plugin-updater.php:681, ../translatepress/includes/class-edd-sl-plugin-updater.php:713, ../translatepress/includes/class-edd-sl-plugin-updater.php:784
217
  msgid "An error occurred, please try again."
218
  msgstr ""
305
  msgid "Translate Site"
306
  msgstr ""
307
 
308
+ #: ../translatepress/includes/class-settings.php:394
309
  msgid "Addons"
310
  msgstr ""
311
 
312
+ #: ../translatepress/includes/class-settings.php:402
313
  msgid "License"
314
  msgstr ""
315
 
316
+ #: ../translatepress/includes/class-settings.php:430, ../translatepress/includes/class-translation-manager.php:265
317
  msgid "Settings"
318
  msgstr ""
319
 
320
+ #: ../translatepress/includes/class-settings.php:434
321
  msgid "Pro Features"
322
  msgstr ""
323
 
725
  msgid "Use GET parameter to encode language in the url, replacing the language directory. </br> Your urls will look like this: www.example.com?lang=en"
726
  msgstr ""
727
 
728
+ #: ../translatepress/partials/advanced-settings-page.php:5
729
+ msgid "TranslatePress Advanced Settings"
730
+ msgstr ""
731
+
732
+ #: ../translatepress/partials/advanced-settings-page.php:11
733
+ msgid "Save Changes"
734
+ msgstr ""
735
+
736
  #: ../translatepress/partials/license-settings-page.php:25
737
  msgid "Active on this site"
738
  msgstr ""
789
  msgid "No"
790
  msgstr ""
791
 
 
 
 
 
792
  #: ../translatepress/partials/main-settings-page.php:44
793
  msgid "Select Yes if you want to display languages in their native names. Otherwise, languages will be displayed in English."
794
  msgstr ""
partials/addons-settings-page.php CHANGED
@@ -22,8 +22,7 @@
22
  <div class="grid-cell" style="overflow:hidden;">
23
  <a href="https://translatepress.com/pricing/" target="_blank"><img src="<?php echo esc_url( plugins_url('../assets/images/multiple_lang_icon.png', __FILE__) ) ?>" alt="Multiple Languages" style="float: left; margin: 0 1.5rem 1.5rem 0;"></a>
24
  <h3><a href=" <?php echo trp_add_affiliate_id_to_link('https://translatepress.com/pricing/?utm_source=wpbackend&utm_medium=clientsite&utm_content=addons_tab&utm_campaign=tpfree') ?> " target="_blank"> Multiple Languages</a></h3>
25
- <p><?php _e( 'Add as many languages as you need for your project to go global.<br>
26
- Publish your language only when all your translations are done.', 'translatepress-multilingual' );?> </p>
27
  </div>
28
  </div>
29
 
22
  <div class="grid-cell" style="overflow:hidden;">
23
  <a href="https://translatepress.com/pricing/" target="_blank"><img src="<?php echo esc_url( plugins_url('../assets/images/multiple_lang_icon.png', __FILE__) ) ?>" alt="Multiple Languages" style="float: left; margin: 0 1.5rem 1.5rem 0;"></a>
24
  <h3><a href=" <?php echo trp_add_affiliate_id_to_link('https://translatepress.com/pricing/?utm_source=wpbackend&utm_medium=clientsite&utm_content=addons_tab&utm_campaign=tpfree') ?> " target="_blank"> Multiple Languages</a></h3>
25
+ <p><?php _e( 'Add as many languages as you need for your project to go global.<br>Publish your language only when all your translations are done.', 'translatepress-multilingual' );?> </p>
 
26
  </div>
27
  </div>
28
 
partials/advanced-settings-page.php ADDED
@@ -0,0 +1,13 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+
2
+ <div id="trp-advanced-settings" class="wrap">
3
+ <form method="post" action="options.php">
4
+ <?php settings_fields( 'trp_advanced_settings' ); ?>
5
+ <h1> <?php esc_html_e( 'TranslatePress Advanced Settings', 'translatepress-multilingual' );?></h1>
6
+ <?php do_action ( 'trp_settings_navigation_tabs' ); ?>
7
+
8
+ <table id="trp-options" class="form-table">
9
+ <?php do_action('trp_output_advanced_settings_options' ); ?>
10
+ </table>
11
+ <?php submit_button( __( 'Save Changes', 'translatepress-multilingual' ) ); ?>
12
+ </form>
13
+ </div>
readme.txt CHANGED
@@ -5,7 +5,7 @@ Tags: translate, translation, multilingual, automatic translation, bilingual, fr
5
  Requires at least: 3.1.0
6
  Tested up to: 5.2.2
7
  Requires PHP: 5.6.20
8
- Stable tag: 1.5.1
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -142,6 +142,11 @@ For more information please check out [TranslatePress - Multilingual plugin docu
142
 
143
 
144
  == Changelog ==
 
 
 
 
 
145
  = 1.5.1 =
146
  * Added maximum possible size to srcset for translated images
147
  * Added compatibility with Query Monitor plugin
@@ -514,42 +519,3 @@ For more information please check out [TranslatePress - Multilingual plugin docu
514
 
515
  = 1.0.0 =
516
  * Initial release.
517
-
518
-
519
-
520
- 1.5.1
521
- d213c69 Fixed previous commit on placeholder
522
- db1c2ef Merged in iss6118 (pull request #225)
523
- 3e4bf1c Fixed placeholder attribute not being translated for inputs
524
- a74a536 Merged in iss6112 (pull request #224)
525
- 7f322d7 Use wp_strip_all_tags instead of strip_tags for trimming translation blocks
526
- 4d0f6ee internationalized the account page
527
- bb2d4cf Merged in iss6076 (pull request #223)
528
- b70c061 Add filter to allow translation of href as an exception. Fixed trpTranslator in iframe not adding GET preview paramater when dynamic detection is disabled
529
- 418e26d Merge branch 'master' of bitbucket.org:cozmoslabs/translatepress
530
- 8fc9eb6 modified some strgings
531
- 5abc297 Merged in iss6084 (pull request #222)
532
- c330958 Fiexd variable trpTranslator is undefined when dynamic detection is turned off by filter
533
- 6c41e99 Merged in iss6083 (pull request #221)
534
- 9ac9a0d Updated comment
535
- 4980236 Fixed translate-dom-changes not working in Editor when viewing as logged out
536
- b4d1049 Merged in iss6088 (pull request #220)
537
- a466ddf modify just the subject and message is they exist in wp_mail filter with translatepress
538
- e8b9d1a Merged in iss6029 (pull request #219)
539
- 344fbd5 Fixed custom WooCommerce permalinks not working on translated products
540
- dcc6dac Merged in iss6059 (pull request #218)
541
- a53dc2b Fixed page title not being translated in live mode
542
- 17c40b9 removed an unwanted file and small readme changes
543
- 0e06384 update readme.txt to include image translation
544
- 0be0f51 Merged in iss6048 (pull request #217)
545
- d964287 Fix pencil icon not showing for WooCommerce product images in Shop page on Hestia
546
- 3bc9c2a Merged in iss6051 (pull request #216)
547
- 9a0bcb3 Fixed title not being translated
548
- 07b0a77 Merged in iss6002 (pull request #215)
549
- 7f69260 Added compatibility with Query Monitor
550
- ea400a3 Merged in iss6003 (pull request #214)
551
- 160c1a4 Fixed Translation block created in secondary language didn't work when strings are already translated
552
- e15f6cd Merge branch 'master' of bitbucket.org:cozmoslabs/translatepress
553
- 10ab44e handle the case in which the user did not enter a licence but has active pro addons for license notices
554
- 1db7f92 Merged in iss6016 (pull request #213)
555
- 9490c54 Added maximum possible sizes to srcset of translated images
5
  Requires at least: 3.1.0
6
  Tested up to: 5.2.2
7
  Requires PHP: 5.6.20
8
+ Stable tag: 1.5.2
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
142
 
143
 
144
  == Changelog ==
145
+ = 1.5.2 =
146
+ * Fixed blank page when opening Translation Editor in some localized languages
147
+ * Added -Advanced- tab with various custom settings
148
+ * Added compatibility to allow translating SeedProd plugin Coming Soon page
149
+
150
  = 1.5.1 =
151
  * Added maximum possible size to srcset for translated images
152
  * Added compatibility with Query Monitor plugin
519
 
520
  = 1.0.0 =
521
  * Initial release.