ShortPixel Image Optimizer - Version 4.2.0

Version Description

  • multilanguage support
  • add retinas count to the ShortPixel Compression column
  • add option not to automatically optimize Media Library images when added
  • fix the size bug happening when optimizing main image then optimizing only thumbnails with resize active
  • restrict log messages to SHORTPIXEL_DEBUG instead of WP_DEBUG
  • fix compatibility with WP < 3.9
  • fix compatibility with watermarking plugins like Image Watermark
  • fix compatibility with WPBakery Visual Composer
Download this release

Release Info

Developer ShortPixel
Plugin Icon 128x128 ShortPixel Image Optimizer
Version 4.2.0
Comparing to
See all releases

Code changes from version 4.1.7 to 4.2.0

class/db/shortpixel-custom-meta-dao.php CHANGED
@@ -184,11 +184,11 @@ class ShortPixelCustomMetaDao {
184
  WpShortPixelDb::checkCustomTables(); // check if custom tables are created, if not, create them
185
  $addedFolder = ShortPixelFolder::checkFolder($path, $uploadPath);
186
  if($this->getFolder($addedFolder)) {
187
- return "Folder already added.";
188
  }
189
  if(strpos($addedFolder, $rootPath) !== 0) {
190
 
191
- return( "The $addedFolder folder cannot be processed as it's not inside the root path of your website.");
192
  }
193
  $folder = new ShortPixelFolder(array("path" => $addedFolder));
194
  try {
@@ -197,11 +197,11 @@ class ShortPixelCustomMetaDao {
197
  return $ex->getMessage();
198
  }
199
  if(ShortPixelMetaFacade::isMediaSubfolder($folder->getPath())) {
200
- return "This folder contains Media Library images. To optimize Media Library images please go to <a href='upload.php?mode=list'>Media Library list view</a> or to <a href='upload.php?page=wp-short-pixel-bulk'>SortPixel Bulk page</a>.";
201
  }
202
  $folderMsg = $this->saveFolder($folder);
203
  if(!$folder->getId()) {
204
- throw new Exception("Inserted folder doesn't have an ID!");
205
  }
206
  //die(var_dump($folder));
207
  if(!$folderMsg) {
@@ -221,7 +221,7 @@ class ShortPixelCustomMetaDao {
221
  if($addedPath) {
222
  //first check if it does contain the Backups Folder - we don't allow that
223
  if(ShortPixelFolder::checkFolderIsSubfolder(SP_BACKUP_FOLDER, $addedPath)) {
224
- return "This folder contains the ShortPixel Backups. Please select a different folder.";
225
  }
226
  $customFolderPaths = array_map(array('ShortPixelFolder','path'), $this->getFolders());
227
  $allFolders = $this->getFolders(true);
@@ -244,10 +244,10 @@ class ShortPixelCustomMetaDao {
244
  }
245
  }
246
  //var_dump($allFolders);
247
- return "Folder already included in {$parent}.";
248
  }
249
  } else {
250
- return "Folder does not exist.";
251
  }
252
  }
253
 
184
  WpShortPixelDb::checkCustomTables(); // check if custom tables are created, if not, create them
185
  $addedFolder = ShortPixelFolder::checkFolder($path, $uploadPath);
186
  if($this->getFolder($addedFolder)) {
187
+ return __('Folder already added.','shortpixel');
188
  }
189
  if(strpos($addedFolder, $rootPath) !== 0) {
190
 
191
+ return( sprintf(__('The %s folder cannot be processed as it\'s not inside the root path of your website.','shortpixel'),$addedFolder));
192
  }
193
  $folder = new ShortPixelFolder(array("path" => $addedFolder));
194
  try {
197
  return $ex->getMessage();
198
  }
199
  if(ShortPixelMetaFacade::isMediaSubfolder($folder->getPath())) {
200
+ return __('This folder contains Media Library images. To optimize Media Library images please go to <a href="upload.php?mode=list">Media Library list view</a> or to <a href="upload.php?page=wp-short-pixel-bulk">SortPixel Bulk page</a>.','shortpixel');
201
  }
202
  $folderMsg = $this->saveFolder($folder);
203
  if(!$folder->getId()) {
204
+ throw new Exception(__('Inserted folder doesn\'t have an ID!','shortpixel'));
205
  }
206
  //die(var_dump($folder));
207
  if(!$folderMsg) {
221
  if($addedPath) {
222
  //first check if it does contain the Backups Folder - we don't allow that
223
  if(ShortPixelFolder::checkFolderIsSubfolder(SP_BACKUP_FOLDER, $addedPath)) {
224
+ return __('This folder contains the ShortPixel Backups. Please select a different folder.','shortpixel');
225
  }
226
  $customFolderPaths = array_map(array('ShortPixelFolder','path'), $this->getFolders());
227
  $allFolders = $this->getFolders(true);
244
  }
245
  }
246
  //var_dump($allFolders);
247
+ return sprintf(__('Folder already included in %s.','shortpixel'),$parent);
248
  }
249
  } else {
250
+ return __('Folder does not exist.','shortpixel');
251
  }
252
  }
253
 
class/db/shortpixel-meta-facade.php CHANGED
@@ -38,6 +38,7 @@ class ShortPixelMetaFacade {
38
  $this->meta = $this->spMetaDao->getMeta($this->ID);
39
  } else {
40
  $rawMeta = wp_get_attachment_metadata($this->ID);
 
41
  $this->meta = self::rawMetaToMeta($this->ID, $rawMeta);
42
  $this->rawMeta = $rawMeta;
43
  }
@@ -54,6 +55,7 @@ class ShortPixelMetaFacade {
54
  "message" =>(isset($rawMeta["ShortPixelImprovement"]) ? $rawMeta["ShortPixelImprovement"] : null),
55
  "compressionType" =>(isset($rawMeta["ShortPixel"]["type"]) ? ($rawMeta["ShortPixel"]["type"] == "lossy" ? 1 : 0) : null),
56
  "thumbsOpt" =>(isset($rawMeta["ShortPixel"]["thumbsOpt"]) ? $rawMeta["ShortPixel"]["thumbsOpt"] : null),
 
57
  "thumbsTodo" =>(isset($rawMeta["ShortPixel"]["thumbsTodo"]) ? $rawMeta["ShortPixel"]["thumbsTodo"] : false),
58
  "backup" => !isset($rawMeta['ShortPixel']['NoBackup']),
59
  "status" => (!isset($rawMeta["ShortPixel"]) ? 0
@@ -73,6 +75,12 @@ class ShortPixelMetaFacade {
73
  }
74
  }
75
 
 
 
 
 
 
 
76
  function updateMeta($newMeta = null) {
77
  if($newMeta) {
78
  $this->meta = $newMeta;
@@ -87,14 +95,14 @@ class ShortPixelMetaFacade {
87
  $duplicates = ShortPixelMetaFacade::getWPMLDuplicates($this->ID);
88
  foreach($duplicates as $_ID) {
89
  $rawMeta = wp_get_attachment_metadata($_ID);
90
- if(!is_array($rawMeta)) {
91
- $rawMeta = array("previous_meta" => $rawMeta, 'ShortPixel' => array());
92
- }
93
  $rawMeta['ShortPixel']['type'] = ($this->meta->getCompressionType() == 1 ? "lossy" : "lossless");
94
  $rawMeta['ShortPixel']['exifKept'] = $this->meta->getKeepExif();
95
  $rawMeta['ShortPixel']['date'] = date("Y-m-d", strtotime($this->meta->getTsOptimized()));
96
  //thumbs were processed if settings or if they were explicitely requested
97
  $rawMeta['ShortPixel']['thumbsOpt'] = $this->meta->getThumbsOpt();
 
98
  //if thumbsTodo - this means there was an explicit request to process thumbs for an image that was previously processed without
99
  // don't update the ShortPixelImprovement ratio as this is only calculated based on main image
100
  if($this->meta->getThumbsTodo()) {
@@ -132,6 +140,7 @@ class ShortPixelMetaFacade {
132
  $this->meta->setRetries($this->meta->getRetries() + $count);
133
  $this->updateMeta();
134
  } else {
 
135
  $this->rawMeta['ShortPixel']['Retries'] = isset($this->rawMeta['ShortPixel']['Retries']) ? $this->rawMeta['ShortPixel']['Retries'] + $count : $count;
136
  $this->meta->setRetries($this->rawMeta['ShortPixel']['Retries']);
137
  wp_update_attachment_metadata($this->ID, $this->rawMeta);
@@ -155,7 +164,7 @@ class ShortPixelMetaFacade {
155
  }
156
 
157
  function setError($errorCode, $errorMessage) {
158
- $this->meta->setMessage('Error: <i>' . $errorMessage . '</i>');
159
  $this->meta->setStatus($errorCode);
160
  if($this->type == self::CUSTOM_TYPE) {
161
  if($errorCode == ShortPixelAPI::ERR_FILE_NOT_FOUND) {
@@ -170,7 +179,19 @@ class ShortPixelMetaFacade {
170
  }
171
  }
172
 
173
- public function getURLsAndPATHs($processThumbnails, $onlyThumbs = false) {
 
 
 
 
 
 
 
 
 
 
 
 
174
  if($this->type == self::CUSTOM_TYPE) {
175
  $meta = $this->getMeta();
176
  $urlList[] = str_replace(get_home_path(), network_site_url("/"), $meta->getPath());
@@ -186,7 +207,9 @@ class ShortPixelMetaFacade {
186
  $urlList[] = $url;
187
  $path = get_attached_file($this->ID);//get the full file PATH
188
  $filePath[] = $path;
189
- $this->addRetina($path, $url, $filePath, $urlList);
 
 
190
 
191
  $meta = $this->getMeta();
192
  $sizes = $meta->getThumbs();
@@ -201,7 +224,9 @@ class ShortPixelMetaFacade {
201
  $tPath = str_replace(ShortPixelAPI::MB_basename($filePath[0]), $thumbnailInfo['file'], $path);
202
  $urlList[] = $tUrl;
203
  $filePath[] = $tPath;
204
- $this->addRetina($tPath, $tUrl, $filePath, $urlList);
 
 
205
  }
206
  }
207
  if(!count($sizes)) {
@@ -226,6 +251,11 @@ class ShortPixelMetaFacade {
226
  }
227
  }
228
 
 
 
 
 
 
229
  public static function getWPMLDuplicates( $id ) {
230
  global $wpdb;
231
 
38
  $this->meta = $this->spMetaDao->getMeta($this->ID);
39
  } else {
40
  $rawMeta = wp_get_attachment_metadata($this->ID);
41
+ $this->sanitizeMeta($rawMeta);
42
  $this->meta = self::rawMetaToMeta($this->ID, $rawMeta);
43
  $this->rawMeta = $rawMeta;
44
  }
55
  "message" =>(isset($rawMeta["ShortPixelImprovement"]) ? $rawMeta["ShortPixelImprovement"] : null),
56
  "compressionType" =>(isset($rawMeta["ShortPixel"]["type"]) ? ($rawMeta["ShortPixel"]["type"] == "lossy" ? 1 : 0) : null),
57
  "thumbsOpt" =>(isset($rawMeta["ShortPixel"]["thumbsOpt"]) ? $rawMeta["ShortPixel"]["thumbsOpt"] : null),
58
+ "retinasOpt" =>(isset($rawMeta["ShortPixel"]["retinasOpt"]) ? $rawMeta["ShortPixel"]["retinasOpt"] : null),
59
  "thumbsTodo" =>(isset($rawMeta["ShortPixel"]["thumbsTodo"]) ? $rawMeta["ShortPixel"]["thumbsTodo"] : false),
60
  "backup" => !isset($rawMeta['ShortPixel']['NoBackup']),
61
  "status" => (!isset($rawMeta["ShortPixel"]) ? 0
75
  }
76
  }
77
 
78
+ function sanitizeMeta($rawMeta){
79
+ if(!is_array($rawMeta)) {
80
+ $rawMeta = array("previous_meta" => $rawMeta, 'ShortPixel' => array());
81
+ }
82
+ }
83
+
84
  function updateMeta($newMeta = null) {
85
  if($newMeta) {
86
  $this->meta = $newMeta;
95
  $duplicates = ShortPixelMetaFacade::getWPMLDuplicates($this->ID);
96
  foreach($duplicates as $_ID) {
97
  $rawMeta = wp_get_attachment_metadata($_ID);
98
+ $this->sanitizeMeta($rawMeta);
99
+
 
100
  $rawMeta['ShortPixel']['type'] = ($this->meta->getCompressionType() == 1 ? "lossy" : "lossless");
101
  $rawMeta['ShortPixel']['exifKept'] = $this->meta->getKeepExif();
102
  $rawMeta['ShortPixel']['date'] = date("Y-m-d", strtotime($this->meta->getTsOptimized()));
103
  //thumbs were processed if settings or if they were explicitely requested
104
  $rawMeta['ShortPixel']['thumbsOpt'] = $this->meta->getThumbsOpt();
105
+ $rawMeta['ShortPixel']['retinasOpt'] = $this->meta->getRetinasOpt();
106
  //if thumbsTodo - this means there was an explicit request to process thumbs for an image that was previously processed without
107
  // don't update the ShortPixelImprovement ratio as this is only calculated based on main image
108
  if($this->meta->getThumbsTodo()) {
140
  $this->meta->setRetries($this->meta->getRetries() + $count);
141
  $this->updateMeta();
142
  } else {
143
+ if(!isset($this->rawMeta['ShortPixel'])) {$this->rawMeta['ShortPixel'] = array();}
144
  $this->rawMeta['ShortPixel']['Retries'] = isset($this->rawMeta['ShortPixel']['Retries']) ? $this->rawMeta['ShortPixel']['Retries'] + $count : $count;
145
  $this->meta->setRetries($this->rawMeta['ShortPixel']['Retries']);
146
  wp_update_attachment_metadata($this->ID, $this->rawMeta);
164
  }
165
 
166
  function setError($errorCode, $errorMessage) {
167
+ $this->meta->setMessage(__('Error','shortpixel') . ': <i>' . $errorMessage . '</i>');
168
  $this->meta->setStatus($errorCode);
169
  if($this->type == self::CUSTOM_TYPE) {
170
  if($errorCode == ShortPixelAPI::ERR_FILE_NOT_FOUND) {
179
  }
180
  }
181
 
182
+ function setMessage($message) {
183
+ $this->meta->setMessage($message);
184
+ $this->meta->setStatus(-1);
185
+ if($this->type == self::CUSTOM_TYPE) {
186
+ $this->spMetaDao->update($this->meta);
187
+ } else {
188
+ $this->rawMeta['ShortPixelImprovement'] = $this->meta->getMessage();
189
+ unset($this->rawMeta['ShortPixel']['WaitingProcessing']);
190
+ wp_update_attachment_metadata($this->ID, $this->rawMeta);
191
+ }
192
+ }
193
+
194
+ public function getURLsAndPATHs($processThumbnails, $onlyThumbs = false, $addRetina = true) {
195
  if($this->type == self::CUSTOM_TYPE) {
196
  $meta = $this->getMeta();
197
  $urlList[] = str_replace(get_home_path(), network_site_url("/"), $meta->getPath());
207
  $urlList[] = $url;
208
  $path = get_attached_file($this->ID);//get the full file PATH
209
  $filePath[] = $path;
210
+ if($addRetina) {
211
+ $this->addRetina($path, $url, $filePath, $urlList);
212
+ }
213
 
214
  $meta = $this->getMeta();
215
  $sizes = $meta->getThumbs();
224
  $tPath = str_replace(ShortPixelAPI::MB_basename($filePath[0]), $thumbnailInfo['file'], $path);
225
  $urlList[] = $tUrl;
226
  $filePath[] = $tPath;
227
+ if($addRetina) {
228
+ $this->addRetina($tPath, $tUrl, $filePath, $urlList);
229
+ }
230
  }
231
  }
232
  if(!count($sizes)) {
251
  }
252
  }
253
 
254
+ public static function isRetina($path) {
255
+ $baseName = pathinfo(ShortPixelAPI::MB_basename($path), PATHINFO_FILENAME);
256
+ return strpos($baseName, "@2x") == strlen($baseName) - 3;
257
+ }
258
+
259
  public static function getWPMLDuplicates( $id ) {
260
  global $wpdb;
261
 
class/model/shortpixel-folder.php CHANGED
@@ -73,7 +73,7 @@ class ShortPixelFolder extends ShortPixelEntity{
73
  }
74
  $ignore = array('.','..');
75
  if(!is_writable($path)) {
76
- throw new SpFileRightsException("Folder " . $path . " is not writeable. Please check permissions and try again.");
77
  }
78
  $files = scandir($path);
79
  foreach($files as $t) {
@@ -146,7 +146,7 @@ class ShortPixelFolder extends ShortPixelEntity{
146
  protected static function getFolderContentsChangeDateRecursive($path, $mtime, $refMtime) {
147
  $ignore = array('.','..');
148
  if(!is_writable($path)) {
149
- throw new SpFileRightsException("Folder " . $path . " is not writeable. Please check permissions and try again.");
150
  }
151
  $files = scandir($path);
152
  $mtime = max($mtime, filemtime($path));
73
  }
74
  $ignore = array('.','..');
75
  if(!is_writable($path)) {
76
+ throw new SpFileRightsException(sprintf(__('Folder %s is not writeable. Please check permissions and try again.','shortpixel'),$path));
77
  }
78
  $files = scandir($path);
79
  foreach($files as $t) {
146
  protected static function getFolderContentsChangeDateRecursive($path, $mtime, $refMtime) {
147
  $ignore = array('.','..');
148
  if(!is_writable($path)) {
149
+ throw new SpFileRightsException(sprintf(__('Folder %s is not writeable. Please check permissions and try again.','shortpixel'),$path));
150
  }
151
  $files = scandir($path);
152
  $mtime = max($mtime, filemtime($path));
class/model/shortpixel-meta.php CHANGED
@@ -12,6 +12,7 @@ class ShortPixelMeta extends ShortPixelEntity{
12
  protected $compressionType;
13
  protected $compressedSize;
14
  protected $thumbsOpt;
 
15
  protected $thumbsTodo;
16
  protected $keepExif;
17
  protected $cmyk2rgb;
@@ -135,8 +136,15 @@ class ShortPixelMeta extends ShortPixelEntity{
135
  function setThumbsOpt($thumbsOpt) {
136
  $this->thumbsOpt = $thumbsOpt;
137
  }
 
 
 
 
 
 
 
138
 
139
- function getThumbsTodo() {
140
  return $this->thumbsTodo;
141
  }
142
 
12
  protected $compressionType;
13
  protected $compressedSize;
14
  protected $thumbsOpt;
15
+ protected $retinasOpt;
16
  protected $thumbsTodo;
17
  protected $keepExif;
18
  protected $cmyk2rgb;
136
  function setThumbsOpt($thumbsOpt) {
137
  $this->thumbsOpt = $thumbsOpt;
138
  }
139
+ function getRetinasOpt() {
140
+ return $this->retinasOpt;
141
+ }
142
+
143
+ function setRetinasOpt($retinasOpt) {
144
+ $this->retinasOpt = $retinasOpt;
145
+ }
146
 
147
+ function getThumbsTodo() {
148
  return $this->thumbsTodo;
149
  }
150
 
class/view/shortpixel-list-table.php CHANGED
@@ -12,8 +12,8 @@ class ShortPixelListTable extends WP_List_Table {
12
 
13
  public function __construct($ctrl, $spMetaDao, $hasNextGen) {
14
  parent::__construct( array(
15
- 'singular' => 'Image', //singular name of the listed records
16
- 'plural' => 'Images', //plural name of the listed records
17
  'ajax' => false //should this table support ajax?
18
  ));
19
  $this->ctrl = $ctrl;
@@ -26,11 +26,11 @@ class ShortPixelListTable extends WP_List_Table {
26
  $columns = array();
27
 
28
  //pe viitor. $columns['cb'] = '<input type="checkbox" />';
29
- $columns['name'] = 'Filename';
30
- $columns['folder'] = 'Folder';
31
- $columns['media_type'] = 'Type';
32
- $columns['status'] = 'Status';
33
- $columns['options'] = 'Options';
34
  //$columns = apply_filters('shortpixel_list_columns', $columns);
35
 
36
  return $columns;
@@ -47,19 +47,25 @@ class ShortPixelListTable extends WP_List_Table {
47
 
48
  $url = ShortPixelMetaFacade::pathToWebPath($item->folder);
49
  $actions = array(
50
- 'optimize' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">Optimize</a>',
51
- esc_attr( $_REQUEST['page'] ), 'optimize', absint( $item->id ), wp_create_nonce( 'sp_optimize_image' ) ),
52
- 'retry' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">Retry</a>',
53
- esc_attr( $_REQUEST['page'] ), 'optimize', absint( $item->id ), wp_create_nonce( 'sp_optimize_image' ) ),
54
- 'restore' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">Restore</a>',
55
- esc_attr( $_REQUEST['page'] ), 'restore', absint( $item->id ), wp_create_nonce( 'sp_restore_image' ) ),
56
- 'redolossless' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">Re-optimize lossless</a>',
57
- esc_attr( $_REQUEST['page'] ), 'redo', absint( $item->id ), wp_create_nonce( 'sp_redo_image' ) ),
58
- 'redolossy' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">Re-optimize lossy</a>',
59
- esc_attr( $_REQUEST['page'] ), 'redo', absint( $item->id ), wp_create_nonce( 'sp_redo_image' ) ),
60
- 'quota' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">Check quota</a>',
61
- esc_attr( $_REQUEST['page'] ), 'quota', absint( $item->id ), wp_create_nonce( 'sp_check_quota' ) ),
62
- 'view' => sprintf( '<a href="%s" target="_blank">View</a>', $url )
 
 
 
 
 
 
63
  );
64
  $settings = $this->ctrl->getSettings();
65
  $actionsEnabled = array();
@@ -80,17 +86,21 @@ class ShortPixelListTable extends WP_List_Table {
80
  return ShortPixelMetaFacade::pathToRootRelative($item->folder);
81
  case 'status':
82
  switch($item->status) {
83
- case 3: $msg = "Restored";
84
  break;
85
- case 2: $msg = 0 + $item->message == 0 ? "Bonus processing" : "Reduced by <strong>" . $item->message . "%</strong>" . (0 + $item->message < 5 ? "<br>Bonus processing." : "");
 
 
 
86
  break;
87
- case 1: $msg = "<img src=\"" . plugins_url( 'shortpixel-image-optimiser/res/img/loading.gif') . "\" class='sp-loading-small'>&nbsp;Pending";
 
88
  break;
89
- case 0: $msg = "Waiting";
90
  break;
91
  default:
92
  if($item->status < 0) {
93
- $msg = $item->message . "(code: " . $item->status . ")";
94
  } else {
95
  $msg = "";
96
  }
@@ -98,9 +108,9 @@ class ShortPixelListTable extends WP_List_Table {
98
  return "<div id='sp-cust-msg-C-" . $item->id . "'>" . $msg . "</div>";
99
  break;
100
  case 'options':
101
- return ($item->compression_type == 1 ? "Lossy" : "Lossless")
102
- . ($item->keep_exif == 1 ? "": ", Keep EXIF")
103
- . ($item->cmyk2rgb ? "": ", Preserve CMYK");
104
  case 'media_type':
105
  return $item->$column_name;
106
  default:
@@ -109,7 +119,7 @@ class ShortPixelListTable extends WP_List_Table {
109
  }
110
 
111
  public function no_items() {
112
- echo('No images avaliable. Go to <a href="options-general.php?page=wp-shortpixel#adv-settings">Advanced Settings</a> to configure additional folders to be optimized.');
113
  }
114
 
115
  /**
@@ -242,7 +252,7 @@ class ShortPixelListTable extends WP_List_Table {
242
  }
243
  $out .= '</div>';
244
 
245
- $out .= '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __( 'Show more details' ) . '</span></button>';
246
 
247
  return $out;
248
  }
12
 
13
  public function __construct($ctrl, $spMetaDao, $hasNextGen) {
14
  parent::__construct( array(
15
+ 'singular' => __('Image','shortpixel'), //singular name of the listed records
16
+ 'plural' => __('Images','shortpixel'), //plural name of the listed records
17
  'ajax' => false //should this table support ajax?
18
  ));
19
  $this->ctrl = $ctrl;
26
  $columns = array();
27
 
28
  //pe viitor. $columns['cb'] = '<input type="checkbox" />';
29
+ $columns['name'] = __('Filename','shortpixel');
30
+ $columns['folder'] = __('Folder','shortpixel');
31
+ $columns['media_type'] = __('Type','shortpixel');
32
+ $columns['status'] = __('Status','shortpixel');
33
+ $columns['options'] = __('Options','shortpixel');
34
  //$columns = apply_filters('shortpixel_list_columns', $columns);
35
 
36
  return $columns;
47
 
48
  $url = ShortPixelMetaFacade::pathToWebPath($item->folder);
49
  $actions = array(
50
+ 'optimize' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">%s</a>',
51
+ esc_attr( $_REQUEST['page'] ), 'optimize', absint( $item->id ), wp_create_nonce( 'sp_optimize_image' ),
52
+ __('Optimize','shortpixel')),
53
+ 'retry' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">%s</a>',
54
+ esc_attr( $_REQUEST['page'] ), 'optimize', absint( $item->id ), wp_create_nonce( 'sp_optimize_image' ),
55
+ __('Retry','shortpixel')),
56
+ 'restore' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">%s</a>',
57
+ esc_attr( $_REQUEST['page'] ), 'restore', absint( $item->id ), wp_create_nonce( 'sp_restore_image' ),
58
+ __('Restore','shortpixel')),
59
+ 'redolossless' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">%s</a>',
60
+ esc_attr( $_REQUEST['page'] ), 'redo', absint( $item->id ), wp_create_nonce( 'sp_redo_image' ),
61
+ __('Re-optimize lossless','shortpixel')),
62
+ 'redolossy' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">%s</a>',
63
+ esc_attr( $_REQUEST['page'] ), 'redo', absint( $item->id ), wp_create_nonce( 'sp_redo_image' ),
64
+ __('Re-optimize lossy','shortpixel')),
65
+ 'quota' => sprintf( '<a href="?page=%s&action=%s&image=%s&_wpnonce=%s">%s</a>',
66
+ esc_attr( $_REQUEST['page'] ), 'quota', absint( $item->id ), wp_create_nonce( 'sp_check_quota' ),
67
+ __('Check quota','shortpixel')),
68
+ 'view' => sprintf( '<a href="%s" target="_blank">%s</a>', $url, __('View','shortpixel'))
69
  );
70
  $settings = $this->ctrl->getSettings();
71
  $actionsEnabled = array();
86
  return ShortPixelMetaFacade::pathToRootRelative($item->folder);
87
  case 'status':
88
  switch($item->status) {
89
+ case 3: $msg = __('Restored','shortpixel');
90
  break;
91
+ case 2: $msg = 0 + $item->message == 0
92
+ ? __('Bonus processing','shortpixel')
93
+ : __('Reduced by','shortpixel') . " <strong>" . $item->message . "%</strong>"
94
+ . (0 + $item->message < 5 ? "<br>" . __('Bonus processing','shortpixel') . "." : "");
95
  break;
96
+ case 1: $msg = "<img src=\"" . plugins_url( 'shortpixel-image-optimiser/res/img/loading.gif') . "\" class='sp-loading-small'>&nbsp;"
97
+ . __('Pending','shortpixel');
98
  break;
99
+ case 0: $msg = __('Waiting','shortpixel');
100
  break;
101
  default:
102
  if($item->status < 0) {
103
+ $msg = $item->message . "(" . __('code','shortpixel') . ": " . $item->status . ")";
104
  } else {
105
  $msg = "";
106
  }
108
  return "<div id='sp-cust-msg-C-" . $item->id . "'>" . $msg . "</div>";
109
  break;
110
  case 'options':
111
+ return ($item->compression_type == 1 ? __('Lossy','shortpixel') : __('Lossless','shortpixel'))
112
+ . ($item->keep_exif == 1 ? "": ", " . __('Keep EXIF','shortpixel'))
113
+ . ($item->cmyk2rgb ? "": ", " . __('Preserve CMYK','shortpixel'));
114
  case 'media_type':
115
  return $item->$column_name;
116
  default:
119
  }
120
 
121
  public function no_items() {
122
+ echo(__('No images avaliable. Go to <a href="options-general.php?page=wp-shortpixel#adv-settings">Advanced Settings</a> to configure additional folders to be optimized.','shortpixel'));
123
  }
124
 
125
  /**
252
  }
253
  $out .= '</div>';
254
 
255
+ $out .= '<button type="button" class="toggle-row"><span class="screen-reader-text">' . __( 'Show more details', 'shortpixel' ) . '</span></button>';
256
 
257
  return $out;
258
  }
class/view/shortpixel_view.php CHANGED
@@ -20,7 +20,7 @@ class ShortPixelView {
20
  <?php if($averageCompression) { ?>
21
  <div style="float:right; margin-top: 10px">
22
  <div class="bulk-progress-indicator">
23
- <div style="margin-bottom:5px">Average reduction</div>
24
  <div id="sp-avg-optimization"><input type="text" id="sp-avg-optimization-dial" value="<?php echo("" . round($averageCompression))?>" class="dial"></div>
25
  <script>
26
  jQuery(function() {
@@ -30,43 +30,52 @@ class ShortPixelView {
30
  </div>
31
  </div>
32
  <?php } ?>
33
- <h3>Quota Exceeded</h3>
34
- <p>The plugin has optimized <strong><?php echo(number_format($quotaData['APICallsMadeNumeric'] + $quotaData['APICallsMadeOneTimeNumeric']));?> images</strong> and stopped because it reached the available quota limit.
 
 
35
  <?php if($quotaData['totalProcessedFiles'] < $quotaData['totalFiles']) { ?>
36
- <strong><?php echo(number_format($quotaData['mainFiles'] - $quotaData['mainProcessedFiles']));?> images and
37
- <?php echo(number_format(($quotaData['totalFiles'] - $quotaData['mainFiles']) - ($quotaData['totalProcessedFiles'] - $quotaData['mainProcessedFiles'])));?> thumbnails</strong> are not yet optimized by ShortPixel.
38
- <?php } ?></p>
 
 
39
  <div> <!-- style='float:right;margin-top:20px;'> -->
40
- <a class='button button-primary' href='https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>' target='_blank'>Upgrade</a>
41
- <input type='button' name='checkQuota' class='button' value='Confirm New Quota' onclick="javascript:window.location.reload();">
42
  </div>
43
- <!-- <p>It’s simple to upgrade, just <a href='https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>' target='_blank'>log into your account</a> and see the available options.
44
- You can immediately start processing 5,000 images/month for &#36;4,99, choose another plan that suits you or <a href='https://shortpixel.com/contact' target='_blank'>contact us</a> for larger compression needs.</p> -->
45
- <p>Get more image credits by referring ShortPixel to your friends! <a href="https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>/tell-a-friend" target="_blank">Check your account</a> for your unique referral link. For each user that joins, you will receive +100 additional image credits/month.</p>
 
 
46
 
47
  </div> <?php
48
  }
49
 
50
  public static function displayApiKeyAlert()
51
  { ?>
52
- <p>In order to start the optimization process, you need to validate your API Key in the <a href="options-general.php?page=wp-shortpixel">ShortPixel Settings</a> page in your WordPress Admin.</p>
53
- <p>If you don’t have an API Key, you can get one delivered to your inbox, for free.</p>
54
- <p>Please <a href="https://shortpixel.com/wp-apikey" target="_blank">sign up</a> to get your API key.</p>
 
 
 
55
  <?php
56
  }
57
 
58
  public static function displayActivationNotice($when = 'activate') { ?>
59
  <div class='notice notice-warning' id='short-pixel-notice-<?php echo($when);?>'>
60
  <?php if($when != 'activate') { ?>
61
- <div style="float:right;"><a href="javascript:dismissShortPixelNotice('<?php echo($when);?>')" class="button" style="margin-top:10px;">Dismiss</a></div>
62
  <?php } ?>
63
- <h3>ShortPixel Optimization</h3> <?php
64
  switch($when) {
65
  case '2h' :
66
- echo "Action needed. Please <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> to activate your ShortPixel plugin.<BR><BR>";
67
  break;
68
  case '3d':
69
- echo "Your image gallery is not optimized. It takes 2 minutes to <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate your ShortPixel plugin.<BR><BR>";
70
  break;
71
  case 'activate':
72
  self::displayApiKeyAlert();
@@ -90,28 +99,29 @@ class ShortPixelView {
90
  <input type='hidden' id='mainToProcess' value='<?php echo($quotaData['mainFiles'] - $quotaData['mainProcessedFiles']);?>'/>
91
  <input type='hidden' id='totalToProcess' value='<?php echo($quotaData['totalFiles'] - $quotaData['totalProcessedFiles']);?>'/>
92
  <div class="bulk-stats-container">
93
- <h3 style='margin-top:0;'>Your media library</h3>
94
- <div class="bulk-label">Original images</div>
95
  <div class="bulk-val"><?php echo(number_format($quotaData['mainMlFiles']));?></div><br>
96
- <div class="bulk-label">Smaller thumbnails</div>
97
  <div class="bulk-val"><?php echo(number_format($quotaData['totalMlFiles'] - $quotaData['mainMlFiles']));?></div>
98
  <div style='width:165px; display:inline-block; padding-left: 5px'>
99
- <input type='checkbox' id='thumbnails' name='thumbnails' onclick='ShortPixel.checkThumbsUpdTotal(this)' <?php echo($this->ctrl->processThumbnails() ? "checked":"");?>> Include thumbnails
 
100
  </div><br>
101
  <?php if($quotaData["totalProcessedMlFiles"] > 0) { ?>
102
- <div class="bulk-label bulk-total">Total images</div>
103
  <div class="bulk-val bulk-total"><?php echo(number_format($quotaData['totalMlFiles']));?></div>
104
- <br><div class="bulk-label">Already optimized originals</div>
105
  <div class="bulk-val"><?php echo(number_format($quotaData['mainProcessedMlFiles']));?></div><br>
106
- <div class="bulk-label">Already optimized thumbnails</div>
107
  <div class="bulk-val"><?php echo(number_format($quotaData['totalProcessedMlFiles'] - $quotaData['mainProcessedMlFiles']));?></div><br>
108
  <?php } ?>
109
- <div class="bulk-label bulk-total">Total to be optimized</div>
110
  <div class="bulk-val bulk-total" id='displayTotal'><?php echo(number_format($quotaData['totalMlFiles'] - $quotaData['totalProcessedMlFiles']));?></div>
111
 
112
  <?php if($customCount > 0) { ?>
113
- <h3 style='margin-bottom:10px;'>Your custom folders</h3>
114
- <div class="bulk-label bulk-total">Total to be optimized</div>
115
  <div class="bulk-val bulk-total" id='displayTotal'><?php echo(number_format($customCount));?></div>
116
  <?php } ?>
117
  </div>
@@ -124,8 +134,8 @@ class ShortPixelView {
124
  <img src='<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/robo-slider.png' ));?>'/>
125
  </div>
126
  <div class="bulk-btn-txt">
127
- <span class="label">Start Optimizing</span><br>
128
- <span class='total'><?php echo(number_format($quotaData['totalFiles'] - $quotaData['totalProcessedFiles']));?></span> images
129
  </div>
130
  <div class="bulk-btn-img" class="bulk-btn-img">
131
  <img src='<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/arrow.png' ));?>'/>
@@ -135,7 +145,7 @@ class ShortPixelView {
135
  </div>
136
  <?php } else {?>
137
  <div class="bulk-play bulk-nothing-optimize">
138
- Nothing to optimize! The images that you add to Media Gallery will be automatically optimized after upload.
139
  </div>
140
  <?php } ?>
141
  </form>
@@ -143,35 +153,38 @@ class ShortPixelView {
143
  <?php if($quotaData['totalFiles'] - $quotaData['totalProcessedFiles'] > 0) { ?>
144
  <div class='shortpixel-clearfix'></div>
145
  <div class="bulk-wide">
146
- <h3 style='font-size: 1.1em; font-weight: bold;'>After you start the bulk process, in order for the optimization to run, you must keep this page open and your computer running. If you close the page for whatever reason, just turn back to it and the bulk process will resume.</h3>
 
 
147
  </div>
148
  <?php } ?>
149
  <div class='shortpixel-clearfix'></div>
150
  <div class="bulk-text-container">
151
- <h3>What are Thumbnails?</h3>
152
- <p>Thumbnails are smaller images usually generated by your WP theme. Most themes generate between 3 and 6 thumbnails for each Media Library image.</p>
153
- <p>The thumbnails also generate traffic on your website pages and they influence your website's speed.</p>
154
- <p>It's highly recommended that you include thumbnails in the optimization as well.</p>
155
  </div>
156
  <div class="bulk-text-container" style="padding-right:0">
157
- <h3>How does it work?</h3>
158
- <p>The plugin processes images starting with the newest ones you uploaded in your Media Library.</p>
159
- <p>You will be able to pause the process anytime.</p>
160
- <p><?php echo($this->ctrl->backupImages() ? "<p>Your original images will be stored in a separate back-up folder.</p>" : "");?></p>
161
- <p>You can watch the images being processed live, right here, after you start optimizing.</p>
162
  </div>
163
  <?php
164
  } elseif($percent) // bulk is paused
165
  { ?>
166
  <?php echo($this->displayBulkProgressBar(false, $percent, "", $quotaData['APICallsRemaining'], $this->ctrl->getAverageCompression(), 1, $customCount));?>
167
- <p>Please see below the optimization status so far:</p>
168
  <?php $this->displayBulkStats($quotaData['totalProcessedFiles'], $quotaData['mainProcessedFiles'], $under5PercentCount, $averageCompression, $savedSpace);?>
169
  <?php if($quotaData['totalProcessedFiles'] < $quotaData['totalFiles']) { ?>
170
- <p><?php echo(number_format($quotaData['mainFiles'] - $quotaData['mainProcessedFiles']));?> images and
171
- <?php echo(number_format(($quotaData['totalFiles'] - $quotaData['mainFiles']) - ($quotaData['totalProcessedFiles'] - $quotaData['mainProcessedFiles'])));
172
- ?> thumbnails are not yet optimized by ShortPixel.</p>
 
173
  <?php } ?>
174
- <p>You can continue optimizing your Media Gallery from where you left, by clicking the Resume processing button. Already optimized images will not be reprocessed.</p>
175
  <?php
176
  } else { ?>
177
  <div class="sp-container">
@@ -181,23 +194,24 @@ class ShortPixelView {
181
  <input type="text" value="<?php echo("" . round($averageCompression))?>" id="sp-total-optimization-dial" class="dial">
182
  </div>
183
  <p style="margin-top:4px;">
184
- <span style="font-size:1.2em;font-weight:bold">Congratulations!</span><br>Your media library has been successfully optimized!
185
- <span class="sp-bulk-summary"><a href='javascript:void(0);'>Summary</a></span>
 
186
  </p>
187
  </div>
188
  <div class='notice notice-success sp-floating-block sp-single-width' style="height: 80px;overflow:hidden;padding-right: 0;">
189
  <div style="float:left; margin-top:-5px">
190
  <p style='margin-bottom: -2px; font-weight: bold;'>
191
- Share your optimization results:
192
  </p>
193
- <div style='display:inline-block; margin: 16px 16px 6px 0;float:left'>
194
  <div id="fb-root"></div>
195
  <script>
196
  (function(d, s, id) {
197
  var js, fjs = d.getElementsByTagName(s)[0];
198
  if (d.getElementById(id)) return;
199
  js = d.createElement(s); js.id = id;
200
- js.src = "//connect.facebook.net/en_US/sdk.js#xfbml=1&version=v2.6";
201
  fjs.parentNode.insertBefore(js, fjs);
202
  }(document, 'script', 'facebook-jssdk'));
203
  </script>
@@ -206,14 +220,22 @@ class ShortPixelView {
206
  </div>
207
  <div style="float:left;margin:-7px 0 0 10px">
208
  <a href="https://twitter.com/share" class="twitter-share-button" data-url="https://shortpixel.com"
209
- data-text="I just optimized my images<?php echo(0+$averageCompression>20 ? " by ".round($averageCompression) ."%" : "");?><?php echo(false && (0+$savedSpace>0) ? " saving $savedSpace" : "");?> with @ShortPixel, a great plugin for increasing #WordPress page speed:" data-size='large'>Tweet</a>
 
 
 
 
 
 
 
 
210
  </div>
211
  <script>
212
  jQuery(function() {
213
  jQuery("#sp-total-optimization-dial").val("<?php echo("" . round($averageCompression))?>");
214
  ShortPixel.percentDial("#sp-total-optimization-dial", 60);
215
 
216
- jQuery(".sp-bulk-summary").tooltip({
217
  tooltipSource: "inline",
218
  tooltipSourceID: "#sp-bulk-stats"
219
  });
@@ -232,7 +254,7 @@ class ShortPixelView {
232
  <div class='shortpixel-rate-us' style='float:left;padding-top:0'>
233
  <a href="https://wordpress.org/support/view/plugin-reviews/shortpixel-image-optimiser?rate=5#postform" target="_blank">
234
  <span>
235
- Please rate us!&nbsp;
236
  </span><br><img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/stars.png' ));?>">
237
  </a>
238
  </div>
@@ -242,19 +264,21 @@ class ShortPixelView {
242
  <?php $this->displayBulkStats($quotaData['totalProcessedFiles'], $quotaData['mainProcessedFiles'], $under5PercentCount, $averageCompression, $savedSpace);?>
243
  </div>
244
  </div>
245
- <p>Go to the ShortPixel <a href='<?php echo(get_admin_url());?>options-general.php?page=wp-shortpixel#stats'>Stats</a> and see all your websites' optimized stats. Download your detailed <a href="https://api.shortpixel.com/v2/report.php?key=<?php echo($this->ctrl->getApiKey());?>">Optimization Report</a> to check your image optimization statistics for the last 40 days.</p>
 
 
246
  <?php
247
  $failed = $this->ctrl->getPrioQ()->getFailed();
248
  if(count($failed)) { ?>
249
  <div class="bulk-progress" style="margin-bottom: 15px">
250
  <p>
251
- The following images could not be processed because of their limited write rights. This usually happens if you have changed your hosting provider. Please restart the optimization process after you granted write rights to all the files below.
252
  </p>
253
  <?php $this->displayFailed($failed); ?>
254
  </div>
255
  <?php } ?>
256
- <div class="bulk-progress notice notice-info sp-floating-block sp-double-width">
257
- <?php
258
  $todo = $reopt = false;
259
  if($quotaData['totalProcessedFiles'] < $quotaData['totalFiles']) {
260
  $todo = true;
@@ -262,19 +286,26 @@ class ShortPixelView {
262
  $thumbsNotProcessed = ($quotaData['totalFiles'] - $quotaData['mainFiles']) - ($quotaData['totalProcessedFiles'] - $quotaData['mainProcessedFiles']);
263
  ?>
264
  <p>
265
- <?php echo($mainNotProcessed ? number_format($mainNotProcessed) . " images" : "");?>
266
- <?php echo($mainNotProcessed && $thumbsNotProcessed ? " and" : "");?>
267
- <?php echo($thumbsNotProcessed ? number_format($thumbsNotProcessed) . " thumbnails" : "");?> are not yet optimized by ShortPixel.
268
- <?php if (count($quotaData['filesWithErrors'])) { ?>
269
- Some have errors:
270
- <?php foreach($quotaData['filesWithErrors'] as $id => $data) {
 
 
 
 
 
 
 
271
  if(ShortPixelMetaFacade::isCustomQueuedId($id)) {
272
  echo('<a href="'.trailingslashit(network_site_url("/")) . ShortPixelMetaFacade::filenameToRootRelative($data['Path']).'" title="'.$data['Message'].'" target="_blank">'.$data['Name'].'</a>,&nbsp;');
273
  } else {
274
  echo('<a href="post.php?post='.$id.'&action=edit" title="'.$data['Message'].'">'.$data['Name'].'</a>,&nbsp;');
275
  }
276
- } ?>
277
- <?php } ?>
278
  </p>
279
  <?php }
280
  $settings = $this->ctrl->getSettings();
@@ -289,36 +320,33 @@ class ShortPixelView {
289
  $thumbsCount = $quotaData['totalProc'.$statType.'Files'] - $quotaData['mainProc'.$statType.'Files'];
290
  ?>
291
  <p id="with-thumbs" <?php echo(!$settings->processThumbnails ? 'style="display:none;"' : "");?>>
292
- <?php echo(number_format($quotaData['mainProc'.$statType.'Files']));?> images and
293
- <?php echo(number_format($quotaData['totalProc'.$statType.'Files'] - $quotaData['mainProc'.$statType.'Files']));?> thumbnails were optimized
294
- <strong>
295
- <?php echo($otherType);?>
296
- </strong>. You can re-optimize
297
- <strong>
298
- <?php echo($optType);?>
299
- </strong> the ones that have backup.
300
  </p>
301
  <p id="without-thumbs" <?php echo($settings->processThumbnails ? 'style="display:none;"' : "");?>>
302
- <?php echo(number_format($quotaData['mainProc'.$statType.'Files']));?> images are optimized
303
- <strong>
304
- <?php echo($otherType);?>
305
- </strong>. You can re-optimize
306
- <strong>
307
- <?php echo($optType);?>
308
- </strong> the ones that have backup.
309
- <?php echo($thumbsCount ? number_format($thumbsCount) . ' thumbnails will be restored to originals.' : '');?>
310
  </p>
311
  <?php
312
  } ?>
313
- <p>Restart the optimization process for <?php echo($todo ? 'these images' : 'new images added to your library');?> by clicking the button below.
314
- Already <strong><?php echo($todo ? ($optType) : '');?></strong> optimized images will not be reprocessed.
315
- <?php if($reopt) { ?>
316
- <br>Please note that reoptimizing images as <strong>lossy/lossless</strong> may use additional credits. <a href="http://blog.shortpixel.com/the-all-new-re-optimization-functions-in-shortpixel/" target="_blank">More info</a>
 
 
 
 
 
317
  <?php } ?>
318
  </p>
319
  <form action='' method='POST' >
320
- <input type='checkbox' id='bulk-thumbnails' name='thumbnails' <?php echo($this->ctrl->processThumbnails() ? "checked":"");?> onchange="ShortPixel.onBulkThumbsCheck(this)"> Include thumbnails<br><br>
321
- <input type='submit' name='bulkProcess' id='bulkProcess' class='button button-primary' value='Restart Optimizing'>
 
322
  </form>
323
  </div>
324
  <?php } ?>
@@ -329,41 +357,41 @@ class ShortPixelView {
329
  public function displayBulkProcessingRunning($percent, $message, $remainingQuota, $averageCompression, $type) {
330
  ?>
331
  <div class="wrap short-pixel-bulk-page">
332
- <h1>Bulk Image Optimization by ShortPixel</h1>
333
  <?php $this->displayBulkProgressBar(true, $percent, $message, $remainingQuota, $averageCompression, $type);?>
334
  <div class="sp-floating-block notice bulk-notices-parent">
335
  <div class="bulk-notice-container">
336
  <div class="bulk-notice-msg bulk-lengthy">
337
  <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/loading-dark-big.gif' ));?>">
338
- Lengthy operation in progress:<br>
339
- Optimizing image <a href="#" data-href="<?php echo(get_admin_url());?>/post.php?post=__ID__&action=edit" target="_blank">lala.png</a>
340
  </div>
341
  <div class="bulk-notice-msg bulk-error" id="bulk-error-template">
342
  <div style="float: right; margin-top: -4px; margin-right: -8px;">
343
  <a href="javascript:void(0);" onclick="ShortPixel.removeBulkMsg(this)" style='color: #c32525;'>&#10006;</a>
344
  </div>
345
  <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/exclamation-big.png' ));?>">
346
- <span class="sp-err-title">Error processing file:<br></span>
347
- <span class="sp-err-content"><?php echo $message; ?></span> <a class="sp-post-link" href="<?php echo(get_admin_url());?>/post.php?post=__ID__&action=edit" target="_blank">lala.png</a>
348
  </div>
349
  </div>
350
  </div>
351
  <div class="bulk-progress bulk-slider-container notice notice-info sp-floating-block sp-full-width">
352
- <div class="short-pixel-block-title"><span>Just optimized:</span><span class="filename"></span></div>
353
  <div class="bulk-slider">
354
  <div class="bulk-slide" id="empty-slide">
355
  <div class="bulk-slide-images">
356
  <div class="img-original">
357
  <div><img class="bulk-img-orig" src=""></div>
358
- <div>Original image</div>
359
  </div>
360
  <div class="img-optimized">
361
  <div><img class="bulk-img-opt" src=""></div>
362
- <div>Optimized image</div>
363
  </div>
364
  </div>
365
  <div class="img-info">
366
- <div style="font-size: 14px; line-height: 10px; margin-bottom:16px;">Optimized by:</div>
367
  <span class="bulk-opt-percent"></span>
368
  </div>
369
  </div>
@@ -385,13 +413,13 @@ class ShortPixelView {
385
  <div style="float:right">
386
  <?php if(false) { ?>
387
  <div class="bulk-progress-indicator">
388
- <div style="margin-bottom:5px">Remaining credits</div>
389
  <div style="margin-top:22px;margin-bottom: 5px;font-size:2em;font-weight: bold;"><?php echo(number_format($remainingQuota))?></div>
390
  <div>images</div>
391
  </div>
392
  <?php } ?>
393
  <div class="bulk-progress-indicator">
394
- <div style="margin-bottom:5px">Average reduction</div>
395
  <div id="sp-avg-optimization"><input type="text" id="sp-avg-optimization-dial" value="<?php echo("" . round($averageCompression))?>" class="dial"></div>
396
  <script>
397
  jQuery(function() {
@@ -401,15 +429,17 @@ class ShortPixelView {
401
  </div>
402
  </div>
403
  <?php if($running) { ?>
404
- <h2><?php echo($type & 1 ? "Media Library " : "") ?><?php echo($type & 3 == 3 ? "and " : "") ?><?php echo($type & 2 ? "Custom folders " : "") ?>optimization in progress ...</h2>
405
- <p style="margin: 0 0 18px;">Bulk optimization has started.<br>
406
- This process will take some time, depending on the number of images in your library. In the meantime, you can continue using
407
- the admin as usual, <a href='<?php echo(get_admin_url());?>' target='_blank'>in a different browser window or tab</a>.<br>
408
- However, <strong>if you close this window, the bulk processing will pause</strong> until you open the media gallery or the ShortPixel bulk page again.
 
 
409
  </p>
410
  <?php } else { ?>
411
- <h2>Media Library <?php ($type & 2 ? "and Custom folders " : "") ?>optimization paused</h2>
412
- <p style="margin: 0 0 50px;">Bulk processing is paused until you resume the optimization process.</p>
413
  <?php }?>
414
  <div id="bulk-progress" class="progress" >
415
  <div class="progress-img" style="left: <?php echo($percent);?>%;">
@@ -426,14 +456,14 @@ class ShortPixelView {
426
  <input type="submit" class="button button-primary bulk-cancel" onclick="clearBulkProcessor();"
427
  name="bulkProcessStop" value="Stop" style="margin-left:10px"/>
428
  <input type="submit" class="button button-primary bulk-cancel" onclick="clearBulkProcessor();"
429
- name="<?php echo($running ? "bulkProcessPause" : "bulkProcessResume");?>" value="<?php echo($running ? "Pause" : "Resume processing");?>"/>
430
  <?php if(!$running && $customPending) {?>
431
  <input type="submit" class="button button-primary bulk-cancel" onclick="clearBulkProcessor();"
432
- name="skipToCustom" value="Only custom folders" title="Process only the custom folders, skipping the Media Library" style="margin-right:10px"/>
433
  <?php }?>
434
  </form>
435
  <?php } else { ?>
436
- <a href="options-general.php?page=wp-shortpixel" class="button button-primary bulk-cancel" style="margin-left:10px">Manage custom folders</a>
437
  <?php }?>
438
  </div>
439
  <?php
@@ -441,14 +471,14 @@ class ShortPixelView {
441
 
442
  public function displayBulkStats($totalOptimized, $mainOptimized, $under5PercentCount, $averageCompression, $savedSpace) {?>
443
  <div class="bulk-progress bulk-stats">
444
- <div class="label">Processed Images and PDFs:</div><div class="stat-value"><?php echo(number_format($mainOptimized));?></div><br>
445
- <div class="label">Processed Thumbnails:</div><div class="stat-value"><?php echo(number_format($totalOptimized - $mainOptimized));?></div><br>
446
- <div class="label totals">Total files processed:</div><div class="stat-value"><?php echo(number_format($totalOptimized));?></div><br>
447
- <div class="label totals">Minus files with <5% optimization (free):</div><div class="stat-value"><?php echo(number_format($under5PercentCount));?></div><br><br>
448
- <div class="label totals">Used quota:</div><div class="stat-value"><?php echo(number_format($totalOptimized - $under5PercentCount));?></div><br>
449
  <br>
450
- <div class="label">Average optimization:</div><div class="stat-value"><?php echo($averageCompression);?>%</div><br>
451
- <div class="label">Saved space:</div><div class="stat-value"><?php echo($savedSpace);?></div>
452
  </div>
453
  <?php
454
  }
@@ -474,12 +504,12 @@ class ShortPixelView {
474
  $customFolders = null, $folderMsg = false, $addedFolder = false, $showAdvanced = false) {
475
  //wp_enqueue_script('jquery.idTabs.js', plugins_url('/js/jquery.idTabs.js',__FILE__) );
476
  ?>
477
- <h1>ShortPixel Plugin Settings</h1>
478
  <p style="font-size:18px">
479
  <a href="https://shortpixel.com/<?php echo($this->ctrl->getVerifiedKey() ? "login/".$this->ctrl->getApiKey() : "pricing");?>" target="_blank" style="font-size:18px">
480
- Upgrade now
481
  </a> |
482
- <a href="https://shortpixel.com/contact/<?php echo($this->ctrl->getEncryptedData());?>" target="_blank" style="font-size:18px">Support </a>
483
  </p>
484
  <?php if($notice !== null) { ?>
485
  <br/>
@@ -497,19 +527,19 @@ class ShortPixelView {
497
  <article id="shortpixel-settings-tabs" class="sp-tabs">
498
  <form name='wp_shortpixel_options' action='options-general.php?page=wp-shortpixel&noheader=true' method='post' id='wp_shortpixel_options'>
499
  <section <?php echo($showAdvanced ? "" : "class='sel-tab'");?> id="tab-settings">
500
- <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-settings">General</a></h2>
501
  <?php $this->displaySettingsForm($showApiKey, $editApiKey, $quotaData);?>
502
  </section>
503
  <?php if($this->ctrl->getVerifiedKey()) {?>
504
  <section <?php echo($showAdvanced ? "class='sel-tab'" : "");?> id="tab-adv-settings">
505
- <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-adv-settings">Advanced</a></h2>
506
  <?php $this->displayAdvancedSettingsForm($customFolders, $addedFolder);?>
507
  </section>
508
  <?php } ?>
509
  </form><span style="display:none">&nbsp;</span><?php //the span is a trick to keep the sections ordered as nth-child in styles: 1,2,3,4 (otherwise the third section would be nth-child(2) too, because of the form)
510
  if($averageCompression !== null) {?>
511
  <section id="tab-stats">
512
- <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-stats">Statistics</a></h2>
513
  <?php
514
  $this->displaySettingsStats($quotaData, $averageCompression, $savedSpace, $savedBandwidth,
515
  $remainingImages, $totalCallsMade, $fileCount, $backupFolderSize);?>
@@ -517,8 +547,8 @@ class ShortPixelView {
517
  <?php }
518
  if($resources !== null) {?>
519
  <section id="tab-resources">
520
- <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-resources">WP Resources</a></h2>
521
- <?php echo((isset($resources['body']) ? $resources['body'] : "Please reload"));?>
522
  </section>
523
  <?php } ?>
524
  </article>
@@ -551,19 +581,19 @@ class ShortPixelView {
551
  ?>
552
  <div class="wp-shortpixel-options">
553
  <?php if($this->ctrl->getVerifiedKey()) { ?>
554
- <p>New images uploaded to the Media Library will be optimized automatically.<br/>If you have existing images you would like to optimize, you can use the <a href="<?php echo(get_admin_url());?>upload.php?page=wp-short-pixel-bulk">Bulk Optimization Tool</a>.</p>
555
  <?php } else {
556
  if($showApiKey) {?>
557
- <h3>Step 1:</h3>
558
- <p style='font-size: 14px'>If you don't have an API Key, <a href="https://shortpixel.com/wp-apikey<?php echo( $this->ctrl->getAffiliateSufix() );?>" target="_blank">sign up here.</a> It's free and it only takes one minute, we promise!</p>
559
- <h3>Step 2:</h3>
560
- <p style='font-size: 14px'>Please enter here the API Key you received by email and press Validate.</p>
561
  <?php }
562
  }?>
563
  <table class="form-table">
564
  <tbody>
565
  <tr>
566
- <th scope="row"><label for="key">API Key:</label></th>
567
  <td>
568
  <?php
569
  $canValidate = false;
@@ -573,13 +603,13 @@ class ShortPixelView {
573
  class="regular-text" <?php echo($editApiKey ? "" : 'disabled') ?>>
574
  <?php } elseif(defined("SHORTPIXEL_API_KEY")) {
575
  $canValidate = true;?>
576
- <input name="key" type="text" id="key" disabled="true" placeholder="Multisite API Key" class="regular-text">
577
  <?php } ?>
578
  <input type="hidden" name="validate" id="valid" value=""/>
579
- <button type="button" id="validate" class="button button-primary" title="Validate the provided API key"
580
- onclick="ShortPixel.validateKey()" <?php echo $canValidate ? "" : "disabled"?>>Validate</button>
581
  <?php if($showApiKey && !$editApiKey) { ?>
582
- <p class="settings-info">Key defined in wp-config.php.</p>
583
  <?php } ?>
584
 
585
  </td>
@@ -590,15 +620,19 @@ class ShortPixelView {
590
  <?php } else { //if valid key we display the rest of the options ?>
591
  <tr>
592
  <th scope="row">
593
- <label for="compressionType">Compression type:</label>
594
  </th>
595
  <td>
596
- <input type="radio" name="compressionType" value="1" <?php echo( $this->ctrl->getCompressionType() == 1 ? "checked" : "" );?>>Lossy (recommended)</br>
597
- <p class="settings-info"> <b>Lossy compression: </b>lossy has a better compression rate than lossless compression.</br>The resulting image is identical with the original to the human eye. You can run a test for free
598
- <a href="https://shortpixel.com/online-image-compression" target="_blank">here</a>.</p></br>
599
- <input type="radio" name="compressionType" value="0" <?php echo( $this->ctrl->getCompressionType() != 1 ? "checked" : "" );?>>Lossless
600
- <p class="settings-info"><b>Lossless compression: </b> the shrunk image will be identical with the original and smaller in size.</br>In some rare cases you will need to use
601
- this type of compression. Some technical drawings or images from vector graphics are possible situations.</p>
 
 
 
 
602
  </td>
603
  </tr>
604
  </tbody>
@@ -606,57 +640,62 @@ class ShortPixelView {
606
  <table class="form-table">
607
  <tbody>
608
  <tr>
609
- <th scope="row"><label for="thumbnails">Also include thumbnails:</label></th>
610
- <td><input name="thumbnails" type="checkbox" id="thumbnails" <?php echo( $checked );?>> Apply compression also to
611
- <strong>image thumbnails.</strong> <?php echo($thumbnailsToProcess ? "(" . number_format($thumbnailsToProcess) . " thumbnails to optimize)" : "");?>
612
- <p class="settings-info">It is highly recommended that you optimize the thumbnails as they are usually the images most viewed by end users and can generate most traffic.<br>Please note that thumbnails count up to your total quota.</p>
 
 
 
613
  </td>
614
  </tr>
615
  <tr>
616
- <th scope="row"><label for="backupImages">Image backup</label></th>
617
  <td>
618
- <input name="backupImages" type="checkbox" id="backupImages" <?php echo( $checkedBackupImages );?>> Save and keep a backup of your original images in a separate folder.
619
- <p class="settings-info">You <strong>need to have backup active</strong> in order to be able to restore images to originals or to convert from Lossy to Lossless and back.</p>
620
  </td>
621
  </tr>
622
  <tr>
623
- <th scope="row"><label for="cmyk2rgb">CMYK to RGB conversion</label></th>
624
  <td>
625
- <input name="cmyk2rgb" type="checkbox" id="cmyk2rgb" <?php echo( $cmyk2rgb );?>>Adjust your images for computer and mobile screen display.
626
- <p class="settings-info">Images for the web only need RGB format and converting them from CMYK to RGB makes them smaller.</p>
627
  </td>
628
  </tr>
629
  <tr>
630
- <th scope="row"><label for="removeExif">Remove EXIF</label></th>
631
  <td>
632
- <input name="removeExif" type="checkbox" id="removeExif" <?php echo( $removeExif );?>>Remove the EXIF tag of the image (recommended).
633
- <p class="settings-info"> EXIF is a set of various pieces of information that are automatically embedded into the image upon creation. This can include GPS position, camera manufacturer, date and time, etc.
634
- Unless you really need that data to be preserved, we recommend removing it as it can lead to <a href="http://blog.shortpixel.com/how-much-smaller-can-be-images-without-exif-icc" target="_blank">better compression rates</a>.</p>
635
  </td>
636
  </tr>
637
  <tr>
638
- <th scope="row"><label for="resize">Resize large images</label></th>
639
  <td>
640
- <input name="resize" type="checkbox" id="resize" <?php echo( $resize );?>> to maximum
641
- <input type="text" name="width" id="width" style="width:70px"
642
- value="<?php echo( max($this->ctrl->getResizeWidth(), min(1024, $minSizes['width'])) );?>" <?php echo( $resizeDisabled );?>/> pixels wide &times;
643
- <input type="text" name="height" id="height" style="width:70px" value="<?php echo( max($this->ctrl->getResizeHeight(), min(1024, $minSizes['height'])) );?>" <?php echo( $resizeDisabled );?>/> pixels high (original aspect ratio is preserved and image is not cropped)
 
 
644
  <p class="settings-info">
645
- Recommended for large photos, like the ones taken with your phone. Saved space can go up to 80% or more after resizing.<br/>
646
  </p>
647
  <div style="margin-top: 10px;">
648
  <input type="radio" name="resize_type" id="resize_type_outer" value="outer" <?php echo($settings->resizeType == 'inner' ? '' : 'checked') ?> style="margin: -50px 10px 60px 0;">
649
- <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/resize-outer.png' ));?>" title="Sizes will be greater or equal to the corresponding value. For example, if you set the resize dimensions at 1000x1200, an image of 2000x3000px will be resized to 1000x1500px while an image of 3000x2000px will be resized to 1800x1200px">
650
  <input type="radio" name="resize_type" id="resize_type_inner" value="inner" <?php echo($settings->resizeType == 'inner' ? 'checked' : '') ?> style="margin: -50px 10px 60px 35px;">
651
- <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/resize-inner.png' ));?>" title="Sizes will be smaller or equal to the corresponding value. For example, if you set the resize dimensions at 1000x1200, an image of 2000x3000px will be resized to 800x1200px while an image of 3000x2000px will be resized to 1000x667px">
652
  </div>
653
  </td>
654
  </tr>
655
  </tbody>
656
  </table>
657
  <p class="submit">
658
- <input type="submit" name="save" id="save" class="button button-primary" title="Save Changes" value="Save Changes"> &nbsp;
659
- <input type="submit" name="save" id="bulk" class="button button-primary" title="Save and go to the Bulk Processing page" value="Save and Go to Bulk Process"> &nbsp;
660
  </p>
661
  </div>
662
  <script>
@@ -676,23 +715,25 @@ class ShortPixelView {
676
  $frontBootstrap = ($settings->frontBootstrap ? 'checked' : '');
677
  $includeNextGen = ($settings->includeNextGen ? 'checked' : '');
678
  $createWebp = ($settings->createWebp ? 'checked' : '');
 
 
679
  ?>
680
  <div class="wp-shortpixel-options">
681
  <?php if(!$this->ctrl->getVerifiedKey()) { ?>
682
- <p>Please enter your API key in the General tab first.</p>
683
  <?php } else { //if valid key we display the rest of the options ?>
684
  <table class="form-table">
685
  <tbody>
686
  <tr>
687
- <th scope="row"><label for="resize">Additional media folders</label></th>
688
  <td>
689
  <?php if($customFolders) { ?>
690
  <table class="shortpixel-folders-list">
691
  <tr style="font-weight: bold;">
692
- <td>Folder name</td>
693
- <td>Type &amp;<br>Status</td>
694
- <td>Files</td>
695
- <td>Last change</td>
696
  <td></td>
697
  </tr>
698
  <?php foreach($customFolders as $folder) {
@@ -701,13 +742,18 @@ class ShortPixelView {
701
  $stat = $this->ctrl->getSpMetaDao()->getFolderOptimizationStatus($folder->getId());
702
  $cnt = $folder->getFileCount();
703
  $st = ($cnt == 0
704
- ? "Empty"
705
  : ($stat->Total == $stat->Optimized
706
- ? "Optimized"
707
- : ($stat->Optimized + $stat->Pending > 0 ? "Pending" : "Waiting")));
708
- $err = $stat->Failed > 0 && !$st == "Empty" ? " ({$stat->Failed} failed)" : "";
709
- $action = ($st == "Optimized" || $st == "Empty" ? "monitoring" : "optimizing");
710
- $fullStat = $st == "Empty" ? "" : "Optimized: " . $stat->Optimized . ", Pending: " . $stat->Pending . ", Waiting: " . $stat->Waiting . ", Failed: " . $stat->Failed;
 
 
 
 
 
711
  ?>
712
  <tr>
713
  <td>
@@ -727,8 +773,10 @@ class ShortPixelView {
727
  <?php echo($folder->getTsUpdated()); ?>
728
  </td>
729
  <td>
730
- <input type="button" class="button remove-folder-button" data-value="<?php echo($folder->getPath()); ?>" title="Stop <?php echo($action . " " . $folder->getPath()); ?>" value="Stop <?php echo $action;?>">
731
- <input type="button" style="display:none;" class="button button-alert recheck-folder-button" data-value="<?php echo($folder->getPath()); ?>" title="Full folder refresh, check each file of the folder if it changed since it was optimized. Might take up to 1 min. for big folders." value="Refresh">
 
 
732
  </td>
733
  </tr>
734
  <?php }?>
@@ -739,15 +787,19 @@ class ShortPixelView {
739
  <input type="text" name="addCustomFolderView" id="addCustomFolderView" class="regular-text" value="<?php echo($addedFolder);?>" disabled style="width: 50em;max-width: 70%;">&nbsp;
740
  <input type="hidden" name="addCustomFolder" id="addCustomFolder" value="<?php echo($addedFolder);?>"/>
741
  <input type="hidden" id="customFolderBase" value="<?php echo $this->ctrl->getCustomFolderBase(); ?>">
742
- <a class="button button-primary select-folder-button" title="Select the images folder on your server" href="javascript:void(0);">Select ... </a>
743
- <input type="submit" name="saveAdv" id="saveAdvAddFolder" class="button button-primary" title="Add Folder" value="Add Folder">
744
- <p class="settings-info"> Use the Select... button to select site folders. ShortPixel will optimize images and PDFs from the specified folders and their subfolders. The optimization status for each image or PDF in these folders can be seen in the <a href="upload.php?page=wp-short-pixel-custom">Other Media list</a>, under the Media menu.</p>
 
 
 
 
745
  <div class="sp-folder-picker-shade">
746
  <div class="sp-folder-picker-popup">
747
- <div class="sp-folder-picker-title">Select the images folder</div>
748
  <div class="sp-folder-picker"></div>
749
- <input type="button" class="button button-info select-folder-cancel" value="Cancel" style="margin-right: 30px;">
750
- <input type="button" class="button button-primary select-folder" value="Select">
751
  </div>
752
  </div>
753
  <script>
@@ -759,40 +811,66 @@ class ShortPixelView {
759
  </tr>
760
  <?php if($hasNextGen) { ?>
761
  <tr>
762
- <th scope="row"><label for="nextGen">Optimize NextGen galleries</label></th>
763
  <td>
764
- <input name="nextGen" type="checkbox" id="nextGen" <?php echo( $includeNextGen );?>> Optimize NextGen galleries.
765
- <p class="settings-info">Check this to add all your current NextGen galleries to the custom folders list and to also have all the future NextGen galleries and images optimized automatically by ShortPixel.</p>
 
 
766
  </td>
767
  </tr>
768
  <?php } ?>
769
  <tr>
770
- <th scope="row"><label for="createWebp">WebP versions</label></th>
771
  <td>
772
- <input name="createWebp" type="checkbox" id="createWebp" <?php echo( $createWebp );?>> Create also <a href="http://blog.shortpixel.com/how-webp-images-can-speed-up-your-site/" target="_blank">WebP versions</a> of the images <strong>for free</strong>.
773
- <p class="settings-info">WebP images can be up to three times smaller than PNGs and 25% smaller than JPGs. Choosing this option <strong>does not use up additional credits</strong>.</p>
 
 
774
  </td>
775
  </tr>
776
  <tr>
777
- <th scope="row"><label for="authentication">HTTP AUTH credentials</label></th>
778
  <td>
779
- <input name="siteAuthUser" type="text" id="siteAuthUser" value="<?php echo( $settings->siteAuthUser );?>" class="regular-text" placeholder="User"><br>
780
- <input name="siteAuthPass" type="text" id="siteAuthPass" value="<?php echo( $settings->siteAuthPass );?>" class="regular-text" placeholder="Password">
781
- <p class="settings-info"> Only fill in these fields if your site (front-end) is not publicly accessible and visitors need a user/pass to connect to it. If you don't know what is this then just <strong>leave the fields empty</strong>.</p>
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
782
  </td>
783
  </tr>
784
  <tr>
785
- <th scope="row"><label for="resize">Process in front-end</label></th>
786
  <td>
787
- <input name="frontBootstrap" type="checkbox" id="resize" <?php echo( $frontBootstrap );?>> Automatically optimize images added by users in front end.
788
- <p class="settings-info">Check this if you have users that add images or PDF documents from custom forms in the front-end. This could increase the load on your server if you have a lot of users simultaneously connected.</p>
 
 
789
  </td>
790
  </tr>
791
  </tbody>
792
  </table>
793
  <p class="submit">
794
- <input type="submit" name="saveAdv" id="saveAdv" class="button button-primary" title="Save Changes" value="Save Changes"> &nbsp;
795
- <input type="submit" name="saveAdv" id="bulkAdvGo" class="button button-primary" title="Save and go to the Bulk Processing page" value="Save and Go to Bulk Process"> &nbsp;
796
  </p>
797
  </div>
798
  <script>
@@ -804,66 +882,75 @@ class ShortPixelView {
804
  function displaySettingsStats($quotaData, $averageCompression, $savedSpace, $savedBandwidth,
805
  $remainingImages, $totalCallsMade, $fileCount, $backupFolderSize) { ?>
806
  <a id="facts"></a>
807
- <h3>Your ShortPixel Stats</h3>
808
  <table class="form-table">
809
  <tbody>
810
  <tr>
811
- <th scope="row"><label for="averagCompression">Average compression of your files:</label></th>
812
  <td><?php echo($averageCompression);?>%</td>
813
  </tr>
814
  <tr>
815
- <th scope="row"><label for="savedSpace">Saved disk space by ShortPixel</label></th>
816
  <td><?php echo($savedSpace);?></td>
817
  </tr>
818
  <tr>
819
- <th scope="row"><label for="savedBandwidth">Bandwith* saved with ShortPixel:</label></th>
820
  <td><?php echo($savedBandwidth);?></td>
821
  </tr>
822
  </tbody>
823
  </table>
824
 
825
- <p style="padding-top: 0px; color: #818181;" >* Saved bandwidth is calculated at 10,000 impressions/image</p>
826
 
827
- <h3>Your ShortPixel Plan</h3>
828
  <table class="form-table">
829
  <tbody>
830
  <tr>
831
- <th scope="row" bgcolor="#ffffff"><label for="apiQuota">Your ShortPixel plan</label></th>
832
  <td bgcolor="#ffffff">
833
- <?php echo($quotaData['APICallsQuota']);?>/month, renews in <?php echo(floor(30 + (strtotime($quotaData['APILastRenewalDate']) - time()) / 86400));?> days, on <?php echo(date('M d, Y', strtotime($quotaData['APILastRenewalDate']. ' + 30 days')));?> ( <a href="https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>" target="_blank">Need More? See the options available</a> )<br/>
834
- <a href="https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>/tell-a-friend" target="_blank">Join our friend referral system</a> to win more credits. For each user that joins, you receive +100 images credits/month.
 
 
 
835
  </td>
836
  </tr>
837
  <tr>
838
- <th scope="row"><label for="usedQUota">One time credits:</label></th>
839
  <td><?php echo( number_format($quotaData['APICallsQuotaOneTimeNumeric']));?></td>
840
  </tr>
841
  <tr>
842
- <th scope="row"><label for="usedQUota">Number of images processed this month:</label></th>
843
- <td><?php echo($totalCallsMade);?> (<a href="https://api.shortpixel.com/v2/report.php?key=<?php echo($this->ctrl->getApiKey());?>" target="_blank">see report</a>)</td>
 
 
 
844
  </tr>
845
  <tr>
846
- <th scope="row"><label for="remainingImages">Remaining** images in your plan: </label></th>
847
- <td><?php echo($remainingImages);?> images</td>
848
  </tr>
849
  </tbody>
850
  </table>
851
 
852
- <p style="padding-top: 0px; color: #818181;" >** Increase your image quota by <a href="https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>" target="_blank">upgrading your ShortPixel plan.</a></p>
 
 
 
853
 
854
  <table class="form-table">
855
  <tbody>
856
  <tr>
857
- <th scope="row"><label for="totalFiles">Total number of processed files:</label></th>
858
  <td><?php echo($fileCount);?></td>
859
  </tr>
860
  <?php if($this->ctrl->backupImages()) { ?>
861
  <tr>
862
- <th scope="row"><label for="sizeBackup">Original images are stored in a backup folder. Your backup folder size is now:</label></th>
863
  <td>
864
  <form action="" method="POST">
865
  <?php echo($backupFolderSize);?>
866
- <input type="submit" style="margin-left: 15px; vertical-align: middle;" class="button button-secondary" name="emptyBackup" value="Empty backups"/>
867
  </form>
868
  </td>
869
  </tr>
@@ -878,18 +965,19 @@ class ShortPixelView {
878
 
879
  public function renderCustomColumn($id, $data){ ?>
880
  <div id='sp-msg-<?php echo($id);?>' class='column-wp-shortPixel'>
 
881
  <?php switch($data['status']) {
882
  case 'n/a': ?>
883
- Optimization N/A <?php
884
  break;
885
  case 'notFound': ?>
886
- Image does not exist. <?php
887
  break;
888
  case 'invalidKey':
889
  if(defined("SHORTPIXEL_API_KEY")) { // multisite key - need to be validated on each site but it's not invalid
890
- ?> Please <a href="options-general.php?page=wp-shortpixel">go to Settings</a> to validate the API Key. <?php
891
  } else {
892
- ?> Invalid API Key. <a href="options-general.php?page=wp-shortpixel">Check your Settings</a> <?php
893
  }
894
  break;
895
  case 'quotaExceeded':
@@ -897,7 +985,9 @@ class ShortPixelView {
897
  break;
898
  case 'optimizeNow':
899
  if($data['showActions']) { ?>
900
- <a class='button button-smaller button-primary' href="javascript:manualOptimization('<?php echo($id)?>')">Optimize now</a>
 
 
901
  <?php }
902
  echo($data['message']);
903
  if(isset($data['thumbsTotal']) && $data['thumbsTotal'] > 0) {
@@ -905,13 +995,15 @@ class ShortPixelView {
905
  }
906
  break;
907
  case 'retry': ?>
908
- <?php echo($data['message'])?> <a class='button button-smaller button-primary' href="javascript:manualOptimization('<?php echo($id)?>')">Retry</a> <?php
 
 
909
  break;
910
  case 'pdfOptimized':
911
  case 'imgOptimized':
912
  $this->renderListCell($id, $data['showActions'],
913
  !$data['thumbsOpt'] && $data['thumbsTotal'], $data['thumbsTotal'], $data['backup'], $data['type'],
914
- $this->getSuccessText($data['percent'],$data['bonus'],$data['type'],$data['thumbsOpt'],$data['thumbsTotal']));
915
  break;
916
  }
917
  //die(var_dump($data));
@@ -920,13 +1012,16 @@ class ShortPixelView {
920
  <?php
921
  }
922
 
923
- public function getSuccessText($percent, $bonus, $type, $thumbsOpt = 0, $thumbsTotal = 0) {
924
- return ($percent ? 'Reduced by <strong>' . $percent . '%</strong> ' : '')
925
- .(!$bonus ? ' ('.$type.')':'')
926
- .($bonus && $percent ? '<br>' : '')
927
- .($bonus ? 'Bonus processing' : '')
928
- .($bonus ? ' ('.$type.')':'') . '<br>'
929
- .($thumbsOpt ? "+" . $thumbsOpt . ($thumbsTotal > $thumbsOpt ? " of ".$thumbsTotal : '') . " thumbnails optimized" : '');
 
 
 
930
  }
931
 
932
  public function renderListCell($id, $showActions, $optimizeThumbs, $thumbsTotal, $backup, $type, $message) {
@@ -934,18 +1029,19 @@ class ShortPixelView {
934
  <div class='sp-column-actions'>
935
  <?php if($optimizeThumbs) { ?>
936
  <a class='button button-smaller button-primary' href="javascript:optimizeThumbs(<?php echo($id)?>);">
937
- Optimize <?php echo($thumbsTotal);?> thumbnails
938
  </a>
939
  <?php }
940
  if($backup) {
941
  if($type) {
942
  $invType = $type == 'lossy' ? 'lossless' : 'lossy'; ?>
943
- <a class='button button-smaller' href="javascript:reoptimize('<?php echo($id)?>', '<?php echo($invType)?>');" title="Reoptimize from the backed-up image">
944
- Re-optimize <?php echo($invType)?>
 
945
  </a><?php
946
  } ?>
947
  <a class='button button-smaller' href="admin.php?action=shortpixel_restore_backup&attachment_ID=<?php echo($id)?>">
948
- Restore backup
949
  </a>
950
  <?php } ?>
951
  </div>
@@ -957,8 +1053,12 @@ class ShortPixelView {
957
 
958
  public function getQuotaExceededHTML($message = '') {
959
  return "<div class='sp-column-actions' style='width:110px;'>
960
- <a class='button button-smaller button-primary' href='https://shortpixel.com/login/". $this->ctrl->getApiKey() . "' target='_blank'>Extend Quota</a>
961
- <a class='button button-smaller' href='admin.php?action=shortpixel_check_quota'>Check&nbsp;&nbsp;Quota</a></div>
 
 
 
 
962
  <div class='sp-column-info'>" . $message . " Quota Exceeded.</div>";
963
  }
964
  }
20
  <?php if($averageCompression) { ?>
21
  <div style="float:right; margin-top: 10px">
22
  <div class="bulk-progress-indicator">
23
+ <div style="margin-bottom:5px"><?php _e('Average reduction','shortpixel');?></div>
24
  <div id="sp-avg-optimization"><input type="text" id="sp-avg-optimization-dial" value="<?php echo("" . round($averageCompression))?>" class="dial"></div>
25
  <script>
26
  jQuery(function() {
30
  </div>
31
  </div>
32
  <?php } ?>
33
+ <h3><?php /* translators: header of the alert box */ _e('Quota Exceeded','shortpixel');?></h3>
34
+ <p><?php /* translators: body of the alert box */
35
+ printf(__('The plugin has optimized <strong>%s images</strong> and stopped because it reached the available quota limit.','shortpixel'),
36
+ number_format($quotaData['APICallsMadeNumeric'] + $quotaData['APICallsMadeOneTimeNumeric']));?>
37
  <?php if($quotaData['totalProcessedFiles'] < $quotaData['totalFiles']) { ?>
38
+ <?php
39
+ printf(__('<strong>%s images and %s thumbnails</strong> are not yet optimized by ShortPixel.','shortpixel'),
40
+ number_format($quotaData['mainFiles'] - $quotaData['mainProcessedFiles']),
41
+ number_format(($quotaData['totalFiles'] - $quotaData['mainFiles']) - ($quotaData['totalProcessedFiles'] - $quotaData['mainProcessedFiles']))); ?>
42
+ <?php } ?></p>
43
  <div> <!-- style='float:right;margin-top:20px;'> -->
44
+ <a class='button button-primary' href='https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>' target='_blank'><?php _e('Upgrade','shortpixel');?></a>
45
+ <input type='button' name='checkQuota' class='button' value='<?php _e('Confirm New Quota','shortpixel');?>' onclick="javascript:window.location.reload();">
46
  </div>
47
+ <p><?php _e('Get more image credits by referring ShortPixel to your friends!','shortpixel');?>
48
+ <a href="https://shortpixel.com/login/<?php echo($this->ctrl->getApiKey());?>/tell-a-friend" target="_blank">
49
+ <?php _e('Check your account','shortpixel');?>
50
+ </a> <?php _e('for your unique referral link. For each user that joins, you will receive +100 additional image credits/month.','shortpixel');?>
51
+ </p>
52
 
53
  </div> <?php
54
  }
55
 
56
  public static function displayApiKeyAlert()
57
  { ?>
58
+ <p><?php _e('In order to start the optimization process, you need to validate your API Key in the '
59
+ . '<a href="options-general.php?page=wp-shortpixel">ShortPixel Settings</a> page in your WordPress Admin.','shortpixel');?>
60
+ </p>
61
+ <p><?php _e('If you don’t have an API Key, you can get one delivered to your inbox, for free.','shortpixel');?></p>
62
+ <p><?php _e('Please <a href="https://shortpixel.com/wp-apikey" target="_blank">sign up to get your API key.</a>','shortpixel');?>
63
+ </p>
64
  <?php
65
  }
66
 
67
  public static function displayActivationNotice($when = 'activate') { ?>
68
  <div class='notice notice-warning' id='short-pixel-notice-<?php echo($when);?>'>
69
  <?php if($when != 'activate') { ?>
70
+ <div style="float:right;"><a href="javascript:dismissShortPixelNotice('<?php echo($when);?>')" class="button" style="margin-top:10px;"><?php _e('Dismiss','shortpixel');?></a></div>
71
  <?php } ?>
72
+ <h3><?php _e('ShortPixel Optimization','shortpixel');?></h3> <?php
73
  switch($when) {
74
  case '2h' :
75
+ _e("Action needed. Please <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> to activate your ShortPixel plugin.",'shortpixel') . "<BR><BR>";
76
  break;
77
  case '3d':
78
+ _e("Your image gallery is not optimized. It takes 2 minutes to <a href='https://shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate your ShortPixel plugin.",'shortpixel') . "<BR><BR>";
79
  break;
80
  case 'activate':
81
  self::displayApiKeyAlert();
99
  <input type='hidden' id='mainToProcess' value='<?php echo($quotaData['mainFiles'] - $quotaData['mainProcessedFiles']);?>'/>
100
  <input type='hidden' id='totalToProcess' value='<?php echo($quotaData['totalFiles'] - $quotaData['totalProcessedFiles']);?>'/>
101
  <div class="bulk-stats-container">
102
+ <h3 style='margin-top:0;'><?php _e('Your media library','shortpixel');?></h3>
103
+ <div class="bulk-label"><?php _e('Original images','shortpixel');?></div>
104
  <div class="bulk-val"><?php echo(number_format($quotaData['mainMlFiles']));?></div><br>
105
+ <div class="bulk-label"><?php _e('Smaller thumbnails','shortpixel');?></div>
106
  <div class="bulk-val"><?php echo(number_format($quotaData['totalMlFiles'] - $quotaData['mainMlFiles']));?></div>
107
  <div style='width:165px; display:inline-block; padding-left: 5px'>
108
+ <input type='checkbox' id='thumbnails' name='thumbnails' onclick='ShortPixel.checkThumbsUpdTotal(this)' <?php echo($this->ctrl->processThumbnails() ? "checked":"");?>>
109
+ <?php _e('Include thumbnails','shortpixel');?>
110
  </div><br>
111
  <?php if($quotaData["totalProcessedMlFiles"] > 0) { ?>
112
+ <div class="bulk-label bulk-total"><?php _e('Total images','shortpixel');?></div>
113
  <div class="bulk-val bulk-total"><?php echo(number_format($quotaData['totalMlFiles']));?></div>
114
+ <br><div class="bulk-label"><?php _e('Already optimized originals','shortpixel');?></div>
115
  <div class="bulk-val"><?php echo(number_format($quotaData['mainProcessedMlFiles']));?></div><br>
116
+ <div class="bulk-label"><?php _e('Already optimized thumbnails','shortpixel');?></div>
117
  <div class="bulk-val"><?php echo(number_format($quotaData['totalProcessedMlFiles'] - $quotaData['mainProcessedMlFiles']));?></div><br>
118
  <?php } ?>
119
+ <div class="bulk-label bulk-total"><?php _e('Total to be optimized','shortpixel');?></div>
120
  <div class="bulk-val bulk-total" id='displayTotal'><?php echo(number_format($quotaData['totalMlFiles'] - $quotaData['totalProcessedMlFiles']));?></div>
121
 
122
  <?php if($customCount > 0) { ?>
123
+ <h3 style='margin-bottom:10px;'><?php _e('Your custom folders','shortpixel');?></h3>
124
+ <div class="bulk-label bulk-total"><?php _e('Total to be optimized','shortpixel');?></div>
125
  <div class="bulk-val bulk-total" id='displayTotal'><?php echo(number_format($customCount));?></div>
126
  <?php } ?>
127
  </div>
134
  <img src='<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/robo-slider.png' ));?>'/>
135
  </div>
136
  <div class="bulk-btn-txt">
137
+ <?php printf(__('<span class="label">Start Optimizing</span><br> <span class="total">%s</span> images','shortpixel'),
138
+ number_format($quotaData['totalFiles'] - $quotaData['totalProcessedFiles']));?>
139
  </div>
140
  <div class="bulk-btn-img" class="bulk-btn-img">
141
  <img src='<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/arrow.png' ));?>'/>
145
  </div>
146
  <?php } else {?>
147
  <div class="bulk-play bulk-nothing-optimize">
148
+ <?php _e('Nothing to optimize! The images that you add to Media Gallery will be automatically optimized after upload.','shortpixel');?>
149
  </div>
150
  <?php } ?>
151
  </form>
153
  <?php if($quotaData['totalFiles'] - $quotaData['totalProcessedFiles'] > 0) { ?>
154
  <div class='shortpixel-clearfix'></div>
155
  <div class="bulk-wide">
156
+ <h3 style='font-size: 1.1em; font-weight: bold;'>
157
+ <?php _e('After you start the bulk process, in order for the optimization to run, you must keep this page open and your computer running. If you close the page for whatever reason, just turn back to it and the bulk process will resume.','shortpixel');?>
158
+ </h3>
159
  </div>
160
  <?php } ?>
161
  <div class='shortpixel-clearfix'></div>
162
  <div class="bulk-text-container">
163
+ <h3><?php _e('What are Thumbnails?','shortpixel');?></h3>
164
+ <p><?php _e('Thumbnails are smaller images usually generated by your WP theme. Most themes generate between 3 and 6 thumbnails for each Media Library image.','shortpixel');?></p>
165
+ <p><?php _e("The thumbnails also generate traffic on your website pages and they influence your website's speed.",'shortpixel');?></p>
166
+ <p><?php _e("It's highly recommended that you include thumbnails in the optimization as well.",'shortpixel');?></p>
167
  </div>
168
  <div class="bulk-text-container" style="padding-right:0">
169
+ <h3><?php _e('How does it work?','shortpixel');?></h3>
170
+ <p><?php _e('The plugin processes images starting with the newest ones you uploaded in your Media Library.','shortpixel');?></p>
171
+ <p><?php _e('You will be able to pause the process anytime.','shortpixel');?></p>
172
+ <p><?php echo($this->ctrl->backupImages() ? __("<p>Your original images will be stored in a separate back-up folder.</p>",'shortpixel') : "");?></p>
173
+ <p><?php _e('You can watch the images being processed live, right here, after you start optimizing.','shortpixel');?></p>
174
  </div>
175
  <?php
176
  } elseif($percent) // bulk is paused
177
  { ?>
178
  <?php echo($this->displayBulkProgressBar(false, $percent, "", $quotaData['APICallsRemaining'], $this->ctrl->getAverageCompression(), 1, $customCount));?>
179
+ <p><?php _e('Please see below the optimization status so far:','shortpixel');?></p>
180
  <?php $this->displayBulkStats($quotaData['totalProcessedFiles'], $quotaData['mainProcessedFiles'], $under5PercentCount, $averageCompression, $savedSpace);?>
181
  <?php if($quotaData['totalProcessedFiles'] < $quotaData['totalFiles']) { ?>
182
+ <p><?php printf(__('%d images and %d thumbnails are not yet optimized by ShortPixel.','shortpixel'),
183
+ number_format($quotaData['mainFiles'] - $quotaData['mainProcessedFiles']),
184
+ number_format(($quotaData['totalFiles'] - $quotaData['mainFiles']) - ($quotaData['totalProcessedFiles'] - $quotaData['mainProcessedFiles'])));?>
185
+ </p>
186
  <?php } ?>
187
+ <p><?php _e('You can continue optimizing your Media Gallery from where you left, by clicking the Resume processing button. Already optimized images will not be reprocessed.','shortpixel');?></p>
188
  <?php
189
  } else { ?>
190
  <div class="sp-container">
194
  <input type="text" value="<?php echo("" . round($averageCompression))?>" id="sp-total-optimization-dial" class="dial">
195
  </div>
196
  <p style="margin-top:4px;">
197
+ <span style="font-size:1.2em;font-weight:bold"><?php _e('Congratulations!','shortpixel');?></span><br>
198
+ <?php _e('Your media library has been successfully optimized!','shortpixel');?>
199
+ <span class="sp-bulk-summary"><a href='javascript:void(0);'><?php _e('Summary','shortpixel');?></a></span>
200
  </p>
201
  </div>
202
  <div class='notice notice-success sp-floating-block sp-single-width' style="height: 80px;overflow:hidden;padding-right: 0;">
203
  <div style="float:left; margin-top:-5px">
204
  <p style='margin-bottom: -2px; font-weight: bold;'>
205
+ <?php _e('Share your optimization results:','shortpixel');?>
206
  </p>
207
+ <div style='display:inline-block; margin: 16px 16px 6px 0;float:left'>
208
  <div id="fb-root"></div>
209
  <script>
210
  (function(d, s, id) {
211
  var js, fjs = d.getElementsByTagName(s)[0];
212
  if (d.getElementById(id)) return;
213
  js = d.createElement(s); js.id = id;
214
+ js.src = "//connect.facebook.net/<?php echo(get_locale());?>/sdk.js#xfbml=1&version=v2.6";
215
  fjs.parentNode.insertBefore(js, fjs);
216
  }(document, 'script', 'facebook-jssdk'));
217
  </script>
220
  </div>
221
  <div style="float:left;margin:-7px 0 0 10px">
222
  <a href="https://twitter.com/share" class="twitter-share-button" data-url="https://shortpixel.com"
223
+ data-text="<?php
224
+ if(0+$averageCompression>20) {
225
+ _e("I just optimized my images by ",'shortpixel');
226
+ } else {
227
+ _e("I just optimized my images ",'shortpixel');
228
+ }
229
+ echo(round($averageCompression) ."%");
230
+ _e("with @ShortPixel, a great plugin for increasing #WordPress page speed:",'shortpixel');?>"
231
+ data-size='large'><?php _e('Tweet','shortpixel');?></a>
232
  </div>
233
  <script>
234
  jQuery(function() {
235
  jQuery("#sp-total-optimization-dial").val("<?php echo("" . round($averageCompression))?>");
236
  ShortPixel.percentDial("#sp-total-optimization-dial", 60);
237
 
238
+ jQuery(".sp-bulk-summary").spTooltip({
239
  tooltipSource: "inline",
240
  tooltipSourceID: "#sp-bulk-stats"
241
  });
254
  <div class='shortpixel-rate-us' style='float:left;padding-top:0'>
255
  <a href="https://wordpress.org/support/view/plugin-reviews/shortpixel-image-optimiser?rate=5#postform" target="_blank">
256
  <span>
257
+ <?php _e('Please rate us!','shortpixel');?>&nbsp;
258
  </span><br><img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/stars.png' ));?>">
259
  </a>
260
  </div>
264
  <?php $this->displayBulkStats($quotaData['totalProcessedFiles'], $quotaData['mainProcessedFiles'], $under5PercentCount, $averageCompression, $savedSpace);?>
265
  </div>
266
  </div>
267
+ <p><?php printf(__('Go to the ShortPixel <a href="%soptions-general.php?page=wp-shortpixel#stats">Stats</a> '
268
+ . 'and see all your websites\' optimized stats. Download your detailed <a href="https://api.shortpixel.com/v2/report.php?key=%s">Optimization Report</a> '
269
+ . 'to check your image optimization statistics for the last 40 days.','shortpixel'), get_admin_url(), $this->ctrl->getApiKey());?></p>
270
  <?php
271
  $failed = $this->ctrl->getPrioQ()->getFailed();
272
  if(count($failed)) { ?>
273
  <div class="bulk-progress" style="margin-bottom: 15px">
274
  <p>
275
+ <?php _e('The following images could not be processed because of their limited write rights. This usually happens if you have changed your hosting provider. Please restart the optimization process after you granted write rights to all the files below.','shortpixel');?>
276
  </p>
277
  <?php $this->displayFailed($failed); ?>
278
  </div>
279
  <?php } ?>
280
+ <div class="bulk-progress notice notice-info sp-floating-block sp-double-width">
281
+ <?php
282
  $todo = $reopt = false;
283
  if($quotaData['totalProcessedFiles'] < $quotaData['totalFiles']) {
284
  $todo = true;
286
  $thumbsNotProcessed = ($quotaData['totalFiles'] - $quotaData['mainFiles']) - ($quotaData['totalProcessedFiles'] - $quotaData['mainProcessedFiles']);
287
  ?>
288
  <p>
289
+ <?php
290
+ if($mainNotProcessed && $thumbsNotProcessed) {
291
+ printf(__("%s images and %s thumbnails are not yet optimized by ShortPixel.",'shortpixel'),
292
+ number_format($mainNotProcessed), number_format($thumbsNotProcessed));
293
+ } elseif($mainNotProcessed) {
294
+ printf(__("%s images are not yet optimized by ShortPixel.",'shortpixel'), number_format($mainNotProcessed));
295
+ } elseif($thumbsNotProcessed) {
296
+ printf(__("%s thumbnails are not yet optimized by ShortPixel.",'shortpixel'), number_format($thumbsNotProcessed));
297
+ }
298
+ _e('','shortpixel');
299
+ if (count($quotaData['filesWithErrors'])) {
300
+ _e('Some have errors:','shortpixel');
301
+ foreach($quotaData['filesWithErrors'] as $id => $data) {
302
  if(ShortPixelMetaFacade::isCustomQueuedId($id)) {
303
  echo('<a href="'.trailingslashit(network_site_url("/")) . ShortPixelMetaFacade::filenameToRootRelative($data['Path']).'" title="'.$data['Message'].'" target="_blank">'.$data['Name'].'</a>,&nbsp;');
304
  } else {
305
  echo('<a href="post.php?post='.$id.'&action=edit" title="'.$data['Message'].'">'.$data['Name'].'</a>,&nbsp;');
306
  }
307
+ }
308
+ } ?>
309
  </p>
310
  <?php }
311
  $settings = $this->ctrl->getSettings();
320
  $thumbsCount = $quotaData['totalProc'.$statType.'Files'] - $quotaData['mainProc'.$statType.'Files'];
321
  ?>
322
  <p id="with-thumbs" <?php echo(!$settings->processThumbnails ? 'style="display:none;"' : "");?>>
323
+ <?php printf(__('%s images and %s thumbnails were optimized <strong>%s</strong>. You can re-optimize <strong>%s</strong> the ones that have backup.','shortpixel'),
324
+ number_format($quotaData['mainProc'.$statType.'Files']),
325
+ number_format($thumbsCount), $otherType, $optType);?>
 
 
 
 
 
326
  </p>
327
  <p id="without-thumbs" <?php echo($settings->processThumbnails ? 'style="display:none;"' : "");?>>
328
+ <?php printf(__('%s images were optimized <strong>%s</strong>. You can re-optimize <strong>%s</strong> the ones that have backup. ','shortpixel'),
329
+ number_format($quotaData['mainProc'.$statType.'Files']),
330
+ $otherType, $optType);?>
331
+ <?php echo($thumbsCount ? number_format($thumbsCount) . __(' thumbnails will be restored to originals.','shortpixel') : '');?>
 
 
 
 
332
  </p>
333
  <?php
334
  } ?>
335
+ <p><?php if($todo) {
336
+ _e('Restart the optimization process for these images by clicking the button below.','shortpixel');
337
+ } else {
338
+ _e('Restart the optimization process for new images added to your library by clicking the button below.','shortpixel');
339
+ }
340
+ printf(__('Already <strong>%s</strong> optimized images will not be reprocessed.','shortpixel'), $todo ? ($optType) : '');
341
+ if($reopt) { ?>
342
+ <br><?php _e('Please note that reoptimizing images as <strong>lossy/lossless</strong> may use additional credits.','shortpixel')?>
343
+ <a href="http://blog.shortpixel.com/the-all-new-re-optimization-functions-in-shortpixel/" target="_blank"><?php _e('More info','shortpixel');?></a>
344
  <?php } ?>
345
  </p>
346
  <form action='' method='POST' >
347
+ <input type='checkbox' id='bulk-thumbnails' name='thumbnails' <?php echo($this->ctrl->processThumbnails() ? "checked":"");?>
348
+ onchange="ShortPixel.onBulkThumbsCheck(this)"> <?php _e('Include thumbnails','shortpixel');?><br><br>
349
+ <input type='submit' name='bulkProcess' id='bulkProcess' class='button button-primary' value='<?php _e('Restart Optimizing','shortpixel');?>'>
350
  </form>
351
  </div>
352
  <?php } ?>
357
  public function displayBulkProcessingRunning($percent, $message, $remainingQuota, $averageCompression, $type) {
358
  ?>
359
  <div class="wrap short-pixel-bulk-page">
360
+ <h1><?php _e('Bulk Image Optimization by ShortPixel','shortpixel');?></h1>
361
  <?php $this->displayBulkProgressBar(true, $percent, $message, $remainingQuota, $averageCompression, $type);?>
362
  <div class="sp-floating-block notice bulk-notices-parent">
363
  <div class="bulk-notice-container">
364
  <div class="bulk-notice-msg bulk-lengthy">
365
  <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/loading-dark-big.gif' ));?>">
366
+ <?php _e('Lengthy operation in progress:','shortpixel');?><br>
367
+ <?php _e('Optimizing image','shortpixel');?> <a href="#" data-href="<?php echo(get_admin_url());?>/post.php?post=__ID__&action=edit" target="_blank">placeholder.png</a>
368
  </div>
369
  <div class="bulk-notice-msg bulk-error" id="bulk-error-template">
370
  <div style="float: right; margin-top: -4px; margin-right: -8px;">
371
  <a href="javascript:void(0);" onclick="ShortPixel.removeBulkMsg(this)" style='color: #c32525;'>&#10006;</a>
372
  </div>
373
  <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/exclamation-big.png' ));?>">
374
+ <span class="sp-err-title"><?php _e('Error processing file:','shortpixel');?><br></span>
375
+ <span class="sp-err-content"><?php echo $message; ?></span> <a class="sp-post-link" href="<?php echo(get_admin_url());?>/post.php?post=__ID__&action=edit" target="_blank">placeholder.png</a>
376
  </div>
377
  </div>
378
  </div>
379
  <div class="bulk-progress bulk-slider-container notice notice-info sp-floating-block sp-full-width">
380
+ <div class="short-pixel-block-title"><span><?php _e('Just optimized:','shortpixel');?></span><span class="filename"></span></div>
381
  <div class="bulk-slider">
382
  <div class="bulk-slide" id="empty-slide">
383
  <div class="bulk-slide-images">
384
  <div class="img-original">
385
  <div><img class="bulk-img-orig" src=""></div>
386
+ <div><?php _e('Original image','shortpixel');?></div>
387
  </div>
388
  <div class="img-optimized">
389
  <div><img class="bulk-img-opt" src=""></div>
390
+ <div><?php _e('Optimized image','shortpixel');?></div>
391
  </div>
392
  </div>
393
  <div class="img-info">
394
+ <div style="font-size: 14px; line-height: 10px; margin-bottom:16px;"><?php /*translators: percent follows */ _e('Optimized by:','shortpixel');?></div>
395
  <span class="bulk-opt-percent"></span>
396
  </div>
397
  </div>
413
  <div style="float:right">
414
  <?php if(false) { ?>
415
  <div class="bulk-progress-indicator">
416
+ <div style="margin-bottom:5px"><?php _e('Remaining credits','shortpixel');?></div>
417
  <div style="margin-top:22px;margin-bottom: 5px;font-size:2em;font-weight: bold;"><?php echo(number_format($remainingQuota))?></div>
418
  <div>images</div>
419
  </div>
420
  <?php } ?>
421
  <div class="bulk-progress-indicator">
422
+ <div style="margin-bottom:5px"><?php _e('Average reduction','shortpixel');?></div>
423
  <div id="sp-avg-optimization"><input type="text" id="sp-avg-optimization-dial" value="<?php echo("" . round($averageCompression))?>" class="dial"></div>
424
  <script>
425
  jQuery(function() {
429
  </div>
430
  </div>
431
  <?php if($running) { ?>
432
+ <h2><?php echo($type & 1 ? __('Media Library','shortpixel') . " " : "");
433
+ echo($type & 3 == 3 ? __('and','shortpixel') . " " : "");
434
+ echo($type & 2 ? __('Custom folders','shortpixel') . " " : ""); _e('optimization in progress ...','shortpixel');?></h2>
435
+ <p style="margin: 0 0 18px;"><?php _e('Bulk optimization has started.','shortpixel');?><br>
436
+ <?php printf(__('This process will take some time, depending on the number of images in your library. In the meantime, you can continue using
437
+ the admin as usual, <a href="%s" target="_blank">in a different browser window or tab</a>.<br>
438
+ However, <strong>if you close this window, the bulk processing will pause</strong> until you open the media gallery or the ShortPixel bulk page again.','shortpixel'), get_admin_url());?>
439
  </p>
440
  <?php } else { ?>
441
+ <h2><?php echo(__('Media Library','shortpixel') . ' ' . ($type & 2 ? __("and Custom folders",'shortpixel') . ' ' : "") . __('optimization paused','shortpixel')); ?></h2>
442
+ <p style="margin: 0 0 50px;"><?php _e('Bulk processing is paused until you resume the optimization process.','shortpixel');?></p>
443
  <?php }?>
444
  <div id="bulk-progress" class="progress" >
445
  <div class="progress-img" style="left: <?php echo($percent);?>%;">
456
  <input type="submit" class="button button-primary bulk-cancel" onclick="clearBulkProcessor();"
457
  name="bulkProcessStop" value="Stop" style="margin-left:10px"/>
458
  <input type="submit" class="button button-primary bulk-cancel" onclick="clearBulkProcessor();"
459
+ name="<?php echo($running ? "bulkProcessPause" : "bulkProcessResume");?>" value="<?php echo($running ? __('Pause','shortpixel') : __('Resume processing','shortpixel'));?>"/>
460
  <?php if(!$running && $customPending) {?>
461
  <input type="submit" class="button button-primary bulk-cancel" onclick="clearBulkProcessor();"
462
+ name="skipToCustom" value="<?php _e('Only other media','shortpixel');?>" title="<?php _e('Process only the other media, skipping the Media Library','shortpixel');?>" style="margin-right:10px"/>
463
  <?php }?>
464
  </form>
465
  <?php } else { ?>
466
+ <a href="options-general.php?page=wp-shortpixel" class="button button-primary bulk-cancel" style="margin-left:10px"><?php _e('Manage custom folders','shortpixel');?></a>
467
  <?php }?>
468
  </div>
469
  <?php
471
 
472
  public function displayBulkStats($totalOptimized, $mainOptimized, $under5PercentCount, $averageCompression, $savedSpace) {?>
473
  <div class="bulk-progress bulk-stats">
474
+ <div class="label"><?php _e('Processed Images and PDFs:','shortpixel');?></div><div class="stat-value"><?php echo(number_format($mainOptimized));?></div><br>
475
+ <div class="label"><?php _e('Processed Thumbnails:','shortpixel');?></div><div class="stat-value"><?php echo(number_format($totalOptimized - $mainOptimized));?></div><br>
476
+ <div class="label totals"><?php _e('Total files processed:','shortpixel');?></div><div class="stat-value"><?php echo(number_format($totalOptimized));?></div><br>
477
+ <div class="label totals"><?php _e('Minus files with <5% optimization (free):','shortpixel');?></div><div class="stat-value"><?php echo(number_format($under5PercentCount));?></div><br><br>
478
+ <div class="label totals"><?php _e('Used quota:','shortpixel');?></div><div class="stat-value"><?php echo(number_format($totalOptimized - $under5PercentCount));?></div><br>
479
  <br>
480
+ <div class="label"><?php _e('Average optimization:','shortpixel');?></div><div class="stat-value"><?php echo($averageCompression);?>%</div><br>
481
+ <div class="label"><?php _e('Saved space:','shortpixel');?></div><div class="stat-value"><?php echo($savedSpace);?></div>
482
  </div>
483
  <?php
484
  }
504
  $customFolders = null, $folderMsg = false, $addedFolder = false, $showAdvanced = false) {
505
  //wp_enqueue_script('jquery.idTabs.js', plugins_url('/js/jquery.idTabs.js',__FILE__) );
506
  ?>
507
+ <h1><?php _e('ShortPixel Plugin Settings','shortpixel');?></h1>
508
  <p style="font-size:18px">
509
  <a href="https://shortpixel.com/<?php echo($this->ctrl->getVerifiedKey() ? "login/".$this->ctrl->getApiKey() : "pricing");?>" target="_blank" style="font-size:18px">
510
+ <?php _e('Upgrade now','shortpixel');?>
511
  </a> |
512
+ <a href="https://shortpixel.com/contact/<?php echo($this->ctrl->getEncryptedData());?>" target="_blank" style="font-size:18px"><?php _e('Support','shortpixel');?> </a>
513
  </p>
514
  <?php if($notice !== null) { ?>
515
  <br/>
527
  <article id="shortpixel-settings-tabs" class="sp-tabs">
528
  <form name='wp_shortpixel_options' action='options-general.php?page=wp-shortpixel&noheader=true' method='post' id='wp_shortpixel_options'>
529
  <section <?php echo($showAdvanced ? "" : "class='sel-tab'");?> id="tab-settings">
530
+ <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-settings"><?php _e('General','shortpixel');?></a></h2>
531
  <?php $this->displaySettingsForm($showApiKey, $editApiKey, $quotaData);?>
532
  </section>
533
  <?php if($this->ctrl->getVerifiedKey()) {?>
534
  <section <?php echo($showAdvanced ? "class='sel-tab'" : "");?> id="tab-adv-settings">
535
+ <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-adv-settings"><?php _e('Advanced','shortpixel');?></a></h2>
536
  <?php $this->displayAdvancedSettingsForm($customFolders, $addedFolder);?>
537
  </section>
538
  <?php } ?>
539
  </form><span style="display:none">&nbsp;</span><?php //the span is a trick to keep the sections ordered as nth-child in styles: 1,2,3,4 (otherwise the third section would be nth-child(2) too, because of the form)
540
  if($averageCompression !== null) {?>
541
  <section id="tab-stats">
542
+ <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-stats"><?php _e('Statistics','shortpixel');?></a></h2>
543
  <?php
544
  $this->displaySettingsStats($quotaData, $averageCompression, $savedSpace, $savedBandwidth,
545
  $remainingImages, $totalCallsMade, $fileCount, $backupFolderSize);?>
547
  <?php }
548
  if($resources !== null) {?>
549
  <section id="tab-resources">
550
+ <h2><a class='tab-link' href='javascript:void(0);' data-id="tab-resources"><?php _e('WP Resources','shortpixel');?></a></h2>
551
+ <?php echo((isset($resources['body']) ? $resources['body'] : __("Please reload",'shortpixel')));?>
552
  </section>
553
  <?php } ?>
554
  </article>
581
  ?>
582
  <div class="wp-shortpixel-options">
583
  <?php if($this->ctrl->getVerifiedKey()) { ?>
584
+ <p><?php printf(__('New images uploaded to the Media Library will be optimized automatically.<br/>If you have existing images you would like to optimize, you can use the <a href="%supload.php?page=wp-short-pixel-bulk">Bulk Optimization Tool</a>.','shortpixel'),get_admin_url());?></p>
585
  <?php } else {
586
  if($showApiKey) {?>
587
+ <h3><?php _e('Step 1:','shortpixel');?></h3>
588
+ <p style='font-size: 14px'><?php printf(__('If you don\'t have an API Key, <a href="https://shortpixel.com/wp-apikey%s" target="_blank">sign up here.</a> It\'s free and it only takes one minute, we promise!','shortpixel'),$this->ctrl->getAffiliateSufix());?></p>
589
+ <h3><?php _e('Step 2:','shortpixel');?></h3>
590
+ <p style='font-size: 14px'><?php _e('Please enter here the API Key you received by email and press Validate.','shortpixel');?></p>
591
  <?php }
592
  }?>
593
  <table class="form-table">
594
  <tbody>
595
  <tr>
596
+ <th scope="row"><label for="key"><?php _e('API Key:','shortpixel');?></label></th>
597
  <td>
598
  <?php
599
  $canValidate = false;
603
  class="regular-text" <?php echo($editApiKey ? "" : 'disabled') ?>>
604
  <?php } elseif(defined("SHORTPIXEL_API_KEY")) {
605
  $canValidate = true;?>
606
+ <input name="key" type="text" id="key" disabled="true" placeholder="<?php _e('Multisite API Key','shortpixel');?>" class="regular-text">
607
  <?php } ?>
608
  <input type="hidden" name="validate" id="valid" value=""/>
609
+ <button type="button" id="validate" class="button button-primary" title="<?php _e('Validate the provided API key','shortpixel');?>"
610
+ onclick="ShortPixel.validateKey()" <?php echo $canValidate ? "" : "disabled"?>><?php _e('Validate','shortpixel');?></button>
611
  <?php if($showApiKey && !$editApiKey) { ?>
612
+ <p class="settings-info"><?php _e('Key defined in wp-config.php.','shortpixel');?></p>
613
  <?php } ?>
614
 
615
  </td>
620
  <?php } else { //if valid key we display the rest of the options ?>
621
  <tr>
622
  <th scope="row">
623
+ <label for="compressionType"><?php _e('Compression type:','shortpixel');?></label>
624
  </th>
625
  <td>
626
+ <input type="radio" name="compressionType" value="1" <?php echo( $this->ctrl->getCompressionType() == 1 ? "checked" : "" );?>><?php
627
+ _e('Lossy (recommended)','shortpixel');?></br>
628
+ <p class="settings-info"><?php _e('<b>Lossy compression: </b>lossy has a better compression rate than lossless compression.</br>The resulting image is identical with the original to the human eye. You can run a test for free ','shortpixel');?>
629
+ <a href="https://shortpixel.com/online-image-compression" target="_blank"><?php _e('here','shortpixel');?></a>.</p></br>
630
+ <input type="radio" name="compressionType" value="0" <?php echo( $this->ctrl->getCompressionType() != 1 ? "checked" : "" );?>><?php
631
+ _e('Lossless','shortpixel');?>
632
+ <p class="settings-info">
633
+ <?php _e('<b>Lossless compression: </b> the shrunk image will be identical with the original and smaller in size.</br>In some rare cases you will need to use
634
+ this type of compression. Some technical drawings or images from vector graphics are possible situations.','shortpixel');?>
635
+ </p>
636
  </td>
637
  </tr>
638
  </tbody>
640
  <table class="form-table">
641
  <tbody>
642
  <tr>
643
+ <th scope="row"><label for="thumbnails"><?php _e('Also include thumbnails:','shortpixel');?></label></th>
644
+ <td><input name="thumbnails" type="checkbox" id="thumbnails" <?php echo( $checked );?>> <?php
645
+ _e('Apply compression also to <strong>image thumbnails.</strong> ','shortpixel');?>
646
+ <?php echo($thumbnailsToProcess ? "(" . number_format($thumbnailsToProcess) . " " . __('thumbnails to optimize','shortpixel') . ")" : "");?>
647
+ <p class="settings-info">
648
+ <?php _e('It is highly recommended that you optimize the thumbnails as they are usually the images most viewed by end users and can generate most traffic.<br>Please note that thumbnails count up to your total quota.','shortpixel');?>
649
+ </p>
650
  </td>
651
  </tr>
652
  <tr>
653
+ <th scope="row"><label for="backupImages"><?php _e('Image backup','shortpixel');?></label></th>
654
  <td>
655
+ <input name="backupImages" type="checkbox" id="backupImages" <?php echo( $checkedBackupImages );?>> <?php _e('Save and keep a backup of your original images in a separate folder.','shortpixel');?>
656
+ <p class="settings-info"><?php _e('You <strong>need to have backup active</strong> in order to be able to restore images to originals or to convert from Lossy to Lossless and back.','shortpixel');?></p>
657
  </td>
658
  </tr>
659
  <tr>
660
+ <th scope="row"><label for="cmyk2rgb"><?php _e('CMYK to RGB conversion','shortpixel');?></label></th>
661
  <td>
662
+ <input name="cmyk2rgb" type="checkbox" id="cmyk2rgb" <?php echo( $cmyk2rgb );?>><?php _e('Adjust your images for computer and mobile screen display.','shortpixel');?>
663
+ <p class="settings-info"><?php _e('Images for the web only need RGB format and converting them from CMYK to RGB makes them smaller.','shortpixel');?></p>
664
  </td>
665
  </tr>
666
  <tr>
667
+ <th scope="row"><label for="removeExif"><?php _e('Remove EXIF','shortpixel');?></label></th>
668
  <td>
669
+ <input name="removeExif" type="checkbox" id="removeExif" <?php echo( $removeExif );?>><?php _e('Remove the EXIF tag of the image (recommended).','shortpixel');?>
670
+ <p class="settings-info"> <?php _e('EXIF is a set of various pieces of information that are automatically embedded into the image upon creation. This can include GPS position, camera manufacturer, date and time, etc.
671
+ Unless you really need that data to be preserved, we recommend removing it as it can lead to <a href="http://blog.shortpixel.com/how-much-smaller-can-be-images-without-exif-icc" target="_blank">better compression rates</a>.','shortpixel');?></p>
672
  </td>
673
  </tr>
674
  <tr>
675
+ <th scope="row"><label for="resize"><?php _e('Resize large images','shortpixel');?></label></th>
676
  <td>
677
+ <input name="resize" type="checkbox" id="resize" <?php echo( $resize );?>> <?php
678
+ _e('to maximum','shortpixel');?> <input type="text" name="width" id="width" style="width:70px"
679
+ value="<?php echo( max($this->ctrl->getResizeWidth(), min(1024, $minSizes['width'])) );?>" <?php echo( $resizeDisabled );?>/> <?php
680
+ _e('pixels wide &times;','shortpixel');?>
681
+ <input type="text" name="height" id="height" style="width:70px" value="<?php echo( max($this->ctrl->getResizeHeight(), min(1024, $minSizes['height'])) );?>" <?php echo( $resizeDisabled );?>/> <?php
682
+ _e('pixels high (original aspect ratio is preserved and image is not cropped)','shortpixel');?>
683
  <p class="settings-info">
684
+ <?php _e('Recommended for large photos, like the ones taken with your phone. Saved space can go up to 80% or more after resizing.','shortpixel');?><br/>
685
  </p>
686
  <div style="margin-top: 10px;">
687
  <input type="radio" name="resize_type" id="resize_type_outer" value="outer" <?php echo($settings->resizeType == 'inner' ? '' : 'checked') ?> style="margin: -50px 10px 60px 0;">
688
+ <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/resize-outer.png' ));?>" title="<?php _e('Sizes will be greater or equal to the corresponding value. For example, if you set the resize dimensions at 1000x1200, an image of 2000x3000px will be resized to 1000x1500px while an image of 3000x2000px will be resized to 1800x1200px','shortpixel');?>">
689
  <input type="radio" name="resize_type" id="resize_type_inner" value="inner" <?php echo($settings->resizeType == 'inner' ? 'checked' : '') ?> style="margin: -50px 10px 60px 35px;">
690
+ <img src="<?php echo(plugins_url( 'shortpixel-image-optimiser/res/img/resize-inner.png' ));?>" title="<?php _e('Sizes will be smaller or equal to the corresponding value. For example, if you set the resize dimensions at 1000x1200, an image of 2000x3000px will be resized to 800x1200px while an image of 3000x2000px will be resized to 1000x667px','shortpixel');?>">
691
  </div>
692
  </td>
693
  </tr>
694
  </tbody>
695
  </table>
696
  <p class="submit">
697
+ <input type="submit" name="save" id="save" class="button button-primary" title="<?php _e('Save Changes','shortpixel');?>" value="<?php _e('Save Changes','shortpixel');?>"> &nbsp;
698
+ <input type="submit" name="save" id="bulk" class="button button-primary" title="<?php _e('Save and go to the Bulk Processing page','shortpixel');?>" value="<?php _e('Save and Go to Bulk Process','shortpixel');?>"> &nbsp;
699
  </p>
700
  </div>
701
  <script>
715
  $frontBootstrap = ($settings->frontBootstrap ? 'checked' : '');
716
  $includeNextGen = ($settings->includeNextGen ? 'checked' : '');
717
  $createWebp = ($settings->createWebp ? 'checked' : '');
718
+ $autoMediaLibrary = ($settings->autoMediaLibrary ? 'checked' : '');
719
+ $optimizeRetina = ($settings->optimizeRetina ? 'checked' : '');
720
  ?>
721
  <div class="wp-shortpixel-options">
722
  <?php if(!$this->ctrl->getVerifiedKey()) { ?>
723
+ <p><?php _e('Please enter your API key in the General tab first.','shortpixel');?></p>
724
  <?php } else { //if valid key we display the rest of the options ?>
725
  <table class="form-table">
726
  <tbody>
727
  <tr>
728
+ <th scope="row"><label for="resize"><?php _e('Additional media folders','shortpixel');?></label></th>
729
  <td>
730
  <?php if($customFolders) { ?>
731
  <table class="shortpixel-folders-list">
732
  <tr style="font-weight: bold;">
733
+ <td><?php _e('Folder name','shortpixel');?></td>
734
+ <td><?php _e('Type &amp;<br>Status','shortpixel');?></td>
735
+ <td><?php _e('Files','shortpixel');?></td>
736
+ <td><?php _e('Last change','shortpixel');?></td>
737
  <td></td>
738
  </tr>
739
  <?php foreach($customFolders as $folder) {
742
  $stat = $this->ctrl->getSpMetaDao()->getFolderOptimizationStatus($folder->getId());
743
  $cnt = $folder->getFileCount();
744
  $st = ($cnt == 0
745
+ ? __("Empty",'shortpixel')
746
  : ($stat->Total == $stat->Optimized
747
+ ? __("Optimized",'shortpixel')
748
+ : ($stat->Optimized + $stat->Pending > 0 ? __("Pending",'shortpixel') : __("Waiting",'shortpixel'))));
749
+
750
+ $err = $stat->Failed > 0 && !$st == __("Empty",'shortpixel') ? " ({$stat->Failed} failed)" : "";
751
+
752
+ $action = ($st == __("Optimized",'shortpixel') || $st == __("Empty",'shortpixel') ? __("Stop monitoring",'shortpixel') : __("Stop optimizing",'shortpixel'));
753
+
754
+ $fullStat = $st == __("Empty",'shortpixel') ? "" : __("Optimized",'shortpixel') . ": " . $stat->Optimized . ", "
755
+ . __("Pending",'shortpixel') . ": " . $stat->Pending . ", " . __("Waiting",'shortpixel') . ": " . $stat->Waiting . ", "
756
+ . __("Failed",'shortpixel') . ": " . $stat->Failed;
757
  ?>
758
  <tr>
759
  <td>
773
  <?php echo($folder->getTsUpdated()); ?>
774
  </td>
775
  <td>
776
+ <input type="button" class="button remove-folder-button" data-value="<?php echo($folder->getPath()); ?>" title="<?php echo($action . " " . $folder->getPath()); ?>" value="<?php echo $action;?>">
777
+ <input type="button" style="display:none;" class="button button-alert recheck-folder-button" data-value="<?php echo($folder->getPath()); ?>"
778
+ title="<?php _e('Full folder refresh, check each file of the folder if it changed since it was optimized. Might take up to 1 min. for big folders.','shortpixel');?>"
779
+ value="<?php _e('Refresh','shortpixel');?>">
780
  </td>
781
  </tr>
782
  <?php }?>
787
  <input type="text" name="addCustomFolderView" id="addCustomFolderView" class="regular-text" value="<?php echo($addedFolder);?>" disabled style="width: 50em;max-width: 70%;">&nbsp;
788
  <input type="hidden" name="addCustomFolder" id="addCustomFolder" value="<?php echo($addedFolder);?>"/>
789
  <input type="hidden" id="customFolderBase" value="<?php echo $this->ctrl->getCustomFolderBase(); ?>">
790
+ <a class="button button-primary select-folder-button" title="<?php _e('Select the images folder on your server.','shortpixel');?>" href="javascript:void(0);">
791
+ <?php _e('Select ...','shortpixel');?>
792
+ </a>
793
+ <input type="submit" name="saveAdv" id="saveAdvAddFolder" class="button button-primary" title="<?php _e('Add Folder','shortpixel');?>" value="<?php _e('Add Folder','shortpixel');?>">
794
+ <p class="settings-info">
795
+ <?php _e('Use the Select... button to select site folders. ShortPixel will optimize images and PDFs from the specified folders and their subfolders. The optimization status for each image or PDF in these folders can be seen in the <a href="upload.php?page=wp-short-pixel-custom">Other Media list</a>, under the Media menu.','shortpixel');?>
796
+ </p>
797
  <div class="sp-folder-picker-shade">
798
  <div class="sp-folder-picker-popup">
799
+ <div class="sp-folder-picker-title"><?php _e('Select the images folder','shortpixel');?></div>
800
  <div class="sp-folder-picker"></div>
801
+ <input type="button" class="button button-info select-folder-cancel" value="<?php _e('Cancel','shortpixel');?>" style="margin-right: 30px;">
802
+ <input type="button" class="button button-primary select-folder" value="<?php _e('Select','shortpixel');?>">
803
  </div>
804
  </div>
805
  <script>
811
  </tr>
812
  <?php if($hasNextGen) { ?>
813
  <tr>
814
+ <th scope="row"><label for="nextGen"><?php _e('Optimize NextGen galleries','shortpixel');?></label></th>
815
  <td>
816
+ <input name="nextGen" type="checkbox" id="nextGen" <?php echo( $includeNextGen );?>> <?php _e('Optimize NextGen galleries.','shortpixel');?>
817
+ <p class="settings-info">
818
+ <?php _e('Check this to add all your current NextGen galleries to the custom folders list and to also have all the future NextGen galleries and images optimized automatically by ShortPixel.','shortpixel');?>
819
+ </p>
820
  </td>
821
  </tr>
822
  <?php } ?>
823
  <tr>
824
+ <th scope="row"><label for="createWebp"><?php _e('WebP versions','shortpixel');?></label></th>
825
  <td>
826
+ <input name="createWebp" type="checkbox" id="createWebp" <?php echo( $createWebp );?>> <?php _e('Create also <a href="http://blog.shortpixel.com/how-webp-images-can-speed-up-your-site/" target="_blank">WebP versions</a> of the images <strong>for free</strong>.','shortpixel');?>
827
+ <p class="settings-info">
828
+ <?php _e('WebP images can be up to three times smaller than PNGs and 25% smaller than JPGs. Choosing this option <strong>does not use up additional credits</strong>.','shortpixel');?>
829
+ </p>
830
  </td>
831
  </tr>
832
  <tr>
833
+ <th scope="row"><label for="optimizeRetina"><?php _e('Optimize Retina images','shortpixel');?></label></th>
834
  <td>
835
+ <input name="optimizeRetina" type="checkbox" id="optimizeRetina" <?php echo( $optimizeRetina );?>> <?php _e('Optimize also the Retina images (@2x) if they exist.','shortpixel');?>
836
+ <p class="settings-info">
837
+ <?php _e('If you have a Retina plugin that generates Retina-specific images (@2x), ShortPixel can optimize them too, alongside the regular Media Library images and thumbnails. <a href="http://blog.shortpixel.com/how-to-use-optimized-retina-images-on-your-wordpress-site-for-best-user-experience-on-apple-devices/" target="_blank">More info.</a>','shortpixel');?>
838
+ </p>
839
+ </td>
840
+ </tr>
841
+ <tr>
842
+ <th scope="row"><label for="authentication"><?php _e('HTTP AUTH credentials','shortpixel');?></label></th>
843
+ <td>
844
+ <input name="siteAuthUser" type="text" id="siteAuthUser" value="<?php echo( $settings->siteAuthUser );?>" class="regular-text" placeholder="<?php _e('User','shortpixel');?>"><br>
845
+ <input name="siteAuthPass" type="text" id="siteAuthPass" value="<?php echo( $settings->siteAuthPass );?>" class="regular-text" placeholder="<?php _e('Password','shortpixel');?>">
846
+ <p class="settings-info">
847
+ <?php _e('Only fill in these fields if your site (front-end) is not publicly accessible and visitors need a user/pass to connect to it. If you don\'t know what is this then just <strong>leave the fields empty</strong>.','shortpixel');?>
848
+ </p>
849
+ </td>
850
+ </tr>
851
+ <tr>
852
+ <th scope="row"><label for="resize"><?php _e('Process in front-end','shortpixel');?></label></th>
853
+ <td>
854
+ <input name="frontBootstrap" type="checkbox" id="resize" <?php echo( $frontBootstrap );?>> <?php _e('Automatically optimize images added by users in front end.','shortpixel');?>
855
+ <p class="settings-info">
856
+ <?php _e('Check this if you have users that add images or PDF documents from custom forms in the front-end. This could increase the load on your server if you have a lot of users simultaneously connected.','shortpixel');?>
857
+ </p>
858
  </td>
859
  </tr>
860
  <tr>
861
+ <th scope="row"><label for="autoMediaLibrary"><?php _e('Optimize media on upload','shortpixel');?></label></th>
862
  <td>
863
+ <input name="autoMediaLibrary" type="checkbox" id="autoMediaLibrary" <?php echo( $autoMediaLibrary );?>> <?php _e('Automatically optimize Media Library items after they are uploaded (recommended).','shortpixel');?>
864
+ <p class="settings-info">
865
+ <?php _e('By default, ShortPixel will automatically optimize all the freshly uploaded image and PDF files. If you uncheck this you\'ll need to either run Bulk ShortPixel or go to Media Library (in list view) and click on the right side "Optimize now" button(s).','shortpixel');?>
866
+ </p>
867
  </td>
868
  </tr>
869
  </tbody>
870
  </table>
871
  <p class="submit">
872
+ <input type="submit" name="saveAdv" id="saveAdv" class="button button-primary" title="<?php _e('Save Changes','shortpixel');?>" value="<?php _e('Save Changes','shortpixel');?>"> &nbsp;
873
+ <input type="submit" name="saveAdv" id="bulkAdvGo" class="button button-primary" title="<?php _e('Save and go to the Bulk Processing page','shortpixel');?>" value="<?php _e('Save and Go to Bulk Process','shortpixel');?>"> &nbsp;
874
  </p>
875
  </div>
876
  <script>
882
  function displaySettingsStats($quotaData, $averageCompression, $savedSpace, $savedBandwidth,
883
  $remainingImages, $totalCallsMade, $fileCount, $backupFolderSize) { ?>
884
  <a id="facts"></a>
885
+ <h3><?php _e('Your ShortPixel Stats','shortpixel');?></h3>
886
  <table class="form-table">
887
  <tbody>
888
  <tr>
889
+ <th scope="row"><label for="averagCompression"><?php _e('Average compression of your files:','shortpixel');?></label></th>
890
  <td><?php echo($averageCompression);?>%</td>
891
  </tr>
892
  <tr>
893
+ <th scope="row"><label for="savedSpace"><?php _e('Saved disk space by ShortPixel','shortpixel');?></label></th>
894
  <td><?php echo($savedSpace);?></td>
895
  </tr>
896
  <tr>
897
+ <th scope="row"><label for="savedBandwidth"><?php _e('Bandwith* saved with ShortPixel:','shortpixel');?></label></th>
898
  <td><?php echo($savedBandwidth);?></td>
899
  </tr>
900
  </tbody>
901
  </table>
902
 
903
+ <p style="padding-top: 0px; color: #818181;" ><?php _e('* Saved bandwidth is calculated at 10,000 impressions/image','shortpixel');?></p>
904
 
905
+ <h3><?php _e('Your ShortPixel Plan','shortpixel');?></h3>
906
  <table class="form-table">
907
  <tbody>
908
  <tr>
909
+ <th scope="row" bgcolor="#ffffff"><label for="apiQuota"><?php _e('Your ShortPixel plan','shortpixel');?></label></th>
910
  <td bgcolor="#ffffff">
911
+ <?php printf(__('%s/month, renews in %s days, on %s ( <a href="https://shortpixel.com/login/%s" target="_blank">Need More? See the options available</a> )','shortpixel'),
912
+ $quotaData['APICallsQuota'], floor(30 + (strtotime($quotaData['APILastRenewalDate']) - time()) / 86400),
913
+ date('M d, Y', strtotime($quotaData['APILastRenewalDate']. ' + 30 days')), $this->ctrl->getApiKey());?><br/>
914
+ <?php printf(__('<a href="https://shortpixel.com/login/%s/tell-a-friend" target="_blank">Join our friend referral system</a> to win more credits. For each user that joins, you receive +100 images credits/month.','shortpixel'),
915
+ $this->ctrl->getApiKey());?>
916
  </td>
917
  </tr>
918
  <tr>
919
+ <th scope="row"><label for="usedQUota"><?php _e('One time credits:','shortpixel');?></label></th>
920
  <td><?php echo( number_format($quotaData['APICallsQuotaOneTimeNumeric']));?></td>
921
  </tr>
922
  <tr>
923
+ <th scope="row"><label for="usedQUota"><?php _e('Number of images processed this month:','shortpixel');?></label></th>
924
+ <td><?php echo($totalCallsMade);?> (<a href="https://api.shortpixel.com/v2/report.php?key=<?php echo($this->ctrl->getApiKey());?>" target="_blank">
925
+ <?php _e('see report','shortpixel');?>
926
+ </a>)
927
+ </td>
928
  </tr>
929
  <tr>
930
+ <th scope="row"><label for="remainingImages"><?php _e('Remaining** images in your plan:','shortpixel');?></label></th>
931
+ <td><?php echo($remainingImages);?> <?php _e('images','shortpixel');?></td>
932
  </tr>
933
  </tbody>
934
  </table>
935
 
936
+ <p style="padding-top: 0px; color: #818181;" >
937
+ <?php printf(__('** Increase your image quota by <a href="https://shortpixel.com/login/%s" target="_blank">upgrading your ShortPixel plan.</a>','shortpixel'),
938
+ $this->ctrl->getApiKey());?>
939
+ </p>
940
 
941
  <table class="form-table">
942
  <tbody>
943
  <tr>
944
+ <th scope="row"><label for="totalFiles"><?php _e('Total number of processed files:','shortpixel');?></label></th>
945
  <td><?php echo($fileCount);?></td>
946
  </tr>
947
  <?php if($this->ctrl->backupImages()) { ?>
948
  <tr>
949
+ <th scope="row"><label for="sizeBackup"><?php _e('Original images are stored in a backup folder. Your backup folder size is now:','shortpixel');?></label></th>
950
  <td>
951
  <form action="" method="POST">
952
  <?php echo($backupFolderSize);?>
953
+ <input type="submit" style="margin-left: 15px; vertical-align: middle;" class="button button-secondary" name="emptyBackup" value="<?php _e('Empty backups','shortpixel');?>"/>
954
  </form>
955
  </td>
956
  </tr>
965
 
966
  public function renderCustomColumn($id, $data){ ?>
967
  <div id='sp-msg-<?php echo($id);?>' class='column-wp-shortPixel'>
968
+
969
  <?php switch($data['status']) {
970
  case 'n/a': ?>
971
+ <?php _e('Optimization N/A','shortpixel');?> <?php
972
  break;
973
  case 'notFound': ?>
974
+ <?php _e('Image does not exist.','shortpixel');?> <?php
975
  break;
976
  case 'invalidKey':
977
  if(defined("SHORTPIXEL_API_KEY")) { // multisite key - need to be validated on each site but it's not invalid
978
+ ?> <?php _e('Please <a href="options-general.php?page=wp-shortpixel">go to Settings</a> to validate the API Key.','shortpixel');?> <?php
979
  } else {
980
+ ?> <?php _e('Invalid API Key. <a href="options-general.php?page=wp-shortpixel">Check your Settings</a>','shortpixel');?> <?php
981
  }
982
  break;
983
  case 'quotaExceeded':
985
  break;
986
  case 'optimizeNow':
987
  if($data['showActions']) { ?>
988
+ <a class='button button-smaller button-primary' href="javascript:manualOptimization('<?php echo($id)?>')">
989
+ <?php _e('Optimize now','shortpixel');?>
990
+ </a>
991
  <?php }
992
  echo($data['message']);
993
  if(isset($data['thumbsTotal']) && $data['thumbsTotal'] > 0) {
995
  }
996
  break;
997
  case 'retry': ?>
998
+ <?php echo($data['message'])?> <a class='button button-smaller button-primary' href="javascript:manualOptimization('<?php echo($id)?>')">
999
+ <?php _e('Retry','shortpixel');?>
1000
+ </a> <?php
1001
  break;
1002
  case 'pdfOptimized':
1003
  case 'imgOptimized':
1004
  $this->renderListCell($id, $data['showActions'],
1005
  !$data['thumbsOpt'] && $data['thumbsTotal'], $data['thumbsTotal'], $data['backup'], $data['type'],
1006
+ $this->getSuccessText($data['percent'],$data['bonus'],$data['type'],$data['thumbsOpt'],$data['thumbsTotal'], $data['retinasOpt']));
1007
  break;
1008
  }
1009
  //die(var_dump($data));
1012
  <?php
1013
  }
1014
 
1015
+ public function getSuccessText($percent, $bonus, $type, $thumbsOpt = 0, $thumbsTotal = 0, $retinasOpt = 0) {
1016
+ return ($percent ? __('Reduced by','shortpixel') . ' <strong>' . $percent . '%</strong> ' : '')
1017
+ .(!$bonus ? ' ('.$type.')':'')
1018
+ .($bonus && $percent ? '<br>' : '')
1019
+ .($bonus ? __('Bonus processing','shortpixel') : '')
1020
+ .($bonus ? ' ('.$type.')':'') . '<br>'
1021
+ .($thumbsOpt ? ( $thumbsTotal > $thumbsOpt
1022
+ ? sprintf(__('+%s of %s thumbnails optimized','shortpixel'),$thumbsOpt,$thumbsTotal)
1023
+ : sprintf(__('+%s thumbnails optimized','shortpixel'),$thumbsOpt)) : '')
1024
+ .($retinasOpt ? '<br>' . sprintf(__('+%s Retina images optimized','shortpixel') , $retinasOpt) : '' ) ;
1025
  }
1026
 
1027
  public function renderListCell($id, $showActions, $optimizeThumbs, $thumbsTotal, $backup, $type, $message) {
1029
  <div class='sp-column-actions'>
1030
  <?php if($optimizeThumbs) { ?>
1031
  <a class='button button-smaller button-primary' href="javascript:optimizeThumbs(<?php echo($id)?>);">
1032
+ <?php printf(__('Optimize %s thumbnails','shortpixel'),$thumbsTotal);?>
1033
  </a>
1034
  <?php }
1035
  if($backup) {
1036
  if($type) {
1037
  $invType = $type == 'lossy' ? 'lossless' : 'lossy'; ?>
1038
+ <a class='button button-smaller' href="javascript:reoptimize('<?php echo($id)?>', '<?php echo($invType)?>');"
1039
+ title="<?php _e('Reoptimize from the backed-up image','shortpixel');?>">
1040
+ <?php _e('Re-optimize','shortpixel');?> <?php echo($invType)?>
1041
  </a><?php
1042
  } ?>
1043
  <a class='button button-smaller' href="admin.php?action=shortpixel_restore_backup&attachment_ID=<?php echo($id)?>">
1044
+ <?php _e('Restore backup','shortpixel');?>
1045
  </a>
1046
  <?php } ?>
1047
  </div>
1053
 
1054
  public function getQuotaExceededHTML($message = '') {
1055
  return "<div class='sp-column-actions' style='width:110px;'>
1056
+ <a class='button button-smaller button-primary' href='https://shortpixel.com/login/". $this->ctrl->getApiKey() . "' target='_blank'>"
1057
+ . __('Extend Quota','shortpixel') .
1058
+ "</a>
1059
+ <a class='button button-smaller' href='admin.php?action=shortpixel_check_quota'>"
1060
+ . __('Check&nbsp;&nbsp;Quota','shortpixel') .
1061
+ "</a></div>
1062
  <div class='sp-column-info'>" . $message . " Quota Exceeded.</div>";
1063
  }
1064
  }
class/wp-shortpixel-settings.php CHANGED
@@ -26,6 +26,7 @@ class WPShortPixelSettings {
26
  'keepExif' => 'wp-short-pixel-keep-exif',
27
  'CMYKtoRGBconversion' => 'wp-short-pixel_cmyk2rgb',
28
  'createWebp' => 'wp-short-create-webp',
 
29
  'backupImages' => 'wp-short-backup_images',
30
  'resizeImages' => 'wp-short-pixel-resize-images',
31
  'resizeType' => 'wp-short-pixel-resize-type',
@@ -33,6 +34,7 @@ class WPShortPixelSettings {
33
  'resizeHeight' => 'wp-short-pixel-resize-height',
34
  'siteAuthUser' => 'wp-short-pixel-site-auth-user',
35
  'siteAuthPass' => 'wp-short-pixel-site-auth-pass',
 
36
 
37
  //optimize other images than the ones in Media Library
38
  'includeNextGen' => 'wp-short-pixel-include-next-gen',
@@ -95,7 +97,9 @@ class WPShortPixelSettings {
95
  $this->_processThumbnails = self::getOpt('wp-short-process_thumbnails', $this->_processThumbnails);
96
  $this->_CMYKtoRGBconversion = self::getOpt('wp-short-pixel_cmyk2rgb', $this->_CMYKtoRGBconversion);
97
  $this->_backupImages = self::getOpt('wp-short-backup_images', $this->_backupImages);
98
- // the following practically set defaults for options if they're not set
 
 
99
  self::getOpt( 'wp-short-pixel-fileCount', 0);
100
  self::getOpt( 'wp-short-pixel-thumbnail-count', 0);//amount of optimized thumbnails
101
  self::getOpt( 'wp-short-pixel-files-under-5-percent', 0);//amount of optimized thumbnails
26
  'keepExif' => 'wp-short-pixel-keep-exif',
27
  'CMYKtoRGBconversion' => 'wp-short-pixel_cmyk2rgb',
28
  'createWebp' => 'wp-short-create-webp',
29
+ 'optimizeRetina' => 'wp-short-pixel-optimize-retina',
30
  'backupImages' => 'wp-short-backup_images',
31
  'resizeImages' => 'wp-short-pixel-resize-images',
32
  'resizeType' => 'wp-short-pixel-resize-type',
34
  'resizeHeight' => 'wp-short-pixel-resize-height',
35
  'siteAuthUser' => 'wp-short-pixel-site-auth-user',
36
  'siteAuthPass' => 'wp-short-pixel-site-auth-pass',
37
+ 'autoMediaLibrary' => 'wp-short-pixel-auto-media-library',
38
 
39
  //optimize other images than the ones in Media Library
40
  'includeNextGen' => 'wp-short-pixel-include-next-gen',
97
  $this->_processThumbnails = self::getOpt('wp-short-process_thumbnails', $this->_processThumbnails);
98
  $this->_CMYKtoRGBconversion = self::getOpt('wp-short-pixel_cmyk2rgb', $this->_CMYKtoRGBconversion);
99
  $this->_backupImages = self::getOpt('wp-short-backup_images', $this->_backupImages);
100
+ // the following lines practically set defaults for options if they're not set
101
+ self::getOpt('wp-short-pixel-auto-media-library', 1);
102
+ self::getOpt('wp-short-pixel-optimize-retina', 1);
103
  self::getOpt( 'wp-short-pixel-fileCount', 0);
104
  self::getOpt( 'wp-short-pixel-thumbnail-count', 0);//amount of optimized thumbnails
105
  self::getOpt( 'wp-short-pixel-files-under-5-percent', 0);//amount of optimized thumbnails
lang/shortpixel-de_DE.mo ADDED
Binary file
lang/shortpixel-de_DE.po ADDED
@@ -0,0 +1,1461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2016-11-30 16:23+0100\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "Language: \n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=UTF-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ #: class/view/shortpixel_view.php:23 class/view/shortpixel_view.php:417
21
+ msgid "Average reduction"
22
+ msgstr ""
23
+
24
+ #. translators: header of the alert box
25
+ #: class/view/shortpixel_view.php:33
26
+ msgid "Quota Exceeded"
27
+ msgstr ""
28
+
29
+ #. translators: body of the alert box
30
+ #: class/view/shortpixel_view.php:35
31
+ #, php-format
32
+ msgid ""
33
+ "The plugin has optimized <strong>%s images</strong> and stopped because it "
34
+ "reached the available quota limit."
35
+ msgstr ""
36
+
37
+ #: class/view/shortpixel_view.php:39
38
+ #, php-format
39
+ msgid ""
40
+ "<strong>%s images and %s thumbnails</strong> are not yet optimized by "
41
+ "ShortPixel."
42
+ msgstr ""
43
+
44
+ #: class/view/shortpixel_view.php:44
45
+ msgid "Upgrade"
46
+ msgstr ""
47
+
48
+ #: class/view/shortpixel_view.php:45
49
+ msgid "Confirm New Quota"
50
+ msgstr ""
51
+
52
+ #: class/view/shortpixel_view.php:47
53
+ msgid "Get more image credits by referring ShortPixel to your friends!"
54
+ msgstr ""
55
+
56
+ #: class/view/shortpixel_view.php:49
57
+ msgid "Check your account"
58
+ msgstr ""
59
+
60
+ #: class/view/shortpixel_view.php:50
61
+ msgid ""
62
+ "for your unique referral link. For each user that joins, you will receive "
63
+ "+100 additional image credits/month."
64
+ msgstr ""
65
+
66
+ #: class/view/shortpixel_view.php:58
67
+ msgid ""
68
+ "In order to start the optimization process, you need to validate your API "
69
+ "Key in the <a href=\"options-general.php?page=wp-shortpixel\">ShortPixel "
70
+ "Settings</a> page in your WordPress Admin."
71
+ msgstr ""
72
+
73
+ #: class/view/shortpixel_view.php:61
74
+ msgid ""
75
+ "If you don’t have an API Key, you can get one delivered to your inbox, for "
76
+ "free."
77
+ msgstr ""
78
+
79
+ #: class/view/shortpixel_view.php:62
80
+ msgid ""
81
+ "Please <a href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">sign "
82
+ "up to get your API key.</a>"
83
+ msgstr ""
84
+
85
+ #: class/view/shortpixel_view.php:70
86
+ msgid "Dismiss"
87
+ msgstr ""
88
+
89
+ #: class/view/shortpixel_view.php:72
90
+ msgid "ShortPixel Optimization"
91
+ msgstr ""
92
+
93
+ #: class/view/shortpixel_view.php:75
94
+ msgid ""
95
+ "Action needed. Please <a href='https://shortpixel.com/wp-apikey' "
96
+ "target='_blank'>get your API key</a> to activate your ShortPixel plugin."
97
+ msgstr ""
98
+
99
+ #: class/view/shortpixel_view.php:78
100
+ msgid ""
101
+ "Your image gallery is not optimized. It takes 2 minutes to <a href='https://"
102
+ "shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate "
103
+ "your ShortPixel plugin."
104
+ msgstr ""
105
+
106
+ #: class/view/shortpixel_view.php:102
107
+ msgid "Your media library"
108
+ msgstr ""
109
+
110
+ #: class/view/shortpixel_view.php:103
111
+ msgid "Original images"
112
+ msgstr ""
113
+
114
+ #: class/view/shortpixel_view.php:105
115
+ msgid "Smaller thumbnails"
116
+ msgstr ""
117
+
118
+ #: class/view/shortpixel_view.php:109 class/view/shortpixel_view.php:343
119
+ msgid "Include thumbnails"
120
+ msgstr ""
121
+
122
+ #: class/view/shortpixel_view.php:112
123
+ msgid "Total images"
124
+ msgstr ""
125
+
126
+ #: class/view/shortpixel_view.php:114
127
+ msgid "Already optimized originals"
128
+ msgstr ""
129
+
130
+ #: class/view/shortpixel_view.php:116
131
+ msgid "Already optimized thumbnails"
132
+ msgstr ""
133
+
134
+ #: class/view/shortpixel_view.php:119 class/view/shortpixel_view.php:124
135
+ msgid "Total to be optimized"
136
+ msgstr ""
137
+
138
+ #: class/view/shortpixel_view.php:123
139
+ msgid "Your custom folders"
140
+ msgstr ""
141
+
142
+ #: class/view/shortpixel_view.php:137
143
+ #, php-format
144
+ msgid ""
145
+ "<span class=\"label\">Start Optimizing</span><br> <span class=\"total\">%s</"
146
+ "span> images"
147
+ msgstr ""
148
+
149
+ #: class/view/shortpixel_view.php:148
150
+ msgid ""
151
+ "Nothing to optimize! The images that you add to Media Gallery will be "
152
+ "automatically optimized after upload."
153
+ msgstr ""
154
+
155
+ #: class/view/shortpixel_view.php:157
156
+ msgid ""
157
+ "After you start the bulk process, in order for the optimization to run, you "
158
+ "must keep this page open and your computer running. If you close the page "
159
+ "for whatever reason, just turn back to it and the bulk process will resume."
160
+ msgstr ""
161
+
162
+ #: class/view/shortpixel_view.php:163
163
+ msgid "What are Thumbnails?"
164
+ msgstr ""
165
+
166
+ #: class/view/shortpixel_view.php:164
167
+ msgid ""
168
+ "Thumbnails are smaller images usually generated by your WP theme. Most "
169
+ "themes generate between 3 and 6 thumbnails for each Media Library image."
170
+ msgstr ""
171
+
172
+ #: class/view/shortpixel_view.php:165
173
+ msgid ""
174
+ "The thumbnails also generate traffic on your website pages and they "
175
+ "influence your website's speed."
176
+ msgstr ""
177
+
178
+ #: class/view/shortpixel_view.php:166
179
+ msgid ""
180
+ "It's highly recommended that you include thumbnails in the optimization as "
181
+ "well."
182
+ msgstr ""
183
+
184
+ #: class/view/shortpixel_view.php:169
185
+ msgid "How does it work?"
186
+ msgstr ""
187
+
188
+ #: class/view/shortpixel_view.php:170
189
+ msgid ""
190
+ "The plugin processes images starting with the newest ones you uploaded in "
191
+ "your Media Library."
192
+ msgstr ""
193
+
194
+ #: class/view/shortpixel_view.php:171
195
+ msgid "You will be able to pause the process anytime."
196
+ msgstr ""
197
+
198
+ #: class/view/shortpixel_view.php:172
199
+ msgid ""
200
+ "<p>Your original images will be stored in a separate back-up folder.</p>"
201
+ msgstr ""
202
+
203
+ #: class/view/shortpixel_view.php:173
204
+ msgid ""
205
+ "You can watch the images being processed live, right here, after you start "
206
+ "optimizing."
207
+ msgstr ""
208
+
209
+ #. bulk is paused
210
+ #: class/view/shortpixel_view.php:179
211
+ msgid "Please see below the optimization status so far:"
212
+ msgstr ""
213
+
214
+ #: class/view/shortpixel_view.php:182
215
+ #, php-format
216
+ msgid "%d images and %d thumbnails are not yet optimized by ShortPixel."
217
+ msgstr ""
218
+
219
+ #: class/view/shortpixel_view.php:187
220
+ msgid ""
221
+ "You can continue optimizing your Media Gallery from where you left, by "
222
+ "clicking the Resume processing button. Already optimized images will not be "
223
+ "reprocessed."
224
+ msgstr ""
225
+
226
+ #: class/view/shortpixel_view.php:197
227
+ msgid "Congratulations!"
228
+ msgstr ""
229
+
230
+ #: class/view/shortpixel_view.php:198
231
+ msgid "Your media library has been successfully optimized!"
232
+ msgstr ""
233
+
234
+ #: class/view/shortpixel_view.php:199
235
+ msgid "Summary"
236
+ msgstr ""
237
+
238
+ #: class/view/shortpixel_view.php:205
239
+ msgid "Share your optimization results:"
240
+ msgstr ""
241
+
242
+ #: class/view/shortpixel_view.php:225
243
+ msgid "I just optimized my images by "
244
+ msgstr ""
245
+
246
+ #: class/view/shortpixel_view.php:227
247
+ msgid "I just optimized my images "
248
+ msgstr ""
249
+
250
+ #: class/view/shortpixel_view.php:230
251
+ msgid "with @ShortPixel, a great plugin for increasing #WordPress page speed:"
252
+ msgstr ""
253
+
254
+ #: class/view/shortpixel_view.php:231
255
+ msgid "Tweet"
256
+ msgstr ""
257
+
258
+ #: class/view/shortpixel_view.php:257
259
+ msgid "Please rate us!"
260
+ msgstr ""
261
+
262
+ #: class/view/shortpixel_view.php:267
263
+ #, php-format
264
+ msgid ""
265
+ "Go to the ShortPixel <a href=\"%soptions-general.php?page=wp-shortpixel#stats"
266
+ "\">Stats</a> and see all your websites' optimized stats. Download your "
267
+ "detailed <a href=\"https://api.shortpixel.com/v2/report.php?key=%s"
268
+ "\">Optimization Report</a> to check your image optimization statistics for "
269
+ "the last 40 days."
270
+ msgstr ""
271
+
272
+ #: class/view/shortpixel_view.php:275
273
+ msgid ""
274
+ "The following images could not be processed because of their limited write "
275
+ "rights. This usually happens if you have changed your hosting provider. "
276
+ "Please restart the optimization process after you granted write rights to "
277
+ "all the files below."
278
+ msgstr ""
279
+
280
+ #: class/view/shortpixel_view.php:290 wp-shortpixel.php:1755
281
+ #: wp-shortpixel.php:1756 wp-shortpixel.php:1757 wp-shortpixel.php:1758
282
+ msgid " images"
283
+ msgstr ""
284
+
285
+ #: class/view/shortpixel_view.php:291
286
+ msgid " and"
287
+ msgstr ""
288
+
289
+ #: class/view/shortpixel_view.php:292
290
+ msgid " thumbnails"
291
+ msgstr ""
292
+
293
+ #: class/view/shortpixel_view.php:293
294
+ msgid " are not yet optimized by ShortPixel."
295
+ msgstr ""
296
+
297
+ #: class/view/shortpixel_view.php:295
298
+ msgid "Some have errors:"
299
+ msgstr ""
300
+
301
+ #: class/view/shortpixel_view.php:318
302
+ #, php-format
303
+ msgid ""
304
+ "%s images and %s thumbnails were optimized <strong>%s</strong>. You can re-"
305
+ "optimize <strong>%s</strong> the ones that have backup."
306
+ msgstr ""
307
+
308
+ #: class/view/shortpixel_view.php:323
309
+ #, php-format
310
+ msgid ""
311
+ "%s images were optimized <strong>%s</strong>. You can re-optimize <strong>"
312
+ "%s</strong> the ones that have backup. "
313
+ msgstr ""
314
+
315
+ #: class/view/shortpixel_view.php:326
316
+ msgid " thumbnails will be restored to originals."
317
+ msgstr ""
318
+
319
+ #: class/view/shortpixel_view.php:331
320
+ msgid ""
321
+ "Restart the optimization process for these images by clicking the button "
322
+ "below."
323
+ msgstr ""
324
+
325
+ #: class/view/shortpixel_view.php:333
326
+ msgid ""
327
+ "Restart the optimization process for new images added to your library by "
328
+ "clicking the button below."
329
+ msgstr ""
330
+
331
+ #: class/view/shortpixel_view.php:335
332
+ #, php-format
333
+ msgid "Already <strong>%s</strong> optimized images will not be reprocessed."
334
+ msgstr ""
335
+
336
+ #: class/view/shortpixel_view.php:337
337
+ msgid ""
338
+ "Please note that reoptimizing images as <strong>lossy/lossless</strong> may "
339
+ "use additional credits."
340
+ msgstr ""
341
+
342
+ #: class/view/shortpixel_view.php:338
343
+ msgid "More info"
344
+ msgstr ""
345
+
346
+ #: class/view/shortpixel_view.php:344
347
+ msgid "Restart Optimizing"
348
+ msgstr ""
349
+
350
+ #: class/view/shortpixel_view.php:355
351
+ msgid "Bulk Image Optimization by ShortPixel"
352
+ msgstr ""
353
+
354
+ #: class/view/shortpixel_view.php:361
355
+ msgid "Lengthy operation in progress:"
356
+ msgstr ""
357
+
358
+ #: class/view/shortpixel_view.php:362
359
+ msgid "Optimizing image"
360
+ msgstr ""
361
+
362
+ #: class/view/shortpixel_view.php:369
363
+ msgid "Error processing file:"
364
+ msgstr ""
365
+
366
+ #: class/view/shortpixel_view.php:375
367
+ msgid "Just optimized:"
368
+ msgstr ""
369
+
370
+ #: class/view/shortpixel_view.php:381
371
+ msgid "Original image"
372
+ msgstr ""
373
+
374
+ #: class/view/shortpixel_view.php:385
375
+ msgid "Optimized image"
376
+ msgstr ""
377
+
378
+ #. translators: percent follows
379
+ #: class/view/shortpixel_view.php:389
380
+ msgid "Optimized by:"
381
+ msgstr ""
382
+
383
+ #: class/view/shortpixel_view.php:411
384
+ msgid "Remaining credits"
385
+ msgstr ""
386
+
387
+ #: class/view/shortpixel_view.php:427 class/view/shortpixel_view.php:436
388
+ msgid "Media Library"
389
+ msgstr ""
390
+
391
+ #: class/view/shortpixel_view.php:428
392
+ msgid "and"
393
+ msgstr ""
394
+
395
+ #: class/view/shortpixel_view.php:429
396
+ msgid "Custom folders"
397
+ msgstr ""
398
+
399
+ #: class/view/shortpixel_view.php:429
400
+ msgid "optimization in progress ..."
401
+ msgstr ""
402
+
403
+ #: class/view/shortpixel_view.php:430
404
+ msgid "Bulk optimization has started."
405
+ msgstr ""
406
+
407
+ #: class/view/shortpixel_view.php:431
408
+ #, php-format
409
+ msgid ""
410
+ "This process will take some time, depending on the number of images in your "
411
+ "library. In the meantime, you can continue using \n"
412
+ " the admin as usual, <a href=\"%s\" target=\"_blank\">in "
413
+ "a different browser window or tab</a>.<br>\n"
414
+ " However, <strong>if you close this window, the bulk "
415
+ "processing will pause</strong> until you open the media gallery or the "
416
+ "ShortPixel bulk page again."
417
+ msgstr ""
418
+
419
+ #: class/view/shortpixel_view.php:436
420
+ msgid "and Custom folders"
421
+ msgstr ""
422
+
423
+ #: class/view/shortpixel_view.php:436
424
+ msgid "optimization paused"
425
+ msgstr ""
426
+
427
+ #: class/view/shortpixel_view.php:437
428
+ msgid "Bulk processing is paused until you resume the optimization process."
429
+ msgstr ""
430
+
431
+ #. now we display the action buttons always when a type of bulk is running
432
+ #: class/view/shortpixel_view.php:454
433
+ msgid "Pause"
434
+ msgstr ""
435
+
436
+ #: class/view/shortpixel_view.php:454
437
+ msgid "Resume processing"
438
+ msgstr ""
439
+
440
+ #: class/view/shortpixel_view.php:457
441
+ msgid "Only other media"
442
+ msgstr ""
443
+
444
+ #: class/view/shortpixel_view.php:457
445
+ msgid "Process only the other media, skipping the Media Library"
446
+ msgstr ""
447
+
448
+ #: class/view/shortpixel_view.php:461
449
+ msgid "Manage custom folders"
450
+ msgstr ""
451
+
452
+ #: class/view/shortpixel_view.php:469
453
+ msgid "Processed Images and PDFs:"
454
+ msgstr ""
455
+
456
+ #: class/view/shortpixel_view.php:470
457
+ msgid "Processed Thumbnails:"
458
+ msgstr ""
459
+
460
+ #: class/view/shortpixel_view.php:471
461
+ msgid "Total files processed:"
462
+ msgstr ""
463
+
464
+ #: class/view/shortpixel_view.php:472
465
+ #, php-format
466
+ msgid "Minus files with <5% optimization (free):"
467
+ msgstr ""
468
+
469
+ #: class/view/shortpixel_view.php:473
470
+ msgid "Used quota:"
471
+ msgstr ""
472
+
473
+ #: class/view/shortpixel_view.php:475
474
+ msgid "Average optimization:"
475
+ msgstr ""
476
+
477
+ #: class/view/shortpixel_view.php:476
478
+ msgid "Saved space:"
479
+ msgstr ""
480
+
481
+ #. wp_enqueue_script('jquery.idTabs.js', plugins_url('/js/jquery.idTabs.js',__FILE__) );
482
+ #: class/view/shortpixel_view.php:502
483
+ msgid "ShortPixel Plugin Settings"
484
+ msgstr ""
485
+
486
+ #: class/view/shortpixel_view.php:505
487
+ msgid "Upgrade now"
488
+ msgstr ""
489
+
490
+ #: class/view/shortpixel_view.php:507
491
+ msgid "Support"
492
+ msgstr ""
493
+
494
+ #: class/view/shortpixel_view.php:525
495
+ msgid "General"
496
+ msgstr ""
497
+
498
+ #: class/view/shortpixel_view.php:530
499
+ msgid "Advanced"
500
+ msgstr ""
501
+
502
+ #. the span is a trick to keep the sections ordered as nth-child in styles: 1,2,3,4 (otherwise the third section would be nth-child(2) too, because of the form)
503
+ #: class/view/shortpixel_view.php:537
504
+ msgid "Statistics"
505
+ msgstr ""
506
+
507
+ #: class/view/shortpixel_view.php:545
508
+ msgid "WP Resources"
509
+ msgstr ""
510
+
511
+ #: class/view/shortpixel_view.php:546
512
+ msgid "Please reload"
513
+ msgstr ""
514
+
515
+ #: class/view/shortpixel_view.php:579
516
+ #, php-format
517
+ msgid ""
518
+ "New images uploaded to the Media Library will be optimized automatically.<br/"
519
+ ">If you have existing images you would like to optimize, you can use the <a "
520
+ "href=\"%supload.php?page=wp-short-pixel-bulk\">Bulk Optimization Tool</a>."
521
+ msgstr ""
522
+
523
+ #: class/view/shortpixel_view.php:582
524
+ msgid "Step 1:"
525
+ msgstr ""
526
+
527
+ #: class/view/shortpixel_view.php:583
528
+ #, php-format
529
+ msgid ""
530
+ "If you don't have an API Key, <a href=\"https://shortpixel.com/wp-apikey%s\" "
531
+ "target=\"_blank\">sign up here.</a> It's free and it only takes one minute, "
532
+ "we promise!"
533
+ msgstr ""
534
+
535
+ #: class/view/shortpixel_view.php:584
536
+ msgid "Step 2:"
537
+ msgstr ""
538
+
539
+ #: class/view/shortpixel_view.php:585
540
+ msgid "Please enter here the API Key you received by email and press Validate."
541
+ msgstr ""
542
+
543
+ #: class/view/shortpixel_view.php:591
544
+ msgid "API Key:"
545
+ msgstr ""
546
+
547
+ #: class/view/shortpixel_view.php:601
548
+ msgid "Multisite API Key"
549
+ msgstr ""
550
+
551
+ #: class/view/shortpixel_view.php:604
552
+ msgid "Validate the provided API key"
553
+ msgstr ""
554
+
555
+ #: class/view/shortpixel_view.php:605
556
+ msgid "Validate"
557
+ msgstr ""
558
+
559
+ #: class/view/shortpixel_view.php:607
560
+ msgid "Key defined in wp-config.php."
561
+ msgstr ""
562
+
563
+ #. if invalid key we display the link to the API Key
564
+ #. if valid key we display the rest of the options
565
+ #: class/view/shortpixel_view.php:618
566
+ msgid "Compression type:"
567
+ msgstr ""
568
+
569
+ #: class/view/shortpixel_view.php:622
570
+ msgid "Lossy (recommended)"
571
+ msgstr ""
572
+
573
+ #: class/view/shortpixel_view.php:623
574
+ msgid ""
575
+ "<b>Lossy compression: </b>lossy has a better compression rate than lossless "
576
+ "compression.</br>The resulting image is identical with the original to the "
577
+ "human eye. You can run a test for free "
578
+ msgstr ""
579
+
580
+ #: class/view/shortpixel_view.php:624 wp-shortpixel.php:1458
581
+ msgid "here"
582
+ msgstr ""
583
+
584
+ #: class/view/shortpixel_view.php:626 class/view/shortpixel-list-table.php:111
585
+ msgid "Lossless"
586
+ msgstr ""
587
+
588
+ #: class/view/shortpixel_view.php:628
589
+ msgid ""
590
+ "<b>Lossless compression: </b> the shrunk image will be identical with the "
591
+ "original and smaller in size.</br>In some rare cases you will need to use \n"
592
+ " this type of compression. Some technical drawings or "
593
+ "images from vector graphics are possible situations."
594
+ msgstr ""
595
+
596
+ #: class/view/shortpixel_view.php:638
597
+ msgid "Also include thumbnails:"
598
+ msgstr ""
599
+
600
+ #: class/view/shortpixel_view.php:640
601
+ msgid "Apply compression also to <strong>image thumbnails.</strong> "
602
+ msgstr ""
603
+
604
+ #: class/view/shortpixel_view.php:641
605
+ msgid "thumbnails to optimize"
606
+ msgstr ""
607
+
608
+ #: class/view/shortpixel_view.php:643
609
+ msgid ""
610
+ "It is highly recommended that you optimize the thumbnails as they are "
611
+ "usually the images most viewed by end users and can generate most traffic."
612
+ "<br>Please note that thumbnails count up to your total quota."
613
+ msgstr ""
614
+
615
+ #: class/view/shortpixel_view.php:648
616
+ msgid "Image backup"
617
+ msgstr ""
618
+
619
+ #: class/view/shortpixel_view.php:650
620
+ msgid "Save and keep a backup of your original images in a separate folder."
621
+ msgstr ""
622
+
623
+ #: class/view/shortpixel_view.php:651
624
+ msgid ""
625
+ "You <strong>need to have backup active</strong> in order to be able to "
626
+ "restore images to originals or to convert from Lossy to Lossless and back."
627
+ msgstr ""
628
+
629
+ #: class/view/shortpixel_view.php:655
630
+ msgid "CMYK to RGB conversion"
631
+ msgstr ""
632
+
633
+ #: class/view/shortpixel_view.php:657
634
+ msgid "Adjust your images for computer and mobile screen display."
635
+ msgstr ""
636
+
637
+ #: class/view/shortpixel_view.php:658
638
+ msgid ""
639
+ "Images for the web only need RGB format and converting them from CMYK to RGB "
640
+ "makes them smaller."
641
+ msgstr ""
642
+
643
+ #: class/view/shortpixel_view.php:662
644
+ msgid "Remove EXIF"
645
+ msgstr ""
646
+
647
+ #: class/view/shortpixel_view.php:664
648
+ msgid "Remove the EXIF tag of the image (recommended)."
649
+ msgstr ""
650
+
651
+ #: class/view/shortpixel_view.php:665
652
+ msgid ""
653
+ "EXIF is a set of various pieces of information that are automatically "
654
+ "embedded into the image upon creation. This can include GPS position, camera "
655
+ "manufacturer, date and time, etc. \n"
656
+ " Unless you really need that data to be "
657
+ "preserved, we recommend removing it as it can lead to <a href=\"http://blog."
658
+ "shortpixel.com/how-much-smaller-can-be-images-without-exif-icc\" target="
659
+ "\"_blank\">better compression rates</a>."
660
+ msgstr ""
661
+
662
+ #: class/view/shortpixel_view.php:670
663
+ msgid "Resize large images"
664
+ msgstr ""
665
+
666
+ #: class/view/shortpixel_view.php:673
667
+ msgid "to maximum"
668
+ msgstr ""
669
+
670
+ #: class/view/shortpixel_view.php:675
671
+ msgid "pixels wide &times;"
672
+ msgstr ""
673
+
674
+ #: class/view/shortpixel_view.php:677
675
+ msgid ""
676
+ "pixels high (original aspect ratio is preserved and image is not cropped)"
677
+ msgstr ""
678
+
679
+ #: class/view/shortpixel_view.php:679
680
+ #, php-format
681
+ msgid ""
682
+ "Recommended for large photos, like the ones taken with your phone. Saved "
683
+ "space can go up to 80% or more after resizing."
684
+ msgstr ""
685
+
686
+ #: class/view/shortpixel_view.php:683
687
+ msgid ""
688
+ "Sizes will be greater or equal to the corresponding value. For example, if "
689
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
690
+ "resized to 1000x1500px while an image of 3000x2000px will be resized to "
691
+ "1800x1200px"
692
+ msgstr ""
693
+
694
+ #: class/view/shortpixel_view.php:685
695
+ msgid ""
696
+ "Sizes will be smaller or equal to the corresponding value. For example, if "
697
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
698
+ "resized to 800x1200px while an image of 3000x2000px will be resized to "
699
+ "1000x667px"
700
+ msgstr ""
701
+
702
+ #: class/view/shortpixel_view.php:692 class/view/shortpixel_view.php:847
703
+ msgid "Save Changes"
704
+ msgstr ""
705
+
706
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
707
+ msgid "Save and go to the Bulk Processing page"
708
+ msgstr ""
709
+
710
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
711
+ #: wp-shortpixel.php:1517 wp-shortpixel.php:1518
712
+ msgid "Save and Go to Bulk Process"
713
+ msgstr ""
714
+
715
+ #: class/view/shortpixel_view.php:716
716
+ msgid "Please enter your API key in the General tab first."
717
+ msgstr ""
718
+
719
+ #. if valid key we display the rest of the options
720
+ #: class/view/shortpixel_view.php:721
721
+ msgid "Additional media folders"
722
+ msgstr ""
723
+
724
+ #: class/view/shortpixel_view.php:726
725
+ msgid "Folder name"
726
+ msgstr ""
727
+
728
+ #: class/view/shortpixel_view.php:727
729
+ msgid "Type &amp;<br>Status"
730
+ msgstr ""
731
+
732
+ #: class/view/shortpixel_view.php:728
733
+ msgid "Files"
734
+ msgstr ""
735
+
736
+ #: class/view/shortpixel_view.php:729
737
+ msgid "Last change"
738
+ msgstr ""
739
+
740
+ #: class/view/shortpixel_view.php:738 class/view/shortpixel_view.php:743
741
+ #: class/view/shortpixel_view.php:745 class/view/shortpixel_view.php:747
742
+ msgid "Empty"
743
+ msgstr ""
744
+
745
+ #: class/view/shortpixel_view.php:740 class/view/shortpixel_view.php:745
746
+ #: class/view/shortpixel_view.php:747
747
+ msgid "Optimized"
748
+ msgstr ""
749
+
750
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
751
+ #: class/view/shortpixel-list-table.php:97
752
+ msgid "Pending"
753
+ msgstr ""
754
+
755
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
756
+ #: class/view/shortpixel-list-table.php:99
757
+ msgid "Waiting"
758
+ msgstr ""
759
+
760
+ #: class/view/shortpixel_view.php:745
761
+ msgid "Stop monitoring"
762
+ msgstr ""
763
+
764
+ #: class/view/shortpixel_view.php:745
765
+ msgid "Stop optimizing"
766
+ msgstr ""
767
+
768
+ #: class/view/shortpixel_view.php:749
769
+ msgid "Failed"
770
+ msgstr ""
771
+
772
+ #: class/view/shortpixel_view.php:771
773
+ msgid ""
774
+ "Full folder refresh, check each file of the folder if it changed since it "
775
+ "was optimized. Might take up to 1 min. for big folders."
776
+ msgstr ""
777
+
778
+ #: class/view/shortpixel_view.php:772
779
+ msgid "Refresh"
780
+ msgstr ""
781
+
782
+ #: class/view/shortpixel_view.php:783
783
+ msgid "Select the images folder on your server."
784
+ msgstr ""
785
+
786
+ #: class/view/shortpixel_view.php:784
787
+ msgid "Select ..."
788
+ msgstr ""
789
+
790
+ #: class/view/shortpixel_view.php:786
791
+ msgid "Add Folder"
792
+ msgstr ""
793
+
794
+ #: class/view/shortpixel_view.php:788
795
+ msgid ""
796
+ "Use the Select... button to select site folders. ShortPixel will optimize "
797
+ "images and PDFs from the specified folders and their subfolders. The "
798
+ "optimization status for each image or PDF in these folders can be seen in "
799
+ "the <a href=\"upload.php?page=wp-short-pixel-custom\">Other Media list</a>, "
800
+ "under the Media menu."
801
+ msgstr ""
802
+
803
+ #: class/view/shortpixel_view.php:792
804
+ msgid "Select the images folder"
805
+ msgstr ""
806
+
807
+ #: class/view/shortpixel_view.php:794
808
+ msgid "Cancel"
809
+ msgstr ""
810
+
811
+ #: class/view/shortpixel_view.php:795
812
+ msgid "Select"
813
+ msgstr ""
814
+
815
+ #: class/view/shortpixel_view.php:807
816
+ msgid "Optimize NextGen galleries"
817
+ msgstr ""
818
+
819
+ #: class/view/shortpixel_view.php:809
820
+ msgid "Optimize NextGen galleries."
821
+ msgstr ""
822
+
823
+ #: class/view/shortpixel_view.php:811
824
+ msgid ""
825
+ "Check this to add all your current NextGen galleries to the custom folders "
826
+ "list and to also have all the future NextGen galleries and images optimized "
827
+ "automatically by ShortPixel."
828
+ msgstr ""
829
+
830
+ #: class/view/shortpixel_view.php:817
831
+ msgid "WebP versions"
832
+ msgstr ""
833
+
834
+ #: class/view/shortpixel_view.php:819
835
+ msgid ""
836
+ "Create also <a href=\"http://blog.shortpixel.com/how-webp-images-can-speed-"
837
+ "up-your-site/\" target=\"_blank\">WebP versions</a> of the images "
838
+ "<strong>for free</strong>."
839
+ msgstr ""
840
+
841
+ #: class/view/shortpixel_view.php:821
842
+ #, php-format
843
+ msgid ""
844
+ "WebP images can be up to three times smaller than PNGs and 25% smaller than "
845
+ "JPGs. Choosing this option <strong>does not use up additional credits</"
846
+ "strong>."
847
+ msgstr ""
848
+
849
+ #: class/view/shortpixel_view.php:826
850
+ msgid "HTTP AUTH credentials"
851
+ msgstr ""
852
+
853
+ #: class/view/shortpixel_view.php:828
854
+ msgid "User"
855
+ msgstr ""
856
+
857
+ #: class/view/shortpixel_view.php:829
858
+ msgid "Password"
859
+ msgstr ""
860
+
861
+ #: class/view/shortpixel_view.php:831
862
+ msgid ""
863
+ "Only fill in these fields if your site (front-end) is not publicly "
864
+ "accessible and visitors need a user/pass to connect to it. If you don't know "
865
+ "what is this then just <strong>leave the fields empty</strong>."
866
+ msgstr ""
867
+
868
+ #: class/view/shortpixel_view.php:836
869
+ msgid "Process in front-end"
870
+ msgstr ""
871
+
872
+ #: class/view/shortpixel_view.php:838
873
+ msgid "Automatically optimize images added by users in front end."
874
+ msgstr ""
875
+
876
+ #: class/view/shortpixel_view.php:840
877
+ msgid ""
878
+ "Check this if you have users that add images or PDF documents from custom "
879
+ "forms in the front-end. This could increase the load on your server if you "
880
+ "have a lot of users simultaneously connected."
881
+ msgstr ""
882
+
883
+ #: class/view/shortpixel_view.php:860
884
+ msgid "Your ShortPixel Stats"
885
+ msgstr ""
886
+
887
+ #: class/view/shortpixel_view.php:864
888
+ msgid "Average compression of your files:"
889
+ msgstr ""
890
+
891
+ #: class/view/shortpixel_view.php:868
892
+ msgid "Saved disk space by ShortPixel"
893
+ msgstr ""
894
+
895
+ #: class/view/shortpixel_view.php:872
896
+ msgid "Bandwith* saved with ShortPixel:"
897
+ msgstr ""
898
+
899
+ #: class/view/shortpixel_view.php:878
900
+ msgid "* Saved bandwidth is calculated at 10,000 impressions/image"
901
+ msgstr ""
902
+
903
+ #: class/view/shortpixel_view.php:880
904
+ msgid "Your ShortPixel Plan"
905
+ msgstr ""
906
+
907
+ #: class/view/shortpixel_view.php:884
908
+ msgid "Your ShortPixel plan"
909
+ msgstr ""
910
+
911
+ #: class/view/shortpixel_view.php:886
912
+ #, php-format
913
+ msgid ""
914
+ "%s/month, renews in %s days, on %s ( <a href=\"https://shortpixel.com/login/"
915
+ "%s\" target=\"_blank\">Need More? See the options available</a> )"
916
+ msgstr ""
917
+
918
+ #: class/view/shortpixel_view.php:889
919
+ #, php-format
920
+ msgid ""
921
+ "<a href=\"https://shortpixel.com/login/%s/tell-a-friend\" target=\"_blank"
922
+ "\">Join our friend referral system</a> to win more credits. For each user "
923
+ "that joins, you receive +100 images credits/month."
924
+ msgstr ""
925
+
926
+ #: class/view/shortpixel_view.php:894
927
+ msgid "One time credits:"
928
+ msgstr ""
929
+
930
+ #: class/view/shortpixel_view.php:898
931
+ msgid "Number of images processed this month:"
932
+ msgstr ""
933
+
934
+ #: class/view/shortpixel_view.php:900
935
+ msgid "see report"
936
+ msgstr ""
937
+
938
+ #: class/view/shortpixel_view.php:905
939
+ msgid "Remaining** images in your plan:"
940
+ msgstr ""
941
+
942
+ #: class/view/shortpixel_view.php:906
943
+ msgid "images"
944
+ msgstr ""
945
+
946
+ #: class/view/shortpixel_view.php:912
947
+ #, php-format
948
+ msgid ""
949
+ "** Increase your image quota by <a href=\"https://shortpixel.com/login/%s\" "
950
+ "target=\"_blank\">upgrading your ShortPixel plan.</a>"
951
+ msgstr ""
952
+
953
+ #: class/view/shortpixel_view.php:919
954
+ msgid "Total number of processed files:"
955
+ msgstr ""
956
+
957
+ #: class/view/shortpixel_view.php:924
958
+ msgid ""
959
+ "Original images are stored in a backup folder. Your backup folder size is "
960
+ "now:"
961
+ msgstr ""
962
+
963
+ #: class/view/shortpixel_view.php:928
964
+ msgid "Empty backups"
965
+ msgstr ""
966
+
967
+ #. not a file that we can process
968
+ #: class/view/shortpixel_view.php:945 wp-shortpixel.php:348
969
+ #: wp-shortpixel.php:374 wp-shortpixel.php:1813
970
+ msgid "Optimization N/A"
971
+ msgstr ""
972
+
973
+ #: class/view/shortpixel_view.php:948
974
+ msgid "Image does not exist."
975
+ msgstr ""
976
+
977
+ #. multisite key - need to be validated on each site but it's not invalid
978
+ #: class/view/shortpixel_view.php:952
979
+ msgid ""
980
+ "Please <a href=\"options-general.php?page=wp-shortpixel\">go to Settings</a> "
981
+ "to validate the API Key."
982
+ msgstr ""
983
+
984
+ #: class/view/shortpixel_view.php:954
985
+ msgid ""
986
+ "Invalid API Key. <a href=\"options-general.php?page=wp-shortpixel\">Check "
987
+ "your Settings</a>"
988
+ msgstr ""
989
+
990
+ #: class/view/shortpixel_view.php:963
991
+ msgid "Optimize now"
992
+ msgstr ""
993
+
994
+ #: class/view/shortpixel_view.php:973 class/view/shortpixel-list-table.php:55
995
+ #: wp-shortpixel.php:282
996
+ msgid "Retry"
997
+ msgstr ""
998
+
999
+ #: class/view/shortpixel_view.php:990 class/view/shortpixel-list-table.php:93
1000
+ #: wp-shortpixel.php:273
1001
+ msgid "Reduced by"
1002
+ msgstr ""
1003
+
1004
+ #: class/view/shortpixel_view.php:993 class/view/shortpixel-list-table.php:92
1005
+ #: class/view/shortpixel-list-table.php:94 wp-shortpixel.php:274
1006
+ msgid "Bonus processing"
1007
+ msgstr ""
1008
+
1009
+ #: class/view/shortpixel_view.php:996
1010
+ #, php-format
1011
+ msgid "+%s of %s thumbnails optimized"
1012
+ msgstr ""
1013
+
1014
+ #: class/view/shortpixel_view.php:997
1015
+ #, php-format
1016
+ msgid "+%s thumbnails optimized"
1017
+ msgstr ""
1018
+
1019
+ #: class/view/shortpixel_view.php:1005
1020
+ #, php-format
1021
+ msgid "Optimize %s thumbnails"
1022
+ msgstr ""
1023
+
1024
+ #: class/view/shortpixel_view.php:1012
1025
+ msgid "Reoptimize from the backed-up image"
1026
+ msgstr ""
1027
+
1028
+ #: class/view/shortpixel_view.php:1013
1029
+ msgid "Re-optimize"
1030
+ msgstr ""
1031
+
1032
+ #: class/view/shortpixel_view.php:1017 wp-shortpixel.php:278
1033
+ msgid "Restore backup"
1034
+ msgstr ""
1035
+
1036
+ #: class/view/shortpixel_view.php:1030 wp-shortpixel.php:280
1037
+ msgid "Extend Quota"
1038
+ msgstr ""
1039
+
1040
+ #: class/view/shortpixel_view.php:1033 wp-shortpixel.php:281
1041
+ msgid "Check&nbsp;&nbsp;Quota"
1042
+ msgstr ""
1043
+
1044
+ #: class/view/shortpixel-list-table.php:15
1045
+ msgid "Image"
1046
+ msgstr ""
1047
+
1048
+ #. singular name of the listed records
1049
+ #: class/view/shortpixel-list-table.php:16
1050
+ msgid "Images"
1051
+ msgstr ""
1052
+
1053
+ #. pe viitor. $columns['cb'] = '<input type="checkbox" />';
1054
+ #: class/view/shortpixel-list-table.php:29
1055
+ msgid "Filename"
1056
+ msgstr ""
1057
+
1058
+ #: class/view/shortpixel-list-table.php:30
1059
+ msgid "Folder"
1060
+ msgstr ""
1061
+
1062
+ #: class/view/shortpixel-list-table.php:31
1063
+ msgid "Type"
1064
+ msgstr ""
1065
+
1066
+ #: class/view/shortpixel-list-table.php:32
1067
+ msgid "Status"
1068
+ msgstr ""
1069
+
1070
+ #: class/view/shortpixel-list-table.php:33
1071
+ msgid "Options"
1072
+ msgstr ""
1073
+
1074
+ #: class/view/shortpixel-list-table.php:52
1075
+ msgid "Optimize"
1076
+ msgstr ""
1077
+
1078
+ #: class/view/shortpixel-list-table.php:58
1079
+ msgid "Restore"
1080
+ msgstr ""
1081
+
1082
+ #: class/view/shortpixel-list-table.php:61
1083
+ msgid "Re-optimize lossless"
1084
+ msgstr ""
1085
+
1086
+ #: class/view/shortpixel-list-table.php:64
1087
+ msgid "Re-optimize lossy"
1088
+ msgstr ""
1089
+
1090
+ #: class/view/shortpixel-list-table.php:67
1091
+ msgid "Check quota"
1092
+ msgstr ""
1093
+
1094
+ #: class/view/shortpixel-list-table.php:68
1095
+ msgid "View"
1096
+ msgstr ""
1097
+
1098
+ #: class/view/shortpixel-list-table.php:89
1099
+ msgid "Restored"
1100
+ msgstr ""
1101
+
1102
+ #: class/view/shortpixel-list-table.php:103
1103
+ msgid "code"
1104
+ msgstr ""
1105
+
1106
+ #: class/view/shortpixel-list-table.php:111
1107
+ msgid "Lossy"
1108
+ msgstr ""
1109
+
1110
+ #: class/view/shortpixel-list-table.php:112
1111
+ msgid "Keep EXIF"
1112
+ msgstr ""
1113
+
1114
+ #: class/view/shortpixel-list-table.php:113
1115
+ msgid "Preserve CMYK"
1116
+ msgstr ""
1117
+
1118
+ #: class/view/shortpixel-list-table.php:122
1119
+ msgid ""
1120
+ "No images avaliable. Go to <a href=\"options-general.php?page=wp-"
1121
+ "shortpixel#adv-settings\">Advanced Settings</a> to configure additional "
1122
+ "folders to be optimized."
1123
+ msgstr ""
1124
+
1125
+ #: class/view/shortpixel-list-table.php:255
1126
+ msgid "Show more details"
1127
+ msgstr ""
1128
+
1129
+ #: class/db/shortpixel-meta-facade.php:165
1130
+ msgid "Error"
1131
+ msgstr ""
1132
+
1133
+ #: class/db/shortpixel-custom-meta-dao.php:187
1134
+ msgid "Folder already added."
1135
+ msgstr ""
1136
+
1137
+ #: class/db/shortpixel-custom-meta-dao.php:191
1138
+ #, php-format
1139
+ msgid ""
1140
+ "The %s folder cannot be processed as it's not inside the root path of your "
1141
+ "website."
1142
+ msgstr ""
1143
+
1144
+ #: class/db/shortpixel-custom-meta-dao.php:200
1145
+ msgid ""
1146
+ "This folder contains Media Library images. To optimize Media Library images "
1147
+ "please go to <a href=\"upload.php?mode=list\">Media Library list view</a> or "
1148
+ "to <a href=\"upload.php?page=wp-short-pixel-bulk\">SortPixel Bulk page</a>."
1149
+ msgstr ""
1150
+
1151
+ #: class/db/shortpixel-custom-meta-dao.php:204
1152
+ msgid "Inserted folder doesn't have an ID!"
1153
+ msgstr ""
1154
+
1155
+ #: class/db/shortpixel-custom-meta-dao.php:224
1156
+ msgid ""
1157
+ "This folder contains the ShortPixel Backups. Please select a different "
1158
+ "folder."
1159
+ msgstr ""
1160
+
1161
+ #. var_dump($allFolders);
1162
+ #: class/db/shortpixel-custom-meta-dao.php:247
1163
+ #, php-format
1164
+ msgid "Folder already included in %s."
1165
+ msgstr ""
1166
+
1167
+ #: class/db/shortpixel-custom-meta-dao.php:250
1168
+ msgid "Folder does not exist."
1169
+ msgstr ""
1170
+
1171
+ #: class/model/shortpixel-folder.php:76 class/model/shortpixel-folder.php:149
1172
+ #, php-format
1173
+ msgid "Folder %s is not writeable. Please check permissions and try again."
1174
+ msgstr ""
1175
+
1176
+ #: wp-shortpixel.php:160
1177
+ msgid "ShortPixel Settings"
1178
+ msgstr ""
1179
+
1180
+ #. translators: title and menu name for the Other media page
1181
+ #: wp-shortpixel.php:166
1182
+ msgid "Other Media Optimized by ShortPixel"
1183
+ msgstr ""
1184
+
1185
+ #: wp-shortpixel.php:166
1186
+ msgid "Other Media"
1187
+ msgstr ""
1188
+
1189
+ #. translators: title and menu name for the Bulk Processing page
1190
+ #: wp-shortpixel.php:169
1191
+ msgid "ShortPixel Bulk Process"
1192
+ msgstr ""
1193
+
1194
+ #: wp-shortpixel.php:169
1195
+ msgid "Bulk ShortPixel"
1196
+ msgstr ""
1197
+
1198
+ #: wp-shortpixel.php:216
1199
+ msgid "Media alert dismissed"
1200
+ msgstr ""
1201
+
1202
+ #: wp-shortpixel.php:269
1203
+ msgid "Optimize with ShortPixel"
1204
+ msgstr ""
1205
+
1206
+ #: wp-shortpixel.php:270
1207
+ msgid ""
1208
+ "In order to access the ShortPixel Optimization actions and info, please "
1209
+ "change to {0}List View{1}List View{2}Dismiss{3}"
1210
+ msgstr ""
1211
+
1212
+ #: wp-shortpixel.php:271
1213
+ msgid ""
1214
+ "This type of optimization will apply to new uploaded images.\\nImages that "
1215
+ "were already processed will not be re-optimized unless you restart the bulk "
1216
+ "process."
1217
+ msgstr ""
1218
+
1219
+ #: wp-shortpixel.php:272
1220
+ msgid "Are you sure you want to stop optimizing the folder {0}?"
1221
+ msgstr ""
1222
+
1223
+ #: wp-shortpixel.php:275
1224
+ msgid "+{0} thumbnails optimized"
1225
+ msgstr ""
1226
+
1227
+ #: wp-shortpixel.php:276
1228
+ msgid "Optimize {0} thumbnails"
1229
+ msgstr ""
1230
+
1231
+ #: wp-shortpixel.php:277
1232
+ msgid "Reoptimize {0}"
1233
+ msgstr ""
1234
+
1235
+ #: wp-shortpixel.php:279
1236
+ msgid "Get API Key"
1237
+ msgstr ""
1238
+
1239
+ #: wp-shortpixel.php:283
1240
+ msgid "This content is not processable."
1241
+ msgstr ""
1242
+
1243
+ #: wp-shortpixel.php:284
1244
+ msgid "Image waiting to optimize thumbnails"
1245
+ msgstr ""
1246
+
1247
+ #. translators: toolbar icon tooltip
1248
+ #: wp-shortpixel.php:297
1249
+ msgid "ShortPixel optimizing..."
1250
+ msgstr ""
1251
+
1252
+ #. translators: toolbar icon tooltip
1253
+ #: wp-shortpixel.php:308
1254
+ msgid "ShortPixel quota exceeded. Click for details."
1255
+ msgstr ""
1256
+
1257
+ #: wp-shortpixel.php:564
1258
+ msgid "Missing API Key"
1259
+ msgstr ""
1260
+
1261
+ #. translators: console message Empty queue 1234 -> 1234
1262
+ #: wp-shortpixel.php:614
1263
+ msgid "Empty queue "
1264
+ msgstr ""
1265
+
1266
+ #: wp-shortpixel.php:740
1267
+ msgid " Retry limit reached. Skipping file ID "
1268
+ msgstr ""
1269
+
1270
+ #: wp-shortpixel.php:835
1271
+ msgid "NextGen image not found"
1272
+ msgstr ""
1273
+
1274
+ #: wp-shortpixel.php:1004 wp-shortpixel.php:1018
1275
+ msgid "Could not restore from backup: "
1276
+ msgstr ""
1277
+
1278
+ #: wp-shortpixel.php:1037
1279
+ msgid "No thumbnails to optimize for ID: "
1280
+ msgstr ""
1281
+
1282
+ #: wp-shortpixel.php:1037
1283
+ msgid "Please optimize image for ID: "
1284
+ msgstr ""
1285
+
1286
+ #: wp-shortpixel.php:1142
1287
+ msgid "Refresh custom folders content"
1288
+ msgstr ""
1289
+
1290
+ #: wp-shortpixel.php:1143
1291
+ msgid "Refresh folders"
1292
+ msgstr ""
1293
+
1294
+ #: wp-shortpixel.php:1146
1295
+ msgid "Other Media optimized by ShortPixel"
1296
+ msgstr ""
1297
+
1298
+ #: wp-shortpixel.php:1322 wp-shortpixel.php:1413
1299
+ msgid "You do not have sufficient permissions to access this page."
1300
+ msgstr ""
1301
+
1302
+ #: wp-shortpixel.php:1451
1303
+ #, php-format
1304
+ msgid ""
1305
+ "The key you provided has %s characters. The API key should have 20 "
1306
+ "characters, letters and numbers only."
1307
+ msgstr ""
1308
+
1309
+ #: wp-shortpixel.php:1453
1310
+ msgid ""
1311
+ "Please check that the API key is the same as the one you received in your "
1312
+ "confirmation email."
1313
+ msgstr ""
1314
+
1315
+ #: wp-shortpixel.php:1455
1316
+ msgid "If this problem persists, please contact us at "
1317
+ msgstr ""
1318
+
1319
+ #: wp-shortpixel.php:1457
1320
+ msgid " or "
1321
+ msgstr ""
1322
+
1323
+ #: wp-shortpixel.php:1475
1324
+ msgid ""
1325
+ "API Key is valid but your site is not accessible from our servers. Please "
1326
+ "make sure that your server is accessible from the Internet before using the "
1327
+ "API or otherwise we won't be able to optimize them."
1328
+ msgstr ""
1329
+
1330
+ #: wp-shortpixel.php:1478
1331
+ msgid ""
1332
+ "API Key valid! <br>You seem to be running a multisite, please note that API "
1333
+ "Key can also be configured in wp-config.php like this:"
1334
+ msgstr ""
1335
+
1336
+ #: wp-shortpixel.php:1481
1337
+ msgid "API Key valid!"
1338
+ msgstr ""
1339
+
1340
+ #: wp-shortpixel.php:1488
1341
+ #, php-format
1342
+ msgid ""
1343
+ "There is something preventing us to create a new folder for backing up your "
1344
+ "original files.<BR>Please make sure that folder <b>%s</b> has the necessary "
1345
+ "write and read rights."
1346
+ msgstr ""
1347
+
1348
+ #: wp-shortpixel.php:1536
1349
+ msgid "Folder added successfully."
1350
+ msgstr ""
1351
+
1352
+ #: wp-shortpixel.php:1712
1353
+ msgid ""
1354
+ "API Key could not be validated due to a connectivity error.<BR>Your firewall "
1355
+ "may be blocking us. Please contact your hosting provider and ask them to "
1356
+ "allow connections from your site to IP 176.9.106.46.<BR> If you still cannot "
1357
+ "validate your API Key after this, please <a href=\"https://shortpixel.com/"
1358
+ "contact\" target=\"_blank\">contact us</a> and we will try to help. "
1359
+ msgstr ""
1360
+
1361
+ #: wp-shortpixel.php:1713 wp-shortpixel.php:1714
1362
+ msgid "Information unavailable. Please check your API key."
1363
+ msgstr ""
1364
+
1365
+ #: wp-shortpixel.php:1789
1366
+ msgid "PDF not processed."
1367
+ msgstr ""
1368
+
1369
+ #: wp-shortpixel.php:1820 wp-shortpixel.php:1822
1370
+ msgid "Cannot write optimized file"
1371
+ msgstr ""
1372
+
1373
+ #: wp-shortpixel.php:1823
1374
+ msgid "Why?"
1375
+ msgstr ""
1376
+
1377
+ #: wp-shortpixel.php:1831
1378
+ msgid "Image does not exist"
1379
+ msgstr ""
1380
+
1381
+ #: wp-shortpixel.php:1835
1382
+ msgid "Image waiting to be processed."
1383
+ msgstr ""
1384
+
1385
+ #: wp-shortpixel.php:1853
1386
+ msgid "ShortPixel Statistics"
1387
+ msgstr ""
1388
+
1389
+ #: wp-shortpixel.php:1871
1390
+ msgid "ShortPixel Compression"
1391
+ msgstr ""
1392
+
1393
+ #: shortpixel_api.php:142
1394
+ msgid "The file(s) do not exist on disk."
1395
+ msgstr ""
1396
+
1397
+ #: shortpixel_api.php:157 shortpixel_api.php:168
1398
+ msgid "Timed out while processing."
1399
+ msgstr ""
1400
+
1401
+ #: shortpixel_api.php:161
1402
+ msgid "Image ID"
1403
+ msgstr ""
1404
+
1405
+ #: shortpixel_api.php:161
1406
+ msgid "Media ID"
1407
+ msgstr ""
1408
+
1409
+ #: shortpixel_api.php:162
1410
+ msgid "Skip this image, try the next one."
1411
+ msgstr ""
1412
+
1413
+ #. send requests to API
1414
+ #. response <> 200 -> there was an error apparently?
1415
+ #: shortpixel_api.php:179 shortpixel_api.php:212 shortpixel_api.php:215
1416
+ msgid "There was an error and your request was not processed."
1417
+ msgstr ""
1418
+
1419
+ #: shortpixel_api.php:231
1420
+ msgid "Unecognized API response. Please contact support."
1421
+ msgstr ""
1422
+
1423
+ #: shortpixel_api.php:238
1424
+ msgid "Quota exceeded."
1425
+ msgstr ""
1426
+
1427
+ #: shortpixel_api.php:326
1428
+ msgid "Error downloading file"
1429
+ msgstr ""
1430
+
1431
+ #: shortpixel_api.php:334
1432
+ #, php-format
1433
+ msgid ""
1434
+ "Error downloading file - incorrect file size (downloaded: %s, correct: %s )"
1435
+ msgstr ""
1436
+
1437
+ #: shortpixel_api.php:337
1438
+ msgid "Unable to locate downloaded file"
1439
+ msgstr ""
1440
+
1441
+ #. array with final paths for these files
1442
+ #. creates backup folder if it doesn't exist
1443
+ #: shortpixel_api.php:399
1444
+ msgid "Backup folder does not exist and it cannot be created"
1445
+ msgstr ""
1446
+
1447
+ #. file couldn't be saved in backup folder
1448
+ #: shortpixel_api.php:419
1449
+ #, php-format
1450
+ msgid "Cannot save file <i>%s</i> in backup directory"
1451
+ msgstr ""
1452
+
1453
+ #. cannot write to the backup dir, return with an error
1454
+ #: shortpixel_api.php:428
1455
+ msgid "Cannot save file in backup directory"
1456
+ msgstr ""
1457
+
1458
+ #: shortpixel_api.php:491
1459
+ #, php-format
1460
+ msgid "Optimized version of %s file(s) couldn't be updated."
1461
+ msgstr ""
lang/shortpixel-en_US.mo ADDED
Binary file
lang/shortpixel-en_US.po ADDED
@@ -0,0 +1,1461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2016-11-30 16:23+0100\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "Language: \n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=UTF-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ #: class/view/shortpixel_view.php:23 class/view/shortpixel_view.php:417
21
+ msgid "Average reduction"
22
+ msgstr ""
23
+
24
+ #. translators: header of the alert box
25
+ #: class/view/shortpixel_view.php:33
26
+ msgid "Quota Exceeded"
27
+ msgstr ""
28
+
29
+ #. translators: body of the alert box
30
+ #: class/view/shortpixel_view.php:35
31
+ #, php-format
32
+ msgid ""
33
+ "The plugin has optimized <strong>%s images</strong> and stopped because it "
34
+ "reached the available quota limit."
35
+ msgstr ""
36
+
37
+ #: class/view/shortpixel_view.php:39
38
+ #, php-format
39
+ msgid ""
40
+ "<strong>%s images and %s thumbnails</strong> are not yet optimized by "
41
+ "ShortPixel."
42
+ msgstr ""
43
+
44
+ #: class/view/shortpixel_view.php:44
45
+ msgid "Upgrade"
46
+ msgstr ""
47
+
48
+ #: class/view/shortpixel_view.php:45
49
+ msgid "Confirm New Quota"
50
+ msgstr ""
51
+
52
+ #: class/view/shortpixel_view.php:47
53
+ msgid "Get more image credits by referring ShortPixel to your friends!"
54
+ msgstr ""
55
+
56
+ #: class/view/shortpixel_view.php:49
57
+ msgid "Check your account"
58
+ msgstr ""
59
+
60
+ #: class/view/shortpixel_view.php:50
61
+ msgid ""
62
+ "for your unique referral link. For each user that joins, you will receive "
63
+ "+100 additional image credits/month."
64
+ msgstr ""
65
+
66
+ #: class/view/shortpixel_view.php:58
67
+ msgid ""
68
+ "In order to start the optimization process, you need to validate your API "
69
+ "Key in the <a href=\"options-general.php?page=wp-shortpixel\">ShortPixel "
70
+ "Settings</a> page in your WordPress Admin."
71
+ msgstr ""
72
+
73
+ #: class/view/shortpixel_view.php:61
74
+ msgid ""
75
+ "If you don’t have an API Key, you can get one delivered to your inbox, for "
76
+ "free."
77
+ msgstr ""
78
+
79
+ #: class/view/shortpixel_view.php:62
80
+ msgid ""
81
+ "Please <a href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">sign "
82
+ "up to get your API key.</a>"
83
+ msgstr ""
84
+
85
+ #: class/view/shortpixel_view.php:70
86
+ msgid "Dismiss"
87
+ msgstr ""
88
+
89
+ #: class/view/shortpixel_view.php:72
90
+ msgid "ShortPixel Optimization"
91
+ msgstr ""
92
+
93
+ #: class/view/shortpixel_view.php:75
94
+ msgid ""
95
+ "Action needed. Please <a href='https://shortpixel.com/wp-apikey' "
96
+ "target='_blank'>get your API key</a> to activate your ShortPixel plugin."
97
+ msgstr ""
98
+
99
+ #: class/view/shortpixel_view.php:78
100
+ msgid ""
101
+ "Your image gallery is not optimized. It takes 2 minutes to <a href='https://"
102
+ "shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate "
103
+ "your ShortPixel plugin."
104
+ msgstr ""
105
+
106
+ #: class/view/shortpixel_view.php:102
107
+ msgid "Your media library"
108
+ msgstr ""
109
+
110
+ #: class/view/shortpixel_view.php:103
111
+ msgid "Original images"
112
+ msgstr ""
113
+
114
+ #: class/view/shortpixel_view.php:105
115
+ msgid "Smaller thumbnails"
116
+ msgstr ""
117
+
118
+ #: class/view/shortpixel_view.php:109 class/view/shortpixel_view.php:343
119
+ msgid "Include thumbnails"
120
+ msgstr ""
121
+
122
+ #: class/view/shortpixel_view.php:112
123
+ msgid "Total images"
124
+ msgstr ""
125
+
126
+ #: class/view/shortpixel_view.php:114
127
+ msgid "Already optimized originals"
128
+ msgstr ""
129
+
130
+ #: class/view/shortpixel_view.php:116
131
+ msgid "Already optimized thumbnails"
132
+ msgstr ""
133
+
134
+ #: class/view/shortpixel_view.php:119 class/view/shortpixel_view.php:124
135
+ msgid "Total to be optimized"
136
+ msgstr ""
137
+
138
+ #: class/view/shortpixel_view.php:123
139
+ msgid "Your custom folders"
140
+ msgstr ""
141
+
142
+ #: class/view/shortpixel_view.php:137
143
+ #, php-format
144
+ msgid ""
145
+ "<span class=\"label\">Start Optimizing</span><br> <span class=\"total\">%s</"
146
+ "span> images"
147
+ msgstr ""
148
+
149
+ #: class/view/shortpixel_view.php:148
150
+ msgid ""
151
+ "Nothing to optimize! The images that you add to Media Gallery will be "
152
+ "automatically optimized after upload."
153
+ msgstr ""
154
+
155
+ #: class/view/shortpixel_view.php:157
156
+ msgid ""
157
+ "After you start the bulk process, in order for the optimization to run, you "
158
+ "must keep this page open and your computer running. If you close the page "
159
+ "for whatever reason, just turn back to it and the bulk process will resume."
160
+ msgstr ""
161
+
162
+ #: class/view/shortpixel_view.php:163
163
+ msgid "What are Thumbnails?"
164
+ msgstr ""
165
+
166
+ #: class/view/shortpixel_view.php:164
167
+ msgid ""
168
+ "Thumbnails are smaller images usually generated by your WP theme. Most "
169
+ "themes generate between 3 and 6 thumbnails for each Media Library image."
170
+ msgstr ""
171
+
172
+ #: class/view/shortpixel_view.php:165
173
+ msgid ""
174
+ "The thumbnails also generate traffic on your website pages and they "
175
+ "influence your website's speed."
176
+ msgstr ""
177
+
178
+ #: class/view/shortpixel_view.php:166
179
+ msgid ""
180
+ "It's highly recommended that you include thumbnails in the optimization as "
181
+ "well."
182
+ msgstr ""
183
+
184
+ #: class/view/shortpixel_view.php:169
185
+ msgid "How does it work?"
186
+ msgstr ""
187
+
188
+ #: class/view/shortpixel_view.php:170
189
+ msgid ""
190
+ "The plugin processes images starting with the newest ones you uploaded in "
191
+ "your Media Library."
192
+ msgstr ""
193
+
194
+ #: class/view/shortpixel_view.php:171
195
+ msgid "You will be able to pause the process anytime."
196
+ msgstr ""
197
+
198
+ #: class/view/shortpixel_view.php:172
199
+ msgid ""
200
+ "<p>Your original images will be stored in a separate back-up folder.</p>"
201
+ msgstr ""
202
+
203
+ #: class/view/shortpixel_view.php:173
204
+ msgid ""
205
+ "You can watch the images being processed live, right here, after you start "
206
+ "optimizing."
207
+ msgstr ""
208
+
209
+ #. bulk is paused
210
+ #: class/view/shortpixel_view.php:179
211
+ msgid "Please see below the optimization status so far:"
212
+ msgstr ""
213
+
214
+ #: class/view/shortpixel_view.php:182
215
+ #, php-format
216
+ msgid "%d images and %d thumbnails are not yet optimized by ShortPixel."
217
+ msgstr ""
218
+
219
+ #: class/view/shortpixel_view.php:187
220
+ msgid ""
221
+ "You can continue optimizing your Media Gallery from where you left, by "
222
+ "clicking the Resume processing button. Already optimized images will not be "
223
+ "reprocessed."
224
+ msgstr ""
225
+
226
+ #: class/view/shortpixel_view.php:197
227
+ msgid "Congratulations!"
228
+ msgstr ""
229
+
230
+ #: class/view/shortpixel_view.php:198
231
+ msgid "Your media library has been successfully optimized!"
232
+ msgstr ""
233
+
234
+ #: class/view/shortpixel_view.php:199
235
+ msgid "Summary"
236
+ msgstr ""
237
+
238
+ #: class/view/shortpixel_view.php:205
239
+ msgid "Share your optimization results:"
240
+ msgstr ""
241
+
242
+ #: class/view/shortpixel_view.php:225
243
+ msgid "I just optimized my images by "
244
+ msgstr ""
245
+
246
+ #: class/view/shortpixel_view.php:227
247
+ msgid "I just optimized my images "
248
+ msgstr ""
249
+
250
+ #: class/view/shortpixel_view.php:230
251
+ msgid "with @ShortPixel, a great plugin for increasing #WordPress page speed:"
252
+ msgstr ""
253
+
254
+ #: class/view/shortpixel_view.php:231
255
+ msgid "Tweet"
256
+ msgstr ""
257
+
258
+ #: class/view/shortpixel_view.php:257
259
+ msgid "Please rate us!"
260
+ msgstr ""
261
+
262
+ #: class/view/shortpixel_view.php:267
263
+ #, php-format
264
+ msgid ""
265
+ "Go to the ShortPixel <a href=\"%soptions-general.php?page=wp-shortpixel#stats"
266
+ "\">Stats</a> and see all your websites' optimized stats. Download your "
267
+ "detailed <a href=\"https://api.shortpixel.com/v2/report.php?key=%s"
268
+ "\">Optimization Report</a> to check your image optimization statistics for "
269
+ "the last 40 days."
270
+ msgstr ""
271
+
272
+ #: class/view/shortpixel_view.php:275
273
+ msgid ""
274
+ "The following images could not be processed because of their limited write "
275
+ "rights. This usually happens if you have changed your hosting provider. "
276
+ "Please restart the optimization process after you granted write rights to "
277
+ "all the files below."
278
+ msgstr ""
279
+
280
+ #: class/view/shortpixel_view.php:290 wp-shortpixel.php:1755
281
+ #: wp-shortpixel.php:1756 wp-shortpixel.php:1757 wp-shortpixel.php:1758
282
+ msgid " images"
283
+ msgstr ""
284
+
285
+ #: class/view/shortpixel_view.php:291
286
+ msgid " and"
287
+ msgstr ""
288
+
289
+ #: class/view/shortpixel_view.php:292
290
+ msgid " thumbnails"
291
+ msgstr ""
292
+
293
+ #: class/view/shortpixel_view.php:293
294
+ msgid " are not yet optimized by ShortPixel."
295
+ msgstr ""
296
+
297
+ #: class/view/shortpixel_view.php:295
298
+ msgid "Some have errors:"
299
+ msgstr ""
300
+
301
+ #: class/view/shortpixel_view.php:318
302
+ #, php-format
303
+ msgid ""
304
+ "%s images and %s thumbnails were optimized <strong>%s</strong>. You can re-"
305
+ "optimize <strong>%s</strong> the ones that have backup."
306
+ msgstr ""
307
+
308
+ #: class/view/shortpixel_view.php:323
309
+ #, php-format
310
+ msgid ""
311
+ "%s images were optimized <strong>%s</strong>. You can re-optimize <strong>"
312
+ "%s</strong> the ones that have backup. "
313
+ msgstr ""
314
+
315
+ #: class/view/shortpixel_view.php:326
316
+ msgid " thumbnails will be restored to originals."
317
+ msgstr ""
318
+
319
+ #: class/view/shortpixel_view.php:331
320
+ msgid ""
321
+ "Restart the optimization process for these images by clicking the button "
322
+ "below."
323
+ msgstr ""
324
+
325
+ #: class/view/shortpixel_view.php:333
326
+ msgid ""
327
+ "Restart the optimization process for new images added to your library by "
328
+ "clicking the button below."
329
+ msgstr ""
330
+
331
+ #: class/view/shortpixel_view.php:335
332
+ #, php-format
333
+ msgid "Already <strong>%s</strong> optimized images will not be reprocessed."
334
+ msgstr ""
335
+
336
+ #: class/view/shortpixel_view.php:337
337
+ msgid ""
338
+ "Please note that reoptimizing images as <strong>lossy/lossless</strong> may "
339
+ "use additional credits."
340
+ msgstr ""
341
+
342
+ #: class/view/shortpixel_view.php:338
343
+ msgid "More info"
344
+ msgstr ""
345
+
346
+ #: class/view/shortpixel_view.php:344
347
+ msgid "Restart Optimizing"
348
+ msgstr ""
349
+
350
+ #: class/view/shortpixel_view.php:355
351
+ msgid "Bulk Image Optimization by ShortPixel"
352
+ msgstr ""
353
+
354
+ #: class/view/shortpixel_view.php:361
355
+ msgid "Lengthy operation in progress:"
356
+ msgstr ""
357
+
358
+ #: class/view/shortpixel_view.php:362
359
+ msgid "Optimizing image"
360
+ msgstr ""
361
+
362
+ #: class/view/shortpixel_view.php:369
363
+ msgid "Error processing file:"
364
+ msgstr ""
365
+
366
+ #: class/view/shortpixel_view.php:375
367
+ msgid "Just optimized:"
368
+ msgstr ""
369
+
370
+ #: class/view/shortpixel_view.php:381
371
+ msgid "Original image"
372
+ msgstr ""
373
+
374
+ #: class/view/shortpixel_view.php:385
375
+ msgid "Optimized image"
376
+ msgstr ""
377
+
378
+ #. translators: percent follows
379
+ #: class/view/shortpixel_view.php:389
380
+ msgid "Optimized by:"
381
+ msgstr ""
382
+
383
+ #: class/view/shortpixel_view.php:411
384
+ msgid "Remaining credits"
385
+ msgstr ""
386
+
387
+ #: class/view/shortpixel_view.php:427 class/view/shortpixel_view.php:436
388
+ msgid "Media Library"
389
+ msgstr ""
390
+
391
+ #: class/view/shortpixel_view.php:428
392
+ msgid "and"
393
+ msgstr ""
394
+
395
+ #: class/view/shortpixel_view.php:429
396
+ msgid "Custom folders"
397
+ msgstr ""
398
+
399
+ #: class/view/shortpixel_view.php:429
400
+ msgid "optimization in progress ..."
401
+ msgstr ""
402
+
403
+ #: class/view/shortpixel_view.php:430
404
+ msgid "Bulk optimization has started."
405
+ msgstr ""
406
+
407
+ #: class/view/shortpixel_view.php:431
408
+ #, php-format
409
+ msgid ""
410
+ "This process will take some time, depending on the number of images in your "
411
+ "library. In the meantime, you can continue using \n"
412
+ " the admin as usual, <a href=\"%s\" target=\"_blank\">in "
413
+ "a different browser window or tab</a>.<br>\n"
414
+ " However, <strong>if you close this window, the bulk "
415
+ "processing will pause</strong> until you open the media gallery or the "
416
+ "ShortPixel bulk page again."
417
+ msgstr ""
418
+
419
+ #: class/view/shortpixel_view.php:436
420
+ msgid "and Custom folders"
421
+ msgstr ""
422
+
423
+ #: class/view/shortpixel_view.php:436
424
+ msgid "optimization paused"
425
+ msgstr ""
426
+
427
+ #: class/view/shortpixel_view.php:437
428
+ msgid "Bulk processing is paused until you resume the optimization process."
429
+ msgstr ""
430
+
431
+ #. now we display the action buttons always when a type of bulk is running
432
+ #: class/view/shortpixel_view.php:454
433
+ msgid "Pause"
434
+ msgstr ""
435
+
436
+ #: class/view/shortpixel_view.php:454
437
+ msgid "Resume processing"
438
+ msgstr ""
439
+
440
+ #: class/view/shortpixel_view.php:457
441
+ msgid "Only other media"
442
+ msgstr ""
443
+
444
+ #: class/view/shortpixel_view.php:457
445
+ msgid "Process only the other media, skipping the Media Library"
446
+ msgstr ""
447
+
448
+ #: class/view/shortpixel_view.php:461
449
+ msgid "Manage custom folders"
450
+ msgstr ""
451
+
452
+ #: class/view/shortpixel_view.php:469
453
+ msgid "Processed Images and PDFs:"
454
+ msgstr ""
455
+
456
+ #: class/view/shortpixel_view.php:470
457
+ msgid "Processed Thumbnails:"
458
+ msgstr ""
459
+
460
+ #: class/view/shortpixel_view.php:471
461
+ msgid "Total files processed:"
462
+ msgstr ""
463
+
464
+ #: class/view/shortpixel_view.php:472
465
+ #, php-format
466
+ msgid "Minus files with <5% optimization (free):"
467
+ msgstr ""
468
+
469
+ #: class/view/shortpixel_view.php:473
470
+ msgid "Used quota:"
471
+ msgstr ""
472
+
473
+ #: class/view/shortpixel_view.php:475
474
+ msgid "Average optimization:"
475
+ msgstr ""
476
+
477
+ #: class/view/shortpixel_view.php:476
478
+ msgid "Saved space:"
479
+ msgstr ""
480
+
481
+ #. wp_enqueue_script('jquery.idTabs.js', plugins_url('/js/jquery.idTabs.js',__FILE__) );
482
+ #: class/view/shortpixel_view.php:502
483
+ msgid "ShortPixel Plugin Settings"
484
+ msgstr ""
485
+
486
+ #: class/view/shortpixel_view.php:505
487
+ msgid "Upgrade now"
488
+ msgstr ""
489
+
490
+ #: class/view/shortpixel_view.php:507
491
+ msgid "Support"
492
+ msgstr ""
493
+
494
+ #: class/view/shortpixel_view.php:525
495
+ msgid "General"
496
+ msgstr ""
497
+
498
+ #: class/view/shortpixel_view.php:530
499
+ msgid "Advanced"
500
+ msgstr ""
501
+
502
+ #. the span is a trick to keep the sections ordered as nth-child in styles: 1,2,3,4 (otherwise the third section would be nth-child(2) too, because of the form)
503
+ #: class/view/shortpixel_view.php:537
504
+ msgid "Statistics"
505
+ msgstr ""
506
+
507
+ #: class/view/shortpixel_view.php:545
508
+ msgid "WP Resources"
509
+ msgstr ""
510
+
511
+ #: class/view/shortpixel_view.php:546
512
+ msgid "Please reload"
513
+ msgstr ""
514
+
515
+ #: class/view/shortpixel_view.php:579
516
+ #, php-format
517
+ msgid ""
518
+ "New images uploaded to the Media Library will be optimized automatically.<br/"
519
+ ">If you have existing images you would like to optimize, you can use the <a "
520
+ "href=\"%supload.php?page=wp-short-pixel-bulk\">Bulk Optimization Tool</a>."
521
+ msgstr ""
522
+
523
+ #: class/view/shortpixel_view.php:582
524
+ msgid "Step 1:"
525
+ msgstr ""
526
+
527
+ #: class/view/shortpixel_view.php:583
528
+ #, php-format
529
+ msgid ""
530
+ "If you don't have an API Key, <a href=\"https://shortpixel.com/wp-apikey%s\" "
531
+ "target=\"_blank\">sign up here.</a> It's free and it only takes one minute, "
532
+ "we promise!"
533
+ msgstr ""
534
+
535
+ #: class/view/shortpixel_view.php:584
536
+ msgid "Step 2:"
537
+ msgstr ""
538
+
539
+ #: class/view/shortpixel_view.php:585
540
+ msgid "Please enter here the API Key you received by email and press Validate."
541
+ msgstr ""
542
+
543
+ #: class/view/shortpixel_view.php:591
544
+ msgid "API Key:"
545
+ msgstr ""
546
+
547
+ #: class/view/shortpixel_view.php:601
548
+ msgid "Multisite API Key"
549
+ msgstr ""
550
+
551
+ #: class/view/shortpixel_view.php:604
552
+ msgid "Validate the provided API key"
553
+ msgstr ""
554
+
555
+ #: class/view/shortpixel_view.php:605
556
+ msgid "Validate"
557
+ msgstr ""
558
+
559
+ #: class/view/shortpixel_view.php:607
560
+ msgid "Key defined in wp-config.php."
561
+ msgstr ""
562
+
563
+ #. if invalid key we display the link to the API Key
564
+ #. if valid key we display the rest of the options
565
+ #: class/view/shortpixel_view.php:618
566
+ msgid "Compression type:"
567
+ msgstr ""
568
+
569
+ #: class/view/shortpixel_view.php:622
570
+ msgid "Lossy (recommended)"
571
+ msgstr ""
572
+
573
+ #: class/view/shortpixel_view.php:623
574
+ msgid ""
575
+ "<b>Lossy compression: </b>lossy has a better compression rate than lossless "
576
+ "compression.</br>The resulting image is identical with the original to the "
577
+ "human eye. You can run a test for free "
578
+ msgstr ""
579
+
580
+ #: class/view/shortpixel_view.php:624 wp-shortpixel.php:1458
581
+ msgid "here"
582
+ msgstr ""
583
+
584
+ #: class/view/shortpixel_view.php:626 class/view/shortpixel-list-table.php:111
585
+ msgid "Lossless"
586
+ msgstr ""
587
+
588
+ #: class/view/shortpixel_view.php:628
589
+ msgid ""
590
+ "<b>Lossless compression: </b> the shrunk image will be identical with the "
591
+ "original and smaller in size.</br>In some rare cases you will need to use \n"
592
+ " this type of compression. Some technical drawings or "
593
+ "images from vector graphics are possible situations."
594
+ msgstr ""
595
+
596
+ #: class/view/shortpixel_view.php:638
597
+ msgid "Also include thumbnails:"
598
+ msgstr ""
599
+
600
+ #: class/view/shortpixel_view.php:640
601
+ msgid "Apply compression also to <strong>image thumbnails.</strong> "
602
+ msgstr ""
603
+
604
+ #: class/view/shortpixel_view.php:641
605
+ msgid "thumbnails to optimize"
606
+ msgstr ""
607
+
608
+ #: class/view/shortpixel_view.php:643
609
+ msgid ""
610
+ "It is highly recommended that you optimize the thumbnails as they are "
611
+ "usually the images most viewed by end users and can generate most traffic."
612
+ "<br>Please note that thumbnails count up to your total quota."
613
+ msgstr ""
614
+
615
+ #: class/view/shortpixel_view.php:648
616
+ msgid "Image backup"
617
+ msgstr ""
618
+
619
+ #: class/view/shortpixel_view.php:650
620
+ msgid "Save and keep a backup of your original images in a separate folder."
621
+ msgstr ""
622
+
623
+ #: class/view/shortpixel_view.php:651
624
+ msgid ""
625
+ "You <strong>need to have backup active</strong> in order to be able to "
626
+ "restore images to originals or to convert from Lossy to Lossless and back."
627
+ msgstr ""
628
+
629
+ #: class/view/shortpixel_view.php:655
630
+ msgid "CMYK to RGB conversion"
631
+ msgstr ""
632
+
633
+ #: class/view/shortpixel_view.php:657
634
+ msgid "Adjust your images for computer and mobile screen display."
635
+ msgstr ""
636
+
637
+ #: class/view/shortpixel_view.php:658
638
+ msgid ""
639
+ "Images for the web only need RGB format and converting them from CMYK to RGB "
640
+ "makes them smaller."
641
+ msgstr ""
642
+
643
+ #: class/view/shortpixel_view.php:662
644
+ msgid "Remove EXIF"
645
+ msgstr ""
646
+
647
+ #: class/view/shortpixel_view.php:664
648
+ msgid "Remove the EXIF tag of the image (recommended)."
649
+ msgstr ""
650
+
651
+ #: class/view/shortpixel_view.php:665
652
+ msgid ""
653
+ "EXIF is a set of various pieces of information that are automatically "
654
+ "embedded into the image upon creation. This can include GPS position, camera "
655
+ "manufacturer, date and time, etc. \n"
656
+ " Unless you really need that data to be "
657
+ "preserved, we recommend removing it as it can lead to <a href=\"http://blog."
658
+ "shortpixel.com/how-much-smaller-can-be-images-without-exif-icc\" target="
659
+ "\"_blank\">better compression rates</a>."
660
+ msgstr ""
661
+
662
+ #: class/view/shortpixel_view.php:670
663
+ msgid "Resize large images"
664
+ msgstr ""
665
+
666
+ #: class/view/shortpixel_view.php:673
667
+ msgid "to maximum"
668
+ msgstr ""
669
+
670
+ #: class/view/shortpixel_view.php:675
671
+ msgid "pixels wide &times;"
672
+ msgstr ""
673
+
674
+ #: class/view/shortpixel_view.php:677
675
+ msgid ""
676
+ "pixels high (original aspect ratio is preserved and image is not cropped)"
677
+ msgstr ""
678
+
679
+ #: class/view/shortpixel_view.php:679
680
+ #, php-format
681
+ msgid ""
682
+ "Recommended for large photos, like the ones taken with your phone. Saved "
683
+ "space can go up to 80% or more after resizing."
684
+ msgstr ""
685
+
686
+ #: class/view/shortpixel_view.php:683
687
+ msgid ""
688
+ "Sizes will be greater or equal to the corresponding value. For example, if "
689
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
690
+ "resized to 1000x1500px while an image of 3000x2000px will be resized to "
691
+ "1800x1200px"
692
+ msgstr ""
693
+
694
+ #: class/view/shortpixel_view.php:685
695
+ msgid ""
696
+ "Sizes will be smaller or equal to the corresponding value. For example, if "
697
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
698
+ "resized to 800x1200px while an image of 3000x2000px will be resized to "
699
+ "1000x667px"
700
+ msgstr ""
701
+
702
+ #: class/view/shortpixel_view.php:692 class/view/shortpixel_view.php:847
703
+ msgid "Save Changes"
704
+ msgstr ""
705
+
706
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
707
+ msgid "Save and go to the Bulk Processing page"
708
+ msgstr ""
709
+
710
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
711
+ #: wp-shortpixel.php:1517 wp-shortpixel.php:1518
712
+ msgid "Save and Go to Bulk Process"
713
+ msgstr ""
714
+
715
+ #: class/view/shortpixel_view.php:716
716
+ msgid "Please enter your API key in the General tab first."
717
+ msgstr ""
718
+
719
+ #. if valid key we display the rest of the options
720
+ #: class/view/shortpixel_view.php:721
721
+ msgid "Additional media folders"
722
+ msgstr ""
723
+
724
+ #: class/view/shortpixel_view.php:726
725
+ msgid "Folder name"
726
+ msgstr ""
727
+
728
+ #: class/view/shortpixel_view.php:727
729
+ msgid "Type &amp;<br>Status"
730
+ msgstr ""
731
+
732
+ #: class/view/shortpixel_view.php:728
733
+ msgid "Files"
734
+ msgstr ""
735
+
736
+ #: class/view/shortpixel_view.php:729
737
+ msgid "Last change"
738
+ msgstr ""
739
+
740
+ #: class/view/shortpixel_view.php:738 class/view/shortpixel_view.php:743
741
+ #: class/view/shortpixel_view.php:745 class/view/shortpixel_view.php:747
742
+ msgid "Empty"
743
+ msgstr ""
744
+
745
+ #: class/view/shortpixel_view.php:740 class/view/shortpixel_view.php:745
746
+ #: class/view/shortpixel_view.php:747
747
+ msgid "Optimized"
748
+ msgstr ""
749
+
750
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
751
+ #: class/view/shortpixel-list-table.php:97
752
+ msgid "Pending"
753
+ msgstr ""
754
+
755
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
756
+ #: class/view/shortpixel-list-table.php:99
757
+ msgid "Waiting"
758
+ msgstr ""
759
+
760
+ #: class/view/shortpixel_view.php:745
761
+ msgid "Stop monitoring"
762
+ msgstr ""
763
+
764
+ #: class/view/shortpixel_view.php:745
765
+ msgid "Stop optimizing"
766
+ msgstr ""
767
+
768
+ #: class/view/shortpixel_view.php:749
769
+ msgid "Failed"
770
+ msgstr ""
771
+
772
+ #: class/view/shortpixel_view.php:771
773
+ msgid ""
774
+ "Full folder refresh, check each file of the folder if it changed since it "
775
+ "was optimized. Might take up to 1 min. for big folders."
776
+ msgstr ""
777
+
778
+ #: class/view/shortpixel_view.php:772
779
+ msgid "Refresh"
780
+ msgstr ""
781
+
782
+ #: class/view/shortpixel_view.php:783
783
+ msgid "Select the images folder on your server."
784
+ msgstr ""
785
+
786
+ #: class/view/shortpixel_view.php:784
787
+ msgid "Select ..."
788
+ msgstr ""
789
+
790
+ #: class/view/shortpixel_view.php:786
791
+ msgid "Add Folder"
792
+ msgstr ""
793
+
794
+ #: class/view/shortpixel_view.php:788
795
+ msgid ""
796
+ "Use the Select... button to select site folders. ShortPixel will optimize "
797
+ "images and PDFs from the specified folders and their subfolders. The "
798
+ "optimization status for each image or PDF in these folders can be seen in "
799
+ "the <a href=\"upload.php?page=wp-short-pixel-custom\">Other Media list</a>, "
800
+ "under the Media menu."
801
+ msgstr ""
802
+
803
+ #: class/view/shortpixel_view.php:792
804
+ msgid "Select the images folder"
805
+ msgstr ""
806
+
807
+ #: class/view/shortpixel_view.php:794
808
+ msgid "Cancel"
809
+ msgstr ""
810
+
811
+ #: class/view/shortpixel_view.php:795
812
+ msgid "Select"
813
+ msgstr ""
814
+
815
+ #: class/view/shortpixel_view.php:807
816
+ msgid "Optimize NextGen galleries"
817
+ msgstr ""
818
+
819
+ #: class/view/shortpixel_view.php:809
820
+ msgid "Optimize NextGen galleries."
821
+ msgstr ""
822
+
823
+ #: class/view/shortpixel_view.php:811
824
+ msgid ""
825
+ "Check this to add all your current NextGen galleries to the custom folders "
826
+ "list and to also have all the future NextGen galleries and images optimized "
827
+ "automatically by ShortPixel."
828
+ msgstr ""
829
+
830
+ #: class/view/shortpixel_view.php:817
831
+ msgid "WebP versions"
832
+ msgstr ""
833
+
834
+ #: class/view/shortpixel_view.php:819
835
+ msgid ""
836
+ "Create also <a href=\"http://blog.shortpixel.com/how-webp-images-can-speed-"
837
+ "up-your-site/\" target=\"_blank\">WebP versions</a> of the images "
838
+ "<strong>for free</strong>."
839
+ msgstr ""
840
+
841
+ #: class/view/shortpixel_view.php:821
842
+ #, php-format
843
+ msgid ""
844
+ "WebP images can be up to three times smaller than PNGs and 25% smaller than "
845
+ "JPGs. Choosing this option <strong>does not use up additional credits</"
846
+ "strong>."
847
+ msgstr ""
848
+
849
+ #: class/view/shortpixel_view.php:826
850
+ msgid "HTTP AUTH credentials"
851
+ msgstr ""
852
+
853
+ #: class/view/shortpixel_view.php:828
854
+ msgid "User"
855
+ msgstr ""
856
+
857
+ #: class/view/shortpixel_view.php:829
858
+ msgid "Password"
859
+ msgstr ""
860
+
861
+ #: class/view/shortpixel_view.php:831
862
+ msgid ""
863
+ "Only fill in these fields if your site (front-end) is not publicly "
864
+ "accessible and visitors need a user/pass to connect to it. If you don't know "
865
+ "what is this then just <strong>leave the fields empty</strong>."
866
+ msgstr ""
867
+
868
+ #: class/view/shortpixel_view.php:836
869
+ msgid "Process in front-end"
870
+ msgstr ""
871
+
872
+ #: class/view/shortpixel_view.php:838
873
+ msgid "Automatically optimize images added by users in front end."
874
+ msgstr ""
875
+
876
+ #: class/view/shortpixel_view.php:840
877
+ msgid ""
878
+ "Check this if you have users that add images or PDF documents from custom "
879
+ "forms in the front-end. This could increase the load on your server if you "
880
+ "have a lot of users simultaneously connected."
881
+ msgstr ""
882
+
883
+ #: class/view/shortpixel_view.php:860
884
+ msgid "Your ShortPixel Stats"
885
+ msgstr ""
886
+
887
+ #: class/view/shortpixel_view.php:864
888
+ msgid "Average compression of your files:"
889
+ msgstr ""
890
+
891
+ #: class/view/shortpixel_view.php:868
892
+ msgid "Saved disk space by ShortPixel"
893
+ msgstr ""
894
+
895
+ #: class/view/shortpixel_view.php:872
896
+ msgid "Bandwith* saved with ShortPixel:"
897
+ msgstr ""
898
+
899
+ #: class/view/shortpixel_view.php:878
900
+ msgid "* Saved bandwidth is calculated at 10,000 impressions/image"
901
+ msgstr ""
902
+
903
+ #: class/view/shortpixel_view.php:880
904
+ msgid "Your ShortPixel Plan"
905
+ msgstr ""
906
+
907
+ #: class/view/shortpixel_view.php:884
908
+ msgid "Your ShortPixel plan"
909
+ msgstr ""
910
+
911
+ #: class/view/shortpixel_view.php:886
912
+ #, php-format
913
+ msgid ""
914
+ "%s/month, renews in %s days, on %s ( <a href=\"https://shortpixel.com/login/"
915
+ "%s\" target=\"_blank\">Need More? See the options available</a> )"
916
+ msgstr ""
917
+
918
+ #: class/view/shortpixel_view.php:889
919
+ #, php-format
920
+ msgid ""
921
+ "<a href=\"https://shortpixel.com/login/%s/tell-a-friend\" target=\"_blank"
922
+ "\">Join our friend referral system</a> to win more credits. For each user "
923
+ "that joins, you receive +100 images credits/month."
924
+ msgstr ""
925
+
926
+ #: class/view/shortpixel_view.php:894
927
+ msgid "One time credits:"
928
+ msgstr ""
929
+
930
+ #: class/view/shortpixel_view.php:898
931
+ msgid "Number of images processed this month:"
932
+ msgstr ""
933
+
934
+ #: class/view/shortpixel_view.php:900
935
+ msgid "see report"
936
+ msgstr ""
937
+
938
+ #: class/view/shortpixel_view.php:905
939
+ msgid "Remaining** images in your plan:"
940
+ msgstr ""
941
+
942
+ #: class/view/shortpixel_view.php:906
943
+ msgid "images"
944
+ msgstr ""
945
+
946
+ #: class/view/shortpixel_view.php:912
947
+ #, php-format
948
+ msgid ""
949
+ "** Increase your image quota by <a href=\"https://shortpixel.com/login/%s\" "
950
+ "target=\"_blank\">upgrading your ShortPixel plan.</a>"
951
+ msgstr ""
952
+
953
+ #: class/view/shortpixel_view.php:919
954
+ msgid "Total number of processed files:"
955
+ msgstr ""
956
+
957
+ #: class/view/shortpixel_view.php:924
958
+ msgid ""
959
+ "Original images are stored in a backup folder. Your backup folder size is "
960
+ "now:"
961
+ msgstr ""
962
+
963
+ #: class/view/shortpixel_view.php:928
964
+ msgid "Empty backups"
965
+ msgstr ""
966
+
967
+ #. not a file that we can process
968
+ #: class/view/shortpixel_view.php:945 wp-shortpixel.php:348
969
+ #: wp-shortpixel.php:374 wp-shortpixel.php:1813
970
+ msgid "Optimization N/A"
971
+ msgstr ""
972
+
973
+ #: class/view/shortpixel_view.php:948
974
+ msgid "Image does not exist."
975
+ msgstr ""
976
+
977
+ #. multisite key - need to be validated on each site but it's not invalid
978
+ #: class/view/shortpixel_view.php:952
979
+ msgid ""
980
+ "Please <a href=\"options-general.php?page=wp-shortpixel\">go to Settings</a> "
981
+ "to validate the API Key."
982
+ msgstr ""
983
+
984
+ #: class/view/shortpixel_view.php:954
985
+ msgid ""
986
+ "Invalid API Key. <a href=\"options-general.php?page=wp-shortpixel\">Check "
987
+ "your Settings</a>"
988
+ msgstr ""
989
+
990
+ #: class/view/shortpixel_view.php:963
991
+ msgid "Optimize now"
992
+ msgstr ""
993
+
994
+ #: class/view/shortpixel_view.php:973 class/view/shortpixel-list-table.php:55
995
+ #: wp-shortpixel.php:282
996
+ msgid "Retry"
997
+ msgstr ""
998
+
999
+ #: class/view/shortpixel_view.php:990 class/view/shortpixel-list-table.php:93
1000
+ #: wp-shortpixel.php:273
1001
+ msgid "Reduced by"
1002
+ msgstr ""
1003
+
1004
+ #: class/view/shortpixel_view.php:993 class/view/shortpixel-list-table.php:92
1005
+ #: class/view/shortpixel-list-table.php:94 wp-shortpixel.php:274
1006
+ msgid "Bonus processing"
1007
+ msgstr ""
1008
+
1009
+ #: class/view/shortpixel_view.php:996
1010
+ #, php-format
1011
+ msgid "+%s of %s thumbnails optimized"
1012
+ msgstr ""
1013
+
1014
+ #: class/view/shortpixel_view.php:997
1015
+ #, php-format
1016
+ msgid "+%s thumbnails optimized"
1017
+ msgstr ""
1018
+
1019
+ #: class/view/shortpixel_view.php:1005
1020
+ #, php-format
1021
+ msgid "Optimize %s thumbnails"
1022
+ msgstr ""
1023
+
1024
+ #: class/view/shortpixel_view.php:1012
1025
+ msgid "Reoptimize from the backed-up image"
1026
+ msgstr ""
1027
+
1028
+ #: class/view/shortpixel_view.php:1013
1029
+ msgid "Re-optimize"
1030
+ msgstr ""
1031
+
1032
+ #: class/view/shortpixel_view.php:1017 wp-shortpixel.php:278
1033
+ msgid "Restore backup"
1034
+ msgstr ""
1035
+
1036
+ #: class/view/shortpixel_view.php:1030 wp-shortpixel.php:280
1037
+ msgid "Extend Quota"
1038
+ msgstr ""
1039
+
1040
+ #: class/view/shortpixel_view.php:1033 wp-shortpixel.php:281
1041
+ msgid "Check&nbsp;&nbsp;Quota"
1042
+ msgstr ""
1043
+
1044
+ #: class/view/shortpixel-list-table.php:15
1045
+ msgid "Image"
1046
+ msgstr ""
1047
+
1048
+ #. singular name of the listed records
1049
+ #: class/view/shortpixel-list-table.php:16
1050
+ msgid "Images"
1051
+ msgstr ""
1052
+
1053
+ #. pe viitor. $columns['cb'] = '<input type="checkbox" />';
1054
+ #: class/view/shortpixel-list-table.php:29
1055
+ msgid "Filename"
1056
+ msgstr ""
1057
+
1058
+ #: class/view/shortpixel-list-table.php:30
1059
+ msgid "Folder"
1060
+ msgstr ""
1061
+
1062
+ #: class/view/shortpixel-list-table.php:31
1063
+ msgid "Type"
1064
+ msgstr ""
1065
+
1066
+ #: class/view/shortpixel-list-table.php:32
1067
+ msgid "Status"
1068
+ msgstr ""
1069
+
1070
+ #: class/view/shortpixel-list-table.php:33
1071
+ msgid "Options"
1072
+ msgstr ""
1073
+
1074
+ #: class/view/shortpixel-list-table.php:52
1075
+ msgid "Optimize"
1076
+ msgstr ""
1077
+
1078
+ #: class/view/shortpixel-list-table.php:58
1079
+ msgid "Restore"
1080
+ msgstr ""
1081
+
1082
+ #: class/view/shortpixel-list-table.php:61
1083
+ msgid "Re-optimize lossless"
1084
+ msgstr ""
1085
+
1086
+ #: class/view/shortpixel-list-table.php:64
1087
+ msgid "Re-optimize lossy"
1088
+ msgstr ""
1089
+
1090
+ #: class/view/shortpixel-list-table.php:67
1091
+ msgid "Check quota"
1092
+ msgstr ""
1093
+
1094
+ #: class/view/shortpixel-list-table.php:68
1095
+ msgid "View"
1096
+ msgstr ""
1097
+
1098
+ #: class/view/shortpixel-list-table.php:89
1099
+ msgid "Restored"
1100
+ msgstr ""
1101
+
1102
+ #: class/view/shortpixel-list-table.php:103
1103
+ msgid "code"
1104
+ msgstr ""
1105
+
1106
+ #: class/view/shortpixel-list-table.php:111
1107
+ msgid "Lossy"
1108
+ msgstr ""
1109
+
1110
+ #: class/view/shortpixel-list-table.php:112
1111
+ msgid "Keep EXIF"
1112
+ msgstr ""
1113
+
1114
+ #: class/view/shortpixel-list-table.php:113
1115
+ msgid "Preserve CMYK"
1116
+ msgstr ""
1117
+
1118
+ #: class/view/shortpixel-list-table.php:122
1119
+ msgid ""
1120
+ "No images avaliable. Go to <a href=\"options-general.php?page=wp-"
1121
+ "shortpixel#adv-settings\">Advanced Settings</a> to configure additional "
1122
+ "folders to be optimized."
1123
+ msgstr ""
1124
+
1125
+ #: class/view/shortpixel-list-table.php:255
1126
+ msgid "Show more details"
1127
+ msgstr ""
1128
+
1129
+ #: class/db/shortpixel-meta-facade.php:165
1130
+ msgid "Error"
1131
+ msgstr ""
1132
+
1133
+ #: class/db/shortpixel-custom-meta-dao.php:187
1134
+ msgid "Folder already added."
1135
+ msgstr ""
1136
+
1137
+ #: class/db/shortpixel-custom-meta-dao.php:191
1138
+ #, php-format
1139
+ msgid ""
1140
+ "The %s folder cannot be processed as it's not inside the root path of your "
1141
+ "website."
1142
+ msgstr ""
1143
+
1144
+ #: class/db/shortpixel-custom-meta-dao.php:200
1145
+ msgid ""
1146
+ "This folder contains Media Library images. To optimize Media Library images "
1147
+ "please go to <a href=\"upload.php?mode=list\">Media Library list view</a> or "
1148
+ "to <a href=\"upload.php?page=wp-short-pixel-bulk\">SortPixel Bulk page</a>."
1149
+ msgstr ""
1150
+
1151
+ #: class/db/shortpixel-custom-meta-dao.php:204
1152
+ msgid "Inserted folder doesn't have an ID!"
1153
+ msgstr ""
1154
+
1155
+ #: class/db/shortpixel-custom-meta-dao.php:224
1156
+ msgid ""
1157
+ "This folder contains the ShortPixel Backups. Please select a different "
1158
+ "folder."
1159
+ msgstr ""
1160
+
1161
+ #. var_dump($allFolders);
1162
+ #: class/db/shortpixel-custom-meta-dao.php:247
1163
+ #, php-format
1164
+ msgid "Folder already included in %s."
1165
+ msgstr ""
1166
+
1167
+ #: class/db/shortpixel-custom-meta-dao.php:250
1168
+ msgid "Folder does not exist."
1169
+ msgstr ""
1170
+
1171
+ #: class/model/shortpixel-folder.php:76 class/model/shortpixel-folder.php:149
1172
+ #, php-format
1173
+ msgid "Folder %s is not writeable. Please check permissions and try again."
1174
+ msgstr ""
1175
+
1176
+ #: wp-shortpixel.php:160
1177
+ msgid "ShortPixel Settings"
1178
+ msgstr ""
1179
+
1180
+ #. translators: title and menu name for the Other media page
1181
+ #: wp-shortpixel.php:166
1182
+ msgid "Other Media Optimized by ShortPixel"
1183
+ msgstr ""
1184
+
1185
+ #: wp-shortpixel.php:166
1186
+ msgid "Other Media"
1187
+ msgstr ""
1188
+
1189
+ #. translators: title and menu name for the Bulk Processing page
1190
+ #: wp-shortpixel.php:169
1191
+ msgid "ShortPixel Bulk Process"
1192
+ msgstr ""
1193
+
1194
+ #: wp-shortpixel.php:169
1195
+ msgid "Bulk ShortPixel"
1196
+ msgstr ""
1197
+
1198
+ #: wp-shortpixel.php:216
1199
+ msgid "Media alert dismissed"
1200
+ msgstr ""
1201
+
1202
+ #: wp-shortpixel.php:269
1203
+ msgid "Optimize with ShortPixel"
1204
+ msgstr ""
1205
+
1206
+ #: wp-shortpixel.php:270
1207
+ msgid ""
1208
+ "In order to access the ShortPixel Optimization actions and info, please "
1209
+ "change to {0}List View{1}List View{2}Dismiss{3}"
1210
+ msgstr ""
1211
+
1212
+ #: wp-shortpixel.php:271
1213
+ msgid ""
1214
+ "This type of optimization will apply to new uploaded images.\\nImages that "
1215
+ "were already processed will not be re-optimized unless you restart the bulk "
1216
+ "process."
1217
+ msgstr ""
1218
+
1219
+ #: wp-shortpixel.php:272
1220
+ msgid "Are you sure you want to stop optimizing the folder {0}?"
1221
+ msgstr ""
1222
+
1223
+ #: wp-shortpixel.php:275
1224
+ msgid "+{0} thumbnails optimized"
1225
+ msgstr ""
1226
+
1227
+ #: wp-shortpixel.php:276
1228
+ msgid "Optimize {0} thumbnails"
1229
+ msgstr ""
1230
+
1231
+ #: wp-shortpixel.php:277
1232
+ msgid "Reoptimize {0}"
1233
+ msgstr ""
1234
+
1235
+ #: wp-shortpixel.php:279
1236
+ msgid "Get API Key"
1237
+ msgstr ""
1238
+
1239
+ #: wp-shortpixel.php:283
1240
+ msgid "This content is not processable."
1241
+ msgstr ""
1242
+
1243
+ #: wp-shortpixel.php:284
1244
+ msgid "Image waiting to optimize thumbnails"
1245
+ msgstr ""
1246
+
1247
+ #. translators: toolbar icon tooltip
1248
+ #: wp-shortpixel.php:297
1249
+ msgid "ShortPixel optimizing..."
1250
+ msgstr ""
1251
+
1252
+ #. translators: toolbar icon tooltip
1253
+ #: wp-shortpixel.php:308
1254
+ msgid "ShortPixel quota exceeded. Click for details."
1255
+ msgstr ""
1256
+
1257
+ #: wp-shortpixel.php:564
1258
+ msgid "Missing API Key"
1259
+ msgstr ""
1260
+
1261
+ #. translators: console message Empty queue 1234 -> 1234
1262
+ #: wp-shortpixel.php:614
1263
+ msgid "Empty queue "
1264
+ msgstr ""
1265
+
1266
+ #: wp-shortpixel.php:740
1267
+ msgid " Retry limit reached. Skipping file ID "
1268
+ msgstr ""
1269
+
1270
+ #: wp-shortpixel.php:835
1271
+ msgid "NextGen image not found"
1272
+ msgstr ""
1273
+
1274
+ #: wp-shortpixel.php:1004 wp-shortpixel.php:1018
1275
+ msgid "Could not restore from backup: "
1276
+ msgstr ""
1277
+
1278
+ #: wp-shortpixel.php:1037
1279
+ msgid "No thumbnails to optimize for ID: "
1280
+ msgstr ""
1281
+
1282
+ #: wp-shortpixel.php:1037
1283
+ msgid "Please optimize image for ID: "
1284
+ msgstr ""
1285
+
1286
+ #: wp-shortpixel.php:1142
1287
+ msgid "Refresh custom folders content"
1288
+ msgstr ""
1289
+
1290
+ #: wp-shortpixel.php:1143
1291
+ msgid "Refresh folders"
1292
+ msgstr ""
1293
+
1294
+ #: wp-shortpixel.php:1146
1295
+ msgid "Other Media optimized by ShortPixel"
1296
+ msgstr ""
1297
+
1298
+ #: wp-shortpixel.php:1322 wp-shortpixel.php:1413
1299
+ msgid "You do not have sufficient permissions to access this page."
1300
+ msgstr ""
1301
+
1302
+ #: wp-shortpixel.php:1451
1303
+ #, php-format
1304
+ msgid ""
1305
+ "The key you provided has %s characters. The API key should have 20 "
1306
+ "characters, letters and numbers only."
1307
+ msgstr ""
1308
+
1309
+ #: wp-shortpixel.php:1453
1310
+ msgid ""
1311
+ "Please check that the API key is the same as the one you received in your "
1312
+ "confirmation email."
1313
+ msgstr ""
1314
+
1315
+ #: wp-shortpixel.php:1455
1316
+ msgid "If this problem persists, please contact us at "
1317
+ msgstr ""
1318
+
1319
+ #: wp-shortpixel.php:1457
1320
+ msgid " or "
1321
+ msgstr ""
1322
+
1323
+ #: wp-shortpixel.php:1475
1324
+ msgid ""
1325
+ "API Key is valid but your site is not accessible from our servers. Please "
1326
+ "make sure that your server is accessible from the Internet before using the "
1327
+ "API or otherwise we won't be able to optimize them."
1328
+ msgstr ""
1329
+
1330
+ #: wp-shortpixel.php:1478
1331
+ msgid ""
1332
+ "API Key valid! <br>You seem to be running a multisite, please note that API "
1333
+ "Key can also be configured in wp-config.php like this:"
1334
+ msgstr ""
1335
+
1336
+ #: wp-shortpixel.php:1481
1337
+ msgid "API Key valid!"
1338
+ msgstr ""
1339
+
1340
+ #: wp-shortpixel.php:1488
1341
+ #, php-format
1342
+ msgid ""
1343
+ "There is something preventing us to create a new folder for backing up your "
1344
+ "original files.<BR>Please make sure that folder <b>%s</b> has the necessary "
1345
+ "write and read rights."
1346
+ msgstr ""
1347
+
1348
+ #: wp-shortpixel.php:1536
1349
+ msgid "Folder added successfully."
1350
+ msgstr ""
1351
+
1352
+ #: wp-shortpixel.php:1712
1353
+ msgid ""
1354
+ "API Key could not be validated due to a connectivity error.<BR>Your firewall "
1355
+ "may be blocking us. Please contact your hosting provider and ask them to "
1356
+ "allow connections from your site to IP 176.9.106.46.<BR> If you still cannot "
1357
+ "validate your API Key after this, please <a href=\"https://shortpixel.com/"
1358
+ "contact\" target=\"_blank\">contact us</a> and we will try to help. "
1359
+ msgstr ""
1360
+
1361
+ #: wp-shortpixel.php:1713 wp-shortpixel.php:1714
1362
+ msgid "Information unavailable. Please check your API key."
1363
+ msgstr ""
1364
+
1365
+ #: wp-shortpixel.php:1789
1366
+ msgid "PDF not processed."
1367
+ msgstr ""
1368
+
1369
+ #: wp-shortpixel.php:1820 wp-shortpixel.php:1822
1370
+ msgid "Cannot write optimized file"
1371
+ msgstr ""
1372
+
1373
+ #: wp-shortpixel.php:1823
1374
+ msgid "Why?"
1375
+ msgstr ""
1376
+
1377
+ #: wp-shortpixel.php:1831
1378
+ msgid "Image does not exist"
1379
+ msgstr ""
1380
+
1381
+ #: wp-shortpixel.php:1835
1382
+ msgid "Image waiting to be processed."
1383
+ msgstr ""
1384
+
1385
+ #: wp-shortpixel.php:1853
1386
+ msgid "ShortPixel Statistics"
1387
+ msgstr ""
1388
+
1389
+ #: wp-shortpixel.php:1871
1390
+ msgid "ShortPixel Compression"
1391
+ msgstr ""
1392
+
1393
+ #: shortpixel_api.php:142
1394
+ msgid "The file(s) do not exist on disk."
1395
+ msgstr ""
1396
+
1397
+ #: shortpixel_api.php:157 shortpixel_api.php:168
1398
+ msgid "Timed out while processing."
1399
+ msgstr ""
1400
+
1401
+ #: shortpixel_api.php:161
1402
+ msgid "Image ID"
1403
+ msgstr ""
1404
+
1405
+ #: shortpixel_api.php:161
1406
+ msgid "Media ID"
1407
+ msgstr ""
1408
+
1409
+ #: shortpixel_api.php:162
1410
+ msgid "Skip this image, try the next one."
1411
+ msgstr ""
1412
+
1413
+ #. send requests to API
1414
+ #. response <> 200 -> there was an error apparently?
1415
+ #: shortpixel_api.php:179 shortpixel_api.php:212 shortpixel_api.php:215
1416
+ msgid "There was an error and your request was not processed."
1417
+ msgstr ""
1418
+
1419
+ #: shortpixel_api.php:231
1420
+ msgid "Unecognized API response. Please contact support."
1421
+ msgstr ""
1422
+
1423
+ #: shortpixel_api.php:238
1424
+ msgid "Quota exceeded."
1425
+ msgstr ""
1426
+
1427
+ #: shortpixel_api.php:326
1428
+ msgid "Error downloading file"
1429
+ msgstr ""
1430
+
1431
+ #: shortpixel_api.php:334
1432
+ #, php-format
1433
+ msgid ""
1434
+ "Error downloading file - incorrect file size (downloaded: %s, correct: %s )"
1435
+ msgstr ""
1436
+
1437
+ #: shortpixel_api.php:337
1438
+ msgid "Unable to locate downloaded file"
1439
+ msgstr ""
1440
+
1441
+ #. array with final paths for these files
1442
+ #. creates backup folder if it doesn't exist
1443
+ #: shortpixel_api.php:399
1444
+ msgid "Backup folder does not exist and it cannot be created"
1445
+ msgstr ""
1446
+
1447
+ #. file couldn't be saved in backup folder
1448
+ #: shortpixel_api.php:419
1449
+ #, php-format
1450
+ msgid "Cannot save file <i>%s</i> in backup directory"
1451
+ msgstr ""
1452
+
1453
+ #. cannot write to the backup dir, return with an error
1454
+ #: shortpixel_api.php:428
1455
+ msgid "Cannot save file in backup directory"
1456
+ msgstr ""
1457
+
1458
+ #: shortpixel_api.php:491
1459
+ #, php-format
1460
+ msgid "Optimized version of %s file(s) couldn't be updated."
1461
+ msgstr ""
lang/shortpixel-fr_FR.mo ADDED
Binary file
lang/shortpixel-fr_FR.po ADDED
@@ -0,0 +1,1461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2016-11-30 16:23+0100\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "Language: \n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=UTF-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ #: class/view/shortpixel_view.php:23 class/view/shortpixel_view.php:417
21
+ msgid "Average reduction"
22
+ msgstr ""
23
+
24
+ #. translators: header of the alert box
25
+ #: class/view/shortpixel_view.php:33
26
+ msgid "Quota Exceeded"
27
+ msgstr ""
28
+
29
+ #. translators: body of the alert box
30
+ #: class/view/shortpixel_view.php:35
31
+ #, php-format
32
+ msgid ""
33
+ "The plugin has optimized <strong>%s images</strong> and stopped because it "
34
+ "reached the available quota limit."
35
+ msgstr ""
36
+
37
+ #: class/view/shortpixel_view.php:39
38
+ #, php-format
39
+ msgid ""
40
+ "<strong>%s images and %s thumbnails</strong> are not yet optimized by "
41
+ "ShortPixel."
42
+ msgstr ""
43
+
44
+ #: class/view/shortpixel_view.php:44
45
+ msgid "Upgrade"
46
+ msgstr ""
47
+
48
+ #: class/view/shortpixel_view.php:45
49
+ msgid "Confirm New Quota"
50
+ msgstr ""
51
+
52
+ #: class/view/shortpixel_view.php:47
53
+ msgid "Get more image credits by referring ShortPixel to your friends!"
54
+ msgstr ""
55
+
56
+ #: class/view/shortpixel_view.php:49
57
+ msgid "Check your account"
58
+ msgstr ""
59
+
60
+ #: class/view/shortpixel_view.php:50
61
+ msgid ""
62
+ "for your unique referral link. For each user that joins, you will receive "
63
+ "+100 additional image credits/month."
64
+ msgstr ""
65
+
66
+ #: class/view/shortpixel_view.php:58
67
+ msgid ""
68
+ "In order to start the optimization process, you need to validate your API "
69
+ "Key in the <a href=\"options-general.php?page=wp-shortpixel\">ShortPixel "
70
+ "Settings</a> page in your WordPress Admin."
71
+ msgstr ""
72
+
73
+ #: class/view/shortpixel_view.php:61
74
+ msgid ""
75
+ "If you don’t have an API Key, you can get one delivered to your inbox, for "
76
+ "free."
77
+ msgstr ""
78
+
79
+ #: class/view/shortpixel_view.php:62
80
+ msgid ""
81
+ "Please <a href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">sign "
82
+ "up to get your API key.</a>"
83
+ msgstr ""
84
+
85
+ #: class/view/shortpixel_view.php:70
86
+ msgid "Dismiss"
87
+ msgstr ""
88
+
89
+ #: class/view/shortpixel_view.php:72
90
+ msgid "ShortPixel Optimization"
91
+ msgstr ""
92
+
93
+ #: class/view/shortpixel_view.php:75
94
+ msgid ""
95
+ "Action needed. Please <a href='https://shortpixel.com/wp-apikey' "
96
+ "target='_blank'>get your API key</a> to activate your ShortPixel plugin."
97
+ msgstr ""
98
+
99
+ #: class/view/shortpixel_view.php:78
100
+ msgid ""
101
+ "Your image gallery is not optimized. It takes 2 minutes to <a href='https://"
102
+ "shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate "
103
+ "your ShortPixel plugin."
104
+ msgstr ""
105
+
106
+ #: class/view/shortpixel_view.php:102
107
+ msgid "Your media library"
108
+ msgstr ""
109
+
110
+ #: class/view/shortpixel_view.php:103
111
+ msgid "Original images"
112
+ msgstr ""
113
+
114
+ #: class/view/shortpixel_view.php:105
115
+ msgid "Smaller thumbnails"
116
+ msgstr ""
117
+
118
+ #: class/view/shortpixel_view.php:109 class/view/shortpixel_view.php:343
119
+ msgid "Include thumbnails"
120
+ msgstr ""
121
+
122
+ #: class/view/shortpixel_view.php:112
123
+ msgid "Total images"
124
+ msgstr ""
125
+
126
+ #: class/view/shortpixel_view.php:114
127
+ msgid "Already optimized originals"
128
+ msgstr ""
129
+
130
+ #: class/view/shortpixel_view.php:116
131
+ msgid "Already optimized thumbnails"
132
+ msgstr ""
133
+
134
+ #: class/view/shortpixel_view.php:119 class/view/shortpixel_view.php:124
135
+ msgid "Total to be optimized"
136
+ msgstr ""
137
+
138
+ #: class/view/shortpixel_view.php:123
139
+ msgid "Your custom folders"
140
+ msgstr ""
141
+
142
+ #: class/view/shortpixel_view.php:137
143
+ #, php-format
144
+ msgid ""
145
+ "<span class=\"label\">Start Optimizing</span><br> <span class=\"total\">%s</"
146
+ "span> images"
147
+ msgstr ""
148
+
149
+ #: class/view/shortpixel_view.php:148
150
+ msgid ""
151
+ "Nothing to optimize! The images that you add to Media Gallery will be "
152
+ "automatically optimized after upload."
153
+ msgstr ""
154
+
155
+ #: class/view/shortpixel_view.php:157
156
+ msgid ""
157
+ "After you start the bulk process, in order for the optimization to run, you "
158
+ "must keep this page open and your computer running. If you close the page "
159
+ "for whatever reason, just turn back to it and the bulk process will resume."
160
+ msgstr ""
161
+
162
+ #: class/view/shortpixel_view.php:163
163
+ msgid "What are Thumbnails?"
164
+ msgstr ""
165
+
166
+ #: class/view/shortpixel_view.php:164
167
+ msgid ""
168
+ "Thumbnails are smaller images usually generated by your WP theme. Most "
169
+ "themes generate between 3 and 6 thumbnails for each Media Library image."
170
+ msgstr ""
171
+
172
+ #: class/view/shortpixel_view.php:165
173
+ msgid ""
174
+ "The thumbnails also generate traffic on your website pages and they "
175
+ "influence your website's speed."
176
+ msgstr ""
177
+
178
+ #: class/view/shortpixel_view.php:166
179
+ msgid ""
180
+ "It's highly recommended that you include thumbnails in the optimization as "
181
+ "well."
182
+ msgstr ""
183
+
184
+ #: class/view/shortpixel_view.php:169
185
+ msgid "How does it work?"
186
+ msgstr ""
187
+
188
+ #: class/view/shortpixel_view.php:170
189
+ msgid ""
190
+ "The plugin processes images starting with the newest ones you uploaded in "
191
+ "your Media Library."
192
+ msgstr ""
193
+
194
+ #: class/view/shortpixel_view.php:171
195
+ msgid "You will be able to pause the process anytime."
196
+ msgstr ""
197
+
198
+ #: class/view/shortpixel_view.php:172
199
+ msgid ""
200
+ "<p>Your original images will be stored in a separate back-up folder.</p>"
201
+ msgstr ""
202
+
203
+ #: class/view/shortpixel_view.php:173
204
+ msgid ""
205
+ "You can watch the images being processed live, right here, after you start "
206
+ "optimizing."
207
+ msgstr ""
208
+
209
+ #. bulk is paused
210
+ #: class/view/shortpixel_view.php:179
211
+ msgid "Please see below the optimization status so far:"
212
+ msgstr ""
213
+
214
+ #: class/view/shortpixel_view.php:182
215
+ #, php-format
216
+ msgid "%d images and %d thumbnails are not yet optimized by ShortPixel."
217
+ msgstr ""
218
+
219
+ #: class/view/shortpixel_view.php:187
220
+ msgid ""
221
+ "You can continue optimizing your Media Gallery from where you left, by "
222
+ "clicking the Resume processing button. Already optimized images will not be "
223
+ "reprocessed."
224
+ msgstr ""
225
+
226
+ #: class/view/shortpixel_view.php:197
227
+ msgid "Congratulations!"
228
+ msgstr ""
229
+
230
+ #: class/view/shortpixel_view.php:198
231
+ msgid "Your media library has been successfully optimized!"
232
+ msgstr ""
233
+
234
+ #: class/view/shortpixel_view.php:199
235
+ msgid "Summary"
236
+ msgstr ""
237
+
238
+ #: class/view/shortpixel_view.php:205
239
+ msgid "Share your optimization results:"
240
+ msgstr ""
241
+
242
+ #: class/view/shortpixel_view.php:225
243
+ msgid "I just optimized my images by "
244
+ msgstr ""
245
+
246
+ #: class/view/shortpixel_view.php:227
247
+ msgid "I just optimized my images "
248
+ msgstr ""
249
+
250
+ #: class/view/shortpixel_view.php:230
251
+ msgid "with @ShortPixel, a great plugin for increasing #WordPress page speed:"
252
+ msgstr ""
253
+
254
+ #: class/view/shortpixel_view.php:231
255
+ msgid "Tweet"
256
+ msgstr ""
257
+
258
+ #: class/view/shortpixel_view.php:257
259
+ msgid "Please rate us!"
260
+ msgstr ""
261
+
262
+ #: class/view/shortpixel_view.php:267
263
+ #, php-format
264
+ msgid ""
265
+ "Go to the ShortPixel <a href=\"%soptions-general.php?page=wp-shortpixel#stats"
266
+ "\">Stats</a> and see all your websites' optimized stats. Download your "
267
+ "detailed <a href=\"https://api.shortpixel.com/v2/report.php?key=%s"
268
+ "\">Optimization Report</a> to check your image optimization statistics for "
269
+ "the last 40 days."
270
+ msgstr ""
271
+
272
+ #: class/view/shortpixel_view.php:275
273
+ msgid ""
274
+ "The following images could not be processed because of their limited write "
275
+ "rights. This usually happens if you have changed your hosting provider. "
276
+ "Please restart the optimization process after you granted write rights to "
277
+ "all the files below."
278
+ msgstr ""
279
+
280
+ #: class/view/shortpixel_view.php:290 wp-shortpixel.php:1755
281
+ #: wp-shortpixel.php:1756 wp-shortpixel.php:1757 wp-shortpixel.php:1758
282
+ msgid " images"
283
+ msgstr ""
284
+
285
+ #: class/view/shortpixel_view.php:291
286
+ msgid " and"
287
+ msgstr ""
288
+
289
+ #: class/view/shortpixel_view.php:292
290
+ msgid " thumbnails"
291
+ msgstr ""
292
+
293
+ #: class/view/shortpixel_view.php:293
294
+ msgid " are not yet optimized by ShortPixel."
295
+ msgstr ""
296
+
297
+ #: class/view/shortpixel_view.php:295
298
+ msgid "Some have errors:"
299
+ msgstr ""
300
+
301
+ #: class/view/shortpixel_view.php:318
302
+ #, php-format
303
+ msgid ""
304
+ "%s images and %s thumbnails were optimized <strong>%s</strong>. You can re-"
305
+ "optimize <strong>%s</strong> the ones that have backup."
306
+ msgstr ""
307
+
308
+ #: class/view/shortpixel_view.php:323
309
+ #, php-format
310
+ msgid ""
311
+ "%s images were optimized <strong>%s</strong>. You can re-optimize <strong>"
312
+ "%s</strong> the ones that have backup. "
313
+ msgstr ""
314
+
315
+ #: class/view/shortpixel_view.php:326
316
+ msgid " thumbnails will be restored to originals."
317
+ msgstr ""
318
+
319
+ #: class/view/shortpixel_view.php:331
320
+ msgid ""
321
+ "Restart the optimization process for these images by clicking the button "
322
+ "below."
323
+ msgstr ""
324
+
325
+ #: class/view/shortpixel_view.php:333
326
+ msgid ""
327
+ "Restart the optimization process for new images added to your library by "
328
+ "clicking the button below."
329
+ msgstr ""
330
+
331
+ #: class/view/shortpixel_view.php:335
332
+ #, php-format
333
+ msgid "Already <strong>%s</strong> optimized images will not be reprocessed."
334
+ msgstr ""
335
+
336
+ #: class/view/shortpixel_view.php:337
337
+ msgid ""
338
+ "Please note that reoptimizing images as <strong>lossy/lossless</strong> may "
339
+ "use additional credits."
340
+ msgstr ""
341
+
342
+ #: class/view/shortpixel_view.php:338
343
+ msgid "More info"
344
+ msgstr ""
345
+
346
+ #: class/view/shortpixel_view.php:344
347
+ msgid "Restart Optimizing"
348
+ msgstr ""
349
+
350
+ #: class/view/shortpixel_view.php:355
351
+ msgid "Bulk Image Optimization by ShortPixel"
352
+ msgstr ""
353
+
354
+ #: class/view/shortpixel_view.php:361
355
+ msgid "Lengthy operation in progress:"
356
+ msgstr ""
357
+
358
+ #: class/view/shortpixel_view.php:362
359
+ msgid "Optimizing image"
360
+ msgstr ""
361
+
362
+ #: class/view/shortpixel_view.php:369
363
+ msgid "Error processing file:"
364
+ msgstr ""
365
+
366
+ #: class/view/shortpixel_view.php:375
367
+ msgid "Just optimized:"
368
+ msgstr ""
369
+
370
+ #: class/view/shortpixel_view.php:381
371
+ msgid "Original image"
372
+ msgstr ""
373
+
374
+ #: class/view/shortpixel_view.php:385
375
+ msgid "Optimized image"
376
+ msgstr ""
377
+
378
+ #. translators: percent follows
379
+ #: class/view/shortpixel_view.php:389
380
+ msgid "Optimized by:"
381
+ msgstr ""
382
+
383
+ #: class/view/shortpixel_view.php:411
384
+ msgid "Remaining credits"
385
+ msgstr ""
386
+
387
+ #: class/view/shortpixel_view.php:427 class/view/shortpixel_view.php:436
388
+ msgid "Media Library"
389
+ msgstr ""
390
+
391
+ #: class/view/shortpixel_view.php:428
392
+ msgid "and"
393
+ msgstr ""
394
+
395
+ #: class/view/shortpixel_view.php:429
396
+ msgid "Custom folders"
397
+ msgstr ""
398
+
399
+ #: class/view/shortpixel_view.php:429
400
+ msgid "optimization in progress ..."
401
+ msgstr ""
402
+
403
+ #: class/view/shortpixel_view.php:430
404
+ msgid "Bulk optimization has started."
405
+ msgstr ""
406
+
407
+ #: class/view/shortpixel_view.php:431
408
+ #, php-format
409
+ msgid ""
410
+ "This process will take some time, depending on the number of images in your "
411
+ "library. In the meantime, you can continue using \n"
412
+ " the admin as usual, <a href=\"%s\" target=\"_blank\">in "
413
+ "a different browser window or tab</a>.<br>\n"
414
+ " However, <strong>if you close this window, the bulk "
415
+ "processing will pause</strong> until you open the media gallery or the "
416
+ "ShortPixel bulk page again."
417
+ msgstr ""
418
+
419
+ #: class/view/shortpixel_view.php:436
420
+ msgid "and Custom folders"
421
+ msgstr ""
422
+
423
+ #: class/view/shortpixel_view.php:436
424
+ msgid "optimization paused"
425
+ msgstr ""
426
+
427
+ #: class/view/shortpixel_view.php:437
428
+ msgid "Bulk processing is paused until you resume the optimization process."
429
+ msgstr ""
430
+
431
+ #. now we display the action buttons always when a type of bulk is running
432
+ #: class/view/shortpixel_view.php:454
433
+ msgid "Pause"
434
+ msgstr ""
435
+
436
+ #: class/view/shortpixel_view.php:454
437
+ msgid "Resume processing"
438
+ msgstr ""
439
+
440
+ #: class/view/shortpixel_view.php:457
441
+ msgid "Only other media"
442
+ msgstr ""
443
+
444
+ #: class/view/shortpixel_view.php:457
445
+ msgid "Process only the other media, skipping the Media Library"
446
+ msgstr ""
447
+
448
+ #: class/view/shortpixel_view.php:461
449
+ msgid "Manage custom folders"
450
+ msgstr ""
451
+
452
+ #: class/view/shortpixel_view.php:469
453
+ msgid "Processed Images and PDFs:"
454
+ msgstr ""
455
+
456
+ #: class/view/shortpixel_view.php:470
457
+ msgid "Processed Thumbnails:"
458
+ msgstr ""
459
+
460
+ #: class/view/shortpixel_view.php:471
461
+ msgid "Total files processed:"
462
+ msgstr ""
463
+
464
+ #: class/view/shortpixel_view.php:472
465
+ #, php-format
466
+ msgid "Minus files with <5% optimization (free):"
467
+ msgstr ""
468
+
469
+ #: class/view/shortpixel_view.php:473
470
+ msgid "Used quota:"
471
+ msgstr ""
472
+
473
+ #: class/view/shortpixel_view.php:475
474
+ msgid "Average optimization:"
475
+ msgstr ""
476
+
477
+ #: class/view/shortpixel_view.php:476
478
+ msgid "Saved space:"
479
+ msgstr ""
480
+
481
+ #. wp_enqueue_script('jquery.idTabs.js', plugins_url('/js/jquery.idTabs.js',__FILE__) );
482
+ #: class/view/shortpixel_view.php:502
483
+ msgid "ShortPixel Plugin Settings"
484
+ msgstr ""
485
+
486
+ #: class/view/shortpixel_view.php:505
487
+ msgid "Upgrade now"
488
+ msgstr ""
489
+
490
+ #: class/view/shortpixel_view.php:507
491
+ msgid "Support"
492
+ msgstr ""
493
+
494
+ #: class/view/shortpixel_view.php:525
495
+ msgid "General"
496
+ msgstr ""
497
+
498
+ #: class/view/shortpixel_view.php:530
499
+ msgid "Advanced"
500
+ msgstr ""
501
+
502
+ #. the span is a trick to keep the sections ordered as nth-child in styles: 1,2,3,4 (otherwise the third section would be nth-child(2) too, because of the form)
503
+ #: class/view/shortpixel_view.php:537
504
+ msgid "Statistics"
505
+ msgstr ""
506
+
507
+ #: class/view/shortpixel_view.php:545
508
+ msgid "WP Resources"
509
+ msgstr ""
510
+
511
+ #: class/view/shortpixel_view.php:546
512
+ msgid "Please reload"
513
+ msgstr ""
514
+
515
+ #: class/view/shortpixel_view.php:579
516
+ #, php-format
517
+ msgid ""
518
+ "New images uploaded to the Media Library will be optimized automatically.<br/"
519
+ ">If you have existing images you would like to optimize, you can use the <a "
520
+ "href=\"%supload.php?page=wp-short-pixel-bulk\">Bulk Optimization Tool</a>."
521
+ msgstr ""
522
+
523
+ #: class/view/shortpixel_view.php:582
524
+ msgid "Step 1:"
525
+ msgstr ""
526
+
527
+ #: class/view/shortpixel_view.php:583
528
+ #, php-format
529
+ msgid ""
530
+ "If you don't have an API Key, <a href=\"https://shortpixel.com/wp-apikey%s\" "
531
+ "target=\"_blank\">sign up here.</a> It's free and it only takes one minute, "
532
+ "we promise!"
533
+ msgstr ""
534
+
535
+ #: class/view/shortpixel_view.php:584
536
+ msgid "Step 2:"
537
+ msgstr ""
538
+
539
+ #: class/view/shortpixel_view.php:585
540
+ msgid "Please enter here the API Key you received by email and press Validate."
541
+ msgstr ""
542
+
543
+ #: class/view/shortpixel_view.php:591
544
+ msgid "API Key:"
545
+ msgstr ""
546
+
547
+ #: class/view/shortpixel_view.php:601
548
+ msgid "Multisite API Key"
549
+ msgstr ""
550
+
551
+ #: class/view/shortpixel_view.php:604
552
+ msgid "Validate the provided API key"
553
+ msgstr ""
554
+
555
+ #: class/view/shortpixel_view.php:605
556
+ msgid "Validate"
557
+ msgstr ""
558
+
559
+ #: class/view/shortpixel_view.php:607
560
+ msgid "Key defined in wp-config.php."
561
+ msgstr ""
562
+
563
+ #. if invalid key we display the link to the API Key
564
+ #. if valid key we display the rest of the options
565
+ #: class/view/shortpixel_view.php:618
566
+ msgid "Compression type:"
567
+ msgstr ""
568
+
569
+ #: class/view/shortpixel_view.php:622
570
+ msgid "Lossy (recommended)"
571
+ msgstr ""
572
+
573
+ #: class/view/shortpixel_view.php:623
574
+ msgid ""
575
+ "<b>Lossy compression: </b>lossy has a better compression rate than lossless "
576
+ "compression.</br>The resulting image is identical with the original to the "
577
+ "human eye. You can run a test for free "
578
+ msgstr ""
579
+
580
+ #: class/view/shortpixel_view.php:624 wp-shortpixel.php:1458
581
+ msgid "here"
582
+ msgstr ""
583
+
584
+ #: class/view/shortpixel_view.php:626 class/view/shortpixel-list-table.php:111
585
+ msgid "Lossless"
586
+ msgstr ""
587
+
588
+ #: class/view/shortpixel_view.php:628
589
+ msgid ""
590
+ "<b>Lossless compression: </b> the shrunk image will be identical with the "
591
+ "original and smaller in size.</br>In some rare cases you will need to use \n"
592
+ " this type of compression. Some technical drawings or "
593
+ "images from vector graphics are possible situations."
594
+ msgstr ""
595
+
596
+ #: class/view/shortpixel_view.php:638
597
+ msgid "Also include thumbnails:"
598
+ msgstr ""
599
+
600
+ #: class/view/shortpixel_view.php:640
601
+ msgid "Apply compression also to <strong>image thumbnails.</strong> "
602
+ msgstr ""
603
+
604
+ #: class/view/shortpixel_view.php:641
605
+ msgid "thumbnails to optimize"
606
+ msgstr ""
607
+
608
+ #: class/view/shortpixel_view.php:643
609
+ msgid ""
610
+ "It is highly recommended that you optimize the thumbnails as they are "
611
+ "usually the images most viewed by end users and can generate most traffic."
612
+ "<br>Please note that thumbnails count up to your total quota."
613
+ msgstr ""
614
+
615
+ #: class/view/shortpixel_view.php:648
616
+ msgid "Image backup"
617
+ msgstr ""
618
+
619
+ #: class/view/shortpixel_view.php:650
620
+ msgid "Save and keep a backup of your original images in a separate folder."
621
+ msgstr ""
622
+
623
+ #: class/view/shortpixel_view.php:651
624
+ msgid ""
625
+ "You <strong>need to have backup active</strong> in order to be able to "
626
+ "restore images to originals or to convert from Lossy to Lossless and back."
627
+ msgstr ""
628
+
629
+ #: class/view/shortpixel_view.php:655
630
+ msgid "CMYK to RGB conversion"
631
+ msgstr ""
632
+
633
+ #: class/view/shortpixel_view.php:657
634
+ msgid "Adjust your images for computer and mobile screen display."
635
+ msgstr ""
636
+
637
+ #: class/view/shortpixel_view.php:658
638
+ msgid ""
639
+ "Images for the web only need RGB format and converting them from CMYK to RGB "
640
+ "makes them smaller."
641
+ msgstr ""
642
+
643
+ #: class/view/shortpixel_view.php:662
644
+ msgid "Remove EXIF"
645
+ msgstr ""
646
+
647
+ #: class/view/shortpixel_view.php:664
648
+ msgid "Remove the EXIF tag of the image (recommended)."
649
+ msgstr ""
650
+
651
+ #: class/view/shortpixel_view.php:665
652
+ msgid ""
653
+ "EXIF is a set of various pieces of information that are automatically "
654
+ "embedded into the image upon creation. This can include GPS position, camera "
655
+ "manufacturer, date and time, etc. \n"
656
+ " Unless you really need that data to be "
657
+ "preserved, we recommend removing it as it can lead to <a href=\"http://blog."
658
+ "shortpixel.com/how-much-smaller-can-be-images-without-exif-icc\" target="
659
+ "\"_blank\">better compression rates</a>."
660
+ msgstr ""
661
+
662
+ #: class/view/shortpixel_view.php:670
663
+ msgid "Resize large images"
664
+ msgstr ""
665
+
666
+ #: class/view/shortpixel_view.php:673
667
+ msgid "to maximum"
668
+ msgstr ""
669
+
670
+ #: class/view/shortpixel_view.php:675
671
+ msgid "pixels wide &times;"
672
+ msgstr ""
673
+
674
+ #: class/view/shortpixel_view.php:677
675
+ msgid ""
676
+ "pixels high (original aspect ratio is preserved and image is not cropped)"
677
+ msgstr ""
678
+
679
+ #: class/view/shortpixel_view.php:679
680
+ #, php-format
681
+ msgid ""
682
+ "Recommended for large photos, like the ones taken with your phone. Saved "
683
+ "space can go up to 80% or more after resizing."
684
+ msgstr ""
685
+
686
+ #: class/view/shortpixel_view.php:683
687
+ msgid ""
688
+ "Sizes will be greater or equal to the corresponding value. For example, if "
689
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
690
+ "resized to 1000x1500px while an image of 3000x2000px will be resized to "
691
+ "1800x1200px"
692
+ msgstr ""
693
+
694
+ #: class/view/shortpixel_view.php:685
695
+ msgid ""
696
+ "Sizes will be smaller or equal to the corresponding value. For example, if "
697
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
698
+ "resized to 800x1200px while an image of 3000x2000px will be resized to "
699
+ "1000x667px"
700
+ msgstr ""
701
+
702
+ #: class/view/shortpixel_view.php:692 class/view/shortpixel_view.php:847
703
+ msgid "Save Changes"
704
+ msgstr ""
705
+
706
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
707
+ msgid "Save and go to the Bulk Processing page"
708
+ msgstr ""
709
+
710
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
711
+ #: wp-shortpixel.php:1517 wp-shortpixel.php:1518
712
+ msgid "Save and Go to Bulk Process"
713
+ msgstr ""
714
+
715
+ #: class/view/shortpixel_view.php:716
716
+ msgid "Please enter your API key in the General tab first."
717
+ msgstr ""
718
+
719
+ #. if valid key we display the rest of the options
720
+ #: class/view/shortpixel_view.php:721
721
+ msgid "Additional media folders"
722
+ msgstr ""
723
+
724
+ #: class/view/shortpixel_view.php:726
725
+ msgid "Folder name"
726
+ msgstr ""
727
+
728
+ #: class/view/shortpixel_view.php:727
729
+ msgid "Type &amp;<br>Status"
730
+ msgstr ""
731
+
732
+ #: class/view/shortpixel_view.php:728
733
+ msgid "Files"
734
+ msgstr ""
735
+
736
+ #: class/view/shortpixel_view.php:729
737
+ msgid "Last change"
738
+ msgstr ""
739
+
740
+ #: class/view/shortpixel_view.php:738 class/view/shortpixel_view.php:743
741
+ #: class/view/shortpixel_view.php:745 class/view/shortpixel_view.php:747
742
+ msgid "Empty"
743
+ msgstr ""
744
+
745
+ #: class/view/shortpixel_view.php:740 class/view/shortpixel_view.php:745
746
+ #: class/view/shortpixel_view.php:747
747
+ msgid "Optimized"
748
+ msgstr ""
749
+
750
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
751
+ #: class/view/shortpixel-list-table.php:97
752
+ msgid "Pending"
753
+ msgstr ""
754
+
755
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
756
+ #: class/view/shortpixel-list-table.php:99
757
+ msgid "Waiting"
758
+ msgstr ""
759
+
760
+ #: class/view/shortpixel_view.php:745
761
+ msgid "Stop monitoring"
762
+ msgstr ""
763
+
764
+ #: class/view/shortpixel_view.php:745
765
+ msgid "Stop optimizing"
766
+ msgstr ""
767
+
768
+ #: class/view/shortpixel_view.php:749
769
+ msgid "Failed"
770
+ msgstr ""
771
+
772
+ #: class/view/shortpixel_view.php:771
773
+ msgid ""
774
+ "Full folder refresh, check each file of the folder if it changed since it "
775
+ "was optimized. Might take up to 1 min. for big folders."
776
+ msgstr ""
777
+
778
+ #: class/view/shortpixel_view.php:772
779
+ msgid "Refresh"
780
+ msgstr ""
781
+
782
+ #: class/view/shortpixel_view.php:783
783
+ msgid "Select the images folder on your server."
784
+ msgstr ""
785
+
786
+ #: class/view/shortpixel_view.php:784
787
+ msgid "Select ..."
788
+ msgstr ""
789
+
790
+ #: class/view/shortpixel_view.php:786
791
+ msgid "Add Folder"
792
+ msgstr ""
793
+
794
+ #: class/view/shortpixel_view.php:788
795
+ msgid ""
796
+ "Use the Select... button to select site folders. ShortPixel will optimize "
797
+ "images and PDFs from the specified folders and their subfolders. The "
798
+ "optimization status for each image or PDF in these folders can be seen in "
799
+ "the <a href=\"upload.php?page=wp-short-pixel-custom\">Other Media list</a>, "
800
+ "under the Media menu."
801
+ msgstr ""
802
+
803
+ #: class/view/shortpixel_view.php:792
804
+ msgid "Select the images folder"
805
+ msgstr ""
806
+
807
+ #: class/view/shortpixel_view.php:794
808
+ msgid "Cancel"
809
+ msgstr ""
810
+
811
+ #: class/view/shortpixel_view.php:795
812
+ msgid "Select"
813
+ msgstr ""
814
+
815
+ #: class/view/shortpixel_view.php:807
816
+ msgid "Optimize NextGen galleries"
817
+ msgstr ""
818
+
819
+ #: class/view/shortpixel_view.php:809
820
+ msgid "Optimize NextGen galleries."
821
+ msgstr ""
822
+
823
+ #: class/view/shortpixel_view.php:811
824
+ msgid ""
825
+ "Check this to add all your current NextGen galleries to the custom folders "
826
+ "list and to also have all the future NextGen galleries and images optimized "
827
+ "automatically by ShortPixel."
828
+ msgstr ""
829
+
830
+ #: class/view/shortpixel_view.php:817
831
+ msgid "WebP versions"
832
+ msgstr ""
833
+
834
+ #: class/view/shortpixel_view.php:819
835
+ msgid ""
836
+ "Create also <a href=\"http://blog.shortpixel.com/how-webp-images-can-speed-"
837
+ "up-your-site/\" target=\"_blank\">WebP versions</a> of the images "
838
+ "<strong>for free</strong>."
839
+ msgstr ""
840
+
841
+ #: class/view/shortpixel_view.php:821
842
+ #, php-format
843
+ msgid ""
844
+ "WebP images can be up to three times smaller than PNGs and 25% smaller than "
845
+ "JPGs. Choosing this option <strong>does not use up additional credits</"
846
+ "strong>."
847
+ msgstr ""
848
+
849
+ #: class/view/shortpixel_view.php:826
850
+ msgid "HTTP AUTH credentials"
851
+ msgstr ""
852
+
853
+ #: class/view/shortpixel_view.php:828
854
+ msgid "User"
855
+ msgstr ""
856
+
857
+ #: class/view/shortpixel_view.php:829
858
+ msgid "Password"
859
+ msgstr ""
860
+
861
+ #: class/view/shortpixel_view.php:831
862
+ msgid ""
863
+ "Only fill in these fields if your site (front-end) is not publicly "
864
+ "accessible and visitors need a user/pass to connect to it. If you don't know "
865
+ "what is this then just <strong>leave the fields empty</strong>."
866
+ msgstr ""
867
+
868
+ #: class/view/shortpixel_view.php:836
869
+ msgid "Process in front-end"
870
+ msgstr ""
871
+
872
+ #: class/view/shortpixel_view.php:838
873
+ msgid "Automatically optimize images added by users in front end."
874
+ msgstr ""
875
+
876
+ #: class/view/shortpixel_view.php:840
877
+ msgid ""
878
+ "Check this if you have users that add images or PDF documents from custom "
879
+ "forms in the front-end. This could increase the load on your server if you "
880
+ "have a lot of users simultaneously connected."
881
+ msgstr ""
882
+
883
+ #: class/view/shortpixel_view.php:860
884
+ msgid "Your ShortPixel Stats"
885
+ msgstr ""
886
+
887
+ #: class/view/shortpixel_view.php:864
888
+ msgid "Average compression of your files:"
889
+ msgstr ""
890
+
891
+ #: class/view/shortpixel_view.php:868
892
+ msgid "Saved disk space by ShortPixel"
893
+ msgstr ""
894
+
895
+ #: class/view/shortpixel_view.php:872
896
+ msgid "Bandwith* saved with ShortPixel:"
897
+ msgstr ""
898
+
899
+ #: class/view/shortpixel_view.php:878
900
+ msgid "* Saved bandwidth is calculated at 10,000 impressions/image"
901
+ msgstr ""
902
+
903
+ #: class/view/shortpixel_view.php:880
904
+ msgid "Your ShortPixel Plan"
905
+ msgstr ""
906
+
907
+ #: class/view/shortpixel_view.php:884
908
+ msgid "Your ShortPixel plan"
909
+ msgstr ""
910
+
911
+ #: class/view/shortpixel_view.php:886
912
+ #, php-format
913
+ msgid ""
914
+ "%s/month, renews in %s days, on %s ( <a href=\"https://shortpixel.com/login/"
915
+ "%s\" target=\"_blank\">Need More? See the options available</a> )"
916
+ msgstr ""
917
+
918
+ #: class/view/shortpixel_view.php:889
919
+ #, php-format
920
+ msgid ""
921
+ "<a href=\"https://shortpixel.com/login/%s/tell-a-friend\" target=\"_blank"
922
+ "\">Join our friend referral system</a> to win more credits. For each user "
923
+ "that joins, you receive +100 images credits/month."
924
+ msgstr ""
925
+
926
+ #: class/view/shortpixel_view.php:894
927
+ msgid "One time credits:"
928
+ msgstr ""
929
+
930
+ #: class/view/shortpixel_view.php:898
931
+ msgid "Number of images processed this month:"
932
+ msgstr ""
933
+
934
+ #: class/view/shortpixel_view.php:900
935
+ msgid "see report"
936
+ msgstr ""
937
+
938
+ #: class/view/shortpixel_view.php:905
939
+ msgid "Remaining** images in your plan:"
940
+ msgstr ""
941
+
942
+ #: class/view/shortpixel_view.php:906
943
+ msgid "images"
944
+ msgstr ""
945
+
946
+ #: class/view/shortpixel_view.php:912
947
+ #, php-format
948
+ msgid ""
949
+ "** Increase your image quota by <a href=\"https://shortpixel.com/login/%s\" "
950
+ "target=\"_blank\">upgrading your ShortPixel plan.</a>"
951
+ msgstr ""
952
+
953
+ #: class/view/shortpixel_view.php:919
954
+ msgid "Total number of processed files:"
955
+ msgstr ""
956
+
957
+ #: class/view/shortpixel_view.php:924
958
+ msgid ""
959
+ "Original images are stored in a backup folder. Your backup folder size is "
960
+ "now:"
961
+ msgstr ""
962
+
963
+ #: class/view/shortpixel_view.php:928
964
+ msgid "Empty backups"
965
+ msgstr ""
966
+
967
+ #. not a file that we can process
968
+ #: class/view/shortpixel_view.php:945 wp-shortpixel.php:348
969
+ #: wp-shortpixel.php:374 wp-shortpixel.php:1813
970
+ msgid "Optimization N/A"
971
+ msgstr ""
972
+
973
+ #: class/view/shortpixel_view.php:948
974
+ msgid "Image does not exist."
975
+ msgstr ""
976
+
977
+ #. multisite key - need to be validated on each site but it's not invalid
978
+ #: class/view/shortpixel_view.php:952
979
+ msgid ""
980
+ "Please <a href=\"options-general.php?page=wp-shortpixel\">go to Settings</a> "
981
+ "to validate the API Key."
982
+ msgstr ""
983
+
984
+ #: class/view/shortpixel_view.php:954
985
+ msgid ""
986
+ "Invalid API Key. <a href=\"options-general.php?page=wp-shortpixel\">Check "
987
+ "your Settings</a>"
988
+ msgstr ""
989
+
990
+ #: class/view/shortpixel_view.php:963
991
+ msgid "Optimize now"
992
+ msgstr ""
993
+
994
+ #: class/view/shortpixel_view.php:973 class/view/shortpixel-list-table.php:55
995
+ #: wp-shortpixel.php:282
996
+ msgid "Retry"
997
+ msgstr ""
998
+
999
+ #: class/view/shortpixel_view.php:990 class/view/shortpixel-list-table.php:93
1000
+ #: wp-shortpixel.php:273
1001
+ msgid "Reduced by"
1002
+ msgstr ""
1003
+
1004
+ #: class/view/shortpixel_view.php:993 class/view/shortpixel-list-table.php:92
1005
+ #: class/view/shortpixel-list-table.php:94 wp-shortpixel.php:274
1006
+ msgid "Bonus processing"
1007
+ msgstr ""
1008
+
1009
+ #: class/view/shortpixel_view.php:996
1010
+ #, php-format
1011
+ msgid "+%s of %s thumbnails optimized"
1012
+ msgstr ""
1013
+
1014
+ #: class/view/shortpixel_view.php:997
1015
+ #, php-format
1016
+ msgid "+%s thumbnails optimized"
1017
+ msgstr ""
1018
+
1019
+ #: class/view/shortpixel_view.php:1005
1020
+ #, php-format
1021
+ msgid "Optimize %s thumbnails"
1022
+ msgstr ""
1023
+
1024
+ #: class/view/shortpixel_view.php:1012
1025
+ msgid "Reoptimize from the backed-up image"
1026
+ msgstr ""
1027
+
1028
+ #: class/view/shortpixel_view.php:1013
1029
+ msgid "Re-optimize"
1030
+ msgstr ""
1031
+
1032
+ #: class/view/shortpixel_view.php:1017 wp-shortpixel.php:278
1033
+ msgid "Restore backup"
1034
+ msgstr ""
1035
+
1036
+ #: class/view/shortpixel_view.php:1030 wp-shortpixel.php:280
1037
+ msgid "Extend Quota"
1038
+ msgstr ""
1039
+
1040
+ #: class/view/shortpixel_view.php:1033 wp-shortpixel.php:281
1041
+ msgid "Check&nbsp;&nbsp;Quota"
1042
+ msgstr ""
1043
+
1044
+ #: class/view/shortpixel-list-table.php:15
1045
+ msgid "Image"
1046
+ msgstr ""
1047
+
1048
+ #. singular name of the listed records
1049
+ #: class/view/shortpixel-list-table.php:16
1050
+ msgid "Images"
1051
+ msgstr ""
1052
+
1053
+ #. pe viitor. $columns['cb'] = '<input type="checkbox" />';
1054
+ #: class/view/shortpixel-list-table.php:29
1055
+ msgid "Filename"
1056
+ msgstr ""
1057
+
1058
+ #: class/view/shortpixel-list-table.php:30
1059
+ msgid "Folder"
1060
+ msgstr ""
1061
+
1062
+ #: class/view/shortpixel-list-table.php:31
1063
+ msgid "Type"
1064
+ msgstr ""
1065
+
1066
+ #: class/view/shortpixel-list-table.php:32
1067
+ msgid "Status"
1068
+ msgstr ""
1069
+
1070
+ #: class/view/shortpixel-list-table.php:33
1071
+ msgid "Options"
1072
+ msgstr ""
1073
+
1074
+ #: class/view/shortpixel-list-table.php:52
1075
+ msgid "Optimize"
1076
+ msgstr ""
1077
+
1078
+ #: class/view/shortpixel-list-table.php:58
1079
+ msgid "Restore"
1080
+ msgstr ""
1081
+
1082
+ #: class/view/shortpixel-list-table.php:61
1083
+ msgid "Re-optimize lossless"
1084
+ msgstr ""
1085
+
1086
+ #: class/view/shortpixel-list-table.php:64
1087
+ msgid "Re-optimize lossy"
1088
+ msgstr ""
1089
+
1090
+ #: class/view/shortpixel-list-table.php:67
1091
+ msgid "Check quota"
1092
+ msgstr ""
1093
+
1094
+ #: class/view/shortpixel-list-table.php:68
1095
+ msgid "View"
1096
+ msgstr ""
1097
+
1098
+ #: class/view/shortpixel-list-table.php:89
1099
+ msgid "Restored"
1100
+ msgstr ""
1101
+
1102
+ #: class/view/shortpixel-list-table.php:103
1103
+ msgid "code"
1104
+ msgstr ""
1105
+
1106
+ #: class/view/shortpixel-list-table.php:111
1107
+ msgid "Lossy"
1108
+ msgstr ""
1109
+
1110
+ #: class/view/shortpixel-list-table.php:112
1111
+ msgid "Keep EXIF"
1112
+ msgstr ""
1113
+
1114
+ #: class/view/shortpixel-list-table.php:113
1115
+ msgid "Preserve CMYK"
1116
+ msgstr ""
1117
+
1118
+ #: class/view/shortpixel-list-table.php:122
1119
+ msgid ""
1120
+ "No images avaliable. Go to <a href=\"options-general.php?page=wp-"
1121
+ "shortpixel#adv-settings\">Advanced Settings</a> to configure additional "
1122
+ "folders to be optimized."
1123
+ msgstr ""
1124
+
1125
+ #: class/view/shortpixel-list-table.php:255
1126
+ msgid "Show more details"
1127
+ msgstr ""
1128
+
1129
+ #: class/db/shortpixel-meta-facade.php:165
1130
+ msgid "Error"
1131
+ msgstr ""
1132
+
1133
+ #: class/db/shortpixel-custom-meta-dao.php:187
1134
+ msgid "Folder already added."
1135
+ msgstr ""
1136
+
1137
+ #: class/db/shortpixel-custom-meta-dao.php:191
1138
+ #, php-format
1139
+ msgid ""
1140
+ "The %s folder cannot be processed as it's not inside the root path of your "
1141
+ "website."
1142
+ msgstr ""
1143
+
1144
+ #: class/db/shortpixel-custom-meta-dao.php:200
1145
+ msgid ""
1146
+ "This folder contains Media Library images. To optimize Media Library images "
1147
+ "please go to <a href=\"upload.php?mode=list\">Media Library list view</a> or "
1148
+ "to <a href=\"upload.php?page=wp-short-pixel-bulk\">SortPixel Bulk page</a>."
1149
+ msgstr ""
1150
+
1151
+ #: class/db/shortpixel-custom-meta-dao.php:204
1152
+ msgid "Inserted folder doesn't have an ID!"
1153
+ msgstr ""
1154
+
1155
+ #: class/db/shortpixel-custom-meta-dao.php:224
1156
+ msgid ""
1157
+ "This folder contains the ShortPixel Backups. Please select a different "
1158
+ "folder."
1159
+ msgstr ""
1160
+
1161
+ #. var_dump($allFolders);
1162
+ #: class/db/shortpixel-custom-meta-dao.php:247
1163
+ #, php-format
1164
+ msgid "Folder already included in %s."
1165
+ msgstr ""
1166
+
1167
+ #: class/db/shortpixel-custom-meta-dao.php:250
1168
+ msgid "Folder does not exist."
1169
+ msgstr ""
1170
+
1171
+ #: class/model/shortpixel-folder.php:76 class/model/shortpixel-folder.php:149
1172
+ #, php-format
1173
+ msgid "Folder %s is not writeable. Please check permissions and try again."
1174
+ msgstr ""
1175
+
1176
+ #: wp-shortpixel.php:160
1177
+ msgid "ShortPixel Settings"
1178
+ msgstr ""
1179
+
1180
+ #. translators: title and menu name for the Other media page
1181
+ #: wp-shortpixel.php:166
1182
+ msgid "Other Media Optimized by ShortPixel"
1183
+ msgstr ""
1184
+
1185
+ #: wp-shortpixel.php:166
1186
+ msgid "Other Media"
1187
+ msgstr ""
1188
+
1189
+ #. translators: title and menu name for the Bulk Processing page
1190
+ #: wp-shortpixel.php:169
1191
+ msgid "ShortPixel Bulk Process"
1192
+ msgstr ""
1193
+
1194
+ #: wp-shortpixel.php:169
1195
+ msgid "Bulk ShortPixel"
1196
+ msgstr ""
1197
+
1198
+ #: wp-shortpixel.php:216
1199
+ msgid "Media alert dismissed"
1200
+ msgstr ""
1201
+
1202
+ #: wp-shortpixel.php:269
1203
+ msgid "Optimize with ShortPixel"
1204
+ msgstr ""
1205
+
1206
+ #: wp-shortpixel.php:270
1207
+ msgid ""
1208
+ "In order to access the ShortPixel Optimization actions and info, please "
1209
+ "change to {0}List View{1}List View{2}Dismiss{3}"
1210
+ msgstr ""
1211
+
1212
+ #: wp-shortpixel.php:271
1213
+ msgid ""
1214
+ "This type of optimization will apply to new uploaded images.\\nImages that "
1215
+ "were already processed will not be re-optimized unless you restart the bulk "
1216
+ "process."
1217
+ msgstr ""
1218
+
1219
+ #: wp-shortpixel.php:272
1220
+ msgid "Are you sure you want to stop optimizing the folder {0}?"
1221
+ msgstr ""
1222
+
1223
+ #: wp-shortpixel.php:275
1224
+ msgid "+{0} thumbnails optimized"
1225
+ msgstr ""
1226
+
1227
+ #: wp-shortpixel.php:276
1228
+ msgid "Optimize {0} thumbnails"
1229
+ msgstr ""
1230
+
1231
+ #: wp-shortpixel.php:277
1232
+ msgid "Reoptimize {0}"
1233
+ msgstr ""
1234
+
1235
+ #: wp-shortpixel.php:279
1236
+ msgid "Get API Key"
1237
+ msgstr ""
1238
+
1239
+ #: wp-shortpixel.php:283
1240
+ msgid "This content is not processable."
1241
+ msgstr ""
1242
+
1243
+ #: wp-shortpixel.php:284
1244
+ msgid "Image waiting to optimize thumbnails"
1245
+ msgstr ""
1246
+
1247
+ #. translators: toolbar icon tooltip
1248
+ #: wp-shortpixel.php:297
1249
+ msgid "ShortPixel optimizing..."
1250
+ msgstr ""
1251
+
1252
+ #. translators: toolbar icon tooltip
1253
+ #: wp-shortpixel.php:308
1254
+ msgid "ShortPixel quota exceeded. Click for details."
1255
+ msgstr ""
1256
+
1257
+ #: wp-shortpixel.php:564
1258
+ msgid "Missing API Key"
1259
+ msgstr ""
1260
+
1261
+ #. translators: console message Empty queue 1234 -> 1234
1262
+ #: wp-shortpixel.php:614
1263
+ msgid "Empty queue "
1264
+ msgstr ""
1265
+
1266
+ #: wp-shortpixel.php:740
1267
+ msgid " Retry limit reached. Skipping file ID "
1268
+ msgstr ""
1269
+
1270
+ #: wp-shortpixel.php:835
1271
+ msgid "NextGen image not found"
1272
+ msgstr ""
1273
+
1274
+ #: wp-shortpixel.php:1004 wp-shortpixel.php:1018
1275
+ msgid "Could not restore from backup: "
1276
+ msgstr ""
1277
+
1278
+ #: wp-shortpixel.php:1037
1279
+ msgid "No thumbnails to optimize for ID: "
1280
+ msgstr ""
1281
+
1282
+ #: wp-shortpixel.php:1037
1283
+ msgid "Please optimize image for ID: "
1284
+ msgstr ""
1285
+
1286
+ #: wp-shortpixel.php:1142
1287
+ msgid "Refresh custom folders content"
1288
+ msgstr ""
1289
+
1290
+ #: wp-shortpixel.php:1143
1291
+ msgid "Refresh folders"
1292
+ msgstr ""
1293
+
1294
+ #: wp-shortpixel.php:1146
1295
+ msgid "Other Media optimized by ShortPixel"
1296
+ msgstr ""
1297
+
1298
+ #: wp-shortpixel.php:1322 wp-shortpixel.php:1413
1299
+ msgid "You do not have sufficient permissions to access this page."
1300
+ msgstr ""
1301
+
1302
+ #: wp-shortpixel.php:1451
1303
+ #, php-format
1304
+ msgid ""
1305
+ "The key you provided has %s characters. The API key should have 20 "
1306
+ "characters, letters and numbers only."
1307
+ msgstr ""
1308
+
1309
+ #: wp-shortpixel.php:1453
1310
+ msgid ""
1311
+ "Please check that the API key is the same as the one you received in your "
1312
+ "confirmation email."
1313
+ msgstr ""
1314
+
1315
+ #: wp-shortpixel.php:1455
1316
+ msgid "If this problem persists, please contact us at "
1317
+ msgstr ""
1318
+
1319
+ #: wp-shortpixel.php:1457
1320
+ msgid " or "
1321
+ msgstr ""
1322
+
1323
+ #: wp-shortpixel.php:1475
1324
+ msgid ""
1325
+ "API Key is valid but your site is not accessible from our servers. Please "
1326
+ "make sure that your server is accessible from the Internet before using the "
1327
+ "API or otherwise we won't be able to optimize them."
1328
+ msgstr ""
1329
+
1330
+ #: wp-shortpixel.php:1478
1331
+ msgid ""
1332
+ "API Key valid! <br>You seem to be running a multisite, please note that API "
1333
+ "Key can also be configured in wp-config.php like this:"
1334
+ msgstr ""
1335
+
1336
+ #: wp-shortpixel.php:1481
1337
+ msgid "API Key valid!"
1338
+ msgstr ""
1339
+
1340
+ #: wp-shortpixel.php:1488
1341
+ #, php-format
1342
+ msgid ""
1343
+ "There is something preventing us to create a new folder for backing up your "
1344
+ "original files.<BR>Please make sure that folder <b>%s</b> has the necessary "
1345
+ "write and read rights."
1346
+ msgstr ""
1347
+
1348
+ #: wp-shortpixel.php:1536
1349
+ msgid "Folder added successfully."
1350
+ msgstr ""
1351
+
1352
+ #: wp-shortpixel.php:1712
1353
+ msgid ""
1354
+ "API Key could not be validated due to a connectivity error.<BR>Your firewall "
1355
+ "may be blocking us. Please contact your hosting provider and ask them to "
1356
+ "allow connections from your site to IP 176.9.106.46.<BR> If you still cannot "
1357
+ "validate your API Key after this, please <a href=\"https://shortpixel.com/"
1358
+ "contact\" target=\"_blank\">contact us</a> and we will try to help. "
1359
+ msgstr ""
1360
+
1361
+ #: wp-shortpixel.php:1713 wp-shortpixel.php:1714
1362
+ msgid "Information unavailable. Please check your API key."
1363
+ msgstr ""
1364
+
1365
+ #: wp-shortpixel.php:1789
1366
+ msgid "PDF not processed."
1367
+ msgstr ""
1368
+
1369
+ #: wp-shortpixel.php:1820 wp-shortpixel.php:1822
1370
+ msgid "Cannot write optimized file"
1371
+ msgstr ""
1372
+
1373
+ #: wp-shortpixel.php:1823
1374
+ msgid "Why?"
1375
+ msgstr ""
1376
+
1377
+ #: wp-shortpixel.php:1831
1378
+ msgid "Image does not exist"
1379
+ msgstr ""
1380
+
1381
+ #: wp-shortpixel.php:1835
1382
+ msgid "Image waiting to be processed."
1383
+ msgstr ""
1384
+
1385
+ #: wp-shortpixel.php:1853
1386
+ msgid "ShortPixel Statistics"
1387
+ msgstr ""
1388
+
1389
+ #: wp-shortpixel.php:1871
1390
+ msgid "ShortPixel Compression"
1391
+ msgstr ""
1392
+
1393
+ #: shortpixel_api.php:142
1394
+ msgid "The file(s) do not exist on disk."
1395
+ msgstr ""
1396
+
1397
+ #: shortpixel_api.php:157 shortpixel_api.php:168
1398
+ msgid "Timed out while processing."
1399
+ msgstr ""
1400
+
1401
+ #: shortpixel_api.php:161
1402
+ msgid "Image ID"
1403
+ msgstr ""
1404
+
1405
+ #: shortpixel_api.php:161
1406
+ msgid "Media ID"
1407
+ msgstr ""
1408
+
1409
+ #: shortpixel_api.php:162
1410
+ msgid "Skip this image, try the next one."
1411
+ msgstr ""
1412
+
1413
+ #. send requests to API
1414
+ #. response <> 200 -> there was an error apparently?
1415
+ #: shortpixel_api.php:179 shortpixel_api.php:212 shortpixel_api.php:215
1416
+ msgid "There was an error and your request was not processed."
1417
+ msgstr ""
1418
+
1419
+ #: shortpixel_api.php:231
1420
+ msgid "Unecognized API response. Please contact support."
1421
+ msgstr ""
1422
+
1423
+ #: shortpixel_api.php:238
1424
+ msgid "Quota exceeded."
1425
+ msgstr ""
1426
+
1427
+ #: shortpixel_api.php:326
1428
+ msgid "Error downloading file"
1429
+ msgstr ""
1430
+
1431
+ #: shortpixel_api.php:334
1432
+ #, php-format
1433
+ msgid ""
1434
+ "Error downloading file - incorrect file size (downloaded: %s, correct: %s )"
1435
+ msgstr ""
1436
+
1437
+ #: shortpixel_api.php:337
1438
+ msgid "Unable to locate downloaded file"
1439
+ msgstr ""
1440
+
1441
+ #. array with final paths for these files
1442
+ #. creates backup folder if it doesn't exist
1443
+ #: shortpixel_api.php:399
1444
+ msgid "Backup folder does not exist and it cannot be created"
1445
+ msgstr ""
1446
+
1447
+ #. file couldn't be saved in backup folder
1448
+ #: shortpixel_api.php:419
1449
+ #, php-format
1450
+ msgid "Cannot save file <i>%s</i> in backup directory"
1451
+ msgstr ""
1452
+
1453
+ #. cannot write to the backup dir, return with an error
1454
+ #: shortpixel_api.php:428
1455
+ msgid "Cannot save file in backup directory"
1456
+ msgstr ""
1457
+
1458
+ #: shortpixel_api.php:491
1459
+ #, php-format
1460
+ msgid "Optimized version of %s file(s) couldn't be updated."
1461
+ msgstr ""
lang/shortpixel-ro_RO.mo ADDED
Binary file
lang/shortpixel-ro_RO.po ADDED
@@ -0,0 +1,1478 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2016-11-30 16:23+0100\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "Language: \n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=UTF-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ #: class/view/shortpixel_view.php:23 class/view/shortpixel_view.php:417
21
+ msgid "Average reduction"
22
+ msgstr "Reducere medie"
23
+
24
+ #. translators: header of the alert box
25
+ #: class/view/shortpixel_view.php:33
26
+ msgid "Quota Exceeded"
27
+ msgstr "Credite consumate"
28
+
29
+ #. translators: body of the alert box
30
+ #: class/view/shortpixel_view.php:35
31
+ #, php-format
32
+ msgid ""
33
+ "The plugin has optimized <strong>%s images</strong> and stopped because it "
34
+ "reached the available quota limit."
35
+ msgstr "Modulul a optimizat <strong>%s imagini</strong> și s-a oprit pentru că "
36
+ "a atins limita creditelor disponibile"
37
+
38
+ #: class/view/shortpixel_view.php:39
39
+ #, php-format
40
+ msgid ""
41
+ "<strong>%s images and %s thumbnails</strong> are not yet optimized by "
42
+ "ShortPixel."
43
+ msgstr "<strong>%s imagini și %s miniaturi</strong> nu sunt inca optimizate de "
44
+ "ShortPixel."
45
+
46
+ #: class/view/shortpixel_view.php:44
47
+ msgid "Upgrade"
48
+ msgstr "Actualizează"
49
+
50
+ #: class/view/shortpixel_view.php:45
51
+ msgid "Confirm New Quota"
52
+ msgstr "Confirmă Credite Noi"
53
+
54
+ #: class/view/shortpixel_view.php:47
55
+ msgid "Get more image credits by referring ShortPixel to your friends!"
56
+ msgstr "Obține mai multe credite recomandând ShortPixel prietenilor tăi!"
57
+
58
+ #: class/view/shortpixel_view.php:49
59
+ msgid "Check your account"
60
+ msgstr "Vezi în contul tău"
61
+
62
+ #: class/view/shortpixel_view.php:50
63
+ msgid ""
64
+ "for your unique referral link. For each user that joins, you will receive "
65
+ "+100 additional image credits/month."
66
+ msgstr "legatura ta personalizată pentru recomandare. Pentru fiecare utilizator nou vei primi"
67
+ "+100 credite adiționale/lună"
68
+
69
+ #: class/view/shortpixel_view.php:58
70
+ msgid ""
71
+ "In order to start the optimization process, you need to validate your API "
72
+ "Key in the <a href=\"options-general.php?page=wp-shortpixel\">ShortPixel "
73
+ "Settings</a> page in your WordPress Admin."
74
+ msgstr "Pentru a putea începe să optimizezi, e necesar să validezi Cheia API"
75
+ "in <a href=\"options-general.php?page=wp-shortpixel\">Configurările "
76
+ "ShortPixel</a> din interfața de administrare WordPress."
77
+
78
+ #: class/view/shortpixel_view.php:61
79
+ msgid ""
80
+ "If you don’t have an API Key, you can get one delivered to your inbox, for "
81
+ "free."
82
+ msgstr "Dacă n-ai o Cheie API, poți primi una prin e-mail, gratis."
83
+
84
+ #: class/view/shortpixel_view.php:62
85
+ msgid ""
86
+ "Please <a href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">sign "
87
+ "up to get your API key.</a>"
88
+ msgstr "Te rugăm <a href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">înscrie-te "
89
+ "pentru a obține Cheia API</a>"
90
+
91
+ #: class/view/shortpixel_view.php:70
92
+ msgid "Dismiss"
93
+ msgstr "Închide"
94
+
95
+ #: class/view/shortpixel_view.php:72
96
+ msgid "ShortPixel Optimization"
97
+ msgstr "Optimizare ShortPixel"
98
+
99
+ #: class/view/shortpixel_view.php:75
100
+ msgid ""
101
+ "Action needed. Please <a href='https://shortpixel.com/wp-apikey' "
102
+ "target='_blank'>get your API key</a> to activate your ShortPixel plugin."
103
+ msgstr ""
104
+ "Acționează acum! <a href='https://shortpixel.com/wp-apikey' "
105
+ "target='_blank'>Obține cheia ta API</a> pentru a activa modulul ShortPixel."
106
+
107
+ #: class/view/shortpixel_view.php:78
108
+ msgid ""
109
+ "Your image gallery is not optimized. It takes 2 minutes to <a href='https://"
110
+ "shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate "
111
+ "your ShortPixel plugin."
112
+ msgstr ""
113
+ "Biblioteca ta media nu e optimizată. Durează mai puțin de 2 minute să <a href='https://"
114
+ "shortpixel.com/wp-apikey' target='_blank'>obții cheia ta API</a> și să activezi "
115
+ "modulul ShortPixel."
116
+
117
+ #: class/view/shortpixel_view.php:102
118
+ msgid "Your media library"
119
+ msgstr "Biblioteca ta media"
120
+
121
+ #: class/view/shortpixel_view.php:103
122
+ msgid "Original images"
123
+ msgstr "Imagini originale"
124
+
125
+ #: class/view/shortpixel_view.php:105
126
+ msgid "Smaller thumbnails"
127
+ msgstr "Miniaturi"
128
+
129
+ #: class/view/shortpixel_view.php:109 class/view/shortpixel_view.php:343
130
+ msgid "Include thumbnails"
131
+ msgstr "Include miniaturile"
132
+
133
+ #: class/view/shortpixel_view.php:112
134
+ msgid "Total images"
135
+ msgstr "Imagini în total"
136
+
137
+ #: class/view/shortpixel_view.php:114
138
+ msgid "Already optimized originals"
139
+ msgstr "Originale deja optimizate"
140
+
141
+ #: class/view/shortpixel_view.php:116
142
+ msgid "Already optimized thumbnails"
143
+ msgstr "Miniaturi deja optimizate"
144
+
145
+ #: class/view/shortpixel_view.php:119 class/view/shortpixel_view.php:124
146
+ msgid "Total to be optimized"
147
+ msgstr "În total de optimizat"
148
+
149
+ #: class/view/shortpixel_view.php:123
150
+ msgid "Your custom folders"
151
+ msgstr "Dosarele tale personalizate"
152
+
153
+ #: class/view/shortpixel_view.php:137
154
+ #, php-format
155
+ msgid ""
156
+ "<span class=\"label\">Start Optimizing</span><br> <span class=\"total\">%s</"
157
+ "span> images"
158
+ msgstr ""
159
+ "<span class=\"label\">Începe să Optimizezi</span><br> <span class=\"total\">%s</"
160
+ "span> imagini"
161
+
162
+ #: class/view/shortpixel_view.php:148
163
+ msgid ""
164
+ "Nothing to optimize! The images that you add to Media Gallery will be "
165
+ "automatically optimized after upload."
166
+ msgstr ""
167
+ "Nimic de optimizat! Imaginile pe care le adaugi in Bibiloteca Media vor fi "
168
+ "optimizate automat dupa încărcare."
169
+
170
+ #: class/view/shortpixel_view.php:157
171
+ msgid ""
172
+ "After you start the bulk process, in order for the optimization to run, you "
173
+ "must keep this page open and your computer running. If you close the page "
174
+ "for whatever reason, just turn back to it and the bulk process will resume."
175
+ msgstr ""
176
+
177
+ #: class/view/shortpixel_view.php:163
178
+ msgid "What are Thumbnails?"
179
+ msgstr ""
180
+
181
+ #: class/view/shortpixel_view.php:164
182
+ msgid ""
183
+ "Thumbnails are smaller images usually generated by your WP theme. Most "
184
+ "themes generate between 3 and 6 thumbnails for each Media Library image."
185
+ msgstr ""
186
+
187
+ #: class/view/shortpixel_view.php:165
188
+ msgid ""
189
+ "The thumbnails also generate traffic on your website pages and they "
190
+ "influence your website's speed."
191
+ msgstr ""
192
+
193
+ #: class/view/shortpixel_view.php:166
194
+ msgid ""
195
+ "It's highly recommended that you include thumbnails in the optimization as "
196
+ "well."
197
+ msgstr ""
198
+
199
+ #: class/view/shortpixel_view.php:169
200
+ msgid "How does it work?"
201
+ msgstr ""
202
+
203
+ #: class/view/shortpixel_view.php:170
204
+ msgid ""
205
+ "The plugin processes images starting with the newest ones you uploaded in "
206
+ "your Media Library."
207
+ msgstr ""
208
+
209
+ #: class/view/shortpixel_view.php:171
210
+ msgid "You will be able to pause the process anytime."
211
+ msgstr ""
212
+
213
+ #: class/view/shortpixel_view.php:172
214
+ msgid ""
215
+ "<p>Your original images will be stored in a separate back-up folder.</p>"
216
+ msgstr ""
217
+
218
+ #: class/view/shortpixel_view.php:173
219
+ msgid ""
220
+ "You can watch the images being processed live, right here, after you start "
221
+ "optimizing."
222
+ msgstr ""
223
+
224
+ #. bulk is paused
225
+ #: class/view/shortpixel_view.php:179
226
+ msgid "Please see below the optimization status so far:"
227
+ msgstr ""
228
+
229
+ #: class/view/shortpixel_view.php:182
230
+ #, php-format
231
+ msgid "%d images and %d thumbnails are not yet optimized by ShortPixel."
232
+ msgstr ""
233
+
234
+ #: class/view/shortpixel_view.php:187
235
+ msgid ""
236
+ "You can continue optimizing your Media Gallery from where you left, by "
237
+ "clicking the Resume processing button. Already optimized images will not be "
238
+ "reprocessed."
239
+ msgstr ""
240
+
241
+ #: class/view/shortpixel_view.php:197
242
+ msgid "Congratulations!"
243
+ msgstr ""
244
+
245
+ #: class/view/shortpixel_view.php:198
246
+ msgid "Your media library has been successfully optimized!"
247
+ msgstr ""
248
+
249
+ #: class/view/shortpixel_view.php:199
250
+ msgid "Summary"
251
+ msgstr ""
252
+
253
+ #: class/view/shortpixel_view.php:205
254
+ msgid "Share your optimization results:"
255
+ msgstr ""
256
+
257
+ #: class/view/shortpixel_view.php:225
258
+ msgid "I just optimized my images by "
259
+ msgstr ""
260
+
261
+ #: class/view/shortpixel_view.php:227
262
+ msgid "I just optimized my images "
263
+ msgstr ""
264
+
265
+ #: class/view/shortpixel_view.php:230
266
+ msgid "with @ShortPixel, a great plugin for increasing #WordPress page speed:"
267
+ msgstr ""
268
+
269
+ #: class/view/shortpixel_view.php:231
270
+ msgid "Tweet"
271
+ msgstr ""
272
+
273
+ #: class/view/shortpixel_view.php:257
274
+ msgid "Please rate us!"
275
+ msgstr ""
276
+
277
+ #: class/view/shortpixel_view.php:267
278
+ #, php-format
279
+ msgid ""
280
+ "Go to the ShortPixel <a href=\"%soptions-general.php?page=wp-shortpixel#stats"
281
+ "\">Stats</a> and see all your websites' optimized stats. Download your "
282
+ "detailed <a href=\"https://api.shortpixel.com/v2/report.php?key=%s"
283
+ "\">Optimization Report</a> to check your image optimization statistics for "
284
+ "the last 40 days."
285
+ msgstr ""
286
+
287
+ #: class/view/shortpixel_view.php:275
288
+ msgid ""
289
+ "The following images could not be processed because of their limited write "
290
+ "rights. This usually happens if you have changed your hosting provider. "
291
+ "Please restart the optimization process after you granted write rights to "
292
+ "all the files below."
293
+ msgstr ""
294
+
295
+ #: class/view/shortpixel_view.php:290 wp-shortpixel.php:1755
296
+ #: wp-shortpixel.php:1756 wp-shortpixel.php:1757 wp-shortpixel.php:1758
297
+ msgid " images"
298
+ msgstr ""
299
+
300
+ #: class/view/shortpixel_view.php:291
301
+ msgid " and"
302
+ msgstr ""
303
+
304
+ #: class/view/shortpixel_view.php:292
305
+ msgid " thumbnails"
306
+ msgstr ""
307
+
308
+ #: class/view/shortpixel_view.php:293
309
+ msgid " are not yet optimized by ShortPixel."
310
+ msgstr ""
311
+
312
+ #: class/view/shortpixel_view.php:295
313
+ msgid "Some have errors:"
314
+ msgstr ""
315
+
316
+ #: class/view/shortpixel_view.php:318
317
+ #, php-format
318
+ msgid ""
319
+ "%s images and %s thumbnails were optimized <strong>%s</strong>. You can re-"
320
+ "optimize <strong>%s</strong> the ones that have backup."
321
+ msgstr ""
322
+
323
+ #: class/view/shortpixel_view.php:323
324
+ #, php-format
325
+ msgid ""
326
+ "%s images were optimized <strong>%s</strong>. You can re-optimize <strong>"
327
+ "%s</strong> the ones that have backup. "
328
+ msgstr ""
329
+
330
+ #: class/view/shortpixel_view.php:326
331
+ msgid " thumbnails will be restored to originals."
332
+ msgstr ""
333
+
334
+ #: class/view/shortpixel_view.php:331
335
+ msgid ""
336
+ "Restart the optimization process for these images by clicking the button "
337
+ "below."
338
+ msgstr ""
339
+
340
+ #: class/view/shortpixel_view.php:333
341
+ msgid ""
342
+ "Restart the optimization process for new images added to your library by "
343
+ "clicking the button below."
344
+ msgstr ""
345
+
346
+ #: class/view/shortpixel_view.php:335
347
+ #, php-format
348
+ msgid "Already <strong>%s</strong> optimized images will not be reprocessed."
349
+ msgstr ""
350
+
351
+ #: class/view/shortpixel_view.php:337
352
+ msgid ""
353
+ "Please note that reoptimizing images as <strong>lossy/lossless</strong> may "
354
+ "use additional credits."
355
+ msgstr ""
356
+
357
+ #: class/view/shortpixel_view.php:338
358
+ msgid "More info"
359
+ msgstr ""
360
+
361
+ #: class/view/shortpixel_view.php:344
362
+ msgid "Restart Optimizing"
363
+ msgstr ""
364
+
365
+ #: class/view/shortpixel_view.php:355
366
+ msgid "Bulk Image Optimization by ShortPixel"
367
+ msgstr ""
368
+
369
+ #: class/view/shortpixel_view.php:361
370
+ msgid "Lengthy operation in progress:"
371
+ msgstr ""
372
+
373
+ #: class/view/shortpixel_view.php:362
374
+ msgid "Optimizing image"
375
+ msgstr ""
376
+
377
+ #: class/view/shortpixel_view.php:369
378
+ msgid "Error processing file:"
379
+ msgstr ""
380
+
381
+ #: class/view/shortpixel_view.php:375
382
+ msgid "Just optimized:"
383
+ msgstr ""
384
+
385
+ #: class/view/shortpixel_view.php:381
386
+ msgid "Original image"
387
+ msgstr ""
388
+
389
+ #: class/view/shortpixel_view.php:385
390
+ msgid "Optimized image"
391
+ msgstr ""
392
+
393
+ #. translators: percent follows
394
+ #: class/view/shortpixel_view.php:389
395
+ msgid "Optimized by:"
396
+ msgstr ""
397
+
398
+ #: class/view/shortpixel_view.php:411
399
+ msgid "Remaining credits"
400
+ msgstr ""
401
+
402
+ #: class/view/shortpixel_view.php:427 class/view/shortpixel_view.php:436
403
+ msgid "Media Library"
404
+ msgstr ""
405
+
406
+ #: class/view/shortpixel_view.php:428
407
+ msgid "and"
408
+ msgstr ""
409
+
410
+ #: class/view/shortpixel_view.php:429
411
+ msgid "Custom folders"
412
+ msgstr ""
413
+
414
+ #: class/view/shortpixel_view.php:429
415
+ msgid "optimization in progress ..."
416
+ msgstr ""
417
+
418
+ #: class/view/shortpixel_view.php:430
419
+ msgid "Bulk optimization has started."
420
+ msgstr ""
421
+
422
+ #: class/view/shortpixel_view.php:431
423
+ #, php-format
424
+ msgid ""
425
+ "This process will take some time, depending on the number of images in your "
426
+ "library. In the meantime, you can continue using \n"
427
+ " the admin as usual, <a href=\"%s\" target=\"_blank\">in "
428
+ "a different browser window or tab</a>.<br>\n"
429
+ " However, <strong>if you close this window, the bulk "
430
+ "processing will pause</strong> until you open the media gallery or the "
431
+ "ShortPixel bulk page again."
432
+ msgstr ""
433
+
434
+ #: class/view/shortpixel_view.php:436
435
+ msgid "and Custom folders"
436
+ msgstr ""
437
+
438
+ #: class/view/shortpixel_view.php:436
439
+ msgid "optimization paused"
440
+ msgstr ""
441
+
442
+ #: class/view/shortpixel_view.php:437
443
+ msgid "Bulk processing is paused until you resume the optimization process."
444
+ msgstr ""
445
+
446
+ #. now we display the action buttons always when a type of bulk is running
447
+ #: class/view/shortpixel_view.php:454
448
+ msgid "Pause"
449
+ msgstr ""
450
+
451
+ #: class/view/shortpixel_view.php:454
452
+ msgid "Resume processing"
453
+ msgstr ""
454
+
455
+ #: class/view/shortpixel_view.php:457
456
+ msgid "Only other media"
457
+ msgstr ""
458
+
459
+ #: class/view/shortpixel_view.php:457
460
+ msgid "Process only the other media, skipping the Media Library"
461
+ msgstr ""
462
+
463
+ #: class/view/shortpixel_view.php:461
464
+ msgid "Manage custom folders"
465
+ msgstr ""
466
+
467
+ #: class/view/shortpixel_view.php:469
468
+ msgid "Processed Images and PDFs:"
469
+ msgstr ""
470
+
471
+ #: class/view/shortpixel_view.php:470
472
+ msgid "Processed Thumbnails:"
473
+ msgstr ""
474
+
475
+ #: class/view/shortpixel_view.php:471
476
+ msgid "Total files processed:"
477
+ msgstr ""
478
+
479
+ #: class/view/shortpixel_view.php:472
480
+ #, php-format
481
+ msgid "Minus files with <5% optimization (free):"
482
+ msgstr ""
483
+
484
+ #: class/view/shortpixel_view.php:473
485
+ msgid "Used quota:"
486
+ msgstr ""
487
+
488
+ #: class/view/shortpixel_view.php:475
489
+ msgid "Average optimization:"
490
+ msgstr ""
491
+
492
+ #: class/view/shortpixel_view.php:476
493
+ msgid "Saved space:"
494
+ msgstr ""
495
+
496
+ #. wp_enqueue_script('jquery.idTabs.js', plugins_url('/js/jquery.idTabs.js',__FILE__) );
497
+ #: class/view/shortpixel_view.php:502
498
+ msgid "ShortPixel Plugin Settings"
499
+ msgstr ""
500
+
501
+ #: class/view/shortpixel_view.php:505
502
+ msgid "Upgrade now"
503
+ msgstr ""
504
+
505
+ #: class/view/shortpixel_view.php:507
506
+ msgid "Support"
507
+ msgstr ""
508
+
509
+ #: class/view/shortpixel_view.php:525
510
+ msgid "General"
511
+ msgstr ""
512
+
513
+ #: class/view/shortpixel_view.php:530
514
+ msgid "Advanced"
515
+ msgstr ""
516
+
517
+ #. the span is a trick to keep the sections ordered as nth-child in styles: 1,2,3,4 (otherwise the third section would be nth-child(2) too, because of the form)
518
+ #: class/view/shortpixel_view.php:537
519
+ msgid "Statistics"
520
+ msgstr ""
521
+
522
+ #: class/view/shortpixel_view.php:545
523
+ msgid "WP Resources"
524
+ msgstr ""
525
+
526
+ #: class/view/shortpixel_view.php:546
527
+ msgid "Please reload"
528
+ msgstr ""
529
+
530
+ #: class/view/shortpixel_view.php:579
531
+ #, php-format
532
+ msgid ""
533
+ "New images uploaded to the Media Library will be optimized automatically.<br/"
534
+ ">If you have existing images you would like to optimize, you can use the <a "
535
+ "href=\"%supload.php?page=wp-short-pixel-bulk\">Bulk Optimization Tool</a>."
536
+ msgstr ""
537
+
538
+ #: class/view/shortpixel_view.php:582
539
+ msgid "Step 1:"
540
+ msgstr ""
541
+
542
+ #: class/view/shortpixel_view.php:583
543
+ #, php-format
544
+ msgid ""
545
+ "If you don't have an API Key, <a href=\"https://shortpixel.com/wp-apikey%s\" "
546
+ "target=\"_blank\">sign up here.</a> It's free and it only takes one minute, "
547
+ "we promise!"
548
+ msgstr ""
549
+
550
+ #: class/view/shortpixel_view.php:584
551
+ msgid "Step 2:"
552
+ msgstr ""
553
+
554
+ #: class/view/shortpixel_view.php:585
555
+ msgid "Please enter here the API Key you received by email and press Validate."
556
+ msgstr ""
557
+
558
+ #: class/view/shortpixel_view.php:591
559
+ msgid "API Key:"
560
+ msgstr ""
561
+
562
+ #: class/view/shortpixel_view.php:601
563
+ msgid "Multisite API Key"
564
+ msgstr ""
565
+
566
+ #: class/view/shortpixel_view.php:604
567
+ msgid "Validate the provided API key"
568
+ msgstr ""
569
+
570
+ #: class/view/shortpixel_view.php:605
571
+ msgid "Validate"
572
+ msgstr ""
573
+
574
+ #: class/view/shortpixel_view.php:607
575
+ msgid "Key defined in wp-config.php."
576
+ msgstr ""
577
+
578
+ #. if invalid key we display the link to the API Key
579
+ #. if valid key we display the rest of the options
580
+ #: class/view/shortpixel_view.php:618
581
+ msgid "Compression type:"
582
+ msgstr ""
583
+
584
+ #: class/view/shortpixel_view.php:622
585
+ msgid "Lossy (recommended)"
586
+ msgstr ""
587
+
588
+ #: class/view/shortpixel_view.php:623
589
+ msgid ""
590
+ "<b>Lossy compression: </b>lossy has a better compression rate than lossless "
591
+ "compression.</br>The resulting image is identical with the original to the "
592
+ "human eye. You can run a test for free "
593
+ msgstr ""
594
+
595
+ #: class/view/shortpixel_view.php:624 wp-shortpixel.php:1458
596
+ msgid "here"
597
+ msgstr ""
598
+
599
+ #: class/view/shortpixel_view.php:626 class/view/shortpixel-list-table.php:111
600
+ msgid "Lossless"
601
+ msgstr ""
602
+
603
+ #: class/view/shortpixel_view.php:628
604
+ msgid ""
605
+ "<b>Lossless compression: </b> the shrunk image will be identical with the "
606
+ "original and smaller in size.</br>In some rare cases you will need to use \n"
607
+ " this type of compression. Some technical drawings or "
608
+ "images from vector graphics are possible situations."
609
+ msgstr ""
610
+
611
+ #: class/view/shortpixel_view.php:638
612
+ msgid "Also include thumbnails:"
613
+ msgstr ""
614
+
615
+ #: class/view/shortpixel_view.php:640
616
+ msgid "Apply compression also to <strong>image thumbnails.</strong> "
617
+ msgstr ""
618
+
619
+ #: class/view/shortpixel_view.php:641
620
+ msgid "thumbnails to optimize"
621
+ msgstr ""
622
+
623
+ #: class/view/shortpixel_view.php:643
624
+ msgid ""
625
+ "It is highly recommended that you optimize the thumbnails as they are "
626
+ "usually the images most viewed by end users and can generate most traffic."
627
+ "<br>Please note that thumbnails count up to your total quota."
628
+ msgstr ""
629
+
630
+ #: class/view/shortpixel_view.php:648
631
+ msgid "Image backup"
632
+ msgstr ""
633
+
634
+ #: class/view/shortpixel_view.php:650
635
+ msgid "Save and keep a backup of your original images in a separate folder."
636
+ msgstr ""
637
+
638
+ #: class/view/shortpixel_view.php:651
639
+ msgid ""
640
+ "You <strong>need to have backup active</strong> in order to be able to "
641
+ "restore images to originals or to convert from Lossy to Lossless and back."
642
+ msgstr ""
643
+
644
+ #: class/view/shortpixel_view.php:655
645
+ msgid "CMYK to RGB conversion"
646
+ msgstr ""
647
+
648
+ #: class/view/shortpixel_view.php:657
649
+ msgid "Adjust your images for computer and mobile screen display."
650
+ msgstr ""
651
+
652
+ #: class/view/shortpixel_view.php:658
653
+ msgid ""
654
+ "Images for the web only need RGB format and converting them from CMYK to RGB "
655
+ "makes them smaller."
656
+ msgstr ""
657
+
658
+ #: class/view/shortpixel_view.php:662
659
+ msgid "Remove EXIF"
660
+ msgstr ""
661
+
662
+ #: class/view/shortpixel_view.php:664
663
+ msgid "Remove the EXIF tag of the image (recommended)."
664
+ msgstr ""
665
+
666
+ #: class/view/shortpixel_view.php:665
667
+ msgid ""
668
+ "EXIF is a set of various pieces of information that are automatically "
669
+ "embedded into the image upon creation. This can include GPS position, camera "
670
+ "manufacturer, date and time, etc. \n"
671
+ " Unless you really need that data to be "
672
+ "preserved, we recommend removing it as it can lead to <a href=\"http://blog."
673
+ "shortpixel.com/how-much-smaller-can-be-images-without-exif-icc\" target="
674
+ "\"_blank\">better compression rates</a>."
675
+ msgstr ""
676
+
677
+ #: class/view/shortpixel_view.php:670
678
+ msgid "Resize large images"
679
+ msgstr ""
680
+
681
+ #: class/view/shortpixel_view.php:673
682
+ msgid "to maximum"
683
+ msgstr ""
684
+
685
+ #: class/view/shortpixel_view.php:675
686
+ msgid "pixels wide &times;"
687
+ msgstr ""
688
+
689
+ #: class/view/shortpixel_view.php:677
690
+ msgid ""
691
+ "pixels high (original aspect ratio is preserved and image is not cropped)"
692
+ msgstr ""
693
+
694
+ #: class/view/shortpixel_view.php:679
695
+ #, php-format
696
+ msgid ""
697
+ "Recommended for large photos, like the ones taken with your phone. Saved "
698
+ "space can go up to 80% or more after resizing."
699
+ msgstr ""
700
+
701
+ #: class/view/shortpixel_view.php:683
702
+ msgid ""
703
+ "Sizes will be greater or equal to the corresponding value. For example, if "
704
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
705
+ "resized to 1000x1500px while an image of 3000x2000px will be resized to "
706
+ "1800x1200px"
707
+ msgstr ""
708
+
709
+ #: class/view/shortpixel_view.php:685
710
+ msgid ""
711
+ "Sizes will be smaller or equal to the corresponding value. For example, if "
712
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
713
+ "resized to 800x1200px while an image of 3000x2000px will be resized to "
714
+ "1000x667px"
715
+ msgstr ""
716
+
717
+ #: class/view/shortpixel_view.php:692 class/view/shortpixel_view.php:847
718
+ msgid "Save Changes"
719
+ msgstr ""
720
+
721
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
722
+ msgid "Save and go to the Bulk Processing page"
723
+ msgstr ""
724
+
725
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
726
+ #: wp-shortpixel.php:1517 wp-shortpixel.php:1518
727
+ msgid "Save and Go to Bulk Process"
728
+ msgstr ""
729
+
730
+ #: class/view/shortpixel_view.php:716
731
+ msgid "Please enter your API key in the General tab first."
732
+ msgstr ""
733
+
734
+ #. if valid key we display the rest of the options
735
+ #: class/view/shortpixel_view.php:721
736
+ msgid "Additional media folders"
737
+ msgstr ""
738
+
739
+ #: class/view/shortpixel_view.php:726
740
+ msgid "Folder name"
741
+ msgstr ""
742
+
743
+ #: class/view/shortpixel_view.php:727
744
+ msgid "Type &amp;<br>Status"
745
+ msgstr ""
746
+
747
+ #: class/view/shortpixel_view.php:728
748
+ msgid "Files"
749
+ msgstr ""
750
+
751
+ #: class/view/shortpixel_view.php:729
752
+ msgid "Last change"
753
+ msgstr ""
754
+
755
+ #: class/view/shortpixel_view.php:738 class/view/shortpixel_view.php:743
756
+ #: class/view/shortpixel_view.php:745 class/view/shortpixel_view.php:747
757
+ msgid "Empty"
758
+ msgstr ""
759
+
760
+ #: class/view/shortpixel_view.php:740 class/view/shortpixel_view.php:745
761
+ #: class/view/shortpixel_view.php:747
762
+ msgid "Optimized"
763
+ msgstr ""
764
+
765
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
766
+ #: class/view/shortpixel-list-table.php:97
767
+ msgid "Pending"
768
+ msgstr ""
769
+
770
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
771
+ #: class/view/shortpixel-list-table.php:99
772
+ msgid "Waiting"
773
+ msgstr ""
774
+
775
+ #: class/view/shortpixel_view.php:745
776
+ msgid "Stop monitoring"
777
+ msgstr ""
778
+
779
+ #: class/view/shortpixel_view.php:745
780
+ msgid "Stop optimizing"
781
+ msgstr ""
782
+
783
+ #: class/view/shortpixel_view.php:749
784
+ msgid "Failed"
785
+ msgstr ""
786
+
787
+ #: class/view/shortpixel_view.php:771
788
+ msgid ""
789
+ "Full folder refresh, check each file of the folder if it changed since it "
790
+ "was optimized. Might take up to 1 min. for big folders."
791
+ msgstr ""
792
+
793
+ #: class/view/shortpixel_view.php:772
794
+ msgid "Refresh"
795
+ msgstr ""
796
+
797
+ #: class/view/shortpixel_view.php:783
798
+ msgid "Select the images folder on your server."
799
+ msgstr ""
800
+
801
+ #: class/view/shortpixel_view.php:784
802
+ msgid "Select ..."
803
+ msgstr ""
804
+
805
+ #: class/view/shortpixel_view.php:786
806
+ msgid "Add Folder"
807
+ msgstr ""
808
+
809
+ #: class/view/shortpixel_view.php:788
810
+ msgid ""
811
+ "Use the Select... button to select site folders. ShortPixel will optimize "
812
+ "images and PDFs from the specified folders and their subfolders. The "
813
+ "optimization status for each image or PDF in these folders can be seen in "
814
+ "the <a href=\"upload.php?page=wp-short-pixel-custom\">Other Media list</a>, "
815
+ "under the Media menu."
816
+ msgstr ""
817
+
818
+ #: class/view/shortpixel_view.php:792
819
+ msgid "Select the images folder"
820
+ msgstr ""
821
+
822
+ #: class/view/shortpixel_view.php:794
823
+ msgid "Cancel"
824
+ msgstr ""
825
+
826
+ #: class/view/shortpixel_view.php:795
827
+ msgid "Select"
828
+ msgstr ""
829
+
830
+ #: class/view/shortpixel_view.php:807
831
+ msgid "Optimize NextGen galleries"
832
+ msgstr ""
833
+
834
+ #: class/view/shortpixel_view.php:809
835
+ msgid "Optimize NextGen galleries."
836
+ msgstr ""
837
+
838
+ #: class/view/shortpixel_view.php:811
839
+ msgid ""
840
+ "Check this to add all your current NextGen galleries to the custom folders "
841
+ "list and to also have all the future NextGen galleries and images optimized "
842
+ "automatically by ShortPixel."
843
+ msgstr ""
844
+
845
+ #: class/view/shortpixel_view.php:817
846
+ msgid "WebP versions"
847
+ msgstr ""
848
+
849
+ #: class/view/shortpixel_view.php:819
850
+ msgid ""
851
+ "Create also <a href=\"http://blog.shortpixel.com/how-webp-images-can-speed-"
852
+ "up-your-site/\" target=\"_blank\">WebP versions</a> of the images "
853
+ "<strong>for free</strong>."
854
+ msgstr ""
855
+
856
+ #: class/view/shortpixel_view.php:821
857
+ #, php-format
858
+ msgid ""
859
+ "WebP images can be up to three times smaller than PNGs and 25% smaller than "
860
+ "JPGs. Choosing this option <strong>does not use up additional credits</"
861
+ "strong>."
862
+ msgstr ""
863
+
864
+ #: class/view/shortpixel_view.php:826
865
+ msgid "HTTP AUTH credentials"
866
+ msgstr ""
867
+
868
+ #: class/view/shortpixel_view.php:828
869
+ msgid "User"
870
+ msgstr ""
871
+
872
+ #: class/view/shortpixel_view.php:829
873
+ msgid "Password"
874
+ msgstr ""
875
+
876
+ #: class/view/shortpixel_view.php:831
877
+ msgid ""
878
+ "Only fill in these fields if your site (front-end) is not publicly "
879
+ "accessible and visitors need a user/pass to connect to it. If you don't know "
880
+ "what is this then just <strong>leave the fields empty</strong>."
881
+ msgstr ""
882
+
883
+ #: class/view/shortpixel_view.php:836
884
+ msgid "Process in front-end"
885
+ msgstr ""
886
+
887
+ #: class/view/shortpixel_view.php:838
888
+ msgid "Automatically optimize images added by users in front end."
889
+ msgstr ""
890
+
891
+ #: class/view/shortpixel_view.php:840
892
+ msgid ""
893
+ "Check this if you have users that add images or PDF documents from custom "
894
+ "forms in the front-end. This could increase the load on your server if you "
895
+ "have a lot of users simultaneously connected."
896
+ msgstr ""
897
+
898
+ #: class/view/shortpixel_view.php:860
899
+ msgid "Your ShortPixel Stats"
900
+ msgstr ""
901
+
902
+ #: class/view/shortpixel_view.php:864
903
+ msgid "Average compression of your files:"
904
+ msgstr ""
905
+
906
+ #: class/view/shortpixel_view.php:868
907
+ msgid "Saved disk space by ShortPixel"
908
+ msgstr ""
909
+
910
+ #: class/view/shortpixel_view.php:872
911
+ msgid "Bandwith* saved with ShortPixel:"
912
+ msgstr ""
913
+
914
+ #: class/view/shortpixel_view.php:878
915
+ msgid "* Saved bandwidth is calculated at 10,000 impressions/image"
916
+ msgstr ""
917
+
918
+ #: class/view/shortpixel_view.php:880
919
+ msgid "Your ShortPixel Plan"
920
+ msgstr ""
921
+
922
+ #: class/view/shortpixel_view.php:884
923
+ msgid "Your ShortPixel plan"
924
+ msgstr ""
925
+
926
+ #: class/view/shortpixel_view.php:886
927
+ #, php-format
928
+ msgid ""
929
+ "%s/month, renews in %s days, on %s ( <a href=\"https://shortpixel.com/login/"
930
+ "%s\" target=\"_blank\">Need More? See the options available</a> )"
931
+ msgstr ""
932
+
933
+ #: class/view/shortpixel_view.php:889
934
+ #, php-format
935
+ msgid ""
936
+ "<a href=\"https://shortpixel.com/login/%s/tell-a-friend\" target=\"_blank"
937
+ "\">Join our friend referral system</a> to win more credits. For each user "
938
+ "that joins, you receive +100 images credits/month."
939
+ msgstr ""
940
+
941
+ #: class/view/shortpixel_view.php:894
942
+ msgid "One time credits:"
943
+ msgstr ""
944
+
945
+ #: class/view/shortpixel_view.php:898
946
+ msgid "Number of images processed this month:"
947
+ msgstr ""
948
+
949
+ #: class/view/shortpixel_view.php:900
950
+ msgid "see report"
951
+ msgstr ""
952
+
953
+ #: class/view/shortpixel_view.php:905
954
+ msgid "Remaining** images in your plan:"
955
+ msgstr ""
956
+
957
+ #: class/view/shortpixel_view.php:906
958
+ msgid "images"
959
+ msgstr ""
960
+
961
+ #: class/view/shortpixel_view.php:912
962
+ #, php-format
963
+ msgid ""
964
+ "** Increase your image quota by <a href=\"https://shortpixel.com/login/%s\" "
965
+ "target=\"_blank\">upgrading your ShortPixel plan.</a>"
966
+ msgstr ""
967
+
968
+ #: class/view/shortpixel_view.php:919
969
+ msgid "Total number of processed files:"
970
+ msgstr ""
971
+
972
+ #: class/view/shortpixel_view.php:924
973
+ msgid ""
974
+ "Original images are stored in a backup folder. Your backup folder size is "
975
+ "now:"
976
+ msgstr ""
977
+
978
+ #: class/view/shortpixel_view.php:928
979
+ msgid "Empty backups"
980
+ msgstr ""
981
+
982
+ #. not a file that we can process
983
+ #: class/view/shortpixel_view.php:945 wp-shortpixel.php:348
984
+ #: wp-shortpixel.php:374 wp-shortpixel.php:1813
985
+ msgid "Optimization N/A"
986
+ msgstr ""
987
+
988
+ #: class/view/shortpixel_view.php:948
989
+ msgid "Image does not exist."
990
+ msgstr ""
991
+
992
+ #. multisite key - need to be validated on each site but it's not invalid
993
+ #: class/view/shortpixel_view.php:952
994
+ msgid ""
995
+ "Please <a href=\"options-general.php?page=wp-shortpixel\">go to Settings</a> "
996
+ "to validate the API Key."
997
+ msgstr ""
998
+
999
+ #: class/view/shortpixel_view.php:954
1000
+ msgid ""
1001
+ "Invalid API Key. <a href=\"options-general.php?page=wp-shortpixel\">Check "
1002
+ "your Settings</a>"
1003
+ msgstr ""
1004
+
1005
+ #: class/view/shortpixel_view.php:963
1006
+ msgid "Optimize now"
1007
+ msgstr ""
1008
+
1009
+ #: class/view/shortpixel_view.php:973 class/view/shortpixel-list-table.php:55
1010
+ #: wp-shortpixel.php:282
1011
+ msgid "Retry"
1012
+ msgstr ""
1013
+
1014
+ #: class/view/shortpixel_view.php:990 class/view/shortpixel-list-table.php:93
1015
+ #: wp-shortpixel.php:273
1016
+ msgid "Reduced by"
1017
+ msgstr ""
1018
+
1019
+ #: class/view/shortpixel_view.php:993 class/view/shortpixel-list-table.php:92
1020
+ #: class/view/shortpixel-list-table.php:94 wp-shortpixel.php:274
1021
+ msgid "Bonus processing"
1022
+ msgstr ""
1023
+
1024
+ #: class/view/shortpixel_view.php:996
1025
+ #, php-format
1026
+ msgid "+%s of %s thumbnails optimized"
1027
+ msgstr ""
1028
+
1029
+ #: class/view/shortpixel_view.php:997
1030
+ #, php-format
1031
+ msgid "+%s thumbnails optimized"
1032
+ msgstr ""
1033
+
1034
+ #: class/view/shortpixel_view.php:1005
1035
+ #, php-format
1036
+ msgid "Optimize %s thumbnails"
1037
+ msgstr ""
1038
+
1039
+ #: class/view/shortpixel_view.php:1012
1040
+ msgid "Reoptimize from the backed-up image"
1041
+ msgstr ""
1042
+
1043
+ #: class/view/shortpixel_view.php:1013
1044
+ msgid "Re-optimize"
1045
+ msgstr ""
1046
+
1047
+ #: class/view/shortpixel_view.php:1017 wp-shortpixel.php:278
1048
+ msgid "Restore backup"
1049
+ msgstr ""
1050
+
1051
+ #: class/view/shortpixel_view.php:1030 wp-shortpixel.php:280
1052
+ msgid "Extend Quota"
1053
+ msgstr ""
1054
+
1055
+ #: class/view/shortpixel_view.php:1033 wp-shortpixel.php:281
1056
+ msgid "Check&nbsp;&nbsp;Quota"
1057
+ msgstr ""
1058
+
1059
+ #: class/view/shortpixel-list-table.php:15
1060
+ msgid "Image"
1061
+ msgstr ""
1062
+
1063
+ #. singular name of the listed records
1064
+ #: class/view/shortpixel-list-table.php:16
1065
+ msgid "Images"
1066
+ msgstr ""
1067
+
1068
+ #. pe viitor. $columns['cb'] = '<input type="checkbox" />';
1069
+ #: class/view/shortpixel-list-table.php:29
1070
+ msgid "Filename"
1071
+ msgstr ""
1072
+
1073
+ #: class/view/shortpixel-list-table.php:30
1074
+ msgid "Folder"
1075
+ msgstr ""
1076
+
1077
+ #: class/view/shortpixel-list-table.php:31
1078
+ msgid "Type"
1079
+ msgstr ""
1080
+
1081
+ #: class/view/shortpixel-list-table.php:32
1082
+ msgid "Status"
1083
+ msgstr ""
1084
+
1085
+ #: class/view/shortpixel-list-table.php:33
1086
+ msgid "Options"
1087
+ msgstr ""
1088
+
1089
+ #: class/view/shortpixel-list-table.php:52
1090
+ msgid "Optimize"
1091
+ msgstr ""
1092
+
1093
+ #: class/view/shortpixel-list-table.php:58
1094
+ msgid "Restore"
1095
+ msgstr ""
1096
+
1097
+ #: class/view/shortpixel-list-table.php:61
1098
+ msgid "Re-optimize lossless"
1099
+ msgstr ""
1100
+
1101
+ #: class/view/shortpixel-list-table.php:64
1102
+ msgid "Re-optimize lossy"
1103
+ msgstr ""
1104
+
1105
+ #: class/view/shortpixel-list-table.php:67
1106
+ msgid "Check quota"
1107
+ msgstr ""
1108
+
1109
+ #: class/view/shortpixel-list-table.php:68
1110
+ msgid "View"
1111
+ msgstr ""
1112
+
1113
+ #: class/view/shortpixel-list-table.php:89
1114
+ msgid "Restored"
1115
+ msgstr ""
1116
+
1117
+ #: class/view/shortpixel-list-table.php:103
1118
+ msgid "code"
1119
+ msgstr ""
1120
+
1121
+ #: class/view/shortpixel-list-table.php:111
1122
+ msgid "Lossy"
1123
+ msgstr ""
1124
+
1125
+ #: class/view/shortpixel-list-table.php:112
1126
+ msgid "Keep EXIF"
1127
+ msgstr ""
1128
+
1129
+ #: class/view/shortpixel-list-table.php:113
1130
+ msgid "Preserve CMYK"
1131
+ msgstr ""
1132
+
1133
+ #: class/view/shortpixel-list-table.php:122
1134
+ msgid ""
1135
+ "No images avaliable. Go to <a href=\"options-general.php?page=wp-"
1136
+ "shortpixel#adv-settings\">Advanced Settings</a> to configure additional "
1137
+ "folders to be optimized."
1138
+ msgstr ""
1139
+
1140
+ #: class/view/shortpixel-list-table.php:255
1141
+ msgid "Show more details"
1142
+ msgstr "Mai multe detalii"
1143
+
1144
+ #: class/db/shortpixel-meta-facade.php:165
1145
+ msgid "Error"
1146
+ msgstr ""
1147
+
1148
+ #: class/db/shortpixel-custom-meta-dao.php:187
1149
+ msgid "Folder already added."
1150
+ msgstr ""
1151
+
1152
+ #: class/db/shortpixel-custom-meta-dao.php:191
1153
+ #, php-format
1154
+ msgid ""
1155
+ "The %s folder cannot be processed as it's not inside the root path of your "
1156
+ "website."
1157
+ msgstr ""
1158
+
1159
+ #: class/db/shortpixel-custom-meta-dao.php:200
1160
+ msgid ""
1161
+ "This folder contains Media Library images. To optimize Media Library images "
1162
+ "please go to <a href=\"upload.php?mode=list\">Media Library list view</a> or "
1163
+ "to <a href=\"upload.php?page=wp-short-pixel-bulk\">SortPixel Bulk page</a>."
1164
+ msgstr ""
1165
+
1166
+ #: class/db/shortpixel-custom-meta-dao.php:204
1167
+ msgid "Inserted folder doesn't have an ID!"
1168
+ msgstr ""
1169
+
1170
+ #: class/db/shortpixel-custom-meta-dao.php:224
1171
+ msgid ""
1172
+ "This folder contains the ShortPixel Backups. Please select a different "
1173
+ "folder."
1174
+ msgstr ""
1175
+
1176
+ #. var_dump($allFolders);
1177
+ #: class/db/shortpixel-custom-meta-dao.php:247
1178
+ #, php-format
1179
+ msgid "Folder already included in %s."
1180
+ msgstr ""
1181
+
1182
+ #: class/db/shortpixel-custom-meta-dao.php:250
1183
+ msgid "Folder does not exist."
1184
+ msgstr ""
1185
+
1186
+ #: class/model/shortpixel-folder.php:76 class/model/shortpixel-folder.php:149
1187
+ #, php-format
1188
+ msgid "Folder %s is not writeable. Please check permissions and try again."
1189
+ msgstr ""
1190
+
1191
+ #: wp-shortpixel.php:160
1192
+ msgid "ShortPixel Settings"
1193
+ msgstr "Configurări ShortPixel"
1194
+
1195
+ #. translators: title and menu name for the Other media page
1196
+ #: wp-shortpixel.php:166
1197
+ msgid "Other Media Optimized by ShortPixel"
1198
+ msgstr "Alte Media Optimizate de ShortPixel"
1199
+
1200
+ #: wp-shortpixel.php:166
1201
+ msgid "Other Media"
1202
+ msgstr "Alte Media"
1203
+
1204
+ #. translators: title and menu name for the Bulk Processing page
1205
+ #: wp-shortpixel.php:169
1206
+ msgid "ShortPixel Bulk Process"
1207
+ msgstr "Proceseaza automat cu ShortPixel"
1208
+
1209
+ #: wp-shortpixel.php:169
1210
+ msgid "Bulk ShortPixel"
1211
+ msgstr "Procesor ShortPixel"
1212
+
1213
+ #: wp-shortpixel.php:216
1214
+ msgid "Media alert dismissed"
1215
+ msgstr "Alerta media dezactivată"
1216
+
1217
+ #: wp-shortpixel.php:269
1218
+ msgid "Optimize with ShortPixel"
1219
+ msgstr ""
1220
+
1221
+ #: wp-shortpixel.php:270
1222
+ msgid ""
1223
+ "In order to access the ShortPixel Optimization actions and info, please "
1224
+ "change to {0}List View{1}List View{2}Dismiss{3}"
1225
+ msgstr ""
1226
+ "Pentru a accesa acțiunile și informațiile de optimizare ShortPixel, te rugăm "
1227
+ "schimbă în {0}Modul Listă{1}Modul Listă{2}Închide{3}"
1228
+
1229
+ #: wp-shortpixel.php:271
1230
+ msgid ""
1231
+ "This type of optimization will apply to new uploaded images.\\nImages that "
1232
+ "were already processed will not be re-optimized unless you restart the bulk "
1233
+ "process."
1234
+ msgstr ""
1235
+
1236
+ #: wp-shortpixel.php:272
1237
+ msgid "Are you sure you want to stop optimizing the folder {0}?"
1238
+ msgstr ""
1239
+
1240
+ #: wp-shortpixel.php:275
1241
+ msgid "+{0} thumbnails optimized"
1242
+ msgstr ""
1243
+
1244
+ #: wp-shortpixel.php:276
1245
+ msgid "Optimize {0} thumbnails"
1246
+ msgstr ""
1247
+
1248
+ #: wp-shortpixel.php:277
1249
+ msgid "Reoptimize {0}"
1250
+ msgstr ""
1251
+
1252
+ #: wp-shortpixel.php:279
1253
+ msgid "Get API Key"
1254
+ msgstr ""
1255
+
1256
+ #: wp-shortpixel.php:283
1257
+ msgid "This content is not processable."
1258
+ msgstr ""
1259
+
1260
+ #: wp-shortpixel.php:284
1261
+ msgid "Image waiting to optimize thumbnails"
1262
+ msgstr ""
1263
+
1264
+ #. translators: toolbar icon tooltip
1265
+ #: wp-shortpixel.php:297
1266
+ msgid "ShortPixel optimizing..."
1267
+ msgstr ""
1268
+
1269
+ #. translators: toolbar icon tooltip
1270
+ #: wp-shortpixel.php:308
1271
+ msgid "ShortPixel quota exceeded. Click for details."
1272
+ msgstr ""
1273
+
1274
+ #: wp-shortpixel.php:564
1275
+ msgid "Missing API Key"
1276
+ msgstr ""
1277
+
1278
+ #. translators: console message Empty queue 1234 -> 1234
1279
+ #: wp-shortpixel.php:614
1280
+ msgid "Empty queue "
1281
+ msgstr ""
1282
+
1283
+ #: wp-shortpixel.php:740
1284
+ msgid " Retry limit reached. Skipping file ID "
1285
+ msgstr ""
1286
+
1287
+ #: wp-shortpixel.php:835
1288
+ msgid "NextGen image not found"
1289
+ msgstr ""
1290
+
1291
+ #: wp-shortpixel.php:1004 wp-shortpixel.php:1018
1292
+ msgid "Could not restore from backup: "
1293
+ msgstr ""
1294
+
1295
+ #: wp-shortpixel.php:1037
1296
+ msgid "No thumbnails to optimize for ID: "
1297
+ msgstr ""
1298
+
1299
+ #: wp-shortpixel.php:1037
1300
+ msgid "Please optimize image for ID: "
1301
+ msgstr ""
1302
+
1303
+ #: wp-shortpixel.php:1142
1304
+ msgid "Refresh custom folders content"
1305
+ msgstr ""
1306
+
1307
+ #: wp-shortpixel.php:1143
1308
+ msgid "Refresh folders"
1309
+ msgstr ""
1310
+
1311
+ #: wp-shortpixel.php:1146
1312
+ msgid "Other Media optimized by ShortPixel"
1313
+ msgstr ""
1314
+
1315
+ #: wp-shortpixel.php:1322 wp-shortpixel.php:1413
1316
+ msgid "You do not have sufficient permissions to access this page."
1317
+ msgstr ""
1318
+
1319
+ #: wp-shortpixel.php:1451
1320
+ #, php-format
1321
+ msgid ""
1322
+ "The key you provided has %s characters. The API key should have 20 "
1323
+ "characters, letters and numbers only."
1324
+ msgstr ""
1325
+
1326
+ #: wp-shortpixel.php:1453
1327
+ msgid ""
1328
+ "Please check that the API key is the same as the one you received in your "
1329
+ "confirmation email."
1330
+ msgstr ""
1331
+
1332
+ #: wp-shortpixel.php:1455
1333
+ msgid "If this problem persists, please contact us at "
1334
+ msgstr ""
1335
+
1336
+ #: wp-shortpixel.php:1457
1337
+ msgid " or "
1338
+ msgstr ""
1339
+
1340
+ #: wp-shortpixel.php:1475
1341
+ msgid ""
1342
+ "API Key is valid but your site is not accessible from our servers. Please "
1343
+ "make sure that your server is accessible from the Internet before using the "
1344
+ "API or otherwise we won't be able to optimize them."
1345
+ msgstr ""
1346
+
1347
+ #: wp-shortpixel.php:1478
1348
+ msgid ""
1349
+ "API Key valid! <br>You seem to be running a multisite, please note that API "
1350
+ "Key can also be configured in wp-config.php like this:"
1351
+ msgstr ""
1352
+
1353
+ #: wp-shortpixel.php:1481
1354
+ msgid "API Key valid!"
1355
+ msgstr ""
1356
+
1357
+ #: wp-shortpixel.php:1488
1358
+ #, php-format
1359
+ msgid ""
1360
+ "There is something preventing us to create a new folder for backing up your "
1361
+ "original files.<BR>Please make sure that folder <b>%s</b> has the necessary "
1362
+ "write and read rights."
1363
+ msgstr ""
1364
+
1365
+ #: wp-shortpixel.php:1536
1366
+ msgid "Folder added successfully."
1367
+ msgstr ""
1368
+
1369
+ #: wp-shortpixel.php:1712
1370
+ msgid ""
1371
+ "API Key could not be validated due to a connectivity error.<BR>Your firewall "
1372
+ "may be blocking us. Please contact your hosting provider and ask them to "
1373
+ "allow connections from your site to IP 176.9.106.46.<BR> If you still cannot "
1374
+ "validate your API Key after this, please <a href=\"https://shortpixel.com/"
1375
+ "contact\" target=\"_blank\">contact us</a> and we will try to help. "
1376
+ msgstr ""
1377
+
1378
+ #: wp-shortpixel.php:1713 wp-shortpixel.php:1714
1379
+ msgid "Information unavailable. Please check your API key."
1380
+ msgstr ""
1381
+
1382
+ #: wp-shortpixel.php:1789
1383
+ msgid "PDF not processed."
1384
+ msgstr ""
1385
+
1386
+ #: wp-shortpixel.php:1820 wp-shortpixel.php:1822
1387
+ msgid "Cannot write optimized file"
1388
+ msgstr ""
1389
+
1390
+ #: wp-shortpixel.php:1823
1391
+ msgid "Why?"
1392
+ msgstr ""
1393
+
1394
+ #: wp-shortpixel.php:1831
1395
+ msgid "Image does not exist"
1396
+ msgstr ""
1397
+
1398
+ #: wp-shortpixel.php:1835
1399
+ msgid "Image waiting to be processed."
1400
+ msgstr ""
1401
+
1402
+ #: wp-shortpixel.php:1853
1403
+ msgid "ShortPixel Statistics"
1404
+ msgstr ""
1405
+
1406
+ #: wp-shortpixel.php:1871
1407
+ msgid "ShortPixel Compression"
1408
+ msgstr ""
1409
+
1410
+ #: shortpixel_api.php:142
1411
+ msgid "The file(s) do not exist on disk."
1412
+ msgstr ""
1413
+
1414
+ #: shortpixel_api.php:157 shortpixel_api.php:168
1415
+ msgid "Timed out while processing."
1416
+ msgstr ""
1417
+
1418
+ #: shortpixel_api.php:161
1419
+ msgid "Image ID"
1420
+ msgstr ""
1421
+
1422
+ #: shortpixel_api.php:161
1423
+ msgid "Media ID"
1424
+ msgstr ""
1425
+
1426
+ #: shortpixel_api.php:162
1427
+ msgid "Skip this image, try the next one."
1428
+ msgstr ""
1429
+
1430
+ #. send requests to API
1431
+ #. response <> 200 -> there was an error apparently?
1432
+ #: shortpixel_api.php:179 shortpixel_api.php:212 shortpixel_api.php:215
1433
+ msgid "There was an error and your request was not processed."
1434
+ msgstr ""
1435
+
1436
+ #: shortpixel_api.php:231
1437
+ msgid "Unecognized API response. Please contact support."
1438
+ msgstr ""
1439
+
1440
+ #: shortpixel_api.php:238
1441
+ msgid "Quota exceeded."
1442
+ msgstr ""
1443
+
1444
+ #: shortpixel_api.php:326
1445
+ msgid "Error downloading file"
1446
+ msgstr ""
1447
+
1448
+ #: shortpixel_api.php:334
1449
+ #, php-format
1450
+ msgid ""
1451
+ "Error downloading file - incorrect file size (downloaded: %s, correct: %s )"
1452
+ msgstr ""
1453
+
1454
+ #: shortpixel_api.php:337
1455
+ msgid "Unable to locate downloaded file"
1456
+ msgstr ""
1457
+
1458
+ #. array with final paths for these files
1459
+ #. creates backup folder if it doesn't exist
1460
+ #: shortpixel_api.php:399
1461
+ msgid "Backup folder does not exist and it cannot be created"
1462
+ msgstr ""
1463
+
1464
+ #. file couldn't be saved in backup folder
1465
+ #: shortpixel_api.php:419
1466
+ #, php-format
1467
+ msgid "Cannot save file <i>%s</i> in backup directory"
1468
+ msgstr ""
1469
+
1470
+ #. cannot write to the backup dir, return with an error
1471
+ #: shortpixel_api.php:428
1472
+ msgid "Cannot save file in backup directory"
1473
+ msgstr ""
1474
+
1475
+ #: shortpixel_api.php:491
1476
+ #, php-format
1477
+ msgid "Optimized version of %s file(s) couldn't be updated."
1478
+ msgstr ""
lang/shortpixel.pot ADDED
@@ -0,0 +1,1461 @@
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
1
+ # SOME DESCRIPTIVE TITLE.
2
+ # Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
3
+ # This file is distributed under the same license as the PACKAGE package.
4
+ # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
5
+ #
6
+ #, fuzzy
7
+ msgid ""
8
+ msgstr ""
9
+ "Project-Id-Version: PACKAGE VERSION\n"
10
+ "Report-Msgid-Bugs-To: \n"
11
+ "POT-Creation-Date: 2016-11-30 16:23+0100\n"
12
+ "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
13
+ "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
14
+ "Language-Team: LANGUAGE <LL@li.org>\n"
15
+ "Language: \n"
16
+ "MIME-Version: 1.0\n"
17
+ "Content-Type: text/plain; charset=UTF-8\n"
18
+ "Content-Transfer-Encoding: 8bit\n"
19
+
20
+ #: class/view/shortpixel_view.php:23 class/view/shortpixel_view.php:417
21
+ msgid "Average reduction"
22
+ msgstr ""
23
+
24
+ #. translators: header of the alert box
25
+ #: class/view/shortpixel_view.php:33
26
+ msgid "Quota Exceeded"
27
+ msgstr ""
28
+
29
+ #. translators: body of the alert box
30
+ #: class/view/shortpixel_view.php:35
31
+ #, php-format
32
+ msgid ""
33
+ "The plugin has optimized <strong>%s images</strong> and stopped because it "
34
+ "reached the available quota limit."
35
+ msgstr ""
36
+
37
+ #: class/view/shortpixel_view.php:39
38
+ #, php-format
39
+ msgid ""
40
+ "<strong>%s images and %s thumbnails</strong> are not yet optimized by "
41
+ "ShortPixel."
42
+ msgstr ""
43
+
44
+ #: class/view/shortpixel_view.php:44
45
+ msgid "Upgrade"
46
+ msgstr ""
47
+
48
+ #: class/view/shortpixel_view.php:45
49
+ msgid "Confirm New Quota"
50
+ msgstr ""
51
+
52
+ #: class/view/shortpixel_view.php:47
53
+ msgid "Get more image credits by referring ShortPixel to your friends!"
54
+ msgstr ""
55
+
56
+ #: class/view/shortpixel_view.php:49
57
+ msgid "Check your account"
58
+ msgstr ""
59
+
60
+ #: class/view/shortpixel_view.php:50
61
+ msgid ""
62
+ "for your unique referral link. For each user that joins, you will receive "
63
+ "+100 additional image credits/month."
64
+ msgstr ""
65
+
66
+ #: class/view/shortpixel_view.php:58
67
+ msgid ""
68
+ "In order to start the optimization process, you need to validate your API "
69
+ "Key in the <a href=\"options-general.php?page=wp-shortpixel\">ShortPixel "
70
+ "Settings</a> page in your WordPress Admin."
71
+ msgstr ""
72
+
73
+ #: class/view/shortpixel_view.php:61
74
+ msgid ""
75
+ "If you don’t have an API Key, you can get one delivered to your inbox, for "
76
+ "free."
77
+ msgstr ""
78
+
79
+ #: class/view/shortpixel_view.php:62
80
+ msgid ""
81
+ "Please <a href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">sign "
82
+ "up to get your API key.</a>"
83
+ msgstr ""
84
+
85
+ #: class/view/shortpixel_view.php:70
86
+ msgid "Dismiss"
87
+ msgstr ""
88
+
89
+ #: class/view/shortpixel_view.php:72
90
+ msgid "ShortPixel Optimization"
91
+ msgstr ""
92
+
93
+ #: class/view/shortpixel_view.php:75
94
+ msgid ""
95
+ "Action needed. Please <a href='https://shortpixel.com/wp-apikey' "
96
+ "target='_blank'>get your API key</a> to activate your ShortPixel plugin."
97
+ msgstr ""
98
+
99
+ #: class/view/shortpixel_view.php:78
100
+ msgid ""
101
+ "Your image gallery is not optimized. It takes 2 minutes to <a href='https://"
102
+ "shortpixel.com/wp-apikey' target='_blank'>get your API key</a> and activate "
103
+ "your ShortPixel plugin."
104
+ msgstr ""
105
+
106
+ #: class/view/shortpixel_view.php:102
107
+ msgid "Your media library"
108
+ msgstr ""
109
+
110
+ #: class/view/shortpixel_view.php:103
111
+ msgid "Original images"
112
+ msgstr ""
113
+
114
+ #: class/view/shortpixel_view.php:105
115
+ msgid "Smaller thumbnails"
116
+ msgstr ""
117
+
118
+ #: class/view/shortpixel_view.php:109 class/view/shortpixel_view.php:343
119
+ msgid "Include thumbnails"
120
+ msgstr ""
121
+
122
+ #: class/view/shortpixel_view.php:112
123
+ msgid "Total images"
124
+ msgstr ""
125
+
126
+ #: class/view/shortpixel_view.php:114
127
+ msgid "Already optimized originals"
128
+ msgstr ""
129
+
130
+ #: class/view/shortpixel_view.php:116
131
+ msgid "Already optimized thumbnails"
132
+ msgstr ""
133
+
134
+ #: class/view/shortpixel_view.php:119 class/view/shortpixel_view.php:124
135
+ msgid "Total to be optimized"
136
+ msgstr ""
137
+
138
+ #: class/view/shortpixel_view.php:123
139
+ msgid "Your custom folders"
140
+ msgstr ""
141
+
142
+ #: class/view/shortpixel_view.php:137
143
+ #, php-format
144
+ msgid ""
145
+ "<span class=\"label\">Start Optimizing</span><br> <span class=\"total\">%s</"
146
+ "span> images"
147
+ msgstr ""
148
+
149
+ #: class/view/shortpixel_view.php:148
150
+ msgid ""
151
+ "Nothing to optimize! The images that you add to Media Gallery will be "
152
+ "automatically optimized after upload."
153
+ msgstr ""
154
+
155
+ #: class/view/shortpixel_view.php:157
156
+ msgid ""
157
+ "After you start the bulk process, in order for the optimization to run, you "
158
+ "must keep this page open and your computer running. If you close the page "
159
+ "for whatever reason, just turn back to it and the bulk process will resume."
160
+ msgstr ""
161
+
162
+ #: class/view/shortpixel_view.php:163
163
+ msgid "What are Thumbnails?"
164
+ msgstr ""
165
+
166
+ #: class/view/shortpixel_view.php:164
167
+ msgid ""
168
+ "Thumbnails are smaller images usually generated by your WP theme. Most "
169
+ "themes generate between 3 and 6 thumbnails for each Media Library image."
170
+ msgstr ""
171
+
172
+ #: class/view/shortpixel_view.php:165
173
+ msgid ""
174
+ "The thumbnails also generate traffic on your website pages and they "
175
+ "influence your website's speed."
176
+ msgstr ""
177
+
178
+ #: class/view/shortpixel_view.php:166
179
+ msgid ""
180
+ "It's highly recommended that you include thumbnails in the optimization as "
181
+ "well."
182
+ msgstr ""
183
+
184
+ #: class/view/shortpixel_view.php:169
185
+ msgid "How does it work?"
186
+ msgstr ""
187
+
188
+ #: class/view/shortpixel_view.php:170
189
+ msgid ""
190
+ "The plugin processes images starting with the newest ones you uploaded in "
191
+ "your Media Library."
192
+ msgstr ""
193
+
194
+ #: class/view/shortpixel_view.php:171
195
+ msgid "You will be able to pause the process anytime."
196
+ msgstr ""
197
+
198
+ #: class/view/shortpixel_view.php:172
199
+ msgid ""
200
+ "<p>Your original images will be stored in a separate back-up folder.</p>"
201
+ msgstr ""
202
+
203
+ #: class/view/shortpixel_view.php:173
204
+ msgid ""
205
+ "You can watch the images being processed live, right here, after you start "
206
+ "optimizing."
207
+ msgstr ""
208
+
209
+ #. bulk is paused
210
+ #: class/view/shortpixel_view.php:179
211
+ msgid "Please see below the optimization status so far:"
212
+ msgstr ""
213
+
214
+ #: class/view/shortpixel_view.php:182
215
+ #, php-format
216
+ msgid "%d images and %d thumbnails are not yet optimized by ShortPixel."
217
+ msgstr ""
218
+
219
+ #: class/view/shortpixel_view.php:187
220
+ msgid ""
221
+ "You can continue optimizing your Media Gallery from where you left, by "
222
+ "clicking the Resume processing button. Already optimized images will not be "
223
+ "reprocessed."
224
+ msgstr ""
225
+
226
+ #: class/view/shortpixel_view.php:197
227
+ msgid "Congratulations!"
228
+ msgstr ""
229
+
230
+ #: class/view/shortpixel_view.php:198
231
+ msgid "Your media library has been successfully optimized!"
232
+ msgstr ""
233
+
234
+ #: class/view/shortpixel_view.php:199
235
+ msgid "Summary"
236
+ msgstr ""
237
+
238
+ #: class/view/shortpixel_view.php:205
239
+ msgid "Share your optimization results:"
240
+ msgstr ""
241
+
242
+ #: class/view/shortpixel_view.php:225
243
+ msgid "I just optimized my images by "
244
+ msgstr ""
245
+
246
+ #: class/view/shortpixel_view.php:227
247
+ msgid "I just optimized my images "
248
+ msgstr ""
249
+
250
+ #: class/view/shortpixel_view.php:230
251
+ msgid "with @ShortPixel, a great plugin for increasing #WordPress page speed:"
252
+ msgstr ""
253
+
254
+ #: class/view/shortpixel_view.php:231
255
+ msgid "Tweet"
256
+ msgstr ""
257
+
258
+ #: class/view/shortpixel_view.php:257
259
+ msgid "Please rate us!"
260
+ msgstr ""
261
+
262
+ #: class/view/shortpixel_view.php:267
263
+ #, php-format
264
+ msgid ""
265
+ "Go to the ShortPixel <a href=\"%soptions-general.php?page=wp-shortpixel#stats"
266
+ "\">Stats</a> and see all your websites' optimized stats. Download your "
267
+ "detailed <a href=\"https://api.shortpixel.com/v2/report.php?key=%s"
268
+ "\">Optimization Report</a> to check your image optimization statistics for "
269
+ "the last 40 days."
270
+ msgstr ""
271
+
272
+ #: class/view/shortpixel_view.php:275
273
+ msgid ""
274
+ "The following images could not be processed because of their limited write "
275
+ "rights. This usually happens if you have changed your hosting provider. "
276
+ "Please restart the optimization process after you granted write rights to "
277
+ "all the files below."
278
+ msgstr ""
279
+
280
+ #: class/view/shortpixel_view.php:290 wp-shortpixel.php:1755
281
+ #: wp-shortpixel.php:1756 wp-shortpixel.php:1757 wp-shortpixel.php:1758
282
+ msgid " images"
283
+ msgstr ""
284
+
285
+ #: class/view/shortpixel_view.php:291
286
+ msgid " and"
287
+ msgstr ""
288
+
289
+ #: class/view/shortpixel_view.php:292
290
+ msgid " thumbnails"
291
+ msgstr ""
292
+
293
+ #: class/view/shortpixel_view.php:293
294
+ msgid " are not yet optimized by ShortPixel."
295
+ msgstr ""
296
+
297
+ #: class/view/shortpixel_view.php:295
298
+ msgid "Some have errors:"
299
+ msgstr ""
300
+
301
+ #: class/view/shortpixel_view.php:318
302
+ #, php-format
303
+ msgid ""
304
+ "%s images and %s thumbnails were optimized <strong>%s</strong>. You can re-"
305
+ "optimize <strong>%s</strong> the ones that have backup."
306
+ msgstr ""
307
+
308
+ #: class/view/shortpixel_view.php:323
309
+ #, php-format
310
+ msgid ""
311
+ "%s images were optimized <strong>%s</strong>. You can re-optimize <strong>"
312
+ "%s</strong> the ones that have backup. "
313
+ msgstr ""
314
+
315
+ #: class/view/shortpixel_view.php:326
316
+ msgid " thumbnails will be restored to originals."
317
+ msgstr ""
318
+
319
+ #: class/view/shortpixel_view.php:331
320
+ msgid ""
321
+ "Restart the optimization process for these images by clicking the button "
322
+ "below."
323
+ msgstr ""
324
+
325
+ #: class/view/shortpixel_view.php:333
326
+ msgid ""
327
+ "Restart the optimization process for new images added to your library by "
328
+ "clicking the button below."
329
+ msgstr ""
330
+
331
+ #: class/view/shortpixel_view.php:335
332
+ #, php-format
333
+ msgid "Already <strong>%s</strong> optimized images will not be reprocessed."
334
+ msgstr ""
335
+
336
+ #: class/view/shortpixel_view.php:337
337
+ msgid ""
338
+ "Please note that reoptimizing images as <strong>lossy/lossless</strong> may "
339
+ "use additional credits."
340
+ msgstr ""
341
+
342
+ #: class/view/shortpixel_view.php:338
343
+ msgid "More info"
344
+ msgstr ""
345
+
346
+ #: class/view/shortpixel_view.php:344
347
+ msgid "Restart Optimizing"
348
+ msgstr ""
349
+
350
+ #: class/view/shortpixel_view.php:355
351
+ msgid "Bulk Image Optimization by ShortPixel"
352
+ msgstr ""
353
+
354
+ #: class/view/shortpixel_view.php:361
355
+ msgid "Lengthy operation in progress:"
356
+ msgstr ""
357
+
358
+ #: class/view/shortpixel_view.php:362
359
+ msgid "Optimizing image"
360
+ msgstr ""
361
+
362
+ #: class/view/shortpixel_view.php:369
363
+ msgid "Error processing file:"
364
+ msgstr ""
365
+
366
+ #: class/view/shortpixel_view.php:375
367
+ msgid "Just optimized:"
368
+ msgstr ""
369
+
370
+ #: class/view/shortpixel_view.php:381
371
+ msgid "Original image"
372
+ msgstr ""
373
+
374
+ #: class/view/shortpixel_view.php:385
375
+ msgid "Optimized image"
376
+ msgstr ""
377
+
378
+ #. translators: percent follows
379
+ #: class/view/shortpixel_view.php:389
380
+ msgid "Optimized by:"
381
+ msgstr ""
382
+
383
+ #: class/view/shortpixel_view.php:411
384
+ msgid "Remaining credits"
385
+ msgstr ""
386
+
387
+ #: class/view/shortpixel_view.php:427 class/view/shortpixel_view.php:436
388
+ msgid "Media Library"
389
+ msgstr ""
390
+
391
+ #: class/view/shortpixel_view.php:428
392
+ msgid "and"
393
+ msgstr ""
394
+
395
+ #: class/view/shortpixel_view.php:429
396
+ msgid "Custom folders"
397
+ msgstr ""
398
+
399
+ #: class/view/shortpixel_view.php:429
400
+ msgid "optimization in progress ..."
401
+ msgstr ""
402
+
403
+ #: class/view/shortpixel_view.php:430
404
+ msgid "Bulk optimization has started."
405
+ msgstr ""
406
+
407
+ #: class/view/shortpixel_view.php:431
408
+ #, php-format
409
+ msgid ""
410
+ "This process will take some time, depending on the number of images in your "
411
+ "library. In the meantime, you can continue using \n"
412
+ " the admin as usual, <a href=\"%s\" target=\"_blank\">in "
413
+ "a different browser window or tab</a>.<br>\n"
414
+ " However, <strong>if you close this window, the bulk "
415
+ "processing will pause</strong> until you open the media gallery or the "
416
+ "ShortPixel bulk page again."
417
+ msgstr ""
418
+
419
+ #: class/view/shortpixel_view.php:436
420
+ msgid "and Custom folders"
421
+ msgstr ""
422
+
423
+ #: class/view/shortpixel_view.php:436
424
+ msgid "optimization paused"
425
+ msgstr ""
426
+
427
+ #: class/view/shortpixel_view.php:437
428
+ msgid "Bulk processing is paused until you resume the optimization process."
429
+ msgstr ""
430
+
431
+ #. now we display the action buttons always when a type of bulk is running
432
+ #: class/view/shortpixel_view.php:454
433
+ msgid "Pause"
434
+ msgstr ""
435
+
436
+ #: class/view/shortpixel_view.php:454
437
+ msgid "Resume processing"
438
+ msgstr ""
439
+
440
+ #: class/view/shortpixel_view.php:457
441
+ msgid "Only other media"
442
+ msgstr ""
443
+
444
+ #: class/view/shortpixel_view.php:457
445
+ msgid "Process only the other media, skipping the Media Library"
446
+ msgstr ""
447
+
448
+ #: class/view/shortpixel_view.php:461
449
+ msgid "Manage custom folders"
450
+ msgstr ""
451
+
452
+ #: class/view/shortpixel_view.php:469
453
+ msgid "Processed Images and PDFs:"
454
+ msgstr ""
455
+
456
+ #: class/view/shortpixel_view.php:470
457
+ msgid "Processed Thumbnails:"
458
+ msgstr ""
459
+
460
+ #: class/view/shortpixel_view.php:471
461
+ msgid "Total files processed:"
462
+ msgstr ""
463
+
464
+ #: class/view/shortpixel_view.php:472
465
+ #, php-format
466
+ msgid "Minus files with <5% optimization (free):"
467
+ msgstr ""
468
+
469
+ #: class/view/shortpixel_view.php:473
470
+ msgid "Used quota:"
471
+ msgstr ""
472
+
473
+ #: class/view/shortpixel_view.php:475
474
+ msgid "Average optimization:"
475
+ msgstr ""
476
+
477
+ #: class/view/shortpixel_view.php:476
478
+ msgid "Saved space:"
479
+ msgstr ""
480
+
481
+ #. wp_enqueue_script('jquery.idTabs.js', plugins_url('/js/jquery.idTabs.js',__FILE__) );
482
+ #: class/view/shortpixel_view.php:502
483
+ msgid "ShortPixel Plugin Settings"
484
+ msgstr ""
485
+
486
+ #: class/view/shortpixel_view.php:505
487
+ msgid "Upgrade now"
488
+ msgstr ""
489
+
490
+ #: class/view/shortpixel_view.php:507
491
+ msgid "Support"
492
+ msgstr ""
493
+
494
+ #: class/view/shortpixel_view.php:525
495
+ msgid "General"
496
+ msgstr ""
497
+
498
+ #: class/view/shortpixel_view.php:530
499
+ msgid "Advanced"
500
+ msgstr ""
501
+
502
+ #. the span is a trick to keep the sections ordered as nth-child in styles: 1,2,3,4 (otherwise the third section would be nth-child(2) too, because of the form)
503
+ #: class/view/shortpixel_view.php:537
504
+ msgid "Statistics"
505
+ msgstr ""
506
+
507
+ #: class/view/shortpixel_view.php:545
508
+ msgid "WP Resources"
509
+ msgstr ""
510
+
511
+ #: class/view/shortpixel_view.php:546
512
+ msgid "Please reload"
513
+ msgstr ""
514
+
515
+ #: class/view/shortpixel_view.php:579
516
+ #, php-format
517
+ msgid ""
518
+ "New images uploaded to the Media Library will be optimized automatically.<br/"
519
+ ">If you have existing images you would like to optimize, you can use the <a "
520
+ "href=\"%supload.php?page=wp-short-pixel-bulk\">Bulk Optimization Tool</a>."
521
+ msgstr ""
522
+
523
+ #: class/view/shortpixel_view.php:582
524
+ msgid "Step 1:"
525
+ msgstr ""
526
+
527
+ #: class/view/shortpixel_view.php:583
528
+ #, php-format
529
+ msgid ""
530
+ "If you don't have an API Key, <a href=\"https://shortpixel.com/wp-apikey%s\" "
531
+ "target=\"_blank\">sign up here.</a> It's free and it only takes one minute, "
532
+ "we promise!"
533
+ msgstr ""
534
+
535
+ #: class/view/shortpixel_view.php:584
536
+ msgid "Step 2:"
537
+ msgstr ""
538
+
539
+ #: class/view/shortpixel_view.php:585
540
+ msgid "Please enter here the API Key you received by email and press Validate."
541
+ msgstr ""
542
+
543
+ #: class/view/shortpixel_view.php:591
544
+ msgid "API Key:"
545
+ msgstr ""
546
+
547
+ #: class/view/shortpixel_view.php:601
548
+ msgid "Multisite API Key"
549
+ msgstr ""
550
+
551
+ #: class/view/shortpixel_view.php:604
552
+ msgid "Validate the provided API key"
553
+ msgstr ""
554
+
555
+ #: class/view/shortpixel_view.php:605
556
+ msgid "Validate"
557
+ msgstr ""
558
+
559
+ #: class/view/shortpixel_view.php:607
560
+ msgid "Key defined in wp-config.php."
561
+ msgstr ""
562
+
563
+ #. if invalid key we display the link to the API Key
564
+ #. if valid key we display the rest of the options
565
+ #: class/view/shortpixel_view.php:618
566
+ msgid "Compression type:"
567
+ msgstr ""
568
+
569
+ #: class/view/shortpixel_view.php:622
570
+ msgid "Lossy (recommended)"
571
+ msgstr ""
572
+
573
+ #: class/view/shortpixel_view.php:623
574
+ msgid ""
575
+ "<b>Lossy compression: </b>lossy has a better compression rate than lossless "
576
+ "compression.</br>The resulting image is identical with the original to the "
577
+ "human eye. You can run a test for free "
578
+ msgstr ""
579
+
580
+ #: class/view/shortpixel_view.php:624 wp-shortpixel.php:1458
581
+ msgid "here"
582
+ msgstr ""
583
+
584
+ #: class/view/shortpixel_view.php:626 class/view/shortpixel-list-table.php:111
585
+ msgid "Lossless"
586
+ msgstr ""
587
+
588
+ #: class/view/shortpixel_view.php:628
589
+ msgid ""
590
+ "<b>Lossless compression: </b> the shrunk image will be identical with the "
591
+ "original and smaller in size.</br>In some rare cases you will need to use \n"
592
+ " this type of compression. Some technical drawings or "
593
+ "images from vector graphics are possible situations."
594
+ msgstr ""
595
+
596
+ #: class/view/shortpixel_view.php:638
597
+ msgid "Also include thumbnails:"
598
+ msgstr ""
599
+
600
+ #: class/view/shortpixel_view.php:640
601
+ msgid "Apply compression also to <strong>image thumbnails.</strong> "
602
+ msgstr ""
603
+
604
+ #: class/view/shortpixel_view.php:641
605
+ msgid "thumbnails to optimize"
606
+ msgstr ""
607
+
608
+ #: class/view/shortpixel_view.php:643
609
+ msgid ""
610
+ "It is highly recommended that you optimize the thumbnails as they are "
611
+ "usually the images most viewed by end users and can generate most traffic."
612
+ "<br>Please note that thumbnails count up to your total quota."
613
+ msgstr ""
614
+
615
+ #: class/view/shortpixel_view.php:648
616
+ msgid "Image backup"
617
+ msgstr ""
618
+
619
+ #: class/view/shortpixel_view.php:650
620
+ msgid "Save and keep a backup of your original images in a separate folder."
621
+ msgstr ""
622
+
623
+ #: class/view/shortpixel_view.php:651
624
+ msgid ""
625
+ "You <strong>need to have backup active</strong> in order to be able to "
626
+ "restore images to originals or to convert from Lossy to Lossless and back."
627
+ msgstr ""
628
+
629
+ #: class/view/shortpixel_view.php:655
630
+ msgid "CMYK to RGB conversion"
631
+ msgstr ""
632
+
633
+ #: class/view/shortpixel_view.php:657
634
+ msgid "Adjust your images for computer and mobile screen display."
635
+ msgstr ""
636
+
637
+ #: class/view/shortpixel_view.php:658
638
+ msgid ""
639
+ "Images for the web only need RGB format and converting them from CMYK to RGB "
640
+ "makes them smaller."
641
+ msgstr ""
642
+
643
+ #: class/view/shortpixel_view.php:662
644
+ msgid "Remove EXIF"
645
+ msgstr ""
646
+
647
+ #: class/view/shortpixel_view.php:664
648
+ msgid "Remove the EXIF tag of the image (recommended)."
649
+ msgstr ""
650
+
651
+ #: class/view/shortpixel_view.php:665
652
+ msgid ""
653
+ "EXIF is a set of various pieces of information that are automatically "
654
+ "embedded into the image upon creation. This can include GPS position, camera "
655
+ "manufacturer, date and time, etc. \n"
656
+ " Unless you really need that data to be "
657
+ "preserved, we recommend removing it as it can lead to <a href=\"http://blog."
658
+ "shortpixel.com/how-much-smaller-can-be-images-without-exif-icc\" target="
659
+ "\"_blank\">better compression rates</a>."
660
+ msgstr ""
661
+
662
+ #: class/view/shortpixel_view.php:670
663
+ msgid "Resize large images"
664
+ msgstr ""
665
+
666
+ #: class/view/shortpixel_view.php:673
667
+ msgid "to maximum"
668
+ msgstr ""
669
+
670
+ #: class/view/shortpixel_view.php:675
671
+ msgid "pixels wide &times;"
672
+ msgstr ""
673
+
674
+ #: class/view/shortpixel_view.php:677
675
+ msgid ""
676
+ "pixels high (original aspect ratio is preserved and image is not cropped)"
677
+ msgstr ""
678
+
679
+ #: class/view/shortpixel_view.php:679
680
+ #, php-format
681
+ msgid ""
682
+ "Recommended for large photos, like the ones taken with your phone. Saved "
683
+ "space can go up to 80% or more after resizing."
684
+ msgstr ""
685
+
686
+ #: class/view/shortpixel_view.php:683
687
+ msgid ""
688
+ "Sizes will be greater or equal to the corresponding value. For example, if "
689
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
690
+ "resized to 1000x1500px while an image of 3000x2000px will be resized to "
691
+ "1800x1200px"
692
+ msgstr ""
693
+
694
+ #: class/view/shortpixel_view.php:685
695
+ msgid ""
696
+ "Sizes will be smaller or equal to the corresponding value. For example, if "
697
+ "you set the resize dimensions at 1000x1200, an image of 2000x3000px will be "
698
+ "resized to 800x1200px while an image of 3000x2000px will be resized to "
699
+ "1000x667px"
700
+ msgstr ""
701
+
702
+ #: class/view/shortpixel_view.php:692 class/view/shortpixel_view.php:847
703
+ msgid "Save Changes"
704
+ msgstr ""
705
+
706
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
707
+ msgid "Save and go to the Bulk Processing page"
708
+ msgstr ""
709
+
710
+ #: class/view/shortpixel_view.php:693 class/view/shortpixel_view.php:848
711
+ #: wp-shortpixel.php:1517 wp-shortpixel.php:1518
712
+ msgid "Save and Go to Bulk Process"
713
+ msgstr ""
714
+
715
+ #: class/view/shortpixel_view.php:716
716
+ msgid "Please enter your API key in the General tab first."
717
+ msgstr ""
718
+
719
+ #. if valid key we display the rest of the options
720
+ #: class/view/shortpixel_view.php:721
721
+ msgid "Additional media folders"
722
+ msgstr ""
723
+
724
+ #: class/view/shortpixel_view.php:726
725
+ msgid "Folder name"
726
+ msgstr ""
727
+
728
+ #: class/view/shortpixel_view.php:727
729
+ msgid "Type &amp;<br>Status"
730
+ msgstr ""
731
+
732
+ #: class/view/shortpixel_view.php:728
733
+ msgid "Files"
734
+ msgstr ""
735
+
736
+ #: class/view/shortpixel_view.php:729
737
+ msgid "Last change"
738
+ msgstr ""
739
+
740
+ #: class/view/shortpixel_view.php:738 class/view/shortpixel_view.php:743
741
+ #: class/view/shortpixel_view.php:745 class/view/shortpixel_view.php:747
742
+ msgid "Empty"
743
+ msgstr ""
744
+
745
+ #: class/view/shortpixel_view.php:740 class/view/shortpixel_view.php:745
746
+ #: class/view/shortpixel_view.php:747
747
+ msgid "Optimized"
748
+ msgstr ""
749
+
750
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
751
+ #: class/view/shortpixel-list-table.php:97
752
+ msgid "Pending"
753
+ msgstr ""
754
+
755
+ #: class/view/shortpixel_view.php:741 class/view/shortpixel_view.php:748
756
+ #: class/view/shortpixel-list-table.php:99
757
+ msgid "Waiting"
758
+ msgstr ""
759
+
760
+ #: class/view/shortpixel_view.php:745
761
+ msgid "Stop monitoring"
762
+ msgstr ""
763
+
764
+ #: class/view/shortpixel_view.php:745
765
+ msgid "Stop optimizing"
766
+ msgstr ""
767
+
768
+ #: class/view/shortpixel_view.php:749
769
+ msgid "Failed"
770
+ msgstr ""
771
+
772
+ #: class/view/shortpixel_view.php:771
773
+ msgid ""
774
+ "Full folder refresh, check each file of the folder if it changed since it "
775
+ "was optimized. Might take up to 1 min. for big folders."
776
+ msgstr ""
777
+
778
+ #: class/view/shortpixel_view.php:772
779
+ msgid "Refresh"
780
+ msgstr ""
781
+
782
+ #: class/view/shortpixel_view.php:783
783
+ msgid "Select the images folder on your server."
784
+ msgstr ""
785
+
786
+ #: class/view/shortpixel_view.php:784
787
+ msgid "Select ..."
788
+ msgstr ""
789
+
790
+ #: class/view/shortpixel_view.php:786
791
+ msgid "Add Folder"
792
+ msgstr ""
793
+
794
+ #: class/view/shortpixel_view.php:788
795
+ msgid ""
796
+ "Use the Select... button to select site folders. ShortPixel will optimize "
797
+ "images and PDFs from the specified folders and their subfolders. The "
798
+ "optimization status for each image or PDF in these folders can be seen in "
799
+ "the <a href=\"upload.php?page=wp-short-pixel-custom\">Other Media list</a>, "
800
+ "under the Media menu."
801
+ msgstr ""
802
+
803
+ #: class/view/shortpixel_view.php:792
804
+ msgid "Select the images folder"
805
+ msgstr ""
806
+
807
+ #: class/view/shortpixel_view.php:794
808
+ msgid "Cancel"
809
+ msgstr ""
810
+
811
+ #: class/view/shortpixel_view.php:795
812
+ msgid "Select"
813
+ msgstr ""
814
+
815
+ #: class/view/shortpixel_view.php:807
816
+ msgid "Optimize NextGen galleries"
817
+ msgstr ""
818
+
819
+ #: class/view/shortpixel_view.php:809
820
+ msgid "Optimize NextGen galleries."
821
+ msgstr ""
822
+
823
+ #: class/view/shortpixel_view.php:811
824
+ msgid ""
825
+ "Check this to add all your current NextGen galleries to the custom folders "
826
+ "list and to also have all the future NextGen galleries and images optimized "
827
+ "automatically by ShortPixel."
828
+ msgstr ""
829
+
830
+ #: class/view/shortpixel_view.php:817
831
+ msgid "WebP versions"
832
+ msgstr ""
833
+
834
+ #: class/view/shortpixel_view.php:819
835
+ msgid ""
836
+ "Create also <a href=\"http://blog.shortpixel.com/how-webp-images-can-speed-"
837
+ "up-your-site/\" target=\"_blank\">WebP versions</a> of the images "
838
+ "<strong>for free</strong>."
839
+ msgstr ""
840
+
841
+ #: class/view/shortpixel_view.php:821
842
+ #, php-format
843
+ msgid ""
844
+ "WebP images can be up to three times smaller than PNGs and 25% smaller than "
845
+ "JPGs. Choosing this option <strong>does not use up additional credits</"
846
+ "strong>."
847
+ msgstr ""
848
+
849
+ #: class/view/shortpixel_view.php:826
850
+ msgid "HTTP AUTH credentials"
851
+ msgstr ""
852
+
853
+ #: class/view/shortpixel_view.php:828
854
+ msgid "User"
855
+ msgstr ""
856
+
857
+ #: class/view/shortpixel_view.php:829
858
+ msgid "Password"
859
+ msgstr ""
860
+
861
+ #: class/view/shortpixel_view.php:831
862
+ msgid ""
863
+ "Only fill in these fields if your site (front-end) is not publicly "
864
+ "accessible and visitors need a user/pass to connect to it. If you don't know "
865
+ "what is this then just <strong>leave the fields empty</strong>."
866
+ msgstr ""
867
+
868
+ #: class/view/shortpixel_view.php:836
869
+ msgid "Process in front-end"
870
+ msgstr ""
871
+
872
+ #: class/view/shortpixel_view.php:838
873
+ msgid "Automatically optimize images added by users in front end."
874
+ msgstr ""
875
+
876
+ #: class/view/shortpixel_view.php:840
877
+ msgid ""
878
+ "Check this if you have users that add images or PDF documents from custom "
879
+ "forms in the front-end. This could increase the load on your server if you "
880
+ "have a lot of users simultaneously connected."
881
+ msgstr ""
882
+
883
+ #: class/view/shortpixel_view.php:860
884
+ msgid "Your ShortPixel Stats"
885
+ msgstr ""
886
+
887
+ #: class/view/shortpixel_view.php:864
888
+ msgid "Average compression of your files:"
889
+ msgstr ""
890
+
891
+ #: class/view/shortpixel_view.php:868
892
+ msgid "Saved disk space by ShortPixel"
893
+ msgstr ""
894
+
895
+ #: class/view/shortpixel_view.php:872
896
+ msgid "Bandwith* saved with ShortPixel:"
897
+ msgstr ""
898
+
899
+ #: class/view/shortpixel_view.php:878
900
+ msgid "* Saved bandwidth is calculated at 10,000 impressions/image"
901
+ msgstr ""
902
+
903
+ #: class/view/shortpixel_view.php:880
904
+ msgid "Your ShortPixel Plan"
905
+ msgstr ""
906
+
907
+ #: class/view/shortpixel_view.php:884
908
+ msgid "Your ShortPixel plan"
909
+ msgstr ""
910
+
911
+ #: class/view/shortpixel_view.php:886
912
+ #, php-format
913
+ msgid ""
914
+ "%s/month, renews in %s days, on %s ( <a href=\"https://shortpixel.com/login/"
915
+ "%s\" target=\"_blank\">Need More? See the options available</a> )"
916
+ msgstr ""
917
+
918
+ #: class/view/shortpixel_view.php:889
919
+ #, php-format
920
+ msgid ""
921
+ "<a href=\"https://shortpixel.com/login/%s/tell-a-friend\" target=\"_blank"
922
+ "\">Join our friend referral system</a> to win more credits. For each user "
923
+ "that joins, you receive +100 images credits/month."
924
+ msgstr ""
925
+
926
+ #: class/view/shortpixel_view.php:894
927
+ msgid "One time credits:"
928
+ msgstr ""
929
+
930
+ #: class/view/shortpixel_view.php:898
931
+ msgid "Number of images processed this month:"
932
+ msgstr ""
933
+
934
+ #: class/view/shortpixel_view.php:900
935
+ msgid "see report"
936
+ msgstr ""
937
+
938
+ #: class/view/shortpixel_view.php:905
939
+ msgid "Remaining** images in your plan:"
940
+ msgstr ""
941
+
942
+ #: class/view/shortpixel_view.php:906
943
+ msgid "images"
944
+ msgstr ""
945
+
946
+ #: class/view/shortpixel_view.php:912
947
+ #, php-format
948
+ msgid ""
949
+ "** Increase your image quota by <a href=\"https://shortpixel.com/login/%s\" "
950
+ "target=\"_blank\">upgrading your ShortPixel plan.</a>"
951
+ msgstr ""
952
+
953
+ #: class/view/shortpixel_view.php:919
954
+ msgid "Total number of processed files:"
955
+ msgstr ""
956
+
957
+ #: class/view/shortpixel_view.php:924
958
+ msgid ""
959
+ "Original images are stored in a backup folder. Your backup folder size is "
960
+ "now:"
961
+ msgstr ""
962
+
963
+ #: class/view/shortpixel_view.php:928
964
+ msgid "Empty backups"
965
+ msgstr ""
966
+
967
+ #. not a file that we can process
968
+ #: class/view/shortpixel_view.php:945 wp-shortpixel.php:348
969
+ #: wp-shortpixel.php:374 wp-shortpixel.php:1813
970
+ msgid "Optimization N/A"
971
+ msgstr ""
972
+
973
+ #: class/view/shortpixel_view.php:948
974
+ msgid "Image does not exist."
975
+ msgstr ""
976
+
977
+ #. multisite key - need to be validated on each site but it's not invalid
978
+ #: class/view/shortpixel_view.php:952
979
+ msgid ""
980
+ "Please <a href=\"options-general.php?page=wp-shortpixel\">go to Settings</a> "
981
+ "to validate the API Key."
982
+ msgstr ""
983
+
984
+ #: class/view/shortpixel_view.php:954
985
+ msgid ""
986
+ "Invalid API Key. <a href=\"options-general.php?page=wp-shortpixel\">Check "
987
+ "your Settings</a>"
988
+ msgstr ""
989
+
990
+ #: class/view/shortpixel_view.php:963
991
+ msgid "Optimize now"
992
+ msgstr ""
993
+
994
+ #: class/view/shortpixel_view.php:973 class/view/shortpixel-list-table.php:55
995
+ #: wp-shortpixel.php:282
996
+ msgid "Retry"
997
+ msgstr ""
998
+
999
+ #: class/view/shortpixel_view.php:990 class/view/shortpixel-list-table.php:93
1000
+ #: wp-shortpixel.php:273
1001
+ msgid "Reduced by"
1002
+ msgstr ""
1003
+
1004
+ #: class/view/shortpixel_view.php:993 class/view/shortpixel-list-table.php:92
1005
+ #: class/view/shortpixel-list-table.php:94 wp-shortpixel.php:274
1006
+ msgid "Bonus processing"
1007
+ msgstr ""
1008
+
1009
+ #: class/view/shortpixel_view.php:996
1010
+ #, php-format
1011
+ msgid "+%s of %s thumbnails optimized"
1012
+ msgstr ""
1013
+
1014
+ #: class/view/shortpixel_view.php:997
1015
+ #, php-format
1016
+ msgid "+%s thumbnails optimized"
1017
+ msgstr ""
1018
+
1019
+ #: class/view/shortpixel_view.php:1005
1020
+ #, php-format
1021
+ msgid "Optimize %s thumbnails"
1022
+ msgstr ""
1023
+
1024
+ #: class/view/shortpixel_view.php:1012
1025
+ msgid "Reoptimize from the backed-up image"
1026
+ msgstr ""
1027
+
1028
+ #: class/view/shortpixel_view.php:1013
1029
+ msgid "Re-optimize"
1030
+ msgstr ""
1031
+
1032
+ #: class/view/shortpixel_view.php:1017 wp-shortpixel.php:278
1033
+ msgid "Restore backup"
1034
+ msgstr ""
1035
+
1036
+ #: class/view/shortpixel_view.php:1030 wp-shortpixel.php:280
1037
+ msgid "Extend Quota"
1038
+ msgstr ""
1039
+
1040
+ #: class/view/shortpixel_view.php:1033 wp-shortpixel.php:281
1041
+ msgid "Check&nbsp;&nbsp;Quota"
1042
+ msgstr ""
1043
+
1044
+ #: class/view/shortpixel-list-table.php:15
1045
+ msgid "Image"
1046
+ msgstr ""
1047
+
1048
+ #. singular name of the listed records
1049
+ #: class/view/shortpixel-list-table.php:16
1050
+ msgid "Images"
1051
+ msgstr ""
1052
+
1053
+ #. pe viitor. $columns['cb'] = '<input type="checkbox" />';
1054
+ #: class/view/shortpixel-list-table.php:29
1055
+ msgid "Filename"
1056
+ msgstr ""
1057
+
1058
+ #: class/view/shortpixel-list-table.php:30
1059
+ msgid "Folder"
1060
+ msgstr ""
1061
+
1062
+ #: class/view/shortpixel-list-table.php:31
1063
+ msgid "Type"
1064
+ msgstr ""
1065
+
1066
+ #: class/view/shortpixel-list-table.php:32
1067
+ msgid "Status"
1068
+ msgstr ""
1069
+
1070
+ #: class/view/shortpixel-list-table.php:33
1071
+ msgid "Options"
1072
+ msgstr ""
1073
+
1074
+ #: class/view/shortpixel-list-table.php:52
1075
+ msgid "Optimize"
1076
+ msgstr ""
1077
+
1078
+ #: class/view/shortpixel-list-table.php:58
1079
+ msgid "Restore"
1080
+ msgstr ""
1081
+
1082
+ #: class/view/shortpixel-list-table.php:61
1083
+ msgid "Re-optimize lossless"
1084
+ msgstr ""
1085
+
1086
+ #: class/view/shortpixel-list-table.php:64
1087
+ msgid "Re-optimize lossy"
1088
+ msgstr ""
1089
+
1090
+ #: class/view/shortpixel-list-table.php:67
1091
+ msgid "Check quota"
1092
+ msgstr ""
1093
+
1094
+ #: class/view/shortpixel-list-table.php:68
1095
+ msgid "View"
1096
+ msgstr ""
1097
+
1098
+ #: class/view/shortpixel-list-table.php:89
1099
+ msgid "Restored"
1100
+ msgstr ""
1101
+
1102
+ #: class/view/shortpixel-list-table.php:103
1103
+ msgid "code"
1104
+ msgstr ""
1105
+
1106
+ #: class/view/shortpixel-list-table.php:111
1107
+ msgid "Lossy"
1108
+ msgstr ""
1109
+
1110
+ #: class/view/shortpixel-list-table.php:112
1111
+ msgid "Keep EXIF"
1112
+ msgstr ""
1113
+
1114
+ #: class/view/shortpixel-list-table.php:113
1115
+ msgid "Preserve CMYK"
1116
+ msgstr ""
1117
+
1118
+ #: class/view/shortpixel-list-table.php:122
1119
+ msgid ""
1120
+ "No images avaliable. Go to <a href=\"options-general.php?page=wp-"
1121
+ "shortpixel#adv-settings\">Advanced Settings</a> to configure additional "
1122
+ "folders to be optimized."
1123
+ msgstr ""
1124
+
1125
+ #: class/view/shortpixel-list-table.php:255
1126
+ msgid "Show more details"
1127
+ msgstr ""
1128
+
1129
+ #: class/db/shortpixel-meta-facade.php:165
1130
+ msgid "Error"
1131
+ msgstr ""
1132
+
1133
+ #: class/db/shortpixel-custom-meta-dao.php:187
1134
+ msgid "Folder already added."
1135
+ msgstr ""
1136
+
1137
+ #: class/db/shortpixel-custom-meta-dao.php:191
1138
+ #, php-format
1139
+ msgid ""
1140
+ "The %s folder cannot be processed as it's not inside the root path of your "
1141
+ "website."
1142
+ msgstr ""
1143
+
1144
+ #: class/db/shortpixel-custom-meta-dao.php:200
1145
+ msgid ""
1146
+ "This folder contains Media Library images. To optimize Media Library images "
1147
+ "please go to <a href=\"upload.php?mode=list\">Media Library list view</a> or "
1148
+ "to <a href=\"upload.php?page=wp-short-pixel-bulk\">SortPixel Bulk page</a>."
1149
+ msgstr ""
1150
+
1151
+ #: class/db/shortpixel-custom-meta-dao.php:204
1152
+ msgid "Inserted folder doesn't have an ID!"
1153
+ msgstr ""
1154
+
1155
+ #: class/db/shortpixel-custom-meta-dao.php:224
1156
+ msgid ""
1157
+ "This folder contains the ShortPixel Backups. Please select a different "
1158
+ "folder."
1159
+ msgstr ""
1160
+
1161
+ #. var_dump($allFolders);
1162
+ #: class/db/shortpixel-custom-meta-dao.php:247
1163
+ #, php-format
1164
+ msgid "Folder already included in %s."
1165
+ msgstr ""
1166
+
1167
+ #: class/db/shortpixel-custom-meta-dao.php:250
1168
+ msgid "Folder does not exist."
1169
+ msgstr ""
1170
+
1171
+ #: class/model/shortpixel-folder.php:76 class/model/shortpixel-folder.php:149
1172
+ #, php-format
1173
+ msgid "Folder %s is not writeable. Please check permissions and try again."
1174
+ msgstr ""
1175
+
1176
+ #: wp-shortpixel.php:160
1177
+ msgid "ShortPixel Settings"
1178
+ msgstr ""
1179
+
1180
+ #. translators: title and menu name for the Other media page
1181
+ #: wp-shortpixel.php:166
1182
+ msgid "Other Media Optimized by ShortPixel"
1183
+ msgstr ""
1184
+
1185
+ #: wp-shortpixel.php:166
1186
+ msgid "Other Media"
1187
+ msgstr ""
1188
+
1189
+ #. translators: title and menu name for the Bulk Processing page
1190
+ #: wp-shortpixel.php:169
1191
+ msgid "ShortPixel Bulk Process"
1192
+ msgstr ""
1193
+
1194
+ #: wp-shortpixel.php:169
1195
+ msgid "Bulk ShortPixel"
1196
+ msgstr ""
1197
+
1198
+ #: wp-shortpixel.php:216
1199
+ msgid "Media alert dismissed"
1200
+ msgstr ""
1201
+
1202
+ #: wp-shortpixel.php:269
1203
+ msgid "Optimize with ShortPixel"
1204
+ msgstr ""
1205
+
1206
+ #: wp-shortpixel.php:270
1207
+ msgid ""
1208
+ "In order to access the ShortPixel Optimization actions and info, please "
1209
+ "change to {0}List View{1}List View{2}Dismiss{3}"
1210
+ msgstr ""
1211
+
1212
+ #: wp-shortpixel.php:271
1213
+ msgid ""
1214
+ "This type of optimization will apply to new uploaded images.\\nImages that "
1215
+ "were already processed will not be re-optimized unless you restart the bulk "
1216
+ "process."
1217
+ msgstr ""
1218
+
1219
+ #: wp-shortpixel.php:272
1220
+ msgid "Are you sure you want to stop optimizing the folder {0}?"
1221
+ msgstr ""
1222
+
1223
+ #: wp-shortpixel.php:275
1224
+ msgid "+{0} thumbnails optimized"
1225
+ msgstr ""
1226
+
1227
+ #: wp-shortpixel.php:276
1228
+ msgid "Optimize {0} thumbnails"
1229
+ msgstr ""
1230
+
1231
+ #: wp-shortpixel.php:277
1232
+ msgid "Reoptimize {0}"
1233
+ msgstr ""
1234
+
1235
+ #: wp-shortpixel.php:279
1236
+ msgid "Get API Key"
1237
+ msgstr ""
1238
+
1239
+ #: wp-shortpixel.php:283
1240
+ msgid "This content is not processable."
1241
+ msgstr ""
1242
+
1243
+ #: wp-shortpixel.php:284
1244
+ msgid "Image waiting to optimize thumbnails"
1245
+ msgstr ""
1246
+
1247
+ #. translators: toolbar icon tooltip
1248
+ #: wp-shortpixel.php:297
1249
+ msgid "ShortPixel optimizing..."
1250
+ msgstr ""
1251
+
1252
+ #. translators: toolbar icon tooltip
1253
+ #: wp-shortpixel.php:308
1254
+ msgid "ShortPixel quota exceeded. Click for details."
1255
+ msgstr ""
1256
+
1257
+ #: wp-shortpixel.php:564
1258
+ msgid "Missing API Key"
1259
+ msgstr ""
1260
+
1261
+ #. translators: console message Empty queue 1234 -> 1234
1262
+ #: wp-shortpixel.php:614
1263
+ msgid "Empty queue "
1264
+ msgstr ""
1265
+
1266
+ #: wp-shortpixel.php:740
1267
+ msgid " Retry limit reached. Skipping file ID "
1268
+ msgstr ""
1269
+
1270
+ #: wp-shortpixel.php:835
1271
+ msgid "NextGen image not found"
1272
+ msgstr ""
1273
+
1274
+ #: wp-shortpixel.php:1004 wp-shortpixel.php:1018
1275
+ msgid "Could not restore from backup: "
1276
+ msgstr ""
1277
+
1278
+ #: wp-shortpixel.php:1037
1279
+ msgid "No thumbnails to optimize for ID: "
1280
+ msgstr ""
1281
+
1282
+ #: wp-shortpixel.php:1037
1283
+ msgid "Please optimize image for ID: "
1284
+ msgstr ""
1285
+
1286
+ #: wp-shortpixel.php:1142
1287
+ msgid "Refresh custom folders content"
1288
+ msgstr ""
1289
+
1290
+ #: wp-shortpixel.php:1143
1291
+ msgid "Refresh folders"
1292
+ msgstr ""
1293
+
1294
+ #: wp-shortpixel.php:1146
1295
+ msgid "Other Media optimized by ShortPixel"
1296
+ msgstr ""
1297
+
1298
+ #: wp-shortpixel.php:1322 wp-shortpixel.php:1413
1299
+ msgid "You do not have sufficient permissions to access this page."
1300
+ msgstr ""
1301
+
1302
+ #: wp-shortpixel.php:1451
1303
+ #, php-format
1304
+ msgid ""
1305
+ "The key you provided has %s characters. The API key should have 20 "
1306
+ "characters, letters and numbers only."
1307
+ msgstr ""
1308
+
1309
+ #: wp-shortpixel.php:1453
1310
+ msgid ""
1311
+ "Please check that the API key is the same as the one you received in your "
1312
+ "confirmation email."
1313
+ msgstr ""
1314
+
1315
+ #: wp-shortpixel.php:1455
1316
+ msgid "If this problem persists, please contact us at "
1317
+ msgstr ""
1318
+
1319
+ #: wp-shortpixel.php:1457
1320
+ msgid " or "
1321
+ msgstr ""
1322
+
1323
+ #: wp-shortpixel.php:1475
1324
+ msgid ""
1325
+ "API Key is valid but your site is not accessible from our servers. Please "
1326
+ "make sure that your server is accessible from the Internet before using the "
1327
+ "API or otherwise we won't be able to optimize them."
1328
+ msgstr ""
1329
+
1330
+ #: wp-shortpixel.php:1478
1331
+ msgid ""
1332
+ "API Key valid! <br>You seem to be running a multisite, please note that API "
1333
+ "Key can also be configured in wp-config.php like this:"
1334
+ msgstr ""
1335
+
1336
+ #: wp-shortpixel.php:1481
1337
+ msgid "API Key valid!"
1338
+ msgstr ""
1339
+
1340
+ #: wp-shortpixel.php:1488
1341
+ #, php-format
1342
+ msgid ""
1343
+ "There is something preventing us to create a new folder for backing up your "
1344
+ "original files.<BR>Please make sure that folder <b>%s</b> has the necessary "
1345
+ "write and read rights."
1346
+ msgstr ""
1347
+
1348
+ #: wp-shortpixel.php:1536
1349
+ msgid "Folder added successfully."
1350
+ msgstr ""
1351
+
1352
+ #: wp-shortpixel.php:1712
1353
+ msgid ""
1354
+ "API Key could not be validated due to a connectivity error.<BR>Your firewall "
1355
+ "may be blocking us. Please contact your hosting provider and ask them to "
1356
+ "allow connections from your site to IP 176.9.106.46.<BR> If you still cannot "
1357
+ "validate your API Key after this, please <a href=\"https://shortpixel.com/"
1358
+ "contact\" target=\"_blank\">contact us</a> and we will try to help. "
1359
+ msgstr ""
1360
+
1361
+ #: wp-shortpixel.php:1713 wp-shortpixel.php:1714
1362
+ msgid "Information unavailable. Please check your API key."
1363
+ msgstr ""
1364
+
1365
+ #: wp-shortpixel.php:1789
1366
+ msgid "PDF not processed."
1367
+ msgstr ""
1368
+
1369
+ #: wp-shortpixel.php:1820 wp-shortpixel.php:1822
1370
+ msgid "Cannot write optimized file"
1371
+ msgstr ""
1372
+
1373
+ #: wp-shortpixel.php:1823
1374
+ msgid "Why?"
1375
+ msgstr ""
1376
+
1377
+ #: wp-shortpixel.php:1831
1378
+ msgid "Image does not exist"
1379
+ msgstr ""
1380
+
1381
+ #: wp-shortpixel.php:1835
1382
+ msgid "Image waiting to be processed."
1383
+ msgstr ""
1384
+
1385
+ #: wp-shortpixel.php:1853
1386
+ msgid "ShortPixel Statistics"
1387
+ msgstr ""
1388
+
1389
+ #: wp-shortpixel.php:1871
1390
+ msgid "ShortPixel Compression"
1391
+ msgstr ""
1392
+
1393
+ #: shortpixel_api.php:142
1394
+ msgid "The file(s) do not exist on disk."
1395
+ msgstr ""
1396
+
1397
+ #: shortpixel_api.php:157 shortpixel_api.php:168
1398
+ msgid "Timed out while processing."
1399
+ msgstr ""
1400
+
1401
+ #: shortpixel_api.php:161
1402
+ msgid "Image ID"
1403
+ msgstr ""
1404
+
1405
+ #: shortpixel_api.php:161
1406
+ msgid "Media ID"
1407
+ msgstr ""
1408
+
1409
+ #: shortpixel_api.php:162
1410
+ msgid "Skip this image, try the next one."
1411
+ msgstr ""
1412
+
1413
+ #. send requests to API
1414
+ #. response <> 200 -> there was an error apparently?
1415
+ #: shortpixel_api.php:179 shortpixel_api.php:212 shortpixel_api.php:215
1416
+ msgid "There was an error and your request was not processed."
1417
+ msgstr ""
1418
+
1419
+ #: shortpixel_api.php:231
1420
+ msgid "Unecognized API response. Please contact support."
1421
+ msgstr ""
1422
+
1423
+ #: shortpixel_api.php:238
1424
+ msgid "Quota exceeded."
1425
+ msgstr ""
1426
+
1427
+ #: shortpixel_api.php:326
1428
+ msgid "Error downloading file"
1429
+ msgstr ""
1430
+
1431
+ #: shortpixel_api.php:334
1432
+ #, php-format
1433
+ msgid ""
1434
+ "Error downloading file - incorrect file size (downloaded: %s, correct: %s )"
1435
+ msgstr ""
1436
+
1437
+ #: shortpixel_api.php:337
1438
+ msgid "Unable to locate downloaded file"
1439
+ msgstr ""
1440
+
1441
+ #. array with final paths for these files
1442
+ #. creates backup folder if it doesn't exist
1443
+ #: shortpixel_api.php:399
1444
+ msgid "Backup folder does not exist and it cannot be created"
1445
+ msgstr ""
1446
+
1447
+ #. file couldn't be saved in backup folder
1448
+ #: shortpixel_api.php:419
1449
+ #, php-format
1450
+ msgid "Cannot save file <i>%s</i> in backup directory"
1451
+ msgstr ""
1452
+
1453
+ #. cannot write to the backup dir, return with an error
1454
+ #: shortpixel_api.php:428
1455
+ msgid "Cannot save file in backup directory"
1456
+ msgstr ""
1457
+
1458
+ #: shortpixel_api.php:491
1459
+ #, php-format
1460
+ msgid "Optimized version of %s file(s) couldn't be updated."
1461
+ msgstr ""
readme.txt CHANGED
@@ -4,8 +4,8 @@ Contributors: AlexSP
4
  Tags: image optimizer, image optimization, compress pdf, compress jpeg, compress png, image compression, wp smush, compress images, optimize images, shrink jpeg, optimize photos, tinypng
5
 
6
  Requires at least: 3.2.0
7
- Tested up to: 4.6
8
- Stable tag: 4.1.7
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
@@ -45,6 +45,8 @@ Make an instant <a rel="friend" href="http://shortpixel.com/image-compression-te
45
  * compatible with WP Engine hosted websites and all the major hosting providers
46
  * compatible with WPML and WPML Media plugins
47
  * skip already optimized images
 
 
48
  * images that are optimized less that 5% are bonus
49
  * 40 days optimization report with all image details and overall statistics
50
  * **free optimization credits for non-profits**, <a href="https://shortpixel.com/contact" target="_blank">contact us</a> for details
@@ -178,6 +180,17 @@ The ShortPixel team is here to help. <a href="https://shortpixel.com/contact">Co
178
 
179
  == Changelog ==
180
 
 
 
 
 
 
 
 
 
 
 
 
181
  = 4.1.7 =
182
 
183
  * fix backup thumbnail js error
4
  Tags: image optimizer, image optimization, compress pdf, compress jpeg, compress png, image compression, wp smush, compress images, optimize images, shrink jpeg, optimize photos, tinypng
5
 
6
  Requires at least: 3.2.0
7
+ Tested up to: 4.7
8
+ Stable tag: 4.2.0
9
  License: GPLv2 or later
10
  License URI: http://www.gnu.org/licenses/gpl-2.0.html
11
 
45
  * compatible with WP Engine hosted websites and all the major hosting providers
46
  * compatible with WPML and WPML Media plugins
47
  * skip already optimized images
48
+ * compatible with watermarking plugins
49
+ * option to deactivate auto-optimizing images on upload
50
  * images that are optimized less that 5% are bonus
51
  * 40 days optimization report with all image details and overall statistics
52
  * **free optimization credits for non-profits**, <a href="https://shortpixel.com/contact" target="_blank">contact us</a> for details
180
 
181
  == Changelog ==
182
 
183
+ = 4.2.0 =
184
+
185
+ * multilanguage support
186
+ * add retinas count to the ShortPixel Compression column
187
+ * add option not to automatically optimize Media Library images when added
188
+ * fix the size bug happening when optimizing main image then optimizing only thumbnails with resize active
189
+ * restrict log messages to SHORTPIXEL_DEBUG instead of WP_DEBUG
190
+ * fix compatibility with WP < 3.9
191
+ * fix compatibility with watermarking plugins like Image Watermark
192
+ * fix compatibility with WPBakery Visual Composer
193
+
194
  = 4.1.7 =
195
 
196
  * fix backup thumbnail js error
res/js/jquery.tooltip.js CHANGED
@@ -1,8 +1,8 @@
1
  (function($){
2
 
3
- $.fn.tooltip = function(instanceSettings){
4
 
5
- $.fn.tooltip.defaultsSettings = {
6
  attributeName:'title',
7
  borderColor:'#ccc',
8
  borderSize:'1',
@@ -29,7 +29,7 @@
29
  };
30
 
31
  //s = settings
32
- var s = $.extend({}, $.fn.tooltip.defaultsSettings , instanceSettings || {});
33
 
34
  var positionTooltip = function(e){
35
 
1
  (function($){
2
 
3
+ $.fn.spTooltip = function(instanceSettings){
4
 
5
+ $.fn.spTooltip.defaultsSettings = {
6
  attributeName:'title',
7
  borderColor:'#ccc',
8
  borderSize:'1',
29
  };
30
 
31
  //s = settings
32
+ var s = $.extend({}, $.fn.spTooltip.defaultsSettings , instanceSettings || {});
33
 
34
  var positionTooltip = function(e){
35
 
res/js/short-pixel.js CHANGED
@@ -6,11 +6,17 @@ jQuery(document).ready(function($){
6
  //are we on media list?
7
  if( jQuery('table.wp-list-table.media').length > 0) {
8
  //register a bulk action
9
- jQuery('select[name^="action"] option:last-child').before('<option value="short-pixel-bulk">Optimize with ShortPixel</option>');
10
  }
 
 
 
11
  if( ShortPixel.MEDIA_ALERT == 'todo' && jQuery('div.media-frame.mode-grid').length > 0) {
12
  //the media table is not in the list mode, alert the user
13
- jQuery('div.media-frame.mode-grid').before('<div id="short-pixel-media-alert" class="notice notice-warning"><p>In order to access the ShortPixel Optimization actions and info, please change to <a href="upload.php?mode=list" class="view-list"><span class="screen-reader-text">List View</span>List View</a><a class="alignright" href="javascript:ShortPixel.dismissMediaAlert();">Dismiss</a></p></div>');
 
 
 
14
  }
15
  //
16
  jQuery(window).unload(function(){
@@ -18,7 +24,6 @@ jQuery(document).ready(function($){
18
  clearBulkProcessor();
19
  }
20
  });
21
- ShortPixel.setOptions(ShortPixelConstants);
22
  //check if bulk processing
23
  checkQuotaExceededAlert();
24
  checkBulkProgress();
@@ -59,7 +64,7 @@ var ShortPixel = function() {
59
  if(this !== prev) {
60
  prev = this;
61
  }
62
- alert('This type of optimization will apply to new uploaded images.\nImages that were already processed will not be re-optimized unless you restart the bulk process.');
63
  };
64
  }
65
  ShortPixel.enableResize("#resize");
@@ -75,7 +80,7 @@ var ShortPixel = function() {
75
  function setupAdvancedTab() {
76
  jQuery("input.remove-folder-button").click(function(){
77
  var path = jQuery(this).data("value");
78
- var r = confirm("Are you sure you want to stop optimizing the folder " + path + "?");
79
  if (r == true) {
80
  jQuery("#removeFolder").val(path);
81
  jQuery('#wp_shortpixel_options').submit();
@@ -83,7 +88,7 @@ var ShortPixel = function() {
83
  });
84
  jQuery("input.recheck-folder-button").click(function(){
85
  var path = jQuery(this).data("value");
86
- var r = confirm("Are you sure you want to stop optimizing the folder " + path + "?");
87
  if (r == true) {
88
  jQuery("#recheckFolder").val(path);
89
  jQuery('#wp_shortpixel_options').submit();
@@ -134,12 +139,13 @@ var ShortPixel = function() {
134
  }
135
  }
136
 
137
- function successMsg(id, percent, type, thumbsCount) {
138
- return (percent > 0 ? "<div class='sp-column-info'>Reduced by <span class='percent'><strong>" + percent + "%</strong></span> " : "")
139
  + (percent > 0 && percent < 5 ? "<br>" : '')
140
- + (percent < 5 ? "Bonus processing" : '')
141
  + (type.length > 0 ? " ("+type+")" : "")
142
- + (0 + thumbsCount > 0 ? "<br>+" + thumbsCount + " thumbnails optimized" :"")
 
143
  + "</div>";
144
  }
145
 
@@ -159,9 +165,10 @@ var ShortPixel = function() {
159
  if(backupEnabled == 1) {
160
  var otherType = type.length > 0 ? (type == "lossy" ? "lossless" : "lossy") : "";
161
  return '<div class="sp-column-actions">'
162
- + (thumbsTotal > thumbsCount ? "<a class='button button-smaller button-primary' href=\"javascript:optimizeThumbs(" + id + ");\">Optimize " + (thumbsTotal - thumbsCount) + " thumbnails</a>" : "")
163
- + (otherType.length ? "<a class='button button-smaller' href=\"javascript:reoptimize(" + id + ", '" + otherType + "');\">Re-optimize " + otherType + "</a>" : "")
164
- + "<a class='button button-smaller' href=\"admin.php?action=shortpixel_restore_backup&attachment_ID=" + id + ")\">Restore backup</a>"
 
165
  + "</div>";
166
  }
167
  return "";
@@ -378,7 +385,7 @@ function checkBulkProgress() {
378
  && url.search(adminUrl + "post-new.php") < 0
379
  && url.search(adminUrl + "post.php") < 0
380
  && url.search("page=nggallery-manage-gallery") < 0
381
- && (ShortPixel.FRONT_BOOTSTRAP == 0 || url.search(ShortPixel.WP_ADMIN_URL) == 0)
382
  ) {
383
  hideToolBarAlert();
384
  return;
@@ -405,10 +412,6 @@ function checkBulkProgress() {
405
  console.log(localStorage.bulkTime);
406
  checkBulkProcessingCallApi();
407
  } else {
408
- /*console.log("not the bulk processor (bulkProcessor: " + ShortPixel.bulkProcessor.toString()
409
- + ", bulkTime: " + (localStorage.bulkTime == 'undefined' ? 'undefined': localStorage.bulkTime.toString())
410
- + " bulkPage: " + localStorage.bulkPage.toString()
411
- + " passed: " + (Math.floor(Date.now() / 1000) - localStorage.bulkTime).toString());*/
412
  setTimeout(checkBulkProgress, 5000);
413
  }
414
  }
@@ -436,14 +439,14 @@ function checkBulkProcessingCallApi(){
436
 
437
  switch (data["Status"]) {
438
  case ShortPixel.STATUS_NO_KEY:
439
- setCellMessage(id, "<a class='button button-smaller button-primary' href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">Get API Key</a>",
440
  data["Message"]);
441
  showToolBarAlert(ShortPixel.STATUS_NO_KEY);
442
  break;
443
  case ShortPixel.STATUS_QUOTA_EXCEEDED:
444
  setCellMessage(id, "<a class='button button-smaller button-primary' href=\"https://shortpixel.com/login/"
445
- + ShortPixel.API_KEY + "\" target=\"_blank\">Extend Quota</a>"
446
- + "<a class='button button-smaller' href='admin.php?action=shortpixel_check_quota'>Check&nbsp;&nbsp;Quota</a>",
447
  data["Message"]);
448
  showToolBarAlert(ShortPixel.STATUS_QUOTA_EXCEEDED);
449
  if(data['Stop'] == false) { //there are other items in the priority list, maybe processed, try those
@@ -452,7 +455,8 @@ function checkBulkProcessingCallApi(){
452
  ShortPixel.otherMediaUpdateActions(id, ['quota','view']);
453
  break;
454
  case ShortPixel.STATUS_FAIL:
455
- setCellMessage(id, data["Message"], "<a class='button button-smaller button-primary' href=\"javascript:manualOptimization('<?php echo($id)?>')\">Retry</a>");
 
456
  if(isBulkPage) {
457
  ShortPixel.bulkShowError(id, data["Message"], data["Filename"], data["CustomImageLink"]);
458
  showToolBarAlert(ShortPixel.STATUS_FAIL, data["Message"]);
@@ -491,7 +495,7 @@ function checkBulkProcessingCallApi(){
491
  ? ""
492
  : ShortPixel.successActions(id, data["Type"], data['ThumbsCount'], data['ThumbsTotal'], data["BackupEnabled"]);
493
 
494
- setCellMessage(id, ShortPixel.successMsg(id, percent, data["Type"], data['ThumbsCount']), successActions);
495
  ShortPixel.otherMediaUpdateActions(id, ['restore','redo'+(data["Type"] == 'lossy' ? 'lossless': 'lossy'),'view']);
496
  var animator = new PercentageAnimator("#sp-msg-" + id + " span.percent", percent);
497
  animator.animate(percent);
@@ -581,7 +585,7 @@ function manualOptimization(id) {
581
  if(data["Status"] == ShortPixel.STATUS_SUCCESS) {
582
  setTimeout(checkBulkProgress, 2000);
583
  } else {
584
- setCellMessage(id, typeof data["Message"] !== "undefined" ? data["Message"] : "This content is not processable.", "");
585
  }
586
  //aici e aici
587
  });
@@ -599,7 +603,7 @@ function reoptimize(id, type) {
599
  if(data["Status"] == ShortPixel.STATUS_SUCCESS) {
600
  setTimeout(checkBulkProgress, 2000);
601
  } else {
602
- $msg = typeof data["Message"] !== "undefined" ? data["Message"] : "This content is not processable.";
603
  setCellMessage(id, $msg, "");
604
  showToolBarAlert(ShortPixel.STATUS_FAIL, $msg);
605
  }
@@ -607,7 +611,7 @@ function reoptimize(id, type) {
607
  }
608
 
609
  function optimizeThumbs(id) {
610
- setCellMessage(id, "<img src='" + ShortPixel.WP_PLUGIN_URL + "/res/img/loading.gif' class='sp-loading-small'>Image waiting to optimize thumbnails", "");
611
  jQuery("li.shortpixel-toolbar-processing").removeClass("shortpixel-hide");
612
  jQuery("li.shortpixel-toolbar-processing").addClass("shortpixel-processing");
613
  var data = { action : 'shortpixel_optimize_thumbs',
@@ -617,7 +621,7 @@ function optimizeThumbs(id) {
617
  if(data["Status"] == ShortPixel.STATUS_SUCCESS) {
618
  setTimeout(checkBulkProgress, 2000);
619
  } else {
620
- setCellMessage(id, typeof data["Message"] !== "undefined" ? data["Message"] : "This content is not processable.", "");
621
  }
622
  });
623
  }
@@ -733,3 +737,14 @@ function showStats() {
733
  }
734
  }
735
 
 
 
 
 
 
 
 
 
 
 
 
6
  //are we on media list?
7
  if( jQuery('table.wp-list-table.media').length > 0) {
8
  //register a bulk action
9
+ jQuery('select[name^="action"] option:last-child').before('<option value="short-pixel-bulk">' + _spTr.optimizeWithSP + '</option>');
10
  }
11
+
12
+ ShortPixel.setOptions(ShortPixelConstants);
13
+
14
  if( ShortPixel.MEDIA_ALERT == 'todo' && jQuery('div.media-frame.mode-grid').length > 0) {
15
  //the media table is not in the list mode, alert the user
16
+ jQuery('div.media-frame.mode-grid').before('<div id="short-pixel-media-alert" class="notice notice-warning"><p>'
17
+ + _spTr.changeMLToListMode.format('<a href="upload.php?mode=list" class="view-list"><span class="screen-reader-text">',' </span>',
18
+ '</a><a class="alignright" href="javascript:ShortPixel.dismissMediaAlert();">','</a>')
19
+ + '</p></div>');
20
  }
21
  //
22
  jQuery(window).unload(function(){
24
  clearBulkProcessor();
25
  }
26
  });
 
27
  //check if bulk processing
28
  checkQuotaExceededAlert();
29
  checkBulkProgress();
64
  if(this !== prev) {
65
  prev = this;
66
  }
67
+ alert(_spTr.alertOnlyAppliesToNewImages);
68
  };
69
  }
70
  ShortPixel.enableResize("#resize");
80
  function setupAdvancedTab() {
81
  jQuery("input.remove-folder-button").click(function(){
82
  var path = jQuery(this).data("value");
83
+ var r = confirm(_spTr.areYouSureStopOptimizing.format(path));
84
  if (r == true) {
85
  jQuery("#removeFolder").val(path);
86
  jQuery('#wp_shortpixel_options').submit();
88
  });
89
  jQuery("input.recheck-folder-button").click(function(){
90
  var path = jQuery(this).data("value");
91
+ var r = confirm(_spTr.areYouSureStopOptimizing.format(path));
92
  if (r == true) {
93
  jQuery("#recheckFolder").val(path);
94
  jQuery('#wp_shortpixel_options').submit();
139
  }
140
  }
141
 
142
+ function successMsg(id, percent, type, thumbsCount, retinasCount) {
143
+ return (percent > 0 ? "<div class='sp-column-info'>" + _spTr.reducedBy + " <span class='percent'><strong>" + percent + "%</strong></span> " : "")
144
  + (percent > 0 && percent < 5 ? "<br>" : '')
145
+ + (percent < 5 ? _spTr.bonusProcessing : '')
146
  + (type.length > 0 ? " ("+type+")" : "")
147
+ + (0 + thumbsCount > 0 ? "<br>" + _spTr.plusXthumbsOpt.format(thumbsCount) :"")
148
+ + (0 + retinasCount > 0 ? "<br>" + _spTr.plusXretinasOpt.format(retinasCount) :"")
149
  + "</div>";
150
  }
151
 
165
  if(backupEnabled == 1) {
166
  var otherType = type.length > 0 ? (type == "lossy" ? "lossless" : "lossy") : "";
167
  return '<div class="sp-column-actions">'
168
+ + (thumbsTotal > thumbsCount ? "<a class='button button-smaller button-primary' href=\"javascript:optimizeThumbs(" + id + ");\">"
169
+ + _spTr.optXThumbs.format(thumbsTotal - thumbsCount) + "</a>" : "")
170
+ + (otherType.length ? "<a class='button button-smaller' href=\"javascript:reoptimize(" + id + ", '" + otherType + "');\">" + _spTr.reOptimizeAs.format(otherType) + "</a>" : "")
171
+ + "<a class='button button-smaller' href=\"admin.php?action=shortpixel_restore_backup&attachment_ID=" + id + ")\">" + _spTr.restoreBackup + "</a>"
172
  + "</div>";
173
  }
174
  return "";
385
  && url.search(adminUrl + "post-new.php") < 0
386
  && url.search(adminUrl + "post.php") < 0
387
  && url.search("page=nggallery-manage-gallery") < 0
388
+ && (ShortPixel.FRONT_BOOTSTRAP == 0 || url.search(adminUrl) == 0)
389
  ) {
390
  hideToolBarAlert();
391
  return;
412
  console.log(localStorage.bulkTime);
413
  checkBulkProcessingCallApi();
414
  } else {
 
 
 
 
415
  setTimeout(checkBulkProgress, 5000);
416
  }
417
  }
439
 
440
  switch (data["Status"]) {
441
  case ShortPixel.STATUS_NO_KEY:
442
+ setCellMessage(id, "<a class='button button-smaller button-primary' href=\"https://shortpixel.com/wp-apikey\" target=\"_blank\">" + _spTr.getApiKey + "</a>",
443
  data["Message"]);
444
  showToolBarAlert(ShortPixel.STATUS_NO_KEY);
445
  break;
446
  case ShortPixel.STATUS_QUOTA_EXCEEDED:
447
  setCellMessage(id, "<a class='button button-smaller button-primary' href=\"https://shortpixel.com/login/"
448
+ + ShortPixel.API_KEY + "\" target=\"_blank\">" + _spTr.extendQuota + "</a>"
449
+ + "<a class='button button-smaller' href='admin.php?action=shortpixel_check_quota'>" + _spTr.check__Quota + "</a>",
450
  data["Message"]);
451
  showToolBarAlert(ShortPixel.STATUS_QUOTA_EXCEEDED);
452
  if(data['Stop'] == false) { //there are other items in the priority list, maybe processed, try those
455
  ShortPixel.otherMediaUpdateActions(id, ['quota','view']);
456
  break;
457
  case ShortPixel.STATUS_FAIL:
458
+ setCellMessage(id, data["Message"], "<a class='button button-smaller button-primary' href=\"javascript:manualOptimization('<?php echo($id)?>')\">"
459
+ + _spTr.retry + "</a>");
460
  if(isBulkPage) {
461
  ShortPixel.bulkShowError(id, data["Message"], data["Filename"], data["CustomImageLink"]);
462
  showToolBarAlert(ShortPixel.STATUS_FAIL, data["Message"]);
495
  ? ""
496
  : ShortPixel.successActions(id, data["Type"], data['ThumbsCount'], data['ThumbsTotal'], data["BackupEnabled"]);
497
 
498
+ setCellMessage(id, ShortPixel.successMsg(id, percent, data["Type"], data['ThumbsCount'], data['RetinasCount']), successActions);
499
  ShortPixel.otherMediaUpdateActions(id, ['restore','redo'+(data["Type"] == 'lossy' ? 'lossless': 'lossy'),'view']);
500
  var animator = new PercentageAnimator("#sp-msg-" + id + " span.percent", percent);
501
  animator.animate(percent);
585
  if(data["Status"] == ShortPixel.STATUS_SUCCESS) {
586
  setTimeout(checkBulkProgress, 2000);
587
  } else {
588
+ setCellMessage(id, typeof data["Message"] !== "undefined" ? data["Message"] : _spTr.thisContentNotProcessable, "");
589
  }
590
  //aici e aici
591
  });
603
  if(data["Status"] == ShortPixel.STATUS_SUCCESS) {
604
  setTimeout(checkBulkProgress, 2000);
605
  } else {
606
+ $msg = typeof data["Message"] !== "undefined" ? data["Message"] : _spTr.thisContentNotProcessable;
607
  setCellMessage(id, $msg, "");
608
  showToolBarAlert(ShortPixel.STATUS_FAIL, $msg);
609
  }
611
  }
612
 
613
  function optimizeThumbs(id) {
614
+ setCellMessage(id, "<img src='" + ShortPixel.WP_PLUGIN_URL + "/res/img/loading.gif' class='sp-loading-small'>" + _spTr.imageWaitOptThumbs, "");
615
  jQuery("li.shortpixel-toolbar-processing").removeClass("shortpixel-hide");
616
  jQuery("li.shortpixel-toolbar-processing").addClass("shortpixel-processing");
617
  var data = { action : 'shortpixel_optimize_thumbs',
621
  if(data["Status"] == ShortPixel.STATUS_SUCCESS) {
622
  setTimeout(checkBulkProgress, 2000);
623
  } else {
624
+ setCellMessage(id, typeof data["Message"] !== "undefined" ? data["Message"] : _spTr.thisContentNotProcessable, "");
625
  }
626
  });
627
  }
737
  }
738
  }
739
 
740
+ if (!(typeof String.prototype.format == 'function')) {
741
+ String.prototype.format = function() {
742
+ var s = this,
743
+ i = arguments.length;
744
+
745
+ while (i--) {
746
+ s = s.replace(new RegExp('\\{' + i + '\\}', 'gm'), arguments[i]);
747
+ }
748
+ return s;
749
+ };
750
+ }
shortpixel_api.php CHANGED
@@ -29,14 +29,8 @@ class ShortPixelAPI {
29
  public function __construct($settings) {
30
  $this->_settings = $settings;
31
  $this->_apiEndPoint = $this->_settings->httpProto . '://api.shortpixel.com/v2/reducer.php';
32
- //# TODO verifica- pare la oha: add_action('processImageAction', array(&$this, 'processImageAction'), 10, 4);
33
  }
34
 
35
- //# TODO verifica- pare la oha
36
- //#public function processImageAction($url, $filePaths, $itemHandler, $time) {
37
- //# $this->processImage($URLs, $PATHs, $itemHandler, $time);
38
- //#}
39
-
40
  /**
41
  * sends a compression request to the API
42
  * @param array $URLs - list of urls to send to API
@@ -45,7 +39,7 @@ class ShortPixelAPI {
45
  * @param int $compressionType 1 - lossy, 0 - lossless
46
  * @return response from wp_remote_post or error
47
  */
48
- public function doRequests($URLs, $Blocking, $itemHandler, $compressionType = false) {
49
  $requestParameters = array(
50
  'plugin_version' => PLUGIN_VERSION,
51
  'key' => $this->_settings->apiKey,
@@ -58,6 +52,9 @@ class ShortPixelAPI {
58
  'resize_height' => $this->_settings->resizeHeight,
59
  'urllist' => $URLs
60
  );
 
 
 
61
  $arguments = array(
62
  'method' => 'POST',
63
  'timeout' => 15,
@@ -100,10 +97,6 @@ class ShortPixelAPI {
100
  {//set details inside file so user can know what happened
101
  $itemHandler->setError($errorCode, $errorMessage);
102
  $itemHandler->incrementRetries();
103
- //$meta = wp_get_attachment_metadata($ID);
104
- //$meta['ShortPixelImprovement'] = 'Error: <i>' . $errorMessage . '</i>';
105
- //unset($meta['ShortPixel']['WaitingProcessing']);
106
- //wp_update_attachment_metadata($ID, $meta);
107
  return array("response" => array("code" => $errorCode, "message" => $errorMessage ));
108
  }
109
 
@@ -149,9 +142,7 @@ class ShortPixelAPI {
149
 
150
  $PATHs = self::CheckAndFixImagePaths($PATHs);//check for images to make sure they exist on disk
151
  if ( $PATHs === false ) {
152
- $msg = 'The file(s) do not exist on disk.';
153
- //#$meta['ShortPixelImprovement'] = $msg;
154
- //#wp_update_attachment_metadata($ID, $meta);
155
  $itemHandler->setError(self::ERR_FILE_NOT_FOUND, $msg );
156
  return array("Status" => self::STATUS_SKIP, "Message" => $msg, "Silent" => $itemHandler->getType() == ShortPixelMetaFacade::CUSTOM_TYPE ? 1 : 0);
157
  }
@@ -166,21 +157,18 @@ class ShortPixelAPI {
166
  {//keeps track of time
167
  if ( $apiRetries > MAX_API_RETRIES )//we tried to process this time too many times, giving up...
168
  {
169
- //#$meta['ShortPixelImprovement'] = 'Timed out while processing.';
170
- //#unset($meta['ShortPixel']['WaitingProcessing']);
171
- //#wp_update_attachment_metadata($ID, $meta);
172
- $itemHandler->setError(self::ERR_TIMEOUT, 'Timed out while processing.');
173
  $itemHandler->incrementRetries();
174
  $this->_settings->apiRetries = 0; //fai added to solve a bug?
175
  return array("Status" => self::STATUS_SKIP,
176
- "Message" => ($itemHandler->getType() == ShortPixelMetaFacade::CUSTOM_TYPE ? "Image ID: " : "Media ID: ")
177
- . $itemHandler->getId() .' Skip this image, try the next one.');
178
  }
179
  else
180
  {//we'll try again next time user visits a page on admin panel
181
  $apiRetries++;
182
  $this->_settings->apiRetries = $apiRetries;
183
- return array("Status" => self::STATUS_RETRY, "Message" => 'Timed out while processing. (pass '.$apiRetries.')',
184
  "Count" => $apiRetries);
185
  }
186
  }
@@ -191,7 +179,7 @@ class ShortPixelAPI {
191
  $response = $this->doRequests($URLs, true, $itemHandler, $compressionType);//send requests to API
192
 
193
  if($response['response']['code'] != 200)//response <> 200 -> there was an error apparently?
194
- return array("Status" => self::STATUS_FAIL, "Message" => "There was an error and your request was not processed.");
195
 
196
  $APIresponse = $this->parseResponse($response);//get the actual response from API, its an array
197
 
@@ -218,15 +206,16 @@ class ShortPixelAPI {
218
  if ( !file_exists($PATHs[0]) ) {
219
  $itemHandler->incrementRetries(2);
220
  $err = array("Status" => self::STATUS_NOT_FOUND, "Message" => "File not found on disk. "
221
- . ($itemHandler->getType() == ShortPixelMetaFacade::CUSTOM_TYPE ? "Image " : "Media ")
222
  . " ID: " . $itemHandler->getId());
223
  }
224
  elseif ( isset($APIresponse[0]->Status->Message) ) {
225
  //return array("Status" => self::STATUS_FAIL, "Message" => "There was an error and your request was not processed (" . $APIresponse[0]->Status->Message . "). REQ: " . json_encode($URLs));
226
  $err = array("Status" => self::STATUS_FAIL, "Code" => (isset($APIresponse[0]->Status->Code) ? $APIresponse[0]->Status->Code : ""),
227
- "Message" => "There was an error and your request was not processed (" . $APIresponse[0]->Status->Message . ")");
 
228
  } else {
229
- $err = array("Status" => self::STATUS_FAIL, "Message" => "There was an error and your request was not processed");
230
  }
231
 
232
  $itemHandler->incrementRetries();
@@ -242,14 +231,14 @@ class ShortPixelAPI {
242
 
243
  if(!isset($APIresponse['Status'])) {
244
  WpShortPixel::log("API Response Status unfound : " . json_encode($APIresponse));
245
- return array("Status" => self::STATUS_FAIL, "Message" => "Unecognized API response. Please contact support.");
246
  } else {
247
  switch($APIresponse['Status']->Code)
248
  {
249
  case -403:
250
  @delete_option('bulkProcessingStatus');
251
  $this->_settings->quotaExceeded = 1;
252
- return array("Status" => self::STATUS_QUOTA_EXCEEDED, "Message" => "Quota exceeded.");
253
  break;
254
  }
255
 
@@ -310,11 +299,12 @@ class ShortPixelAPI {
310
 
311
  $downloadTimeout = max(ini_get('max_execution_time') - 10, 15);
312
 
313
- if($webpType !== "NA") {
 
314
  $webpURL = $this->setPreferredProtocol(urldecode($fileData->$webpType));
315
  $webpTempFile = download_url($webpURL, $downloadTimeout);
 
316
  }
317
- $webpTempFile = is_wp_error( $webpTempFile ) ? "NA" : $webpTempFile;
318
 
319
  //if there is no improvement in size then we do not download this file
320
  if ( $fileData->OriginalSize == $fileData->$fileSize )
@@ -337,7 +327,7 @@ class ShortPixelAPI {
337
  @unlink($tempFile);
338
  $returnMessage = array(
339
  "Status" => self::STATUS_ERROR,
340
- "Message" => "Error downloading file ({$fileData->$fileType}) " . $tempFile->get_error_message());
341
  }
342
  //check response so that download is OK
343
  elseif( filesize($tempFile) != $correctFileSize) {
@@ -345,10 +335,10 @@ class ShortPixelAPI {
345
  @unlink($tempFile);
346
  $returnMessage = array(
347
  "Status" => self::STATUS_ERROR,
348
- "Message" => "Error downloading file - incorrect file size (downloaded: {$size}, correct: {$correctFileSize} )");
349
  }
350
  elseif (!file_exists($tempFile)) {
351
- $returnMessage = array("Status" => self::STATUS_ERROR, "Message" => "Unable to locate downloaded file " . $tempFile);
352
  }
353
  return $returnMessage;
354
  }
@@ -401,9 +391,7 @@ class ShortPixelAPI {
401
  }
402
 
403
  //figure out in what SubDir files should land
404
- //#$SubDir = $this->returnSubDir(get_attached_file($ID));
405
  $fullSubDir = str_replace(wp_normalize_path(get_home_path()), "", wp_normalize_path(dirname($itemHandler->getMeta()->getPath()))) . '/';
406
- //die("Uploads base: " . SP_UPLOADS_BASE . " FullSubDir: ". $fullSubDir . " PATH: " . dirname($itemHandler->getMeta()->getPath()));
407
  $SubDir = ShortPixelMetaFacade::returnSubDir($itemHandler->getMeta()->getPath(), $itemHandler->getType());
408
 
409
  //if backup is enabled - we try to save the images
@@ -412,7 +400,7 @@ class ShortPixelAPI {
412
  $source = $PATHs; //array with final paths for these files
413
 
414
  if( !file_exists(SP_BACKUP_FOLDER) && !@mkdir(SP_BACKUP_FOLDER, 0777, true) ) {//creates backup folder if it doesn't exist
415
- return array("Status" => self::STATUS_FAIL, "Message" => "Backup folder does not exist and it cannot be created");
416
  }
417
  //create subdir in backup folder if needed
418
  @mkdir( SP_BACKUP_FOLDER . '/' . $fullSubDir, 0777, true);
@@ -432,8 +420,7 @@ class ShortPixelAPI {
432
  {
433
  if ( !@copy($source[$fileID], $filePATH) )
434
  {//file couldn't be saved in backup folder
435
- $msg = 'Cannot save file <i>' . self::MB_basename($source[$fileID]) . '</i> in backup directory';
436
- //#ShortPixelAPI::SaveMessageinMetadata($ID, $msg);
437
  $itemHandler->setError(self::ERR_SAVE_BKP, $msg);
438
  $itemHandler->incrementRetries();
439
  return array("Status" => self::STATUS_FAIL, "Message" => $msg);
@@ -442,8 +429,7 @@ class ShortPixelAPI {
442
  }
443
  $NoBackup = true;
444
  } else {//cannot write to the backup dir, return with an error
445
- //#ShortPixelAPI::SaveMessageinMetadata($ID, 'Cannot save file in backup directory');
446
- $msg = 'Cannot save file in backup directory';
447
  $itemHandler->setError(self::ERR_SAVE_BKP, $msg);
448
  $itemHandler->incrementRetries();
449
  return array("Status" => self::STATUS_FAIL, "Message" => $msg);
@@ -452,9 +438,9 @@ class ShortPixelAPI {
452
  }//end backup section
453
 
454
  $writeFailed = 0;
455
- $firstImage = true;
456
  $width = $height = null;
457
  $resize = $this->_settings->resizeImages;
 
458
 
459
  if ( !empty($tempFiles) )
460
  {
@@ -469,13 +455,11 @@ class ShortPixelAPI {
469
  $tempFilePATH = $tempFile["Message"];
470
  if ( file_exists($tempFilePATH) && file_exists($PATHs[$tempFileID]) && is_writable($PATHs[$tempFileID]) ) {
471
  copy($tempFilePATH, $targetFile);
472
- if($firstImage) { //this is the main image
473
- $firstImage = false;
474
- if($resize) {
475
- $size = getimagesize($PATHs[$tempFileID]);
476
- $width = $size[0];
477
- $height = $size[1];
478
- }
479
  }
480
  //Calculate the saved space
481
  $fileData = $APIresponse[$tempFileID];
@@ -506,7 +490,7 @@ class ShortPixelAPI {
506
 
507
  if ( $writeFailed > 0 )//there was an error
508
  {
509
- $msg = 'Optimized version of ' . $writeFailed . ' file(s) couldn\'t be updated.';
510
  //#ShortPixelAPI::SaveMessageinMetadata($ID, 'Error: optimized version of ' . $writeFailed . ' file(s) couldn\'t be updated.');
511
  $itemHandler->setError(self::ERR_SAVE, $msg);
512
  $itemHandler->incrementRetries();
@@ -540,6 +524,7 @@ class ShortPixelAPI {
540
  $meta->setKeepExif($this->_settings->keepExif);
541
  $meta->setTsOptimized(date("Y-m-d H:i:s"));
542
  $meta->setThumbsOpt(($meta->getThumbsTodo() || $this->_settings->processThumbnails) ? count($meta->getThumbs()) : 0);
 
543
  $meta->setThumbsTodo(false);
544
  if($width && $height) {
545
  $meta->setActualWidth($width);
29
  public function __construct($settings) {
30
  $this->_settings = $settings;
31
  $this->_apiEndPoint = $this->_settings->httpProto . '://api.shortpixel.com/v2/reducer.php';
 
32
  }
33
 
 
 
 
 
 
34
  /**
35
  * sends a compression request to the API
36
  * @param array $URLs - list of urls to send to API
39
  * @param int $compressionType 1 - lossy, 0 - lossless
40
  * @return response from wp_remote_post or error
41
  */
42
+ public function doRequests($URLs, $Blocking, $itemHandler, $compressionType = false, $refresh = false) {
43
  $requestParameters = array(
44
  'plugin_version' => PLUGIN_VERSION,
45
  'key' => $this->_settings->apiKey,
52
  'resize_height' => $this->_settings->resizeHeight,
53
  'urllist' => $URLs
54
  );
55
+ if($refresh) {
56
+ $requestParameters['refresh'] = 1;
57
+ }
58
  $arguments = array(
59
  'method' => 'POST',
60
  'timeout' => 15,
97
  {//set details inside file so user can know what happened
98
  $itemHandler->setError($errorCode, $errorMessage);
99
  $itemHandler->incrementRetries();
 
 
 
 
100
  return array("response" => array("code" => $errorCode, "message" => $errorMessage ));
101
  }
102
 
142
 
143
  $PATHs = self::CheckAndFixImagePaths($PATHs);//check for images to make sure they exist on disk
144
  if ( $PATHs === false ) {
145
+ $msg = __('The file(s) do not exist on disk.','shortpixel');
 
 
146
  $itemHandler->setError(self::ERR_FILE_NOT_FOUND, $msg );
147
  return array("Status" => self::STATUS_SKIP, "Message" => $msg, "Silent" => $itemHandler->getType() == ShortPixelMetaFacade::CUSTOM_TYPE ? 1 : 0);
148
  }
157
  {//keeps track of time
158
  if ( $apiRetries > MAX_API_RETRIES )//we tried to process this time too many times, giving up...
159
  {
160
+ $itemHandler->setError(self::ERR_TIMEOUT, __('Timed out while processing.','shortpixel'));
 
 
 
161
  $itemHandler->incrementRetries();
162
  $this->_settings->apiRetries = 0; //fai added to solve a bug?
163
  return array("Status" => self::STATUS_SKIP,
164
+ "Message" => ($itemHandler->getType() == ShortPixelMetaFacade::CUSTOM_TYPE ? __('Image ID','shortpixel') : __('Media ID','shortpixel'))
165
+ . ": " . $itemHandler->getId() .' ' . __('Skip this image, try the next one.','shortpixel'));
166
  }
167
  else
168
  {//we'll try again next time user visits a page on admin panel
169
  $apiRetries++;
170
  $this->_settings->apiRetries = $apiRetries;
171
+ return array("Status" => self::STATUS_RETRY, "Message" => __('Timed out while processing.','shortpixel') . ' (pass '.$apiRetries.')',
172
  "Count" => $apiRetries);
173
  }
174
  }
179
  $response = $this->doRequests($URLs, true, $itemHandler, $compressionType);//send requests to API
180
 
181
  if($response['response']['code'] != 200)//response <> 200 -> there was an error apparently?
182
+ return array("Status" => self::STATUS_FAIL, "Message" => __('There was an error and your request was not processed.','shortpixel'));
183
 
184
  $APIresponse = $this->parseResponse($response);//get the actual response from API, its an array
185
 
206
  if ( !file_exists($PATHs[0]) ) {
207
  $itemHandler->incrementRetries(2);
208
  $err = array("Status" => self::STATUS_NOT_FOUND, "Message" => "File not found on disk. "
209
+ . ($itemHandler->getType() == ShortPixelMetaFacade::CUSTOM_TYPE ? "Image" : "Media")
210
  . " ID: " . $itemHandler->getId());
211
  }
212
  elseif ( isset($APIresponse[0]->Status->Message) ) {
213
  //return array("Status" => self::STATUS_FAIL, "Message" => "There was an error and your request was not processed (" . $APIresponse[0]->Status->Message . "). REQ: " . json_encode($URLs));
214
  $err = array("Status" => self::STATUS_FAIL, "Code" => (isset($APIresponse[0]->Status->Code) ? $APIresponse[0]->Status->Code : ""),
215
+ "Message" => __('There was an error and your request was not processed.','shortpixel')
216
+ . " (" . $APIresponse[0]->Status->Message . ")");
217
  } else {
218
+ $err = array("Status" => self::STATUS_FAIL, "Message" => __('There was an error and your request was not processed.','shortpixel'));
219
  }
220
 
221
  $itemHandler->incrementRetries();
231
 
232
  if(!isset($APIresponse['Status'])) {
233
  WpShortPixel::log("API Response Status unfound : " . json_encode($APIresponse));
234
+ return array("Status" => self::STATUS_FAIL, "Message" => __('Unecognized API response. Please contact support.','shortpixel'));
235
  } else {
236
  switch($APIresponse['Status']->Code)
237
  {
238
  case -403:
239
  @delete_option('bulkProcessingStatus');
240
  $this->_settings->quotaExceeded = 1;
241
+ return array("Status" => self::STATUS_QUOTA_EXCEEDED, "Message" => __('Quota exceeded.','shortpixel'));
242
  break;
243
  }
244
 
299
 
300
  $downloadTimeout = max(ini_get('max_execution_time') - 10, 15);
301
 
302
+ $webpTempFile = "NA";
303
+ if(isset($fileData->$webpType) && $fileData->$webpType !== "NA") {
304
  $webpURL = $this->setPreferredProtocol(urldecode($fileData->$webpType));
305
  $webpTempFile = download_url($webpURL, $downloadTimeout);
306
+ $webpTempFile = is_wp_error( $webpTempFile ) ? "NA" : $webpTempFile;
307
  }
 
308
 
309
  //if there is no improvement in size then we do not download this file
310
  if ( $fileData->OriginalSize == $fileData->$fileSize )
327
  @unlink($tempFile);
328
  $returnMessage = array(
329
  "Status" => self::STATUS_ERROR,
330
+ "Message" => __('Error downloading file','shortpixel') . " ({$fileData->$fileType}) " . $tempFile->get_error_message());
331
  }
332
  //check response so that download is OK
333
  elseif( filesize($tempFile) != $correctFileSize) {
335
  @unlink($tempFile);
336
  $returnMessage = array(
337
  "Status" => self::STATUS_ERROR,
338
+ "Message" => sprintf(__('Error downloading file - incorrect file size (downloaded: %s, correct: %s )','shortpixel'),$size, $correctFileSize));
339
  }
340
  elseif (!file_exists($tempFile)) {
341
+ $returnMessage = array("Status" => self::STATUS_ERROR, "Message" => __('Unable to locate downloaded file','shortpixel') . " " . $tempFile);
342
  }
343
  return $returnMessage;
344
  }
391
  }
392
 
393
  //figure out in what SubDir files should land
 
394
  $fullSubDir = str_replace(wp_normalize_path(get_home_path()), "", wp_normalize_path(dirname($itemHandler->getMeta()->getPath()))) . '/';
 
395
  $SubDir = ShortPixelMetaFacade::returnSubDir($itemHandler->getMeta()->getPath(), $itemHandler->getType());
396
 
397
  //if backup is enabled - we try to save the images
400
  $source = $PATHs; //array with final paths for these files
401
 
402
  if( !file_exists(SP_BACKUP_FOLDER) && !@mkdir(SP_BACKUP_FOLDER, 0777, true) ) {//creates backup folder if it doesn't exist
403
+ return array("Status" => self::STATUS_FAIL, "Message" => __('Backup folder does not exist and it cannot be created','shortpixel'));
404
  }
405
  //create subdir in backup folder if needed
406
  @mkdir( SP_BACKUP_FOLDER . '/' . $fullSubDir, 0777, true);
420
  {
421
  if ( !@copy($source[$fileID], $filePATH) )
422
  {//file couldn't be saved in backup folder
423
+ $msg = sprintf(__('Cannot save file <i>%s</i> in backup directory','shortpixel'),self::MB_basename($source[$fileID]));
 
424
  $itemHandler->setError(self::ERR_SAVE_BKP, $msg);
425
  $itemHandler->incrementRetries();
426
  return array("Status" => self::STATUS_FAIL, "Message" => $msg);
429
  }
430
  $NoBackup = true;
431
  } else {//cannot write to the backup dir, return with an error
432
+ $msg = __('Cannot save file in backup directory','shortpixel');
 
433
  $itemHandler->setError(self::ERR_SAVE_BKP, $msg);
434
  $itemHandler->incrementRetries();
435
  return array("Status" => self::STATUS_FAIL, "Message" => $msg);
438
  }//end backup section
439
 
440
  $writeFailed = 0;
 
441
  $width = $height = null;
442
  $resize = $this->_settings->resizeImages;
443
+ $retinas = 0;
444
 
445
  if ( !empty($tempFiles) )
446
  {
455
  $tempFilePATH = $tempFile["Message"];
456
  if ( file_exists($tempFilePATH) && file_exists($PATHs[$tempFileID]) && is_writable($PATHs[$tempFileID]) ) {
457
  copy($tempFilePATH, $targetFile);
458
+ $retinas += ShortPixelMetaFacade::isRetina($targetFile) ? 1 : 0;
459
+ if($resize && $itemHandler->getMeta()->getPath() == $targetFile) { //this is the main image
460
+ $size = getimagesize($PATHs[$tempFileID]);
461
+ $width = $size[0];
462
+ $height = $size[1];
 
 
463
  }
464
  //Calculate the saved space
465
  $fileData = $APIresponse[$tempFileID];
490
 
491
  if ( $writeFailed > 0 )//there was an error
492
  {
493
+ $msg = sprintf(__('Optimized version of %s file(s) couldn\'t be updated.','shortpixel'),$writeFailed);
494
  //#ShortPixelAPI::SaveMessageinMetadata($ID, 'Error: optimized version of ' . $writeFailed . ' file(s) couldn\'t be updated.');
495
  $itemHandler->setError(self::ERR_SAVE, $msg);
496
  $itemHandler->incrementRetries();
524
  $meta->setKeepExif($this->_settings->keepExif);
525
  $meta->setTsOptimized(date("Y-m-d H:i:s"));
526
  $meta->setThumbsOpt(($meta->getThumbsTodo() || $this->_settings->processThumbnails) ? count($meta->getThumbs()) : 0);
527
+ $meta->setRetinasOpt($retinas);
528
  $meta->setThumbsTodo(false);
529
  if($width && $height) {
530
  $meta->setActualWidth($width);
wp-shortpixel-req.php CHANGED
@@ -1,6 +1,8 @@
1
  <?php
2
  if(defined('SHORTPIXEL_DEBUG') && SHORTPIXEL_DEBUG === true) {
3
  require_once('shortpixel-debug.php');
 
 
4
  }
5
 
6
  require_once('class/wp-shortpixel-settings.php');
@@ -27,6 +29,18 @@ require_once('class/shortpixel-tools.php');
27
  require_once( ABSPATH . 'wp-admin/includes/image.php' );
28
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
29
 
 
 
 
 
 
 
 
 
 
 
 
 
30
  /*
31
  if ( !is_plugin_active( 'wpmandrill/wpmandrill.php' ) //avoid conflicts with some plugins
32
  && !is_plugin_active( 'wp-ses/wp-ses.php' )
1
  <?php
2
  if(defined('SHORTPIXEL_DEBUG') && SHORTPIXEL_DEBUG === true) {
3
  require_once('shortpixel-debug.php');
4
+ } else {
5
+ define('SHORTPIXEL_DEBUG', false);
6
  }
7
 
8
  require_once('class/wp-shortpixel-settings.php');
29
  require_once( ABSPATH . 'wp-admin/includes/image.php' );
30
  include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
31
 
32
+ // for retro compatibility with WP < 3.5
33
+ if( !function_exists('wp_normalize_path') ){
34
+ function wp_normalize_path( $path ) {
35
+ $path = str_replace( '\\', '/', $path );
36
+ $path = preg_replace( '|(?<=.)/+|', '/', $path );
37
+ if ( ':' === substr( $path, 1, 1 ) ) {
38
+ $path = ucfirst( $path );
39
+ }
40
+ return $path;
41
+ }
42
+ }
43
+
44
  /*
45
  if ( !is_plugin_active( 'wpmandrill/wpmandrill.php' ) //avoid conflicts with some plugins
46
  && !is_plugin_active( 'wp-ses/wp-ses.php' )
wp-shortpixel.php CHANGED
@@ -3,7 +3,7 @@
3
  * Plugin Name: ShortPixel Image Optimizer
4
  * Plugin URI: https://shortpixel.com/
5
  * Description: ShortPixel optimizes images automatically, while guarding the quality of your images. Check your <a href="options-general.php?page=wp-shortpixel" target="_blank">Settings &gt; ShortPixel</a> page on how to start optimizing your image library and make your website load faster.
6
- * Version: 4.1.7
7
  * Author: ShortPixel
8
  * Author URI: https://shortpixel.com
9
  */
@@ -12,7 +12,7 @@ define('SP_RESET_ON_ACTIVATE', false); //if true TODO set false
12
 
13
  define('SP_AFFILIATE_CODE', '');
14
 
15
- define('PLUGIN_VERSION', "4.1.7");
16
  define('SP_MAX_TIMEOUT', 10);
17
  define('SP_VALIDATE_MAX_TIMEOUT', 15);
18
  define('SP_BACKUP', 'ShortpixelBackups');
@@ -62,6 +62,7 @@ class WPShortPixel {
62
  }
63
 
64
  require_once('wp-shortpixel-req.php');
 
65
 
66
  $isAdminUser = current_user_can( 'manage_options' );
67
 
@@ -156,14 +157,16 @@ class WPShortPixel {
156
  }
157
 
158
  public function registerSettingsPage() {
159
- add_options_page( 'ShortPixel Settings', 'ShortPixel', 'manage_options', 'wp-shortpixel', array($this, 'renderSettingsMenu'));
160
  }
161
 
162
  function registerAdminPage( ) {
163
  if($this->spMetaDao->hasFoldersTable() && count($this->spMetaDao->getFolders())) {
164
- add_media_page( 'Other Media Optimized by ShortPixel', 'Other Media', 'edit_others_posts', 'wp-short-pixel-custom', array( &$this, 'listCustomMedia' ) );
 
165
  }
166
- add_media_page( 'ShortPixel Bulk Process', 'Bulk ShortPixel', 'edit_others_posts', 'wp-short-pixel-bulk', array( &$this, 'bulkProcess' ) );
 
167
  }
168
 
169
  public static function shortPixelActivatePlugin()//reset some params to avoid trouble for plugins that were activated/deactivated/activated
@@ -210,7 +213,7 @@ class WPShortPixel {
210
 
211
  public function dismissMediaAlert() {
212
  $this->_settings->mediaAlert = 1;
213
- die(json_encode(array("Status" => 'success', "Message" => 'Media alert dismissed')));
214
  }
215
 
216
  //set default move as "list". only set once, it won't try to set the default mode again.
@@ -231,7 +234,7 @@ class WPShortPixel {
231
  }
232
 
233
  static function log($message) {
234
- if (WP_DEBUG === true) {
235
  if (is_array($message) || is_object($message)) {
236
  error_log(print_r($message, true));
237
  } else {
@@ -260,7 +263,30 @@ class WPShortPixel {
260
  };
261
  </script> <?php
262
  wp_enqueue_style('short-pixel.css', plugins_url('/res/css/short-pixel.css',__FILE__) );
263
- wp_enqueue_script('short-pixel.js', plugins_url('/res/js/short-pixel.js',__FILE__) );
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
264
  wp_enqueue_script('jquery.knob.js', plugins_url('/res/js/jquery.knob.js',__FILE__) );
265
  wp_enqueue_script('jquery.tooltip.js', plugins_url('/res/js/jquery.tooltip.js',__FILE__) );
266
  }
@@ -268,17 +294,18 @@ class WPShortPixel {
268
  function toolbar_shortpixel_processing( $wp_admin_bar ) {
269
 
270
  $extraClasses = " shortpixel-hide";
271
- $tooltip = "ShortPixel optimizing...";
 
272
  $icon = "shortpixel.png";
273
  $successLink = $link = current_user_can( 'edit_others_posts')? 'upload.php?page=wp-short-pixel-bulk' : 'upload.php';
274
  $blank = "";
275
  if($this->prioQ->processing()) {
276
  $extraClasses = " shortpixel-processing";
277
  }
278
- self::log("TOOLBAR: Quota exceeded: " . $this->_settings->quotaExceeded);
279
  if($this->_settings->quotaExceeded) {
280
  $extraClasses = " shortpixel-alert shortpixel-quota-exceeded";
281
- $tooltip = "ShortPixel quota exceeded. Click for details.";
 
282
  //$link = "http://shortpixel.com/login/" . $this->_settings->apiKey;
283
  $link = "options-general.php?page=wp-shortpixel";
284
  //$blank = '_blank';
@@ -318,7 +345,7 @@ class WPShortPixel {
318
  $meta = wp_get_attachment_metadata($ID);
319
  if( ( !isset($meta['ShortPixel']) //never touched by ShortPixel
320
  || (isset($meta['ShortPixel']['WaitingProcessing']) && $meta['ShortPixel']['WaitingProcessing'] == true))
321
- && (!isset($meta['ShortPixelImprovement']) || $meta['ShortPixelImprovement'] == 'Optimization N/A')) {
322
  $this->prioQ->push($ID);
323
  $meta['ShortPixel']['WaitingProcessing'] = true;
324
  wp_update_attachment_metadata($ID, $meta);
@@ -340,26 +367,30 @@ class WPShortPixel {
340
  return $meta;
341
  }
342
  //else
343
- self::log("IMG: Auto-analyzing file ID #{$ID}");
344
 
345
  if( self::isProcessable($ID) == false )
346
  {//not a file that we can process
347
- $meta['ShortPixelImprovement'] = 'Optimization N/A';
348
  return $meta;
349
  }
350
  else
351
  {//the kind of file we can process. goody.
352
  $this->prioQ->push($ID);
353
- $itemHandler = new ShortPixelMetaFacade($ID);
354
- $itemHandler->setRawMeta($meta);
355
- $URLsAndPATHs = $this->getURLsAndPATHs($itemHandler);
356
- //send a processing request right after a file was uploaded, do NOT wait for response
357
- $this->_apiInterface->doRequests($URLsAndPATHs['URLs'], false, $ID);
358
- self::log("IMG: sent: " . json_encode($URLsAndPATHs));
 
 
 
 
 
359
  $meta['ShortPixel']['WaitingProcessing'] = true;
360
  return $meta;
361
  }
362
-
363
  }//end handleMediaLibraryImageUpload
364
 
365
  /**
@@ -449,7 +480,7 @@ class WPShortPixel {
449
  $idList = array();
450
  $itemList = array();
451
  for ($sanityCheck = 0, $crtStartQueryID = $startQueryID;
452
- $crtStartQueryID >= $endQueryID && count($itemList) < 3; $sanityCheck++) {
453
 
454
  self::log("GETDB: current StartID: " . $crtStartQueryID);
455
 
@@ -507,7 +538,7 @@ class WPShortPixel {
507
  $crtStartQueryID--;
508
  }
509
  }
510
- return array("items" => $itemList, "skipped" => $skippedAlreadyProcessed);
511
  }
512
 
513
  /**
@@ -534,7 +565,7 @@ class WPShortPixel {
534
  $ids = $this->getFromPrioAndCheck();
535
  $itemHandler = (count($ids) > 0 ? $ids[0] : null);
536
  }
537
- $response = array("Status" => ShortPixelAPI::STATUS_NO_KEY, "ImageID" => $itemHandler ? $itemHandler->getId() : "-1", "Message" => "Missing API Key");
538
  $this->_settings->bulkLastStatus = $response;
539
  die(json_encode($response));
540
  }
@@ -550,8 +581,7 @@ class WPShortPixel {
550
  //1: get 3 ids to process. Take them with priority from the queue
551
  $ids = $this->getFromPrioAndCheck();
552
  if(count($ids) < 3 ) { //take from bulk if bulk processing active
553
- $bulkStatus = $this->prioQ->bulkRunning();
554
- if($bulkStatus =='running') {
555
  $res = $this->getBulkItemsFromDb();
556
  $bulkItems = $res['items'];
557
  if($bulkItems){
@@ -575,11 +605,17 @@ class WPShortPixel {
575
  // die("za stop 2");
576
 
577
  if ($ids === false || count( $ids ) == 0 ){
 
 
 
 
 
578
  $bulkEverRan = $this->prioQ->stopBulk();
579
  $avg = $this->getAverageCompression();
580
  $fileCount = $this->_settings->fileCount;
581
  $response = array("Status" => self::BULK_EMPTY_QUEUE,
582
- "Message" => 'Empty queue ' . $this->prioQ->getStartBulkId() . '->' . $this->prioQ->getStopBulkId(),
 
583
  "BulkStatus" => ($this->prioQ->bulkRunning()
584
  ? "1" : ($this->prioQ->bulkPaused() ? "2" : "0")),
585
  "AverageCompression" => $avg,
@@ -619,19 +655,13 @@ class WPShortPixel {
619
  $prio = $this->prioQ->remove($itemId);
620
  //remove also from the failed list if it failed in the past
621
  $prio = $this->prioQ->removeFromFailed($itemId);
622
- /* $result["Type"] = isset($meta['ShortPixel']['type']) ? $meta['ShortPixel']['type'] : '';
623
- $result["ThumbsTotal"] = isset($meta['sizes']) && is_array($meta['sizes']) ? count($meta['sizes']): 0;
624
- $result["ThumbsCount"] = isset($meta['ShortPixel']['thumbsOpt'])
625
- ? $meta['ShortPixel']['thumbsOpt'] //below is the fallback for old optimized images that don't have thumbsOpt
626
- : ($this->_settings->processThumbnails ? $result["ThumbsTotal"] : 0);
627
- */
628
  $result["Type"] = $meta->getCompressionType() !== null ? ShortPixelAPI::getCompressionTypeName($meta->getCompressionType()) : '';
629
  $result["ThumbsTotal"] = $meta->getThumbs() && is_array($meta->getThumbs()) ? count($meta->getThumbs()): 0;
630
  $result["ThumbsCount"] = $meta->getThumbsOpt()
631
  ? $meta->getThumbsOpt() //below is the fallback for old optimized images that don't have thumbsOpt
632
  : ($this->_settings->processThumbnails ? $result["ThumbsTotal"] : 0);
633
 
634
- //$result["BackupEnabled"] = ($this->getBackupFolder(get_attached_file($ID)) ? true : false);//$this->_settings->backupImages;
635
  $result["BackupEnabled"] = ($this->getBackupFolder($meta->getPath()) ? true : false);//$this->_settings->backupImages;
636
 
637
  if(!$prio && $itemId <= $this->prioQ->getStartBulkId()) {
@@ -646,16 +676,10 @@ class WPShortPixel {
646
  $thumb = $bkThumb = "";
647
  //$percent = 0;
648
  $percent = $meta->getImprovementPercent();
649
- //if(isset($meta["ShortPixelImprovement"]) && isset($meta["file"])){
650
  if($percent){
651
- //$percent = $meta["ShortPixelImprovement"];
652
-
653
- //$filePath = explode("/", $meta["file"]);
654
  $filePath = explode("/", $meta->getPath());
655
 
656
  //Get a suitable thumb
657
- //if(isset($meta["sizes"]) && count($meta["sizes"])) {
658
- //$sizes = $meta["sizes"];
659
  $sizes = $meta->getThumbs();
660
  if('pdf' == strtolower(pathinfo($result["Filename"], PATHINFO_EXTENSION))) {
661
  // echo($result["Filename"] . " ESTE --> "); die(var_dump(strtolower(pathinfo($result["Filename"], PATHINFO_EXTENSION))));
@@ -714,9 +738,11 @@ class WPShortPixel {
714
  if(! $this->prioQ->remove($itemId) ){
715
  $this->advanceBulk($meta->getId(), $result);
716
  }
717
- $itemHandler->deleteMeta(); //this deletes only the ShortPixel fields from meta, in case of WP Media library
 
 
718
  $result["Status"] = ShortPixelAPI::STATUS_SKIP;
719
- $result["Message"] .= " Retry limit reached. Skipping file ID " . $itemId . ".";
720
  $itemHandler->setError(ShortPixelAPI::ERR_INCORRECT_FILE_SIZE, $result["Message"] );
721
  }
722
  else {
@@ -730,7 +756,6 @@ class WPShortPixel {
730
  $prio = $this->prioQ->remove($itemId);
731
  if(isset($result["Code"])
732
  && ( $result["Code"] == "write-fail" //could not write
733
- //|| $result["Code"] == -201)) {
734
  || (in_array(0+$result["Code"], array(-201)) && $meta->getRetries() >= 3))) { //for -201 (invalid image format) we retry only 3 times.
735
  //put this one in the failed images list - to show the user at the end
736
  $prio = $this->prioQ->addToFailed($itemHandler->getQueuedId());
@@ -812,7 +837,7 @@ class WPShortPixel {
812
  return array("Status" => ShortPixelAPI::STATUS_SUCCESS, "message" => "");
813
  }
814
  }
815
- return array("Status" => ShortPixelAPI::STATUS_FAIL, "message" => "NextGen image not found");
816
  break;
817
  case "C-":
818
  throw new Exception("HandleManualOptimization for custom images not implemented");
@@ -900,7 +925,10 @@ class WPShortPixel {
900
  try {
901
  //main file
902
  $this->renameWithRetina($bkFile, $file);
903
-
 
 
 
904
 
905
  //overwriting thumbnails
906
  foreach($thumbsPaths as $source => $destination) {
@@ -914,6 +942,10 @@ class WPShortPixel {
914
  }
915
  unset($crtMeta["ShortPixelImprovement"]);
916
  unset($crtMeta['ShortPixel']);
 
 
 
 
917
  wp_update_attachment_metadata($ID, $crtMeta);
918
  }
919
 
@@ -981,7 +1013,7 @@ class WPShortPixel {
981
  $this->prioQ->push($qID);
982
  $ret = array("Status" => ShortPixelAPI::STATUS_SUCCESS, "Message" => "");
983
  } else {
984
- $ret = array("Status" => ShortPixelAPI::STATUS_SKIP, "Message" => "Could not restore from backup: " . $qID);
985
  }
986
  } else {
987
  $ID = intval($qID);
@@ -995,7 +1027,7 @@ class WPShortPixel {
995
  $this->sendToProcessing(new ShortPixelMetaFacade($ID), $compressionType == 'lossy' ? 1 : 0);
996
  $ret = array("Status" => ShortPixelAPI::STATUS_SUCCESS, "Message" => "");
997
  } else {
998
- $ret = array("Status" => ShortPixelAPI::STATUS_SKIP, "Message" => "Could not restore from backup: " . $ID);
999
  }
1000
  }
1001
  return $ret;
@@ -1014,7 +1046,7 @@ class WPShortPixel {
1014
  $this->sendToProcessing(new ShortPixelMetaFacade($ID));
1015
  $ret = array("Status" => ShortPixelAPI::STATUS_SUCCESS, "message" => "");
1016
  } else {
1017
- $ret = array("Status" => ShortPixelAPI::STATUS_SKIP, "message" => (isset($meta['ShortPixelImprovement']) ? "No thumbnails to optimize for ID: " : "Please optimize image for ID:") . $ID);
1018
  }
1019
  die(json_encode($ret));
1020
  }
@@ -1119,11 +1151,11 @@ class WPShortPixel {
1119
  <div class="wrap shortpixel-other-media">
1120
  <h2>
1121
  <div style="float:right;">
1122
- <a href="upload.php?page=wp-short-pixel-custom&refresh=1" id="refresh" class="button button-primary" title="Refresh custom folders content">
1123
- Refresh folders
1124
  </a>
1125
  </div>
1126
- Other Media optimized by ShortPixel
1127
  </h2>
1128
 
1129
  <div id="poststuff">
@@ -1299,7 +1331,7 @@ class WPShortPixel {
1299
 
1300
  public function browseContent() {
1301
  if ( !current_user_can( 'manage_options' ) ) {
1302
- wp_die('You do not have sufficient permissions to access this page.');
1303
  }
1304
 
1305
  $root = $this->getCustomFolderBase();
@@ -1326,7 +1358,7 @@ class WPShortPixel {
1326
 
1327
  $htmlRel = htmlentities($returnDir . $file);
1328
  $htmlName = htmlentities($file);
1329
- $ext = preg_replace('/^.*\./', '', $file);
1330
 
1331
  if( file_exists($postDir . $file) && $file != '.' && $file != '..' ) {
1332
  if( is_dir($postDir . $file) && (!$onlyFiles || $onlyFolders) )
@@ -1390,7 +1422,7 @@ class WPShortPixel {
1390
 
1391
  public function renderSettingsMenu() {
1392
  if ( !current_user_can( 'manage_options' ) ) {
1393
- wp_die('You do not have sufficient permissions to access this page.');
1394
  }
1395
 
1396
  wp_enqueue_style('sp-file-tree.css', plugins_url('/res/css/sp-file-tree.css',__FILE__) );
@@ -1427,8 +1459,15 @@ class WPShortPixel {
1427
  {
1428
  $KeyLength = strlen($_POST['key']);
1429
 
1430
- $notice = array("status" => "error", "msg" => "The key you provided has " . $KeyLength . " characters. The API key should have 20 characters, letters and numbers only.<BR> <b>Please check that the API key is the same as the one you received in your confirmation email.</b><BR>
1431
- If this problem persists, please contact us at <a href='mailto:help@shortpixel.com?Subject=API Key issues' target='_top'>help@shortpixel.com</a> or <a href='https://shortpixel.com/contact' target='_blank'>here</a>.");
 
 
 
 
 
 
 
1432
  }
1433
  else
1434
  {
@@ -1445,20 +1484,21 @@ class WPShortPixel {
1445
  //display notification
1446
  $urlParts = explode("/", get_site_url());
1447
  if( $validityData['DomainCheck'] == 'NOT Accessible'){
1448
- $notice = array("status" => "warn", "msg" => "API Key is valid but your site is not accessible from our servers.
1449
- Please make sure that your server is accessible from the Internet before using the API or otherwise we won't be able to optimize them.");
1450
  } else {
1451
  if ( function_exists("is_multisite") && is_multisite() && !defined("SHORTPIXEL_API_KEY"))
1452
- $notice = array("status" => "success", "msg" => "API Key valid! <br>You seem to be running a multisite, please note that API Key can also be configured in wp-config.php like this:<BR> <b>define('SHORTPIXEL_API_KEY', '".$this->_settings->apiKey."');</b>");
 
1453
  else
1454
- $notice = array("status" => "success", "msg" => 'API Key valid!');
1455
  }
1456
  }
1457
  $this->_settings->verifiedKey = true;
1458
  //test that the "uploads" have the right rights and also we can create the backup dir for ShortPixel
1459
  if ( !file_exists(SP_BACKUP_FOLDER) && !@mkdir(SP_BACKUP_FOLDER, 0777, true) )
1460
- $notice = array("status" => "error", "msg" => "There is something preventing us to create a new folder for backing up your original files.<BR>
1461
- Please make sure that folder <b>" . WP_CONTENT_DIR . '/' . SP_UPLOADS_NAME . "</b> has the necessary write and read rights.");
 
1462
  } else {
1463
  if(isset($_POST['validate'])) {
1464
  //display notification
@@ -1486,8 +1526,8 @@ class WPShortPixel {
1486
  $uploadDir = wp_upload_dir();
1487
  $uploadPath = $uploadDir["basedir"];
1488
 
1489
- if( isset($_POST['save']) && $_POST['save'] == "Save and Go to Bulk Process"
1490
- || isset($_POST['saveAdv']) && $_POST['saveAdv'] == "Save and Go to Bulk Process") {
1491
  wp_redirect("upload.php?page=wp-short-pixel-bulk");
1492
  exit();
1493
  }
@@ -1505,13 +1545,15 @@ class WPShortPixel {
1505
  if(isset($_POST['addCustomFolder']) && strlen($_POST['addCustomFolder']) > 0) {
1506
  $folderMsg = $this->spMetaDao->newFolderFromPath($_POST['addCustomFolder'], $uploadPath, $this->getCustomFolderBase());
1507
  if(!$folderMsg) {
1508
- $notice = array("status" => "success", "msg" => 'Folder added successfully.');
1509
  }
1510
  $customFolders = $this->spMetaDao->getFolders();
1511
  $this->_settings->hasCustomFolders = true;
1512
  }
1513
- if(isset($_POST['createWebp'])) { $this->_settings->createWebp = 1; } else { $this->_settings->createWebp = 0; }
1514
- if(isset($_POST['frontBootstrap'])) { $this->_settings->frontBootstrap = 1; } else { $this->_settings->frontBootstrap = 0; }
 
 
1515
  }
1516
  if(isset($_POST['removeFolder']) && strlen(($_POST['removeFolder']))) {
1517
  $this->spMetaDao->removeFolder($_POST['removeFolder']);
@@ -1681,9 +1723,9 @@ class WPShortPixel {
1681
 
1682
  $defaultData = array(
1683
  "APIKeyValid" => false,
1684
- "Message" => 'API Key could not be validated due to a connectivity error.<BR>Your firewall may be blocking us. Please contact your hosting provider and ask them to allow connections from your site to IP 176.9.106.46.<BR> If you still cannot validate your API Key after this, please <a href="https://shortpixel.com/contact" target="_blank">contact us</a> and we will try to help. ',
1685
- "APICallsMade" => 'Information unavailable. Please check your API key.',
1686
- "APICallsQuota" => 'Information unavailable. Please check your API key.',
1687
  "DomainCheck" => 'NOT Accessible');
1688
 
1689
  if(is_object($response) && get_class($response) == 'WP_Error') {
@@ -1724,10 +1766,10 @@ class WPShortPixel {
1724
 
1725
  return array(
1726
  "APIKeyValid" => true,
1727
- "APICallsMade" => number_format($data->APICallsMade) . ' images',
1728
- "APICallsQuota" => number_format($data->APICallsQuota) . ' images',
1729
- "APICallsMadeOneTime" => number_format($data->APICallsMadeOneTime) . ' images',
1730
- "APICallsQuotaOneTime" => number_format($data->APICallsQuotaOneTime) . ' images',
1731
  "APICallsMadeNumeric" => $data->APICallsMade,
1732
  "APICallsQuotaNumeric" => $data->APICallsQuota,
1733
  "APICallsMadeOneTimeNumeric" => $data->APICallsMadeOneTime,
@@ -1758,7 +1800,7 @@ class WPShortPixel {
1758
  elseif (empty($data)) { //TODO asta devine if si decomentam returnurile
1759
  if($fileExtension == "pdf") {
1760
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'optimizeNow';
1761
- $renderData['message'] = 'PDF not processed.';
1762
  }
1763
  else { //Optimization N/A
1764
  $renderData['status'] = 'n/a';
@@ -1780,18 +1822,20 @@ class WPShortPixel {
1780
  $sizes = isset($data['sizes']) ? count($data['sizes']) : 0;
1781
  $renderData['thumbsTotal'] = $sizes;
1782
  $renderData['thumbsOpt'] = isset($data['ShortPixel']['thumbsOpt']) ? $data['ShortPixel']['thumbsOpt'] : $sizes;
 
1783
  $renderData['quotaExceeded'] = $quotaExceeded;
1784
  }
1785
- elseif($data['ShortPixelImprovement'] == "Optimization N/A") { //We don't optimize this
1786
  $renderData['status'] = 'n/a';
1787
  }
1788
  elseif(isset($meta['ShortPixel']['BulkProcessing'])) { //Scheduled to bulk.
1789
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'optimizeNow';
1790
  $renderData['message'] = 'Waiting for bulk processing.';
1791
  }
1792
- elseif( trim(strip_tags($data['ShortPixelImprovement'])) == "Cannot write optimized file" ) {
1793
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'retry';
1794
- $renderData['message'] = "Cannot write optimized file - <a href='https://shortpixel.com/faq#cannot-write-optimized-file' target='_blank'>Why?</a>";
 
1795
  }
1796
  elseif( strlen(trim(strip_tags($data['ShortPixelImprovement']))) > 0 ) {
1797
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'retry';
@@ -1799,11 +1843,11 @@ class WPShortPixel {
1799
  }
1800
  elseif(isset($data['ShortPixel']['NoFileOnDisk'])) {
1801
  $renderData['status'] = 'notFound';
1802
- $renderData['message'] = 'Image does not exist';
1803
  }
1804
  elseif(isset($data['ShortPixel']['WaitingProcessing'])) {
1805
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'retry';
1806
- $renderData['message'] = "<img src=\"" . plugins_url( 'res/img/loading.gif', __FILE__ ) . "\" class='sp-loading-small'>&nbsp;Image waiting to be processed.";
1807
  if($id > $this->prioQ->getFlagBulkId() || !$this->prioQ->bulkRunning()) $this->prioQ->push($id); //should be there but just to make sure
1808
  }
1809
  else { //finally
@@ -1820,7 +1864,8 @@ class WPShortPixel {
1820
  public function columns( $defaults ) {
1821
  $defaults['wp-shortPixel'] = 'ShortPixel Compression';
1822
  if(current_user_can( 'manage_options' )) {
1823
- $defaults['wp-shortPixel'] .= '&nbsp;<a href="options-general.php?page=wp-shortpixel#stats" title="ShortPixel Statistics"><span class="dashicons dashicons-dashboard"></span></a>';
 
1824
  }
1825
  return $defaults;
1826
  }
@@ -1838,7 +1883,7 @@ class WPShortPixel {
1838
  }
1839
 
1840
  public function nggColumnHeader( $default ) {
1841
- return 'ShortPixel Compression';
1842
  }
1843
 
1844
  public function nggColumnContent( $unknown, $picture ) {
@@ -1856,6 +1901,7 @@ class WPShortPixel {
1856
  'bonus' => $meta->getImprovementPercent() < 5,
1857
  'thumbsOpt' => 0,
1858
  'thumbsTotal' => 0,
 
1859
  'backup' => true
1860
  ));
1861
  break;
@@ -1866,6 +1912,7 @@ class WPShortPixel {
1866
  'status' => 'optimizeNow',
1867
  'thumbsOpt' => 0,
1868
  'thumbsTotal' => 0,
 
1869
  'message' => "Not optimized"
1870
  ));
1871
  }
@@ -1907,7 +1954,7 @@ class WPShortPixel {
1907
 
1908
  //return an array with URL(s) and PATH(s) for this file
1909
  public function getURLsAndPATHs($itemHandler, $meta = NULL, $onlyThumbs = false) {
1910
- return $itemHandler->getURLsAndPATHs($this->_settings->processThumbnails, $onlyThumbs);
1911
  }
1912
 
1913
 
@@ -2125,7 +2172,11 @@ function shortpixelNggAdd($image) {
2125
  if ( !function_exists( 'vc_action' ) || vc_action() !== 'vc_inline' ) { //handle incompatibility with Visual Composer
2126
  add_action( 'init', 'shortpixelInit');
2127
  add_action('ngg_added_new_image', 'shortpixelNggAdd');
2128
- add_filter( 'wp_generate_attachment_metadata', 'handleImageUploadHook', 10, 2 );
 
 
 
 
2129
 
2130
  register_activation_hook( __FILE__, array( 'WPShortPixel', 'shortPixelActivatePlugin' ) );
2131
  register_deactivation_hook( __FILE__, array( 'WPShortPixel', 'shortPixelDeactivatePlugin' ) );
3
  * Plugin Name: ShortPixel Image Optimizer
4
  * Plugin URI: https://shortpixel.com/
5
  * Description: ShortPixel optimizes images automatically, while guarding the quality of your images. Check your <a href="options-general.php?page=wp-shortpixel" target="_blank">Settings &gt; ShortPixel</a> page on how to start optimizing your image library and make your website load faster.
6
+ * Version: 4.2.0
7
  * Author: ShortPixel
8
  * Author URI: https://shortpixel.com
9
  */
12
 
13
  define('SP_AFFILIATE_CODE', '');
14
 
15
+ define('PLUGIN_VERSION', "4.2.0");
16
  define('SP_MAX_TIMEOUT', 10);
17
  define('SP_VALIDATE_MAX_TIMEOUT', 15);
18
  define('SP_BACKUP', 'ShortpixelBackups');
62
  }
63
 
64
  require_once('wp-shortpixel-req.php');
65
+ load_plugin_textdomain('shortpixel', false, plugin_basename(dirname( __FILE__ )).'/lang');
66
 
67
  $isAdminUser = current_user_can( 'manage_options' );
68
 
157
  }
158
 
159
  public function registerSettingsPage() {
160
+ add_options_page( __('ShortPixel Settings','shortpixel'), 'ShortPixel', 'manage_options', 'wp-shortpixel', array($this, 'renderSettingsMenu'));
161
  }
162
 
163
  function registerAdminPage( ) {
164
  if($this->spMetaDao->hasFoldersTable() && count($this->spMetaDao->getFolders())) {
165
+ /*translators: title and menu name for the Other media page*/
166
+ add_media_page( __('Other Media Optimized by ShortPixel','shortpixel'), __('Other Media','shortpixel'), 'edit_others_posts', 'wp-short-pixel-custom', array( &$this, 'listCustomMedia' ) );
167
  }
168
+ /*translators: title and menu name for the Bulk Processing page*/
169
+ add_media_page( __('ShortPixel Bulk Process','shortpixel'), __('Bulk ShortPixel','shortpixel'), 'edit_others_posts', 'wp-short-pixel-bulk', array( &$this, 'bulkProcess' ) );
170
  }
171
 
172
  public static function shortPixelActivatePlugin()//reset some params to avoid trouble for plugins that were activated/deactivated/activated
213
 
214
  public function dismissMediaAlert() {
215
  $this->_settings->mediaAlert = 1;
216
+ die(json_encode(array("Status" => 'success', "Message" => __('Media alert dismissed','shortpixel'))));
217
  }
218
 
219
  //set default move as "list". only set once, it won't try to set the default mode again.
234
  }
235
 
236
  static function log($message) {
237
+ if (SHORTPIXEL_DEBUG === true) {
238
  if (is_array($message) || is_object($message)) {
239
  error_log(print_r($message, true));
240
  } else {
263
  };
264
  </script> <?php
265
  wp_enqueue_style('short-pixel.css', plugins_url('/res/css/short-pixel.css',__FILE__) );
266
+
267
+ wp_register_script('short-pixel.js', plugins_url('/res/js/short-pixel.js',__FILE__) );
268
+ $jsTranslation = array(
269
+ 'optimizeWithSP' => __( 'Optimize with ShortPixel', 'shortpixel' ),
270
+ 'changeMLToListMode' => __( 'In order to access the ShortPixel Optimization actions and info, please change to {0}List View{1}List View{2}Dismiss{3}', 'shortpixel' ),
271
+ 'alertOnlyAppliesToNewImages' => __( 'This type of optimization will apply to new uploaded images.\nImages that were already processed will not be re-optimized unless you restart the bulk process.', 'shortpixel' ),
272
+ 'areYouSureStopOptimizing' => __( 'Are you sure you want to stop optimizing the folder {0}?', 'shortpixel' ),
273
+ 'reducedBy' => __( 'Reduced by', 'shortpixel' ),
274
+ 'bonusProcessing' => __( 'Bonus processing', 'shortpixel' ),
275
+ 'plusXthumbsOpt' => __( '+{0} thumbnails optimized', 'shortpixel' ),
276
+ 'plusXretinasOpt' => __( '+{0} Retina images optimized', 'shortpixel' ),
277
+ 'optXThumbs' => __( 'Optimize {0} thumbnails', 'shortpixel' ),
278
+ 'reOptimizeAs' => __( 'Reoptimize {0}', 'shortpixel' ),
279
+ 'restoreBackup' => __( 'Restore backup', 'shortpixel' ),
280
+ 'getApiKey' => __( 'Get API Key', 'shortpixel' ),
281
+ 'extendQuota' => __( 'Extend Quota', 'shortpixel' ),
282
+ 'check__Quota' => __( 'Check&nbsp;&nbsp;Quota', 'shortpixel' ),
283
+ 'retry' => __( 'Retry', 'shortpixel' ),
284
+ 'thisContentNotProcessable' => __( 'This content is not processable.', 'shortpixel' ),
285
+ 'imageWaitOptThumbs' => __( 'Image waiting to optimize thumbnails', 'shortpixel' )
286
+ );
287
+ wp_localize_script( 'short-pixel.js', '_spTr', $jsTranslation );
288
+ wp_enqueue_script('short-pixel.js');
289
+
290
  wp_enqueue_script('jquery.knob.js', plugins_url('/res/js/jquery.knob.js',__FILE__) );
291
  wp_enqueue_script('jquery.tooltip.js', plugins_url('/res/js/jquery.tooltip.js',__FILE__) );
292
  }
294
  function toolbar_shortpixel_processing( $wp_admin_bar ) {
295
 
296
  $extraClasses = " shortpixel-hide";
297
+ /*translators: toolbar icon tooltip*/
298
+ $tooltip = __('ShortPixel optimizing...','shortpixel');
299
  $icon = "shortpixel.png";
300
  $successLink = $link = current_user_can( 'edit_others_posts')? 'upload.php?page=wp-short-pixel-bulk' : 'upload.php';
301
  $blank = "";
302
  if($this->prioQ->processing()) {
303
  $extraClasses = " shortpixel-processing";
304
  }
 
305
  if($this->_settings->quotaExceeded) {
306
  $extraClasses = " shortpixel-alert shortpixel-quota-exceeded";
307
+ /*translators: toolbar icon tooltip*/
308
+ $tooltip = __('ShortPixel quota exceeded. Click for details.','shortpixel');
309
  //$link = "http://shortpixel.com/login/" . $this->_settings->apiKey;
310
  $link = "options-general.php?page=wp-shortpixel";
311
  //$blank = '_blank';
345
  $meta = wp_get_attachment_metadata($ID);
346
  if( ( !isset($meta['ShortPixel']) //never touched by ShortPixel
347
  || (isset($meta['ShortPixel']['WaitingProcessing']) && $meta['ShortPixel']['WaitingProcessing'] == true))
348
+ && (!isset($meta['ShortPixelImprovement']) || $meta['ShortPixelImprovement'] == __('Optimization N/A','shortpixel'))) {
349
  $this->prioQ->push($ID);
350
  $meta['ShortPixel']['WaitingProcessing'] = true;
351
  wp_update_attachment_metadata($ID, $meta);
367
  return $meta;
368
  }
369
  //else
370
+ //self::log("IMG: Auto-analyzing file ID #{$ID}");
371
 
372
  if( self::isProcessable($ID) == false )
373
  {//not a file that we can process
374
+ $meta['ShortPixelImprovement'] = __('Optimization N/A','shortpixel');
375
  return $meta;
376
  }
377
  else
378
  {//the kind of file we can process. goody.
379
  $this->prioQ->push($ID);
380
+ //that's a hack for watermarking plugins, don't send the image right away to processing, only add it in the queue
381
+ include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
382
+ if( !is_plugin_active('image-watermark/image-watermark.php')
383
+ && !is_plugin_active('easy-watermark/index.php')) {
384
+ $itemHandler = new ShortPixelMetaFacade($ID);
385
+ $itemHandler->setRawMeta($meta);
386
+ $URLsAndPATHs = $this->getURLsAndPATHs($itemHandler);
387
+ //send a processing request right after a file was uploaded, do NOT wait for response
388
+ $this->_apiInterface->doRequests($URLsAndPATHs['URLs'], false, $ID);
389
+ //self::log("IMG: sent: " . json_encode($URLsAndPATHs));
390
+ }
391
  $meta['ShortPixel']['WaitingProcessing'] = true;
392
  return $meta;
393
  }
 
394
  }//end handleMediaLibraryImageUpload
395
 
396
  /**
480
  $idList = array();
481
  $itemList = array();
482
  for ($sanityCheck = 0, $crtStartQueryID = $startQueryID;
483
+ ($crtStartQueryID >= $endQueryID) && (count($itemList) < 3) && ($sanityCheck < 150); $sanityCheck++) {
484
 
485
  self::log("GETDB: current StartID: " . $crtStartQueryID);
486
 
538
  $crtStartQueryID--;
539
  }
540
  }
541
+ return array("items" => $itemList, "skipped" => $skippedAlreadyProcessed, "searching" => ($sanityCheck >= 150));
542
  }
543
 
544
  /**
565
  $ids = $this->getFromPrioAndCheck();
566
  $itemHandler = (count($ids) > 0 ? $ids[0] : null);
567
  }
568
+ $response = array("Status" => ShortPixelAPI::STATUS_NO_KEY, "ImageID" => $itemHandler ? $itemHandler->getId() : "-1", "Message" => __('Missing API Key','shortpixel'));
569
  $this->_settings->bulkLastStatus = $response;
570
  die(json_encode($response));
571
  }
581
  //1: get 3 ids to process. Take them with priority from the queue
582
  $ids = $this->getFromPrioAndCheck();
583
  if(count($ids) < 3 ) { //take from bulk if bulk processing active
584
+ if($this->prioQ->bulkRunning()) {
 
585
  $res = $this->getBulkItemsFromDb();
586
  $bulkItems = $res['items'];
587
  if($bulkItems){
605
  // die("za stop 2");
606
 
607
  if ($ids === false || count( $ids ) == 0 ){
608
+ //if searching, than the script is searching for not processed items and found none yet, should be relaunced
609
+ if(isset($res['searching']) && $res['searching']) {
610
+ die(json_encode(array("Status" => ShortPixelAPI::STATUS_RETRY, "Message" => 'Searching images to optimize... ' . $this->prioQ->getStartBulkId() . '->' . $this->prioQ->getStopBulkId() )));
611
+ }
612
+ //in this case the queue is really empty
613
  $bulkEverRan = $this->prioQ->stopBulk();
614
  $avg = $this->getAverageCompression();
615
  $fileCount = $this->_settings->fileCount;
616
  $response = array("Status" => self::BULK_EMPTY_QUEUE,
617
+ /* translators: console message Empty queue 1234 -> 1234 */
618
+ "Message" => __('Empty queue ','shortpixel') . $this->prioQ->getStartBulkId() . '->' . $this->prioQ->getStopBulkId(),
619
  "BulkStatus" => ($this->prioQ->bulkRunning()
620
  ? "1" : ($this->prioQ->bulkPaused() ? "2" : "0")),
621
  "AverageCompression" => $avg,
655
  $prio = $this->prioQ->remove($itemId);
656
  //remove also from the failed list if it failed in the past
657
  $prio = $this->prioQ->removeFromFailed($itemId);
 
 
 
 
 
 
658
  $result["Type"] = $meta->getCompressionType() !== null ? ShortPixelAPI::getCompressionTypeName($meta->getCompressionType()) : '';
659
  $result["ThumbsTotal"] = $meta->getThumbs() && is_array($meta->getThumbs()) ? count($meta->getThumbs()): 0;
660
  $result["ThumbsCount"] = $meta->getThumbsOpt()
661
  ? $meta->getThumbsOpt() //below is the fallback for old optimized images that don't have thumbsOpt
662
  : ($this->_settings->processThumbnails ? $result["ThumbsTotal"] : 0);
663
 
664
+ $result["RetinasCount"] = $meta->getRetinasOpt();
665
  $result["BackupEnabled"] = ($this->getBackupFolder($meta->getPath()) ? true : false);//$this->_settings->backupImages;
666
 
667
  if(!$prio && $itemId <= $this->prioQ->getStartBulkId()) {
676
  $thumb = $bkThumb = "";
677
  //$percent = 0;
678
  $percent = $meta->getImprovementPercent();
 
679
  if($percent){
 
 
 
680
  $filePath = explode("/", $meta->getPath());
681
 
682
  //Get a suitable thumb
 
 
683
  $sizes = $meta->getThumbs();
684
  if('pdf' == strtolower(pathinfo($result["Filename"], PATHINFO_EXTENSION))) {
685
  // echo($result["Filename"] . " ESTE --> "); die(var_dump(strtolower(pathinfo($result["Filename"], PATHINFO_EXTENSION))));
738
  if(! $this->prioQ->remove($itemId) ){
739
  $this->advanceBulk($meta->getId(), $result);
740
  }
741
+ if($itemHandler->getType() == ShortPixelMetaFacade::MEDIA_LIBRARY_TYPE) {
742
+ $itemHandler->deleteMeta(); //this deletes only the ShortPixel fields from meta, in case of WP Media library
743
+ }
744
  $result["Status"] = ShortPixelAPI::STATUS_SKIP;
745
+ $result["Message"] .= __(' Retry limit reached. Skipping file ID ','shortpixel') . $itemId . ".";
746
  $itemHandler->setError(ShortPixelAPI::ERR_INCORRECT_FILE_SIZE, $result["Message"] );
747
  }
748
  else {
756
  $prio = $this->prioQ->remove($itemId);
757
  if(isset($result["Code"])
758
  && ( $result["Code"] == "write-fail" //could not write
 
759
  || (in_array(0+$result["Code"], array(-201)) && $meta->getRetries() >= 3))) { //for -201 (invalid image format) we retry only 3 times.
760
  //put this one in the failed images list - to show the user at the end
761
  $prio = $this->prioQ->addToFailed($itemHandler->getQueuedId());
837
  return array("Status" => ShortPixelAPI::STATUS_SUCCESS, "message" => "");
838
  }
839
  }
840
+ return array("Status" => ShortPixelAPI::STATUS_FAIL, "message" => __('NextGen image not found','shortpixel'));
841
  break;
842
  case "C-":
843
  throw new Exception("HandleManualOptimization for custom images not implemented");
925
  try {
926
  //main file
927
  $this->renameWithRetina($bkFile, $file);
928
+ //getSize to update meta if image was resized by ShortPixel
929
+ $size = getimagesize($file);
930
+ $width = $size[0];
931
+ $height = $size[1];
932
 
933
  //overwriting thumbnails
934
  foreach($thumbsPaths as $source => $destination) {
942
  }
943
  unset($crtMeta["ShortPixelImprovement"]);
944
  unset($crtMeta['ShortPixel']);
945
+ if($width && $height) {
946
+ $crtMeta['width'] = $width;
947
+ $crtMeta['height'] = $height;
948
+ }
949
  wp_update_attachment_metadata($ID, $crtMeta);
950
  }
951
 
1013
  $this->prioQ->push($qID);
1014
  $ret = array("Status" => ShortPixelAPI::STATUS_SUCCESS, "Message" => "");
1015
  } else {
1016
+ $ret = array("Status" => ShortPixelAPI::STATUS_SKIP, "Message" => __('Could not restore from backup: ','shortpixel') . $qID);
1017
  }
1018
  } else {
1019
  $ID = intval($qID);
1027
  $this->sendToProcessing(new ShortPixelMetaFacade($ID), $compressionType == 'lossy' ? 1 : 0);
1028
  $ret = array("Status" => ShortPixelAPI::STATUS_SUCCESS, "Message" => "");
1029
  } else {
1030
+ $ret = array("Status" => ShortPixelAPI::STATUS_SKIP, "Message" => __('Could not restore from backup: ','shortpixel') . $ID);
1031
  }
1032
  }
1033
  return $ret;
1046
  $this->sendToProcessing(new ShortPixelMetaFacade($ID));
1047
  $ret = array("Status" => ShortPixelAPI::STATUS_SUCCESS, "message" => "");
1048
  } else {
1049
+ $ret = array("Status" => ShortPixelAPI::STATUS_SKIP, "message" => (isset($meta['ShortPixelImprovement']) ? __('No thumbnails to optimize for ID: ','shortpixel') : __('Please optimize image for ID: ','shortpixel')) . $ID);
1050
  }
1051
  die(json_encode($ret));
1052
  }
1151
  <div class="wrap shortpixel-other-media">
1152
  <h2>
1153
  <div style="float:right;">
1154
+ <a href="upload.php?page=wp-short-pixel-custom&refresh=1" id="refresh" class="button button-primary" title="<?php _e('Refresh custom folders content','shortpixel');?>">
1155
+ <?php _e('Refresh folders','shortpixel');?>
1156
  </a>
1157
  </div>
1158
+ <?php _e('Other Media optimized by ShortPixel','shortpixel');?>
1159
  </h2>
1160
 
1161
  <div id="poststuff">
1331
 
1332
  public function browseContent() {
1333
  if ( !current_user_can( 'manage_options' ) ) {
1334
+ wp_die(__('You do not have sufficient permissions to access this page.','shortpixel'));
1335
  }
1336
 
1337
  $root = $this->getCustomFolderBase();
1358
 
1359
  $htmlRel = htmlentities($returnDir . $file);
1360
  $htmlName = htmlentities($file);
1361
+ $ext = preg_replace('/^.*\./', '', $file);
1362
 
1363
  if( file_exists($postDir . $file) && $file != '.' && $file != '..' ) {
1364
  if( is_dir($postDir . $file) && (!$onlyFiles || $onlyFolders) )
1422
 
1423
  public function renderSettingsMenu() {
1424
  if ( !current_user_can( 'manage_options' ) ) {
1425
+ wp_die(__('You do not have sufficient permissions to access this page.','shortpixel'));
1426
  }
1427
 
1428
  wp_enqueue_style('sp-file-tree.css', plugins_url('/res/css/sp-file-tree.css',__FILE__) );
1459
  {
1460
  $KeyLength = strlen($_POST['key']);
1461
 
1462
+ $notice = array("status" => "error",
1463
+ "msg" => sprintf(__("The key you provided has %s characters. The API key should have 20 characters, letters and numbers only.",'shortpixel'), $KeyLength)
1464
+ . "<BR> <b>"
1465
+ . __('Please check that the API key is the same as the one you received in your confirmation email.','shortpixel')
1466
+ . "</b><BR> "
1467
+ . __('If this problem persists, please contact us at ','shortpixel')
1468
+ . "<a href='mailto:help@shortpixel.com?Subject=API Key issues' target='_top'>help@shortpixel.com</a>"
1469
+ . __(' or ','shortpixel')
1470
+ . "<a href='https://shortpixel.com/contact' target='_blank'>" . __('here','shortpixel') . "</a>.");
1471
  }
1472
  else
1473
  {
1484
  //display notification
1485
  $urlParts = explode("/", get_site_url());
1486
  if( $validityData['DomainCheck'] == 'NOT Accessible'){
1487
+ $notice = array("status" => "warn", "msg" => __("API Key is valid but your site is not accessible from our servers. Please make sure that your server is accessible from the Internet before using the API or otherwise we won't be able to optimize them.",'shortpixel'));
 
1488
  } else {
1489
  if ( function_exists("is_multisite") && is_multisite() && !defined("SHORTPIXEL_API_KEY"))
1490
+ $notice = array("status" => "success", "msg" => __("API Key valid! <br>You seem to be running a multisite, please note that API Key can also be configured in wp-config.php like this:",'shortpixel')
1491
+ . "<BR> <b>define('SHORTPIXEL_API_KEY', '".$this->_settings->apiKey."');</b>");
1492
  else
1493
+ $notice = array("status" => "success", "msg" => __('API Key valid!','shortpixel'));
1494
  }
1495
  }
1496
  $this->_settings->verifiedKey = true;
1497
  //test that the "uploads" have the right rights and also we can create the backup dir for ShortPixel
1498
  if ( !file_exists(SP_BACKUP_FOLDER) && !@mkdir(SP_BACKUP_FOLDER, 0777, true) )
1499
+ $notice = array("status" => "error",
1500
+ "msg" => sprintf(__("There is something preventing us to create a new folder for backing up your original files.<BR>Please make sure that folder <b>%s</b> has the necessary write and read rights.",'shortpixel'),
1501
+ WP_CONTENT_DIR . '/' . SP_UPLOADS_NAME ));
1502
  } else {
1503
  if(isset($_POST['validate'])) {
1504
  //display notification
1526
  $uploadDir = wp_upload_dir();
1527
  $uploadPath = $uploadDir["basedir"];
1528
 
1529
+ if( isset($_POST['save']) && $_POST['save'] == __("Save and Go to Bulk Process",'shortpixel')
1530
+ || isset($_POST['saveAdv']) && $_POST['saveAdv'] == __("Save and Go to Bulk Process",'shortpixel')) {
1531
  wp_redirect("upload.php?page=wp-short-pixel-bulk");
1532
  exit();
1533
  }
1545
  if(isset($_POST['addCustomFolder']) && strlen($_POST['addCustomFolder']) > 0) {
1546
  $folderMsg = $this->spMetaDao->newFolderFromPath($_POST['addCustomFolder'], $uploadPath, $this->getCustomFolderBase());
1547
  if(!$folderMsg) {
1548
+ $notice = array("status" => "success", "msg" => __('Folder added successfully.','shortpixel'));
1549
  }
1550
  $customFolders = $this->spMetaDao->getFolders();
1551
  $this->_settings->hasCustomFolders = true;
1552
  }
1553
+ $this->_settings->createWebp = (isset($_POST['createWebp']) ? 1: 0);
1554
+ $this->_settings->optimizeRetina = (isset($_POST['optimizeRetina']) ? 1: 0);
1555
+ $this->_settings->frontBootstrap = (isset($_POST['frontBootstrap']) ? 1: 0);
1556
+ $this->_settings->autoMediaLibrary = (isset($_POST['autoMediaLibrary']) ? 1: 0);
1557
  }
1558
  if(isset($_POST['removeFolder']) && strlen(($_POST['removeFolder']))) {
1559
  $this->spMetaDao->removeFolder($_POST['removeFolder']);
1723
 
1724
  $defaultData = array(
1725
  "APIKeyValid" => false,
1726
+ "Message" => __('API Key could not be validated due to a connectivity error.<BR>Your firewall may be blocking us. Please contact your hosting provider and ask them to allow connections from your site to IP 176.9.106.46.<BR> If you still cannot validate your API Key after this, please <a href="https://shortpixel.com/contact" target="_blank">contact us</a> and we will try to help. ','shortpixel'),
1727
+ "APICallsMade" => __('Information unavailable. Please check your API key.','shortpixel'),
1728
+ "APICallsQuota" => __('Information unavailable. Please check your API key.','shortpixel'),
1729
  "DomainCheck" => 'NOT Accessible');
1730
 
1731
  if(is_object($response) && get_class($response) == 'WP_Error') {
1766
 
1767
  return array(
1768
  "APIKeyValid" => true,
1769
+ "APICallsMade" => number_format($data->APICallsMade) . __(' images','shortpixel'),
1770
+ "APICallsQuota" => number_format($data->APICallsQuota) . __(' images','shortpixel'),
1771
+ "APICallsMadeOneTime" => number_format($data->APICallsMadeOneTime) . __(' images','shortpixel'),
1772
+ "APICallsQuotaOneTime" => number_format($data->APICallsQuotaOneTime) . __(' images','shortpixel'),
1773
  "APICallsMadeNumeric" => $data->APICallsMade,
1774
  "APICallsQuotaNumeric" => $data->APICallsQuota,
1775
  "APICallsMadeOneTimeNumeric" => $data->APICallsMadeOneTime,
1800
  elseif (empty($data)) { //TODO asta devine if si decomentam returnurile
1801
  if($fileExtension == "pdf") {
1802
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'optimizeNow';
1803
+ $renderData['message'] = __('PDF not processed.','shortpixel');
1804
  }
1805
  else { //Optimization N/A
1806
  $renderData['status'] = 'n/a';
1822
  $sizes = isset($data['sizes']) ? count($data['sizes']) : 0;
1823
  $renderData['thumbsTotal'] = $sizes;
1824
  $renderData['thumbsOpt'] = isset($data['ShortPixel']['thumbsOpt']) ? $data['ShortPixel']['thumbsOpt'] : $sizes;
1825
+ $renderData['retinasOpt'] = isset($data['ShortPixel']['retinasOpt']) ? $data['ShortPixel']['retinasOpt'] : null;
1826
  $renderData['quotaExceeded'] = $quotaExceeded;
1827
  }
1828
+ elseif($data['ShortPixelImprovement'] == __('Optimization N/A','shortpixel')) { //We don't optimize this
1829
  $renderData['status'] = 'n/a';
1830
  }
1831
  elseif(isset($meta['ShortPixel']['BulkProcessing'])) { //Scheduled to bulk.
1832
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'optimizeNow';
1833
  $renderData['message'] = 'Waiting for bulk processing.';
1834
  }
1835
+ elseif( trim(strip_tags($data['ShortPixelImprovement'])) == __("Cannot write optimized file",'shortpixel') ) {
1836
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'retry';
1837
+ $renderData['message'] = __("Cannot write optimized file",'shortpixel') . " - <a href='https://shortpixel.com/faq#cannot-write-optimized-file' target='_blank'>"
1838
+ . __("Why?",'shortpixel') . "</a>";
1839
  }
1840
  elseif( strlen(trim(strip_tags($data['ShortPixelImprovement']))) > 0 ) {
1841
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'retry';
1843
  }
1844
  elseif(isset($data['ShortPixel']['NoFileOnDisk'])) {
1845
  $renderData['status'] = 'notFound';
1846
+ $renderData['message'] = __('Image does not exist','shortpixel');
1847
  }
1848
  elseif(isset($data['ShortPixel']['WaitingProcessing'])) {
1849
  $renderData['status'] = $quotaExceeded ? 'quotaExceeded' : 'retry';
1850
+ $renderData['message'] = "<img src=\"" . plugins_url( 'res/img/loading.gif', __FILE__ ) . "\" class='sp-loading-small'>&nbsp;" . __("Image waiting to be processed.",'shortpixel');
1851
  if($id > $this->prioQ->getFlagBulkId() || !$this->prioQ->bulkRunning()) $this->prioQ->push($id); //should be there but just to make sure
1852
  }
1853
  else { //finally
1864
  public function columns( $defaults ) {
1865
  $defaults['wp-shortPixel'] = 'ShortPixel Compression';
1866
  if(current_user_can( 'manage_options' )) {
1867
+ $defaults['wp-shortPixel'] .= '&nbsp;<a href="options-general.php?page=wp-shortpixel#stats" title="'
1868
+ . __('ShortPixel Statistics','shortpixel') . '"><span class="dashicons dashicons-dashboard"></span></a>';
1869
  }
1870
  return $defaults;
1871
  }
1883
  }
1884
 
1885
  public function nggColumnHeader( $default ) {
1886
+ return __('ShortPixel Compression','shortpixel');
1887
  }
1888
 
1889
  public function nggColumnContent( $unknown, $picture ) {
1901
  'bonus' => $meta->getImprovementPercent() < 5,
1902
  'thumbsOpt' => 0,
1903
  'thumbsTotal' => 0,
1904
+ 'retinasOpt' => 0,
1905
  'backup' => true
1906
  ));
1907
  break;
1912
  'status' => 'optimizeNow',
1913
  'thumbsOpt' => 0,
1914
  'thumbsTotal' => 0,
1915
+ 'retinasOpt' => 0,
1916
  'message' => "Not optimized"
1917
  ));
1918
  }
1954
 
1955
  //return an array with URL(s) and PATH(s) for this file
1956
  public function getURLsAndPATHs($itemHandler, $meta = NULL, $onlyThumbs = false) {
1957
+ return $itemHandler->getURLsAndPATHs($this->_settings->processThumbnails, $onlyThumbs, $this->_settings->optimizeRetina);
1958
  }
1959
 
1960
 
2172
  if ( !function_exists( 'vc_action' ) || vc_action() !== 'vc_inline' ) { //handle incompatibility with Visual Composer
2173
  add_action( 'init', 'shortpixelInit');
2174
  add_action('ngg_added_new_image', 'shortpixelNggAdd');
2175
+
2176
+ $autoMediaLibrary = get_option('wp-short-pixel-auto-media-library');
2177
+ if($autoMediaLibrary) {
2178
+ add_filter( 'wp_generate_attachment_metadata', 'handleImageUploadHook', 10, 2 );
2179
+ }
2180
 
2181
  register_activation_hook( __FILE__, array( 'WPShortPixel', 'shortPixelActivatePlugin' ) );
2182
  register_deactivation_hook( __FILE__, array( 'WPShortPixel', 'shortPixelDeactivatePlugin' ) );