TranslatePress – Translate Multilingual sites - Version 1.3.8

Version Description

  • Speed improvements
  • Remove notices from Editor when we don't have translation languages
  • Fixed notices with referrer in translator machine
  • Fixed issues with urls in other languages
  • Fix issue of nested gettext resulting in unwanted characters
  • Strip gettext tags from urls run through sanitize_title and esc_url
  • Set caching calls non-persistent. Doesn't work with object caching otherwise
  • Set lang attribute in html tag all the time including when on default language
  • Refactored the way we translate json
  • Fixed issue with Woocommerce ajax calls
Download this release

Release Info

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

Code changes from version 1.3.7 to 1.3.8

assets/js/trp-editor-script.js CHANGED
@@ -82,11 +82,11 @@ function TRP_Editor(){
82
 
83
  _this.update_parent_url();
84
 
85
- _this.iframe_strings_lookup();
86
-
87
  if ( _this.trp_lister != null ) {
88
  _this.jquery_string_selector.off( 'change', _this.trp_lister.select_string );
89
  }
 
 
90
  _this.trp_lister = new TRP_Lister( dictionaries[trp_on_screen_language] );
91
 
92
  if ( _this.change_tracker != null ) {
@@ -148,7 +148,10 @@ function TRP_Editor(){
148
  _this.ajax_get_strings( strings_to_query );
149
  }
150
  else{
151
- loading_animation.toggle();
 
 
 
152
  }
153
  };
154
 
@@ -1525,7 +1528,7 @@ jQuery( function() {
1525
  var gettext_dictionaries = null;
1526
  jQuery(function(){
1527
  /* initial load and populate the dropdown with gettext strings */
1528
- jQuery( "#trp-preview-iframe" ).load(function(){
1529
  /* get the gettext texts ids from the page and pass them to a ajax call to construct the dictonaries */
1530
  var gettext_strings = jQuery( '#trp-preview-iframe').contents().find( '[data-trpgettextoriginal]' );
1531
  gettext_string_ids = [];
@@ -1597,7 +1600,11 @@ jQuery(function(){
1597
 
1598
 
1599
 
1600
- });
 
 
 
 
1601
 
1602
  /* handle saving gettext strings */
1603
  jQuery( '#trp-editor' ).on( 'click', '#trp-save-gettext', function(){
82
 
83
  _this.update_parent_url();
84
 
 
 
85
  if ( _this.trp_lister != null ) {
86
  _this.jquery_string_selector.off( 'change', _this.trp_lister.select_string );
87
  }
88
+ _this.iframe_strings_lookup();
89
+
90
  _this.trp_lister = new TRP_Lister( dictionaries[trp_on_screen_language] );
91
 
92
  if ( _this.change_tracker != null ) {
148
  _this.ajax_get_strings( strings_to_query );
149
  }
150
  else{
151
+ _this.trp_lister = new TRP_Lister( new TRP_Dictionary( trp_language ) );
152
+ _this.trp_lister.reload_list();
153
+ _this.change_tracker = new TRP_Change_Tracker( _this.original_textarea, translated_textareas );
154
+ _this.saved_translation_ui( true );
155
  }
156
  };
157
 
1528
  var gettext_dictionaries = null;
1529
  jQuery(function(){
1530
  /* initial load and populate the dropdown with gettext strings */
1531
+ function trp_initialize_gettext() {
1532
  /* get the gettext texts ids from the page and pass them to a ajax call to construct the dictonaries */
1533
  var gettext_strings = jQuery( '#trp-preview-iframe').contents().find( '[data-trpgettextoriginal]' );
1534
  gettext_string_ids = [];
1600
 
1601
 
1602
 
1603
+ }
1604
+ //trp_initialize_gettext();
1605
+ //jQuery( "#trp-preview-iframe" ).load(function(){
1606
+ jQuery( "#trp-preview-iframe" ).load( trp_initialize_gettext );
1607
+ jQuery( "#trp-preview-iframe" ).on( 'trp_page_loaded', trp_initialize_gettext );
1608
 
1609
  /* handle saving gettext strings */
1610
  jQuery( '#trp-editor' ).on( 'click', '#trp-save-gettext', function(){
assets/js/trp-translate-dom-changes.js CHANGED
@@ -268,7 +268,7 @@ function TRP_Translator(){
268
  if( window.parent.jQuery('#trp-preview-iframe').length != 0 ) {
269
  var settingsdata = "" + settings.data;
270
  if( typeof settings.data == 'undefined' || jQuery.isEmptyObject( settings.data ) || settingsdata.indexOf('action=trp_') === -1 ) {
271
- window.parent.jQuery('#trp-preview-iframe').trigger('load');
272
  jQuery( window ).trigger('trp_page_loaded');
273
  }
274
  }
268
  if( window.parent.jQuery('#trp-preview-iframe').length != 0 ) {
269
  var settingsdata = "" + settings.data;
270
  if( typeof settings.data == 'undefined' || jQuery.isEmptyObject( settings.data ) || settingsdata.indexOf('action=trp_') === -1 ) {
271
+ window.parent.jQuery('#trp-preview-iframe').trigger('trp_page_loaded');
272
  jQuery( window ).trigger('trp_page_loaded');
273
  }
274
  }
class-translate-press.php CHANGED
@@ -40,7 +40,9 @@ class TRP_Translate_Press{
40
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
42
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
43
- define( 'TRP_PLUGIN_VERSION', '1.3.7' );
 
 
44
 
45
  $this->load_dependencies();
46
  $this->initialize_components();
@@ -186,6 +188,10 @@ class TRP_Translate_Press{
186
 
187
  /* we need to treat the date_i18n function differently so we remove the gettext wraps */
188
  $this->loader->add_filter( 'date_i18n', $this->translation_manager, 'handle_date_i18n_function_for_gettext', 1, 4 );
 
 
 
 
189
 
190
  /* define an update hook here */
191
  $this->loader->add_action( 'plugins_loaded', $this->query, 'check_for_necessary_updates', 10 );
40
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
  define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
42
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
43
+ define( 'TRP_PLUGIN_VERSION', '1.3.8' );
44
+
45
+ wp_cache_add_non_persistent_groups(array('trp'));
46
 
47
  $this->load_dependencies();
48
  $this->initialize_components();
188
 
189
  /* we need to treat the date_i18n function differently so we remove the gettext wraps */
190
  $this->loader->add_filter( 'date_i18n', $this->translation_manager, 'handle_date_i18n_function_for_gettext', 1, 4 );
191
+ /* strip esc_url() from gettext wraps */
192
+ $this->loader->add_filter( 'clean_url', $this->translation_manager, 'trp_strip_gettext_tags_from_esc_url', 1, 3 );
193
+ /* strip sanitize_title() from gettext wraps and apply custom trp_remove_accents */
194
+ $this->loader->add_filter( 'sanitize_title', $this->translation_manager, 'trp_sanitize_title', 1, 3 );
195
 
196
  /* define an update hook here */
197
  $this->loader->add_action( 'plugins_loaded', $this->query, 'check_for_necessary_updates', 10 );
includes/class-machine-translator.php CHANGED
@@ -7,7 +7,8 @@
7
  */
8
  class TRP_Machine_Translator{
9
  protected $settings;
10
-
 
11
  /**
12
  * TRP_Machine_Translator constructor.
13
  *
7
  */
8
  class TRP_Machine_Translator{
9
  protected $settings;
10
+ protected $referer;
11
+ protected $url_converter;
12
  /**
13
  * TRP_Machine_Translator constructor.
14
  *
includes/class-translation-manager.php CHANGED
@@ -818,7 +818,7 @@ class TRP_Translation_Manager{
818
  global $TRP_LANGUAGE;
819
  $trp = TRP_Translate_Press::get_trp_instance();
820
  $url_converter = $trp->get_component( 'url_converter' );
821
- $TRP_LANGUAGE = $url_converter ->get_lang_from_url_string($referer);
822
  if( empty( $TRP_LANGUAGE ) ) {
823
  $settings_obj = new TRP_Settings();
824
  $settings = $settings_obj->get_settings();
@@ -836,6 +836,9 @@ class TRP_Translation_Manager{
836
  * @return string
837
  */
838
  public function process_gettext_strings( $translation, $text, $domain ){
 
 
 
839
  global $TRP_LANGUAGE;
840
  /* don't do anything if we don't have extra languages on the site */
841
  if( count( $this->settings['publish-languages'] ) < 1 )
@@ -908,31 +911,32 @@ class TRP_Translation_Manager{
908
  }
909
  }
910
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
911
  $callstack_functions = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
912
  if( !empty( $callstack_functions ) ){
913
  foreach( $callstack_functions as $callstack_function ){
914
- if( $callstack_function['function'] == 'wp_enqueue_script' ||
915
- $callstack_function['function'] == 'wp_enqueue_scripts' ||
916
- $callstack_function['function'] == 'wp_editor' ||
917
- $callstack_function['function'] == 'wp_enqueue_media' ||
918
- $callstack_function['function'] == 'wp_register_script' ||
919
- $callstack_function['function'] == 'wp_print_scripts'||
920
- $callstack_function['function'] == 'wp_localize_script'||
921
- $callstack_function['function'] == 'wp_print_media_templates' ||
922
- $callstack_function['function'] == 'get_bloginfo' ||
923
- $callstack_function['function'] == 'wp_get_document_title' ||
924
- $callstack_function['function'] == 'wp_title' ||
925
- $callstack_function['function'] == 'wp_trim_words'
926
- ) {
927
- return $translation;
928
- }
929
 
930
- /* make sure we don't touch the woocommerce permalink rewrite slugs that are translated */
931
- if( $callstack_function['function'] == 'wc_get_permalink_structure' ){
932
- return $translation;
933
- }
934
-
935
- /* make sure we don't touch the woocommerce process_payment function in WC_Gateway_Stripe. It does a wp_remote_post() call to stripe with localized parameters */
936
  if( $callstack_function['function'] == 'process_payment' && $callstack_function['class'] == 'WC_Gateway_Stripe' ){
937
  return $translation;
938
  }
@@ -1094,6 +1098,56 @@ class TRP_Translation_Manager{
1094
 
1095
  }
1096
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1097
  /**
1098
  * function that strips the gettext tags from a string
1099
  * @param $string
818
  global $TRP_LANGUAGE;
819
  $trp = TRP_Translate_Press::get_trp_instance();
820
  $url_converter = $trp->get_component( 'url_converter' );
821
+ $TRP_LANGUAGE = $url_converter->get_lang_from_url_string($referer);
822
  if( empty( $TRP_LANGUAGE ) ) {
823
  $settings_obj = new TRP_Settings();
824
  $settings = $settings_obj->get_settings();
836
  * @return string
837
  */
838
  public function process_gettext_strings( $translation, $text, $domain ){
839
+ // if we have nested gettexts strip previous ones, and consider only the outermost
840
+ $text = TRP_Translation_Manager::strip_gettext_tags( $text );
841
+ $translation = TRP_Translation_Manager::strip_gettext_tags( $translation );
842
  global $TRP_LANGUAGE;
843
  /* don't do anything if we don't have extra languages on the site */
844
  if( count( $this->settings['publish-languages'] ) < 1 )
911
  }
912
  }
913
 
914
+ $blacklist_functions = apply_filters( 'trp_gettext_blacklist_functions', array(
915
+ 'wp_enqueue_script',
916
+ 'wp_enqueue_scripts',
917
+ 'wp_editor',
918
+ 'wp_enqueue_media',
919
+ 'wp_register_script',
920
+ 'wp_print_scripts',
921
+ 'wp_localize_script',
922
+ 'wp_print_media_templates',
923
+ 'get_bloginfo',
924
+ 'wp_get_document_title',
925
+ 'wp_title',
926
+ 'wp_trim_words',
927
+ 'sanitize_title',
928
+ 'sanitize_title_with_dashes',
929
+ 'esc_url',
930
+ 'wc_get_permalink_structure' // make sure we don't touch the woocommerce permalink rewrite slugs that are translated
931
+ ), $text, $translation, $domain );
932
  $callstack_functions = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
933
  if( !empty( $callstack_functions ) ){
934
  foreach( $callstack_functions as $callstack_function ){
935
+ if ( in_array( $callstack_function['function'], $blacklist_functions ) ){
936
+ return $translation;
937
+ }
 
 
 
 
 
 
 
 
 
 
 
 
938
 
939
+ /* make sure we don't touch the woocommerce process_payment function in WC_Gateway_Stripe. It does a wp_remote_post() call to stripe with localized parameters */
 
 
 
 
 
940
  if( $callstack_function['function'] == 'process_payment' && $callstack_function['class'] == 'WC_Gateway_Stripe' ){
941
  return $translation;
942
  }
1098
 
1099
  }
1100
 
1101
+ /**
1102
+ * Strip gettext tags from urls that were parsed by esc_url
1103
+ *
1104
+ * Esc_url() replaces spaces with %20. This is why it is not automatically stripped like the rest of the urls.
1105
+ *
1106
+ * @since 1.3.8
1107
+ *
1108
+ * @param $good_protocol_url
1109
+ * @param $original_url
1110
+ * @param $_context
1111
+ *
1112
+ * @return mixed
1113
+ */
1114
+ function trp_strip_gettext_tags_from_esc_url( $good_protocol_url, $original_url, $_context ){
1115
+ if( strpos( $good_protocol_url, '%20data-trpgettextoriginal=' ) !== false ) {
1116
+ // first replace %20 with space so that gettext tags can be stripped.
1117
+ $good_protocol_url = str_replace( '%20data-trpgettextoriginal=', ' data-trpgettextoriginal=', $good_protocol_url );
1118
+ $good_protocol_url = TRP_Translation_Manager::strip_gettext_tags( $good_protocol_url );
1119
+ }
1120
+
1121
+ return $good_protocol_url;
1122
+ }
1123
+
1124
+ /**
1125
+ * Filter sanitize_title() to use our own remove_accents() function so it's based on the default language, not current locale.
1126
+ *
1127
+ * Also removes trp gettext tags before running the filter because it strip # and ! and / making it impossible to strip the #trpst later
1128
+ *
1129
+ * @since 1.3.1
1130
+ *
1131
+ * @param string $title
1132
+ * @param string $raw_title
1133
+ * @param string $context
1134
+ * @return string
1135
+ */
1136
+ public function trp_sanitize_title( $title, $raw_title, $context ){
1137
+ // remove trp_tags before sanitization, because otherwise some characters (#,!,/, spaces ) are stripped later, and it becomes impossible to strip trp-gettext later
1138
+ $raw_title = TRP_Translation_Manager::strip_gettext_tags( $raw_title );
1139
+
1140
+ if ( 'save' == $context )
1141
+ $title = trp_remove_accents( $raw_title );
1142
+
1143
+ remove_filter( 'sanitize_title', array( $this, 'trp_sanitize_title') , 1 );
1144
+ $title = apply_filters( 'sanitize_title', $title, $raw_title, $context );
1145
+ add_filter( 'sanitize_title', array( $this, 'trp_sanitize_title'), 1, 3 );
1146
+
1147
+ return $title;
1148
+ }
1149
+
1150
+
1151
  /**
1152
  * function that strips the gettext tags from a string
1153
  * @param $string
includes/class-translation-render.php CHANGED
@@ -29,7 +29,10 @@ class TRP_Translation_Render{
29
  public function start_output_buffer(){
30
  global $TRP_LANGUAGE;
31
 
32
- if( ( is_admin() && !TRP_Translation_Manager::is_ajax_on_frontend() ) || trp_is_translation_editor( 'true' ) ){
 
 
 
33
  return;//we have two cases where we don't do anything: we are on the admin side and we are not in an ajax call or we are in the left side of the translation editor
34
  }
35
  else {
@@ -305,17 +308,23 @@ class TRP_Translation_Render{
305
  if ($language_code === false) {
306
  return $output;
307
  }
 
 
 
 
 
 
308
 
309
  $preview_mode = isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview';
310
 
311
- $is_json = is_array( $json_array = json_decode( $output, true ) );
312
  /* If we have a json response we need to parse it and only translate the nodes that contain html
313
  *
314
  * Removed is_ajax_on_frontend() check because we need to capture custom ajax events.
315
  * Decided that if $output is json decodable it's a good enough check to handle it this way.
316
  * We have necessary checks so that we don't get to this point when is_admin(), or when language is not default.
317
  */
318
- if( $is_json ) {
319
  /* if it's one of our own ajax calls don't do nothing */
320
  if ( ! empty( $_REQUEST['action'] ) && strpos( $_REQUEST['action'], 'trp_' ) === 0 && $_REQUEST['action'] != 'trp_split_translation_block' ) {
321
  return $output;
@@ -323,27 +332,9 @@ class TRP_Translation_Render{
323
 
324
  //check if we have a json response
325
  if ( ! empty( $json_array ) ) {
326
- foreach ( $json_array as $key => $value ) {
327
- if ( ! empty( $value ) ) {
328
- if ( ! is_array( $value ) ) { //if the current element is not an array check if it a html text and translate
329
- $html_decoded_value = html_entity_decode( (string) $value );
330
- if ( $html_decoded_value != strip_tags( $html_decoded_value ) ) {
331
- $json_array[ $key ] = $this->translate_page( stripslashes( $value ) );
332
- }
333
- } else {//look for the html elements
334
- foreach ( $value as $k => $v ) {
335
- if ( ! empty( $v ) ) {
336
- if ( ! is_array( $v ) ) {
337
- $html_decoded_v = html_entity_decode( (string) $v );
338
- if ( $html_decoded_v != strip_tags( $html_decoded_v ) ) {
339
- $json_array[ $key ][ $k ] = $this->translate_page( stripslashes( $v ) );
340
- }
341
- }
342
- }
343
- }
344
- }
345
- }
346
- }
347
  }
348
 
349
  return trp_safe_json_encode( $json_array );
@@ -374,13 +365,14 @@ class TRP_Translation_Render{
374
  if ( ! $this->translation_manager ) {
375
  $this->translation_manager = $trp->get_component( 'translation_manager' );
376
  }
377
- $all_existing_translation_blocks = $this->trp_query->get_all_translation_blocks( $language_code );
378
- // trim every translation block original now, to avoid over-calling trim function later
379
- foreach ( $all_existing_translation_blocks as $key => $existing_tb ){
380
- $all_existing_translation_blocks[$key]->trimmed_original = $this->trim_translation_block( $all_existing_translation_blocks[$key]->original );
 
 
 
381
  }
382
- $merge_rules = $this->translation_manager->get_merge_rules();
383
-
384
  $html = trp_str_get_html($output, true, true, TRP_DEFAULT_TARGET_CHARSET, false, TRP_DEFAULT_BR_TEXT, TRP_DEFAULT_SPAN_TEXT);
385
 
386
  /**
@@ -402,28 +394,29 @@ class TRP_Translation_Render{
402
  }
403
  else{
404
  $trp_attr_rows[] = $row;
405
-
406
- $translation_block = $this->find_translation_block( $row, $all_existing_translation_blocks, $merge_rules );
407
- if ( $translation_block ){
408
- $existing_classes = $row->getAttribute( 'class' );
409
- if ( $translation_block->block_type == 1 ) {
410
- $found_inner_translation_block = false;
411
- foreach( $row->children() as $child ){
412
- if ( $this->find_translation_block( $child, array( $translation_block ), $merge_rules ) != null ){
413
- $found_inner_translation_block = true;
414
- break;
 
415
  }
 
 
 
 
 
 
 
 
 
 
416
  }
417
- if ( !$found_inner_translation_block ) {
418
- // make sure we find it later exactly the way it is in DB
419
- $row->innertext = $translation_block->original;
420
- $row->setAttribute( 'class', $existing_classes . ' translation-block' );
421
- }
422
- }else if ( $preview_mode && $translation_block->block_type == 2 && $translation_block->status != 0 ) {
423
- // refactor to not do this for each
424
- $row->setAttribute( 'data-trp-translate-id', $translation_block->id );
425
- $row->setAttribute( 'data-trp-translate-id-deprecated', $translation_block->id );
426
- $row->setAttribute( 'class', $existing_classes . 'trp-deprecated-tb' );
427
  }
428
  }
429
 
@@ -491,6 +484,11 @@ class TRP_Translation_Render{
491
  /* perform preg replace on the remaining trp-gettext tags */
492
  $trpremoved = preg_replace( '/(<|&lt;)trp-gettext (.*?)(>|&gt;)/', '', $trpremoved );
493
  $trpremoved = preg_replace( '/(<|&lt;)(\\\\)*\/trp-gettext(>|&gt;)/', '', $trpremoved );
 
 
 
 
 
494
  $html = trp_str_get_html($trpremoved, true, true, TRP_DEFAULT_TARGET_CHARSET, false, TRP_DEFAULT_BR_TEXT, TRP_DEFAULT_SPAN_TEXT);
495
 
496
  $no_translate_selectors = apply_filters( 'trp_no_translate_selectors', array( '#wpadminbar' ), $TRP_LANGUAGE );
@@ -734,6 +732,22 @@ class TRP_Translation_Render{
734
  return $html->save();
735
  }
736
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
737
  /**
738
  * Function that should be called only on the default language and when we are not in the editor mode and it is designed as a fallback to clear
739
  * any trp gettext tags that we added and for some reason show up although they should not
@@ -1088,6 +1102,8 @@ class TRP_Translation_Render{
1088
  if ( TRP_Translation_Manager::is_ajax_on_frontend() && isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] === 'preview' && $output != false ) {
1089
  $result = json_decode($output, TRUE);
1090
  if ( json_last_error() === JSON_ERROR_NONE) {
 
 
1091
  array_walk_recursive($result, array($this, 'callback_add_preview_arg'));
1092
  $output = trp_safe_json_encode($result);
1093
  } //endif
29
  public function start_output_buffer(){
30
  global $TRP_LANGUAGE;
31
 
32
+ //when we check if is an ajax request in frontend we also set proper REQUEST variables and language global so we need to run this for every buffer
33
+ $ajax_on_frontend = TRP_Translation_Manager::is_ajax_on_frontend();//TODO refactor this function si it just checks and does not set variables
34
+
35
+ if( ( is_admin() && !$ajax_on_frontend ) || trp_is_translation_editor( 'true' ) ){
36
  return;//we have two cases where we don't do anything: we are on the admin side and we are not in an ajax call or we are in the left side of the translation editor
37
  }
38
  else {
308
  if ($language_code === false) {
309
  return $output;
310
  }
311
+ if ( $language_code == $this->settings['default-language'] ){
312
+ // Don't translate regular strings (non-gettext) when we have no other translation languages except default language ( count( $this->settings['publish-languages'] ) > 1 )
313
+ $translate_normal_strings = false;
314
+ }else{
315
+ $translate_normal_strings = true;
316
+ }
317
 
318
  $preview_mode = isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview';
319
 
320
+ $json_array = json_decode( $output, true );
321
  /* If we have a json response we need to parse it and only translate the nodes that contain html
322
  *
323
  * Removed is_ajax_on_frontend() check because we need to capture custom ajax events.
324
  * Decided that if $output is json decodable it's a good enough check to handle it this way.
325
  * We have necessary checks so that we don't get to this point when is_admin(), or when language is not default.
326
  */
327
+ if( $json_array && $json_array != $output ) {
328
  /* if it's one of our own ajax calls don't do nothing */
329
  if ( ! empty( $_REQUEST['action'] ) && strpos( $_REQUEST['action'], 'trp_' ) === 0 && $_REQUEST['action'] != 'trp_split_translation_block' ) {
330
  return $output;
332
 
333
  //check if we have a json response
334
  if ( ! empty( $json_array ) ) {
335
+ if( !is_array( $json_array ) )//make sure we send an array as json_decode even with true parameter might not return one
336
+ $json_array = array( $json_array );
337
+ array_walk_recursive( $json_array, array( $this, 'translate_json' ) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
338
  }
339
 
340
  return trp_safe_json_encode( $json_array );
365
  if ( ! $this->translation_manager ) {
366
  $this->translation_manager = $trp->get_component( 'translation_manager' );
367
  }
368
+ if ( $translate_normal_strings ) {
369
+ $all_existing_translation_blocks = $this->trp_query->get_all_translation_blocks( $language_code );
370
+ // trim every translation block original now, to avoid over-calling trim function later
371
+ foreach ( $all_existing_translation_blocks as $key => $existing_tb ) {
372
+ $all_existing_translation_blocks[ $key ]->trimmed_original = $this->trim_translation_block( $all_existing_translation_blocks[ $key ]->original );
373
+ }
374
+ $merge_rules = $this->translation_manager->get_merge_rules();
375
  }
 
 
376
  $html = trp_str_get_html($output, true, true, TRP_DEFAULT_TARGET_CHARSET, false, TRP_DEFAULT_BR_TEXT, TRP_DEFAULT_SPAN_TEXT);
377
 
378
  /**
394
  }
395
  else{
396
  $trp_attr_rows[] = $row;
397
+ if ( $translate_normal_strings ) {
398
+ $translation_block = $this->find_translation_block( $row, $all_existing_translation_blocks, $merge_rules );
399
+ if ( $translation_block ) {
400
+ $existing_classes = $row->getAttribute( 'class' );
401
+ if ( $translation_block->block_type == 1 ) {
402
+ $found_inner_translation_block = false;
403
+ foreach ( $row->children() as $child ) {
404
+ if ( $this->find_translation_block( $child, array( $translation_block ), $merge_rules ) != null ) {
405
+ $found_inner_translation_block = true;
406
+ break;
407
+ }
408
  }
409
+ if ( ! $found_inner_translation_block ) {
410
+ // make sure we find it later exactly the way it is in DB
411
+ $row->innertext = $translation_block->original;
412
+ $row->setAttribute( 'class', $existing_classes . ' translation-block' );
413
+ }
414
+ } else if ( $preview_mode && $translation_block->block_type == 2 && $translation_block->status != 0 ) {
415
+ // refactor to not do this for each
416
+ $row->setAttribute( 'data-trp-translate-id', $translation_block->id );
417
+ $row->setAttribute( 'data-trp-translate-id-deprecated', $translation_block->id );
418
+ $row->setAttribute( 'class', $existing_classes . 'trp-deprecated-tb' );
419
  }
 
 
 
 
 
 
 
 
 
 
420
  }
421
  }
422
 
484
  /* perform preg replace on the remaining trp-gettext tags */
485
  $trpremoved = preg_replace( '/(<|&lt;)trp-gettext (.*?)(>|&gt;)/', '', $trpremoved );
486
  $trpremoved = preg_replace( '/(<|&lt;)(\\\\)*\/trp-gettext(>|&gt;)/', '', $trpremoved );
487
+
488
+ if ( ! $translate_normal_strings ) {
489
+ return $trpremoved;
490
+ }
491
+
492
  $html = trp_str_get_html($trpremoved, true, true, TRP_DEFAULT_TARGET_CHARSET, false, TRP_DEFAULT_BR_TEXT, TRP_DEFAULT_SPAN_TEXT);
493
 
494
  $no_translate_selectors = apply_filters( 'trp_no_translate_selectors', array( '#wpadminbar' ), $TRP_LANGUAGE );
732
  return $html->save();
733
  }
734
 
735
+ /**
736
+ * Callback for the array_walk_recursive to translate json. It translates the values in the resulting json array if they contain html
737
+ * @param $value
738
+ */
739
+ function translate_json (&$value) {
740
+ //check if it a html text and translate
741
+ $html_decoded_value = html_entity_decode( (string) $value );
742
+ if ( $html_decoded_value != strip_tags( $html_decoded_value ) ) {
743
+ $value = $this->translate_page( stripslashes( $value ) );
744
+ /*the translate-press tag can appear on a gettext string without html and should not be left in the json
745
+ as we don't know how it will be inserted into the page by js */
746
+ $value = preg_replace( '/(<|&lt;)translate-press (.*?)(>|&gt;)/', '', $value );
747
+ $value = preg_replace( '/(<|&lt;)(\\\\)*\/translate-press(>|&gt;)/', '', $value );
748
+ }
749
+ }
750
+
751
  /**
752
  * Function that should be called only on the default language and when we are not in the editor mode and it is designed as a fallback to clear
753
  * any trp gettext tags that we added and for some reason show up although they should not
1102
  if ( TRP_Translation_Manager::is_ajax_on_frontend() && isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] === 'preview' && $output != false ) {
1103
  $result = json_decode($output, TRUE);
1104
  if ( json_last_error() === JSON_ERROR_NONE) {
1105
+ if( !is_array( $result ) )//make sure we send an array as json_decode even with true parameter might not return one
1106
+ $result = array($result);
1107
  array_walk_recursive($result, array($this, 'callback_add_preview_arg'));
1108
  $output = trp_safe_json_encode($result);
1109
  } //endif
includes/class-url-converter.php CHANGED
@@ -117,7 +117,7 @@ class TRP_Url_Converter {
117
  public function change_lang_attr_in_html_tag( $output ){
118
  global $TRP_LANGUAGE;
119
  $lang = get_bloginfo('language');
120
- if ( $lang && !empty($TRP_LANGUAGE) && $this->settings["default-language"] != $TRP_LANGUAGE ) {
121
  $output = str_replace( 'lang="'. $lang .'"', 'lang="'. str_replace('_', '-', $TRP_LANGUAGE ) .'"', $output );
122
  }
123
 
@@ -148,6 +148,7 @@ class TRP_Url_Converter {
148
  if ( empty( $language ) ) {
149
  $language = $TRP_LANGUAGE;
150
  }
 
151
  if ( empty($url) ){
152
  $url = $this->cur_page_url();
153
  }
@@ -181,10 +182,10 @@ class TRP_Url_Converter {
181
  return $url . $trp_link_is_processed; // abort for non-http/https links
182
  }
183
 
184
- if ( $url_obj->isSchemeless() && !$url_obj->getPath() && !$url_obj->getQuery() ){
185
- trp_bulk_debug($debug, array('url' => $url, 'abort' => "is anchor"));
186
  wp_cache_set('get_url_for_language_' . $hash, $url, 'trp');
187
- return $url; // abort for anchors
188
  }
189
 
190
  if ( $url_obj->getHost() && $abs_home_url_obj->getHost() && $url_obj->getHost() != $abs_home_url_obj->getHost() ){
@@ -211,12 +212,18 @@ class TRP_Url_Converter {
211
  $post_id = $possible_post_id;
212
  trp_bulk_debug($debug, array('url' => $url, 'found post id' => $post_id, 'for language' => $TRP_LANGUAGE));
213
  } else {
214
- // try again but with the default language home_url
215
- $TRP_LANGUAGE = $this->settings['default-language'];
216
  $post_id = url_to_postid( $url );
217
  wp_cache_set( 'possible_post_id_' . hash('md4', $url ), $post_id, 'trp' );
218
- if($post_id){ trp_bulk_debug($debug, array('url' => $url, 'found post id' => $post_id, 'for default language' => $TRP_LANGUAGE)); }
219
- $TRP_LANGUAGE = $trp_language_copy;
 
 
 
 
 
 
 
 
220
  }
221
 
222
  if( $post_id ){
117
  public function change_lang_attr_in_html_tag( $output ){
118
  global $TRP_LANGUAGE;
119
  $lang = get_bloginfo('language');
120
+ if ( $lang && !empty($TRP_LANGUAGE) ) {
121
  $output = str_replace( 'lang="'. $lang .'"', 'lang="'. str_replace('_', '-', $TRP_LANGUAGE ) .'"', $output );
122
  }
123
 
148
  if ( empty( $language ) ) {
149
  $language = $TRP_LANGUAGE;
150
  }
151
+
152
  if ( empty($url) ){
153
  $url = $this->cur_page_url();
154
  }
182
  return $url . $trp_link_is_processed; // abort for non-http/https links
183
  }
184
 
185
+ if ( $url_obj->isSchemeless() && !$url_obj->getPath() ){
186
+ trp_bulk_debug($debug, array('url' => $url, 'abort' => "is anchor or has get params"));
187
  wp_cache_set('get_url_for_language_' . $hash, $url, 'trp');
188
+ return $url; // abort for anchors or params only.
189
  }
190
 
191
  if ( $url_obj->getHost() && $abs_home_url_obj->getHost() && $url_obj->getHost() != $abs_home_url_obj->getHost() ){
212
  $post_id = $possible_post_id;
213
  trp_bulk_debug($debug, array('url' => $url, 'found post id' => $post_id, 'for language' => $TRP_LANGUAGE));
214
  } else {
 
 
215
  $post_id = url_to_postid( $url );
216
  wp_cache_set( 'possible_post_id_' . hash('md4', $url ), $post_id, 'trp' );
217
+ if ( $post_id ) { trp_bulk_debug($debug, array('url' => $url, 'found post id' => $post_id, 'for default language' => $TRP_LANGUAGE)); }
218
+
219
+ if ( $post_id == 0 ) {
220
+ // try again but with the default language home_url
221
+ $TRP_LANGUAGE = $this->settings['default-language'];
222
+ $post_id = url_to_postid( $url );
223
+ wp_cache_set( 'possible_post_id_' . hash('md4', $url ), $post_id, 'trp' );
224
+ if($post_id){ trp_bulk_debug($debug, array('url' => $url, 'found post id' => $post_id, 'for default language' => $TRP_LANGUAGE)); }
225
+ $TRP_LANGUAGE = $trp_language_copy;
226
+ }
227
  }
228
 
229
  if( $post_id ){
includes/functions.php CHANGED
@@ -304,28 +304,6 @@ function trp_use_home_url_in_peepso_ajax( $data ){
304
  return $data;
305
  }
306
 
307
- /**
308
- * Filter sanitize_title() to use our own remove_accents() function so it's based on the default language, not current locale.
309
- *
310
- * @since 1.3.1
311
- *
312
- * @param string $title
313
- * @param string $raw_title
314
- * @param string $context
315
- * @return string
316
- */
317
- add_filter( 'sanitize_title', 'trp_sanitize_title', 1, 3 );
318
- function trp_sanitize_title( $title, $raw_title, $context ){
319
-
320
- if ( 'save' == $context )
321
- $title = trp_remove_accents( $raw_title );
322
-
323
- remove_filter( 'sanitize_title', 'trp_sanitize_title', 1, 3 );
324
- $title = apply_filters( 'sanitize_title', $title, $raw_title, $context );
325
- add_filter( 'sanitize_title', 'trp_sanitize_title', 1, 3 );
326
-
327
- return $title;
328
- }
329
 
330
  function trp_remove_accents( $string ){
331
 
304
  return $data;
305
  }
306
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
307
 
308
  function trp_remove_accents( $string ){
309
 
index.php CHANGED
@@ -3,14 +3,14 @@
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.3.7
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
10
  Domain Path: /languages
11
  License: GPL2
12
  WC requires at least: 2.5.0
13
- WC tested up to: 3.4
14
 
15
  == Copyright ==
16
  Copyright 2017 Cozmoslabs (www.cozmoslabs.com)
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.3.8
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  Text Domain: translatepress-multilingual
10
  Domain Path: /languages
11
  License: GPL2
12
  WC requires at least: 2.5.0
13
+ WC tested up to: 3.5
14
 
15
  == Copyright ==
16
  Copyright 2017 Cozmoslabs (www.cozmoslabs.com)
languages/translatepress-multilingual.catalog.php CHANGED
@@ -14,8 +14,9 @@
14
  <?php __("Deactivate License", "translatepress-multilingual"); ?>
15
  <?php __("Method of language detection", "translatepress-multilingual"); ?>
16
  <?php __("Select how the language should be detected for first time visitors.<br>The visitor's last displayed language will be remembered through cookies.", "translatepress-multilingual"); ?>
17
- <?php __("Translation Languages", "translatepress-multilingual"); ?>
18
  <?php __("Language", "translatepress-multilingual"); ?>
 
19
  <?php __("Slug", "translatepress-multilingual"); ?>
20
  <?php __("Active", "translatepress-multilingual"); ?>
21
  <?php __("Are you sure you want to remove this language?", "translatepress-multilingual"); ?>
@@ -64,8 +65,6 @@
64
  <?php __("Post Slug", "translatepress-multilingual"); ?>
65
  <?php __("Page Title", "translatepress-multilingual"); ?>
66
  <?php __("<strong>TranslatePress</strong> requires <strong><a href=\"http://php.net/manual/en/book.mbstring.php\">Multibyte String PHP library</a></strong>. Please contact your server administrator to install it on your server.", "translatepress-multilingual"); ?>
67
- <?php __("All Languages", "translatepress-multilingual"); ?>
68
- <?php __("Code", "translatepress-multilingual"); ?>
69
  <?php __("Select the language you wish to make your website available in.", "translatepress-multilingual"); ?>
70
  <?php __("To add <strong>more then two languages</strong> and support for SEO Title, Description, Slug and more check out <a href=\"%s\" class=\"button button-primary\" target=\"_blank\" title=\"TranslatePress Pro\">TranslatePress PRO</a>", "translatepress-multilingual"); ?>
71
  <?php __("Not only you are getting extra features and premium support, you also help fund the future development of TranslatePress.", "translatepress-multilingual"); ?>
14
  <?php __("Deactivate License", "translatepress-multilingual"); ?>
15
  <?php __("Method of language detection", "translatepress-multilingual"); ?>
16
  <?php __("Select how the language should be detected for first time visitors.<br>The visitor's last displayed language will be remembered through cookies.", "translatepress-multilingual"); ?>
17
+ <?php __("All Languages", "translatepress-multilingual"); ?>
18
  <?php __("Language", "translatepress-multilingual"); ?>
19
+ <?php __("Code", "translatepress-multilingual"); ?>
20
  <?php __("Slug", "translatepress-multilingual"); ?>
21
  <?php __("Active", "translatepress-multilingual"); ?>
22
  <?php __("Are you sure you want to remove this language?", "translatepress-multilingual"); ?>
65
  <?php __("Post Slug", "translatepress-multilingual"); ?>
66
  <?php __("Page Title", "translatepress-multilingual"); ?>
67
  <?php __("<strong>TranslatePress</strong> requires <strong><a href=\"http://php.net/manual/en/book.mbstring.php\">Multibyte String PHP library</a></strong>. Please contact your server administrator to install it on your server.", "translatepress-multilingual"); ?>
 
 
68
  <?php __("Select the language you wish to make your website available in.", "translatepress-multilingual"); ?>
69
  <?php __("To add <strong>more then two languages</strong> and support for SEO Title, Description, Slug and more check out <a href=\"%s\" class=\"button button-primary\" target=\"_blank\" title=\"TranslatePress Pro\">TranslatePress PRO</a>", "translatepress-multilingual"); ?>
70
  <?php __("Not only you are getting extra features and premium support, you also help fund the future development of TranslatePress.", "translatepress-multilingual"); ?>
languages/translatepress-multilingual.pot CHANGED
@@ -17,7 +17,7 @@ msgstr ""
17
  msgid "Error! Duplicate Url slug values."
18
  msgstr ""
19
 
20
- #: class-navigation-based-on-language.php:85
21
  msgid "Limit this menu item to the following languages"
22
  msgstr ""
23
 
@@ -25,87 +25,91 @@ msgstr ""
25
  msgid "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 you submit the sitemap to Google."
26
  msgstr ""
27
 
28
- #: ../tp-add-on-automatic-language-detection/includes/class-ald-settings.php:37
29
  msgid "First by browser language, then IP address (recommended)"
30
  msgstr ""
31
 
32
- #: ../tp-add-on-automatic-language-detection/includes/class-ald-settings.php:38
33
  msgid "First by IP address, then browser language"
34
  msgstr ""
35
 
36
- #: ../tp-add-on-automatic-language-detection/includes/class-ald-settings.php:39
37
  msgid "Only by browser language"
38
  msgstr ""
39
 
40
- #: ../tp-add-on-automatic-language-detection/includes/class-ald-settings.php:40
41
  msgid "Only by IP address"
42
  msgstr ""
43
 
44
- #: ../tp-add-on-automatic-language-detection/includes/class-ald-settings.php:110
45
  msgid "<div class=\"warning\">WARNING. Cannot determine your language preference based on your current IP.<br>This is most likely because the website is on a local environment.</div>"
46
  msgstr ""
47
 
48
- #: ../tp-add-on-automatic-language-detection/partials/license-settings-page.php:4, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:4, ../tp-add-on-extra-languages/partials/license-settings-page.php:4, partials/license-settings-page.php:4, ../tp-add-on-seo-pack/partials/license-settings-page.php:4, ../translatepress/partials/addons-settings-page.php:3, ../translatepress/partials/main-settings-page.php:5, ../translatepress/partials/test-google-key-settings-page.php:10, ../translatepress/partials/trp-remove-duplicate-rows.php:3, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:4
49
  msgid "TranslatePress Settings"
50
  msgstr ""
51
 
52
- #: ../tp-add-on-automatic-language-detection/partials/license-settings-page.php:10, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:10, ../tp-add-on-extra-languages/partials/license-settings-page.php:10, partials/license-settings-page.php:10, ../tp-add-on-seo-pack/partials/license-settings-page.php:10, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:10
53
  msgid "License Key"
54
  msgstr ""
55
 
56
- #: ../tp-add-on-automatic-language-detection/partials/license-settings-page.php:15, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:15, ../tp-add-on-extra-languages/partials/license-settings-page.php:15, partials/license-settings-page.php:15, ../tp-add-on-seo-pack/partials/license-settings-page.php:15, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:15
57
  msgid "Enter your license key."
58
  msgstr ""
59
 
60
- #: ../tp-add-on-automatic-language-detection/partials/license-settings-page.php:22, ../tp-add-on-automatic-language-detection/partials/license-settings-page.php:31, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:22, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:31, ../tp-add-on-extra-languages/partials/license-settings-page.php:22, ../tp-add-on-extra-languages/partials/license-settings-page.php:31, partials/license-settings-page.php:22, partials/license-settings-page.php:31, ../tp-add-on-seo-pack/partials/license-settings-page.php:22, ../tp-add-on-seo-pack/partials/license-settings-page.php:31, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:22, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:31
61
  msgid "Activate License"
62
  msgstr ""
63
 
64
- #: ../tp-add-on-automatic-language-detection/partials/license-settings-page.php:28, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:28, ../tp-add-on-extra-languages/partials/license-settings-page.php:28, partials/license-settings-page.php:28, ../tp-add-on-seo-pack/partials/license-settings-page.php:28, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:28
65
  msgid "Deactivate License"
66
  msgstr ""
67
 
68
- #: ../tp-add-on-automatic-language-detection/partials/settings-option.php:2
69
  msgid "Method of language detection"
70
  msgstr ""
71
 
72
- #: ../tp-add-on-automatic-language-detection/partials/settings-option.php:14
73
  msgid "Select how the language should be detected for first time visitors.<br>The visitor's last displayed language will be remembered through cookies."
74
  msgstr ""
75
 
76
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:2
77
- msgid "Translation Languages"
78
  msgstr ""
79
 
80
  #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:7, ../translatepress/partials/main-settings-language-selector.php:7
81
  msgid "Language"
82
  msgstr ""
83
 
84
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:8, ../translatepress/partials/main-settings-language-selector.php:9
 
 
 
 
85
  msgid "Slug"
86
  msgstr ""
87
 
88
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:9
89
  msgid "Active"
90
  msgstr ""
91
 
92
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:38, ../translatepress/partials/main-settings-language-selector.php:40
93
  msgid "Are you sure you want to remove this language?"
94
  msgstr ""
95
 
96
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:38, ../translatepress/partials/main-settings-language-selector.php:40
97
  msgid "Remove"
98
  msgstr ""
99
 
100
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:46, ../translatepress/partials/main-settings-language-selector.php:48
101
  msgid "Choose..."
102
  msgstr ""
103
 
104
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:53, ../translatepress/partials/main-settings-language-selector.php:55
105
  msgid "Add"
106
  msgstr ""
107
 
108
- #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:56
109
  msgid "Select the languages you wish to make your website available in."
110
  msgstr ""
111
 
@@ -233,39 +237,39 @@ msgstr ""
233
  msgid "Translate Page"
234
  msgstr ""
235
 
236
- #: ../translatepress/includes/class-translation-manager.php:1143
237
  msgid "Security check"
238
  msgstr ""
239
 
240
- #: ../translatepress/includes/class-translation-render.php:161
241
  msgid "Description"
242
  msgstr ""
243
 
244
- #: ../translatepress/includes/class-translation-render.php:167
245
  msgid "OG Title"
246
  msgstr ""
247
 
248
- #: ../translatepress/includes/class-translation-render.php:173
249
  msgid "OG Site Name"
250
  msgstr ""
251
 
252
- #: ../translatepress/includes/class-translation-render.php:179
253
  msgid "OG Description"
254
  msgstr ""
255
 
256
- #: ../translatepress/includes/class-translation-render.php:185
257
  msgid "Twitter Title"
258
  msgstr ""
259
 
260
- #: ../translatepress/includes/class-translation-render.php:191
261
  msgid "Twitter Description"
262
  msgstr ""
263
 
264
- #: ../translatepress/includes/class-translation-render.php:197
265
  msgid "Post Slug"
266
  msgstr ""
267
 
268
- #: ../translatepress/includes/class-translation-render.php:201
269
  msgid "Page Title"
270
  msgstr ""
271
 
@@ -273,14 +277,6 @@ msgstr ""
273
  msgid "<strong>TranslatePress</strong> requires <strong><a href=\"http://php.net/manual/en/book.mbstring.php\">Multibyte String PHP library</a></strong>. Please contact your server administrator to install it on your server."
274
  msgstr ""
275
 
276
- #: ../translatepress/partials/main-settings-language-selector.php:2
277
- msgid "All Languages"
278
- msgstr ""
279
-
280
- #: ../translatepress/partials/main-settings-language-selector.php:8
281
- msgid "Code"
282
- msgstr ""
283
-
284
  #: ../translatepress/partials/main-settings-language-selector.php:59
285
  msgid "Select the language you wish to make your website available in."
286
  msgstr ""
17
  msgid "Error! Duplicate Url slug values."
18
  msgstr ""
19
 
20
+ #: ../tp-add-on-navigation-based-on-language/class-navigation-based-on-language.php:85
21
  msgid "Limit this menu item to the following languages"
22
  msgstr ""
23
 
25
  msgid "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 you submit the sitemap to Google."
26
  msgstr ""
27
 
28
+ #: includes/class-ald-settings.php:37
29
  msgid "First by browser language, then IP address (recommended)"
30
  msgstr ""
31
 
32
+ #: includes/class-ald-settings.php:38
33
  msgid "First by IP address, then browser language"
34
  msgstr ""
35
 
36
+ #: includes/class-ald-settings.php:39
37
  msgid "Only by browser language"
38
  msgstr ""
39
 
40
+ #: includes/class-ald-settings.php:40
41
  msgid "Only by IP address"
42
  msgstr ""
43
 
44
+ #: includes/class-ald-settings.php:110
45
  msgid "<div class=\"warning\">WARNING. Cannot determine your language preference based on your current IP.<br>This is most likely because the website is on a local environment.</div>"
46
  msgstr ""
47
 
48
+ #: partials/license-settings-page.php:4, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:4, ../tp-add-on-extra-languages/partials/license-settings-page.php:4, ../tp-add-on-navigation-based-on-language/partials/license-settings-page.php:4, ../tp-add-on-seo-pack/partials/license-settings-page.php:4, ../translatepress/partials/addons-settings-page.php:3, ../translatepress/partials/main-settings-page.php:5, ../translatepress/partials/test-google-key-settings-page.php:10, ../translatepress/partials/trp-remove-duplicate-rows.php:3, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:4
49
  msgid "TranslatePress Settings"
50
  msgstr ""
51
 
52
+ #: partials/license-settings-page.php:10, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:10, ../tp-add-on-extra-languages/partials/license-settings-page.php:10, ../tp-add-on-navigation-based-on-language/partials/license-settings-page.php:10, ../tp-add-on-seo-pack/partials/license-settings-page.php:10, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:10
53
  msgid "License Key"
54
  msgstr ""
55
 
56
+ #: partials/license-settings-page.php:15, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:15, ../tp-add-on-extra-languages/partials/license-settings-page.php:15, ../tp-add-on-navigation-based-on-language/partials/license-settings-page.php:15, ../tp-add-on-seo-pack/partials/license-settings-page.php:15, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:15
57
  msgid "Enter your license key."
58
  msgstr ""
59
 
60
+ #: partials/license-settings-page.php:22, partials/license-settings-page.php:31, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:22, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:31, ../tp-add-on-extra-languages/partials/license-settings-page.php:22, ../tp-add-on-extra-languages/partials/license-settings-page.php:31, ../tp-add-on-navigation-based-on-language/partials/license-settings-page.php:22, ../tp-add-on-navigation-based-on-language/partials/license-settings-page.php:31, ../tp-add-on-seo-pack/partials/license-settings-page.php:22, ../tp-add-on-seo-pack/partials/license-settings-page.php:31, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:22, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:31
61
  msgid "Activate License"
62
  msgstr ""
63
 
64
+ #: partials/license-settings-page.php:28, ../tp-add-on-browse-as-other-roles/partials/license-settings-page.php:28, ../tp-add-on-extra-languages/partials/license-settings-page.php:28, ../tp-add-on-navigation-based-on-language/partials/license-settings-page.php:28, ../tp-add-on-seo-pack/partials/license-settings-page.php:28, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:28
65
  msgid "Deactivate License"
66
  msgstr ""
67
 
68
+ #: partials/settings-option.php:2
69
  msgid "Method of language detection"
70
  msgstr ""
71
 
72
+ #: partials/settings-option.php:14
73
  msgid "Select how the language should be detected for first time visitors.<br>The visitor's last displayed language will be remembered through cookies."
74
  msgstr ""
75
 
76
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:2, ../translatepress/partials/main-settings-language-selector.php:2
77
+ msgid "All Languages"
78
  msgstr ""
79
 
80
  #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:7, ../translatepress/partials/main-settings-language-selector.php:7
81
  msgid "Language"
82
  msgstr ""
83
 
84
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:8, ../translatepress/partials/main-settings-language-selector.php:8
85
+ msgid "Code"
86
+ msgstr ""
87
+
88
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:9, ../translatepress/partials/main-settings-language-selector.php:9
89
  msgid "Slug"
90
  msgstr ""
91
 
92
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:10
93
  msgid "Active"
94
  msgstr ""
95
 
96
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:43, ../translatepress/partials/main-settings-language-selector.php:40
97
  msgid "Are you sure you want to remove this language?"
98
  msgstr ""
99
 
100
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:43, ../translatepress/partials/main-settings-language-selector.php:40
101
  msgid "Remove"
102
  msgstr ""
103
 
104
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:51, ../translatepress/partials/main-settings-language-selector.php:48
105
  msgid "Choose..."
106
  msgstr ""
107
 
108
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:58, ../translatepress/partials/main-settings-language-selector.php:55
109
  msgid "Add"
110
  msgstr ""
111
 
112
+ #: ../tp-add-on-extra-languages/partials/language-selector-pro.php:61
113
  msgid "Select the languages you wish to make your website available in."
114
  msgstr ""
115
 
237
  msgid "Translate Page"
238
  msgstr ""
239
 
240
+ #: ../translatepress/includes/class-translation-manager.php:1197
241
  msgid "Security check"
242
  msgstr ""
243
 
244
+ #: ../translatepress/includes/class-translation-render.php:164
245
  msgid "Description"
246
  msgstr ""
247
 
248
+ #: ../translatepress/includes/class-translation-render.php:170
249
  msgid "OG Title"
250
  msgstr ""
251
 
252
+ #: ../translatepress/includes/class-translation-render.php:176
253
  msgid "OG Site Name"
254
  msgstr ""
255
 
256
+ #: ../translatepress/includes/class-translation-render.php:182
257
  msgid "OG Description"
258
  msgstr ""
259
 
260
+ #: ../translatepress/includes/class-translation-render.php:188
261
  msgid "Twitter Title"
262
  msgstr ""
263
 
264
+ #: ../translatepress/includes/class-translation-render.php:194
265
  msgid "Twitter Description"
266
  msgstr ""
267
 
268
+ #: ../translatepress/includes/class-translation-render.php:200
269
  msgid "Post Slug"
270
  msgstr ""
271
 
272
+ #: ../translatepress/includes/class-translation-render.php:204
273
  msgid "Page Title"
274
  msgstr ""
275
 
277
  msgid "<strong>TranslatePress</strong> requires <strong><a href=\"http://php.net/manual/en/book.mbstring.php\">Multibyte String PHP library</a></strong>. Please contact your server administrator to install it on your server."
278
  msgstr ""
279
 
 
 
 
 
 
 
 
 
280
  #: ../translatepress/partials/main-settings-language-selector.php:59
281
  msgid "Select the language you wish to make your website available in."
282
  msgstr ""
readme.txt CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.cozmoslabs.com/
4
  Tags: translate, translation, multilingual, automatic translation, bilingual, front-end translation, google translate, language
5
  Requires at least: 3.1.0
6
  Tested up to: 4.9.8
7
- Stable tag: 1.3.7
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -124,6 +124,18 @@ For more information please check out [TranslatePress - Multilingual plugin docu
124
  6. Menu Language Switcher
125
 
126
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
 
 
127
  = 1.3.7 =
128
  * Fixed an issue with Woocommerce and redirects when the default language is not English
129
  * Speed improvements
4
  Tags: translate, translation, multilingual, automatic translation, bilingual, front-end translation, google translate, language
5
  Requires at least: 3.1.0
6
  Tested up to: 4.9.8
7
+ Stable tag: 1.3.8
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
124
  6. Menu Language Switcher
125
 
126
  == Changelog ==
127
+ = 1.3.8 =
128
+ * Speed improvements
129
+ * Remove notices from Editor when we don't have translation languages
130
+ * Fixed notices with referrer in translator machine
131
+ * Fixed issues with urls in other languages
132
+ * Fix issue of nested gettext resulting in unwanted characters
133
+ * Strip gettext tags from urls run through sanitize_title and esc_url
134
+ * Set caching calls non-persistent. Doesn't work with object caching otherwise
135
+ * Set lang attribute in html tag all the time including when on default language
136
+ * Refactored the way we translate json
137
+ * Fixed issue with Woocommerce ajax calls
138
+
139
  = 1.3.7 =
140
  * Fixed an issue with Woocommerce and redirects when the default language is not English
141
  * Speed improvements