TranslatePress – Translate Multilingual sites - Version 1.0.8

Version Description

  • We now allow HTML in normal strings translations.
  • Changed the way we get the default language permalinks in Woocommerce rewrites
  • Fixed issues with date_i18n function
  • Fixed a warning generated when there are no rewrite rules
  • Fixed dynamic strings not updating the translation dropdown list.
  • Fixed issues with hidden space characters that were breaking some translations
  • Make sure we don't loose the trp-edit-translation=preview from url after a WordPress redirect
Download this release

Release Info

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

Code changes from version 1.0.7 to 1.0.8

assets/js/trp-editor-script.js CHANGED
@@ -18,7 +18,7 @@ function TRP_Editor(){
18
var translated_textareas = [];
19
this.edit_translation_button = null;
20
var categories;
21
- var trp_lister = null;
22
this.jquery_string_selector = jQuery( '#trp-string-categories' );
23
this.change_tracker = null;
24
this.maybe_overflow_fix = null;
@@ -49,10 +49,10 @@ function TRP_Editor(){
49
50
_this.iframe_strings_lookup();
51
52
- if ( trp_lister != null ) {
53
- _this.jquery_string_selector.off( 'change', trp_lister.select_string );
54
}
55
- trp_lister = new TRP_Lister( dictionaries[trp_on_screen_language] );
56
57
if ( _this.change_tracker != null ) {
58
_this.change_tracker.destroy();
@@ -133,7 +133,7 @@ function TRP_Editor(){
133
},
134
success: function (response) {
135
_this.populate_strings( response );
136
- trp_lister.reload_list();
137
_this.change_tracker = new TRP_Change_Tracker( _this.original_textarea, translated_textareas );
138
},
139
error: function(errorThrown){
@@ -660,7 +660,7 @@ function TRP_String( language, array_index ){
660
}else if( jquery_object.attr( 'data-trp-button' ) ){
661
jquery_object.children('button').text(text_to_set);
662
}else {
663
- jquery_object.text(text_to_set);
664
}
665
}
666
}
18
var translated_textareas = [];
19
this.edit_translation_button = null;
20
var categories;
21
+ this.trp_lister = null;
22
this.jquery_string_selector = jQuery( '#trp-string-categories' );
23
this.change_tracker = null;
24
this.maybe_overflow_fix = null;
49
50
_this.iframe_strings_lookup();
51
52
+ if ( _this.trp_lister != null ) {
53
+ _this.jquery_string_selector.off( 'change', _this.trp_lister.select_string );
54
}
55
+ _this.trp_lister = new TRP_Lister( dictionaries[trp_on_screen_language] );
56
57
if ( _this.change_tracker != null ) {
58
_this.change_tracker.destroy();
133
},
134
success: function (response) {
135
_this.populate_strings( response );
136
+ _this.trp_lister.reload_list();
137
_this.change_tracker = new TRP_Change_Tracker( _this.original_textarea, translated_textareas );
138
},
139
error: function(errorThrown){
660
}else if( jquery_object.attr( 'data-trp-button' ) ){
661
jquery_object.children('button').text(text_to_set);
662
}else {
663
+ jquery_object.html( text_to_set );
664
}
665
}
666
}
assets/js/trp-iframe-preview-script.js CHANGED
@@ -10,6 +10,9 @@ function TRP_Iframe_Preview(){
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('#')) {
10
*/
11
this.initialize = function() {
12
jQuery('a').each(function () {
13
+ // target parent brakes from the iframe so we're removing it entirely
14
+ jQuery(this).removeAttr('target');
15
+
16
if( typeof this.href != "undefined" && this.href != '' ) {
17
if (this.action != '' && this.href.indexOf('void(0)') === -1) {
18
if (is_link_previewable(this) && !this.getAttribute('href').startsWith('#')) {
assets/js/trp-translate-dom-changes.js CHANGED
@@ -79,6 +79,7 @@ function TRP_Translator(){
79
}
80
if ( typeof parent.trpEditor !== 'undefined' ) {
81
parent.trpEditor.populate_strings( response );
82
}
83
}
84
}else{
79
}
80
if ( typeof parent.trpEditor !== 'undefined' ) {
81
parent.trpEditor.populate_strings( response );
82
+ parent.trpEditor.trp_lister.reload_list();
83
}
84
}
85
}else{
class-translate-press.php CHANGED
@@ -38,8 +38,8 @@ class TRP_Translate_Press{
38
public function __construct() {
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.7' );
43
44
$this->load_dependencies();
45
$this->initialize_components();
@@ -128,6 +128,8 @@ class TRP_Translate_Press{
128
$this->loader->add_action( 'wp', $this->translation_render, 'start_output_buffer' );
129
$this->loader->add_action( 'admin_init', $this->translation_render, 'start_output_buffer' );
130
$this->loader->add_action( 'wp_enqueue_scripts', $this->translation_render, 'enqueue_dynamic_translation', 1 );
131
132
133
$this->loader->add_action( 'wp_enqueue_scripts', $this->language_switcher, 'enqueue_language_switcher_scripts' );
@@ -168,6 +170,8 @@ class TRP_Translate_Press{
168
$this->loader->add_filter( 'attribute_escape', $this->translation_manager, 'handle_esc_functions_for_gettext', 10, 2 );
169
/* we need to allow the trp-gettext tag in ksses functions */
170
$this->loader->add_filter( 'wp_kses_allowed_html', $this->translation_manager, 'handle_kses_functions_for_gettext', 10 );
171
172
/* define an update hook here */
173
$this->loader->add_action( 'plugins_loaded', $this->query, 'check_for_necessary_updates' );
@@ -177,7 +181,7 @@ class TRP_Translate_Press{
177
/* set up wp_mail hooks */
178
$this->loader->add_filter( 'wp_mail', $this->translation_render, 'wp_mail_filter', 200 );
179
180
- /* hide php errors and notice when we are storing strings in db */
181
$this->loader->add_action( 'wp', $this->translation_render, 'trp_debug_mode_off' );
182
183
/**
38
public function __construct() {
39
define( 'TRP_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
40
define( 'TRP_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
41
+ define( 'TRP_PLUGIN_SLUG', 'translatepress-multilingual' );
42
+ define( 'TRP_PLUGIN_VERSION', '1.0.8' );
43
44
$this->load_dependencies();
45
$this->initialize_components();
128
$this->loader->add_action( 'wp', $this->translation_render, 'start_output_buffer' );
129
$this->loader->add_action( 'admin_init', $this->translation_render, 'start_output_buffer' );
130
$this->loader->add_action( 'wp_enqueue_scripts', $this->translation_render, 'enqueue_dynamic_translation', 1 );
131
+ $this->loader->add_filter( 'wp_redirect', $this->translation_render, 'force_preview_on_url_redirect', 99, 2 );
132
+ $this->loader->add_filter( 'trp_before_translate_content', $this->translation_render, 'force_preview_on_url_in_ajax' );
133
134
135
$this->loader->add_action( 'wp_enqueue_scripts', $this->language_switcher, 'enqueue_language_switcher_scripts' );
170
$this->loader->add_filter( 'attribute_escape', $this->translation_manager, 'handle_esc_functions_for_gettext', 10, 2 );
171
/* we need to allow the trp-gettext tag in ksses functions */
172
$this->loader->add_filter( 'wp_kses_allowed_html', $this->translation_manager, 'handle_kses_functions_for_gettext', 10 );
173
+ /* we need to treat the date_i18n function differently so we remove the gettext wraps */
174
+ $this->loader->add_filter( 'date_i18n', $this->translation_manager, 'handle_date_i18n_function_for_gettext', 1, 4 );
175
176
/* define an update hook here */
177
$this->loader->add_action( 'plugins_loaded', $this->query, 'check_for_necessary_updates' );
181
/* set up wp_mail hooks */
182
$this->loader->add_filter( 'wp_mail', $this->translation_render, 'wp_mail_filter', 200 );
183
184
+ /* hide php ors and notice when we are storing strings in db */
185
$this->loader->add_action( 'wp', $this->translation_render, 'trp_debug_mode_off' );
186
187
/**
includes/class-settings.php CHANGED
@@ -22,11 +22,11 @@ class TRP_Settings{
22
*/
23
public function get_language_switcher_options(){
24
$ls_options = apply_filters( 'trp_language_switcher_output', array(
25
- 'full-names' => array( 'full_names' => true, 'short_names' => false, 'flags' => false, 'label' => __( 'Full Language Names', TRP_PLUGIN_SLUG ) ),
26
- 'short-names' => array( 'full_names' => false, 'short_names' => true, 'flags' => false, 'label' => __( 'Short Language Names', TRP_PLUGIN_SLUG ) ),
27
- 'flags-full-names' => array( 'full_names' => true, 'short_names' => false, 'flags' => true, 'label' => __( 'Flags with Full Language Names', TRP_PLUGIN_SLUG ) ),
28
- 'flags-short-names' => array( 'full_names' => false, 'short_names' => true, 'flags' => true, 'label' => __( 'Flags with Short Language Names', TRP_PLUGIN_SLUG ) ),
29
- 'only-flags' => array( 'full_names' => false, 'short_names' => false, 'flags' => true, 'label' => __( 'Only Flags', TRP_PLUGIN_SLUG ) ),
30
) );
31
return $ls_options;
32
}
@@ -321,10 +321,10 @@ class TRP_Settings{
321
$selected_language_code = '';
322
?>
323
<tr>
324
- <th scope="row"> <?php _e( 'Translation Language', TRP_PLUGIN_SLUG ) ?> </th>
325
<td>
326
<select id="trp-translation-language" name="trp_settings[translation-languages][]" class="trp-select2">
327
- <option value=""><?php _e( 'Choose...', TRP_PLUGIN_SLUG );?></option>
328
<?php foreach( $languages as $language_code => $language_name ){ ?>
329
<option value="<?php echo $language_code; ?>" <?php if ( in_array( $language_code, $this->settings['translation-languages'] ) && $language_code != $this->settings['default-language'] ) { echo 'selected'; $selected_language_code = $language_code; } ?>>
330
<?php echo $language_name; ?>
@@ -332,12 +332,12 @@ class TRP_Settings{
332
<?php }?>
333
</select>
334
<label>
335
- <span id="trp-published-language"><b><?php _e( 'Slug', TRP_PLUGIN_SLUG ); ?></b></span>
336
<input id="trp-url-slug" class="trp-language-slug" name="trp_settings[url-slugs][<?php echo $selected_language_code ?>]" type="text" style="text-transform: lowercase;" value="<?php echo $this->url_converter->get_url_slug( $selected_language_code, false ); ?>">
337
<input id="trp-active-checkbox" type="hidden" class="trp-translation-published " name="trp_settings[publish-languages][]" value="<?php echo $selected_language_code; ?>" >
338
</label>
339
<p class="description">
340
- <?php _e( 'Select the language you wish to make your website available in.<br>To select multiple languages, consider upgrading to <a href="https://translatepress.com/" target="_blank" title="TranslatePress Pro">TranslatePress PRO</a>.', TRP_PLUGIN_SLUG ); ?>
341
</p>
342
</td>
343
</tr>
@@ -392,7 +392,7 @@ class TRP_Settings{
392
$this->trp_languages = $trp->get_component( 'languages' );
393
}
394
$published_languages = $this->trp_languages->get_language_names( $languages, 'english_name' );
395
- $published_languages['current_language'] = __( 'Current Language', TRP_PLUGIN_SLUG );
396
$languages[] = 'current_language';
397
$posts = get_posts( array( 'post_type' =>'language_switcher', 'posts_per_page' => -1 ) );
398
@@ -433,12 +433,12 @@ class TRP_Settings{
433
public function add_navigation_tabs(){
434
$tabs = apply_filters( 'trp_settings_tabs', array(
435
array(
436
- 'name' => __( 'General', TRP_PLUGIN_SLUG ),
437
'url' => admin_url( 'options-general.php?page=translate-press' ),
438
'page' => 'translate-press'
439
),
440
array(
441
- 'name' => __( 'Translate Site', TRP_PLUGIN_SLUG ),
442
'url' => add_query_arg( 'trp-edit-translation', 'true', home_url() ),
443
'page' => 'trp_translation_editor'
444
)
@@ -446,14 +446,14 @@ class TRP_Settings{
446
447
if( class_exists('TRP_LICENSE_PAGE') ) {
448
$tabs[] = array(
449
- 'name' => __( 'License', TRP_PLUGIN_SLUG ),
450
'url' => admin_url( 'admin.php?page=trp_license_key' ),
451
'page' => 'trp_license_key'
452
);
453
}
454
else{
455
$tabs[] = array(
456
- 'name' => __( 'Addons', TRP_PLUGIN_SLUG ),
457
'url' => admin_url( 'admin.php?page=trp_addons_page' ),
458
'page' => 'trp_addons_page'
459
);
22
*/
23
public function get_language_switcher_options(){
24
$ls_options = apply_filters( 'trp_language_switcher_output', array(
25
+ 'full-names' => array( 'full_names' => true, 'short_names' => false, 'flags' => false, 'label' => __( 'Full Language Names', 'translatepress-multilingual' ) ),
26
+ 'short-names' => array( 'full_names' => false, 'short_names' => true, 'flags' => false, 'label' => __( 'Short Language Names', 'translatepress-multilingual' ) ),
27
+ 'flags-full-names' => array( 'full_names' => true, 'short_names' => false, 'flags' => true, 'label' => __( 'Flags with Full Language Names', 'translatepress-multilingual' ) ),
28
+ 'flags-short-names' => array( 'full_names' => false, 'short_names' => true, 'flags' => true, 'label' => __( 'Flags with Short Language Names', 'translatepress-multilingual' ) ),
29
+ 'only-flags' => array( 'full_names' => false, 'short_names' => false, 'flags' => true, 'label' => __( 'Only Flags', 'translatepress-multilingual' ) ),
30
) );
31
return $ls_options;
32
}
321
$selected_language_code = '';
322
?>
323
<tr>
324
+ <th scope="row"> <?php _e( 'Translation Language', 'translatepress-multilingual' ) ?> </th>
325
<td>
326
<select id="trp-translation-language" name="trp_settings[translation-languages][]" class="trp-select2">
327
+ <option value=""><?php _e( 'Choose...', 'translatepress-multilingual' );?></option>
328
<?php foreach( $languages as $language_code => $language_name ){ ?>
329
<option value="<?php echo $language_code; ?>" <?php if ( in_array( $language_code, $this->settings['translation-languages'] ) && $language_code != $this->settings['default-language'] ) { echo 'selected'; $selected_language_code = $language_code; } ?>>
330
<?php echo $language_name; ?>
332
<?php }?>
333
</select>
334
<label>
335
+ <span id="trp-published-language"><b><?php _e( 'Slug', 'translatepress-multilingual' ); ?></b></span>
336
<input id="trp-url-slug" class="trp-language-slug" name="trp_settings[url-slugs][<?php echo $selected_language_code ?>]" type="text" style="text-transform: lowercase;" value="<?php echo $this->url_converter->get_url_slug( $selected_language_code, false ); ?>">
337
<input id="trp-active-checkbox" type="hidden" class="trp-translation-published " name="trp_settings[publish-languages][]" value="<?php echo $selected_language_code; ?>" >
338
</label>
339
<p class="description">
340
+ <?php _e( 'Select the language you wish to make your website available in.<br>To select multiple languages, consider upgrading to <a href="https://translatepress.com/" target="_blank" title="TranslatePress Pro">TranslatePress PRO</a>.', 'translatepress-multilingual' ); ?>
341
</p>
342
</td>
343
</tr>
392
$this->trp_languages = $trp->get_component( 'languages' );
393
}
394
$published_languages = $this->trp_languages->get_language_names( $languages, 'english_name' );
395
+ $published_languages['current_language'] = __( 'Current Language', 'translatepress-multilingual' );
396
$languages[] = 'current_language';
397
$posts = get_posts( array( 'post_type' =>'language_switcher', 'posts_per_page' => -1 ) );
398
433
public function add_navigation_tabs(){
434
$tabs = apply_filters( 'trp_settings_tabs', array(
435
array(
436
+ 'name' => __( 'General', 'translatepress-multilingual' ),
437
'url' => admin_url( 'options-general.php?page=translate-press' ),
438
'page' => 'translate-press'
439
),
440
array(
441
+ 'name' => __( 'Translate Site', 'translatepress-multilingual' ),
442
'url' => add_query_arg( 'trp-edit-translation', 'true', home_url() ),
443
'page' => 'trp_translation_editor'
444
)
446
447
if( class_exists('TRP_LICENSE_PAGE') ) {
448
$tabs[] = array(
449
+ 'name' => __( 'License', 'translatepress-multilingual' ),
450
'url' => admin_url( 'admin.php?page=trp_license_key' ),
451
'page' => 'trp_license_key'
452
);
453
}
454
else{
455
$tabs[] = array(
456
+ 'name' => __( 'Addons', 'translatepress-multilingual' ),
457
'url' => admin_url( 'admin.php?page=trp_addons_page' ),
458
'page' => 'trp_addons_page'
459
);
includes/class-translation-manager.php CHANGED
@@ -331,7 +331,7 @@ class TRP_Translation_Manager{
331
array_push($update_strings[ $language ], array(
332
'id' => (int)$string->id,
333
'original' => sanitize_text_field($string->original),
334
- 'translated' => sanitize_text_field($string->translated),
335
'status' => (int)$string->status
336
));
337
@@ -404,7 +404,7 @@ class TRP_Translation_Manager{
404
if( is_admin () ) {
405
$url = add_query_arg( 'trp-edit-translation', 'true', home_url() );
406
407
- $title = __( 'Translate Site', TRP_PLUGIN_SLUG );
408
$url_target = '_blank';
409
} else {
410
@@ -416,7 +416,7 @@ class TRP_Translation_Manager{
416
$url = $this->url_converter->cur_page_url();
417
$url = add_query_arg( 'trp-edit-translation', 'true', $url );
418
419
- $title = __( 'Translate Page', TRP_PLUGIN_SLUG );
420
$url_target = '';
421
}
422
@@ -435,7 +435,7 @@ class TRP_Translation_Manager{
435
$wp_admin_bar->add_node(
436
array(
437
'id' => 'trp_settings_page',
438
- 'title' => __( 'Settings', TRP_PLUGIN_SLUG ),
439
'href' => admin_url( 'options-general.php?page=translate-press' ),
440
'parent' => 'trp_edit_translation',
441
'meta' => array(
@@ -574,7 +574,7 @@ class TRP_Translation_Manager{
574
if( count( $this->settings['publish-languages'] ) < 1 )
575
return $translation;
576
577
- if( ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'true' ) || $domain == TRP_PLUGIN_SLUG )
578
return $translation;
579
580
/* for our own actions don't do nothing */
@@ -780,5 +780,63 @@ class TRP_Translation_Manager{
780
}
781
return $tags;
782
}
783
784
}
331
array_push($update_strings[ $language ], array(
332
'id' => (int)$string->id,
333
'original' => sanitize_text_field($string->original),
334
+ 'translated' => preg_replace( '/<script\b[^>]*>(.*?)<\/script>/is', '', $string->translated ),
335
'status' => (int)$string->status
336
));
337
404
if( is_admin () ) {
405
$url = add_query_arg( 'trp-edit-translation', 'true', home_url() );
406
407
+ $title = __( 'Translate Site', 'translatepress-multilingual' );
408
$url_target = '_blank';
409
} else {
410
416
$url = $this->url_converter->cur_page_url();
417
$url = add_query_arg( 'trp-edit-translation', 'true', $url );
418
419
+ $title = __( 'Translate Page', 'translatepress-multilingual' );
420
$url_target = '';
421
}
422
435
$wp_admin_bar->add_node(
436
array(
437
'id' => 'trp_settings_page',
438
+ 'title' => __( 'Settings', 'translatepress-multilingual' ),
439
'href' => admin_url( 'options-general.php?page=translate-press' ),
440
'parent' => 'trp_edit_translation',
441
'meta' => array(
574
if( count( $this->settings['publish-languages'] ) < 1 )
575
return $translation;
576
577
+ if( ( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'true' ) || $domain == 'translatepress-multilingual' )
578
return $translation;
579
580
/* for our own actions don't do nothing */
780
}
781
return $tags;
782
}
783
+
784
+ /**
785
+ * make sure we remove the trp-gettext wrap from the format the date_i18n receives
786
+ * ideally if in the gettext filter we would know 100% that a string is a valid date format then we would not wrap it but it seems that it is not easy to determine that ( explore further in the future $d = DateTime::createFromFormat('Y', date('y a') method); )
787
+ */
788
+ function handle_date_i18n_function_for_gettext( $j, $dateformatstring, $unixtimestamp, $gmt ){
789
+
790
+ /* remove trp-gettext wrap */
791
+ $dateformatstring = preg_replace( '/(<|&lt;)trp-gettext (.*?)(>|&gt;)/', '', $dateformatstring );
792
+ $dateformatstring = preg_replace( '/(<|&lt;)(.?)\/trp-gettext(>|&gt;)/', '', $dateformatstring );
793
+
794
+
795
+ global $wp_locale;
796
+ $i = $unixtimestamp;
797
+
798
+ if ( false === $i ) {
799
+ $i = current_time( 'timestamp', $gmt );
800
+ }
801
+
802
+ if ( ( !empty( $wp_locale->month ) ) && ( !empty( $wp_locale->weekday ) ) ) {
803
+ $datemonth = $wp_locale->get_month( date( 'm', $i ) );
804
+ $datemonth_abbrev = $wp_locale->get_month_abbrev( $datemonth );
805
+ $dateweekday = $wp_locale->get_weekday( date( 'w', $i ) );
806
+ $dateweekday_abbrev = $wp_locale->get_weekday_abbrev( $dateweekday );
807
+ $datemeridiem = $wp_locale->get_meridiem( date( 'a', $i ) );
808
+ $datemeridiem_capital = $wp_locale->get_meridiem( date( 'A', $i ) );
809
+ $dateformatstring = ' '.$dateformatstring;
810
+ $dateformatstring = preg_replace( "/([^\\\])D/", "\\1" . backslashit( $dateweekday_abbrev ), $dateformatstring );
811
+ $dateformatstring = preg_replace( "/([^\\\])F/", "\\1" . backslashit( $datemonth ), $dateformatstring );
812
+ $dateformatstring = preg_replace( "/([^\\\])l/", "\\1" . backslashit( $dateweekday ), $dateformatstring );
813
+ $dateformatstring = preg_replace( "/([^\\\])M/", "\\1" . backslashit( $datemonth_abbrev ), $dateformatstring );
814
+ $dateformatstring = preg_replace( "/([^\\\])a/", "\\1" . backslashit( $datemeridiem ), $dateformatstring );
815
+ $dateformatstring = preg_replace( "/([^\\\])A/", "\\1" . backslashit( $datemeridiem_capital ), $dateformatstring );
816
+
817
+ $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
818
+ }
819
+ $timezone_formats = array( 'P', 'I', 'O', 'T', 'Z', 'e' );
820
+ $timezone_formats_re = implode( '|', $timezone_formats );
821
+ if ( preg_match( "/$timezone_formats_re/", $dateformatstring ) ) {
822
+ $timezone_string = get_option( 'timezone_string' );
823
+ if ( $timezone_string ) {
824
+ $timezone_object = timezone_open( $timezone_string );
825
+ $date_object = date_create( null, $timezone_object );
826
+ foreach ( $timezone_formats as $timezone_format ) {
827
+ if ( false !== strpos( $dateformatstring, $timezone_format ) ) {
828
+ $formatted = date_format( $date_object, $timezone_format );
829
+ $dateformatstring = ' '.$dateformatstring;
830
+ $dateformatstring = preg_replace( "/([^\\\])$timezone_format/", "\\1" . backslashit( $formatted ), $dateformatstring );
831
+ $dateformatstring = substr( $dateformatstring, 1, strlen( $dateformatstring ) -1 );
832
+ }
833
+ }
834
+ }
835
+ }
836
+ $j = @date( $dateformatstring, $i );
837
+
838
+ return $j;
839
+
840
+ }
841
842
}
includes/class-translation-render.php CHANGED
@@ -92,8 +92,7 @@ class TRP_Translation_Render{
92
* @return string Trimmed string.
93
*/
94
public function full_trim( $word ) {
95
- $word = str_replace( chr( 194 ) . chr( 160 ), ' ', $word );
96
- $word = trim($word," \t\n\r\0\x0B\xA0�" );
97
if ( htmlentities( $word ) == "" || strip_tags( $word ) == "" || trim ($word, " \t\n\r\0\x0B\xA0�.,/`~!@#\$€£%^&*():;-_=+[]{}\\|?/<>1234567890'\"" ) == '' ){
98
$word = '';
99
}
@@ -109,7 +108,7 @@ class TRP_Translation_Render{
109
*/
110
protected function get_node_type_category( $current_node_type ){
111
$node_type_categories = apply_filters( 'trp_node_type_categories', array(
112
- __( 'Meta Information', TRP_PLUGIN_SLUG ) => array( 'meta_desc', 'post_slug', 'page_title' ),
113
));
114
115
foreach( $node_type_categories as $category_name => $node_types ){
@@ -118,7 +117,7 @@ class TRP_Translation_Render{
118
}
119
}
120
121
- return __( 'String List', TRP_PLUGIN_SLUG );
122
123
}
124
@@ -135,47 +134,47 @@ class TRP_Translation_Render{
135
'type' => 'meta_desc',
136
'attribute' => 'name',
137
'value' => 'description',
138
- 'description' => __( 'Description', TRP_PLUGIN_SLUG )
139
),
140
array(
141
'type' => 'meta_desc',
142
'attribute' => 'property',
143
'value' => 'og:title',
144
- 'description' => __( 'OG Title', TRP_PLUGIN_SLUG )
145
),
146
array(
147
'type' => 'meta_desc',
148
'attribute' => 'property',
149
'value' => 'og:site_name',
150
- 'description' => __( 'OG Site Name', TRP_PLUGIN_SLUG )
151
),
152
array(
153
'type' => 'meta_desc',
154
'attribute' => 'property',
155
'value' => 'og:description',
156
- 'description' => __( 'OG Description', TRP_PLUGIN_SLUG )
157
),
158
array(
159
'type' => 'meta_desc',
160
'attribute' => 'name',
161
'value' => 'twitter:title',
162
- 'description' => __( 'Twitter Title', TRP_PLUGIN_SLUG )
163
),
164
array(
165
'type' => 'meta_desc',
166
'attribute' => 'name',
167
'value' => 'twitter:description',
168
- 'description' => __( 'Twitter Description', TRP_PLUGIN_SLUG )
169
),
170
array(
171
'type' => 'post_slug',
172
'attribute' => 'name',
173
'value' => 'trp-slug',
174
- 'description' => __( 'Post Slug', TRP_PLUGIN_SLUG )
175
),
176
array(
177
'type' => 'page_title',
178
- 'description' => __( 'Page Title', TRP_PLUGIN_SLUG )
179
),
180
181
));
@@ -225,6 +224,8 @@ class TRP_Translation_Render{
225
return $output;
226
}
227
228
//check if we have a json response
229
if (is_array($json_array = json_decode($output, true))) {
230
if (!empty($json_array)) {
@@ -732,4 +733,48 @@ class TRP_Translation_Render{
732
return $trp_wp_mail;
733
}
734
735
}
92
* @return string Trimmed string.
93
*/
94
public function full_trim( $word ) {
95
+ $word = trim($word," \t\n\r\0\x0B\xA0�".chr( 194 ) . chr( 160 ) );
96
if ( htmlentities( $word ) == "" || strip_tags( $word ) == "" || trim ($word, " \t\n\r\0\x0B\xA0�.,/`~!@#\$€£%^&*():;-_=+[]{}\\|?/<>1234567890'\"" ) == '' ){
97
$word = '';
98
}
108
*/
109
protected function get_node_type_category( $current_node_type ){
110
$node_type_categories = apply_filters( 'trp_node_type_categories', array(
111
+ __( 'Meta Information', 'translatepress-multilingual' ) => array( 'meta_desc', 'post_slug', 'page_title' ),
112
));
113
114
foreach( $node_type_categories as $category_name => $node_types ){
117
}
118
}
119
120
+ return __( 'String List', 'translatepress-multilingual' );
121
122
}
123
134
'type' => 'meta_desc',
135
'attribute' => 'name',
136
'value' => 'description',
137
+ 'description' => __( 'Description', 'translatepress-multilingual' )
138
),
139
array(
140
'type' => 'meta_desc',
141
'attribute' => 'property',
142
'value' => 'og:title',
143
+ 'description' => __( 'OG Title', 'translatepress-multilingual' )
144
),
145
array(
146
'type' => 'meta_desc',
147
'attribute' => 'property',
148
'value' => 'og:site_name',
149
+ 'description' => __( 'OG Site Name', 'translatepress-multilingual' )
150
),
151
array(
152
'type' => 'meta_desc',
153
'attribute' => 'property',
154
'value' => 'og:description',
155
+ 'description' => __( 'OG Description', 'translatepress-multilingual' )
156
),
157
array(
158
'type' => 'meta_desc',
159
'attribute' => 'name',
160
'value' => 'twitter:title',
161
+ 'description' => __( 'Twitter Title', 'translatepress-multilingual' )
162
),
163
array(
164
'type' => 'meta_desc',
165
'attribute' => 'name',
166
'value' => 'twitter:description',
167
+ 'description' => __( 'Twitter Description', 'translatepress-multilingual' )
168
),
169
array(
170
'type' => 'post_slug',
171
'attribute' => 'name',
172
'value' => 'trp-slug',
173
+ 'description' => __( 'Post Slug', 'translatepress-multilingual' )
174
),
175
array(
176
'type' => 'page_title',
177
+ 'description' => __( 'Page Title', 'translatepress-multilingual' )
178
),
179
180
));
224
return $output;
225
}
226
227
+ $output = apply_filters('trp_before_translate_content', $output);
228
+
229
//check if we have a json response
230
if (is_array($json_array = json_decode($output, true))) {
231
if (!empty($json_array)) {
733
return $trp_wp_mail;
734
}
735
736
+ /**
737
+ * Filters the location redirect to add the preview parameter to the next page
738
+ * @param $location
739
+ * @param $status
740
+ * @return string
741
+ * @since 1.0.8
742
+ */
743
+ public function force_preview_on_url_redirect( $location, $status ){
744
+ if( isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] == 'preview' ){
745
+ $location = add_query_arg( 'trp-edit-translation', 'preview', $location );
746
+ }
747
+ return $location;
748
+ }
749
+
750
+ /**
751
+ * Filters the output buffer of ajax calls that return json and adds the preview arg to urls
752
+ * @param $output
753
+ * @return string
754
+ * @since 1.0.8
755
+ */
756
+ public function force_preview_on_url_in_ajax( $output ){
757
+ if ( TRP_Translation_Manager::is_ajax_on_frontend() && isset( $_REQUEST['trp-edit-translation'] ) && $_REQUEST['trp-edit-translation'] === 'preview' ) {
758
+ $result = json_decode($output, TRUE);
759
+ if ( json_last_error() === JSON_ERROR_NONE) {
760
+ array_walk_recursive($result, array($this, 'callback_add_preview_arg'));
761
+ $output = trp_safe_json_encode($result);
762
+ } //endif
763
+ } //endif
764
+ return $output;
765
+ }
766
+
767
+ /**
768
+ * Adds preview query arg to links that are url's. callback specifically for the array_walk_recursive function
769
+ * @param $item
770
+ * @param $key
771
+ * @return string
772
+ * @internal param $output
773
+ * @since 1.0.8
774
+ */
775
+ function callback_add_preview_arg(&$item, $key){
776
+ if ( filter_var($item, FILTER_VALIDATE_URL) !== FALSE ) {
777
+ $item = add_query_arg( 'trp-edit-translation', 'preview', $item );
778
+ }
779
+ }
780
}
includes/class-url-converter.php CHANGED
@@ -269,29 +269,24 @@ class TRP_Url_Converter {
269
/**
270
* Return current page url.
271
*
272
- * @return string Current page url.
273
*/
274
public function cur_page_url() {
275
- $pageURL = 'http';
276
277
- if ((isset($_SERVER["HTTPS"])) && ($_SERVER["HTTPS"] == "on"))
278
- $pageURL .= "s";
279
280
- $pageURL .= "://";
281
282
- if( strpos( $_SERVER["HTTP_HOST"], $_SERVER["SERVER_NAME"] ) !== false ){
283
- $pageURL .=$_SERVER["HTTP_HOST"].$_SERVER["REQUEST_URI"];
284
- }
285
- else {
286
- if ($_SERVER["SERVER_PORT"] != "80")
287
- $pageURL .= $_SERVER["SERVER_NAME"] . ":" . $_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
288
- else
289
- $pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
290
- }
291
292
- if ( function_exists('apply_filters') ) $pageURL = apply_filters('trp_curpageurl', $pageURL);
293
294
- return $pageURL;
295
}
296
297
/**
@@ -306,20 +301,31 @@ class TRP_Url_Converter {
306
global $default_language_wc_permalink_structure; //we use a global because apparently you can't do switch to locale and restore multiple times. I should keep an eye on this
307
/* get rewrite rules from original language */
308
if( empty($default_language_wc_permalink_structure) ) {
309
- switch_to_locale($this->settings['default-language']);
310
- $default_language_wc_permalink_structure = wc_get_permalink_structure();
311
- restore_previous_locale();
312
}
313
314
- $current_language_permalink_structure = wc_get_permalink_structure();
315
316
$new_rewrite_rules = array();
317
318
$search = array( '/^'.$default_language_wc_permalink_structure['product_rewrite_slug'].'\//', '/^'.$default_language_wc_permalink_structure['category_rewrite_slug'].'\//', '/^'.$default_language_wc_permalink_structure['tag_rewrite_slug'].'\//' );
319
$replace = array( $current_language_permalink_structure['product_rewrite_slug'].'/', $current_language_permalink_structure['category_rewrite_slug'].'/', $current_language_permalink_structure['tag_rewrite_slug'].'/' );
320
321
- foreach( $rewrite_rules as $rewrite_key => $rewrite_values ){
322
- $new_rewrite_rules[preg_replace( $search, $replace, $rewrite_key )] = preg_replace( $search, $replace, $rewrite_values );
323
}
324
325
}
269
/**
270
* Return current page url.
271
*
272
+ * @return string
273
*/
274
public function cur_page_url() {
275
276
+ $req_uri = $_SERVER['REQUEST_URI'];
277
278
+ $home_path = trim( parse_url( home_url(), PHP_URL_PATH ), '/' );
279
+ $home_path_regex = sprintf( '|^%s|i', preg_quote( $home_path, '|' ) );
280
281
+ // Trim path info from the end and the leading home path from the front.
282
+ $req_uri = trim($req_uri, '/');
283
+ $req_uri = preg_replace( $home_path_regex, '', $req_uri );
284
+ $req_uri = trim($req_uri, '/');
285
+ $req_uri = home_url($req_uri);
286
287
+ if ( function_exists('apply_filters') ) $pageURL = apply_filters('trp_curpageurl', $req_uri);
288
289
+ return $req_uri;
290
}
291
292
/**
301
global $default_language_wc_permalink_structure; //we use a global because apparently you can't do switch to locale and restore multiple times. I should keep an eye on this
302
/* get rewrite rules from original language */
303
if( empty($default_language_wc_permalink_structure) ) {
304
+ $default_language_wc_permalink_structure = array();
305
+ $default_language_wc_permalink_structure['product_rewrite_slug'] = trp_x( 'product', 'slug', 'woocommerce', $this->settings['default-language'] );
306
+ $default_language_wc_permalink_structure['category_rewrite_slug'] = trp_x( 'product-category', 'slug', 'woocommerce', $this->settings['default-language'] );
307
+ $default_language_wc_permalink_structure['tag_rewrite_slug'] = trp_x( 'product-tag', 'slug', 'woocommerce', $this->settings['default-language'] );
308
}
309
310
+ if( function_exists( 'wc_get_permalink_structure' ) ){
311
+ $current_language_permalink_structure = wc_get_permalink_structure();
312
+ }
313
+ else{
314
+ $current_language_permalink_structure = array();
315
+ $current_language_permalink_structure['product_rewrite_slug'] = trp_x( 'product', 'slug', 'woocommerce', $TRP_LANGUAGE );
316
+ $current_language_permalink_structure['category_rewrite_slug'] = trp_x( 'product-category', 'slug', 'woocommerce', $TRP_LANGUAGE );
317
+ $current_language_permalink_structure['tag_rewrite_slug'] = trp_x( 'product-tag', 'slug', 'woocommerce', $TRP_LANGUAGE );
318
+ }
319
320
$new_rewrite_rules = array();
321
322
$search = array( '/^'.$default_language_wc_permalink_structure['product_rewrite_slug'].'\//', '/^'.$default_language_wc_permalink_structure['category_rewrite_slug'].'\//', '/^'.$default_language_wc_permalink_structure['tag_rewrite_slug'].'\//' );
323
$replace = array( $current_language_permalink_structure['product_rewrite_slug'].'/', $current_language_permalink_structure['category_rewrite_slug'].'/', $current_language_permalink_structure['tag_rewrite_slug'].'/' );
324
325
+ if( !empty( $rewrite_rules ) && is_array($rewrite_rules) ) {
326
+ foreach ($rewrite_rules as $rewrite_key => $rewrite_values) {
327
+ $new_rewrite_rules[preg_replace($search, $replace, $rewrite_key)] = preg_replace($search, $replace, $rewrite_values);
328
+ }
329
}
330
331
}
includes/functions.php CHANGED
@@ -60,18 +60,52 @@ function trp_utf8ize($mixed) {
60
61
/**
62
* function that gets the translation for a string with context directly from a .mo file
63
- * @TODO this was developped firstly for woocommerce so it needs further development. It only works for plugins at the moment
64
*/
65
function trp_x( $text, $context, $domain, $language ){
66
- $mo_file = new MO();
67
68
- if( file_exists( WP_LANG_DIR . '/plugins/'. $domain .'-' . $language . '.mo') ) {
69
- if (!$mo_file->import_from_file(WP_LANG_DIR . '/plugins/' . $domain . '-' . $language . '.mo')) return $text;
70
71
72
if (!empty($mo_file->entries[$context . '' . $text]))
73
$text = $mo_file->entries[$context . '' . $text]->translations[0];
74
}
75
76
return $text;
77
}
60
61
/**
62
* function that gets the translation for a string with context directly from a .mo file
63
+ * @TODO this was developped firstly for woocommerce so it maybe needs further development.
64
*/
65
function trp_x( $text, $context, $domain, $language ){
66
67
+ /* try to find the correct path for the textdomain */
68
+ $path = trp_find_translation_location_for_domain( $domain, $language );
69
70
+ $mo_file = new MO();
71
+
72
+ if( !empty( $path ) ) {
73
+ if (!$mo_file->import_from_file( $path )) return $text;
74
75
if (!empty($mo_file->entries[$context . '' . $text]))
76
$text = $mo_file->entries[$context . '' . $text]->translations[0];
77
}
78
79
return $text;
80
+ }
81
+
82
+
83
+ /**
84
+ * Function that tries to find the path for a translation file defined by textdomain and language
85
+ * @param $domain the textdomain of the string that you want the translation for
86
+ * @param $language the language in which you want the translation
87
+ * @return string the path of the mo file if it is found else an empty string
88
+ */
89
+ function trp_find_translation_location_for_domain( $domain, $language ){
90
+
91
+ $path = '';
92
+
93
+ if( file_exists( WP_LANG_DIR . '/plugins/'. $domain .'-' . $language . '.mo') ) {
94
+ $path = WP_LANG_DIR . '/plugins/'. $domain .'-' . $language . '.mo';
95
+ }
96
+ elseif ( file_exists( WP_LANG_DIR . '/themes/'. $domain .'-' . $language . '.mo') ){
97
+ $path = WP_LANG_DIR . '/themes/'. $domain .'-' . $language . '.mo';
98
+ }
99
+ else {
100
+ $possible_translation_folders = array( '', 'languages/', 'language/', 'translations/', 'translation/', 'lang/' );
101
+ foreach( $possible_translation_folders as $possible_translation_folder ){
102
+ if (file_exists(get_template_directory() . '/' . $possible_translation_folder . $domain . '-' . $language . '.mo')) {
103
+ $path = get_template_directory() . '/' . $possible_translation_folder . $domain . '-' . $language . '.mo';
104
+ } elseif ( file_exists(WP_PLUGIN_DIR . '/' . $domain . '/' . $possible_translation_folder . $domain . '-' . $language . '.mo') ) {
105
+ $path = WP_PLUGIN_DIR . '/' . $domain . '/' . $possible_translation_folder . $domain . '-' . $language . '.mo';
106
+ }
107
+ }
108
+ }
109
+
110
+ return $path;
111
}
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
7
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
Author URI: https://cozmoslabs.com/
9
License: GPL2
@@ -33,4 +33,4 @@ function trp_run_translatepress_hooks(){
33
$trp->run();
34
}
35
/* make sure we execute our plugin before other plugins so the changes we make apply across the board */
36
- add_action( 'plugins_loaded', 'trp_run_translatepress_hooks', 1 );
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.8
7
Author: Cozmoslabs, Razvan Mocanu, Madalin Ungureanu, Cristophor Hurduban
8
Author URI: https://cozmoslabs.com/
9
License: GPL2
33
$trp->run();
34
}
35
/* make sure we execute our plugin before other plugins so the changes we make apply across the board */
36
+ add_action( 'plugins_loaded', 'trp_run_translatepress_hooks', 1 );
partials/addons-settings-page.php CHANGED
@@ -1,6 +1,6 @@
1
<div id="trp-addons-page" class="wrap">
2
3
- <h1> <?php _e( 'TranslatePress Settings', TRP_PLUGIN_SLUG );?></h1>
4
<?php do_action ( 'trp_settings_navigation_tabs' ); ?>
5
6
<div class="grid feat-header">
1
<div id="trp-addons-page" class="wrap">
2
3
+ <h1> <?php _e( 'TranslatePress Settings', 'translatepress-multilingual' );?></h1>
4
<?php do_action ( 'trp_settings_navigation_tabs' ); ?>
5
6
<div class="grid feat-header">
partials/language-switcher-shortcode.php CHANGED
@@ -24,6 +24,6 @@ if( $shortcode_settings['flags'] && ! $shortcode_settings['full_names'] && ! $sh
24
</option>
25
<?php } ?>
26
</select>
27
- <noscript><input type="submit" value="<?php _e( 'Change', TRP_PLUGIN_SLUG );?>"></noscript>
28
</form>
29
</div>
24
</option>
25
<?php } ?>
26
</select>
27
+ <noscript><input type="submit" value="<?php _e( 'Change', 'translatepress-multilingual' );?>"></noscript>
28
</form>
29
</div>
partials/main-settings-page.php CHANGED
@@ -2,12 +2,12 @@
2
<div id="trp-main-settings" class="wrap">
3
<form method="post" action="options.php">
4
<?php settings_fields( 'trp_settings' ); ?>
5
- <h1> <?php _e( 'TranslatePress Settings', TRP_PLUGIN_SLUG );?></h1>
6
<?php do_action ( 'trp_settings_navigation_tabs' ); ?>
7
8
<table id="trp-options" class="form-table">
9
<tr>
10
- <th scope="row"><?php _e( 'Default Language', TRP_PLUGIN_SLUG ); ?> </th>
11
<td>
12
<select id="trp-default-language" name="trp_settings[default-language]" class="trp-select2">
13
<?php
@@ -18,7 +18,7 @@
18
<?php }?>
19
</select>
20
<p class="description">
21
- <?php _e( 'Select the original language your website was written in. ', TRP_PLUGIN_SLUG ); ?>
22
</p>
23
</td>
24
</tr>
@@ -26,97 +26,97 @@
26
<?php do_action( 'trp_language_selector', $languages ); ?>
27
28
<tr>
29
- <th scope="row"><?php _e( 'Native language name', TRP_PLUGIN_SLUG ); ?> </th>
30
<td>
31
<select id="trp-g-translate" name="trp_settings[native_or_english_name]" class="trp-select">
32
- <option value="english_name" <?php selected( $this->settings['native_or_english_name'], 'english_name' ); ?>><?php _e( 'No', TRP_PLUGIN_SLUG) ?></option>
33
- <option value="native_name" <?php selected( $this->settings['native_or_english_name'], 'native_name' ); ?>><?php _e( 'Yes', TRP_PLUGIN_SLUG) ?></option>
34
</select>
35
<p class="description">
36
- <?php _e( 'Select Yes if you want languages to display in their native names. Otherwise, they will be displayed in English.', TRP_PLUGIN_SLUG ); ?>
37
</p>
38
</td>
39
</tr>
40
41
<tr>
42
- <th scope="row"><?php _e( 'Use subdirectory for default language', TRP_PLUGIN_SLUG ); ?> </th>
43
<td>
44
<select id="trp-g-translate" name="trp_settings[add-subdirectory-to-default-language]" class="trp-select">
45
- <option value="no" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'no' ); ?>><?php _e( 'No', TRP_PLUGIN_SLUG) ?></option>
46
- <option value="yes" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'yes' ); ?>><?php _e( 'Yes', TRP_PLUGIN_SLUG) ?></option>
47
</select>
48
<p class="description">
49
- <?php _e( 'Select Yes if you want to add the subdirectory in the url for the default language.', TRP_PLUGIN_SLUG ); ?>
50
</p>
51
</td>
52
</tr>
53
54
<tr>
55
- <th scope="row"><?php _e( 'Force language in custom links', TRP_PLUGIN_SLUG ); ?> </th>
56
<td>
57
<select id="trp-g-translate" name="trp_settings[force-language-to-custom-links]" class="trp-select">
58
- <option value="no" <?php selected( $this->settings['force-language-to-custom-links'], 'no' ); ?>><?php _e( 'No', TRP_PLUGIN_SLUG) ?></option>
59
- <option value="yes" <?php selected( $this->settings['force-language-to-custom-links'], 'yes' ); ?>><?php _e( 'Yes', TRP_PLUGIN_SLUG) ?></option>
60
</select>
61
<p class="description">
62
- <?php _e( 'Select Yes if you want to force custom links without language encoding to add the subdirectory in the url for the default language.', TRP_PLUGIN_SLUG ); ?>
63
</p>
64
</td>
65
</tr>
66
67
<tr>
68
- <th scope="row"><?php _e( 'Google Translate', TRP_PLUGIN_SLUG ); ?> </th>
69
<td>
70
<select id="trp-g-translate" name="trp_settings[g-translate]" class="trp-select">
71
- <option value="no" <?php selected( $this->settings['g-translate'], 'no' ); ?>><?php _e( 'No', TRP_PLUGIN_SLUG) ?></option>
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>
79
80
<tr>
81
- <th scope="row"><?php _e( 'Google Translate API Key', TRP_PLUGIN_SLUG ); ?> </th>
82
<td>
83
<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']);?>"/>
84
- <?php if( !empty( $this->settings['g-translate-key'] ) ) echo '<a href="'.admin_url( 'admin.php?page=trp_test_google_key_page' ).'">'.__( "Test api key.", TRP_PLUGIN_SLUG );'.</a>'; ?>
85
<p class="description">
86
- <?php _e( 'Visit this <a href="https://support.google.com/cloud/answer/6158862" target="_blank">link</a> to see how you can set up an API key. ', TRP_PLUGIN_SLUG ); ?>
87
</p>
88
</td>
89
90
</tr>
91
92
<tr>
93
- <th scope="row"><?php _e( 'Language Switcher', TRP_PLUGIN_SLUG ); ?> </th>
94
<td>
95
<div class="trp-ls-type">
96
- <input type="checkbox" disabled checked id="trp-ls-shortcode" ><b><?php _e( 'Shortcode ', TRP_PLUGIN_SLUG ); ?>[language-switcher] </b>
97
<div>
98
<?php $this->output_language_switcher_select( 'shortcode-options', $this->settings['shortcode-options'] ); ?>
99
</div>
100
<p class="description">
101
- <?php _e( 'Use shortcode on any page or widget.', TRP_PLUGIN_SLUG ); ?>
102
</p>
103
</div>
104
<div class="trp-ls-type">
105
- <label><input type="checkbox" id="trp-ls-menu" disabled checked ><b><?php _e( 'Menu item', TRP_PLUGIN_SLUG ); ?></b></label>
106
<div>
107
<?php $this->output_language_switcher_select( 'menu-options', $this->settings['menu-options'] ); ?>
108
</div>
109
<p class="description">
110
- <?php _e( 'Go to Appearance -> Menus to add Language Switcher Languages in any menu.', TRP_PLUGIN_SLUG ); ?>
111
</p>
112
</div>
113
<div class="trp-ls-type">
114
- <label><input type="checkbox" id="trp-ls-floater" name="trp_settings[trp-ls-floater]" value="yes" <?php if ( isset($this->settings['trp-ls-floater']) && ( $this->settings['trp-ls-floater'] == 'yes' ) ){ echo 'checked'; } ?>><b><?php _e( 'Floating language selection', TRP_PLUGIN_SLUG ); ?></b></label>
115
<div>
116
<?php $this->output_language_switcher_select( 'floater-options', $this->settings['floater-options'] ); ?>
117
</div>
118
<p class="description">
119
- <?php _e( 'Have a floating dropdown following the user on every page.', TRP_PLUGIN_SLUG ); ?>
120
</p>
121
</div>
122
</td>
2
<div id="trp-main-settings" class="wrap">
3
<form method="post" action="options.php">
4
<?php settings_fields( 'trp_settings' ); ?>
5
+ <h1> <?php _e( 'TranslatePress Settings', 'translatepress-multilingual' );?></h1>
6
<?php do_action ( 'trp_settings_navigation_tabs' ); ?>
7
8
<table id="trp-options" class="form-table">
9
<tr>
10
+ <th scope="row"><?php _e( 'Default Language', 'translatepress-multilingual' ); ?> </th>
11
<td>
12
<select id="trp-default-language" name="trp_settings[default-language]" class="trp-select2">
13
<?php
18
<?php }?>
19
</select>
20
<p class="description">
21
+ <?php _e( 'Select the original language your website was written in. ', 'translatepress-multilingual' ); ?>
22
</p>
23
</td>
24
</tr>
26
<?php do_action( 'trp_language_selector', $languages ); ?>
27
28
<tr>
29
+ <th scope="row"><?php _e( 'Native language name', 'translatepress-multilingual' ); ?> </th>
30
<td>
31
<select id="trp-g-translate" name="trp_settings[native_or_english_name]" class="trp-select">
32
+ <option value="english_name" <?php selected( $this->settings['native_or_english_name'], 'english_name' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
33
+ <option value="native_name" <?php selected( $this->settings['native_or_english_name'], 'native_name' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
34
</select>
35
<p class="description">
36
+ <?php _e( 'Select Yes if you want languages to display in their native names. Otherwise, they will be displayed in English.', 'translatepress-multilingual' ); ?>
37
</p>
38
</td>
39
</tr>
40
41
<tr>
42
+ <th scope="row"><?php _e( 'Use subdirectory for default language', 'translatepress-multilingual' ); ?> </th>
43
<td>
44
<select id="trp-g-translate" name="trp_settings[add-subdirectory-to-default-language]" class="trp-select">
45
+ <option value="no" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'no' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
46
+ <option value="yes" <?php selected( $this->settings['add-subdirectory-to-default-language'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
47
</select>
48
<p class="description">
49
+ <?php _e( 'Select Yes if you want to add the subdirectory in the url for the default language.', 'translatepress-multilingual' ); ?>
50
</p>
51
</td>
52
</tr>
53
54
<tr>
55
+ <th scope="row"><?php _e( 'Force language in custom links', 'translatepress-multilingual' ); ?> </th>
56
<td>
57
<select id="trp-g-translate" name="trp_settings[force-language-to-custom-links]" class="trp-select">
58
+ <option value="no" <?php selected( $this->settings['force-language-to-custom-links'], 'no' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
59
+ <option value="yes" <?php selected( $this->settings['force-language-to-custom-links'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></option>
60
</select>
61
<p class="description">
62
+ <?php _e( 'Select Yes if you want to force custom links without language encoding to add the subdirectory in the url for the default language.', 'translatepress-multilingual' ); ?>
63
</p>
64
</td>
65
</tr>
66
67
<tr>
68
+ <th scope="row"><?php _e( 'Google Translate', 'translatepress-multilingual' ); ?> </th>
69
<td>
70
<select id="trp-g-translate" name="trp_settings[g-translate]" class="trp-select">
71
+ <option value="no" <?php selected( $this->settings['g-translate'], 'no' ); ?>><?php _e( 'No', 'translatepress-multilingual') ?></option>
72
+ <option value="yes" <?php selected( $this->settings['g-translate'], 'yes' ); ?>><?php _e( 'Yes', 'translatepress-multilingual') ?></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>. ', 'translatepress-multilingual' ); ?>
76
</p>
77
</td>
78
</tr>
79
80
<tr>
81
+ <th scope="row"><?php _e( 'Google Translate API Key', 'translatepress-multilingual' ); ?> </th>
82
<td>
83
<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']);?>"/>
84
+ <?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>'; ?>
85
<p class="description">
86
+ <?php _e( 'Visit this <a href="https://support.google.com/cloud/answer/6158862" target="_blank">link</a> to see how you can set up an API key. ', 'translatepress-multilingual' ); ?>
87
</p>
88
</td>
89
90
</tr>
91
92
<tr>
93
+ <th scope="row"><?php _e( 'Language Switcher', 'translatepress-multilingual' ); ?> </th>
94
<td>
95
<div class="trp-ls-type">
96
+ <input type="checkbox" disabled checked id="trp-ls-shortcode" ><b><?php _e( 'Shortcode ', 'translatepress-multilingual' ); ?>[language-switcher] </b>
97
<div>
98
<?php $this->output_language_switcher_select( 'shortcode-options', $this->settings['shortcode-options'] ); ?>
99
</div>
100
<p class="description">
101
+ <?php _e( 'Use shortcode on any page or widget.', 'translatepress-multilingual' ); ?>
102
</p>
103
</div>
104
<div class="trp-ls-type">
105
+ <label><input type="checkbox" id="trp-ls-menu" disabled checked ><b><?php _e( 'Menu item', 'translatepress-multilingual' ); ?></b></label>
106
<div>
107
<?php $this->output_language_switcher_select( 'menu-options', $this->settings['menu-options'] ); ?>
108
</div>
109
<p class="description">
110
+ <?php _e( 'Go to Appearance -> Menus to add Language Switcher Languages in any menu.', 'translatepress-multilingual' ); ?>
111
</p>
112
</div>
113
<div class="trp-ls-type">
114
+ <label><input type="checkbox" id="trp-ls-floater" name="trp_settings[trp-ls-floater]" value="yes" <?php if ( isset($this->settings['trp-ls-floater']) && ( $this->settings['trp-ls-floater'] == 'yes' ) ){ echo 'checked'; } ?>><b><?php _e( 'Floating language selection', 'translatepress-multilingual' ); ?></b></label>
115
<div>
116
<?php $this->output_language_switcher_select( 'floater-options', $this->settings['floater-options'] ); ?>
117
</div>
118
<p class="description">
119
+ <?php _e( 'Have a floating dropdown following the user on every page.', 'translatepress-multilingual' ); ?>
120
</p>
121
</div>
122
</td>
partials/test-google-key-settings-page.php CHANGED
@@ -14,23 +14,23 @@ $response = wp_remote_post( "https://www.googleapis.com/language/translate/v2",
14
?>
15
<div id="trp-addons-page" class="wrap">
16
17
- <h1> <?php _e( 'TranslatePress Settings', TRP_PLUGIN_SLUG );?></h1>
18
<?php do_action ( 'trp_settings_navigation_tabs' ); ?>
19
20
<div class="grid feat-header">
21
<div class="grid-cell">
22
- <h2><?php _e('Google API Key from settings page:', TRP_PLUGIN_SLUG);?> <span style="font-family:monospace"><?php echo $this->settings['g-translate-key']; ?></span></h2>
23
24
- <h3><?php _e('Response:', TRP_PLUGIN_SLUG);?></h3>
25
<pre>
26
<?php print_r( $response["response"] ); ?>
27
</pre>
28
- <h3><?php _e('Response Body:', TRP_PLUGIN_SLUG);?></h3>
29
<pre>
30
<?php print_r( $response["body"] ); ?>
31
</pre>
32
33
- <h3><?php _e('Entire Response From wp_remote_get():', TRP_PLUGIN_SLUG);?></h3>
34
<pre>
35
<?php print_r( $response ); ?>
36
</pre>
14
?>
15
<div id="trp-addons-page" class="wrap">
16
17
+ <h1> <?php _e( 'TranslatePress Settings', 'translatepress-multilingual' );?></h1>
18
<?php do_action ( 'trp_settings_navigation_tabs' ); ?>
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>
26
<?php print_r( $response["response"] ); ?>
27
</pre>
28
+ <h3><?php _e('Response Body:', 'translatepress-multilingual');?></h3>
29
<pre>
30
<?php print_r( $response["body"] ); ?>
31
</pre>
32
33
+ <h3><?php _e('Entire Response From wp_remote_get():', 'translatepress-multilingual');?></h3>
34
<pre>
35
<?php print_r( $response ); ?>
36
</pre>
partials/translation-manager.php CHANGED
@@ -43,11 +43,11 @@
43
<div id="trp-close-save">
44
<a id="trp-controls-close" href="#"></a>
45
<div id="trp-save-container">
46
- <span id="trp-translation-saved" style="display: none"><?php _e( 'Saved!', TRP_PLUGIN_SLUG ); ?></span>
47
<span class="trp-ajax-loader" style="display: none" id="trp-string-saved-ajax-loader">
48
<div class="trp-spinner"></div>
49
</span>
50
- <button id="trp-save" type="submit" class="button-primary trp-save-string"><?php _e( 'Save translation', TRP_PLUGIN_SLUG ); ?></button>
51
</div>
52
</div>
53
<div class="trp-controls-section">
@@ -61,16 +61,16 @@
61
<input type="hidden" name="trp-edit-translation" value="true">
62
</form>
63
<div id="trp-string-list">
64
- <select id="trp-string-categories" data-trp-placeholder="<?php _e( 'Select string to translate...', TRP_PLUGIN_SLUG ); ?>">
65
<option value="" class="default-option"></option>
66
<?php //add here an optiongroup so we know to add all the gettext strings below this and all the other strings above this ?>
67
- <optgroup id="trp-gettext-strings-optgroup" label="<?php _e( 'Gettext strings', TRP_PLUGIN_SLUG ); ?>"></optgroup>
68
</select>
69
</div>
70
71
<div id="trp-next-previous">
72
- <button type="button" id="trp-previous" class="trp-next-previous-buttons"><span>&laquo;</span> <?php _e( 'Previous', TRP_PLUGIN_SLUG ); ?></button>
73
- <button type="button" id="trp-next" class="trp-next-previous-buttons"><?php _e( 'Next', TRP_PLUGIN_SLUG ); ?> <span>&raquo;</span></button>
74
</div>
75
76
</div>
@@ -79,32 +79,32 @@
79
</div>
80
<div class="trp-controls-section">
81
<div id="trp-translation-section" class="trp-controls-section-content">
82
- <div id="trp-unsaved-changes-warning-message" style="display:none"><?php _e( 'You have unsaved changes!', TRP_PLUGIN_SLUG );?></div>
83
84
85
<?php //original strings for gettext textarea ?>
86
<div id="trp-gettext-original" class="trp-language-text trp-gettext-original-language" style="display:none">
87
- <div class="trp-language-name"><?php _e( 'Original String', TRP_PLUGIN_SLUG );?></div>
88
<textarea id="trp-gettext-original-textarea" readonly="readonly"></textarea>
89
</div>
90
91
<div id="trp-language-<?php echo $trp_settings['default-language'];?>" class="trp-language-text trp-default-language">
92
<?php $default_language_name = $available_languages[ $trp_settings['default-language'] ];?>
93
- <div class="trp-language-name" data-trp-gettext-language-name="<?php echo sprintf( __( 'To %s', TRP_PLUGIN_SLUG ), $default_language_name ); ?>" data-trp-default-language-name="<?php echo sprintf( __( 'From %s', TRP_PLUGIN_SLUG ), $default_language_name ); ?>">
94
- <?php echo sprintf( __( 'From %s', TRP_PLUGIN_SLUG ), $default_language_name ); ?>
95
</div>
96
<textarea id="trp-original" data-trp-language-code="<?php echo esc_attr( $trp_settings['default-language'] ); ?>" readonly="readonly"></textarea>
97
- <div class="trp-discard-changes trp-discard-on-default-language" style="display:none;"><?php _e( 'Discard changes', TRP_PLUGIN_SLUG );?></div>
98
</div>
99
<?php
100
foreach( $translation_languages as $language ){?>
101
<div id="trp-language-<?php echo $language;?>" class="trp-language-text <?php echo ( $TRP_LANGUAGE == $trp_settings['default-language'] || $language == $TRP_LANGUAGE ) ? 'trp-current-language' : 'trp-other-language' ?>">
102
- <div class="trp-language-name"><?php echo sprintf( __( 'To %s', TRP_PLUGIN_SLUG ), $available_languages[ $language ] ); ?></div>
103
<textarea id="trp-translated-<?php echo $language; ?>" data-trp-translate-id="" data-trp-language-code="<?php echo esc_attr( $language ); ?>"></textarea>
104
- <div class="trp-discard-changes"><?php _e( 'Discard changes', TRP_PLUGIN_SLUG );?></div>
105
</div>
106
<?php if ( $language == $TRP_LANGUAGE && count( $translation_languages ) > 1 ){
107
- $other_languages = __( 'Other languages', TRP_PLUGIN_SLUG );
108
?>
109
<div id="trp-show-all-languages" class="trp-toggle-languages"><span>&#11208; <?php echo $other_languages ?></span></div>
110
<div id="trp-hide-all-languages" class="trp-toggle-languages trp-toggle-languages-active"><span>&#11206; <?php echo $other_languages ?></span></div>
@@ -117,9 +117,9 @@
117
<?php if( count( $trp_settings['translation-languages'] ) == 1 ) { ?>
118
<div class="trp-controls-section">
119
<div id="trp-translation-section" class="trp-controls-section-content">
120
- <p><?php printf( __( 'You can add a new language from <a href="%s">Settings->TranslatePress</a>', TRP_PLUGIN_SLUG ), admin_url( 'options-general.php?page=translate-press' ) );?></p>
121
- <p><?php _e( 'However, you can still use TranslatePress to <strong style="background: #f5fb9d;">modify gettext strings</strong> available in your page.', TRP_PLUGIN_SLUG );?></p>
122
- <p><?php _e( 'Strings that are user created can\'t be modified, only those from themes and plugins.', TRP_PLUGIN_SLUG );?></p>
123
</div>
124
</div>
125
<?php } ?>
@@ -130,16 +130,16 @@
130
?>
131
<div class="trp-controls-section wp-core-ui">
132
<div id="trp-upsell-section" class="trp-controls-section-content">
133
- <h3><?php _e('Your Website <br/> Multiple Languages', TRP_PLUGIN_SLUG ); ?></h3>
134
<ul>
135
- <li><?php _e('Support for 221 Languages', TRP_PLUGIN_SLUG ); ?></li>
136
- <li><?php _e('Translate SEO Title, Description, Slug', TRP_PLUGIN_SLUG ); ?></li>
137
- <li><?php _e('Translate Facebook Tags', TRP_PLUGIN_SLUG ); ?></li>
138
- <li><?php _e('Create Translator Accounts', TRP_PLUGIN_SLUG ); ?></li>
139
- <li><?php _e('Publish when the translation is done', TRP_PLUGIN_SLUG ); ?></li>
140
</ul>
141
- <p><span style="background: #f5fb9d;"><?php _e('Supported By Real People', TRP_PLUGIN_SLUG ); ?></span></p>
142
- <p><a class="button-primary" target="_blank" href="https://translatepress.com/pricing/?utm_source=wpbackend&utm_medium=clientsite&utm_content=tpeditor&utm_campaign=tpfree"><?php _e('Learn More', TRP_PLUGIN_SLUG ); ?></a></p>
143
</div>
144
</div>
145
<?php endif; ?>
43
<div id="trp-close-save">
44
<a id="trp-controls-close" href="#"></a>
45
<div id="trp-save-container">
46
+ <span id="trp-translation-saved" style="display: none"><?php _e( 'Saved!', 'translatepress-multilingual' ); ?></span>
47
<span class="trp-ajax-loader" style="display: none" id="trp-string-saved-ajax-loader">
48
<div class="trp-spinner"></div>
49
</span>
50
+ <button id="trp-save" type="submit" class="button-primary trp-save-string"><?php _e( 'Save translation', 'translatepress-multilingual' ); ?></button>
51
</div>
52
</div>
53
<div class="trp-controls-section">
61
<input type="hidden" name="trp-edit-translation" value="true">
62
</form>
63
<div id="trp-string-list">
64
+ <select id="trp-string-categories" data-trp-placeholder="<?php _e( 'Select string to translate...', 'translatepress-multilingual' ); ?>">
65
<option value="" class="default-option"></option>
66
<?php //add here an optiongroup so we know to add all the gettext strings below this and all the other strings above this ?>
67
+ <optgroup id="trp-gettext-strings-optgroup" label="<?php _e( 'Gettext strings', 'translatepress-multilingual' ); ?>"></optgroup>
68
</select>
69
</div>
70
71
<div id="trp-next-previous">
72
+ <button type="button" id="trp-previous" class="trp-next-previous-buttons"><span>&laquo;</span> <?php _e( 'Previous', 'translatepress-multilingual' ); ?></button>
73
+ <button type="button" id="trp-next" class="trp-next-previous-buttons"><?php _e( 'Next', 'translatepress-multilingual' ); ?> <span>&raquo;</span></button>
74
</div>
75
76
</div>
79
</div>
80
<div class="trp-controls-section">
81
<div id="trp-translation-section" class="trp-controls-section-content">
82
+ <div id="trp-unsaved-changes-warning-message" style="display:none"><?php _e( 'You have unsaved changes!', 'translatepress-multilingual' );?></div>
83
84
85
<?php //original strings for gettext textarea ?>
86
<div id="trp-gettext-original" class="trp-language-text trp-gettext-original-language" style="display:none">
87
+ <div class="trp-language-name"><?php _e( 'Original String', 'translatepress-multilingual' );?></div>
88
<textarea id="trp-gettext-original-textarea" readonly="readonly"></textarea>
89
</div>
90
91
<div id="trp-language-<?php echo $trp_settings['default-language'];?>" class="trp-language-text trp-default-language">
92
<?php $default_language_name = $available_languages[ $trp_settings['default-language'] ];?>
93
+ <div class="trp-language-name" data-trp-gettext-language-name="<?php echo sprintf( __( 'To %s', 'translatepress-multilingual' ), $default_language_name ); ?>" data-trp-default-language-name="<?php echo sprintf( __( 'From %s', 'translatepress-multilingual' ), $default_language_name ); ?>">
94
+ <?php echo sprintf( __( 'From %s', 'translatepress-multilingual' ), $default_language_name ); ?>
95
</div>
96
<textarea id="trp-original" data-trp-language-code="<?php echo esc_attr( $trp_settings['default-language'] ); ?>" readonly="readonly"></textarea>
97
+ <div class="trp-discard-changes trp-discard-on-default-language" style="display:none;"><?php _e( 'Discard changes', 'translatepress-multilingual' );?></div>
98
</div>
99
<?php
100
foreach( $translation_languages as $language ){?>
101
<div id="trp-language-<?php echo $language;?>" class="trp-language-text <?php echo ( $TRP_LANGUAGE == $trp_settings['default-language'] || $language == $TRP_LANGUAGE ) ? 'trp-current-language' : 'trp-other-language' ?>">
102
+ <div class="trp-language-name"><?php echo sprintf( __( 'To %s', 'translatepress-multilingual' ), $available_languages[ $language ] ); ?></div>
103
<textarea id="trp-translated-<?php echo $language; ?>" data-trp-translate-id="" data-trp-language-code="<?php echo esc_attr( $language ); ?>"></textarea>
104
+ <div class="trp-discard-changes"><?php _e( 'Discard changes', 'translatepress-multilingual' );?></div>
105
</div>
106
<?php if ( $language == $TRP_LANGUAGE && count( $translation_languages ) > 1 ){
107
+ $other_languages = __( 'Other languages', 'translatepress-multilingual' );
108
?>
109
<div id="trp-show-all-languages" class="trp-toggle-languages"><span>&#11208; <?php echo $other_languages ?></span></div>
110
<div id="trp-hide-all-languages" class="trp-toggle-languages trp-toggle-languages-active"><span>&#11206; <?php echo $other_languages ?></span></div>
117
<?php if( count( $trp_settings['translation-languages'] ) == 1 ) { ?>
118
<div class="trp-controls-section">
119
<div id="trp-translation-section" class="trp-controls-section-content">
120
+ <p><?php printf( __( 'You can add a new language from <a href="%s">Settings->TranslatePress</a>', 'translatepress-multilingual' ), admin_url( 'options-general.php?page=translate-press' ) );?></p>
121
+ <p><?php _e( 'However, you can still use TranslatePress to <strong style="background: #f5fb9d;">modify gettext strings</strong> available in your page.', 'translatepress-multilingual' );?></p>
122
+ <p><?php _e( 'Strings that are user created can\'t be modified, only those from themes and plugins.', 'translatepress-multilingual' );?></p>
123
</div>
124
</div>
125
<?php } ?>
130
?>
131
<div class="trp-controls-section wp-core-ui">
132
<div id="trp-upsell-section" class="trp-controls-section-content">
133
+ <h3><?php _e('Your Website <br/> Multiple Languages', 'translatepress-multilingual' ); ?></h3>
134
<ul>
135
+ <li><?php _e('Support for 221 Languages', 'translatepress-multilingual' ); ?></li>
136
+ <li><?php _e('Translate SEO Title, Description, Slug', 'translatepress-multilingual' ); ?></li>
137
+ <li><?php _e('Translate Facebook Tags', 'translatepress-multilingual' ); ?></li>
138
+ <li><?php _e('Create Translator Accounts', 'translatepress-multilingual' ); ?></li>
139
+ <li><?php _e('Publish when the translation is done', 'translatepress-multilingual' ); ?></li>
140
</ul>
141
+ <p><span style="background: #f5fb9d;"><?php _e('Supported By Real People', 'translatepress-multilingual' ); ?></span></p>
142
+ <p><a class="button-primary" target="_blank" href="https://translatepress.com/pricing/?utm_source=wpbackend&utm_medium=clientsite&utm_content=tpeditor&utm_campaign=tpfree"><?php _e('Learn More', 'translatepress-multilingual' ); ?></a></p>
143
</div>
144
</div>
145
<?php endif; ?>
readme.txt CHANGED
@@ -3,8 +3,8 @@ Contributors: cozmoslabs, razvan.mo, madalin.ungureanu, cristophor
3
Donate link: https://www.cozmoslabs.com/
4
Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate, bilingual
5
Requires at least: 3.1.0
6
- Tested up to: 4.8.3
7
- Stable tag: 1.0.7
8
License: GPLv2 or later
9
License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
@@ -107,6 +107,15 @@ For more information please check out [TranslatePress documentation](https://tra
107
108
== Changelog ==
109
110
= 1.0.7 =
111
* Fixed a small bug in js regarding the translation editor sidebar with
112
* Fixed Language Switcher for Woocommerce product categories and product tags going to 404 pages
3
Donate link: https://www.cozmoslabs.com/
4
Tags: translate, translation, multilingual, automatic translation, front-end translation, google translate, bilingual
5
Requires at least: 3.1.0
6
+ Tested up to: 4.9.0
7
+ Stable tag: 1.0.8
8
License: GPLv2 or later
9
License URI: http://www.gnu.org/licenses/gpl-2.0.html
10
107
108
== Changelog ==
109
110
+ = 1.0.8 =
111
+ * We now allow HTML in normal strings translations.
112
+ * Changed the way we get the default language permalinks in Woocommerce rewrites
113
+ * Fixed issues with date_i18n function
114
+ * Fixed a warning generated when there are no rewrite rules
115
+ * Fixed dynamic strings not updating the translation dropdown list.
116
+ * Fixed issues with hidden space characters that were breaking some translations
117
+ * Make sure we don't loose the trp-edit-translation=preview from url after a WordPress redirect
118
+
119
= 1.0.7 =
120
* Fixed a small bug in js regarding the translation editor sidebar with
121
* Fixed Language Switcher for Woocommerce product categories and product tags going to 404 pages