WP Meta SEO - Version 3.2.6

Version Description

  • Add : Add builtin translation tool
  • Fix : Wrong function used to get description length
Download this release

Release Info

Developer JoomUnited
Plugin Icon 128x128 WP Meta SEO
Version 3.2.6
Comparing to
See all releases

Code changes from version 3.2.5 to 3.2.6

css/metaseo_admin.css CHANGED
@@ -498,10 +498,11 @@ strong {
498
 
499
  .content-box{
500
  padding: 10px;
 
501
  }
502
 
503
- .content-wpms-redirection,.content-wpms-email{
504
- display: none;
505
  }
506
 
507
  .wpms_content_settings{
@@ -622,4 +623,8 @@ strong {
622
  float:left;
623
  width: 70px;
624
  line-height: 25px;
 
 
 
 
625
  }
498
 
499
  .content-box{
500
  padding: 10px;
501
+ display: none;
502
  }
503
 
504
+ .content-wpms-global{
505
+ display: block;
506
  }
507
 
508
  .wpms_content_settings{
623
  float:left;
624
  width: 70px;
625
  line-height: 25px;
626
+ }
627
+
628
+ #jutranslation{
629
+ margin-top: 40px;
630
  }
inc/class.metaseo-admin.php CHANGED
@@ -272,7 +272,7 @@ class MetaSeo_Admin {
272
  * Loads translated strings.
273
  */
274
  function wpms_load_langguage() {
275
- load_plugin_textdomain('wp-meta-seo', false, dirname(plugin_basename(WPMSEO_FILE)) . '/languages/');
276
  }
277
 
278
  function metaseo_create_field($data_title, $alt, $dashicon, $label, $value_hidden) {
272
  * Loads translated strings.
273
  */
274
  function wpms_load_langguage() {
275
+ load_plugin_textdomain('wp-meta-seo', false, dirname(plugin_basename(__FILE__)) . DIRECTORY_SEPARATOR . 'languages' .DIRECTORY_SEPARATOR);
276
  }
277
 
278
  function metaseo_create_field($data_title, $alt, $dashicon, $label, $value_hidden) {
inc/class.metaseo-broken-link-table.php CHANGED
@@ -126,7 +126,7 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
126
 
127
  if (!empty($columns['cb'])) {
128
  static $cb_counter = 1;
129
- $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __('Select All') . '</label>'
130
  . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
131
  $cb_counter++;
132
  }
@@ -384,7 +384,7 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
384
  </select>
385
 
386
  <?php
387
- submit_button(__('Filter'), 'button', 'filter_type_action', false, array('id' => 'broken-submit'));
388
  echo '<div style="float:left;padding-left: 5px;"><div class="wpms_process" data-w="0"></div>';
389
  echo '<div data-comment_paged="1" data-paged="1" class="button wpms_scan_link">' . __('Index internal broken links', 'wp-meta-seo') . '</div></div>';
390
  echo '<span class="spinner"></span>';
@@ -593,7 +593,7 @@ class MetaSeo_Broken_Link_Table extends WP_List_Table {
593
  $source = get_comment($rec->source_id);
594
  if (!empty($source)) {
595
  $row_action = array(
596
- 'edit' => '<a target="_blank" href="' . get_edit_comment_link($rec->source_id) . '" title="'.__('Edit this item','wp-meta-seo').'">'.__('Edit','wp-meta-seo').'</a>',
597
  'view' => '<a target="_blank" href="' . get_comment_link($rec->source_id) . '" title="View &#8220;test&#8221;" rel="permalink">'.__('View','wp-meta-seo').'</a>'
598
  );
599
 
126
 
127
  if (!empty($columns['cb'])) {
128
  static $cb_counter = 1;
129
+ $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __('Select All', 'wp-meta-seo') . '</label>'
130
  . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
131
  $cb_counter++;
132
  }
384
  </select>
385
 
386
  <?php
387
+ submit_button(__('Filter', 'wp-meta-seo'), 'button', 'filter_type_action', false, array('id' => 'broken-submit'));
388
  echo '<div style="float:left;padding-left: 5px;"><div class="wpms_process" data-w="0"></div>';
389
  echo '<div data-comment_paged="1" data-paged="1" class="button wpms_scan_link">' . __('Index internal broken links', 'wp-meta-seo') . '</div></div>';
390
  echo '<span class="spinner"></span>';
593
  $source = get_comment($rec->source_id);
594
  if (!empty($source)) {
595
  $row_action = array(
596
+ 'edit' => '<a target="_blank" href="' . get_edit_comment_link($rec->source_id) . '" title="'.__('Edit this item','wp-meta-seo').'">'.__('Edit','wp-meta-seo','wp-meta-seo').'</a>',
597
  'view' => '<a target="_blank" href="' . get_comment_link($rec->source_id) . '" title="View &#8220;test&#8221;" rel="permalink">'.__('View','wp-meta-seo').'</a>'
598
  );
599
 
inc/class.metaseo-content-list-table.php CHANGED
@@ -113,7 +113,7 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
113
  $btn_bulk = '<input type="button" name="do_copy" id="post_do_copy" class="button button-primary btn_do_copy post_do_copy" value="' . __('Content title as meta title', 'wp-meta-seo') . '"><span class="spinner"></span>';
114
 
115
  echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
116
- submit_button(__('Filter'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
117
  echo $sl_bulk . $btn_bulk;
118
  echo "</div>";
119
  }
@@ -373,15 +373,15 @@ class MetaSeo_Content_List_Table extends WP_List_Table {
373
  $actions = array();
374
 
375
  if ($can_edit_post && 'trash' != $rec->post_status) {
376
- $actions['edit'] = '<a href="' . get_edit_post_link($rec->ID, true) . '" title="' . esc_attr(__('Edit this item')) . '">' . __('Edit') . '</a>';
377
  }
378
 
379
  if ($post_type_object->public) {
380
  if (in_array($rec->post_status, array('pending', 'draft', 'future'))) {
381
  if ($can_edit_post)
382
- $actions['view'] = '<a href="' . esc_url(add_query_arg('preview', 'true', get_permalink($rec->ID))) . '" title="' . esc_attr(sprintf(__('Preview &#8220;%s&#8221;'), $rec->post_title)) . '" rel="permalink">' . __('Preview') . '</a>';
383
  } elseif ('trash' != $rec->post_status) {
384
- $actions['view'] = '<a target="_blank" href="' . get_permalink($rec->ID) . '" title="' . esc_attr(sprintf(__('View &#8220;%s&#8221;'), $rec->post_title)) . '" rel="permalink">' . __('View') . '</a>';
385
  }
386
  }
387
 
113
  $btn_bulk = '<input type="button" name="do_copy" id="post_do_copy" class="button button-primary btn_do_copy post_do_copy" value="' . __('Content title as meta title', 'wp-meta-seo') . '"><span class="spinner"></span>';
114
 
115
  echo sprintf('<select name="post_type_filter" class="metaseo-filter">%1$s</select>', $options);
116
+ submit_button(__('Filter', 'wp-meta-seo'), 'button', 'do_filter', false, array('id' => 'post-query-submit'));
117
  echo $sl_bulk . $btn_bulk;
118
  echo "</div>";
119
  }
373
  $actions = array();
374
 
375
  if ($can_edit_post && 'trash' != $rec->post_status) {
376
+ $actions['edit'] = '<a href="' . get_edit_post_link($rec->ID, true) . '" title="' . esc_attr(__('Edit this item','wp-meta-seo')) . '">' . __('Edit', 'wp-meta-seo') . '</a>';
377
  }
378
 
379
  if ($post_type_object->public) {
380
  if (in_array($rec->post_status, array('pending', 'draft', 'future'))) {
381
  if ($can_edit_post)
382
+ $actions['view'] = '<a href="' . esc_url(add_query_arg('preview', 'true', get_permalink($rec->ID))) . '" title="' . esc_attr(sprintf(__('Preview &#8220;%s&#8221;', 'wp-meta-seo'), $rec->post_title)) . '" rel="permalink">' . __('Preview', 'wp-meta-seo') . '</a>';
383
  } elseif ('trash' != $rec->post_status) {
384
+ $actions['view'] = '<a target="_blank" href="' . get_permalink($rec->ID) . '" title="' . esc_attr(sprintf(__('View &#8220;%s&#8221;', 'wp-meta-seo'), $rec->post_title)) . '" rel="permalink">' . __('View', 'wp-meta-seo') . '</a>';
385
  }
386
  }
387
 
inc/class.metaseo-image-list-table.php CHANGED
@@ -209,7 +209,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
209
 
210
  if (!empty($columns['cb'])) {
211
  static $cb_counter = 1;
212
- $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __('Select All') . '</label>'
213
  . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
214
  $cb_counter++;
215
  }
@@ -416,14 +416,14 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
416
  continue;
417
  $month = zeroise($arc_row->month, 2);
418
  $year = $arc_row->year;
419
- printf("<option %s value='%s' >%s</option>\n", selected($m, "$year-$month", false), esc_attr("$arc_row->year-$month"), sprintf(__('%1$s %2$d'), $wp_locale->get_month($month), $year)
420
  );
421
  }
422
  ?>
423
  </select>
424
 
425
  <?php
426
- submit_button(__('Filter'), 'button', $namebutton, false, array('id' => 'image-submit'));
427
  }
428
 
429
  /**
@@ -792,7 +792,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
792
  <td colspan="8"></td>
793
  <td colspan="2">
794
  <a href="javascript:void(0);" id="metaseo-replace-all" class="button button-primary" onclick="optimize_imgs_group(this)">
795
- <?php echo __('Replace All') ?>
796
  </a>
797
  <span class="optimizing spinner"></span>
798
  </td>
@@ -1333,7 +1333,7 @@ class MetaSeo_Image_List_Table extends WP_List_Table {
1333
  $response->msg = __('This image has been removed from the post, please check again!', 'wp-meta-seo');
1334
  }
1335
  } else {
1336
- $response->msg = __('Content of the post is empty, please check again', 'wpms!');
1337
  }
1338
  }
1339
 
209
 
210
  if (!empty($columns['cb'])) {
211
  static $cb_counter = 1;
212
+ $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __('Select All', 'wp-meta-seo') . '</label>'
213
  . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
214
  $cb_counter++;
215
  }
416
  continue;
417
  $month = zeroise($arc_row->month, 2);
418
  $year = $arc_row->year;
419
+ printf("<option %s value='%s' >%s</option>\n", selected($m, "$year-$month", false), esc_attr("$arc_row->year-$month"), sprintf(__('%1$s %2$d', 'wp-meta-seo'), $wp_locale->get_month($month), $year)
420
  );
421
  }
422
  ?>
423
  </select>
424
 
425
  <?php
426
+ submit_button(__('Filter', 'wp-meta-seo'), 'button', $namebutton, false, array('id' => 'image-submit'));
427
  }
428
 
429
  /**
792
  <td colspan="8"></td>
793
  <td colspan="2">
794
  <a href="javascript:void(0);" id="metaseo-replace-all" class="button button-primary" onclick="optimize_imgs_group(this)">
795
+ <?php echo __('Replace All', 'wp-meta-seo') ?>
796
  </a>
797
  <span class="optimizing spinner"></span>
798
  </td>
1333
  $response->msg = __('This image has been removed from the post, please check again!', 'wp-meta-seo');
1334
  }
1335
  } else {
1336
+ $response->msg = __('Content of the post is empty, please check again', 'wp-meta-seo');
1337
  }
1338
  }
1339
 
inc/class.metaseo-link-list-table.php CHANGED
@@ -207,7 +207,7 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
207
 
208
  if (!empty($columns['cb'])) {
209
  static $cb_counter = 1;
210
- $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __('Select All') . '</label>'
211
  . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
212
  $cb_counter++;
213
  }
@@ -451,14 +451,14 @@ class MetaSeo_Link_List_Table extends WP_List_Table {
451
  continue;
452
  $month = zeroise($arc_row->month, 2);
453
  $year = $arc_row->year;
454
- printf("<option %s value='%s' >%s</option>\n", selected($m, "$year-$month", false), esc_attr("$arc_row->year-$month"), sprintf(__('%1$s %2$d'), $wp_locale->get_month($month), $year)
455
  );
456
  }
457
  ?>
458
  </select>
459
 
460
  <?php
461
- submit_button(__('Filter'), 'button', $namebutton, false, array('id' => 'image-submit'));
462
  }
463
 
464
  /**
207
 
208
  if (!empty($columns['cb'])) {
209
  static $cb_counter = 1;
210
+ $columns['cb'] = '<label class="screen-reader-text" for="cb-select-all-' . $cb_counter . '">' . __('Select All', 'wp-meta-seo') . '</label>'
211
  . '<input id="cb-select-all-' . $cb_counter . '" type="checkbox" style="margin:0;" />';
212
  $cb_counter++;
213
  }
451
  continue;
452
  $month = zeroise($arc_row->month, 2);
453
  $year = $arc_row->year;
454
+ printf("<option %s value='%s' >%s</option>\n", selected($m, "$year-$month", false), esc_attr("$arc_row->year-$month"), sprintf(__('%1$s %2$d', 'wp-meta-seo'), $wp_locale->get_month($month), $year)
455
  );
456
  }
457
  ?>
458
  </select>
459
 
460
  <?php
461
+ submit_button(__('Filter', 'wp-meta-seo'), 'button', $namebutton, false, array('id' => 'image-submit'));
462
  }
463
 
464
  /**
inc/class.metaseo-metabox.php CHANGED
@@ -67,7 +67,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
67
  self::$meta_fields['general']['snippetpreview']['help'] = sprintf(__('This is a preview of what your content will looks like in search engine results: title, description and URL', 'wp-meta-seo'), '<a target="_blank" href="https://www.joomunited.com/wordpress-products/wpms">', '</a>');
68
 
69
  self::$meta_fields['general']['title']['title'] = __('Search engine title', 'wp-meta-seo');
70
- self::$meta_fields['general']['title']['description'] = sprintf(__('<span id="metaseo_wpmseo_title-length">%s</span>'), self::$meta_length_reason);
71
  self::$meta_fields['general']['title']['help'] = __('This is the title of your content that may be displayed in search engine results (meta title). By default it’s the content title (page title, post title…). 69 characters max allowed.', 'wp-meta-seo');
72
 
73
  $settings = get_option('_metaseo_settings');
@@ -81,7 +81,7 @@ class WPMSEO_Metabox extends WPMSEO_Meta {
81
 
82
 
83
  self::$meta_fields['general']['desc']['title'] = __('Search engine description', 'wp-meta-seo');
84
- self::$meta_fields['general']['desc']['description'] = sprintf(__('<span id="metaseo_wpmseo_desc-length">%s</span>'), self::$meta_length_reason);
85
  self::$meta_fields['general']['desc']['help'] = __('The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed.', 'wp-meta-seo');
86
 
87
  self::$meta_fields['social']['opengraph-title']['title'] = __('Facebook Title', 'wp-meta-seo');
67
  self::$meta_fields['general']['snippetpreview']['help'] = sprintf(__('This is a preview of what your content will looks like in search engine results: title, description and URL', 'wp-meta-seo'), '<a target="_blank" href="https://www.joomunited.com/wordpress-products/wpms">', '</a>');
68
 
69
  self::$meta_fields['general']['title']['title'] = __('Search engine title', 'wp-meta-seo');
70
+ self::$meta_fields['general']['title']['description'] = sprintf('<span id="metaseo_wpmseo_title-length">%s</span>', self::$meta_length_reason);
71
  self::$meta_fields['general']['title']['help'] = __('This is the title of your content that may be displayed in search engine results (meta title). By default it’s the content title (page title, post title…). 69 characters max allowed.', 'wp-meta-seo');
72
 
73
  $settings = get_option('_metaseo_settings');
81
 
82
 
83
  self::$meta_fields['general']['desc']['title'] = __('Search engine description', 'wp-meta-seo');
84
+ self::$meta_fields['general']['desc']['description'] = sprintf('<span id="metaseo_wpmseo_desc-length">%s</span>', self::$meta_length_reason);
85
  self::$meta_fields['general']['desc']['help'] = __('The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed.', 'wp-meta-seo');
86
 
87
  self::$meta_fields['social']['opengraph-title']['title'] = __('Facebook Title', 'wp-meta-seo');
inc/class.metaseo-sitemap.php CHANGED
@@ -147,7 +147,7 @@ class MetaSeo_Sitemap {
147
  ?>
148
  <?php if (is_multisite()) { ?>
149
  <label><input id="wpms_sitemap_add" type='checkbox' disabled="disabled" name='_metaseo_settings_sitemap[wpms_sitemap_add]' value="1" <?php checked(1, $this->settings_sitemap['wpms_sitemap_add']); ?> /> <?php _e("add sitemap file path in robots.txt", 'wp-meta-seo'); ?></label>
150
- <p style="color:red"><?php _e("Since you are using multisiting, the plugin does not allow to add a sitemap to robots.txt", 'wp-meta-seo'); ?></div>
151
  <?php } else { ?>
152
  <!-- for robots.txt we need to use site_url instead home_url ! -->
153
  <label><input id="wpms_sitemap_add" type='checkbox' name='_metaseo_settings_sitemap[wpms_sitemap_add]' value="1" <?php checked(1, $this->settings_sitemap['wpms_sitemap_add']); ?> /> <?php _e("add sitemap link in the", 'wp-meta-seo'); ?> <a href="<?php echo site_url('/'); ?>robots.txt" target="_new">robots.txt</a></label>
@@ -764,7 +764,7 @@ class MetaSeo_Sitemap {
764
  if ($i == 1) {
765
  // Authors
766
  if ($this->settings_sitemap['wpms_sitemap_author'] == 1) {
767
- $html .= '<div id="sitemap_authors"><h3>' . __('Authors') . '</h3>
768
  <ul>';
769
 
770
  $authEx = implode(", ", get_users('orderby=nicename&meta_key=wpms_excludeauthorsitemap&meta_value=on'));
147
  ?>
148
  <?php if (is_multisite()) { ?>
149
  <label><input id="wpms_sitemap_add" type='checkbox' disabled="disabled" name='_metaseo_settings_sitemap[wpms_sitemap_add]' value="1" <?php checked(1, $this->settings_sitemap['wpms_sitemap_add']); ?> /> <?php _e("add sitemap file path in robots.txt", 'wp-meta-seo'); ?></label>
150
+ <p style="color:red"><?php _e("Since you are using multisite, the plugin does not allow to add a sitemap to robots.txt", 'wp-meta-seo'); ?></p>
151
  <?php } else { ?>
152
  <!-- for robots.txt we need to use site_url instead home_url ! -->
153
  <label><input id="wpms_sitemap_add" type='checkbox' name='_metaseo_settings_sitemap[wpms_sitemap_add]' value="1" <?php checked(1, $this->settings_sitemap['wpms_sitemap_add']); ?> /> <?php _e("add sitemap link in the", 'wp-meta-seo'); ?> <a href="<?php echo site_url('/'); ?>robots.txt" target="_new">robots.txt</a></label>
764
  if ($i == 1) {
765
  // Authors
766
  if ($this->settings_sitemap['wpms_sitemap_author'] == 1) {
767
+ $html .= '<div id="sitemap_authors"><h3>' . __('Authors', 'wp-meta-seo') . '</h3>
768
  <ul>';
769
 
770
  $authEx = implode(", ", get_users('orderby=nicename&meta_key=wpms_excludeauthorsitemap&meta_value=on'));
inc/google_analytics/wpmsga.php CHANGED
@@ -19,7 +19,7 @@ if (!class_exists('WPMSGA_Manager')) {
19
  */
20
  private function __construct() {
21
  if (null !== self::$instance) {
22
- _doing_it_wrong(__FUNCTION__, __("This is not allowed, read the documentation!", 'wp-meta-seo'), '4.6');
23
  }
24
  }
25
 
19
  */
20
  private function __construct() {
21
  if (null !== self::$instance) {
22
+ _doing_it_wrong(__FUNCTION__, __("This is not allowed, please read the documentation!", 'wp-meta-seo'), '4.6');
23
  }
24
  }
25
 
inc/pages/content-meta.php CHANGED
@@ -78,7 +78,7 @@ if (!empty($_REQUEST['_wp_http_referer'])) {
78
  });
79
 
80
  $('.metaseo-metadesc').bind('input propertychange', function () {
81
- metaseo_keywordlength(this.id, true);
82
  });
83
 
84
  $('.metaseo-metadesc').blur(function () {
78
  });
79
 
80
  $('.metaseo-metadesc').bind('input propertychange', function () {
81
+ metaseo_desclength(this.id, true);
82
  });
83
 
84
  $('.metaseo-metadesc').blur(function () {
inc/pages/dashboard.php CHANGED
@@ -51,7 +51,7 @@ $plugin_imgRecycle_file = 'imagerecycle-pdf-image-compression/wp-image-recycle.p
51
  <span class="sr-only">0% Complete (success)</span>
52
  </div>
53
  </div>
54
- <p><?php _e('Meta title filled', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo-addon') ?></p>
55
  </div>
56
  <div class="col-xs-5 col-lg-4 text-right">
57
  <input type="text" value="0" class="dial-warning">
@@ -73,7 +73,7 @@ $plugin_imgRecycle_file = 'imagerecycle-pdf-image-compression/wp-image-recycle.p
73
  <span class="sr-only">0% Complete (success)</span>
74
  </div>
75
  </div>
76
- <p><?php _e('Meta description filled', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo-addon') ?></p>
77
  </div>
78
  <div class="col-xs-5 col-lg-4 text-right">
79
  <input type="text" value="0" class="dial-info">
@@ -96,7 +96,7 @@ $plugin_imgRecycle_file = 'imagerecycle-pdf-image-compression/wp-image-recycle.p
96
  <span class="sr-only">0% Complete (success)</span>
97
  </div>
98
  </div>
99
- <p><?php _e('Wrong resized images', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo-addon') ?></p>
100
  </div>
101
  <div class="col-xs-5 col-lg-4 text-right">
102
  <input type="text" value="0" class="dial-danger">
@@ -118,7 +118,7 @@ $plugin_imgRecycle_file = 'imagerecycle-pdf-image-compression/wp-image-recycle.p
118
  <span class="sr-only">0% Complete (success)</span>
119
  </div>
120
  </div>
121
- <p><?php _e('Image data filled (in content)', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo-addon') ?></p>
122
  </div>
123
  <div class="col-xs-5 col-lg-4 text-right">
124
  <input type="text" value="0" class="dial-success">
@@ -140,7 +140,7 @@ $plugin_imgRecycle_file = 'imagerecycle-pdf-image-compression/wp-image-recycle.p
140
  <span class="sr-only">0% Complete (success)</span>
141
  </div>
142
  </div>
143
- <p><?php _e('Latest month new or updated content', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo-addon') ?></p>
144
  </div>
145
  <div class="col-xs-5 col-lg-4 text-right">
146
  <input type="text" value="0" class="dial-warning">
@@ -162,7 +162,7 @@ $plugin_imgRecycle_file = 'imagerecycle-pdf-image-compression/wp-image-recycle.p
162
  <span class="sr-only">0% Complete (success)</span>
163
  </div>
164
  </div>
165
- <p><?php _e('Links title completed', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo-addon') ?></p>
166
  </div>
167
  <div class="col-xs-5 col-lg-4 text-right">
168
  <input type="text" value="0" class="dial-warning">
51
  <span class="sr-only">0% Complete (success)</span>
52
  </div>
53
  </div>
54
+ <p><?php _e('Meta title filled', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo') ?></p>
55
  </div>
56
  <div class="col-xs-5 col-lg-4 text-right">
57
  <input type="text" value="0" class="dial-warning">
73
  <span class="sr-only">0% Complete (success)</span>
74
  </div>
75
  </div>
76
+ <p><?php _e('Meta description filled', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo') ?></p>
77
  </div>
78
  <div class="col-xs-5 col-lg-4 text-right">
79
  <input type="text" value="0" class="dial-info">
96
  <span class="sr-only">0% Complete (success)</span>
97
  </div>
98
  </div>
99
+ <p><?php _e('Wrong resized images', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo') ?></p>
100
  </div>
101
  <div class="col-xs-5 col-lg-4 text-right">
102
  <input type="text" value="0" class="dial-danger">
118
  <span class="sr-only">0% Complete (success)</span>
119
  </div>
120
  </div>
121
+ <p><?php _e('Image data filled (in content)', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo') ?></p>
122
  </div>
123
  <div class="col-xs-5 col-lg-4 text-right">
124
  <input type="text" value="0" class="dial-success">
140
  <span class="sr-only">0% Complete (success)</span>
141
  </div>
142
  </div>
143
+ <p><?php _e('Latest month new or updated content', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo') ?></p>
144
  </div>
145
  <div class="col-xs-5 col-lg-4 text-right">
146
  <input type="text" value="0" class="dial-warning">
162
  <span class="sr-only">0% Complete (success)</span>
163
  </div>
164
  </div>
165
+ <p><?php _e('Links title completed', 'wp-meta-seo') ?>: <?php _e('Loading...','wp-meta-seo') ?></p>
166
  </div>
167
  <div class="col-xs-5 col-lg-4 text-right">
168
  <input type="text" value="0" class="dial-warning">
inc/pages/google-analytics/metaseo-google-analytics-trackcode.php CHANGED
@@ -12,8 +12,7 @@
12
  }
13
 
14
  if (empty($this->google_alanytics['tableid_jail'])) {
15
- $message = "<div class='error'><p>" . __( "You need select a profile: " . '<a href="' . admin_url('admin.php?page=metaseo_google_analytics&view=wpmsga_trackcode') . '">' . __("authorize the plugin", 'wp-meta-seo') . '</a>.', 'wp-meta-seo' ) . ".</p></div>";
16
- //$message = __("You need select a profile:", 'wp-meta-seo') . ' <a href="' . admin_url('admin.php?page=metaseo_google_analytics&view=wpmsga_trackcode') . '">' . __("authorize the plugin", 'wp-meta-seo') . '</a>.';
17
  echo $message;
18
  }
19
 
@@ -62,7 +61,7 @@
62
  }
63
  }
64
  } else {
65
- echo '<option value="">' . __("Property not found", 'google-analytics-dashboard-for-wp') . '</option>';
66
  }
67
  ?>
68
  </select>
12
  }
13
 
14
  if (empty($this->google_alanytics['tableid_jail'])) {
15
+ $message = "<div class='error'><p>" . __( 'You have to select a profile: ', 'wp-meta-seo') . '<a href="' . admin_url('admin.php?page=metaseo_google_analytics&view=wpmsga_trackcode') . '">' . __("authorize the plugin", 'wp-meta-seo') . '</a></p></div>';
 
16
  echo $message;
17
  }
18
 
61
  }
62
  }
63
  } else {
64
+ echo '<option value="">' . __('Property not found', 'wp-meta-seo') . '</option>';
65
  }
66
  ?>
67
  </select>
inc/pages/metaseo-image-compression.php CHANGED
@@ -13,7 +13,7 @@ if (isset($_GET['action'])) {
13
  if ('install-plugin' == $action) {
14
 
15
  if (!current_user_can('install_plugins'))
16
- wp_die(__('You do not have sufficient permissions to install plugins on this site.'));
17
 
18
  include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); //for plugins_api..
19
 
@@ -40,11 +40,11 @@ if (isset($_GET['action'])) {
40
  wp_die($api);
41
  }
42
 
43
- $title = __('Plugin Install');
44
  $parent_file = 'plugins.php';
45
  $submenu_file = 'plugin-install.php';
46
 
47
- $title = sprintf(__('Installing Plugin: %s'), $api->name . ' ' . $api->version);
48
  $nonce = 'install-plugin_' . $plugin;
49
  $url = 'update.php?action=install-plugin&plugin=' . urlencode($plugin);
50
  if (isset($_GET['from']))
@@ -56,7 +56,7 @@ if (isset($_GET['action'])) {
56
  $upgrader->install($api->download_link);
57
  }elseif ('activate' == $action) {
58
  if (!current_user_can('activate_plugins'))
59
- wp_die(__('You do not have sufficient permissions to activate plugins for this site.'));
60
 
61
  if (is_multisite() && !is_network_admin() && is_network_only_plugin($plugin)) {
62
  wp_redirect(self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s"));
13
  if ('install-plugin' == $action) {
14
 
15
  if (!current_user_can('install_plugins'))
16
+ wp_die(__('You do not have sufficient permissions to install plugins on this site.', 'wp-meta-seo'));
17
 
18
  include_once( ABSPATH . 'wp-admin/includes/plugin-install.php' ); //for plugins_api..
19
 
40
  wp_die($api);
41
  }
42
 
43
+ $title = __('Plugin Install', 'wp-meta-seo');
44
  $parent_file = 'plugins.php';
45
  $submenu_file = 'plugin-install.php';
46
 
47
+ $title = sprintf(__('Installing Plugin: %s', 'wp-meta-seo'), $api->name . ' ' . $api->version);
48
  $nonce = 'install-plugin_' . $plugin;
49
  $url = 'update.php?action=install-plugin&plugin=' . urlencode($plugin);
50
  if (isset($_GET['from']))
56
  $upgrader->install($api->download_link);
57
  }elseif ('activate' == $action) {
58
  if (!current_user_can('activate_plugins'))
59
+ wp_die(__('You do not have sufficient permissions to activate plugins for this site.', 'wp-meta-seo'));
60
 
61
  if (is_multisite() && !is_network_admin() && is_network_only_plugin($plugin)) {
62
  wp_redirect(self_admin_url("plugins.php?plugin_status=$status&paged=$page&s=$s"));
inc/pages/settings.php CHANGED
@@ -23,6 +23,7 @@ if (is_array($wpms_settings_404)) {
23
  <?php
24
  endif;
25
  ?>
 
26
  </div>
27
  </div>
28
  <div class="wpms_content_settings">
@@ -75,6 +76,10 @@ if (is_array($wpms_settings_404)) {
75
  <span class="message_saved"><?php _e('Saved', 'wp-meta-seo') ?></span>
76
  </div>
77
 
 
 
 
 
78
  <?php
79
  if(is_plugin_active(WPMSEO_ADDON_FILENAME)){
80
  echo $html_tabemail;
23
  <?php
24
  endif;
25
  ?>
26
+ <div class="wpms-tab-header" data-label="wpms-jutranslation"><?php _e('Translation', 'wp-meta-seo') ?></div>
27
  </div>
28
  </div>
29
  <div class="wpms_content_settings">
76
  <span class="message_saved"><?php _e('Saved', 'wp-meta-seo') ?></span>
77
  </div>
78
 
79
+ <div class="content-box content-wpms-jutranslation">
80
+ <?php echo \Joomunited\WPMetaSEO\Jutranslation\Jutranslation::getInput(); ?>
81
+ </div>
82
+
83
  <?php
84
  if(is_plugin_active(WPMSEO_ADDON_FILENAME)){
85
  echo $html_tabemail;
inc/pages/sitemaps/metaseo-google-sitemap.php CHANGED
@@ -25,7 +25,7 @@
25
  }
26
  echo '<div class="div_wpms_save_sitemaps"><input type="button" class="button button-primary wpms_save_create_sitemaps" value="' . __('Regenerate and save sitemaps', 'wp-meta-seo') . '"><span class="spinner spinner_save_sitemaps"></span></div>';
27
  if(is_plugin_active(WPMSEO_ADDON_FILENAME)){
28
- echo '<p class="description">'.__("Sitemap automatic submission to Google Search Console on save, ","wp-meta-seo-addon").'<a href="'.admin_url('admin.php?page=metaseo_console&tab=settings').'">'.__("requires authentication","wp-meta-seo-addon").'</a></p>';
29
  }
30
  ?>
31
  </form>
25
  }
26
  echo '<div class="div_wpms_save_sitemaps"><input type="button" class="button button-primary wpms_save_create_sitemaps" value="' . __('Regenerate and save sitemaps', 'wp-meta-seo') . '"><span class="spinner spinner_save_sitemaps"></span></div>';
27
  if(is_plugin_active(WPMSEO_ADDON_FILENAME)){
28
+ echo '<p class="description">'.__("Sitemap automatic submission to Google Search Console on save, ","wp-meta-seo").'<a href="'.admin_url('admin.php?page=metaseo_console&tab=settings').'">'.__("requires authentication","wp-meta-seo").'</a></p>';
29
  }
30
  ?>
31
  </form>
jutranslation/assets/css/jutranslation.css ADDED
@@ -0,0 +1,348 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ #jutranslation {
2
+ font-family: 'Open Sans', Helvetica, Arial, sans-serif !important;
3
+ }
4
+
5
+ #jutranslation a {
6
+ text-decoration: none;
7
+ }
8
+
9
+ /* START WordPress only
10
+ -----------------------------------------------*/
11
+
12
+ div#jutranslation.wordpress div.control-group table#jutranslations-languages.table.table-striped {
13
+ width: 80%;
14
+ text-align: left;
15
+ }
16
+
17
+ div#jutranslation.wordpress div.control-group table#jutranslations-languages tbody tr td {
18
+ padding: 0 10px;
19
+ }
20
+
21
+ div#jutranslation.wordpress div.control-group.edition table {
22
+ width: 90%;
23
+ }
24
+
25
+ @media only screen and (min-width: 1920px) {
26
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(1) {
27
+ width: 35%;
28
+ }
29
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(2) {
30
+ width: 22%;
31
+ }
32
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(3) {
33
+ width: 22%;
34
+ }
35
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(4) {
36
+ width: 22%;
37
+ }
38
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_reference,
39
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_reference,
40
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_language,
41
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_language,
42
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_filter_override,
43
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_override {
44
+ min-width: 310px;
45
+ }
46
+ }
47
+
48
+ @media only screen and (min-width: 1480px) and (max-width: 1920px) {
49
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(1) {
50
+ width: 25%;
51
+ }
52
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(2) {
53
+ width: 22%;
54
+ }
55
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(3) {
56
+ width: 22%;
57
+ }
58
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(4) {
59
+ width: 22%;
60
+ }
61
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_reference,
62
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_reference,
63
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_language,
64
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_language,
65
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_filter_override,
66
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_override {
67
+ min-width: 250px;
68
+ }
69
+ }
70
+
71
+ @media only screen and (min-width: 1230px) and (max-width: 1480px) {
72
+ div#jutranslation.wordpress div.control-group.edition table {
73
+ width: 100%;
74
+ }
75
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(1) {
76
+ width: 35%;
77
+ }
78
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(2) {
79
+ width: auto;
80
+ }
81
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(3) {
82
+ width: auto;
83
+ }
84
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(4) {
85
+ width: auto;
86
+ }
87
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_reference,
88
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_reference,
89
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_language,
90
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_language,
91
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_filter_override,
92
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_override {
93
+ min-width: 200px;
94
+ }
95
+ }
96
+
97
+ @media only screen and (min-width: 740px) and (max-width: 1230px) {
98
+ div#jutranslation.wordpress div.control-group.edition table {
99
+ width: 100%;
100
+ }
101
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(1) {
102
+ width: 35%;
103
+ }
104
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(2) {
105
+ width: auto;
106
+ }
107
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(3) {
108
+ width: auto;
109
+ }
110
+ #jutranslation.wordpress > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(4) {
111
+ width: auto;
112
+ }
113
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_reference,
114
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_reference,
115
+ div#jutranslation.wordpress tr.do_table_filters td input.do_table_filter_language,
116
+ div#jutranslation.wordpress tr.do_table_line td input.do_table_language,
117
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_filter_override,
118
+ div#jutranslation.wordpress div.control-group.edition td input.do_table_override {
119
+ min-width: 120px;
120
+ }
121
+ }
122
+
123
+
124
+ /* END WordPress only
125
+ -----------------------------------------------*/
126
+
127
+ #jutranslations-languages div.original_content a.jutranslation-override,
128
+ #jutranslations-languages div.original_content span a {
129
+ height: auto;
130
+ width: auto;
131
+ border: none;
132
+ text-shadow: none;
133
+ box-shadow: none;
134
+ background-color: #1d6cb0;
135
+ background: #1d6cb0;
136
+ border-radius: 2px;
137
+ padding: 2px 10px;
138
+ font-size: 12px;
139
+ text-transform: uppercase;
140
+ color: #fff;
141
+ line-height: 35px;
142
+ margin-right: 5px;
143
+ transition: all 0.2s ease-in;
144
+ }
145
+
146
+ #jutranslations-languages div.original_content a.jutranslation-override:hover,
147
+ #jutranslations-languages div.original_content a.jutranslation-override:active,
148
+ #jutranslations-languages div.original_content a.jutranslation-override:focus,
149
+ #jutranslations-languages div.original_content span a:hover,
150
+ #jutranslations-languages div.original_content span a:active,
151
+ #jutranslations-languages div.original_content span a:focus {
152
+ box-shadow: 1px 1px 12px #ccc;
153
+ text-decoration: none;
154
+ }
155
+
156
+ #jutranslations-languages div.original_content a.jutranslation-edition {
157
+ height: auto;
158
+ width: auto;
159
+ border: none;
160
+ text-shadow: none;
161
+ box-shadow: none;
162
+ background-color: #F9A541;
163
+ background: #F9A541;
164
+ border-radius: 2px;
165
+ padding: 2px 10px;
166
+ font-size: 12px;
167
+ text-transform: uppercase;
168
+ color: #fff;
169
+ line-height: 35px;
170
+ margin-right: 5px;
171
+ transition: all 0.2s ease-in;
172
+ }
173
+
174
+ #jutranslations-languages div.original_content a.jutranslation-edition:hover,
175
+ #jutranslations-languages div.original_content a.jutranslation-edition:active,
176
+ #jutranslations-languages div.original_content a.jutranslation-edition:focus {
177
+ box-shadow: 1px 1px 12px #ccc;
178
+ text-decoration: none;
179
+ }
180
+
181
+ #jutranslations-languages div.original_content a.jutranslation-share {
182
+ height: auto;
183
+ width: auto;
184
+ border: none;
185
+ text-shadow: none;
186
+ box-shadow: none;
187
+ background-color: #7AC143;
188
+ background: #7AC143;
189
+ border-radius: 2px;
190
+ padding: 2px 10px;
191
+ font-size: 12px;
192
+ text-transform: uppercase;
193
+ color: #fff;
194
+ line-height: 35px;
195
+ margin-right: 5px;
196
+ transition: all 0.2s ease-in;
197
+ }
198
+
199
+ #jutranslations-languages div.original_content a.jutranslation-share:hover,
200
+ #jutranslations-languages div.original_content a.jutranslation-share:active,
201
+ #jutranslations-languages div.original_content a.jutranslation-share:focus {
202
+ box-shadow: 1px 1px 12px #ccc;
203
+ text-decoration: none;
204
+ }
205
+
206
+ #jutranslations-languages thead tr th {
207
+ font-size: 14px;
208
+ text-transform: uppercase;
209
+ font-weight: bold;
210
+ line-height: 30px;
211
+ border-bottom: 1px solid #eee;
212
+ }
213
+
214
+ #jutranslations-languages tbody tr td.current_version,
215
+ #jutranslations-languages tbody tr td div.original_content {
216
+ font-weight: normal;
217
+ }
218
+
219
+ #jutranslations-languages tbody tr td {
220
+ font-weight: bold;
221
+ }
222
+
223
+ div#jutranslation.wordpress div.control-group p,
224
+ #jutranslation div.control-group div.controls p {
225
+ font-weight: bold;
226
+ text-transform: uppercase;
227
+ padding-left: 8px;
228
+ }
229
+
230
+ #jutranslations-languages tbody tr td {
231
+ vertical-align: middle;
232
+ }
233
+
234
+ #jutranslation .do_table_reference_copy,
235
+ #jutranslation .do_table_language_copy,
236
+ #jutranslation .do_table_override_copy {
237
+ font-size: 15px;
238
+ padding: 2px 2px 2px 5px;
239
+ vertical-align: middle;
240
+ }
241
+
242
+ #jutranslation > div.tab-description.alert.alert-info {
243
+ display: none;
244
+ }
245
+
246
+ #jutranslation .do_table_buttons {}
247
+
248
+ .jutranslation-share.just-added {
249
+ transition: all 1s ease-in;
250
+ color: #2167da;
251
+ font-weight: bold;
252
+ }
253
+
254
+ #jutranslation tr.do_table_heading td {
255
+ font-size: 14px;
256
+ text-transform: uppercase;
257
+ font-weight: bold;
258
+ line-height: 30px;
259
+ border-bottom: 1px solid #eee;
260
+ }
261
+
262
+ #jutranslation tr.do_table_filters {
263
+ height: 80px;
264
+ }
265
+
266
+ #jutranslation div.control-group.edition input {
267
+ border: 1px solid #ccc;
268
+ border-radius: 0;
269
+ box-shadow: none;
270
+ padding: 5px;
271
+ margin: 3px 0;
272
+ }
273
+
274
+ #jutranslation tr.do_table_filters > td:nth-child(1) {
275
+ vertical-align: middle;
276
+ }
277
+
278
+ #jutranslation tr.do_table_filters td input.do_table_filter_empty_reference,
279
+ #jutranslation tr.do_table_filters td input.do_table_filter_empty_language,
280
+ #jutranslation tr.do_table_filters td input.do_table_filter_empty_override {
281
+ margin: 0;
282
+ }
283
+
284
+ #jutranslation div.control-group.edition-message {
285
+ background-color: #2DAEF0;
286
+ padding: 15px;
287
+ color: #fff;
288
+ font-size: 15px;
289
+ }
290
+
291
+ #jutranslation #jutranslation_show_edition,
292
+ #jutranslation #jutranslation_cancel_edition {
293
+ margin: 10px 5px;
294
+ }
295
+
296
+ @media only screen and (min-width: 1680px) {
297
+ #jutranslation > div.control-group.edition > table > tbody > tr.do_table_heading > td:nth-child(1) {
298
+ min-width: 400px;
299
+ }
300
+ }
301
+
302
+ #jutranslation div.control-group.edition table tbody tr td textarea {
303
+ box-shadow: 1px 1px 12px #ccc;
304
+ border: 1px solid #888;
305
+ border-radius: 0;
306
+ transition: all 0.2s ease-in;
307
+ }
308
+
309
+ body > form > div:nth-child(3) > textarea {
310
+ border: 1px solid #ccc;
311
+ border-radius: 0;
312
+ box-shadow: none;
313
+ padding: 5px;
314
+ transition: all 0.2s ease-in;
315
+ }
316
+
317
+ #jutranslation div.control-group.edition tr td a i {
318
+ color: #444;
319
+ }
320
+
321
+ .wordpress .table-striped tbody > tr:nth-child(odd) > td,
322
+ .wordpress .table-striped tbody > tr:nth-child(odd) > th {
323
+ background-color: #f9f9f9;
324
+ }
325
+
326
+ .wordpress .dashicons-arrow-right-alt2 {
327
+ font-size: 15px;
328
+ vertical-align: sub;
329
+ }
330
+
331
+ a.disabled {
332
+ background-color: #c3c2c2 !important;
333
+ color: #333 !important;
334
+ cursor: default;
335
+ position: relative;
336
+ }
337
+
338
+ #jutranslation_toast {
339
+ position: fixed;
340
+ top: 40px;
341
+ right: 20px;
342
+ padding: 14px 15px;
343
+ background-color: #323232;
344
+ color: #FFFFFF;
345
+ font-size: 14px;
346
+ border-radius: 2px;
347
+ z-index: 1000;
348
+ }
jutranslation/assets/images/preview_loader.gif ADDED
Binary file
jutranslation/assets/images/radio.svg ADDED
@@ -0,0 +1 @@
 
