Version Description
- Fixed incorrect blog prefix name for Multisite subsites on admin_bar gettext hook.
- Fixed Translate Page admin bar button sometimes not having the correct url for entering TP Editor Mode
- Skipped dynamic strings that have only numbers and special characters.
- Fixed order of categories in Editor dropdown. (Meta Information, String List..)
- Fixed JS error Uncaught Error: Syntax error, unrecognized expression
Download this release
Release Info
Developer | madalin.ungureanu |
Plugin | TranslatePress – Translate Multilingual sites |
Version | 1.0.1 |
Comparing to | |
See all releases |
Code changes from version 1.0.0 to 1.0.1
- assets/js/trp-editor-script.js +6 -32
- assets/js/trp-iframe-preview-script.js +12 -10
- assets/js/trp-translate-dom-changes.js +109 -5
- class-translate-press.php +1 -1
- includes/class-query.php +2 -2
- includes/class-translation-manager.php +6 -12
- index.php +1 -1
- partials/main-settings-page.php +1 -1
- readme.txt +53 -24
assets/js/trp-editor-script.js
CHANGED
@@ -335,34 +335,6 @@ function TRP_Editor(){
|
|
335 |
}
|
336 |
};
|
337 |
|
338 |
-
/**
|
339 |
-
* Function that changes the value of a GET parameter
|
340 |
-
* @param link the url in which we make the change
|
341 |
-
* @param name the name of the parameter we want to change
|
342 |
-
* @param value the new value
|
343 |
-
* @returns {*}
|
344 |
-
*/
|
345 |
-
this.set_url_param = function( link, name, value ){
|
346 |
-
if( typeof link == 'undefined' )
|
347 |
-
return;
|
348 |
-
|
349 |
-
/* check if wh have any get parameters */
|
350 |
-
if( link.search( "\\?" ) === -1 ){
|
351 |
-
link = link + '?'+ name + '=' + value;
|
352 |
-
}
|
353 |
-
else{
|
354 |
-
/* check to see if the parameter is already there */
|
355 |
-
thisParamValue = wppbGetUrlParam( name, link );
|
356 |
-
if( thisParamValue !== null ){
|
357 |
-
link = link.replace( name+'='+thisParamValue, name+'='+value );
|
358 |
-
}
|
359 |
-
else{
|
360 |
-
link = link + '&'+ name + '=' + value;
|
361 |
-
}
|
362 |
-
}
|
363 |
-
return link;
|
364 |
-
};
|
365 |
-
|
366 |
/**
|
367 |
* Resizing preview window.
|
368 |
*
|
@@ -452,8 +424,8 @@ function TRP_Editor(){
|
|
452 |
*/
|
453 |
function format_option(option){
|
454 |
option = jQuery(
|
455 |
-
|
456 |
-
|
457 |
return option;
|
458 |
}
|
459 |
|
@@ -561,6 +533,8 @@ function TRP_Dictionary( language_code ){
|
|
561 |
*/
|
562 |
this.get_categories = function (){
|
563 |
var categorized = [];
|
|
|
|
|
564 |
for ( var i in _this.strings ){
|
565 |
if ( categorized[ _this.strings[i].node_type ] == undefined ) {
|
566 |
categorized[ _this.strings[i].node_type ] = [];
|
@@ -787,7 +761,7 @@ function TRP_Lister( current_dictionary ) {
|
|
787 |
this.reload_list = function (){
|
788 |
category_array = dictionary.get_categories();
|
789 |
jQuery( "#trp-gettext-strings-optgroup", jquery_string_selector ).prevAll(":not(.default-option)").remove();
|
790 |
-
/* add the normal strings before the trp-gettext-strings-optgroup optiongroup so it doesn't matter which ajax finishes first */
|
791 |
for ( var category in category_array ){
|
792 |
jQuery( "#trp-gettext-strings-optgroup", jquery_string_selector ).before( jQuery( '<optgroup></optgroup>' ).attr( 'label', _this.format_category_name( category ) ) );
|
793 |
for ( var i in category_array[category] ) {
|
@@ -1053,7 +1027,7 @@ var gettext_dictionaries = null;
|
|
1053 |
jQuery(function(){
|
1054 |
/* initial load and populate the dropdown with gettext strings */
|
1055 |
jQuery( "#trp-preview-iframe" ).load(function(){
|
1056 |
-
/* get the gettext texts ids from the page and pass them to a ajax call to construct the dictonaries */
|
1057 |
var gettext_strings = jQuery( '#trp-preview-iframe').contents().find( '[data-trpgettextoriginal]' );
|
1058 |
gettext_string_ids = [];
|
1059 |
gettext_strings.each( function(){
|
335 |
}
|
336 |
};
|
337 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
338 |
/**
|
339 |
* Resizing preview window.
|
340 |
*
|
424 |
*/
|
425 |
function format_option(option){
|
426 |
option = jQuery(
|
427 |
+
'<div>' + option.text + '</div><div class="string-selector-description">' + option.title + '</div>'
|
428 |
+
);
|
429 |
return option;
|
430 |
}
|
431 |
|
533 |
*/
|
534 |
this.get_categories = function (){
|
535 |
var categorized = [];
|
536 |
+
categorized[ 'Meta Information' ] = [];
|
537 |
+
categorized[ 'String List' ] = [];
|
538 |
for ( var i in _this.strings ){
|
539 |
if ( categorized[ _this.strings[i].node_type ] == undefined ) {
|
540 |
categorized[ _this.strings[i].node_type ] = [];
|
761 |
this.reload_list = function (){
|
762 |
category_array = dictionary.get_categories();
|
763 |
jQuery( "#trp-gettext-strings-optgroup", jquery_string_selector ).prevAll(":not(.default-option)").remove();
|
764 |
+
/* add the normal strings before the trp-gettext-strings-optgroup optiongroup so it doesn't matter which ajax finishes first */
|
765 |
for ( var category in category_array ){
|
766 |
jQuery( "#trp-gettext-strings-optgroup", jquery_string_selector ).before( jQuery( '<optgroup></optgroup>' ).attr( 'label', _this.format_category_name( category ) ) );
|
767 |
for ( var i in category_array[category] ) {
|
1027 |
jQuery(function(){
|
1028 |
/* initial load and populate the dropdown with gettext strings */
|
1029 |
jQuery( "#trp-preview-iframe" ).load(function(){
|
1030 |
+
/* get the gettext texts ids from the page and pass them to a ajax call to construct the dictonaries */
|
1031 |
var gettext_strings = jQuery( '#trp-preview-iframe').contents().find( '[data-trpgettextoriginal]' );
|
1032 |
gettext_string_ids = [];
|
1033 |
gettext_strings.each( function(){
|
assets/js/trp-iframe-preview-script.js
CHANGED
@@ -9,16 +9,18 @@ function TRP_Iframe_Preview(){
|
|
9 |
* Add GET preview parameter for links and forms.
|
10 |
*/
|
11 |
this.initialize = function() {
|
12 |
-
jQuery('a').each(function () {
|
13 |
-
if
|
14 |
-
if (
|
15 |
-
this
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
event
|
20 |
-
|
21 |
-
|
|
|
|
|
22 |
}
|
23 |
}
|
24 |
});
|
9 |
* Add GET preview parameter for links and forms.
|
10 |
*/
|
11 |
this.initialize = function() {
|
12 |
+
jQuery('a').each(function () {
|
13 |
+
if( typeof this.href != "undefined" && this.href != '' ) {
|
14 |
+
if (this.action != '' && this.href.indexOf('void(0)') === -1) {
|
15 |
+
if (is_link_previewable(this) && !this.getAttribute('href').startsWith('#')) {
|
16 |
+
this.href = update_query_string('trp-edit-translation', 'preview', this.getAttribute('href'));
|
17 |
+
} else {
|
18 |
+
jQuery(this).on('click',
|
19 |
+
function (event) {
|
20 |
+
event.preventDefault();
|
21 |
+
}
|
22 |
+
);
|
23 |
+
}
|
24 |
}
|
25 |
}
|
26 |
});
|
assets/js/trp-translate-dom-changes.js
CHANGED
@@ -10,6 +10,7 @@ function TRP_Translator(){
|
|
10 |
var ajax_url = trp_data.trp_ajax_url;
|
11 |
var wp_ajax_url = trp_data.trp_wp_ajax_url;
|
12 |
var language_to_query;
|
|
|
13 |
|
14 |
/**
|
15 |
* Ajax request to get translations for strings
|
@@ -90,7 +91,7 @@ function TRP_Translator(){
|
|
90 |
var strings = [];
|
91 |
mutations.forEach( function (mutation) {
|
92 |
for (var i = 0; i < mutation.addedNodes.length; i++) {
|
93 |
-
if ( mutation.addedNodes[i].innerText && mutation.addedNodes[i].innerText.trim() != '' ) {
|
94 |
var node = jQuery( mutation.addedNodes[i] );
|
95 |
var attribute = node.attr( 'data-no-translation' );
|
96 |
if ( (typeof attribute !== typeof undefined && attribute !== false) || node.parents( '[data-no-translation]').length > 0 ){
|
@@ -99,7 +100,7 @@ function TRP_Translator(){
|
|
99 |
|
100 |
/* if it is an anchor add the trp-edit-translation=preview parameter to it */
|
101 |
if ( typeof parent.trpEditor !== 'undefined' ) {
|
102 |
-
jQuery(mutation.addedNodes[i]).find('a').context.href =
|
103 |
}
|
104 |
|
105 |
var all_nodes = jQuery( mutation.addedNodes[i]).find( '*').addBack();
|
@@ -113,8 +114,10 @@ function TRP_Translator(){
|
|
113 |
}
|
114 |
var all_strings_length = all_strings.length;
|
115 |
for (var j = 0; j < all_strings_length; j++ ) {
|
116 |
-
|
117 |
-
|
|
|
|
|
118 |
}
|
119 |
}
|
120 |
}
|
@@ -125,11 +128,48 @@ function TRP_Translator(){
|
|
125 |
}
|
126 |
};
|
127 |
|
128 |
-
//function that cleans the gettext wrappers
|
129 |
this.cleanup_gettext_wrapper = function(){
|
130 |
jQuery('trp-gettext').contents().unwrap();
|
131 |
};
|
132 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
133 |
/**
|
134 |
* Initialize and configure observer.
|
135 |
*/
|
@@ -176,6 +216,70 @@ function TRP_Translator(){
|
|
176 |
active = false;
|
177 |
};
|
178 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
179 |
_this.initialize();
|
180 |
}
|
181 |
|
10 |
var ajax_url = trp_data.trp_ajax_url;
|
11 |
var wp_ajax_url = trp_data.trp_wp_ajax_url;
|
12 |
var language_to_query;
|
13 |
+
var except_characters = " \t\n\r �.,/`~!@#$€£%^&*():;-_=+[]{}\\|?/<>1234567890'";
|
14 |
|
15 |
/**
|
16 |
* Ajax request to get translations for strings
|
91 |
var strings = [];
|
92 |
mutations.forEach( function (mutation) {
|
93 |
for (var i = 0; i < mutation.addedNodes.length; i++) {
|
94 |
+
if ( mutation.addedNodes[i].innerText && _this.trim( mutation.addedNodes[i].innerText.trim(), except_characters ) != '' ) {
|
95 |
var node = jQuery( mutation.addedNodes[i] );
|
96 |
var attribute = node.attr( 'data-no-translation' );
|
97 |
if ( (typeof attribute !== typeof undefined && attribute !== false) || node.parents( '[data-no-translation]').length > 0 ){
|
100 |
|
101 |
/* if it is an anchor add the trp-edit-translation=preview parameter to it */
|
102 |
if ( typeof parent.trpEditor !== 'undefined' ) {
|
103 |
+
jQuery(mutation.addedNodes[i]).find('a').context.href = _this.update_query_string('trp-edit-translation', 'preview', jQuery(mutation.addedNodes[i]).find('a').context.href);
|
104 |
}
|
105 |
|
106 |
var all_nodes = jQuery( mutation.addedNodes[i]).find( '*').addBack();
|
114 |
}
|
115 |
var all_strings_length = all_strings.length;
|
116 |
for (var j = 0; j < all_strings_length; j++ ) {
|
117 |
+
if ( _this.trim( all_strings[j].textContent, except_characters ) != '' ) {
|
118 |
+
strings.push({node: all_strings[j], original: all_strings[j].textContent});
|
119 |
+
all_strings[j].textContent = '';
|
120 |
+
}
|
121 |
}
|
122 |
}
|
123 |
}
|
128 |
}
|
129 |
};
|
130 |
|
131 |
+
//function that cleans the gettext wrappers
|
132 |
this.cleanup_gettext_wrapper = function(){
|
133 |
jQuery('trp-gettext').contents().unwrap();
|
134 |
};
|
135 |
|
136 |
+
/**
|
137 |
+
* Update url with query string.
|
138 |
+
*
|
139 |
+
*/
|
140 |
+
this.update_query_string = function(key, value, url) {
|
141 |
+
if (!url) return url;
|
142 |
+
if ( url.startsWith('#') ){
|
143 |
+
return url;
|
144 |
+
}
|
145 |
+
var re = new RegExp("([?&])" + key + "=.*?(&|#|$)(.*)", "gi"),
|
146 |
+
hash;
|
147 |
+
|
148 |
+
if (re.test(url)) {
|
149 |
+
if (typeof value !== 'undefined' && value !== null)
|
150 |
+
return url.replace(re, '$1' + key + "=" + value + '$2$3');
|
151 |
+
else {
|
152 |
+
hash = url.split('#');
|
153 |
+
url = hash[0].replace(re, '$1$3').replace(/(&|\?)$/, '');
|
154 |
+
if (typeof hash[1] !== 'undefined' && hash[1] !== null)
|
155 |
+
url += '#' + hash[1];
|
156 |
+
return url;
|
157 |
+
}
|
158 |
+
}
|
159 |
+
else {
|
160 |
+
if (typeof value !== 'undefined' && value !== null ) {
|
161 |
+
var separator = url.indexOf('?') !== -1 ? '&' : '?';
|
162 |
+
hash = url.split('#');
|
163 |
+
url = hash[0] + separator + key + '=' + value;
|
164 |
+
if (typeof hash[1] !== 'undefined' && hash[1] !== null)
|
165 |
+
url += '#' + hash[1];
|
166 |
+
return url;
|
167 |
+
}
|
168 |
+
else
|
169 |
+
return url;
|
170 |
+
}
|
171 |
+
};
|
172 |
+
|
173 |
/**
|
174 |
* Initialize and configure observer.
|
175 |
*/
|
216 |
active = false;
|
217 |
};
|
218 |
|
219 |
+
this.trim = function (str, charlist) {
|
220 |
+
// discuss at: http://locutus.io/php/trim/
|
221 |
+
// original by: Kevin van Zonneveld (http://kvz.io)
|
222 |
+
// improved by: mdsjack (http://www.mdsjack.bo.it)
|
223 |
+
// improved by: Alexander Ermolaev (http://snippets.dzone.com/user/AlexanderErmolaev)
|
224 |
+
// improved by: Kevin van Zonneveld (http://kvz.io)
|
225 |
+
// improved by: Steven Levithan (http://blog.stevenlevithan.com)
|
226 |
+
// improved by: Jack
|
227 |
+
// input by: Erkekjetter
|
228 |
+
// input by: DxGx
|
229 |
+
// bugfixed by: Onno Marsman (https://twitter.com/onnomarsman)
|
230 |
+
// example 1: trim(' Kevin van Zonneveld ')
|
231 |
+
// returns 1: 'Kevin van Zonneveld'
|
232 |
+
// example 2: trim('Hello World', 'Hdle')
|
233 |
+
// returns 2: 'o Wor'
|
234 |
+
// example 3: trim(16, 1)
|
235 |
+
// returns 3: '6'
|
236 |
+
var whitespace = [
|
237 |
+
' ',
|
238 |
+
'\n',
|
239 |
+
'\r',
|
240 |
+
'\t',
|
241 |
+
'\f',
|
242 |
+
'\x0b',
|
243 |
+
'\xa0',
|
244 |
+
'\u2000',
|
245 |
+
'\u2001',
|
246 |
+
'\u2002',
|
247 |
+
'\u2003',
|
248 |
+
'\u2004',
|
249 |
+
'\u2005',
|
250 |
+
'\u2006',
|
251 |
+
'\u2007',
|
252 |
+
'\u2008',
|
253 |
+
'\u2009',
|
254 |
+
'\u200a',
|
255 |
+
'\u200b',
|
256 |
+
'\u2028',
|
257 |
+
'\u2029',
|
258 |
+
'\u3000'
|
259 |
+
].join('');
|
260 |
+
var l = 0;
|
261 |
+
var i = 0;
|
262 |
+
str += '';
|
263 |
+
if (charlist) {
|
264 |
+
whitespace += (charlist + '').replace(/([[\]().?/*{}+$^:])/g, '$1');
|
265 |
+
}
|
266 |
+
l = str.length;
|
267 |
+
for (i = 0; i < l; i++) {
|
268 |
+
if (whitespace.indexOf(str.charAt(i)) === -1) {
|
269 |
+
str = str.substring(i);
|
270 |
+
break;
|
271 |
+
}
|
272 |
+
}
|
273 |
+
l = str.length;
|
274 |
+
for (i = l - 1; i >= 0; i--) {
|
275 |
+
if (whitespace.indexOf(str.charAt(i)) === -1) {
|
276 |
+
str = str.substring(0, i + 1);
|
277 |
+
break;
|
278 |
+
}
|
279 |
+
}
|
280 |
+
return whitespace.indexOf(str.charAt(0)) === -1 ? str : '';
|
281 |
+
};
|
282 |
+
|
283 |
_this.initialize();
|
284 |
}
|
285 |
|
class-translate-press.php
CHANGED
@@ -39,7 +39,7 @@ class TRP_Translate_Press{
|
|
39 |
define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
|
40 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
41 |
define( 'TRP_PLUGIN_SLUG', 'translatepress' );
|
42 |
-
define( 'TRP_PLUGIN_VERSION', '1.0.
|
43 |
|
44 |
$this->load_dependencies();
|
45 |
$this->initialize_components();
|
39 |
define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
|
40 |
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
|
41 |
define( 'TRP_PLUGIN_SLUG', 'translatepress' );
|
42 |
+
define( 'TRP_PLUGIN_VERSION', '1.0.1' );
|
43 |
|
44 |
$this->load_dependencies();
|
45 |
$this->initialize_components();
|
includes/class-query.php
CHANGED
@@ -336,8 +336,8 @@ class TRP_Query{
|
|
336 |
}
|
337 |
|
338 |
protected function get_gettext_table_name( $language_code ){
|
339 |
-
|
340 |
-
return $
|
341 |
}
|
342 |
|
343 |
/**
|
336 |
}
|
337 |
|
338 |
protected function get_gettext_table_name( $language_code ){
|
339 |
+
global $wpdb;
|
340 |
+
return $wpdb->get_blog_prefix() . 'trp_gettext_' . strtolower( $language_code );
|
341 |
}
|
342 |
|
343 |
/**
|
includes/class-translation-manager.php
CHANGED
@@ -405,20 +405,14 @@ class TRP_Translation_Manager{
|
|
405 |
$title = __( 'Translate Site', TRP_PLUGIN_SLUG );
|
406 |
$url_target = '_blank';
|
407 |
} else {
|
408 |
-
global $post;
|
409 |
|
410 |
-
|
411 |
-
|
412 |
-
|
413 |
-
|
414 |
-
$trp = TRP_Translate_Press::get_trp_instance();
|
415 |
-
$this->url_converter = $trp->get_component( 'url_converter' );
|
416 |
-
}
|
417 |
-
|
418 |
-
$url = $this->url_converter->cur_page_url();
|
419 |
-
}
|
420 |
|
421 |
-
|
|
|
422 |
|
423 |
$title = __( 'Translate Page', TRP_PLUGIN_SLUG );
|
424 |
$url_target = '';
|
405 |
$title = __( 'Translate Site', TRP_PLUGIN_SLUG );
|
406 |
$url_target = '_blank';
|
407 |
} else {
|
|
|
408 |
|
409 |
+
if( ! $this->url_converter ) {
|
410 |
+
$trp = TRP_Translate_Press::get_trp_instance();
|
411 |
+
$this->url_converter = $trp->get_component( 'url_converter' );
|
412 |
+
}
|
|
|
|
|
|
|
|
|
|
|
|
|
413 |
|
414 |
+
$url = $this->url_converter->cur_page_url();
|
415 |
+
$url = add_query_arg( 'trp-edit-translation', 'true', $url );
|
416 |
|
417 |
$title = __( 'Translate Page', TRP_PLUGIN_SLUG );
|
418 |
$url_target = '';
|
index.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: TranslatePress - Multilingual
|
4 |
Plugin URI: https://translatepress.com/
|
5 |
Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
|
6 |
-
Version: 1.0.
|
7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
8 |
Author URI: https://cozmoslabs.com/
|
9 |
License: GPL2
|
3 |
Plugin Name: TranslatePress - Multilingual
|
4 |
Plugin URI: https://translatepress.com/
|
5 |
Description: Experience a better way of translating your WordPress site, with full support for WooCommerce and site builders.
|
6 |
+
Version: 1.0.1
|
7 |
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
|
8 |
Author URI: https://cozmoslabs.com/
|
9 |
License: GPL2
|
partials/main-settings-page.php
CHANGED
@@ -72,7 +72,7 @@
|
|
72 |
<option value="yes" <?php selected( $this->settings['g-translate'], 'yes' ); ?>><?php _e( 'Yes', TRP_PLUGIN_SLUG) ?></option>
|
73 |
</select>
|
74 |
<p class="description">
|
75 |
-
<?php _e( 'Enable or disable the automatic translation of the site with Google Translate.
|
76 |
</p>
|
77 |
</td>
|
78 |
</tr>
|
72 |
<option value="yes" <?php selected( $this->settings['g-translate'], 'yes' ); ?>><?php _e( 'Yes', TRP_PLUGIN_SLUG) ?></option>
|
73 |
</select>
|
74 |
<p class="description">
|
75 |
+
<?php _e( '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>. ', TRP_PLUGIN_SLUG ); ?>
|
76 |
</p>
|
77 |
</td>
|
78 |
</tr>
|
readme.txt
CHANGED
@@ -1,45 +1,51 @@
|
|
1 |
-
=== TranslatePress - Multilingual ===
|
2 |
Contributors: cozmoslabs, razvan.mo, madalin.ungureanu, cristophor
|
3 |
Donate link: https://www.cozmoslabs.com/
|
4 |
-
Tags: translate, translation, automatic translation, front-end translation,
|
5 |
Requires at least: 3.1.0
|
6 |
-
Tested up to: 4.8.
|
7 |
-
Stable tag: 1.0.
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
11 |
-
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
-
**
|
16 |
|
17 |
-
|
18 |
|
19 |
-
|
20 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
21 |
|
22 |
-
Translate your website directly from the front-end, in a friendly user interface.
|
23 |
-
Live preview of your translated pages, as you edit your translations.
|
24 |
-
Set up Automatic Translation using your own Google API key.
|
25 |
Note: this plugin uses the Google Translation API to translate the strings on your site. This feature can be enabled or disabled according to your preferences.
|
26 |
-
Place language switchers anywhere using shortcode **[language-switcher]**, WP menu item or as a floating dropdown.
|
27 |
|
28 |
-
Users with administrator rights have access to the following
|
29 |
|
30 |
-
* select
|
31 |
* choose whether language switcher should display languages in their native names or English name
|
32 |
* force custom links to open in current language
|
33 |
* enable or disable url subdirectory for the default language
|
|
|
34 |
|
35 |
= Powerful Add-ons =
|
36 |
|
37 |
-
|
38 |
|
39 |
**Pro Add-ons** (available in the [PRO version](https://translatepress.com/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree) only)
|
40 |
|
41 |
-
* [Extra Languages](https://translatepress.com/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree) - allows an unlimited number of translation languages, with the possibility to publish languages later after you complete the translation
|
42 |
-
* [SEO Pack](https://translatepress.com/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree) - allows
|
43 |
|
44 |
|
45 |
= Website =
|
@@ -54,6 +60,10 @@ Paid Member Subscriptions has a range of premium [Add-ons](https://translatepres
|
|
54 |
|
55 |
[Add-ons](https://translatepress.com/docs/translatepress/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree)
|
56 |
|
|
|
|
|
|
|
|
|
57 |
== Installation ==
|
58 |
|
59 |
1. Upload the translatepress folder to the '/wp-content/plugins/' directory
|
@@ -67,20 +77,39 @@ Paid Member Subscriptions has a range of premium [Add-ons](https://translatepres
|
|
67 |
|
68 |
All the translation are stored locally in your server's database.
|
69 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
70 |
= Where can I find out more information? =
|
71 |
|
72 |
For more information please check out [TranslatePress documentation](https://translatepress.com/docs/translatepress/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree).
|
73 |
|
74 |
|
75 |
== Screenshots ==
|
76 |
-
1.
|
77 |
-
2.
|
78 |
-
3.
|
79 |
-
4. Settings Page
|
80 |
-
5. Floating Language Switcher
|
81 |
-
6. Menu Language Switcher
|
82 |
|
83 |
== Changelog ==
|
84 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
85 |
= 1.0.0 =
|
86 |
* Initial release.
|
1 |
+
=== TranslatePress - Translate Multilingual sites ===
|
2 |
Contributors: cozmoslabs, razvan.mo, madalin.ungureanu, cristophor
|
3 |
Donate link: https://www.cozmoslabs.com/
|
4 |
+
Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate
|
5 |
Requires at least: 3.1.0
|
6 |
+
Tested up to: 4.8.2
|
7 |
+
Stable tag: 1.0.1
|
8 |
License: GPLv2 or later
|
9 |
License URI: http://www.gnu.org/licenses/gpl-2.0.html
|
10 |
|
11 |
+
Easily translate your entire site and go multilingual, with full support for WooCommerce, complex themes and site builders. Integrates with Google Translate.
|
12 |
|
13 |
== Description ==
|
14 |
|
15 |
+
**Experience a better way to translate your WordPress site and go multilingual, directly from the front-end using a friendly user interface.**
|
16 |
|
17 |
+
The interface allows you to translate the entire page at once, including output from shortcodes, forms and page builders. It also works out of the box with WooCommerce.
|
18 |
|
19 |
+
Built the WordPress way, TranslatePress - Multilingual is a GPL and self hosted plugin, meaning you'll own all your translations, forever.
|
20 |
+
|
21 |
+
= Multilingual Features =
|
22 |
+
|
23 |
+
* Translate all your website content directly from the front-end, in a friendly user interface.
|
24 |
+
* Live preview of your translated pages, as you edit your translations.
|
25 |
+
* Support for both manual and automatic translation (via Google Translate)
|
26 |
+
* Ability to translate dynamic strings (gettext) added by WordPress, plugins and themes.
|
27 |
+
* Integrates with Google Translate, allowing you to set up Automatic Translation using your own Google API key.
|
28 |
+
* Place language switchers anywhere using shortcode **[language-switcher]**, WP menu item or as a floating dropdown.
|
29 |
+
* Editorial control allowing you to publish your language only when all your translations are done
|
30 |
|
|
|
|
|
|
|
31 |
Note: this plugin uses the Google Translation API to translate the strings on your site. This feature can be enabled or disabled according to your preferences.
|
|
|
32 |
|
33 |
+
Users with administrator rights have access to the following translate settings:
|
34 |
|
35 |
+
* select default language of the website and one translation language.
|
36 |
* choose whether language switcher should display languages in their native names or English name
|
37 |
* force custom links to open in current language
|
38 |
* enable or disable url subdirectory for the default language
|
39 |
+
* enable automatic translation via Google Translate
|
40 |
|
41 |
= Powerful Add-ons =
|
42 |
|
43 |
+
TranslatePress - Multilingual has a range of premium [Add-ons](https://translatepress.com/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree) that allow you to extend the power of the translation plugin:
|
44 |
|
45 |
**Pro Add-ons** (available in the [PRO version](https://translatepress.com/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree) only)
|
46 |
|
47 |
+
* [Extra Languages](https://translatepress.com/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree) - allows you to add an unlimited number of translation languages, with the possibility to publish languages later after you complete the translation
|
48 |
+
* [SEO Pack](https://translatepress.com/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree) - allows you to translate meta information (like page title, description, url slug, image alt tag, Twitter and Facebook Social Graph tags & more) for boosting your website's SEO and increase traffic
|
49 |
|
50 |
|
51 |
= Website =
|
60 |
|
61 |
[Add-ons](https://translatepress.com/docs/translatepress/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree)
|
62 |
|
63 |
+
= Demo Site =
|
64 |
+
|
65 |
+
You can test out TranslatePress - Multilingual by [visiting our demo site](https://demo.translatepress.com/)
|
66 |
+
|
67 |
== Installation ==
|
68 |
|
69 |
1. Upload the translatepress folder to the '/wp-content/plugins/' directory
|
77 |
|
78 |
All the translation are stored locally in your server's database.
|
79 |
|
80 |
+
= What types of content can I translate? =
|
81 |
+
|
82 |
+
TranslatePress - Multilingual works out of the box with WooCommerce, custom post types, complex themes and site builders, so you'll be able to translate any type of content.
|
83 |
+
|
84 |
+
= How is it different from other multilingual plugins? =
|
85 |
+
|
86 |
+
TranslatePress is easier to use and more intuitive altogether. No more switching between the editor, string translation interfaces or badly translated plugins. You can now translate the full page content directly from the front-end.
|
87 |
+
|
88 |
+
= How do I start to translate my site? =
|
89 |
+
|
90 |
+
After installing the plugin, select your secondary language and click "Translate Site" to start translating your entire site exactly as it looks in the front-end.
|
91 |
+
|
92 |
= Where can I find out more information? =
|
93 |
|
94 |
For more information please check out [TranslatePress documentation](https://translatepress.com/docs/translatepress/?utm_source=wp.org&utm_medium=tp-description-page&utm_campaign=TPFree).
|
95 |
|
96 |
|
97 |
== Screenshots ==
|
98 |
+
1. Front-end translation editor used to translate the entire page content
|
99 |
+
2. How to translate a Dynamic String (gettext) using TranslatePress - Multilingual
|
100 |
+
3. Translate Woocommerce Shop Page
|
101 |
+
4. Settings Page for TranslatePress - Multilingual
|
102 |
+
5. Floating Language Switcher added by TranslatePress - Multilingual
|
103 |
+
6. Menu Language Switcher
|
104 |
|
105 |
== Changelog ==
|
106 |
|
107 |
+
= 1.0.1 =
|
108 |
+
* Fixed incorrect blog prefix name for Multisite subsites on admin_bar gettext hook.
|
109 |
+
* Fixed Translate Page admin bar button sometimes not having the correct url for entering TP Editor Mode
|
110 |
+
* Skipped dynamic strings that have only numbers and special characters.
|
111 |
+
* Fixed order of categories in Editor dropdown. (Meta Information, String List..)
|
112 |
+
* Fixed JS error Uncaught Error: Syntax error, unrecognized expression
|
113 |
+
|
114 |
= 1.0.0 =
|
115 |
* Initial release.
|