TranslatePress – Translate Multilingual sites - Version 1.1.8

Version Description

  • Fixed bug with Strings List appearing also in Dynamic Strings List. Also fixed bug with duplicate dynamic strings not having a pencil icon because of missing jquery_object.
  • Fixed Woocommerce session storage compatibility
  • Fixed language floater not opening on iPhone.
  • Fixed issue with normal text nodes that were inside an element that had an atribute with gettext and did not get translated
  • Replaced _ with - in hreflang and filter it
  • Make force language to custom links set to yes as a default
  • Remove intensive functions from inside two loops so they only happen once we detect something in js
  • Decode html characters in mutation observed strings and removed stripslashes from trp-ajax.php to fix some strings added with js not being translated
Download this release

Release Info

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

Code changes from version 1.1.7 to 1.1.8

assets/css/trp-preview-iframe-style.css CHANGED
@@ -55,10 +55,18 @@ span.trp-edit-translation svg {
55
  background: #00ba3f !important;
56
  }
57
 
 
 
 
 
58
  *[data-trpgettextoriginal] span.trp-edit-translation:hover, .trpgettext-wrap span.trp-edit-translation:hover{
59
  background: #00ce44 !important;
60
  }
61
 
 
 
 
 
62
  translate-press{
63
  pointer-events: all;
64
  }
55
  background: #00ba3f !important;
56
  }
57
 
58
+ *[data-trpgettextoriginal] *[data-trp-translate-id] span.trp-edit-translation{
59
+ background: #0085ba!important;
60
+ }
61
+
62
  *[data-trpgettextoriginal] span.trp-edit-translation:hover, .trpgettext-wrap span.trp-edit-translation:hover{
63
  background: #00ce44 !important;
64
  }
65
 
66
+ *[data-trpgettextoriginal] *[data-trp-translate-id] span.trp-edit-translation:hover{
67
+ background: #008ec2!important;
68
+ }
69
+
70
  translate-press{
71
  pointer-events: all;
72
  }
assets/js/trp-editor-script.js CHANGED
@@ -30,7 +30,7 @@ function TRP_Editor(){
30
  */
31
  this.change_language = function( select ){
32
  var language = select.value;
33
- var link = jQuery( '#trp-preview-iframe' ).contents().find('link[hreflang=' + language + ']').first().attr('href');
34
  if ( link != undefined ){
35
 
36
  /* pass on trp-view-as parameters to all links that also have preview parameter */
@@ -590,8 +590,6 @@ function TRP_Dictionary( language_code ){
590
  strings_object[i].set = true;
591
  _this.strings[s].set_string( strings_object[i] );
592
  break;
593
- }else{
594
- strings_object[i].set = false;
595
  }
596
  }
597
  }
@@ -799,7 +797,8 @@ function TRP_String( language, array_index ){
799
  /**
800
  * Show the pencil and border the viewable string in Preview window.
801
  */
802
- this.highlight = function (){
 
803
  if ( ! trpEditor.edit_translation_button ){
804
  _this.jquery_object.prepend( '<span class="trp-edit-translation"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M13.89 3.39l2.71 2.72c.46.46.42 1.24.03 1.64l-8.01 8.02-5.56 1.16 1.16-5.58s7.6-7.63 7.99-8.03c.39-.39 1.22-.39 1.68.07zm-2.73 2.79l-5.59 5.61 1.11 1.11 5.54-5.65zm-2.97 8.23l5.58-5.6-1.07-1.08-5.59 5.6z"></path></svg></span>' );
805
  trpEditor.edit_translation_button = _this.jquery_object.children('.trp-edit-translation');
@@ -1360,6 +1359,8 @@ jQuery( function(){
1360
  }
1361
  });
1362
 
 
 
1363
  });
1364
 
1365
 
30
  */
31
  this.change_language = function( select ){
32
  var language = select.value;
33
+ var link = jQuery( '#trp-preview-iframe' ).contents().find('link[hreflang=' + language.replace("_", "-") + ']').first().attr('href');
34
  if ( link != undefined ){
35
 
36
  /* pass on trp-view-as parameters to all links that also have preview parameter */
590
  strings_object[i].set = true;
591
  _this.strings[s].set_string( strings_object[i] );
592
  break;
 
 
593
  }
594
  }
595
  }