1
+ <?xml version="1.0" encoding="utf-8"?><svg width='14px' height='14px' xmlns="http://www.w3.org/2000/svg" viewBox="0 0 100 100" preserveAspectRatio="xMidYMid" class="uil-blank"><rect x="0" y="0" width="100" height="100" fill="none" class="bk"></rect><g transform="scale(0.55)"><circle cx="30" cy="150" r="30" fill="#7b92bd"><animate attributeName="opacity" from="0" to="1" dur="1s" begin="0" repeatCount="indefinite" keyTimes="0;0.5;1" values="0;1;1"></animate></circle><path d="M90,150h30c0-49.7-40.3-90-90-90v30C63.1,90,90,116.9,90,150z" fill="#545f85"><animate attributeName="opacity" from="0" to="1" dur="1s" begin="0.1" repeatCount="indefinite" keyTimes="0;0.5;1" values="0;1;1"></animate></path><path d="M150,150h30C180,67.2,112.8,0,30,0v30C96.3,30,150,83.7,150,150z" fill="#545f85"><animate attributeName="opacity" from="0" to="1" dur="1s" begin="0.2" repeatCount="indefinite" keyTimes="0;0.5;1" values="0;1;1"></animate></path></g></svg>
jutranslation/assets/js/jutranslation.js ADDED
@@ -0,0 +1,815 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ var joomunited_url = 'https://www.joomunited.com/';
2
+
3
+ jQuery(document).ready(function($){
4
+ // Define jutranslation_ajax_action if doesn't exist
5
+ if (typeof jutranslation_ajax_action === 'undefined') {
6
+ jutranslation_ajax_action='';
7
+ }
8
+
9
+ //Load the available version from Joomunited
10
+ $.each(julanguages, function(){
11
+ var julanguage = this;
12
+ $.ajax({
13
+ url : joomunited_url + "index.php?option=com_jutranslation&task=translations.getTranslations",
14
+ type : 'POST',
15
+ data : julanguage,
16
+ success : function(data){
17
+ data = JSON.parse(data);
18
+
19
+ $('#jutranslations-languages tbody tr[data-slug="'+ julanguage.extension + '"]').each(function(){
20
+ var lang = $(this).data('lang');
21
+ var slug = $(this).data('slug');
22
+
23
+ //Is this language one of Joomunited has translated
24
+ var found = false;
25
+
26
+ //For each translation found add the version and an install btn
27
+ $.each(data.data,function(){
28
+ if(this.language === lang && this.extension === slug){
29
+ found = true;
30
+ //Add new version availability information
31
+ var html;
32
+ switch (versionCompare(julanguage.versions[this.language], this.extension_version, julanguage.revisions[this.language], this.revision)) {
33
+ case 1:
34
+ html = 'You already have the newer version<br/>The latest version on Joomunited is ' + this.extension_version + ' rev'+this.revision + ' <a class="jutranslation-install" href="#" data-extension="' + this.extension + '" data-id="' + this.id + '">Install this version</a>';
35
+ break;
36
+ case 0:
37
+ html = 'You already have the latest version <a class="jutranslation-install" href="#" data-extension="' + this.extension + '" data-id="' + this.id + '">Reinstall</a>';
38
+ break;
39
+ case -1:
40
+ if (julanguage.versions[this.language]) {
41
+ install_update = 'Update';
42
+ } else {
43
+ install_update = 'Install';
44
+ }
45
+
46
+ html = 'There is a new version of language file available v' + this.extension_version + ' rev'+this.revision + ' <a class="jutranslation-install" href="#" data-extension="' + this.extension + '" data-id="' + this.id + '">' + install_update + '</a>';
47
+ }
48
+ $('#jutranslations-languages tr[data-lang="'+ this.language + '"][data-slug="'+ julanguage.extension + '"] td .latest_version').html(html);
49
+
50
+ //Initialize all installation button
51
+ $('.jutranslation-install').unbind().bind('click',function(e){
52
+ e.preventDefault();
53
+
54
+ var $clicked_button = $(this);
55
+ var $parent_line = $clicked_button.parents('tr');
56
+ var slug = $clicked_button.parents('tr').data('slug');
57
+
58
+ //Get from Joomunited the translation
59
+ $.ajax({
60
+ url : joomunited_url + "/index.php?option=com_jutranslation&task=translations.download",
61
+ type : 'POST',
62
+ data : {
63
+ extension : $clicked_button.data("extension"),
64
+ translation : $clicked_button.data("id")
65
+ },
66
+ success : function(result){
67
+ result = JSON.parse(result);
68
+
69
+ //Do not show language columns if it's en-US
70
+ var show_reference = true;
71
+ if(result.datas.language==='en-US'){
72
+ show_reference = false;
73
+ }
74
+
75
+ var table_option = {
76
+ language : result.datas.language,
77
+ confirm_button_action : function(e, $_content, close){
78
+ e.preventDefault();
79
+
80
+ var caller = this;
81
+
82
+ //Get the strings
83
+ strings = {};
84
+ var modified = 0;
85
+ $.each($_content.find('.do_table_line'),function(){
86
+ //Get only strings if they need to be translated and have actually been translated
87
+ switch (1===1){
88
+ case $(this).find('.do_table_language').is('[readonly]'):
89
+ strings[$(this).find('.do_table_constant').data('value')] = $(this).find('.do_table_language').val();
90
+ break;
91
+ case $(this).find('.do_table_language').prop('defaultValue') !== $(this).find('.do_table_language').val():
92
+ strings[$(this).find('.do_table_constant').data('value')] = $(this).find('.do_table_language').val();
93
+ modified = 1;
94
+ break;
95
+ }
96
+ });
97
+
98
+ //Initialize ajax request datas
99
+ ajax_data = {
100
+ action : jutranslation_ajax_action,
101
+ slug: slug,
102
+ strings : JSON.stringify(strings),
103
+ language : result.datas.language,
104
+ extension_version : result.datas.version,
105
+ revision : result.datas.revision,
106
+ modified : modified,
107
+ wp_nonce : jutranslation_token
108
+ };
109
+ ajax_data[jutranslation_token] = 1;
110
+
111
+ $.ajax({
112
+ type: 'POST',
113
+ url: jutranslation_base_url + 'task=jutranslation.saveStrings',
114
+ data: ajax_data,
115
+ success: function (result2) {
116
+ result2 = JSON.parse(result2);
117
+ if (result2.status === 'success') {
118
+ //Close the edition
119
+ if(close) {
120
+ caller.cancel_button_action(e);
121
+ }
122
+ toast('Modifications saved');
123
+
124
+ $parent_line.find('.current_version').html(result.datas.version + ' rev' + result.datas.revision);
125
+ $parent_line.attr('data-version', result.datas.version);
126
+
127
+ if(modified){
128
+ $parent_line.find('.jutranslation-share').show().addClass('just-added');
129
+ }else{
130
+ $parent_line.find('.jutranslation-share').hide();
131
+ }
132
+
133
+ $parent_line.find('.latest_version').html('The language file has been updated');
134
+ $parent_line.find('.jutranslation-edition').removeClass('disabled');
135
+ } else {
136
+ alert('Error while updating language file');
137
+ }
138
+ }
139
+ });
140
+ },
141
+ columns : {
142
+ reference : {
143
+ show : show_reference
144
+ },
145
+ language : {
146
+ editable : true,
147
+ title : 'Language ' + result.datas.language,
148
+ allow_copy : false
149
+ },
150
+ override : {
151
+ show : false
152
+ }
153
+ },
154
+ copy_destination : 'do_table_language',
155
+ after_init : function($_content){
156
+ //Do not allow to edit already translated strings
157
+ $_content.find('.do_table_language').filter(function () {
158
+ return this.value.length > 0
159
+ }).attr('readonly','readonly').parents('tr').find('[class^="do_table_copy_"]').hide();
160
+
161
+ //Set an introduction message
162
+ if($_content.find('.do_table_language').not('[readonly="readonly"]').length){
163
+ $_content.prepend('<h3>Some strings are not currently translated to your language, you can translate it now. If you don\'t translate the english translation will be used instead</h3>');
164
+ }
165
+ }
166
+ };
167
+
168
+ //Generate the table
169
+ doTable(result.datas.strings, table_option);
170
+ }
171
+ });
172
+ });
173
+ }
174
+ });
175
+
176
+ //Check if a translation has been found on joomunited
177
+ var $line = $('#jutranslations-languages tr[data-lang="'+ lang + '"][data-slug="'+ julanguage.extension + '"]');
178
+ if(found===false){
179
+ $line.find('td .latest_version').html('No translation found');
180
+ }else{
181
+ if(!$line.attr('data-installed')){
182
+ $line.find('td .jutranslation-edition').addClass('disabled').attr('title','Please install the latest available version first');
183
+ }
184
+ }
185
+ });
186
+ }
187
+ });
188
+ });
189
+ // Edit an installed version
190
+ $('.jutranslation-edition').click(function(e){
191
+ e.preventDefault();
192
+
193
+ var $clicked_button = $(this);
194
+
195
+ // Do nothing is disabled
196
+ if ($clicked_button.hasClass('disabled')) {
197
+ return;
198
+ }
199
+
200
+ var language = $clicked_button.parents('tr').data('lang');
201
+ var slug = $clicked_button.parents('tr').data('slug');
202
+
203
+ getStrings(language, slug, function(datas){
204
+
205
+ var table_option = {
206
+ language : language,
207
+ slug : slug,
208
+ confirm_button_action : function(e, $_content, close){
209
+ e.preventDefault();
210
+
211
+ var caller = this;
212
+
213
+ //Get the strings
214
+ values = {};
215
+ modified = 0;
216
+
217
+ $.each($_content.find('.do_table_line'),function(){
218
+ var value = $(this).find('.do_table_language').val();
219
+ if(value !== ''){
220
+ values[$(this).find('.do_table_constant').data('value')] = value;
221
+ }
222
+
223
+ //Check if something has been modified
224
+ if ($(this).find('.do_table_language').prop('defaultValue') !== $(this).find('.do_table_language').val()) {
225
+ modified = 1;
226
+ }
227
+ });
228
+
229
+ if (modified === 1) {
230
+ //Initialize ajax request datas
231
+ ajax_data = {
232
+ action : jutranslation_ajax_action,
233
+ strings: JSON.stringify(values),
234
+ language: language,
235
+ slug: slug,
236
+ destination: 'edition',
237
+ modified: '1',
238
+ wp_nonce : jutranslation_token
239
+ };
240
+ ajax_data[jutranslation_token] = 1;
241
+
242
+ $.ajax({
243
+ type: 'POST',
244
+ url: jutranslation_base_url + 'task=jutranslation.saveStrings',
245
+ data: ajax_data,
246
+ success: function (result) {
247
+ result = JSON.parse(result);
248
+ if (result.status === 'success') {
249
+ //Close the edition
250
+ if(close) {
251
+ caller.cancel_button_action(e);
252
+ }
253
+ toast('Modifications saved');
254
+
255
+ $clicked_button.parents('tr').find('.jutranslation-share').show().addClass('just-added');
256
+ } else {
257
+ alert('Error while updating language file');
258
+ }
259
+ }
260
+ });
261
+ }else{
262
+ //Do nothing and close the edition
263
+ if(close) {
264
+ caller.cancel_button_action(e);
265
+ }
266
+ toast('Modifications saved');
267
+ }
268
+ },
269
+ columns : {
270
+ language : {
271
+ editable : true,
272
+ title : 'Language ' + language,
273
+ allow_copy : false
274
+ },
275
+ override : {
276
+ show : false
277
+ }
278
+ },
279
+ copy_destination : 'do_table_language',
280
+ after_init : function($_content){
281
+ //Add a message for translators before allowing to do anything
282
+ var message = '<p>This feature is for translators only, the content may be overwritten during the next language update. ' +
283
+ 'If you only want to edit language strings for your own purpose please use the override feature.</p>' +
284
+ '<p><a href="#" id="jutranslation_show_edition" class="btn btn-lg btn-success button button-primary">OK got it, let me translate and share</a>' +
285
+ '<a href="#" id="jutranslation_cancel_edition" class="btn btn-lg btn-success button button-primary">Cancel</a></p>';
286
+
287
+ $_content.hide().after('<div class="control-group edition-message">' + message + '</div>');
288
+
289
+ //Click on ok edit button
290
+ $('#jutranslation_show_edition').click(function(){
291
+ $('#jutranslation .control-group.edition-message').remove();
292
+ $('#jutranslation .control-group.edition').show();
293
+ });
294
+
295
+ //Click on cancel edition button
296
+ $('#jutranslation_cancel_edition').click(function(){
297
+ $('#jutranslation .control-group.edition-message').remove();
298
+ $('#jutranslation .control-group.edition').remove();
299
+ $('#jutranslation .control-group').show();
300
+ });
301
+ }
302
+ };
303
+
304
+ //Generate the table
305
+ doTable(datas, table_option);
306
+ });
307
+ });
308
+
309
+ $('.jutranslation-override').click(function(e){
310
+ e.preventDefault();
311
+
312
+ var $clicked_button = $(this);
313
+
314
+ var language = $clicked_button.parents('tr').data('lang');
315
+ var slug = $clicked_button.parents('tr').data('slug');
316
+
317
+ //Do not show language columns if it's en-US
318
+ var show_language = true;
319
+ if(language==='en-US'){
320
+ show_language = false;
321
+ }
322
+
323
+ getStrings(language, slug, function(datas) {
324
+ var table_option = {
325
+ language : language,
326
+ confirm_button_action : function(e, $_content, close){
327
+ e.preventDefault();
328
+
329
+ var caller = this;
330
+
331
+ //Get the strings
332
+ overrides = {};
333
+ $.each($_content.find('.do_table_line'),function(){
334
+ var value = $(this).find('.do_table_override').val();
335
+ if(value !== ''){
336
+ overrides[$(this).find('.do_table_constant').data('value')] = value;
337
+ }
338
+ });
339
+
340
+ //Initialize ajax request datas
341
+ ajax_data = {
342
+ action : jutranslation_ajax_action,
343
+ strings : JSON.stringify(overrides),
344
+ language : this.language,
345
+ slug: slug,
346
+ destination : 'override',
347
+ wp_nonce : jutranslation_token
348
+ };
349
+ ajax_data[jutranslation_token] = 1;
350
+
351
+ $.ajax({
352
+ type : 'POST',
353
+ url : jutranslation_base_url + 'task=jutranslation.saveStrings',
354
+ data : ajax_data,
355
+ success : function(result){
356
+ result = JSON.parse(result);
357
+ if(result.status === 'success'){
358
+ $clicked_button.parents('tr').find('.jutranslation-override-count').html(Object.keys(overrides).length);
359
+
360
+ if(close) {
361
+ caller.cancel_button_action(e);
362
+ }
363
+ toast('Modifications saved');
364
+ }else{
365
+ alert('Error while updating language file');
366
+ }
367
+ }
368
+ });
369
+ },
370
+ columns : {
371
+ language : {
372
+ title : 'Language ' + language,
373
+ show : show_language
374
+ }
375
+ }
376
+ };
377
+
378
+ //Generate the table
379
+ doTable(datas, table_option);
380
+ });
381
+ });
382
+
383
+ //Share a translation to Joomunited
384
+ $('.jutranslation-share').click(function(e){
385
+ e.preventDefault();
386
+ if(typeof SqueezeBox !== 'undefined' ){
387
+ //Open Joomla lightbox
388
+ SqueezeBox.open(jutranslation_base_url + 'action=&task=jutranslation.showViewForm&language=' + $(this).closest('tr').attr('data-lang'), {handler: 'iframe'});
389
+ }else{
390
+ //Open Wordpress lightbox
391
+ tb_show('Share with Joomunited',jutranslation_base_url + 'action=' + jutranslation_ajax_action + '&task=jutranslation.showViewForm&slug=' + $(this).closest('tr').attr('data-slug') + '&language=' + $(this).closest('tr').attr('data-lang') + '&TB_iframe=true');
392
+ }
393
+ });
394
+
395
+ function doTable(datas, options) {
396
+ // DOM element containing the generated content
397
+ var $_content;
398
+
399
+ var default_options = {
400
+ language : null,
401
+ slug : null,
402
+ confirm_button_label: 'Save and close',
403
+ save_button_label: 'Save',
404
+ cancel_button_label: 'Cancel',
405
+ cancel_button_action: function (e) {
406
+ if(e!==undefined){
407
+ e.preventDefault();
408
+ }
409
+
410
+ $('#jutranslation .control-group.edition').remove();
411
+ $('#jutranslation .control-group').show();
412
+ },
413
+ confirm_button_action : function (e) {
414
+ if(e!==undefined){
415
+ e.preventDefault();
416
+ }
417
+
418
+ options.cancel_button_action(e);
419
+ },
420
+ after_init : function() {},
421
+ columns : {
422
+ constant : {
423
+ show : true,
424
+ title : 'Constant',
425
+ allow_copy : false
426
+ },
427
+ reference : {
428
+ show : true,
429
+ editable : false,
430
+ title : 'Reference en-US',
431
+ allow_copy : true
432
+
433
+ },
434
+ language : {
435
+ show : true,
436
+ editable : false,
437
+ title : 'Language',
438
+ allow_copy : true
439
+ },
440
+ override : {
441
+ show : true,
442
+ editable : true,
443
+ title : 'Override',
444
+ allow_copy : false
445
+ }
446
+ },
447
+ copy_destination : 'do_table_override'
448
+ };
449
+
450
+ // Initialize options variable if not already
451
+ if(options === undefined){
452
+ var options = {};
453
+ }
454
+
455
+ // Merge the default options to the passed ones
456
+ options = $.extend(true, {}, default_options, options);
457
+
458
+ //Add a button to save
459
+ var content = '';
460
+ content += '<p class="do_table_buttons">';
461
+ content += ' <a href="#" class="do_table_confirm btn btn-primary button button-primary">' + options.confirm_button_label + '</a>';
462
+ content += ' <a href="#" class="do_table_save btn btn-primary button button-primary">' + options.save_button_label + '</a>';
463
+ content += ' <a href="#" class="do_table_cancel btn btn-primary button">' + options.cancel_button_label + '</a>';
464
+ content += '</p>';
465
+
466
+ //Create the table of strings
467
+ content += '<table>';
468
+
469
+ //Add columns names
470
+ content += '<tr class="do_table_heading">' +
471
+ ' <td' + ( options.columns.constant.show?'':' class="hidden"' ) + '>' + options.columns.constant.title + '</td>' +
472
+ ' <td' + ( options.columns.reference.show?'':' class="hidden"' ) + '>' + options.columns.reference.title + '</td>' +
473
+ ' <td' + ( options.columns.language.show?'':' class="hidden"' ) + '>' + options.columns.language.title + '</td>' +
474
+ ' <td' + ( options.columns.override.show?'':' class="hidden"' ) + '>' + options.columns.override.title + '</td>' +
475
+ '</tr>';
476
+
477
+ //Add filter inputs
478
+ content += '<tr class="do_table_filters">' +
479
+ ' <td' + ( options.columns.constant.show?'':' class="hidden"' ) + '><input class="do_table_filter_constant" type="text" placeholder="Filter by constant"/></td>' +
480
+ ' <td' + ( options.columns.reference.show?'':' class="hidden"' ) + '><input class="do_table_filter_reference" type="text" placeholder="Filter by reference"/><br/>Show only empty <input type="checkbox" class="do_table_filter_empty_reference"/><br/>Show only not empty <input type="checkbox" class="do_table_filter_not_empty_reference"/></td>' +
481
+ ' <td' + ( options.columns.language.show?'':' class="hidden"' ) + '><input class="do_table_filter_language" type="text" placeholder="Filter by language"/><br/>Show only empty <input type="checkbox" class="do_table_filter_empty_language"/><br/>Show only not empty <input type="checkbox" class="do_table_filter_not_empty_language"/></td>' +
482
+ ' <td' + ( options.columns.override.show?'':' class="hidden"' ) + '><input class="do_table_filter_override" type="text" placeholder="Filter by override"/><br/>Show only empty <input type="checkbox" class="do_table_filter_empty_override"/><br/>Show only not empty <input type="checkbox" class="do_table_filter_not_empty_override"/></td>' +
483
+ '</tr>';
484
+
485
+ $.each(datas, function(key,value){
486
+ content += '' +
487
+ '<tr class="do_table_line">' +
488
+ ' <td' + ( options.columns.constant.show?'':' class="hidden"' ) + '>' +
489
+ ' <span class="do_table_constant" data-value="' + htmlEntities(value.key) + '">' + htmlEntities(value.key) + '</span>' +
490
+ ' </td>' +
491
+ ' <td' + ( options.columns.reference.show?'':' class="hidden"' ) + '>' +
492
+ ' <input type="text" class="do_table_reference" value="' + htmlEntities(value.reference) + '" ' + ( options.columns.reference.editable?'':'readonly="readonly"' ) + ' />' + (options.columns.reference.allow_copy?'<a title="copy" href="#" class="do_table_copy_reference"><i class="icon-arrow-right-4 dashicons dashicons-arrow-right-alt2"></i></a>':'') +
493
+ ' </td>' +
494
+ ' <td' + ( options.columns.language.show?'':' class="hidden"' ) + '>' +
495
+ ' <input type="text" class="do_table_language" value="' + htmlEntities(value.language) + '" ' + ( options.columns.language.editable?'':'readonly="readonly"' ) + ' >' + (options.columns.language.allow_copy?'<a title="copy" href="#" class="do_table_copy_language"><i class="icon-arrow-right-4 dashicons dashicons-arrow-right-alt2"></i></a>':'') +
496
+ ' </td>' +
497
+ ' <td' + ( options.columns.override.show?'':' class="hidden"' ) + '>' +
498
+ ' <input type="text" class="do_table_override" value="' + htmlEntities(value.override) + '" ' + ( options.columns.override.editable?'':'readonly="readonly"' ) + ' >' + (options.columns.override.allow_copy?'<a title="copy" href="#" class="do_table_copy_override"><i class="icon-arrow-right-4 dashicons dashicons-arrow-right-alt2"></i></a>':'') +
499
+ ' </td>' +
500
+ '</tr>';
501
+ });
502
+ content += '</table>';
503
+
504
+ $('#jutranslation .control-group').after('<div class="control-group edition">' + content + '</div>');
505
+ $_content = $('#jutranslation .control-group.edition');
506
+
507
+ // Enable filtering
508
+ $_content.find('[class^="do_table_filter_"]').on("change keyup paste", function(){
509
+ //Texts filters
510
+ var filter_constant = $_content.find('.do_table_filter_constant').val();
511
+ var filter_reference = $_content.find('.do_table_filter_reference').val();
512
+ var filter_language = $_content.find('.do_table_filter_language').val();
513
+ var filter_override = $_content.find('.do_table_filter_override').val();
514
+
515
+ // Do not allow to check both filters
516
+ switch (1==1) {
517
+ case $(this).hasClass('do_table_filter_empty_reference') && $(this).is(':checked'):
518
+ $_content.find('.do_table_filter_not_empty_reference').attr('checked',null);
519
+ break;
520
+ case $(this).hasClass('do_table_filter_empty_language') && $(this).is(':checked'):
521
+ $_content.find('.do_table_filter_not_empty_language').attr('checked',null);
522
+ break;
523
+ case $(this).hasClass('do_table_filter_empty_override') && $(this).is(':checked'):
524
+ $_content.find('.do_table_filter_not_empty_override').attr('checked',null);
525
+ break;
526
+ case $(this).hasClass('do_table_filter_not_empty_reference') && $(this).is(':checked'):
527
+ $_content.find('.do_table_filter_empty_reference').attr('checked',null);
528
+ break;
529
+ case $(this).hasClass('do_table_filter_not_empty_language') && $(this).is(':checked'):
530
+ $_content.find('.do_table_filter_empty_language').attr('checked',null);
531
+ break;
532
+ case $(this).hasClass('do_table_filter_not_empty_override') && $(this).is(':checked'):
533
+ $_content.find('.do_table_filter_empty_override').attr('checked',null);
534
+ break;
535
+
536
+ }
537
+ if($(this).is('[class^="do_table_filter_empty"]')){
538
+
539
+ } else if ($(this).is('[class^="do_table_filter_not_empty"]')) {
540
+
541
+ }
542
+ $_content.find('.do_table_filter_not_empty_reference')
543
+
544
+ //Empty filters
545
+ var filter_empty_reference = $_content.find('.do_table_filter_empty_reference').is(":checked");
546
+ var filter_empty_language = $_content.find('.do_table_filter_empty_language').is(":checked");
547
+ var filter_empty_override = $_content.find('.do_table_filter_empty_override').is(":checked");
548
+
549
+ var filter_not_empty_reference = $_content.find('.do_table_filter_not_empty_reference').is(":checked");
550
+ var filter_not_empty_language = $_content.find('.do_table_filter_not_empty_language').is(":checked");
551
+ var filter_not_empty_override = $_content.find('.do_table_filter_not_empty_override').is(":checked");
552
+
553
+ // Show all rows
554
+ $_content.find('tr.do_table_line').show();
555
+
556
+ // Filtering is active
557
+ if(filter_constant !== '' || filter_reference !== '' || filter_language !== '' || filter_override != '' || filter_empty_reference!==false || filter_empty_language !== false || filter_empty_override !== false || filter_not_empty_reference!==false || filter_not_empty_language !== false || filter_not_empty_override !== false){
558
+ // Show only rows matching search
559
+ $_content.find('.do_table_line').filter(function(){
560
+ //Filter by empty reference
561
+ if(filter_empty_reference && $(this).find('.do_table_reference').val() !== ''){
562
+ return true;
563
+ }
564
+
565
+ //Filter by empty language
566
+ if(filter_empty_language && $(this).find('.do_table_language').val() !== ''){
567
+ return true;
568
+ }
569
+
570
+ //Filter by empty override
571
+ if(filter_empty_override && $(this).find('.do_table_override').val() !== ''){
572
+ return true;
573
+ }
574
+
575
+ //Filter by not empty reference
576
+ if(filter_not_empty_reference && $(this).find('.do_table_reference').val() === ''){
577
+ return true;
578
+ }
579
+
580
+ //Filter by empty language
581
+ if(filter_not_empty_language && $(this).find('.do_table_language').val() === ''){
582
+ return true;
583
+ }
584
+
585
+ //Filter by empty override
586
+ if(filter_not_empty_override && $(this).find('.do_table_override').val() === ''){
587
+ return true;
588
+ }
589
+
590
+ //Filter by constant
591
+ if(filter_constant !== ''){
592
+ var regex = new RegExp(escapeRegExp(filter_constant), 'i');
593
+ if(!regex.test($(this).find('.do_table_constant').data('value'))){
594
+ return true;
595
+ }
596
+ }
597
+
598
+ //Filter by reference
599
+ if(filter_reference !== ''){
600
+ var regex = new RegExp(escapeRegExp(filter_reference), 'i');
601
+ if(!regex.test($(this).find('.do_table_reference').val())){
602
+ return true;
603
+ }
604
+ }
605
+
606
+ //Filter by current language
607
+ if(filter_language !== ''){
608
+ var regex = new RegExp(escapeRegExp(filter_language), 'i');
609
+ if(!regex.test($(this).find('.do_table_language').val())){
610
+ return true;
611
+ }
612
+ }
613
+
614
+ //Filter by override
615
+ if(filter_override !== ''){
616
+ var regex = new RegExp(escapeRegExp(filter_override), 'i');
617
+ if(!regex.test($(this).find('.do_table_override').val())){
618
+ return true;
619
+ }
620
+ }
621
+
622
+ return false;
623
+ }).hide();
624
+ return;
625
+ }
626
+ });
627
+
628
+ // Enable copy from one input to another
629
+ $_content.find('[class^="do_table_copy_"]').click(function(e){
630
+ e.preventDefault();
631
+
632
+ //Get the value from clicked element
633
+ if($(this).hasClass('do_table_copy_reference')){
634
+ var value = $(this).parents('tr').find('.do_table_reference').val();
635
+ }else if($(this).hasClass('do_table_copy_language')){
636
+ var value = $(this).parents('tr').find('.do_table_language').val();
637
+ }else if($(this).hasClass('do_table_copy_override')){
638
+ var value = $(this).parents('tr').find('.do_table_override').val();
639
+ }
640
+
641
+ //Copy value to destination input
642
+ $(this).parents('tr').find('.'+options.copy_destination).val(value);
643
+ });
644
+
645
+ //Save and close
646
+ $_content.find('.do_table_confirm').click(function(e){
647
+ options.confirm_button_action(e, $_content, true);
648
+ });
649
+
650
+ //Confirm the current action
651
+ $_content.find('.do_table_save').click(function(e){
652
+ options.confirm_button_action(e, $_content, false);
653
+ });
654
+
655
+ //Cancel the current action
656
+ $_content.find('.do_table_cancel').click(function(e, $_content){
657
+ options.cancel_button_action(e);
658
+ });
659
+
660
+ $('#jutranslation .control-group').not('.edition').hide();
661
+
662
+ $_content.find('.do_table_line input').focus(function(){
663
+ $this = $(this);
664
+ $this_line = $this.parents('tr');
665
+
666
+ //Do nothing if already hidden
667
+ if($(this).is(":hidden")){
668
+ return;
669
+ }
670
+
671
+ //Remove all old textarea
672
+ $this_line.find('textarea').remove();
673
+
674
+ $this_line.find('input').each(function(){
675
+ // Get the input value
676
+ var val = $(this).val();
677
+
678
+ // Add a textarea after the inpu
679
+ $('<textarea style="width:' + $(this).css('width') + '" ' + ($(this).is('[readonly="readonly"]')?'readonly="readonly"':'') + '>' + htmlEntities(val) + '</textarea>').insertAfter(this);
680
+
681
+ // Hide the input
682
+ $(this).hide();
683
+ });
684
+
685
+ // Remove textarea on focus out
686
+ $this.siblings('textarea').focus().focusout(function(){
687
+ $this.val(($(this).val()));
688
+ $this_line.find('input').show();
689
+ $this_line.find('textarea').hide(); //Hide instead of remove to avoid html5fallback.js error
690
+ });
691
+ });
692
+
693
+ options.after_init($_content);
694
+ }
695
+
696
+ function getStrings(language, slug, done_function) {
697
+ var strings = {};
698
+ $.ajax({
699
+ type: 'POST',
700
+ url: jutranslation_base_url + 'task=jutranslation.getTranslation',
701
+ data: {
702
+ action : jutranslation_ajax_action,
703
+ language: language,
704
+ slug: slug
705
+ },
706
+ success: function (result) {
707
+ result = JSON.parse(result);
708
+
709
+ if (result.status === 'success') {
710
+ done_function(result.datas.strings);
711
+ } else {
712
+ alert('Error while loading strings');
713
+ }
714
+ }
715
+ });
716
+ }
717
+
718
+ /**
719
+ * Escape a string to allow using it literally in a regex
720
+ * @param string
721
+ * @return string escaped
722
+ */
723
+ function escapeRegExp(string) {
724
+ return string.replace(/[\-\[\]\/\{\}\(\)\*\+\?\.\\\^\$\|]/g, "\\$&");
725
+ }
726
+
727
+ /**
728
+ * Secure a string to use it in html content
729
+ * @param string to espace
730
+ * @return {string} escaped string
731
+ */
732
+ function htmlEntities(string){
733
+ return String(string).replace(/&/g, '&amp;').replace(/</g, '&lt;').replace(/>/g, '&gt;').replace(/"/g, '&quot;');
734
+ }
735
+
736
+ /**
737
+ * Compare two version numbers and their revisions
738
+ * @param version1
739
+ * @param version2
740
+ * @param revision_version1
741
+ * @param revision_version2
742
+ * @return 1 if version1>version2, -1 if version1<version2 , 0 if version1==version2
743
+ */
744
+ function versionCompare(version1, version2, revision_version1, revision_version2){
745
+ if(version1==='') {
746
+ version1 = '0';
747
+ }
748
+
749
+ if(version2==='') {
750
+ version2 = '0';
751
+ }
752
+
753
+ version1 = version1.split('.');
754
+ version2 = version2.split('.');
755
+
756
+ if(typeof revision_version1 === 'undefined'){
757
+ revision_version1 = 0;
758
+ }
759
+
760
+ if(typeof revision_version2 === 'undefined'){
761
+ revision_version2 = 0;
762
+ }
763
+
764
+ for(var ij=0; ij < version1.length; ij++ ) {
765
+ if(typeof version2[ij] === 'undefined'){
766
+ //Version 1 has the longest version
767
+ for(var ik=ij; ik < version1.length; ik++){
768
+ //Check if it has another thing as 0 trailing
769
+ if(parseInt(version[1]) > 0){
770
+ //Latest version is upper
771
+ return 1;
772
+ }
773
+ }
774
+ //End only with 0 version numbers, it's equal
775
+ if(revision_version1 > revision_version2){
776
+ return 1;
777
+ } else if(revision_version1 < revision_version2){
778
+ return -1;
779
+ }
780
+ return 0;
781
+ } else {
782
+ if(parseInt(version1[ij]) > parseInt(version2[ij])) {
783
+ return 1;
784
+ } else if(parseInt(version1[ij]) < parseInt(version2[ij])) {
785
+ return -1;
786
+ }
787
+ }
788
+ }
789
+
790
+ //Version 2 has the longest version or is equal
791
+ for(var ik=ij; ik < version2.length; ik++){
792
+ //Check if it has another thing as 0 trailing
793
+ if(parseInt(version2[ik]) > 0){
794
+ //Latest version is upper
795
+ return -1;
796
+ }
797
+ }
798
+
799
+ //End only with 0 version numbers, it's equal
800
+ if(revision_version1 > revision_version2){
801
+ return 1;
802
+ } else if(revision_version1 < revision_version2){
803
+ return -1;
804
+ }
805
+ return 0;
806
+ }
807
+
808
+ function toast(text) {
809
+ $('#jutranslation_toast').remove();
810
+ $('body').append('<div id="jutranslation_toast">' + text + '</div>');
811
+ setTimeout(function() {
812
+ $('#jutranslation_toast').remove();
813
+ }, 2000);
814
+ }
815
+ });
jutranslation/jutranslation.php ADDED
@@ -0,0 +1,609 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ <?php
2
+ namespace Joomunited\WPMetaSEO\Jutranslation;
3
+
4
+ /**
5
+ * Class Jutranslation
6
+ * @package Joomunited\WPMetaSEO\Jutranslation
7
+ */
8
+ class Jutranslation {
9
+ public static $extension_slug;
10
+ public static $extension_name;
11
+ public static $text_domain;
12
+ public static $language_file;
13
+
14
+ public static $main_plugin_file;
15
+
16
+ /**
17
+ * Initialize Jutranslation
18
+ * @param $main_plugin_file
19
+ * @param $extension_slug
20
+ * @param $extension_name
21
+ * @param $text_domain
22
+ * @param $language_file
23
+ */
24
+ public static function init($main_plugin_file, $extension_slug, $extension_name, $text_domain, $language_file){
25
+ Jutranslation::$main_plugin_file = $main_plugin_file;
26
+ Jutranslation::$extension_slug = $extension_slug;
27
+ Jutranslation::$extension_name = $extension_name;
28
+ Jutranslation::$text_domain = $text_domain;
29
+ Jutranslation::$language_file = plugin_dir_path( Jutranslation::$main_plugin_file ) . $language_file;
30
+
31
+ //Load override file
32
+ add_action( 'load_textdomain', array(__CLASS__, 'overrideLanguage'), 1, 2);
33
+
34
+ add_filter(Jutranslation::$extension_slug . '_get_addons', function ($addons) {
35
+ $addon = new \StdClass();
36
+ $addon->main_plugin_file = Jutranslation::$main_plugin_file;
37
+ $addon->extension_name = Jutranslation::$extension_name;
38
+ $addon->extension_slug = Jutranslation::$extension_slug;
39
+ $addon->text_domain = Jutranslation::$text_domain;
40
+ $addon->language_file = Jutranslation::$language_file;
41
+ $addons[$addon->extension_slug] = $addon;
42
+ return $addons;
43
+ });
44
+
45
+ //Only need Jutranslation on admin side
46
+ if(!is_admin()){
47
+ return;
48
+ }
49
+
50
+ // Check if the current user
51
+ add_action('admin_init', function(){
52
+ if(current_user_can('manage_options')) {
53
+ //Initialize needed ajax mehtods
54
+ add_action( 'wp_ajax_jutranslation_'.Jutranslation::$extension_slug, array(__CLASS__, 'dispatchQuery') );
55
+ }
56
+ });
57
+ }
58
+
59
+ /**
60
+ * Ajax queries dispatcher
61
+ */
62
+ public static function dispatchQuery() {
63
+ if(!isset($_REQUEST['task'])) {
64
+ die;
65
+ }
66
+
67
+ switch ($_REQUEST['task']) {
68
+ case 'jutranslation.saveStrings':
69
+ Jutranslation::saveStrings();
70
+ break;
71
+ case 'jutranslation.getTranslation':
72
+ Jutranslation::getTranslation();
73
+ break;
74
+ case 'jutranslation.showViewForm':
75
+ Jutranslation::showViewForm();
76
+ break;
77
+ }
78
+ }
79
+
80
+ /**
81
+ * Return the main html content for jutranslation
82
+ * @return void
83
+ */
84
+ public static function getInput(){
85
+ echo '<div id="jutranslation" class="wordpress">';
86
+ echo '<div class="control-group">';
87
+
88
+ //Declare all js and css to include
89
+ $jsInline = array(
90
+ 'jutranslation_token="'.wp_create_nonce( 'jutranslation' ).'";',
91
+ 'jutranslation_ajax_action="jutranslation_'.Jutranslation::$extension_slug.'";',
92
+ 'jutranslation_base_url=ajaxurl+"?";'
93
+ );
94
+ echo '<script type="text/javascript">'.implode(PHP_EOL,$jsInline).'</script>';
95
+ wp_enqueue_script('jutranslation', plugin_dir_url( Jutranslation::$main_plugin_file ) . 'jutranslation/assets/js/jutranslation.js');
96
+ wp_enqueue_style('jutranslation', plugin_dir_url( Jutranslation::$main_plugin_file ) . 'jutranslation/assets/css/jutranslation.css');
97
+
98
+ add_thickbox();
99
+
100
+
101
+ //Get all installed languages
102
+ $installed_languages = array();
103
+ foreach ( wp_get_installed_translations('core') as $type) {
104
+ foreach ( $type as $lang => $value ) {
105
+ $lang = str_replace('_', '-', $lang);
106
+ $installed_languages[] = $lang;
107
+ }
108
+ }
109
+
110
+ //Add Polylang languages
111
+ if(function_exists('pll_languages_list')){
112
+ foreach ( pll_languages_list(array('fields'=>'locale')) as $pll_language) {
113
+ $lang = str_replace('_', '-', $pll_language);
114
+ $installed_languages[] = $lang;
115
+ }
116
+ }
117
+
118
+ //Add WPML languages
119
+ if(!function_exists('pll_languages_list') && function_exists('icl_get_languages')){
120
+ foreach ( icl_get_languages() as $wpml_language) {
121
+ $lang = str_replace('_', '-', $wpml_language['default_locale']);
122
+ $installed_languages[] = $lang;
123
+ }
124
+ }
125
+
126
+ //Add default en-US language
127
+ if(!isset($installed_languages['en-US'])){
128
+ $installed_languages = array_merge(array('en-US'), $installed_languages);
129
+ }
130
+
131
+ $installed_languages = array_unique($installed_languages);
132
+
133
+ //Get addons
134
+ $addons = apply_filters(Jutranslation::$extension_slug.'_get_addons', array());
135
+ ksort($addons);
136
+
137
+ $languages = array();
138
+ foreach ($installed_languages as $installed_language) {
139
+ foreach ($addons as $addon) {
140
+ $langObject = new \stdClass();
141
+ $langObject->extension = $addon;
142
+ $langObject->installed = false;
143
+ $langObject->extension_version = '';
144
+ $langObject->language_version = '';
145
+ $langObject->revision = '1';
146
+ $langObject->languageCode = $installed_language;
147
+ $langObject->modified = '0';
148
+
149
+ $languages[] = $langObject;
150
+ }
151
+ }
152
+
153
+ //Check if language is installed
154
+ foreach ($languages as &$language) {
155
+ if (str_replace('-', '_', $language->languageCode) === 'en_US') {
156
+ $file = $language->extension->language_file;
157
+ } else {
158
+ $file = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $language->extension->text_domain . '-' . str_replace('-', '_', $language->languageCode) . '.mo';
159
+ }
160
+
161
+ if (file_exists($file)) {
162
+ $language->installed = true;
163
+
164
+ // Load language file
165
+ $mo = new \MO();
166
+ $mo->import_from_file($file);
167
+
168
+ //Assign it to the language
169
+ if (isset($mo->headers['Version'])) {
170
+ $language->language_version = $mo->headers['Version'];
171
+ }
172
+ if (isset($mo->headers['Revision'])) {
173
+ $language->revision = $mo->headers['Revision'];
174
+ }
175
+ if (isset($mo->headers['Modified'])) {
176
+ $language->modified = $mo->headers['Modified'];
177
+ } else {
178
+ //The header has not been found, so the language file has not been add by jutranslation
179
+ $language->modified = '1';
180
+ }
181
+ }
182
+
183
+ //Check for language override
184
+ $language->overrided = 0;
185
+ $file = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $language->extension->text_domain . '-' . str_replace('-', '_', $language->languageCode) . '.override.mo';;
186
+ if (file_exists($file)) {
187
+ // Load language file
188
+ $mo = new \MO();
189
+ $mo->import_from_file($file);
190
+
191
+ $language->overrided = 0;
192
+
193
+ //Check if a translation exists for each entry
194
+ foreach ($mo->entries as $entry) {
195
+ if (count($entry->translations[0])) {
196
+ $language->overrided++;
197
+ }
198
+ }
199
+ }
200
+ }
201
+ unset($language);
202
+
203
+ //Show documentation link
204
+ echo '<p>You can refer to the <a href="https://www.joomunited.com/documentation/ju-translation-translate-wordpress-and-joomla-extensions" target="_blank">documentation page on Joomunited</a> for more informations about extension translation</p>';
205
+
206
+ echo '<p>';
207
+ foreach ($addons as $addon) {
208
+ //Get extension version
209
+ $plugin_data = get_plugin_data( $addon->main_plugin_file );
210
+ $extension_version = $plugin_data['Version'];
211
+
212
+ echo 'Current ' . $addon->extension_name . ' version is ' . $extension_version . '<br/>';
213
+ }
214
+ echo '</p>';
215
+
216
+ $julanguages = array();
217
+
218
+ echo '<table id="jutranslations-languages" class="table table-striped" >
219
+ <thead >
220
+ <tr>
221
+ <th ' . (count($addons)>1?'':'style="display:none;"') . '>Plugin</th>
222
+ <th>Language</th>
223
+ <th>Current version</th>
224
+ <th>Latest available version</th>
225
+ </tr>
226
+ </thead>
227
+ <tbody>';
228
+
229
+ foreach ($languages as $language) {
230
+ echo '<tr data-slug="' . $language->extension->extension_slug. '" data-lang="' . $language->languageCode . '" data-installed="' . $language->installed . '" data-version="' . $language->extension_version . '">';
231
+ echo '<td ' . (count($addons)>1?'':'style="display:none;"') . '>' . $language->extension->extension_name . '</td>';
232
+ echo '<td>' . $language->languageCode . '</td>';
233
+ echo '<td class="current_version">' . ($language->installed?($language->language_version?($language->revision?$language->language_version.' rev'.$language->revision:$language->language_version.' rev'.$language->revision):'Unknown'):'Not installed') . '</td>';
234
+ echo '<td><div class="original_content">';
235
+ echo '<span class="latest_version"><img src="' . plugin_dir_url( Jutranslation::$main_plugin_file ) . 'jutranslation/assets/images/radio.svg" alt="loading"/></span><br/>';
236
+
237
+ echo '<a class="jutranslation-override" href="#" data-language="' . $language->languageCode .'">Override (<span class="jutranslation-override-count">' . $language->overrided . '</span>)</a> ';
238
+ if($language->languageCode !== 'en-US'){
239
+ //Reference en-US file can't be modified
240
+ echo '<a class="jutranslation-edition" href="#" data-language="' . $language->languageCode .'">Edit original file</a>';
241
+ }
242
+
243
+ //No sharing for en-US
244
+ if($language->languageCode!=='en-US'){
245
+ echo ' <a class="jutranslation-share" style="' . (($language->modified==='0')?'display:none':'') . '" href="#" data-language="' . $language->languageCode .'">Share with Joomunited</a>';
246
+ }
247
+ echo '</div><div class="temporary_content"></div></td>';
248
+ echo '</tr>';
249
+
250
+ if (!isset($julanguages[$language->extension->extension_slug])) {
251
+ $plugin_data = get_plugin_data($language->extension->main_plugin_file);
252
+
253
+ $julanguages[$language->extension->extension_slug] = array();
254
+ $julanguages[$language->extension->extension_slug]['extension'] = $language->extension->extension_slug;
255
+ $julanguages[$language->extension->extension_slug]['extension_version'] = $plugin_data['Version'];
256
+ $julanguages[$language->extension->extension_slug]['language_version'] = $language->language_version;
257
+ $julanguages[$language->extension->extension_slug]['languages'] = array();
258
+ $julanguages[$language->extension->extension_slug]['versions'] = array();
259
+ $julanguages[$language->extension->extension_slug]['revisions'] = array();
260
+ }
261
+ $julanguages[$language->extension->extension_slug]['languages'][] = $language->languageCode;
262
+ $julanguages[$language->extension->extension_slug]['versions'][$language->languageCode] = $language->language_version;
263
+ $julanguages[$language->extension->extension_slug]['revisions'][$language->languageCode] = $language->revision;
264
+
265
+ }
266
+ echo '</tbody>
267
+ </table>';
268
+
269
+ echo '<script type="text/javascript">julanguages = ' . json_encode($julanguages) . ';</script>';
270
+ echo '</div></div>';
271
+ }
272
+
273
+ /**
274
+ * Save a post translation for a given language
275
+ */
276
+ protected static function saveStrings(){
277
+
278
+ //Security check
279
+ if(!wp_verify_nonce( $_REQUEST['wp_nonce'], 'jutranslation' )){
280
+ echo json_encode(array('status'=>'error','message'=>'nonce error'));
281
+ die();
282
+ }
283
+
284
+ //Get and check language
285
+ $language = $_POST['language'];
286
+ if(!$language){
287
+ echo json_encode(array('status'=>'error','message'=>'language empty'));
288
+ die();
289
+ }
290
+ if(!preg_match('/^[a-z]{2,3}(?:-[a-zA-Z]{4})?(?:-[A-Z]{2,3})?$/',$language)){
291
+ echo json_encode(array('status'=>'error','message'=>'invalid language code'));
292
+ die();
293
+ }
294
+
295
+ $plugin = $_POST['slug'];
296
+ if(!$plugin){
297
+ echo json_encode(array('status'=>'error','message'=>'plugin empty'));
298
+ die();
299
+ }
300
+ if(!preg_match('/^[a-zA-Z-_]+$/',$plugin)){
301
+ echo json_encode(array('status'=>'error','message'=>'invalid plugin slug'));
302
+ die();
303
+ }
304
+
305
+ $addons = apply_filters(Jutranslation::$extension_slug.'_get_addons', array());
306
+ if (!isset($addons[$plugin])) {
307
+ echo json_encode(array('status'=>'error','message'=>'plugin not found'));
308
+ die();
309
+ }
310
+
311
+ //Get the file to write to
312
+ $destination = $_POST['destination'];
313
+ $file = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $addons[$plugin]->text_domain . '-' . str_replace('-', '_', $language) ;
314
+ switch ($destination){
315
+ case 'override':
316
+ $file .= '.override.mo';
317
+ break;
318
+ case 'edition':
319
+ //Disallow editing main en-US file
320
+ if($language === 'en-US'){
321
+ echo json_encode(array('status'=>'error','message'=>'editing main reference file not allowed'));
322
+ die();
323
+ }
324
+
325
+ $file .= '.mo';
326
+
327
+ //Get informations about previous installed file
328
+ // Load language file
329
+ $mo = new \MO();
330
+ $mo->import_from_file( $file );
331
+
332
+ //Get the file version
333
+ if(isset($mo->headers['Version']) && $mo->headers['Version']){
334
+ $extension_version = $mo->headers['Version'];
335
+ }else{
336
+ //Use the current extension version
337
+ $plugin_data = get_plugin_data($addons[$plugin]->main_plugin_file);
338
+ $extension_version = $plugin_data['Version'];
339
+ }
340
+
341
+ //Get the file revision
342
+ if(isset($mo->headers['Revision'])){
343
+ $revision = $mo->headers['Revision'];
344
+ }else{
345
+ //Use the current extension version
346
+ $revision = (int)$_POST['revision'];
347
+ }
348
+ break;
349
+ default: //Case new language version installation from Joomunited
350
+ //Get the version
351
+ $extension_version = $_POST['extension_version'];
352
+ if(!$extension_version){
353
+ echo json_encode(array('status'=>'error','message'=>'version empty'));
354
+ die();
355
+ }
356
+
357
+ //Get revision
358
+ $revision = (int)$_POST['revision'];
359
+
360
+ $file .= '.mo';
361
+ break;
362
+ }
363
+
364
+ //Check version number
365
+ if($destination!=='override' && !preg_match('/^([0-9]+)\.([0-9]+)(\.([0-9]+))?(\.([0-9]+))?$/',$extension_version)){
366
+ echo json_encode(array('status'=>'error','message'=>'invalid version number'));
367
+ die();
368
+ }
369
+
370
+ $modified = $_POST['modified'];
371
+
372
+ //Get strings and remove slashes auto added by WP
373
+ $strings = stripslashes($_POST['strings']);
374
+
375
+ //Check if strings is a valid array
376
+ $strings = json_decode($strings);
377
+ if($strings === false || !is_object($strings) || !count((array)$strings)){
378
+ $strings = new \StdClass();
379
+ }
380
+
381
+ // Load translation class
382
+ $mo = new \MO();
383
+
384
+ //Generate the file header
385
+ if($destination !== 'override'){
386
+ $mo->headers['Version'] = $extension_version;
387
+ $mo->headers['Revision'] = $revision;
388
+ $mo->headers['Modified'] = (int)$modified;
389
+ }
390
+
391
+ foreach ($strings as $code => $string) {
392
+ //Only save reference language empty strings
393
+ if($string !== '' || $language === 'en-US') {
394
+ $entry = &$mo->make_entry($code, $string);
395
+ $mo->entries[$code] = &$entry;
396
+ }
397
+ }
398
+
399
+ //Create parents folders of language file
400
+ wp_mkdir_p(dirname($file));
401
+
402
+ //Write the language file
403
+ if($mo->export_to_file($file)){
404
+ echo json_encode(array('status'=>'success','message'=>'file created'));
405
+ die();
406
+ }
407
+
408
+ echo json_encode(array('status'=>'error','message'=>'writing file failed'));
409
+ die();
410
+ }
411
+
412
+ protected static function getTranslation(){
413
+ //Get and check language
414
+ $language =$_POST['language'];
415
+ if(!$language){
416
+ echo json_encode(array('status'=>'error','message'=>'language empty'));
417
+ die();
418
+ }
419
+ if(!preg_match('/^[a-z]{2,3}(?:-[a-zA-Z]{4})?(?:-[A-Z]{2,3})?$/',$language)){
420
+ echo json_encode(array('status'=>'error','message'=>'invalid language code'));
421
+ die();
422
+ }
423
+
424
+ $plugin = $_POST['slug'];
425
+ if(!$plugin){
426
+ echo json_encode(array('status'=>'error','message'=>'plugin empty'));
427
+ die();
428
+ }
429
+ if(!preg_match('/^[a-zA-Z-_]+$/',$plugin)){
430
+ echo json_encode(array('status'=>'error','message'=>'invalid plugin slug'));
431
+ die();
432
+ }
433
+
434
+ $addons = apply_filters(Jutranslation::$extension_slug.'_get_addons', array());
435
+ if (!isset($addons[$plugin])) {
436
+ echo json_encode(array('status'=>'error','message'=>'plugin not found'));
437
+ die();
438
+ }
439
+
440
+ //Get the language file for reference language en-US
441
+ $file = $addons[$plugin]->language_file;
442
+ $mo = new \MO();
443
+ $mo->import_from_file( $file );
444
+
445
+ //Retrieve reference the strings
446
+ $reference_strings = array();
447
+ foreach($mo->entries as $entry) {
448
+ $reference_strings[$entry->singular] = $entry->translations[0];
449
+ }
450
+
451
+ //Get the default language file for this language
452
+ $file = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $addons[$plugin]->text_domain . '-' . str_replace('-', '_', $language) . '.mo';
453
+ $mo = new \MO();
454
+ $mo->import_from_file( $file );
455
+
456
+ //Retrieve default strings
457
+ $language_strings = array();
458
+ foreach($mo->entries as $entry) {
459
+ $language_strings[$entry->singular] = $entry->translations[0];
460
+ }
461
+
462
+ //Get the override file content if exists
463
+ $file = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $addons[$plugin]->text_domain . '-' . str_replace('-', '_', $language) . '.override.mo';
464
+ if(file_exists($file)){
465
+ $mo = new \MO();
466
+ $mo->import_from_file( $file );
467
+
468
+ //Retrieve override strings
469
+ $override_strings = array();
470
+ foreach($mo->entries as $entry) {
471
+ $override_strings[$entry->singular] = $entry->translations[0];
472
+ }
473
+ }else{
474
+ $override_strings = array();
475
+ }
476
+
477
+ //Generate the final variable cotaining all strings
478
+ $final_result = array();
479
+ foreach (array('reference_strings' => $reference_strings, 'language_strings' => $language_strings, 'override_strings' => $override_strings) as $variable => $strings) {
480
+ foreach ($strings as $constant => $value) {
481
+ if(empty($final_result[$constant])) {
482
+ $obj = new \stdClass();
483
+ $obj->key = $constant;
484
+ $obj->reference = '';
485
+ $obj->language = '';
486
+ $obj->override = '';
487
+ $final_result[$constant] = $obj;
488
+ }
489
+ switch ($variable) {
490
+ case 'reference_strings' :
491
+ $final_result[$constant]->reference = $value;
492
+ break;
493
+ case 'language_strings' :
494
+ $final_result[$constant]->language = $value;
495
+ break;
496
+ case 'override_strings' :
497
+ $final_result[$constant]->override = $value;
498
+ break;
499
+ }
500
+ }
501
+ }
502
+
503
+ echo json_encode(array('status'=>'success','datas'=> array('language'=> $language, 'strings' => $final_result)));
504
+ die();
505
+ }
506
+
507
+ /**
508
+ * Show submit form to share translation
509
+ */
510
+ protected static function showViewForm(){
511
+ echo '<!doctype html>';
512
+ echo '<html lang="en">';
513
+ echo '<head>';
514
+ echo ' <meta charset="utf-8">';
515
+ echo ' <title>Share with Joomunited</title>';
516
+ echo '</head>';
517
+ echo '<body>';
518
+
519
+ //Get and check language
520
+ $language = $_GET['language'];
521
+ if(!$language){
522
+ throw new Exception('language empty');
523
+ }
524
+ if(!preg_match('/^[a-z]{2,3}(?:-[a-zA-Z]{4})?(?:-[A-Z]{2,3})?$/',$language)){
525
+ throw new Exception('invalid language code');
526
+ }
527
+
528
+ $plugin = $_GET['slug'];
529
+ if(!$plugin){
530
+ echo json_encode(array('status'=>'error','message'=>'plugin empty'));
531
+ die();
532
+ }
533
+ if(!preg_match('/^[a-zA-Z-_]+$/',$plugin)){
534
+ echo json_encode(array('status'=>'error','message'=>'invalid plugin slug'));
535
+ die();
536
+ }
537
+
538
+ $addons = apply_filters(Jutranslation::$extension_slug.'_get_addons', array());
539
+ if (!isset($addons[$plugin])) {
540
+ echo json_encode(array('status'=>'error','message'=>'plugin not found'));
541
+ die();
542
+ }
543
+
544
+ $file = WP_CONTENT_DIR . DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'plugins' . DIRECTORY_SEPARATOR . $addons[$plugin]->text_domain . '-' . str_replace('-', '_', $language) . '.mo';
545
+ if(!file_exists($file)){
546
+ throw new Exception('language file doesn\'t exist');
547
+ }
548
+
549
+ //Get informations
550
+ $mo = new \MO();
551
+ $mo->import_from_file( $file );
552
+
553
+ //Check if the file has been modified by the user
554
+ if(isset($mo->headers['Modified']) && $mo->headers['Modified']!=='1'){
555
+ throw new Exception('language file not modified');
556
+ }
557
+
558
+ $strings = array();
559
+ //Check if a translation exists for each entry
560
+ foreach($mo->entries as $entry) {
561
+ $strings[$entry->singular] = $entry->translations[0];
562
+ }
563
+ $strings = json_encode($strings);
564
+
565
+ //Get the current extension version
566
+ $plugin_data = get_plugin_data( $addons[$plugin]->main_plugin_file );
567
+ $version = $plugin_data['Version'];
568
+
569
+ echo '<form method="POST" action="https://www.joomunited.com/index.php?option=com_jutranslation&task=contribution.share">';
570
+ echo '<input type="hidden" name="extension" value="' . $addons[$plugin]->extension_slug . '" />';
571
+ echo '<input type="hidden" name="extension_language" value="' . $language . '" />';
572
+ echo '<input type="hidden" name="extension_version" value="' . $version . '" />';
573
+ echo '<textarea style="display: none" name="strings">' . htmlentities($strings) . '</textarea>';
574
+ echo '</form>';
575
+ //Add waiting image
576
+ echo '<div style="text-align:center"><img src="' . plugin_dir_url( Jutranslation::$main_plugin_file ) . 'jutranslation/assets/images/preview_loader.gif"</div>';
577
+
578
+ //Submit automatically the form on page loading
579
+ echo '<script type="text/javascript">document.forms[0].submit();</script>';
580
+
581
+ echo '</body>';
582
+ echo '</html>';
583
+ wp_die();
584
+ }
585
+
586
+ public static function overrideLanguage($text_domain, $mofile){
587
+ //Only for our plugin and addons
588
+ $addons = apply_filters(Jutranslation::$extension_slug.'_get_addons', array());
589
+
590
+ foreach ($addons as $addon) {
591
+ if ($text_domain === $addon->text_domain) {
592
+ $path_parts = explode(DIRECTORY_SEPARATOR, $mofile);
593
+ $filename = $path_parts[count($path_parts)-1];
594
+ $filename_parts = explode('.',$filename);
595
+
596
+ //Return if it's action already for overrode file
597
+ if(count($filename_parts)>2 || $filename_parts[count($filename_parts)-2] === 'override'){
598
+ return;
599
+ }
600
+
601
+ //Load the overrode file
602
+ $path_parts[count($path_parts)-1] = str_replace('.mo', '.override.mo', $path_parts[count($path_parts)-1]);
603
+ if(file_exists(implode(DIRECTORY_SEPARATOR, $path_parts))){
604
+ load_textdomain($text_domain, implode(DIRECTORY_SEPARATOR, $path_parts));
605
+ }
606
+ }
607
+ }
608
+ }
609
+ }
languages/wp-meta-seo-en_US.mo CHANGED
Binary file
languages/wp-meta-seo-en_US.po DELETED
@@ -1,635 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: \n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: \n"
7
- "Language-Team: \n"
8
- "Language: en_US\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.7.4\n"
13
- "Plural-Forms: nplurals=2; plural=(n != 1);\n"
14
-
15
- msgid "Twitter username (without @)"
16
- msgstr "Twitter username (without @)"
17
-
18
- msgid "2 plugins that are doing almost the same thing detected: disable AIO SEO or Yoast SEO to avoid conflict."
19
- msgstr "2 plugins that are doing almost the same thing detected: disable AIO SEO or Yoast SEO to avoid conflict."
20
-
21
- msgid "We have found that you’re using All In One SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
22
- msgstr "We have found that you’re using All In One SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
23
-
24
- msgid "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
25
- msgstr "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
26
-
27
- msgid "Results preview"
28
- msgstr "Results preview"
29
-
30
- msgid "This is a preview of what your content will looks like in search engine results: title, description and URL"
31
- msgstr "This is a preview of what your content will looks like in search engine results: title, description and URL"
32
-
33
- msgid "Search engine title"
34
- msgstr "Search engine title"
35
-
36
- msgid "This is the title of your content that may be displayed in search engine results (meta title). By default it’s the content title (page title, post title…). 69 characters max allowed."
37
- msgstr "This is the title of your content that may be displayed in search engine results (meta title). By default it’s the content title (page title, post title…). 69 characters max allowed."
38
-
39
- msgid "Search engine description"
40
- msgstr "Search engine description"
41
-
42
- msgid "The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed."
43
- msgstr "The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed."
44
-
45
- msgid "Facebook Title"
46
- msgstr "Facebook Title"
47
-
48
- msgid "Custom title to display when sharing this content on facebook, content title override"
49
- msgstr "Custom title to display when sharing this content on facebook, content title override"
50
-
51
- msgid "Facebook Description"
52
- msgstr "Facebook Description"
53
-
54
- msgid "Custom description to display when sharing this content on facebook, content description override"
55
- msgstr "Custom description to display when sharing this content on facebook, content description override"
56
-
57
- msgid "Facebook Image"
58
- msgstr "Facebook Image"
59
-
60
- msgid "Custom image to display when sharing this content on facebook, content description override, recommended size is 1200px x 630px"
61
- msgstr "Custom image to display when sharing this content on facebook, content description override, recommended size is 1200px x 630px"
62
-
63
- msgid "Twitter Title"
64
- msgstr "Twitter Title"
65
-
66
- msgid "Custom title to display when sharing this content on twitter, content title override"
67
- msgstr "Custom title to display when sharing this content on twitter, content title override"
68
-
69
- msgid "Twitter Description"
70
- msgstr "Twitter Description"
71
-
72
- msgid "Custom description to display when sharing this content on twitter, content description override"
73
- msgstr "Custom description to display when sharing this content on twitter, content description override"
74
-
75
- msgid "Twitter Image"
76
- msgstr "Twitter Image"
77
-
78
- msgid "Custom image to display when sharing this content on facebook, content description override, recommended min size 440px X 220px"
79
- msgstr "Custom image to display when sharing this content on facebook, content description override, recommended min size 440px X 220px"
80
-
81
- msgid "Use Image"
82
- msgstr "Use Image"
83
-
84
- msgid " (because of date display)"
85
- msgstr " (because of date display)"
86
-
87
- msgid "(no parent)"
88
- msgstr "(no parent)"
89
-
90
- msgid "General"
91
- msgstr "General"
92
-
93
- msgid "Social"
94
- msgstr "Social"
95
-
96
- msgid "Page title word in content heading"
97
- msgstr "Page title word in content heading"
98
-
99
- msgid "Page title word in content"
100
- msgstr "Page title word in content"
101
-
102
- msgid "Page url matches with page title"
103
- msgstr "Page url matches with page title"
104
-
105
- msgid "Meta title filled"
106
- msgstr "Meta title filled"
107
-
108
- msgid "Meta description filled"
109
- msgstr "Meta description filled"
110
-
111
- msgid "Wrong image resize"
112
- msgstr "Wrong image resize"
113
-
114
- msgid "Image have meta title or alt"
115
- msgstr "Image have meta title or alt"
116
-
117
- msgid "SEO Page optimization"
118
- msgstr "SEO Page optimization"
119
-
120
- msgid "Social for search engine"
121
- msgstr "Social for search engine"
122
-
123
- msgid "Reload analysis"
124
- msgstr "Reload analysis"
125
-
126
- msgid "Filter by date"
127
- msgstr "Filter by date"
128
-
129
- msgid "All dates"
130
- msgstr "All dates"
131
-
132
- msgid "ID"
133
- msgstr "ID"
134
-
135
- msgid "Image"
136
- msgstr "Image"
137
-
138
- msgid "Name"
139
- msgstr "Name"
140
-
141
- msgid "Optimization Info"
142
- msgstr "Optimization Info"
143
-
144
- msgid "Alternative text"
145
- msgstr "Alternative text"
146
-
147
- msgid "Title"
148
- msgstr "Title"
149
-
150
- msgid "Legend"
151
- msgstr "Legend"
152
-
153
- msgid "Description"
154
- msgstr "Description"
155
-
156
- msgid "Select All"
157
- msgstr "Select All"
158
-
159
- msgid "Filter"
160
- msgstr "Filter"
161
-
162
- msgid "We didn't find any image which needed to be updated regarding meta information"
163
- msgstr "We didn't find any image which needed to be updated regarding meta information"
164
-
165
- msgid "This image has still not been inserted in any post!"
166
- msgstr "This image has still not been inserted in any post!"
167
-
168
- msgid "We found %s which needed to optimize"
169
- msgstr "We found %s which can be resized @ its native size"
170
-
171
- msgid "Replace?"
172
- msgstr "Replace?"
173
-
174
- msgid "Replace All"
175
- msgstr "Replace All"
176
-
177
- msgid "The post doesn't exist, please select another one"
178
- msgstr "The post doesn't exist, please select another one"
179
-
180
- msgid "There is a problem when update image name"
181
- msgstr "There is a problem when update image name"
182
-
183
- msgid "Image name changed"
184
- msgstr "Image name changed"
185
-
186
- msgid "Name already exist"
187
- msgstr "Name already exist"
188
-
189
- msgid "File doesn't existed"
190
- msgstr "File doesn't existed"
191
-
192
- msgid "Should not be empty"
193
- msgstr "Should not be empty"
194
-
195
- msgid "There is a problem during image meta update"
196
- msgstr "There is a problem during image meta update"
197
-
198
- msgid "This content has been deleted, please check again!"
199
- msgstr "This content has been deleted, please check again!"
200
-
201
- msgid "The post haven't been updated, please check again!"
202
- msgstr "The post haven't been updated, please check again!"
203
-
204
- msgid "This image has been removed from the post, please check again!"
205
- msgstr "This image has been removed from the post, please check again!"
206
-
207
- msgid "Content of the post is empty, please check again"
208
- msgstr "Content of the post is empty, please check again"
209
-
210
- msgid "We can't get traffic rank from Alexa for this website"
211
- msgstr "We can't get traffic rank from Alexa for this website"
212
-
213
- msgid "Meta Title"
214
- msgstr "Meta Title"
215
-
216
- msgid "Meta Description"
217
- msgstr "Meta Description"
218
-
219
- msgid "(no title)"
220
- msgstr "(no title)"
221
-
222
- msgid "Edit this item"
223
- msgstr "Edit this item"
224
-
225
- msgid "Edit"
226
- msgstr "Edit"
227
-
228
- msgid "View"
229
- msgstr "View"
230
-
231
- msgid "Preview"
232
- msgstr "Preview"
233
-
234
- msgid "This is a preview of what this content might looks like in Google's search results."
235
- msgstr "Prévisualisation de la manière dont le contenu sera affiché dans les résultats de recherche"
236
-
237
- msgid "Snippet Preview %s"
238
- msgstr "Snippet Preview %s"
239
-
240
- msgid "Facebook profile URL"
241
- msgstr "Facebook profile URL"
242
-
243
- msgid "Twitter Username"
244
- msgstr "Twitter Username"
245
-
246
- msgid "Meta block edition"
247
- msgstr "Meta block edition"
248
-
249
- msgid "Modification was saved"
250
- msgstr "Modification was saved"
251
-
252
- msgid "Meta title was not saved"
253
- msgstr "Meta title was not saved"
254
-
255
- msgid "Meta description was not saved"
256
- msgstr "Meta description was not saved"
257
-
258
- msgid "Dashboard"
259
- msgstr "Dashboard"
260
-
261
- msgid "WP Meta SEO"
262
- msgstr "WP Meta SEO"
263
-
264
- msgid "Content meta"
265
- msgstr "Content meta"
266
-
267
- msgid "Image information"
268
- msgstr "Image information"
269
-
270
- msgid "Settings"
271
- msgstr "Settings"
272
-
273
- msgid "Activate meta block edition in content"
274
- msgstr "Activate meta block edition in content"
275
-
276
- msgid "This post is not existed or deleted, please select another one"
277
- msgstr "This post is not existed or deleted, please select another one"
278
-
279
- msgid "Well done! This image is perfect now."
280
- msgstr "Well done! This image is perfect now."
281
-
282
- msgid "Oops! An error occured when updating the post, please try again"
283
- msgstr "Oops! An error occured when updating the post, please try again"
284
-
285
- msgid "Resize image"
286
- msgstr "Resize image"
287
-
288
- msgid "Image sizes are good!"
289
- msgstr "Image sizes are good!"
290
-
291
- msgid "Fix info in content"
292
- msgstr "Fix info in content"
293
-
294
- msgid "Edit information"
295
- msgstr "Edit information"
296
-
297
- msgid "N/A"
298
- msgstr "N/A"
299
-
300
- msgid "Poor"
301
- msgstr "Poor"
302
-
303
- msgid "OK"
304
- msgstr "OK"
305
-
306
- msgid "Good"
307
- msgstr "Good"
308
-
309
- msgid "Bad"
310
- msgstr "Bad"
311
-
312
- msgid "Homepage meta title"
313
- msgstr "Homepage meta title"
314
-
315
- msgid "Homepage meta description"
316
- msgstr "Homepage meta description"
317
-
318
- msgid "Bulk copy"
319
- msgstr "Bulk copy"
320
-
321
- msgid "All content"
322
- msgstr "All content"
323
-
324
- msgid "Selected posts"
325
- msgstr "Selected posts"
326
-
327
- msgid "Content title as meta title"
328
- msgstr "Content title as meta title"
329
-
330
- msgid "All Images"
331
- msgstr "All Images"
332
-
333
- msgid "Selected images"
334
- msgstr "Selected images"
335
-
336
- msgid "Image name as alt text"
337
- msgstr "Image name as alt text"
338
-
339
- msgid "Image name as image title"
340
- msgstr "Image name as image title"
341
-
342
- msgid "Warning, you're about to replace existing image alt or tile content, are you sire about that?"
343
- msgstr "Warning, you're about to replace existing image alt or tile content, are you sure about that?"
344
-
345
- msgid "Twitter card type "
346
- msgstr "Twitter card type "
347
-
348
- msgid "Summary"
349
- msgstr "Summary"
350
-
351
- msgid "Summary with large image"
352
- msgstr "Summary with large image"
353
-
354
- msgid "Optimized at"
355
- msgstr "Optimized at"
356
-
357
- msgid "Wrong resized images"
358
- msgstr "Wrong resized images"
359
-
360
- msgid "Latest month new or updated content"
361
- msgstr "Latest month new or updated content"
362
-
363
- msgid "Image data filled (in content)"
364
- msgstr "Image data filled (in content)"
365
-
366
- msgid "More information about WP Meta SEO"
367
- msgstr "More information about WP Meta SEO"
368
-
369
- msgid "Other plugins from JoomUnited"
370
- msgstr "Other plugins from JoomUnited"
371
-
372
- msgid "Check if a word of this content title is also in a title heading (h1, h2...)"
373
- msgstr "Check if a word of this content title is also in a title heading (h1, h2...)"
374
-
375
- msgid "Check if a word of this content title is also in the text"
376
- msgstr "Check if a word of this content title is also in the text"
377
-
378
- msgid "Does the page title match with the permalink (URL structure)"
379
- msgstr "Does the page title match with the permalink (URL structure)"
380
-
381
- msgid "Is the meta title of this page filled?"
382
- msgstr "Is the meta title of this page filled?"
383
-
384
- msgid "Is the meta description of this page filled?"
385
- msgstr "Is the meta description of this page filled?"
386
-
387
- msgid "Check for image HTML resizing in content (usually image resized using handles)"
388
- msgstr "Check for image HTML resizing in content (usually image resized using handles)"
389
-
390
- msgid "Check for image Alt text and title"
391
- msgstr "Check for image Alt text and title"
392
-
393
- msgid "It's better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
394
- msgstr "It's better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
395
-
396
- msgid "Meta titles are displayed in search engine results as a page title. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
397
- msgstr "Meta titles are displayed in search engine results as a page title. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
398
-
399
- msgid "Meta descriptions are displayed in search engine results as a page description. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
400
- msgstr "Meta descriptions are displayed in search engine results as a page description. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
401
-
402
- msgid "Display image at its natural size, do not use HTML resize. It happens usually when you use handles to resize an image. You have a bulk edition tool to fix that."
403
- msgstr "Display image at its natural size, do not use HTML resize. It happens usually when you use handles to resize an image. You have a bulk edition tool to fix that."
404
-
405
- msgid ""
406
- "We recommend to use both alt text and image title. The main advantage is that it helps search engines discover your images and display them in image search results. Plus, these tags improve the accessibility of your site and give more information about your "
407
- "images. Use our bulk image tool to quickly check and fix that."
408
- msgstr ""
409
- "We recommend to use both alt text and image title. The main advantage is that it helps search engines discover your images and display them in image search results. Plus, these tags improve the accessibility of your site and give more information about your "
410
- "images. Use our bulk image tool to quickly check and fix that."
411
-
412
- msgid "It is highly recommended to update or add new content on your website quite frequently. At least 3 updated or new content per month would be great :)"
413
- msgstr "It is highly recommended to update or add new content on your website quite frequently. At least 3 updated or new content per month would be great :)"
414
-
415
- msgid "Social networks meta"
416
- msgstr "Social networks meta"
417
-
418
- msgid "Activate social edition"
419
- msgstr "Activate social edition"
420
-
421
- msgid "Permalinks settings"
422
- msgstr "Permalinks settings"
423
-
424
- msgid "HTML image resizing"
425
- msgstr "HTML image resizing"
426
-
427
- msgid "Image title/alt"
428
- msgstr "Image title/alt"
429
-
430
- msgid "New or updated content"
431
- msgstr "New or updated content"
432
-
433
- msgid "WP Meta SEO dashboard"
434
- msgstr "WP Meta SEO dashboard"
435
-
436
- msgid "Latest WP Meta SEO News"
437
- msgstr "Latest WP Meta SEO News"
438
-
439
- msgid "All Posts"
440
- msgstr "All Posts"
441
-
442
- msgid "We can't get rank of this site from Alexa.com!"
443
- msgstr "We can't get rank of this site from Alexa.com!"
444
-
445
- msgid "Activate meta block edition below content"
446
- msgstr "Activate meta block edition below content"
447
-
448
- msgid "Well! This image is so good now."
449
- msgstr "Well! This image is optimized now"
450
-
451
- msgid "The default card type to use"
452
- msgstr "The default card type to use"
453
-
454
- msgid "Be careful you installed 2 extensions doing almost the same thing, please deactivate AIOSEO or Yoast in order to work more clearly!"
455
- msgstr "Be careful you installed 2 extensions doing almost the same thing, please deactivate AIOSEO or Yoast in order to work more clearly!"
456
-
457
- msgid "We have found that you’re using All In One Pack Plugin, WP Meta SEO can import the meta from this plugin, %s"
458
- msgstr "We have found that you’re using All In One Pack Plugin, WP Meta SEO can import the meta from this plugin, %s"
459
-
460
- msgid "File name already given!"
461
- msgstr "File name already given!"
462
-
463
- msgid "We found 0 image which needed to add or change meta information"
464
- msgstr "We found 0 image which needed to add or change meta information"
465
-
466
- msgid "The post is not existed, please choose one another!"
467
- msgstr "The post is not existed, please choose one another!"
468
-
469
- msgid "Image name was changed"
470
- msgstr "Image name was changed"
471
-
472
- msgid "File is not existed"
473
- msgstr "File is not existed"
474
-
475
- msgid "There is a problem when update image meta!"
476
- msgstr "There is a problem when update image meta!"
477
-
478
- msgid "The post has been deleted before, please check again!"
479
- msgstr "The post has been deleted before, please check again!"
480
-
481
- msgid " This is a rendering of what this post might look like in Google's search results."
482
- msgstr " This is a rendering of what this post might look like in Google's search results."
483
-
484
- msgid "This post is not existed or deleted, please choose one another!"
485
- msgstr "This post is not existed or deleted, please choose one another!"
486
-
487
- msgid "Opps! An error occured when updating the post, please try again"
488
- msgstr "Oops! An error occured when updating the post, please try again"
489
-
490
- msgid "Upload Image"
491
- msgstr "Upload Image"
492
-
493
- msgid "WP Meta SEO - Page optimization"
494
- msgstr "WP Meta SEO - Page optimization"
495
-
496
- msgid "Meta title was saved"
497
- msgstr "Meta title was saved"
498
-
499
- msgid "Content Meta"
500
- msgstr ""
501
-
502
- msgid "Meta keywords was saved"
503
- msgstr "Meta keywords was saved"
504
-
505
- msgid "Force SEO validation"
506
- msgstr "Force SEO validation"
507
-
508
- msgid "Allow user to force on page SEO criteria validation by clicking on the icon"
509
- msgstr "Allow user to force on page SEO criteria validation by clicking on the icon"
510
-
511
- msgid "Meta keywords"
512
- msgstr "Meta keywords"
513
-
514
- msgid "Active meta keywords"
515
- msgstr "Active meta keywords"
516
-
517
- msgid "Link text field"
518
- msgstr "Link text field"
519
-
520
- msgid "Adds back the missing 'title' field in the Insert/Edit URL box"
521
- msgstr "Adds back the missing 'title' field in the Insert/Edit URL box"
522
-
523
- msgid "Link titles"
524
- msgstr "Link titles"
525
-
526
- msgid "The link title attribute does not have any SEO value for links. BUT links titles can influence click behavior for users, which may indirectly affect your SEO performance"
527
- msgstr "The link title attribute does not have any SEO value for links. BUT links titles can influence click behavior for users, which may indirectly affect your SEO performance"
528
-
529
- msgid "Links title completed"
530
- msgstr "Links title completed"
531
-
532
- msgid "Saved."
533
- msgstr "Saved."
534
-
535
- msgid "Error."
536
- msgstr "Error."
537
-
538
- msgid "Source"
539
- msgstr "Source"
540
-
541
- msgid "URL"
542
- msgstr "URL"
543
-
544
- msgid "Link title"
545
- msgstr "Link title"
546
-
547
- msgid "Link text"
548
- msgstr "Link text"
549
-
550
- msgid "Link editor"
551
- msgstr "Link editor"
552
-
553
- msgid "Meta title as page title"
554
- msgstr "Meta title as page title"
555
-
556
- msgid "When meta title is filled use it as page title instead of the content title"
557
- msgstr "When meta title is filled use it as page title instead of the content title"
558
-
559
- msgid "It’s better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
560
- msgstr "It’s better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
561
-
562
- msgid "Meta descriptions are displayed in search engine results as a page description. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
563
- msgstr "Meta descriptions are displayed in search engine results as a page description. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
564
-
565
- msgid "Meta titles are displayed in search engine results as a page title. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
566
- msgstr "Meta titles are displayed in search engine results as a page title. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
567
-
568
- msgid "A website with a bunch of 404 errors doesn’t provide a good user experience, which is significantly important in content marketing and SEO. We recommend to use our internal broken link checker and redirect tool to fix all the 404 error you can periodically."
569
- msgstr "A website with a bunch of 404 errors doesn’t provide a good user experience, which is significantly important in content marketing and SEO. We recommend to use our internal broken link checker and redirect tool to fix all the 404 error you can periodically."
570
-
571
- msgid "Index internal broken links"
572
- msgstr "Index internal broken links"
573
-
574
- msgid "Type or Link text"
575
- msgstr "Type or Link text"
576
-
577
- msgid "Hits number"
578
- msgstr "Hits number"
579
-
580
- msgid "Status"
581
- msgstr "Status"
582
-
583
- msgid "Allow search engines robots to index this content, as default your content is indexed"
584
- msgstr "Allow search engines robots to index this content, as default your content is indexed"
585
-
586
- msgid "Provides show or do not show this page in search results in search results."
587
- msgstr "Provides show or do not show this page in search results in search results."
588
-
589
- msgid "Index"
590
- msgstr "Index"
591
-
592
- msgid "Follow"
593
- msgstr "Follow"
594
-
595
- msgid "Re-index content links"
596
- msgstr "Re-index content links"
597
-
598
- msgid "Apply"
599
- msgstr "Apply"
600
-
601
- msgid "-- Selection --"
602
- msgstr "-- Selection --"
603
-
604
- msgid "Follow selected"
605
- msgstr "Follow selected"
606
-
607
- msgid "Nofollow selected"
608
- msgstr "Nofollow selected"
609
-
610
- msgid "Follow all"
611
- msgstr "Follow all"
612
-
613
- msgid "Nofollow all"
614
- msgstr "Nofollow all"
615
-
616
- msgid "Link source"
617
- msgstr "Link source"
618
-
619
- msgid "Internal"
620
- msgstr "Internal"
621
-
622
- msgid "External"
623
- msgstr "External"
624
-
625
- msgid "Post/Page follow"
626
- msgstr "Post/Page follow"
627
-
628
- msgid "Post/Page index"
629
- msgstr "Post/Page index"
630
-
631
- msgid "Use ImageRecycle image compression plugin to activate this feature"
632
- msgstr "Use ImageRecycle image compression plugin to activate this feature"
633
-
634
- msgid "Images represent around 60% of a web page weight. An image compression reduce the image size by up to 70% while preserving the same visual quality. Small loading time is great for SEO!"
635
- msgstr "Images represent around 60% of a web page weight. An image compression reduce the image size by up to 70% while preserving the same visual quality. Small loading time is great for SEO!"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/wp-meta-seo-fr_FR.mo DELETED
Binary file
languages/wp-meta-seo-fr_FR.po DELETED
@@ -1,793 +0,0 @@
1
- msgid ""
2
- msgstr ""
3
- "Project-Id-Version: WPMS 1.2\n"
4
- "POT-Creation-Date: \n"
5
- "PO-Revision-Date: \n"
6
- "Last-Translator: \n"
7
- "Language-Team: \n"
8
- "Language: fr_FR\n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "X-Generator: Poedit 1.8.5\n"
13
-
14
- msgid "Twitter username (without @)"
15
- msgstr "ID Twitter (sans le @)"
16
-
17
- msgid ""
18
- "2 plugins that are doing almost the same thing detected: disable AIO SEO or "
19
- "Yoast SEO to avoid conflict."
20
- msgstr ""
21
- "2 plugins sont présent et font tous les 2 du SEO: merci de désactiver AIO "
22
- "SEO ou Yoast SEO pour éviter les conflits"
23
-
24
- msgid ""
25
- "We have found that you’re using All In One SEO plugin, WP Meta SEO can "
26
- "import the meta from this plugin, %s"
27
- msgstr ""
28
- "Vous utilisez le plugin All in one SEO, nous pouvons importer les meta de "
29
- "ce plugin pour vous, %s"
30
-
31
- msgid ""
32
- "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the "
33
- "meta from this plugin, %s"
34
- msgstr ""
35
- "Vous utilisez le plugin Yoast SEO, nous pouvons importer les meta de ce "
36
- "plugin pour vous, %s"
37
-
38
- msgid "Results preview"
39
- msgstr "Prévisualisation"
40
-
41
- msgid ""
42
- "This is a preview of what your content will looks like in search engine "
43
- "results: title, description and URL"
44
- msgstr "Prévisualisation des résultats de recherche, titre, description et URL"
45
-
46
- msgid "Search engine title"
47
- msgstr "Titre"
48
-
49
- msgid ""
50
- "This is the title of your content that may be displayed in search engine "
51
- "results (meta title). By default it’s the content title (page title, post "
52
- "title…). 69 characters max allowed."
53
- msgstr ""
54
- "Ceci est le titre de votre contenu qui pourra être reprit par les moteurs de "
55
- "recherche (meta title). Par défaut il s'agit du titre du contenu. 69 "
56
- "caractères max"
57
-
58
- msgid "Search engine description"
59
- msgstr "Description"
60
-
61
- msgid ""
62
- "The description of your content that may be displayed in search engine "
63
- "results aka meta description. By default search engine take an excerpt from "
64
- "your content (depending on the search query). 156 characters max allowed."
65
- msgstr ""
66
- "Ceci est la description de votre contenu qui pourra être reprit par les "
67
- "moteurs de recherche (meta description). Par défaut il s'agit d'un extrait "
68
- "de votre contenu.156 caractères max"
69
-
70
- msgid "Facebook Title"
71
- msgstr "Titre facebook"
72
-
73
- msgid ""
74
- "Custom title to display when sharing this content on facebook, content title "
75
- "override"
76
- msgstr "Titre customisé lors du partage de ce contenu sur Facebook"
77
-
78
- msgid "Facebook Description"
79
- msgstr "Description Facebook"
80
-
81
- msgid ""
82
- "Custom description to display when sharing this content on facebook, content "
83
- "description override"
84
- msgstr "Description customisé lors du partage de ce contenu sur Facebook"
85
-
86
- msgid "Facebook Image"
87
- msgstr "Image Facebook"
88
-
89
- msgid ""
90
- "Custom image to display when sharing this content on facebook, content "
91
- "description override, recommended size is 1200px x 630px"
92
- msgstr ""
93
- "Image customisé lors du partage de ce contenu sur Facebook, taille "
94
- "recommandée 1200px x 630px"
95
-
96
- msgid "Twitter Title"
97
- msgstr "Titre Twitter"
98
-
99
- msgid ""
100
- "Custom title to display when sharing this content on twitter, content title "
101
- "override"
102
- msgstr "Titre customisé lors du partage de ce contenu sur Twitter"
103
-
104
- msgid "Twitter Description"
105
- msgstr "Description Twitter"
106
-
107
- msgid ""
108
- "Custom description to display when sharing this content on twitter, content "
109
- "description override"
110
- msgstr "Description customisé lors du partage de ce contenu sur Twitter"
111
-
112
- msgid "Twitter Image"
113
- msgstr "Image Twitter"
114
-
115
- msgid ""
116
- "Custom image to display when sharing this content on facebook, content "
117
- "description override, recommended min size 440px X 220px"
118
- msgstr ""
119
- "Image customisé lors du partage de ce contenu sur Twitter, taille "
120
- "recommandée 440px x 220px"
121
-
122
- msgid "Use Image"
123
- msgstr "Utiliser image"
124
-
125
- msgid " (because of date display)"
126
- msgstr " (because of date display)"
127
-
128
- msgid "(no parent)"
129
- msgstr "(no parent)"
130
-
131
- msgid "General"
132
- msgstr "General"
133
-
134
- msgid "Social"
135
- msgstr "Social"
136
-
137
- msgid "Page title word in content heading"
138
- msgstr "Mot du titre dans un titre du contenu"
139
-
140
- msgid "Page title word in content"
141
- msgstr "Mot du titre dans le contenu"
142
-
143
- msgid "Page url matches with page title"
144
- msgstr "URL de page correspond au titre de page"
145
-
146
- msgid "Meta title filled"
147
- msgstr "Meta titres complétés"
148
-
149
- msgid "Meta description filled"
150
- msgstr "Meta descriptions complétées"
151
-
152
- msgid "Wrong image resize"
153
- msgstr "Mauvaise taille d'image"
154
-
155
- msgid "Image have meta title or alt"
156
- msgstr "Les images ont des meta title ou alt"
157
-
158
- msgid "SEO Page optimization"
159
- msgstr "Optimisation moteur de recherche"
160
-
161
- msgid "Social for search engine"
162
- msgstr "Partage réseaux sociaux"
163
-
164
- msgid "Reload analysis"
165
- msgstr "Relancer analyse"
166
-
167
- msgid "Filter by date"
168
- msgstr "Filtrer par date"
169
-
170
- msgid "All dates"
171
- msgstr "Toutes les dates"
172
-
173
- msgid "ID"
174
- msgstr "ID"
175
-
176
- msgid "Image"
177
- msgstr "Image"
178
-
179
- msgid "Name"
180
- msgstr "Nom"
181
-
182
- msgid "Optimization Info"
183
- msgstr "Info optimisation"
184
-
185
- msgid "Alternative text"
186
- msgstr "texte alternatif"
187
-
188
- msgid "Title"
189
- msgstr "Titre"
190
-
191
- msgid "Legend"
192
- msgstr "Légende"
193
-
194
- msgid "Description"
195
- msgstr "Description"
196
-
197
- msgid "Select All"
198
- msgstr "Tout selectionner"
199
-
200
- msgid "Filter"
201
- msgstr "Filtrer"
202
-
203
- msgid ""
204
- "We didn't find any image which needed to be updated regarding meta "
205
- "information"
206
- msgstr ""
207
- "Nous n'avons trouvé aucune image qui ont besoin d'être optimisé pour le SEO"
208
-
209
- msgid "This image has still not been inserted in any post!"
210
- msgstr "Cette image n'a été ajouté dans aucun de vos contenus"
211
-
212
- msgid "We found %s which needed to optimize"
213
- msgstr "Nous avons trouvé %s qui nécessite une optimisation"
214
-
215
- msgid "Replace?"
216
- msgstr "Remplacer ?"
217
-
218
- msgid "Replace All"
219
- msgstr "Tout remplacer"
220
-
221
- msgid "The post doesn't exist, please select another one"
222
- msgstr "Le post n'existe plus, merci d'en sélectionner un autre"
223
-
224
- msgid "There is a problem when update image name"
225
- msgstr "Erreur lors du changement de nom d'image"
226
-
227
- msgid "Image name changed"
228
- msgstr "Nom de l'image changé"
229
-
230
- msgid "Name already exist"
231
- msgstr "Le nom existe déjà"
232
-
233
- msgid "File doesn't existed"
234
- msgstr "Le fichier n'existe plus"
235
-
236
- msgid "Should not be empty"
237
- msgstr "Ne peut être vide"
238
-
239
- msgid "There is a problem during image meta update"
240
- msgstr "Un problème est survenue durant l'update des meta"
241
-
242
- msgid "This content has been deleted, please check again!"
243
- msgstr "Ce contenu a été supprimé, merci de revérifier!"
244
-
245
- msgid "The post haven't been updated, please check again!"
246
- msgstr "Ce post n'a pas été mis à jour, merci de revérifier"
247
-
248
- msgid "This image has been removed from the post, please check again!"
249
- msgstr "Cette image a été supprimée du contenu"
250
-
251
- msgid "Content of the post is empty, please check again"
252
- msgstr "Le contenu est vide, merci de revérifier"
253
-
254
- msgid "We can't get traffic rank from Alexa for this website"
255
- msgstr ""
256
- "Nous n'avons pas assez d'info (de trafic) Alexa pour avoir le \"Traffic Rank"
257
- "\""
258
-
259
- msgid "Meta Title"
260
- msgstr "Meta titre"
261
-
262
- msgid "Meta Description"
263
- msgstr "Meta description"
264
-
265
- msgid "(no title)"
266
- msgstr "(pas de titre)"
267
-
268
- msgid "Edit this item"
269
- msgstr "Editer cet item"
270
-
271
- msgid "Edit"
272
- msgstr "Editer"
273
-
274
- msgid "View"
275
- msgstr "Afficher"
276
-
277
- msgid "Preview"
278
- msgstr "Prévisualiser"
279
-
280
- msgid ""
281
- "This is a preview of what this content might looks like in Google's search "
282
- "results."
283
- msgstr ""
284
- "Prévisualisation de ce à quoi votre contenu peut ressembler dans les "
285
- "résultats de recherche"
286
-
287
- msgid "Snippet Preview %s"
288
- msgstr "Prévisualisation %s"
289
-
290
- msgid "Facebook profile URL"
291
- msgstr "Lien URL profil Facebook"
292
-
293
- msgid "Twitter Username"
294
- msgstr "Nom d'utilisateur Twitter"
295
-
296
- msgid "Meta block edition"
297
- msgstr "Block édition meta"
298
-
299
- msgid "Modification was saved"
300
- msgstr "Modifications sauvegardées"
301
-
302
- msgid "Meta title was not saved"
303
- msgstr "Meta titre non sauvegardé"
304
-
305
- msgid "Meta description was not saved"
306
- msgstr "Meta description non sauvegardé"
307
-
308
- msgid "Dashboard"
309
- msgstr "Tableau de bord"
310
-
311
- msgid "WP Meta SEO"
312
- msgstr "WP Meta SEO"
313
-
314
- msgid "Content meta"
315
- msgstr "Contenu meta"
316
-
317
- msgid "Image information"
318
- msgstr "Image information"
319
-
320
- msgid "Settings"
321
- msgstr "Paramètres"
322
-
323
- msgid "Activate meta block edition in content"
324
- msgstr "Activer l'édition des block de meta dans le contenu"
325
-
326
- msgid "This post is not existed or deleted, please select another one"
327
- msgstr "Ce post n'existe plus ou a été supprimé"
328
-
329
- msgid "Well done! This image is perfect now."
330
- msgstr "Bien joué ! Image remise à la bonne taille !"
331
-
332
- msgid "Oops! An error occured when updating the post, please try again"
333
- msgstr ""
334
- "Oups! Une erreur est survenue durant la mise à jour du post, merci de "
335
- "réessayer"
336
-
337
- msgid "Resize image"
338
- msgstr "Redimensionner image"
339
-
340
- msgid "Image sizes are good!"
341
- msgstr "Taille d'image OK!"
342
-
343
- msgid "Fix info in content"
344
- msgstr "Améliorer meta"
345
-
346
- msgid "Edit information"
347
- msgstr ""
348
-
349
- msgid "N/A"
350
- msgstr "N/A"
351
-
352
- msgid "Poor"
353
- msgstr "Mauvaise qualité"
354
-
355
- msgid "OK"
356
- msgstr "OK"
357
-
358
- msgid "Good"
359
- msgstr "Bon"
360
-
361
- msgid "Bad"
362
- msgstr "Mauvais"
363
-
364
- msgid "Homepage meta title"
365
- msgstr "Meta info page d'accueil"
366
-
367
- msgid "Homepage meta description"
368
- msgstr "Description page d'accueil"
369
-
370
- msgid "Bulk copy"
371
- msgstr "Copy par lot"
372
-
373
- msgid "All content"
374
- msgstr "Tout le contenu"
375
-
376
- msgid "Selected posts"
377
- msgstr "Sélection de contenu"
378
-
379
- msgid "Content title as meta title"
380
- msgstr "Titre contenu > meta titre"
381
-
382
- msgid "All Images"
383
- msgstr "Toutes les images"
384
-
385
- msgid "Selected images"
386
- msgstr "Sélection d'images"
387
-
388
- msgid "Image name as alt text"
389
- msgstr "Nom image > alt texte"
390
-
391
- msgid "Image name as image title"
392
- msgstr "Nom image > titre d'image"
393
-
394
- msgid ""
395
- "Warning, you're about to replace existing image alt or tile content, are you "
396
- "sire about that?"
397
- msgstr ""
398
- "Vous êtes sur le point de remplacer des attributs de vos images, vous êtes "
399
- "sûr ?"
400
-
401
- msgid "Twitter card type "
402
- msgstr "Type Twitter card"
403
-
404
- msgid "Summary"
405
- msgstr "Sommaire"
406
-
407
- msgid "Summary with large image"
408
- msgstr "Sommaire avec large image"
409
-
410
- msgid "Optimized at"
411
- msgstr "Optimisé à"
412
-
413
- msgid "Wrong resized images"
414
- msgstr "Image redimentionnées"
415
-
416
- msgid "Latest month new or updated content"
417
- msgstr "Contenu ajouté ou mis à jour le mois dernier"
418
-
419
- msgid "Image data filled (in content)"
420
- msgstr "Informations images complétées"
421
-
422
- msgid "More information about WP Meta SEO"
423
- msgstr "Plus d'info sur le plugin WP Meta SEO"
424
-
425
- msgid "Other plugins from JoomUnited"
426
- msgstr "Autres plugin de JoomUnited"
427
-
428
- msgid ""
429
- "Check if a word of this content title is also in a title heading (h1, h2...)"
430
- msgstr ""
431
- "Vérifie si un mot du titre de page est aussi présent dans un titre du "
432
- "contenu (h1, h2...)"
433
-
434
- msgid "Check if a word of this content title is also in the text"
435
- msgstr ""
436
- "Vérifie si un mot du titre de page est aussi présent dans le contenu texte"
437
-
438
- msgid "Does the page title match with the permalink (URL structure)"
439
- msgstr "Vérifie si le titre de page correspond à l'URL (permalien)"
440
-
441
- msgid "Is the meta title of this page filled?"
442
- msgstr "Est-ce que les meta titres sont complétés?"
443
-
444
- msgid "Is the meta description of this page filled?"
445
- msgstr "Est-ce que les meta description sont complétés?"
446
-
447
- msgid ""
448
- "Check for image HTML resizing in content (usually image resized using "
449
- "handles)"
450
- msgstr ""
451
- "Vérifie si des images sont redimensionnées en HTML (habituellement en "
452
- "utilisant les poignées)"
453
-
454
- msgid "Check for image Alt text and title"
455
- msgstr "Vérifie si les textes alt and titre d'images sont remplis"
456
-
457
- msgid ""
458
- "It's better using a permalink structure that is adding in your URL the "
459
- "category name and content title. This parameter can be changed in Settings > "
460
- "Permalinks WordPress menu. Tag recommended is %category%/%postname%"
461
- msgstr ""
462
- "Il est préférable d'utiliser des URL dont le nom de la catégorie et le titre "
463
- "de page sont en clair. Ce paramètre peut être modifié depuis le menu "
464
- "Paramètres > Permaliens. Le tag recommandé est %category%/%postname%"
465
-
466
- msgid ""
467
- "Meta titles are displayed in search engine results as a page title. It's a "
468
- "good thing for SEO to have some custom and attractive ones. Be sure to fill "
469
- "at least the met information on your most popular pages"
470
- msgstr ""
471
- "Les titres Meta sont affichés dans les résultats de recherche comme titre de "
472
- "page. C'est une bonne chose de mettre des titres accrocheurs pour avoir un "
473
- "plus grand nombre de clics."
474
-
475
- msgid ""
476
- "Meta descriptions are displayed in search engine results as a page "
477
- "description. It's a good thing for SEO to have some custom and attractive "
478
- "ones. Be sure to fill at least the meta information on your most popular "
479
- "pages."
480
- msgstr ""
481
- "Les Meta descroption sont affichés dans les résultats de recherche comme "
482
- "description de page. C'est une bonne chose de mettre des descriptions "
483
- "accrocheuses pour avoir un plus grand nombre de clics."
484
-
485
- msgid ""
486
- "Display image at its natural size, do not use HTML resize. It happens "
487
- "usually when you use handles to resize an image. You have a bulk edition "
488
- "tool to fix that."
489
- msgstr ""
490
- "Utilisez des images à leur taille naturelle, pas en les redimensionnant en "
491
- "HTML (avec les poignées). Avec WP Meta SEO, vous disposez d'un outil pour "
492
- "corriger cela"
493
-
494
- msgid ""
495
- "We recommend to use both alt text and image title. The main advantage is "
496
- "that it helps search engines discover your images and display them in image "
497
- "search results. Plus, these tags improve the accessibility of your site and "
498
- "give more information about your images. Use our bulk image tool to quickly "
499
- "check and fix that."
500
- msgstr ""
501
- "Nous vous recommandons de compléter les le textes alternatif et les titres "
502
- "d'images. L'avantage c'est que cela permet aux moteur de recherche d'indexer "
503
- "vos images et apporte plus de contenu à vos pages. utilisez l'outil "
504
- "d'édition par lot pour aller plus vite! "
505
-
506
- msgid ""
507
- "It is highly recommended to update or add new content on your website quite "
508
- "frequently. At least 3 updated or new content per month would be great :)"
509
- msgstr ""
510
- "Il est fortement recommandé de mettre à jour ou d'ajouter du contenu sur "
511
- "votre site pour être mieux référencé. Au moins 3 mises à jour ou ajout de "
512
- "contenu par mois serait parfait :)"
513
-
514
- msgid "Social networks meta"
515
- msgstr "Meta réseaux sociaux"
516
-
517
- msgid "Activate social edition"
518
- msgstr "Activer l'édition des meta pour les réseaux sociaux"
519
-
520
- msgid "Permalinks settings"
521
- msgstr "Paramètres permaliens"
522
-
523
- msgid "HTML image resizing"
524
- msgstr "Image redimensionnées en HTML"
525
-
526
- msgid "Image title/alt"
527
- msgstr "Titre text alt des images"
528
-
529
- msgid "New or updated content"
530
- msgstr "Nouveau ou mise à jour contenu"
531
-
532
- msgid "WP Meta SEO dashboard"
533
- msgstr "Tableau de bord WP Meta SEO"
534
-
535
- msgid "Latest WP Meta SEO News"
536
- msgstr "Dernière news WP Meta SEO"
537
-
538
- msgid "All Posts"
539
- msgstr "Tous les posts"
540
-
541
- msgid "We can't get rank of this site from Alexa.com!"
542
- msgstr "Impossible de déterminer le Traffic Rank Alexa pour ce site"
543
-
544
- msgid "Activate meta block edition below content"
545
- msgstr "Activer l'édition des meta info sous les contenu (pages, articles)"
546
-
547
- msgid "Well! This image is so good now."
548
- msgstr "Parfait! image optimisée"
549
-
550
- msgid "The default card type to use"
551
- msgstr "Type de Twitter card"
552
-
553
- msgid ""
554
- "Be careful you installed 2 extensions doing almost the same thing, please "
555
- "deactivate AIOSEO or Yoast in order to work more clearly!"
556
- msgstr ""
557
- "Attention plusieurs plugins sont susceptibles d'effectuer les même tâches, "
558
- "essayez de désactiver AIO SEO ou Yoast SEO"
559
-
560
- msgid ""
561
- "We have found that you’re using All In One Pack Plugin, WP Meta SEO can "
562
- "import the meta from this plugin, %s"
563
- msgstr ""
564
- "Vous utilisez actuellement All In One SEO Plugin, WP Meta SEO put importer "
565
- "les données de ce plugin pour vous, %s"
566
-
567
- msgid "File name already given!"
568
- msgstr ""
569
-
570
- msgid "We found 0 image which needed to add or change meta information"
571
- msgstr ""
572
- "Nous n'avons pas trouvé d'images qui nécessite l'ajout ou l'édition des meta"
573
-
574
- msgid "The post is not existed, please choose one another!"
575
- msgstr "Ce post n'existe pas, merci d'un sélectionner un autre"
576
-
577
- msgid "Image name was changed"
578
- msgstr "Nom d'image changé"
579
-
580
- msgid "File is not existed"
581
- msgstr "Ce fichier n'existe plus"
582
-
583
- msgid "There is a problem when update image meta!"
584
- msgstr "Erreur lors de la mise à jour des meta"
585
-
586
- msgid "The post has been deleted before, please check again!"
587
- msgstr "Ce contenu a été supprimé, merci de recharger la page"
588
-
589
- msgid ""
590
- " This is a rendering of what this post might look like in Google's search "
591
- "results."
592
- msgstr "Prévisualisation des résultats de recherche Google"
593
-
594
- msgid "This post is not existed or deleted, please choose one another!"
595
- msgstr "Ce post n'existe plus, merci d'en sélectionner un autre"
596
-
597
- msgid "Opps! An error occured when updating the post, please try again"
598
- msgstr "Oups! une erreur est survenue lors de la mise à jour du contenu"
599
-
600
- msgid "Upload Image"
601
- msgstr "Envoyer image"
602
-
603
- msgid "WP Meta SEO - Page optimization"
604
- msgstr "WP Meta SEO - Page optimisation"
605
-
606
- msgid "Meta title was saved"
607
- msgstr "Metz"
608
-
609
- msgid "Content Meta"
610
- msgstr "Meta content"
611
-
612
- msgid "Meta keywords was saved"
613
- msgstr "Mot clés enregistrés"
614
-
615
- msgid "Force SEO validation"
616
- msgstr "Forcer validation SEO"
617
-
618
- msgid ""
619
- "Allow user to force on page SEO criteria validation by clicking on the icon"
620
- msgstr ""
621
- "Autoriser la validation forcée des critères SEO dans l'analyse des pages"
622
-
623
- msgid "Meta keywords"
624
- msgstr "Mot clés"
625
-
626
- msgid "Active meta keywords"
627
- msgstr "Activer les mot clés meta"
628
-
629
- msgid "Link text field"
630
- msgstr "Champ titre lien"
631
-
632
- msgid "Adds back the missing 'title' field in the Insert/Edit URL box"
633
- msgstr "Ajouter un champ titre dans l'outil d'édition de lien"
634
-
635
- msgid "Link titles"
636
- msgstr "Titres lien"
637
-
638
- msgid ""
639
- "The link title attribute does not have any SEO value for links. BUT links "
640
- "titles can influence click behavior for users, which may indirectly affect "
641
- "your SEO performance"
642
- msgstr ""
643
- "Les titres des liens n'ont pas d'impact direct sur le SEO MAIS cela peut "
644
- "influencer le comportement des utilisateurs en les incitant a cliquer dessus"
645
-
646
- msgid "Links title completed"
647
- msgstr "Titre de lien ajouté"
648
-
649
- msgid "Saved."
650
- msgstr "Enregistré"
651
-
652
- msgid "Error."
653
- msgstr "Erreur"
654
-
655
- msgid "Source"
656
- msgstr "Source"
657
-
658
- msgid "URL"
659
- msgstr "URL"
660
-
661
- msgid "Link title"
662
- msgstr "Titre liens"
663
-
664
- msgid "Link text"
665
- msgstr "Text lien"
666
-
667
- msgid "Link editor"
668
- msgstr "Link editor"
669
-
670
- msgid "Meta title as page title"
671
- msgstr "Meta titre vers titre page"
672
-
673
- msgid ""
674
- "When meta title is filled use it as page title instead of the content title"
675
- msgstr ""
676
- "Lorsque le meta titre est rempli, l'utiliser plutôt que le titre du contenu"
677
-
678
- msgid ""
679
- "It’s better using a permalink structure that is adding in your URL the "
680
- "category name and content title. This parameter can be changed in Settings > "
681
- "Permalinks WordPress menu. Tag recommended is %category%/%postname%"
682
- msgstr ""
683
- "Il est conseillé d'utiliser une structure d'URL qui inclus le nom de la "
684
- "catégorie et le titre du contenu. Ce paramètre peut être changé dans "
685
- "Paramètres > Permaliens. Le tag recommandé est %category%/%postname%"
686
-
687
- msgid ""
688
- "Meta descriptions are displayed in search engine results as a page "
689
- "description. It’s a good thing for SEO to have some custom and attractive "
690
- "ones. Be sure to fill at least the meta information on your most popular "
691
- "pages."
692
- msgstr ""
693
- "Les meta descriptions sont affichées dans les résultats de recherche si ils "
694
- "sont jugés pertinents. Il est bon pour avoir un taux de clics élevé d'en "
695
- "rédiger des attractifs. Assurez vous de les compléter au moins pour vos "
696
- "principales pages."
697
-
698
- msgid ""
699
- "Meta titles are displayed in search engine results as a page title. It’s a "
700
- "good thing for SEO to have some custom and attractive ones. Be sure to fill "
701
- "at least the met information on your most popular pages"
702
- msgstr ""
703
- "Les meta titres sont affichées dans les résultats de recherche. Il est bon "
704
- "pour avoir un taux de clics élevé d'en rédiger des attractifs. Assurez vous "
705
- "de les compléter au moins pour vos principales pages."
706
-
707
- msgid ""
708
- "A website with a bunch of 404 errors doesn’t provide a good user experience, "
709
- "which is significantly important in content marketing and SEO. We recommend "
710
- "to use our internal broken link checker and redirect tool to fix all the 404 "
711
- "error you can periodically."
712
- msgstr ""
713
- "Un site web qui contient beaucoup d'erreur 404 donne une mauvaise expérience "
714
- "d'utilisation, ce qui est très dommageable pour le marketing et le SEO. Nous "
715
- "vous recommandons de corriger le maximum d'erreur en faisant des "
716
- "redirections pertinentes."
717
-
718
- msgid "Index internal broken links"
719
- msgstr "Indexer les liens brisés"
720
-
721
- msgid "Type or Link text"
722
- msgstr "Type ou texte du lien"
723
-
724
- msgid "Hits number"
725
- msgstr "Nombre de clic"
726
-
727
- msgid "Status"
728
- msgstr "Status"
729
-
730
- msgid ""
731
- "Allow search engines robots to index this content, as default your content "
732
- "is indexed"
733
- msgstr "Autoriser les moteurs de recherche à indexer ce contenu"
734
-
735
- msgid ""
736
- "Provides show or do not show this page in search results in search results."
737
- msgstr "Afficher ou pas cette page dans les résultats des moteurs de recherche"
738
-
739
- msgid "Index"
740
- msgstr "Index"
741
-
742
- msgid "Follow"
743
- msgstr "Follow"
744
-
745
- msgid "Re-index content links"
746
- msgstr "Re-indexer liens"
747
-
748
- msgid "Apply"
749
- msgstr "Appliquer"
750
-
751
- msgid "-- Selection --"
752
- msgstr "-- Selection --"
753
-
754
- msgid "Follow selected"
755
- msgstr "Follow sélection"
756
-
757
- msgid "Nofollow selected"
758
- msgstr "Nofollow sélection"
759
-
760
- msgid "Follow all"
761
- msgstr "Follow tous"
762
-
763
- msgid "Nofollow all"
764
- msgstr "Nofollow tous"
765
-
766
- msgid "Link source"
767
- msgstr "Source lien"
768
-
769
- msgid "Internal"
770
- msgstr "Interne"
771
-
772
- msgid "External"
773
- msgstr "Externe"
774
-
775
- msgid "Post/Page follow"
776
- msgstr "Article/Page follow"
777
-
778
- msgid "Post/Page index"
779
- msgstr "Article/Page index"
780
-
781
- msgid "Use ImageRecycle image compression plugin to activate this feature"
782
- msgstr ""
783
- "Activation : l'installation du plugin de compression d'image ImageRecycle "
784
- "est nécessaire"
785
-
786
- msgid ""
787
- "Images represent around 60% of a web page weight. An image compression "
788
- "reduce the image size by up to 70% while preserving the same visual quality. "
789
- "Small loading time is great for SEO!"
790
- msgstr ""
791
- "Les images représentent en moyenne 60% du poids d'une page web. Une "
792
- "compression sans perte de qualité réduit de manière importante le poids de "
793
- "votre page, parfait pour le référencement !"
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
languages/wp-meta-seo.pot DELETED
@@ -1,635 +0,0 @@
1
- #, fuzzy
2
- msgid ""
3
- msgstr ""
4
- "Project-Id-Version: WP Meta SEO\n"
5
- "POT-Creation-Date: \n"
6
- "PO-Revision-Date: \n"
7
- "Last-Translator: \n"
8
- "Language-Team: \n"
9
- "MIME-Version: 1.0\n"
10
- "Content-Type: text/plain; charset=UTF-8\n"
11
- "Content-Transfer-Encoding: 8bit\n"
12
- "Language: en_GB\n"
13
- "X-Generator: Poedit 1.8.5\n"
14
- "X-Poedit-SourceCharset: UTF-8\n"
15
-
16
- msgid "Twitter username (without @)"
17
- msgstr ""
18
-
19
- msgid "2 plugins that are doing almost the same thing detected: disable AIO SEO or Yoast SEO to avoid conflict."
20
- msgstr ""
21
-
22
- msgid "We have found that you’re using All In One SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
23
- msgstr ""
24
-
25
- msgid "We have found that you’re using Yoast SEO plugin, WP Meta SEO can import the meta from this plugin, %s"
26
- msgstr ""
27
-
28
- msgid "Results preview"
29
- msgstr ""
30
-
31
- msgid "This is a preview of what your content will looks like in search engine results: title, description and URL"
32
- msgstr ""
33
-
34
- msgid "Search engine title"
35
- msgstr ""
36
-
37
- msgid "This is the title of your content that may be displayed in search engine results (meta title). By default it’s the content title (page title, post title…). 69 characters max allowed."
38
- msgstr ""
39
-
40
- msgid "Search engine description"
41
- msgstr ""
42
-
43
- msgid "The description of your content that may be displayed in search engine results aka meta description. By default search engine take an excerpt from your content (depending on the search query). 156 characters max allowed."
44
- msgstr ""
45
-
46
- msgid "Facebook Title"
47
- msgstr ""
48
-
49
- msgid "Custom title to display when sharing this content on facebook, content title override"
50
- msgstr ""
51
-
52
- msgid "Facebook Description"
53
- msgstr ""
54
-
55
- msgid "Custom description to display when sharing this content on facebook, content description override"
56
- msgstr ""
57
-
58
- msgid "Facebook Image"
59
- msgstr ""
60
-
61
- msgid "Custom image to display when sharing this content on facebook, content description override, recommended size is 1200px x 630px"
62
- msgstr ""
63
-
64
- msgid "Twitter Title"
65
- msgstr ""
66
-
67
- msgid "Custom title to display when sharing this content on twitter, content title override"
68
- msgstr ""
69
-
70
- msgid "Twitter Description"
71
- msgstr ""
72
-
73
- msgid "Custom description to display when sharing this content on twitter, content description override"
74
- msgstr ""
75
-
76
- msgid "Twitter Image"
77
- msgstr ""
78
-
79
- msgid "Custom image to display when sharing this content on facebook, content description override, recommended min size 440px X 220px"
80
- msgstr ""
81
-
82
- msgid "Use Image"
83
- msgstr ""
84
-
85
- msgid " (because of date display)"
86
- msgstr ""
87
-
88
- msgid "(no parent)"
89
- msgstr ""
90
-
91
- msgid "General"
92
- msgstr ""
93
-
94
- msgid "Social"
95
- msgstr ""
96
-
97
- msgid "Page title word in content heading"
98
- msgstr ""
99
-
100
- msgid "Page title word in content"
101
- msgstr ""
102
-
103
- msgid "Page url matches with page title"
104
- msgstr ""
105
-
106
- msgid "Meta title filled"
107
- msgstr ""
108
-
109
- msgid "Meta description filled"
110
- msgstr ""
111
-
112
- msgid "Wrong image resize"
113
- msgstr ""
114
-
115
- msgid "Image have meta title or alt"
116
- msgstr ""
117
-
118
- msgid "SEO Page optimization"
119
- msgstr ""
120
-
121
- msgid "Social for search engine"
122
- msgstr ""
123
-
124
- msgid "Reload analysis"
125
- msgstr ""
126
-
127
- msgid "Filter by date"
128
- msgstr ""
129
-
130
- msgid "All dates"
131
- msgstr ""
132
-
133
- msgid "ID"
134
- msgstr ""
135
-
136
- msgid "Image"
137
- msgstr ""
138
-
139
- msgid "Name"
140
- msgstr ""
141
-
142
- msgid "Optimization Info"
143
- msgstr ""
144
-
145
- msgid "Alternative text"
146
- msgstr ""
147
-
148
- msgid "Title"
149
- msgstr ""
150
-
151
- msgid "Legend"
152
- msgstr ""
153
-
154
- msgid "Description"
155
- msgstr ""
156
-
157
- msgid "Select All"
158
- msgstr ""
159
-
160
- msgid "Filter"
161
- msgstr ""
162
-
163
- msgid "We didn't find any image which needed to be updated regarding meta information"
164
- msgstr ""
165
-
166
- msgid "This image has still not been inserted in any post!"
167
- msgstr ""
168
-
169
- msgid "We found %s which needed to optimize"
170
- msgstr ""
171
-
172
- msgid "Replace?"
173
- msgstr ""
174
-
175
- msgid "Replace All"
176
- msgstr ""
177
-
178
- msgid "The post doesn't exist, please select another one"
179
- msgstr ""
180
-
181
- msgid "There is a problem when update image name"
182
- msgstr ""
183
-
184
- msgid "Image name changed"
185
- msgstr ""
186
-
187
- msgid "Name already exist"
188
- msgstr ""
189
-
190
- msgid "File doesn't existed"
191
- msgstr ""
192
-
193
- msgid "Should not be empty"
194
- msgstr ""
195
-
196
- msgid "There is a problem during image meta update"
197
- msgstr ""
198
-
199
- msgid "This content has been deleted, please check again!"
200
- msgstr ""
201
-
202
- msgid "The post haven't been updated, please check again!"
203
- msgstr ""
204
-
205
- msgid "This image has been removed from the post, please check again!"
206
- msgstr ""
207
-
208
- msgid "Content of the post is empty, please check again"
209
- msgstr ""
210
-
211
- msgid "We can't get traffic rank from Alexa for this website"
212
- msgstr ""
213
-
214
- msgid "Meta Title"
215
- msgstr ""
216
-
217
- msgid "Meta Description"
218
- msgstr ""
219
-
220
- msgid "(no title)"
221
- msgstr ""
222
-
223
- msgid "Edit this item"
224
- msgstr ""
225
-
226
- msgid "Edit"
227
- msgstr ""
228
-
229
- msgid "View"
230
- msgstr ""
231
-
232
- msgid "Preview"
233
- msgstr ""
234
-
235
- msgid "This is a preview of what this content might looks like in Google's search results."
236
- msgstr ""
237
-
238
- msgid "Snippet Preview %s"
239
- msgstr ""
240
-
241
- msgid "Facebook profile URL"
242
- msgstr ""
243
-
244
- msgid "Twitter Username"
245
- msgstr ""
246
-
247
- msgid "Meta block edition"
248
- msgstr ""
249
-
250
- msgid "Modification was saved"
251
- msgstr ""
252
-
253
- msgid "Meta title was not saved"
254
- msgstr ""
255
-
256
- msgid "Meta description was not saved"
257
- msgstr ""
258
-
259
- msgid "Dashboard"
260
- msgstr ""
261
-
262
- msgid "WP Meta SEO"
263
- msgstr ""
264
-
265
- msgid "Content meta"
266
- msgstr ""
267
-
268
- msgid "Image information"
269
- msgstr ""
270
-
271
- msgid "Settings"
272
- msgstr ""
273
-
274
- msgid "Activate meta block edition in content"
275
- msgstr ""
276
-
277
- msgid "This post is not existed or deleted, please select another one"
278
- msgstr ""
279
-
280
- msgid "Well done! This image is perfect now."
281
- msgstr ""
282
-
283
- msgid "Oops! An error occured when updating the post, please try again"
284
- msgstr ""
285
-
286
- msgid "Resize image"
287
- msgstr ""
288
-
289
- msgid "Image sizes are good!"
290
- msgstr ""
291
-
292
- msgid "Fix info in content"
293
- msgstr ""
294
-
295
- msgid "Edit information"
296
- msgstr ""
297
-
298
- msgid "N/A"
299
- msgstr ""
300
-
301
- msgid "Poor"
302
- msgstr ""
303
-
304
- msgid "OK"
305
- msgstr ""
306
-
307
- msgid "Good"
308
- msgstr ""
309
-
310
- msgid "Bad"
311
- msgstr ""
312
-
313
- msgid "Homepage meta title"
314
- msgstr ""
315
-
316
- msgid "Homepage meta description"
317
- msgstr ""
318
-
319
- msgid "Bulk copy"
320
- msgstr ""
321
-
322
- msgid "All content"
323
- msgstr ""
324
-
325
- msgid "Selected posts"
326
- msgstr ""
327
-
328
- msgid "Content title as meta title"
329
- msgstr ""
330
-
331
- msgid "All Images"
332
- msgstr ""
333
-
334
- msgid "Selected images"
335
- msgstr ""
336
-
337
- msgid "Image name as alt text"
338
- msgstr ""
339
-
340
- msgid "Image name as image title"
341
- msgstr ""
342
-
343
- msgid "Warning, you're about to replace existing image alt or tile content, are you sire about that?"
344
- msgstr ""
345
-
346
- msgid "Twitter card type "
347
- msgstr ""
348
-
349
- msgid "Summary"
350
- msgstr ""
351
-
352
- msgid "Summary with large image"
353
- msgstr ""
354
-
355
- msgid "Optimized at"
356
- msgstr ""
357
-
358
- msgid "Wrong resized images"
359
- msgstr ""
360
-
361
- msgid "Latest month new or updated content"
362
- msgstr ""
363
-
364
- msgid "Image data filled (in content)"
365
- msgstr ""
366
-
367
- msgid "More information about WP Meta SEO"
368
- msgstr ""
369
-
370
- msgid "Other plugins from JoomUnited"
371
- msgstr ""
372
-
373
- msgid "Check if a word of this content title is also in a title heading (h1, h2...)"
374
- msgstr ""
375
-
376
- msgid "Check if a word of this content title is also in the text"
377
- msgstr ""
378
-
379
- msgid "Does the page title match with the permalink (URL structure)"
380
- msgstr ""
381
-
382
- msgid "Is the meta title of this page filled?"
383
- msgstr ""
384
-
385
- msgid "Is the meta description of this page filled?"
386
- msgstr ""
387
-
388
- msgid "Check for image HTML resizing in content (usually image resized using handles)"
389
- msgstr ""
390
-
391
- msgid "Check for image Alt text and title"
392
- msgstr ""
393
-
394
- msgid "It's better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
395
- msgstr ""
396
-
397
- msgid "Meta titles are displayed in search engine results as a page title. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
398
- msgstr ""
399
-
400
- msgid "Meta descriptions are displayed in search engine results as a page description. It's a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
401
- msgstr ""
402
-
403
- msgid "Display image at its natural size, do not use HTML resize. It happens usually when you use handles to resize an image. You have a bulk edition tool to fix that."
404
- msgstr ""
405
-
406
- msgid "We recommend to use both alt text and image title. The main advantage is that it helps search engines discover your images and display them in image search results. Plus, these tags improve the accessibility of your site and give more information about your images. Use our bulk image tool to quickly check and fix that."
407
- msgstr ""
408
-
409
- msgid "It is highly recommended to update or add new content on your website quite frequently. At least 3 updated or new content per month would be great :)"
410
- msgstr ""
411
-
412
- msgid "Social networks meta"
413
- msgstr ""
414
-
415
- msgid "Activate social edition"
416
- msgstr ""
417
-
418
- msgid "Permalinks settings"
419
- msgstr ""
420
-
421
- msgid "HTML image resizing"
422
- msgstr ""
423
-
424
- msgid "Image title/alt"
425
- msgstr ""
426
-
427
- msgid "New or updated content"
428
- msgstr ""
429
-
430
- msgid "WP Meta SEO dashboard"
431
- msgstr ""
432
-
433
- msgid "Latest WP Meta SEO News"
434
- msgstr ""
435
-
436
- msgid "All Posts"
437
- msgstr ""
438
-
439
- msgid "We can't get rank of this site from Alexa.com!"
440
- msgstr ""
441
-
442
- msgid "Activate meta block edition below content"
443
- msgstr ""
444
-
445
- msgid "Well! This image is so good now."
446
- msgstr ""
447
-
448
- msgid "The default card type to use"
449
- msgstr ""
450
-
451
- msgid "Be careful you installed 2 extensions doing almost the same thing, please deactivate AIOSEO or Yoast in order to work more clearly!"
452
- msgstr ""
453
-
454
- msgid "We have found that you’re using All In One Pack Plugin, WP Meta SEO can import the meta from this plugin, %s"
455
- msgstr ""
456
-
457
- msgid "File name already given!"
458
- msgstr ""
459
-
460
- msgid "We found 0 image which needed to add or change meta information"
461
- msgstr ""
462
-
463
- msgid "The post is not existed, please choose one another!"
464
- msgstr ""
465
-
466
- msgid "Image name was changed"
467
- msgstr ""
468
-
469
- msgid "File is not existed"
470
- msgstr ""
471
-
472
- msgid "There is a problem when update image meta!"
473
- msgstr ""
474
-
475
- msgid "The post has been deleted before, please check again!"
476
- msgstr ""
477
-
478
- msgid " This is a rendering of what this post might look like in Google's search results."
479
- msgstr ""
480
-
481
- msgid "This post is not existed or deleted, please choose one another!"
482
- msgstr ""
483
-
484
- msgid "Opps! An error occured when updating the post, please try again"
485
- msgstr ""
486
-
487
- msgid "Upload Image"
488
- msgstr ""
489
-
490
- msgid "WP Meta SEO - Page optimization"
491
- msgstr ""
492
-
493
- msgid "Meta title was saved"
494
- msgstr ""
495
-
496
- msgid "Content Meta"
497
- msgstr ""
498
-
499
- msgid "Meta keywords was saved"
500
- msgstr ""
501
-
502
- msgid "Force SEO validation"
503
- msgstr ""
504
-
505
- msgid "Allow user to force on page SEO criteria validation by clicking on the icon"
506
- msgstr ""
507
-
508
- msgid "Meta keywords"
509
- msgstr ""
510
-
511
- msgid "Active meta keywords"
512
- msgstr ""
513
-
514
- msgid "Link text field"
515
- msgstr ""
516
-
517
- msgid "Adds back the missing 'title' field in the Insert/Edit URL box"
518
- msgstr ""
519
-
520
- msgid "Link titles"
521
- msgstr ""
522
-
523
- msgid "The link title attribute does not have any SEO value for links. BUT links titles can influence click behavior for users, which may indirectly affect your SEO performance"
524
- msgstr ""
525
-
526
- msgid "Links title completed"
527
- msgstr ""
528
-
529
- msgid "Saved."
530
- msgstr ""
531
-
532
- msgid "Error."
533
- msgstr ""
534
-
535
- msgid "Source"
536
- msgstr ""
537
-
538
- msgid "URL"
539
- msgstr ""
540
-
541
- msgid "Link title"
542
- msgstr ""
543
-
544
- msgid "Link text"
545
- msgstr ""
546
-
547
- msgid "Link editor"
548
- msgstr ""
549
-
550
- msgid "Meta title as page title"
551
- msgstr ""
552
-
553
- msgid "When meta title is filled use it as page title instead of the content title"
554
- msgstr ""
555
-
556
- msgid "It’s better using a permalink structure that is adding in your URL the category name and content title. This parameter can be changed in Settings > Permalinks WordPress menu. Tag recommended is %category%/%postname%"
557
- msgstr ""
558
-
559
- msgid "Meta descriptions are displayed in search engine results as a page description. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the meta information on your most popular pages."
560
- msgstr ""
561
-
562
- msgid "Meta titles are displayed in search engine results as a page title. It’s a good thing for SEO to have some custom and attractive ones. Be sure to fill at least the met information on your most popular pages"
563
- msgstr ""
564
-
565
- msgid "A website with a bunch of 404 errors doesn’t provide a good user experience, which is significantly important in content marketing and SEO. We recommend to use our internal broken link checker and redirect tool to fix all the 404 error you can periodically."
566
- msgstr ""
567
-
568
- msgid "Index internal broken links"
569
- msgstr ""
570
-
571
- msgid "Type or Link text"
572
- msgstr ""
573
-
574
- msgid "Hits number"
575
- msgstr ""
576
-
577
- msgid "Status"
578
- msgstr ""
579
-
580
- msgid "Allow search engines robots to index this content, as default your content is indexed"
581
- msgstr ""
582
-
583
- msgid "Provides show or do not show this page in search results in search results."
584
- msgstr ""
585
-
586
- msgid "Index"
587
- msgstr ""
588
-
589
- msgid "Follow"
590
- msgstr ""
591
-
592
- msgid "Re-index content links"
593
- msgstr ""
594
-
595
- msgid "Apply"
596
- msgstr ""
597
-
598
- msgid "-- Selection --"
599
- msgstr ""
600
-
601
- msgid "Follow selected"
602
- msgstr ""
603
-
604
- msgid "Nofollow selected"
605
- msgstr ""
606
-
607
- msgid "Follow all"
608
- msgstr ""
609
-
610
- msgid "Nofollow all"
611
- msgstr ""
612
-
613
- msgid "Link source"
614
- msgstr ""
615
-
616
- msgid "Internal"
617
- msgstr ""
618
-
619
- msgid "External"
620
- msgstr ""
621
-
622
- msgid "Post/Page follow"
623
- msgstr ""
624
-
625
- msgid "Post/Page index"
626
- msgstr ""
627
-
628
- msgid "Use ImageRecycle image compression plugin to activate this feature"
629
- msgstr ""
630
-
631
- msgid "Images represent around 60% of a web page weight. An image compression reduce the image size by up to 70% while preserving the same visual quality. Small loading time is great for SEO!"
632
- msgstr ""
633
-
634
- msgid "Product Type"
635
- msgstr ""
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
readme.txt CHANGED
@@ -1,9 +1,9 @@
1
- === WP Meta SEO ===
2
  Contributors: JoomUnited
3
  Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
4
  Requires at least: 4.0
5
  Tested up to: 4.7.2
6
- Stable tag: 3.2.5
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
@@ -254,170 +254,163 @@ It could be! if you have a lot of pages that need to be indexed with no specific
254
 
255
  == Changelog ==
256
 
 
 
 
 
257
  = 3.2.5 =
258
- * Check DOM PHP activation install to avoid fatal error
259
- * Fix image inforamtion edition with greek characters
260
 
261
  = 3.2.4 =
262
- * WP Meta SEO Addon compatibility
263
- * Fix conflict with DIVI layout injector plugin
264
 
265
  = 3.2.3 =
266
- * Fix image resize list does not refresh
267
- * Fix meta image text replaced by image information
268
- * Fix dashboard Alexa rank display
269
- * Fix sharp URL suffix are detected as 404 by the redirect manager
270
- * Fix phone numbers with "+" are detected as 404 by the redirect manager
271
- * Fix German caracters are broken in the link manager
272
 
273
  = 3.2.2 =
274
- * Fix image information edition with a quote becomes empty
275
- * Fix meta edition character count does not refresh using AJAX
276
 
277
  = 3.2.1 =
278
- * Fix compatibility with WP Speed of Light plugin: https://www.joomunited.com/wordpress-products/wp-speed-of-light
279
 
280
  = 3.2.0 =
281
- * Enable Google Analytics tracking with token access
282
- * Tracking options to exclude WordPress user groups from analytics
283
- * File download statistics activation
284
- * Display Analytics statistics: session, users, organic...
285
-
286
- = 3.1.0 =
287
- * Whole code optimization regarding plugin performance
288
- * Add SQL query optimization regarding plugin performance
289
- * Add Sanitize elements prints on frontend (XSS)
290
- * Test and optimize the plugin to work on website with huge amount of content and small resources
291
- * Fix save and generate new sitemap
292
- * Fix warning with PHP 7.0
293
 
294
  = 3.0.2 =
295
- * Add Import meta from Yoast premium plugin
296
- * Fix font called from http instead of https from dashboard
297
 
298
  = 3.0.1 =
299
- * Fix XML menu generation don't handle menu levels
300
- * Fix mailto links are indexed as 404 error in the redirect manager
301
- * Fix a php warning when link editor is activated in editor
302
- * Fix secure code
303
 
304
  = 3.0.0 =
305
- * Add XML sitemap feature
306
- * Add HTML sitemap feature
307
- * Add sitemap source: menus (any content), post, page, category, author
308
- * Add HTML sitemap content position in page
309
- * Add XML sitemap copy option on root option
310
- * Add XML sitemap link in robot.txt option
311
- * Add help text for all the sitemap parameters
312
- * Add help text for all the global parameters
313
- * Add AJAX sitemap regeneration
314
 
315
  = 2.2.1 =
316
- * Update sql sentences to improve query speed
317
 
318
  = 2.2.0 =
319
- * Follow/Nofollow bulk link edition
320
- * Link re-index tool from the bulk link editor
321
- * Follow/Nofollow on Wordpress content (onpage SEO)
322
- * Index/Noindex on Wordpress content (onpage SEO)
323
 
324
  = 2.1.0 =
325
- * Add ImageRecycle images and PDF compression integration (www.imagerecycle.com)
326
 
327
  = 2.0.3 =
328
- * Fix On page analysis return wrong result on header title in content
329
- * Fix Update language on image bluk edit view
330
 
331
  = 2.0.2 =
332
- * Fix Detect new type of 404 and add tooltip
333
- * Fix comment content not detected
334
- * Fix Autosaving too fast in safari or firefox
335
 
336
  = 2.0.1 =
337
- * Fix Googlefont style on Safari browser
338
 
339
  = 2.0.0 =
340
- * Add 404 and redirect manager
341
- * Add Options to redirect all 404 to home page
342
- * Add Setup 404 page as: WP Meta SEO page, custom page, defulat page
343
 
344
  = 1.7.3 =
345
- * Fix og: link broken (facebook)
346
 
347
  = 1.7.2 =
348
- * Page title as content title or as SEO meta title (option)
349
 
350
  = 1.7.1 =
351
- * Fix RSS feed is broken with WP Meta SEO 1.7.0
352
- * Edit separatelly the content title from the meta title (for search engine)
353
 
354
  = 1.7.0 =
355
- * Add link SEO title field in link editor tool
356
- * Add a SEO bulk edition view on your links titles (of all your content)
357
- * Automatic meta SEO addition for category view: add category title as meta title and category description as meta description
358
- * Add SEO dashboard check for link titles
359
- * Fix WooCommerce meta description and title in category view (automatic)
360
- * Fix WP Meta SEO language to be conform to plugin directory translation tool
361
 
362
  = 1.6.0 =
363
- * Add meta keywords edition in bulk editor
364
- * Add option to for SEO criteria validation
365
 
366
  = 1.5.1 =
367
- * Fix home page meta not working on some themes
368
- * Fix break foreach when search title in SEO content (title in heading)
369
 
370
  = 1.5.0 =
371
- * Add help tooltip to explain on page validation SEO criteria
372
- * Add help tooltip to explain dashboard SEO parameters
373
- * Put snippet preview title in a column on SEO bulk view edition
374
- * Add SEO and check notification for robot.txt that lock search engine
375
- * Update EN and FR language files
376
 
377
  = 1.4.0 =
378
- * Bulk copy new option: content title to meta title
379
- * Bulk copy new option: image name to alt text
380
- * Bulk copy new option: image name to image title
381
- * Fix twitter card on SEO on page optimization
382
- * Fix SEO meta empty in some themes
383
 
384
  = 1.3.0 =
385
- * New SEO check dashboard
386
- * Check for SEO permalinks
387
- * Check for meta titles
388
- * Check for meta description
389
- * Check for image HTML resizing
390
- * Check for image SEO: title, alt and description
391
- * Check for new content
392
 
393
  = 1.2.0 =
394
- * Change language to po/mo files
395
- * Include .pot file and French language
396
- * Setting for home page meta
397
- * Bigger edit meta boxes
398
- * Update icon of notification in meta view
399
 
400
  = 1.1.0 =
401
- * On page SEO analysis
402
- * Social sharing custom content
403
-
404
- = 1.0.5 =
405
- * Title tag value is empty
406
 
407
  = 1.0.4 =
408
- * Check empty array
409
 
410
  = 1.0.3 =
411
- * Escape meta title and meta description
412
 
413
  = 1.0.2 =
414
- * Fix filter broken and icons broken
415
 
416
  = 1.0.1 =
417
- * display (no title) in column title if post is no titled
418
 
419
  = 1.0.0 =
420
- * Initial release
 
421
 
422
 
423
  == Upgrade Notice ==
1
+ === WP Meta SEO ===
2
  Contributors: JoomUnited
3
  Tags: google, webmaster tools, keywords, meta, meta description, meta keywords, meta title, robots meta, search engine optimization, seo, wordpress seo, yahoo, image optimization, image resize, custom post seo, redirect, redirection, 301, broken link
4
  Requires at least: 4.0
5
  Tested up to: 4.7.2
6
+ Stable tag: 3.2.6
7
  License: GPLv2 or later
8
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
9
 
254
 
255
  == Changelog ==
256
 
257
+ = 3.2.6 =
258
+ * Add : Add builtin translation tool
259
+ * Fix : Wrong function used to get description length
260
+
261
  = 3.2.5 =
262
+ * Add : Check DOM PHP activation install to avoid fatal error
263
+ * Fix : Image information edition with greek characters
264
 
265
  = 3.2.4 =
266
+ * Add : WP Meta SEO Addon compatibility
267
+ * Fix : Conflict with DIVI layout injector plugin
268
 
269
  = 3.2.3 =
270
+ * Fix : Image resize list does not refresh
271
+ * Fix : Meta image text replaced by image information
272
+ * Fix : Dashboard Alexa rank display
273
+ * Fix : Sharp URL suffix are detected as 404 by the redirect manager
274
+ * Fix : Phone numbers with '+' are detected as 404 by the redirect manager
275
+ * Fix : German characters are broken in the link manager
276
 
277
  = 3.2.2 =
278
+ * Fix : Image information edition with a quote becomes empty
279
+ * Fix : Meta edition character count does not refresh using AJAX
280
 
281
  = 3.2.1 =
282
+ * Add : Compatibility with WP Speed of Light plugin: https://www.joomunited.com/wordpress-products/wp-speed-of-light
283
 
284
  = 3.2.0 =
285
+ * Add : Enable Google Analytics tracking with token access
286
+ * Add : Tracking options to exclude WordPress user groups from analytics
287
+ * Add : File download statistics activation
288
+ * Add : Display Analytics statistics: session, users, organic...
 
 
 
 
 
 
 
 
289
 
290
  = 3.0.2 =
291
+ * Add : Add Import meta from Yoast premium plugin
292
+ * Fix : Font called from http instead of https from dashboard
293
 
294
  = 3.0.1 =
295
+ * Fix : XML menu generation don't handle menu levels
296
+ * Fix : Mailto links are indexed as 404 error in the redirect manager
297
+ * Fix : PHP warning when link editor is activated in editor
298
+ * Fix : Secure code
299
 
300
  = 3.0.0 =
301
+ * Add : Add XML sitemap feature
302
+ * Add : Add HTML sitemap feature
303
+ * Add : Add sitemap source: menus (any content), post, page, category, author
304
+ * Add : Add HTML sitemap content position in page
305
+ * Add : Add XML sitemap copy option on root option
306
+ * Add : Add XML sitemap link in robot.txt option
307
+ * Add : Add help text for all the sitemap parameters
308
+ * Add : Add help text for all the global parameters
309
+ * Add : Add AJAX sitemap regeneration
310
 
311
  = 2.2.1 =
312
+ * Add : Update sql sentences to improve query speed
313
 
314
  = 2.2.0 =
315
+ * Add : Follow/Nofollow bulk link edition
316
+ * Add : Link re-index tool from the bulk link editor
317
+ * Add : Follow/Nofollow on Wordpress content (onpage SEO)
318
+ * Add : Index/Noindex on Wordpress content (onpage SEO)
319
 
320
  = 2.1.0 =
321
+ * Add : Add ImageRecycle images and PDF compression integration (https://www.imagerecycle.com)
322
 
323
  = 2.0.3 =
324
+ * Fix : On page analysis return wrong result on header title in content
325
+ * Fix : Update language on image bulk edit view
326
 
327
  = 2.0.2 =
328
+ * Fix : Detect new type of 404 and add tooltip
329
+ * Fix : Comment content not detected
330
+ * Fix : Autosaving too fast in safari or firefox
331
 
332
  = 2.0.1 =
333
+ * Fix : Google font style on Safari browser
334
 
335
  = 2.0.0 =
336
+ * Add : Add 404 and redirect manager
337
+ * Add : Add Options to redirect all 404 to home page
338
+ * Add : Add Setup 404 page as: WP Meta SEO page, custom page, default page
339
 
340
  = 1.7.3 =
341
+ * Fix : og: link broken (facebook)
342
 
343
  = 1.7.2 =
344
+ * Add : Page title as content title or as SEO meta title (option)
345
 
346
  = 1.7.1 =
347
+ * Add : Edit separately the content title from the meta title (for search engine)
348
+ * Fix : Fix RSS feed is broken with WP Meta SEO 1.7.0
349
 
350
  = 1.7.0 =
351
+ * Add : Add link SEO title field in link editor tool
352
+ * Add : Add a SEO bulk edition view on your links titles (of all your content)
353
+ * Add : Automatic meta SEO addition for category view: add category title as meta title and category description as meta description
354
+ * Add : Add SEO dashboard check for link titles
355
+ * Fix : WooCommerce meta description and title in category view (automatic)
356
+ * Fix : WP Meta SEO language to be conform to plugin directory translation tool
357
 
358
  = 1.6.0 =
359
+ * Add : Add meta keywords edition in bulk editor
360
+ * Add : Add option to for SEO criteria validation
361
 
362
  = 1.5.1 =
363
+ * Fix : Home page meta not working on some themes
364
+ * Fix : Break foreach when search title in SEO content (title in heading)
365
 
366
  = 1.5.0 =
367
+ * Add : Add help tooltip to explain on page validation SEO criteria
368
+ * Add : Add help tooltip to explain dashboard SEO parameters
369
+ * Add : Put snippet preview title in a column on SEO bulk view edition
370
+ * Add : Add SEO and check notification for robot.txt that lock search engine
371
+ * Add : Update EN and FR language files
372
 
373
  = 1.4.0 =
374
+ * Add : Bulk copy new option: content title to meta title
375
+ * Add : Bulk copy new option: image name to alt text
376
+ * Add : Bulk copy new option: image name to image title
377
+ * Fix : Twitter card on SEO on page optimization
378
+ * Fix : SEO meta empty in some themes
379
 
380
  = 1.3.0 =
381
+ * Add : New SEO check dashboard
382
+ * Add : Check for SEO permalinks
383
+ * Add : Check for meta description
384
+ * Add : Check for image HTML resizing
385
+ * Add : Check for image SEO: title, alt and description
386
+ * Add : Check for new content
 
387
 
388
  = 1.2.0 =
389
+ * Add : Change language to po/mo files
390
+ * Add : Include .pot file and French language
391
+ * Add : Setting for home page meta
392
+ * Add : Bigger edit meta boxes
393
+ * Add : Update icon of notification in meta view
394
 
395
  = 1.1.0 =
396
+ * Add : On page SEO analysis
397
+ * Add : Social sharing custom content
 
 
 
398
 
399
  = 1.0.4 =
400
+ * Fix : Check empty array
401
 
402
  = 1.0.3 =
403
+ * Fix : Escape meta title and meta description
404
 
405
  = 1.0.2 =
406
+ * Fix : Filter broken and icons broken
407
 
408
  = 1.0.1 =
409
+ * Fix : display (no title) in column title if post is no titled
410
 
411
  = 1.0.0 =
412
+ * Add : Initial release
413
+
414
 
415
 
416
  == Upgrade Notice ==
wp-meta-seo.php CHANGED
@@ -4,7 +4,7 @@
4
  * Plugin Name: WP Meta SEO
5
  * Plugin URI: http://www.joomunited.com/wordpress-products/wp-meta-seo
6
  * Description: WP Meta SEO is a plugin for WordPress to fill meta for content, images and main SEO info in a single view.
7
- * Version: 3.2.5
8
  * Text Domain: wp-meta-seo
9
  * Domain Path: /languages
10
  * Author: JoomUnited
@@ -36,6 +36,35 @@ if (!function_exists('add_action')) {
36
  exit;
37
  }
38
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
39
  if (!defined('WPMETASEO_MINIMUM_WP_VERSION'))
40
  define('WPMETASEO_MINIMUM_WP_VERSION', '3.1');
41
  if (!defined('WPMETASEO_PLUGIN_URL'))
@@ -46,7 +75,7 @@ if (!defined('URL'))
46
  define('URL', get_site_url());
47
 
48
  if (!defined('WPMSEO_VERSION')) {
49
- define('WPMSEO_VERSION', '3.2.5');
50
  }
51
 
52
  if (!defined('WPMS_CLIENTID')) {
4
  * Plugin Name: WP Meta SEO
5
  * Plugin URI: http://www.joomunited.com/wordpress-products/wp-meta-seo
6
  * Description: WP Meta SEO is a plugin for WordPress to fill meta for content, images and main SEO info in a single view.
7
+ * Version: 3.2.6
8
  * Text Domain: wp-meta-seo
9
  * Domain Path: /languages
10
  * Author: JoomUnited
36
  exit;
37
  }
38
 
39
+ if (version_compare(PHP_VERSION, '5.3', '<')) {
40
+ if( !function_exists('wpms_disable_plugin') ){
41
+ function wpms_disable_plugin(){
42
+ if ( current_user_can('activate_plugins') && is_plugin_active( plugin_basename( __FILE__ ) ) ) {
43
+ deactivate_plugins( __FILE__ );
44
+ unset( $_GET['activate'] );
45
+ }
46
+ }
47
+ }
48
+
49
+ if( !function_exists('wpms_show_error') ){
50
+ function wpms_show_error(){
51
+ echo '<div class="error"><p><strong>WP Meta SEO</strong> need at least PHP 5.3 version, please update php before installing the plugin.</p></div>';
52
+ }
53
+ }
54
+
55
+ //Add actions
56
+ add_action( 'admin_init', 'wpms_disable_plugin' );
57
+ add_action( 'admin_notices', 'wpms_show_error' );
58
+
59
+ //Do not load anything more
60
+ return;
61
+ }
62
+
63
+ //Include the jutranslation helpers
64
+ include_once('jutranslation' . DIRECTORY_SEPARATOR . 'jutranslation.php');
65
+ \Joomunited\WPMetaSEO\Jutranslation\Jutranslation::init(__FILE__, 'wp-meta-seo', 'WP Meta SEO', 'wp-meta-seo', DIRECTORY_SEPARATOR . 'languages' . DIRECTORY_SEPARATOR . 'wp-meta-seo-en_US.mo');
66
+
67
+
68
  if (!defined('WPMETASEO_MINIMUM_WP_VERSION'))
69
  define('WPMETASEO_MINIMUM_WP_VERSION', '3.1');
70
  if (!defined('WPMETASEO_PLUGIN_URL'))
75
  define('URL', get_site_url());
76
 
77
  if (!defined('WPMSEO_VERSION')) {
78
+ define('WPMSEO_VERSION', '3.2.6');
79
  }
80
 
81
  if (!defined('WPMS_CLIENTID')) {