Version Description
(2015-08-04) = * Enhanced: Core now implements an image cache logic. * Enhanced: Add-ons on the "Add-ons" page now have an installed-but-inactive status. * Enhanced: Google Alerts permalinks will now be normalized. * Enhanced: Russian translation added. * Fixed bug: Inline help (tooltips) translations now work. * Fixed bug: Link to the Feed to Post add-on on the welcome page is no longer broken.
Download this release
Release Info
Developer | jeangalea |
Plugin | WP RSS Aggregator |
Version | 4.7.3 |
Comparing to | |
See all releases |
Code changes from version 4.7.2 to 4.7.3
- includes/admin-addons.php +35 -1
- includes/admin-help-metaboxes.php +57 -53
- includes/admin-help-settings.php +135 -133
- includes/admin-welcome.php +1 -1
- includes/feed-importing.php +12 -0
- includes/image-caching.php +1001 -172
- languages/wprss-ru_RU.mo +0 -0
- languages/wprss-ru_RU.po +2155 -0
- readme.txt +11 -3
- templates/help-tooltip-content.php +1 -1
- wp-rss-aggregator.php +74 -74
includes/admin-addons.php
CHANGED
@@ -7,13 +7,15 @@
|
|
7 |
*
|
8 |
*/
|
9 |
function wprss_addons_page_display() {
|
10 |
-
|
11 |
$premium = array();
|
12 |
$premium[] = array(
|
13 |
'title' => __( "Excerpts & Thumbnails", WPRSS_TEXT_DOMAIN ),
|
14 |
'description' => __( "Adds the ability to display thumbnails and excerpts. Perfect for adding some life and color to your feed item display. For more flexibility Feed to Post is a better option.", WPRSS_TEXT_DOMAIN ),
|
15 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
16 |
'active' => is_plugin_active( 'wp-rss-excerpts-thumbnails/wp-rss-excerpts-thumbnails.php' ),
|
|
|
|
|
17 |
'url' => 'http://www.wprssaggregator.com/extension/excerpts-thumbnails/'
|
18 |
);
|
19 |
$premium[] = array(
|
@@ -21,6 +23,8 @@
|
|
21 |
'description' => __( "Assign categories to your feed sources. Then display a particular category or multiple categories on a post or page via shortcodes.", WPRSS_TEXT_DOMAIN ),
|
22 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
23 |
'active' => is_plugin_active( 'wp-rss-categories/wp-rss-categories.php' ),
|
|
|
|
|
24 |
'url' => 'http://www.wprssaggregator.com/extension/categories/'
|
25 |
);
|
26 |
$premium[] = array(
|
@@ -28,6 +32,8 @@
|
|
28 |
'description' => __( "Import feeds that contain specific keywords in either the title or their content. Control what gets imported to your blog. You can use keywords, keyphrases and categories.", WPRSS_TEXT_DOMAIN ),
|
29 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
30 |
'active' => is_plugin_active( 'wp-rss-keyword-filtering/wp-rss-keyword-filtering.php' ),
|
|
|
|
|
31 |
'url' => 'http://www.wprssaggregator.com/extension/keyword-filtering/'
|
32 |
);
|
33 |
$premium[] = array(
|
@@ -35,6 +41,8 @@
|
|
35 |
'description' => __( "Allows you to import feed items into posts or any other custom post type that you have created. Takes WP RSS Aggregator to a whole new level of flexibility.", WPRSS_TEXT_DOMAIN ),
|
36 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
37 |
'active' => is_plugin_active( 'wp-rss-feed-to-post/wp-rss-feed-to-post.php' ),
|
|
|
|
|
38 |
'url' => 'http://www.wprssaggregator.com/extension/feed-to-post/'
|
39 |
);
|
40 |
$premium[] = array(
|
@@ -42,6 +50,8 @@
|
|
42 |
'description' => __( "This add-ons provides the connectivity to our Full Text Premium service, which gives you unlimited feed items returned per feed source.", WPRSS_TEXT_DOMAIN ),
|
43 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
44 |
'active' => is_plugin_active( 'wp-rss-full-text-feeds/wp-rss-full-text.php' ),
|
|
|
|
|
45 |
'url' => 'http://www.wprssaggregator.com/extension/full-text-rss-feeds/'
|
46 |
);
|
47 |
$premium[] = array(
|
@@ -49,6 +59,8 @@
|
|
49 |
'description' => __( "Allows you to spin the content for posts imported by Feed to Post using WordAi. Cleverly rewrite your posts without changing their meaning and maintaining human readability.", WPRSS_TEXT_DOMAIN ),
|
50 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
51 |
'active' => is_plugin_active( 'wp-rss-wordai/wp-rss-wordai.php' ),
|
|
|
|
|
52 |
'url' => 'http://www.wprssaggregator.com/extension/wordai/'
|
53 |
);
|
54 |
|
@@ -75,6 +87,8 @@
|
|
75 |
<div class="footer">
|
76 |
<?php if( $addon['active'] ): ?>
|
77 |
<a class="button button-disabled"><span class="wprss-sprite-tick"></span><?php _e( "Installed", WPRSS_TEXT_DOMAIN ); ?></a>
|
|
|
|
|
78 |
<?php else: ?>
|
79 |
<a target="_blank" href="<?php echo $addon['url']; ?>" class="button"><?php _e( "Purchase & Install", WPRSS_TEXT_DOMAIN ); ?></a>
|
80 |
<?php endif; ?>
|
@@ -89,4 +103,24 @@
|
|
89 |
|
90 |
<?php
|
91 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
92 |
}
|
7 |
*
|
8 |
*/
|
9 |
function wprss_addons_page_display() {
|
10 |
+
|
11 |
$premium = array();
|
12 |
$premium[] = array(
|
13 |
'title' => __( "Excerpts & Thumbnails", WPRSS_TEXT_DOMAIN ),
|
14 |
'description' => __( "Adds the ability to display thumbnails and excerpts. Perfect for adding some life and color to your feed item display. For more flexibility Feed to Post is a better option.", WPRSS_TEXT_DOMAIN ),
|
15 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
16 |
'active' => is_plugin_active( 'wp-rss-excerpts-thumbnails/wp-rss-excerpts-thumbnails.php' ),
|
17 |
+
'installed_inactive' => wprss_is_plugin_inactive( 'wp-rss-excerpts-thumbnails/wp-rss-excerpts-thumbnails.php' ),
|
18 |
+
'path' => 'wp-rss-excerpts-thumbnails/wp-rss-excerpts-thumbnails.php',
|
19 |
'url' => 'http://www.wprssaggregator.com/extension/excerpts-thumbnails/'
|
20 |
);
|
21 |
$premium[] = array(
|
23 |
'description' => __( "Assign categories to your feed sources. Then display a particular category or multiple categories on a post or page via shortcodes.", WPRSS_TEXT_DOMAIN ),
|
24 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
25 |
'active' => is_plugin_active( 'wp-rss-categories/wp-rss-categories.php' ),
|
26 |
+
'installed_inactive' => wprss_is_plugin_inactive( 'wp-rss-categories/wp-rss-categories.php' ),
|
27 |
+
'path' => 'wp-rss-categories/wp-rss-categories.php',
|
28 |
'url' => 'http://www.wprssaggregator.com/extension/categories/'
|
29 |
);
|
30 |
$premium[] = array(
|
32 |
'description' => __( "Import feeds that contain specific keywords in either the title or their content. Control what gets imported to your blog. You can use keywords, keyphrases and categories.", WPRSS_TEXT_DOMAIN ),
|
33 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
34 |
'active' => is_plugin_active( 'wp-rss-keyword-filtering/wp-rss-keyword-filtering.php' ),
|
35 |
+
'installed_inactive' => wprss_is_plugin_inactive( 'wp-rss-keyword-filtering/wp-rss-keyword-filtering.php' ),
|
36 |
+
'path' => 'wp-rss-keyword-filtering/wp-rss-keyword-filtering.php',
|
37 |
'url' => 'http://www.wprssaggregator.com/extension/keyword-filtering/'
|
38 |
);
|
39 |
$premium[] = array(
|
41 |
'description' => __( "Allows you to import feed items into posts or any other custom post type that you have created. Takes WP RSS Aggregator to a whole new level of flexibility.", WPRSS_TEXT_DOMAIN ),
|
42 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
43 |
'active' => is_plugin_active( 'wp-rss-feed-to-post/wp-rss-feed-to-post.php' ),
|
44 |
+
'installed_inactive' => wprss_is_plugin_inactive( 'wp-rss-feed-to-post/wp-rss-feed-to-post.php' ),
|
45 |
+
'path' => 'wp-rss-feed-to-post/wp-rss-feed-to-post.php',
|
46 |
'url' => 'http://www.wprssaggregator.com/extension/feed-to-post/'
|
47 |
);
|
48 |
$premium[] = array(
|
50 |
'description' => __( "This add-ons provides the connectivity to our Full Text Premium service, which gives you unlimited feed items returned per feed source.", WPRSS_TEXT_DOMAIN ),
|
51 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
52 |
'active' => is_plugin_active( 'wp-rss-full-text-feeds/wp-rss-full-text.php' ),
|
53 |
+
'installed_inactive' => wprss_is_plugin_inactive( 'wp-rss-full-text-feeds/wp-rss-full-text.php' ),
|
54 |
+
'path' => 'wp-rss-full-text-feeds/wp-rss-full-text.php',
|
55 |
'url' => 'http://www.wprssaggregator.com/extension/full-text-rss-feeds/'
|
56 |
);
|
57 |
$premium[] = array(
|
59 |
'description' => __( "Allows you to spin the content for posts imported by Feed to Post using WordAi. Cleverly rewrite your posts without changing their meaning and maintaining human readability.", WPRSS_TEXT_DOMAIN ),
|
60 |
'thumbnail' => WPRSS_IMG . 'add-ons/wprss.jpg',
|
61 |
'active' => is_plugin_active( 'wp-rss-wordai/wp-rss-wordai.php' ),
|
62 |
+
'installed_inactive' => wprss_is_plugin_inactive( 'wp-rss-wordai/wp-rss-wordai.php' ),
|
63 |
+
'path' => 'wp-rss-wordai/wp-rss-wordai.php',
|
64 |
'url' => 'http://www.wprssaggregator.com/extension/wordai/'
|
65 |
);
|
66 |
|
87 |
<div class="footer">
|
88 |
<?php if( $addon['active'] ): ?>
|
89 |
<a class="button button-disabled"><span class="wprss-sprite-tick"></span><?php _e( "Installed", WPRSS_TEXT_DOMAIN ); ?></a>
|
90 |
+
<?php elseif( $addon['installed_inactive'] ): ?>
|
91 |
+
<a class="button" href="<?php echo wp_nonce_url('plugins.php?action=activate&plugin='.$addon['path'], 'activate-plugin_'.$addon['path'] ) ?>"><?php _e( "Activate", WPRSS_TEXT_DOMAIN ); ?></a>
|
92 |
<?php else: ?>
|
93 |
<a target="_blank" href="<?php echo $addon['url']; ?>" class="button"><?php _e( "Purchase & Install", WPRSS_TEXT_DOMAIN ); ?></a>
|
94 |
<?php endif; ?>
|
103 |
|
104 |
<?php
|
105 |
|
106 |
+
}
|
107 |
+
|
108 |
+
/**
|
109 |
+
* Check if plugin file exists but plugin is inactive
|
110 |
+
* @param $path Path to plugin file
|
111 |
+
* @since 4.7.3
|
112 |
+
* @return bool TRUE if plugin file found but plugin inactive. False otherwise
|
113 |
+
*/
|
114 |
+
function wprss_is_plugin_inactive( $path ){
|
115 |
+
|
116 |
+
if( ! isset( $path ) ){
|
117 |
+
return FALSE;
|
118 |
+
}
|
119 |
+
|
120 |
+
if( file_exists( WP_PLUGIN_DIR . '/' . $path ) && is_plugin_inactive( $path ) ){
|
121 |
+
return TRUE; // plugin found but inactive
|
122 |
+
}
|
123 |
+
|
124 |
+
return FALSE;
|
125 |
+
|
126 |
}
|
includes/admin-help-metaboxes.php
CHANGED
@@ -1,76 +1,80 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
|
4 |
-
|
5 |
|
6 |
-
|
7 |
-
|
8 |
-
$tooltips = array(
|
9 |
-
/* -----------------------------
|
10 |
-
* Feed Source Details Metabox
|
11 |
-
* -----------------------------
|
12 |
-
*/
|
13 |
-
// Feed Source URL
|
14 |
-
'wprss_url' => __('The URL of the feed source. In most cases, the URL of the site will also work, but for best results we recommend trying to find the URL of the RSS feed.
|
15 |
|
16 |
-
|
17 |
-
|
18 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
19 |
|
20 |
-
|
|
|
|
|
21 |
|
22 |
-
|
23 |
-
// Link to Enclosure
|
24 |
-
'wprss_enclosure' => __('Tick this box to make feed items link to the URL in the enclosure tag, rather than link to the original article.
|
25 |
|
26 |
-
|
|
|
|
|
27 |
|
28 |
-
|
29 |
|
30 |
-
|
31 |
|
32 |
-
|
33 |
|
|
|
34 |
|
35 |
-
/* -------------------------
|
36 |
-
* Feed Processing Metabox
|
37 |
-
* -------------------------
|
38 |
-
*/
|
39 |
-
// Feed State
|
40 |
-
'wprss_state' => __('State of the feed, active or paused.
|
41 |
|
42 |
-
|
|
|
|
|
|
|
|
|
|
|
43 |
|
44 |
-
|
45 |
-
// Activate Feed: [date]
|
46 |
-
'wprss_activate_feed' => __('You can set a time, in UTC, in the future when the feed source will become active, if it is paused.
|
47 |
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
|
60 |
-
|
|
|
|
|
61 |
|
62 |
-
|
63 |
|
64 |
-
|
65 |
|
66 |
-
|
67 |
-
* Feed Preview Metabox
|
68 |
-
* ----------------------
|
69 |
-
*/
|
70 |
-
// Force Feed
|
71 |
-
'wprss_force_feed' => __('Use this option if you are seeing an <q>Invalid feed URL</q> error in the Feed Preview above, but you are sure that the URL is correct.
|
72 |
|
73 |
-
|
74 |
-
|
75 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
76 |
}
|
1 |
<?php
|
2 |
|
3 |
+
add_action( 'plugins_loaded', 'wprss_metaboxes_add_tooltips', 11 );
|
4 |
+
function wprss_metaboxes_add_tooltips() {
|
5 |
|
6 |
+
if( class_exists('WPRSS_Help') ) {
|
7 |
+
$help = WPRSS_Help::get_instance();
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
8 |
|
9 |
+
// Feed source setting fields
|
10 |
+
$prefix = 'field_';
|
11 |
+
$tooltips = array(
|
12 |
+
/* -----------------------------
|
13 |
+
* Feed Source Details Metabox
|
14 |
+
* -----------------------------
|
15 |
+
*/
|
16 |
+
// Feed Source URL
|
17 |
+
'wprss_url' => __('The URL of the feed source. In most cases, the URL of the site will also work, but for best results we recommend trying to find the URL of the RSS feed.
|
18 |
|
19 |
+
' . 'Also include the <code>http://</code> prefix in the URL.', WPRSS_TEXT_DOMAIN),
|
20 |
+
// Feed limit
|
21 |
+
'wprss_limit' => __('The maximum number of imported items from this feed to keep stored.
|
22 |
|
23 |
+
'. 'When new items are imported and the limit is exceeded, the oldest feed items will be deleted to make room for new ones.
|
|
|
|
|
24 |
|
25 |
+
'. 'If you already have items imported from this feed source, setting this option now may delete some of your items, in order to comply with the limit.', WPRSS_TEXT_DOMAIN),
|
26 |
+
// Link to Enclosure
|
27 |
+
'wprss_enclosure' => __('Tick this box to make feed items link to the URL in the enclosure tag, rather than link to the original article.
|
28 |
|
29 |
+
'. 'Enclosure tags are RSS tags that may be included with a feed items. These tags typically contain links to images, audio, videos, attachment files or even flash content.
|
30 |
|
31 |
+
'. 'If you are not sure leave this setting blank.', WPRSS_TEXT_DOMAIN),
|
32 |
|
33 |
+
'wprss_unique_titles' => __('Whether to allow multiple feed items to have the same title. When checked, if a feed item has the same title as a previously-imported feed item, it will not be imported.
|
34 |
|
35 |
+
'. 'This can be useful in cases where permalinks change, or where multiple permalinks refer to the same item.', WPRSS_TEXT_DOMAIN),
|
36 |
|
|
|
|
|
|
|
|
|
|
|
|
|
37 |
|
38 |
+
/* -------------------------
|
39 |
+
* Feed Processing Metabox
|
40 |
+
* -------------------------
|
41 |
+
*/
|
42 |
+
// Feed State
|
43 |
+
'wprss_state' => __('State of the feed, active or paused.
|
44 |
|
45 |
+
'. 'If active, the feed source will fetch items periodically, according to the settings below.
|
|
|
|
|
46 |
|
47 |
+
'. 'If paused, the feed source will not fetch feed items periodically.', WPRSS_TEXT_DOMAIN),
|
48 |
+
// Activate Feed: [date]
|
49 |
+
'wprss_activate_feed' => __('You can set a time, in UTC, in the future when the feed source will become active, if it is paused.
|
50 |
|
51 |
+
'. 'Leave blank to activate immediately.', WPRSS_TEXT_DOMAIN),
|
52 |
+
// Pause Feed: [date]
|
53 |
+
'wprss_pause_feed' => __('You can set a time, in UTC, in the future when the feed source will become paused, if it is active.
|
54 |
|
55 |
+
'. 'Leave blank to never pause.', WPRSS_TEXT_DOMAIN),
|
56 |
+
// Update Interval
|
57 |
+
'wprss_update_interval' => __('How frequently the feed source should check for new items and fetch if needed.
|
58 |
|
59 |
+
'. 'If left as <em>Default</em>, the interval in the global settings is used.', WPRSS_TEXT_DOMAIN),
|
60 |
+
// Delete items older than: [date]
|
61 |
+
'wprss_age_limit' => __('The maximum age allowed for feed items. Very useful if you are only concerned with, say, last week\'s news.
|
62 |
|
63 |
+
'. 'Items already imported will be deleted if they eventually exceed this age limit.
|
64 |
|
65 |
+
'. 'Also, items in the RSS feed that are already older than this age will not be imported at all.
|
66 |
|
67 |
+
'. 'Leaving empty to use the <em>Limit feed items by age</em> option in the general settings.', WPRSS_TEXT_DOMAIN),
|
|
|
|
|
|
|
|
|
|
|
68 |
|
69 |
+
/* ----------------------
|
70 |
+
* Feed Preview Metabox
|
71 |
+
* ----------------------
|
72 |
+
*/
|
73 |
+
// Force Feed
|
74 |
+
'wprss_force_feed' => __('Use this option if you are seeing an <q>Invalid feed URL</q> error in the Feed Preview above, but you are sure that the URL is correct.
|
75 |
+
|
76 |
+
'. 'Note, however, that this will disable auto-discovery, meaning that the given URL must be an RSS feed URL. Using the site\'s URL will not work.', WPRSS_TEXT_DOMAIN)
|
77 |
+
);
|
78 |
+
$help->add_tooltips( $tooltips, $prefix );
|
79 |
+
}
|
80 |
}
|
includes/admin-help-settings.php
CHANGED
@@ -1,137 +1,139 @@
|
|
1 |
<?php
|
2 |
|
3 |
-
|
4 |
-
|
5 |
-
|
6 |
-
|
7 |
-
|
8 |
-
|
9 |
-
|
10 |
-
|
11 |
-
|
12 |
-
|
13 |
-
|
14 |
-
|
15 |
-
|
16 |
-
|
17 |
-
|
18 |
-
|
19 |
-
|
20 |
-
|
21 |
-
|
22 |
-
|
23 |
-
|
24 |
-
|
25 |
-
|
26 |
-
|
27 |
-
|
28 |
-
|
29 |
-
|
30 |
-
|
31 |
-
|
32 |
-
|
33 |
-
|
34 |
-
|
35 |
-
|
36 |
-
|
37 |
-
|
38 |
-
|
39 |
-
|
40 |
-
|
41 |
-
|
42 |
-
|
43 |
-
|
44 |
-
|
45 |
-
|
46 |
-
|
47 |
-
|
48 |
-
|
49 |
-
|
50 |
-
|
51 |
-
|
52 |
-
|
53 |
-
|
54 |
-
|
55 |
-
|
56 |
-
|
57 |
-
|
58 |
-
|
59 |
-
|
60 |
-
|
61 |
-
|
62 |
-
|
63 |
-
|
64 |
-
|
65 |
-
|
66 |
-
|
67 |
-
|
68 |
-
|
69 |
-
|
70 |
-
|
71 |
-
|
72 |
-
|
73 |
-
|
74 |
-
|
75 |
-
|
76 |
-
|
77 |
-
|
78 |
-
|
79 |
-
|
80 |
-
|
81 |
-
|
82 |
-
|
83 |
-
|
84 |
-
|
85 |
-
|
86 |
-
|
87 |
-
|
88 |
-
|
89 |
-
|
90 |
-
|
91 |
-
|
92 |
-
|
93 |
-
|
94 |
-
|
95 |
-
|
96 |
-
|
97 |
-
|
98 |
-
|
99 |
-
|
100 |
-
|
101 |
-
|
102 |
-
|
103 |
-
|
104 |
-
|
105 |
-
|
106 |
-
|
107 |
-
|
108 |
-
|
109 |
-
|
110 |
-
|
111 |
-
|
112 |
-
|
113 |
-
|
114 |
-
|
115 |
-
|
116 |
-
|
117 |
-
|
118 |
-
|
119 |
-
|
|
|
|
|
120 |
|
121 |
-
|
122 |
-
|
123 |
-
|
124 |
-
|
125 |
-
|
126 |
-
|
127 |
-
|
128 |
-
These will be used to verify certificates over secure connection, such as when fetching a remote resource over HTTPS.
|
129 |
-
|
130 |
-
Relative path will be relative to the WordPress root.
|
131 |
-
|
132 |
-
<strong>Default:</strong> path to certificate file bundled with WordPress.'
|
133 |
-
, WPRSS_TEXT_DOMAIN )
|
134 |
|
135 |
-
|
136 |
-
|
137 |
-
}
|
|
1 |
<?php
|
2 |
|
3 |
+
add_action( 'plugins_loaded', 'wprss_settings_add_tooltips', 11 );
|
4 |
+
function wprss_settings_add_tooltips() {
|
5 |
+
if( class_exists('WPRSS_Help') ) {
|
6 |
+
$help = WPRSS_Help::get_instance();
|
7 |
+
|
8 |
+
// Feed source setting fields
|
9 |
+
$prefix = 'setting-';
|
10 |
+
$tooltips = array(
|
11 |
+
/* -----------------
|
12 |
+
* General Section
|
13 |
+
* -----------------
|
14 |
+
*/ // Limit feed items by age
|
15 |
+
'limit-feed-items-by-age' => __( 'The maximum age allowed for feed items.
|
16 |
+
'. '<hr/>
|
17 |
+
|
18 |
+
'. 'Items already imported will be deleted if they eventually exceed this age limit.
|
19 |
+
|
20 |
+
'. 'Also, items in the RSS feed that are already older than this age will not be imported at all.
|
21 |
+
'. '<hr/>
|
22 |
+
|
23 |
+
'. '<em>Leave empty for no limit.</em>', WPRSS_TEXT_DOMAIN),
|
24 |
+
// Limit feed items per feed
|
25 |
+
'limit-feed-items-imported' => __('The maximum number of imported items to keep stored, for feed sources that do not have their own limit.
|
26 |
+
'. '<hr/>
|
27 |
+
|
28 |
+
'. 'When new items are imported and the limit for a feed source is exceeded, the oldest feed items for that feed source will be deleted to make room for the new ones.
|
29 |
+
|
30 |
+
'. 'If you already have items imported from this feed source, setting this option now may delete some of your items, in order to comply with the limit.
|
31 |
+
'. '<hr/>
|
32 |
+
|
33 |
+
'. '<em>Use 0 or leave empty for no limit.</em>', WPRSS_TEXT_DOMAIN),
|
34 |
+
// Feed processing interval
|
35 |
+
'cron-interval' => __('How frequently should the feed sources (that do not have their own update interval) check for updates and fetch items accordingly.
|
36 |
+
|
37 |
+
'. 'It is recommended to not have more than 20 feed sources that use this global update interval. Having too many feed sources updating precisely at the same time can cause the WP Cron System to crash.', WPRSS_TEXT_DOMAIN),
|
38 |
+
// Unique titles only
|
39 |
+
'unique-titles' => __('Whether to allow multiple feed items to have the same title. When checked, if a feed item has the same title as a previously-imported feed item from any feed source, it will not be imported.
|
40 |
+
|
41 |
+
'. 'This can be useful in cases where permalinks change, or where multiple permalinks refer to the same item.
|
42 |
+
|
43 |
+
'. 'Since this feature requires checking every post title, WordPress installs with a significant amount of posts may notice a slight slowdown of the post import process.', WPRSS_TEXT_DOMAIN),
|
44 |
+
// Custom Feed URL
|
45 |
+
'custom-feed-url' => __('The URL of the custom feed, located at <code>http://yoursite.com/[custom feed url]</code>.
|
46 |
+
'. '<hr/>
|
47 |
+
|
48 |
+
'. 'WP RSS Aggregator allows you to create a custom RSS feed, that contains all of your imported feed items. This setting allows you to change the URL of this custom feed.
|
49 |
+
|
50 |
+
'. '<hr/>
|
51 |
+
|
52 |
+
'. '<strong>Note:</strong> You may be required to refresh you Permalinks after you change this setting, by going to <em>Settings <i class="fa fa-angle-right"></i> Permalinks</e> and clicking <em>Save</em>.', WPRSS_TEXT_DOMAIN),
|
53 |
+
// Custom Feed Title
|
54 |
+
'custom-feed-title' => __('The title of the custom feed.
|
55 |
+
|
56 |
+
'. 'This title will be included in the RSS source of the custom feed, in a <code><title></code> tag.', WPRSS_TEXT_DOMAIN),
|
57 |
+
// Custom Feed Limit
|
58 |
+
'custom-feed-limit' => __('The maximum number of feed items in the custom feed.', WPRSS_TEXT_DOMAIN),
|
59 |
+
|
60 |
+
/* --------------------------
|
61 |
+
* General Display Settings
|
62 |
+
* --------------------------
|
63 |
+
*/ // Link titles
|
64 |
+
'link-enable' => __('Check this box to make the feed item titles link to the original article.', WPRSS_TEXT_DOMAIN),
|
65 |
+
// Title Maximum length
|
66 |
+
'title-limit' => __('Set the maximum number of characters to show for feed item titles.
|
67 |
+
'. '<hr/>
|
68 |
+
|
69 |
+
'. '<em>Leave empty for no limit.</em>', WPRSS_TEXT_DOMAIN),
|
70 |
+
// Show Authors
|
71 |
+
'authors-enable' => __('Check this box to show the author for each feed item, if it is available.', WPRSS_TEXT_DOMAIN),
|
72 |
+
// Video Links
|
73 |
+
'video-links' => __('For feed items from YouTube, Vimeo or Dailymotion, you can choose whether you want to have the items link to the original page link, or a link to the embedded video player only.', WPRSS_TEXT_DOMAIN),
|
74 |
+
// Pagination Type
|
75 |
+
'pagination' => __('The type of pagination to use when showing feed items on multiple pages.
|
76 |
+
|
77 |
+
'. 'The first shows two links, "Older" and "Newer", which allow you to navigate through the pages.
|
78 |
+
|
79 |
+
'. 'The second shows links for all the pages, together with links for the next and previous pages.', WPRSS_TEXT_DOMAIN),
|
80 |
+
// Feed Limit
|
81 |
+
'feed-limit' => __('The maximum number of feed items to display when using the shortcode.
|
82 |
+
|
83 |
+
'. 'This enables pagination if set to a number smaller than the number of items to be displayed.', WPRSS_TEXT_DOMAIN),
|
84 |
+
// Open Links Behaviour
|
85 |
+
'open-dd' => __('Choose how you want links to be opened. This applies to the feed item title and the source link.', WPRSS_TEXT_DOMAIN),
|
86 |
+
// Set links as no follow
|
87 |
+
'follow-dd' => __('Enable this option to set all links displayed as "NoFollow".
|
88 |
+
'. '<hr/>
|
89 |
+
|
90 |
+
'. '"Nofollow" provides a way to tell search engines to <em>not</em> follow certain links, such as links to feed items in this case.', WPRSS_TEXT_DOMAIN),
|
91 |
+
|
92 |
+
/* -------------------------
|
93 |
+
* Source Display Settings
|
94 |
+
* -------------------------
|
95 |
+
*/ // Source Enabled
|
96 |
+
'source-enable' => __('Enable this option to show the feed source name for each feed item.', WPRSS_TEXT_DOMAIN),
|
97 |
+
// Text preceding source
|
98 |
+
'text-preceding-source' => __('Enter the text that you want to show before the source name. A space is automatically added between this text and the feed source name.', WPRSS_TEXT_DOMAIN),
|
99 |
+
// Source Link
|
100 |
+
'source-link' => __('Enable this option to link the feed source name to the RSS feed\'s source site.', WPRSS_TEXT_DOMAIN),
|
101 |
+
|
102 |
+
/* -------------------------
|
103 |
+
* Date Display Settings
|
104 |
+
* -------------------------
|
105 |
+
*/ // Source Enabled
|
106 |
+
'date-enable' => __('Enable this to show the feed item\'s date.', WPRSS_TEXT_DOMAIN),
|
107 |
+
// Text preceding date
|
108 |
+
'text-preceding-date' => __('Enter the text that you want to show before the feed item date. A space is automatically added between this text and the date.', WPRSS_TEXT_DOMAIN),
|
109 |
+
// Date Format
|
110 |
+
'date-format' => __('The format to use for the feed item dates, as a PHP date format.', WPRSS_TEXT_DOMAIN),
|
111 |
+
// Time Ago Format Enable
|
112 |
+
'time-ago-format-enable' => __('Enable this option to show the elapsed time from the feed item\'s date and time to the present time.
|
113 |
+
'. '<em>Eg. 2 hours ago</em>', WPRSS_TEXT_DOMAIN),
|
114 |
+
|
115 |
+
/* --------
|
116 |
+
* Styles
|
117 |
+
* --------
|
118 |
+
*/ // Styles Disable
|
119 |
+
'styles-disable' => __('Check this box to disable all plugin styles used for displaying feed items.
|
120 |
+
|
121 |
+
'. 'This will allow you to provide your own custom CSS styles for displaying the feed items.', WPRSS_TEXT_DOMAIN),
|
122 |
|
123 |
+
/*
|
124 |
+
* -------
|
125 |
+
* Other
|
126 |
+
* -------
|
127 |
+
*/ // Certificate Path
|
128 |
+
'certificate-path' => __( 'Path to the file containing one or more certificates.
|
129 |
+
|
130 |
+
'. 'These will be used to verify certificates over secure connection, such as when fetching a remote resource over HTTPS.
|
131 |
+
|
132 |
+
'. 'Relative path will be relative to the WordPress root.
|
133 |
+
|
134 |
+
'. '<strong>Default:</strong> path to certificate file bundled with WordPress.', WPRSS_TEXT_DOMAIN )
|
|
|
135 |
|
136 |
+
);
|
137 |
+
$help->add_tooltips( $tooltips, $prefix );
|
138 |
+
}
|
139 |
+
}
|
includes/admin-welcome.php
CHANGED
@@ -100,7 +100,7 @@
|
|
100 |
<h3><?php _e( 'Check out our add-ons:', WPRSS_TEXT_DOMAIN ) ?></h3>
|
101 |
|
102 |
<ul>
|
103 |
-
<li><strong><a href="http://www.wprssaggregator.com/extension/feed-post/" target="wprss_ftp"><?php _e( 'Feed to Post', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
104 |
<li><strong><a href="http://www.wprssaggregator.com/extension/excerpts-thumbnails/" target="wprss_et"><?php _e( 'Excerpts & Thumbnails', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
105 |
<li><strong><a href="http://www.wprssaggregator.com/extension/categories/" target="wprss_cat"><?php _e( 'Categories', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
106 |
<li><strong><a href="http://www.wprssaggregator.com/extension/keyword-filtering/" target="wprss_kf"><?php _e( 'Keyword Filtering', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
100 |
<h3><?php _e( 'Check out our add-ons:', WPRSS_TEXT_DOMAIN ) ?></h3>
|
101 |
|
102 |
<ul>
|
103 |
+
<li><strong><a href="http://www.wprssaggregator.com/extension/feed-to-post/" target="wprss_ftp"><?php _e( 'Feed to Post', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
104 |
<li><strong><a href="http://www.wprssaggregator.com/extension/excerpts-thumbnails/" target="wprss_et"><?php _e( 'Excerpts & Thumbnails', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
105 |
<li><strong><a href="http://www.wprssaggregator.com/extension/categories/" target="wprss_cat"><?php _e( 'Categories', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
106 |
<li><strong><a href="http://www.wprssaggregator.com/extension/keyword-filtering/" target="wprss_kf"><?php _e( 'Keyword Filtering', WPRSS_TEXT_DOMAIN ); ?></a></strong></li>
|
includes/feed-importing.php
CHANGED
@@ -9,6 +9,7 @@
|
|
9 |
// Warning: Order may be important
|
10 |
add_filter('wprss_normalize_permalink', 'wprss_google_news_url_fix', 8);
|
11 |
add_filter('wprss_normalize_permalink', 'wprss_bing_news_url_fix', 9);
|
|
|
12 |
add_filter('wprss_normalize_permalink', 'wprss_convert_video_permalink', 100);
|
13 |
|
14 |
|
@@ -322,6 +323,17 @@
|
|
322 |
function wprss_google_news_url_fix($permalink) {
|
323 |
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?' . preg_quote('news.google.com', '!') . '.*!');
|
324 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
325 |
|
326 |
|
327 |
/**
|
9 |
// Warning: Order may be important
|
10 |
add_filter('wprss_normalize_permalink', 'wprss_google_news_url_fix', 8);
|
11 |
add_filter('wprss_normalize_permalink', 'wprss_bing_news_url_fix', 9);
|
12 |
+
add_filter('wprss_normalize_permalink', 'wprss_google_alerts_url_fix', 10);
|
13 |
add_filter('wprss_normalize_permalink', 'wprss_convert_video_permalink', 100);
|
14 |
|
15 |
|
323 |
function wprss_google_news_url_fix($permalink) {
|
324 |
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?' . preg_quote('news.google.com', '!') . '.*!');
|
325 |
}
|
326 |
+
|
327 |
+
|
328 |
+
/**
|
329 |
+
* Extracts the actual URL from a Google Alerts permalink
|
330 |
+
*
|
331 |
+
* @param string $permalink The permalink to normalize.
|
332 |
+
* @since 4.7.3
|
333 |
+
*/
|
334 |
+
function wprss_google_alerts_url_fix($permalink) {
|
335 |
+
return wprss_tracking_url_fix($permalink, '!^(https?:\/\/)?(www\.)?' . preg_quote('google.com/url', '!') . '.*!');
|
336 |
+
}
|
337 |
|
338 |
|
339 |
/**
|
includes/image-caching.php
CHANGED
@@ -4,140 +4,618 @@
|
|
4 |
* @since 4.6.10
|
5 |
*/
|
6 |
class WPRSS_Image_Cache {
|
7 |
-
|
|
|
|
|
8 |
protected $_download_request_timeout = 300;
|
9 |
-
|
|
|
|
|
|
|
|
|
10 |
protected $_image_class_name = 'WPRSS_Image_Cache_Image';
|
11 |
protected $_images = array();
|
12 |
-
|
13 |
/**
|
14 |
* @since 4.6.10
|
15 |
*/
|
16 |
public function __construct() {
|
17 |
}
|
18 |
-
|
19 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
20 |
/**
|
21 |
* @since 4.6.10
|
22 |
-
* @param string $class_name
|
23 |
* @return \WPRSS_Image_Cache This instance.
|
24 |
*/
|
25 |
public function set_image_class_name( $class_name ) {
|
26 |
$this->_image_class_name = $class_name;
|
27 |
return $this;
|
28 |
}
|
29 |
-
|
30 |
-
|
31 |
/**
|
32 |
* @since 4.6.10
|
33 |
-
* @return string
|
34 |
*/
|
35 |
public function get_image_class_name() {
|
36 |
return trim($this->_image_class_name);
|
37 |
}
|
38 |
-
|
39 |
-
|
40 |
/**
|
41 |
* @since 4.6.10
|
42 |
-
* @param int $timeout
|
|
|
43 |
* @return \WPRSS_Image_Cache This instance.
|
44 |
*/
|
45 |
public function set_download_request_timeout( $timeout ) {
|
46 |
$this->_download_request_timeout = intval( $timeout );
|
47 |
return $this;
|
48 |
}
|
49 |
-
|
50 |
-
|
51 |
/**
|
52 |
* @since 4.6.10
|
53 |
-
* @return int
|
|
|
54 |
*/
|
55 |
public function get_download_request_timeout() {
|
56 |
return $this->_download_request_timeout;
|
57 |
}
|
58 |
-
|
59 |
-
|
60 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
61 |
* @since 4.6.10
|
62 |
* @param string $url
|
63 |
-
* @return \WPRSS_Image_Cache_Image
|
64 |
* @throws Exception If class invalid, or not found
|
65 |
*/
|
66 |
-
public function
|
67 |
$error_caption = 'Could not create new cache image';
|
68 |
$class_name = $this->get_image_class_name();
|
69 |
if ( empty( $class_name ) ) throw new Exception( sprintf( '%1$s: class name must not be empty' ) );
|
70 |
if ( !class_exists( $class_name ) ) throw new Exception( sprintf( '%1$s: class "%2$s" does not exist', $class_name ) );
|
71 |
-
|
72 |
$image = new $class_name();
|
73 |
$this->_prepare_image( $image );
|
74 |
/* @var $image WPRSS_Image_Cache_Image */
|
75 |
if ( !is_null( $url ) ) $image->set_url( $url );
|
76 |
-
|
77 |
return $image;
|
78 |
}
|
79 |
-
|
80 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
/**
|
82 |
* @since 4.6.10
|
83 |
-
* @param WPRSS_Image_Cache_Image $image
|
84 |
*/
|
85 |
protected function _prepare_image( $image ) {
|
86 |
$image->set_download_request_timeout( $this->get_download_request_timeout() );
|
|
|
87 |
}
|
88 |
-
|
89 |
-
|
90 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
91 |
* @since 4.6.10
|
92 |
* @param string|null $url
|
93 |
-
* @return array|WPRSS_Image_Cache_Image
|
94 |
*/
|
95 |
public function get_images( $url = null ) {
|
96 |
if ( is_null( $url ) ) return $this->_images;
|
97 |
-
|
98 |
// Gotta cache one
|
99 |
if ( !isset( $this->_images[ $url ] ) ) {
|
100 |
-
|
101 |
-
$image = $this->_download_image($url);
|
102 |
-
} catch ( Exception $e ) {
|
103 |
-
return new WP_Error( 'image_cache_cannot_download', $e->getMessage() );
|
104 |
-
}
|
105 |
-
|
106 |
$this->_images[ $url ] = $image;
|
107 |
}
|
108 |
-
|
109 |
return $this->_images[ $url ];
|
110 |
}
|
111 |
-
|
112 |
-
|
113 |
/**
|
|
|
|
|
114 |
* @since 4.6.10
|
115 |
* @return \WPRSS_Image_Cache This instance
|
116 |
*/
|
117 |
-
public function purge() {
|
118 |
$image_class_name = $this->get_image_class_name();
|
|
|
119 |
foreach( $this->get_images() as $_url => $_image ) {
|
120 |
/* @var $_image WPRSS_Image_Cache_Image */
|
121 |
-
if ( is_a( $_image, $image_class_name ) )
|
122 |
-
$
|
|
|
|
|
|
|
|
|
|
|
|
|
123 |
}
|
124 |
-
|
125 |
$this->_images = array();
|
126 |
-
return $
|
127 |
}
|
128 |
-
|
129 |
-
|
130 |
/**
|
131 |
* @since 4.6.10
|
132 |
* @param string $url
|
133 |
* @return WPRSS_Image_Cache_Image
|
134 |
*/
|
135 |
-
protected function
|
136 |
-
$image = $this->
|
137 |
-
$image->
|
138 |
-
|
139 |
return $image;
|
140 |
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
141 |
}
|
142 |
|
143 |
|
@@ -145,45 +623,60 @@ class WPRSS_Image_Cache {
|
|
145 |
* @since 4.6.10
|
146 |
*/
|
147 |
class WPRSS_Image_Cache_Image {
|
148 |
-
|
149 |
protected $_url;
|
|
|
|
|
|
|
150 |
protected $_local_path;
|
151 |
protected $_unique_name;
|
152 |
protected $_size;
|
153 |
protected $_download_request_timeout;
|
154 |
protected $_is_attempted;
|
155 |
protected $_is_fall_back_to_unsecure;
|
156 |
-
|
157 |
-
|
|
|
|
|
|
|
158 |
/**
|
159 |
* @since 4.6.10
|
160 |
* @param string|null $data
|
161 |
*/
|
162 |
public function __construct( $data = null ) {
|
163 |
$this->reset();
|
164 |
-
|
165 |
if ( is_string( $data ) && !empty( $data ) )
|
166 |
$this->_set_url( $data );
|
167 |
}
|
168 |
-
|
169 |
-
|
170 |
/**
|
|
|
|
|
|
|
171 |
* @since 4.6.10
|
172 |
* @return \WPRSS_Image_Cache_Image This instance.
|
173 |
*/
|
174 |
public function reset() {
|
175 |
$this->_url = null;
|
|
|
|
|
|
|
176 |
$this->_local_path = null;
|
177 |
$this->_unique_name = null;
|
178 |
$this->_size = null;
|
179 |
$this->_download_request_timeout = 300;
|
180 |
$this->_is_attempted = false;
|
181 |
$this->_is_fall_back_to_unsecure = true;
|
182 |
-
|
|
|
|
|
|
|
183 |
return $this;
|
184 |
}
|
185 |
-
|
186 |
-
|
187 |
/**
|
188 |
* @since 4.6.10
|
189 |
* @param string $url
|
@@ -193,9 +686,12 @@ class WPRSS_Image_Cache_Image {
|
|
193 |
$this->_url = $url;
|
194 |
return $this;
|
195 |
}
|
196 |
-
|
197 |
-
|
198 |
/**
|
|
|
|
|
|
|
199 |
* @since 4.6.10
|
200 |
* @param string $url
|
201 |
* @return \WPRSS_Image_Cache_Image This instance.
|
@@ -203,59 +699,227 @@ class WPRSS_Image_Cache_Image {
|
|
203 |
public function set_url( $url ) {
|
204 |
$this->reset();
|
205 |
$this->_set_url($url);
|
206 |
-
|
207 |
return $this;
|
208 |
}
|
209 |
-
|
210 |
-
|
211 |
/**
|
|
|
|
|
|
|
212 |
* @since 4.6.10
|
213 |
-
* @return string
|
214 |
*/
|
215 |
public function get_url() {
|
216 |
return $this->_url;
|
217 |
}
|
218 |
-
|
219 |
-
|
220 |
/**
|
|
|
|
|
221 |
* @since 4.6.10
|
222 |
-
* @return boolean
|
223 |
*/
|
224 |
public function has_url() {
|
225 |
return isset( $this->_url );
|
226 |
}
|
227 |
-
|
228 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
229 |
/**
|
230 |
* @since 4.6.10
|
231 |
* @param string $path
|
232 |
* @return \WPRSS_Image_Cache_Image This instance.
|
233 |
*/
|
234 |
-
protected function
|
235 |
-
$this->
|
236 |
return $this;
|
237 |
}
|
238 |
-
|
239 |
-
|
240 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
241 |
* @since 4.6.10
|
242 |
-
* @return string
|
243 |
*/
|
244 |
-
public function
|
245 |
-
return $this->
|
246 |
}
|
247 |
-
|
248 |
-
|
249 |
/**
|
|
|
|
|
|
|
250 |
* @since 4.6.10
|
251 |
* @return boolean
|
252 |
*/
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
253 |
public function has_local_path() {
|
254 |
-
return
|
255 |
}
|
256 |
-
|
257 |
-
|
258 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
259 |
* @since 4.6.10
|
260 |
* @param int $timeout
|
261 |
* @return \WPRSS_Image_Cache_Image This instance.
|
@@ -264,17 +928,23 @@ class WPRSS_Image_Cache_Image {
|
|
264 |
$this->_download_request_timeout = intval( $timeout );
|
265 |
return $this;
|
266 |
}
|
267 |
-
|
268 |
-
|
269 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
270 |
* @since 4.6.10
|
271 |
* @return int
|
272 |
*/
|
273 |
public function get_download_request_timeout() {
|
274 |
return $this->_download_request_timeout;
|
275 |
}
|
276 |
-
|
277 |
-
|
278 |
/**
|
279 |
* @since 4.6.10
|
280 |
* @param boolean|null $is_attempted
|
@@ -283,22 +953,31 @@ class WPRSS_Image_Cache_Image {
|
|
283 |
protected function _is_attempted( $is_attempted = null ) {
|
284 |
if ( is_null( $is_attempted ) )
|
285 |
return (bool)$this->_is_attempted;
|
286 |
-
|
287 |
$this->_is_attempted = (bool) $is_attempted;
|
288 |
return $this;
|
289 |
}
|
290 |
-
|
291 |
-
|
292 |
/**
|
|
|
|
|
|
|
|
|
293 |
* @since 4.6.10
|
294 |
-
* @return boolean
|
295 |
*/
|
296 |
public function is_attempted() {
|
297 |
return $this->_is_attempted();
|
298 |
}
|
299 |
-
|
300 |
-
|
301 |
/**
|
|
|
|
|
|
|
|
|
|
|
302 |
* @since 4.6.10
|
303 |
* @param boolean|null $is_fall_back
|
304 |
* @return \WPRSS_Image_Cache_Image|boolean Whether will fall back to unsecure, or this instance.
|
@@ -306,121 +985,269 @@ class WPRSS_Image_Cache_Image {
|
|
306 |
public function is_fall_back_to_unsecure( $is_fall_back = null ) {
|
307 |
if ( is_null( $is_fall_back ) )
|
308 |
return (bool) $this->_is_fall_back_to_unsecure;
|
309 |
-
|
310 |
$this->_is_fall_back_to_unsecure = (bool) $is_fall_back;
|
311 |
return $this;
|
312 |
}
|
313 |
-
|
314 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
315 |
/**
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
316 |
* @since 4.6.10
|
317 |
-
* @
|
|
|
318 |
* @throws Exception If no URL is set, or the resource is unreadable, or something went wrong.
|
319 |
*/
|
320 |
-
public function download() {
|
321 |
-
|
322 |
-
|
323 |
-
|
324 |
-
//
|
325 |
-
$
|
326 |
-
|
327 |
-
|
328 |
-
|
329 |
-
// Downloading the image
|
330 |
-
$url = $this->get_url();
|
331 |
-
$timeout = $this->get_download_request_timeout();
|
332 |
-
$tmp_path = $this->_download( $url, $timeout );
|
333 |
-
if ( is_wp_error( $tmp_path ) ) throw new Exception ( sprintf( '%1$s: %2$s', $error_caption, $tmp_path->get_error_message() ) );
|
334 |
-
// wprss_log( sprintf( 'Image saved to "%1$s"', $tmp_path ), null, WPRSS_LOG_LEVEL_SYSTEM );
|
335 |
-
$this->_set_local_path( $tmp_path );
|
336 |
-
|
337 |
-
return $this->get_local_path();
|
338 |
}
|
339 |
-
|
340 |
-
|
341 |
/**
|
342 |
* @since 4.6.10
|
343 |
* @param string $url
|
344 |
* @param int $timeout
|
345 |
-
* @return string
|
346 |
*/
|
347 |
-
protected function _download(
|
348 |
-
|
349 |
-
|
350 |
-
|
|
|
|
|
351 |
$https = 'https';
|
|
|
|
|
352 |
if ( $this->is_fall_back_to_unsecure() && (stripos( $url, $https ) === 0) ) {
|
|
|
353 |
$url = 'http' . substr( $url, strlen( $https ) );
|
354 |
-
|
355 |
-
$tmp_path = $
|
|
|
356 |
}
|
|
|
357 |
}
|
358 |
-
|
359 |
return $tmp_path;
|
360 |
}
|
361 |
-
|
362 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
363 |
/**
|
|
|
|
|
364 |
* @since 4.6.10
|
365 |
* @return \WPRSS_Image_Cache_Image This instance.
|
366 |
*/
|
367 |
public function delete() {
|
368 |
-
if ( $path = $this->
|
369 |
-
if ( file_exists( $path ) )
|
370 |
-
unlink( $path );
|
371 |
-
|
372 |
-
|
373 |
-
|
374 |
-
return $this;
|
375 |
}
|
376 |
-
|
377 |
-
|
378 |
/**
|
|
|
|
|
|
|
|
|
|
|
379 |
* @since 4.6.10
|
380 |
-
* @return string
|
381 |
*/
|
382 |
public function get_unique_name() {
|
383 |
-
if( !isset($this->_unique_name) )
|
384 |
-
$
|
385 |
-
|
386 |
-
// One of more character that is not a '?', followed by an image extension
|
387 |
-
preg_match( '/[^\?]+\.(jpg|JPG|jpe|JPE|jpeg|JPEG|gif|GIF|png|PNG)/', $url, $matches );
|
388 |
-
$url_filename = basename( urldecode( $matches[0] ) );
|
389 |
-
// Check for extension. If not found, use last component of the URL
|
390 |
-
if ( !isset( $matches[1] ) ) {
|
391 |
-
$matches = array();
|
392 |
-
// Get the path to the image, without the domain. ex. /news/132456/image
|
393 |
-
preg_match_all( '/[^:]+:\/\/[^\/]+\/(.+)/', $url, $matches );
|
394 |
-
// If found
|
395 |
-
if ( isset( $matches[1][0] ) ) {
|
396 |
-
// Replace all '/' into '.' for the filename
|
397 |
-
$url_filename = str_replace( '/', '-', $matches[1][0] );
|
398 |
-
}
|
399 |
-
// If not found
|
400 |
-
else {
|
401 |
-
// Use a random string as a fallback, with length of 16 characters
|
402 |
-
$url_filename = wprss_ftp_generate_random_string( 16 );
|
403 |
-
}
|
404 |
-
}
|
405 |
-
$this->_set_unique_name( $url_filename );
|
406 |
-
}
|
407 |
-
|
408 |
return $this->_unique_name;
|
409 |
}
|
410 |
|
411 |
-
|
412 |
/**
|
413 |
* @since 4.6.10
|
414 |
-
* @param string $name
|
415 |
* @return \WPRSS_Image_Cache_Image This instance.
|
416 |
*/
|
417 |
protected function _set_unique_name( $name ) {
|
418 |
$this->_unique_name = $name;
|
419 |
return $this;
|
420 |
}
|
421 |
-
|
422 |
-
|
423 |
/**
|
|
|
|
|
424 |
* @since 4.6.10
|
425 |
* @return array A numeric array, where index 0 holds image width, and index 1 holds image height.
|
426 |
* @throws Exception If image file is unreadable.
|
@@ -428,15 +1255,15 @@ class WPRSS_Image_Cache_Image {
|
|
428 |
public function get_size() {
|
429 |
if ( !isset( $this->_size ) ) {
|
430 |
$error_caption = 'Could not get image size';
|
431 |
-
if ( !$this->is_readable() ) throw new Exception( sprintf( '%1$s: image file is not readable' ) );
|
432 |
$path = $this->get_local_path();
|
433 |
-
|
|
|
434 |
// Trying simplest way
|
435 |
if ( $size = getimagesize( $path ) )
|
436 |
$this->_size = array( 0 => $size[0], 1 => $size[1] );
|
437 |
-
|
438 |
wprss_log( sprintf( 'Tried `getimagesize()`: %1$s', empty($this->_size) ? 'failure' : 'success' ), __METHOD__, WPRSS_LOG_LEVEL_SYSTEM );
|
439 |
-
|
440 |
if( !$this->_size && function_exists( 'gd_info' ) ) {
|
441 |
$image = file_get_contents( $path );
|
442 |
$image = imagecreatefromstring( $image );
|
@@ -446,16 +1273,18 @@ class WPRSS_Image_Cache_Image {
|
|
446 |
wprss_log( sprintf( 'Tried GD: %1$s', empty($this->_size) ? 'failure' : 'success' ), __METHOD__, WPRSS_LOG_LEVEL_SYSTEM );
|
447 |
}
|
448 |
}
|
449 |
-
|
450 |
return $this->_size;
|
451 |
}
|
452 |
-
|
453 |
-
|
454 |
/**
|
455 |
* @since 4.6.10
|
456 |
* @return boolean
|
457 |
*/
|
458 |
public function is_readable() {
|
459 |
-
|
|
|
|
|
460 |
}
|
461 |
-
}
|
4 |
* @since 4.6.10
|
5 |
*/
|
6 |
class WPRSS_Image_Cache {
|
7 |
+
|
8 |
+
protected static $_instance;
|
9 |
+
|
10 |
protected $_download_request_timeout = 300;
|
11 |
+
/** @var string See {@see get_temp_dir() } */
|
12 |
+
protected $_temp_dir; // System temp dir + 'remote-image-cache'
|
13 |
+
protected $_current_time;
|
14 |
+
protected $_ttl = 30; // Time to live, in seconds
|
15 |
+
|
16 |
protected $_image_class_name = 'WPRSS_Image_Cache_Image';
|
17 |
protected $_images = array();
|
18 |
+
|
19 |
/**
|
20 |
* @since 4.6.10
|
21 |
*/
|
22 |
public function __construct() {
|
23 |
}
|
24 |
+
|
25 |
+
|
26 |
+
/**
|
27 |
+
* Retrieve the singleton instance of this class.
|
28 |
+
*
|
29 |
+
* @since 4.7.3
|
30 |
+
* @return WPRSS_Image_Cache
|
31 |
+
*/
|
32 |
+
public static function instance() {
|
33 |
+
if ( is_null( self::$_instance ) )
|
34 |
+
self::$_instance = new self;
|
35 |
+
|
36 |
+
return self::$_instance;
|
37 |
+
}
|
38 |
+
|
39 |
+
|
40 |
/**
|
41 |
* @since 4.6.10
|
42 |
+
* @param string $class_name The name of the class, instances of which will represent image files.
|
43 |
* @return \WPRSS_Image_Cache This instance.
|
44 |
*/
|
45 |
public function set_image_class_name( $class_name ) {
|
46 |
$this->_image_class_name = $class_name;
|
47 |
return $this;
|
48 |
}
|
49 |
+
|
50 |
+
|
51 |
/**
|
52 |
* @since 4.6.10
|
53 |
+
* @return string The name of the class, instances of which represent image files.
|
54 |
*/
|
55 |
public function get_image_class_name() {
|
56 |
return trim($this->_image_class_name);
|
57 |
}
|
58 |
+
|
59 |
+
|
60 |
/**
|
61 |
* @since 4.6.10
|
62 |
+
* @param int $timeout The number of seconds, for which to wait until
|
63 |
+
* the remote resource can be considered timed out.
|
64 |
* @return \WPRSS_Image_Cache This instance.
|
65 |
*/
|
66 |
public function set_download_request_timeout( $timeout ) {
|
67 |
$this->_download_request_timeout = intval( $timeout );
|
68 |
return $this;
|
69 |
}
|
70 |
+
|
71 |
+
|
72 |
/**
|
73 |
* @since 4.6.10
|
74 |
+
* @return int The number of seconds, for which the request will wait until
|
75 |
+
* the remote resource can be considered timed out.
|
76 |
*/
|
77 |
public function get_download_request_timeout() {
|
78 |
return $this->_download_request_timeout;
|
79 |
}
|
80 |
+
|
81 |
+
|
82 |
/**
|
83 |
+
* Get the unix timestamp, which represents the current moment in time.
|
84 |
+
*
|
85 |
+
* The cache expiration calculations will use this time to determine
|
86 |
+
* whether or not the cache for each resource is expired.
|
87 |
+
*
|
88 |
+
* @since 4.7.3
|
89 |
+
* @return int The unix timestamp, representing the current moment in time.
|
90 |
+
*/
|
91 |
+
public function get_current_time() {
|
92 |
+
if ( !is_null( $this->_current_time ) )
|
93 |
+
return $this->_current_time;
|
94 |
+
|
95 |
+
return time();
|
96 |
+
}
|
97 |
+
|
98 |
+
|
99 |
+
/**
|
100 |
+
* Set the unix timestamp, which represents the current moment in time.
|
101 |
+
*
|
102 |
+
* The cache expiration calculations will use this time to determine
|
103 |
+
* whether or not the cache for each resource is expired.
|
104 |
+
*
|
105 |
+
* Use this to determine cache expiration for a moment in time other than now.
|
106 |
+
*
|
107 |
+
* @since 4.7.3
|
108 |
+
* @see normalize_time()
|
109 |
+
* @param int|null $time The unix timestamp, representing the current moment in time. If null, the current timestamp will be used.
|
110 |
+
* @return WPRSS_Image_Cache This instance.
|
111 |
+
*/
|
112 |
+
public function set_current_time( $time = null ) {
|
113 |
+
if ( is_null( $time ) )
|
114 |
+
$time = time();
|
115 |
+
|
116 |
+
$time = $this->normalize_time( $time );
|
117 |
+
|
118 |
+
if ( is_int( $time ) || is_object( $time ) )
|
119 |
+
$this->_current_time = $time;
|
120 |
+
|
121 |
+
return $this;
|
122 |
+
}
|
123 |
+
|
124 |
+
|
125 |
+
/**
|
126 |
+
* Get the TTL (Time To Live) of cache files.
|
127 |
+
*
|
128 |
+
* This value will be used by default by all instances of cache files.
|
129 |
+
* If a file is older than this, it will be considered to be expired.
|
130 |
+
*
|
131 |
+
* @since 4.7.3
|
132 |
+
* @see set_ttl()
|
133 |
+
* @return int The number of seconds that represents the cache lifetime.
|
134 |
+
*/
|
135 |
+
public function get_ttl() {
|
136 |
+
return $this->_ttl;
|
137 |
+
}
|
138 |
+
|
139 |
+
|
140 |
+
/**
|
141 |
+
* Set the TTL (Time To Live) of cache files.
|
142 |
+
*
|
143 |
+
* This value will be used by default by all instances of cache files.
|
144 |
+
* If a file is older than this, it will be considered to be expired.
|
145 |
+
*
|
146 |
+
* @since 4.7.3
|
147 |
+
* @see get_ttl()
|
148 |
+
* @see normalize_time()
|
149 |
+
* @param int|str $time A representation of the amount of seconds, for which the cache is considered valid.
|
150 |
+
* @return \WPRSS_Image_Cache
|
151 |
+
*/
|
152 |
+
public function set_ttl( $time ) {
|
153 |
+
$time = $this->normalize_time( $time );
|
154 |
+
$this->_ttl = $time;
|
155 |
+
|
156 |
+
return $this;
|
157 |
+
}
|
158 |
+
|
159 |
+
|
160 |
+
/**
|
161 |
+
* Converts one of many representations of time into a Unix timestamp.
|
162 |
+
*
|
163 |
+
* Supports: An integer Unix timestamp, a string Unix timestamp, a value
|
164 |
+
* that ca be cast to integer, or a value that can be read by {@see strtotime}.
|
165 |
+
*
|
166 |
+
* @since 4.7.3
|
167 |
+
* @param int|string $time A representation of time.
|
168 |
+
* @return int The Unix timestamp that represents a moment in time.
|
169 |
+
*/
|
170 |
+
public function normalize_time( $time ) {
|
171 |
+
if ( is_string( $time ) )
|
172 |
+
$time = is_numeric( $time )
|
173 |
+
? intval( $time )
|
174 |
+
: (int) strtotime( $time );
|
175 |
+
|
176 |
+
return $time;
|
177 |
+
}
|
178 |
+
|
179 |
+
|
180 |
+
/**
|
181 |
+
* If given a cache file, a URL or a path, converts it into a path.
|
182 |
+
*
|
183 |
+
* @since 4.7.3
|
184 |
+
* @see WPRSS_Image_Cache_Image::get_current_path()
|
185 |
+
* @see is_valid_url()
|
186 |
+
* @see get_unique_filename()
|
187 |
+
* @param WPRSS_Image_Cache_Image|string $file An instance of a cache file, a URL, or path.
|
188 |
+
* @return string A relative path to a cache file.
|
189 |
+
*/
|
190 |
+
public function normalize_path( $file ) {
|
191 |
+
if ( $file instanceof WPRSS_Image_Cache_Image )
|
192 |
+
$file = $file->get_current_path();
|
193 |
+
|
194 |
+
if ( $this->is_valid_url( $file ) )
|
195 |
+
$file = $this->get_unique_filename( $file );
|
196 |
+
|
197 |
+
return $file;
|
198 |
+
}
|
199 |
+
|
200 |
+
|
201 |
+
/**
|
202 |
+
* Create and retrieve an new instance of a cache file for the specified URL.
|
203 |
+
*
|
204 |
* @since 4.6.10
|
205 |
* @param string $url
|
206 |
+
* @return \WPRSS_Image_Cache_Image The instance of a new cache file.
|
207 |
* @throws Exception If class invalid, or not found
|
208 |
*/
|
209 |
+
public function get_new_file( $url = null ) {
|
210 |
$error_caption = 'Could not create new cache image';
|
211 |
$class_name = $this->get_image_class_name();
|
212 |
if ( empty( $class_name ) ) throw new Exception( sprintf( '%1$s: class name must not be empty' ) );
|
213 |
if ( !class_exists( $class_name ) ) throw new Exception( sprintf( '%1$s: class "%2$s" does not exist', $class_name ) );
|
214 |
+
|
215 |
$image = new $class_name();
|
216 |
$this->_prepare_image( $image );
|
217 |
/* @var $image WPRSS_Image_Cache_Image */
|
218 |
if ( !is_null( $url ) ) $image->set_url( $url );
|
219 |
+
|
220 |
return $image;
|
221 |
}
|
222 |
+
|
223 |
+
|
224 |
+
/**
|
225 |
+
* Get a new instance of an image cache image, which points to the specified path.
|
226 |
+
*
|
227 |
+
* @param WPRSS_Image_Cache_Image|string $file An image cache instance, URL or path.
|
228 |
+
* @param boolean $must_exist Whether or not the image cache file must exist.
|
229 |
+
* @return WPRSS_Image_Cache_Image|null The new image cache instance if successful;
|
230 |
+
* null if $must_exist is true, and the image cache file does not exist.
|
231 |
+
*/
|
232 |
+
public function get_new_file_from_path( $file, $must_exist = false ) {
|
233 |
+
$path = $this->normalize_path( $file );
|
234 |
+
|
235 |
+
if ( $must_exist && !$this->check_file_exists( $path ) )
|
236 |
+
return null;
|
237 |
+
|
238 |
+
$file = $this->get_new_file();
|
239 |
+
$file->set_path( $path );
|
240 |
+
|
241 |
+
return $file;
|
242 |
+
}
|
243 |
+
|
244 |
+
|
245 |
/**
|
246 |
* @since 4.6.10
|
247 |
+
* @param WPRSS_Image_Cache_Image $image A prepared instance of an image file.
|
248 |
*/
|
249 |
protected function _prepare_image( $image ) {
|
250 |
$image->set_download_request_timeout( $this->get_download_request_timeout() );
|
251 |
+
$image->set_ttl( $this->get_ttl() );
|
252 |
}
|
253 |
+
|
254 |
+
|
255 |
/**
|
256 |
+
* Get all the images that are managed by this cache instance,
|
257 |
+
* or just one instance that corresponds to a resource identified by the
|
258 |
+
* specified URL.
|
259 |
+
*
|
260 |
+
* If no instance exists yet, it will be created.
|
261 |
+
*
|
262 |
* @since 4.6.10
|
263 |
* @param string|null $url
|
264 |
+
* @return array|WPRSS_Image_Cache_Image
|
265 |
*/
|
266 |
public function get_images( $url = null ) {
|
267 |
if ( is_null( $url ) ) return $this->_images;
|
268 |
+
|
269 |
// Gotta cache one
|
270 |
if ( !isset( $this->_images[ $url ] ) ) {
|
271 |
+
$image = $this->_get_file( $url );
|
|
|
|
|
|
|
|
|
|
|
272 |
$this->_images[ $url ] = $image;
|
273 |
}
|
274 |
+
|
275 |
return $this->_images[ $url ];
|
276 |
}
|
277 |
+
|
278 |
+
|
279 |
/**
|
280 |
+
* Delete the cache files for all resources that are managed by this instance.
|
281 |
+
*
|
282 |
* @since 4.6.10
|
283 |
* @return \WPRSS_Image_Cache This instance
|
284 |
*/
|
285 |
+
public function purge( $expired_only = true, $managed_only = true ) {
|
286 |
$image_class_name = $this->get_image_class_name();
|
287 |
+
$deleted_count = 0;
|
288 |
foreach( $this->get_images() as $_url => $_image ) {
|
289 |
/* @var $_image WPRSS_Image_Cache_Image */
|
290 |
+
if ( is_a( $_image, $image_class_name ) ) {
|
291 |
+
$is_delete = $expired_only
|
292 |
+
? $_image->check_expired()
|
293 |
+
: true;
|
294 |
+
|
295 |
+
if ( $is_delete )
|
296 |
+
$deleted_count += (int) $_image->delete();
|
297 |
+
}
|
298 |
}
|
299 |
+
|
300 |
$this->_images = array();
|
301 |
+
return $deleted_count;
|
302 |
}
|
303 |
+
|
304 |
+
|
305 |
/**
|
306 |
* @since 4.6.10
|
307 |
* @param string $url
|
308 |
* @return WPRSS_Image_Cache_Image
|
309 |
*/
|
310 |
+
protected function _get_file( $url ) {
|
311 |
+
$image = $this->get_new_file( $url );
|
312 |
+
$image->retrieve();
|
313 |
+
|
314 |
return $image;
|
315 |
}
|
316 |
+
|
317 |
+
|
318 |
+
/**
|
319 |
+
* Checks whether or not the specified image exists.
|
320 |
+
*
|
321 |
+
* @since 4.7.3
|
322 |
+
* @param WPRSS_Image_Cache_Image|string $file An image instance, URL or file path.
|
323 |
+
* @return bool Whether or not the file of the specified image exists locally, and is readable.
|
324 |
+
*/
|
325 |
+
public function check_file_exists( $file ) {
|
326 |
+
$file = $this->normalize_path( $file );
|
327 |
+
$file = $this->get_tmp_dir( $file );
|
328 |
+
return is_readable( $file );
|
329 |
+
}
|
330 |
+
|
331 |
+
|
332 |
+
/**
|
333 |
+
* Checks whether the file for a resource represented by the given
|
334 |
+
* file instance, URL or path has expired.
|
335 |
+
*
|
336 |
+
* If the file for the resource does not exist, it is considered to be expired.
|
337 |
+
*
|
338 |
+
* @since 4.7.3
|
339 |
+
* @see get_current_time()
|
340 |
+
* @see check_image_exists()
|
341 |
+
* @see get_expiration_time()
|
342 |
+
* @param WPRSS_Image_Cache_Image|string $image An image instance, URL or file path.
|
343 |
+
* @return bool Whether or not the cache of the specified image has expired.
|
344 |
+
*/
|
345 |
+
public function check_image_expired( $image ) {
|
346 |
+
if ( !$this->check_file_exists( $image ) )
|
347 |
+
return true;
|
348 |
+
return $this->get_current_time() >= $this->get_expiration_time( $image );
|
349 |
+
}
|
350 |
+
|
351 |
+
|
352 |
+
/**
|
353 |
+
* Retrieve the time when the cache file for the specified resource will expire.
|
354 |
+
*
|
355 |
+
* @since 4.7.3
|
356 |
+
* @see get_ttl()
|
357 |
+
* @see get_file_modification_time()
|
358 |
+
* @param WPRSS_Image_Cache_Image|string $image Resource URL, cache file instance or path.
|
359 |
+
* @return int The Unix timestamp representing the moment in time when the
|
360 |
+
* cache for the specified resource will expire.
|
361 |
+
*/
|
362 |
+
public function get_expiration_time( $image ) {
|
363 |
+
$mod_time = $this->get_image_modification_time( $image );
|
364 |
+
|
365 |
+
$ttl = $image instanceof WPRSS_Image_Cache_Image
|
366 |
+
? $image->get_ttl()
|
367 |
+
: $this->get_ttl();
|
368 |
+
|
369 |
+
return (int) $mod_time + (int) $ttl;
|
370 |
+
}
|
371 |
+
|
372 |
+
|
373 |
+
/**
|
374 |
+
* Checks whether the specified URL is valid.
|
375 |
+
*
|
376 |
+
* Valid URLs must start with a protocol, even a relative one.
|
377 |
+
*
|
378 |
+
* @since 4.7.3
|
379 |
+
* @see wprss_validate_url()
|
380 |
+
* @param string $url A URL to validate.
|
381 |
+
* @return bool True if the specified string is a valud URL; false otherwize.
|
382 |
+
*/
|
383 |
+
public function is_valid_url( $url ) {
|
384 |
+
$url = trim( $url );
|
385 |
+
$protocol_regex = '^([a-z][\w-]+:)?//';
|
386 |
+
return !is_object() && preg_match( $protocol_regex, $url ) && wprss_validate_url( $url );
|
387 |
+
}
|
388 |
+
|
389 |
+
|
390 |
+
/**
|
391 |
+
* Gets the modification time of the cache file for the specified resource.
|
392 |
+
*
|
393 |
+
* @since 4.7.3
|
394 |
+
* @todo Maybe fix in accordance with {@link http://php.net/manual/en/function.filemtime.php#100692 this bug}.
|
395 |
+
* @see normalize_path()
|
396 |
+
* @see get_tmp_dir()
|
397 |
+
* @see filemtime()
|
398 |
+
* @param WPRSS_Image_Cache_Image|string $image Resource URL, cache file instance or path.
|
399 |
+
* @return int|null The Unix timestamp representing the time of file modification. Null if cannot be retrieved.
|
400 |
+
*/
|
401 |
+
public function get_image_modification_time( $image ) {
|
402 |
+
$path = $this->normalize_path( $image );
|
403 |
+
$path = $this->get_tmp_dir( $path );
|
404 |
+
$mod_time = @filemtime( $path );
|
405 |
+
|
406 |
+
return $mod_time
|
407 |
+
? intval( $mod_time )
|
408 |
+
: null;
|
409 |
+
}
|
410 |
+
|
411 |
+
|
412 |
+
/**
|
413 |
+
* Get the path to the root directory of cache files.
|
414 |
+
*
|
415 |
+
* Optionally, another path can be appended.
|
416 |
+
*
|
417 |
+
* @since 4.7.3
|
418 |
+
* @see trailingslashit()
|
419 |
+
* @see get_temp_dir()
|
420 |
+
* @param string|null $path If specified, will be appended to the resulting path.
|
421 |
+
* @return string A path to the temporary directory, or a file in it. If the primer, it will have a trailing slash.
|
422 |
+
*/
|
423 |
+
public function get_tmp_dir( $path = null ) {
|
424 |
+
if ( is_null( $this->_temp_dir ) )
|
425 |
+
$this->_temp_dir = trailingslashit( get_temp_dir() ) . 'remote-image-cache';
|
426 |
+
|
427 |
+
$temp_dir = apply_filters( 'wprss_image_cache_temp_dir', $this->_temp_dir );
|
428 |
+
return ( is_null( $path ) )
|
429 |
+
? $temp_dir
|
430 |
+
: trailingslashit( $temp_dir ) . $path;
|
431 |
+
}
|
432 |
+
|
433 |
+
|
434 |
+
/**
|
435 |
+
* Downloads a resource identified by the parameters.
|
436 |
+
*
|
437 |
+
* If only the first parameter is passed, and it is an instance of a cache
|
438 |
+
* file, downloads the resource described by it.
|
439 |
+
* If it is a URL, the request timeout and target path will be computed by this instance.
|
440 |
+
* Otherwise, they will be overridden by the specified values, respectively.
|
441 |
+
*
|
442 |
+
* If the 'content-md5' header is present in the responce, MD5 checksum
|
443 |
+
* verification will take place.
|
444 |
+
*
|
445 |
+
* @since 4.7.3
|
446 |
+
* @see get_download_request_timeout()
|
447 |
+
* @see WPRSS_Image_Cache_Image::get_download_request_timeout()
|
448 |
+
* @see get_unique_filename()
|
449 |
+
* @see WPRSS_Image_Cache_Image::get_current_path()
|
450 |
+
* @see get_tmp_dir()
|
451 |
+
* @see wp_mkdir_p()
|
452 |
+
* @see wp_safe_remote_get()
|
453 |
+
* @see verify_file_md5()
|
454 |
+
* @param WPRSS_Image_Cache_Image|string $image An instance of a cache file, or the URL to download.
|
455 |
+
* @param int|null $request_timeout The timeout for the download request.
|
456 |
+
* @param string|null $target_path The relative path to the target file.
|
457 |
+
* @return string| The absolute local path to the downloaded file,
|
458 |
+
* or false if checksum verification failed.
|
459 |
+
* @throws Exception If the URL is invalid, or the destination path is not writable,
|
460 |
+
* or the file download library cannot be read, or any other error happens during download.
|
461 |
+
*/
|
462 |
+
public function download_image( $image, $request_timeout = null, $target_path = null ) {
|
463 |
+
if ( $image instanceof WPRSS_Image_Cache_Image ) {
|
464 |
+
$url = $image->get_url();
|
465 |
+
$timeout = $image->get_download_request_timeout();
|
466 |
+
$path = $image->get_current_path();
|
467 |
+
}
|
468 |
+
else {
|
469 |
+
$url = $image;
|
470 |
+
$timeout = $this->get_download_request_timeout();
|
471 |
+
$path = $this->get_unique_filename( $url );
|
472 |
+
}
|
473 |
+
|
474 |
+
if ( !$url )
|
475 |
+
throw new Exception( sprintf( __( 'Invalid URL provided: "%1$s"' ), $url ) );
|
476 |
+
|
477 |
+
if ( !is_null( $target_path ) )
|
478 |
+
$path = $target_path;
|
479 |
+
|
480 |
+
if ( is_null( $request_timeout ) )
|
481 |
+
$timeout = $request_timeout;
|
482 |
+
|
483 |
+
// Absolute path to the cache file
|
484 |
+
$tmpfname = $image instanceof WPRSS_Image_Cache_Image
|
485 |
+
? $image->get_tmp_dir( $path )
|
486 |
+
: $this->get_tmp_dir( $path );
|
487 |
+
|
488 |
+
//WARNING: The file is not automatically deleted, The script must unlink() the file.
|
489 |
+
$dirname = dirname( $tmpfname );
|
490 |
+
if ( !wp_mkdir_p( $dirname ) )
|
491 |
+
throw new Exception( sprintf( __( 'Could not create directory: "%1$s". Filename: "%2$s"' ), $dirname, $tmpfname ) );
|
492 |
+
|
493 |
+
|
494 |
+
// Getting file download lib
|
495 |
+
$file_lib_path = ABSPATH . 'wp-admin/includes/file.php';
|
496 |
+
if ( !is_readable( $file_lib_path ) )
|
497 |
+
throw new Exception( sprintf( __( 'The file library cannot be read from %1$s' ), $file_lib_path ) );
|
498 |
+
|
499 |
+
require_once( $file_lib_path );
|
500 |
+
|
501 |
+
// Retrieving the remote resource
|
502 |
+
$response = wp_safe_remote_get( $url, array( 'timeout' => $timeout, 'stream' => true, 'filename' => $tmpfname ) );
|
503 |
+
|
504 |
+
// Could not retrieve
|
505 |
+
if ( is_wp_error( $response ) ) {
|
506 |
+
@unlink( $tmpfname );
|
507 |
+
throw new Exception( $response->get_error_message() );
|
508 |
+
}
|
509 |
+
|
510 |
+
// Retrieved, but remote server served error instead of resource
|
511 |
+
if ( 200 != wp_remote_retrieve_response_code( $response ) ){
|
512 |
+
@unlink( $tmpfname );
|
513 |
+
throw new Exception( trim( wp_remote_retrieve_response_message( $response ) ) );
|
514 |
+
}
|
515 |
+
|
516 |
+
// Checksum verification
|
517 |
+
$content_md5 = wp_remote_retrieve_header( $response, 'content-md5' );
|
518 |
+
if ( $content_md5 ) {
|
519 |
+
$md5_check = verify_file_md5( $tmpfname, $content_md5 );
|
520 |
+
if ( is_wp_error( $md5_check ) ) {
|
521 |
+
unlink( $tmpfname );
|
522 |
+
return $md5_check;
|
523 |
+
}
|
524 |
+
}
|
525 |
+
|
526 |
+
return $tmpfname;
|
527 |
+
}
|
528 |
+
|
529 |
+
|
530 |
+
/**
|
531 |
+
* Uses one of the registered hashing functions to hash the given value.
|
532 |
+
*
|
533 |
+
* The default functions that will be tried are {@see sha1()} and {@see md5()}
|
534 |
+
* in that order. More can be added using the `wprss_image_cache_hash_functions`
|
535 |
+
* filter.
|
536 |
+
*
|
537 |
+
* @since 4.7.3
|
538 |
+
* @param mixed $value The value to hash.
|
539 |
+
* @param null|mixed $default The value to return if none of the registered caching functions exist.
|
540 |
+
* @return string The hash string.
|
541 |
+
*/
|
542 |
+
public function hash( $value, $default = null ) {
|
543 |
+
$hash_funcs = apply_filters( 'wprss_image_cache_hash_functions', array( 'sha1', 'md5' ) );
|
544 |
+
foreach ( $hash_funcs as $_idx => $_func )
|
545 |
+
if ( is_callable( $_func ) )
|
546 |
+
return call_user_func_array ( $_func, array( $url_filename ) );
|
547 |
+
|
548 |
+
return $default;
|
549 |
+
}
|
550 |
+
|
551 |
+
|
552 |
+
/**
|
553 |
+
* Get a local relative path to for a remote resource, based on it's URL.
|
554 |
+
*
|
555 |
+
* @since 4.7.3
|
556 |
+
* @see generate_unique_file_name()
|
557 |
+
* @param WPRSS_Image_Cache_Image|string $url An instance of a cache file, or a URL of a resource.
|
558 |
+
* @return string|null A relative path to a cache file. If URL is empty, null is returned.
|
559 |
+
*/
|
560 |
+
public function get_unique_filename( $url ) {
|
561 |
+
if ( $url instanceof WPRSS_Image_Cache_Image )
|
562 |
+
$url = $url->get_url();
|
563 |
+
|
564 |
+
return $this->generate_unique_file_name( $url );
|
565 |
+
}
|
566 |
+
|
567 |
+
|
568 |
+
/**
|
569 |
+
* Get a local relative path to for a remote URL.
|
570 |
+
*
|
571 |
+
* If the resource is identified by a URL with a relative protocol,
|
572 |
+
* the protocol will be completely ignored.
|
573 |
+
*
|
574 |
+
* @since 4.7.3
|
575 |
+
* @param string $url A remote resource URL.
|
576 |
+
* @return string A local relative path to the file for the remote resource.
|
577 |
+
* The path may contain several folders, and will be of format:
|
578 |
+
* [domain inc. subdomain][path to resource][resource name without extension]-[hash of the whole URL][optionally the extension]
|
579 |
+
*/
|
580 |
+
public function generate_unique_file_name( $url ) {
|
581 |
+
if ( !strlen( $url ) )
|
582 |
+
return null;
|
583 |
+
|
584 |
+
// In case the URL is specified with a relative protocol
|
585 |
+
$url = ltrim( $url, '/' );
|
586 |
+
|
587 |
+
// Extract filename from url for title (ignoring query string)
|
588 |
+
// One of more character that is not a '?', followed by an image extension
|
589 |
+
preg_match( '/[^\?]+\.(jpg|JPG|jpeg|JPEG|jpe|JPE|gif|GIF|png|PNG)/', $url, $ext_matches );
|
590 |
+
$extension = isset( $ext_matches[1] ) ? $ext_matches[1] : null;
|
591 |
+
$url_filename = basename( urldecode( $ext_matches[0] ) );
|
592 |
+
|
593 |
+
// Get the path to the image, without the domain. ex. /news/132456/image
|
594 |
+
$path_matches = array();
|
595 |
+
if ( !preg_match_all( '![^:]+://([^/]+)/([^\?]+)!', $url, $path_matches ) )
|
596 |
+
return null;
|
597 |
+
|
598 |
+
$path = isset( $path_matches[2][0] ) ? $path_matches[2][0] : null;
|
599 |
+
$domain = isset( $path_matches[1][0] ) ? $path_matches[1][0] : null;
|
600 |
+
|
601 |
+
$unique_filename = str_replace( '/', '-', $path );
|
602 |
+
|
603 |
+
$base_filename = $extension
|
604 |
+
? basename( $url_filename, '.' . $extension )
|
605 |
+
: $url_filename;
|
606 |
+
|
607 |
+
if ( $hash = self::hash( $url ) )
|
608 |
+
$base_filename = $base_filename . '-' .$hash;
|
609 |
+
|
610 |
+
if ( !is_null( $extension ) )
|
611 |
+
$base_filename .= '.' . $extension;
|
612 |
+
|
613 |
+
$path = trailingslashit( substr( $path, 0, strlen( $path ) - strlen( $url_filename ) ) );
|
614 |
+
$path = trailingslashit( $domain ) . $path;
|
615 |
+
$unique_filename = $path . $base_filename;
|
616 |
+
|
617 |
+
return $unique_filename;
|
618 |
+
}
|
619 |
}
|
620 |
|
621 |
|
623 |
* @since 4.6.10
|
624 |
*/
|
625 |
class WPRSS_Image_Cache_Image {
|
626 |
+
|
627 |
protected $_url;
|
628 |
+
protected $_path;
|
629 |
+
protected $_tmp_path;
|
630 |
+
protected $_tmp_dir;
|
631 |
protected $_local_path;
|
632 |
protected $_unique_name;
|
633 |
protected $_size;
|
634 |
protected $_download_request_timeout;
|
635 |
protected $_is_attempted;
|
636 |
protected $_is_fall_back_to_unsecure;
|
637 |
+
protected $_ttl;
|
638 |
+
protected $_cache;
|
639 |
+
protected $_is_cached;
|
640 |
+
|
641 |
+
|
642 |
/**
|
643 |
* @since 4.6.10
|
644 |
* @param string|null $data
|
645 |
*/
|
646 |
public function __construct( $data = null ) {
|
647 |
$this->reset();
|
648 |
+
|
649 |
if ( is_string( $data ) && !empty( $data ) )
|
650 |
$this->_set_url( $data );
|
651 |
}
|
652 |
+
|
653 |
+
|
654 |
/**
|
655 |
+
* Brings all properties of this instance to their original values,
|
656 |
+
* making it re-usable.
|
657 |
+
*
|
658 |
* @since 4.6.10
|
659 |
* @return \WPRSS_Image_Cache_Image This instance.
|
660 |
*/
|
661 |
public function reset() {
|
662 |
$this->_url = null;
|
663 |
+
$this->_path = null;
|
664 |
+
$this->_tmp_path = null;
|
665 |
+
$this->_tmp_dir = null;
|
666 |
$this->_local_path = null;
|
667 |
$this->_unique_name = null;
|
668 |
$this->_size = null;
|
669 |
$this->_download_request_timeout = 300;
|
670 |
$this->_is_attempted = false;
|
671 |
$this->_is_fall_back_to_unsecure = true;
|
672 |
+
$this->_ttl;
|
673 |
+
$this->_cache = null;
|
674 |
+
$this->_is_cached = null;
|
675 |
+
|
676 |
return $this;
|
677 |
}
|
678 |
+
|
679 |
+
|
680 |
/**
|
681 |
* @since 4.6.10
|
682 |
* @param string $url
|
686 |
$this->_url = $url;
|
687 |
return $this;
|
688 |
}
|
689 |
+
|
690 |
+
|
691 |
/**
|
692 |
+
* Sets the URL of the remote resource, which this instance represents
|
693 |
+
* the cache of.
|
694 |
+
*
|
695 |
* @since 4.6.10
|
696 |
* @param string $url
|
697 |
* @return \WPRSS_Image_Cache_Image This instance.
|
699 |
public function set_url( $url ) {
|
700 |
$this->reset();
|
701 |
$this->_set_url($url);
|
702 |
+
|
703 |
return $this;
|
704 |
}
|
705 |
+
|
706 |
+
|
707 |
/**
|
708 |
+
* Retrieves the URL of the remove resource, which this instance represents
|
709 |
+
* the cache of.
|
710 |
+
*
|
711 |
* @since 4.6.10
|
712 |
+
* @return string The URL.
|
713 |
*/
|
714 |
public function get_url() {
|
715 |
return $this->_url;
|
716 |
}
|
717 |
+
|
718 |
+
|
719 |
/**
|
720 |
+
* Whether or not this instance has a URL assigned.
|
721 |
+
*
|
722 |
* @since 4.6.10
|
723 |
+
* @return boolean True if this instance has a URL assigned; false otherwise.
|
724 |
*/
|
725 |
public function has_url() {
|
726 |
return isset( $this->_url );
|
727 |
}
|
728 |
+
|
729 |
+
|
730 |
+
public function set_path( $path ) {
|
731 |
+
$this->_set_path( $path );
|
732 |
+
return $this;
|
733 |
+
}
|
734 |
+
|
735 |
+
|
736 |
/**
|
737 |
* @since 4.6.10
|
738 |
* @param string $path
|
739 |
* @return \WPRSS_Image_Cache_Image This instance.
|
740 |
*/
|
741 |
+
protected function _set_path( $path ) {
|
742 |
+
$this->_path = $path;
|
743 |
return $this;
|
744 |
}
|
745 |
+
|
746 |
+
|
747 |
/**
|
748 |
+
* Get the path to the cache file.
|
749 |
+
*
|
750 |
+
* The path is relative to the root of the cache directory.
|
751 |
+
* It will only be set if the cache file is not expired, or has been
|
752 |
+
* successfully downloaded.
|
753 |
+
*
|
754 |
* @since 4.6.10
|
755 |
+
* @return string Relative path to the cache file.
|
756 |
*/
|
757 |
+
public function get_path() {
|
758 |
+
return $this->_path;
|
759 |
}
|
760 |
+
|
761 |
+
|
762 |
/**
|
763 |
+
* Whether or not this instance has a local path assigned.
|
764 |
+
*
|
765 |
+
* @see get_path().
|
766 |
* @since 4.6.10
|
767 |
* @return boolean
|
768 |
*/
|
769 |
+
public function has_path() {
|
770 |
+
return isset( $this->_path );
|
771 |
+
}
|
772 |
+
|
773 |
+
|
774 |
+
/**
|
775 |
+
* Get the local absolute path to the cache file.
|
776 |
+
*
|
777 |
+
* If local path has not yet been set, e.g. before the download of an
|
778 |
+
* expired file, this will return the absolute path to where the file
|
779 |
+
* would be after download.
|
780 |
+
*
|
781 |
+
* If the file is retrieved from cache, no local path is set explicitly,
|
782 |
+
* but this method will retrieve it's location regardless.
|
783 |
+
*
|
784 |
+
* @see get_current_path()
|
785 |
+
* @see get_tmp_dir()
|
786 |
+
* @see has_local_path()
|
787 |
+
* @since 4.7.3
|
788 |
+
* @return string Absolute path to the cache file.
|
789 |
+
*/
|
790 |
+
public function get_local_path() {
|
791 |
+
if ( !is_null( $this->_local_path ) )
|
792 |
+
return $this->_local_path;
|
793 |
+
|
794 |
+
return $this->get_tmp_dir( $this->get_current_path() );
|
795 |
+
}
|
796 |
+
|
797 |
+
|
798 |
+
/**
|
799 |
+
* @since 4.7.3
|
800 |
+
* @param string $path The absolute path to the cache file.
|
801 |
+
* @return \WPRSS_Image_Cache_Image This instance.
|
802 |
+
*/
|
803 |
+
protected function _set_local_path( $path ) {
|
804 |
+
$this->_local_path = $path;
|
805 |
+
return $this;
|
806 |
+
}
|
807 |
+
|
808 |
+
|
809 |
+
/**
|
810 |
+
* Whether or not the local path has been set.
|
811 |
+
*
|
812 |
+
* This usually happens after the successful download of an expired file.
|
813 |
+
*
|
814 |
+
* @see get_local_path()
|
815 |
+
* @since 4.7.3
|
816 |
+
* @return bool True if the local absolute path has been set; false otherwise.
|
817 |
+
*/
|
818 |
public function has_local_path() {
|
819 |
+
return !is_null( $this->_local_path );
|
820 |
}
|
821 |
+
|
822 |
+
|
823 |
/**
|
824 |
+
* Whether or not the file was retrieved from cache, if attempted to retrieve.
|
825 |
+
* Before retrieval attempt, indicates whether or not the file cache has expired.
|
826 |
+
*
|
827 |
+
* @see is_attempted()
|
828 |
+
* @see check_expired()
|
829 |
+
* @since 4.7.3
|
830 |
+
* @return bool True if file was retrieved or retrievable from cache; false otherwise.
|
831 |
+
*/
|
832 |
+
public function is_cached() {
|
833 |
+
return $this->is_attempted()
|
834 |
+
? $this->_is_cached()
|
835 |
+
: !$this->check_expired();
|
836 |
+
}
|
837 |
+
|
838 |
+
|
839 |
+
/**
|
840 |
+
*
|
841 |
+
* @since 4.7.3
|
842 |
+
* @param null|bool $is_cached If not null, will set whether or not the resource is cached.
|
843 |
+
* Otherwise, will retrieve that value
|
844 |
+
* @return \WPRSS_Image_Cache_Image|bool This instance, if setting, or the value if retrieving.
|
845 |
+
*/
|
846 |
+
protected function _is_cached( $is_cached = null ) {
|
847 |
+
if ( is_null( $is_cached ) )
|
848 |
+
return $this->_is_cached;
|
849 |
+
|
850 |
+
$this->_is_cached = (bool) $is_cached;
|
851 |
+
return $this;
|
852 |
+
}
|
853 |
+
|
854 |
+
|
855 |
+
/**
|
856 |
+
* Get an instance of this image's cache controller, if set.
|
857 |
+
* Otherwise, get the singleton instance of {@see WPRSS_Image_Cache}.
|
858 |
+
*
|
859 |
+
* @since 4.7.3
|
860 |
+
* @return WPRSS_Image_Cache The instance of this image's cache controller.
|
861 |
+
*/
|
862 |
+
public function get_cache() {
|
863 |
+
if ( is_null( $this->_cache ) )
|
864 |
+
return WPRSS_Image_Cache::instance();
|
865 |
+
|
866 |
+
return $this->_cache;
|
867 |
+
}
|
868 |
+
|
869 |
+
|
870 |
+
/**
|
871 |
+
* Set the temporary path to this image's file.
|
872 |
+
*
|
873 |
+
* @since 4.7.3
|
874 |
+
* @param string $path
|
875 |
+
* @return \WPRSS_Image_Cache_Image This instance.
|
876 |
+
*/
|
877 |
+
protected function _set_tmp_path( $path = null ) {
|
878 |
+
if ( is_null( $path ) )
|
879 |
+
$path = $this->get_tmp_path();
|
880 |
+
|
881 |
+
$this->_tmp_path = $path;
|
882 |
+
return $this;
|
883 |
+
}
|
884 |
+
|
885 |
+
|
886 |
+
/**
|
887 |
+
* Retrieve the temporary path to this image's file, which is used for
|
888 |
+
* working with it. This may not be the final path.
|
889 |
+
*
|
890 |
+
* @see get_unique_name()
|
891 |
+
* @since 4.7.3
|
892 |
+
* @return string The path.
|
893 |
+
*/
|
894 |
+
public function get_tmp_path() {
|
895 |
+
if ( !is_null( $this->_tmp_path ) )
|
896 |
+
return $this->_tmp_path;
|
897 |
+
|
898 |
+
return $this->get_unique_name();
|
899 |
+
}
|
900 |
+
|
901 |
+
|
902 |
+
/**
|
903 |
+
* The current path to the image's file.
|
904 |
+
* Used from outside the class for working with this image's file
|
905 |
+
* while it is not yet ready.
|
906 |
+
*
|
907 |
+
* @see get_path()
|
908 |
+
* @see get_tmp_path()
|
909 |
+
* @since 4.7.3
|
910 |
+
* @return string The path.
|
911 |
+
*/
|
912 |
+
public function get_current_path() {
|
913 |
+
return !is_null( $path = $this->get_path() )
|
914 |
+
? $path
|
915 |
+
: $this->get_tmp_path();
|
916 |
+
}
|
917 |
+
|
918 |
+
|
919 |
+
/**
|
920 |
+
* Sets the download request timeout.
|
921 |
+
*
|
922 |
+
* @see get_download_request_timeout()
|
923 |
* @since 4.6.10
|
924 |
* @param int $timeout
|
925 |
* @return \WPRSS_Image_Cache_Image This instance.
|
928 |
$this->_download_request_timeout = intval( $timeout );
|
929 |
return $this;
|
930 |
}
|
931 |
+
|
932 |
+
|
933 |
/**
|
934 |
+
* Gets the download request timeout.
|
935 |
+
*
|
936 |
+
* This is the maximal number of seconds, for which the request will
|
937 |
+
* wait before terminating with a timeout.
|
938 |
+
*
|
939 |
+
* @see set_download_request_timeout()
|
940 |
* @since 4.6.10
|
941 |
* @return int
|
942 |
*/
|
943 |
public function get_download_request_timeout() {
|
944 |
return $this->_download_request_timeout;
|
945 |
}
|
946 |
+
|
947 |
+
|
948 |
/**
|
949 |
* @since 4.6.10
|
950 |
* @param boolean|null $is_attempted
|
953 |
protected function _is_attempted( $is_attempted = null ) {
|
954 |
if ( is_null( $is_attempted ) )
|
955 |
return (bool)$this->_is_attempted;
|
956 |
+
|
957 |
$this->_is_attempted = (bool) $is_attempted;
|
958 |
return $this;
|
959 |
}
|
960 |
+
|
961 |
+
|
962 |
/**
|
963 |
+
* Whether or not the retrieval of the corresponding resource, e.g. file
|
964 |
+
* download, has been attempted.
|
965 |
+
*
|
966 |
+
* @see download()
|
967 |
* @since 4.6.10
|
968 |
+
* @return boolean True if retrieval of this resource was attempted; false otherwise.
|
969 |
*/
|
970 |
public function is_attempted() {
|
971 |
return $this->_is_attempted();
|
972 |
}
|
973 |
+
|
974 |
+
|
975 |
/**
|
976 |
+
* Gets or sets whether this instance should fall back to an unsecure connection,
|
977 |
+
* e.g. try the HTTP protocol, if retrieval of the resource over the secure protocol,
|
978 |
+
* e.g. HTTPS, fails.
|
979 |
+
*
|
980 |
+
* @see download()
|
981 |
* @since 4.6.10
|
982 |
* @param boolean|null $is_fall_back
|
983 |
* @return \WPRSS_Image_Cache_Image|boolean Whether will fall back to unsecure, or this instance.
|
985 |
public function is_fall_back_to_unsecure( $is_fall_back = null ) {
|
986 |
if ( is_null( $is_fall_back ) )
|
987 |
return (bool) $this->_is_fall_back_to_unsecure;
|
988 |
+
|
989 |
$this->_is_fall_back_to_unsecure = (bool) $is_fall_back;
|
990 |
return $this;
|
991 |
}
|
992 |
+
|
993 |
+
|
994 |
+
/**
|
995 |
+
* Retrieves the TTL (Time To Live) for the corresponding resource's cache.
|
996 |
+
*
|
997 |
+
* Falls back to the cache controller's value, if not set.
|
998 |
+
*
|
999 |
+
* @see WPRSS_Image_Cache::get_ttl()
|
1000 |
+
* @see get_ttl()
|
1001 |
+
* @since 4.7.3
|
1002 |
+
* @return int The amount of seconds, for which the cache file may be considered valid.
|
1003 |
+
*/
|
1004 |
+
public function get_ttl() {
|
1005 |
+
return !is_null( $this->_ttl )
|
1006 |
+
? $this->_ttl
|
1007 |
+
: $this->get_cache()->get_ttl();
|
1008 |
+
}
|
1009 |
+
|
1010 |
+
|
1011 |
+
/**
|
1012 |
+
* Sets the TTL (Time To Live) for the corresponding resource's cache.
|
1013 |
+
*
|
1014 |
+
* @see get_ttl()
|
1015 |
+
* @since 4.7.3
|
1016 |
+
* @param int $time The amount of seconds, for which the cache file should be considered valid.
|
1017 |
+
*/
|
1018 |
+
public function set_ttl( $time ) {
|
1019 |
+
$this->_ttl = $this->normalize_time( $time );
|
1020 |
+
}
|
1021 |
+
|
1022 |
+
|
1023 |
+
/**
|
1024 |
+
* Normalizes a time value.
|
1025 |
+
*
|
1026 |
+
* This is done by converting one of a variety of representations of time
|
1027 |
+
* into a Unix timestamp.
|
1028 |
+
*
|
1029 |
+
* @see WPRSS_Image_Cache::normalize_time()
|
1030 |
+
* @since 4.7.3
|
1031 |
+
* @param string|int $time A representation of a moment in time.
|
1032 |
+
* @return int A timestamp.
|
1033 |
+
*/
|
1034 |
+
public function normalize_time( $time ) {
|
1035 |
+
return $this->get_cache()->normalize_time( $time );
|
1036 |
+
}
|
1037 |
+
|
1038 |
+
|
1039 |
+
/**
|
1040 |
+
* Retrieves the path to the directory, where the cache file is or will be stored.
|
1041 |
+
*
|
1042 |
+
* If not set explicitly, falls back to the cache controller's path.
|
1043 |
+
* Optionally, can be appended with another path.
|
1044 |
+
*
|
1045 |
+
* @see WPRSS_Image_Cache::get_tmp_dir()
|
1046 |
+
* @since 4.7.3
|
1047 |
+
* @param null|string $path A path to append to the cache directory path.
|
1048 |
+
* @return string The path to the cache directory, optionally appended with the specified path.
|
1049 |
+
* It will not contain the trailing directory separator, but if appended with another path, the separator will be put in between them.
|
1050 |
+
*/
|
1051 |
+
public function get_tmp_dir( $path = null ) {
|
1052 |
+
if ( !is_null( $this->_tmp_dir ) )
|
1053 |
+
return is_null( $path )
|
1054 |
+
? $this->_tmp_dir
|
1055 |
+
: trailingslashit( $this->_tmp_dir ) . $path;
|
1056 |
+
|
1057 |
+
return $this->get_cache()->get_tmp_dir( $path );
|
1058 |
+
}
|
1059 |
+
|
1060 |
+
|
1061 |
/**
|
1062 |
+
* Retrieves the resource identified by this instance's URL.
|
1063 |
+
*
|
1064 |
+
* If the resource is cached, and the cache is not expired, the resource
|
1065 |
+
* will be retrieved from cache.
|
1066 |
+
*
|
1067 |
+
* @see download()
|
1068 |
+
* @since 4.7.3
|
1069 |
+
* @return string The path to the resource's cache file.
|
1070 |
+
*/
|
1071 |
+
public function retrieve() {
|
1072 |
+
// Prepare image
|
1073 |
+
$this->_is_attempted( true )
|
1074 |
+
->_set_path( null )
|
1075 |
+
->_set_local_path( null );
|
1076 |
+
$relative_path = $this->get_current_path();
|
1077 |
+
|
1078 |
+
// Cache still valid
|
1079 |
+
if ( !$this->check_expired() ) {
|
1080 |
+
$this->_set_path ( $relative_path )
|
1081 |
+
->_is_cached( true );
|
1082 |
+
return $this->get_local_path();
|
1083 |
+
}
|
1084 |
+
|
1085 |
+
$local_path = $this->_retrieve();
|
1086 |
+
$this->_set_path( $relative_path );
|
1087 |
+
$this->_set_local_path( $local_path );
|
1088 |
+
$this->_is_cached( false );
|
1089 |
+
|
1090 |
+
return $this->get_local_path();
|
1091 |
+
}
|
1092 |
+
|
1093 |
+
|
1094 |
+
/**
|
1095 |
+
* An internal method that does just the actual retrieval of the resource.
|
1096 |
+
*
|
1097 |
+
* @since 4.7.3
|
1098 |
+
* @return string The absolute local path to the retrieved file.
|
1099 |
+
* @throws Exception If the file cannot be retrieved, due to read or write errors of some kind.
|
1100 |
+
*/
|
1101 |
+
protected function _retrieve() {
|
1102 |
+
return $this->download();
|
1103 |
+
}
|
1104 |
+
|
1105 |
+
|
1106 |
+
/**
|
1107 |
+
* Downloads a file.
|
1108 |
+
*
|
1109 |
+
* @see get_url()
|
1110 |
+
* @see get_local_path()
|
1111 |
* @since 4.6.10
|
1112 |
+
* @param string|null $url The URL of the file to download. If null, the URL used is that of this instance.
|
1113 |
+
* @return string The absolute local path to the downloaded file.
|
1114 |
* @throws Exception If no URL is set, or the resource is unreadable, or something went wrong.
|
1115 |
*/
|
1116 |
+
public function download( $url = null ) {
|
1117 |
+
if ( !is_null( $url ) )
|
1118 |
+
$this->set_url( $url );
|
1119 |
+
|
1120 |
+
// Downloading the file
|
1121 |
+
$tmp_path = $this->_download();
|
1122 |
+
|
1123 |
+
return $tmp_path;
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1124 |
}
|
1125 |
+
|
1126 |
+
|
1127 |
/**
|
1128 |
* @since 4.6.10
|
1129 |
* @param string $url
|
1130 |
* @param int $timeout
|
1131 |
+
* @return string The local path to the downloaded image, if successful; an error instance if download failed.
|
1132 |
*/
|
1133 |
+
protected function _download() {
|
1134 |
+
$cache = $this->get_cache();
|
1135 |
+
|
1136 |
+
try {
|
1137 |
+
$tmp_path = $cache->download_image( $this );
|
1138 |
+
} catch ( Exception $e ) {
|
1139 |
$https = 'https';
|
1140 |
+
$url = $this->get_url();
|
1141 |
+
// Should we try unsecure protocol?
|
1142 |
if ( $this->is_fall_back_to_unsecure() && (stripos( $url, $https ) === 0) ) {
|
1143 |
+
$orig_url = $url;
|
1144 |
$url = 'http' . substr( $url, strlen( $https ) );
|
1145 |
+
$this->set_url( $url );
|
1146 |
+
$tmp_path = $cache->download_image( $this );
|
1147 |
+
$this->set_url( $orig_url );
|
1148 |
}
|
1149 |
+
else throw $e;
|
1150 |
}
|
1151 |
+
|
1152 |
return $tmp_path;
|
1153 |
}
|
1154 |
+
|
1155 |
+
|
1156 |
+
/**
|
1157 |
+
* Retrieves the time, at which the cache file was last modified.
|
1158 |
+
*
|
1159 |
+
* @since 4.7.3
|
1160 |
+
* @return int|null The timestamp that represents the time when the cache file was last modified on success;
|
1161 |
+
* null if timestamp could not be retrieved.
|
1162 |
+
*/
|
1163 |
+
public function get_modification_time() {
|
1164 |
+
return $this->get_cache()->get_image_modification_time( $this );
|
1165 |
+
}
|
1166 |
+
|
1167 |
+
|
1168 |
+
/**
|
1169 |
+
* Checks whether or not the cache file exists.
|
1170 |
+
*
|
1171 |
+
* @since 4.7.3
|
1172 |
+
* @return bool True if the cache file exists; false otherwise.
|
1173 |
+
*/
|
1174 |
+
public function check_exists() {
|
1175 |
+
return $this->get_cache()->check_file_exists( $this );
|
1176 |
+
}
|
1177 |
+
|
1178 |
+
|
1179 |
+
/**
|
1180 |
+
* Checks whether or not the cache file has expired.
|
1181 |
+
*
|
1182 |
+
* @see get_ttl()
|
1183 |
+
* @see WPRSS_Image_Cache::check_image_expired()
|
1184 |
+
* @since 4.7.3
|
1185 |
+
* @return bool True if the cache file has expired; false otherwise.
|
1186 |
+
*/
|
1187 |
+
public function check_expired() {
|
1188 |
+
return $this->get_cache()->check_image_expired( $this );
|
1189 |
+
}
|
1190 |
+
|
1191 |
+
|
1192 |
+
/**
|
1193 |
+
* Get the time, at which the cache file of this instance will expire.
|
1194 |
+
*
|
1195 |
+
* @since 4.7.3
|
1196 |
+
* @see WPRSS_Image_Cache::get_expiration_time()
|
1197 |
+
* @return int Unix timestamp representing the time when the cache file of this instance will expire.
|
1198 |
+
* If file doesn't exist, or it's modification date cannot be retrieved, will return 0.
|
1199 |
+
*/
|
1200 |
+
public function get_expiration_time() {
|
1201 |
+
return $this->get_cache()->get_expiration_time( $this );
|
1202 |
+
}
|
1203 |
+
|
1204 |
+
|
1205 |
/**
|
1206 |
+
* Deletes the cache file of this instance.
|
1207 |
+
*
|
1208 |
* @since 4.6.10
|
1209 |
* @return \WPRSS_Image_Cache_Image This instance.
|
1210 |
*/
|
1211 |
public function delete() {
|
1212 |
+
if ( $path = $this->get_path() )
|
1213 |
+
if ( file_exists( $path ) )
|
1214 |
+
return @unlink( $path );
|
1215 |
+
|
1216 |
+
return false;
|
|
|
|
|
1217 |
}
|
1218 |
+
|
1219 |
+
|
1220 |
/**
|
1221 |
+
* Generates and stores for subsequent use a filename, which is unique for this instance's URL.
|
1222 |
+
*
|
1223 |
+
* This file name is relative to the base directory of cache.
|
1224 |
+
*
|
1225 |
+
* @see get_tmp_dir().
|
1226 |
* @since 4.6.10
|
1227 |
+
* @return string A unique name for a local cache file, based on the URL of the resource.
|
1228 |
*/
|
1229 |
public function get_unique_name() {
|
1230 |
+
if( !isset($this->_unique_name) )
|
1231 |
+
$this->_set_unique_name( $this->get_cache()->get_unique_filename( $this ) );
|
1232 |
+
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1233 |
return $this->_unique_name;
|
1234 |
}
|
1235 |
|
1236 |
+
|
1237 |
/**
|
1238 |
* @since 4.6.10
|
1239 |
+
* @param string $name The relative filename to be used for this instance's cache file.
|
1240 |
* @return \WPRSS_Image_Cache_Image This instance.
|
1241 |
*/
|
1242 |
protected function _set_unique_name( $name ) {
|
1243 |
$this->_unique_name = $name;
|
1244 |
return $this;
|
1245 |
}
|
1246 |
+
|
1247 |
+
|
1248 |
/**
|
1249 |
+
* Get the size of the image, which is locally cached.
|
1250 |
+
*
|
1251 |
* @since 4.6.10
|
1252 |
* @return array A numeric array, where index 0 holds image width, and index 1 holds image height.
|
1253 |
* @throws Exception If image file is unreadable.
|
1255 |
public function get_size() {
|
1256 |
if ( !isset( $this->_size ) ) {
|
1257 |
$error_caption = 'Could not get image size';
|
|
|
1258 |
$path = $this->get_local_path();
|
1259 |
+
if ( !$this->is_readable() ) throw new Exception( sprintf( '%1$s: image file is not readable', $path ) );
|
1260 |
+
|
1261 |
// Trying simplest way
|
1262 |
if ( $size = getimagesize( $path ) )
|
1263 |
$this->_size = array( 0 => $size[0], 1 => $size[1] );
|
1264 |
+
|
1265 |
wprss_log( sprintf( 'Tried `getimagesize()`: %1$s', empty($this->_size) ? 'failure' : 'success' ), __METHOD__, WPRSS_LOG_LEVEL_SYSTEM );
|
1266 |
+
|
1267 |
if( !$this->_size && function_exists( 'gd_info' ) ) {
|
1268 |
$image = file_get_contents( $path );
|
1269 |
$image = imagecreatefromstring( $image );
|
1273 |
wprss_log( sprintf( 'Tried GD: %1$s', empty($this->_size) ? 'failure' : 'success' ), __METHOD__, WPRSS_LOG_LEVEL_SYSTEM );
|
1274 |
}
|
1275 |
}
|
1276 |
+
|
1277 |
return $this->_size;
|
1278 |
}
|
1279 |
+
|
1280 |
+
|
1281 |
/**
|
1282 |
* @since 4.6.10
|
1283 |
* @return boolean
|
1284 |
*/
|
1285 |
public function is_readable() {
|
1286 |
+
$path = $this->get_local_path();
|
1287 |
+
if ( !$path ) return false;
|
1288 |
+
return is_readable( $path );
|
1289 |
}
|
1290 |
+
}
|
languages/wprss-ru_RU.mo
ADDED
Binary file
|
languages/wprss-ru_RU.po
ADDED
@@ -0,0 +1,2155 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
1 |
+
msgid ""
|
2 |
+
msgstr ""
|
3 |
+
"Project-Id-Version: wprss\n"
|
4 |
+
"POT-Creation-Date: 2015-07-14 18:58+0100\n"
|
5 |
+
"PO-Revision-Date: 2015-07-14 19:08+0100\n"
|
6 |
+
"Last-Translator: Yuriy Koverenko <j.koverenko@gmail.com>\n"
|
7 |
+
"Language-Team: \n"
|
8 |
+
"Language: ru\n"
|
9 |
+
"MIME-Version: 1.0\n"
|
10 |
+
"Content-Type: text/plain; charset=UTF-8\n"
|
11 |
+
"Content-Transfer-Encoding: 8bit\n"
|
12 |
+
"X-Generator: Poedit 1.6.4\n"
|
13 |
+
"X-Poedit-KeywordsList: _;__;_e\n"
|
14 |
+
"X-Poedit-Basepath: ../\n"
|
15 |
+
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n"
|
16 |
+
"%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n"
|
17 |
+
"X-Poedit-SearchPath-0: .\n"
|
18 |
+
|
19 |
+
#: includes/OPML.php:42
|
20 |
+
#, fuzzy
|
21 |
+
msgid ""
|
22 |
+
"An error occurred: The file might not be a valid OPML file or is corrupt. "
|
23 |
+
msgstr "Ошибка: файл поврежден или не является рабочим файлом OPML. "
|
24 |
+
|
25 |
+
#: includes/admin-addons.php:13
|
26 |
+
msgid "Excerpts & Thumbnails"
|
27 |
+
msgstr "Отрывки и Эскизы"
|
28 |
+
|
29 |
+
#: includes/admin-addons.php:14
|
30 |
+
msgid ""
|
31 |
+
"Adds the ability to display thumbnails and excerpts. Perfect for adding some "
|
32 |
+
"life and color to your feed item display. For more flexibility Feed to Post "
|
33 |
+
"is a better option."
|
34 |
+
msgstr ""
|
35 |
+
"Добавляет возможность отображения эскизов и отрывков. Идеально подходит для "
|
36 |
+
"добавления ярких красок в вашу ленту. Для большей гибкости лучше "
|
37 |
+
"использовать Импорт ленты в записи."
|
38 |
+
|
39 |
+
#: includes/admin-addons.php:20 includes/admin-welcome.php:105
|
40 |
+
msgid "Categories"
|
41 |
+
msgstr "Категории"
|
42 |
+
|
43 |
+
#: includes/admin-addons.php:21
|
44 |
+
msgid ""
|
45 |
+
"Assign categories to your feed sources. Then display a particular category "
|
46 |
+
"or multiple categories on a post or page via shortcodes."
|
47 |
+
msgstr ""
|
48 |
+
"Привяжите категории к вашим источникам лент. Затем отобразите одну или "
|
49 |
+
"несколько категорий в записи или на странице с помощью шорткодов."
|
50 |
+
|
51 |
+
#: includes/admin-addons.php:27 includes/admin-welcome.php:106
|
52 |
+
msgid "Keyword Filtering"
|
53 |
+
msgstr "Фильтр ключевых слов"
|
54 |
+
|
55 |
+
#: includes/admin-addons.php:28
|
56 |
+
msgid ""
|
57 |
+
"Import feeds that contain specific keywords in either the title or their "
|
58 |
+
"content. Control what gets imported to your blog. You can use keywords, "
|
59 |
+
"keyphrases and categories."
|
60 |
+
msgstr ""
|
61 |
+
"Импортируйте только те ленты, которые содержат определенные ключевые слова в "
|
62 |
+
"названии или содержимом. Контролируйте, что именно будет импортироваться в "
|
63 |
+
"ваш блог. Вы можете использовать ключевые слова, ключевые фразы и категории."
|
64 |
+
|
65 |
+
#: includes/admin-addons.php:34 includes/admin-welcome.php:103
|
66 |
+
msgid "Feed to Post"
|
67 |
+
msgstr "Импорт ленты в записи"
|
68 |
+
|
69 |
+
#: includes/admin-addons.php:35
|
70 |
+
msgid ""
|
71 |
+
"Allows you to import feed items into posts or any other custom post type "
|
72 |
+
"that you have created. Takes WP RSS Aggregator to a whole new level of "
|
73 |
+
"flexibility."
|
74 |
+
msgstr ""
|
75 |
+
"Позволяет импортировать содержимое ленты в записи или любой другой тип "
|
76 |
+
"постов, созданный вами. Подымает WP RSS Aggregator на совершенно новый "
|
77 |
+
"уровень гибкости."
|
78 |
+
|
79 |
+
#: includes/admin-addons.php:41 includes/admin-welcome.php:107
|
80 |
+
msgid "Full Text RSS Feeds"
|
81 |
+
msgstr "Полнотекстовые RSS-каналы"
|
82 |
+
|
83 |
+
#: includes/admin-addons.php:42
|
84 |
+
msgid ""
|
85 |
+
"This add-ons provides the connectivity to our Full Text Premium service, "
|
86 |
+
"which gives you unlimited feed items returned per feed source."
|
87 |
+
msgstr ""
|
88 |
+
"Это дополнение обеспечивает подключение к нашему полнотекстовому премиум-"
|
89 |
+
"сервису, который позволит вам получить неограниченное количество пунктов "
|
90 |
+
"лент для источника ленты."
|
91 |
+
|
92 |
+
#: includes/admin-addons.php:48 includes/admin-welcome.php:108
|
93 |
+
msgid "WordAi"
|
94 |
+
msgstr "WordAi"
|
95 |
+
|
96 |
+
#: includes/admin-addons.php:49
|
97 |
+
msgid ""
|
98 |
+
"Allows you to spin the content for posts imported by Feed to Post using "
|
99 |
+
"WordAi. Cleverly rewrite your posts without changing their meaning and "
|
100 |
+
"maintaining human readability."
|
101 |
+
msgstr ""
|
102 |
+
"Позволяет вам видоизменять содержимое записей, которые импортируются с "
|
103 |
+
"помощью Импорта ленты в записи. Переписывает ваши записи, не изменяя их "
|
104 |
+
"смысл и сохраняя удобочитаемость."
|
105 |
+
|
106 |
+
#: includes/admin-addons.php:59 includes/admin.php:43
|
107 |
+
msgid "Add-Ons"
|
108 |
+
msgstr "Дополнения"
|
109 |
+
|
110 |
+
#: includes/admin-addons.php:60
|
111 |
+
msgid ""
|
112 |
+
"The following Add-ons are available to increase the functionality of the WP "
|
113 |
+
"RSS Aggregator plugin."
|
114 |
+
msgstr ""
|
115 |
+
"С помощью дополнений можно расширить функциональность плагина WP RSS "
|
116 |
+
"Aggregator."
|
117 |
+
|
118 |
+
#: includes/admin-addons.php:61
|
119 |
+
msgid ""
|
120 |
+
"Each Add-on can be installed as a separate plugin. Note that activating the "
|
121 |
+
"Feed to Post plugin will deactivate the Categories and Excerpts & Thumbnails "
|
122 |
+
"add-ons."
|
123 |
+
msgstr ""
|
124 |
+
"Каждое дополнение устанавливается как отдельный плагин. Обратите внимание, "
|
125 |
+
"что активация плагина \"Импорт ленты в записи\" отключает плагины \"Категории"
|
126 |
+
"\" и \"Отрывки и эскизы\"."
|
127 |
+
|
128 |
+
#: includes/admin-addons.php:77
|
129 |
+
msgid "Installed"
|
130 |
+
msgstr "Установлено"
|
131 |
+
|
132 |
+
#: includes/admin-addons.php:79
|
133 |
+
msgid "Purchase & Install"
|
134 |
+
msgstr "Купить и установить"
|
135 |
+
|
136 |
+
#: includes/admin-ajax-notice.php:34
|
137 |
+
msgid ""
|
138 |
+
"Did you know that you can get more RSS features? Excerpts, thumbnails, "
|
139 |
+
"keyword filtering, importing into posts and more... "
|
140 |
+
msgstr ""
|
141 |
+
"Знаете ли вы, что можно получить больше возможностей RSS? Отрывки, эскизы, "
|
142 |
+
"фильтр ключевых слов, импорт в записи и много другого..."
|
143 |
+
|
144 |
+
#: includes/admin-ajax-notice.php:35
|
145 |
+
msgid "Check out the"
|
146 |
+
msgstr "Проверьте"
|
147 |
+
|
148 |
+
#: includes/admin-ajax-notice.php:35
|
149 |
+
msgid "extensions"
|
150 |
+
msgstr "расширения"
|
151 |
+
|
152 |
+
#: includes/admin-ajax-notice.php:35
|
153 |
+
msgid "page."
|
154 |
+
msgstr "страница."
|
155 |
+
|
156 |
+
#: includes/admin-ajax-notice.php:36 includes/licensing.php:336
|
157 |
+
msgid "Dismiss this notification"
|
158 |
+
msgstr "Игнорировать это уведомление"
|
159 |
+
|
160 |
+
#: includes/admin-dashboard.php:25 includes/admin-dashboard.php:26
|
161 |
+
msgid "Welcome to WP RSS Aggregator"
|
162 |
+
msgstr "Добро пожаловать в WP RSS Aggregator!"
|
163 |
+
|
164 |
+
#: includes/admin-debugging.php:103
|
165 |
+
msgid "Update All Feeds Now"
|
166 |
+
msgstr "Обновить все ленты сейчас"
|
167 |
+
|
168 |
+
#: includes/admin-debugging.php:104
|
169 |
+
msgid ""
|
170 |
+
"Click the blue button to update all active feed items now. This will check "
|
171 |
+
"all feed sources for any new feed items."
|
172 |
+
msgstr ""
|
173 |
+
"Нажмите на синюю кнопку, чтобы обновить все активные ленты. Будет совершена "
|
174 |
+
"проверка всех источников лент на наличие новых пунктов."
|
175 |
+
|
176 |
+
#: includes/admin-debugging.php:105
|
177 |
+
msgid "Existing feed items will not be modified."
|
178 |
+
msgstr "Существующие пункты лент не будут изменены."
|
179 |
+
|
180 |
+
#: includes/admin-debugging.php:107
|
181 |
+
msgid ""
|
182 |
+
"<strong>Note:</strong> This might take more than a few seconds if you have "
|
183 |
+
"many feed sources."
|
184 |
+
msgstr ""
|
185 |
+
"<strong>Примечание:</strong> Это может занять больше времени, чем несколько "
|
186 |
+
"секунд, если у вас много источников лент.."
|
187 |
+
|
188 |
+
#: includes/admin-debugging.php:112
|
189 |
+
msgid "Update all feeds"
|
190 |
+
msgstr "Обновить все ленты"
|
191 |
+
|
192 |
+
#: includes/admin-debugging.php:126
|
193 |
+
msgid "Delete and Re-import Feeds"
|
194 |
+
msgstr "Удалить и заново импортировать ленты"
|
195 |
+
|
196 |
+
#: includes/admin-debugging.php:127
|
197 |
+
msgid ""
|
198 |
+
"Click the red button to delete all imported feed items and re-import them."
|
199 |
+
msgstr ""
|
200 |
+
"Нажмите на красную кнопку, чтобы удалить все импортированные пункты лент и "
|
201 |
+
"заново импортировать их."
|
202 |
+
|
203 |
+
#: includes/admin-debugging.php:128
|
204 |
+
msgid ""
|
205 |
+
"<em><strong>Note:</strong> This is a server-intensive process and should "
|
206 |
+
"only be used when instructed to by support staff.</em>"
|
207 |
+
msgstr ""
|
208 |
+
"<em><strong>Примечание:</strong> Это затратный процесс сервера и должен "
|
209 |
+
"использоваться только после инструктажа службы поддержки.</em>"
|
210 |
+
|
211 |
+
#: includes/admin-debugging.php:133
|
212 |
+
msgid "Delete and Re-import all feeds"
|
213 |
+
msgstr "Удалить и заново импортировать все ленты"
|
214 |
+
|
215 |
+
#: includes/admin-debugging.php:147 includes/admin-debugging.php:154
|
216 |
+
msgid "Restore Default Settings"
|
217 |
+
msgstr "Восстановить настройки по умолчанию"
|
218 |
+
|
219 |
+
#: includes/admin-debugging.php:148
|
220 |
+
msgid "Click the red button to reset the plugin settings to default."
|
221 |
+
msgstr ""
|
222 |
+
"Нажмите красную кнопку, чтобы сбросить все настройки плагина до стандартных."
|
223 |
+
|
224 |
+
#: includes/admin-debugging.php:149
|
225 |
+
msgid ""
|
226 |
+
"<em><strong>Note:</strong> This cannot be undone. Once the settings have "
|
227 |
+
"been reset, your old settings cannot be restored.</em>"
|
228 |
+
msgstr ""
|
229 |
+
"<em><strong>Примечание:</strong> Нельзя отменить. Настройки будут сброшены и "
|
230 |
+
"не будут подлежать восстановлению.</em>"
|
231 |
+
|
232 |
+
#: includes/admin-debugging.php:168
|
233 |
+
msgid "Error Log"
|
234 |
+
msgstr "Журнал ошибок"
|
235 |
+
|
236 |
+
#: includes/admin-debugging.php:174
|
237 |
+
msgid "Clear log"
|
238 |
+
msgstr "Очистить журнал"
|
239 |
+
|
240 |
+
#: includes/admin-debugging.php:202 includes/admin.php:42
|
241 |
+
msgid "Debugging"
|
242 |
+
msgstr "Отладка"
|
243 |
+
|
244 |
+
#: includes/admin-debugging.php:252
|
245 |
+
msgid "Feeds are being updated in the background."
|
246 |
+
msgstr "Ленты обновляются в фоновом режиме."
|
247 |
+
|
248 |
+
#: includes/admin-debugging.php:261
|
249 |
+
msgid "Feeds deleted and are being re-imported in the background."
|
250 |
+
msgstr "Ленты были удалены и заново импортируются в фоновом режиме."
|
251 |
+
|
252 |
+
#: includes/admin-debugging.php:271
|
253 |
+
msgid "The error log has been cleared."
|
254 |
+
msgstr "Журнал ошибок был очищен."
|
255 |
+
|
256 |
+
#: includes/admin-debugging.php:281
|
257 |
+
msgid "The plugin settings have been reset to default."
|
258 |
+
msgstr "Настройки плагина были сброшены."
|
259 |
+
|
260 |
+
#: includes/admin-display.php:20 includes/admin-display.php:212
|
261 |
+
msgid "Name"
|
262 |
+
msgstr "Название"
|
263 |
+
|
264 |
+
#: includes/admin-display.php:27
|
265 |
+
msgid "State"
|
266 |
+
msgstr "Состояние"
|
267 |
+
|
268 |
+
#: includes/admin-display.php:28
|
269 |
+
msgid "Updates"
|
270 |
+
msgstr "Обновления"
|
271 |
+
|
272 |
+
#: includes/admin-display.php:48
|
273 |
+
msgid ""
|
274 |
+
"This feed source experienced an error during the last feed fetch or "
|
275 |
+
"validation check. Re-check the feed source URL or check the Error Log in the "
|
276 |
+
"Debugging page for more details."
|
277 |
+
msgstr ""
|
278 |
+
"Во время последней выборки ленты или проверки валидности произошла ошибка. "
|
279 |
+
"Еще раз проверьте URL ленты или посмотрите журнал ошибок на странице отладки "
|
280 |
+
"для более подробной информации."
|
281 |
+
|
282 |
+
#: includes/admin-display.php:89 includes/admin-heartbeat.php:53
|
283 |
+
msgid "None"
|
284 |
+
msgstr "Нет"
|
285 |
+
|
286 |
+
#: includes/admin-display.php:91 includes/admin-heartbeat.php:50
|
287 |
+
#: includes/admin-metaboxes.php:494
|
288 |
+
msgid "Paused"
|
289 |
+
msgstr "Приостановлено"
|
290 |
+
|
291 |
+
#: includes/admin-display.php:98
|
292 |
+
msgid "Next update:"
|
293 |
+
msgstr "Следующее обновление через:"
|
294 |
+
|
295 |
+
#: includes/admin-display.php:106
|
296 |
+
msgid "Last updated:"
|
297 |
+
msgstr "Последнее обновление:"
|
298 |
+
|
299 |
+
#: includes/admin-display.php:107 includes/feed-display.php:157
|
300 |
+
#, php-format
|
301 |
+
msgid "%1$s ago"
|
302 |
+
msgstr "%1$s назад"
|
303 |
+
|
304 |
+
#: includes/admin-display.php:109
|
305 |
+
#, php-format
|
306 |
+
msgid ""
|
307 |
+
"Last update imported: <code class=\"last-update-imported\">%1$d</code> items"
|
308 |
+
msgstr ""
|
309 |
+
"Во время последнего обновления импортировано: <code class=\"last-update-"
|
310 |
+
"imported\">%1$d</code> пунктов"
|
311 |
+
|
312 |
+
#: includes/admin-display.php:124 includes/admin-metaboxes.php:248
|
313 |
+
msgid "Updating feed source"
|
314 |
+
msgstr "Обновление источника ленты"
|
315 |
+
|
316 |
+
#: includes/admin-display.php:213 includes/feed-blacklist.php:322
|
317 |
+
msgid "Permalink"
|
318 |
+
msgstr "Постоянная ссылка"
|
319 |
+
|
320 |
+
#: includes/admin-display.php:214
|
321 |
+
msgid "Date published"
|
322 |
+
msgstr "Дата опубликования"
|
323 |
+
|
324 |
+
#: includes/admin-display.php:215
|
325 |
+
msgid "Source"
|
326 |
+
msgstr "Источник"
|
327 |
+
|
328 |
+
#: includes/admin-display.php:304
|
329 |
+
msgid "Feed source updated. "
|
330 |
+
msgstr "Источник ленты обновлен."
|
331 |
+
|
332 |
+
#: includes/admin-display.php:305
|
333 |
+
msgid "Custom field updated."
|
334 |
+
msgstr "Пользовательское поле обновлено."
|
335 |
+
|
336 |
+
#: includes/admin-display.php:306
|
337 |
+
msgid "Custom field deleted."
|
338 |
+
msgstr "Пользовательское поле удалено."
|
339 |
+
|
340 |
+
#: includes/admin-display.php:307 includes/admin-display.php:313
|
341 |
+
msgid "Feed source updated."
|
342 |
+
msgstr "Источник ленты обновлен."
|
343 |
+
|
344 |
+
#: includes/admin-display.php:309 includes/admin-display.php:310
|
345 |
+
msgid "Feed source saved."
|
346 |
+
msgstr "Источник ленты сохранен."
|
347 |
+
|
348 |
+
#: includes/admin-display.php:311
|
349 |
+
msgid "Feed source submitted."
|
350 |
+
msgstr "Источник ленты подан."
|
351 |
+
|
352 |
+
#: includes/admin-display.php:338
|
353 |
+
#, php-format
|
354 |
+
msgid "ID: %1$s"
|
355 |
+
msgstr "ID: %1$s"
|
356 |
+
|
357 |
+
#: includes/admin-display.php:352
|
358 |
+
msgid "View Items"
|
359 |
+
msgstr "Просмотр пунктов"
|
360 |
+
|
361 |
+
#: includes/admin-display.php:355
|
362 |
+
msgid "Fetch Items"
|
363 |
+
msgstr "Выборка пунктов"
|
364 |
+
|
365 |
+
#: includes/admin-display.php:358
|
366 |
+
msgid "Delete Items"
|
367 |
+
msgstr "Удалить пункты"
|
368 |
+
|
369 |
+
#: includes/admin-display.php:359
|
370 |
+
msgid "Delete feed items imported by this feed source"
|
371 |
+
msgstr "Удалить пункты лент этого источника"
|
372 |
+
|
373 |
+
#: includes/admin-display.php:528
|
374 |
+
msgid "Publish Feed"
|
375 |
+
msgstr "Опубликовать ленту"
|
376 |
+
|
377 |
+
#: includes/admin-editor.php:87
|
378 |
+
msgid ""
|
379 |
+
"Hold Ctrl or Mac Command key when clicking to select more than one feed "
|
380 |
+
"source."
|
381 |
+
msgstr ""
|
382 |
+
"Зажмите Ctrl или кнопку Command на Mac, чтобы выбрать больше одного "
|
383 |
+
"источника ленты."
|
384 |
+
|
385 |
+
#: includes/admin-editor.php:97 includes/custom-post-types.php:21
|
386 |
+
#: includes/custom-post-types.php:24
|
387 |
+
msgid "Feed Sources"
|
388 |
+
msgstr "Источники лент"
|
389 |
+
|
390 |
+
#: includes/admin-editor.php:99
|
391 |
+
msgid "All feed sources"
|
392 |
+
msgstr "Все источники лент"
|
393 |
+
|
394 |
+
#: includes/admin-editor.php:101
|
395 |
+
msgid "Choose the feed source to display:"
|
396 |
+
msgstr "Выберите источник ленты для отображения:"
|
397 |
+
|
398 |
+
#: includes/admin-editor.php:122
|
399 |
+
msgid "Exclude:"
|
400 |
+
msgstr "Исключено:"
|
401 |
+
|
402 |
+
#: includes/admin-editor.php:124
|
403 |
+
msgid "Choose the feed sources to exclude:"
|
404 |
+
msgstr "Выберите источники лент для исключения:"
|
405 |
+
|
406 |
+
#: includes/admin-editor.php:130
|
407 |
+
msgid "Feed Limit:"
|
408 |
+
msgstr "Лимит ленты"
|
409 |
+
|
410 |
+
#: includes/admin-editor.php:131
|
411 |
+
msgid "Ignore"
|
412 |
+
msgstr "Игнорировать"
|
413 |
+
|
414 |
+
#: includes/admin-editor.php:139
|
415 |
+
msgid "Add shortcode"
|
416 |
+
msgstr "Добавить шорткод"
|
417 |
+
|
418 |
+
#: includes/admin-help-metaboxes.php:17
|
419 |
+
msgid ""
|
420 |
+
"The URL of the feed source. In most cases, the URL of the site will also "
|
421 |
+
"work, but for best results we recommend trying to find the URL of the RSS "
|
422 |
+
"feed.\n"
|
423 |
+
"\n"
|
424 |
+
"Also include the <code>http://</code> prefix in the URL."
|
425 |
+
msgstr ""
|
426 |
+
"URL источника ленты. В большинстве случаев URL сайта тоже подойдет, но для "
|
427 |
+
"лучших результатов мы рекомендуем попробовать найти URL RSS-ленты.\n"
|
428 |
+
"\n"
|
429 |
+
"Также включите префикс <code>http://</code> в URL."
|
430 |
+
|
431 |
+
#: includes/admin-help-metaboxes.php:21
|
432 |
+
msgid ""
|
433 |
+
"The maximum number of imported items from this feed to keep stored.\n"
|
434 |
+
"\n"
|
435 |
+
"When new items are imported and the limit is exceeded, the oldest feed items "
|
436 |
+
"will be deleted to make room for new ones.\n"
|
437 |
+
"\n"
|
438 |
+
"If you already have items imported from this feed source, setting this "
|
439 |
+
"option now may delete some of your items, in order to comply with the limit."
|
440 |
+
msgstr ""
|
441 |
+
"Макисмальное число импортируемых пунктов из этой ленты для хранения.\n"
|
442 |
+
"\n"
|
443 |
+
"Если при импорте новых пунктов лимит будет превышен, старые пункты ленты "
|
444 |
+
"будут удалены, чтобы освободить место для новых.\n"
|
445 |
+
"\n"
|
446 |
+
"Если у вас уже есть импортированные пункты этой ленты, настройка этого "
|
447 |
+
"параметра может удалить некоторые ваши пункты, чтобы вложиться в лимит."
|
448 |
+
|
449 |
+
#: includes/admin-help-metaboxes.php:27
|
450 |
+
msgid ""
|
451 |
+
"Tick this box to make feed items link to the URL in the enclosure tag, "
|
452 |
+
"rather than link to the original article.\n"
|
453 |
+
"\n"
|
454 |
+
"Enclosure tags are RSS tags that may be included with a feed items. These "
|
455 |
+
"tags typically contain links to images, audio, videos, attachment files or "
|
456 |
+
"even flash content.\n"
|
457 |
+
"\n"
|
458 |
+
"If you are not sure leave this setting blank."
|
459 |
+
msgstr ""
|
460 |
+
"Отметьте этот флажок, чтобы в пунктах ленты ставить ссылку из тега "
|
461 |
+
"\"enclosure\", а не ссылку на оригинал статьи.\n"
|
462 |
+
"\n"
|
463 |
+
"Теги \"enclosure\" - это RSS-теги, которые могут использоваться в пунктах "
|
464 |
+
"ленты. Эти теги обычно содержат ссылки на изображения, аудио, видео, "
|
465 |
+
"вложенные файлы или даже на флэш-контент. \n"
|
466 |
+
"\n"
|
467 |
+
"Если вы не уверены, оставьте это поле пустым."
|
468 |
+
|
469 |
+
#: includes/admin-help-metaboxes.php:33
|
470 |
+
msgid ""
|
471 |
+
"Whether to allow multiple feed items to have the same title. When checked, "
|
472 |
+
"if a feed item has the same title as a previously-imported feed item, it "
|
473 |
+
"will not be imported.\n"
|
474 |
+
"\n"
|
475 |
+
"This can be useful in cases where permalinks change, or where multiple "
|
476 |
+
"permalinks refer to the same item."
|
477 |
+
msgstr ""
|
478 |
+
|
479 |
+
#: includes/admin-help-metaboxes.php:43
|
480 |
+
msgid ""
|
481 |
+
"State of the feed, active or paused.\n"
|
482 |
+
"\n"
|
483 |
+
"If active, the feed source will fetch items periodically, according to the "
|
484 |
+
"settings below.\n"
|
485 |
+
"\n"
|
486 |
+
"If paused, the feed source will not fetch feed items periodically."
|
487 |
+
msgstr ""
|
488 |
+
"Состояние ленты, активна или приостановлена.\n"
|
489 |
+
"\n"
|
490 |
+
"Если активна, лента будет периодически пополняться новыми пунктами, в "
|
491 |
+
"соответствии с приведенными ниже настройками.\n"
|
492 |
+
"\n"
|
493 |
+
"Если приостановлена, лента не будет пополняться новыми пунктами."
|
494 |
+
|
495 |
+
#: includes/admin-help-metaboxes.php:49
|
496 |
+
msgid ""
|
497 |
+
"You can set a time, in UTC, in the future when the feed source will become "
|
498 |
+
"active, if it is paused.\n"
|
499 |
+
"\n"
|
500 |
+
"Leave blank to activate immediately."
|
501 |
+
msgstr ""
|
502 |
+
"Вы можете установить время автоматической активации ленты в формате UTC, "
|
503 |
+
"если сейчас она приостановлена.\n"
|
504 |
+
"\n"
|
505 |
+
"Оставьте пустым, чтобы активировать сразу."
|
506 |
+
|
507 |
+
#: includes/admin-help-metaboxes.php:53
|
508 |
+
msgid ""
|
509 |
+
"You can set a time, in UTC, in the future when the feed source will become "
|
510 |
+
"paused, if it is active.\n"
|
511 |
+
"\n"
|
512 |
+
"Leave blank to never pause."
|
513 |
+
msgstr ""
|
514 |
+
"Вы можете установить время автоматической остановки обновления ленты в "
|
515 |
+
"формате UTC, если сейчас она активна.\n"
|
516 |
+
"\n"
|
517 |
+
"Оставьте пустым, чтобы никогда не останавливать."
|
518 |
+
|
519 |
+
#: includes/admin-help-metaboxes.php:57
|
520 |
+
msgid ""
|
521 |
+
"How frequently the feed source should check for new items and fetch if "
|
522 |
+
"needed.\n"
|
523 |
+
"\n"
|
524 |
+
"If left as <em>Default</em>, the interval in the global settings is used."
|
525 |
+
msgstr ""
|
526 |
+
"Как часто источник ленты должен проверяться на наличие новых пунктов, если "
|
527 |
+
"это необходимо.\n"
|
528 |
+
"\n"
|
529 |
+
"Если оставить настройки<em>По умолчанию</em>, будет использоваться интервал "
|
530 |
+
"из глобальных настроек."
|
531 |
+
|
532 |
+
#: includes/admin-help-metaboxes.php:61
|
533 |
+
msgid ""
|
534 |
+
"The maximum age allowed for feed items. Very useful if you are only "
|
535 |
+
"concerned with, say, last week's news.\n"
|
536 |
+
"\n"
|
537 |
+
"Items already imported will be deleted if they eventually exceed this age "
|
538 |
+
"limit.\n"
|
539 |
+
"\n"
|
540 |
+
"Also, items in the RSS feed that are already older than this age will not be "
|
541 |
+
"imported at all.\n"
|
542 |
+
"\n"
|
543 |
+
"Leaving empty to use the <em>Limit feed items by age</em> option in the "
|
544 |
+
"general settings."
|
545 |
+
msgstr ""
|
546 |
+
"Максимальный возраст пунктов лент. Очень полезно, если вам нужны только, "
|
547 |
+
"например, новости прошедшей недели.\n"
|
548 |
+
"\n"
|
549 |
+
"Ранее импортированные пункты лент будут удалены, если не будут "
|
550 |
+
"соответствовать возрастному пределу.\n"
|
551 |
+
"\n"
|
552 |
+
"Кроме того, пункты в RSS-ленте, которые старше установленного возраста, не "
|
553 |
+
"будут импортированы.\n"
|
554 |
+
"\n"
|
555 |
+
"При пустом поле <em>Максимальный возраст пунктов ленты</em> будет "
|
556 |
+
"использоваться значение из глобальных настроек."
|
557 |
+
|
558 |
+
#: includes/admin-help-metaboxes.php:74
|
559 |
+
msgid ""
|
560 |
+
"Use this option if you are seeing an <q>Invalid feed URL</q> error in the "
|
561 |
+
"Feed Preview above, but you are sure that the URL is correct.\n"
|
562 |
+
"\n"
|
563 |
+
"Note, however, that this will disable auto-discovery, meaning that the given "
|
564 |
+
"URL must be an RSS feed URL. Using the site's URL will not work."
|
565 |
+
msgstr ""
|
566 |
+
"Исользуйте эту опцию, если вы видите ошибку <q>Некорректный URL ленты</q> в "
|
567 |
+
"предварительном просмотре ленты выше, но вы уверены, что URL на самом деле "
|
568 |
+
"корректный.\n"
|
569 |
+
"\n"
|
570 |
+
"Заметим, однако, что после этого будет отключено автоматическое обнаружение "
|
571 |
+
"ленты. Это означает, что указанная вами ссылка должна быть адресом RSS-"
|
572 |
+
"ленты, а не адресом сайта."
|
573 |
+
|
574 |
+
#: includes/admin-help-settings.php:13
|
575 |
+
msgid ""
|
576 |
+
"The maximum age allowed for feed items.\n"
|
577 |
+
"<hr/>\n"
|
578 |
+
"\n"
|
579 |
+
"Items already imported will be deleted if they eventually exceed this age "
|
580 |
+
"limit.\n"
|
581 |
+
"\n"
|
582 |
+
"Also, items in the RSS feed that are already older than this age will not be "
|
583 |
+
"imported at all.\n"
|
584 |
+
"<hr/>\n"
|
585 |
+
"\n"
|
586 |
+
"<em>Leave empty for no limit.</em>"
|
587 |
+
msgstr ""
|
588 |
+
"Максимальный возраст пунктов ленты.\n"
|
589 |
+
"<hr/>\n"
|
590 |
+
"\n"
|
591 |
+
" Ранее импортированные пункты ленты будут удалены, если не будут "
|
592 |
+
"соответствовать возрастному пределу.\n"
|
593 |
+
"\n"
|
594 |
+
"Кроме того, пункты в RSS-ленте, которые старше установленного возраста, не "
|
595 |
+
"будут импортированы.\n"
|
596 |
+
"<hr/>\n"
|
597 |
+
"\n"
|
598 |
+
"<em>Оставьте пустым, чтобы убрать ограничения.</em>"
|
599 |
+
|
600 |
+
#: includes/admin-help-settings.php:23
|
601 |
+
msgid ""
|
602 |
+
"The maximum number of imported items to keep stored, for feed sources that "
|
603 |
+
"do not have their own limit.\n"
|
604 |
+
"<hr/>\n"
|
605 |
+
"\n"
|
606 |
+
"When new items are imported and the limit for a feed source is exceeded, the "
|
607 |
+
"oldest feed items for that feed source will be deleted to make room for the "
|
608 |
+
"new ones.\n"
|
609 |
+
"\n"
|
610 |
+
"If you already have items imported from this feed source, setting this "
|
611 |
+
"option now may delete some of your items, in order to comply with the "
|
612 |
+
"limit.\n"
|
613 |
+
"<hr/>\n"
|
614 |
+
"\n"
|
615 |
+
"<em>Use 0 or leave empty for no limit.</em>"
|
616 |
+
msgstr ""
|
617 |
+
"Макисмальное число хранимых пунктов в ленте для тех лент, у которых не "
|
618 |
+
"установлен собственный лимит.\n"
|
619 |
+
"<hr/>\n"
|
620 |
+
"\n"
|
621 |
+
"Если при импорте новых пунктов лимит будет превышен, старые пункты ленты "
|
622 |
+
"будут удалены, чтобы освободить место для новых.\n"
|
623 |
+
"\n"
|
624 |
+
"Если у вас уже есть импортированные пункты этой ленты, настройка этого "
|
625 |
+
"параметра может удалить некоторые ваши пункты, чтобы вложиться в лимит.\n"
|
626 |
+
"<hr/>\n"
|
627 |
+
"\n"
|
628 |
+
"<em>Поставьте 0 или оставьте пустым, чтобы убрать ограничения.</em>"
|
629 |
+
|
630 |
+
#: includes/admin-help-settings.php:33
|
631 |
+
msgid ""
|
632 |
+
"How frequently should the feed sources (that do not have their own update "
|
633 |
+
"interval) check for updates and fetch items accordingly.\n"
|
634 |
+
"\n"
|
635 |
+
"It is recommended to not have more than 20 feed sources that use this global "
|
636 |
+
"update interval. Having too many feed sources updating precisely at the same "
|
637 |
+
"time can cause the WP Cron System to crash."
|
638 |
+
msgstr ""
|
639 |
+
"Как часто источник ленты, для которого не установлен собственный интервал, "
|
640 |
+
"должен проверяться на наличие новых пунктов.\n"
|
641 |
+
"\n"
|
642 |
+
"Рекомендуется иметь не более 20 лент, которые используют данный глобальный "
|
643 |
+
"интервал обновления. Слишком большое количество лент, которые будут "
|
644 |
+
"обновляться в одно и то же время, может привести к поломке cron-системы "
|
645 |
+
"WordPress."
|
646 |
+
|
647 |
+
#: includes/admin-help-settings.php:37
|
648 |
+
msgid ""
|
649 |
+
"Whether to allow multiple feed items to have the same title. When checked, "
|
650 |
+
"if a feed item has the same title as a previously-imported feed item from "
|
651 |
+
"any feed source, it will not be imported.\n"
|
652 |
+
"\n"
|
653 |
+
"This can be useful in cases where permalinks change, or where multiple "
|
654 |
+
"permalinks refer to the same item.\n"
|
655 |
+
"\n"
|
656 |
+
"Since this feature requires checking every post title, WordPress installs "
|
657 |
+
"with a significant amount of posts may notice a slight slowdown of the post "
|
658 |
+
"import process."
|
659 |
+
msgstr ""
|
660 |
+
|
661 |
+
#: includes/admin-help-settings.php:43
|
662 |
+
msgid ""
|
663 |
+
"The URL of the custom feed, located at <code>http://yoursite.com/[custom "
|
664 |
+
"feed url]</code>.\n"
|
665 |
+
"<hr/>\n"
|
666 |
+
"\n"
|
667 |
+
"WP RSS Aggregator allows you to create a custom RSS feed, that contains all "
|
668 |
+
"of your imported feed items. This setting allows you to change the URL of "
|
669 |
+
"this custom feed.\n"
|
670 |
+
"\n"
|
671 |
+
"<hr/>\n"
|
672 |
+
"\n"
|
673 |
+
"<strong>Note:</strong> You may be required to refresh you Permalinks after "
|
674 |
+
"you change this setting, by going to <em>Settings <i class=\"fa fa-angle-"
|
675 |
+
"right\"></i> Permalinks</e> and clicking <em>Save</em>."
|
676 |
+
msgstr ""
|
677 |
+
"Адрес пользовательской ленты, расположенной в <code>http://yoursite.com/"
|
678 |
+
"[адрес пользовательской ленты]</code>.\n"
|
679 |
+
"<hr/>\n"
|
680 |
+
"\n"
|
681 |
+
"WP RSS Aggregator позволяет создавать пользовательскую RSS-ленту, которая "
|
682 |
+
"будет содержать все ваши импортированные пункты лент. Этот параметр "
|
683 |
+
"позволяет сменить адрес данной пользовательской ленты.\n"
|
684 |
+
"\n"
|
685 |
+
"<hr/>\n"
|
686 |
+
"\n"
|
687 |
+
"<strong>Примечание:</strong> Вам может потребоваться обновить ваши "
|
688 |
+
"постоянные ссылки после изменения этого параметра, путем нажатия "
|
689 |
+
"<em>Сохранить</em> в <em>Настройках <i class=\"fa fa-angle-right\"></i> "
|
690 |
+
"Постоянных ссылках</e>."
|
691 |
+
|
692 |
+
#: includes/admin-help-settings.php:52
|
693 |
+
msgid ""
|
694 |
+
"The title of the custom feed.\n"
|
695 |
+
"\n"
|
696 |
+
"This title will be included in the RSS source of the custom feed, in a "
|
697 |
+
"<code><title></code> tag."
|
698 |
+
msgstr ""
|
699 |
+
"Название пользовательской ленты.\n"
|
700 |
+
"\n"
|
701 |
+
"Это название будет включено в источник пользовательской ленты, в теге "
|
702 |
+
"<code><title></code>."
|
703 |
+
|
704 |
+
#: includes/admin-help-settings.php:56
|
705 |
+
msgid "The maximum number of feed items in the custom feed."
|
706 |
+
msgstr "Максимальное число пунктов в пользовательской ленте."
|
707 |
+
|
708 |
+
#: includes/admin-help-settings.php:62
|
709 |
+
msgid ""
|
710 |
+
"Check this box to make the feed item titles link to the original article."
|
711 |
+
msgstr ""
|
712 |
+
"Установите этот флажок, чтобы сделать заголовки пунктов лент ссылками на "
|
713 |
+
"оригиналы статей."
|
714 |
+
|
715 |
+
#: includes/admin-help-settings.php:64
|
716 |
+
msgid ""
|
717 |
+
"Set the maximum number of characters to show for feed item titles.\n"
|
718 |
+
"<hr/>\n"
|
719 |
+
"\n"
|
720 |
+
"<em>Leave empty for no limit.</em>"
|
721 |
+
msgstr ""
|
722 |
+
"Установите максимально допустимое число символов в названии пункта ленты.\n"
|
723 |
+
"<hr/>\n"
|
724 |
+
"\n"
|
725 |
+
"<em>Оставьте пустым, чтобы убрать ограничения.</em>"
|
726 |
+
|
727 |
+
#: includes/admin-help-settings.php:69
|
728 |
+
msgid ""
|
729 |
+
"Check this box to show the author for each feed item, if it is available."
|
730 |
+
msgstr ""
|
731 |
+
"Установите этот флажок, чтобы показать автора каждого пункта ленты, если он "
|
732 |
+
"доступен."
|
733 |
+
|
734 |
+
#: includes/admin-help-settings.php:71
|
735 |
+
msgid ""
|
736 |
+
"For feed items from YouTube, Vimeo or Dailymotion, you can choose whether "
|
737 |
+
"you want to have the items link to the original page link, or a link to the "
|
738 |
+
"embedded video player only."
|
739 |
+
msgstr ""
|
740 |
+
"Для пунктов лент из YouTube, Vimeo или Dailymotion, вы можете выбрать, "
|
741 |
+
"хотите ли Вы, чтобы пункты ссылались на оригинальную страницу, или только на "
|
742 |
+
"встроенный видео-плеер."
|
743 |
+
|
744 |
+
#: includes/admin-help-settings.php:73
|
745 |
+
msgid ""
|
746 |
+
"The type of pagination to use when showing feed items on multiple pages.\n"
|
747 |
+
"\n"
|
748 |
+
"The first shows two links, \"Older\" and \"Newer\", which allow you to "
|
749 |
+
"navigate through the pages.\n"
|
750 |
+
"\n"
|
751 |
+
"The second shows links for all the pages, together with links for the next "
|
752 |
+
"and previous pages."
|
753 |
+
msgstr ""
|
754 |
+
"Тип пагинации при отображении пунктов лент на нескольких страницах.\n"
|
755 |
+
"\n"
|
756 |
+
"При первом типе отображаются две ссылки, \"Предыдущие\" и \"Следующие\", "
|
757 |
+
"которые позволяют перемещаться по страницам.\n"
|
758 |
+
"\n"
|
759 |
+
"При втором типе отображаются ссылки на все страницы, вместе со ссылками на "
|
760 |
+
"следующие и предыдущие страницы."
|
761 |
+
|
762 |
+
#: includes/admin-help-settings.php:79
|
763 |
+
msgid ""
|
764 |
+
"The maximum number of feed items to display when using the shortcode.\n"
|
765 |
+
"\n"
|
766 |
+
"This enables pagination if set to a number smaller than the number of items "
|
767 |
+
"to be displayed."
|
768 |
+
msgstr ""
|
769 |
+
"Максимальное количество пунктов лент в показе при использовании шорткода.\n"
|
770 |
+
"\n"
|
771 |
+
"Если заданное количество меньше, чем общее количество пунктов, будет "
|
772 |
+
"использоваться пагинация."
|
773 |
+
|
774 |
+
#: includes/admin-help-settings.php:83
|
775 |
+
msgid ""
|
776 |
+
"Choose how you want links to be opened. This applies to the feed item title "
|
777 |
+
"and the source link."
|
778 |
+
msgstr ""
|
779 |
+
"Выберите, как вы хотите, чтобы открывались ссылки. Это относится и к "
|
780 |
+
"заголовку пункта ленты, и к ссылке на источник."
|
781 |
+
|
782 |
+
#: includes/admin-help-settings.php:85
|
783 |
+
msgid ""
|
784 |
+
"Enable this option to set all links displayed as \"NoFollow\".\n"
|
785 |
+
"<hr/>\n"
|
786 |
+
"\n"
|
787 |
+
"\"Nofollow\" provides a way to tell search engines to <em>not</em> follow "
|
788 |
+
"certain links, such as links to feed items in this case."
|
789 |
+
msgstr ""
|
790 |
+
"Включите эту опцию, чтобы добавить ко всем ссылкам тег \"NoFollow\".\n"
|
791 |
+
"<hr/>\n"
|
792 |
+
"\n"
|
793 |
+
"Тег \"Nofollow\" позволяет указать поисковым системам <em>не</em> не "
|
794 |
+
"поддерживать и не переходить по определенным ссылкам, в данном случае - по "
|
795 |
+
"ссылкам в пунктах ленты."
|
796 |
+
|
797 |
+
#: includes/admin-help-settings.php:94
|
798 |
+
msgid "Enable this option to show the feed source name for each feed item."
|
799 |
+
msgstr ""
|
800 |
+
"Включите эту опцию, чтобы показать имя источника ленты в каждом пункте этой "
|
801 |
+
"ленты."
|
802 |
+
|
803 |
+
#: includes/admin-help-settings.php:96
|
804 |
+
msgid ""
|
805 |
+
"Enter the text that you want to show before the source name. A space is "
|
806 |
+
"automatically added between this text and the feed source name."
|
807 |
+
msgstr ""
|
808 |
+
"Введите текст, который должен отображаться перед именем источника. Между "
|
809 |
+
"этим текстом и именем источника автоматически добавляется пробел."
|
810 |
+
|
811 |
+
#: includes/admin-help-settings.php:98
|
812 |
+
msgid ""
|
813 |
+
"Enable this option to link the feed source name to the RSS feed's source "
|
814 |
+
"site."
|
815 |
+
msgstr ""
|
816 |
+
"Включите эту опцию, чтобы поставить ссылку с имени источника ленты на сайт "
|
817 |
+
"этого источника."
|
818 |
+
|
819 |
+
#: includes/admin-help-settings.php:104
|
820 |
+
msgid "Enable this to show the feed item's date."
|
821 |
+
msgstr "Включите эту опцию, чтобы показывать дату в пунктах ленты."
|
822 |
+
|
823 |
+
#: includes/admin-help-settings.php:106
|
824 |
+
msgid ""
|
825 |
+
"Enter the text that you want to show before the feed item date. A space is "
|
826 |
+
"automatically added between this text and the date."
|
827 |
+
msgstr ""
|
828 |
+
"Введите текст, который должен отображаться перед датой. Между этим текстом и "
|
829 |
+
"датой автоматически добавляется пробел."
|
830 |
+
|
831 |
+
#: includes/admin-help-settings.php:108
|
832 |
+
msgid "The format to use for the feed item dates, as a PHP date format."
|
833 |
+
msgstr "Формат даты в пунктах ленты (в формате PHP)."
|
834 |
+
|
835 |
+
#: includes/admin-help-settings.php:110
|
836 |
+
msgid ""
|
837 |
+
"Enable this option to show the elapsed time from the feed item's date and "
|
838 |
+
"time to the present time.\n"
|
839 |
+
"<em>Eg. 2 hours ago</em>"
|
840 |
+
msgstr ""
|
841 |
+
"Включите эту опцию, чтобы показывать время, прошедшее с момента публикации "
|
842 |
+
"пункта ленты до настоящего времени.\n"
|
843 |
+
"<em>Например, 2 часа назад</em>"
|
844 |
+
|
845 |
+
#: includes/admin-help-settings.php:117
|
846 |
+
msgid ""
|
847 |
+
"Check this box to disable all plugin styles used for displaying feed items.\n"
|
848 |
+
"\n"
|
849 |
+
"This will allow you to provide your own custom CSS styles for displaying the "
|
850 |
+
"feed items."
|
851 |
+
msgstr ""
|
852 |
+
"Установите этот флажок, чтобы отключить все стили плагина, используемые для "
|
853 |
+
"отображения пунктов лент.\n"
|
854 |
+
"\n"
|
855 |
+
"Это позволит вам подключить свои собственные стили CSS для отображения "
|
856 |
+
"пунктов лент."
|
857 |
+
|
858 |
+
#: includes/admin-help-settings.php:126
|
859 |
+
msgid ""
|
860 |
+
"Path to the file containing one or more certificates.\n"
|
861 |
+
"\n"
|
862 |
+
"These will be used to verify certificates over secure connection, such as "
|
863 |
+
"when fetching a remote resource over HTTPS.\n"
|
864 |
+
"\n"
|
865 |
+
"Relative path will be relative to the WordPress root.\n"
|
866 |
+
"\n"
|
867 |
+
"<strong>Default:</strong> path to certificate file bundled with WordPress."
|
868 |
+
msgstr ""
|
869 |
+
|
870 |
+
#: includes/admin-help.php:13 includes/admin.php:44
|
871 |
+
msgid "Help & Support"
|
872 |
+
msgstr "Помощь и Поддержка"
|
873 |
+
|
874 |
+
#: includes/admin-help.php:14 includes/admin.php:112
|
875 |
+
msgid "Documentation"
|
876 |
+
msgstr "Документация"
|
877 |
+
|
878 |
+
#: includes/admin-help.php:15
|
879 |
+
msgid ""
|
880 |
+
"In the <a href=\"http://www.wprssaggregator.com/documentation/"
|
881 |
+
"\">documentation area</a> on the WP RSS Aggregator website you will find "
|
882 |
+
"comprehensive details on how to use the core plugin and all the add-ons.\n"
|
883 |
+
"\t\t\t\t\n"
|
884 |
+
"\t\t\t\tThere are also some videos to help you make a quick start to setting "
|
885 |
+
"up and enjoying this plugin."
|
886 |
+
msgstr ""
|
887 |
+
"В <a href=\"http://www.wprssaggregator.com/documentation/\">документации</a> "
|
888 |
+
"на сайте WP RSS Aggregator вы найдете подробные сведения о том, как "
|
889 |
+
"использовать основной плагин и все дополнения.\n"
|
890 |
+
"\t\t\t\t\n"
|
891 |
+
"\t\t\t\tТакже там есть некоторые видео, которые помогут вам быстро настроить "
|
892 |
+
"плагин и наслаждаться им."
|
893 |
+
|
894 |
+
#: includes/admin-help.php:18
|
895 |
+
msgid "Frequently Asked Questions (FAQ)"
|
896 |
+
msgstr "Часто задаваемые вопросы (FAQ)"
|
897 |
+
|
898 |
+
#: includes/admin-help.php:19
|
899 |
+
msgid ""
|
900 |
+
"If after going through the documentation you still have questions, please "
|
901 |
+
"take a look at the <a href=\"http://www.wprssaggregator.com/faq/\">FAQ page</"
|
902 |
+
"a> on the site, we set this up purposely to answer the most commonly asked "
|
903 |
+
"questions by our users."
|
904 |
+
msgstr ""
|
905 |
+
"Если после прочтения документации у вас останутся вопросы, пожалуйста, "
|
906 |
+
"посмотрите <a href=\"http://www.wprssaggregator.com/faq/\">Страницу с часто "
|
907 |
+
"задаваемыми вопросами</a> на сайте. Мы специально создали эту страницу, "
|
908 |
+
"чтобы ответить на наиболее часто задаваемые вопросы от наших пользователей."
|
909 |
+
|
910 |
+
#: includes/admin-help.php:64
|
911 |
+
#, fuzzy
|
912 |
+
msgid "Email Support"
|
913 |
+
msgstr "Помощь и Поддержка"
|
914 |
+
|
915 |
+
#: includes/admin-help.php:65
|
916 |
+
msgid ""
|
917 |
+
"If you still can't find an answer to your query after reading the "
|
918 |
+
"documentation and going through the FAQ, just fill out the support request "
|
919 |
+
"form below. We'll be happy to help you out."
|
920 |
+
msgstr ""
|
921 |
+
"Если вы все еще не можете найти ответ на свой вопрос после прочтения "
|
922 |
+
"документации и FAQ, просто <a href=\"http://www.wprssaggregator.com/contact/"
|
923 |
+
"\">обратитесь в службу поддержки</a>.\n"
|
924 |
+
"Мы будем рады вам помочь."
|
925 |
+
|
926 |
+
#: includes/admin-help.php:72
|
927 |
+
msgid "From: "
|
928 |
+
msgstr ""
|
929 |
+
|
930 |
+
#: includes/admin-help.php:77
|
931 |
+
msgid "Replies will be sent to this email address."
|
932 |
+
msgstr ""
|
933 |
+
|
934 |
+
#: includes/admin-help.php:86
|
935 |
+
msgid "Attachments"
|
936 |
+
msgstr ""
|
937 |
+
|
938 |
+
#: includes/admin-help.php:89
|
939 |
+
#, fuzzy
|
940 |
+
msgid "WP RSS Aggregator log file"
|
941 |
+
msgstr "Настройки WP RSS Aggregator"
|
942 |
+
|
943 |
+
#: includes/admin-help.php:92
|
944 |
+
#, fuzzy
|
945 |
+
msgid "WordPress information"
|
946 |
+
msgstr "Системная информация"
|
947 |
+
|
948 |
+
#: includes/admin-help.php:97
|
949 |
+
msgid "Send Message"
|
950 |
+
msgstr ""
|
951 |
+
|
952 |
+
#: includes/admin-help.php:110
|
953 |
+
msgid "Support Forums"
|
954 |
+
msgstr ""
|
955 |
+
|
956 |
+
#: includes/admin-help.php:111
|
957 |
+
#, fuzzy
|
958 |
+
msgid ""
|
959 |
+
"Users of the free version of WP RSS Aggregator can ask questions on the <a "
|
960 |
+
"href=\"http://wordpress.org/support/plugin/wp-rss-aggregator\">support "
|
961 |
+
"forum</a>."
|
962 |
+
msgstr ""
|
963 |
+
"Если вы используете бесплатную версию плагина, найденную на WordPress.org, "
|
964 |
+
"вы можете задать вопросы по поддержке <a href=\"http://wordpress.org/support/"
|
965 |
+
"plugin/wp-rss-aggregator\">на справочном форуме</a>."
|
966 |
+
|
967 |
+
#: includes/admin-help.php:144
|
968 |
+
#, php-format
|
969 |
+
msgid ""
|
970 |
+
"There was an error sending the form. Please use the <a href=\"%s\" target="
|
971 |
+
"\"_blank\">contact form on our site.</a>"
|
972 |
+
msgstr ""
|
973 |
+
|
974 |
+
#: includes/admin-help.php:174
|
975 |
+
#, php-format
|
976 |
+
msgid ""
|
977 |
+
"Please fill out all the fields in the form, including the <strong>%s</"
|
978 |
+
"strong> field."
|
979 |
+
msgstr ""
|
980 |
+
|
981 |
+
#: includes/admin-help.php:182
|
982 |
+
msgid "Please enter a valid email address."
|
983 |
+
msgstr ""
|
984 |
+
|
985 |
+
#: includes/admin-help.php:936
|
986 |
+
msgid ""
|
987 |
+
"Could not enqueue tooltip content: the queue method is not a valid callable."
|
988 |
+
msgstr ""
|
989 |
+
"Не удалось поставить в очередь содержание подсказки: метод очереди не "
|
990 |
+
"действителен."
|
991 |
+
|
992 |
+
#: includes/admin-import-export.php:63
|
993 |
+
#, php-format
|
994 |
+
msgid "Successfully imported <code>%1$s</code> feed sources."
|
995 |
+
msgstr "Успешно импортировано <code>%1$s</code> лент."
|
996 |
+
|
997 |
+
#: includes/admin-import-export.php:119
|
998 |
+
msgid "All options are exported successfully."
|
999 |
+
msgstr "Все параметры успешно экспортированы."
|
1000 |
+
|
1001 |
+
#: includes/admin-import-export.php:130
|
1002 |
+
msgid "All options are restored successfully."
|
1003 |
+
msgstr "Все параметры успешно восстановлены."
|
1004 |
+
|
1005 |
+
#: includes/admin-import-export.php:141
|
1006 |
+
msgid "Invalid file or file size too big."
|
1007 |
+
msgstr "Битый файл или слишком большой размер файла."
|
1008 |
+
|
1009 |
+
#: includes/admin-import-export.php:195
|
1010 |
+
msgid "Bulk Feed Import"
|
1011 |
+
msgstr "Массовый импорт лент"
|
1012 |
+
|
1013 |
+
#: includes/admin-import-export.php:196
|
1014 |
+
msgid ""
|
1015 |
+
"Import multiple feed sources at once, by entering the name and URLs of your "
|
1016 |
+
"feeds below."
|
1017 |
+
msgstr ""
|
1018 |
+
"Импорт сразу нескольких источников лент, путем ввода имени и адресов ваших "
|
1019 |
+
"лент ниже."
|
1020 |
+
|
1021 |
+
#: includes/admin-import-export.php:197
|
1022 |
+
msgid "Separate the name and the URL using a comma on each line:"
|
1023 |
+
msgstr "Разделяйте имя и адрес, используя запятую в каждой строке:"
|
1024 |
+
|
1025 |
+
#: includes/admin-import-export.php:198
|
1026 |
+
msgid "Feed Name, http://www.myfeed.com"
|
1027 |
+
msgstr "Название ленты, http://www.myfeed.com"
|
1028 |
+
|
1029 |
+
#: includes/admin-import-export.php:204
|
1030 |
+
msgid "Bulk Import"
|
1031 |
+
msgstr "Массовый импорт"
|
1032 |
+
|
1033 |
+
#: includes/admin-import-export.php:209
|
1034 |
+
msgid "Import & Export Settings"
|
1035 |
+
msgstr "Настройки импорта и экспорта"
|
1036 |
+
|
1037 |
+
#: includes/admin-import-export.php:211 includes/admin-import-export.php:218
|
1038 |
+
msgid "Export Settings"
|
1039 |
+
msgstr "Настройки экспорта"
|
1040 |
+
|
1041 |
+
#: includes/admin-import-export.php:212
|
1042 |
+
msgid ""
|
1043 |
+
"Click the <strong>Export Settings</strong> button to generate a file "
|
1044 |
+
"containing all the settings used by WP RSS Aggregator"
|
1045 |
+
msgstr ""
|
1046 |
+
"Нажмите на кнопку <strong>Настройки экспорта</strong>, чтобы сгенерировать "
|
1047 |
+
"файл, содержащий все настройки, используемые в WP RSS Aggregator"
|
1048 |
+
|
1049 |
+
#: includes/admin-import-export.php:213
|
1050 |
+
msgid ""
|
1051 |
+
"After exporting, you can either use the backup file to restore your settings "
|
1052 |
+
"to this site or to another WordPress site."
|
1053 |
+
msgstr ""
|
1054 |
+
"После экспорта вы можете использовать файл резервной копии для "
|
1055 |
+
"восстановления настроек на этом сайте или на другом WordPress сайте."
|
1056 |
+
|
1057 |
+
#: includes/admin-import-export.php:222 includes/admin-import-export.php:230
|
1058 |
+
msgid "Import Settings"
|
1059 |
+
msgstr "Настройки импорта"
|
1060 |
+
|
1061 |
+
#: includes/admin-import-export.php:223
|
1062 |
+
msgid "Click the <strong>Choose file</strong> button and choose a backup file."
|
1063 |
+
msgstr ""
|
1064 |
+
"Нажмите кнопку <strong>Выбрать файл</strong> и выберите файл резервной копии."
|
1065 |
+
|
1066 |
+
#: includes/admin-import-export.php:224
|
1067 |
+
msgid ""
|
1068 |
+
"Press the <strong>Import Settings</strong> button, and WordPress will do the "
|
1069 |
+
"rest for you."
|
1070 |
+
msgstr ""
|
1071 |
+
"Нажмите на кнопку <strong>Настройки импорта</strong> и WordPress сделает все "
|
1072 |
+
"остальное за вас."
|
1073 |
+
|
1074 |
+
#: includes/admin-import-export.php:234
|
1075 |
+
msgid "Importing/Exporting Feed Sources"
|
1076 |
+
msgstr "Импорт/Экспорт источников лент"
|
1077 |
+
|
1078 |
+
#: includes/admin-import-export.php:235
|
1079 |
+
#, php-format
|
1080 |
+
msgid ""
|
1081 |
+
"To import/export your feed sources, please use the standard WordPress <a "
|
1082 |
+
"href=\"%1$simport.php\">Import</a> and <a href=\"%1$sexport.php\">Export</a> "
|
1083 |
+
"functionality."
|
1084 |
+
msgstr ""
|
1085 |
+
"Чтобы импортировать/экспортировать свои источники лент, пожалуйста, "
|
1086 |
+
"используйте стандартный функционал WordPress <a href=\"%1$simport.php"
|
1087 |
+
"\">Импорт</a> и <a href=\"%1$sexport.php\">Экспорт</a>."
|
1088 |
+
|
1089 |
+
#: includes/admin-import-export.php:236
|
1090 |
+
#, php-format
|
1091 |
+
msgid ""
|
1092 |
+
"On the <a href=\"%1$sexport.php\">Export</a> page, check the <strong>Feed "
|
1093 |
+
"Sources</strong> radio button and click the <strong>Download Export File</"
|
1094 |
+
"strong> button. WordPress will then create an XML file containing all the "
|
1095 |
+
"feed sources."
|
1096 |
+
msgstr ""
|
1097 |
+
"На странице <a href=\"%1$sexport.php\">Экспорт</a> проверьте радиокнопку "
|
1098 |
+
"<strong>Источники лент</strong> и нажмите кнопку <strong>Скачать файл "
|
1099 |
+
"экспорта</strong>. WordPress создаст XML-файл, содержащий все источники лент."
|
1100 |
+
|
1101 |
+
#: includes/admin-import-export.php:237
|
1102 |
+
#, php-format
|
1103 |
+
msgid ""
|
1104 |
+
"On the <a href=\"%1$simport.php\">Import</a> page, choose the previously "
|
1105 |
+
"created file and click the <strong>Upload file and import</strong> button."
|
1106 |
+
msgstr ""
|
1107 |
+
"На странице <a href=\"%1$simport.php\">Импорт</a> выберите ранее созданный "
|
1108 |
+
"файл и нажмите на кнопку <strong>Загрузить файл и импортировать</strong>."
|
1109 |
+
|
1110 |
+
#: includes/admin-log.php:236
|
1111 |
+
msgid "Log level threshold"
|
1112 |
+
msgstr "Журнал уровня порога"
|
1113 |
+
|
1114 |
+
#: includes/admin-metaboxes.php:20
|
1115 |
+
msgid "Save Feed Source"
|
1116 |
+
msgstr "Сохранить источник ленты"
|
1117 |
+
|
1118 |
+
#: includes/admin-metaboxes.php:29
|
1119 |
+
msgid "Feed Preview"
|
1120 |
+
msgstr "Предварительный просмотр ленты"
|
1121 |
+
|
1122 |
+
#: includes/admin-metaboxes.php:38
|
1123 |
+
msgid "Feed Processing"
|
1124 |
+
msgstr "Обработка ленты"
|
1125 |
+
|
1126 |
+
#: includes/admin-metaboxes.php:48
|
1127 |
+
msgid "Like This Plugin?"
|
1128 |
+
msgstr "Нравится этот плагин?"
|
1129 |
+
|
1130 |
+
#: includes/admin-metaboxes.php:58
|
1131 |
+
msgid "Feed Source Details"
|
1132 |
+
msgstr "Данные источника ленты"
|
1133 |
+
|
1134 |
+
#: includes/admin-metaboxes.php:91 includes/opml-importer.php:196
|
1135 |
+
#: includes/opml-importer.php:227
|
1136 |
+
msgid "URL"
|
1137 |
+
msgstr "Адрес"
|
1138 |
+
|
1139 |
+
#: includes/admin-metaboxes.php:99
|
1140 |
+
msgid "Limit"
|
1141 |
+
msgstr "Лимит"
|
1142 |
+
|
1143 |
+
#: includes/admin-metaboxes.php:105
|
1144 |
+
msgid "Link to enclosure"
|
1145 |
+
msgstr "Ссылка на приложение"
|
1146 |
+
|
1147 |
+
#: includes/admin-metaboxes.php:111 includes/admin-options.php:86
|
1148 |
+
msgid "Unique titles only"
|
1149 |
+
msgstr ""
|
1150 |
+
|
1151 |
+
#: includes/admin-metaboxes.php:223 includes/admin-metaboxes.php:498
|
1152 |
+
#: includes/admin-options.php:826 includes/admin-options.php:928
|
1153 |
+
msgid "Default"
|
1154 |
+
msgstr "По умолчанию"
|
1155 |
+
|
1156 |
+
#: includes/admin-metaboxes.php:393
|
1157 |
+
#, php-format
|
1158 |
+
msgid "Latest %1$s feed items out of %2$s available from %3$s"
|
1159 |
+
msgstr "Последние %1$s пункты ленты из %2$s доступных из %3$s"
|
1160 |
+
|
1161 |
+
#: includes/admin-metaboxes.php:400 includes/scripts.php:87
|
1162 |
+
msgid "ago"
|
1163 |
+
msgstr "назад"
|
1164 |
+
|
1165 |
+
#: includes/admin-metaboxes.php:402
|
1166 |
+
msgid "No Date"
|
1167 |
+
msgstr "Нет даты"
|
1168 |
+
|
1169 |
+
#: includes/admin-metaboxes.php:423
|
1170 |
+
msgid ""
|
1171 |
+
"<strong>Invalid feed URL</strong> - Double check the feed source URL setting "
|
1172 |
+
"above."
|
1173 |
+
msgstr ""
|
1174 |
+
"<strong>Некорректный адрес ленты</strong> - Еще раз проверьте настройки "
|
1175 |
+
"адреса ленты выше."
|
1176 |
+
|
1177 |
+
#: includes/admin-metaboxes.php:427
|
1178 |
+
#, php-format
|
1179 |
+
msgid ""
|
1180 |
+
"Not sure where to find the RSS feed on a website? <a target=\"_blank\" href="
|
1181 |
+
"\"%1$s\">Click here</a> for a visual guide. "
|
1182 |
+
msgstr ""
|
1183 |
+
"Не знаете, где найти RSS-канал на сайте? <a target=\"_blank\" href=\"%1$s"
|
1184 |
+
"\">Нажмите здесь</a> для наглядного руководства. "
|
1185 |
+
|
1186 |
+
#: includes/admin-metaboxes.php:432
|
1187 |
+
msgid "No feed URL defined yet"
|
1188 |
+
msgstr "Еще не указано ни одного адреса ленты"
|
1189 |
+
|
1190 |
+
#: includes/admin-metaboxes.php:457
|
1191 |
+
msgid "Force the feed"
|
1192 |
+
msgstr "Принудительно обновить ленту"
|
1193 |
+
|
1194 |
+
#: includes/admin-metaboxes.php:493
|
1195 |
+
msgid "Active"
|
1196 |
+
msgstr "Активный"
|
1197 |
+
|
1198 |
+
#: includes/admin-metaboxes.php:618
|
1199 |
+
msgid "Need help?"
|
1200 |
+
msgstr "Нужна помощь?"
|
1201 |
+
|
1202 |
+
#: includes/admin-metaboxes.php:620
|
1203 |
+
msgid "Check out the support forum"
|
1204 |
+
msgstr "Посетите справочный форум"
|
1205 |
+
|
1206 |
+
#: includes/admin-metaboxes.php:623
|
1207 |
+
msgid "Suggest a new feature"
|
1208 |
+
msgstr "Предложить новую функцию"
|
1209 |
+
|
1210 |
+
#: includes/admin-metaboxes.php:636
|
1211 |
+
msgid "Give it a 5 star rating on WordPress.org"
|
1212 |
+
msgstr "Оцените плагин по 5-бальной шкале на WordPress.org"
|
1213 |
+
|
1214 |
+
#: includes/admin-metaboxes.php:637
|
1215 |
+
msgid "Donate a token of your appreciation"
|
1216 |
+
msgstr "Сделать пожертоввание"
|
1217 |
+
|
1218 |
+
#: includes/admin-metaboxes.php:641
|
1219 |
+
msgid "Check out the Premium Extensions:"
|
1220 |
+
msgstr "Ознакомьтесь с премиальными дополнениями:"
|
1221 |
+
|
1222 |
+
#: includes/admin-metaboxes.php:662
|
1223 |
+
msgid "Follow WP Mayor on Twitter."
|
1224 |
+
msgstr "Поддержите WP Mayor в Twitter."
|
1225 |
+
|
1226 |
+
#: includes/admin-metaboxes.php:663
|
1227 |
+
msgid "Like WP Mayor on Facebook."
|
1228 |
+
msgstr "Поставьте лайк WP Mayor на Facebook."
|
1229 |
+
|
1230 |
+
#: includes/admin-options.php:56
|
1231 |
+
msgid "General plugin settings"
|
1232 |
+
msgstr "Общие настройки плагина"
|
1233 |
+
|
1234 |
+
#: includes/admin-options.php:57
|
1235 |
+
msgid "General display settings"
|
1236 |
+
msgstr "Общие настройки отображения"
|
1237 |
+
|
1238 |
+
#: includes/admin-options.php:58
|
1239 |
+
msgid "Source display settings"
|
1240 |
+
msgstr "Настройки отображения лент"
|
1241 |
+
|
1242 |
+
#: includes/admin-options.php:59
|
1243 |
+
msgid "Date display settings"
|
1244 |
+
msgstr "Настройки отображения дат"
|
1245 |
+
|
1246 |
+
#: includes/admin-options.php:60
|
1247 |
+
msgid "Styles"
|
1248 |
+
msgstr "Стили"
|
1249 |
+
|
1250 |
+
#: includes/admin-options.php:70
|
1251 |
+
msgid "Limit feed items by age"
|
1252 |
+
msgstr "Ограничение пунктов лент по возрасту"
|
1253 |
+
|
1254 |
+
#: includes/admin-options.php:74
|
1255 |
+
msgid "Limit feed items stored"
|
1256 |
+
msgstr "Максимальный срок хранения пунктов лент"
|
1257 |
+
|
1258 |
+
#: includes/admin-options.php:78
|
1259 |
+
msgid "Limit feed items per feed"
|
1260 |
+
msgstr "Максимальное количество пунктов в ленте"
|
1261 |
+
|
1262 |
+
#: includes/admin-options.php:82
|
1263 |
+
msgid "Feed processing interval"
|
1264 |
+
msgstr "Интервал обновления ленты"
|
1265 |
+
|
1266 |
+
#: includes/admin-options.php:90
|
1267 |
+
msgid "Custom feed URL"
|
1268 |
+
msgstr "Адрес пользовательской ленты"
|
1269 |
+
|
1270 |
+
#: includes/admin-options.php:94
|
1271 |
+
msgid "Custom feed Title"
|
1272 |
+
msgstr "Название пользовательской ленты"
|
1273 |
+
|
1274 |
+
#: includes/admin-options.php:98
|
1275 |
+
msgid "Custom feed limit"
|
1276 |
+
msgstr "Лимит пользовательской ленты"
|
1277 |
+
|
1278 |
+
#: includes/admin-options.php:102
|
1279 |
+
msgid "Anonymous tracking"
|
1280 |
+
msgstr "Анонимное отслеживание"
|
1281 |
+
|
1282 |
+
#: includes/admin-options.php:110
|
1283 |
+
msgid "Link title"
|
1284 |
+
msgstr "Ссылка в названии"
|
1285 |
+
|
1286 |
+
#: includes/admin-options.php:114
|
1287 |
+
msgid "Title maximum length"
|
1288 |
+
msgstr "Максимальная длина названия"
|
1289 |
+
|
1290 |
+
#: includes/admin-options.php:122
|
1291 |
+
msgid "Show authors"
|
1292 |
+
msgstr "Показать авторов"
|
1293 |
+
|
1294 |
+
#: includes/admin-options.php:126
|
1295 |
+
msgid "For video feed items use"
|
1296 |
+
msgstr "Для видео в пунктах ленты использовать"
|
1297 |
+
|
1298 |
+
#: includes/admin-options.php:130
|
1299 |
+
msgid "Pagination type"
|
1300 |
+
msgstr "Тип пагинации"
|
1301 |
+
|
1302 |
+
#: includes/admin-options.php:134
|
1303 |
+
msgid "Feed display limit"
|
1304 |
+
msgstr "Максимальное число отображаемых пунктов в ленте"
|
1305 |
+
|
1306 |
+
#: includes/admin-options.php:138
|
1307 |
+
msgid "Open links behaviour"
|
1308 |
+
msgstr "Открывать ссылки"
|
1309 |
+
|
1310 |
+
#: includes/admin-options.php:142
|
1311 |
+
msgid "Set links as nofollow"
|
1312 |
+
msgstr "Присвоить ссылкам тег nofollow"
|
1313 |
+
|
1314 |
+
#: includes/admin-options.php:150
|
1315 |
+
msgid "Show source"
|
1316 |
+
msgstr "Показать источник"
|
1317 |
+
|
1318 |
+
#: includes/admin-options.php:154
|
1319 |
+
msgid "Text preceding source"
|
1320 |
+
msgstr "Текст перед источником"
|
1321 |
+
|
1322 |
+
#: includes/admin-options.php:158
|
1323 |
+
msgid "Link source"
|
1324 |
+
msgstr "Ссылка на источник"
|
1325 |
+
|
1326 |
+
#: includes/admin-options.php:166
|
1327 |
+
msgid "Show date"
|
1328 |
+
msgstr "Показывать дату"
|
1329 |
+
|
1330 |
+
#: includes/admin-options.php:170
|
1331 |
+
msgid "Text preceding date"
|
1332 |
+
msgstr "Текст перед датой"
|
1333 |
+
|
1334 |
+
#: includes/admin-options.php:174
|
1335 |
+
msgid "Date format"
|
1336 |
+
msgstr "Формат даты"
|
1337 |
+
|
1338 |
+
#: includes/admin-options.php:178
|
1339 |
+
msgid "Time ago format"
|
1340 |
+
msgstr "Формат отображения времени \"назад\""
|
1341 |
+
|
1342 |
+
#: includes/admin-options.php:185
|
1343 |
+
msgid "Disable Styles"
|
1344 |
+
msgstr "Запретить стили"
|
1345 |
+
|
1346 |
+
#: includes/admin-options.php:347 includes/admin.php:41
|
1347 |
+
msgid "WP RSS Aggregator Settings"
|
1348 |
+
msgstr "Настройки WP RSS Aggregator"
|
1349 |
+
|
1350 |
+
#: includes/admin-options.php:357
|
1351 |
+
msgid "General"
|
1352 |
+
msgstr "Общие"
|
1353 |
+
|
1354 |
+
#: includes/admin-options.php:361
|
1355 |
+
msgid "Licenses"
|
1356 |
+
msgstr "Лицензии"
|
1357 |
+
|
1358 |
+
#: includes/admin-options.php:401
|
1359 |
+
msgid "Save Settings"
|
1360 |
+
msgstr "Сохранить настройки"
|
1361 |
+
|
1362 |
+
#: includes/admin-options.php:415
|
1363 |
+
msgid "These are the general settings for WP RSS Aggregator."
|
1364 |
+
msgstr "Это общие настройки WP RSS Aggregator."
|
1365 |
+
|
1366 |
+
#: includes/admin-options.php:424
|
1367 |
+
msgid ""
|
1368 |
+
"In this section you can find some general options that control how the feed "
|
1369 |
+
"items are displayed."
|
1370 |
+
msgstr ""
|
1371 |
+
"В этом разделе вы можете найти некоторые общие настройки, которые "
|
1372 |
+
"определяют, как отображаются пункты лент."
|
1373 |
+
|
1374 |
+
#: includes/admin-options.php:434
|
1375 |
+
msgid "Options that control how the feed item's source is displayed."
|
1376 |
+
msgstr "Опции, определяющие, как будет отображаться источник пункта ленты."
|
1377 |
+
|
1378 |
+
#: includes/admin-options.php:443
|
1379 |
+
msgid "Options that control how the feed item's date is displayed."
|
1380 |
+
msgstr "Опции, определяющие, как будет отображаться дата пунктов лент."
|
1381 |
+
|
1382 |
+
#: includes/admin-options.php:452
|
1383 |
+
msgid ""
|
1384 |
+
"If you would like to disable all styles used in this plugin, tick the "
|
1385 |
+
"checkbox."
|
1386 |
+
msgstr ""
|
1387 |
+
"Если вы хотите отключить все стили, используемые в этом плагине, поставьте "
|
1388 |
+
"галочку."
|
1389 |
+
|
1390 |
+
#: includes/admin-options.php:461
|
1391 |
+
msgid "Set your security reset code, in case of any errors."
|
1392 |
+
msgstr "Установите код сброса, используемый в случае каких-либо ошибок."
|
1393 |
+
|
1394 |
+
#: includes/admin-options.php:470
|
1395 |
+
msgid "Participate in helping us make the plugin better."
|
1396 |
+
msgstr "Принять участие в улучшении плагина."
|
1397 |
+
|
1398 |
+
#: includes/admin-options.php:497
|
1399 |
+
msgid "Original page link"
|
1400 |
+
msgstr "Ссылка на оригинал"
|
1401 |
+
|
1402 |
+
#: includes/admin-options.php:498
|
1403 |
+
msgid "Embedded video player link"
|
1404 |
+
msgstr "Ссылка на встроенный видеопроигрыватель"
|
1405 |
+
|
1406 |
+
#: includes/admin-options.php:512
|
1407 |
+
msgid "This will not affect already imported feed items."
|
1408 |
+
msgstr "Это не повлияет на ранее импортированные пункты лент."
|
1409 |
+
|
1410 |
+
#: includes/admin-options.php:527
|
1411 |
+
msgid "Lightbox"
|
1412 |
+
msgstr "Лайтбокс"
|
1413 |
+
|
1414 |
+
#: includes/admin-options.php:528 includes/update.php:195
|
1415 |
+
msgid "New window"
|
1416 |
+
msgstr "Новое окно"
|
1417 |
+
|
1418 |
+
#: includes/admin-options.php:529
|
1419 |
+
msgid "Self"
|
1420 |
+
msgstr "Это же окно"
|
1421 |
+
|
1422 |
+
#: includes/admin-options.php:567
|
1423 |
+
msgid "PHP Date Format Reference"
|
1424 |
+
msgstr "Формат даты PHP"
|
1425 |
+
|
1426 |
+
#: includes/admin-options.php:595 includes/admin-options.php:706
|
1427 |
+
msgid "No limit"
|
1428 |
+
msgstr "Без ограничений"
|
1429 |
+
|
1430 |
+
#: includes/admin-options.php:677
|
1431 |
+
msgid "\"Older posts\" and \"Newer posts\" links"
|
1432 |
+
msgstr "Ссылки на \"Предыдущие записи\" и \"Следующие записи\""
|
1433 |
+
|
1434 |
+
#: includes/admin-options.php:678
|
1435 |
+
msgid "Page numbers with \"Next\" and \"Previous\" page links"
|
1436 |
+
msgstr "Номера страниц со ссылками \"Следующая\" и \"Предыдущая\""
|
1437 |
+
|
1438 |
+
#: includes/admin-options.php:740
|
1439 |
+
msgid "No Limit"
|
1440 |
+
msgstr "Без ограничений"
|
1441 |
+
|
1442 |
+
#: includes/admin-options.php:852
|
1443 |
+
msgid "Generate Random Code"
|
1444 |
+
msgstr "Сгенерировать произвольный код"
|
1445 |
+
|
1446 |
+
#: includes/admin-options.php:857
|
1447 |
+
msgid ""
|
1448 |
+
"Enter the code to use to securely reset the plugin and deactivate it. Be "
|
1449 |
+
"sure to save this code somewhere safe."
|
1450 |
+
msgstr ""
|
1451 |
+
"Введите код, используемый для сброса и отключения плагина. Обязательно "
|
1452 |
+
"сохраните этот код в надежном месте."
|
1453 |
+
|
1454 |
+
#: includes/admin-options.php:863
|
1455 |
+
msgid ""
|
1456 |
+
"Leave this empty to disable the secure reset function.<br/>\n"
|
1457 |
+
" You use this code by adding any of the following to any URL on "
|
1458 |
+
"your site."
|
1459 |
+
msgstr ""
|
1460 |
+
"Оставьте поле пустым, чтобы отключить функцию сброса.\n"
|
1461 |
+
" Вы можете использовать этот код, добавив его к любому адресу на "
|
1462 |
+
"вашем сайте."
|
1463 |
+
|
1464 |
+
#: includes/admin-options.php:866
|
1465 |
+
msgid "Resets your WP RSS Aggregator settings"
|
1466 |
+
msgstr "Сброс настроек WP RSS Aggregator"
|
1467 |
+
|
1468 |
+
#: includes/admin-options.php:867
|
1469 |
+
msgid "Deactivates WP RSS Aggregator"
|
1470 |
+
msgstr "Деактивировать WP RSS Aggregator"
|
1471 |
+
|
1472 |
+
#: includes/admin-options.php:868
|
1473 |
+
msgid "Does both of the above"
|
1474 |
+
msgstr "Использовать оба варианта выше"
|
1475 |
+
|
1476 |
+
#: includes/admin-options.php:872
|
1477 |
+
msgid ""
|
1478 |
+
"Use the above actions only when absolutely necessary, or when instructed to "
|
1479 |
+
"by support staff."
|
1480 |
+
msgstr ""
|
1481 |
+
"Используйте вышепредставленные действия только тогда, когда это абсолютно "
|
1482 |
+
"необходимо, или когда проинструктированы службой поддержки."
|
1483 |
+
|
1484 |
+
#: includes/admin-options.php:888
|
1485 |
+
msgid ""
|
1486 |
+
"Please help us improve WP RSS Aggregator by allowing us to gather anonymous "
|
1487 |
+
"usage statistics. No sensitive data is collected."
|
1488 |
+
msgstr ""
|
1489 |
+
"Пожалуйста, помогите нам улучшить WP RSS агрегатор, позволяя нам собирать "
|
1490 |
+
"анонимную статистику использования. Конфиденциальные данные не собираются."
|
1491 |
+
|
1492 |
+
#: includes/admin-options.php:943
|
1493 |
+
msgid "now"
|
1494 |
+
msgstr "сейчас"
|
1495 |
+
|
1496 |
+
#: includes/admin-statistics.php:149
|
1497 |
+
msgid "<b>WP RSS Aggregator:</b> Data report sent!"
|
1498 |
+
msgstr "<b>WP RSS Aggregator:</b> Данные отправлены!"
|
1499 |
+
|
1500 |
+
#: includes/admin-welcome.php:32
|
1501 |
+
#, php-format
|
1502 |
+
msgid "Welcome to WP RSS Aggregator %1$s!"
|
1503 |
+
msgstr "Добро пожаловать в WP RSS Aggregator %1$s!"
|
1504 |
+
|
1505 |
+
#: includes/admin-welcome.php:34
|
1506 |
+
msgid "Thank you for upgrading to the latest version!"
|
1507 |
+
msgstr "Спасибо за обновление до последней версии!"
|
1508 |
+
|
1509 |
+
#: includes/admin-welcome.php:42
|
1510 |
+
msgid "What's New?"
|
1511 |
+
msgstr "Что нового?"
|
1512 |
+
|
1513 |
+
#: includes/admin-welcome.php:66
|
1514 |
+
msgid "Bulk Adding Feed Sources"
|
1515 |
+
msgstr "Массовое добавление источников лент"
|
1516 |
+
|
1517 |
+
#: includes/admin-welcome.php:69
|
1518 |
+
#, php-format
|
1519 |
+
msgid ""
|
1520 |
+
"The new bulk adding option saves you time by allowing you to enter your feed "
|
1521 |
+
"names and URLs all at once.\n"
|
1522 |
+
"\t\t\t\t\t\t\t\t\t\tSimply type in or paste your feed sources, and with the "
|
1523 |
+
"press of a button, your feed sources will instantly be created!\n"
|
1524 |
+
"\t\t\t\t\t\t\t\t\t\tTry it now from the <a href=\"%1$s\">Import & "
|
1525 |
+
"Export</a> page."
|
1526 |
+
msgstr ""
|
1527 |
+
"Новая опция массового добавления экономит ваше время, позволяя указать сразу "
|
1528 |
+
"все названия и адреса лент.\n"
|
1529 |
+
"\t\t\t\t\t\t\t\t\t\tПросто введите или вставьте источники лент и, с нажатием "
|
1530 |
+
"кнопки, ваши ленты будут немедленно созданы!\n"
|
1531 |
+
"\t\t\t\t\t\t\t\t\t\tПопробуйте прямо сейчас на странице <a href=\"%1$s"
|
1532 |
+
"\">Импорт и экспорт</a>."
|
1533 |
+
|
1534 |
+
#: includes/admin-welcome.php:74
|
1535 |
+
msgid "Feed Item Blacklist"
|
1536 |
+
msgstr "Черный список пунктов лент"
|
1537 |
+
|
1538 |
+
#: includes/admin-welcome.php:78
|
1539 |
+
msgid "Trash undesired items"
|
1540 |
+
msgstr "Удалить нежелательные пункты"
|
1541 |
+
|
1542 |
+
#: includes/admin-welcome.php:79
|
1543 |
+
msgid ""
|
1544 |
+
"Did a feed import an item that you do not wish to keep? Up till now, "
|
1545 |
+
"<strong>WP RSS Aggregator</strong>only allowed you to trash the item and "
|
1546 |
+
"keep it in your trash."
|
1547 |
+
msgstr ""
|
1548 |
+
"Продолжать импорт пункта ленты, который вы не хотите хранить? До сих пор "
|
1549 |
+
"<strong>WP RSS Aggregator</strong> разрешал только отправлять пункты в "
|
1550 |
+
"корзину и держать их там."
|
1551 |
+
|
1552 |
+
#: includes/admin-welcome.php:84
|
1553 |
+
msgid "Blacklist Trashed Items"
|
1554 |
+
msgstr "Черный список пунктов в корзине"
|
1555 |
+
|
1556 |
+
#: includes/admin-welcome.php:85
|
1557 |
+
msgid ""
|
1558 |
+
"Permanently deleting the item will cause it to be re-imported. Using the new "
|
1559 |
+
"<strong>Delete Permanently & Blacklist</strong> option, the feed item is "
|
1560 |
+
"deleted and added to the <strong>Blacklist</strong>."
|
1561 |
+
msgstr ""
|
1562 |
+
"Постоянное удаление пункта приведет к его повторному импорту. Используйте "
|
1563 |
+
"новую опцию <strong>Удалить и внести в черный список</strong>, чтобы удалить "
|
1564 |
+
"пункт и внести его в черный список."
|
1565 |
+
|
1566 |
+
#: includes/admin-welcome.php:91
|
1567 |
+
msgid "The Blacklist"
|
1568 |
+
msgstr "Черный список"
|
1569 |
+
|
1570 |
+
#: includes/admin-welcome.php:92
|
1571 |
+
msgid ""
|
1572 |
+
"This is your list of unwanted feed item links. Any item in this list will be "
|
1573 |
+
"ignored by <strong>WP RSS Aggregator</strong> in the future, meaning it "
|
1574 |
+
"won't be imported from any of your feed sources.and added to the "
|
1575 |
+
"<strong>Blacklist</strong>."
|
1576 |
+
msgstr ""
|
1577 |
+
"Это ваш список нежелательных пунктов лент. Любой пункт из этого списка будет "
|
1578 |
+
"игнорироваться <strong>WP RSS Aggregator</strong> в будущем, то есть он не "
|
1579 |
+
"будет импортироваться из любых источников лент и будет добавлен в "
|
1580 |
+
"<strong>Черный список</strong>."
|
1581 |
+
|
1582 |
+
#: includes/admin-welcome.php:100
|
1583 |
+
msgid "Check out our add-ons:"
|
1584 |
+
msgstr "Ознакомьтесь с нашими дополнениями:"
|
1585 |
+
|
1586 |
+
#: includes/admin-welcome.php:104
|
1587 |
+
msgid "Excerpts & Thumbnails"
|
1588 |
+
msgstr "Отрывки и эскизы"
|
1589 |
+
|
1590 |
+
#: includes/admin-welcome.php:111
|
1591 |
+
#, php-format
|
1592 |
+
msgid ""
|
1593 |
+
"More information about add-ons can be found on our website <a href=\"%1$s\">"
|
1594 |
+
"%2$s</a>"
|
1595 |
+
msgstr ""
|
1596 |
+
"Больше информации о наших дополнениях вы можете найти на нашем сайте <a href="
|
1597 |
+
"\"%1$s\">%2$s</a>"
|
1598 |
+
|
1599 |
+
#: includes/admin-welcome.php:117
|
1600 |
+
#, php-format
|
1601 |
+
msgid "Changelog for v%1$s"
|
1602 |
+
msgstr "Список изменений для v%1$s"
|
1603 |
+
|
1604 |
+
#: includes/admin-welcome.php:123
|
1605 |
+
#, php-format
|
1606 |
+
msgid ""
|
1607 |
+
"Need functionality not already available in core or the add-ons? You can <a "
|
1608 |
+
"href=\"%1$s\">suggest new features</a>!"
|
1609 |
+
msgstr ""
|
1610 |
+
"Необходимые вам функции не доступны в плагине или дополнениях? Вы можете <a "
|
1611 |
+
"href=\"%1$s\">предложить новые функции</a>!"
|
1612 |
+
|
1613 |
+
#: includes/admin-welcome.php:134
|
1614 |
+
msgid ""
|
1615 |
+
"Fetch RSS feed excerpts to your blog and add thumbnails! Perfect for adding "
|
1616 |
+
"some life and color to your feeds."
|
1617 |
+
msgstr ""
|
1618 |
+
"Добавляет возможность отображения эскизов и отрывков. Идеально подходит для "
|
1619 |
+
"добавления ярких красок в вашу ленту."
|
1620 |
+
|
1621 |
+
#: includes/admin-welcome.php:144
|
1622 |
+
msgid ""
|
1623 |
+
"Organize your feeds into custom categories. Filter feed items by category "
|
1624 |
+
"and make custom WordPress feeds for specific categories."
|
1625 |
+
msgstr ""
|
1626 |
+
"Структурируйте ленты в категориях. Фильтруйте пункты по категории и сделайте "
|
1627 |
+
"пользовательский rss-каналы для определенных категорий."
|
1628 |
+
|
1629 |
+
#: includes/admin-welcome.php:154
|
1630 |
+
msgid ""
|
1631 |
+
"Import and store feeds that contain specific keywords in either the title or "
|
1632 |
+
"their content. Control what gets imported to your blog."
|
1633 |
+
msgstr ""
|
1634 |
+
"Импортируйте и храните ленты, которые содержат определенные ключевые слова в "
|
1635 |
+
"названии или содержании. Полностью контролируйте то, что импортируется в ваш "
|
1636 |
+
"блог."
|
1637 |
+
|
1638 |
+
#: includes/admin-welcome.php:164
|
1639 |
+
msgid "Go to WP RSS Aggregator settings"
|
1640 |
+
msgstr "Перейти к настройкам WP RSS Aggregator"
|
1641 |
+
|
1642 |
+
#: includes/admin.php:40
|
1643 |
+
msgid "Export & Import Settings"
|
1644 |
+
msgstr "Настройки экспорта и импорта"
|
1645 |
+
|
1646 |
+
#: includes/admin.php:40
|
1647 |
+
msgid "Import & Export"
|
1648 |
+
msgstr "Импорт и Экспорт"
|
1649 |
+
|
1650 |
+
#: includes/admin.php:41 includes/admin.php:111
|
1651 |
+
msgid "Settings"
|
1652 |
+
msgstr "Настройки"
|
1653 |
+
|
1654 |
+
#: includes/admin.php:94
|
1655 |
+
msgid "Name this feed (e.g. WP Mayor)"
|
1656 |
+
msgstr "Название этой ленты (например, WP Mayor)"
|
1657 |
+
|
1658 |
+
#: includes/admin.php:139
|
1659 |
+
#, php-format
|
1660 |
+
msgid ""
|
1661 |
+
"<b>WP RSS Aggregator</b>: There are saved licenses that have not yet been "
|
1662 |
+
"activated. Go to the <a href=\"%1$s\">License page</a> to activate them."
|
1663 |
+
msgstr ""
|
1664 |
+
"<b>WP RSS Aggregator</b>: Это сохраненные лицензии, которые еще не были "
|
1665 |
+
"активированы. Перейдите на <a href=\"%1$s\">страницу лицензий</a> для их "
|
1666 |
+
"активации."
|
1667 |
+
|
1668 |
+
#: includes/cpt-feeds.php:82
|
1669 |
+
#, php-format
|
1670 |
+
msgid "%1$s » %2$s Feed"
|
1671 |
+
msgstr "%1$s » %2$s лента"
|
1672 |
+
|
1673 |
+
#: includes/cpt-feeds.php:83
|
1674 |
+
#, php-format
|
1675 |
+
msgid "<link rel=\"%1$s\" type=\"%2$s\" title=\"%3$s\" href=\"%4$s\" />\n"
|
1676 |
+
msgstr "<link rel=\"%1$s\" type=\"%2$s\" title=\"%3$s\" href=\"%4$s\" />\n"
|
1677 |
+
|
1678 |
+
#: includes/cron-jobs.php:64
|
1679 |
+
msgid "Once every five minutes"
|
1680 |
+
msgstr "Раз в 5 минут"
|
1681 |
+
|
1682 |
+
#: includes/cron-jobs.php:68
|
1683 |
+
msgid "Once every ten minutes"
|
1684 |
+
msgstr "Раз в 10 минут"
|
1685 |
+
|
1686 |
+
#: includes/cron-jobs.php:72
|
1687 |
+
msgid "Once every fifteen minutes"
|
1688 |
+
msgstr "Раз в 15 минут"
|
1689 |
+
|
1690 |
+
#: includes/cron-jobs.php:76
|
1691 |
+
msgid "Once every thirty minutes"
|
1692 |
+
msgstr "Раз в тридцать минут"
|
1693 |
+
|
1694 |
+
#: includes/cron-jobs.php:80
|
1695 |
+
msgid "Once every two hours"
|
1696 |
+
msgstr "Раз в два часа"
|
1697 |
+
|
1698 |
+
#: includes/custom-post-types.php:22
|
1699 |
+
msgid "Feed Source"
|
1700 |
+
msgstr "Источник ленты"
|
1701 |
+
|
1702 |
+
#: includes/custom-post-types.php:23
|
1703 |
+
msgid "Add New"
|
1704 |
+
msgstr "Добавить новый"
|
1705 |
+
|
1706 |
+
#: includes/custom-post-types.php:25
|
1707 |
+
msgid "Add New Feed Source"
|
1708 |
+
msgstr "Добавить новый источник ленты"
|
1709 |
+
|
1710 |
+
#: includes/custom-post-types.php:26
|
1711 |
+
msgid "Edit Feed Source"
|
1712 |
+
msgstr "Редактировать источник ленты"
|
1713 |
+
|
1714 |
+
#: includes/custom-post-types.php:27
|
1715 |
+
msgid "New Feed Source"
|
1716 |
+
msgstr "Новый источник ленты"
|
1717 |
+
|
1718 |
+
#: includes/custom-post-types.php:28
|
1719 |
+
msgid "View Feed Source"
|
1720 |
+
msgstr "Просмотр источника ленты"
|
1721 |
+
|
1722 |
+
#: includes/custom-post-types.php:29
|
1723 |
+
msgid "Search Feeds"
|
1724 |
+
msgstr "Поиск лент"
|
1725 |
+
|
1726 |
+
#: includes/custom-post-types.php:30
|
1727 |
+
msgid "No Feed Sources Found"
|
1728 |
+
msgstr "Не найдено источников лент"
|
1729 |
+
|
1730 |
+
#: includes/custom-post-types.php:31
|
1731 |
+
msgid "No Feed Sources Found In Trash"
|
1732 |
+
msgstr "Не найдено источников лент в корзине"
|
1733 |
+
|
1734 |
+
#: includes/custom-post-types.php:32
|
1735 |
+
msgid "RSS Aggregator"
|
1736 |
+
msgstr "RSS Aggregator"
|
1737 |
+
|
1738 |
+
#: includes/custom-post-types.php:72 includes/custom-post-types.php:74
|
1739 |
+
msgid "Feed Items"
|
1740 |
+
msgstr "Пункты лент"
|
1741 |
+
|
1742 |
+
#: includes/custom-post-types.php:73
|
1743 |
+
msgid "Feed Item"
|
1744 |
+
msgstr "Пункт ленты"
|
1745 |
+
|
1746 |
+
#: includes/custom-post-types.php:75
|
1747 |
+
msgid "View Feed Items"
|
1748 |
+
msgstr "Просмотр пунктов лент"
|
1749 |
+
|
1750 |
+
#: includes/custom-post-types.php:76
|
1751 |
+
msgid "Search Feed Items"
|
1752 |
+
msgstr "Поиск пунктов лент"
|
1753 |
+
|
1754 |
+
#: includes/custom-post-types.php:77
|
1755 |
+
msgid "No Feed Items Found"
|
1756 |
+
msgstr "Не найдено пунктов лент"
|
1757 |
+
|
1758 |
+
#: includes/custom-post-types.php:78
|
1759 |
+
msgid "No Feed Items Found In Trash"
|
1760 |
+
msgstr "Не найдено пунктов лент в корзине"
|
1761 |
+
|
1762 |
+
#: includes/feed-access.php:119
|
1763 |
+
msgid "Certificate Path"
|
1764 |
+
msgstr ""
|
1765 |
+
|
1766 |
+
#: includes/feed-blacklist.php:129
|
1767 |
+
msgid "The item you are trying to blacklist does not exist"
|
1768 |
+
msgstr "Пункта, который вы пытаетесь добавить в черный список, не существует"
|
1769 |
+
|
1770 |
+
#: includes/feed-blacklist.php:134
|
1771 |
+
msgid "The item you are trying to blacklist is not valid!"
|
1772 |
+
msgstr "Пункт, который вы пытаетесь добавить в черный список, некорректный"
|
1773 |
+
|
1774 |
+
#: includes/feed-blacklist.php:196 includes/feed-blacklist.php:197
|
1775 |
+
#: includes/feed-blacklist.php:198
|
1776 |
+
msgid "Blacklist"
|
1777 |
+
msgstr "Черный список"
|
1778 |
+
|
1779 |
+
#: includes/feed-blacklist.php:199
|
1780 |
+
msgid "Search Blacklist"
|
1781 |
+
msgstr "Поиск черных списков"
|
1782 |
+
|
1783 |
+
#: includes/feed-blacklist.php:200
|
1784 |
+
msgid "You do not have any items blacklisted yet!"
|
1785 |
+
msgstr "У вас нет пунктов в черном списке!"
|
1786 |
+
|
1787 |
+
#: includes/feed-blacklist.php:242
|
1788 |
+
msgid "Delete Permanently & Blacklist"
|
1789 |
+
msgstr "Удалить навсегда и добавить в черный список"
|
1790 |
+
|
1791 |
+
#: includes/feed-blacklist.php:248
|
1792 |
+
msgid ""
|
1793 |
+
"The item will be deleted permanently, and its permalink will be recorded in "
|
1794 |
+
"the blacklist"
|
1795 |
+
msgstr ""
|
1796 |
+
"Пункт будет удален навсегда и его постоянная ссылка будет добавлена в черный "
|
1797 |
+
"список"
|
1798 |
+
|
1799 |
+
#: includes/feed-blacklist.php:261
|
1800 |
+
msgid "Remove from blacklist"
|
1801 |
+
msgstr "Удалить из черного списка"
|
1802 |
+
|
1803 |
+
#: includes/feed-blacklist.php:321 includes/opml-importer.php:195
|
1804 |
+
#: includes/opml-importer.php:226
|
1805 |
+
msgid "Title"
|
1806 |
+
msgstr "Название"
|
1807 |
+
|
1808 |
+
#: includes/feed-display.php:359
|
1809 |
+
msgid "No feed items found."
|
1810 |
+
msgstr "Пункты лент не найдены"
|
1811 |
+
|
1812 |
+
#: includes/feed-display.php:409
|
1813 |
+
msgid "Older posts"
|
1814 |
+
msgstr "Предыдущие записи"
|
1815 |
+
|
1816 |
+
#: includes/feed-display.php:410
|
1817 |
+
msgid "Newer posts"
|
1818 |
+
msgstr "Следующие записи"
|
1819 |
+
|
1820 |
+
#: includes/feed-importing.php:289
|
1821 |
+
#, php-format
|
1822 |
+
msgid "Failed to fetch the RSS feed. Error: %s"
|
1823 |
+
msgstr "Не удалось получить RSS-ленту. Ошибка: %s"
|
1824 |
+
|
1825 |
+
#: includes/feed-importing.php:678
|
1826 |
+
#, php-format
|
1827 |
+
msgid ""
|
1828 |
+
"The PHP script timed out while importing an item from this feed, after %d "
|
1829 |
+
"seconds."
|
1830 |
+
msgstr "Истекло время импорта пункта из этой ленты после %d секунд."
|
1831 |
+
|
1832 |
+
#: includes/feed-states.php:110
|
1833 |
+
msgid "The feed sources have been activated!"
|
1834 |
+
msgstr "Источники ленты были активированы!"
|
1835 |
+
|
1836 |
+
#: includes/feed-states.php:124
|
1837 |
+
msgid "The feed sources have been paused!!"
|
1838 |
+
msgstr "Источники ленты были приостановлены!"
|
1839 |
+
|
1840 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:177
|
1841 |
+
#, php-format
|
1842 |
+
msgid ""
|
1843 |
+
"There is a new version of %1$s available. <a target=\"_blank\" class="
|
1844 |
+
"\"thickbox\" href=\"%2$s\">View version %3$s details</a>."
|
1845 |
+
msgstr ""
|
1846 |
+
"Доступна новая версия %1$s. <a target=\"_blank\" class=\"thickbox\" href="
|
1847 |
+
"\"%2$s\">Посмотреть детали версии %3$s</a>."
|
1848 |
+
|
1849 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:184
|
1850 |
+
#, php-format
|
1851 |
+
msgid ""
|
1852 |
+
"There is a new version of %1$s available. <a target=\"_blank\" class="
|
1853 |
+
"\"thickbox\" href=\"%2$s\">View version %3$s details</a> or <a href=\"%4$s"
|
1854 |
+
"\">update now</a>."
|
1855 |
+
msgstr ""
|
1856 |
+
"Доступна новая версия %1$s. <a target=\"_blank\" class=\"thickbox\" href="
|
1857 |
+
"\"%2$s\">Посмотреть детали версии %3$s</a> или <a href=\"%4$s\">обновить "
|
1858 |
+
"сейчас</a>."
|
1859 |
+
|
1860 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:324
|
1861 |
+
msgid "You do not have permission to install plugin updates"
|
1862 |
+
msgstr "У вас нет прав на установку обновлений плагина"
|
1863 |
+
|
1864 |
+
#: includes/libraries/EDD_licensing/EDD_SL_Plugin_Updater.php:324
|
1865 |
+
msgid "Error"
|
1866 |
+
msgstr "Ошибка"
|
1867 |
+
|
1868 |
+
#: includes/licensing.php:303
|
1869 |
+
#, php-format
|
1870 |
+
msgid ""
|
1871 |
+
"Remember to <a href=\"%s\">enter your plugin license code</a> for the WP RSS "
|
1872 |
+
"Aggregator <b>%s</b> add-on to benefit from updates and support."
|
1873 |
+
msgstr ""
|
1874 |
+
"Не забудьте <a href=\"%s\">ввести ваш код лицензии плагина</a> для "
|
1875 |
+
"дополнения WP RSS Aggregator <b>%s</b> для получения обновлений и поддержки."
|
1876 |
+
|
1877 |
+
#: includes/licensing.php:329
|
1878 |
+
#, php-format
|
1879 |
+
msgid ""
|
1880 |
+
"<a href=\"%s\">Save 30%% on your license renewal</a> for the WP RSS "
|
1881 |
+
"Aggregator <b>%s</b> add-on and continue receiving updates and support."
|
1882 |
+
msgstr ""
|
1883 |
+
"<a href=\"%s\">Сэкономьте 30%% на продлении вашей лицензии</a> для "
|
1884 |
+
"дополнения WP RSS Aggregator <b>%s</b> и продолжайте получать обновления и "
|
1885 |
+
"поддержку."
|
1886 |
+
|
1887 |
+
#: includes/licensing.php:364 includes/licensing.php:450
|
1888 |
+
msgid "No addon ID"
|
1889 |
+
msgstr "Нет ID дополнения"
|
1890 |
+
|
1891 |
+
#: includes/licensing.php:372 includes/licensing.php:414
|
1892 |
+
msgid "Invalid event specified"
|
1893 |
+
msgstr "Указано недопустимое событие"
|
1894 |
+
|
1895 |
+
#: includes/licensing.php:375
|
1896 |
+
msgid "No event specified"
|
1897 |
+
msgstr "Не указаны события"
|
1898 |
+
|
1899 |
+
#: includes/licensing.php:382
|
1900 |
+
msgid "No license"
|
1901 |
+
msgstr "Нет лицензии"
|
1902 |
+
|
1903 |
+
#: includes/licensing.php:391
|
1904 |
+
msgid "Bad nonce"
|
1905 |
+
msgstr "Неверный номер"
|
1906 |
+
|
1907 |
+
#: includes/licensing.php:394
|
1908 |
+
msgid "No nonce"
|
1909 |
+
msgstr "Нет номера"
|
1910 |
+
|
1911 |
+
#: includes/licensing.php:490
|
1912 |
+
msgid "License"
|
1913 |
+
msgstr "Лицензия"
|
1914 |
+
|
1915 |
+
#: includes/licensing.php:497
|
1916 |
+
msgid "License Key"
|
1917 |
+
msgstr "Лицензионный ключ"
|
1918 |
+
|
1919 |
+
#: includes/licensing.php:506
|
1920 |
+
msgid "Activate License"
|
1921 |
+
msgstr "Активировать лицензию"
|
1922 |
+
|
1923 |
+
#: includes/licensing.php:540
|
1924 |
+
msgid "Enter your license key"
|
1925 |
+
msgstr "Введите ваш лицензионный ключ"
|
1926 |
+
|
1927 |
+
#: includes/licensing.php:565
|
1928 |
+
msgid "Status"
|
1929 |
+
msgstr "Статус"
|
1930 |
+
|
1931 |
+
#: includes/licensing.php:596
|
1932 |
+
msgid ""
|
1933 |
+
"No activations left. Click here to manage the sites you've activated "
|
1934 |
+
"licenses on."
|
1935 |
+
msgstr ""
|
1936 |
+
"Не осталось доступных активаций. Нажмите здесь для управления "
|
1937 |
+
"активированными лицензиями на ваших сайтах."
|
1938 |
+
|
1939 |
+
#: includes/licensing.php:601
|
1940 |
+
msgid "Renew your license to continue receiving updates and support."
|
1941 |
+
msgstr ""
|
1942 |
+
"Продлите вашу лицензию для продолжения получения обновлений и поддержки."
|
1943 |
+
|
1944 |
+
#: includes/licensing.php:604
|
1945 |
+
msgid "Activations"
|
1946 |
+
msgstr "Активации"
|
1947 |
+
|
1948 |
+
#: includes/licensing.php:607
|
1949 |
+
msgid "Expires on"
|
1950 |
+
msgstr "Истекает"
|
1951 |
+
|
1952 |
+
#: includes/licensing.php:610
|
1953 |
+
msgid "Registered to"
|
1954 |
+
msgstr "Зарегистрирована на"
|
1955 |
+
|
1956 |
+
#: includes/licensing.php:615
|
1957 |
+
msgid ""
|
1958 |
+
"Failed to get license information. This is a temporary problem. Check your "
|
1959 |
+
"internet connection and try again later."
|
1960 |
+
msgstr ""
|
1961 |
+
"Не удалось получить информацию о лицензии. Это временная проблема. Проверьте "
|
1962 |
+
"подключение к Интернету и повторите попытку позже."
|
1963 |
+
|
1964 |
+
#: includes/misc-functions.php:312
|
1965 |
+
msgid "…"
|
1966 |
+
msgstr "…"
|
1967 |
+
|
1968 |
+
#: includes/opml-importer.php:65
|
1969 |
+
msgid "Import OPML"
|
1970 |
+
msgstr "Импорт OPML"
|
1971 |
+
|
1972 |
+
#: includes/opml-importer.php:75
|
1973 |
+
msgid "Howdy! Import your feeds here from an OPML (.xml) export file."
|
1974 |
+
msgstr "Привет! Импортируйте ваши ленты здесь из файла экспорта OPML (.xml)."
|
1975 |
+
|
1976 |
+
#: includes/opml-importer.php:76
|
1977 |
+
msgid "Click the button below, choose your file, and click 'Upload'."
|
1978 |
+
msgstr "Нажмите на кнопку ниже, выберите файл и нажмите кнопку \"Загрузить\"."
|
1979 |
+
|
1980 |
+
#: includes/opml-importer.php:77
|
1981 |
+
msgid "We will take care of the rest."
|
1982 |
+
msgstr "Мы позаботимся об остальном."
|
1983 |
+
|
1984 |
+
#: includes/opml-importer.php:108
|
1985 |
+
msgid "Sorry, an error has been encountered."
|
1986 |
+
msgstr "Извините, была найдена ошибка."
|
1987 |
+
|
1988 |
+
#: includes/opml-importer.php:113
|
1989 |
+
msgid "Sorry, it seems your uploaded file has been misplaced!"
|
1990 |
+
msgstr "Извините, кажется, ваш загруженный файл не был распознан!"
|
1991 |
+
|
1992 |
+
#: includes/opml-importer.php:114
|
1993 |
+
msgid "The uploaded file could not be found at "
|
1994 |
+
msgstr "Загруженный файл не может быть найден в"
|
1995 |
+
|
1996 |
+
#: includes/opml-importer.php:115
|
1997 |
+
msgid "It is likely that this was caused by a permissions problem."
|
1998 |
+
msgstr "Вполне вероятно, что это было вызвано проблемой допусков и разрешений."
|
1999 |
+
|
2000 |
+
#: includes/opml-importer.php:187
|
2001 |
+
msgid "Feeds were imported successfully!"
|
2002 |
+
msgstr "Ленты были успешно импортированы!"
|
2003 |
+
|
2004 |
+
#: includes/opml-importer.php:194 includes/opml-importer.php:225
|
2005 |
+
msgid "ID"
|
2006 |
+
msgstr "ID"
|
2007 |
+
|
2008 |
+
#: includes/opml-importer.php:257
|
2009 |
+
msgid "WP RSS OPML"
|
2010 |
+
msgstr "WP RSS OPML"
|
2011 |
+
|
2012 |
+
#: includes/opml-importer.php:258
|
2013 |
+
msgid "Import Feeds from an OPML file into WP RSS Aggregator"
|
2014 |
+
msgstr "Импорт ленты из OPML файла в WP RSS Aggregator"
|
2015 |
+
|
2016 |
+
#: includes/scripts.php:31 includes/scripts.php:54
|
2017 |
+
msgid "Please wait ..."
|
2018 |
+
msgstr "Пожалуйста, подождите ..."
|
2019 |
+
|
2020 |
+
#: includes/scripts.php:52
|
2021 |
+
msgid "Failed to import"
|
2022 |
+
msgstr "Ошибка импорта"
|
2023 |
+
|
2024 |
+
#: includes/scripts.php:53
|
2025 |
+
msgid "Items are importing"
|
2026 |
+
msgstr "Импорт пунктов"
|
2027 |
+
|
2028 |
+
#: includes/scripts.php:55
|
2029 |
+
msgid "Bulk Add"
|
2030 |
+
msgstr "Массовое добавление"
|
2031 |
+
|
2032 |
+
#: includes/scripts.php:56
|
2033 |
+
msgid "OK"
|
2034 |
+
msgstr "OK"
|
2035 |
+
|
2036 |
+
#: includes/scripts.php:57
|
2037 |
+
msgid "Cancel"
|
2038 |
+
msgstr "Отмена"
|
2039 |
+
|
2040 |
+
#: includes/scripts.php:58
|
2041 |
+
msgid ""
|
2042 |
+
"The feed items listed here will be disregarded when importing new items from "
|
2043 |
+
"your feed sources."
|
2044 |
+
msgstr ""
|
2045 |
+
"Пункты лент, перечисленные здесь, будут учитываться при импорте новых "
|
2046 |
+
"пунктов из ваших источников лент."
|
2047 |
+
|
2048 |
+
#: includes/scripts.php:59
|
2049 |
+
msgid "Remove selected from Blacklist"
|
2050 |
+
msgstr "Удалить выбранные из черного списка"
|
2051 |
+
|
2052 |
+
#: includes/scripts.php:72
|
2053 |
+
msgid "Activate"
|
2054 |
+
msgstr "Активировать"
|
2055 |
+
|
2056 |
+
#: includes/scripts.php:73
|
2057 |
+
msgid "Pause"
|
2058 |
+
msgstr "Пауза"
|
2059 |
+
|
2060 |
+
#: includes/scripts.php:79
|
2061 |
+
msgid "Move to Trash"
|
2062 |
+
msgstr ""
|
2063 |
+
|
2064 |
+
#: includes/scripts.php:107
|
2065 |
+
msgid "Activating..."
|
2066 |
+
msgstr "Активация..."
|
2067 |
+
|
2068 |
+
#: includes/scripts.php:108
|
2069 |
+
msgid "Deactivating..."
|
2070 |
+
msgstr "Деактивация..."
|
2071 |
+
|
2072 |
+
#: includes/scripts.php:115
|
2073 |
+
msgid "Sending..."
|
2074 |
+
msgstr ""
|
2075 |
+
|
2076 |
+
#: includes/scripts.php:116
|
2077 |
+
#, php-format
|
2078 |
+
msgid ""
|
2079 |
+
"There was an error sending the form. Please use the <a href=\"%s\">contact "
|
2080 |
+
"form on our site.</a>"
|
2081 |
+
msgstr ""
|
2082 |
+
|
2083 |
+
#: includes/scripts.php:117
|
2084 |
+
msgid ""
|
2085 |
+
"Your message has been sent and we'll send you a confirmation e-mail when we "
|
2086 |
+
"receive it."
|
2087 |
+
msgstr ""
|
2088 |
+
|
2089 |
+
#: includes/system-info.php:27
|
2090 |
+
msgid "System Information"
|
2091 |
+
msgstr "Системная информация"
|
2092 |
+
|
2093 |
+
#: includes/system-info.php:33
|
2094 |
+
msgid ""
|
2095 |
+
"To copy the system info, click below then press Ctrl + C (PC) or Cmd + C "
|
2096 |
+
"(Mac)."
|
2097 |
+
msgstr ""
|
2098 |
+
"Чтобы скопировать системные данные, нажмите ниже, а затем нажмите Ctrl + C "
|
2099 |
+
"(PC) или Cmd + C (Mac)."
|
2100 |
+
|
2101 |
+
#: includes/system-info.php:38
|
2102 |
+
msgid "Download System Info File"
|
2103 |
+
msgstr "Скачать файл с системной информацией"
|
2104 |
+
|
2105 |
+
#: includes/system-info.php:71
|
2106 |
+
msgid "Could not determine database driver version"
|
2107 |
+
msgstr ""
|
2108 |
+
|
2109 |
+
#: includes/system-info.php:100
|
2110 |
+
msgid "Your server supports fsockopen."
|
2111 |
+
msgstr "Ваш сервер поддерживает fsockopen."
|
2112 |
+
|
2113 |
+
#: includes/system-info.php:100
|
2114 |
+
msgid "Your server does not support fsockopen."
|
2115 |
+
msgstr "Ваш сервер не поддерживает fsockopen."
|
2116 |
+
|
2117 |
+
#: includes/update.php:67
|
2118 |
+
msgid "No Follow"
|
2119 |
+
msgstr "Не поддерживать"
|
2120 |
+
|
2121 |
+
#: includes/update.php:69
|
2122 |
+
msgid "Follow"
|
2123 |
+
msgstr "Поддерживать"
|
2124 |
+
|
2125 |
+
#: wp-rss-aggregator.php:272
|
2126 |
+
msgid "Help improve WP RSS Aggregator"
|
2127 |
+
msgstr "Помогите улучшить WP RSS Aggregator"
|
2128 |
+
|
2129 |
+
#: wp-rss-aggregator.php:272
|
2130 |
+
msgid ""
|
2131 |
+
"You've just installed WP RSS Aggregator. Please helps us improve it by "
|
2132 |
+
"allowing us to gather anonymous usage stats so we know which configurations, "
|
2133 |
+
"plugins and themes to test with."
|
2134 |
+
msgstr ""
|
2135 |
+
"Вы только что установили WP RSS Aggregator. Пожалуйста, помогите нам "
|
2136 |
+
"улучшить его, позволив нам собирать анонимную статистику использования, "
|
2137 |
+
"чтобы мы знали, на каких конфигурациях, плагинах и темах тестировать плагин."
|
2138 |
+
|
2139 |
+
#: wp-rss-aggregator.php:279
|
2140 |
+
msgid "Do not allow tracking"
|
2141 |
+
msgstr "Запретить отслеживать"
|
2142 |
+
|
2143 |
+
#: wp-rss-aggregator.php:280
|
2144 |
+
msgid "Allow tracking"
|
2145 |
+
msgstr "Разрешить отслеживать"
|
2146 |
+
|
2147 |
+
#: wp-rss-aggregator.php:406
|
2148 |
+
msgid "This plugin requires WordPress version 3.3 or higher."
|
2149 |
+
msgstr "Этот плагин требует WordPress версии 3.3 или выше."
|
2150 |
+
|
2151 |
+
#~ msgid "Support Forums - Core (free version) Plugin Users Only"
|
2152 |
+
#~ msgstr "Справочный форум - для пользователей бесплатной версии плагина"
|
2153 |
+
|
2154 |
+
#~ msgid "Email Ticketing System - Premium Add-on Users Only"
|
2155 |
+
#~ msgstr "Система тикетов - только для пользователей премиальных дополнений"
|
readme.txt
CHANGED
@@ -1,10 +1,10 @@
|
|
1 |
=== WP RSS Aggregator ===
|
2 |
-
Contributors: jeangalea, Mekku, xedin.unknown, markzahra, doytch
|
3 |
Plugin URI: http://www.wprssaggregator.com
|
4 |
Tags: rss, feeds, aggregation, rss to post, autoblog aggregator, rss import, feed aggregator, rss aggregator, multiple rss feeds, multi rss feeds, rss multi importer, feed import, feed import, multiple feed import, feed aggregation, rss feader, feed reader, feed to post, multiple feeds, multi feed importer, multi feed import, multi import, autoblogging, autoblogger, rss feeder, rss post importer, autoblog aggregator, autoblog, autopost, content curation, feedwordpress, wp rss multi import, hungryfeed, wp-o-matic, rss feed, rss feed to post, rss retriever, syndication
|
5 |
Requires at least: 3.3
|
6 |
-
Tested up to: 4.
|
7 |
-
Stable tag: 4.7.
|
8 |
License: GPLv2 or later
|
9 |
The no.1 RSS feed importer for WordPress. Premium add-ons available for more functionality.
|
10 |
|
@@ -169,6 +169,14 @@ The full documentation section can be found on the [WP RSS Aggregator website](w
|
|
169 |
|
170 |
== Changelog ==
|
171 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
172 |
= 4.7.2 (2015-06-30) =
|
173 |
* Enhanced: Copyright updated.
|
174 |
* Fixed bug: Word trimming no longer adds extra closing tags at the end.
|
1 |
=== WP RSS Aggregator ===
|
2 |
+
Contributors: jeangalea, Mekku, xedin.unknown, markzahra, doytch, chiragswadia
|
3 |
Plugin URI: http://www.wprssaggregator.com
|
4 |
Tags: rss, feeds, aggregation, rss to post, autoblog aggregator, rss import, feed aggregator, rss aggregator, multiple rss feeds, multi rss feeds, rss multi importer, feed import, feed import, multiple feed import, feed aggregation, rss feader, feed reader, feed to post, multiple feeds, multi feed importer, multi feed import, multi import, autoblogging, autoblogger, rss feeder, rss post importer, autoblog aggregator, autoblog, autopost, content curation, feedwordpress, wp rss multi import, hungryfeed, wp-o-matic, rss feed, rss feed to post, rss retriever, syndication
|
5 |
Requires at least: 3.3
|
6 |
+
Tested up to: 4.2.3
|
7 |
+
Stable tag: 4.7.3
|
8 |
License: GPLv2 or later
|
9 |
The no.1 RSS feed importer for WordPress. Premium add-ons available for more functionality.
|
10 |
|
169 |
|
170 |
== Changelog ==
|
171 |
|
172 |
+
= 4.7.3 (2015-08-04) =
|
173 |
+
* Enhanced: Core now implements an image cache logic.
|
174 |
+
* Enhanced: Add-ons on the "Add-ons" page now have an installed-but-inactive status.
|
175 |
+
* Enhanced: Google Alerts permalinks will now be normalized.
|
176 |
+
* Enhanced: Russian translation added.
|
177 |
+
* Fixed bug: Inline help (tooltips) translations now work.
|
178 |
+
* Fixed bug: Link to the Feed to Post add-on on the welcome page is no longer broken.
|
179 |
+
|
180 |
= 4.7.2 (2015-06-30) =
|
181 |
* Enhanced: Copyright updated.
|
182 |
* Fixed bug: Word trimming no longer adds extra closing tags at the end.
|
templates/help-tooltip-content.php
CHANGED
@@ -10,5 +10,5 @@
|
|
10 |
*/
|
11 |
?>
|
12 |
<div class="<?php echo $vars['tooltip_content_class'] ?>" id="<?php echo $vars['tooltip_id_prefix'] . $vars['tooltip_id'] ?>">
|
13 |
-
<?php echo isset( $vars['text_domain'] ) ?
|
14 |
</div>
|
10 |
*/
|
11 |
?>
|
12 |
<div class="<?php echo $vars['tooltip_content_class'] ?>" id="<?php echo $vars['tooltip_id_prefix'] . $vars['tooltip_id'] ?>">
|
13 |
+
<?php echo isset( $vars['text_domain'] ) ? wpautop( $vars['tooltip_text'] ) : $vars['tooltip_text'] ?>
|
14 |
</div>
|
wp-rss-aggregator.php
CHANGED
@@ -3,7 +3,7 @@
|
|
3 |
Plugin Name: WP RSS Aggregator
|
4 |
Plugin URI: http://www.wprssaggregator.com
|
5 |
Description: Imports and aggregates multiple RSS Feeds using SimplePie
|
6 |
-
Version: 4.7.
|
7 |
Author: Jean Galea
|
8 |
Author URI: http://www.wprssaggregator.com
|
9 |
License: GPLv2
|
@@ -21,7 +21,7 @@
|
|
21 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
22 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
23 |
GNU General Public License for more details.
|
24 |
-
|
25 |
You should have received a copy of the GNU General Public License
|
26 |
along with this program; if not, write to the Free Software
|
27 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
@@ -29,7 +29,7 @@
|
|
29 |
|
30 |
/**
|
31 |
* @package WPRSSAggregator
|
32 |
-
* @version 4.7.
|
33 |
* @since 1.0
|
34 |
* @author Jean Galea <info@wprssaggregator.com>
|
35 |
* @copyright Copyright (c) 2012-2015, Jean Galea
|
@@ -41,55 +41,55 @@
|
|
41 |
* Define constants used by the plugin.
|
42 |
*/
|
43 |
|
44 |
-
// Set the version number of the plugin.
|
45 |
if( !defined( 'WPRSS_VERSION' ) )
|
46 |
-
define( 'WPRSS_VERSION', '4.7.
|
47 |
|
48 |
-
// Set the database version number of the plugin.
|
49 |
if( !defined( 'WPRSS_DB_VERSION' ) )
|
50 |
define( 'WPRSS_DB_VERSION', 13 );
|
51 |
|
52 |
-
// Set the plugin prefix
|
53 |
if( !defined( 'WPRSS_PREFIX' ) )
|
54 |
-
define( 'WPRSS_PREFIX', 'wprss', true );
|
55 |
|
56 |
-
// Set the plugin prefix
|
57 |
if( !defined( 'WPRSS_FILE_CONSTANT' ) )
|
58 |
define( 'WPRSS_FILE_CONSTANT', __FILE__, true );
|
59 |
|
60 |
-
// Set constant path to the plugin directory.
|
61 |
if( !defined( 'WPRSS_DIR' ) )
|
62 |
-
define( 'WPRSS_DIR', plugin_dir_path( __FILE__ ) );
|
63 |
|
64 |
-
// Set constant URI to the plugin URL.
|
65 |
if( !defined( 'WPRSS_URI' ) )
|
66 |
-
define( 'WPRSS_URI', plugin_dir_url( __FILE__ ) );
|
67 |
|
68 |
-
// Set the constant path to the plugin's javascript directory.
|
69 |
if( !defined( 'WPRSS_JS' ) )
|
70 |
define( 'WPRSS_JS', WPRSS_URI . trailingslashit( 'js' ), true );
|
71 |
|
72 |
-
// Set the constant path to the plugin's CSS directory.
|
73 |
if( !defined( 'WPRSS_CSS' ) )
|
74 |
define( 'WPRSS_CSS', WPRSS_URI . trailingslashit( 'css' ), true );
|
75 |
|
76 |
-
// Set the constant path to the plugin's images directory.
|
77 |
if( !defined( 'WPRSS_IMG' ) )
|
78 |
define( 'WPRSS_IMG', WPRSS_URI . trailingslashit( 'images' ), true );
|
79 |
|
80 |
-
// Set the constant path to the plugin's includes directory.
|
81 |
if( !defined( 'WPRSS_INC' ) )
|
82 |
define( 'WPRSS_INC', WPRSS_DIR . trailingslashit( 'includes' ), true );
|
83 |
|
84 |
if( !defined( 'WPRSS_LANG' ) )
|
85 |
define( 'WPRSS_LANG', WPRSS_DIR . trailingslashit( 'languages' ), true );
|
86 |
-
|
87 |
// Set the constant path to the plugin's log file.
|
88 |
if( !defined( 'WPRSS_LOG_FILE' ) )
|
89 |
define( 'WPRSS_LOG_FILE', WPRSS_DIR . 'log', true );
|
90 |
if( !defined( 'WPRSS_LOG_FILE_EXT' ) )
|
91 |
define( 'WPRSS_LOG_FILE_EXT', '.txt', true );
|
92 |
-
|
93 |
if ( !defined('WPRSS_SL_STORE_URL') ) {
|
94 |
define( 'WPRSS_SL_STORE_URL', 'http://www.wprssaggregator.com', TRUE );
|
95 |
}
|
@@ -112,20 +112,20 @@
|
|
112 |
*/
|
113 |
|
114 |
/* Load install, upgrade and migration code. */
|
115 |
-
require_once ( WPRSS_INC . 'update.php' );
|
116 |
-
|
117 |
/* Load the shortcodes functions file. */
|
118 |
require_once ( WPRSS_INC . 'shortcodes.php' );
|
119 |
|
120 |
/* Load the custom post types and taxonomies. */
|
121 |
-
require_once ( WPRSS_INC . 'custom-post-types.php' );
|
122 |
|
123 |
/* Load the file for setting capabilities of our post types */
|
124 |
-
require_once ( WPRSS_INC . 'roles-capabilities.php' );
|
125 |
|
126 |
/* Load the feed processing functions file */
|
127 |
require_once ( WPRSS_INC . 'feed-processing.php' );
|
128 |
-
|
129 |
/* Load the blacklist functions file */
|
130 |
require_once ( WPRSS_INC . 'feed-blacklist.php' );
|
131 |
|
@@ -133,34 +133,34 @@
|
|
133 |
require_once ( WPRSS_INC . 'feed-importing.php' );
|
134 |
|
135 |
/* Load the feed states functions file */
|
136 |
-
require_once ( WPRSS_INC . 'feed-states.php' );
|
137 |
|
138 |
/* Load the feed display functions file */
|
139 |
-
require_once ( WPRSS_INC . 'feed-display.php' );
|
140 |
|
141 |
/* Load the custom feed file */
|
142 |
-
require_once ( WPRSS_INC . 'custom-feed.php' );
|
143 |
|
144 |
/* Load the custom post type feeds file */
|
145 |
require_once ( WPRSS_INC . 'cpt-feeds.php' );
|
146 |
|
147 |
/* Load the cron job scheduling functions. */
|
148 |
-
require_once ( WPRSS_INC . 'cron-jobs.php' );
|
149 |
|
150 |
/* Load the admin functions file. */
|
151 |
-
require_once ( WPRSS_INC . 'admin.php' );
|
152 |
|
153 |
/* Load the admin options functions file. */
|
154 |
-
require_once ( WPRSS_INC . 'admin-options.php' );
|
155 |
|
156 |
/* Load the settings import/export file */
|
157 |
-
require_once ( WPRSS_INC . 'admin-import-export.php' );
|
158 |
|
159 |
/* Load the debugging file */
|
160 |
-
require_once ( WPRSS_INC . 'system-info.php' );
|
161 |
|
162 |
/* Load the miscellaneous functions file */
|
163 |
-
require_once ( WPRSS_INC . 'misc-functions.php' );
|
164 |
|
165 |
/* Load the OPML Class file */
|
166 |
require_once ( WPRSS_INC . 'OPML.php' );
|
@@ -170,34 +170,34 @@
|
|
170 |
|
171 |
/* Load the admin debugging page file */
|
172 |
require_once ( WPRSS_INC . 'admin-debugging.php' );
|
173 |
-
|
174 |
/* Load the addons page file */
|
175 |
-
require_once ( WPRSS_INC . 'admin-addons.php' );
|
176 |
|
177 |
/* Load the admin display-related functions */
|
178 |
-
require_once ( WPRSS_INC . 'admin-display.php' );
|
179 |
|
180 |
/* Load the admin metaboxes functions */
|
181 |
-
require_once ( WPRSS_INC . 'admin-metaboxes.php' );
|
182 |
|
183 |
/* Load the scripts loading functions file */
|
184 |
-
require_once ( WPRSS_INC . 'scripts.php' );
|
185 |
|
186 |
/* Load the Ajax notification file */
|
187 |
-
require_once ( WPRSS_INC . 'admin-ajax-notice.php' );
|
188 |
-
|
189 |
/* Load the dashboard welcome screen file */
|
190 |
-
require_once ( WPRSS_INC . 'admin-dashboard.php' );
|
191 |
|
192 |
/* Load the logging class */
|
193 |
-
require_once ( WPRSS_INC . 'roles-capabilities.php' );
|
194 |
|
195 |
/* Load the security reset file */
|
196 |
require_once ( WPRSS_INC . 'secure-reset.php' );
|
197 |
|
198 |
/* Load the licensing file */
|
199 |
require_once ( WPRSS_INC . 'licensing.php' );
|
200 |
-
|
201 |
/* Load the admin editor file */
|
202 |
require_once ( WPRSS_INC . 'admin-editor.php' );
|
203 |
|
@@ -209,7 +209,7 @@
|
|
209 |
|
210 |
// Load the logging functions file
|
211 |
require_once ( WPRSS_INC . 'admin-log.php' );
|
212 |
-
|
213 |
if ( !defined( 'WPRSS_LOG_LEVEL' ) )
|
214 |
define( 'WPRSS_LOG_LEVEL', WPRSS_LOG_LEVEL_ERROR );
|
215 |
|
@@ -218,20 +218,20 @@
|
|
218 |
|
219 |
/* Load the admin metaboxes help file */
|
220 |
require_once ( WPRSS_INC . 'admin-help-metaboxes.php' );
|
221 |
-
|
222 |
/* Load the admin settings help file */
|
223 |
require_once ( WPRSS_INC . 'admin-help-settings.php' );
|
224 |
-
|
225 |
/* SimplePie */
|
226 |
require_once ( ABSPATH . WPINC . '/class-feed.php' );
|
227 |
-
|
228 |
/* Access to feed */
|
229 |
require_once ( WPRSS_INC . 'feed-access.php' );
|
230 |
|
231 |
/* Load the fallbacks for mbstring */
|
232 |
require_once ( WPRSS_INC . 'fallback-mbstring.php' );
|
233 |
|
234 |
-
|
235 |
register_activation_hook( __FILE__ , 'wprss_activate' );
|
236 |
register_deactivation_hook( __FILE__ , 'wprss_deactivate' );
|
237 |
|
@@ -242,7 +242,7 @@
|
|
242 |
*
|
243 |
* @since 1.0
|
244 |
* @return void
|
245 |
-
*/
|
246 |
function wprss_init() {
|
247 |
//If user requested to download system info, generate the download.
|
248 |
if ( isset( $_POST['wprss-sysinfo'] ) ) {
|
@@ -256,7 +256,7 @@
|
|
256 |
add_filter( 'wprss_admin_pointers', 'wprss_check_tracking_notice' );
|
257 |
/**
|
258 |
* Сhecks the tracking option and if not set, shows a pointer with opt in and out options.
|
259 |
-
*
|
260 |
* @since 3.6
|
261 |
*/
|
262 |
function wprss_check_tracking_notice( $pointers ){
|
@@ -292,7 +292,7 @@
|
|
292 |
add_action( 'admin_enqueue_scripts', 'wprss_prepare_pointers', 1000 );
|
293 |
/**
|
294 |
* Prepare the admin pointers
|
295 |
-
*
|
296 |
* @since 3.6
|
297 |
*/
|
298 |
function wprss_prepare_pointers() {
|
@@ -332,10 +332,10 @@
|
|
332 |
|
333 |
// Add pointers style to queue.
|
334 |
wp_enqueue_style( 'wp-pointer' );
|
335 |
-
|
336 |
// Add pointers script to queue. Add custom script.
|
337 |
wp_enqueue_script( 'wprss-pointers', WPRSS_JS . 'pointers.js', array( 'wp-pointer' ) );
|
338 |
-
|
339 |
// Add pointer options to script.
|
340 |
wp_localize_script( 'wprss-pointers', 'wprssPointers', $valid_pointers );
|
341 |
|
@@ -345,7 +345,7 @@
|
|
345 |
|
346 |
/**
|
347 |
* Print the scripts for the admin pointers
|
348 |
-
*
|
349 |
* @since 3.6
|
350 |
*/
|
351 |
function wprss_footer_pointer_scripts() {
|
@@ -398,13 +398,13 @@
|
|
398 |
*
|
399 |
* @since 1.0
|
400 |
* @return void
|
401 |
-
*/
|
402 |
function wprss_activate() {
|
403 |
/* Prevents activation of plugin if compatible version of WordPress not found */
|
404 |
if ( version_compare( get_bloginfo( 'version' ), '3.3', '<' ) ) {
|
405 |
deactivate_plugins ( basename( __FILE__ )); // Deactivate plugin
|
406 |
wp_die( __( 'This plugin requires WordPress version 3.3 or higher.' ), 'WP RSS Aggregator', array( 'back_link' => true ) );
|
407 |
-
}
|
408 |
wprss_settings_initialize();
|
409 |
flush_rewrite_rules();
|
410 |
wprss_schedule_fetch_all_feeds_cron();
|
@@ -416,7 +416,7 @@
|
|
416 |
// Sets a transient to trigger a redirect upon completion of activation procedure
|
417 |
set_transient( '_wprss_activation_redirect', true, 30 );
|
418 |
}
|
419 |
-
|
420 |
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
421 |
// Check if WordPress SEO is activate, if yes set its options for hiding the metaboxes on the wprss_feed and wprss_feed_item screens
|
422 |
if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) {
|
@@ -426,17 +426,17 @@
|
|
426 |
$wpseo_titles['hideeditbox-wprss_feed_item'] = TRUE;
|
427 |
}
|
428 |
update_option( 'wpseo_titles', $wpseo_titles );
|
429 |
-
}
|
430 |
-
}
|
431 |
|
432 |
|
433 |
/**
|
434 |
* Plugin deactivation procedure
|
435 |
*
|
436 |
* @since 1.0
|
437 |
-
*/
|
438 |
function wprss_deactivate() {
|
439 |
-
// On deactivation remove the cron job
|
440 |
wp_clear_scheduled_hook( 'wprss_fetch_all_feeds_hook' );
|
441 |
wp_clear_scheduled_hook( 'wprss_truncate_posts_hook' );
|
442 |
// Uschedule cron jobs for all feed sources
|
@@ -458,11 +458,11 @@
|
|
458 |
add_action( 'plugins_loaded', 'wprss_load_textdomain' );
|
459 |
/**
|
460 |
* Loads the plugin's translated strings.
|
461 |
-
*
|
462 |
* @since 2.1
|
463 |
-
* @return void
|
464 |
-
*/
|
465 |
-
function wprss_load_textdomain() {
|
466 |
load_plugin_textdomain( WPRSS_TEXT_DOMAIN, false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
|
467 |
}
|
468 |
|
@@ -485,28 +485,28 @@
|
|
485 |
function wprss_disable() {
|
486 |
return FALSE;
|
487 |
}
|
488 |
-
|
489 |
/**
|
490 |
* Gets the timezone string that corresponds to the timezone set for
|
491 |
* this site. If the timezone is a UTC offset, or if it is not set, still
|
492 |
* returns a valid timezone string.
|
493 |
* However, if no actual zone exists in the configured offset, the result
|
494 |
* may be rounded up, or failure.
|
495 |
-
*
|
496 |
* @see http://pl1.php.net/manual/en/function.timezone-name-from-abbr.php
|
497 |
* @return string A valid timezone string, or false on failure.
|
498 |
*/
|
499 |
function wprss_get_timezone_string() {
|
500 |
$tzstring = get_option( 'timezone_string' );
|
501 |
|
502 |
-
if ( empty($tzstring) ) {
|
503 |
$offset = ( int )get_option( 'gmt_offset' );
|
504 |
$tzstring = timezone_name_from_abbr( '', $offset * 60 * 60, 1 );
|
505 |
}
|
506 |
|
507 |
return $tzstring;
|
508 |
}
|
509 |
-
|
510 |
|
511 |
/**
|
512 |
* @see http://wordpress.stackexchange.com/questions/94755/converting-timestamps-to-local-time-with-date-l18n#135049
|
@@ -517,7 +517,7 @@
|
|
517 |
function wprss_local_date_i18n( $timestamp = null, $format = null ) {
|
518 |
$format = is_null( $format ) ? get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) : $format;
|
519 |
$timestamp = $timestamp ? $timestamp : time();
|
520 |
-
|
521 |
$timezone_str = wprss_get_timezone_string() ? wprss_get_timezone_string() : 'UTC';
|
522 |
$timezone = new DateTimeZone( $timezone_str );
|
523 |
|
@@ -531,7 +531,7 @@
|
|
531 |
$date->setTime( $datetime['hours'] , $datetime['minutes'] , $datetime['seconds'] );
|
532 |
}
|
533 |
$date_str = $date->format( 'Y-m-d H:i:s' );
|
534 |
-
|
535 |
// Pretend the local date is UTC to get the timestamp
|
536 |
// to pass to date_i18n().
|
537 |
$utc_timezone = new DateTimeZone( 'UTC' );
|
@@ -540,12 +540,12 @@
|
|
540 |
|
541 |
return date_i18n( $format, $timestamp, true );
|
542 |
}
|
543 |
-
|
544 |
|
545 |
/**
|
546 |
* Gets an internationalized and localized datetime string, defaulting
|
547 |
* to WP RSS format.
|
548 |
-
*
|
549 |
* @see wprss_local_date_i18n;
|
550 |
* @param string|null $format Format to use. Default: Wordpress date and time format.
|
551 |
* @param int|null $timestamp The timestamp to localize. Default: time().
|
@@ -553,6 +553,6 @@
|
|
553 |
*/
|
554 |
function wprss_date_i18n( $timestamp = null, $format = null ) {
|
555 |
$format = is_null( $format ) ? wprss_get_general_setting( 'date_format' ) : $format;
|
556 |
-
|
557 |
return wprss_local_date_i18n( $timestamp, $format );
|
558 |
}
|
3 |
Plugin Name: WP RSS Aggregator
|
4 |
Plugin URI: http://www.wprssaggregator.com
|
5 |
Description: Imports and aggregates multiple RSS Feeds using SimplePie
|
6 |
+
Version: 4.7.3
|
7 |
Author: Jean Galea
|
8 |
Author URI: http://www.wprssaggregator.com
|
9 |
License: GPLv2
|
21 |
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
22 |
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
23 |
GNU General Public License for more details.
|
24 |
+
|
25 |
You should have received a copy of the GNU General Public License
|
26 |
along with this program; if not, write to the Free Software
|
27 |
Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
29 |
|
30 |
/**
|
31 |
* @package WPRSSAggregator
|
32 |
+
* @version 4.7.3
|
33 |
* @since 1.0
|
34 |
* @author Jean Galea <info@wprssaggregator.com>
|
35 |
* @copyright Copyright (c) 2012-2015, Jean Galea
|
41 |
* Define constants used by the plugin.
|
42 |
*/
|
43 |
|
44 |
+
// Set the version number of the plugin.
|
45 |
if( !defined( 'WPRSS_VERSION' ) )
|
46 |
+
define( 'WPRSS_VERSION', '4.7.3', true );
|
47 |
|
48 |
+
// Set the database version number of the plugin.
|
49 |
if( !defined( 'WPRSS_DB_VERSION' ) )
|
50 |
define( 'WPRSS_DB_VERSION', 13 );
|
51 |
|
52 |
+
// Set the plugin prefix
|
53 |
if( !defined( 'WPRSS_PREFIX' ) )
|
54 |
+
define( 'WPRSS_PREFIX', 'wprss', true );
|
55 |
|
56 |
+
// Set the plugin prefix
|
57 |
if( !defined( 'WPRSS_FILE_CONSTANT' ) )
|
58 |
define( 'WPRSS_FILE_CONSTANT', __FILE__, true );
|
59 |
|
60 |
+
// Set constant path to the plugin directory.
|
61 |
if( !defined( 'WPRSS_DIR' ) )
|
62 |
+
define( 'WPRSS_DIR', plugin_dir_path( __FILE__ ) );
|
63 |
|
64 |
+
// Set constant URI to the plugin URL.
|
65 |
if( !defined( 'WPRSS_URI' ) )
|
66 |
+
define( 'WPRSS_URI', plugin_dir_url( __FILE__ ) );
|
67 |
|
68 |
+
// Set the constant path to the plugin's javascript directory.
|
69 |
if( !defined( 'WPRSS_JS' ) )
|
70 |
define( 'WPRSS_JS', WPRSS_URI . trailingslashit( 'js' ), true );
|
71 |
|
72 |
+
// Set the constant path to the plugin's CSS directory.
|
73 |
if( !defined( 'WPRSS_CSS' ) )
|
74 |
define( 'WPRSS_CSS', WPRSS_URI . trailingslashit( 'css' ), true );
|
75 |
|
76 |
+
// Set the constant path to the plugin's images directory.
|
77 |
if( !defined( 'WPRSS_IMG' ) )
|
78 |
define( 'WPRSS_IMG', WPRSS_URI . trailingslashit( 'images' ), true );
|
79 |
|
80 |
+
// Set the constant path to the plugin's includes directory.
|
81 |
if( !defined( 'WPRSS_INC' ) )
|
82 |
define( 'WPRSS_INC', WPRSS_DIR . trailingslashit( 'includes' ), true );
|
83 |
|
84 |
if( !defined( 'WPRSS_LANG' ) )
|
85 |
define( 'WPRSS_LANG', WPRSS_DIR . trailingslashit( 'languages' ), true );
|
86 |
+
|
87 |
// Set the constant path to the plugin's log file.
|
88 |
if( !defined( 'WPRSS_LOG_FILE' ) )
|
89 |
define( 'WPRSS_LOG_FILE', WPRSS_DIR . 'log', true );
|
90 |
if( !defined( 'WPRSS_LOG_FILE_EXT' ) )
|
91 |
define( 'WPRSS_LOG_FILE_EXT', '.txt', true );
|
92 |
+
|
93 |
if ( !defined('WPRSS_SL_STORE_URL') ) {
|
94 |
define( 'WPRSS_SL_STORE_URL', 'http://www.wprssaggregator.com', TRUE );
|
95 |
}
|
112 |
*/
|
113 |
|
114 |
/* Load install, upgrade and migration code. */
|
115 |
+
require_once ( WPRSS_INC . 'update.php' );
|
116 |
+
|
117 |
/* Load the shortcodes functions file. */
|
118 |
require_once ( WPRSS_INC . 'shortcodes.php' );
|
119 |
|
120 |
/* Load the custom post types and taxonomies. */
|
121 |
+
require_once ( WPRSS_INC . 'custom-post-types.php' );
|
122 |
|
123 |
/* Load the file for setting capabilities of our post types */
|
124 |
+
require_once ( WPRSS_INC . 'roles-capabilities.php' );
|
125 |
|
126 |
/* Load the feed processing functions file */
|
127 |
require_once ( WPRSS_INC . 'feed-processing.php' );
|
128 |
+
|
129 |
/* Load the blacklist functions file */
|
130 |
require_once ( WPRSS_INC . 'feed-blacklist.php' );
|
131 |
|
133 |
require_once ( WPRSS_INC . 'feed-importing.php' );
|
134 |
|
135 |
/* Load the feed states functions file */
|
136 |
+
require_once ( WPRSS_INC . 'feed-states.php' );
|
137 |
|
138 |
/* Load the feed display functions file */
|
139 |
+
require_once ( WPRSS_INC . 'feed-display.php' );
|
140 |
|
141 |
/* Load the custom feed file */
|
142 |
+
require_once ( WPRSS_INC . 'custom-feed.php' );
|
143 |
|
144 |
/* Load the custom post type feeds file */
|
145 |
require_once ( WPRSS_INC . 'cpt-feeds.php' );
|
146 |
|
147 |
/* Load the cron job scheduling functions. */
|
148 |
+
require_once ( WPRSS_INC . 'cron-jobs.php' );
|
149 |
|
150 |
/* Load the admin functions file. */
|
151 |
+
require_once ( WPRSS_INC . 'admin.php' );
|
152 |
|
153 |
/* Load the admin options functions file. */
|
154 |
+
require_once ( WPRSS_INC . 'admin-options.php' );
|
155 |
|
156 |
/* Load the settings import/export file */
|
157 |
+
require_once ( WPRSS_INC . 'admin-import-export.php' );
|
158 |
|
159 |
/* Load the debugging file */
|
160 |
+
require_once ( WPRSS_INC . 'system-info.php' );
|
161 |
|
162 |
/* Load the miscellaneous functions file */
|
163 |
+
require_once ( WPRSS_INC . 'misc-functions.php' );
|
164 |
|
165 |
/* Load the OPML Class file */
|
166 |
require_once ( WPRSS_INC . 'OPML.php' );
|
170 |
|
171 |
/* Load the admin debugging page file */
|
172 |
require_once ( WPRSS_INC . 'admin-debugging.php' );
|
173 |
+
|
174 |
/* Load the addons page file */
|
175 |
+
require_once ( WPRSS_INC . 'admin-addons.php' );
|
176 |
|
177 |
/* Load the admin display-related functions */
|
178 |
+
require_once ( WPRSS_INC . 'admin-display.php' );
|
179 |
|
180 |
/* Load the admin metaboxes functions */
|
181 |
+
require_once ( WPRSS_INC . 'admin-metaboxes.php' );
|
182 |
|
183 |
/* Load the scripts loading functions file */
|
184 |
+
require_once ( WPRSS_INC . 'scripts.php' );
|
185 |
|
186 |
/* Load the Ajax notification file */
|
187 |
+
require_once ( WPRSS_INC . 'admin-ajax-notice.php' );
|
188 |
+
|
189 |
/* Load the dashboard welcome screen file */
|
190 |
+
require_once ( WPRSS_INC . 'admin-dashboard.php' );
|
191 |
|
192 |
/* Load the logging class */
|
193 |
+
require_once ( WPRSS_INC . 'roles-capabilities.php' );
|
194 |
|
195 |
/* Load the security reset file */
|
196 |
require_once ( WPRSS_INC . 'secure-reset.php' );
|
197 |
|
198 |
/* Load the licensing file */
|
199 |
require_once ( WPRSS_INC . 'licensing.php' );
|
200 |
+
|
201 |
/* Load the admin editor file */
|
202 |
require_once ( WPRSS_INC . 'admin-editor.php' );
|
203 |
|
209 |
|
210 |
// Load the logging functions file
|
211 |
require_once ( WPRSS_INC . 'admin-log.php' );
|
212 |
+
|
213 |
if ( !defined( 'WPRSS_LOG_LEVEL' ) )
|
214 |
define( 'WPRSS_LOG_LEVEL', WPRSS_LOG_LEVEL_ERROR );
|
215 |
|
218 |
|
219 |
/* Load the admin metaboxes help file */
|
220 |
require_once ( WPRSS_INC . 'admin-help-metaboxes.php' );
|
221 |
+
|
222 |
/* Load the admin settings help file */
|
223 |
require_once ( WPRSS_INC . 'admin-help-settings.php' );
|
224 |
+
|
225 |
/* SimplePie */
|
226 |
require_once ( ABSPATH . WPINC . '/class-feed.php' );
|
227 |
+
|
228 |
/* Access to feed */
|
229 |
require_once ( WPRSS_INC . 'feed-access.php' );
|
230 |
|
231 |
/* Load the fallbacks for mbstring */
|
232 |
require_once ( WPRSS_INC . 'fallback-mbstring.php' );
|
233 |
|
234 |
+
|
235 |
register_activation_hook( __FILE__ , 'wprss_activate' );
|
236 |
register_deactivation_hook( __FILE__ , 'wprss_deactivate' );
|
237 |
|
242 |
*
|
243 |
* @since 1.0
|
244 |
* @return void
|
245 |
+
*/
|
246 |
function wprss_init() {
|
247 |
//If user requested to download system info, generate the download.
|
248 |
if ( isset( $_POST['wprss-sysinfo'] ) ) {
|
256 |
add_filter( 'wprss_admin_pointers', 'wprss_check_tracking_notice' );
|
257 |
/**
|
258 |
* Сhecks the tracking option and if not set, shows a pointer with opt in and out options.
|
259 |
+
*
|
260 |
* @since 3.6
|
261 |
*/
|
262 |
function wprss_check_tracking_notice( $pointers ){
|
292 |
add_action( 'admin_enqueue_scripts', 'wprss_prepare_pointers', 1000 );
|
293 |
/**
|
294 |
* Prepare the admin pointers
|
295 |
+
*
|
296 |
* @since 3.6
|
297 |
*/
|
298 |
function wprss_prepare_pointers() {
|
332 |
|
333 |
// Add pointers style to queue.
|
334 |
wp_enqueue_style( 'wp-pointer' );
|
335 |
+
|
336 |
// Add pointers script to queue. Add custom script.
|
337 |
wp_enqueue_script( 'wprss-pointers', WPRSS_JS . 'pointers.js', array( 'wp-pointer' ) );
|
338 |
+
|
339 |
// Add pointer options to script.
|
340 |
wp_localize_script( 'wprss-pointers', 'wprssPointers', $valid_pointers );
|
341 |
|
345 |
|
346 |
/**
|
347 |
* Print the scripts for the admin pointers
|
348 |
+
*
|
349 |
* @since 3.6
|
350 |
*/
|
351 |
function wprss_footer_pointer_scripts() {
|
398 |
*
|
399 |
* @since 1.0
|
400 |
* @return void
|
401 |
+
*/
|
402 |
function wprss_activate() {
|
403 |
/* Prevents activation of plugin if compatible version of WordPress not found */
|
404 |
if ( version_compare( get_bloginfo( 'version' ), '3.3', '<' ) ) {
|
405 |
deactivate_plugins ( basename( __FILE__ )); // Deactivate plugin
|
406 |
wp_die( __( 'This plugin requires WordPress version 3.3 or higher.' ), 'WP RSS Aggregator', array( 'back_link' => true ) );
|
407 |
+
}
|
408 |
wprss_settings_initialize();
|
409 |
flush_rewrite_rules();
|
410 |
wprss_schedule_fetch_all_feeds_cron();
|
416 |
// Sets a transient to trigger a redirect upon completion of activation procedure
|
417 |
set_transient( '_wprss_activation_redirect', true, 30 );
|
418 |
}
|
419 |
+
|
420 |
include_once( ABSPATH . 'wp-admin/includes/plugin.php' );
|
421 |
// Check if WordPress SEO is activate, if yes set its options for hiding the metaboxes on the wprss_feed and wprss_feed_item screens
|
422 |
if ( is_plugin_active( 'wordpress-seo/wp-seo.php' ) ) {
|
426 |
$wpseo_titles['hideeditbox-wprss_feed_item'] = TRUE;
|
427 |
}
|
428 |
update_option( 'wpseo_titles', $wpseo_titles );
|
429 |
+
}
|
430 |
+
}
|
431 |
|
432 |
|
433 |
/**
|
434 |
* Plugin deactivation procedure
|
435 |
*
|
436 |
* @since 1.0
|
437 |
+
*/
|
438 |
function wprss_deactivate() {
|
439 |
+
// On deactivation remove the cron job
|
440 |
wp_clear_scheduled_hook( 'wprss_fetch_all_feeds_hook' );
|
441 |
wp_clear_scheduled_hook( 'wprss_truncate_posts_hook' );
|
442 |
// Uschedule cron jobs for all feed sources
|
458 |
add_action( 'plugins_loaded', 'wprss_load_textdomain' );
|
459 |
/**
|
460 |
* Loads the plugin's translated strings.
|
461 |
+
*
|
462 |
* @since 2.1
|
463 |
+
* @return void
|
464 |
+
*/
|
465 |
+
function wprss_load_textdomain() {
|
466 |
load_plugin_textdomain( WPRSS_TEXT_DOMAIN, false, dirname( plugin_basename( __FILE__ ) ) . '/languages/' );
|
467 |
}
|
468 |
|
485 |
function wprss_disable() {
|
486 |
return FALSE;
|
487 |
}
|
488 |
+
|
489 |
/**
|
490 |
* Gets the timezone string that corresponds to the timezone set for
|
491 |
* this site. If the timezone is a UTC offset, or if it is not set, still
|
492 |
* returns a valid timezone string.
|
493 |
* However, if no actual zone exists in the configured offset, the result
|
494 |
* may be rounded up, or failure.
|
495 |
+
*
|
496 |
* @see http://pl1.php.net/manual/en/function.timezone-name-from-abbr.php
|
497 |
* @return string A valid timezone string, or false on failure.
|
498 |
*/
|
499 |
function wprss_get_timezone_string() {
|
500 |
$tzstring = get_option( 'timezone_string' );
|
501 |
|
502 |
+
if ( empty($tzstring) ) {
|
503 |
$offset = ( int )get_option( 'gmt_offset' );
|
504 |
$tzstring = timezone_name_from_abbr( '', $offset * 60 * 60, 1 );
|
505 |
}
|
506 |
|
507 |
return $tzstring;
|
508 |
}
|
509 |
+
|
510 |
|
511 |
/**
|
512 |
* @see http://wordpress.stackexchange.com/questions/94755/converting-timestamps-to-local-time-with-date-l18n#135049
|
517 |
function wprss_local_date_i18n( $timestamp = null, $format = null ) {
|
518 |
$format = is_null( $format ) ? get_option( 'date_format' ) . ' ' . get_option( 'time_format' ) : $format;
|
519 |
$timestamp = $timestamp ? $timestamp : time();
|
520 |
+
|
521 |
$timezone_str = wprss_get_timezone_string() ? wprss_get_timezone_string() : 'UTC';
|
522 |
$timezone = new DateTimeZone( $timezone_str );
|
523 |
|
531 |
$date->setTime( $datetime['hours'] , $datetime['minutes'] , $datetime['seconds'] );
|
532 |
}
|
533 |
$date_str = $date->format( 'Y-m-d H:i:s' );
|
534 |
+
|
535 |
// Pretend the local date is UTC to get the timestamp
|
536 |
// to pass to date_i18n().
|
537 |
$utc_timezone = new DateTimeZone( 'UTC' );
|
540 |
|
541 |
return date_i18n( $format, $timestamp, true );
|
542 |
}
|
543 |
+
|
544 |
|
545 |
/**
|
546 |
* Gets an internationalized and localized datetime string, defaulting
|
547 |
* to WP RSS format.
|
548 |
+
*
|
549 |
* @see wprss_local_date_i18n;
|
550 |
* @param string|null $format Format to use. Default: Wordpress date and time format.
|
551 |
* @param int|null $timestamp The timestamp to localize. Default: time().
|
553 |
*/
|
554 |
function wprss_date_i18n( $timestamp = null, $format = null ) {
|
555 |
$format = is_null( $format ) ? wprss_get_general_setting( 'date_format' ) : $format;
|
556 |
+
|
557 |
return wprss_local_date_i18n( $timestamp, $format );
|
558 |
}
|