797
  /**
798
  * Show the pencil and border the viewable string in Preview window.
799
  */
800
+ this.highlight = function (e){
801
+ e.stopPropagation();
802
  if ( ! trpEditor.edit_translation_button ){
803
  _this.jquery_object.prepend( '<span class="trp-edit-translation"><svg xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path d="M13.89 3.39l2.71 2.72c.46.46.42 1.24.03 1.64l-8.01 8.02-5.56 1.16 1.16-5.58s7.6-7.63 7.99-8.03c.39-.39 1.22-.39 1.68.07zm-2.73 2.79l-5.59 5.61 1.11 1.11 5.54-5.65zm-2.97 8.23l5.58-5.6-1.07-1.08-5.59 5.6z"></path></svg></span>' );
804
  trpEditor.edit_translation_button = _this.jquery_object.children('.trp-edit-translation');
1359
  }
1360
  });
1361
 
1362
+ // WooCommerce compatibility. Sometimes wc_fragments were cached in the editor.
1363
+ window.sessionStorage.removeItem('wc_fragments');
1364
  });
1365
 
1366
 
assets/js/trp-translate-dom-changes.js CHANGED
@@ -47,27 +47,51 @@ function TRP_Translator(){
47
  });
48
  };
49
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
50
  /**
51
  * Replace original strings with translations if found.
52
  */
