Version Description
- Added support for translating Contact Form 7 alert messages
- Fixed issue with some strings containing special characters not being translated (i.e. "")
- Fixed bug with switching languages in Editor when viewing as Logged out
- Fixed issue with broken homepage links in some themes
- Added support for RTL languages in translation editor
Download this release
Release Info
Developer | razvan.mo |
Plugin | TranslatePress – Translate Multilingual sites |
Version | 1.1.6 |
Comparing to | |
See all releases |
Code changes from version 1.1.5 to 1.1.6
- assets/css/trp-editor-style.css +6 -1
- assets/js/trp-editor-script.js +49 -38
- assets/js/trp-translate-dom-changes.js +37 -16
- class-translate-press.php +1 -1
- includes/class-query.php +9 -11
- includes/class-translation-render.php +24 -8
- includes/class-url-converter.php +0 -10
- index.php +1 -1
- partials/main-settings-page.php +1 -1
- readme.txt +16 -8
assets/css/trp-editor-style.css
CHANGED
@@ -125,6 +125,11 @@ body{
|
|
125 |
height: 100%;
|
126 |
}
|
127 |
|
|
|
|
|
|
|
|
|
|
|
128 |
iframe#trp-preview-iframe {
|
129 |
position: absolute;
|
130 |
height: 100%;
|
@@ -219,7 +224,7 @@ span.select2-container{
|
|
219 |
|
220 |
.trp-language-text{
|
221 |
padding-right: 9px;
|
222 |
-
padding-bottom:
|
223 |
}
|
224 |
|
225 |
.trp-language-text textarea{
|
125 |
height: 100%;
|
126 |
}
|
127 |
|
128 |
+
html[dir="rtl"] #trp-preview{
|
129 |
+
left: 350px !important;
|
130 |
+
right: 0px !important;
|
131 |
+
}
|
132 |
+
|
133 |
iframe#trp-preview-iframe {
|
134 |
position: absolute;
|
135 |
height: 100%;
|
224 |
|
225 |
.trp-language-text{
|
226 |
padding-right: 9px;
|
227 |
+
padding-bottom: 15px;
|
228 |
}
|
229 |
|
230 |
.trp-language-text textarea{
|
assets/js/trp-editor-script.js
CHANGED
@@ -40,7 +40,7 @@ function TRP_Editor(){
|
|
40 |
link = _this.update_query_string('trp-view-as', trp_view_as, link );
|
41 |
|
42 |
var trp_view_as_nonce = currentUrl.searchParams.get("trp-view-as-nonce");
|
43 |
-
link = _this.update_query_string('trp-view-as-nonce',
|
44 |
}
|
45 |
link = _this.update_query_string('trp-edit-translation', 'true', link );
|
46 |
window.location.href = link;
|
@@ -185,6 +185,9 @@ function TRP_Editor(){
|
|
185 |
* @param response The Ajax response message.
|
186 |
*/
|
187 |
this.populate_strings = function( response ){
|
|
|
|
|
|
|
188 |
for ( var key in response ) {
|
189 |
if ( response.hasOwnProperty( key ) ) {
|
190 |
if ( response[key]['default-language'] == true ){
|
@@ -576,10 +579,19 @@ function TRP_Dictionary( language_code ){
|
|
576 |
this.set_strings = function( strings_object ){
|
577 |
for ( var s in _this.strings ){
|
578 |
for ( var i in strings_object ){
|
579 |
-
if ( _this.strings[s].id == strings_object[i].id || ( ( _this.strings[s].original ) && _this.strings[s].original.trim() == strings_object[i].original.trim() ) )
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
580 |
strings_object[i].set = true;
|
581 |
_this.strings[s].set_string( strings_object[i] );
|
582 |
break;
|
|
|
|
|
583 |
}
|
584 |
}
|
585 |
}
|
@@ -681,7 +693,7 @@ function TRP_String( language, array_index ){
|
|
681 |
this.status = null;
|
682 |
this.node_type = 'Dynamic Added Strings';
|
683 |
this.node_description = '';
|
684 |
-
|
685 |
this.language = language;
|
686 |
this.index = array_index;
|
687 |
this.slug = false;
|
@@ -728,9 +740,9 @@ function TRP_String( language, array_index ){
|
|
728 |
_this.id = ( new_settings.hasOwnProperty ( 'id' ) ) ? new_settings.id : _this.id;
|
729 |
_this.original = ( new_settings.hasOwnProperty ( 'original' ) ) ? new_settings.original : _this.original;
|
730 |
_this.original = decode_html( _this.original );
|
731 |
-
jquery_object = ( new_settings.hasOwnProperty ( 'jquery_object' ) ) ? new_settings.jquery_object : jquery_object;
|
732 |
|
733 |
-
if ( jquery_object ){
|
734 |
if ( trp_language == trp_on_screen_language ) {
|
735 |
var text_to_set = null;
|
736 |
if (new_settings.hasOwnProperty('translated') && new_settings.translated != _this.translated) {
|
@@ -741,23 +753,22 @@ function TRP_String( language, array_index ){
|
|
741 |
}
|
742 |
_this.wrap_special_html_elements();
|
743 |
if (text_to_set) {
|
744 |
-
var initial_value = jquery_object.text();
|
745 |
text_to_set = initial_value.replace(initial_value.trim(), text_to_set);
|
746 |
-
if ( jquery_object.attr( 'data-trp-attr' ) ){
|
747 |
-
jquery_object.children().attr( jquery_object.attr('data-trp-attr'), text_to_set );
|
748 |
-
}else if( jquery_object.attr( 'data-trp-button' ) ){
|
749 |
-
jquery_object.children('button').text(text_to_set);
|
750 |
}else {
|
751 |
-
jquery_object.html( text_to_set );
|
752 |
}
|
753 |
}
|
754 |
}
|
755 |
|
756 |
-
jquery_object.on( 'mouseenter', '', _this.highlight );
|
757 |
-
jquery_object.on( 'mouseleave', '', _this.unhighlight );
|
758 |
}
|
759 |
|
760 |
-
|
761 |
_this.status = ( new_settings.hasOwnProperty( 'status' ) ) ? new_settings.status : _this.status;
|
762 |
_this.translated = ( new_settings.hasOwnProperty( 'translated' ) ) ? decode_html ( new_settings.translated ) : _this.translated;
|
763 |
};
|
@@ -766,20 +777,20 @@ function TRP_String( language, array_index ){
|
|
766 |
* Wrap buttons and placeholders so that we can display the pencil button and also replace with translation.
|
767 |
*/
|
768 |
this.wrap_special_html_elements = function(){
|
769 |
-
if( jquery_object.is('button') ){
|
770 |
-
jquery_object.unwrap('trp-highlight');
|
771 |
-
jquery_object.wrap('<trp-highlight data-trp-button="true"></trp-highlight>');
|
772 |
-
jquery_object = jquery_object.parent();
|
773 |
}
|
774 |
-
else if ( jquery_object.attr( 'type' ) == 'submit' || jquery_object.attr( 'type' ) == 'button' ) {
|
775 |
-
jquery_object.unwrap('trp-highlight');
|
776 |
-
jquery_object.wrap('<trp-highlight data-trp-attr="value"></trp-highlight>');
|
777 |
-
jquery_object = jquery_object.parent();
|
778 |
}
|
779 |
-
else if ( ( jquery_object.attr( 'type' ) == 'text' || jquery_object.attr( 'type' ) == 'search' ) && ( typeof jquery_object.attr( 'placeholder' ) != 'undefined' ) ) {
|
780 |
-
jquery_object.unwrap('trp-highlight');
|
781 |
-
jquery_object.wrap('<trp-highlight data-trp-attr="placeholder"></trp-highlight>');
|
782 |
-
jquery_object = jquery_object.parent();
|
783 |
}
|
784 |
};
|
785 |
|
@@ -788,15 +799,15 @@ function TRP_String( language, array_index ){
|
|
788 |
*/
|
789 |
this.highlight = function (){
|
790 |
if ( ! trpEditor.edit_translation_button ){
|
791 |
-
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>' );
|
792 |
-
trpEditor.edit_translation_button = jquery_object.children('.trp-edit-translation');
|
793 |
}else{
|
794 |
_this.wrap_special_html_elements();
|
795 |
trpEditor.maybe_overflow_fix(trpEditor.edit_translation_button);
|
796 |
-
jquery_object.prepend(trpEditor.edit_translation_button);
|
797 |
}
|
798 |
|
799 |
-
trpEditor.make_sure_pencil_icon_is_inside_view( jquery_object[0] );
|
800 |
|
801 |
trpEditor.edit_translation_button.off( 'click' );
|
802 |
trpEditor.edit_translation_button.on( 'click', function(e){
|
@@ -844,19 +855,19 @@ function TRP_String( language, array_index ){
|
|
844 |
* @param raw_string
|
845 |
*/
|
846 |
this.set_raw_string = function( raw_string ){
|
847 |
-
jquery_object = jQuery( raw_string );
|
848 |
-
var translation_id_attribute = jquery_object.attr( TRP_TRANSLATION_ID );
|
849 |
if ( translation_id_attribute ){
|
850 |
_this.id = translation_id_attribute;
|
851 |
-
_this.node_type = jquery_object.attr( TRP_NODE_TYPE );
|
852 |
-
_this.node_description = jquery_object.attr( TRP_NODE_DESCRIPTION );
|
853 |
-
if ( jquery_object.attr( 'name' ) == 'trp-slug' ){
|
854 |
_this.slug = true;
|
855 |
-
_this.slug_post_id = jquery_object.attr( 'post-id' );
|
856 |
-
_this.original = jquery_object.attr( 'content' );
|
857 |
}
|
858 |
}else{
|
859 |
-
_this.original = jquery_object.text();
|
860 |
}
|
861 |
};
|
862 |
|
40 |
link = _this.update_query_string('trp-view-as', trp_view_as, link );
|
41 |
|
42 |
var trp_view_as_nonce = currentUrl.searchParams.get("trp-view-as-nonce");
|
43 |
+
link = _this.update_query_string('trp-view-as-nonce', trp_view_as_nonce, link );
|
44 |
}
|
45 |
link = _this.update_query_string('trp-edit-translation', 'true', link );
|
46 |
window.location.href = link;
|
185 |
* @param response The Ajax response message.
|
186 |
*/
|
187 |
this.populate_strings = function( response ){
|
188 |
+
if ( typeof dictionaries == 'undefined' ){
|
189 |
+
dictionaries = [];
|
190 |
+
}
|
191 |
for ( var key in response ) {
|
192 |
if ( response.hasOwnProperty( key ) ) {
|
193 |
if ( response[key]['default-language'] == true ){
|
579 |
this.set_strings = function( strings_object ){
|
580 |
for ( var s in _this.strings ){
|
581 |
for ( var i in strings_object ){
|
582 |
+
if ( ( _this.strings[s].id == strings_object[i].id || ( ( _this.strings[s].original ) && _this.strings[s].original.trim() == strings_object[i].original.trim() ) )
|
583 |
+
&& (
|
584 |
+
( _this.strings[s].jquery_object == null ) ||
|
585 |
+
( typeof _this.strings[s].jquery_object == 'undefined' ) ||
|
586 |
+
( _this.strings[s].jquery_object != null && strings_object[i].jquery_object == null ) ||
|
587 |
+
( strings_object[i].jquery_object ==_this.strings[s].jquery_object )
|
588 |
+
)
|
589 |
+
) {
|
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 |
}
|
693 |
this.status = null;
|
694 |
this.node_type = 'Dynamic Added Strings';
|
695 |
this.node_description = '';
|
696 |
+
this.jquery_object = null;
|
697 |
this.language = language;
|
698 |
this.index = array_index;
|
699 |
this.slug = false;
|
740 |
_this.id = ( new_settings.hasOwnProperty ( 'id' ) ) ? new_settings.id : _this.id;
|
741 |
_this.original = ( new_settings.hasOwnProperty ( 'original' ) ) ? new_settings.original : _this.original;
|
742 |
_this.original = decode_html( _this.original );
|
743 |
+
_this.jquery_object = ( new_settings.hasOwnProperty ( 'jquery_object' ) ) ? new_settings.jquery_object : _this.jquery_object;
|
744 |
|
745 |
+
if ( _this.jquery_object ){
|
746 |
if ( trp_language == trp_on_screen_language ) {
|
747 |
var text_to_set = null;
|
748 |
if (new_settings.hasOwnProperty('translated') && new_settings.translated != _this.translated) {
|
753 |
}
|
754 |
_this.wrap_special_html_elements();
|
755 |
if (text_to_set) {
|
756 |
+
var initial_value = _this.jquery_object.text();
|
757 |
text_to_set = initial_value.replace(initial_value.trim(), text_to_set);
|
758 |
+
if ( _this.jquery_object.attr( 'data-trp-attr' ) ){
|
759 |
+
_this.jquery_object.children().attr( _this.jquery_object.attr('data-trp-attr'), text_to_set );
|
760 |
+
}else if( _this.jquery_object.attr( 'data-trp-button' ) ){
|
761 |
+
_this.jquery_object.children('button').text(text_to_set);
|
762 |
}else {
|
763 |
+
_this.jquery_object.html( text_to_set );
|
764 |
}
|
765 |
}
|
766 |
}
|
767 |
|
768 |
+
_this.jquery_object.on( 'mouseenter', '', _this.highlight );
|
769 |
+
_this.jquery_object.on( 'mouseleave', '', _this.unhighlight );
|
770 |
}
|
771 |
|
|
|
772 |
_this.status = ( new_settings.hasOwnProperty( 'status' ) ) ? new_settings.status : _this.status;
|
773 |
_this.translated = ( new_settings.hasOwnProperty( 'translated' ) ) ? decode_html ( new_settings.translated ) : _this.translated;
|
774 |
};
|
777 |
* Wrap buttons and placeholders so that we can display the pencil button and also replace with translation.
|
778 |
*/
|
779 |
this.wrap_special_html_elements = function(){
|
780 |
+
if( _this.jquery_object.is('button') ){
|
781 |
+
_this.jquery_object.unwrap('trp-highlight');
|
782 |
+
_this.jquery_object.wrap('<trp-highlight data-trp-button="true"></trp-highlight>');
|
783 |
+
_this.jquery_object = _this.jquery_object.parent();
|
784 |
}
|
785 |
+
else if ( _this.jquery_object.attr( 'type' ) == 'submit' || _this.jquery_object.attr( 'type' ) == 'button' ) {
|
786 |
+
_this.jquery_object.unwrap('trp-highlight');
|
787 |
+
_this.jquery_object.wrap('<trp-highlight data-trp-attr="value"></trp-highlight>');
|
788 |
+
_this.jquery_object = _this.jquery_object.parent();
|
789 |
}
|
790 |
+
else if ( ( _this.jquery_object.attr( 'type' ) == 'text' || _this.jquery_object.attr( 'type' ) == 'search' ) && ( typeof _this.jquery_object.attr( 'placeholder' ) != 'undefined' ) ) {
|
791 |
+
_this.jquery_object.unwrap('trp-highlight');
|
792 |
+
_this.jquery_object.wrap('<trp-highlight data-trp-attr="placeholder"></trp-highlight>');
|
793 |
+
_this.jquery_object = _this.jquery_object.parent();
|
794 |
}
|
795 |
};
|
796 |
|
799 |
*/
|
800 |
this.highlight = function (){
|
801 |
if ( ! trpEditor.edit_translation_button ){
|
802 |
+
_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>' );
|
803 |
+
trpEditor.edit_translation_button = _this.jquery_object.children('.trp-edit-translation');
|
804 |
}else{
|
805 |
_this.wrap_special_html_elements();
|
806 |
trpEditor.maybe_overflow_fix(trpEditor.edit_translation_button);
|
807 |
+
_this.jquery_object.prepend(trpEditor.edit_translation_button);
|
808 |
}
|
809 |
|
810 |
+
trpEditor.make_sure_pencil_icon_is_inside_view( _this.jquery_object[0] );
|
811 |
|
812 |
trpEditor.edit_translation_button.off( 'click' );
|
813 |
trpEditor.edit_translation_button.on( 'click', function(e){
|
855 |
* @param raw_string
|
856 |
*/
|
857 |
this.set_raw_string = function( raw_string ){
|
858 |
+
_this.jquery_object = jQuery( raw_string );
|
859 |
+
var translation_id_attribute = _this.jquery_object.attr( TRP_TRANSLATION_ID );
|
860 |
if ( translation_id_attribute ){
|
861 |
_this.id = translation_id_attribute;
|
862 |
+
_this.node_type = _this.jquery_object.attr( TRP_NODE_TYPE );
|
863 |
+
_this.node_description = _this.jquery_object.attr( TRP_NODE_DESCRIPTION );
|
864 |
+
if ( _this.jquery_object.attr( 'name' ) == 'trp-slug' ){
|
865 |
_this.slug = true;
|
866 |
+
_this.slug_post_id = _this.jquery_object.attr( 'post-id' );
|
867 |
+
_this.original = _this.jquery_object.attr( 'content' );
|
868 |
}
|
869 |
}else{
|
870 |
+
_this.original = _this.jquery_object.text();
|
871 |
}
|
872 |
};
|
873 |
|
assets/js/trp-translate-dom-changes.js
CHANGED
@@ -98,8 +98,9 @@ function TRP_Translator(){
|
|
98 |
var strings = [];
|
99 |
mutations.forEach( function (mutation) {
|
100 |
for (var i = 0; i < mutation.addedNodes.length; i++) {
|
101 |
-
if ( mutation.addedNodes[i].
|
102 |
var node = jQuery( mutation.addedNodes[i] );
|
|
|
103 |
var noTranslation = node.attr( 'data-no-translation' );
|
104 |
if ( (typeof noTranslation !== typeof undefined && noTranslation !== false) || node.parents( '[data-no-translation]').length > 0 ){
|
105 |
continue;
|
@@ -119,23 +120,31 @@ function TRP_Translator(){
|
|
119 |
if ( typeof parent.trpEditor !== 'undefined' ) {
|
120 |
jQuery(mutation.addedNodes[i]).find('a').context.href = _this.update_query_string('trp-edit-translation', 'preview', jQuery(mutation.addedNodes[i]).find('a').context.href);
|
121 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
122 |
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
if ( jQuery(this).closest( '[data-trpgettextoriginal]').length == 0 && jQuery(this).closest( '[data-trp-translate-id]').length == 0 ){
|
127 |
-
return this;
|
128 |
}
|
129 |
}
|
130 |
-
}
|
131 |
-
|
132 |
-
all_strings.
|
133 |
-
|
134 |
-
|
135 |
-
|
136 |
-
|
137 |
-
|
138 |
-
all_strings[j].textContent
|
|
|
|
|
|
|
139 |
}
|
140 |
}
|
141 |
}
|
@@ -147,6 +156,17 @@ function TRP_Translator(){
|
|
147 |
}
|
148 |
};
|
149 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
150 |
//function that cleans the gettext wrappers
|
151 |
this.cleanup_gettext_wrapper = function(){
|
152 |
jQuery('trp-gettext').contents().unwrap();
|
@@ -213,7 +233,8 @@ function TRP_Translator(){
|
|
213 |
|
214 |
jQuery( document ).ajaxComplete(function( event, request, settings ) {
|
215 |
if( window.parent.jQuery('#trp-preview-iframe').length != 0 ) {
|
216 |
-
|
|
|
217 |
window.parent.jQuery('#trp-preview-iframe').trigger('load');
|
218 |
}
|
219 |
}
|
98 |
var strings = [];
|
99 |
mutations.forEach( function (mutation) {
|
100 |
for (var i = 0; i < mutation.addedNodes.length; i++) {
|
101 |
+
if ( mutation.addedNodes[i].textContent && _this.trim( mutation.addedNodes[i].textContent.trim(), except_characters ) != '' ) {
|
102 |
var node = jQuery( mutation.addedNodes[i] );
|
103 |
+
|
104 |
var noTranslation = node.attr( 'data-no-translation' );
|
105 |
if ( (typeof noTranslation !== typeof undefined && noTranslation !== false) || node.parents( '[data-no-translation]').length > 0 ){
|
106 |
continue;
|
120 |
if ( typeof parent.trpEditor !== 'undefined' ) {
|
121 |
jQuery(mutation.addedNodes[i]).find('a').context.href = _this.update_query_string('trp-edit-translation', 'preview', jQuery(mutation.addedNodes[i]).find('a').context.href);
|
122 |
}
|
123 |
+
var direct_string = get_string_from_node( mutation.addedNodes[i] );
|
124 |
+
if ( direct_string ) {
|
125 |
+
if ( _this.trim( direct_string.textContent, except_characters ) != '' ) {
|
126 |
+
strings.push({
|
127 |
+
node: mutation.addedNodes[i],
|
128 |
+
original: _this.trim(direct_string.textContent, trim_characters)
|
129 |
+
});
|
130 |
|
131 |
+
direct_string.textContent = '';
|
132 |
+
if (typeof parent.trpEditor !== 'undefined') {
|
133 |
+
jQuery(mutation.addedNodes[i]).wrap('<translate-press></translate-press>');
|
|
|
|
|
134 |
}
|
135 |
}
|
136 |
+
}else{
|
137 |
+
var all_nodes = jQuery( mutation.addedNodes[i]).find( '*').addBack();
|
138 |
+
var all_strings = all_nodes.contents().filter(get_string_from_node);
|
139 |
+
if ( typeof parent.trpEditor !== 'undefined' ) {
|
140 |
+
all_strings.wrap('<translate-press></translate-press>');
|
141 |
+
}
|
142 |
+
var all_strings_length = all_strings.length;
|
143 |
+
for (var j = 0; j < all_strings_length; j++ ) {
|
144 |
+
if ( _this.trim( all_strings[j].textContent, except_characters ) != '' ) {
|
145 |
+
strings.push({node: all_strings[j], original: _this.trim( all_strings[j].textContent, trim_characters )});
|
146 |
+
all_strings[j].textContent = '';
|
147 |
+
}
|
148 |
}
|
149 |
}
|
150 |
}
|
156 |
}
|
157 |
};
|
158 |
|
159 |
+
function get_string_from_node( node ){
|
160 |
+
if ( node == false ){
|
161 |
+
node = this;
|
162 |
+
}
|
163 |
+
if( node.nodeType === 3 && /\S/.test(node.nodeValue) ){
|
164 |
+
if ( jQuery(node).closest( '[data-trpgettextoriginal]').length == 0 && jQuery(node).closest( '[data-trp-translate-id]').length == 0 ){
|
165 |
+
return node;
|
166 |
+
}
|
167 |
+
}
|
168 |
+
}
|
169 |
+
|
170 |
//function that cleans the gettext wrappers
|
171 |
this.cleanup_gettext_wrapper = function(){
|
172 |
jQuery('trp-gettext').contents().unwrap();
|
233 |
|
234 |
jQuery( document ).ajaxComplete(function( event, request, settings ) {
|
235 |
if( window.parent.jQuery('#trp-preview-iframe').length != 0 ) {
|
236 |
+
var settingsdata = "" + settings.data;
|
237 |
+
if( typeof settings.data == 'undefined' || jQuery.isEmptyObject( settings.data ) || settingsdata.indexOf('action=trp_') === -1 ) {
|
238 |
window.parent.jQuery('#trp-preview-iframe').trigger('load');
|
239 |
}
|
240 |
}
|
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.
|
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.6' );
|
43 |
|
44 |
$this->load_dependencies();
|
45 |
$this->initialize_components();
|
includes/class-query.php
CHANGED
@@ -11,6 +11,7 @@ class TRP_Query{
|
|
11 |
protected $table_name;
|
12 |
protected $db;
|
13 |
protected $settings;
|
|
|
14 |
|
15 |
const NOT_TRANSLATED = 0;
|
16 |
const MACHINE_TRANSLATED = 1;
|
@@ -29,19 +30,16 @@ class TRP_Query{
|
|
29 |
/**
|
30 |
* Trim unwanted characters from string.
|
31 |
*
|
32 |
-
* @param string $
|
33 |
* @return string Trimmed string.
|
34 |
*/
|
35 |
-
protected function full_trim( $
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
$word = '';
|
43 |
-
}
|
44 |
-
return $word;
|
45 |
}
|
46 |
|
47 |
/**
|
11 |
protected $table_name;
|
12 |
protected $db;
|
13 |
protected $settings;
|
14 |
+
protected $translation_render;
|
15 |
|
16 |
const NOT_TRANSLATED = 0;
|
17 |
const MACHINE_TRANSLATED = 1;
|
30 |
/**
|
31 |
* Trim unwanted characters from string.
|
32 |
*
|
33 |
+
* @param string $string String to trim.
|
34 |
* @return string Trimmed string.
|
35 |
*/
|
36 |
+
protected function full_trim( $string ) {
|
37 |
+
$trp = TRP_Translate_Press::get_trp_instance();
|
38 |
+
if ( ! $this->translation_render ) {
|
39 |
+
$this->translation_render = $trp->get_component( 'translation_render' );
|
40 |
+
}
|
41 |
+
|
42 |
+
return $this->translation_render->full_trim( $string );
|
|
|
|
|
|
|
43 |
}
|
44 |
|
45 |
/**
|
includes/class-translation-render.php
CHANGED
@@ -92,18 +92,34 @@ class TRP_Translation_Render{
|
|
92 |
/**
|
93 |
* Trim strings.
|
94 |
*
|
95 |
-
* @param string $
|
96 |
* @return string Trimmed string.
|
97 |
*/
|
98 |
-
public function full_trim( $
|
99 |
-
/*
|
|
|
|
|
100 |
//$word = trim($word," \t\n\r\0\x0B\xA0�".chr( 194 ) . chr( 160 ) );
|
101 |
-
$word = trim($word," \t\n\r\0\x0B\xA0".chr( 194 ) . chr( 160 ) );
|
102 |
-
if ( htmlentities( $word ) == "" || strip_tags( $word ) == "" || trim ($word, " \t\n\r\0\x0B\xA0�.,/`~!@#\$€£%^&*():;-_=+[]{}\\|?/<>1234567890'\"" ) == '' ){
|
103 |
-
$word = '';
|
104 |
-
}
|
105 |
|
106 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
107 |
}
|
108 |
|
109 |
/**
|
92 |
/**
|
93 |
* Trim strings.
|
94 |
*
|
95 |
+
* @param string $string Raw string.
|
96 |
* @return string Trimmed string.
|
97 |
*/
|
98 |
+
public function full_trim( $string ) {
|
99 |
+
/* Apparently the � char in the trim function turns some strings in an empty string so they can't be translated but I don't really know if we should remove it completely
|
100 |
+
Removed chr( 194 ) . chr( 160 ) because it altered some special characters (¿¡)
|
101 |
+
Also removed \xA0 (the same as chr(160) for altering special characters */
|
102 |
//$word = trim($word," \t\n\r\0\x0B\xA0�".chr( 194 ) . chr( 160 ) );
|
|
|
|
|
|
|
|
|
103 |
|
104 |
+
/* Solution to replace the chr(194).chr(160) from trim function, in order to escape the whitespace character ( \xc2\xa0 ), an old bug that couldn't be replicated anymore. */
|
105 |
+
$prefix = "\xc2\xa0";
|
106 |
+
$prefix_length = strlen($prefix);
|
107 |
+
do{
|
108 |
+
$previous_iteration_string = $string;
|
109 |
+
$string = trim( $string," \t\n\r\0\x0B");
|
110 |
+
if ( substr( $string, 0, $prefix_length ) == $prefix ) {
|
111 |
+
$string = substr( $string, $prefix_length );
|
112 |
+
}
|
113 |
+
if ( substr( $string, - $prefix_length, $prefix_length ) == $prefix ) {
|
114 |
+
$string = substr( $string, 0, - $prefix_length );
|
115 |
+
}
|
116 |
+
}while( $string != $previous_iteration_string );
|
117 |
+
|
118 |
+
if ( strip_tags( $string ) == "" || trim ($string, " \t\n\r\0\x0B\xA0�.,/`~!@#\$€£%^&*():;-_=+[]{}\\|?/<>1234567890'\"" ) == '' ){
|
119 |
+
$string = '';
|
120 |
+
}
|
121 |
+
|
122 |
+
return $string;
|
123 |
}
|
124 |
|
125 |
/**
|
includes/class-url-converter.php
CHANGED
@@ -172,16 +172,6 @@ class TRP_Url_Converter {
|
|
172 |
$language = $TRP_LANGUAGE;
|
173 |
}
|
174 |
|
175 |
-
// if we have the homepage, we replace it with the filtered homepage that contains the language url.
|
176 |
-
if( ( trailingslashit( $this->cur_page_url() ) == trailingslashit($this->get_abs_home()) )||
|
177 |
-
( trailingslashit( $this->cur_page_url() ) == (trailingslashit($this->get_abs_home()) . $this->get_url_slug( $TRP_LANGUAGE ) . '/')) ){
|
178 |
-
|
179 |
-
$TRP_LANGUAGE = $language;
|
180 |
-
$new_url = home_url();
|
181 |
-
$TRP_LANGUAGE = $trp_language_copy;
|
182 |
-
return $new_url . $trp_link_is_processed;
|
183 |
-
}
|
184 |
-
|
185 |
// make sure we have the original query
|
186 |
wp_reset_query();
|
187 |
|
172 |
$language = $TRP_LANGUAGE;
|
173 |
}
|
174 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
175 |
// make sure we have the original query
|
176 |
wp_reset_query();
|
177 |
|
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 |
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.6
|
7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
8 |
Author URI: https://cozmoslabs.com/
|
9 |
License: GPL2
|
partials/main-settings-page.php
CHANGED
@@ -59,7 +59,7 @@
|
|
59 |
<option value="yes" <?php selected( $this->settings['force-language-to-custom-links'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
60 |
</select>
|
61 |
<p class="description">
|
62 |
-
<?php _e( 'Select Yes if you want to force custom links without language encoding to
|
63 |
</p>
|
64 |
</td>
|
65 |
</tr>
|
59 |
<option value="yes" <?php selected( $this->settings['force-language-to-custom-links'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
60 |
</select>
|
61 |
<p class="description">
|
62 |
+
<?php _e( 'Select Yes if you want to force custom links without language encoding to keep the currently selected language.', 'translatepress-multilingual' ); ?>
|
63 |
</p>
|
64 |
</td>
|
65 |
</tr>
|
readme.txt
CHANGED
@@ -4,7 +4,7 @@ Donate link: https://www.cozmoslabs.com/
|
|
4 |
Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate, bilingual
|
5 |
Requires at least: 3.1.0
|
6 |
Tested up to: 4.9.4
|
7 |
-
Stable tag: 1.1.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
@@ -26,6 +26,7 @@ Built the WordPress way, TranslatePress - Multilingual is a GPL and self hosted
|
|
26 |
* Support for both manual and automatic translation (via Google Translate)
|
27 |
* Ability to translate dynamic strings (gettext) added by WordPress, plugins and themes.
|
28 |
* Integrates with Google Translate, allowing you to set up Automatic Translation using your own Google API key.
|
|
|
29 |
* Place language switchers anywhere using shortcode **[language-switcher]**, WP menu item or as a floating dropdown.
|
30 |
* Editorial control allowing you to publish your language only when all your translations are done
|
31 |
* Conditional display content shortcode based on language [trp_language language="en_US"] English content only [/trp_language]
|
@@ -112,14 +113,21 @@ For more information please check out [TranslatePress documentation](https://tra
|
|
112 |
6. Menu Language Switcher
|
113 |
|
114 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
115 |
= 1.1.5 =
|
116 |
-
Added support for translation blocks using the css class .translation-block.
|
117 |
-
Added possibility to choose a different language as default language seen by website visitors.
|
118 |
-
Updated add-ons settings page with the missing add-ons, added Language by GET parameter addon
|
119 |
-
Fixed issue with the [language-switcher] in a post or page that broke saving the page when Yoast SEO plugin is active
|
120 |
-
Added a plugin notification class and a notification for pretty permalinks
|
121 |
-
Added WooCommerce compatibility tag
|
122 |
-
Small css improvements
|
123 |
|
124 |
= 1.1.4 =
|
125 |
* Filter to allow adding new language: 'trp_wp_languages'
|
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.6
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
26 |
* Support for both manual and automatic translation (via Google Translate)
|
27 |
* Ability to translate dynamic strings (gettext) added by WordPress, plugins and themes.
|
28 |
* Integrates with Google Translate, allowing you to set up Automatic Translation using your own Google API key.
|
29 |
+
* Translate larger html blocks using the css class **translation-block**. `<p class="translation-block">Translate <em>everything</em> inside</p>`
|
30 |
* Place language switchers anywhere using shortcode **[language-switcher]**, WP menu item or as a floating dropdown.
|
31 |
* Editorial control allowing you to publish your language only when all your translations are done
|
32 |
* Conditional display content shortcode based on language [trp_language language="en_US"] English content only [/trp_language]
|
113 |
6. Menu Language Switcher
|
114 |
|
115 |
== Changelog ==
|
116 |
+
= 1.1.6 =
|
117 |
+
* Added support for translating Contact Form 7 alert messages
|
118 |
+
* Fixed issue with some strings containing special characters not being translated (i.e. "¿¡")
|
119 |
+
* Fixed bug with switching languages in Editor when viewing as Logged out
|
120 |
+
* Fixed issue with broken homepage links in some themes
|
121 |
+
* Added support for RTL languages in translation editor
|
122 |
+
|
123 |
= 1.1.5 =
|
124 |
+
* Added support for translation blocks using the css class .translation-block.
|
125 |
+
* Added possibility to choose a different language as default language seen by website visitors.
|
126 |
+
* Updated add-ons settings page with the missing add-ons, added Language by GET parameter addon
|
127 |
+
* Fixed issue with the [language-switcher] in a post or page that broke saving the page when Yoast SEO plugin is active
|
128 |
+
* Added a plugin notification class and a notification for pretty permalinks
|
129 |
+
* Added WooCommerce compatibility tag
|
130 |
+
* Small css improvements
|
131 |
|
132 |
= 1.1.4 =
|
133 |
* Filter to allow adding new language: 'trp_wp_languages'
|