Version Description
- Translation interface improvements
- Fixed issues with strings loaded with ajax
- Added an addon page
- Fixed bug with gettext node accidentally wrapping another string too.
Download this release
Release Info
| Developer | madalin.ungureanu |
| Plugin | |
| Version | 1.0.2 |
| Comparing to | |
| See all releases | |
Code changes from version 1.0.1 to 1.0.2
- assets/css/trp-editor-style.css +59 -5
- assets/images/multiple_lang_icon.png +0 -0
- assets/images/seo_icon_translatepress.png +0 -0
- assets/js/trp-editor-overlay.js +27 -0
- assets/js/trp-editor-script.js +41 -6
- assets/js/trp-translate-dom-changes.js +30 -4
- class-translate-press.php +8 -3
- includes/class-settings.php +15 -0
- includes/class-translation-manager.php +130 -29
- includes/class-translation-render.php +50 -11
- index.php +1 -1
- partials/addons-settings-page.php +30 -0
- partials/translation-manager.php +2 -1
- readme.txt +7 -1
assets/css/trp-editor-style.css
CHANGED
|
@@ -6,14 +6,14 @@ body{
|
|
| 6 |
}
|
| 7 |
|
| 8 |
#trp-editor{
|
| 9 |
-
margin-left:
|
| 10 |
position: fixed;
|
| 11 |
width: 100%;
|
| 12 |
height: 100%;
|
| 13 |
}
|
| 14 |
|
| 15 |
#trp-controls{
|
| 16 |
-
width:
|
| 17 |
position: fixed;
|
| 18 |
top: 0;
|
| 19 |
bottom: 0;
|
|
@@ -77,7 +77,6 @@ body{
|
|
| 77 |
cursor: pointer;
|
| 78 |
font: 400 26px/40px dashicons;
|
| 79 |
font-weight: bold;
|
| 80 |
-
content: "\f335";
|
| 81 |
display: inline-block;
|
| 82 |
width: 45px;
|
| 83 |
height: 41px;
|
|
@@ -95,6 +94,10 @@ body{
|
|
| 95 |
text-decoration: none;
|
| 96 |
}
|
| 97 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
#trp-controls-close:focus,
|
| 99 |
#trp-controls-close:hover{
|
| 100 |
background: #fff;
|
|
@@ -108,7 +111,7 @@ body{
|
|
| 108 |
#trp-preview{
|
| 109 |
position: absolute;
|
| 110 |
left: 0;
|
| 111 |
-
right:
|
| 112 |
height: 100%;
|
| 113 |
}
|
| 114 |
|
|
@@ -192,12 +195,15 @@ span.select2-container{
|
|
| 192 |
}
|
| 193 |
|
| 194 |
.trp-language-text textarea{
|
| 195 |
-
height:
|
| 196 |
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
|
| 197 |
font-size: 14px;
|
| 198 |
max-width: 100%;
|
| 199 |
min-width: 100%;
|
| 200 |
width: 100%;
|
|
|
|
|
|
|
|
|
|
| 201 |
}
|
| 202 |
|
| 203 |
.trp-language-text textarea[readonly="readonly"]{
|
|
@@ -401,3 +407,51 @@ spin {
|
|
| 401 |
transform: rotate(360deg)
|
| 402 |
}
|
| 403 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 6 |
}
|
| 7 |
|
| 8 |
#trp-editor{
|
| 9 |
+
margin-left: 350px;
|
| 10 |
position: fixed;
|
| 11 |
width: 100%;
|
| 12 |
height: 100%;
|
| 13 |
}
|
| 14 |
|
| 15 |
#trp-controls{
|
| 16 |
+
width: 348px;
|
| 17 |
position: fixed;
|
| 18 |
top: 0;
|
| 19 |
bottom: 0;
|
| 77 |
cursor: pointer;
|
| 78 |
font: 400 26px/40px dashicons;
|
| 79 |
font-weight: bold;
|
|
|
|
| 80 |
display: inline-block;
|
| 81 |
width: 45px;
|
| 82 |
height: 41px;
|
| 94 |
text-decoration: none;
|
| 95 |
}
|
| 96 |
|
| 97 |
+
#trp-controls-close:after{
|
| 98 |
+
content: "\f335";
|
| 99 |
+
}
|
| 100 |
+
|
| 101 |
#trp-controls-close:focus,
|
| 102 |
#trp-controls-close:hover{
|
| 103 |
background: #fff;
|
| 111 |
#trp-preview{
|
| 112 |
position: absolute;
|
| 113 |
left: 0;
|
| 114 |
+
right: 350px;
|
| 115 |
height: 100%;
|
| 116 |
}
|
| 117 |
|
| 195 |
}
|
| 196 |
|
| 197 |
.trp-language-text textarea{
|
| 198 |
+
height: 80px;
|
| 199 |
font-family: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;
|
| 200 |
font-size: 14px;
|
| 201 |
max-width: 100%;
|
| 202 |
min-width: 100%;
|
| 203 |
width: 100%;
|
| 204 |
+
padding: 3px;
|
| 205 |
+
border: 1px solid #aaa;
|
| 206 |
+
border-radius:3px;
|
| 207 |
}
|
| 208 |
|
| 209 |
.trp-language-text textarea[readonly="readonly"]{
|
| 407 |
transform: rotate(360deg)
|
| 408 |
}
|
| 409 |
}
|
| 410 |
+
|
| 411 |
+
#trp-preview.trp-still-loading-strings:before{
|
| 412 |
+
position: absolute; /* Sit on top of the page content */
|
| 413 |
+
width: 100%; /* Full width (cover the whole page) */
|
| 414 |
+
height: 30px; /* Full height (cover the whole page) */
|
| 415 |
+
line-height:30px;
|
| 416 |
+
top: 0;
|
| 417 |
+
left: 0;
|
| 418 |
+
right: 0;
|
| 419 |
+
background-color: rgba(40,177,255,0.8); /* Black background with opacity */
|
| 420 |
+
z-index: 200; /* Specify a stack order in case you're using a different order for other elements */
|
| 421 |
+
cursor: pointer; /* Add a pointer on hover */
|
| 422 |
+
content:'The strings are not yet ready for translation. Try again in a moment...';
|
| 423 |
+
color:#fff;
|
| 424 |
+
text-align:center;
|
| 425 |
+
}
|
| 426 |
+
/*
|
| 427 |
+
* Select 2 Overlay in front-end
|
| 428 |
+
*/
|
| 429 |
+
|
| 430 |
+
.select2-selection.select2-selection--single{
|
| 431 |
+
outline: 0;
|
| 432 |
+
}
|
| 433 |
+
|
| 434 |
+
#trp_select2_overlay{
|
| 435 |
+
display: none;
|
| 436 |
+
position: absolute;
|
| 437 |
+
top: 0;
|
| 438 |
+
left: 0;
|
| 439 |
+
width: 100%;
|
| 440 |
+
height: 100%;
|
| 441 |
+
background-color: #000;
|
| 442 |
+
filter:alpha(opacity=50);
|
| 443 |
+
-moz-opacity:0.5;
|
| 444 |
+
-khtml-opacity: 0.5;
|
| 445 |
+
opacity: 0.5;
|
| 446 |
+
z-index: 1000;
|
| 447 |
+
}
|
| 448 |
+
|
| 449 |
+
.select2-container{
|
| 450 |
+
z-index: 1051;
|
| 451 |
+
}
|
| 452 |
+
|
| 453 |
+
.select2-container--default .select2-results > .select2-results__options,
|
| 454 |
+
.select2-container--default .select2-results > .select2-results__options,
|
| 455 |
+
.select2-results{
|
| 456 |
+
max-height: 400px !important;
|
| 457 |
+
}
|
assets/images/multiple_lang_icon.png
ADDED
|
Binary file
|
assets/images/seo_icon_translatepress.png
ADDED
|
Binary file
|
assets/js/trp-editor-overlay.js
ADDED
|
@@ -0,0 +1,27 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
jQuery( document ).ready(function(){
|
| 2 |
+
/* jQuery('#wppb_manage_fields #field').select2({
|
| 3 |
+
placeholder: 'Select an option'
|
| 4 |
+
})*/
|
| 5 |
+
|
| 6 |
+
var overlay = jQuery('<div id="trp_select2_overlay"> </div>')
|
| 7 |
+
overlay.appendTo('#trp-controls');
|
| 8 |
+
|
| 9 |
+
var $eventSelectLanguage = jQuery("#trp-language-select");
|
| 10 |
+
$eventSelectLanguage.on("select2:open", function (e) {
|
| 11 |
+
jQuery('#trp_select2_overlay').fadeIn('100')
|
| 12 |
+
});
|
| 13 |
+
$eventSelectLanguage.on("select2:close", function (e) {
|
| 14 |
+
jQuery('#trp_select2_overlay').hide();
|
| 15 |
+
});
|
| 16 |
+
|
| 17 |
+
var $eventSelectString = jQuery("#trp-string-categories");
|
| 18 |
+
$eventSelectString.on("select2:open", function (e) {
|
| 19 |
+
jQuery('#trp_select2_overlay').fadeIn('100')
|
| 20 |
+
});
|
| 21 |
+
$eventSelectString.on("select2:close", function (e) {
|
| 22 |
+
jQuery('#trp_select2_overlay').hide();
|
| 23 |
+
});
|
| 24 |
+
|
| 25 |
+
|
| 26 |
+
|
| 27 |
+
})
|
assets/js/trp-editor-script.js
CHANGED
|
@@ -164,7 +164,7 @@ function TRP_Editor(){
|
|
| 164 |
}
|
| 165 |
}
|
| 166 |
}
|
| 167 |
-
_this.saved_translation_ui();
|
| 168 |
};
|
| 169 |
|
| 170 |
/**
|
|
@@ -286,14 +286,17 @@ function TRP_Editor(){
|
|
| 286 |
/**
|
| 287 |
* Show UI for translation done saving.
|
| 288 |
*/
|
| 289 |
-
this.saved_translation_ui = function(){
|
|
|
|
| 290 |
save_button.removeAttr( 'disabled' );
|
| 291 |
if( gettext_dictionaries != null )
|
| 292 |
loading_animation.css('display', 'none');//don't hide the animation if the gettexts arent loaded
|
| 293 |
if ( _this.change_tracker ) {
|
| 294 |
_this.change_tracker.mark_changes_saved();
|
| 295 |
-
|
| 296 |
-
|
|
|
|
|
|
|
| 297 |
}
|
| 298 |
};
|
| 299 |
|
|
@@ -680,7 +683,18 @@ function TRP_String( language, array_index ){
|
|
| 680 |
if ( trpEditor.change_tracker.check_unsaved_changes() ) {
|
| 681 |
return;
|
| 682 |
}
|
| 683 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 684 |
});
|
| 685 |
|
| 686 |
jQuery( this ).addClass( 'trp-highlight' );
|
|
@@ -859,7 +873,17 @@ function TRP_Lister( current_dictionary ) {
|
|
| 859 |
return;
|
| 860 |
}
|
| 861 |
string_id = jquery_object.attr('data-trpgettextoriginal');
|
| 862 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 863 |
}
|
| 864 |
|
| 865 |
}
|
|
@@ -1164,4 +1188,15 @@ jQuery(function(){
|
|
| 1164 |
|
| 1165 |
});
|
| 1166 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1167 |
|
| 164 |
}
|
| 165 |
}
|
| 166 |
}
|
| 167 |
+
_this.saved_translation_ui(true);
|
| 168 |
};
|
| 169 |
|
| 170 |
/**
|
| 286 |
/**
|
| 287 |
* Show UI for translation done saving.
|
| 288 |
*/
|
| 289 |
+
this.saved_translation_ui = function( dontShowMessage ){
|
| 290 |
+
dontShowMessage = dontShowMessage || 0;
|
| 291 |
save_button.removeAttr( 'disabled' );
|
| 292 |
if( gettext_dictionaries != null )
|
| 293 |
loading_animation.css('display', 'none');//don't hide the animation if the gettexts arent loaded
|
| 294 |
if ( _this.change_tracker ) {
|
| 295 |
_this.change_tracker.mark_changes_saved();
|
| 296 |
+
if( !dontShowMessage ) {
|
| 297 |
+
translation_saved.css("display", "inline");
|
| 298 |
+
translation_saved.delay(3000).fadeOut(400);
|
| 299 |
+
}
|
| 300 |
}
|
| 301 |
};
|
| 302 |
|
| 683 |
if ( trpEditor.change_tracker.check_unsaved_changes() ) {
|
| 684 |
return;
|
| 685 |
}
|
| 686 |
+
|
| 687 |
+
notDoingAjax = true;
|
| 688 |
+
if( typeof jQuery.active != 'undefined' ){
|
| 689 |
+
if( jQuery.active !== 0 )
|
| 690 |
+
notDoingAjax = false;
|
| 691 |
+
}
|
| 692 |
+
|
| 693 |
+
if( jQuery( 'option[value="'+_this.index+'"]', trpEditor.jquery_string_selector ).length != 0 && !jQuery('.trp-ajax-loader', trpEditor).is(":visible") && notDoingAjax ) {
|
| 694 |
+
trpEditor.jquery_string_selector.val( _this.index ).trigger( 'change', true )
|
| 695 |
+
}else{
|
| 696 |
+
trpEditor.jquery_string_selector.trigger('trpSelectorNotChanged');
|
| 697 |
+
}
|
| 698 |
});
|
| 699 |
|
| 700 |
jQuery( this ).addClass( 'trp-highlight' );
|
| 873 |
return;
|
| 874 |
}
|
| 875 |
string_id = jquery_object.attr('data-trpgettextoriginal');
|
| 876 |
+
|
| 877 |
+
notDoingAjax = true;
|
| 878 |
+
if( typeof jQuery.active != 'undefined' ){
|
| 879 |
+
if( jQuery.active !== 0 )
|
| 880 |
+
notDoingAjax = false;
|
| 881 |
+
}
|
| 882 |
+
if( jQuery( 'option[value="gettext-'+string_id+'"]', trpEditor.jquery_string_selector ).length != 0 && !jQuery('.trp-ajax-loader', trpEditor).is(":visible") && notDoingAjax ) {
|
| 883 |
+
trpEditor.jquery_string_selector.val('gettext-' + string_id).trigger('change', true);
|
| 884 |
+
}else{
|
| 885 |
+
trpEditor.jquery_string_selector.trigger('trpSelectorNotChanged');
|
| 886 |
+
}
|
| 887 |
}
|
| 888 |
|
| 889 |
}
|
| 1188 |
|
| 1189 |
});
|
| 1190 |
|
| 1191 |
+
jQuery( function(){
|
| 1192 |
+
trpEditor.jquery_string_selector.on('trpSelectorNotChanged', function(){
|
| 1193 |
+
if( !jQuery('#trp-preview').hasClass('trp-still-loading-strings') ) {
|
| 1194 |
+
jQuery('#trp-preview').addClass('trp-still-loading-strings');
|
| 1195 |
+
setTimeout(function () {
|
| 1196 |
+
jQuery('#trp-preview').removeClass('trp-still-loading-strings')
|
| 1197 |
+
}, 2000 );
|
| 1198 |
+
}
|
| 1199 |
+
});
|
| 1200 |
+
});
|
| 1201 |
+
|
| 1202 |
|
assets/js/trp-translate-dom-changes.js
CHANGED
|
@@ -32,6 +32,7 @@ function TRP_Translator(){
|
|
| 32 |
_this.ajax_get_translation( strings_to_query, wp_ajax_url );
|
| 33 |
}else{
|
| 34 |
_this.update_strings( response, strings_to_query );
|
|
|
|
| 35 |
}
|
| 36 |
},
|
| 37 |
error: function( errorThrown ){
|
|
@@ -58,6 +59,10 @@ function TRP_Translator(){
|
|
| 58 |
var response_string = response[language_to_query][i];
|
| 59 |
if (response_string.original.trim() == queried_string.original.trim()) {
|
| 60 |
response[language_to_query][i].jquery_object = jQuery( queried_string.node ).parent( 'translate-press' );
|
|
|
|
|
|
|
|
|
|
|
|
|
| 61 |
if (response_string.translated != '' && language_to_query == current_language ) {
|
| 62 |
var text_to_set = initial_value.replace(initial_value.trim(), response_string.translated);
|
| 63 |
_this.pause_observer();
|
|
@@ -93,8 +98,18 @@ function TRP_Translator(){
|
|
| 93 |
for (var i = 0; i < mutation.addedNodes.length; i++) {
|
| 94 |
if ( mutation.addedNodes[i].innerText && _this.trim( mutation.addedNodes[i].innerText.trim(), except_characters ) != '' ) {
|
| 95 |
var node = jQuery( mutation.addedNodes[i] );
|
| 96 |
-
var
|
| 97 |
-
if ( (typeof
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 98 |
continue;
|
| 99 |
}
|
| 100 |
|
|
@@ -106,7 +121,9 @@ function TRP_Translator(){
|
|
| 106 |
var all_nodes = jQuery( mutation.addedNodes[i]).find( '*').addBack();
|
| 107 |
var all_strings = all_nodes.contents().filter(function(){
|
| 108 |
if( this.nodeType === 3 && /\S/.test(this.nodeValue) ){
|
| 109 |
-
|
|
|
|
|
|
|
| 110 |
}
|
| 111 |
});
|
| 112 |
if ( typeof parent.trpEditor !== 'undefined' ) {
|
|
@@ -178,9 +195,9 @@ function TRP_Translator(){
|
|
| 178 |
current_language = trp_data.trp_current_language;
|
| 179 |
original_language = trp_data.trp_original_language;
|
| 180 |
language_to_query = trp_data.trp_language_to_query;
|
|
|
|
| 181 |
// create an observer instance
|
| 182 |
observer = new MutationObserver( _this.detect_new_strings );
|
| 183 |
-
|
| 184 |
// configuration of the observer:
|
| 185 |
var config = {
|
| 186 |
attributes: true,
|
|
@@ -189,8 +206,17 @@ function TRP_Translator(){
|
|
| 189 |
subtree: true
|
| 190 |
};
|
| 191 |
|
|
|
|
| 192 |
observer.observe( document.body , config );
|
| 193 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 194 |
//try a final attempt at cleaning the gettext wrappers
|
| 195 |
_this.cleanup_gettext_wrapper();
|
| 196 |
};
|
| 32 |
_this.ajax_get_translation( strings_to_query, wp_ajax_url );
|
| 33 |
}else{
|
| 34 |
_this.update_strings( response, strings_to_query );
|
| 35 |
+
//window.parent.jQuery('#trp-preview-iframe').trigger('load');
|
| 36 |
}
|
| 37 |
},
|
| 38 |
error: function( errorThrown ){
|
| 59 |
var response_string = response[language_to_query][i];
|
| 60 |
if (response_string.original.trim() == queried_string.original.trim()) {
|
| 61 |
response[language_to_query][i].jquery_object = jQuery( queried_string.node ).parent( 'translate-press' );
|
| 62 |
+
if ( typeof parent.trpEditor !== 'undefined' ) {
|
| 63 |
+
response[language_to_query][i].jquery_object.attr('data-trp-translate-id', response[language_to_query][i].id);
|
| 64 |
+
response[language_to_query][i].jquery_object.attr('data-trp-node-type', 'Dynamic Added Strings');
|
| 65 |
+
}
|
| 66 |
if (response_string.translated != '' && language_to_query == current_language ) {
|
| 67 |
var text_to_set = initial_value.replace(initial_value.trim(), response_string.translated);
|
| 68 |
_this.pause_observer();
|
| 98 |
for (var i = 0; i < mutation.addedNodes.length; i++) {
|
| 99 |
if ( mutation.addedNodes[i].innerText && _this.trim( mutation.addedNodes[i].innerText.trim(), except_characters ) != '' ) {
|
| 100 |
var node = jQuery( mutation.addedNodes[i] );
|
| 101 |
+
var noTranslation = node.attr( 'data-no-translation' );
|
| 102 |
+
if ( (typeof noTranslation !== typeof undefined && noTranslation !== false) || node.parents( '[data-no-translation]').length > 0 ){
|
| 103 |
+
continue;
|
| 104 |
+
}
|
| 105 |
+
|
| 106 |
+
var gettextString = node.attr( 'data-trpgettextoriginal' );
|
| 107 |
+
if ( (typeof gettextString !== typeof undefined && gettextString !== false) || node.parents( '[data-trpgettextoriginal]').length > 0 ){
|
| 108 |
+
continue;
|
| 109 |
+
}
|
| 110 |
+
|
| 111 |
+
var simpleString = node.attr( 'data-trp-translate-id' );
|
| 112 |
+
if ( (typeof simpleString !== typeof undefined && simpleString !== false) || node.parents( '[data-trp-translate-id]').length > 0 ){
|
| 113 |
continue;
|
| 114 |
}
|
| 115 |
|
| 121 |
var all_nodes = jQuery( mutation.addedNodes[i]).find( '*').addBack();
|
| 122 |
var all_strings = all_nodes.contents().filter(function(){
|
| 123 |
if( this.nodeType === 3 && /\S/.test(this.nodeValue) ){
|
| 124 |
+
if ( jQuery(this).parents( '[data-trpgettextoriginal]').length == 0 && jQuery(this).parents( '[data-trp-translate-id]').length == 0 ){
|
| 125 |
+
return this;
|
| 126 |
+
}
|
| 127 |
}
|
| 128 |
});
|
| 129 |
if ( typeof parent.trpEditor !== 'undefined' ) {
|
| 195 |
current_language = trp_data.trp_current_language;
|
| 196 |
original_language = trp_data.trp_original_language;
|
| 197 |
language_to_query = trp_data.trp_language_to_query;
|
| 198 |
+
|
| 199 |
// create an observer instance
|
| 200 |
observer = new MutationObserver( _this.detect_new_strings );
|
|
|
|
| 201 |
// configuration of the observer:
|
| 202 |
var config = {
|
| 203 |
attributes: true,
|
| 206 |
subtree: true
|
| 207 |
};
|
| 208 |
|
| 209 |
+
|
| 210 |
observer.observe( document.body , config );
|
| 211 |
|
| 212 |
+
jQuery( document ).ajaxComplete(function( event, request, settings ) {
|
| 213 |
+
if( window.parent.jQuery('#trp-preview-iframe').length != 0 ) {
|
| 214 |
+
if( typeof settings.data == 'undefined' || settings.data.indexOf('action=trp_') === -1 ) {
|
| 215 |
+
window.parent.jQuery('#trp-preview-iframe').trigger('load');
|
| 216 |
+
}
|
| 217 |
+
}
|
| 218 |
+
});
|
| 219 |
+
|
| 220 |
//try a final attempt at cleaning the gettext wrappers
|
| 221 |
_this.cleanup_gettext_wrapper();
|
| 222 |
};
|
class-translate-press.php
CHANGED
|
@@ -39,7 +39,7 @@ class TRP_Translate_Press{
|
|
| 39 |
define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
|
| 40 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
| 41 |
define( 'TRP_PLUGIN_SLUG', 'translatepress' );
|
| 42 |
-
define( 'TRP_PLUGIN_VERSION', '1.0.
|
| 43 |
|
| 44 |
$this->load_dependencies();
|
| 45 |
$this->initialize_components();
|
|
@@ -110,6 +110,8 @@ class TRP_Translate_Press{
|
|
| 110 |
|
| 111 |
$this->loader->add_action( 'wp_ajax_trp_get_translations', $this->translation_manager, 'get_translations' );
|
| 112 |
$this->loader->add_action( 'wp_ajax_trp_save_translations', $this->translation_manager, 'save_translations' );
|
|
|
|
|
|
|
| 113 |
|
| 114 |
$this->loader->add_action( 'wp_ajax_trp_gettext_get_translations', $this->translation_manager, 'gettext_get_translations' );
|
| 115 |
$this->loader->add_action( 'wp_ajax_trp_gettext_save_translations', $this->translation_manager, 'gettext_save_translations' );
|
|
@@ -123,6 +125,7 @@ class TRP_Translate_Press{
|
|
| 123 |
*/
|
| 124 |
protected function define_frontend_hooks(){
|
| 125 |
$this->loader->add_action( 'wp', $this->translation_render, 'start_output_buffer' );
|
|
|
|
| 126 |
$this->loader->add_action( 'wp_enqueue_scripts', $this->translation_render, 'enqueue_dynamic_translation', 1 );
|
| 127 |
|
| 128 |
|
|
@@ -153,8 +156,10 @@ class TRP_Translate_Press{
|
|
| 153 |
/* handle dynamic texts with gettext */
|
| 154 |
$this->loader->add_filter( 'locale', $this->languages, 'change_locale' );
|
| 155 |
|
| 156 |
-
$this->loader->add_action( 'init', $this->translation_manager, 'create_gettext_translated_global'
|
| 157 |
-
$this->loader->add_action( '
|
|
|
|
|
|
|
| 158 |
$this->loader->add_action( 'shutdown', $this->translation_manager, 'machine_translate_gettext', 100 );
|
| 159 |
|
| 160 |
/* we need the esc_ functions for html and attributes not to escape our tags so we put them back */
|
| 39 |
define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
|
| 40 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
| 41 |
define( 'TRP_PLUGIN_SLUG', 'translatepress' );
|
| 42 |
+
define( 'TRP_PLUGIN_VERSION', '1.0.2' );
|
| 43 |
|
| 44 |
$this->load_dependencies();
|
| 45 |
$this->initialize_components();
|
| 110 |
|
| 111 |
$this->loader->add_action( 'wp_ajax_trp_get_translations', $this->translation_manager, 'get_translations' );
|
| 112 |
$this->loader->add_action( 'wp_ajax_trp_save_translations', $this->translation_manager, 'save_translations' );
|
| 113 |
+
|
| 114 |
+
$this->loader->add_action( 'wp_ajax_trp_process_js_strings_in_translation_editor', $this->translation_render, 'process_js_strings_in_translation_editor' );
|
| 115 |
|
| 116 |
$this->loader->add_action( 'wp_ajax_trp_gettext_get_translations', $this->translation_manager, 'gettext_get_translations' );
|
| 117 |
$this->loader->add_action( 'wp_ajax_trp_gettext_save_translations', $this->translation_manager, 'gettext_save_translations' );
|
| 125 |
*/
|
| 126 |
protected function define_frontend_hooks(){
|
| 127 |
$this->loader->add_action( 'wp', $this->translation_render, 'start_output_buffer' );
|
| 128 |
+
$this->loader->add_action( 'admin_init', $this->translation_render, 'start_output_buffer' );
|
| 129 |
$this->loader->add_action( 'wp_enqueue_scripts', $this->translation_render, 'enqueue_dynamic_translation', 1 );
|
| 130 |
|
| 131 |
|
| 156 |
/* handle dynamic texts with gettext */
|
| 157 |
$this->loader->add_filter( 'locale', $this->languages, 'change_locale' );
|
| 158 |
|
| 159 |
+
$this->loader->add_action( 'init', $this->translation_manager, 'create_gettext_translated_global' );
|
| 160 |
+
$this->loader->add_action( 'admin_init', $this->translation_manager, 'create_gettext_translated_global' );
|
| 161 |
+
$this->loader->add_action( 'init', $this->translation_manager, 'apply_gettext_filter_on_frontend' );
|
| 162 |
+
$this->loader->add_action( 'admin_init', $this->translation_manager, 'apply_gettext_filter' );
|
| 163 |
$this->loader->add_action( 'shutdown', $this->translation_manager, 'machine_translate_gettext', 100 );
|
| 164 |
|
| 165 |
/* we need the esc_ functions for html and attributes not to escape our tags so we put them back */
|
includes/class-settings.php
CHANGED
|
@@ -66,6 +66,7 @@ class TRP_Settings{
|
|
| 66 |
*/
|
| 67 |
public function register_menu_page(){
|
| 68 |
add_options_page( 'TranslatePress', 'TranslatePress', apply_filters( 'trp_settings_capability', 'manage_options' ), 'translate-press', array( $this, 'settings_page_content' ) );
|
|
|
|
| 69 |
}
|
| 70 |
|
| 71 |
/**
|
|
@@ -80,6 +81,13 @@ class TRP_Settings{
|
|
| 80 |
require_once TRP_PLUGIN_DIR . 'partials/main-settings-page.php';
|
| 81 |
}
|
| 82 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 83 |
/**
|
| 84 |
* Register settings option.
|
| 85 |
*/
|
|
@@ -435,6 +443,13 @@ class TRP_Settings{
|
|
| 435 |
'page' => 'trp_license_key'
|
| 436 |
);
|
| 437 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 438 |
|
| 439 |
$active_tab = 'translate-press';
|
| 440 |
if ( isset( $_GET['page'] ) ){
|
| 66 |
*/
|
| 67 |
public function register_menu_page(){
|
| 68 |
add_options_page( 'TranslatePress', 'TranslatePress', apply_filters( 'trp_settings_capability', 'manage_options' ), 'translate-press', array( $this, 'settings_page_content' ) );
|
| 69 |
+
add_submenu_page( 'TRPHidden', 'TranslatePress Addons', 'TRPHidden', 'manage_options', 'trp_addons_page', array($this, 'addons_page_content') );
|
| 70 |
}
|
| 71 |
|
| 72 |
/**
|
| 81 |
require_once TRP_PLUGIN_DIR . 'partials/main-settings-page.php';
|
| 82 |
}
|
| 83 |
|
| 84 |
+
/**
|
| 85 |
+
* Addons page content.
|
| 86 |
+
*/
|
| 87 |
+
public function addons_page_content(){
|
| 88 |
+
require_once TRP_PLUGIN_DIR . 'partials/addons-settings-page.php';
|
| 89 |
+
}
|
| 90 |
+
|
| 91 |
/**
|
| 92 |
* Register settings option.
|
| 93 |
*/
|
| 443 |
'page' => 'trp_license_key'
|
| 444 |
);
|
| 445 |
}
|
| 446 |
+
else{
|
| 447 |
+
$tabs[] = array(
|
| 448 |
+
'name' => __( 'Addons', TRP_PLUGIN_SLUG ),
|
| 449 |
+
'url' => admin_url( 'admin.php?page=trp_addons_page' ),
|
| 450 |
+
'page' => 'trp_addons_page'
|
| 451 |
+
);
|
| 452 |
+
}
|
| 453 |
|
| 454 |
$active_tab = 'translate-press';
|
| 455 |
if ( isset( $_GET['page'] ) ){
|
includes/class-translation-manager.php
CHANGED
|
@@ -30,7 +30,7 @@ class TRP_Translation_Manager{
|
|
| 30 |
* @return bool Whether current page is part of the Translation Editor.
|
| 31 |
*/
|
| 32 |
protected function conditions_met( $mode = 'true' ){
|
| 33 |
-
if ( isset( $
|
| 34 |
if ( current_user_can( 'manage_options' ) && ! is_admin() ) {
|
| 35 |
return true;
|
| 36 |
}else{
|
|
@@ -70,8 +70,10 @@ class TRP_Translation_Manager{
|
|
| 70 |
wp_enqueue_script( 'trp-translation-manager-script', TRP_PLUGIN_URL . 'assets/js/trp-editor-script.js', array(), TRP_PLUGIN_VERSION );
|
| 71 |
wp_enqueue_style( 'trp-translation-manager-style', TRP_PLUGIN_URL . 'assets/css/trp-editor-style.css', array(), TRP_PLUGIN_VERSION );
|
| 72 |
|
| 73 |
-
|
| 74 |
-
|
|
|
|
|
|
|
| 75 |
wp_print_scripts( $scripts_to_print );
|
| 76 |
wp_print_styles( $styles_to_print );
|
| 77 |
}
|
|
@@ -280,7 +282,8 @@ class TRP_Translation_Manager{
|
|
| 280 |
if( !empty( $lang_original_string_details ) ){
|
| 281 |
foreach( $lang_original_string_details as $lang_original_string_detail ){
|
| 282 |
|
| 283 |
-
$
|
|
|
|
| 284 |
|
| 285 |
$db_id = $this->trp_query->insert_gettext_strings( array( array('original' => $lang_original_string_detail['original'], 'translated' => $translated, 'domain' => $lang_original_string_detail['domain']) ), $language );
|
| 286 |
$dictionaries[$language][] = array('id' => $db_id, 'original' => $lang_original_string_detail['original'], 'translated' => ( $translated != $lang_original_string_detail['original'] ) ? $translated : '', 'domain' => $lang_original_string_detail['domain']);
|
|
@@ -466,7 +469,7 @@ class TRP_Translation_Manager{
|
|
| 466 |
* Create a global with the gettext strings that exist in the database
|
| 467 |
*/
|
| 468 |
public function create_gettext_translated_global(){
|
| 469 |
-
if( !is_admin() ) {
|
| 470 |
global $TRP_LANGUAGE;
|
| 471 |
|
| 472 |
global $trp_translated_gettext_texts;
|
|
@@ -481,9 +484,22 @@ class TRP_Translation_Manager{
|
|
| 481 |
}
|
| 482 |
}
|
| 483 |
|
| 484 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 485 |
public function apply_gettext_filter(){
|
| 486 |
-
if( !is_admin() ) {
|
| 487 |
add_filter('gettext', array($this, 'process_gettext_strings'), 100, 3);
|
| 488 |
add_filter('gettext_with_context', array($this, 'process_gettext_strings_with_context'), 100, 4);
|
| 489 |
add_filter('ngettext', array($this, 'process_ngettext_strings'), 100, 5);
|
|
@@ -491,6 +507,55 @@ class TRP_Translation_Manager{
|
|
| 491 |
}
|
| 492 |
}
|
| 493 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 494 |
|
| 495 |
/**
|
| 496 |
* Function that replaces the translations with the ones in the database if they are differnt, wrapps the texts in the html and
|
|
@@ -507,27 +572,15 @@ class TRP_Translation_Manager{
|
|
| 507 |
if( count( $this->settings['publish-languages'] ) <= 1 )
|
| 508 |
return $translation;
|
| 509 |
|
| 510 |
-
if( ( isset( $
|
| 511 |
return $translation;
|
| 512 |
|
|
|
|
|
|
|
|
|
|
| 513 |
|
| 514 |
-
|
| 515 |
-
|
| 516 |
-
if( !empty( $callstack_functions ) ){
|
| 517 |
-
foreach( $callstack_functions as $callstack_function ){
|
| 518 |
-
if( $callstack_function['function'] == 'wp_enqueue_script' ||
|
| 519 |
-
$callstack_function['function'] == 'wp_enqueue_scripts' ||
|
| 520 |
-
$callstack_function['function'] == 'wp_editor' ||
|
| 521 |
-
$callstack_function['function'] == 'wp_enqueue_media' ||
|
| 522 |
-
$callstack_function['function'] == 'wp_register_script' ||
|
| 523 |
-
$callstack_function['function'] == 'wp_print_scripts'||
|
| 524 |
-
$callstack_function['function'] == 'wp_localize_script'||
|
| 525 |
-
$callstack_function['function'] == 'wp_print_media_templates'
|
| 526 |
-
) {
|
| 527 |
-
return $translation;
|
| 528 |
-
}
|
| 529 |
-
}
|
| 530 |
-
}
|
| 531 |
|
| 532 |
global $trp_translated_gettext_texts, $trp_all_gettext_texts;
|
| 533 |
$found_in_db = false;
|
|
@@ -552,7 +605,7 @@ class TRP_Translation_Manager{
|
|
| 552 |
$found_in_db = true;
|
| 553 |
/* update the db if a translation appeared in the po file later */
|
| 554 |
if( empty( $trp_translated_gettext_text['translated'] ) && $translation != $text ) {
|
| 555 |
-
$this->trp_query->update_gettext_strings( array( array( 'id' => $db_id, 'original' => $text, 'translated' => $translation, 'domain' => $domain), 'status' => TRP_Query::HUMAN_REVIEWED ),
|
| 556 |
}
|
| 557 |
|
| 558 |
break;
|
|
@@ -563,7 +616,7 @@ class TRP_Translation_Manager{
|
|
| 563 |
if( !$found_in_db ){
|
| 564 |
if( !in_array( array('original' => $text, 'translated' => $translation, 'domain' => $domain), $trp_all_gettext_texts ) ) {
|
| 565 |
$trp_all_gettext_texts[] = array('original' => $text, 'translated' => $translation, 'domain' => $domain);
|
| 566 |
-
$db_id = $this->trp_query->insert_gettext_strings( array( array('original' => $text, 'translated' => $translation, 'domain' => $domain) ),
|
| 567 |
/* insert it in the global of translated because now it is in the database */
|
| 568 |
$trp_translated_gettext_texts[] = array( 'id' => $db_id, 'original' => $text, 'translated' => ( $translation != $text ) ? $translation : '', 'domain' => $domain );
|
| 569 |
}
|
|
@@ -587,18 +640,52 @@ class TRP_Translation_Manager{
|
|
| 587 |
}
|
| 588 |
}
|
| 589 |
|
| 590 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 591 |
$translation = '<trp-gettext data-trpgettextoriginal=\'' . $db_id . '\'>' . $translation . '</trp-gettext>';
|
| 592 |
}
|
| 593 |
|
| 594 |
return $translation;
|
| 595 |
}
|
| 596 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 597 |
function process_gettext_strings_with_context( $translation, $text, $context, $domain ){
|
| 598 |
$translation = $this->process_gettext_strings( $translation, $text, $domain );
|
| 599 |
return $translation;
|
| 600 |
}
|
| 601 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 602 |
function process_ngettext_strings($translation, $single, $plural, $number, $domain){
|
| 603 |
if( $number == 1 )
|
| 604 |
$translation = $this->process_gettext_strings( $translation, $single, $domain );
|
|
@@ -608,11 +695,24 @@ class TRP_Translation_Manager{
|
|
| 608 |
return $translation;
|
| 609 |
}
|
| 610 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 611 |
function process_ngettext_strings_with_context( $translation, $single, $plural, $number, $context, $domain ){
|
| 612 |
$translation = $this->process_ngettext_strings( $translation, $single, $plural, $number, $domain );
|
| 613 |
return $translation;
|
| 614 |
}
|
| 615 |
|
|
|
|
|
|
|
|
|
|
| 616 |
function machine_translate_gettext(){
|
| 617 |
/* @todo set the original language to detect and also decide if we automatically translate for the default language */
|
| 618 |
global $TRP_LANGUAGE, $trp_gettext_strings_for_machine_translation;
|
|
@@ -661,6 +761,7 @@ class TRP_Translation_Manager{
|
|
| 661 |
return $safe_text;
|
| 662 |
}
|
| 663 |
|
|
|
|
| 664 |
function handle_kses_functions_for_gettext( $tags ){
|
| 665 |
if( is_array($tags) ){
|
| 666 |
$tags['trp-gettext'] = array( 'data-trpgettextoriginal' => true );
|
| 30 |
* @return bool Whether current page is part of the Translation Editor.
|
| 31 |
*/
|
| 32 |
protected function conditions_met( $mode = 'true' ){
|
| 33 |
+
if ( isset( $_REQUEST['trp-edit-translation'] ) && esc_attr( $_REQUEST['trp-edit-translation'] ) == $mode ) {
|
| 34 |
if ( current_user_can( 'manage_options' ) && ! is_admin() ) {
|
| 35 |
return true;
|
| 36 |
}else{
|
| 70 |
wp_enqueue_script( 'trp-translation-manager-script', TRP_PLUGIN_URL . 'assets/js/trp-editor-script.js', array(), TRP_PLUGIN_VERSION );
|
| 71 |
wp_enqueue_style( 'trp-translation-manager-style', TRP_PLUGIN_URL . 'assets/css/trp-editor-style.css', array(), TRP_PLUGIN_VERSION );
|
| 72 |
|
| 73 |
+
wp_enqueue_script( 'trp-translation-overlay', TRP_PLUGIN_URL . 'assets/js/trp-editor-overlay.js', array(), TRP_PLUGIN_VERSION );
|
| 74 |
+
|
| 75 |
+
$scripts_to_print = apply_filters( 'trp-scripts-for-editor', array( 'jquery', 'jquery-ui-core', 'jquery-effects-core', 'jquery-ui-resizable', 'trp-translation-manager-script', 'trp-select2-lib-js', 'trp-translation-overlay' ) );
|
| 76 |
+
$styles_to_print = apply_filters( 'trp-styles-for-editor', array( 'trp-translation-manager-style', 'trp-select2-lib-css', 'dashicons' /*'wp-admin', 'common', 'site-icon', 'buttons'*/ ) );
|
| 77 |
wp_print_scripts( $scripts_to_print );
|
| 78 |
wp_print_styles( $styles_to_print );
|
| 79 |
}
|
| 282 |
if( !empty( $lang_original_string_details ) ){
|
| 283 |
foreach( $lang_original_string_details as $lang_original_string_detail ){
|
| 284 |
|
| 285 |
+
$translations = get_translations_for_domain( $lang_original_string_detail['domain'] );
|
| 286 |
+
$translated = $translations->translate( $lang_original_string_detail['original'] );
|
| 287 |
|
| 288 |
$db_id = $this->trp_query->insert_gettext_strings( array( array('original' => $lang_original_string_detail['original'], 'translated' => $translated, 'domain' => $lang_original_string_detail['domain']) ), $language );
|
| 289 |
$dictionaries[$language][] = array('id' => $db_id, 'original' => $lang_original_string_detail['original'], 'translated' => ( $translated != $lang_original_string_detail['original'] ) ? $translated : '', 'domain' => $lang_original_string_detail['domain']);
|
| 469 |
* Create a global with the gettext strings that exist in the database
|
| 470 |
*/
|
| 471 |
public function create_gettext_translated_global(){
|
| 472 |
+
if( !is_admin() || $this::is_ajax_on_frontend() ) {
|
| 473 |
global $TRP_LANGUAGE;
|
| 474 |
|
| 475 |
global $trp_translated_gettext_texts;
|
| 484 |
}
|
| 485 |
}
|
| 486 |
|
| 487 |
+
/**
|
| 488 |
+
* function that applies the gettext filter on frontend on different hooks depending on what we need
|
| 489 |
+
*/
|
| 490 |
+
public function apply_gettext_filter_on_frontend(){
|
| 491 |
+
/* on ajax hooks from frontend that have the init hook ( we found WooCommerce has it ) apply it earlier */
|
| 492 |
+
if( $this::is_ajax_on_frontend() ){
|
| 493 |
+
add_action( 'init', array( $this, 'apply_gettext_filter' ), 100 );
|
| 494 |
+
}//otherwise start from the wp_head hook
|
| 495 |
+
else{
|
| 496 |
+
add_action( 'wp_head', array( $this, 'apply_gettext_filter' ), 100 );
|
| 497 |
+
}
|
| 498 |
+
}
|
| 499 |
+
|
| 500 |
+
/* apply the gettext filter here */
|
| 501 |
public function apply_gettext_filter(){
|
| 502 |
+
if( !is_admin() || $this::is_ajax_on_frontend() ) {
|
| 503 |
add_filter('gettext', array($this, 'process_gettext_strings'), 100, 3);
|
| 504 |
add_filter('gettext_with_context', array($this, 'process_gettext_strings_with_context'), 100, 4);
|
| 505 |
add_filter('ngettext', array($this, 'process_ngettext_strings'), 100, 5);
|
| 507 |
}
|
| 508 |
}
|
| 509 |
|
| 510 |
+
/**
|
| 511 |
+
* Function that determines if an ajax request came from the frontend
|
| 512 |
+
* @return bool
|
| 513 |
+
*/
|
| 514 |
+
static function is_ajax_on_frontend(){
|
| 515 |
+
//check here for wp ajax or woocommerce ajax
|
| 516 |
+
if( ( defined('DOING_AJAX') && DOING_AJAX ) || ( defined('WC_DOING_AJAX') && WC_DOING_AJAX ) ){
|
| 517 |
+
$referer = '';
|
| 518 |
+
if ( ! empty( $_REQUEST['_wp_http_referer'] ) )
|
| 519 |
+
$referer = wp_unslash( esc_url_raw( $_REQUEST['_wp_http_referer'] ) );
|
| 520 |
+
elseif ( ! empty( $_SERVER['HTTP_REFERER'] ) )
|
| 521 |
+
$referer = wp_unslash( esc_url_raw( $_SERVER['HTTP_REFERER'] ) );
|
| 522 |
+
|
| 523 |
+
//if the request did not come from the admin set propper variables for the request (being processed in ajax they got lost) and return true
|
| 524 |
+
if( ( strpos( $referer, admin_url() ) === false ) ){
|
| 525 |
+
TRP_Translation_Manager::set_vars_in_frontend_ajax_request( $referer );
|
| 526 |
+
return true;
|
| 527 |
+
}
|
| 528 |
+
}
|
| 529 |
+
|
| 530 |
+
return false;
|
| 531 |
+
}
|
| 532 |
+
|
| 533 |
+
/**
|
| 534 |
+
* Function that sets the needed vars in the ajax request. Beeing ajax the globals got reset and also the REQUEST globals
|
| 535 |
+
* @param $referer
|
| 536 |
+
*/
|
| 537 |
+
static function set_vars_in_frontend_ajax_request( $referer ){
|
| 538 |
+
|
| 539 |
+
/* for our own actions don't do nothing */
|
| 540 |
+
if( isset( $_REQUEST['action'] ) && strpos($_REQUEST['action'], 'trp_') === 0 )
|
| 541 |
+
return;
|
| 542 |
+
|
| 543 |
+
/* if the request came from preview mode make sure to keep it */
|
| 544 |
+
if( strpos( $referer, 'trp-edit-translation=preview' ) !== false && !isset( $_REQUEST['trp-edit-translation'] ) ) {
|
| 545 |
+
$_REQUEST['trp-edit-translation'] = 'preview';
|
| 546 |
+
}
|
| 547 |
+
|
| 548 |
+
global $TRP_LANGUAGE;
|
| 549 |
+
$trp = TRP_Translate_Press::get_trp_instance();
|
| 550 |
+
$url_converter = $trp->get_component( 'url_converter' );
|
| 551 |
+
$TRP_LANGUAGE = $url_converter ->get_lang_from_url_string($referer);
|
| 552 |
+
if( empty( $TRP_LANGUAGE ) ) {
|
| 553 |
+
$settings_obj = new TRP_Settings();
|
| 554 |
+
$settings = $settings_obj->get_settings();
|
| 555 |
+
$TRP_LANGUAGE = $settings["default-language"];
|
| 556 |
+
}
|
| 557 |
+
}
|
| 558 |
+
|
| 559 |
|
| 560 |
/**
|
| 561 |
* Function that replaces the translations with the ones in the database if they are differnt, wrapps the texts in the html and
|
| 572 |
if( count( $this->settings['publish-languages'] ) <= 1 )
|
| 573 |
return $translation;
|
| 574 |
|
| 575 |
+
if( ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'true' ) || $domain == TRP_PLUGIN_SLUG )
|
| 576 |
return $translation;
|
| 577 |
|
| 578 |
+
/* for our own actions don't do nothing */
|
| 579 |
+
if( isset( $_REQUEST['action'] ) && strpos($_REQUEST['action'], 'trp_') === 0 )
|
| 580 |
+
return $translation;
|
| 581 |
|
| 582 |
+
|
| 583 |
+
if ( !defined( 'DOING_AJAX' ) || $this::is_ajax_on_frontend() ) {
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 584 |
|
| 585 |
global $trp_translated_gettext_texts, $trp_all_gettext_texts;
|
| 586 |
$found_in_db = false;
|
| 605 |
$found_in_db = true;
|
| 606 |
/* update the db if a translation appeared in the po file later */
|
| 607 |
if( empty( $trp_translated_gettext_text['translated'] ) && $translation != $text ) {
|
| 608 |
+
$this->trp_query->update_gettext_strings( array( array( 'id' => $db_id, 'original' => $text, 'translated' => $translation, 'domain' => $domain), 'status' => TRP_Query::HUMAN_REVIEWED ), get_locale() );
|
| 609 |
}
|
| 610 |
|
| 611 |
break;
|
| 616 |
if( !$found_in_db ){
|
| 617 |
if( !in_array( array('original' => $text, 'translated' => $translation, 'domain' => $domain), $trp_all_gettext_texts ) ) {
|
| 618 |
$trp_all_gettext_texts[] = array('original' => $text, 'translated' => $translation, 'domain' => $domain);
|
| 619 |
+
$db_id = $this->trp_query->insert_gettext_strings( array( array('original' => $text, 'translated' => $translation, 'domain' => $domain) ), get_locale() );
|
| 620 |
/* insert it in the global of translated because now it is in the database */
|
| 621 |
$trp_translated_gettext_texts[] = array( 'id' => $db_id, 'original' => $text, 'translated' => ( $translation != $text ) ? $translation : '', 'domain' => $domain );
|
| 622 |
}
|
| 640 |
}
|
| 641 |
}
|
| 642 |
|
| 643 |
+
$callstack_functions = debug_backtrace(DEBUG_BACKTRACE_IGNORE_ARGS);
|
| 644 |
+
if( !empty( $callstack_functions ) ){
|
| 645 |
+
foreach( $callstack_functions as $callstack_function ){
|
| 646 |
+
if( $callstack_function['function'] == 'wp_enqueue_script' ||
|
| 647 |
+
$callstack_function['function'] == 'wp_enqueue_scripts' ||
|
| 648 |
+
$callstack_function['function'] == 'wp_editor' ||
|
| 649 |
+
$callstack_function['function'] == 'wp_enqueue_media' ||
|
| 650 |
+
$callstack_function['function'] == 'wp_register_script' ||
|
| 651 |
+
$callstack_function['function'] == 'wp_print_scripts'||
|
| 652 |
+
$callstack_function['function'] == 'wp_localize_script'||
|
| 653 |
+
$callstack_function['function'] == 'wp_print_media_templates'
|
| 654 |
+
) {
|
| 655 |
+
return $translation;
|
| 656 |
+
}
|
| 657 |
+
}
|
| 658 |
+
}
|
| 659 |
+
|
| 660 |
+
if( ( !empty($TRP_LANGUAGE) && $this->settings["default-language"] != $TRP_LANGUAGE ) || ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview' ) )
|
| 661 |
$translation = '<trp-gettext data-trpgettextoriginal=\'' . $db_id . '\'>' . $translation . '</trp-gettext>';
|
| 662 |
}
|
| 663 |
|
| 664 |
return $translation;
|
| 665 |
}
|
| 666 |
|
| 667 |
+
/**
|
| 668 |
+
* Function that filters gettext strings with context _x
|
| 669 |
+
* @param $translation
|
| 670 |
+
* @param $text
|
| 671 |
+
* @param $context
|
| 672 |
+
* @param $domain
|
| 673 |
+
* @return string
|
| 674 |
+
*/
|
| 675 |
function process_gettext_strings_with_context( $translation, $text, $context, $domain ){
|
| 676 |
$translation = $this->process_gettext_strings( $translation, $text, $domain );
|
| 677 |
return $translation;
|
| 678 |
}
|
| 679 |
+
|
| 680 |
+
/**
|
| 681 |
+
* function that filters the _n translations
|
| 682 |
+
* @param $translation
|
| 683 |
+
* @param $single
|
| 684 |
+
* @param $plural
|
| 685 |
+
* @param $number
|
| 686 |
+
* @param $domain
|
| 687 |
+
* @return string
|
| 688 |
+
*/
|
| 689 |
function process_ngettext_strings($translation, $single, $plural, $number, $domain){
|
| 690 |
if( $number == 1 )
|
| 691 |
$translation = $this->process_gettext_strings( $translation, $single, $domain );
|
| 695 |
return $translation;
|
| 696 |
}
|
| 697 |
|
| 698 |
+
/**
|
| 699 |
+
* function that filters the _nx translations
|
| 700 |
+
* @param $translation
|
| 701 |
+
* @param $single
|
| 702 |
+
* @param $plural
|
| 703 |
+
* @param $number
|
| 704 |
+
* @param $context
|
| 705 |
+
* @param $domain
|
| 706 |
+
* @return string
|
| 707 |
+
*/
|
| 708 |
function process_ngettext_strings_with_context( $translation, $single, $plural, $number, $context, $domain ){
|
| 709 |
$translation = $this->process_ngettext_strings( $translation, $single, $plural, $number, $domain );
|
| 710 |
return $translation;
|
| 711 |
}
|
| 712 |
|
| 713 |
+
/**
|
| 714 |
+
* function that machine translates gettext strings
|
| 715 |
+
*/
|
| 716 |
function machine_translate_gettext(){
|
| 717 |
/* @todo set the original language to detect and also decide if we automatically translate for the default language */
|
| 718 |
global $TRP_LANGUAGE, $trp_gettext_strings_for_machine_translation;
|
| 761 |
return $safe_text;
|
| 762 |
}
|
| 763 |
|
| 764 |
+
/* let the trp-gettext wrap and data-trpgettextoriginal pass through kses filters */
|
| 765 |
function handle_kses_functions_for_gettext( $tags ){
|
| 766 |
if( is_array($tags) ){
|
| 767 |
$tags['trp-gettext'] = array( 'data-trpgettextoriginal' => true );
|
includes/class-translation-render.php
CHANGED
|
@@ -25,9 +25,11 @@ class TRP_Translation_Render{
|
|
| 25 |
*/
|
| 26 |
public function start_output_buffer(){
|
| 27 |
global $TRP_LANGUAGE;
|
| 28 |
-
if(
|
| 29 |
-
|
| 30 |
-
(
|
|
|
|
|
|
|
| 31 |
return;
|
| 32 |
}
|
| 33 |
|
|
@@ -44,7 +46,7 @@ class TRP_Translation_Render{
|
|
| 44 |
global $TRP_LANGUAGE;
|
| 45 |
if ( in_array( $TRP_LANGUAGE, $this->settings['translation-languages'] ) ) {
|
| 46 |
if ( $TRP_LANGUAGE == $this->settings['default-language'] ){
|
| 47 |
-
if ( isset( $
|
| 48 |
foreach ($this->settings['translation-languages'] as $language) {
|
| 49 |
if ($language != $TRP_LANGUAGE) {
|
| 50 |
// return the first language not default. only used for preview mode
|
|
@@ -189,6 +191,42 @@ class TRP_Translation_Render{
|
|
| 189 |
return $output;
|
| 190 |
}
|
| 191 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 192 |
$no_translate_attribute = 'data-no-translation';
|
| 193 |
|
| 194 |
$translateable_strings = array();
|
|
@@ -223,18 +261,19 @@ class TRP_Translation_Render{
|
|
| 223 |
foreach( $trp_rows as $level ){
|
| 224 |
foreach( $level as $row ){
|
| 225 |
$original_gettext_translation_id = $row->getAttribute('data-trpgettextoriginal');
|
| 226 |
-
|
|
|
|
| 227 |
$row->outertext = $row->innertext();
|
| 228 |
$row->parent()->setAttribute('data-no-translation', '');
|
| 229 |
// we are in the editor
|
| 230 |
-
if (isset($
|
| 231 |
//move up the data-trpgettextoriginal attribute
|
| 232 |
$row->parent()->setAttribute('data-trpgettextoriginal', $original_gettext_translation_id);
|
| 233 |
}
|
| 234 |
}
|
| 235 |
else{
|
| 236 |
$row->outertext = '<trp-wrap class="trp-wrap" data-no-translation';
|
| 237 |
-
if (isset($
|
| 238 |
$row->outertext .= ' data-trpgettextoriginal="'. $original_gettext_translation_id .'"';
|
| 239 |
}
|
| 240 |
$row->outertext .= '>'.$row->innertext().'</trp-wrap>';
|
|
@@ -255,7 +294,7 @@ class TRP_Translation_Render{
|
|
| 255 |
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
|
| 256 |
$row->setAttribute('data-no-translation', '');
|
| 257 |
// we are in the editor
|
| 258 |
-
if (isset($
|
| 259 |
$original_gettext_translation_id = $nfv_row->getAttribute('data-trpgettextoriginal');
|
| 260 |
$row->setAttribute('data-trpgettextoriginal', $original_gettext_translation_id);
|
| 261 |
}
|
|
@@ -318,7 +357,7 @@ class TRP_Translation_Render{
|
|
| 318 |
|
| 319 |
$translated_strings = $this->process_strings( $translateable_strings, $language_code );
|
| 320 |
|
| 321 |
-
$preview_mode = isset( $
|
| 322 |
if ( $preview_mode ) {
|
| 323 |
$translated_string_ids = $this->trp_query->get_string_ids($translateable_strings, $language_code);
|
| 324 |
}
|
|
@@ -609,7 +648,7 @@ class TRP_Translation_Render{
|
|
| 609 |
|
| 610 |
global $TRP_LANGUAGE;
|
| 611 |
|
| 612 |
-
if ( $TRP_LANGUAGE != $this->settings['default-language'] || ( isset( $
|
| 613 |
$language_to_query = $TRP_LANGUAGE;
|
| 614 |
if ( $TRP_LANGUAGE == $this->settings['default-language'] ) {
|
| 615 |
foreach ($this->settings['translation-languages'] as $language) {
|
|
@@ -626,7 +665,7 @@ class TRP_Translation_Render{
|
|
| 626 |
'trp_original_language' => $this->settings['default-language'],
|
| 627 |
'trp_current_language' => $TRP_LANGUAGE
|
| 628 |
);
|
| 629 |
-
if ( isset( $
|
| 630 |
$trp_data['trp_ajax_url'] = $trp_data['trp_wp_ajax_url'];
|
| 631 |
}
|
| 632 |
wp_enqueue_script('trp-dynamic-translator', TRP_PLUGIN_URL . 'assets/js/trp-translate-dom-changes.js', array('jquery', 'trp-language-switcher'), TRP_PLUGIN_VERSION );
|
| 25 |
*/
|
| 26 |
public function start_output_buffer(){
|
| 27 |
global $TRP_LANGUAGE;
|
| 28 |
+
if( TRP_Translation_Manager::is_ajax_on_frontend() ){
|
| 29 |
+
//in this case move forward
|
| 30 |
+
}else if( is_admin() ||
|
| 31 |
+
( $TRP_LANGUAGE == $this->settings['default-language'] && ( ! isset( $_REQUEST['trp-edit-translation'] ) || ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] != 'preview' ) ) ) ||
|
| 32 |
+
( isset( $_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'true' ) ) {
|
| 33 |
return;
|
| 34 |
}
|
| 35 |
|
| 46 |
global $TRP_LANGUAGE;
|
| 47 |
if ( in_array( $TRP_LANGUAGE, $this->settings['translation-languages'] ) ) {
|
| 48 |
if ( $TRP_LANGUAGE == $this->settings['default-language'] ){
|
| 49 |
+
if ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview' ) {
|
| 50 |
foreach ($this->settings['translation-languages'] as $language) {
|
| 51 |
if ($language != $TRP_LANGUAGE) {
|
| 52 |
// return the first language not default. only used for preview mode
|
| 191 |
return $output;
|
| 192 |
}
|
| 193 |
|
| 194 |
+
|
| 195 |
+
/* if there is an ajax request and we have a json response we need to parse it and only translate the nodes that contain html */
|
| 196 |
+
if( TRP_Translation_Manager::is_ajax_on_frontend() ) {
|
| 197 |
+
|
| 198 |
+
/* if it's one of our own ajax calls don't do nothing */
|
| 199 |
+
if( !empty( $_REQUEST['action'] ) && strpos( $_REQUEST['action'], 'trp_' ) === 0 ){
|
| 200 |
+
return $output;
|
| 201 |
+
}
|
| 202 |
+
|
| 203 |
+
//check if we have a json response
|
| 204 |
+
if (is_array($json_array = json_decode($output, true))) {
|
| 205 |
+
if (!empty($json_array)) {
|
| 206 |
+
foreach ($json_array as $key => $value) {
|
| 207 |
+
if (!empty($value)) {
|
| 208 |
+
if (!is_array($value)) { //if the current element is not an array check if it a html text and translate
|
| 209 |
+
if (html_entity_decode((string)$value) != strip_tags(html_entity_decode((string)$value))) {
|
| 210 |
+
$json_array[$key] = $this->translate_page(stripslashes($value));
|
| 211 |
+
}
|
| 212 |
+
} else {//look for the html elements
|
| 213 |
+
foreach( $value as $k => $v ){
|
| 214 |
+
if( !empty( $v ) ) {
|
| 215 |
+
if (!is_array($v)) {
|
| 216 |
+
if (html_entity_decode((string)$v) != strip_tags(html_entity_decode((string)$v))) {
|
| 217 |
+
$json_array[$key][$k] = $this->translate_page(stripslashes($v));
|
| 218 |
+
}
|
| 219 |
+
}
|
| 220 |
+
}
|
| 221 |
+
}
|
| 222 |
+
}
|
| 223 |
+
}
|
| 224 |
+
}
|
| 225 |
+
}
|
| 226 |
+
return json_encode($json_array);
|
| 227 |
+
}
|
| 228 |
+
}
|
| 229 |
+
|
| 230 |
$no_translate_attribute = 'data-no-translation';
|
| 231 |
|
| 232 |
$translateable_strings = array();
|
| 261 |
foreach( $trp_rows as $level ){
|
| 262 |
foreach( $level as $row ){
|
| 263 |
$original_gettext_translation_id = $row->getAttribute('data-trpgettextoriginal');
|
| 264 |
+
/* Parent node has no other children and no other innertext besides the current node */
|
| 265 |
+
if( count( $row->parent()->children ) == 1 && $row->parent()->innertext == $row->outertext ){
|
| 266 |
$row->outertext = $row->innertext();
|
| 267 |
$row->parent()->setAttribute('data-no-translation', '');
|
| 268 |
// we are in the editor
|
| 269 |
+
if (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview') {
|
| 270 |
//move up the data-trpgettextoriginal attribute
|
| 271 |
$row->parent()->setAttribute('data-trpgettextoriginal', $original_gettext_translation_id);
|
| 272 |
}
|
| 273 |
}
|
| 274 |
else{
|
| 275 |
$row->outertext = '<trp-wrap class="trp-wrap" data-no-translation';
|
| 276 |
+
if (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview') {
|
| 277 |
$row->outertext .= ' data-trpgettextoriginal="'. $original_gettext_translation_id .'"';
|
| 278 |
}
|
| 279 |
$row->outertext .= '>'.$row->innertext().'</trp-wrap>';
|
| 294 |
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
|
| 295 |
$row->setAttribute('data-no-translation', '');
|
| 296 |
// we are in the editor
|
| 297 |
+
if (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview') {
|
| 298 |
$original_gettext_translation_id = $nfv_row->getAttribute('data-trpgettextoriginal');
|
| 299 |
$row->setAttribute('data-trpgettextoriginal', $original_gettext_translation_id);
|
| 300 |
}
|
| 357 |
|
| 358 |
$translated_strings = $this->process_strings( $translateable_strings, $language_code );
|
| 359 |
|
| 360 |
+
$preview_mode = isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview';
|
| 361 |
if ( $preview_mode ) {
|
| 362 |
$translated_string_ids = $this->trp_query->get_string_ids($translateable_strings, $language_code);
|
| 363 |
}
|
| 648 |
|
| 649 |
global $TRP_LANGUAGE;
|
| 650 |
|
| 651 |
+
if ( $TRP_LANGUAGE != $this->settings['default-language'] || ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview' ) ) {
|
| 652 |
$language_to_query = $TRP_LANGUAGE;
|
| 653 |
if ( $TRP_LANGUAGE == $this->settings['default-language'] ) {
|
| 654 |
foreach ($this->settings['translation-languages'] as $language) {
|
| 665 |
'trp_original_language' => $this->settings['default-language'],
|
| 666 |
'trp_current_language' => $TRP_LANGUAGE
|
| 667 |
);
|
| 668 |
+
if ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview' ) {
|
| 669 |
$trp_data['trp_ajax_url'] = $trp_data['trp_wp_ajax_url'];
|
| 670 |
}
|
| 671 |
wp_enqueue_script('trp-dynamic-translator', TRP_PLUGIN_URL . 'assets/js/trp-translate-dom-changes.js', array('jquery', 'trp-language-switcher'), TRP_PLUGIN_VERSION );
|
index.php
CHANGED
|
@@ -3,7 +3,7 @@
|
|
| 3 |
Plugin Name: TranslatePress - Multilingual
|
| 4 |
Plugin URI: https://translatepress.com/
|
| 5 |
Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
|
| 6 |
-
Version: 1.0.
|
| 7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
| 8 |
Author URI: https://cozmoslabs.com/
|
| 9 |
License: GPL2
|
| 3 |
Plugin Name: TranslatePress - Multilingual
|
| 4 |
Plugin URI: https://translatepress.com/
|
| 5 |
Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
|
| 6 |
+
Version: 1.0.2
|
| 7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
| 8 |
Author URI: https://cozmoslabs.com/
|
| 9 |
License: GPL2
|
partials/addons-settings-page.php
ADDED
|
@@ -0,0 +1,30 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<div id="trp-addons-page" class="wrap">
|
| 2 |
+
|
| 3 |
+
<h1> <?php _e( 'TranslatePress Settings', TRP_PLUGIN_SLUG );?></h1>
|
| 4 |
+
<?php do_action ( 'trp_settings_navigation_tabs' ); ?>
|
| 5 |
+
|
| 6 |
+
<div class="grid feat-header">
|
| 7 |
+
<div class="grid-cell">
|
| 8 |
+
<h2>Advanced Addons</h2>
|
| 9 |
+
<p>These addons extend your translation plugin and are available in the Personal, Plus and Professional plans.</p>
|
| 10 |
+
</div>
|
| 11 |
+
</div>
|
| 12 |
+
|
| 13 |
+
<div class="grid">
|
| 14 |
+
<div class="grid-cell" style="overflow:hidden;">
|
| 15 |
+
<a href="https://translatepress.com/pricing/" target="_blank"><img src="<?php echo plugins_url('../assets/images/seo_icon_translatepress.png', __FILE__) ?>" alt="SEO" style="float: left; margin: 0 1.5rem 1.5rem 0;"></a>
|
| 16 |
+
<h3><a href="https://translatepress.com/pricing/" target="_blank">SEO Pack</a></h3>
|
| 17 |
+
<p>SEO support for page slug, page title, description and facebook and twitter social graph information. The HTML lang attribute is properly set.</p>
|
| 18 |
+
</div>
|
| 19 |
+
</div>
|
| 20 |
+
|
| 21 |
+
<div class="grid">
|
| 22 |
+
<div class="grid-cell" style="overflow:hidden;">
|
| 23 |
+
<a href="https://translatepress.com/pricing/" target="_blank"><img src="<?php echo plugins_url('../assets/images/multiple_lang_icon.png', __FILE__) ?>" alt="Multiple Languages" style="float: left; margin: 0 1.5rem 1.5rem 0;"></a>
|
| 24 |
+
<h3><a href="https://translatepress.com/pricing/" target="_blank">Multiple Languages</a></h3>
|
| 25 |
+
<p>Add as many languages as you need for your project to go global.<br>
|
| 26 |
+
Publish your language only when all your translations are done. </p>
|
| 27 |
+
</div>
|
| 28 |
+
</div>
|
| 29 |
+
|
| 30 |
+
</div>
|
partials/translation-manager.php
CHANGED
|
@@ -41,7 +41,7 @@
|
|
| 41 |
<div id="trp-controls">
|
| 42 |
<div class="trp-controls-container">
|
| 43 |
<div id="trp-close-save">
|
| 44 |
-
<a id="trp-controls-close" href="#"
|
| 45 |
<div id="trp-save-container">
|
| 46 |
<span id="trp-translation-saved" style="display: none"><?php _e( 'Saved!', TRP_PLUGIN_SLUG ); ?></span>
|
| 47 |
<span class="trp-ajax-loader" style="display: none" id="trp-string-saved-ajax-loader">
|
|
@@ -122,6 +122,7 @@
|
|
| 122 |
<iframe id="trp-preview-iframe" onload="trpEditor.initialize();" src="<?php echo add_query_arg( 'trp-edit-translation', 'preview', $current_url );?>" width="100%" height="100%"></iframe>
|
| 123 |
</div>
|
| 124 |
</div>
|
|
|
|
| 125 |
</body>
|
| 126 |
</html>
|
| 127 |
|
| 41 |
<div id="trp-controls">
|
| 42 |
<div class="trp-controls-container">
|
| 43 |
<div id="trp-close-save">
|
| 44 |
+
<a id="trp-controls-close" href="#"></a>
|
| 45 |
<div id="trp-save-container">
|
| 46 |
<span id="trp-translation-saved" style="display: none"><?php _e( 'Saved!', TRP_PLUGIN_SLUG ); ?></span>
|
| 47 |
<span class="trp-ajax-loader" style="display: none" id="trp-string-saved-ajax-loader">
|
| 122 |
<iframe id="trp-preview-iframe" onload="trpEditor.initialize();" src="<?php echo add_query_arg( 'trp-edit-translation', 'preview', $current_url );?>" width="100%" height="100%"></iframe>
|
| 123 |
</div>
|
| 124 |
</div>
|
| 125 |
+
|
| 126 |
</body>
|
| 127 |
</html>
|
| 128 |
|
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
|
| 5 |
Requires at least: 3.1.0
|
| 6 |
Tested up to: 4.8.2
|
| 7 |
-
Stable tag: 1.0.
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
|
@@ -104,6 +104,12 @@ For more information please check out [TranslatePress documentation](https://tra
|
|
| 104 |
|
| 105 |
== Changelog ==
|
| 106 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 107 |
= 1.0.1 =
|
| 108 |
* Fixed incorrect blog prefix name for Multisite subsites on admin_bar gettext hook.
|
| 109 |
* Fixed Translate Page admin bar button sometimes not having the correct url for entering TP Editor Mode
|
| 4 |
Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate
|
| 5 |
Requires at least: 3.1.0
|
| 6 |
Tested up to: 4.8.2
|
| 7 |
+
Stable tag: 1.0.2
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
| 104 |
|
| 105 |
== Changelog ==
|
| 106 |
|
| 107 |
+
= 1.0.2 =
|
| 108 |
+
* Translation interface improvements
|
| 109 |
+
* Fixed issues with strings loaded with ajax
|
| 110 |
+
* Added an addon page
|
| 111 |
+
* Fixed bug with gettext node accidentally wrapping another string too.
|
| 112 |
+
|
| 113 |
= 1.0.1 =
|
| 114 |
* Fixed incorrect blog prefix name for Multisite subsites on admin_bar gettext hook.
|
| 115 |
* Fixed Translate Page admin bar button sometimes not having the correct url for entering TP Editor Mode
|