53
  this.update_strings = function( response, strings_to_query ) {
54
  if ( response != null && response[language_to_query] != null ){
 
55
  for ( var j in strings_to_query ) {
56
  var queried_string = strings_to_query[j];
57
  var translation_found = false;
58
  var initial_value = queried_string.original;
59
  for( var i in response[language_to_query] ) {
 
 
 
60
  var response_string = response[language_to_query][i];
61
  if (response_string.original.trim() == queried_string.original.trim()) {
62
- response[language_to_query][i].jquery_object = jQuery( queried_string.node ).parent( 'translate-press' );
 
 
 
 
 
63
  if ( typeof parent.trpEditor !== 'undefined' ) {
64
- response[language_to_query][i].jquery_object.attr('data-trp-translate-id', response[language_to_query][i].id);
65
- response[language_to_query][i].jquery_object.attr('data-trp-node-type', 'Dynamic Added Strings');
66
  }
 
67
  if (response_string.translated != '' && language_to_query == current_language ) {
68
  var text_to_set = initial_value.replace(initial_value.trim(), response_string.translated);
69
  _this.pause_observer();
70
- queried_string.node.textContent = text_to_set;
71
  _this.unpause_observer();
72
  translation_found = true;
73
  break;
@@ -78,10 +102,11 @@ function TRP_Translator(){
78
  if ( ! translation_found ){
79
  queried_string.node.textContent = initial_value;
80
  }
81
- if ( typeof parent.trpEditor !== 'undefined' ) {
82
- parent.trpEditor.populate_strings( response );
83
- parent.trpEditor.trp_lister.reload_list();
84
- }
 
85
  }
86
  }else{
87
  for ( var j in strings_to_query ) {
47
  });
48
  };
49
 
50
+ /**
51
+ * Return given text converted to html.
52
+ *
53
+ * Useful for decoding special characters into displayable form.
54
+ *
55
+ * @param html
56
+ * @returns {*}
57
+ */
58
+ this.decode_html = function( html ) {
59
+ var txt = document.createElement( "textarea" );
60
+ txt.innerHTML = html;
61
+ return txt.value;
62
+ }
63
+
64
  /**
65
  * Replace original strings with translations if found.
66
  */
67
  this.update_strings = function( response, strings_to_query ) {
68
  if ( response != null && response[language_to_query] != null ){
69
+ var strings_to_store = {};
70
  for ( var j in strings_to_query ) {
71
  var queried_string = strings_to_query[j];
72
  var translation_found = false;
73
  var initial_value = queried_string.original;
74
  for( var i in response[language_to_query] ) {
75
+ if ( typeof strings_to_store[language_to_query] == 'undefined' ){
76
+ strings_to_store[language_to_query] = {};
77
+ }
78
  var response_string = response[language_to_query][i];
79
  if (response_string.original.trim() == queried_string.original.trim()) {
80
+ strings_to_store[language_to_query][j] = {};
81
+ strings_to_store[language_to_query][j].id = response[language_to_query][i].id;
82
+ strings_to_store[language_to_query][j].original = response[language_to_query][i].original;
83
+ strings_to_store[language_to_query][j].translated = response[language_to_query][i].translated;
84
+ strings_to_store[language_to_query][j].status = response[language_to_query][i].status;
85
+ strings_to_store[language_to_query][j].jquery_object = jQuery( queried_string.node ).parent( 'translate-press' );
86
  if ( typeof parent.trpEditor !== 'undefined' ) {
87
+ strings_to_store[language_to_query][j].jquery_object.attr('data-trp-translate-id', response[language_to_query][i].id);
88
+ strings_to_store[language_to_query][j].jquery_object.attr('data-trp-node-type', 'Dynamic Added Strings');
89
  }
90
+
91
  if (response_string.translated != '' && language_to_query == current_language ) {
92
  var text_to_set = initial_value.replace(initial_value.trim(), response_string.translated);
93
  _this.pause_observer();
94
+ queried_string.node.textContent = _this.decode_html(text_to_set);
95
  _this.unpause_observer();
96
  translation_found = true;
97
  break;
102
  if ( ! translation_found ){
103
  queried_string.node.textContent = initial_value;
104
  }
105
+ }
106
+ // this should always be outside the for loop
107
+ if ( typeof parent.trpEditor !== 'undefined' ) {
108
+ parent.trpEditor.populate_strings( strings_to_store );
109
+ parent.trpEditor.trp_lister.reload_list();
110
  }
111
  }else{
112
  for ( var j in strings_to_query ) {
class-translate-press.php CHANGED
@@ -39,7 +39,7 @@ class TRP_Translate_Press{
39
  define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
40
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
42
- define( 'TRP_PLUGIN_VERSION', '1.1.7' );
43
 
44
  $this->load_dependencies();
45
  $this->initialize_components();
39
  define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
40
  define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
  define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
42
+ define( 'TRP_PLUGIN_VERSION', '1.1.8' );
43
 
44
  $this->load_dependencies();
45
  $this->initialize_components();
includes/class-language-switcher.php CHANGED
@@ -198,7 +198,7 @@ class TRP_Language_Switcher{
198
  }
199
 
200
  ?>
201
- <div id="trp-floater-ls" data-no-translation class="<?php echo $floater_class; ?>" <?php echo ( isset( $_GET['trp-edit-translation'] ) && $_GET['trp-edit-translation'] == 'preview' ) ? 'data-trp-unpreviewable="trp-unpreviewable"' : '' ?>>
202
  <div id="trp-floater-ls-current-language" class="<?php echo $floater_flags_class ?>">
203
  <a href="javascript:void(0)" class="trp-floater-ls-disabled-language" onclick="void(0)"><?php echo ( $floater_settings['flags'] ? $this->add_flag( $current_language['code'], $current_language['name'] ) : '' ); echo $current_language_label; ?></a>
204
  </div>
198
  }
199
 
200
  ?>
201
+ <div id="trp-floater-ls" onclick="" data-no-translation class="<?php echo $floater_class; ?>" <?php echo ( isset( $_GET['trp-edit-translation'] ) && $_GET['trp-edit-translation'] == 'preview' ) ? 'data-trp-unpreviewable="trp-unpreviewable"' : '' ?>>
202
  <div id="trp-floater-ls-current-language" class="<?php echo $floater_flags_class ?>">
203
  <a href="javascript:void(0)" class="trp-floater-ls-disabled-language" onclick="void(0)"><?php echo ( $floater_settings['flags'] ? $this->add_flag( $current_language['code'], $current_language['name'] ) : '' ); echo $current_language_label; ?></a>
204
  </div>
includes/class-settings.php CHANGED
@@ -255,7 +255,7 @@ class TRP_Settings{
255
  'publish-languages' => array( $default, '' ),
256
  'native_or_english_name' => 'english_name',
257
  'add-subdirectory-to-default-language' => 'no',
258
- 'force-language-to-custom-links' => 'no',
259
  'g-translate' => 'no',
260
  'trp-ls-floater' => 'yes',
261
  'shortcode-options' => 'flags-full-names',
255
  'publish-languages' => array( $default, '' ),
256
  'native_or_english_name' => 'english_name',
257
  'add-subdirectory-to-default-language' => 'no',
258
+ 'force-language-to-custom-links' => 'yes',
259
  'g-translate' => 'no',
260
  'trp-ls-floater' => 'yes',
261
  'shortcode-options' => 'flags-full-names',
includes/class-translation-render.php CHANGED
@@ -326,7 +326,7 @@ class TRP_Translation_Render{
326
  /* Parent node has no other children and no other innertext besides the current node */
327
  if( count( $row->parent()->children ) == 1 && $row->parent()->innertext == $row->outertext ){
328
  $row->outertext = $row->innertext();
329
- $row->parent()->setAttribute('data-no-translation', '');
330
  // we are in the editor
331
  if (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview') {
332
  //move up the data-trpgettextoriginal attribute
@@ -359,7 +359,8 @@ class TRP_Translation_Render{
359
  $nfv_row->outertext = $nfv_row->innertext();
360
  $row->setAttribute($attr_name, $node_from_value->save() );
361
  if( !$row->has_child() ){// if the node doesn't have children set the needed attributes, else it means that there are other nodes inside so probably they are the ones displayed
362
- $row->setAttribute('data-no-translation', '');
 
363
  // we are in the editor
364
  if (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview') {
365
  $original_gettext_translation_id = $nfv_row->getAttribute('data-trpgettextoriginal');
326
  /* Parent node has no other children and no other innertext besides the current node */
327
  if( count( $row->parent()->children ) == 1 && $row->parent()->innertext == $row->outertext ){
328
  $row->outertext = $row->innertext();
329
+ $row->parent()->setAttribute($no_translate_attribute, '');
330
  // we are in the editor
331
  if (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview') {
332
  //move up the data-trpgettextoriginal attribute
359
  $nfv_row->outertext = $nfv_row->innertext();
360
  $row->setAttribute($attr_name, $node_from_value->save() );
361
  if( !$row->has_child() ){// if the node doesn't have children set the needed attributes, else it means that there are other nodes inside so probably they are the ones displayed
362
+ if( empty( $row->innertext ) )// add the no translate attribute only if it does not contain any kind of text
363
+ $row->setAttribute($no_translate_attribute, '');
364
  // we are in the editor
365
  if (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview') {
366
  $original_gettext_translation_id = $nfv_row->getAttribute('data-trpgettextoriginal');
includes/class-url-converter.php CHANGED
@@ -132,7 +132,10 @@ class TRP_Url_Converter {
132
  }
133
 
134
  foreach ( $languages as $language ) {
135
- echo '<link rel="alternate" hreflang="' . $language . '" href="' . $this->get_url_for_language( $language ) . '"/>';
 
 
 
136
  }
137
  }
138
 
132
  }
133
 
134
  foreach ( $languages as $language ) {
135
+ // hreflang should have - instead of _ . For example: en-EN, not en_EN like the locale
136
+ $hreflang = str_replace('_', '-', $language);
137
+ $hreflang = apply_filters('trp_hreflang', $hreflang, $language);
138
+ echo '<link rel="alternate" hreflang="' . $hreflang . '" href="' . $this->get_url_for_language( $language ) . '"/>';
139
  }
140
  }
141
 
includes/trp-ajax.php CHANGED
@@ -41,7 +41,7 @@ class TRP_Ajax{
41
  * @return array Sanitized array of strings.
42
  */
43
  protected function sanitize_strings( $posted_strings){
44
- $strings = json_decode(stripslashes( $posted_strings ));
45
  $original_array = array();
46
  if ( is_array( $strings ) ) {
47
  foreach ($strings as $key => $string) {
41
  * @return array Sanitized array of strings.
42
  */
43
  protected function sanitize_strings( $posted_strings){
44
+ $strings = json_decode( $posted_strings );
45
  $original_array = array();
46
  if ( is_array( $strings ) ) {
47
  foreach ($strings as $key => $string) {
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.1.7
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  License: GPL2
3
  Plugin Name: TranslatePress - Multilingual
4
  Plugin URI: https://translatepress.com/
5
  Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
6
+ Version: 1.1.8
7
  Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
  Author URI: https://cozmoslabs.com/
9
  License: GPL2
languages/translatepress-multilingual.pot CHANGED
@@ -21,23 +21,23 @@ msgstr ""
21
  msgid "Limit this menu item to the following languages"
22
  msgstr ""
23
 
24
- #: ../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:17, partials/license-settings-page.php:4
25
  msgid "TranslatePress Settings"
26
  msgstr ""
27
 
28
- #: ../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, partials/license-settings-page.php:10
29
  msgid "License Key"
30
  msgstr ""
31
 
32
- #: ../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, partials/license-settings-page.php:15
33
  msgid "Enter your license key."
34
  msgstr ""
35
 
36
- #: ../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, partials/license-settings-page.php:22, partials/license-settings-page.php:31
37
  msgid "Activate License"
38
  msgstr ""
39
 
40
- #: ../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, partials/license-settings-page.php:28
41
  msgid "Deactivate License"
42
  msgstr ""
43
 
@@ -409,14 +409,14 @@ msgstr ""
409
  msgid "Learn More"
410
  msgstr ""
411
 
412
- #: includes/class-translator-accounts.php:119
413
  msgid " TranslatePress Settings"
414
  msgstr ""
415
 
416
- #: includes/class-translator-accounts.php:123, includes/class-translator-accounts.php:124
417
  msgid "Translator"
418
  msgstr ""
419
 
420
- #: includes/class-translator-accounts.php:128
421
  msgid "Allow this user to translate the website."
422
  msgstr ""
21
  msgid "Limit this menu item to the following languages"
22
  msgstr ""
23
 
24
+ #: ../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, 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:17, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:4
25
  msgid "TranslatePress Settings"
26
  msgstr ""
27
 
28
+ #: ../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, partials/license-settings-page.php:10, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:10
29
  msgid "License Key"
30
  msgstr ""
31
 
32
+ #: ../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, partials/license-settings-page.php:15, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:15
33
  msgid "Enter your license key."
34
  msgstr ""
35
 
36
+ #: ../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, partials/license-settings-page.php:22, 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
37
  msgid "Activate License"
38
  msgstr ""
39
 
40
+ #: ../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, partials/license-settings-page.php:28, ../trp-add-on-translator-accounts-add-on/partials/license-settings-page.php:28
41
  msgid "Deactivate License"
42
  msgstr ""
43
 
409
  msgid "Learn More"
410
  msgstr ""
411
 
412
+ #: ../trp-add-on-translator-accounts-add-on/includes/class-translator-accounts.php:119
413
  msgid " TranslatePress Settings"
414
  msgstr ""
415
 
416
+ #: ../trp-add-on-translator-accounts-add-on/includes/class-translator-accounts.php:123, ../trp-add-on-translator-accounts-add-on/includes/class-translator-accounts.php:124
417
  msgid "Translator"
418
  msgstr ""
419
 
420
+ #: ../trp-add-on-translator-accounts-add-on/includes/class-translator-accounts.php:128
421
  msgid "Allow this user to translate the website."
422
  msgstr ""
readme.txt CHANGED
@@ -1,10 +1,10 @@
1
  === TranslatePress - Translate Multilingual sites ===
2
  Contributors: cozmoslabs, razvan.mo, madalin.ungureanu, cristophor
3
  Donate link: https://www.cozmoslabs.com/
4
- Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate, bilingual
5
  Requires at least: 3.1.0
6
  Tested up to: 4.9.4
7
- Stable tag: 1.1.7
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
@@ -16,7 +16,7 @@ Easily translate your entire site directly from the front-end and go multilingua
16
 
17
  The interface allows you to easily translate the entire page at once, including output from shortcodes, forms and page builders. It also works out of the box with WooCommerce.
18
 
19
- Built the WordPress way, TranslatePress - Multilingual is a GPL and self hosted translation plugin, meaning you'll own all your translations, forever.
20
 
21
  = Multilingual & Translation Features =
22
 
@@ -36,7 +36,7 @@ Note: this plugin uses the Google Translation API to translate the strings on yo
36
 
37
  Users with administrator rights have access to the following translate settings:
38
 
39
- * select default language of the website and one translation language.
40
  * choose whether language switcher should display languages in their native names or English name
41
  * force custom links to open in current language
42
  * enable or disable url subdirectory for the default language
@@ -91,9 +91,9 @@ All the translation are stored locally in your server's database.
91
 
92
  TranslatePress - Multilingual works out of the box with WooCommerce, custom post types, complex themes and site builders, so you'll be able to translate any type of content.
93
 
94
- = How is it different from other multilingual & translation plugins? =
95
 
96
- TranslatePress is easier to use and more intuitive altogether. No more switching between the editor, string translation interfaces or badly translated plugins. You can now translate the full page content directly from the front-end.
97
 
98
  = How do I start to translate my site? =
99
 
@@ -113,6 +113,16 @@ For more information please check out [TranslatePress documentation](https://tra
113
  6. Menu Language Switcher
114
 
115
  == Changelog ==
 
 
 
 
 
 
 
 
 
 
116
  = 1.1.7 =
117
  * Compatibility fix with Elementor Page Builder
118
  * Added translation .pot file
1
  === TranslatePress - Translate Multilingual sites ===
2
  Contributors: cozmoslabs, razvan.mo, madalin.ungureanu, cristophor
3
  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.4
7
+ Stable tag: 1.1.8
8
  License: GPLv2 or later
9
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
 
16
 
17
  The interface allows you to easily translate the entire page at once, including output from shortcodes, forms and page builders. It also works out of the box with WooCommerce.
18
 
19
+ Built the WordPress way, TranslatePress - Multilingual is a GPL and self hosted translation plugin, meaning you'll own all your translations, forever. It's the fastest way to create a bilingual or multilingual site.
20
 
21
  = Multilingual & Translation Features =
22
 
36
 
37
  Users with administrator rights have access to the following translate settings:
38
 
39
+ * select default language of the website and one translation language, for bilingual sites
40
  * choose whether language switcher should display languages in their native names or English name
41
  * force custom links to open in current language
42
  * enable or disable url subdirectory for the default language
91
 
92
  TranslatePress - Multilingual works out of the box with WooCommerce, custom post types, complex themes and site builders, so you'll be able to translate any type of content.
93
 
94
+ = How is it different from other multilingual & translation plugins like WPML or Polylang? =
95
 
96
+ TranslatePress is easier to use and more intuitive altogether. No more switching between the editor, string translation interfaces or badly translated plugins. You can now translate the full page content directly from the front-end. This makes TranslatePress a great alternative to plugins like Polylang and WPML.
97
 
98
  = How do I start to translate my site? =
99
 
113
  6. Menu Language Switcher
114
 
115
  == Changelog ==
116
+ = 1.1.8 =
117
+ * Fixed bug with Strings List appearing also in Dynamic Strings List. Also fixed bug with duplicate dynamic strings not having a pencil icon because of missing jquery_object.
118
+ * Fixed Woocommerce session storage compatibility
119
+ * Fixed language floater not opening on iPhone.
120
+ * Fixed issue with normal text nodes that were inside an element that had an atribute with gettext and did not get translated
121
+ * Replaced _ with - in hreflang and filter it
122
+ * Make force language to custom links set to yes as a default
123
+ * Remove intensive functions from inside two loops so they only happen once we detect something in js
124
+ * Decode html characters in mutation observed strings and removed stripslashes from trp-ajax.php to fix some strings added with js not being translated
125
+
126
  = 1.1.7 =
127
  * Compatibility fix with Elementor Page Builder
128
  * Added translation .pot file