diff options
25 files changed, 2377 insertions, 115 deletions
@@ -26,7 +26,7 @@ RUN cd shaarli \ | |||
26 | 26 | ||
27 | # Stage 4: | 27 | # Stage 4: |
28 | # - Shaarli image | 28 | # - Shaarli image |
29 | FROM alpine:3.8 | 29 | FROM alpine:3.12 |
30 | LABEL maintainer="Shaarli Community" | 30 | LABEL maintainer="Shaarli Community" |
31 | 31 | ||
32 | RUN apk --update --no-cache add \ | 32 | RUN apk --update --no-cache add \ |
diff --git a/Dockerfile.armhf b/Dockerfile.armhf index 5bbf6680..471f2397 100644 --- a/Dockerfile.armhf +++ b/Dockerfile.armhf | |||
@@ -1,7 +1,7 @@ | |||
1 | # Stage 1: | 1 | # Stage 1: |
2 | # - Copy Shaarli sources | 2 | # - Copy Shaarli sources |
3 | # - Build documentation | 3 | # - Build documentation |
4 | FROM arm32v6/alpine:3.8 as docs | 4 | FROM arm32v6/alpine:3.10 as docs |
5 | ADD . /usr/src/app/shaarli | 5 | ADD . /usr/src/app/shaarli |
6 | RUN apk --update --no-cache add py2-pip \ | 6 | RUN apk --update --no-cache add py2-pip \ |
7 | && cd /usr/src/app/shaarli \ | 7 | && cd /usr/src/app/shaarli \ |
@@ -10,7 +10,7 @@ RUN apk --update --no-cache add py2-pip \ | |||
10 | 10 | ||
11 | # Stage 2: | 11 | # Stage 2: |
12 | # - Resolve PHP dependencies with Composer | 12 | # - Resolve PHP dependencies with Composer |
13 | FROM arm32v6/alpine:3.8 as composer | 13 | FROM arm32v6/alpine:3.10 as composer |
14 | COPY --from=docs /usr/src/app/shaarli /app/shaarli | 14 | COPY --from=docs /usr/src/app/shaarli /app/shaarli |
15 | RUN apk --update --no-cache add php7-curl php7-mbstring php7-simplexml composer \ | 15 | RUN apk --update --no-cache add php7-curl php7-mbstring php7-simplexml composer \ |
16 | && cd /app/shaarli \ | 16 | && cd /app/shaarli \ |
@@ -18,7 +18,7 @@ RUN apk --update --no-cache add php7-curl php7-mbstring php7-simplexml composer | |||
18 | 18 | ||
19 | # Stage 3: | 19 | # Stage 3: |
20 | # - Frontend dependencies | 20 | # - Frontend dependencies |
21 | FROM arm32v6/alpine:3.8 as node | 21 | FROM arm32v6/alpine:3.10 as node |
22 | COPY --from=composer /app/shaarli /shaarli | 22 | COPY --from=composer /app/shaarli /shaarli |
23 | RUN apk --update --no-cache add yarn nodejs-current python2 build-base \ | 23 | RUN apk --update --no-cache add yarn nodejs-current python2 build-base \ |
24 | && cd /shaarli \ | 24 | && cd /shaarli \ |
@@ -28,7 +28,7 @@ RUN apk --update --no-cache add yarn nodejs-current python2 build-base \ | |||
28 | 28 | ||
29 | # Stage 4: | 29 | # Stage 4: |
30 | # - Shaarli image | 30 | # - Shaarli image |
31 | FROM arm32v6/alpine:3.8 | 31 | FROM arm32v6/alpine:3.10 |
32 | LABEL maintainer="Shaarli Community" | 32 | LABEL maintainer="Shaarli Community" |
33 | 33 | ||
34 | RUN apk --update --no-cache add \ | 34 | RUN apk --update --no-cache add \ |
diff --git a/application/Languages.php b/application/Languages.php index 60e91631..7177db2c 100644 --- a/application/Languages.php +++ b/application/Languages.php | |||
@@ -186,6 +186,7 @@ class Languages | |||
186 | 'en' => t('English'), | 186 | 'en' => t('English'), |
187 | 'fr' => t('French'), | 187 | 'fr' => t('French'), |
188 | 'jp' => t('Japanese'), | 188 | 'jp' => t('Japanese'), |
189 | 'ru' => t('Russian'), | ||
189 | ]; | 190 | ]; |
190 | } | 191 | } |
191 | } | 192 | } |
diff --git a/application/bookmark/BookmarkIO.php b/application/bookmark/BookmarkIO.php index c78dbe41..8439d470 100644 --- a/application/bookmark/BookmarkIO.php +++ b/application/bookmark/BookmarkIO.php | |||
@@ -4,6 +4,7 @@ declare(strict_types=1); | |||
4 | 4 | ||
5 | namespace Shaarli\Bookmark; | 5 | namespace Shaarli\Bookmark; |
6 | 6 | ||
7 | use malkusch\lock\exception\LockAcquireException; | ||
7 | use malkusch\lock\mutex\Mutex; | 8 | use malkusch\lock\mutex\Mutex; |
8 | use malkusch\lock\mutex\NoMutex; | 9 | use malkusch\lock\mutex\NoMutex; |
9 | use Shaarli\Bookmark\Exception\DatastoreNotInitializedException; | 10 | use Shaarli\Bookmark\Exception\DatastoreNotInitializedException; |
@@ -80,7 +81,7 @@ class BookmarkIO | |||
80 | } | 81 | } |
81 | 82 | ||
82 | $content = null; | 83 | $content = null; |
83 | $this->mutex->synchronized(function () use (&$content) { | 84 | $this->synchronized(function () use (&$content) { |
84 | $content = file_get_contents($this->datastore); | 85 | $content = file_get_contents($this->datastore); |
85 | }); | 86 | }); |
86 | 87 | ||
@@ -119,11 +120,28 @@ class BookmarkIO | |||
119 | 120 | ||
120 | $data = self::$phpPrefix . base64_encode(gzdeflate(serialize($links))) . self::$phpSuffix; | 121 | $data = self::$phpPrefix . base64_encode(gzdeflate(serialize($links))) . self::$phpSuffix; |
121 | 122 | ||
122 | $this->mutex->synchronized(function () use ($data) { | 123 | $this->synchronized(function () use ($data) { |
123 | file_put_contents( | 124 | file_put_contents( |
124 | $this->datastore, | 125 | $this->datastore, |
125 | $data | 126 | $data |
126 | ); | 127 | ); |
127 | }); | 128 | }); |
128 | } | 129 | } |
130 | |||
131 | /** | ||
132 | * Wrapper applying mutex to provided function. | ||
133 | * If the lock can't be acquired (e.g. some shared hosting provider), we execute the function without mutex. | ||
134 | * | ||
135 | * @see https://github.com/shaarli/Shaarli/issues/1650 | ||
136 | * | ||
137 | * @param callable $function | ||
138 | */ | ||
139 | protected function synchronized(callable $function): void | ||
140 | { | ||
141 | try { | ||
142 | $this->mutex->synchronized($function); | ||
143 | } catch (LockAcquireException $exception) { | ||
144 | $function(); | ||
145 | } | ||
146 | } | ||
129 | } | 147 | } |
diff --git a/application/container/ContainerBuilder.php b/application/container/ContainerBuilder.php index f0234eca..6d69a880 100644 --- a/application/container/ContainerBuilder.php +++ b/application/container/ContainerBuilder.php | |||
@@ -50,6 +50,9 @@ class ContainerBuilder | |||
50 | /** @var LoginManager */ | 50 | /** @var LoginManager */ |
51 | protected $login; | 51 | protected $login; |
52 | 52 | ||
53 | /** @var PluginManager */ | ||
54 | protected $pluginManager; | ||
55 | |||
53 | /** @var LoggerInterface */ | 56 | /** @var LoggerInterface */ |
54 | protected $logger; | 57 | protected $logger; |
55 | 58 | ||
@@ -61,12 +64,14 @@ class ContainerBuilder | |||
61 | SessionManager $session, | 64 | SessionManager $session, |
62 | CookieManager $cookieManager, | 65 | CookieManager $cookieManager, |
63 | LoginManager $login, | 66 | LoginManager $login, |
67 | PluginManager $pluginManager, | ||
64 | LoggerInterface $logger | 68 | LoggerInterface $logger |
65 | ) { | 69 | ) { |
66 | $this->conf = $conf; | 70 | $this->conf = $conf; |
67 | $this->session = $session; | 71 | $this->session = $session; |
68 | $this->login = $login; | 72 | $this->login = $login; |
69 | $this->cookieManager = $cookieManager; | 73 | $this->cookieManager = $cookieManager; |
74 | $this->pluginManager = $pluginManager; | ||
70 | $this->logger = $logger; | 75 | $this->logger = $logger; |
71 | } | 76 | } |
72 | 77 | ||
@@ -78,12 +83,10 @@ class ContainerBuilder | |||
78 | $container['sessionManager'] = $this->session; | 83 | $container['sessionManager'] = $this->session; |
79 | $container['cookieManager'] = $this->cookieManager; | 84 | $container['cookieManager'] = $this->cookieManager; |
80 | $container['loginManager'] = $this->login; | 85 | $container['loginManager'] = $this->login; |
86 | $container['pluginManager'] = $this->pluginManager; | ||
81 | $container['logger'] = $this->logger; | 87 | $container['logger'] = $this->logger; |
82 | $container['basePath'] = $this->basePath; | 88 | $container['basePath'] = $this->basePath; |
83 | 89 | ||
84 | $container['plugins'] = function (ShaarliContainer $container): PluginManager { | ||
85 | return new PluginManager($container->conf); | ||
86 | }; | ||
87 | 90 | ||
88 | $container['history'] = function (ShaarliContainer $container): History { | 91 | $container['history'] = function (ShaarliContainer $container): History { |
89 | return new History($container->conf->get('resource.history')); | 92 | return new History($container->conf->get('resource.history')); |
@@ -113,14 +116,6 @@ class ContainerBuilder | |||
113 | ); | 116 | ); |
114 | }; | 117 | }; |
115 | 118 | ||
116 | $container['pluginManager'] = function (ShaarliContainer $container): PluginManager { | ||
117 | $pluginManager = new PluginManager($container->conf); | ||
118 | |||
119 | $pluginManager->load($container->conf->get('general.enabled_plugins')); | ||
120 | |||
121 | return $pluginManager; | ||
122 | }; | ||
123 | |||
124 | $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory { | 119 | $container['formatterFactory'] = function (ShaarliContainer $container): FormatterFactory { |
125 | return new FormatterFactory( | 120 | return new FormatterFactory( |
126 | $container->conf, | 121 | $container->conf, |
diff --git a/application/front/controller/admin/ServerController.php b/application/front/controller/admin/ServerController.php index fabeaf2f..4b74f4a9 100644 --- a/application/front/controller/admin/ServerController.php +++ b/application/front/controller/admin/ServerController.php | |||
@@ -39,11 +39,16 @@ class ServerController extends ShaarliAdminController | |||
39 | $currentVersion = $currentVersion === 'dev' ? $currentVersion : 'v' . $currentVersion; | 39 | $currentVersion = $currentVersion === 'dev' ? $currentVersion : 'v' . $currentVersion; |
40 | $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION)); | 40 | $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION)); |
41 | 41 | ||
42 | $permissions = array_merge( | ||
43 | ApplicationUtils::checkResourcePermissions($this->container->conf), | ||
44 | ApplicationUtils::checkDatastoreMutex() | ||
45 | ); | ||
46 | |||
42 | $this->assignView('php_version', PHP_VERSION); | 47 | $this->assignView('php_version', PHP_VERSION); |
43 | $this->assignView('php_eol', format_date($phpEol, false)); | 48 | $this->assignView('php_eol', format_date($phpEol, false)); |
44 | $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable()); | 49 | $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable()); |
45 | $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement()); | 50 | $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement()); |
46 | $this->assignView('permissions', ApplicationUtils::checkResourcePermissions($this->container->conf)); | 51 | $this->assignView('permissions', $permissions); |
47 | $this->assignView('release_url', $releaseUrl); | 52 | $this->assignView('release_url', $releaseUrl); |
48 | $this->assignView('latest_version', $latestVersion); | 53 | $this->assignView('latest_version', $latestVersion); |
49 | $this->assignView('current_version', $currentVersion); | 54 | $this->assignView('current_version', $currentVersion); |
diff --git a/application/front/controller/visitor/InstallController.php b/application/front/controller/visitor/InstallController.php index bf965929..418d4a49 100644 --- a/application/front/controller/visitor/InstallController.php +++ b/application/front/controller/visitor/InstallController.php | |||
@@ -56,11 +56,16 @@ class InstallController extends ShaarliVisitorController | |||
56 | 56 | ||
57 | $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION)); | 57 | $phpEol = new \DateTimeImmutable(ApplicationUtils::getPhpEol(PHP_VERSION)); |
58 | 58 | ||
59 | $permissions = array_merge( | ||
60 | ApplicationUtils::checkResourcePermissions($this->container->conf), | ||
61 | ApplicationUtils::checkDatastoreMutex() | ||
62 | ); | ||
63 | |||
59 | $this->assignView('php_version', PHP_VERSION); | 64 | $this->assignView('php_version', PHP_VERSION); |
60 | $this->assignView('php_eol', format_date($phpEol, false)); | 65 | $this->assignView('php_eol', format_date($phpEol, false)); |
61 | $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable()); | 66 | $this->assignView('php_has_reached_eol', $phpEol < new \DateTimeImmutable()); |
62 | $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement()); | 67 | $this->assignView('php_extensions', ApplicationUtils::getPhpExtensionsRequirement()); |
63 | $this->assignView('permissions', ApplicationUtils::checkResourcePermissions($this->container->conf)); | 68 | $this->assignView('permissions', $permissions); |
64 | 69 | ||
65 | $this->assignView('pagetitle', t('Install Shaarli')); | 70 | $this->assignView('pagetitle', t('Install Shaarli')); |
66 | 71 | ||
diff --git a/application/helper/ApplicationUtils.php b/application/helper/ApplicationUtils.php index 212dd8e2..a6c03aae 100644 --- a/application/helper/ApplicationUtils.php +++ b/application/helper/ApplicationUtils.php | |||
@@ -3,6 +3,8 @@ | |||
3 | namespace Shaarli\Helper; | 3 | namespace Shaarli\Helper; |
4 | 4 | ||
5 | use Exception; | 5 | use Exception; |
6 | use malkusch\lock\exception\LockAcquireException; | ||
7 | use malkusch\lock\mutex\FlockMutex; | ||
6 | use Shaarli\Config\ConfigManager; | 8 | use Shaarli\Config\ConfigManager; |
7 | 9 | ||
8 | /** | 10 | /** |
@@ -252,6 +254,20 @@ class ApplicationUtils | |||
252 | return $errors; | 254 | return $errors; |
253 | } | 255 | } |
254 | 256 | ||
257 | public static function checkDatastoreMutex(): array | ||
258 | { | ||
259 | $mutex = new FlockMutex(fopen(SHAARLI_MUTEX_FILE, 'r'), 2); | ||
260 | try { | ||
261 | $mutex->synchronized(function () { | ||
262 | return true; | ||
263 | }); | ||
264 | } catch (LockAcquireException $e) { | ||
265 | $errors[] = t('Lock can not be acquired on the datastore. You might encounter concurrent access issues.'); | ||
266 | } | ||
267 | |||
268 | return $errors ?? []; | ||
269 | } | ||
270 | |||
255 | /** | 271 | /** |
256 | * Returns a salted hash representing the current Shaarli version. | 272 | * Returns a salted hash representing the current Shaarli version. |
257 | * | 273 | * |
diff --git a/application/plugin/PluginManager.php b/application/plugin/PluginManager.php index 3ea55728..7fc0cb04 100644 --- a/application/plugin/PluginManager.php +++ b/application/plugin/PluginManager.php | |||
@@ -4,6 +4,7 @@ namespace Shaarli\Plugin; | |||
4 | 4 | ||
5 | use Shaarli\Config\ConfigManager; | 5 | use Shaarli\Config\ConfigManager; |
6 | use Shaarli\Plugin\Exception\PluginFileNotFoundException; | 6 | use Shaarli\Plugin\Exception\PluginFileNotFoundException; |
7 | use Shaarli\Plugin\Exception\PluginInvalidRouteException; | ||
7 | 8 | ||
8 | /** | 9 | /** |
9 | * Class PluginManager | 10 | * Class PluginManager |
@@ -26,6 +27,14 @@ class PluginManager | |||
26 | */ | 27 | */ |
27 | private $loadedPlugins = []; | 28 | private $loadedPlugins = []; |
28 | 29 | ||
30 | /** @var array List of registered routes. Contains keys: | ||
31 | * - `method`: HTTP method, GET/POST/PUT/PATCH/DELETE | ||
32 | * - `route` (path): without prefix, e.g. `/up/{variable}` | ||
33 | * It will be later prefixed by `/plugin/<plugin name>/`. | ||
34 | * - `callable` string, function name or FQN class's method, e.g. `demo_plugin_custom_controller`. | ||
35 | */ | ||
36 | protected $registeredRoutes = []; | ||
37 | |||
29 | /** | 38 | /** |
30 | * @var ConfigManager Configuration Manager instance. | 39 | * @var ConfigManager Configuration Manager instance. |
31 | */ | 40 | */ |
@@ -86,6 +95,9 @@ class PluginManager | |||
86 | $this->loadPlugin($dirs[$index], $plugin); | 95 | $this->loadPlugin($dirs[$index], $plugin); |
87 | } catch (PluginFileNotFoundException $e) { | 96 | } catch (PluginFileNotFoundException $e) { |
88 | error_log($e->getMessage()); | 97 | error_log($e->getMessage()); |
98 | } catch (\Throwable $e) { | ||
99 | $error = $plugin . t(' [plugin incompatibility]: ') . $e->getMessage(); | ||
100 | $this->errors = array_unique(array_merge($this->errors, [$error])); | ||
89 | } | 101 | } |
90 | } | 102 | } |
91 | } | 103 | } |
@@ -166,6 +178,22 @@ class PluginManager | |||
166 | } | 178 | } |
167 | } | 179 | } |
168 | 180 | ||
181 | $registerRouteFunction = $pluginName . '_register_routes'; | ||
182 | $routes = null; | ||
183 | if (function_exists($registerRouteFunction)) { | ||
184 | $routes = call_user_func($registerRouteFunction); | ||
185 | } | ||
186 | |||
187 | if ($routes !== null) { | ||
188 | foreach ($routes as $route) { | ||
189 | if (static::validateRouteRegistration($route)) { | ||
190 | $this->registeredRoutes[$pluginName][] = $route; | ||
191 | } else { | ||
192 | throw new PluginInvalidRouteException($pluginName); | ||
193 | } | ||
194 | } | ||
195 | } | ||
196 | |||
169 | $this->loadedPlugins[] = $pluginName; | 197 | $this->loadedPlugins[] = $pluginName; |
170 | } | 198 | } |
171 | 199 | ||
@@ -238,6 +266,14 @@ class PluginManager | |||
238 | } | 266 | } |
239 | 267 | ||
240 | /** | 268 | /** |
269 | * @return array List of registered custom routes by plugins. | ||
270 | */ | ||
271 | public function getRegisteredRoutes(): array | ||
272 | { | ||
273 | return $this->registeredRoutes; | ||
274 | } | ||
275 | |||
276 | /** | ||
241 | * Return the list of encountered errors. | 277 | * Return the list of encountered errors. |
242 | * | 278 | * |
243 | * @return array List of errors (empty array if none exists). | 279 | * @return array List of errors (empty array if none exists). |
@@ -246,4 +282,32 @@ class PluginManager | |||
246 | { | 282 | { |
247 | return $this->errors; | 283 | return $this->errors; |
248 | } | 284 | } |
285 | |||
286 | /** | ||
287 | * Checks whether provided input is valid to register a new route. | ||
288 | * It must contain keys `method`, `route`, `callable` (all strings). | ||
289 | * | ||
290 | * @param string[] $input | ||
291 | * | ||
292 | * @return bool | ||
293 | */ | ||
294 | protected static function validateRouteRegistration(array $input): bool | ||
295 | { | ||
296 | if ( | ||
297 | !array_key_exists('method', $input) | ||
298 | || !in_array(strtoupper($input['method']), ['GET', 'PUT', 'PATCH', 'POST', 'DELETE']) | ||
299 | ) { | ||
300 | return false; | ||
301 | } | ||
302 | |||
303 | if (!array_key_exists('route', $input) || !preg_match('#^[a-z\d/\.\-_]+$#', $input['route'])) { | ||
304 | return false; | ||
305 | } | ||
306 | |||
307 | if (!array_key_exists('callable', $input)) { | ||
308 | return false; | ||
309 | } | ||
310 | |||
311 | return true; | ||
312 | } | ||
249 | } | 313 | } |
diff --git a/application/plugin/exception/PluginInvalidRouteException.php b/application/plugin/exception/PluginInvalidRouteException.php new file mode 100644 index 00000000..6ba9bc43 --- /dev/null +++ b/application/plugin/exception/PluginInvalidRouteException.php | |||
@@ -0,0 +1,26 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\Plugin\Exception; | ||
6 | |||
7 | use Exception; | ||
8 | |||
9 | /** | ||
10 | * Class PluginFileNotFoundException | ||
11 | * | ||
12 | * Raise when plugin files can't be found. | ||
13 | */ | ||
14 | class PluginInvalidRouteException extends Exception | ||
15 | { | ||
16 | /** | ||
17 | * Construct exception with plugin name. | ||
18 | * Generate message. | ||
19 | * | ||
20 | * @param string $pluginName name of the plugin not found | ||
21 | */ | ||
22 | public function __construct() | ||
23 | { | ||
24 | $this->message = 'trying to register invalid route.'; | ||
25 | } | ||
26 | } | ||
diff --git a/doc/md/dev/Plugin-system.md b/doc/md/dev/Plugin-system.md index f09fadc2..79654011 100644 --- a/doc/md/dev/Plugin-system.md +++ b/doc/md/dev/Plugin-system.md | |||
@@ -139,6 +139,31 @@ Each file contain two keys: | |||
139 | 139 | ||
140 | > Note: In PHP, `parse_ini_file()` seems to want strings to be between by quotes `"` in the ini file. | 140 | > Note: In PHP, `parse_ini_file()` seems to want strings to be between by quotes `"` in the ini file. |
141 | 141 | ||
142 | ### Register plugin's routes | ||
143 | |||
144 | Shaarli lets you register custom Slim routes for your plugin. | ||
145 | |||
146 | To register a route, the plugin must include a function called `function <plugin_name>_register_routes(): array`. | ||
147 | |||
148 | This method must return an array of routes, each entry must contain the following keys: | ||
149 | |||
150 | - `method`: HTTP method, `GET/POST/PUT/PATCH/DELETE` | ||
151 | - `route` (path): without prefix, e.g. `/up/{variable}` | ||
152 | It will be later prefixed by `/plugin/<plugin name>/`. | ||
153 | - `callable` string, function name or FQN class's method to execute, e.g. `demo_plugin_custom_controller`. | ||
154 | |||
155 | Callable functions or methods must have `Slim\Http\Request` and `Slim\Http\Response` parameters | ||
156 | and return a `Slim\Http\Response`. We recommend creating a dedicated class and extend either | ||
157 | `ShaarliVisitorController` or `ShaarliAdminController` to use helper functions they provide. | ||
158 | |||
159 | A dedicated plugin template is available for rendering content: `pluginscontent.html` using `content` placeholder. | ||
160 | |||
161 | > **Warning**: plugins are not able to use RainTPL template engine for their content due to technical restrictions. | ||
162 | > RainTPL does not allow to register multiple template folders, so all HTML rendering must be done within plugin | ||
163 | > custom controller. | ||
164 | |||
165 | Check out the `demo_plugin` for a live example: `GET <shaarli_url>/plugin/demo_plugin/custom`. | ||
166 | |||
142 | ### Understanding relative paths | 167 | ### Understanding relative paths |
143 | 168 | ||
144 | Because Shaarli is a self-hosted tool, an instance can either be installed at the root directory, or under a subfolder. | 169 | Because Shaarli is a self-hosted tool, an instance can either be installed at the root directory, or under a subfolder. |
diff --git a/doc/md/dev/Release-Shaarli.md b/doc/md/dev/Release-Shaarli.md index 2c772406..d79be9ce 100644 --- a/doc/md/dev/Release-Shaarli.md +++ b/doc/md/dev/Release-Shaarli.md | |||
@@ -64,6 +64,14 @@ git pull upstream master | |||
64 | 64 | ||
65 | # If releasing a new minor version, create a release branch | 65 | # If releasing a new minor version, create a release branch |
66 | $ git checkout -b v0.x | 66 | $ git checkout -b v0.x |
67 | # Otherwise just use the existing one | ||
68 | $ git checkout v0.x | ||
69 | |||
70 | # Get the latest changes | ||
71 | $ git merge master | ||
72 | |||
73 | # Check that everything went fine: | ||
74 | $ make test | ||
67 | 75 | ||
68 | # Bump shaarli_version.php from dev to 0.x.0, **without the v** | 76 | # Bump shaarli_version.php from dev to 0.x.0, **without the v** |
69 | $ vim shaarli_version.php | 77 | $ vim shaarli_version.php |
diff --git a/inc/languages/fr/LC_MESSAGES/shaarli.po b/inc/languages/fr/LC_MESSAGES/shaarli.po index 26dede4e..01492af4 100644 --- a/inc/languages/fr/LC_MESSAGES/shaarli.po +++ b/inc/languages/fr/LC_MESSAGES/shaarli.po | |||
@@ -1,8 +1,8 @@ | |||
1 | msgid "" | 1 | msgid "" |
2 | msgstr "" | 2 | msgstr "" |
3 | "Project-Id-Version: Shaarli\n" | 3 | "Project-Id-Version: Shaarli\n" |
4 | "POT-Creation-Date: 2020-11-09 14:39+0100\n" | 4 | "POT-Creation-Date: 2020-11-24 13:13+0100\n" |
5 | "PO-Revision-Date: 2020-11-09 14:42+0100\n" | 5 | "PO-Revision-Date: 2020-11-24 13:14+0100\n" |
6 | "Last-Translator: \n" | 6 | "Last-Translator: \n" |
7 | "Language-Team: Shaarli\n" | 7 | "Language-Team: Shaarli\n" |
8 | "Language: fr_FR\n" | 8 | "Language: fr_FR\n" |
@@ -20,31 +20,31 @@ msgstr "" | |||
20 | "X-Poedit-SearchPath-3: init.php\n" | 20 | "X-Poedit-SearchPath-3: init.php\n" |
21 | "X-Poedit-SearchPath-4: plugins\n" | 21 | "X-Poedit-SearchPath-4: plugins\n" |
22 | 22 | ||
23 | #: application/History.php:180 | 23 | #: application/History.php:181 |
24 | msgid "History file isn't readable or writable" | 24 | msgid "History file isn't readable or writable" |
25 | msgstr "Le fichier d'historique n'est pas accessible en lecture ou en écriture" | 25 | msgstr "Le fichier d'historique n'est pas accessible en lecture ou en écriture" |
26 | 26 | ||
27 | #: application/History.php:191 | 27 | #: application/History.php:192 |
28 | msgid "Could not parse history file" | 28 | msgid "Could not parse history file" |
29 | msgstr "Format incorrect pour le fichier d'historique" | 29 | msgstr "Format incorrect pour le fichier d'historique" |
30 | 30 | ||
31 | #: application/Languages.php:181 | 31 | #: application/Languages.php:184 |
32 | msgid "Automatic" | 32 | msgid "Automatic" |
33 | msgstr "Automatique" | 33 | msgstr "Automatique" |
34 | 34 | ||
35 | #: application/Languages.php:182 | 35 | #: application/Languages.php:185 |
36 | msgid "German" | 36 | msgid "German" |
37 | msgstr "Allemand" | 37 | msgstr "Allemand" |
38 | 38 | ||
39 | #: application/Languages.php:183 | 39 | #: application/Languages.php:186 |
40 | msgid "English" | 40 | msgid "English" |
41 | msgstr "Anglais" | 41 | msgstr "Anglais" |
42 | 42 | ||
43 | #: application/Languages.php:184 | 43 | #: application/Languages.php:187 |
44 | msgid "French" | 44 | msgid "French" |
45 | msgstr "Français" | 45 | msgstr "Français" |
46 | 46 | ||
47 | #: application/Languages.php:185 | 47 | #: application/Languages.php:188 |
48 | msgid "Japanese" | 48 | msgid "Japanese" |
49 | msgstr "Japonais" | 49 | msgstr "Japonais" |
50 | 50 | ||
@@ -56,46 +56,46 @@ msgstr "" | |||
56 | "l'extension php-gd doit être chargée pour utiliser les miniatures. Les " | 56 | "l'extension php-gd doit être chargée pour utiliser les miniatures. Les " |
57 | "miniatures sont désormais désactivées. Rechargez la page." | 57 | "miniatures sont désormais désactivées. Rechargez la page." |
58 | 58 | ||
59 | #: application/Utils.php:402 | 59 | #: application/Utils.php:405 |
60 | msgid "Setting not set" | 60 | msgid "Setting not set" |
61 | msgstr "Paramètre non défini" | 61 | msgstr "Paramètre non défini" |
62 | 62 | ||
63 | #: application/Utils.php:409 | 63 | #: application/Utils.php:412 |
64 | msgid "Unlimited" | 64 | msgid "Unlimited" |
65 | msgstr "Illimité" | 65 | msgstr "Illimité" |
66 | 66 | ||
67 | #: application/Utils.php:412 | 67 | #: application/Utils.php:415 |
68 | msgid "B" | 68 | msgid "B" |
69 | msgstr "o" | 69 | msgstr "o" |
70 | 70 | ||
71 | #: application/Utils.php:412 | 71 | #: application/Utils.php:415 |
72 | msgid "kiB" | 72 | msgid "kiB" |
73 | msgstr "ko" | 73 | msgstr "ko" |
74 | 74 | ||
75 | #: application/Utils.php:412 | 75 | #: application/Utils.php:415 |
76 | msgid "MiB" | 76 | msgid "MiB" |
77 | msgstr "Mo" | 77 | msgstr "Mo" |
78 | 78 | ||
79 | #: application/Utils.php:412 | 79 | #: application/Utils.php:415 |
80 | msgid "GiB" | 80 | msgid "GiB" |
81 | msgstr "Go" | 81 | msgstr "Go" |
82 | 82 | ||
83 | #: application/bookmark/BookmarkFileService.php:183 | 83 | #: application/bookmark/BookmarkFileService.php:185 |
84 | #: application/bookmark/BookmarkFileService.php:205 | 84 | #: application/bookmark/BookmarkFileService.php:207 |
85 | #: application/bookmark/BookmarkFileService.php:227 | 85 | #: application/bookmark/BookmarkFileService.php:229 |
86 | #: application/bookmark/BookmarkFileService.php:241 | 86 | #: application/bookmark/BookmarkFileService.php:243 |
87 | msgid "You're not authorized to alter the datastore" | 87 | msgid "You're not authorized to alter the datastore" |
88 | msgstr "Vous n'êtes pas autorisé à modifier les données" | 88 | msgstr "Vous n'êtes pas autorisé à modifier les données" |
89 | 89 | ||
90 | #: application/bookmark/BookmarkFileService.php:208 | 90 | #: application/bookmark/BookmarkFileService.php:210 |
91 | msgid "This bookmarks already exists" | 91 | msgid "This bookmarks already exists" |
92 | msgstr "Ce marque-page existe déjà" | 92 | msgstr "Ce marque-page existe déjà" |
93 | 93 | ||
94 | #: application/bookmark/BookmarkInitializer.php:39 | 94 | #: application/bookmark/BookmarkInitializer.php:42 |
95 | msgid "(private bookmark with thumbnail demo)" | 95 | msgid "(private bookmark with thumbnail demo)" |
96 | msgstr "(marque page privé avec une miniature)" | 96 | msgstr "(marque page privé avec une miniature)" |
97 | 97 | ||
98 | #: application/bookmark/BookmarkInitializer.php:42 | 98 | #: application/bookmark/BookmarkInitializer.php:45 |
99 | msgid "" | 99 | msgid "" |
100 | "Shaarli will automatically pick up the thumbnail for links to a variety of " | 100 | "Shaarli will automatically pick up the thumbnail for links to a variety of " |
101 | "websites.\n" | 101 | "websites.\n" |
@@ -118,11 +118,11 @@ msgstr "" | |||
118 | "\n" | 118 | "\n" |
119 | "Maintenant, vous pouvez modifier ou supprimer les shaares créés par défaut.\n" | 119 | "Maintenant, vous pouvez modifier ou supprimer les shaares créés par défaut.\n" |
120 | 120 | ||
121 | #: application/bookmark/BookmarkInitializer.php:55 | 121 | #: application/bookmark/BookmarkInitializer.php:58 |
122 | msgid "Note: Shaare descriptions" | 122 | msgid "Note: Shaare descriptions" |
123 | msgstr "Note : Description des Shaares" | 123 | msgstr "Note : Description des Shaares" |
124 | 124 | ||
125 | #: application/bookmark/BookmarkInitializer.php:57 | 125 | #: application/bookmark/BookmarkInitializer.php:60 |
126 | msgid "" | 126 | msgid "" |
127 | "Adding a shaare without entering a URL creates a text-only \"note\" post " | 127 | "Adding a shaare without entering a URL creates a text-only \"note\" post " |
128 | "such as this one.\n" | 128 | "such as this one.\n" |
@@ -186,7 +186,7 @@ msgstr "" | |||
186 | "| Citron | Fruit | Jaune | 30 |\n" | 186 | "| Citron | Fruit | Jaune | 30 |\n" |
187 | "| Carotte | Légume | Orange | 14 |\n" | 187 | "| Carotte | Légume | Orange | 14 |\n" |
188 | 188 | ||
189 | #: application/bookmark/BookmarkInitializer.php:91 | 189 | #: application/bookmark/BookmarkInitializer.php:94 |
190 | #: application/legacy/LegacyLinkDB.php:246 | 190 | #: application/legacy/LegacyLinkDB.php:246 |
191 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | 191 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 |
192 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | 192 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 |
@@ -198,7 +198,7 @@ msgstr "" | |||
198 | "Le gestionnaire de marque-pages personnel, minimaliste, et sans base de " | 198 | "Le gestionnaire de marque-pages personnel, minimaliste, et sans base de " |
199 | "données" | 199 | "données" |
200 | 200 | ||
201 | #: application/bookmark/BookmarkInitializer.php:94 | 201 | #: application/bookmark/BookmarkInitializer.php:97 |
202 | msgid "" | 202 | msgid "" |
203 | "Welcome to Shaarli!\n" | 203 | "Welcome to Shaarli!\n" |
204 | "\n" | 204 | "\n" |
@@ -247,11 +247,11 @@ msgstr "" | |||
247 | "issues) si vous avez une suggestion ou si vous rencontrez un problème.\n" | 247 | "issues) si vous avez une suggestion ou si vous rencontrez un problème.\n" |
248 | " \n" | 248 | " \n" |
249 | 249 | ||
250 | #: application/bookmark/exception/BookmarkNotFoundException.php:13 | 250 | #: application/bookmark/exception/BookmarkNotFoundException.php:14 |
251 | msgid "The link you are trying to reach does not exist or has been deleted." | 251 | msgid "The link you are trying to reach does not exist or has been deleted." |
252 | msgstr "Le lien que vous essayez de consulter n'existe pas ou a été supprimé." | 252 | msgstr "Le lien que vous essayez de consulter n'existe pas ou a été supprimé." |
253 | 253 | ||
254 | #: application/config/ConfigJson.php:52 application/config/ConfigPhp.php:129 | 254 | #: application/config/ConfigJson.php:52 application/config/ConfigPhp.php:131 |
255 | msgid "" | 255 | msgid "" |
256 | "Shaarli could not create the config file. Please make sure Shaarli has the " | 256 | "Shaarli could not create the config file. Please make sure Shaarli has the " |
257 | "right to write in the folder is it installed in." | 257 | "right to write in the folder is it installed in." |
@@ -259,12 +259,12 @@ msgstr "" | |||
259 | "Shaarli n'a pas pu créer le fichier de configuration. Merci de vérifier que " | 259 | "Shaarli n'a pas pu créer le fichier de configuration. Merci de vérifier que " |
260 | "Shaarli a les droits d'écriture dans le dossier dans lequel il est installé." | 260 | "Shaarli a les droits d'écriture dans le dossier dans lequel il est installé." |
261 | 261 | ||
262 | #: application/config/ConfigManager.php:136 | 262 | #: application/config/ConfigManager.php:137 |
263 | #: application/config/ConfigManager.php:163 | 263 | #: application/config/ConfigManager.php:164 |
264 | msgid "Invalid setting key parameter. String expected, got: " | 264 | msgid "Invalid setting key parameter. String expected, got: " |
265 | msgstr "Clé de paramétrage invalide. Chaîne de caractères obtenue, attendu : " | 265 | msgstr "Clé de paramétrage invalide. Chaîne de caractères obtenue, attendu : " |
266 | 266 | ||
267 | #: application/config/exception/MissingFieldConfigException.php:21 | 267 | #: application/config/exception/MissingFieldConfigException.php:20 |
268 | #, php-format | 268 | #, php-format |
269 | msgid "Configuration value is required for %s" | 269 | msgid "Configuration value is required for %s" |
270 | msgstr "Le paramètre %s est obligatoire" | 270 | msgstr "Le paramètre %s est obligatoire" |
@@ -274,48 +274,48 @@ msgid "An error occurred while trying to save plugins loading order." | |||
274 | msgstr "" | 274 | msgstr "" |
275 | "Une erreur s'est produite lors de la sauvegarde de l'ordre des extensions." | 275 | "Une erreur s'est produite lors de la sauvegarde de l'ordre des extensions." |
276 | 276 | ||
277 | #: application/config/exception/UnauthorizedConfigException.php:16 | 277 | #: application/config/exception/UnauthorizedConfigException.php:15 |
278 | msgid "You are not authorized to alter config." | 278 | msgid "You are not authorized to alter config." |
279 | msgstr "Vous n'êtes pas autorisé à modifier la configuration." | 279 | msgstr "Vous n'êtes pas autorisé à modifier la configuration." |
280 | 280 | ||
281 | #: application/exceptions/IOException.php:22 | 281 | #: application/exceptions/IOException.php:23 |
282 | msgid "Error accessing" | 282 | msgid "Error accessing" |
283 | msgstr "Une erreur s'est produite en accédant à" | 283 | msgstr "Une erreur s'est produite en accédant à" |
284 | 284 | ||
285 | #: application/feed/FeedBuilder.php:179 | 285 | #: application/feed/FeedBuilder.php:180 |
286 | msgid "Direct link" | 286 | msgid "Direct link" |
287 | msgstr "Liens directs" | 287 | msgstr "Liens directs" |
288 | 288 | ||
289 | #: application/feed/FeedBuilder.php:181 | 289 | #: application/feed/FeedBuilder.php:182 |
290 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:103 | 290 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:103 |
291 | #: tmp/dailyrss.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 | 291 | #: tmp/dailyrss.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 |
292 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:179 | 292 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:179 |
293 | msgid "Permalink" | 293 | msgid "Permalink" |
294 | msgstr "Permalien" | 294 | msgstr "Permalien" |
295 | 295 | ||
296 | #: application/front/controller/admin/ConfigureController.php:54 | 296 | #: application/front/controller/admin/ConfigureController.php:56 |
297 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | 297 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 |
298 | msgid "Configure" | 298 | msgid "Configure" |
299 | msgstr "Configurer" | 299 | msgstr "Configurer" |
300 | 300 | ||
301 | #: application/front/controller/admin/ConfigureController.php:102 | 301 | #: application/front/controller/admin/ConfigureController.php:106 |
302 | #: application/legacy/LegacyUpdater.php:537 | 302 | #: application/legacy/LegacyUpdater.php:539 |
303 | msgid "You have enabled or changed thumbnails mode." | 303 | msgid "You have enabled or changed thumbnails mode." |
304 | msgstr "Vous avez activé ou changé le mode de miniatures." | 304 | msgstr "Vous avez activé ou changé le mode de miniatures." |
305 | 305 | ||
306 | #: application/front/controller/admin/ConfigureController.php:103 | 306 | #: application/front/controller/admin/ConfigureController.php:108 |
307 | #: application/front/controller/admin/ServerController.php:75 | 307 | #: application/front/controller/admin/ServerController.php:76 |
308 | #: application/legacy/LegacyUpdater.php:538 | 308 | #: application/legacy/LegacyUpdater.php:540 |
309 | msgid "Please synchronize them." | 309 | msgid "Please synchronize them." |
310 | msgstr "Merci de les synchroniser." | 310 | msgstr "Merci de les synchroniser." |
311 | 311 | ||
312 | #: application/front/controller/admin/ConfigureController.php:113 | 312 | #: application/front/controller/admin/ConfigureController.php:119 |
313 | #: application/front/controller/visitor/InstallController.php:146 | 313 | #: application/front/controller/visitor/InstallController.php:149 |
314 | msgid "Error while writing config file after configuration update." | 314 | msgid "Error while writing config file after configuration update." |
315 | msgstr "" | 315 | msgstr "" |
316 | "Une erreur s'est produite lors de la sauvegarde du fichier de configuration." | 316 | "Une erreur s'est produite lors de la sauvegarde du fichier de configuration." |
317 | 317 | ||
318 | #: application/front/controller/admin/ConfigureController.php:122 | 318 | #: application/front/controller/admin/ConfigureController.php:128 |
319 | msgid "Configuration was saved." | 319 | msgid "Configuration was saved." |
320 | msgstr "La configuration a été sauvegardée." | 320 | msgstr "La configuration a été sauvegardée." |
321 | 321 | ||
@@ -433,7 +433,7 @@ msgstr "Administration serveur" | |||
433 | msgid "Thumbnails cache has been cleared." | 433 | msgid "Thumbnails cache has been cleared." |
434 | msgstr "Le cache des miniatures a été vidé." | 434 | msgstr "Le cache des miniatures a été vidé." |
435 | 435 | ||
436 | #: application/front/controller/admin/ServerController.php:83 | 436 | #: application/front/controller/admin/ServerController.php:85 |
437 | msgid "Shaarli's cache folder has been cleared!" | 437 | msgid "Shaarli's cache folder has been cleared!" |
438 | msgstr "Le dossier de cache de Shaarli a été vidé !" | 438 | msgstr "Le dossier de cache de Shaarli a été vidé !" |
439 | 439 | ||
@@ -459,18 +459,18 @@ msgstr "Le lien avec l'identifiant %s n'a pas pu être trouvé." | |||
459 | msgid "Invalid visibility provided." | 459 | msgid "Invalid visibility provided." |
460 | msgstr "Visibilité du lien non valide." | 460 | msgstr "Visibilité du lien non valide." |
461 | 461 | ||
462 | #: application/front/controller/admin/ShaarePublishController.php:171 | 462 | #: application/front/controller/admin/ShaarePublishController.php:173 |
463 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:171 | 463 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:171 |
464 | msgid "Edit" | 464 | msgid "Edit" |
465 | msgstr "Modifier" | 465 | msgstr "Modifier" |
466 | 466 | ||
467 | #: application/front/controller/admin/ShaarePublishController.php:174 | 467 | #: application/front/controller/admin/ShaarePublishController.php:176 |
468 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | 468 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 |
469 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:28 | 469 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:28 |
470 | msgid "Shaare" | 470 | msgid "Shaare" |
471 | msgstr "Shaare" | 471 | msgstr "Shaare" |
472 | 472 | ||
473 | #: application/front/controller/admin/ShaarePublishController.php:205 | 473 | #: application/front/controller/admin/ShaarePublishController.php:208 |
474 | msgid "Note: " | 474 | msgid "Note: " |
475 | msgstr "Note : " | 475 | msgstr "Note : " |
476 | 476 | ||
@@ -485,7 +485,7 @@ msgstr "Mise à jour des miniatures" | |||
485 | msgid "Tools" | 485 | msgid "Tools" |
486 | msgstr "Outils" | 486 | msgstr "Outils" |
487 | 487 | ||
488 | #: application/front/controller/visitor/BookmarkListController.php:120 | 488 | #: application/front/controller/visitor/BookmarkListController.php:121 |
489 | msgid "Search: " | 489 | msgid "Search: " |
490 | msgstr "Recherche : " | 490 | msgstr "Recherche : " |
491 | 491 | ||
@@ -535,12 +535,12 @@ msgstr "Une erreur inattendue s'est produite." | |||
535 | msgid "Requested page could not be found." | 535 | msgid "Requested page could not be found." |
536 | msgstr "La page demandée n'a pas pu être trouvée." | 536 | msgstr "La page demandée n'a pas pu être trouvée." |
537 | 537 | ||
538 | #: application/front/controller/visitor/InstallController.php:64 | 538 | #: application/front/controller/visitor/InstallController.php:65 |
539 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 | 539 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 |
540 | msgid "Install Shaarli" | 540 | msgid "Install Shaarli" |
541 | msgstr "Installation de Shaarli" | 541 | msgstr "Installation de Shaarli" |
542 | 542 | ||
543 | #: application/front/controller/visitor/InstallController.php:83 | 543 | #: application/front/controller/visitor/InstallController.php:85 |
544 | #, php-format | 544 | #, php-format |
545 | msgid "" | 545 | msgid "" |
546 | "<pre>Sessions do not seem to work correctly on your server.<br>Make sure the " | 546 | "<pre>Sessions do not seem to work correctly on your server.<br>Make sure the " |
@@ -559,14 +559,14 @@ msgstr "" | |||
559 | "des cookies. Nous vous recommandons d'accéder à votre serveur depuis son " | 559 | "des cookies. Nous vous recommandons d'accéder à votre serveur depuis son " |
560 | "adresse IP ou un <em>Fully Qualified Domain Name</em>.<br>" | 560 | "adresse IP ou un <em>Fully Qualified Domain Name</em>.<br>" |
561 | 561 | ||
562 | #: application/front/controller/visitor/InstallController.php:154 | 562 | #: application/front/controller/visitor/InstallController.php:157 |
563 | msgid "" | 563 | msgid "" |
564 | "Shaarli is now configured. Please login and start shaaring your bookmarks!" | 564 | "Shaarli is now configured. Please login and start shaaring your bookmarks!" |
565 | msgstr "" | 565 | msgstr "" |
566 | "Shaarli est maintenant configuré. Vous pouvez vous connecter et commencez à " | 566 | "Shaarli est maintenant configuré. Vous pouvez vous connecter et commencez à " |
567 | "shaare vos liens !" | 567 | "shaare vos liens !" |
568 | 568 | ||
569 | #: application/front/controller/visitor/InstallController.php:168 | 569 | #: application/front/controller/visitor/InstallController.php:171 |
570 | msgid "Insufficient permissions:" | 570 | msgid "Insufficient permissions:" |
571 | msgstr "Permissions insuffisantes :" | 571 | msgstr "Permissions insuffisantes :" |
572 | 572 | ||
@@ -580,7 +580,7 @@ msgstr "Permissions insuffisantes :" | |||
580 | msgid "Login" | 580 | msgid "Login" |
581 | msgstr "Connexion" | 581 | msgstr "Connexion" |
582 | 582 | ||
583 | #: application/front/controller/visitor/LoginController.php:77 | 583 | #: application/front/controller/visitor/LoginController.php:78 |
584 | msgid "Wrong login/password." | 584 | msgid "Wrong login/password." |
585 | msgstr "Nom d'utilisateur ou mot de passe incorrect(s)." | 585 | msgstr "Nom d'utilisateur ou mot de passe incorrect(s)." |
586 | 586 | ||
@@ -620,7 +620,7 @@ msgstr "" | |||
620 | msgid "Wrong token." | 620 | msgid "Wrong token." |
621 | msgstr "Jeton invalide." | 621 | msgstr "Jeton invalide." |
622 | 622 | ||
623 | #: application/helper/ApplicationUtils.php:162 | 623 | #: application/helper/ApplicationUtils.php:165 |
624 | #, php-format | 624 | #, php-format |
625 | msgid "" | 625 | msgid "" |
626 | "Your PHP version is obsolete! Shaarli requires at least PHP %s, and thus " | 626 | "Your PHP version is obsolete! Shaarli requires at least PHP %s, and thus " |
@@ -631,52 +631,60 @@ msgstr "" | |||
631 | "peut donc pas fonctionner. Votre version de PHP a des failles de sécurités " | 631 | "peut donc pas fonctionner. Votre version de PHP a des failles de sécurités " |
632 | "connues et devrait être mise à jour au plus tôt." | 632 | "connues et devrait être mise à jour au plus tôt." |
633 | 633 | ||
634 | #: application/helper/ApplicationUtils.php:195 | 634 | #: application/helper/ApplicationUtils.php:200 |
635 | #: application/helper/ApplicationUtils.php:215 | 635 | #: application/helper/ApplicationUtils.php:220 |
636 | msgid "directory is not readable" | 636 | msgid "directory is not readable" |
637 | msgstr "le répertoire n'est pas accessible en lecture" | 637 | msgstr "le répertoire n'est pas accessible en lecture" |
638 | 638 | ||
639 | #: application/helper/ApplicationUtils.php:218 | 639 | #: application/helper/ApplicationUtils.php:223 |
640 | msgid "directory is not writable" | 640 | msgid "directory is not writable" |
641 | msgstr "le répertoire n'est pas accessible en écriture" | 641 | msgstr "le répertoire n'est pas accessible en écriture" |
642 | 642 | ||
643 | #: application/helper/ApplicationUtils.php:240 | 643 | #: application/helper/ApplicationUtils.php:247 |
644 | msgid "file is not readable" | 644 | msgid "file is not readable" |
645 | msgstr "le fichier n'est pas accessible en lecture" | 645 | msgstr "le fichier n'est pas accessible en lecture" |
646 | 646 | ||
647 | #: application/helper/ApplicationUtils.php:243 | 647 | #: application/helper/ApplicationUtils.php:250 |
648 | msgid "file is not writable" | 648 | msgid "file is not writable" |
649 | msgstr "le fichier n'est pas accessible en écriture" | 649 | msgstr "le fichier n'est pas accessible en écriture" |
650 | 650 | ||
651 | #: application/helper/ApplicationUtils.php:277 | 651 | #: application/helper/ApplicationUtils.php:260 |
652 | msgid "" | ||
653 | "Lock can not be acquired on the datastore. You might encounter concurrent " | ||
654 | "access issues." | ||
655 | msgstr "" | ||
656 | "Le fichier datastore ne peut pas être verrouillé. Vous pourriez rencontrer " | ||
657 | "des problèmes d'accès concurrents." | ||
658 | |||
659 | #: application/helper/ApplicationUtils.php:293 | ||
652 | msgid "Configuration parsing" | 660 | msgid "Configuration parsing" |
653 | msgstr "Chargement de la configuration" | 661 | msgstr "Chargement de la configuration" |
654 | 662 | ||
655 | #: application/helper/ApplicationUtils.php:278 | 663 | #: application/helper/ApplicationUtils.php:294 |
656 | msgid "Slim Framework (routing, etc.)" | 664 | msgid "Slim Framework (routing, etc.)" |
657 | msgstr "Slim Framwork (routage, etc.)" | 665 | msgstr "Slim Framwork (routage, etc.)" |
658 | 666 | ||
659 | #: application/helper/ApplicationUtils.php:279 | 667 | #: application/helper/ApplicationUtils.php:295 |
660 | msgid "Multibyte (Unicode) string support" | 668 | msgid "Multibyte (Unicode) string support" |
661 | msgstr "Support des chaînes de caractère multibytes (Unicode)" | 669 | msgstr "Support des chaînes de caractère multibytes (Unicode)" |
662 | 670 | ||
663 | #: application/helper/ApplicationUtils.php:280 | 671 | #: application/helper/ApplicationUtils.php:296 |
664 | msgid "Required to use thumbnails" | 672 | msgid "Required to use thumbnails" |
665 | msgstr "Obligatoire pour utiliser les miniatures" | 673 | msgstr "Obligatoire pour utiliser les miniatures" |
666 | 674 | ||
667 | #: application/helper/ApplicationUtils.php:281 | 675 | #: application/helper/ApplicationUtils.php:297 |
668 | msgid "Localized text sorting (e.g. e->è->f)" | 676 | msgid "Localized text sorting (e.g. e->è->f)" |
669 | msgstr "Tri des textes traduits (ex : e->è->f)" | 677 | msgstr "Tri des textes traduits (ex : e->è->f)" |
670 | 678 | ||
671 | #: application/helper/ApplicationUtils.php:282 | 679 | #: application/helper/ApplicationUtils.php:298 |
672 | msgid "Better retrieval of bookmark metadata and thumbnail" | 680 | msgid "Better retrieval of bookmark metadata and thumbnail" |
673 | msgstr "Meilleure récupération des meta-données des marque-pages et minatures" | 681 | msgstr "Meilleure récupération des meta-données des marque-pages et minatures" |
674 | 682 | ||
675 | #: application/helper/ApplicationUtils.php:283 | 683 | #: application/helper/ApplicationUtils.php:299 |
676 | msgid "Use the translation system in gettext mode" | 684 | msgid "Use the translation system in gettext mode" |
677 | msgstr "Utiliser le système de traduction en mode gettext" | 685 | msgstr "Utiliser le système de traduction en mode gettext" |
678 | 686 | ||
679 | #: application/helper/ApplicationUtils.php:284 | 687 | #: application/helper/ApplicationUtils.php:300 |
680 | msgid "Login using LDAP server" | 688 | msgid "Login using LDAP server" |
681 | msgstr "Authentification via un serveur LDAP" | 689 | msgstr "Authentification via un serveur LDAP" |
682 | 690 | ||
@@ -750,7 +758,7 @@ msgstr "" | |||
750 | msgid "Couldn't retrieve updater class methods." | 758 | msgid "Couldn't retrieve updater class methods." |
751 | msgstr "Impossible de récupérer les méthodes de la classe Updater." | 759 | msgstr "Impossible de récupérer les méthodes de la classe Updater." |
752 | 760 | ||
753 | #: application/legacy/LegacyUpdater.php:538 | 761 | #: application/legacy/LegacyUpdater.php:540 |
754 | msgid "<a href=\"./admin/thumbnails\">" | 762 | msgid "<a href=\"./admin/thumbnails\">" |
755 | msgstr "<a href=\"./admin/thumbnails\">" | 763 | msgstr "<a href=\"./admin/thumbnails\">" |
756 | 764 | ||
@@ -776,11 +784,11 @@ msgstr "" | |||
776 | "a été importé avec succès en %d secondes : %d liens importés, %d liens " | 784 | "a été importé avec succès en %d secondes : %d liens importés, %d liens " |
777 | "écrasés, %d liens ignorés." | 785 | "écrasés, %d liens ignorés." |
778 | 786 | ||
779 | #: application/plugin/PluginManager.php:124 | 787 | #: application/plugin/PluginManager.php:125 |
780 | msgid " [plugin incompatibility]: " | 788 | msgid " [plugin incompatibility]: " |
781 | msgstr " [incompatibilité de l'extension] : " | 789 | msgstr " [incompatibilité de l'extension] : " |
782 | 790 | ||
783 | #: application/plugin/exception/PluginFileNotFoundException.php:21 | 791 | #: application/plugin/exception/PluginFileNotFoundException.php:22 |
784 | #, php-format | 792 | #, php-format |
785 | msgid "Plugin \"%s\" files not found." | 793 | msgid "Plugin \"%s\" files not found." |
786 | msgstr "Les fichiers de l'extension \"%s\" sont introuvables." | 794 | msgstr "Les fichiers de l'extension \"%s\" sont introuvables." |
@@ -794,7 +802,7 @@ msgstr "Impossible de purger %s : le répertoire n'existe pas" | |||
794 | msgid "An error occurred while running the update " | 802 | msgid "An error occurred while running the update " |
795 | msgstr "Une erreur s'est produite lors de l'exécution de la mise à jour " | 803 | msgstr "Une erreur s'est produite lors de l'exécution de la mise à jour " |
796 | 804 | ||
797 | #: index.php:80 | 805 | #: index.php:81 |
798 | msgid "Shared bookmarks on " | 806 | msgid "Shared bookmarks on " |
799 | msgstr "Liens partagés sur " | 807 | msgstr "Liens partagés sur " |
800 | 808 | ||
@@ -811,11 +819,11 @@ msgstr "Shaare" | |||
811 | msgid "Adds the addlink input on the linklist page." | 819 | msgid "Adds the addlink input on the linklist page." |
812 | msgstr "Ajoute le formulaire d'ajout de liens sur la page principale." | 820 | msgstr "Ajoute le formulaire d'ajout de liens sur la page principale." |
813 | 821 | ||
814 | #: plugins/archiveorg/archiveorg.php:28 | 822 | #: plugins/archiveorg/archiveorg.php:29 |
815 | msgid "View on archive.org" | 823 | msgid "View on archive.org" |
816 | msgstr "Voir sur archive.org" | 824 | msgstr "Voir sur archive.org" |
817 | 825 | ||
818 | #: plugins/archiveorg/archiveorg.php:41 | 826 | #: plugins/archiveorg/archiveorg.php:42 |
819 | msgid "For each link, add an Archive.org icon." | 827 | msgid "For each link, add an Archive.org icon." |
820 | msgstr "Pour chaque lien, ajoute une icône pour Archive.org." | 828 | msgstr "Pour chaque lien, ajoute une icône pour Archive.org." |
821 | 829 | ||
@@ -845,7 +853,7 @@ msgstr "Couleur de fond (gris léger)" | |||
845 | msgid "Dark main color (e.g. visited links)" | 853 | msgid "Dark main color (e.g. visited links)" |
846 | msgstr "Couleur principale sombre (ex : les liens visités)" | 854 | msgstr "Couleur principale sombre (ex : les liens visités)" |
847 | 855 | ||
848 | #: plugins/demo_plugin/demo_plugin.php:477 | 856 | #: plugins/demo_plugin/demo_plugin.php:478 |
849 | msgid "" | 857 | msgid "" |
850 | "A demo plugin covering all use cases for template designers and plugin " | 858 | "A demo plugin covering all use cases for template designers and plugin " |
851 | "developers." | 859 | "developers." |
@@ -853,11 +861,11 @@ msgstr "" | |||
853 | "Une extension de démonstration couvrant tous les cas d'utilisation pour les " | 861 | "Une extension de démonstration couvrant tous les cas d'utilisation pour les " |
854 | "designers de thèmes et les développeurs d'extensions." | 862 | "designers de thèmes et les développeurs d'extensions." |
855 | 863 | ||
856 | #: plugins/demo_plugin/demo_plugin.php:478 | 864 | #: plugins/demo_plugin/demo_plugin.php:479 |
857 | msgid "This is a parameter dedicated to the demo plugin. It'll be suffixed." | 865 | msgid "This is a parameter dedicated to the demo plugin. It'll be suffixed." |
858 | msgstr "Ceci est un paramètre dédié au plugin de démo. Il sera suffixé." | 866 | msgstr "Ceci est un paramètre dédié au plugin de démo. Il sera suffixé." |
859 | 867 | ||
860 | #: plugins/demo_plugin/demo_plugin.php:479 | 868 | #: plugins/demo_plugin/demo_plugin.php:480 |
861 | msgid "Other demo parameter" | 869 | msgid "Other demo parameter" |
862 | msgstr "Un autre paramètre de démo" | 870 | msgstr "Un autre paramètre de démo" |
863 | 871 | ||
@@ -879,7 +887,7 @@ msgstr "" | |||
879 | msgid "Isso server URL (without 'http://')" | 887 | msgid "Isso server URL (without 'http://')" |
880 | msgstr "URL du serveur Isso (sans 'http://')" | 888 | msgstr "URL du serveur Isso (sans 'http://')" |
881 | 889 | ||
882 | #: plugins/piwik/piwik.php:23 | 890 | #: plugins/piwik/piwik.php:24 |
883 | msgid "" | 891 | msgid "" |
884 | "Piwik plugin error: Please define PIWIK_URL and PIWIK_SITEID in the plugin " | 892 | "Piwik plugin error: Please define PIWIK_URL and PIWIK_SITEID in the plugin " |
885 | "administration page." | 893 | "administration page." |
@@ -887,27 +895,27 @@ msgstr "" | |||
887 | "Erreur de l'extension Piwik : Merci de définir les paramètres PIWIK_URL et " | 895 | "Erreur de l'extension Piwik : Merci de définir les paramètres PIWIK_URL et " |
888 | "PIWIK_SITEID dans la page d'administration des extensions." | 896 | "PIWIK_SITEID dans la page d'administration des extensions." |
889 | 897 | ||
890 | #: plugins/piwik/piwik.php:72 | 898 | #: plugins/piwik/piwik.php:73 |
891 | msgid "A plugin that adds Piwik tracking code to Shaarli pages." | 899 | msgid "A plugin that adds Piwik tracking code to Shaarli pages." |
892 | msgstr "Ajoute le code de traçage de Piwik sur les pages de Shaarli." | 900 | msgstr "Ajoute le code de traçage de Piwik sur les pages de Shaarli." |
893 | 901 | ||
894 | #: plugins/piwik/piwik.php:73 | 902 | #: plugins/piwik/piwik.php:74 |
895 | msgid "Piwik URL" | 903 | msgid "Piwik URL" |
896 | msgstr "URL de Piwik" | 904 | msgstr "URL de Piwik" |
897 | 905 | ||
898 | #: plugins/piwik/piwik.php:74 | 906 | #: plugins/piwik/piwik.php:75 |
899 | msgid "Piwik site ID" | 907 | msgid "Piwik site ID" |
900 | msgstr "Site ID de Piwik" | 908 | msgstr "Site ID de Piwik" |
901 | 909 | ||
902 | #: plugins/playvideos/playvideos.php:25 | 910 | #: plugins/playvideos/playvideos.php:26 |
903 | msgid "Video player" | 911 | msgid "Video player" |
904 | msgstr "Lecteur vidéo" | 912 | msgstr "Lecteur vidéo" |
905 | 913 | ||
906 | #: plugins/playvideos/playvideos.php:28 | 914 | #: plugins/playvideos/playvideos.php:29 |
907 | msgid "Play Videos" | 915 | msgid "Play Videos" |
908 | msgstr "Jouer les vidéos" | 916 | msgstr "Jouer les vidéos" |
909 | 917 | ||
910 | #: plugins/playvideos/playvideos.php:59 | 918 | #: plugins/playvideos/playvideos.php:60 |
911 | msgid "Add a button in the toolbar allowing to watch all videos." | 919 | msgid "Add a button in the toolbar allowing to watch all videos." |
912 | msgstr "" | 920 | msgstr "" |
913 | "Ajoute un bouton dans la barre de menu pour regarder toutes les vidéos." | 921 | "Ajoute un bouton dans la barre de menu pour regarder toutes les vidéos." |
@@ -935,11 +943,11 @@ msgstr "Mauvaise réponse du hub %s" | |||
935 | msgid "Enable PubSubHubbub feed publishing." | 943 | msgid "Enable PubSubHubbub feed publishing." |
936 | msgstr "Active la publication de flux vers PubSubHubbub." | 944 | msgstr "Active la publication de flux vers PubSubHubbub." |
937 | 945 | ||
938 | #: plugins/qrcode/qrcode.php:73 plugins/wallabag/wallabag.php:71 | 946 | #: plugins/qrcode/qrcode.php:74 plugins/wallabag/wallabag.php:72 |
939 | msgid "For each link, add a QRCode icon." | 947 | msgid "For each link, add a QRCode icon." |
940 | msgstr "Pour chaque lien, ajouter une icône de QRCode." | 948 | msgstr "Pour chaque lien, ajouter une icône de QRCode." |
941 | 949 | ||
942 | #: plugins/wallabag/wallabag.php:21 | 950 | #: plugins/wallabag/wallabag.php:22 |
943 | msgid "" | 951 | msgid "" |
944 | "Wallabag plugin error: Please define the \"WALLABAG_URL\" setting in the " | 952 | "Wallabag plugin error: Please define the \"WALLABAG_URL\" setting in the " |
945 | "plugin administration page." | 953 | "plugin administration page." |
@@ -947,15 +955,15 @@ msgstr "" | |||
947 | "Erreur de l'extension Wallabag : Merci de définir le paramètre « " | 955 | "Erreur de l'extension Wallabag : Merci de définir le paramètre « " |
948 | "WALLABAG_URL » dans la page d'administration des extensions." | 956 | "WALLABAG_URL » dans la page d'administration des extensions." |
949 | 957 | ||
950 | #: plugins/wallabag/wallabag.php:48 | 958 | #: plugins/wallabag/wallabag.php:49 |
951 | msgid "Save to wallabag" | 959 | msgid "Save to wallabag" |
952 | msgstr "Sauvegarder dans Wallabag" | 960 | msgstr "Sauvegarder dans Wallabag" |
953 | 961 | ||
954 | #: plugins/wallabag/wallabag.php:72 | 962 | #: plugins/wallabag/wallabag.php:73 |
955 | msgid "Wallabag API URL" | 963 | msgid "Wallabag API URL" |
956 | msgstr "URL de l'API Wallabag" | 964 | msgstr "URL de l'API Wallabag" |
957 | 965 | ||
958 | #: plugins/wallabag/wallabag.php:73 | 966 | #: plugins/wallabag/wallabag.php:74 |
959 | msgid "Wallabag API version (1 or 2)" | 967 | msgid "Wallabag API version (1 or 2)" |
960 | msgstr "Version de l'API Wallabag (1 ou 2)" | 968 | msgstr "Version de l'API Wallabag (1 ou 2)" |
961 | 969 | ||
diff --git a/inc/languages/ru/LC_MESSAGES/shaarli.po b/inc/languages/ru/LC_MESSAGES/shaarli.po new file mode 100644 index 00000000..98e70425 --- /dev/null +++ b/inc/languages/ru/LC_MESSAGES/shaarli.po | |||
@@ -0,0 +1,1944 @@ | |||
1 | msgid "" | ||
2 | msgstr "" | ||
3 | "Project-Id-Version: Shaarli\n" | ||
4 | "POT-Creation-Date: 2020-11-14 07:47+0500\n" | ||
5 | "PO-Revision-Date: 2020-11-15 06:16+0500\n" | ||
6 | "Last-Translator: progit <pash.vld@gmail.com>\n" | ||
7 | "Language-Team: Shaarli\n" | ||
8 | "Language: ru_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 2.0.1\n" | ||
13 | "X-Poedit-Basepath: ../../../..\n" | ||
14 | "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" | ||
15 | "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" | ||
16 | "X-Poedit-SourceCharset: UTF-8\n" | ||
17 | "X-Poedit-KeywordsList: t:1,2;t\n" | ||
18 | "X-Poedit-SearchPath-0: application\n" | ||
19 | "X-Poedit-SearchPath-1: tmp\n" | ||
20 | "X-Poedit-SearchPath-2: index.php\n" | ||
21 | "X-Poedit-SearchPath-3: init.php\n" | ||
22 | "X-Poedit-SearchPath-4: plugins\n" | ||
23 | |||
24 | #: application/History.php:181 | ||
25 | msgid "History file isn't readable or writable" | ||
26 | msgstr "Файл истории не доступен для чтения или записи" | ||
27 | |||
28 | #: application/History.php:192 | ||
29 | msgid "Could not parse history file" | ||
30 | msgstr "Не удалось разобрать файл истории" | ||
31 | |||
32 | #: application/Languages.php:184 | ||
33 | msgid "Automatic" | ||
34 | msgstr "Автоматический" | ||
35 | |||
36 | #: application/Languages.php:185 | ||
37 | msgid "German" | ||
38 | msgstr "Немецкий" | ||
39 | |||
40 | #: application/Languages.php:186 | ||
41 | msgid "English" | ||
42 | msgstr "Английский" | ||
43 | |||
44 | #: application/Languages.php:187 | ||
45 | msgid "French" | ||
46 | msgstr "Французский" | ||
47 | |||
48 | #: application/Languages.php:188 | ||
49 | msgid "Japanese" | ||
50 | msgstr "Японский" | ||
51 | |||
52 | #: application/Languages.php:189 | ||
53 | msgid "Russian" | ||
54 | msgstr "Русский" | ||
55 | |||
56 | #: application/Thumbnailer.php:62 | ||
57 | msgid "" | ||
58 | "php-gd extension must be loaded to use thumbnails. Thumbnails are now " | ||
59 | "disabled. Please reload the page." | ||
60 | msgstr "" | ||
61 | "для использования миниатюр необходимо загрузить расширение php-gd. Миниатюры " | ||
62 | "сейчас отключены. Перезагрузите страницу." | ||
63 | |||
64 | #: application/Utils.php:405 | ||
65 | msgid "Setting not set" | ||
66 | msgstr "Настройка не задана" | ||
67 | |||
68 | #: application/Utils.php:412 | ||
69 | msgid "Unlimited" | ||
70 | msgstr "Неограниченно" | ||
71 | |||
72 | #: application/Utils.php:415 | ||
73 | msgid "B" | ||
74 | msgstr "Б" | ||
75 | |||
76 | #: application/Utils.php:415 | ||
77 | msgid "kiB" | ||
78 | msgstr "КБ" | ||
79 | |||
80 | #: application/Utils.php:415 | ||
81 | msgid "MiB" | ||
82 | msgstr "МБ" | ||
83 | |||
84 | #: application/Utils.php:415 | ||
85 | msgid "GiB" | ||
86 | msgstr "ГБ" | ||
87 | |||
88 | #: application/bookmark/BookmarkFileService.php:185 | ||
89 | #: application/bookmark/BookmarkFileService.php:207 | ||
90 | #: application/bookmark/BookmarkFileService.php:229 | ||
91 | #: application/bookmark/BookmarkFileService.php:243 | ||
92 | msgid "You're not authorized to alter the datastore" | ||
93 | msgstr "У вас нет прав на изменение хранилища данных" | ||
94 | |||
95 | #: application/bookmark/BookmarkFileService.php:210 | ||
96 | msgid "This bookmarks already exists" | ||
97 | msgstr "Эта закладка уже существует" | ||
98 | |||
99 | #: application/bookmark/BookmarkInitializer.php:42 | ||
100 | msgid "(private bookmark with thumbnail demo)" | ||
101 | msgstr "(личная закладка с показом миниатюр)" | ||
102 | |||
103 | #: application/bookmark/BookmarkInitializer.php:45 | ||
104 | msgid "" | ||
105 | "Shaarli will automatically pick up the thumbnail for links to a variety of " | ||
106 | "websites.\n" | ||
107 | "\n" | ||
108 | "Explore your new Shaarli instance by trying out controls and menus.\n" | ||
109 | "Visit the project on [Github](https://github.com/shaarli/Shaarli) or [the " | ||
110 | "documentation](https://shaarli.readthedocs.io/en/master/) to learn more " | ||
111 | "about Shaarli.\n" | ||
112 | "\n" | ||
113 | "Now you can edit or delete the default shaares.\n" | ||
114 | msgstr "" | ||
115 | "Shaarli автоматически подберет миниатюру для ссылок на различные сайты.\n" | ||
116 | "\n" | ||
117 | "Изучите Shaarli, попробовав элементы управления и меню.\n" | ||
118 | "Посетите проект [Github](https://github.com/shaarli/Shaarli) или " | ||
119 | "[документацию](https://shaarli.readthedocs.io/en/master/),чтобы узнать " | ||
120 | "больше о Shaarli.\n" | ||
121 | "\n" | ||
122 | "Теперь вы можете редактировать или удалять шаары по умолчанию.\n" | ||
123 | |||
124 | #: application/bookmark/BookmarkInitializer.php:58 | ||
125 | msgid "Note: Shaare descriptions" | ||
126 | msgstr "Примечание: описания Шаар" | ||
127 | |||
128 | #: application/bookmark/BookmarkInitializer.php:60 | ||
129 | msgid "" | ||
130 | "Adding a shaare without entering a URL creates a text-only \"note\" post " | ||
131 | "such as this one.\n" | ||
132 | "This note is private, so you are the only one able to see it while logged " | ||
133 | "in.\n" | ||
134 | "\n" | ||
135 | "You can use this to keep notes, post articles, code snippets, and much " | ||
136 | "more.\n" | ||
137 | "\n" | ||
138 | "The Markdown formatting setting allows you to format your notes and bookmark " | ||
139 | "description:\n" | ||
140 | "\n" | ||
141 | "### Title headings\n" | ||
142 | "\n" | ||
143 | "#### Multiple headings levels\n" | ||
144 | " * bullet lists\n" | ||
145 | " * _italic_ text\n" | ||
146 | " * **bold** text\n" | ||
147 | " * ~~strike through~~ text\n" | ||
148 | " * `code` blocks\n" | ||
149 | " * images\n" | ||
150 | " * [links](https://en.wikipedia.org/wiki/Markdown)\n" | ||
151 | "\n" | ||
152 | "Markdown also supports tables:\n" | ||
153 | "\n" | ||
154 | "| Name | Type | Color | Qty |\n" | ||
155 | "| ------- | --------- | ------ | ----- |\n" | ||
156 | "| Orange | Fruit | Orange | 126 |\n" | ||
157 | "| Apple | Fruit | Any | 62 |\n" | ||
158 | "| Lemon | Fruit | Yellow | 30 |\n" | ||
159 | "| Carrot | Vegetable | Red | 14 |\n" | ||
160 | msgstr "" | ||
161 | "При добавлении закладки без ввода URL адреса создается текстовая \"заметка" | ||
162 | "\", такая как эта.\n" | ||
163 | "Эта заметка является личной, поэтому вы единственный, кто может ее увидеть, " | ||
164 | "находясь в системе.\n" | ||
165 | "\n" | ||
166 | "Вы можете использовать это для хранения заметок, публикации статей, " | ||
167 | "фрагментов кода и многого другого.\n" | ||
168 | "\n" | ||
169 | "Параметр форматирования Markdown позволяет форматировать заметки и описание " | ||
170 | "закладок:\n" | ||
171 | "\n" | ||
172 | "### Заголовок заголовков\n" | ||
173 | "\n" | ||
174 | "#### Multiple headings levels\n" | ||
175 | " * маркированные списки\n" | ||
176 | " * _наклонный_ текст\n" | ||
177 | " * **жирный** текст\n" | ||
178 | " * ~~зачеркнутый~~ текст\n" | ||
179 | " * блоки `кода`\n" | ||
180 | " * изображения\n" | ||
181 | " * [ссылки](https://en.wikipedia.org/wiki/Markdown)\n" | ||
182 | "\n" | ||
183 | "Markdown также поддерживает таблицы:\n" | ||
184 | "\n" | ||
185 | "| Имя | Тип | Цвет | Количество |\n" | ||
186 | "| ------- | --------- | ------ | ----- |\n" | ||
187 | "| Апельсин | Фрукт | Оранжевый | 126 |\n" | ||
188 | "| Яблоко | Фрукт | Любой | 62 |\n" | ||
189 | "| Лимон | Фрукт | Желтый | 30 |\n" | ||
190 | "| Морковь | Овощ | Красный | 14 |\n" | ||
191 | |||
192 | #: application/bookmark/BookmarkInitializer.php:94 | ||
193 | #: application/legacy/LegacyLinkDB.php:246 | ||
194 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | ||
195 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
196 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:15 | ||
197 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:48 | ||
198 | msgid "" | ||
199 | "The personal, minimalist, super-fast, database free, bookmarking service" | ||
200 | msgstr "Личный, минималистичный, сверхбыстрый сервис закладок без баз данных" | ||
201 | |||
202 | #: application/bookmark/BookmarkInitializer.php:97 | ||
203 | msgid "" | ||
204 | "Welcome to Shaarli!\n" | ||
205 | "\n" | ||
206 | "Shaarli allows you to bookmark your favorite pages, and share them with " | ||
207 | "others or store them privately.\n" | ||
208 | "You can add a description to your bookmarks, such as this one, and tag " | ||
209 | "them.\n" | ||
210 | "\n" | ||
211 | "Create a new shaare by clicking the `+Shaare` button, or using any of the " | ||
212 | "recommended tools (browser extension, mobile app, bookmarklet, REST API, " | ||
213 | "etc.).\n" | ||
214 | "\n" | ||
215 | "You can easily retrieve your links, even with thousands of them, using the " | ||
216 | "internal search engine, or search through tags (e.g. this Shaare is tagged " | ||
217 | "with `shaarli` and `help`).\n" | ||
218 | "Hashtags such as #shaarli #help are also supported.\n" | ||
219 | "You can also filter the available [RSS feed](/feed/atom) and picture wall by " | ||
220 | "tag or plaintext search.\n" | ||
221 | "\n" | ||
222 | "We hope that you will enjoy using Shaarli, maintained with ❤️ by the " | ||
223 | "community!\n" | ||
224 | "Feel free to open [an issue](https://github.com/shaarli/Shaarli/issues) if " | ||
225 | "you have a suggestion or encounter an issue.\n" | ||
226 | msgstr "" | ||
227 | "Добро пожаловать в Shaarli!\n" | ||
228 | "\n" | ||
229 | "Shaarli позволяет добавлять в закладки свои любимые страницы и делиться ими " | ||
230 | "с другими или хранить их в частном порядке.\n" | ||
231 | "Вы можете добавить описание к своим закладкам, например этой, и пометить " | ||
232 | "их.\n" | ||
233 | "\n" | ||
234 | "Создайте новую закладку, нажав кнопку `+Поделиться`, или используя любой из " | ||
235 | "рекомендуемых инструментов (расширение для браузера, мобильное приложение, " | ||
236 | "букмарклет, REST API и т.д.).\n" | ||
237 | "\n" | ||
238 | "Вы можете легко получить свои ссылки, даже если их тысячи, с помощью " | ||
239 | "внутренней поисковой системы или поиска по тегам (например, эта заметка " | ||
240 | "помечена тегами `shaarli` and `help`).\n" | ||
241 | "Также поддерживаются хэштеги, такие как #shaarli #help.\n" | ||
242 | "Вы можете также фильтровать доступный [RSS канал](/feed/atom) и галерею по " | ||
243 | "тегу или по поиску текста.\n" | ||
244 | "\n" | ||
245 | "Мы надеемся, что вам понравится использовать Shaarli, с ❤️ поддерживаемый " | ||
246 | "сообществом!\n" | ||
247 | "Не стесняйтесь открывать [запрос](https://github.com/shaarli/Shaarli/" | ||
248 | "issues), если у вас есть предложение или возникла проблема.\n" | ||
249 | |||
250 | #: application/bookmark/exception/BookmarkNotFoundException.php:14 | ||
251 | msgid "The link you are trying to reach does not exist or has been deleted." | ||
252 | msgstr "" | ||
253 | "Ссылка, по которой вы пытаетесь перейти, не существует или была удалена." | ||
254 | |||
255 | #: application/config/ConfigJson.php:52 application/config/ConfigPhp.php:131 | ||
256 | msgid "" | ||
257 | "Shaarli could not create the config file. Please make sure Shaarli has the " | ||
258 | "right to write in the folder is it installed in." | ||
259 | msgstr "" | ||
260 | "Shaarli не удалось создать файл конфигурации. Убедитесь, что у Shaarli есть " | ||
261 | "право на запись в папку, в которой он установлен." | ||
262 | |||
263 | #: application/config/ConfigManager.php:137 | ||
264 | #: application/config/ConfigManager.php:164 | ||
265 | msgid "Invalid setting key parameter. String expected, got: " | ||
266 | msgstr "Неверная настройка ключевого параметра. Ожидалась строка, получено: " | ||
267 | |||
268 | #: application/config/exception/MissingFieldConfigException.php:20 | ||
269 | #, php-format | ||
270 | msgid "Configuration value is required for %s" | ||
271 | msgstr "Значение конфигурации требуется для %s" | ||
272 | |||
273 | #: application/config/exception/PluginConfigOrderException.php:15 | ||
274 | msgid "An error occurred while trying to save plugins loading order." | ||
275 | msgstr "Произошла ошибка при попытке сохранить порядок загрузки плагинов." | ||
276 | |||
277 | #: application/config/exception/UnauthorizedConfigException.php:15 | ||
278 | msgid "You are not authorized to alter config." | ||
279 | msgstr "Вы не авторизованы для изменения конфигурации." | ||
280 | |||
281 | #: application/exceptions/IOException.php:23 | ||
282 | msgid "Error accessing" | ||
283 | msgstr "Ошибка доступа" | ||
284 | |||
285 | #: application/feed/FeedBuilder.php:180 | ||
286 | msgid "Direct link" | ||
287 | msgstr "Прямая ссылка" | ||
288 | |||
289 | #: application/feed/FeedBuilder.php:182 | ||
290 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:103 | ||
291 | #: tmp/dailyrss.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 | ||
292 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:179 | ||
293 | msgid "Permalink" | ||
294 | msgstr "Постоянная ссылка" | ||
295 | |||
296 | #: application/front/controller/admin/ConfigureController.php:56 | ||
297 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | ||
298 | msgid "Configure" | ||
299 | msgstr "Настройка" | ||
300 | |||
301 | #: application/front/controller/admin/ConfigureController.php:106 | ||
302 | #: application/legacy/LegacyUpdater.php:539 | ||
303 | msgid "You have enabled or changed thumbnails mode." | ||
304 | msgstr "Вы включили или изменили режим миниатюр." | ||
305 | |||
306 | #: application/front/controller/admin/ConfigureController.php:108 | ||
307 | #: application/front/controller/admin/ServerController.php:76 | ||
308 | #: application/legacy/LegacyUpdater.php:540 | ||
309 | msgid "Please synchronize them." | ||
310 | msgstr "Пожалуйста, синхронизируйте их." | ||
311 | |||
312 | #: application/front/controller/admin/ConfigureController.php:119 | ||
313 | #: application/front/controller/visitor/InstallController.php:149 | ||
314 | msgid "Error while writing config file after configuration update." | ||
315 | msgstr "Ошибка при записи файла конфигурации после обновления конфигурации." | ||
316 | |||
317 | #: application/front/controller/admin/ConfigureController.php:128 | ||
318 | msgid "Configuration was saved." | ||
319 | msgstr "Конфигурация сохранена." | ||
320 | |||
321 | #: application/front/controller/admin/ExportController.php:26 | ||
322 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:64 | ||
323 | msgid "Export" | ||
324 | msgstr "Экспорт" | ||
325 | |||
326 | #: application/front/controller/admin/ExportController.php:42 | ||
327 | msgid "Please select an export mode." | ||
328 | msgstr "Выберите режим экспорта." | ||
329 | |||
330 | #: application/front/controller/admin/ImportController.php:41 | ||
331 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83 | ||
332 | msgid "Import" | ||
333 | msgstr "Импорт" | ||
334 | |||
335 | #: application/front/controller/admin/ImportController.php:55 | ||
336 | msgid "No import file provided." | ||
337 | msgstr "Файл импорта не предоставлен." | ||
338 | |||
339 | #: application/front/controller/admin/ImportController.php:66 | ||
340 | #, php-format | ||
341 | msgid "" | ||
342 | "The file you are trying to upload is probably bigger than what this " | ||
343 | "webserver can accept (%s). Please upload in smaller chunks." | ||
344 | msgstr "" | ||
345 | "Файл, который вы пытаетесь загрузить, вероятно, больше, чем может принять " | ||
346 | "этот сервер (%s). Пожалуйста, загружайте небольшими частями." | ||
347 | |||
348 | #: application/front/controller/admin/ManageTagController.php:30 | ||
349 | msgid "whitespace" | ||
350 | msgstr "пробел" | ||
351 | |||
352 | #: application/front/controller/admin/ManageTagController.php:35 | ||
353 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 | ||
354 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 | ||
355 | msgid "Manage tags" | ||
356 | msgstr "Управление тегами" | ||
357 | |||
358 | #: application/front/controller/admin/ManageTagController.php:54 | ||
359 | msgid "Invalid tags provided." | ||
360 | msgstr "Предоставлены недействительные теги." | ||
361 | |||
362 | #: application/front/controller/admin/ManageTagController.php:78 | ||
363 | #, php-format | ||
364 | msgid "The tag was removed from %d bookmark." | ||
365 | msgid_plural "The tag was removed from %d bookmarks." | ||
366 | msgstr[0] "Тег был удален из %d закладки." | ||
367 | msgstr[1] "Тег был удален из %d закладок." | ||
368 | msgstr[2] "Тег был удален из %d закладок." | ||
369 | |||
370 | #: application/front/controller/admin/ManageTagController.php:83 | ||
371 | #, php-format | ||
372 | msgid "The tag was renamed in %d bookmark." | ||
373 | msgid_plural "The tag was renamed in %d bookmarks." | ||
374 | msgstr[0] "Тег был переименован в %d закладке." | ||
375 | msgstr[1] "Тег был переименован в %d закладках." | ||
376 | msgstr[2] "Тег был переименован в %d закладках." | ||
377 | |||
378 | #: application/front/controller/admin/ManageTagController.php:105 | ||
379 | msgid "Tags separator must be a single character." | ||
380 | msgstr "Разделитель тегов должен состоять из одного символа." | ||
381 | |||
382 | #: application/front/controller/admin/ManageTagController.php:111 | ||
383 | msgid "These characters are reserved and can't be used as tags separator: " | ||
384 | msgstr "" | ||
385 | "Эти символы зарезервированы и не могут использоваться в качестве разделителя " | ||
386 | "тегов: " | ||
387 | |||
388 | #: application/front/controller/admin/PasswordController.php:28 | ||
389 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 | ||
390 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:35 | ||
391 | msgid "Change password" | ||
392 | msgstr "Изменить пароль" | ||
393 | |||
394 | #: application/front/controller/admin/PasswordController.php:55 | ||
395 | msgid "You must provide the current and new password to change it." | ||
396 | msgstr "Вы должны предоставить текущий и новый пароль, чтобы изменить его." | ||
397 | |||
398 | #: application/front/controller/admin/PasswordController.php:71 | ||
399 | msgid "The old password is not correct." | ||
400 | msgstr "Старый пароль неверен." | ||
401 | |||
402 | #: application/front/controller/admin/PasswordController.php:97 | ||
403 | msgid "Your password has been changed" | ||
404 | msgstr "Пароль изменен" | ||
405 | |||
406 | #: application/front/controller/admin/PluginsController.php:45 | ||
407 | msgid "Plugin Administration" | ||
408 | msgstr "Управление плагинами" | ||
409 | |||
410 | #: application/front/controller/admin/PluginsController.php:76 | ||
411 | msgid "Setting successfully saved." | ||
412 | msgstr "Настройка успешно сохранена." | ||
413 | |||
414 | #: application/front/controller/admin/PluginsController.php:79 | ||
415 | msgid "Error while saving plugin configuration: " | ||
416 | msgstr "Ошибка при сохранении конфигурации плагина: " | ||
417 | |||
418 | #: application/front/controller/admin/ServerController.php:35 | ||
419 | msgid "Check disabled" | ||
420 | msgstr "Проверка отключена" | ||
421 | |||
422 | #: application/front/controller/admin/ServerController.php:57 | ||
423 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
424 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | ||
425 | msgid "Server administration" | ||
426 | msgstr "Администрирование сервера" | ||
427 | |||
428 | #: application/front/controller/admin/ServerController.php:74 | ||
429 | msgid "Thumbnails cache has been cleared." | ||
430 | msgstr "Кэш миниатюр очищен." | ||
431 | |||
432 | #: application/front/controller/admin/ServerController.php:85 | ||
433 | msgid "Shaarli's cache folder has been cleared!" | ||
434 | msgstr "Папка с кэшем Shaarli очищена!" | ||
435 | |||
436 | #: application/front/controller/admin/ShaareAddController.php:26 | ||
437 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 | ||
438 | msgid "Shaare a new link" | ||
439 | msgstr "Поделиться новой ссылкой" | ||
440 | |||
441 | #: application/front/controller/admin/ShaareManageController.php:35 | ||
442 | #: application/front/controller/admin/ShaareManageController.php:93 | ||
443 | msgid "Invalid bookmark ID provided." | ||
444 | msgstr "Указан неверный идентификатор закладки." | ||
445 | |||
446 | #: application/front/controller/admin/ShaareManageController.php:47 | ||
447 | #: application/front/controller/admin/ShaareManageController.php:116 | ||
448 | #: application/front/controller/admin/ShaareManageController.php:156 | ||
449 | #: application/front/controller/admin/ShaarePublishController.php:82 | ||
450 | #, php-format | ||
451 | msgid "Bookmark with identifier %s could not be found." | ||
452 | msgstr "Закладка с идентификатором %s не найдена." | ||
453 | |||
454 | #: application/front/controller/admin/ShaareManageController.php:101 | ||
455 | msgid "Invalid visibility provided." | ||
456 | msgstr "Предоставлена недопустимая видимость." | ||
457 | |||
458 | #: application/front/controller/admin/ShaarePublishController.php:173 | ||
459 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:171 | ||
460 | msgid "Edit" | ||
461 | msgstr "Редактировать" | ||
462 | |||
463 | #: application/front/controller/admin/ShaarePublishController.php:176 | ||
464 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | ||
465 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:28 | ||
466 | msgid "Shaare" | ||
467 | msgstr "Поделиться" | ||
468 | |||
469 | #: application/front/controller/admin/ShaarePublishController.php:208 | ||
470 | msgid "Note: " | ||
471 | msgstr "Заметка: " | ||
472 | |||
473 | #: application/front/controller/admin/ThumbnailsController.php:37 | ||
474 | #: tmp/thumbnails.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
475 | msgid "Thumbnails update" | ||
476 | msgstr "Обновление миниатюр" | ||
477 | |||
478 | #: application/front/controller/admin/ToolsController.php:31 | ||
479 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:33 | ||
480 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:33 | ||
481 | msgid "Tools" | ||
482 | msgstr "Инструменты" | ||
483 | |||
484 | #: application/front/controller/visitor/BookmarkListController.php:121 | ||
485 | msgid "Search: " | ||
486 | msgstr "Поиск: " | ||
487 | |||
488 | #: application/front/controller/visitor/DailyController.php:200 | ||
489 | msgid "day" | ||
490 | msgstr "день" | ||
491 | |||
492 | #: application/front/controller/visitor/DailyController.php:200 | ||
493 | #: application/front/controller/visitor/DailyController.php:203 | ||
494 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 | ||
495 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
496 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:48 | ||
497 | msgid "Daily" | ||
498 | msgstr "За день" | ||
499 | |||
500 | #: application/front/controller/visitor/DailyController.php:201 | ||
501 | msgid "week" | ||
502 | msgstr "неделя" | ||
503 | |||
504 | #: application/front/controller/visitor/DailyController.php:201 | ||
505 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
506 | msgid "Weekly" | ||
507 | msgstr "За неделю" | ||
508 | |||
509 | #: application/front/controller/visitor/DailyController.php:202 | ||
510 | msgid "month" | ||
511 | msgstr "месяц" | ||
512 | |||
513 | #: application/front/controller/visitor/DailyController.php:202 | ||
514 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | ||
515 | msgid "Monthly" | ||
516 | msgstr "За месяц" | ||
517 | |||
518 | #: application/front/controller/visitor/ErrorController.php:30 | ||
519 | msgid "Error: " | ||
520 | msgstr "Ошибка: " | ||
521 | |||
522 | #: application/front/controller/visitor/ErrorController.php:34 | ||
523 | msgid "Please report it on Github." | ||
524 | msgstr "Пожалуйста, сообщите об этом на Github." | ||
525 | |||
526 | #: application/front/controller/visitor/ErrorController.php:39 | ||
527 | msgid "An unexpected error occurred." | ||
528 | msgstr "Произошла непредвиденная ошибка." | ||
529 | |||
530 | #: application/front/controller/visitor/ErrorNotFoundController.php:25 | ||
531 | msgid "Requested page could not be found." | ||
532 | msgstr "Запрошенная страница не может быть найдена." | ||
533 | |||
534 | #: application/front/controller/visitor/InstallController.php:65 | ||
535 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 | ||
536 | msgid "Install Shaarli" | ||
537 | msgstr "Установить Shaarli" | ||
538 | |||
539 | #: application/front/controller/visitor/InstallController.php:85 | ||
540 | #, php-format | ||
541 | msgid "" | ||
542 | "<pre>Sessions do not seem to work correctly on your server.<br>Make sure the " | ||
543 | "variable \"session.save_path\" is set correctly in your PHP config, and that " | ||
544 | "you have write access to it.<br>It currently points to %s.<br>On some " | ||
545 | "browsers, accessing your server via a hostname like 'localhost' or any " | ||
546 | "custom hostname without a dot causes cookie storage to fail. We recommend " | ||
547 | "accessing your server via it's IP address or Fully Qualified Domain Name.<br>" | ||
548 | msgstr "" | ||
549 | "<pre>Сессии на вашем сервере работают некорректно.<br>Убедитесь, что " | ||
550 | "переменная \"session.save_path\" правильно установлена в вашей конфигурации " | ||
551 | "PHP и что у вас есть доступ к ней на запись.<br>В настоящее время она " | ||
552 | "указывает на %s.<br>В некоторых браузерах доступ к вашему серверу через имя " | ||
553 | "хоста, например localhost или любое другое имя хоста без точки, приводит к " | ||
554 | "сбою хранилища файлов cookie. Мы рекомендуем получить доступ к вашему " | ||
555 | "серверу через его IP адрес или полное доменное имя.<br>" | ||
556 | |||
557 | #: application/front/controller/visitor/InstallController.php:157 | ||
558 | msgid "" | ||
559 | "Shaarli is now configured. Please login and start shaaring your bookmarks!" | ||
560 | msgstr "Shaarli настроен. Войдите и начните делиться своими закладками!" | ||
561 | |||
562 | #: application/front/controller/visitor/InstallController.php:171 | ||
563 | msgid "Insufficient permissions:" | ||
564 | msgstr "Недостаточно разрешений:" | ||
565 | |||
566 | #: application/front/controller/visitor/LoginController.php:46 | ||
567 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
568 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | ||
569 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77 | ||
570 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:101 | ||
571 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:77 | ||
572 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:101 | ||
573 | msgid "Login" | ||
574 | msgstr "Вход" | ||
575 | |||
576 | #: application/front/controller/visitor/LoginController.php:78 | ||
577 | msgid "Wrong login/password." | ||
578 | msgstr "Неверный логин или пароль." | ||
579 | |||
580 | #: application/front/controller/visitor/PictureWallController.php:29 | ||
581 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:43 | ||
582 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:43 | ||
583 | msgid "Picture wall" | ||
584 | msgstr "Галерея" | ||
585 | |||
586 | #: application/front/controller/visitor/TagCloudController.php:90 | ||
587 | msgid "Tag " | ||
588 | msgstr "Тег " | ||
589 | |||
590 | #: application/front/exceptions/AlreadyInstalledException.php:11 | ||
591 | msgid "Shaarli has already been installed. Login to edit the configuration." | ||
592 | msgstr "Shaarli уже установлен. Войдите, чтобы изменить конфигурацию." | ||
593 | |||
594 | #: application/front/exceptions/LoginBannedException.php:11 | ||
595 | msgid "" | ||
596 | "You have been banned after too many failed login attempts. Try again later." | ||
597 | msgstr "" | ||
598 | "Вы были заблокированы из-за большого количества неудачных попыток входа в " | ||
599 | "систему. Попробуйте позже." | ||
600 | |||
601 | #: application/front/exceptions/OpenShaarliPasswordException.php:16 | ||
602 | msgid "You are not supposed to change a password on an Open Shaarli." | ||
603 | msgstr "Вы не должны менять пароль на Open Shaarli." | ||
604 | |||
605 | #: application/front/exceptions/ThumbnailsDisabledException.php:11 | ||
606 | msgid "Picture wall unavailable (thumbnails are disabled)." | ||
607 | msgstr "Галерея недоступна (миниатюры отключены)." | ||
608 | |||
609 | #: application/front/exceptions/WrongTokenException.php:16 | ||
610 | msgid "Wrong token." | ||
611 | msgstr "Неправильный токен." | ||
612 | |||
613 | #: application/helper/ApplicationUtils.php:163 | ||
614 | #, php-format | ||
615 | msgid "" | ||
616 | "Your PHP version is obsolete! Shaarli requires at least PHP %s, and thus " | ||
617 | "cannot run. Your PHP version has known security vulnerabilities and should " | ||
618 | "be updated as soon as possible." | ||
619 | msgstr "" | ||
620 | "Ваша версия PHP устарела! Shaarli требует как минимум PHP %s, и поэтому не " | ||
621 | "может работать. В вашей версии PHP есть известные уязвимости в системе " | ||
622 | "безопасности, и ее следует обновить как можно скорее." | ||
623 | |||
624 | #: application/helper/ApplicationUtils.php:198 | ||
625 | #: application/helper/ApplicationUtils.php:218 | ||
626 | msgid "directory is not readable" | ||
627 | msgstr "папка не доступна для чтения" | ||
628 | |||
629 | #: application/helper/ApplicationUtils.php:221 | ||
630 | msgid "directory is not writable" | ||
631 | msgstr "папка не доступна для записи" | ||
632 | |||
633 | #: application/helper/ApplicationUtils.php:245 | ||
634 | msgid "file is not readable" | ||
635 | msgstr "файл не доступен для чтения" | ||
636 | |||
637 | #: application/helper/ApplicationUtils.php:248 | ||
638 | msgid "file is not writable" | ||
639 | msgstr "файл не доступен для записи" | ||
640 | |||
641 | #: application/helper/ApplicationUtils.php:282 | ||
642 | msgid "Configuration parsing" | ||
643 | msgstr "Разбор конфигурации" | ||
644 | |||
645 | #: application/helper/ApplicationUtils.php:283 | ||
646 | msgid "Slim Framework (routing, etc.)" | ||
647 | msgstr "Slim Framework (маршрутизация и т. д.)" | ||
648 | |||
649 | #: application/helper/ApplicationUtils.php:284 | ||
650 | msgid "Multibyte (Unicode) string support" | ||
651 | msgstr "Поддержка многобайтовых (Unicode) строк" | ||
652 | |||
653 | #: application/helper/ApplicationUtils.php:285 | ||
654 | msgid "Required to use thumbnails" | ||
655 | msgstr "Обязательно использование миниатюр" | ||
656 | |||
657 | #: application/helper/ApplicationUtils.php:286 | ||
658 | msgid "Localized text sorting (e.g. e->è->f)" | ||
659 | msgstr "Локализованная сортировка текста (например, e->è->f)" | ||
660 | |||
661 | #: application/helper/ApplicationUtils.php:287 | ||
662 | msgid "Better retrieval of bookmark metadata and thumbnail" | ||
663 | msgstr "Лучшее получение метаданных закладок и миниатюр" | ||
664 | |||
665 | #: application/helper/ApplicationUtils.php:288 | ||
666 | msgid "Use the translation system in gettext mode" | ||
667 | msgstr "Используйте систему перевода в режиме gettext" | ||
668 | |||
669 | #: application/helper/ApplicationUtils.php:289 | ||
670 | msgid "Login using LDAP server" | ||
671 | msgstr "Вход через LDAP сервер" | ||
672 | |||
673 | #: application/helper/DailyPageHelper.php:172 | ||
674 | msgid "Week" | ||
675 | msgstr "Неделя" | ||
676 | |||
677 | #: application/helper/DailyPageHelper.php:176 | ||
678 | msgid "Today" | ||
679 | msgstr "Сегодня" | ||
680 | |||
681 | #: application/helper/DailyPageHelper.php:178 | ||
682 | msgid "Yesterday" | ||
683 | msgstr "Вчера" | ||
684 | |||
685 | #: application/helper/FileUtils.php:100 | ||
686 | msgid "Provided path is not a directory." | ||
687 | msgstr "Указанный путь не является папкой." | ||
688 | |||
689 | #: application/helper/FileUtils.php:104 | ||
690 | msgid "Trying to delete a folder outside of Shaarli path." | ||
691 | msgstr "Попытка удалить папку за пределами пути Shaarli." | ||
692 | |||
693 | #: application/legacy/LegacyLinkDB.php:131 | ||
694 | msgid "You are not authorized to add a link." | ||
695 | msgstr "Вы не авторизованы для изменения ссылки." | ||
696 | |||
697 | #: application/legacy/LegacyLinkDB.php:134 | ||
698 | msgid "Internal Error: A link should always have an id and URL." | ||
699 | msgstr "Внутренняя ошибка: ссылка всегда должна иметь идентификатор и URL." | ||
700 | |||
701 | #: application/legacy/LegacyLinkDB.php:137 | ||
702 | msgid "You must specify an integer as a key." | ||
703 | msgstr "В качестве ключа необходимо указать целое число." | ||
704 | |||
705 | #: application/legacy/LegacyLinkDB.php:140 | ||
706 | msgid "Array offset and link ID must be equal." | ||
707 | msgstr "Смещение массива и идентификатор ссылки должны быть одинаковыми." | ||
708 | |||
709 | #: application/legacy/LegacyLinkDB.php:249 | ||
710 | msgid "" | ||
711 | "Welcome to Shaarli! This is your first public bookmark. To edit or delete " | ||
712 | "me, you must first login.\n" | ||
713 | "\n" | ||
714 | "To learn how to use Shaarli, consult the link \"Documentation\" at the " | ||
715 | "bottom of this page.\n" | ||
716 | "\n" | ||
717 | "You use the community supported version of the original Shaarli project, by " | ||
718 | "Sebastien Sauvage." | ||
719 | msgstr "" | ||
720 | "Добро пожаловать в Shaarli! Это ваша первая общедоступная закладка. Чтобы " | ||
721 | "отредактировать или удалить меня, вы должны сначала авторизоваться.\n" | ||
722 | "\n" | ||
723 | "Чтобы узнать, как использовать Shaarli, перейдите по ссылке \"Документация\" " | ||
724 | "внизу этой страницы.\n" | ||
725 | "\n" | ||
726 | "Вы используете поддерживаемую сообществом версию оригинального проекта " | ||
727 | "Shaarli от Себастьяна Соваж." | ||
728 | |||
729 | #: application/legacy/LegacyLinkDB.php:266 | ||
730 | msgid "My secret stuff... - Pastebin.com" | ||
731 | msgstr "Мой секрет... - Pastebin.com" | ||
732 | |||
733 | #: application/legacy/LegacyLinkDB.php:268 | ||
734 | msgid "Shhhh! I'm a private link only YOU can see. You can delete me too." | ||
735 | msgstr "" | ||
736 | "Тссс! Это личная ссылка, которую видите только ВЫ. Вы тоже можете удалить " | ||
737 | "меня." | ||
738 | |||
739 | #: application/legacy/LegacyUpdater.php:104 | ||
740 | msgid "Couldn't retrieve updater class methods." | ||
741 | msgstr "Не удалось получить методы класса средства обновления." | ||
742 | |||
743 | #: application/legacy/LegacyUpdater.php:540 | ||
744 | msgid "<a href=\"./admin/thumbnails\">" | ||
745 | msgstr "<a href=\"./admin/thumbnails\">" | ||
746 | |||
747 | #: application/netscape/NetscapeBookmarkUtils.php:63 | ||
748 | msgid "Invalid export selection:" | ||
749 | msgstr "Неверный выбор экспорта:" | ||
750 | |||
751 | #: application/netscape/NetscapeBookmarkUtils.php:215 | ||
752 | #, php-format | ||
753 | msgid "File %s (%d bytes) " | ||
754 | msgstr "Файл %s (%d байт) " | ||
755 | |||
756 | #: application/netscape/NetscapeBookmarkUtils.php:217 | ||
757 | msgid "has an unknown file format. Nothing was imported." | ||
758 | msgstr "имеет неизвестный формат файла. Ничего не импортировано." | ||
759 | |||
760 | #: application/netscape/NetscapeBookmarkUtils.php:221 | ||
761 | #, php-format | ||
762 | msgid "" | ||
763 | "was successfully processed in %d seconds: %d bookmarks imported, %d " | ||
764 | "bookmarks overwritten, %d bookmarks skipped." | ||
765 | msgstr "" | ||
766 | "успешно обработано за %d секунд: %d закладок импортировано, %d закладок " | ||
767 | "перезаписаны, %d закладок пропущено." | ||
768 | |||
769 | #: application/plugin/PluginManager.php:125 | ||
770 | msgid " [plugin incompatibility]: " | ||
771 | msgstr " [несовместимость плагинов]: " | ||
772 | |||
773 | #: application/plugin/exception/PluginFileNotFoundException.php:22 | ||
774 | #, php-format | ||
775 | msgid "Plugin \"%s\" files not found." | ||
776 | msgstr "Файл плагина \"%s\" не найден." | ||
777 | |||
778 | #: application/render/PageCacheManager.php:32 | ||
779 | #, php-format | ||
780 | msgid "Cannot purge %s: no directory" | ||
781 | msgstr "Невозможно очистить%s: нет папки" | ||
782 | |||
783 | #: application/updater/exception/UpdaterException.php:51 | ||
784 | msgid "An error occurred while running the update " | ||
785 | msgstr "Произошла ошибка при запуске обновления " | ||
786 | |||
787 | #: index.php:81 | ||
788 | msgid "Shared bookmarks on " | ||
789 | msgstr "Общие закладки на " | ||
790 | |||
791 | #: plugins/addlink_toolbar/addlink_toolbar.php:31 | ||
792 | msgid "URI" | ||
793 | msgstr "URI" | ||
794 | |||
795 | #: plugins/addlink_toolbar/addlink_toolbar.php:35 | ||
796 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:20 | ||
797 | msgid "Add link" | ||
798 | msgstr "Добавить ссылку" | ||
799 | |||
800 | #: plugins/addlink_toolbar/addlink_toolbar.php:52 | ||
801 | msgid "Adds the addlink input on the linklist page." | ||
802 | msgstr "" | ||
803 | "Добавляет на страницу списка ссылок поле для добавления новой закладки." | ||
804 | |||
805 | #: plugins/archiveorg/archiveorg.php:29 | ||
806 | msgid "View on archive.org" | ||
807 | msgstr "Посмотреть на archive.org" | ||
808 | |||
809 | #: plugins/archiveorg/archiveorg.php:42 | ||
810 | msgid "For each link, add an Archive.org icon." | ||
811 | msgstr "Для каждой ссылки добавить значок с Archive.org." | ||
812 | |||
813 | #: plugins/default_colors/default_colors.php:38 | ||
814 | msgid "" | ||
815 | "Default colors plugin error: This plugin is active and no custom color is " | ||
816 | "configured." | ||
817 | msgstr "" | ||
818 | "Ошибка плагина цветов по умолчанию: этот плагин активен, и пользовательский " | ||
819 | "цвет не настроен." | ||
820 | |||
821 | #: plugins/default_colors/default_colors.php:113 | ||
822 | msgid "Override default theme colors. Use any CSS valid color." | ||
823 | msgstr "" | ||
824 | "Переопределить цвета темы по умолчанию. Используйте любой допустимый цвет " | ||
825 | "CSS." | ||
826 | |||
827 | #: plugins/default_colors/default_colors.php:114 | ||
828 | msgid "Main color (navbar green)" | ||
829 | msgstr "Основной цвет (зеленый на панели навигации)" | ||
830 | |||
831 | #: plugins/default_colors/default_colors.php:115 | ||
832 | msgid "Background color (light grey)" | ||
833 | msgstr "Цвет фона (светло-серый)" | ||
834 | |||
835 | #: plugins/default_colors/default_colors.php:116 | ||
836 | msgid "Dark main color (e.g. visited links)" | ||
837 | msgstr "Темный основной цвет (например, посещенные ссылки)" | ||
838 | |||
839 | #: plugins/demo_plugin/demo_plugin.php:478 | ||
840 | msgid "" | ||
841 | "A demo plugin covering all use cases for template designers and plugin " | ||
842 | "developers." | ||
843 | msgstr "" | ||
844 | "Демо плагин, охватывающий все варианты использования для дизайнеров шаблонов " | ||
845 | "и разработчиков плагинов." | ||
846 | |||
847 | #: plugins/demo_plugin/demo_plugin.php:479 | ||
848 | msgid "This is a parameter dedicated to the demo plugin. It'll be suffixed." | ||
849 | msgstr "" | ||
850 | "Это параметр предназначен для демонстрационного плагина. Это будет суффикс." | ||
851 | |||
852 | #: plugins/demo_plugin/demo_plugin.php:480 | ||
853 | msgid "Other demo parameter" | ||
854 | msgstr "Другой демонстрационный параметр" | ||
855 | |||
856 | #: plugins/isso/isso.php:22 | ||
857 | msgid "" | ||
858 | "Isso plugin error: Please define the \"ISSO_SERVER\" setting in the plugin " | ||
859 | "administration page." | ||
860 | msgstr "" | ||
861 | "Ошибка плагина Isso: определите параметр \"ISSO_SERVER\" на странице " | ||
862 | "настройки плагина." | ||
863 | |||
864 | #: plugins/isso/isso.php:92 | ||
865 | msgid "Let visitor comment your shaares on permalinks with Isso." | ||
866 | msgstr "" | ||
867 | "Позволить посетителю комментировать ваши закладки по постоянным ссылкам с " | ||
868 | "Isso." | ||
869 | |||
870 | #: plugins/isso/isso.php:93 | ||
871 | msgid "Isso server URL (without 'http://')" | ||
872 | msgstr "URL сервера Isso (без 'http: //')" | ||
873 | |||
874 | #: plugins/piwik/piwik.php:24 | ||
875 | msgid "" | ||
876 | "Piwik plugin error: Please define PIWIK_URL and PIWIK_SITEID in the plugin " | ||
877 | "administration page." | ||
878 | msgstr "" | ||
879 | "Ошибка плагина Piwik: укажите PIWIK_URL и PIWIK_SITEID на странице настройки " | ||
880 | "плагина." | ||
881 | |||
882 | #: plugins/piwik/piwik.php:73 | ||
883 | msgid "A plugin that adds Piwik tracking code to Shaarli pages." | ||
884 | msgstr "Плагин, который добавляет код отслеживания Piwik на страницы Shaarli." | ||
885 | |||
886 | #: plugins/piwik/piwik.php:74 | ||
887 | msgid "Piwik URL" | ||
888 | msgstr "Piwik URL" | ||
889 | |||
890 | #: plugins/piwik/piwik.php:75 | ||
891 | msgid "Piwik site ID" | ||
892 | msgstr "Piwik site ID" | ||
893 | |||
894 | #: plugins/playvideos/playvideos.php:26 | ||
895 | msgid "Video player" | ||
896 | msgstr "Видео плеер" | ||
897 | |||
898 | #: plugins/playvideos/playvideos.php:29 | ||
899 | msgid "Play Videos" | ||
900 | msgstr "Воспроизвести видео" | ||
901 | |||
902 | #: plugins/playvideos/playvideos.php:60 | ||
903 | msgid "Add a button in the toolbar allowing to watch all videos." | ||
904 | msgstr "" | ||
905 | "Добавьте кнопку на панель инструментов, позволяющую смотреть все видео." | ||
906 | |||
907 | #: plugins/playvideos/youtube_playlist.js:214 | ||
908 | msgid "plugins/playvideos/jquery-1.11.2.min.js" | ||
909 | msgstr "plugins/playvideos/jquery-1.11.2.min.js" | ||
910 | |||
911 | #: plugins/pubsubhubbub/pubsubhubbub.php:72 | ||
912 | #, php-format | ||
913 | msgid "Could not publish to PubSubHubbub: %s" | ||
914 | msgstr "Не удалось опубликовать в PubSubHubbub: %s" | ||
915 | |||
916 | #: plugins/pubsubhubbub/pubsubhubbub.php:99 | ||
917 | #, php-format | ||
918 | msgid "Could not post to %s" | ||
919 | msgstr "Не удалось отправить сообщение в %s" | ||
920 | |||
921 | #: plugins/pubsubhubbub/pubsubhubbub.php:103 | ||
922 | #, php-format | ||
923 | msgid "Bad response from the hub %s" | ||
924 | msgstr "Плохой ответ от хаба %s" | ||
925 | |||
926 | #: plugins/pubsubhubbub/pubsubhubbub.php:114 | ||
927 | msgid "Enable PubSubHubbub feed publishing." | ||
928 | msgstr "Включить публикацию канала PubSubHubbub." | ||
929 | |||
930 | #: plugins/qrcode/qrcode.php:74 plugins/wallabag/wallabag.php:72 | ||
931 | msgid "For each link, add a QRCode icon." | ||
932 | msgstr "Для каждой ссылки добавить значок QR кода." | ||
933 | |||
934 | #: plugins/wallabag/wallabag.php:22 | ||
935 | msgid "" | ||
936 | "Wallabag plugin error: Please define the \"WALLABAG_URL\" setting in the " | ||
937 | "plugin administration page." | ||
938 | msgstr "" | ||
939 | "Ошибка плагина Wallabag: определите параметр \"WALLABAG_URL\" на странице " | ||
940 | "настройки плагина." | ||
941 | |||
942 | #: plugins/wallabag/wallabag.php:49 | ||
943 | msgid "Save to wallabag" | ||
944 | msgstr "Сохранить в wallabag" | ||
945 | |||
946 | #: plugins/wallabag/wallabag.php:73 | ||
947 | msgid "Wallabag API URL" | ||
948 | msgstr "Wallabag API URL" | ||
949 | |||
950 | #: plugins/wallabag/wallabag.php:74 | ||
951 | msgid "Wallabag API version (1 or 2)" | ||
952 | msgstr "Wallabag версия API (1 или 2)" | ||
953 | |||
954 | #: tmp/404.b91ef64efc3688266305ea9b42e5017e.rtpl.php:12 | ||
955 | msgid "Sorry, nothing to see here." | ||
956 | msgstr "Извините, тут ничего нет." | ||
957 | |||
958 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
959 | msgid "URL or leave empty to post a note" | ||
960 | msgstr "URL или оставьте пустым, чтобы опубликовать заметку" | ||
961 | |||
962 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | ||
963 | msgid "BULK CREATION" | ||
964 | msgstr "МАССОВОЕ СОЗДАНИЕ" | ||
965 | |||
966 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:40 | ||
967 | msgid "Metadata asynchronous retrieval is disabled." | ||
968 | msgstr "Асинхронное получение метаданных отключено." | ||
969 | |||
970 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 | ||
971 | msgid "" | ||
972 | "We recommend that you enable the setting <em>general > " | ||
973 | "enable_async_metadata</em> in your configuration file to use bulk link " | ||
974 | "creation." | ||
975 | msgstr "" | ||
976 | "Мы рекомендуем включить параметр <em>general > enable_async_metadata</em> в " | ||
977 | "вашем файле конфигурации, чтобы использовать массовое создание ссылок." | ||
978 | |||
979 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:56 | ||
980 | msgid "Shaare multiple new links" | ||
981 | msgstr "Поделиться несколькими новыми ссылками" | ||
982 | |||
983 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:59 | ||
984 | msgid "Add one URL per line to create multiple bookmarks." | ||
985 | msgstr "Добавьте по одному URL в строке, чтобы создать несколько закладок." | ||
986 | |||
987 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:63 | ||
988 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:67 | ||
989 | msgid "Tags" | ||
990 | msgstr "Теги" | ||
991 | |||
992 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:73 | ||
993 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83 | ||
994 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:35 | ||
995 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:169 | ||
996 | msgid "Private" | ||
997 | msgstr "Личный" | ||
998 | |||
999 | #: tmp/addlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:78 | ||
1000 | msgid "Add links" | ||
1001 | msgstr "Добавить ссылки" | ||
1002 | |||
1003 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1004 | msgid "Current password" | ||
1005 | msgstr "Текущий пароль" | ||
1006 | |||
1007 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | ||
1008 | msgid "New password" | ||
1009 | msgstr "Новый пароль" | ||
1010 | |||
1011 | #: tmp/changepassword.b91ef64efc3688266305ea9b42e5017e.rtpl.php:23 | ||
1012 | msgid "Change" | ||
1013 | msgstr "Изменить" | ||
1014 | |||
1015 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1016 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77 | ||
1017 | msgid "Tag" | ||
1018 | msgstr "Тег" | ||
1019 | |||
1020 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | ||
1021 | msgid "New name" | ||
1022 | msgstr "Новое имя" | ||
1023 | |||
1024 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:31 | ||
1025 | msgid "Case sensitive" | ||
1026 | msgstr "С учетом регистра" | ||
1027 | |||
1028 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:34 | ||
1029 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:68 | ||
1030 | msgid "Rename tag" | ||
1031 | msgstr "Переименовать тег" | ||
1032 | |||
1033 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:35 | ||
1034 | msgid "Delete tag" | ||
1035 | msgstr "Удалить тег" | ||
1036 | |||
1037 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:40 | ||
1038 | msgid "You can also edit tags in the" | ||
1039 | msgstr "Вы также можете редактировать теги в" | ||
1040 | |||
1041 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:40 | ||
1042 | msgid "tag list" | ||
1043 | msgstr "список тегов" | ||
1044 | |||
1045 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 | ||
1046 | msgid "Change tags separator" | ||
1047 | msgstr "Изменить разделитель тегов" | ||
1048 | |||
1049 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:50 | ||
1050 | msgid "Your current tag separator is" | ||
1051 | msgstr "Текущий разделитель тегов" | ||
1052 | |||
1053 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:53 | ||
1054 | msgid "New separator" | ||
1055 | msgstr "Новый разделитель" | ||
1056 | |||
1057 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:58 | ||
1058 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:355 | ||
1059 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:121 | ||
1060 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:139 | ||
1061 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:199 | ||
1062 | msgid "Save" | ||
1063 | msgstr "Сохранить" | ||
1064 | |||
1065 | #: tmp/changetag.b91ef64efc3688266305ea9b42e5017e.rtpl.php:61 | ||
1066 | msgid "Note that hashtags won't fully work with a non-whitespace separator." | ||
1067 | msgstr "" | ||
1068 | "Обратите внимание, что хэштеги не будут полностью работать с разделителем, " | ||
1069 | "отличным от пробелов." | ||
1070 | |||
1071 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | ||
1072 | msgid "title" | ||
1073 | msgstr "заголовок" | ||
1074 | |||
1075 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:43 | ||
1076 | msgid "Home link" | ||
1077 | msgstr "Домашняя ссылка" | ||
1078 | |||
1079 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 | ||
1080 | msgid "Default value" | ||
1081 | msgstr "Значение по умолчанию" | ||
1082 | |||
1083 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:58 | ||
1084 | msgid "Theme" | ||
1085 | msgstr "Тема" | ||
1086 | |||
1087 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:85 | ||
1088 | msgid "Description formatter" | ||
1089 | msgstr "Средство форматирования описания" | ||
1090 | |||
1091 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:114 | ||
1092 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77 | ||
1093 | msgid "Language" | ||
1094 | msgstr "Язык" | ||
1095 | |||
1096 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:143 | ||
1097 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:101 | ||
1098 | msgid "Timezone" | ||
1099 | msgstr "Часовой пояс" | ||
1100 | |||
1101 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:144 | ||
1102 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:102 | ||
1103 | msgid "Continent" | ||
1104 | msgstr "Континент" | ||
1105 | |||
1106 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:144 | ||
1107 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:102 | ||
1108 | msgid "City" | ||
1109 | msgstr "Город" | ||
1110 | |||
1111 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:191 | ||
1112 | msgid "Disable session cookie hijacking protection" | ||
1113 | msgstr "Отключить защиту от перехвата файлов сеанса cookie" | ||
1114 | |||
1115 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:193 | ||
1116 | msgid "Check this if you get disconnected or if your IP address changes often" | ||
1117 | msgstr "Проверьте это, если вы отключаетесь или ваш IP адрес часто меняется" | ||
1118 | |||
1119 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:210 | ||
1120 | msgid "Private links by default" | ||
1121 | msgstr "Приватные ссылки по умолчанию" | ||
1122 | |||
1123 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:211 | ||
1124 | msgid "All new links are private by default" | ||
1125 | msgstr "Все новые ссылки по умолчанию являются приватными" | ||
1126 | |||
1127 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:226 | ||
1128 | msgid "RSS direct links" | ||
1129 | msgstr "RSS прямые ссылки" | ||
1130 | |||
1131 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:227 | ||
1132 | msgid "Check this to use direct URL instead of permalink in feeds" | ||
1133 | msgstr "" | ||
1134 | "Установите этот флажок, чтобы использовать прямой URL вместо постоянной " | ||
1135 | "ссылки в фидах" | ||
1136 | |||
1137 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:242 | ||
1138 | msgid "Hide public links" | ||
1139 | msgstr "Скрыть общедоступные ссылки" | ||
1140 | |||
1141 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:243 | ||
1142 | msgid "Do not show any links if the user is not logged in" | ||
1143 | msgstr "Не показывать ссылки, если пользователь не авторизован" | ||
1144 | |||
1145 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:258 | ||
1146 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:149 | ||
1147 | msgid "Check updates" | ||
1148 | msgstr "Проверить обновления" | ||
1149 | |||
1150 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:259 | ||
1151 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:151 | ||
1152 | msgid "Notify me when a new release is ready" | ||
1153 | msgstr "Оповестить, когда будет готов новый выпуск" | ||
1154 | |||
1155 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:274 | ||
1156 | msgid "Automatically retrieve description for new bookmarks" | ||
1157 | msgstr "Автоматически получать описание для новых закладок" | ||
1158 | |||
1159 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:275 | ||
1160 | msgid "Shaarli will try to retrieve the description from meta HTML headers" | ||
1161 | msgstr "Shaarli попытается получить описание из мета заголовков HTML" | ||
1162 | |||
1163 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:290 | ||
1164 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:168 | ||
1165 | msgid "Enable REST API" | ||
1166 | msgstr "Включить REST API" | ||
1167 | |||
1168 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:291 | ||
1169 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:169 | ||
1170 | msgid "Allow third party software to use Shaarli such as mobile application" | ||
1171 | msgstr "" | ||
1172 | "Разрешить стороннему программному обеспечению использовать Shaarli, например " | ||
1173 | "мобильное приложение" | ||
1174 | |||
1175 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:306 | ||
1176 | msgid "API secret" | ||
1177 | msgstr "API ключ" | ||
1178 | |||
1179 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:320 | ||
1180 | msgid "Enable thumbnails" | ||
1181 | msgstr "Включить миниатюры" | ||
1182 | |||
1183 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:324 | ||
1184 | msgid "You need to enable the extension <code>php-gd</code> to use thumbnails." | ||
1185 | msgstr "" | ||
1186 | "Вам необходимо включить расширение <code>php-gd</code> для использования " | ||
1187 | "миниатюр." | ||
1188 | |||
1189 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:328 | ||
1190 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:122 | ||
1191 | msgid "Synchronize thumbnails" | ||
1192 | msgstr "Синхронизировать миниатюры" | ||
1193 | |||
1194 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:339 | ||
1195 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 | ||
1196 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:102 | ||
1197 | msgid "All" | ||
1198 | msgstr "Все" | ||
1199 | |||
1200 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:343 | ||
1201 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:106 | ||
1202 | msgid "Only common media hosts" | ||
1203 | msgstr "Только обычные медиа хосты" | ||
1204 | |||
1205 | #: tmp/configure.b91ef64efc3688266305ea9b42e5017e.rtpl.php:347 | ||
1206 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:110 | ||
1207 | msgid "None" | ||
1208 | msgstr "Ничего" | ||
1209 | |||
1210 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 | ||
1211 | msgid "1 RSS entry per :type" | ||
1212 | msgid_plural "" | ||
1213 | msgstr[0] "1 RSS запись для каждого :type" | ||
1214 | msgstr[1] "1 RSS запись для каждого :type" | ||
1215 | msgstr[2] "1 RSS запись для каждого :type" | ||
1216 | |||
1217 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:49 | ||
1218 | msgid "Previous :type" | ||
1219 | msgid_plural "" | ||
1220 | msgstr[0] "Предыдущий :type" | ||
1221 | msgstr[1] "Предыдущих :type" | ||
1222 | msgstr[2] "Предыдущих :type" | ||
1223 | |||
1224 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:56 | ||
1225 | #: tmp/dailyrss.b91ef64efc3688266305ea9b42e5017e.rtpl.php:7 | ||
1226 | msgid "All links of one :type in a single page." | ||
1227 | msgid_plural "" | ||
1228 | msgstr[0] "Все ссылки одного :type на одной странице." | ||
1229 | msgstr[1] "Все ссылки одного :type на одной странице." | ||
1230 | msgstr[2] "Все ссылки одного :type на одной странице." | ||
1231 | |||
1232 | #: tmp/daily.b91ef64efc3688266305ea9b42e5017e.rtpl.php:63 | ||
1233 | msgid "Next :type" | ||
1234 | msgid_plural "" | ||
1235 | msgstr[0] "Следующий :type" | ||
1236 | msgstr[1] "Следующие :type" | ||
1237 | msgstr[2] "Следующие :type" | ||
1238 | |||
1239 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 | ||
1240 | msgid "Edit Shaare" | ||
1241 | msgstr "Изменить закладку" | ||
1242 | |||
1243 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 | ||
1244 | msgid "New Shaare" | ||
1245 | msgstr "Новая закладка" | ||
1246 | |||
1247 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:38 | ||
1248 | msgid "Created:" | ||
1249 | msgstr "Создано:" | ||
1250 | |||
1251 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | ||
1252 | msgid "URL" | ||
1253 | msgstr "URL" | ||
1254 | |||
1255 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 | ||
1256 | msgid "Title" | ||
1257 | msgstr "Заголовок" | ||
1258 | |||
1259 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:58 | ||
1260 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 | ||
1261 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:75 | ||
1262 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:99 | ||
1263 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:124 | ||
1264 | msgid "Description" | ||
1265 | msgstr "Описание" | ||
1266 | |||
1267 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:89 | ||
1268 | msgid "Description will be rendered with" | ||
1269 | msgstr "Описание будет отображаться с" | ||
1270 | |||
1271 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:91 | ||
1272 | msgid "Markdown syntax documentation" | ||
1273 | msgstr "Документация по синтаксису Markdown" | ||
1274 | |||
1275 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:92 | ||
1276 | msgid "Markdown syntax" | ||
1277 | msgstr "Синтаксис Markdown" | ||
1278 | |||
1279 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:115 | ||
1280 | msgid "Cancel" | ||
1281 | msgstr "Отменить" | ||
1282 | |||
1283 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:121 | ||
1284 | msgid "Apply Changes" | ||
1285 | msgstr "Применить изменения" | ||
1286 | |||
1287 | #: tmp/editlink.b91ef64efc3688266305ea9b42e5017e.rtpl.php:126 | ||
1288 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:173 | ||
1289 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:147 | ||
1290 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:147 | ||
1291 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:67 | ||
1292 | msgid "Delete" | ||
1293 | msgstr "Удалить" | ||
1294 | |||
1295 | #: tmp/editlink.batch.b91ef64efc3688266305ea9b42e5017e.rtpl.php:21 | ||
1296 | #: tmp/editlink.batch.b91ef64efc3688266305ea9b42e5017e.rtpl.php:32 | ||
1297 | msgid "Save all" | ||
1298 | msgstr "Сохранить все" | ||
1299 | |||
1300 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1301 | msgid "Export Database" | ||
1302 | msgstr "Экспорт базы данных" | ||
1303 | |||
1304 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:23 | ||
1305 | msgid "Selection" | ||
1306 | msgstr "Выбор" | ||
1307 | |||
1308 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:40 | ||
1309 | msgid "Public" | ||
1310 | msgstr "Общедоступно" | ||
1311 | |||
1312 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:51 | ||
1313 | msgid "Prepend note permalinks with this Shaarli instance's URL" | ||
1314 | msgstr "" | ||
1315 | "Добавить постоянные ссылки на заметку с URL адресом этого экземпляра Shaarli" | ||
1316 | |||
1317 | #: tmp/export.b91ef64efc3688266305ea9b42e5017e.rtpl.php:52 | ||
1318 | msgid "Useful to import bookmarks in a web browser" | ||
1319 | msgstr "Useful to import bookmarks in a web browser" | ||
1320 | |||
1321 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1322 | msgid "Import Database" | ||
1323 | msgstr "Импорт базы данных" | ||
1324 | |||
1325 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:23 | ||
1326 | msgid "Maximum size allowed:" | ||
1327 | msgstr "Максимально допустимый размер:" | ||
1328 | |||
1329 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | ||
1330 | msgid "Visibility" | ||
1331 | msgstr "Видимость" | ||
1332 | |||
1333 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | ||
1334 | msgid "Use values from the imported file, default to public" | ||
1335 | msgstr "" | ||
1336 | "Использовать значения из импортированного файла, по умолчанию общедоступные" | ||
1337 | |||
1338 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | ||
1339 | msgid "Import all bookmarks as private" | ||
1340 | msgstr "Импортировать все закладки как личные" | ||
1341 | |||
1342 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46 | ||
1343 | msgid "Import all bookmarks as public" | ||
1344 | msgstr "Импортировать все закладки как общедоступные" | ||
1345 | |||
1346 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:57 | ||
1347 | msgid "Overwrite existing bookmarks" | ||
1348 | msgstr "Заменить существующие закладки" | ||
1349 | |||
1350 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:58 | ||
1351 | msgid "Duplicates based on URL" | ||
1352 | msgstr "Дубликаты на основе URL" | ||
1353 | |||
1354 | #: tmp/import.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 | ||
1355 | msgid "Add default tags" | ||
1356 | msgstr "Добавить теги по умолчанию" | ||
1357 | |||
1358 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25 | ||
1359 | msgid "It looks like it's the first time you run Shaarli. Please configure it." | ||
1360 | msgstr "Похоже, вы впервые запускаете Shaarli. Пожалуйста, настройте его." | ||
1361 | |||
1362 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:32 | ||
1363 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1364 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:167 | ||
1365 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:167 | ||
1366 | msgid "Username" | ||
1367 | msgstr "Имя пользователя" | ||
1368 | |||
1369 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 | ||
1370 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:20 | ||
1371 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:168 | ||
1372 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:168 | ||
1373 | msgid "Password" | ||
1374 | msgstr "Пароль" | ||
1375 | |||
1376 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:62 | ||
1377 | msgid "Shaarli title" | ||
1378 | msgstr "Заголовок Shaarli" | ||
1379 | |||
1380 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:68 | ||
1381 | msgid "My links" | ||
1382 | msgstr "Мои ссылки" | ||
1383 | |||
1384 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:181 | ||
1385 | msgid "Install" | ||
1386 | msgstr "Установка" | ||
1387 | |||
1388 | #: tmp/install.b91ef64efc3688266305ea9b42e5017e.rtpl.php:190 | ||
1389 | msgid "Server requirements" | ||
1390 | msgstr "Системные требования" | ||
1391 | |||
1392 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
1393 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:79 | ||
1394 | msgid "shaare" | ||
1395 | msgid_plural "shaares" | ||
1396 | msgstr[0] "закладка" | ||
1397 | msgstr[1] "закладки" | ||
1398 | msgstr[2] "закладок" | ||
1399 | |||
1400 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:18 | ||
1401 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83 | ||
1402 | msgid "private link" | ||
1403 | msgid_plural "private links" | ||
1404 | msgstr[0] "личная ссылка" | ||
1405 | msgstr[1] "личные ссылки" | ||
1406 | msgstr[2] "личных ссылок" | ||
1407 | |||
1408 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:30 | ||
1409 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:123 | ||
1410 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:123 | ||
1411 | msgid "Search text" | ||
1412 | msgstr "Поиск текста" | ||
1413 | |||
1414 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:37 | ||
1415 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:130 | ||
1416 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:130 | ||
1417 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | ||
1418 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:65 | ||
1419 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | ||
1420 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:74 | ||
1421 | msgid "Filter by tag" | ||
1422 | msgstr "Фильтровать по тегу" | ||
1423 | |||
1424 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46 | ||
1425 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:87 | ||
1426 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:139 | ||
1427 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:87 | ||
1428 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:139 | ||
1429 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46 | ||
1430 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:45 | ||
1431 | msgid "Search" | ||
1432 | msgstr "Поиск" | ||
1433 | |||
1434 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:110 | ||
1435 | msgid "Nothing found." | ||
1436 | msgstr "Ничего не найдено." | ||
1437 | |||
1438 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:118 | ||
1439 | #, php-format | ||
1440 | msgid "%s result" | ||
1441 | msgid_plural "%s results" | ||
1442 | msgstr[0] "%s результат" | ||
1443 | msgstr[1] "%s результатов" | ||
1444 | msgstr[2] "%s результатов" | ||
1445 | |||
1446 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:122 | ||
1447 | msgid "for" | ||
1448 | msgstr "для" | ||
1449 | |||
1450 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:129 | ||
1451 | msgid "tagged" | ||
1452 | msgstr "отмечено" | ||
1453 | |||
1454 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:133 | ||
1455 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:134 | ||
1456 | msgid "Remove tag" | ||
1457 | msgstr "Удалить тег" | ||
1458 | |||
1459 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:144 | ||
1460 | msgid "with status" | ||
1461 | msgstr "со статусом" | ||
1462 | |||
1463 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:155 | ||
1464 | msgid "without any tag" | ||
1465 | msgstr "без тега" | ||
1466 | |||
1467 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:175 | ||
1468 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | ||
1469 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:41 | ||
1470 | msgid "Fold" | ||
1471 | msgstr "Сложить" | ||
1472 | |||
1473 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:177 | ||
1474 | msgid "Edited: " | ||
1475 | msgstr "Отредактировано: " | ||
1476 | |||
1477 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:181 | ||
1478 | msgid "permalink" | ||
1479 | msgstr "постоянная ссылка" | ||
1480 | |||
1481 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:183 | ||
1482 | msgid "Add tag" | ||
1483 | msgstr "Добавить тег" | ||
1484 | |||
1485 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:185 | ||
1486 | msgid "Toggle sticky" | ||
1487 | msgstr "Закрепить / Открепить" | ||
1488 | |||
1489 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:187 | ||
1490 | msgid "Sticky" | ||
1491 | msgstr "Закреплено" | ||
1492 | |||
1493 | #: tmp/linklist.b91ef64efc3688266305ea9b42e5017e.rtpl.php:189 | ||
1494 | msgid "Share a private link" | ||
1495 | msgstr "Поделиться личной ссылкой" | ||
1496 | |||
1497 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:5 | ||
1498 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:5 | ||
1499 | msgid "Filters" | ||
1500 | msgstr "Фильтры" | ||
1501 | |||
1502 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:10 | ||
1503 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:10 | ||
1504 | msgid "Only display private links" | ||
1505 | msgstr "Отображать только личные ссылки" | ||
1506 | |||
1507 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:13 | ||
1508 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:13 | ||
1509 | msgid "Only display public links" | ||
1510 | msgstr "Отображать только общедоступные ссылки" | ||
1511 | |||
1512 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:18 | ||
1513 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:18 | ||
1514 | msgid "Filter untagged links" | ||
1515 | msgstr "Фильтровать неотмеченные ссылки" | ||
1516 | |||
1517 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | ||
1518 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:24 | ||
1519 | msgid "Select all" | ||
1520 | msgstr "Выбрать все" | ||
1521 | |||
1522 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | ||
1523 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:89 | ||
1524 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:29 | ||
1525 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:89 | ||
1526 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:42 | ||
1527 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:42 | ||
1528 | msgid "Fold all" | ||
1529 | msgstr "Сложить все" | ||
1530 | |||
1531 | #: tmp/linklist.paging.b91ef64efc3688266305ea9b42e5017e.rtpl.php:76 | ||
1532 | #: tmp/linklist.paging.cedf684561d925457130839629000a81.rtpl.php:76 | ||
1533 | msgid "Links per page" | ||
1534 | msgstr "Ссылок на страницу" | ||
1535 | |||
1536 | #: tmp/loginform.b91ef64efc3688266305ea9b42e5017e.rtpl.php:25 | ||
1537 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:171 | ||
1538 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:171 | ||
1539 | msgid "Remember me" | ||
1540 | msgstr "Запомнить меня" | ||
1541 | |||
1542 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | ||
1543 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
1544 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:15 | ||
1545 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:48 | ||
1546 | msgid "by the Shaarli community" | ||
1547 | msgstr "сообществом Shaarli" | ||
1548 | |||
1549 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1550 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:16 | ||
1551 | msgid "Documentation" | ||
1552 | msgstr "Документация" | ||
1553 | |||
1554 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:43 | ||
1555 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:43 | ||
1556 | msgid "Expand" | ||
1557 | msgstr "Развернуть" | ||
1558 | |||
1559 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 | ||
1560 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:44 | ||
1561 | msgid "Expand all" | ||
1562 | msgstr "Развернуть все" | ||
1563 | |||
1564 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:45 | ||
1565 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:45 | ||
1566 | msgid "Are you sure you want to delete this link?" | ||
1567 | msgstr "Вы уверены, что хотите удалить эту ссылку?" | ||
1568 | |||
1569 | #: tmp/page.footer.b91ef64efc3688266305ea9b42e5017e.rtpl.php:46 | ||
1570 | #: tmp/page.footer.cedf684561d925457130839629000a81.rtpl.php:46 | ||
1571 | msgid "Are you sure you want to delete this tag?" | ||
1572 | msgstr "Вы уверены, что хотите удалить этот тег?" | ||
1573 | |||
1574 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:11 | ||
1575 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:11 | ||
1576 | msgid "Menu" | ||
1577 | msgstr "Меню" | ||
1578 | |||
1579 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:38 | ||
1580 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:38 | ||
1581 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | ||
1582 | msgid "Tag cloud" | ||
1583 | msgstr "Облако тегов" | ||
1584 | |||
1585 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:67 | ||
1586 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:92 | ||
1587 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:67 | ||
1588 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:92 | ||
1589 | msgid "RSS Feed" | ||
1590 | msgstr "RSS канал" | ||
1591 | |||
1592 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:72 | ||
1593 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:108 | ||
1594 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:72 | ||
1595 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:108 | ||
1596 | msgid "Logout" | ||
1597 | msgstr "Выйти" | ||
1598 | |||
1599 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:152 | ||
1600 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:152 | ||
1601 | msgid "Set public" | ||
1602 | msgstr "Сделать общедоступным" | ||
1603 | |||
1604 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:157 | ||
1605 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:157 | ||
1606 | msgid "Set private" | ||
1607 | msgstr "Сделать личным" | ||
1608 | |||
1609 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:189 | ||
1610 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:189 | ||
1611 | msgid "is available" | ||
1612 | msgstr "доступно" | ||
1613 | |||
1614 | #: tmp/page.header.b91ef64efc3688266305ea9b42e5017e.rtpl.php:196 | ||
1615 | #: tmp/page.header.cedf684561d925457130839629000a81.rtpl.php:196 | ||
1616 | msgid "Error" | ||
1617 | msgstr "Ошибка" | ||
1618 | |||
1619 | #: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | ||
1620 | msgid "There is no cached thumbnail." | ||
1621 | msgstr "Нет кэшированных миниатюр." | ||
1622 | |||
1623 | #: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:17 | ||
1624 | msgid "Try to synchronize them." | ||
1625 | msgstr "Попробуйте синхронизировать их." | ||
1626 | |||
1627 | #: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | ||
1628 | msgid "Picture Wall" | ||
1629 | msgstr "Галерея" | ||
1630 | |||
1631 | #: tmp/picwall.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | ||
1632 | msgid "pics" | ||
1633 | msgstr "изображений" | ||
1634 | |||
1635 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:15 | ||
1636 | msgid "You need to enable Javascript to change plugin loading order." | ||
1637 | msgstr "" | ||
1638 | "Вам необходимо включить Javascript, чтобы изменить порядок загрузки плагинов." | ||
1639 | |||
1640 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:26 | ||
1641 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:22 | ||
1642 | msgid "Plugin administration" | ||
1643 | msgstr "Управление плагинами" | ||
1644 | |||
1645 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:29 | ||
1646 | msgid "Enabled Plugins" | ||
1647 | msgstr "Включенные плагины" | ||
1648 | |||
1649 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:34 | ||
1650 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:155 | ||
1651 | msgid "No plugin enabled." | ||
1652 | msgstr "Нет включенных плагинов." | ||
1653 | |||
1654 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:40 | ||
1655 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:73 | ||
1656 | msgid "Disable" | ||
1657 | msgstr "Отключить" | ||
1658 | |||
1659 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | ||
1660 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:74 | ||
1661 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:98 | ||
1662 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:123 | ||
1663 | msgid "Name" | ||
1664 | msgstr "Имя" | ||
1665 | |||
1666 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:43 | ||
1667 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:76 | ||
1668 | msgid "Order" | ||
1669 | msgstr "Порядок" | ||
1670 | |||
1671 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:86 | ||
1672 | msgid "Disabled Plugins" | ||
1673 | msgstr "Отключенные плагины" | ||
1674 | |||
1675 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:91 | ||
1676 | msgid "No plugin disabled." | ||
1677 | msgstr "Нет отключенных плагинов." | ||
1678 | |||
1679 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:97 | ||
1680 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:122 | ||
1681 | msgid "Enable" | ||
1682 | msgstr "Включить" | ||
1683 | |||
1684 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:134 | ||
1685 | msgid "More plugins available" | ||
1686 | msgstr "Доступны другие плагины" | ||
1687 | |||
1688 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:136 | ||
1689 | msgid "in the documentation" | ||
1690 | msgstr "в документации" | ||
1691 | |||
1692 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:150 | ||
1693 | msgid "Plugin configuration" | ||
1694 | msgstr "Настройка плагинов" | ||
1695 | |||
1696 | #: tmp/pluginsadmin.b91ef64efc3688266305ea9b42e5017e.rtpl.php:195 | ||
1697 | msgid "No parameter available." | ||
1698 | msgstr "Нет доступных параметров." | ||
1699 | |||
1700 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1701 | msgid "General" | ||
1702 | msgstr "Общее" | ||
1703 | |||
1704 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:20 | ||
1705 | msgid "Index URL" | ||
1706 | msgstr "Индексный URL" | ||
1707 | |||
1708 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:28 | ||
1709 | msgid "Base path" | ||
1710 | msgstr "Базовый путь" | ||
1711 | |||
1712 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | ||
1713 | msgid "Client IP" | ||
1714 | msgstr "IP клиента" | ||
1715 | |||
1716 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:44 | ||
1717 | msgid "Trusted reverse proxies" | ||
1718 | msgstr "Надежные обратные прокси" | ||
1719 | |||
1720 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:58 | ||
1721 | msgid "N/A" | ||
1722 | msgstr "Нет данных" | ||
1723 | |||
1724 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:84 | ||
1725 | msgid "Visit releases page on Github" | ||
1726 | msgstr "Посетить страницу релизов на Github" | ||
1727 | |||
1728 | #: tmp/server.b91ef64efc3688266305ea9b42e5017e.rtpl.php:121 | ||
1729 | msgid "Synchronize all link thumbnails" | ||
1730 | msgstr "Синхронизировать все миниатюры ссылок" | ||
1731 | |||
1732 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:2 | ||
1733 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:2 | ||
1734 | msgid "Permissions" | ||
1735 | msgstr "Разрешения" | ||
1736 | |||
1737 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:8 | ||
1738 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:8 | ||
1739 | msgid "There are permissions that need to be fixed." | ||
1740 | msgstr "Есть разрешения, которые нужно исправить." | ||
1741 | |||
1742 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:23 | ||
1743 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:23 | ||
1744 | msgid "All read/write permissions are properly set." | ||
1745 | msgstr "Все разрешения на чтение и запись установлены правильно." | ||
1746 | |||
1747 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:32 | ||
1748 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:32 | ||
1749 | msgid "Running PHP" | ||
1750 | msgstr "Запуск PHP" | ||
1751 | |||
1752 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:36 | ||
1753 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:36 | ||
1754 | msgid "End of life: " | ||
1755 | msgstr "Конец жизни: " | ||
1756 | |||
1757 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
1758 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:48 | ||
1759 | msgid "Extension" | ||
1760 | msgstr "Расширение" | ||
1761 | |||
1762 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:49 | ||
1763 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:49 | ||
1764 | msgid "Usage" | ||
1765 | msgstr "Применение" | ||
1766 | |||
1767 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:50 | ||
1768 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:50 | ||
1769 | msgid "Status" | ||
1770 | msgstr "Статус" | ||
1771 | |||
1772 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:51 | ||
1773 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:66 | ||
1774 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:51 | ||
1775 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:66 | ||
1776 | msgid "Loaded" | ||
1777 | msgstr "Загружено" | ||
1778 | |||
1779 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:60 | ||
1780 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:60 | ||
1781 | msgid "Required" | ||
1782 | msgstr "Обязательно" | ||
1783 | |||
1784 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:60 | ||
1785 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:60 | ||
1786 | msgid "Optional" | ||
1787 | msgstr "Необязательно" | ||
1788 | |||
1789 | #: tmp/server.requirements.b91ef64efc3688266305ea9b42e5017e.rtpl.php:70 | ||
1790 | #: tmp/server.requirements.cedf684561d925457130839629000a81.rtpl.php:70 | ||
1791 | msgid "Not loaded" | ||
1792 | msgstr "Не загружено" | ||
1793 | |||
1794 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | ||
1795 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | ||
1796 | msgid "tags" | ||
1797 | msgstr "теги" | ||
1798 | |||
1799 | #: tmp/tag.cloud.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | ||
1800 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:24 | ||
1801 | msgid "List all links with those tags" | ||
1802 | msgstr "Список всех ссылок с этими тегами" | ||
1803 | |||
1804 | #: tmp/tag.list.b91ef64efc3688266305ea9b42e5017e.rtpl.php:19 | ||
1805 | msgid "Tag list" | ||
1806 | msgstr "Список тегов" | ||
1807 | |||
1808 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:3 | ||
1809 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:3 | ||
1810 | msgid "Sort by:" | ||
1811 | msgstr "Сортировать по:" | ||
1812 | |||
1813 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:5 | ||
1814 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:5 | ||
1815 | msgid "Cloud" | ||
1816 | msgstr "Облако" | ||
1817 | |||
1818 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:6 | ||
1819 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:6 | ||
1820 | msgid "Most used" | ||
1821 | msgstr "Наиболее используемое" | ||
1822 | |||
1823 | #: tmp/tag.sort.b91ef64efc3688266305ea9b42e5017e.rtpl.php:7 | ||
1824 | #: tmp/tag.sort.cedf684561d925457130839629000a81.rtpl.php:7 | ||
1825 | msgid "Alphabetical" | ||
1826 | msgstr "Алфавит" | ||
1827 | |||
1828 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:14 | ||
1829 | msgid "Settings" | ||
1830 | msgstr "Настройки" | ||
1831 | |||
1832 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:16 | ||
1833 | msgid "Change Shaarli settings: title, timezone, etc." | ||
1834 | msgstr "Измените настройки Shaarli: заголовок, часовой пояс и т.д." | ||
1835 | |||
1836 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:17 | ||
1837 | msgid "Configure your Shaarli" | ||
1838 | msgstr "Настройка Shaarli" | ||
1839 | |||
1840 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:21 | ||
1841 | msgid "Enable, disable and configure plugins" | ||
1842 | msgstr "Включить, отключить и настроить плагины" | ||
1843 | |||
1844 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:27 | ||
1845 | msgid "Check instance's server configuration" | ||
1846 | msgstr "Проверка конфигурации экземпляра сервера" | ||
1847 | |||
1848 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:34 | ||
1849 | msgid "Change your password" | ||
1850 | msgstr "Изменить пароль" | ||
1851 | |||
1852 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:41 | ||
1853 | msgid "Rename or delete a tag in all links" | ||
1854 | msgstr "Переименовать или удалить тег во всех ссылках" | ||
1855 | |||
1856 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:47 | ||
1857 | msgid "" | ||
1858 | "Import Netscape HTML bookmarks (as exported from Firefox, Chrome, Opera, " | ||
1859 | "delicious...)" | ||
1860 | msgstr "" | ||
1861 | "Импорт закладок Netscape HTML (экспортированные из Firefox, Chrome, Opera, " | ||
1862 | "delicious...)" | ||
1863 | |||
1864 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:48 | ||
1865 | msgid "Import links" | ||
1866 | msgstr "Импорт ссылок" | ||
1867 | |||
1868 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:53 | ||
1869 | msgid "" | ||
1870 | "Export Netscape HTML bookmarks (which can be imported in Firefox, Chrome, " | ||
1871 | "Opera, delicious...)" | ||
1872 | msgstr "" | ||
1873 | "Экспорт закладок Netscape HTML (которые могут быть импортированы в Firefox, " | ||
1874 | "Chrome, Opera, delicious...)" | ||
1875 | |||
1876 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:54 | ||
1877 | msgid "Export database" | ||
1878 | msgstr "Экспорт базы данных" | ||
1879 | |||
1880 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:77 | ||
1881 | msgid "" | ||
1882 | "Drag one of these button to your bookmarks toolbar or right-click it and " | ||
1883 | "\"Bookmark This Link\"" | ||
1884 | msgstr "" | ||
1885 | "Перетащите одну из этих кнопок на панель закладок или щелкните по ней правой " | ||
1886 | "кнопкой мыши и выберите \"Добавить ссылку в закладки\"" | ||
1887 | |||
1888 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:78 | ||
1889 | msgid "then click on the bookmarklet in any page you want to share." | ||
1890 | msgstr "" | ||
1891 | "затем щелкните букмарклет на любой странице, которой хотите поделиться." | ||
1892 | |||
1893 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:82 | ||
1894 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:106 | ||
1895 | msgid "" | ||
1896 | "Drag this link to your bookmarks toolbar or right-click it and Bookmark This " | ||
1897 | "Link" | ||
1898 | msgstr "" | ||
1899 | "Перетащите эту ссылку на панель закладок или щелкните по ней правой кнопкой " | ||
1900 | "мыши и добавьте эту ссылку в закладки" | ||
1901 | |||
1902 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:83 | ||
1903 | msgid "then click ✚Shaare link button in any page you want to share" | ||
1904 | msgstr "" | ||
1905 | "затем нажмите кнопку ✚Поделиться ссылкой на любой странице, которой хотите " | ||
1906 | "поделиться" | ||
1907 | |||
1908 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:92 | ||
1909 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:114 | ||
1910 | msgid "The selected text is too long, it will be truncated." | ||
1911 | msgstr "Выделенный текст слишком длинный, он будет обрезан." | ||
1912 | |||
1913 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:102 | ||
1914 | msgid "Shaare link" | ||
1915 | msgstr "Поделиться ссылкой" | ||
1916 | |||
1917 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:107 | ||
1918 | msgid "" | ||
1919 | "Then click ✚Add Note button anytime to start composing a private Note (text " | ||
1920 | "post) to your Shaarli" | ||
1921 | msgstr "" | ||
1922 | "Затем в любое время нажмите кнопку ✚Добавить заметку, чтобы начать создавать " | ||
1923 | "личную заметку (текстовое сообщение) в своем Shaarli" | ||
1924 | |||
1925 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:123 | ||
1926 | msgid "Add Note" | ||
1927 | msgstr "Добавить заметку" | ||
1928 | |||
1929 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:132 | ||
1930 | msgid "3rd party" | ||
1931 | msgstr "Третья сторона" | ||
1932 | |||
1933 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:135 | ||
1934 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:140 | ||
1935 | msgid "plugin" | ||
1936 | msgstr "плагин" | ||
1937 | |||
1938 | #: tmp/tools.b91ef64efc3688266305ea9b42e5017e.rtpl.php:165 | ||
1939 | msgid "" | ||
1940 | "Drag this link to your bookmarks toolbar, or right-click it and choose " | ||
1941 | "Bookmark This Link" | ||
1942 | msgstr "" | ||
1943 | "Перетащите эту ссылку на панель закладок или щелкните по ней правой кнопкой " | ||
1944 | "мыши и выберите \"Добавить ссылку в закладки\"" | ||
@@ -31,6 +31,7 @@ use Psr\Log\LogLevel; | |||
31 | use Shaarli\Config\ConfigManager; | 31 | use Shaarli\Config\ConfigManager; |
32 | use Shaarli\Container\ContainerBuilder; | 32 | use Shaarli\Container\ContainerBuilder; |
33 | use Shaarli\Languages; | 33 | use Shaarli\Languages; |
34 | use Shaarli\Plugin\PluginManager; | ||
34 | use Shaarli\Security\BanManager; | 35 | use Shaarli\Security\BanManager; |
35 | use Shaarli\Security\CookieManager; | 36 | use Shaarli\Security\CookieManager; |
36 | use Shaarli\Security\LoginManager; | 37 | use Shaarli\Security\LoginManager; |
@@ -87,7 +88,17 @@ date_default_timezone_set($conf->get('general.timezone', 'UTC')); | |||
87 | 88 | ||
88 | $loginManager->checkLoginState(client_ip_id($_SERVER)); | 89 | $loginManager->checkLoginState(client_ip_id($_SERVER)); |
89 | 90 | ||
90 | $containerBuilder = new ContainerBuilder($conf, $sessionManager, $cookieManager, $loginManager, $logger); | 91 | $pluginManager = new PluginManager($conf); |
92 | $pluginManager->load($conf->get('general.enabled_plugins', [])); | ||
93 | |||
94 | $containerBuilder = new ContainerBuilder( | ||
95 | $conf, | ||
96 | $sessionManager, | ||
97 | $cookieManager, | ||
98 | $loginManager, | ||
99 | $pluginManager, | ||
100 | $logger | ||
101 | ); | ||
91 | $container = $containerBuilder->build(); | 102 | $container = $containerBuilder->build(); |
92 | $app = new App($container); | 103 | $app = new App($container); |
93 | 104 | ||
@@ -154,6 +165,15 @@ $app->group('/admin', function () { | |||
154 | $this->get('/visibility/{visibility}', '\Shaarli\Front\Controller\Admin\SessionFilterController:visibility'); | 165 | $this->get('/visibility/{visibility}', '\Shaarli\Front\Controller\Admin\SessionFilterController:visibility'); |
155 | })->add('\Shaarli\Front\ShaarliAdminMiddleware'); | 166 | })->add('\Shaarli\Front\ShaarliAdminMiddleware'); |
156 | 167 | ||
168 | $app->group('/plugin', function () use ($pluginManager) { | ||
169 | foreach ($pluginManager->getRegisteredRoutes() as $pluginName => $routes) { | ||
170 | $this->group('/' . $pluginName, function () use ($routes) { | ||
171 | foreach ($routes as $route) { | ||
172 | $this->{strtolower($route['method'])}('/' . ltrim($route['route'], '/'), $route['callable']); | ||
173 | } | ||
174 | }); | ||
175 | } | ||
176 | })->add('\Shaarli\Front\ShaarliMiddleware'); | ||
157 | 177 | ||
158 | // REST API routes | 178 | // REST API routes |
159 | $app->group('/api/v1', function () { | 179 | $app->group('/api/v1', function () { |
@@ -18,5 +18,6 @@ | |||
18 | <rule ref="PSR1.Files.SideEffects.FoundWithSymbols"> | 18 | <rule ref="PSR1.Files.SideEffects.FoundWithSymbols"> |
19 | <!-- index.php bootstraps everything, so yes mixed symbols with side effects --> | 19 | <!-- index.php bootstraps everything, so yes mixed symbols with side effects --> |
20 | <exclude-pattern>index.php</exclude-pattern> | 20 | <exclude-pattern>index.php</exclude-pattern> |
21 | <exclude-pattern>plugins/*</exclude-pattern> | ||
21 | </rule> | 22 | </rule> |
22 | </ruleset> | 23 | </ruleset> |
diff --git a/plugins/demo_plugin/DemoPluginController.php b/plugins/demo_plugin/DemoPluginController.php new file mode 100644 index 00000000..b8ace9c8 --- /dev/null +++ b/plugins/demo_plugin/DemoPluginController.php | |||
@@ -0,0 +1,24 @@ | |||
1 | <?php | ||
2 | |||
3 | declare(strict_types=1); | ||
4 | |||
5 | namespace Shaarli\DemoPlugin; | ||
6 | |||
7 | use Shaarli\Front\Controller\Admin\ShaarliAdminController; | ||
8 | use Slim\Http\Request; | ||
9 | use Slim\Http\Response; | ||
10 | |||
11 | class DemoPluginController extends ShaarliAdminController | ||
12 | { | ||
13 | public function index(Request $request, Response $response): Response | ||
14 | { | ||
15 | $this->assignView( | ||
16 | 'content', | ||
17 | '<div class="center">' . | ||
18 | 'This is a demo page. I have access to Shaarli container, so I\'m free to do whatever I want here.' . | ||
19 | '</div>' | ||
20 | ); | ||
21 | |||
22 | return $response->write($this->render('pluginscontent')); | ||
23 | } | ||
24 | } | ||
diff --git a/plugins/demo_plugin/demo_plugin.php b/plugins/demo_plugin/demo_plugin.php index 22d27b68..15cfc2c5 100644 --- a/plugins/demo_plugin/demo_plugin.php +++ b/plugins/demo_plugin/demo_plugin.php | |||
@@ -7,6 +7,8 @@ | |||
7 | * Can be used by plugin developers to make their own plugin. | 7 | * Can be used by plugin developers to make their own plugin. |
8 | */ | 8 | */ |
9 | 9 | ||
10 | require_once __DIR__ . '/DemoPluginController.php'; | ||
11 | |||
10 | /* | 12 | /* |
11 | * RENDER HEADER, INCLUDES, FOOTER | 13 | * RENDER HEADER, INCLUDES, FOOTER |
12 | * | 14 | * |
@@ -60,6 +62,17 @@ function demo_plugin_init($conf) | |||
60 | return $errors; | 62 | return $errors; |
61 | } | 63 | } |
62 | 64 | ||
65 | function demo_plugin_register_routes(): array | ||
66 | { | ||
67 | return [ | ||
68 | [ | ||
69 | 'method' => 'GET', | ||
70 | 'route' => '/custom', | ||
71 | 'callable' => 'Shaarli\DemoPlugin\DemoPluginController:index', | ||
72 | ], | ||
73 | ]; | ||
74 | } | ||
75 | |||
63 | /** | 76 | /** |
64 | * Hook render_header. | 77 | * Hook render_header. |
65 | * Executed on every page render. | 78 | * Executed on every page render. |
@@ -304,7 +317,11 @@ function hook_demo_plugin_render_editlink($data) | |||
304 | function hook_demo_plugin_render_tools($data) | 317 | function hook_demo_plugin_render_tools($data) |
305 | { | 318 | { |
306 | // field_plugin | 319 | // field_plugin |
307 | $data['tools_plugin'][] = 'tools_plugin'; | 320 | $data['tools_plugin'][] = '<div class="tools-item"> |
321 | <a href="' . $data['_BASE_PATH_'] . '/plugin/demo_plugin/custom"> | ||
322 | <span class="pure-button pure-u-lg-2-3 pure-u-3-4">Demo Plugin Custom Route</span> | ||
323 | </a> | ||
324 | </div>'; | ||
308 | 325 | ||
309 | return $data; | 326 | return $data; |
310 | } | 327 | } |
diff --git a/tests/PluginManagerTest.php b/tests/PluginManagerTest.php index efef5e87..8947f679 100644 --- a/tests/PluginManagerTest.php +++ b/tests/PluginManagerTest.php | |||
@@ -120,4 +120,43 @@ class PluginManagerTest extends \Shaarli\TestCase | |||
120 | $this->assertEquals('test plugin', $meta[self::$pluginName]['description']); | 120 | $this->assertEquals('test plugin', $meta[self::$pluginName]['description']); |
121 | $this->assertEquals($expectedParameters, $meta[self::$pluginName]['parameters']); | 121 | $this->assertEquals($expectedParameters, $meta[self::$pluginName]['parameters']); |
122 | } | 122 | } |
123 | |||
124 | /** | ||
125 | * Test plugin custom routes - note that there is no check on callable functions | ||
126 | */ | ||
127 | public function testRegisteredRoutes(): void | ||
128 | { | ||
129 | PluginManager::$PLUGINS_PATH = self::$pluginPath; | ||
130 | $this->pluginManager->load([self::$pluginName]); | ||
131 | |||
132 | $expectedParameters = [ | ||
133 | [ | ||
134 | 'method' => 'GET', | ||
135 | 'route' => '/test', | ||
136 | 'callable' => 'getFunction', | ||
137 | ], | ||
138 | [ | ||
139 | 'method' => 'POST', | ||
140 | 'route' => '/custom', | ||
141 | 'callable' => 'postFunction', | ||
142 | ], | ||
143 | ]; | ||
144 | $meta = $this->pluginManager->getRegisteredRoutes(); | ||
145 | static::assertSame($expectedParameters, $meta[self::$pluginName]); | ||
146 | } | ||
147 | |||
148 | /** | ||
149 | * Test plugin custom routes with invalid route | ||
150 | */ | ||
151 | public function testRegisteredRoutesInvalid(): void | ||
152 | { | ||
153 | $plugin = 'test_route_invalid'; | ||
154 | $this->pluginManager->load([$plugin]); | ||
155 | |||
156 | $meta = $this->pluginManager->getRegisteredRoutes(); | ||
157 | static::assertSame([], $meta); | ||
158 | |||
159 | $errors = $this->pluginManager->getErrors(); | ||
160 | static::assertSame(['test_route_invalid [plugin incompatibility]: trying to register invalid route.'], $errors); | ||
161 | } | ||
123 | } | 162 | } |
diff --git a/tests/container/ContainerBuilderTest.php b/tests/container/ContainerBuilderTest.php index 3d43c344..04d4ef01 100644 --- a/tests/container/ContainerBuilderTest.php +++ b/tests/container/ContainerBuilderTest.php | |||
@@ -43,11 +43,15 @@ class ContainerBuilderTest extends TestCase | |||
43 | /** @var CookieManager */ | 43 | /** @var CookieManager */ |
44 | protected $cookieManager; | 44 | protected $cookieManager; |
45 | 45 | ||
46 | /** @var PluginManager */ | ||
47 | protected $pluginManager; | ||
48 | |||
46 | public function setUp(): void | 49 | public function setUp(): void |
47 | { | 50 | { |
48 | $this->conf = new ConfigManager('tests/utils/config/configJson'); | 51 | $this->conf = new ConfigManager('tests/utils/config/configJson'); |
49 | $this->sessionManager = $this->createMock(SessionManager::class); | 52 | $this->sessionManager = $this->createMock(SessionManager::class); |
50 | $this->cookieManager = $this->createMock(CookieManager::class); | 53 | $this->cookieManager = $this->createMock(CookieManager::class); |
54 | $this->pluginManager = $this->createMock(PluginManager::class); | ||
51 | 55 | ||
52 | $this->loginManager = $this->createMock(LoginManager::class); | 56 | $this->loginManager = $this->createMock(LoginManager::class); |
53 | $this->loginManager->method('isLoggedIn')->willReturn(true); | 57 | $this->loginManager->method('isLoggedIn')->willReturn(true); |
@@ -57,6 +61,7 @@ class ContainerBuilderTest extends TestCase | |||
57 | $this->sessionManager, | 61 | $this->sessionManager, |
58 | $this->cookieManager, | 62 | $this->cookieManager, |
59 | $this->loginManager, | 63 | $this->loginManager, |
64 | $this->pluginManager, | ||
60 | $this->createMock(LoggerInterface::class) | 65 | $this->createMock(LoggerInterface::class) |
61 | ); | 66 | ); |
62 | } | 67 | } |
diff --git a/tests/front/controller/admin/ConfigureControllerTest.php b/tests/front/controller/admin/ConfigureControllerTest.php index d82db0a7..13644df9 100644 --- a/tests/front/controller/admin/ConfigureControllerTest.php +++ b/tests/front/controller/admin/ConfigureControllerTest.php | |||
@@ -62,7 +62,7 @@ class ConfigureControllerTest extends TestCase | |||
62 | static::assertSame('privacy.hide_public_links', $assignedVariables['hide_public_links']); | 62 | static::assertSame('privacy.hide_public_links', $assignedVariables['hide_public_links']); |
63 | static::assertSame('api.enabled', $assignedVariables['api_enabled']); | 63 | static::assertSame('api.enabled', $assignedVariables['api_enabled']); |
64 | static::assertSame('api.secret', $assignedVariables['api_secret']); | 64 | static::assertSame('api.secret', $assignedVariables['api_secret']); |
65 | static::assertCount(5, $assignedVariables['languages']); | 65 | static::assertCount(6, $assignedVariables['languages']); |
66 | static::assertArrayHasKey('gd_enabled', $assignedVariables); | 66 | static::assertArrayHasKey('gd_enabled', $assignedVariables); |
67 | static::assertSame('thumbnails.mode', $assignedVariables['thumbnails_mode']); | 67 | static::assertSame('thumbnails.mode', $assignedVariables['thumbnails_mode']); |
68 | } | 68 | } |
diff --git a/tests/plugins/test/test.php b/tests/plugins/test/test.php index 03be4f4e..34cd339e 100644 --- a/tests/plugins/test/test.php +++ b/tests/plugins/test/test.php | |||
@@ -27,3 +27,19 @@ function hook_test_error() | |||
27 | { | 27 | { |
28 | new Unknown(); | 28 | new Unknown(); |
29 | } | 29 | } |
30 | |||
31 | function test_register_routes(): array | ||
32 | { | ||
33 | return [ | ||
34 | [ | ||
35 | 'method' => 'GET', | ||
36 | 'route' => '/test', | ||
37 | 'callable' => 'getFunction', | ||
38 | ], | ||
39 | [ | ||
40 | 'method' => 'POST', | ||
41 | 'route' => '/custom', | ||
42 | 'callable' => 'postFunction', | ||
43 | ], | ||
44 | ]; | ||
45 | } | ||
diff --git a/tests/plugins/test_route_invalid/test_route_invalid.php b/tests/plugins/test_route_invalid/test_route_invalid.php new file mode 100644 index 00000000..0c5a5101 --- /dev/null +++ b/tests/plugins/test_route_invalid/test_route_invalid.php | |||
@@ -0,0 +1,12 @@ | |||
1 | <?php | ||
2 | |||
3 | function test_route_invalid_register_routes(): array | ||
4 | { | ||
5 | return [ | ||
6 | [ | ||
7 | 'method' => 'GET', | ||
8 | 'route' => 'not a route', | ||
9 | 'callable' => 'getFunction', | ||
10 | ], | ||
11 | ]; | ||
12 | } | ||
diff --git a/tpl/default/pluginscontent.html b/tpl/default/pluginscontent.html new file mode 100644 index 00000000..1e4f6b80 --- /dev/null +++ b/tpl/default/pluginscontent.html | |||
@@ -0,0 +1,13 @@ | |||
1 | <!DOCTYPE html> | ||
2 | <html{if="$language !== 'auto'"} lang="{$language}"{/if}> | ||
3 | <head> | ||
4 | {include="includes"} | ||
5 | </head> | ||
6 | <body> | ||
7 | {include="page.header"} | ||
8 | |||
9 | {$content} | ||
10 | |||
11 | {include="page.footer"} | ||
12 | </body> | ||
13 | </html> | ||
@@ -3052,9 +3052,9 @@ inherits@2.0.3: | |||
3052 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= | 3052 | integrity sha1-Yzwsg+PaQqUC9SRmAiSA9CCCYd4= |
3053 | 3053 | ||
3054 | ini@^1.3.4, ini@^1.3.5: | 3054 | ini@^1.3.4, ini@^1.3.5: |
3055 | version "1.3.5" | 3055 | version "1.3.7" |
3056 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" | 3056 | resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.7.tgz#a09363e1911972ea16d7a8851005d84cf09a9a84" |
3057 | integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== | 3057 | integrity sha512-iKpRpXP+CrP2jyrxvg1kMUpXDyRUFDWurxbnVT1vQPx+Wz9uCYsMIqYuSBLV+PAaZG/d7kRLKRFc9oDMsH+mFQ== |
3058 | 3058 | ||
3059 | interpret@^1.4.0: | 3059 | interpret@^1.4.0: |
3060 | version "1.4.0" | 3060 | version "1.4.0" |