Version Description
- Refactored the get_url_for_language() function which should fix a lot of problems with links
- Speed improvements
- Fixed translation block icon when creating a new block
- Fixed issues with trp tags leftovers in html
- Fixed issues with gettext strings that weren't detected correctly
- Add support for relative url's
- Added warning in settings about controlling costs of Google API
- Changed API key field description. Added feature to show/hide API key field based on Google Translate Active Yes/No
- Fixed Translated-dom-changes string not translated through trp-ajax.
- Fixed 400 errors in google translate API
Download this release
Release Info
| Developer | madalin.ungureanu |
| Plugin | |
| Version | 1.3.6 |
| Comparing to | |
| See all releases | |
Code changes from version 1.3.5 to 1.3.6
- assets/js/trp-back-end-script.js +158 -118
- assets/js/trp-editor-script.js +33 -23
- class-translate-press.php +2 -2
- includes/class-machine-translator.php +52 -15
- includes/class-settings.php +7 -2
- includes/class-translation-manager.php +27 -11
- includes/class-translation-render.php +25 -11
- includes/class-uri.php +376 -0
- includes/class-url-converter.php +105 -64
- includes/functions.php +49 -0
- includes/trp-ajax.php +2 -2
- index.php +1 -1
- languages/translatepress-multilingual.catalog.php +5 -5
- languages/translatepress-multilingual.pot +62 -62
- partials/main-settings-page.php +6 -5
- partials/test-google-key-settings-page.php +9 -13
- readme.txt +13 -1
assets/js/trp-back-end-script.js
CHANGED
|
@@ -1,154 +1,194 @@
|
|
| 1 |
-
|
| 2 |
-
* Script used in Settings Page
|
| 3 |
*/
|
| 4 |
|
| 5 |
-
function
|
| 6 |
-
var _this = this;
|
| 7 |
-
var duplicate_url_error_message;
|
| 8 |
-
var iso_codes;
|
| 9 |
|
| 10 |
/**
|
| 11 |
-
*
|
| 12 |
*/
|
| 13 |
-
|
| 14 |
-
|
| 15 |
-
|
| 16 |
-
|
| 17 |
-
|
| 18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 19 |
|
| 20 |
-
|
| 21 |
-
|
| 22 |
-
|
| 23 |
-
|
| 24 |
-
if ( has_duplicates ( url_slugs ) ){
|
| 25 |
-
return_slug = new_language;
|
| 26 |
-
}
|
| 27 |
-
return return_slug.toLowerCase();
|
| 28 |
-
};
|
| 29 |
|
| 30 |
-
|
| 31 |
-
var selected_language = jQuery( '#trp-select-language' );
|
| 32 |
-
var new_language = selected_language.val();
|
| 33 |
-
if ( new_language == "" ){
|
| 34 |
-
return;
|
| 35 |
-
}
|
| 36 |
|
| 37 |
-
|
| 38 |
-
jQuery(
|
| 39 |
-
return;
|
| 40 |
-
}
|
| 41 |
|
| 42 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 43 |
|
| 44 |
-
|
| 45 |
-
|
| 46 |
|
| 47 |
-
|
| 48 |
-
|
| 49 |
-
|
| 50 |
-
select.removeAttr( 'disabled' );
|
| 51 |
-
select.find( 'option' ).each(function(index, el){
|
| 52 |
-
el.text = el.text.replace('Default: ', '');
|
| 53 |
-
})
|
| 54 |
|
| 55 |
-
|
| 56 |
-
|
|
|
|
| 57 |
|
| 58 |
-
|
| 59 |
-
checkbox.removeAttr( 'disabled' );
|
| 60 |
-
checkbox.val( new_language );
|
| 61 |
|
| 62 |
-
|
| 63 |
-
|
| 64 |
-
|
| 65 |
|
| 66 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 67 |
|
| 68 |
-
|
| 69 |
-
|
| 70 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 71 |
|
| 72 |
-
|
| 73 |
-
|
| 74 |
-
|
| 75 |
-
|
| 76 |
-
|
| 77 |
-
|
| 78 |
-
|
| 79 |
|
| 80 |
-
|
| 81 |
-
|
| 82 |
-
jQuery( '.trp-hidden-default-language' ).val( selected_language );
|
| 83 |
-
jQuery( '.trp-translation-published[disabled]' ).val( selected_language );
|
| 84 |
-
jQuery( '.trp-translation-language[disabled]').val( selected_language ).trigger( 'change' );
|
| 85 |
-
};
|
| 86 |
|
| 87 |
-
|
| 88 |
-
|
| 89 |
-
for (var i = 0; i < array.length; ++i) {
|
| 90 |
-
var value = array[i];
|
| 91 |
-
if (value in valuesSoFar) {
|
| 92 |
-
return true;
|
| 93 |
}
|
| 94 |
-
valuesSoFar[value] = true;
|
| 95 |
-
}
|
| 96 |
-
return false;
|
| 97 |
-
}
|
| 98 |
|
| 99 |
-
|
| 100 |
-
|
| 101 |
-
jQuery( '.trp-language-slug' ).each( function (){
|
| 102 |
-
url_slugs.push( jQuery( this ).val().toLowerCase() );
|
| 103 |
-
} );
|
| 104 |
-
return url_slugs;
|
| 105 |
-
};
|
| 106 |
|
| 107 |
-
|
| 108 |
-
|
| 109 |
-
|
| 110 |
-
|
| 111 |
-
|
| 112 |
-
|
| 113 |
-
|
| 114 |
|
| 115 |
-
|
| 116 |
-
|
| 117 |
-
var new_language = select.val();
|
| 118 |
-
var row = jQuery( select ).parents( '.trp-language' ) ;
|
| 119 |
-
row.find( '.trp-language-slug' ).attr( 'name', 'trp_settings[url-slugs][' + new_language + ']').val( '' ).val( _this.get_default_url_slug( new_language ) );
|
| 120 |
-
row.find( '.trp-translation-published' ).val( new_language );
|
| 121 |
-
};
|
| 122 |
|
| 123 |
-
|
| 124 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 125 |
|
| 126 |
-
|
| 127 |
-
|
|
|
|
|
|
|
| 128 |
}
|
| 129 |
|
| 130 |
-
|
| 131 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 132 |
|
| 133 |
-
|
| 134 |
-
|
| 135 |
-
|
| 136 |
-
jQuery( '#trp-default-language' ).on( 'change', _this.update_default_language );
|
| 137 |
-
jQuery( "form[action='options.php']").on ( 'submit', _this.check_unique_url_slugs );
|
| 138 |
-
jQuery( '#trp-languages-table' ).on( 'change', '.trp-translation-language', _this.update_url_slug_and_status );
|
| 139 |
};
|
| 140 |
|
| 141 |
-
|
| 142 |
-
}
|
| 143 |
-
|
| 144 |
-
var trpSettingsLanguages;
|
| 145 |
-
|
| 146 |
-
// Initialize the Translate Press Settings after jQuery is ready
|
| 147 |
-
jQuery( function() {
|
| 148 |
-
trpSettingsLanguages = new TRP_Settings_Language_Selector();
|
| 149 |
|
| 150 |
jQuery('#trp-default-language').on("select2:selecting", function(e) {
|
| 151 |
jQuery("#trp-options .warning").show('fast');
|
| 152 |
});
|
|
|
|
|
|
|
|
|
|
|
|
|
| 153 |
});
|
| 154 |
|
| 1 |
+
/*
|
| 2 |
+
* Script used in Settings Page
|
| 3 |
*/
|
| 4 |
|
| 5 |
+
jQuery( function() {
|
|
|
|
|
|
|
|
|
|
| 6 |
|
| 7 |
/**
|
| 8 |
+
* Change the language selector and slugs
|
| 9 |
*/
|
| 10 |
+
function TRP_Settings_Language_Selector() {
|
| 11 |
+
var _this = this;
|
| 12 |
+
var duplicate_url_error_message;
|
| 13 |
+
var iso_codes;
|
| 14 |
+
|
| 15 |
+
/**
|
| 16 |
+
* Initialize select to become select2
|
| 17 |
+
*/
|
| 18 |
+
this.initialize_select2 = function () {
|
| 19 |
+
jQuery('.trp-select2').each(function () {
|
| 20 |
+
var select_element = jQuery(this);
|
| 21 |
+
select_element.select2(/*arguments*/);
|
| 22 |
+
});
|
| 23 |
+
};
|
| 24 |
+
|
| 25 |
+
this.get_default_url_slug = function( new_language ){
|
| 26 |
+
var return_slug = iso_codes[new_language];
|
| 27 |
+
var url_slugs = _this.get_existing_url_slugs();
|
| 28 |
+
url_slugs.push( return_slug );
|
| 29 |
+
if ( has_duplicates ( url_slugs ) ){
|
| 30 |
+
return_slug = new_language;
|
| 31 |
+
}
|
| 32 |
+
return return_slug.toLowerCase();
|
| 33 |
+
};
|
| 34 |
+
|
| 35 |
+
this.add_language = function(){
|
| 36 |
+
var selected_language = jQuery( '#trp-select-language' );
|
| 37 |
+
var new_language = selected_language.val();
|
| 38 |
+
if ( new_language == "" ){
|
| 39 |
+
return;
|
| 40 |
+
}
|
| 41 |
|
| 42 |
+
if (jQuery( "#trp-languages-table .trp-language" ).length >= 2 ){
|
| 43 |
+
jQuery(".trp-upsell-multiple-languages").show('fast');
|
| 44 |
+
return;
|
| 45 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 46 |
|
| 47 |
+
selected_language.val( '' ).trigger( 'change' );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 48 |
|
| 49 |
+
var new_option = jQuery( '.trp-language' ).first().clone();
|
| 50 |
+
new_option = jQuery( new_option );
|
|
|
|
|
|
|
| 51 |
|
| 52 |
+
new_option.find( '.trp-hidden-default-language' ).remove();
|
| 53 |
+
new_option.find( '.select2-container' ).remove();
|
| 54 |
+
var select = new_option.find( 'select.trp-translation-language' );
|
| 55 |
+
select.removeAttr( 'disabled' );
|
| 56 |
+
select.find( 'option' ).each(function(index, el){
|
| 57 |
+
el.text = el.text.replace('Default: ', '');
|
| 58 |
+
})
|
| 59 |
|
| 60 |
+
select.val( new_language );
|
| 61 |
+
select.select2();
|
| 62 |
|
| 63 |
+
var checkbox = new_option.find( 'input.trp-translation-published' );
|
| 64 |
+
checkbox.removeAttr( 'disabled' );
|
| 65 |
+
checkbox.val( new_language );
|
|
|
|
|
|
|
|
|
|
|
|
|
| 66 |
|
| 67 |
+
var url_slug = new_option.find( 'input.trp-language-slug' );
|
| 68 |
+
url_slug.val( _this.get_default_url_slug( new_language ) );
|
| 69 |
+
url_slug.attr('name', 'trp_settings[url-slugs][' + new_language + ']' );
|
| 70 |
|
| 71 |
+
var remove = new_option.find( '.trp-remove-language' ).toggle();
|
|
|
|
|
|
|
| 72 |
|
| 73 |
+
new_option = jQuery( '#trp-sortable-languages' ).append( new_option );
|
| 74 |
+
new_option.find( '.trp-remove-language' ).last().click( _this.remove_language );
|
| 75 |
+
};
|
| 76 |
|
| 77 |
+
this.remove_language = function( element ){
|
| 78 |
+
var message = jQuery( element.target ).attr( 'data-confirm-message' );
|
| 79 |
+
var confirmed = confirm( message );
|
| 80 |
+
if ( confirmed ) {
|
| 81 |
+
jQuery ( element.target ).parent().parent().remove();
|
| 82 |
+
}
|
| 83 |
+
};
|
| 84 |
+
|
| 85 |
+
this.update_default_language = function(){
|
| 86 |
+
var selected_language = jQuery( '#trp-default-language').val();
|
| 87 |
+
jQuery( '.trp-hidden-default-language' ).val( selected_language );
|
| 88 |
+
jQuery( '.trp-translation-published[disabled]' ).val( selected_language );
|
| 89 |
+
jQuery( '.trp-translation-language[disabled]').val( selected_language ).trigger( 'change' );
|
| 90 |
+
};
|
| 91 |
+
|
| 92 |
+
function has_duplicates(array) {
|
| 93 |
+
var valuesSoFar = Object.create(null);
|
| 94 |
+
for (var i = 0; i < array.length; ++i) {
|
| 95 |
+
var value = array[i];
|
| 96 |
+
if (value in valuesSoFar) {
|
| 97 |
+
return true;
|
| 98 |
+
}
|
| 99 |
+
valuesSoFar[value] = true;
|
| 100 |
+
}
|
| 101 |
+
return false;
|
| 102 |
+
}
|
| 103 |
|
| 104 |
+
this.get_existing_url_slugs = function(){
|
| 105 |
+
var url_slugs = [];
|
| 106 |
+
jQuery( '.trp-language-slug' ).each( function (){
|
| 107 |
+
url_slugs.push( jQuery( this ).val().toLowerCase() );
|
| 108 |
+
} );
|
| 109 |
+
return url_slugs;
|
| 110 |
+
};
|
| 111 |
+
|
| 112 |
+
this.check_unique_url_slugs = function (event){
|
| 113 |
+
var url_slugs = _this.get_existing_url_slugs();
|
| 114 |
+
if ( has_duplicates(url_slugs)){
|
| 115 |
+
alert( duplicate_url_error_message );
|
| 116 |
+
event.preventDefault();
|
| 117 |
+
}
|
| 118 |
+
};
|
| 119 |
|
| 120 |
+
this.update_url_slug_and_status = function ( event ) {
|
| 121 |
+
var select = jQuery( event.target );
|
| 122 |
+
var new_language = select.val();
|
| 123 |
+
var row = jQuery( select ).parents( '.trp-language' ) ;
|
| 124 |
+
row.find( '.trp-language-slug' ).attr( 'name', 'trp_settings[url-slugs][' + new_language + ']').val( '' ).val( _this.get_default_url_slug( new_language ) );
|
| 125 |
+
row.find( '.trp-translation-published' ).val( new_language );
|
| 126 |
+
};
|
| 127 |
|
| 128 |
+
this.initialize = function () {
|
| 129 |
+
this.initialize_select2();
|
|
|
|
|
|
|
|
|
|
|
|
|
| 130 |
|
| 131 |
+
if ( !jQuery( '.trp-language-selector-limited' ).length ){
|
| 132 |
+
return;
|
|
|
|
|
|
|
|
|
|
|
|
|
| 133 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
| 134 |
|
| 135 |
+
duplicate_url_error_message = trp_url_slugs_info['error_message_duplicate_slugs'];
|
| 136 |
+
iso_codes = trp_url_slugs_info['iso_codes'];
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 137 |
|
| 138 |
+
jQuery( '#trp-sortable-languages' ).sortable({ handle: '.trp-sortable-handle' });
|
| 139 |
+
jQuery( '#trp-add-language' ).click( _this.add_language );
|
| 140 |
+
jQuery( '.trp-remove-language' ).click( _this.remove_language );
|
| 141 |
+
jQuery( '#trp-default-language' ).on( 'change', _this.update_default_language );
|
| 142 |
+
jQuery( "form[action='options.php']").on ( 'submit', _this.check_unique_url_slugs );
|
| 143 |
+
jQuery( '#trp-languages-table' ).on( 'change', '.trp-translation-language', _this.update_url_slug_and_status );
|
| 144 |
+
};
|
| 145 |
|
| 146 |
+
this.initialize();
|
| 147 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 148 |
|
| 149 |
+
/*
|
| 150 |
+
* Show Google Translate API Key only when Google Translate is active
|
| 151 |
+
*/
|
| 152 |
+
function TRP_Field_Toggler (){
|
| 153 |
+
var _$setting_toggled;
|
| 154 |
+
var _$trigger_field;
|
| 155 |
+
var _trigger_field_value_for_show;
|
| 156 |
+
|
| 157 |
+
function show_hide_based_on_value( value ) {
|
| 158 |
+
if ( value === _trigger_field_value_for_show ) {
|
| 159 |
+
_$setting_toggled.show();
|
| 160 |
+
} else {
|
| 161 |
+
_$setting_toggled.hide();
|
| 162 |
+
}
|
| 163 |
+
}
|
| 164 |
|
| 165 |
+
function add_event_on_change() {
|
| 166 |
+
_$trigger_field.on('change', function () {
|
| 167 |
+
show_hide_based_on_value( this.value );
|
| 168 |
+
});
|
| 169 |
}
|
| 170 |
|
| 171 |
+
function init( trigger_select_id, setting_id, value_for_show ){
|
| 172 |
+
_trigger_field_value_for_show = value_for_show;
|
| 173 |
+
_$trigger_field = jQuery( trigger_select_id );
|
| 174 |
+
_$setting_toggled = jQuery( setting_id ).parents('tr');
|
| 175 |
+
show_hide_based_on_value( _$trigger_field.val() );
|
| 176 |
+
add_event_on_change();
|
| 177 |
+
}
|
| 178 |
|
| 179 |
+
return {
|
| 180 |
+
init: init
|
| 181 |
+
};
|
|
|
|
|
|
|
|
|
|
| 182 |
};
|
| 183 |
|
| 184 |
+
var trpSettingsLanguages = new TRP_Settings_Language_Selector();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
|
| 186 |
jQuery('#trp-default-language').on("select2:selecting", function(e) {
|
| 187 |
jQuery("#trp-options .warning").show('fast');
|
| 188 |
});
|
| 189 |
+
|
| 190 |
+
var trpGoogleTranslate = TRP_Field_Toggler();
|
| 191 |
+
trpGoogleTranslate.init('#trp-g-translate', '#trp-g-translate-key', 'yes' );
|
| 192 |
+
|
| 193 |
});
|
| 194 |
|
assets/js/trp-editor-script.js
CHANGED
|
@@ -1014,6 +1014,7 @@ function TRP_String( language, array_index ){
|
|
| 1014 |
}
|
| 1015 |
|
| 1016 |
if ( _this.jquery_object && _this.block_type != 2 ) {
|
|
|
|
| 1017 |
if ( trp_language == trp_on_screen_language ) {
|
| 1018 |
var text_to_set = null;
|
| 1019 |
if (new_settings.hasOwnProperty('translated') && new_settings.translated != _this.translated) {
|
|
@@ -1022,7 +1023,6 @@ function TRP_String( language, array_index ){
|
|
| 1022 |
if (new_settings.hasOwnProperty('status') && new_settings.status == 0) {
|
| 1023 |
text_to_set = _this.original;
|
| 1024 |
}
|
| 1025 |
-
_this.wrap_special_html_elements();
|
| 1026 |
_this.set_text_in_iframe( text_to_set, _this.jquery_object );
|
| 1027 |
}
|
| 1028 |
|
|
@@ -1038,19 +1038,23 @@ function TRP_String( language, array_index ){
|
|
| 1038 |
* Wrap buttons and placeholders so that we can display the pencil button and also replace with translation.
|
| 1039 |
*/
|
| 1040 |
this.wrap_special_html_elements = function(){
|
| 1041 |
-
if( _this.jquery_object.is('
|
| 1042 |
-
|
| 1043 |
-
_this.jquery_object.wrap('<trp-highlight data-trp-button="true"></trp-highlight>');
|
| 1044 |
-
_this.jquery_object = _this.jquery_object.parent();
|
| 1045 |
-
}
|
| 1046 |
-
else if ( _this.jquery_object.attr( 'type' ) == 'submit' || _this.jquery_object.attr( 'type' ) == 'button' ) {
|
| 1047 |
-
_this.jquery_object.unwrap('trp-highlight');
|
| 1048 |
-
_this.jquery_object.wrap('<trp-highlight data-trp-attr="value"></trp-highlight>');
|
| 1049 |
_this.jquery_object = _this.jquery_object.parent();
|
|
|
|
| 1050 |
}
|
| 1051 |
-
|
| 1052 |
-
|
| 1053 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1054 |
_this.jquery_object = _this.jquery_object.parent();
|
| 1055 |
}
|
| 1056 |
};
|
|
@@ -1061,32 +1065,38 @@ function TRP_String( language, array_index ){
|
|
| 1061 |
*/
|
| 1062 |
this.highlight = function (e){
|
| 1063 |
e.stopPropagation();
|
| 1064 |
-
var
|
| 1065 |
var tb_parent = _this.jquery_object.parents( '.trp-create-translation-block' );
|
| 1066 |
if ( tb_parent.length > 0 ){
|
| 1067 |
-
|
| 1068 |
-
|
| 1069 |
-
|
| 1070 |
}
|
| 1071 |
|
| 1072 |
trpEditor.remove_pencil_icon();
|
| 1073 |
-
|
| 1074 |
if ( ! trpEditor.edit_translation_button ){
|
| 1075 |
-
|
| 1076 |
-
trpEditor.edit_translation_button =
|
| 1077 |
}else{
|
| 1078 |
-
_this.wrap_special_html_elements();
|
| 1079 |
trpEditor.maybe_overflow_fix(trpEditor.edit_translation_button);
|
| 1080 |
-
|
| 1081 |
}
|
| 1082 |
trpEditor.edit_translation_button.children( ).removeClass( 'trp-active-icon' );
|
| 1083 |
var merge_or_split = trpEditor.decide_if_merge_or_split( _this );
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1084 |
if ( merge_or_split != 'none' ) {
|
| 1085 |
trpEditor.edit_translation_button.children('trp-' + merge_or_split ).addClass( 'trp-active-icon' );
|
| 1086 |
}
|
| 1087 |
|
| 1088 |
-
trpEditor.make_sure_pencil_icon_is_inside_view(
|
| 1089 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1090 |
trpEditor.edit_translation_button.off( 'click' );
|
| 1091 |
trpEditor.edit_translation_button.on( 'click', function(e){
|
| 1092 |
e.preventDefault();
|
|
@@ -1560,7 +1570,7 @@ jQuery(function(){
|
|
| 1560 |
trpEditor.edit_translation_button.children( ).removeClass( 'trp-active-icon' );
|
| 1561 |
trpEditor.maybe_overflow_fix(trpEditor.edit_translation_button);
|
| 1562 |
|
| 1563 |
-
if ( jQuery(this).attr( 'type' ) == 'submit' || jQuery(this).attr( 'type' ) == 'button' || jQuery(this).attr('type') == 'search' ) {
|
| 1564 |
if( jQuery(this).parent('trp-wrap').length == 0 )
|
| 1565 |
jQuery(this).wrap('<trp-wrap class="trpgettext-wrap"></trp-wrap>');
|
| 1566 |
jQuery(this).parent().prepend(trpEditor.edit_translation_button);
|
| 1014 |
}
|
| 1015 |
|
| 1016 |
if ( _this.jquery_object && _this.block_type != 2 ) {
|
| 1017 |
+
_this.wrap_special_html_elements();
|
| 1018 |
if ( trp_language == trp_on_screen_language ) {
|
| 1019 |
var text_to_set = null;
|
| 1020 |
if (new_settings.hasOwnProperty('translated') && new_settings.translated != _this.translated) {
|
| 1023 |
if (new_settings.hasOwnProperty('status') && new_settings.status == 0) {
|
| 1024 |
text_to_set = _this.original;
|
| 1025 |
}
|
|
|
|
| 1026 |
_this.set_text_in_iframe( text_to_set, _this.jquery_object );
|
| 1027 |
}
|
| 1028 |
|
| 1038 |
* Wrap buttons and placeholders so that we can display the pencil button and also replace with translation.
|
| 1039 |
*/
|
| 1040 |
this.wrap_special_html_elements = function(){
|
| 1041 |
+
if ( _this.jquery_object.parent().is('trp-highlight') ){
|
| 1042 |
+
// if the iframe lookup is triggered a second time, the same string will be recognized again as the image and jquery_object is set as an image, not the trp-highlight wrapping. Fix this by assigning it to parent if exists.
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1043 |
_this.jquery_object = _this.jquery_object.parent();
|
| 1044 |
+
return;
|
| 1045 |
}
|
| 1046 |
+
var extra_attribute = false;
|
| 1047 |
+
if( _this.jquery_object.is('button') ) {
|
| 1048 |
+
extra_attribute = 'data-trp-button="true"';
|
| 1049 |
+
}else if ( ( _this.jquery_object.attr( 'type' ) == 'submit' || _this.jquery_object.attr( 'type' ) == 'button' ) ) {
|
| 1050 |
+
extra_attribute = 'data-trp-attr="value"';
|
| 1051 |
+
}else if ( ( _this.jquery_object.attr( 'type' ) == 'text' || _this.jquery_object.attr( 'type' ) == 'search' || _this.jquery_object.is( 'textarea' ) ) && ( typeof _this.jquery_object.attr( 'placeholder' ) != 'undefined' ) ) {
|
| 1052 |
+
extra_attribute = 'data-trp-attr="placeholder"';
|
| 1053 |
+
}else if ( _this.jquery_object.is( 'img' ) ){
|
| 1054 |
+
extra_attribute = 'data-trp-attr="alt"';
|
| 1055 |
+
}
|
| 1056 |
+
if ( extra_attribute !== false ) {
|
| 1057 |
+
_this.jquery_object.wrap('<trp-highlight ' + extra_attribute + '></trp-highlight>');
|
| 1058 |
_this.jquery_object = _this.jquery_object.parent();
|
| 1059 |
}
|
| 1060 |
};
|
| 1065 |
*/
|
| 1066 |
this.highlight = function (e){
|
| 1067 |
e.stopPropagation();
|
| 1068 |
+
var old_jquery_object = null;
|
| 1069 |
var tb_parent = _this.jquery_object.parents( '.trp-create-translation-block' );
|
| 1070 |
if ( tb_parent.length > 0 ){
|
| 1071 |
+
// we are creating a new block
|
| 1072 |
+
old_jquery_object = _this.jquery_object;
|
| 1073 |
+
_this.jquery_object = tb_parent.first();
|
| 1074 |
}
|
| 1075 |
|
| 1076 |
trpEditor.remove_pencil_icon();
|
|
|
|
| 1077 |
if ( ! trpEditor.edit_translation_button ){
|
| 1078 |
+
_this.jquery_object.prepend( trp_action_button_html );
|
| 1079 |
+
trpEditor.edit_translation_button = _this.jquery_object.children('trp-span');
|
| 1080 |
}else{
|
|
|
|
| 1081 |
trpEditor.maybe_overflow_fix(trpEditor.edit_translation_button);
|
| 1082 |
+
_this.jquery_object.prepend(trpEditor.edit_translation_button);
|
| 1083 |
}
|
| 1084 |
trpEditor.edit_translation_button.children( ).removeClass( 'trp-active-icon' );
|
| 1085 |
var merge_or_split = trpEditor.decide_if_merge_or_split( _this );
|
| 1086 |
+
if ( old_jquery_object ){
|
| 1087 |
+
// we are creating a new block
|
| 1088 |
+
merge_or_split = 'merge';
|
| 1089 |
+
}
|
| 1090 |
if ( merge_or_split != 'none' ) {
|
| 1091 |
trpEditor.edit_translation_button.children('trp-' + merge_or_split ).addClass( 'trp-active-icon' );
|
| 1092 |
}
|
| 1093 |
|
| 1094 |
+
trpEditor.make_sure_pencil_icon_is_inside_view( _this.jquery_object[0] );
|
| 1095 |
|
| 1096 |
+
if ( old_jquery_object ){
|
| 1097 |
+
// we are creating a new block
|
| 1098 |
+
_this.jquery_object = old_jquery_object;
|
| 1099 |
+
}
|
| 1100 |
trpEditor.edit_translation_button.off( 'click' );
|
| 1101 |
trpEditor.edit_translation_button.on( 'click', function(e){
|
| 1102 |
e.preventDefault();
|
| 1570 |
trpEditor.edit_translation_button.children( ).removeClass( 'trp-active-icon' );
|
| 1571 |
trpEditor.maybe_overflow_fix(trpEditor.edit_translation_button);
|
| 1572 |
|
| 1573 |
+
if ( jQuery(this).attr( 'type' ) == 'submit' || jQuery(this).attr( 'type' ) == 'button' || jQuery(this).attr('type') == 'search' || jQuery(this).attr('placeholder') || jQuery(this).attr('alt')) {
|
| 1574 |
if( jQuery(this).parent('trp-wrap').length == 0 )
|
| 1575 |
jQuery(this).wrap('<trp-wrap class="trpgettext-wrap"></trp-wrap>');
|
| 1576 |
jQuery(this).parent().prepend(trpEditor.edit_translation_button);
|
class-translate-press.php
CHANGED
|
@@ -40,7 +40,7 @@ class TRP_Translate_Press{
|
|
| 40 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
| 41 |
define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
|
| 42 |
define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
|
| 43 |
-
define( 'TRP_PLUGIN_VERSION', '1.3.
|
| 44 |
|
| 45 |
$this->load_dependencies();
|
| 46 |
$this->initialize_components();
|
|
@@ -73,6 +73,7 @@ class TRP_Translate_Press{
|
|
| 73 |
require_once TRP_PLUGIN_DIR . 'includes/class-machine-translator.php';
|
| 74 |
require_once TRP_PLUGIN_DIR . 'includes/class-query.php';
|
| 75 |
require_once TRP_PLUGIN_DIR . 'includes/class-url-converter.php';
|
|
|
|
| 76 |
require_once TRP_PLUGIN_DIR . 'includes/class-plugin-notices.php';
|
| 77 |
require_once TRP_PLUGIN_DIR . 'includes/functions.php';
|
| 78 |
require_once TRP_PLUGIN_DIR . 'assets/lib/simplehtmldom/simple_html_dom.php';
|
|
@@ -132,7 +133,6 @@ class TRP_Translate_Press{
|
|
| 132 |
*/
|
| 133 |
protected function define_frontend_hooks(){
|
| 134 |
$this->loader->add_action( 'init', $this->translation_render, 'start_output_buffer', 0 );
|
| 135 |
-
$this->loader->add_action( 'admin_init', $this->translation_render, 'start_output_buffer' );
|
| 136 |
$this->loader->add_action( 'wp_enqueue_scripts', $this->translation_render, 'enqueue_dynamic_translation', 1 );
|
| 137 |
$this->loader->add_filter( 'wp_redirect', $this->translation_render, 'force_preview_on_url_redirect', 99, 2 );
|
| 138 |
$this->loader->add_filter( 'wp_redirect', $this->translation_render, 'force_language_on_form_url_redirect', 99, 2 );
|
| 40 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
| 41 |
define( 'TRP_PLUGIN_BASE', plugin_basename( __DIR__ . '/index.php' ) );
|
| 42 |
define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
|
| 43 |
+
define( 'TRP_PLUGIN_VERSION', '1.3.6' );
|
| 44 |
|
| 45 |
$this->load_dependencies();
|
| 46 |
$this->initialize_components();
|
| 73 |
require_once TRP_PLUGIN_DIR . 'includes/class-machine-translator.php';
|
| 74 |
require_once TRP_PLUGIN_DIR . 'includes/class-query.php';
|
| 75 |
require_once TRP_PLUGIN_DIR . 'includes/class-url-converter.php';
|
| 76 |
+
require_once TRP_PLUGIN_DIR . 'includes/class-uri.php';
|
| 77 |
require_once TRP_PLUGIN_DIR . 'includes/class-plugin-notices.php';
|
| 78 |
require_once TRP_PLUGIN_DIR . 'includes/functions.php';
|
| 79 |
require_once TRP_PLUGIN_DIR . 'assets/lib/simplehtmldom/simple_html_dom.php';
|
| 133 |
*/
|
| 134 |
protected function define_frontend_hooks(){
|
| 135 |
$this->loader->add_action( 'init', $this->translation_render, 'start_output_buffer', 0 );
|
|
|
|
| 136 |
$this->loader->add_action( 'wp_enqueue_scripts', $this->translation_render, 'enqueue_dynamic_translation', 1 );
|
| 137 |
$this->loader->add_filter( 'wp_redirect', $this->translation_render, 'force_preview_on_url_redirect', 99, 2 );
|
| 138 |
$this->loader->add_filter( 'wp_redirect', $this->translation_render, 'force_language_on_form_url_redirect', 99, 2 );
|
includes/class-machine-translator.php
CHANGED
|
@@ -29,6 +29,53 @@ class TRP_Machine_Translator{
|
|
| 29 |
return false;
|
| 30 |
}
|
| 31 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 32 |
/**
|
| 33 |
* Returns an array with the API provided translations of the $new_strings array.
|
| 34 |
*
|
|
@@ -39,8 +86,10 @@ class TRP_Machine_Translator{
|
|
| 39 |
public function translate_array( $new_strings, $trp_language_code ){
|
| 40 |
/* we need these settings to go on */
|
| 41 |
$language_code = $this->settings['google-translate-codes'][$trp_language_code];
|
| 42 |
-
|
| 43 |
-
|
|
|
|
|
|
|
| 44 |
|
| 45 |
$translated_strings = array();
|
| 46 |
|
|
@@ -49,20 +98,8 @@ class TRP_Machine_Translator{
|
|
| 49 |
$new_strings_chunks = array_chunk( $new_strings, 128, true );
|
| 50 |
/* if there are more than 128 strings we make multiple requests */
|
| 51 |
foreach( $new_strings_chunks as $new_strings_chunk ){
|
| 52 |
-
/* build our translation request */
|
| 53 |
-
$translation_request = 'key='.$this->settings['g-translate-key'];
|
| 54 |
-
$translation_request .= '&source='.$this->settings['google-translate-codes'][$this->settings['default-language']];
|
| 55 |
-
$translation_request .= '&target='.$language_code;
|
| 56 |
-
foreach( $new_strings_chunk as $new_string ){
|
| 57 |
-
$translation_request .= '&q='.rawurlencode(html_entity_decode( $new_string, ENT_QUOTES ));
|
| 58 |
-
}
|
| 59 |
|
| 60 |
-
|
| 61 |
-
$response = wp_remote_post( "https://www.googleapis.com/language/translate/v2", array(
|
| 62 |
-
'headers' => array( 'X-HTTP-Method-Override' => 'GET' ),//this fakes a GET request
|
| 63 |
-
'body' => $translation_request,
|
| 64 |
-
)
|
| 65 |
-
);
|
| 66 |
|
| 67 |
/* analyze the response */
|
| 68 |
if ( is_array( $response ) && ! is_wp_error( $response ) ) {
|
| 29 |
return false;
|
| 30 |
}
|
| 31 |
|
| 32 |
+
/**
|
| 33 |
+
* Return referer to be sent in Google Translation request header
|
| 34 |
+
*
|
| 35 |
+
* @return string
|
| 36 |
+
*/
|
| 37 |
+
public function get_referer(){
|
| 38 |
+
if( ! $this->referer ) {
|
| 39 |
+
if( ! $this->url_converter ) {
|
| 40 |
+
$trp = TRP_Translate_Press::get_trp_instance();
|
| 41 |
+
$this->url_converter = $trp->get_component( 'url_converter' );
|
| 42 |
+
}
|
| 43 |
+
$this->referer = $this->url_converter->get_abs_home();
|
| 44 |
+
}
|
| 45 |
+
return $this->referer;
|
| 46 |
+
}
|
| 47 |
+
|
| 48 |
+
/**
|
| 49 |
+
* Send request to Google Translation API
|
| 50 |
+
*
|
| 51 |
+
* @param string $source_language Translate from language
|
| 52 |
+
* @param string $language_code Translate to language
|
| 53 |
+
* @param array $strings_array Array of string to translate
|
| 54 |
+
*
|
| 55 |
+
* @return array|WP_Error Response
|
| 56 |
+
*/
|
| 57 |
+
public function send_request( $source_language, $language_code, $strings_array ){
|
| 58 |
+
/* build our translation request */
|
| 59 |
+
$translation_request = 'key='.$this->settings['g-translate-key'];
|
| 60 |
+
$translation_request .= '&source='.$source_language;
|
| 61 |
+
$translation_request .= '&target='.$language_code;
|
| 62 |
+
foreach( $strings_array as $new_string ){
|
| 63 |
+
$translation_request .= '&q='.rawurlencode(html_entity_decode( $new_string, ENT_QUOTES ));
|
| 64 |
+
}
|
| 65 |
+
$referer = $this->get_referer();
|
| 66 |
+
|
| 67 |
+
/* Due to url length restrictions we need so send a POST request faked as a GET request and send the strings in the body of the request and not in the URL */
|
| 68 |
+
$response = wp_remote_post( "https://www.googleapis.com/language/translate/v2", array(
|
| 69 |
+
'headers' => array(
|
| 70 |
+
'X-HTTP-Method-Override' => 'GET', //this fakes a GET request
|
| 71 |
+
'Referer' => $referer
|
| 72 |
+
),
|
| 73 |
+
'body' => $translation_request,
|
| 74 |
+
)
|
| 75 |
+
);
|
| 76 |
+
return $response;
|
| 77 |
+
}
|
| 78 |
+
|
| 79 |
/**
|
| 80 |
* Returns an array with the API provided translations of the $new_strings array.
|
| 81 |
*
|
| 86 |
public function translate_array( $new_strings, $trp_language_code ){
|
| 87 |
/* we need these settings to go on */
|
| 88 |
$language_code = $this->settings['google-translate-codes'][$trp_language_code];
|
| 89 |
+
$source_language = $this->settings['google-translate-codes'][$this->settings['default-language']];
|
| 90 |
+
if( empty( $this->settings['g-translate-key'] ) || empty( $this->settings['google-translate-codes'][$this->settings['default-language']] ) || empty( $language_code ) || ( $language_code == $source_language ) ) {
|
| 91 |
+
return array();
|
| 92 |
+
}
|
| 93 |
|
| 94 |
$translated_strings = array();
|
| 95 |
|
| 98 |
$new_strings_chunks = array_chunk( $new_strings, 128, true );
|
| 99 |
/* if there are more than 128 strings we make multiple requests */
|
| 100 |
foreach( $new_strings_chunks as $new_strings_chunk ){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 101 |
|
| 102 |
+
$response = $this->send_request( $source_language, $language_code, $new_strings_chunk );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 103 |
|
| 104 |
/* analyze the response */
|
| 105 |
if ( is_array( $response ) && ! is_wp_error( $response ) ) {
|
includes/class-settings.php
CHANGED
|
@@ -11,6 +11,7 @@ class TRP_Settings{
|
|
| 11 |
protected $trp_query;
|
| 12 |
protected $url_converter;
|
| 13 |
protected $trp_languages;
|
|
|
|
| 14 |
|
| 15 |
/**
|
| 16 |
* Return array of customization options for language switchers.
|
|
@@ -75,11 +76,15 @@ class TRP_Settings{
|
|
| 75 |
* Settings page content.
|
| 76 |
*/
|
| 77 |
public function settings_page_content(){
|
| 78 |
-
|
| 79 |
-
|
| 80 |
$this->trp_languages = $trp->get_component( 'languages' );
|
| 81 |
}
|
|
|
|
|
|
|
|
|
|
| 82 |
$languages = $this->trp_languages->get_languages( 'english_name' );
|
|
|
|
| 83 |
require_once TRP_PLUGIN_DIR . 'partials/main-settings-page.php';
|
| 84 |
}
|
| 85 |
|
| 11 |
protected $trp_query;
|
| 12 |
protected $url_converter;
|
| 13 |
protected $trp_languages;
|
| 14 |
+
protected $machine_translator;
|
| 15 |
|
| 16 |
/**
|
| 17 |
* Return array of customization options for language switchers.
|
| 76 |
* Settings page content.
|
| 77 |
*/
|
| 78 |
public function settings_page_content(){
|
| 79 |
+
$trp = TRP_Translate_Press::get_trp_instance();
|
| 80 |
+
if ( ! $this->trp_languages ){
|
| 81 |
$this->trp_languages = $trp->get_component( 'languages' );
|
| 82 |
}
|
| 83 |
+
if ( ! $this->machine_translator ){
|
| 84 |
+
$this->machine_translator = $trp->get_component( 'machine_translator' );
|
| 85 |
+
}
|
| 86 |
$languages = $this->trp_languages->get_languages( 'english_name' );
|
| 87 |
+
$gtranslate_referer = $this->machine_translator->get_referer();
|
| 88 |
require_once TRP_PLUGIN_DIR . 'partials/main-settings-page.php';
|
| 89 |
}
|
| 90 |
|
includes/class-translation-manager.php
CHANGED
|
@@ -133,18 +133,9 @@ class TRP_Translation_Manager{
|
|
| 133 |
*/
|
| 134 |
public function add_slug_as_meta_tag() {
|
| 135 |
global $post;
|
| 136 |
-
// we need this further down when generating slug translations
|
| 137 |
-
global $trp_backup_post_id;
|
| 138 |
-
if( isset( $post->ID ) && !empty( $post->ID ) && !is_home() && !is_front_page() && !is_archive() && !is_search() ){
|
| 139 |
-
$trp_backup_post_id = $post->ID;
|
| 140 |
-
} else {
|
| 141 |
-
$trp_backup_post_id = 0;
|
| 142 |
-
}
|
| 143 |
-
|
| 144 |
if ( isset( $post->ID ) && !empty( $post->ID ) && isset( $post->post_name ) && !empty( $post->post_name ) && !is_home() && !is_front_page() && !is_archive() && !is_search() ) {
|
| 145 |
echo '<meta name="trp-slug" original="' . $post->post_name. '" content="' . $post->post_name. '" post-id="' . $post->ID . '"/>' . "\n";
|
| 146 |
}
|
| 147 |
-
|
| 148 |
}
|
| 149 |
|
| 150 |
/**
|
|
@@ -753,6 +744,11 @@ class TRP_Translation_Manager{
|
|
| 753 |
* @return bool
|
| 754 |
*/
|
| 755 |
static function is_ajax_on_frontend(){
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 756 |
$trp = TRP_Translate_Press::get_trp_instance();
|
| 757 |
$url_converter = $trp->get_component("url_converter");
|
| 758 |
|
|
@@ -941,8 +937,11 @@ class TRP_Translation_Manager{
|
|
| 941 |
}
|
| 942 |
}
|
| 943 |
|
| 944 |
-
|
| 945 |
-
$
|
|
|
|
|
|
|
|
|
|
| 946 |
}
|
| 947 |
|
| 948 |
return $translation;
|
|
@@ -1093,6 +1092,23 @@ class TRP_Translation_Manager{
|
|
| 1093 |
|
| 1094 |
}
|
| 1095 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1096 |
/**
|
| 1097 |
* Add the current language as a class to the body
|
| 1098 |
* @param $classes
|
| 133 |
*/
|
| 134 |
public function add_slug_as_meta_tag() {
|
| 135 |
global $post;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 136 |
if ( isset( $post->ID ) && !empty( $post->ID ) && isset( $post->post_name ) && !empty( $post->post_name ) && !is_home() && !is_front_page() && !is_archive() && !is_search() ) {
|
| 137 |
echo '<meta name="trp-slug" original="' . $post->post_name. '" content="' . $post->post_name. '" post-id="' . $post->ID . '"/>' . "\n";
|
| 138 |
}
|
|
|
|
| 139 |
}
|
| 140 |
|
| 141 |
/**
|
| 744 |
* @return bool
|
| 745 |
*/
|
| 746 |
static function is_ajax_on_frontend(){
|
| 747 |
+
|
| 748 |
+
/* for our own actions return false */
|
| 749 |
+
if( isset( $_REQUEST['action'] ) && strpos($_REQUEST['action'], 'trp_') === 0 )
|
| 750 |
+
return false;
|
| 751 |
+
|
| 752 |
$trp = TRP_Translate_Press::get_trp_instance();
|
| 753 |
$url_converter = $trp->get_component("url_converter");
|
| 754 |
|
| 937 |
}
|
| 938 |
}
|
| 939 |
|
| 940 |
+
if( did_action('init') ) {
|
| 941 |
+
if ((!empty($TRP_LANGUAGE) && $this->settings["default-language"] != $TRP_LANGUAGE) || (isset($_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'preview')) {
|
| 942 |
+
$translation = '#!trpst#trp-gettext data-trpgettextoriginal=' . $db_id . '#!trpen#' . $translation . '#!trpst#/trp-gettext#!trpen#';//add special start and end tags so that it does not influence html in any way. we will replace them with < and > at the start of the translate function
|
| 943 |
+
}
|
| 944 |
+
}
|
| 945 |
}
|
| 946 |
|
| 947 |
return $translation;
|
| 1092 |
|
| 1093 |
}
|
| 1094 |
|
| 1095 |
+
/**
|
| 1096 |
+
* function that strips the gettext tags from a string
|
| 1097 |
+
* @param $string
|
| 1098 |
+
* @return mixed
|
| 1099 |
+
*/
|
| 1100 |
+
static function strip_gettext_tags( $string ){
|
| 1101 |
+
if( strpos( $string, ' data-trpgettextoriginal=' ) !== false ) {
|
| 1102 |
+
$string = preg_replace('/ data-trpgettextoriginal=\d+#!trpen#/', '', $string);
|
| 1103 |
+
$string = str_replace('#!trpst#trp-gettext', '', $string);
|
| 1104 |
+
$string = str_replace('#!trpst#/trp-gettext', '', $string);
|
| 1105 |
+
$string = str_replace('#!trpst#\/trp-gettext', '', $string);
|
| 1106 |
+
$string = str_replace('#!trpen#', '', $string);
|
| 1107 |
+
}
|
| 1108 |
+
|
| 1109 |
+
return $string;
|
| 1110 |
+
}
|
| 1111 |
+
|
| 1112 |
/**
|
| 1113 |
* Add the current language as a class to the body
|
| 1114 |
* @param $classes
|
includes/class-translation-render.php
CHANGED
|
@@ -28,16 +28,18 @@ class TRP_Translation_Render{
|
|
| 28 |
*/
|
| 29 |
public function start_output_buffer(){
|
| 30 |
global $TRP_LANGUAGE;
|
| 31 |
-
if( TRP_Translation_Manager::is_ajax_on_frontend() ){
|
| 32 |
-
//in this case move forward
|
| 33 |
-
}else if( is_admin() ||
|
| 34 |
-
( $TRP_LANGUAGE == $this->settings['default-language'] && ( ! isset( $_REQUEST['trp-edit-translation'] ) || ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] != 'preview' ) ) ) ||
|
| 35 |
-
( isset( $_REQUEST['trp-edit-translation']) && $_REQUEST['trp-edit-translation'] == 'true' ) ) {
|
| 36 |
-
return;
|
| 37 |
-
}
|
| 38 |
|
| 39 |
-
|
| 40 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 41 |
}
|
| 42 |
|
| 43 |
/**
|
|
@@ -324,14 +326,16 @@ class TRP_Translation_Render{
|
|
| 324 |
foreach ( $json_array as $key => $value ) {
|
| 325 |
if ( ! empty( $value ) ) {
|
| 326 |
if ( ! is_array( $value ) ) { //if the current element is not an array check if it a html text and translate
|
| 327 |
-
|
|
|
|
| 328 |
$json_array[ $key ] = $this->translate_page( stripslashes( $value ) );
|
| 329 |
}
|
| 330 |
} else {//look for the html elements
|
| 331 |
foreach ( $value as $k => $v ) {
|
| 332 |
if ( ! empty( $v ) ) {
|
| 333 |
if ( ! is_array( $v ) ) {
|
| 334 |
-
|
|
|
|
| 335 |
$json_array[ $key ][ $k ] = $this->translate_page( stripslashes( $v ) );
|
| 336 |
}
|
| 337 |
}
|
|
@@ -730,6 +734,16 @@ class TRP_Translation_Render{
|
|
| 730 |
return $html->save();
|
| 731 |
}
|
| 732 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 733 |
/**
|
| 734 |
* Whether given url links to an external domain.
|
| 735 |
*
|
| 28 |
*/
|
| 29 |
public function start_output_buffer(){
|
| 30 |
global $TRP_LANGUAGE;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 31 |
|
| 32 |
+
if( ( is_admin() && !TRP_Translation_Manager::is_ajax_on_frontend() ) || trp_is_translation_editor( 'true' ) ){
|
| 33 |
+
return;//we have two cases where we don't do anything: we are on the admin side and we are not in an ajax call or we are in the left side of the translation editor
|
| 34 |
+
}
|
| 35 |
+
else {
|
| 36 |
+
mb_http_output("UTF-8");
|
| 37 |
+
if ( $TRP_LANGUAGE == $this->settings['default-language'] && !trp_is_translation_editor() ) {
|
| 38 |
+
ob_start(array($this, 'clear_trp_tags'));//on default language when we are not in editor we just need to clear any trp tags that could still be present
|
| 39 |
+
} else {
|
| 40 |
+
ob_start(array($this, 'translate_page'));//everywhere else translate the page
|
| 41 |
+
}
|
| 42 |
+
}
|
| 43 |
}
|
| 44 |
|
| 45 |
/**
|
| 326 |
foreach ( $json_array as $key => $value ) {
|
| 327 |
if ( ! empty( $value ) ) {
|
| 328 |
if ( ! is_array( $value ) ) { //if the current element is not an array check if it a html text and translate
|
| 329 |
+
$html_decoded_value = html_entity_decode( (string) $value );
|
| 330 |
+
if ( $html_decoded_value != strip_tags( $html_decoded_value ) ) {
|
| 331 |
$json_array[ $key ] = $this->translate_page( stripslashes( $value ) );
|
| 332 |
}
|
| 333 |
} else {//look for the html elements
|
| 334 |
foreach ( $value as $k => $v ) {
|
| 335 |
if ( ! empty( $v ) ) {
|
| 336 |
if ( ! is_array( $v ) ) {
|
| 337 |
+
$html_decoded_v = html_entity_decode( (string) $v );
|
| 338 |
+
if ( $html_decoded_v != strip_tags( $html_decoded_v ) ) {
|
| 339 |
$json_array[ $key ][ $k ] = $this->translate_page( stripslashes( $v ) );
|
| 340 |
}
|
| 341 |
}
|
| 734 |
return $html->save();
|
| 735 |
}
|
| 736 |
|
| 737 |
+
/**
|
| 738 |
+
* Function that should be called only on the default language and when we are not in the editor mode and it is designed as a fallback to clear
|
| 739 |
+
* any trp gettext tags that we added and for some reason show up although they should not
|
| 740 |
+
* @param $output
|
| 741 |
+
* @return mixed
|
| 742 |
+
*/
|
| 743 |
+
function clear_trp_tags( $output ){
|
| 744 |
+
return TRP_Translation_Manager::strip_gettext_tags($output);
|
| 745 |
+
}
|
| 746 |
+
|
| 747 |
/**
|
| 748 |
* Whether given url links to an external domain.
|
| 749 |
*
|
includes/class-uri.php
ADDED
|
@@ -0,0 +1,376 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
<?php
|
| 2 |
+
namespace TranslatePress;
|
| 3 |
+
|
| 4 |
+
class Uri
|
| 5 |
+
{
|
| 6 |
+
const SCHEMES_WITH_AUTHORITY = ';http;https;ftp';
|
| 7 |
+
/** @var string */
|
| 8 |
+
private $scheme;
|
| 9 |
+
/** @var string */
|
| 10 |
+
private $host;
|
| 11 |
+
/** @var string */
|
| 12 |
+
private $user;
|
| 13 |
+
/** @var string */
|
| 14 |
+
private $pass;
|
| 15 |
+
/** @var string */
|
| 16 |
+
private $path;
|
| 17 |
+
/** @var string */
|
| 18 |
+
private $query;
|
| 19 |
+
/** @var string */
|
| 20 |
+
private $fragment;
|
| 21 |
+
/** @var int */
|
| 22 |
+
private $port;
|
| 23 |
+
/** @var bool */
|
| 24 |
+
private $absolute = true;
|
| 25 |
+
|
| 26 |
+
/**
|
| 27 |
+
* If $uri is set, we'll hydrate this object with it
|
| 28 |
+
*
|
| 29 |
+
* @param string $uri {optional}
|
| 30 |
+
*/
|
| 31 |
+
public function __construct($uri = null)
|
| 32 |
+
{
|
| 33 |
+
if ($uri !== null) {
|
| 34 |
+
$this->fromString($uri);
|
| 35 |
+
}
|
| 36 |
+
}
|
| 37 |
+
|
| 38 |
+
/**
|
| 39 |
+
* Alias for getUri.
|
| 40 |
+
* @return string
|
| 41 |
+
*/
|
| 42 |
+
public function __toString()
|
| 43 |
+
{
|
| 44 |
+
return $this->getUri();
|
| 45 |
+
}
|
| 46 |
+
|
| 47 |
+
/**
|
| 48 |
+
* Hydrate this object with values from a string
|
| 49 |
+
* @param $uri
|
| 50 |
+
* @return self
|
| 51 |
+
*/
|
| 52 |
+
public function fromString($uri)
|
| 53 |
+
{
|
| 54 |
+
if (is_numeric($uri)) { //Could be a valid url
|
| 55 |
+
$uri = '' . $uri;
|
| 56 |
+
}
|
| 57 |
+
if (!is_string($uri)) {
|
| 58 |
+
$uri = '';
|
| 59 |
+
}
|
| 60 |
+
$this->setRelative();
|
| 61 |
+
if (0 === strpos($uri, '//')) {
|
| 62 |
+
$this->setAbsolute();
|
| 63 |
+
}
|
| 64 |
+
$parsed_url = parse_url($uri);
|
| 65 |
+
if (!$parsed_url) {
|
| 66 |
+
return $this;
|
| 67 |
+
}
|
| 68 |
+
if (array_key_exists('scheme', $parsed_url)) {
|
| 69 |
+
$this->setAbsolute();
|
| 70 |
+
}
|
| 71 |
+
foreach ($parsed_url as $urlPart => $value) {
|
| 72 |
+
$method = 'set' . ucfirst($urlPart);
|
| 73 |
+
if (method_exists($this, $method)) {
|
| 74 |
+
$this->$method($value);
|
| 75 |
+
}
|
| 76 |
+
}
|
| 77 |
+
return $this;
|
| 78 |
+
}
|
| 79 |
+
|
| 80 |
+
/**
|
| 81 |
+
* Get the URI from the set parameters
|
| 82 |
+
* @return string
|
| 83 |
+
*/
|
| 84 |
+
public function getUri()
|
| 85 |
+
{
|
| 86 |
+
$userPart = '';
|
| 87 |
+
if ($this->getUser() !== null && $this->getPass() !== null) {
|
| 88 |
+
$userPart = $this->getUser() . ':' . $this->getPass() . '@';
|
| 89 |
+
} else if ($this->getUser() !== null) {
|
| 90 |
+
$userPart = $this->getUser() . '@';
|
| 91 |
+
}
|
| 92 |
+
$schemePart = ($this->getScheme() ? $this->getScheme() . '://' : '//');
|
| 93 |
+
if (!in_array($this->getScheme(), self::getSchemesWithAuthority())) {
|
| 94 |
+
$schemePart = $this->getScheme() . ':';
|
| 95 |
+
}
|
| 96 |
+
$portPart = ($this->getPort() ? ':' . $this->getPort() : '');
|
| 97 |
+
$queryPart = ($this->getQuery() ? '?' . $this->getQuery() : '');
|
| 98 |
+
$fragmentPart = ($this->getFragment() ? '#' . $this->getFragment() : '');
|
| 99 |
+
if ($this->isRelative()) {
|
| 100 |
+
return $this->getPath() .
|
| 101 |
+
$queryPart .
|
| 102 |
+
$fragmentPart;
|
| 103 |
+
}
|
| 104 |
+
$path = $this->getPath();
|
| 105 |
+
if (0 !== strlen($path) && '/' !== $path[0]) {
|
| 106 |
+
$path = '/' . $path;
|
| 107 |
+
}
|
| 108 |
+
return $schemePart .
|
| 109 |
+
$userPart .
|
| 110 |
+
$this->getHost() .
|
| 111 |
+
$portPart .
|
| 112 |
+
$path .
|
| 113 |
+
$queryPart .
|
| 114 |
+
$fragmentPart;
|
| 115 |
+
}
|
| 116 |
+
|
| 117 |
+
/**
|
| 118 |
+
* @param string $fragment
|
| 119 |
+
* @return self
|
| 120 |
+
*/
|
| 121 |
+
public function setFragment($fragment)
|
| 122 |
+
{
|
| 123 |
+
$this->fragment = $fragment;
|
| 124 |
+
return $this;
|
| 125 |
+
}
|
| 126 |
+
|
| 127 |
+
/**
|
| 128 |
+
* @return string
|
| 129 |
+
*/
|
| 130 |
+
public function getFragment()
|
| 131 |
+
{
|
| 132 |
+
return $this->fragment;
|
| 133 |
+
}
|
| 134 |
+
|
| 135 |
+
/**
|
| 136 |
+
* @param string $host
|
| 137 |
+
* @return self
|
| 138 |
+
*/
|
| 139 |
+
public function setHost($host)
|
| 140 |
+
{
|
| 141 |
+
$this->host = $host;
|
| 142 |
+
$this->setAbsolute();
|
| 143 |
+
return $this;
|
| 144 |
+
}
|
| 145 |
+
|
| 146 |
+
/**
|
| 147 |
+
* @return string
|
| 148 |
+
*/
|
| 149 |
+
public function getHost()
|
| 150 |
+
{
|
| 151 |
+
return $this->host;
|
| 152 |
+
}
|
| 153 |
+
|
| 154 |
+
/**
|
| 155 |
+
* @param string $pass
|
| 156 |
+
* @return self
|
| 157 |
+
*/
|
| 158 |
+
public function setPass($pass)
|
| 159 |
+
{
|
| 160 |
+
$this->pass = $pass;
|
| 161 |
+
return $this;
|
| 162 |
+
}
|
| 163 |
+
|
| 164 |
+
/**
|
| 165 |
+
* @return string
|
| 166 |
+
*/
|
| 167 |
+
public function getPass()
|
| 168 |
+
{
|
| 169 |
+
return $this->pass;
|
| 170 |
+
}
|
| 171 |
+
|
| 172 |
+
/**
|
| 173 |
+
* @param string $path
|
| 174 |
+
* @return self
|
| 175 |
+
*/
|
| 176 |
+
public function setPath($path)
|
| 177 |
+
{
|
| 178 |
+
$this->path = $path;
|
| 179 |
+
return $this;
|
| 180 |
+
}
|
| 181 |
+
|
| 182 |
+
/**
|
| 183 |
+
* @return string
|
| 184 |
+
*/
|
| 185 |
+
public function getPath()
|
| 186 |
+
{
|
| 187 |
+
return $this->path;
|
| 188 |
+
}
|
| 189 |
+
|
| 190 |
+
/**
|
| 191 |
+
* Set the query. Must be a string, and the prepending "?" will be trimmed.
|
| 192 |
+
* Example: ?a=b&c[]=123 -> "a=b&c[]=123"
|
| 193 |
+
* @see Sensimity_Helper_UriTest::provideSetQuery
|
| 194 |
+
*
|
| 195 |
+
* @param string $query
|
| 196 |
+
* @return self
|
| 197 |
+
*/
|
| 198 |
+
public function setQuery($query)
|
| 199 |
+
{
|
| 200 |
+
$this->query = null;
|
| 201 |
+
if (is_string($query)) {
|
| 202 |
+
$this->query = ltrim($query, '?');
|
| 203 |
+
}
|
| 204 |
+
return $this;
|
| 205 |
+
}
|
| 206 |
+
|
| 207 |
+
/**
|
| 208 |
+
* @return string
|
| 209 |
+
*/
|
| 210 |
+
public function getQuery()
|
| 211 |
+
{
|
| 212 |
+
return $this->query;
|
| 213 |
+
}
|
| 214 |
+
|
| 215 |
+
/**
|
| 216 |
+
* Set the scheme. If its empty, it will be set to null.
|
| 217 |
+
*
|
| 218 |
+
* Must be a string. Can only contain "a-z A-Z 0-9 . : -".
|
| 219 |
+
* Will be forced to lowercase.
|
| 220 |
+
* Appended : or // will be removed.
|
| 221 |
+
* @see Sensimity_Helper_UriTest::provideSetScheme
|
| 222 |
+
*
|
| 223 |
+
* @param string $scheme
|
| 224 |
+
* @return self
|
| 225 |
+
*/
|
| 226 |
+
public function setScheme($scheme)
|
| 227 |
+
{
|
| 228 |
+
$this->scheme = null;
|
| 229 |
+
if (empty($scheme) || null === $scheme) {
|
| 230 |
+
return $this;
|
| 231 |
+
}
|
| 232 |
+
$scheme = preg_replace('/[^a-zA-Z0-9\.\:\-]/', '', $scheme);
|
| 233 |
+
$scheme = strtolower($scheme);
|
| 234 |
+
$scheme = rtrim($scheme, ':/');
|
| 235 |
+
$scheme = trim($scheme, ':/');
|
| 236 |
+
$scheme = str_replace('::', ':', $scheme);
|
| 237 |
+
if (strlen($scheme) != 0) {
|
| 238 |
+
if ($this->isRelative()) {
|
| 239 |
+
/* Explained: */
|
| 240 |
+
/* @see Sensimity_Helper_UriTest::testRelativeAbsoluteUrls */
|
| 241 |
+
$exp = explode('/', ltrim($this->getPath(), '/'));
|
| 242 |
+
$this->setHost($exp[0]);
|
| 243 |
+
unset($exp[0]);
|
| 244 |
+
$this->setPath(null);
|
| 245 |
+
$path = implode('/', $exp);
|
| 246 |
+
if (strlen($path) > 0) {
|
| 247 |
+
//Only create the "/" if theres a path
|
| 248 |
+
$this->setPath('/' . $path);
|
| 249 |
+
}
|
| 250 |
+
$this->setAbsolute();
|
| 251 |
+
}
|
| 252 |
+
$this->scheme = $scheme;
|
| 253 |
+
}
|
| 254 |
+
return $this;
|
| 255 |
+
}
|
| 256 |
+
|
| 257 |
+
/**
|
| 258 |
+
* @return string
|
| 259 |
+
*/
|
| 260 |
+
public function getScheme()
|
| 261 |
+
{
|
| 262 |
+
return $this->scheme;
|
| 263 |
+
}
|
| 264 |
+
|
| 265 |
+
/**
|
| 266 |
+
* @param string $user
|
| 267 |
+
* @return self
|
| 268 |
+
*/
|
| 269 |
+
public function setUser($user)
|
| 270 |
+
{
|
| 271 |
+
$this->user = $user;
|
| 272 |
+
return $this;
|
| 273 |
+
}
|
| 274 |
+
|
| 275 |
+
/**
|
| 276 |
+
* @return string
|
| 277 |
+
*/
|
| 278 |
+
public function getUser()
|
| 279 |
+
{
|
| 280 |
+
return $this->user;
|
| 281 |
+
}
|
| 282 |
+
|
| 283 |
+
/**
|
| 284 |
+
* Port must be a valid number. Otherwise it will be set to NULL. (default scheme port)
|
| 285 |
+
* @see Sensimity_Helper_UriTest::provideSetPort
|
| 286 |
+
*
|
| 287 |
+
* @param int|string $port
|
| 288 |
+
* @return self
|
| 289 |
+
*/
|
| 290 |
+
public function setPort($port)
|
| 291 |
+
{
|
| 292 |
+
$this->port = null;
|
| 293 |
+
if ((is_string($port) || is_numeric($port)) && ctype_digit(strval($port))) {
|
| 294 |
+
$this->port = (int) $port;
|
| 295 |
+
}
|
| 296 |
+
return $this;
|
| 297 |
+
}
|
| 298 |
+
|
| 299 |
+
/**
|
| 300 |
+
* @return int
|
| 301 |
+
*/
|
| 302 |
+
public function getPort()
|
| 303 |
+
{
|
| 304 |
+
return $this->port;
|
| 305 |
+
}
|
| 306 |
+
|
| 307 |
+
/**
|
| 308 |
+
* @return bool
|
| 309 |
+
*/
|
| 310 |
+
public function isRelative()
|
| 311 |
+
{
|
| 312 |
+
return (!$this->absolute);
|
| 313 |
+
}
|
| 314 |
+
|
| 315 |
+
/**
|
| 316 |
+
* @return bool
|
| 317 |
+
*/
|
| 318 |
+
public function isAbsolute()
|
| 319 |
+
{
|
| 320 |
+
return ($this->absolute);
|
| 321 |
+
}
|
| 322 |
+
|
| 323 |
+
/**
|
| 324 |
+
* @return $this
|
| 325 |
+
*/
|
| 326 |
+
public function setAbsolute()
|
| 327 |
+
{
|
| 328 |
+
$this->absolute = true;
|
| 329 |
+
return $this;
|
| 330 |
+
}
|
| 331 |
+
|
| 332 |
+
/**
|
| 333 |
+
* @return $this
|
| 334 |
+
*/
|
| 335 |
+
public function setRelative()
|
| 336 |
+
{
|
| 337 |
+
$this->absolute = false;
|
| 338 |
+
return $this;
|
| 339 |
+
}
|
| 340 |
+
|
| 341 |
+
/** Some helpful static functions */
|
| 342 |
+
|
| 343 |
+
/**
|
| 344 |
+
* @param $uri
|
| 345 |
+
* @param null $scheme
|
| 346 |
+
* @return string
|
| 347 |
+
*/
|
| 348 |
+
public static function changeScheme($uri, $scheme = null)
|
| 349 |
+
{
|
| 350 |
+
if ($scheme == null) { //null for scheme = just no change at all - only in this static function, for BC!
|
| 351 |
+
return $uri;
|
| 352 |
+
}
|
| 353 |
+
$class = get_called_class();
|
| 354 |
+
$uri = new $class($uri);
|
| 355 |
+
$uri->setScheme($scheme);
|
| 356 |
+
return $uri->getUri();
|
| 357 |
+
}
|
| 358 |
+
|
| 359 |
+
/**
|
| 360 |
+
* @see http://tools.ietf.org/html/rfc3986#section-3
|
| 361 |
+
* @return array
|
| 362 |
+
*/
|
| 363 |
+
public static function getSchemesWithAuthority()
|
| 364 |
+
{
|
| 365 |
+
return explode(';', self::SCHEMES_WITH_AUTHORITY);
|
| 366 |
+
}
|
| 367 |
+
|
| 368 |
+
/**
|
| 369 |
+
* @return bool
|
| 370 |
+
*/
|
| 371 |
+
public function isSchemeless()
|
| 372 |
+
{
|
| 373 |
+
$scheme = $this->getScheme();
|
| 374 |
+
return (bool) ($this->isRelative() || ($this->isAbsolute() && empty($scheme)));
|
| 375 |
+
}
|
| 376 |
+
}
|
includes/class-url-converter.php
CHANGED
|
@@ -129,93 +129,137 @@ class TRP_Url_Converter {
|
|
| 129 |
*
|
| 130 |
* Defaults to current Url and current language.
|
| 131 |
*
|
| 132 |
-
* @param string $language Language code.
|
| 133 |
* @param string $url Url to encode.
|
| 134 |
* @return string
|
| 135 |
*/
|
|
|
|
| 136 |
public function get_url_for_language ( $language = null, $url = null, $trp_link_is_processed = '#TRPLINKPROCESSED') {
|
|
|
|
|
|
|
| 137 |
global $TRP_LANGUAGE;
|
| 138 |
-
|
| 139 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 140 |
|
| 141 |
-
// we're appending $trp_link_is_processed string to the end of each processed link so we don't process them again in the render class.
|
| 142 |
-
// we're stripping this from each url in the render class
|
| 143 |
-
// $trp_link_is_processed is part of the function params so we can pass an empty link in case we need get_url_for_language() in other places that don't go through the render.
|
| 144 |
-
// since the render doesn't work on the default language, we're striping the processed tag.
|
| 145 |
if( $TRP_LANGUAGE == $this->settings['default-language'] ){
|
| 146 |
$trp_link_is_processed = '';
|
| 147 |
}
|
| 148 |
|
|
|
|
| 149 |
if ( $this->url_is_file($url) ){
|
| 150 |
-
|
|
|
|
| 151 |
}
|
| 152 |
|
| 153 |
-
$
|
|
|
|
|
|
|
|
|
|
| 154 |
|
| 155 |
-
if (
|
| 156 |
-
$
|
|
|
|
| 157 |
}
|
| 158 |
|
| 159 |
-
|
| 160 |
-
|
| 161 |
-
|
| 162 |
-
|
| 163 |
-
* with pages that list a ton of links
|
| 164 |
-
*/
|
| 165 |
-
$post_id = url_to_postid( $url );
|
| 166 |
|
| 167 |
-
if(
|
| 168 |
-
$url
|
| 169 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 170 |
}
|
| 171 |
|
| 172 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 173 |
$TRP_LANGUAGE = $this->settings['default-language'];
|
| 174 |
$post_id = url_to_postid( $url );
|
|
|
|
| 175 |
$TRP_LANGUAGE = $trp_language_copy;
|
| 176 |
}
|
| 177 |
|
| 178 |
if( $post_id ){
|
|
|
|
| 179 |
/*
|
| 180 |
* We need to find if the current URL (either passed as parameter or found via cur_page_url)
|
| 181 |
* has extra arguments compared to it's permalink.
|
| 182 |
* We need the permalink based on the language IN THE URL, not the one passed to this function,
|
| 183 |
* as that represents the language to be translated into.
|
| 184 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 185 |
$TRP_LANGUAGE = $this->get_lang_from_url_string( $url );
|
| 186 |
$processed_permalink = get_permalink($post_id);
|
| 187 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 188 |
// if nothing was replaced, something was wrong, just use the normal permalink without any arguments.
|
| 189 |
if( $arguments == $url ) $arguments = '';
|
| 190 |
|
| 191 |
-
/*
|
| 192 |
-
* Transform the global language into the language to be translated,
|
| 193 |
-
* so we can get the correct permalink (slug and all) and add the remaining arguments that might exist.
|
| 194 |
-
*/
|
| 195 |
$TRP_LANGUAGE = $language;
|
| 196 |
-
if ( !empty ( $arguments ) ) {
|
| 197 |
-
$arguments = apply_filters('trp_get_url_for_language_custom_arguments', $arguments, $language, $url, $post_id);
|
| 198 |
-
}
|
| 199 |
$new_url = get_permalink( $post_id ) . $arguments;
|
|
|
|
| 200 |
$TRP_LANGUAGE = $trp_language_copy;
|
|
|
|
| 201 |
} else {
|
| 202 |
-
//
|
| 203 |
-
|
| 204 |
-
$abs_home = trailingslashit( $this->get_abs_home() );
|
| 205 |
-
$current_url_language = $this->get_lang_from_url_string( $url );
|
| 206 |
-
$current_lang_root = untrailingslashit($abs_home . $this->get_url_slug( $current_url_language ));
|
| 207 |
-
$new_language_root = untrailingslashit($abs_home . $this->get_url_slug( $language ) );
|
| 208 |
|
| 209 |
if( $this->get_lang_from_url_string($url) === null ){
|
| 210 |
-
//
|
| 211 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
| 212 |
} else {
|
| 213 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 214 |
}
|
| 215 |
-
$new_url = apply_filters( 'trp_get_url_for_language', $new_url, $url, $language, $abs_home, $current_lang_root, $new_language_root );
|
| 216 |
}
|
| 217 |
|
| 218 |
-
|
| 219 |
/* fix links for woocommerce on language switcher for product categories and product tags */
|
| 220 |
if( class_exists( 'WooCommerce' ) ){
|
| 221 |
$default_woocommerce_slugs = array('product-category', 'product-tag', 'product');
|
|
@@ -237,6 +281,7 @@ class TRP_Url_Converter {
|
|
| 237 |
}
|
| 238 |
|
| 239 |
return $new_url . $trp_link_is_processed ;
|
|
|
|
| 240 |
}
|
| 241 |
|
| 242 |
/**
|
|
@@ -323,32 +368,28 @@ class TRP_Url_Converter {
|
|
| 323 |
if ( ! $url ){
|
| 324 |
$url = $this->cur_page_url();
|
| 325 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 326 |
|
| 327 |
-
|
| 328 |
-
// if the user links to a http link but the abs_home_url is https, we're serving the https one so we don't brake cookies if he doesn't have proper redirects
|
| 329 |
-
$lang = preg_replace( '#^(http|https)://#', '', $url );
|
| 330 |
-
$abs_home = preg_replace( '#^(http|https)://#', '', $this->get_abs_home() );
|
| 331 |
-
|
| 332 |
-
// we have removed the home path from our URL. We're adding a / in case it's the homepage of one of the languages
|
| 333 |
-
// removing / from the front so it's easier for understanding explode()
|
| 334 |
-
$lang = ltrim( trailingslashit( str_replace($abs_home, '', $lang)),'/' );
|
| 335 |
-
|
| 336 |
-
// We now have to see if the first part of the string is actually a language slug
|
| 337 |
-
$lang = explode('/', $lang);
|
| 338 |
-
if( $lang == false ){
|
| 339 |
-
return null;
|
| 340 |
-
}
|
| 341 |
-
// If we have a language in the URL, the first element of the array should be it.
|
| 342 |
-
$lang = $lang[0];
|
| 343 |
-
|
| 344 |
-
$lang = apply_filters( 'trp_get_lang_from_url_string', $lang, $url );
|
| 345 |
|
| 346 |
-
|
| 347 |
-
|
| 348 |
-
|
| 349 |
-
|
| 350 |
-
return null;
|
| 351 |
}
|
|
|
|
|
|
|
| 352 |
}
|
| 353 |
|
| 354 |
/**
|
| 129 |
*
|
| 130 |
* Defaults to current Url and current language.
|
| 131 |
*
|
| 132 |
+
* @param string $language Language code that we want to translate into.
|
| 133 |
* @param string $url Url to encode.
|
| 134 |
* @return string
|
| 135 |
*/
|
| 136 |
+
|
| 137 |
public function get_url_for_language ( $language = null, $url = null, $trp_link_is_processed = '#TRPLINKPROCESSED') {
|
| 138 |
+
$debug = false;
|
| 139 |
+
// initializations
|
| 140 |
global $TRP_LANGUAGE;
|
| 141 |
+
$trp_language_copy = $TRP_LANGUAGE;
|
| 142 |
+
if ( empty( $language ) ) {
|
| 143 |
+
$language = $TRP_LANGUAGE;
|
| 144 |
+
}
|
| 145 |
+
if ( empty($url) ){
|
| 146 |
+
$url = $this->cur_page_url();
|
| 147 |
+
}
|
| 148 |
+
$url_obj = new \TranslatePress\Uri($url);
|
| 149 |
+
$abs_home_url_obj = new \TranslatePress\Uri( $this->get_abs_home() );
|
| 150 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 151 |
if( $TRP_LANGUAGE == $this->settings['default-language'] ){
|
| 152 |
$trp_link_is_processed = '';
|
| 153 |
}
|
| 154 |
|
| 155 |
+
// actual logic of the function
|
| 156 |
if ( $this->url_is_file($url) ){
|
| 157 |
+
trp_bulk_debug($debug, array('url' => $url, 'abort' => 'is file'));
|
| 158 |
+
return $url . $trp_link_is_processed; //abort for files
|
| 159 |
}
|
| 160 |
|
| 161 |
+
if ( !$url_obj->isSchemeless() && $url_obj->getScheme() != 'http' && $url_obj->getScheme() != 'https' ){
|
| 162 |
+
trp_bulk_debug($debug, array('url' => $url, 'abort' => "is different scheme ".$url_obj->getScheme()));
|
| 163 |
+
return $url . $trp_link_is_processed; // abort for non-http/https links
|
| 164 |
+
}
|
| 165 |
|
| 166 |
+
if ( $url_obj->isSchemeless() && !$url_obj->getPath() && !$url_obj->getQuery() ){
|
| 167 |
+
trp_bulk_debug($debug, array('url' => $url, 'abort' => "is anchor"));
|
| 168 |
+
return $url; // abort for anchors
|
| 169 |
}
|
| 170 |
|
| 171 |
+
if ( $url_obj->getHost() && $abs_home_url_obj->getHost() && $url_obj->getHost() != $abs_home_url_obj->getHost() ){
|
| 172 |
+
trp_bulk_debug($debug, array('url' => $url, 'abort' => "is external url "));
|
| 173 |
+
return $url; // abort for external url's
|
| 174 |
+
}
|
|
|
|
|
|
|
|
|
|
| 175 |
|
| 176 |
+
if( $this->get_lang_from_url_string($url) === null && $this->settings['default-language'] === $language && $this->settings['add-subdirectory-to-default-language'] !== 'yes' ){
|
| 177 |
+
trp_bulk_debug($debug, array('url' => $url, 'abort' => "URL already has the correct language added to it and default language has subdir"));
|
| 178 |
+
return $url;
|
| 179 |
+
}
|
| 180 |
+
|
| 181 |
+
if( $this->get_lang_from_url_string($url) === $language ){
|
| 182 |
+
trp_bulk_debug($debug, array('url' => $url, 'abort' => "URL already has the correct language added to it"));
|
| 183 |
+
return $url;
|
| 184 |
}
|
| 185 |
|
| 186 |
+
// maybe find the post_id for the current URL
|
| 187 |
+
$possible_post_id = url_to_postid($url);
|
| 188 |
+
if ( $possible_post_id ){
|
| 189 |
+
$post_id = $possible_post_id;
|
| 190 |
+
|
| 191 |
+
trp_bulk_debug($debug, array('url' => $url, 'found post id' => $post_id, 'for language' => $TRP_LANGUAGE));
|
| 192 |
+
} else {
|
| 193 |
+
// try again but with the default language home_url
|
| 194 |
$TRP_LANGUAGE = $this->settings['default-language'];
|
| 195 |
$post_id = url_to_postid( $url );
|
| 196 |
+
if($post_id){ trp_bulk_debug($debug, array('url' => $url, 'found post id' => $post_id, 'for default language' => $TRP_LANGUAGE)); }
|
| 197 |
$TRP_LANGUAGE = $trp_language_copy;
|
| 198 |
}
|
| 199 |
|
| 200 |
if( $post_id ){
|
| 201 |
+
|
| 202 |
/*
|
| 203 |
* We need to find if the current URL (either passed as parameter or found via cur_page_url)
|
| 204 |
* has extra arguments compared to it's permalink.
|
| 205 |
* We need the permalink based on the language IN THE URL, not the one passed to this function,
|
| 206 |
* as that represents the language to be translated into.
|
| 207 |
*/
|
| 208 |
+
|
| 209 |
+
/*
|
| 210 |
+
* WE ARE NOT USING \TranslatePress\Uri
|
| 211 |
+
* due to URL's having extra path elements after the permalink slug. Using the class would strip those end points.
|
| 212 |
+
*
|
| 213 |
+
*/
|
| 214 |
+
|
| 215 |
$TRP_LANGUAGE = $this->get_lang_from_url_string( $url );
|
| 216 |
$processed_permalink = get_permalink($post_id);
|
| 217 |
+
|
| 218 |
+
if($url_obj->isSchemeless()){
|
| 219 |
+
$arguments = str_replace($processed_permalink, '', trailingslashit( home_url() ) . ltrim($url, '/') );
|
| 220 |
+
} else {
|
| 221 |
+
$arguments = str_replace($processed_permalink, '', $url );
|
| 222 |
+
}
|
| 223 |
+
|
| 224 |
// if nothing was replaced, something was wrong, just use the normal permalink without any arguments.
|
| 225 |
if( $arguments == $url ) $arguments = '';
|
| 226 |
|
|
|
|
|
|
|
|
|
|
|
|
|
| 227 |
$TRP_LANGUAGE = $language;
|
|
|
|
|
|
|
|
|
|
| 228 |
$new_url = get_permalink( $post_id ) . $arguments;
|
| 229 |
+
trp_bulk_debug($debug, array('url' => $url, 'new url' => $new_url, 'found post id' => $post_id, 'isSchemeless' => 'true', 'url type' => 'based on permalink', 'for language' => $TRP_LANGUAGE));
|
| 230 |
$TRP_LANGUAGE = $trp_language_copy;
|
| 231 |
+
|
| 232 |
} else {
|
| 233 |
+
// we're just adding the new language to the url
|
| 234 |
+
$new_url_obj = new \TranslatePress\Uri( $url );
|
|
|
|
|
|
|
|
|
|
|
|
|
| 235 |
|
| 236 |
if( $this->get_lang_from_url_string($url) === null ){
|
| 237 |
+
// these are the custom url. They don't have language
|
| 238 |
+
$abs_home_considered_path = trim(str_replace($abs_home_url_obj->getPath(), '', $url_obj->getPath()), '/');
|
| 239 |
+
$new_url_obj->setPath( trailingslashit($abs_home_url_obj->getPath()) . trailingslashit($this->get_url_slug( $language )) . $abs_home_considered_path );
|
| 240 |
+
$new_url = $new_url_obj->getUri();
|
| 241 |
+
|
| 242 |
+
trp_bulk_debug($debug, array('url' => $url, 'new url' => $new_url, 'lang' => $language, 'url type' => 'custom url without language parameter'));
|
| 243 |
} else {
|
| 244 |
+
// these have language param in them and we need to replace them with the new language
|
| 245 |
+
$abs_home_considered_path = trim(str_replace($abs_home_url_obj->getPath(), '', $url_obj->getPath()), '/');
|
| 246 |
+
$no_lang_orig_path = explode('/', $abs_home_considered_path);
|
| 247 |
+
unset($no_lang_orig_path[0]);
|
| 248 |
+
$no_lang_orig_path = implode('/', $no_lang_orig_path );
|
| 249 |
+
|
| 250 |
+
if ( !$this->get_url_slug( $language ) ){
|
| 251 |
+
$url_lang_slug = '';
|
| 252 |
+
} else {
|
| 253 |
+
$url_lang_slug = trailingslashit($this->get_url_slug( $language ));
|
| 254 |
+
}
|
| 255 |
+
|
| 256 |
+
$new_url_obj->setPath( trailingslashit($abs_home_url_obj->getPath()) . $url_lang_slug . ltrim($no_lang_orig_path, '/') );
|
| 257 |
+
$new_url = $new_url_obj->getUri();
|
| 258 |
+
|
| 259 |
+
trp_bulk_debug($debug, array('url' => $url, 'new url' => $new_url, 'lang' => $language, 'url type' => 'custom url with language', 'abs home path' => $abs_home_url_obj->getPath()));
|
| 260 |
}
|
|
|
|
| 261 |
}
|
| 262 |
|
|
|
|
| 263 |
/* fix links for woocommerce on language switcher for product categories and product tags */
|
| 264 |
if( class_exists( 'WooCommerce' ) ){
|
| 265 |
$default_woocommerce_slugs = array('product-category', 'product-tag', 'product');
|
| 281 |
}
|
| 282 |
|
| 283 |
return $new_url . $trp_link_is_processed ;
|
| 284 |
+
|
| 285 |
}
|
| 286 |
|
| 287 |
/**
|
| 368 |
if ( ! $url ){
|
| 369 |
$url = $this->cur_page_url();
|
| 370 |
}
|
| 371 |
+
$url_obj = new \TranslatePress\Uri($url);
|
| 372 |
+
$abs_home_url_obj = new \TranslatePress\Uri( $this->get_abs_home() );
|
| 373 |
+
|
| 374 |
+
if( $url_obj->getPath() ){
|
| 375 |
+
$possible_path = str_replace($abs_home_url_obj->getPath(), '', $url_obj->getPath());
|
| 376 |
+
$lang = ltrim( $possible_path,'/' );
|
| 377 |
+
$lang = explode('/', $lang);
|
| 378 |
+
if( $lang == false ){
|
| 379 |
+
return null;
|
| 380 |
+
}
|
| 381 |
+
// If we have a language in the URL, the first element of the array should be it.
|
| 382 |
+
$lang = $lang[0];
|
| 383 |
|
| 384 |
+
$lang = apply_filters( 'trp_get_lang_from_url_string', $lang, $url );
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 385 |
|
| 386 |
+
// the lang slug != actual lang. So we need to do array_search so we don't end up with en instead of en_US
|
| 387 |
+
if( isset($this->settings['url-slugs']) && in_array($lang, $this->settings['url-slugs']) ){
|
| 388 |
+
return array_search($lang, $this->settings['url-slugs']);
|
| 389 |
+
}
|
|
|
|
| 390 |
}
|
| 391 |
+
|
| 392 |
+
return null;
|
| 393 |
}
|
| 394 |
|
| 395 |
/**
|
includes/functions.php
CHANGED
|
@@ -165,6 +165,30 @@ function trp_sanitize_string( $filtered ){
|
|
| 165 |
}
|
| 166 |
|
| 167 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 168 |
|
| 169 |
/** Compatibility functions */
|
| 170 |
|
|
@@ -555,4 +579,29 @@ add_filter('ginger_iframe_banner', 'trp_do_shortcode', 999 );
|
|
| 555 |
add_filter('ginger_text_banner', 'trp_do_shortcode', 999 );
|
| 556 |
function trp_do_shortcode($content){
|
| 557 |
return do_shortcode(stripcslashes($content));
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 558 |
}
|
| 165 |
}
|
| 166 |
|
| 167 |
|
| 168 |
+
/**
|
| 169 |
+
* function that checks if $_REQUEST['trp-edit-translation'] is set or if it has a certain value
|
| 170 |
+
*/
|
| 171 |
+
function trp_is_translation_editor( $value = '' ){
|
| 172 |
+
if( isset( $_REQUEST['trp-edit-translation'] ) ){
|
| 173 |
+
if( !empty( $value ) ) {
|
| 174 |
+
if( $_REQUEST['trp-edit-translation'] === $value ) {
|
| 175 |
+
return true;
|
| 176 |
+
}
|
| 177 |
+
else{
|
| 178 |
+
return false;
|
| 179 |
+
}
|
| 180 |
+
}
|
| 181 |
+
else{
|
| 182 |
+
$possible_values = array ('preview', 'true');
|
| 183 |
+
if( in_array( $_REQUEST['trp-edit-translation'], $possible_values ) ) {
|
| 184 |
+
return true;
|
| 185 |
+
}
|
| 186 |
+
}
|
| 187 |
+
}
|
| 188 |
+
|
| 189 |
+
return false;
|
| 190 |
+
}
|
| 191 |
+
|
| 192 |
|
| 193 |
/** Compatibility functions */
|
| 194 |
|
| 579 |
add_filter('ginger_text_banner', 'trp_do_shortcode', 999 );
|
| 580 |
function trp_do_shortcode($content){
|
| 581 |
return do_shortcode(stripcslashes($content));
|
| 582 |
+
}
|
| 583 |
+
|
| 584 |
+
/**
|
| 585 |
+
* Debuger function. Mainly designed for the get_url_for_language() function
|
| 586 |
+
*
|
| 587 |
+
* @since 1.3.6
|
| 588 |
+
*
|
| 589 |
+
* @param bool $enabled
|
| 590 |
+
* @param array $logger
|
| 591 |
+
*/
|
| 592 |
+
function trp_bulk_debug($debug = false, $logger = array()){
|
| 593 |
+
if(!$debug){
|
| 594 |
+
return;
|
| 595 |
+
}
|
| 596 |
+
error_log('---------------------------------------------------------');
|
| 597 |
+
$key_length = '';
|
| 598 |
+
foreach ($logger as $key => $value){
|
| 599 |
+
if ( strlen($key) > $key_length)
|
| 600 |
+
$key_length = strlen($key);
|
| 601 |
+
}
|
| 602 |
+
|
| 603 |
+
foreach ($logger as $key => $value){
|
| 604 |
+
error_log("$key : " . str_repeat(' ', $key_length - strlen($key)) . $value);
|
| 605 |
+
}
|
| 606 |
+
error_log('---------------------------------------------------------');
|
| 607 |
}
|
includes/trp-ajax.php
CHANGED
|
@@ -50,7 +50,7 @@ class TRP_Ajax{
|
|
| 50 |
if ( is_array( $strings ) ) {
|
| 51 |
foreach ($strings as $key => $string) {
|
| 52 |
if ( isset($string->original ) ) {
|
| 53 |
-
$original_array[$key] = mysqli_real_escape_string( $this->connection, filter_var( $string->original, FILTER_SANITIZE_STRING ) );
|
| 54 |
}
|
| 55 |
}
|
| 56 |
}
|
|
@@ -155,7 +155,7 @@ class TRP_Ajax{
|
|
| 155 |
* @param string $original_language Language to translate from. Default language.
|
| 156 |
*/
|
| 157 |
protected function output_translations( $strings, $language, $original_language ){
|
| 158 |
-
$sql = 'SELECT original, translated FROM ' . $this->table_prefix . 'trp_dictionary_' . strtolower( $original_language ) . '_' . strtolower( $language ) . ' WHERE original IN (\'' . implode( "','",
|
| 159 |
$result = mysqli_query( $this->connection, $sql );
|
| 160 |
if ( $result === false ){
|
| 161 |
$this->return_error();
|
| 50 |
if ( is_array( $strings ) ) {
|
| 51 |
foreach ($strings as $key => $string) {
|
| 52 |
if ( isset($string->original ) ) {
|
| 53 |
+
$original_array[$key] = mysqli_real_escape_string( $this->connection, $this->full_trim( filter_var( $string->original, FILTER_SANITIZE_STRING ) ) );
|
| 54 |
}
|
| 55 |
}
|
| 56 |
}
|
| 155 |
* @param string $original_language Language to translate from. Default language.
|
| 156 |
*/
|
| 157 |
protected function output_translations( $strings, $language, $original_language ){
|
| 158 |
+
$sql = 'SELECT original, translated FROM ' . $this->table_prefix . 'trp_dictionary_' . strtolower( $original_language ) . '_' . strtolower( $language ) . ' WHERE original IN (\'' . implode( "','", $strings ) .'\') AND status != 0';
|
| 159 |
$result = mysqli_query( $this->connection, $sql );
|
| 160 |
if ( $result === false ){
|
| 161 |
$this->return_error();
|
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.3.
|
| 7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
| 8 |
Author URI: https://cozmoslabs.com/
|
| 9 |
Text Domain: translatepress-multilingual
|
| 3 |
Plugin Name: TranslatePress - Multilingual
|
| 4 |
Plugin URI: https://translatepress.com/
|
| 5 |
Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
|
| 6 |
+
Version: 1.3.6
|
| 7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
| 8 |
Author URI: https://cozmoslabs.com/
|
| 9 |
Text Domain: translatepress-multilingual
|
languages/translatepress-multilingual.catalog.php
CHANGED
|
@@ -85,8 +85,9 @@
|
|
| 85 |
<?php __("Google Translate", "translatepress-multilingual"); ?>
|
| 86 |
<?php __("Enable or disable the automatic translation of the site with Google Translate. Only untranslated strings will receive a translation.<br>You can later edit these automatic translations.<br>Note: Not all languages support automatic translation. Please consult the <a href=\"https://cloud.google.com/translate/docs/languages\" target=\"_blank\" title=\"Automatic translation supported languages.\">supported languages list</a>. ", "translatepress-multilingual"); ?>
|
| 87 |
<?php __("Google Translate API Key", "translatepress-multilingual"); ?>
|
| 88 |
-
<?php __("Test
|
| 89 |
-
<?php __("Visit
|
|
|
|
| 90 |
<?php __("Language Switcher", "translatepress-multilingual"); ?>
|
| 91 |
<?php __("Shortcode ", "translatepress-multilingual"); ?>
|
| 92 |
<?php __("Use shortcode on any page or widget.", "translatepress-multilingual"); ?>
|
|
@@ -96,6 +97,8 @@
|
|
| 96 |
<?php __("Floating language selection", "translatepress-multilingual"); ?>
|
| 97 |
<?php __("Have a floating dropdown following the user on every page.", "translatepress-multilingual"); ?>
|
| 98 |
<?php __("Google API Key from settings page:", "translatepress-multilingual"); ?>
|
|
|
|
|
|
|
| 99 |
<?php __("Response:", "translatepress-multilingual"); ?>
|
| 100 |
<?php __("Response Body:", "translatepress-multilingual"); ?>
|
| 101 |
<?php __("Entire Response From wp_remote_get():", "translatepress-multilingual"); ?>
|
|
@@ -135,6 +138,3 @@
|
|
| 135 |
<?php __("Batch size", "translatepress-multilingual"); ?>
|
| 136 |
<?php __("The number of rows to check at once.<br>Choosing a smaller number helps solve the 502 error \"Page took too long to respond\" on large databases.<br>May take several minutes depending on the database size.", "translatepress-multilingual"); ?>
|
| 137 |
<?php __("Remove duplicate rows", "translatepress-multilingual"); ?>
|
| 138 |
-
<?php __(" TranslatePress Settings", "translatepress-multilingual"); ?>
|
| 139 |
-
<?php __("Translator", "translatepress-multilingual"); ?>
|
| 140 |
-
<?php __("Allow this user to translate the website.", "translatepress-multilingual"); ?>
|
| 85 |
<?php __("Google Translate", "translatepress-multilingual"); ?>
|
| 86 |
<?php __("Enable or disable the automatic translation of the site with Google Translate. Only untranslated strings will receive a translation.<br>You can later edit these automatic translations.<br>Note: Not all languages support automatic translation. Please consult the <a href=\"https://cloud.google.com/translate/docs/languages\" target=\"_blank\" title=\"Automatic translation supported languages.\">supported languages list</a>. ", "translatepress-multilingual"); ?>
|
| 87 |
<?php __("Google Translate API Key", "translatepress-multilingual"); ?>
|
| 88 |
+
<?php __("Test API key", "translatepress-multilingual"); ?>
|
| 89 |
+
<?php __("Visit <a href=\"https://cloud.google.com/docs/authentication/api-keys\" target=\"_blank\">this link</a> to see how you can set up an API key, <strong>control API costs</strong> and set HTTP referrer restrictions.", "translatepress-multilingual"); ?>
|
| 90 |
+
<?php __("<br>Your HTTP referrer is: %s", "translatepress-multilingual"); ?>
|
| 91 |
<?php __("Language Switcher", "translatepress-multilingual"); ?>
|
| 92 |
<?php __("Shortcode ", "translatepress-multilingual"); ?>
|
| 93 |
<?php __("Use shortcode on any page or widget.", "translatepress-multilingual"); ?>
|
| 97 |
<?php __("Floating language selection", "translatepress-multilingual"); ?>
|
| 98 |
<?php __("Have a floating dropdown following the user on every page.", "translatepress-multilingual"); ?>
|
| 99 |
<?php __("Google API Key from settings page:", "translatepress-multilingual"); ?>
|
| 100 |
+
<?php __("HTTP Referrer:", "translatepress-multilingual"); ?>
|
| 101 |
+
<?php __("Use this HTTP Referrer if you want to restrict usage of the API from Google Dashboard.", "translatepress-multilingual"); ?>
|
| 102 |
<?php __("Response:", "translatepress-multilingual"); ?>
|
| 103 |
<?php __("Response Body:", "translatepress-multilingual"); ?>
|
| 104 |
<?php __("Entire Response From wp_remote_get():", "translatepress-multilingual"); ?>
|
| 138 |
<?php __("Batch size", "translatepress-multilingual"); ?>
|
| 139 |
<?php __("The number of rows to check at once.<br>Choosing a smaller number helps solve the 502 error \"Page took too long to respond\" on large databases.<br>May take several minutes depending on the database size.", "translatepress-multilingual"); ?>
|
| 140 |
<?php __("Remove duplicate rows", "translatepress-multilingual"); ?>
|
|
|
|
|
|
|
|
|
languages/translatepress-multilingual.pot
CHANGED
|
@@ -21,7 +21,7 @@ msgstr ""
|
|
| 21 |
msgid "Limit this menu item to the following languages"
|
| 22 |
msgstr ""
|
| 23 |
|
| 24 |
-
#: ../tp-add-on-seo-pack/class-seo-pack.php:
|
| 25 |
msgid "The Yoast SEO Sitemaps will now contain the default language slug: example.com/en/sitemap_index.xml <br/> This works perfectly, just take it into account when you submit the sitemap to Google."
|
| 26 |
msgstr ""
|
| 27 |
|
|
@@ -45,23 +45,23 @@ msgstr ""
|
|
| 45 |
msgid "<div class=\"warning\">WARNING. Cannot determine your language preference based on your current IP.<br>This is most likely because the website is on a local environment.</div>"
|
| 46 |
msgstr ""
|
| 47 |
|
| 48 |
-
#: partials/license-settings-page.php:4, ../tp-add-on-
|
| 49 |
msgid "TranslatePress Settings"
|
| 50 |
msgstr ""
|
| 51 |
|
| 52 |
-
#: partials/license-settings-page.php:10, ../tp-add-on-
|
| 53 |
msgid "License Key"
|
| 54 |
msgstr ""
|
| 55 |
|
| 56 |
-
#: partials/license-settings-page.php:15, ../tp-add-on-
|
| 57 |
msgid "Enter your license key."
|
| 58 |
msgstr ""
|
| 59 |
|
| 60 |
-
#: partials/license-settings-page.php:22, partials/license-settings-page.php:31, ../tp-add-on-
|
| 61 |
msgid "Activate License"
|
| 62 |
msgstr ""
|
| 63 |
|
| 64 |
-
#: partials/license-settings-page.php:28, ../tp-add-on-
|
| 65 |
msgid "Deactivate License"
|
| 66 |
msgstr ""
|
| 67 |
|
|
@@ -121,79 +121,79 @@ msgstr ""
|
|
| 121 |
msgid "Redirect users to their preferred language based on their browser language or IP address using our new <a href=\"https://translatepress.com/docs/addons/automatic-user-language-detection/\" >Automatic User Language Detection Add-on</a>."
|
| 122 |
msgstr ""
|
| 123 |
|
| 124 |
-
#: ../translatepress/includes/class-settings.php:
|
| 125 |
msgid "Full Language Names"
|
| 126 |
msgstr ""
|
| 127 |
|
| 128 |
-
#: ../translatepress/includes/class-settings.php:
|
| 129 |
msgid "Short Language Names"
|
| 130 |
msgstr ""
|
| 131 |
|
| 132 |
-
#: ../translatepress/includes/class-settings.php:
|
| 133 |
msgid "Flags with Full Language Names"
|
| 134 |
msgstr ""
|
| 135 |
|
| 136 |
-
#: ../translatepress/includes/class-settings.php:
|
| 137 |
msgid "Flags with Short Language Names"
|
| 138 |
msgstr ""
|
| 139 |
|
| 140 |
-
#: ../translatepress/includes/class-settings.php:
|
| 141 |
msgid "Only Flags"
|
| 142 |
msgstr ""
|
| 143 |
|
| 144 |
-
#: ../translatepress/includes/class-settings.php:
|
| 145 |
msgid "Done."
|
| 146 |
msgstr ""
|
| 147 |
|
| 148 |
-
#: ../translatepress/includes/class-settings.php:
|
| 149 |
msgid "Back to TranslatePress Settings page"
|
| 150 |
msgstr ""
|
| 151 |
|
| 152 |
-
#: ../translatepress/includes/class-settings.php:
|
| 153 |
msgid "Invalid nonce."
|
| 154 |
msgstr ""
|
| 155 |
|
| 156 |
-
#: ../translatepress/includes/class-settings.php:
|
| 157 |
msgid "Querying table <strong>%s</strong>"
|
| 158 |
msgstr ""
|
| 159 |
|
| 160 |
-
#: ../translatepress/includes/class-settings.php:
|
| 161 |
msgid "%s duplicates removed"
|
| 162 |
msgstr ""
|
| 163 |
|
| 164 |
-
#: ../translatepress/includes/class-settings.php:
|
| 165 |
msgid "If the page does not redirect automatically"
|
| 166 |
msgstr ""
|
| 167 |
|
| 168 |
-
#: ../translatepress/includes/class-settings.php:
|
| 169 |
msgid "click here"
|
| 170 |
msgstr ""
|
| 171 |
|
| 172 |
-
#: ../translatepress/includes/class-settings.php:
|
| 173 |
msgid "Current Language"
|
| 174 |
msgstr ""
|
| 175 |
|
| 176 |
-
#: ../translatepress/includes/class-settings.php:
|
| 177 |
msgid "General"
|
| 178 |
msgstr ""
|
| 179 |
|
| 180 |
-
#: ../translatepress/includes/class-settings.php:
|
| 181 |
msgid "Translate Site"
|
| 182 |
msgstr ""
|
| 183 |
|
| 184 |
-
#: ../translatepress/includes/class-settings.php:
|
| 185 |
msgid "License"
|
| 186 |
msgstr ""
|
| 187 |
|
| 188 |
-
#: ../translatepress/includes/class-settings.php:
|
| 189 |
msgid "Addons"
|
| 190 |
msgstr ""
|
| 191 |
|
| 192 |
-
#: ../translatepress/includes/class-settings.php:
|
| 193 |
msgid "Settings"
|
| 194 |
msgstr ""
|
| 195 |
|
| 196 |
-
#: ../translatepress/includes/class-settings.php:
|
| 197 |
msgid "Pro Features"
|
| 198 |
msgstr ""
|
| 199 |
|
|
@@ -229,47 +229,47 @@ msgstr ""
|
|
| 229 |
msgid "Dynamic Added Strings"
|
| 230 |
msgstr ""
|
| 231 |
|
| 232 |
-
#: ../translatepress/includes/class-translation-manager.php:
|
| 233 |
msgid "Translate Page"
|
| 234 |
msgstr ""
|
| 235 |
|
| 236 |
-
#: ../translatepress/includes/class-translation-manager.php:
|
| 237 |
msgid "Security check"
|
| 238 |
msgstr ""
|
| 239 |
|
| 240 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 241 |
msgid "Description"
|
| 242 |
msgstr ""
|
| 243 |
|
| 244 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 245 |
msgid "OG Title"
|
| 246 |
msgstr ""
|
| 247 |
|
| 248 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 249 |
msgid "OG Site Name"
|
| 250 |
msgstr ""
|
| 251 |
|
| 252 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 253 |
msgid "OG Description"
|
| 254 |
msgstr ""
|
| 255 |
|
| 256 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 257 |
msgid "Twitter Title"
|
| 258 |
msgstr ""
|
| 259 |
|
| 260 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 261 |
msgid "Twitter Description"
|
| 262 |
msgstr ""
|
| 263 |
|
| 264 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 265 |
msgid "Post Slug"
|
| 266 |
msgstr ""
|
| 267 |
|
| 268 |
-
#: ../translatepress/includes/class-translation-render.php:
|
| 269 |
msgid "Page Title"
|
| 270 |
msgstr ""
|
| 271 |
|
| 272 |
-
#: ../translatepress/includes/functions.php:
|
| 273 |
msgid "<strong>TranslatePress</strong> requires <strong><a href=\"http://php.net/manual/en/book.mbstring.php\">Multibyte String PHP library</a></strong>. Please contact your server administrator to install it on your server."
|
| 274 |
msgstr ""
|
| 275 |
|
|
@@ -358,58 +358,70 @@ msgid "Google Translate API Key"
|
|
| 358 |
msgstr ""
|
| 359 |
|
| 360 |
#: ../translatepress/partials/main-settings-page.php:92
|
| 361 |
-
msgid "Test
|
| 362 |
msgstr ""
|
| 363 |
|
| 364 |
#: ../translatepress/partials/main-settings-page.php:94
|
| 365 |
-
msgid "Visit
|
| 366 |
msgstr ""
|
| 367 |
|
| 368 |
-
#: ../translatepress/partials/main-settings-page.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
| 369 |
msgid "Language Switcher"
|
| 370 |
msgstr ""
|
| 371 |
|
| 372 |
-
#: ../translatepress/partials/main-settings-page.php:
|
| 373 |
msgid "Shortcode "
|
| 374 |
msgstr ""
|
| 375 |
|
| 376 |
-
#: ../translatepress/partials/main-settings-page.php:
|
| 377 |
msgid "Use shortcode on any page or widget."
|
| 378 |
msgstr ""
|
| 379 |
|
| 380 |
-
#: ../translatepress/partials/main-settings-page.php:
|
| 381 |
msgid "Menu item"
|
| 382 |
msgstr ""
|
| 383 |
|
| 384 |
-
#: ../translatepress/partials/main-settings-page.php:
|
| 385 |
msgid "Go to %1$s Appearance -> Menus%2$s to add Language Switcher Languages in any menu."
|
| 386 |
msgstr ""
|
| 387 |
|
| 388 |
-
#: ../translatepress/partials/main-settings-page.php:
|
| 389 |
msgid "Learn more in our documentation."
|
| 390 |
msgstr ""
|
| 391 |
|
| 392 |
-
#: ../translatepress/partials/main-settings-page.php:
|
| 393 |
msgid "Floating language selection"
|
| 394 |
msgstr ""
|
| 395 |
|
| 396 |
-
#: ../translatepress/partials/main-settings-page.php:
|
| 397 |
msgid "Have a floating dropdown following the user on every page."
|
| 398 |
msgstr ""
|
| 399 |
|
| 400 |
-
#: ../translatepress/partials/test-google-key-settings-page.php:
|
| 401 |
msgid "Google API Key from settings page:"
|
| 402 |
msgstr ""
|
| 403 |
|
| 404 |
-
#: ../translatepress/partials/test-google-key-settings-page.php:
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 405 |
msgid "Response:"
|
| 406 |
msgstr ""
|
| 407 |
|
| 408 |
-
#: ../translatepress/partials/test-google-key-settings-page.php:
|
| 409 |
msgid "Response Body:"
|
| 410 |
msgstr ""
|
| 411 |
|
| 412 |
-
#: ../translatepress/partials/test-google-key-settings-page.php:
|
| 413 |
msgid "Entire Response From wp_remote_get():"
|
| 414 |
msgstr ""
|
| 415 |
|
|
@@ -558,15 +570,3 @@ msgstr ""
|
|
| 558 |
#: ../translatepress/partials/trp-remove-duplicate-rows.php:28
|
| 559 |
msgid "Remove duplicate rows"
|
| 560 |
msgstr ""
|
| 561 |
-
|
| 562 |
-
#: ../trp-add-on-translator-accounts-add-on/includes/class-translator-accounts.php:119
|
| 563 |
-
msgid " TranslatePress Settings"
|
| 564 |
-
msgstr ""
|
| 565 |
-
|
| 566 |
-
#: ../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
|
| 567 |
-
msgid "Translator"
|
| 568 |
-
msgstr ""
|
| 569 |
-
|
| 570 |
-
#: ../trp-add-on-translator-accounts-add-on/includes/class-translator-accounts.php:128
|
| 571 |
-
msgid "Allow this user to translate the website."
|
| 572 |
-
msgstr ""
|
| 21 |
msgid "Limit this menu item to the following languages"
|
| 22 |
msgstr ""
|
| 23 |
|
| 24 |
+
#: ../tp-add-on-seo-pack/class-seo-pack.php:158
|
| 25 |
msgid "The Yoast SEO Sitemaps will now contain the default language slug: example.com/en/sitemap_index.xml <br/> This works perfectly, just take it into account when you submit the sitemap to Google."
|
| 26 |
msgstr ""
|
| 27 |
|
| 45 |
msgid "<div class=\"warning\">WARNING. Cannot determine your language preference based on your current IP.<br>This is most likely because the website is on a local environment.</div>"
|
| 46 |
msgstr ""
|
| 47 |
|
| 48 |
+
#: partials/license-settings-page.php:4, ../tp-add-on-extra-languages/partials/license-settings-page.php:4, ../tp-add-on-navigation-based-on-language/partials/license-settings-page.php:4, ../tp-add-on-seo-pack/partials/license-settings-page.php:4, ../translatepress/partials/addons-settings-page.php:3, ../translatepress/partials/main-settings-page.php:5, ../translatepress/partials/test-google-key-settings-page.php:10, ../translatepress/partials/trp-remove-duplicate-rows.php:3
|
| 49 |
msgid "TranslatePress Settings"
|
| 50 |
msgstr ""
|
| 51 |
|
| 52 |
+
#: 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
|
| 53 |
msgid "License Key"
|
| 54 |
msgstr ""
|
| 55 |
|
| 56 |
+
#: 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
|
| 57 |
msgid "Enter your license key."
|
| 58 |
msgstr ""
|
| 59 |
|
| 60 |
+
#: partials/license-settings-page.php:22, partials/license-settings-page.php:31, ../tp-add-on-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
|
| 61 |
msgid "Activate License"
|
| 62 |
msgstr ""
|
| 63 |
|
| 64 |
+
#: 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
|
| 65 |
msgid "Deactivate License"
|
| 66 |
msgstr ""
|
| 67 |
|
| 121 |
msgid "Redirect users to their preferred language based on their browser language or IP address using our new <a href=\"https://translatepress.com/docs/addons/automatic-user-language-detection/\" >Automatic User Language Detection Add-on</a>."
|
| 122 |
msgstr ""
|
| 123 |
|
| 124 |
+
#: ../translatepress/includes/class-settings.php:26
|
| 125 |
msgid "Full Language Names"
|
| 126 |
msgstr ""
|
| 127 |
|
| 128 |
+
#: ../translatepress/includes/class-settings.php:27
|
| 129 |
msgid "Short Language Names"
|
| 130 |
msgstr ""
|
| 131 |
|
| 132 |
+
#: ../translatepress/includes/class-settings.php:28
|
| 133 |
msgid "Flags with Full Language Names"
|
| 134 |
msgstr ""
|
| 135 |
|
| 136 |
+
#: ../translatepress/includes/class-settings.php:29
|
| 137 |
msgid "Flags with Short Language Names"
|
| 138 |
msgstr ""
|
| 139 |
|
| 140 |
+
#: ../translatepress/includes/class-settings.php:30
|
| 141 |
msgid "Only Flags"
|
| 142 |
msgstr ""
|
| 143 |
|
| 144 |
+
#: ../translatepress/includes/class-settings.php:124
|
| 145 |
msgid "Done."
|
| 146 |
msgstr ""
|
| 147 |
|
| 148 |
+
#: ../translatepress/includes/class-settings.php:124, ../translatepress/includes/class-settings.php:129
|
| 149 |
msgid "Back to TranslatePress Settings page"
|
| 150 |
msgstr ""
|
| 151 |
|
| 152 |
+
#: ../translatepress/includes/class-settings.php:129
|
| 153 |
msgid "Invalid nonce."
|
| 154 |
msgstr ""
|
| 155 |
|
| 156 |
+
#: ../translatepress/includes/class-settings.php:149
|
| 157 |
msgid "Querying table <strong>%s</strong>"
|
| 158 |
msgstr ""
|
| 159 |
|
| 160 |
+
#: ../translatepress/includes/class-settings.php:179
|
| 161 |
msgid "%s duplicates removed"
|
| 162 |
msgstr ""
|
| 163 |
|
| 164 |
+
#: ../translatepress/includes/class-settings.php:209
|
| 165 |
msgid "If the page does not redirect automatically"
|
| 166 |
msgstr ""
|
| 167 |
|
| 168 |
+
#: ../translatepress/includes/class-settings.php:209
|
| 169 |
msgid "click here"
|
| 170 |
msgstr ""
|
| 171 |
|
| 172 |
+
#: ../translatepress/includes/class-settings.php:452
|
| 173 |
msgid "Current Language"
|
| 174 |
msgstr ""
|
| 175 |
|
| 176 |
+
#: ../translatepress/includes/class-settings.php:493
|
| 177 |
msgid "General"
|
| 178 |
msgstr ""
|
| 179 |
|
| 180 |
+
#: ../translatepress/includes/class-settings.php:498, ../translatepress/includes/class-translation-manager.php:617
|
| 181 |
msgid "Translate Site"
|
| 182 |
msgstr ""
|
| 183 |
|
| 184 |
+
#: ../translatepress/includes/class-settings.php:506
|
| 185 |
msgid "License"
|
| 186 |
msgstr ""
|
| 187 |
|
| 188 |
+
#: ../translatepress/includes/class-settings.php:512
|
| 189 |
msgid "Addons"
|
| 190 |
msgstr ""
|
| 191 |
|
| 192 |
+
#: ../translatepress/includes/class-settings.php:537, ../translatepress/includes/class-translation-manager.php:648
|
| 193 |
msgid "Settings"
|
| 194 |
msgstr ""
|
| 195 |
|
| 196 |
+
#: ../translatepress/includes/class-settings.php:541
|
| 197 |
msgid "Pro Features"
|
| 198 |
msgstr ""
|
| 199 |
|
| 229 |
msgid "Dynamic Added Strings"
|
| 230 |
msgstr ""
|
| 231 |
|
| 232 |
+
#: ../translatepress/includes/class-translation-manager.php:629
|
| 233 |
msgid "Translate Page"
|
| 234 |
msgstr ""
|
| 235 |
|
| 236 |
+
#: ../translatepress/includes/class-translation-manager.php:1141
|
| 237 |
msgid "Security check"
|
| 238 |
msgstr ""
|
| 239 |
|
| 240 |
+
#: ../translatepress/includes/class-translation-render.php:161
|
| 241 |
msgid "Description"
|
| 242 |
msgstr ""
|
| 243 |
|
| 244 |
+
#: ../translatepress/includes/class-translation-render.php:167
|
| 245 |
msgid "OG Title"
|
| 246 |
msgstr ""
|
| 247 |
|
| 248 |
+
#: ../translatepress/includes/class-translation-render.php:173
|
| 249 |
msgid "OG Site Name"
|
| 250 |
msgstr ""
|
| 251 |
|
| 252 |
+
#: ../translatepress/includes/class-translation-render.php:179
|
| 253 |
msgid "OG Description"
|
| 254 |
msgstr ""
|
| 255 |
|
| 256 |
+
#: ../translatepress/includes/class-translation-render.php:185
|
| 257 |
msgid "Twitter Title"
|
| 258 |
msgstr ""
|
| 259 |
|
| 260 |
+
#: ../translatepress/includes/class-translation-render.php:191
|
| 261 |
msgid "Twitter Description"
|
| 262 |
msgstr ""
|
| 263 |
|
| 264 |
+
#: ../translatepress/includes/class-translation-render.php:197
|
| 265 |
msgid "Post Slug"
|
| 266 |
msgstr ""
|
| 267 |
|
| 268 |
+
#: ../translatepress/includes/class-translation-render.php:201
|
| 269 |
msgid "Page Title"
|
| 270 |
msgstr ""
|
| 271 |
|
| 272 |
+
#: ../translatepress/includes/functions.php:216
|
| 273 |
msgid "<strong>TranslatePress</strong> requires <strong><a href=\"http://php.net/manual/en/book.mbstring.php\">Multibyte String PHP library</a></strong>. Please contact your server administrator to install it on your server."
|
| 274 |
msgstr ""
|
| 275 |
|
| 358 |
msgstr ""
|
| 359 |
|
| 360 |
#: ../translatepress/partials/main-settings-page.php:92
|
| 361 |
+
msgid "Test API key"
|
| 362 |
msgstr ""
|
| 363 |
|
| 364 |
#: ../translatepress/partials/main-settings-page.php:94
|
| 365 |
+
msgid "Visit <a href=\"https://cloud.google.com/docs/authentication/api-keys\" target=\"_blank\">this link</a> to see how you can set up an API key, <strong>control API costs</strong> and set HTTP referrer restrictions."
|
| 366 |
msgstr ""
|
| 367 |
|
| 368 |
+
#: ../translatepress/partials/main-settings-page.php:95
|
| 369 |
+
msgid "<br>Your HTTP referrer is: %s"
|
| 370 |
+
msgstr ""
|
| 371 |
+
|
| 372 |
+
#: ../translatepress/partials/main-settings-page.php:102
|
| 373 |
msgid "Language Switcher"
|
| 374 |
msgstr ""
|
| 375 |
|
| 376 |
+
#: ../translatepress/partials/main-settings-page.php:105
|
| 377 |
msgid "Shortcode "
|
| 378 |
msgstr ""
|
| 379 |
|
| 380 |
+
#: ../translatepress/partials/main-settings-page.php:110
|
| 381 |
msgid "Use shortcode on any page or widget."
|
| 382 |
msgstr ""
|
| 383 |
|
| 384 |
+
#: ../translatepress/partials/main-settings-page.php:114
|
| 385 |
msgid "Menu item"
|
| 386 |
msgstr ""
|
| 387 |
|
| 388 |
+
#: ../translatepress/partials/main-settings-page.php:122
|
| 389 |
msgid "Go to %1$s Appearance -> Menus%2$s to add Language Switcher Languages in any menu."
|
| 390 |
msgstr ""
|
| 391 |
|
| 392 |
+
#: ../translatepress/partials/main-settings-page.php:123
|
| 393 |
msgid "Learn more in our documentation."
|
| 394 |
msgstr ""
|
| 395 |
|
| 396 |
+
#: ../translatepress/partials/main-settings-page.php:127
|
| 397 |
msgid "Floating language selection"
|
| 398 |
msgstr ""
|
| 399 |
|
| 400 |
+
#: ../translatepress/partials/main-settings-page.php:132
|
| 401 |
msgid "Have a floating dropdown following the user on every page."
|
| 402 |
msgstr ""
|
| 403 |
|
| 404 |
+
#: ../translatepress/partials/test-google-key-settings-page.php:15
|
| 405 |
msgid "Google API Key from settings page:"
|
| 406 |
msgstr ""
|
| 407 |
|
| 408 |
+
#: ../translatepress/partials/test-google-key-settings-page.php:17
|
| 409 |
+
msgid "HTTP Referrer:"
|
| 410 |
+
msgstr ""
|
| 411 |
+
|
| 412 |
+
#: ../translatepress/partials/test-google-key-settings-page.php:18
|
| 413 |
+
msgid "Use this HTTP Referrer if you want to restrict usage of the API from Google Dashboard."
|
| 414 |
+
msgstr ""
|
| 415 |
+
|
| 416 |
+
#: ../translatepress/partials/test-google-key-settings-page.php:20
|
| 417 |
msgid "Response:"
|
| 418 |
msgstr ""
|
| 419 |
|
| 420 |
+
#: ../translatepress/partials/test-google-key-settings-page.php:24
|
| 421 |
msgid "Response Body:"
|
| 422 |
msgstr ""
|
| 423 |
|
| 424 |
+
#: ../translatepress/partials/test-google-key-settings-page.php:29
|
| 425 |
msgid "Entire Response From wp_remote_get():"
|
| 426 |
msgstr ""
|
| 427 |
|
| 570 |
#: ../translatepress/partials/trp-remove-duplicate-rows.php:28
|
| 571 |
msgid "Remove duplicate rows"
|
| 572 |
msgstr ""
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
partials/main-settings-page.php
CHANGED
|
@@ -36,7 +36,7 @@
|
|
| 36 |
<tr>
|
| 37 |
<th scope="row"><?php _e( 'Native language name', 'translatepress-multilingual' ); ?> </th>
|
| 38 |
<td>
|
| 39 |
-
<select id="trp-
|
| 40 |
<option value="english_name" <?php selected( $this->settings['native_or_english_name'], 'english_name' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
|
| 41 |
<option value="native_name" <?php selected( $this->settings['native_or_english_name'], 'native_name' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
| 42 |
</select>
|
|
@@ -49,7 +49,7 @@
|
|
| 49 |
<tr>
|
| 50 |
<th scope="row"><?php _e( 'Use subdirectory for default language', 'translatepress-multilingual' ); ?> </th>
|
| 51 |
<td>
|
| 52 |
-
<select id="trp-
|
| 53 |
<option value="no" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'no' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
|
| 54 |
<option value="yes" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
| 55 |
</select>
|
|
@@ -62,7 +62,7 @@
|
|
| 62 |
<tr>
|
| 63 |
<th scope="row"><?php _e( 'Force language in custom links', 'translatepress-multilingual' ); ?> </th>
|
| 64 |
<td>
|
| 65 |
-
<select id="trp-
|
| 66 |
<option value="no" <?php selected( $this->settings['force-language-to-custom-links'], 'no' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
|
| 67 |
<option value="yes" <?php selected( $this->settings['force-language-to-custom-links'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
| 68 |
</select>
|
|
@@ -89,9 +89,10 @@
|
|
| 89 |
<th scope="row"><?php _e( 'Google Translate API Key', 'translatepress-multilingual' ); ?> </th>
|
| 90 |
<td>
|
| 91 |
<input type="text" id="trp-g-translate-key" class="trp-text-input" name="trp_settings[g-translate-key]" value="<?php if( !empty( $this->settings['g-translate-key'] ) ) echo esc_attr( $this->settings['g-translate-key']);?>"/>
|
| 92 |
-
<?php if( !empty( $this->settings['g-translate-key'] ) ) echo '<a href="'.admin_url( 'admin.php?page=trp_test_google_key_page' ).'">'.__( "Test
|
| 93 |
<p class="description">
|
| 94 |
-
<?php _e( 'Visit
|
|
|
|
| 95 |
</p>
|
| 96 |
</td>
|
| 97 |
|
| 36 |
<tr>
|
| 37 |
<th scope="row"><?php _e( 'Native language name', 'translatepress-multilingual' ); ?> </th>
|
| 38 |
<td>
|
| 39 |
+
<select id="trp-native-language-name" name="trp_settings[native_or_english_name]" class="trp-select">
|
| 40 |
<option value="english_name" <?php selected( $this->settings['native_or_english_name'], 'english_name' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
|
| 41 |
<option value="native_name" <?php selected( $this->settings['native_or_english_name'], 'native_name' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
| 42 |
</select>
|
| 49 |
<tr>
|
| 50 |
<th scope="row"><?php _e( 'Use subdirectory for default language', 'translatepress-multilingual' ); ?> </th>
|
| 51 |
<td>
|
| 52 |
+
<select id="trp-subdirectory-for-default-language" name="trp_settings[add-subdirectory-to-default-language]" class="trp-select">
|
| 53 |
<option value="no" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'no' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
|
| 54 |
<option value="yes" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
| 55 |
</select>
|
| 62 |
<tr>
|
| 63 |
<th scope="row"><?php _e( 'Force language in custom links', 'translatepress-multilingual' ); ?> </th>
|
| 64 |
<td>
|
| 65 |
+
<select id="trp-force-language-in-custom-links" name="trp_settings[force-language-to-custom-links]" class="trp-select">
|
| 66 |
<option value="no" <?php selected( $this->settings['force-language-to-custom-links'], 'no' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
|
| 67 |
<option value="yes" <?php selected( $this->settings['force-language-to-custom-links'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
|
| 68 |
</select>
|
| 89 |
<th scope="row"><?php _e( 'Google Translate API Key', 'translatepress-multilingual' ); ?> </th>
|
| 90 |
<td>
|
| 91 |
<input type="text" id="trp-g-translate-key" class="trp-text-input" name="trp_settings[g-translate-key]" value="<?php if( !empty( $this->settings['g-translate-key'] ) ) echo esc_attr( $this->settings['g-translate-key']);?>"/>
|
| 92 |
+
<?php if( !empty( $this->settings['g-translate-key'] ) ) echo '<a href="'.admin_url( 'admin.php?page=trp_test_google_key_page' ).'">'.__( "Test API key", 'translatepress-multilingual' ).'</a>'; ?>
|
| 93 |
<p class="description">
|
| 94 |
+
<?php _e( 'Visit <a href="https://cloud.google.com/docs/authentication/api-keys" target="_blank">this link</a> to see how you can set up an API key, <strong>control API costs</strong> and set HTTP referrer restrictions.', 'translatepress-multilingual' ); ?>
|
| 95 |
+
<?php echo sprintf( __( '<br>Your HTTP referrer is: %s', 'translatepress-multilingual' ), $gtranslate_referer ); ?>
|
| 96 |
</p>
|
| 97 |
</td>
|
| 98 |
|
partials/test-google-key-settings-page.php
CHANGED
|
@@ -1,16 +1,9 @@
|
|
| 1 |
<?php
|
| 2 |
-
|
| 3 |
-
$
|
| 4 |
-
$
|
| 5 |
-
$
|
| 6 |
-
|
| 7 |
-
|
| 8 |
-
/* Due to url length restrictions we need so send a POST request faked as a GET request and send the strings in the body of the request and not in the URL */
|
| 9 |
-
$response = wp_remote_post( "https://www.googleapis.com/language/translate/v2", array(
|
| 10 |
-
'headers' => array( 'X-HTTP-Method-Override' => 'GET' ),//this fakes a GET request
|
| 11 |
-
'body' => $translation_request,
|
| 12 |
-
)
|
| 13 |
-
);
|
| 14 |
?>
|
| 15 |
<div id="trp-addons-page" class="wrap">
|
| 16 |
|
|
@@ -19,7 +12,10 @@ $response = wp_remote_post( "https://www.googleapis.com/language/translate/v2",
|
|
| 19 |
|
| 20 |
<div class="grid feat-header">
|
| 21 |
<div class="grid-cell">
|
| 22 |
-
<h2><?php _e('Google API Key from settings page:', 'translatepress-multilingual');?> <span style="font-family:monospace"><?php echo $this->settings['g-translate-key']; ?></span></h2>
|
|
|
|
|
|
|
|
|
|
| 23 |
|
| 24 |
<h3><?php _e('Response:', 'translatepress-multilingual');?></h3>
|
| 25 |
<pre>
|
| 1 |
<?php
|
| 2 |
+
|
| 3 |
+
$trp = TRP_Translate_Press::get_trp_instance();
|
| 4 |
+
$machine_translator = $trp->get_component( 'machine_translator' );
|
| 5 |
+
$response = $machine_translator->send_request( 'en', 'es', array( 'about' ) );
|
| 6 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 7 |
?>
|
| 8 |
<div id="trp-addons-page" class="wrap">
|
| 9 |
|
| 12 |
|
| 13 |
<div class="grid feat-header">
|
| 14 |
<div class="grid-cell">
|
| 15 |
+
<h2><?php _e('Google API Key from settings page:', 'translatepress-multilingual');?> <span style="font-family:monospace"><?php echo esc_html( $this->settings['g-translate-key'] ); ?></span></h2>
|
| 16 |
+
|
| 17 |
+
<h2><?php _e('HTTP Referrer:', 'translatepress-multilingual');?> <span style="font-family:monospace"><?php echo esc_url( $machine_translator->get_referer() ); ?></span></h2>
|
| 18 |
+
<p><?php _e('Use this HTTP Referrer if you want to restrict usage of the API from Google Dashboard.', 'translatepress-multilingual'); ?></p>
|
| 19 |
|
| 20 |
<h3><?php _e('Response:', 'translatepress-multilingual');?></h3>
|
| 21 |
<pre>
|
readme.txt
CHANGED
|
@@ -4,7 +4,7 @@ Donate link: https://www.cozmoslabs.com/
|
|
| 4 |
Tags: translate, translation, multilingual, automatic translation, bilingual, front-end translation, google translate, language
|
| 5 |
Requires at least: 3.1.0
|
| 6 |
Tested up to: 4.9.8
|
| 7 |
-
Stable tag: 1.3.
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
|
@@ -124,6 +124,18 @@ For more information please check out [TranslatePress - Multilingual plugin docu
|
|
| 124 |
6. Menu Language Switcher
|
| 125 |
|
| 126 |
== Changelog ==
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 127 |
= 1.3.5 =
|
| 128 |
* Fixed translation problems introduced in the last two versions
|
| 129 |
* Added a console message when trp-ajax request uses fall back to admin ajax for debugging purposes.
|
| 4 |
Tags: translate, translation, multilingual, automatic translation, bilingual, front-end translation, google translate, language
|
| 5 |
Requires at least: 3.1.0
|
| 6 |
Tested up to: 4.9.8
|
| 7 |
+
Stable tag: 1.3.6
|
| 8 |
License: GPLv2 or later
|
| 9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
| 10 |
|
| 124 |
6. Menu Language Switcher
|
| 125 |
|
| 126 |
== Changelog ==
|
| 127 |
+
= 1.3.6 =
|
| 128 |
+
* Refactored the get_url_for_language() function which should fix a lot of problems with links
|
| 129 |
+
* Speed improvements
|
| 130 |
+
* Fixed translation block icon when creating a new block
|
| 131 |
+
* Fixed issues with trp tags leftovers in html
|
| 132 |
+
* Fixed issues with gettext strings that weren't detected correctly
|
| 133 |
+
* Add support for relative url's
|
| 134 |
+
* Added warning in settings about controlling costs of Google API
|
| 135 |
+
* Changed API key field description. Added feature to show/hide API key field based on Google Translate Active Yes/No
|
| 136 |
+
* Fixed Translated-dom-changes string not translated through trp-ajax.
|
| 137 |
+
* Fixed 400 errors in google translate API
|
| 138 |
+
|
| 139 |
= 1.3.5 =
|
| 140 |
* Fixed translation problems introduced in the last two versions
|
| 141 |
* Added a console message when trp-ajax request uses fall back to admin ajax for debugging purposes.
|
