aboutsummaryrefslogtreecommitdiffhomepage
path: root/src
diff options
context:
space:
mode:
authorNicolas Lœuillet <nicolas@loeuillet.org>2015-01-20 07:40:39 +0100
committerNicolas Lœuillet <nicolas@loeuillet.org>2015-01-20 07:40:39 +0100
commit6ad93dff69d7c2beb2196e73f641e6484fccbeb7 (patch)
tree12430b858be2a41029fc11d1afa1fa2a120b96f9 /src
parentc78c1a3f08815aab99752026ccdf1dcf63cf43c1 (diff)
downloadwallabag-6ad93dff69d7c2beb2196e73f641e6484fccbeb7.tar.gz
wallabag-6ad93dff69d7c2beb2196e73f641e6484fccbeb7.tar.zst
wallabag-6ad93dff69d7c2beb2196e73f641e6484fccbeb7.zip
new folders
Diffstat (limited to 'src')
-rwxr-xr-xsrc/Wallabag/Wallabag/Database.php603
-rw-r--r--src/Wallabag/Wallabag/Ebooks.php247
-rw-r--r--src/Wallabag/Wallabag/FlattrItem.php59
-rw-r--r--src/Wallabag/Wallabag/Language.php116
-rw-r--r--src/Wallabag/Wallabag/Picture.php169
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.mobin0 -> 4823 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.po567
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mobin0 -> 10620 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po658
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mobin0 -> 18368 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po770
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.mobin0 -> 15793 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.po682
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mobin0 -> 4848 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po563
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.mobin0 -> 5632 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.po563
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mobin0 -> 21037 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po804
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.mobin0 -> 4897 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.po568
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.mobin0 -> 12632 bytes
-rwxr-xr-xsrc/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.po553
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.mobin0 -> 12451 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.po549
-rwxr-xr-xsrc/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.mobin0 -> 13552 bytes
-rwxr-xr-xsrc/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.po561
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.mobin0 -> 4927 bytes
-rw-r--r--src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.po568
-rwxr-xr-xsrc/Wallabag/Wallabag/Resources/translations/tools/fillCache.php59
-rwxr-xr-xsrc/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.mobin0 -> 15670 bytes
-rwxr-xr-xsrc/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.po534
-rwxr-xr-xsrc/Wallabag/Wallabag/Routing.php163
-rw-r--r--src/Wallabag/Wallabag/Template.php237
-rwxr-xr-xsrc/Wallabag/Wallabag/Tools.php422
-rw-r--r--src/Wallabag/Wallabag/Url.php33
-rw-r--r--src/Wallabag/Wallabag/User.php59
-rwxr-xr-xsrc/Wallabag/Wallabag/Wallabag.php861
38 files changed, 10968 insertions, 0 deletions
diff --git a/src/Wallabag/Wallabag/Database.php b/src/Wallabag/Wallabag/Database.php
new file mode 100755
index 00000000..afda69de
--- /dev/null
+++ b/src/Wallabag/Wallabag/Database.php
@@ -0,0 +1,603 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class Database {
14
15 var $handle;
16 private $order = array (
17 'ia' => 'ORDER BY entries.id',
18 'id' => 'ORDER BY entries.id DESC',
19 'ta' => 'ORDER BY lower(entries.title)',
20 'td' => 'ORDER BY lower(entries.title) DESC',
21 'default' => 'ORDER BY entries.id'
22 );
23
24 function __construct()
25 {
26 switch (STORAGE) {
27 case 'sqlite':
28 // Check if /db is writeable
29 if ( !is_writable(STORAGE_SQLITE) || !is_writable(dirname(STORAGE_SQLITE))) {
30 die('An error occured: ' . STORAGE_SQLITE . ' directory must be writeable for your web server user!');
31 }
32 $db_path = 'sqlite:' . STORAGE_SQLITE;
33 $this->handle = new PDO($db_path);
34 break;
35 case 'mysql':
36 $db_path = 'mysql:host=' . STORAGE_SERVER . ';dbname=' . STORAGE_DB . ';charset=utf8mb4';
37 $this->handle = new PDO($db_path, STORAGE_USER, STORAGE_PASSWORD, array(
38 PDO::MYSQL_ATTR_INIT_COMMAND => 'SET NAMES utf8mb4',
39 ));
40 break;
41 case 'postgres':
42 $db_path = 'pgsql:host=' . STORAGE_SERVER . ';dbname=' . STORAGE_DB;
43 $this->handle = new PDO($db_path, STORAGE_USER, STORAGE_PASSWORD);
44 break;
45 default:
46 die(STORAGE . ' is not a recognised database system !');
47 }
48
49 $this->handle->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
50 $this->_checkTags();
51 Tools::logm('storage type ' . STORAGE);
52 }
53
54 private function getHandle()
55 {
56 return $this->handle;
57 }
58
59 private function _checkTags()
60 {
61
62 if (STORAGE == 'sqlite') {
63 $sql = '
64 CREATE TABLE IF NOT EXISTS tags (
65 id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
66 value TEXT
67 )';
68 }
69 elseif(STORAGE == 'mysql') {
70 $sql = '
71 CREATE TABLE IF NOT EXISTS `tags` (
72 `id` int(11) NOT NULL AUTO_INCREMENT,
73 `value` varchar(255) NOT NULL,
74 PRIMARY KEY (`id`)
75 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
76 ';
77 }
78 else {
79 $sql = '
80 CREATE TABLE IF NOT EXISTS tags (
81 id bigserial primary key,
82 value varchar(255) NOT NULL
83 );
84 ';
85 }
86
87 $query = $this->executeQuery($sql, array());
88
89 if (STORAGE == 'sqlite') {
90 $sql = '
91 CREATE TABLE IF NOT EXISTS tags_entries (
92 id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL UNIQUE,
93 entry_id INTEGER,
94 tag_id INTEGER,
95 FOREIGN KEY(entry_id) REFERENCES entries(id) ON DELETE CASCADE,
96 FOREIGN KEY(tag_id) REFERENCES tags(id) ON DELETE CASCADE
97 )';
98 }
99 elseif(STORAGE == 'mysql') {
100 $sql = '
101 CREATE TABLE IF NOT EXISTS `tags_entries` (
102 `id` int(11) NOT NULL AUTO_INCREMENT,
103 `entry_id` int(11) NOT NULL,
104 `tag_id` int(11) NOT NULL,
105 FOREIGN KEY(entry_id) REFERENCES entries(id) ON DELETE CASCADE,
106 FOREIGN KEY(tag_id) REFERENCES tags(id) ON DELETE CASCADE,
107 PRIMARY KEY (`id`)
108 ) ENGINE=InnoDB DEFAULT CHARSET=utf8;
109 ';
110 }
111 else {
112 $sql = '
113 CREATE TABLE IF NOT EXISTS tags_entries (
114 id bigserial primary key,
115 entry_id integer NOT NULL,
116 tag_id integer NOT NULL
117 )
118 ';
119 }
120
121 $query = $this->executeQuery($sql, array());
122 }
123
124 public function install($login, $password, $email = '')
125 {
126 $sql = 'INSERT INTO users ( username, password, name, email) VALUES (?, ?, ?, ?)';
127 $params = array($login, $password, $login, $email);
128 $query = $this->executeQuery($sql, $params);
129
130 $sequence = '';
131 if (STORAGE == 'postgres') {
132 $sequence = 'users_id_seq';
133 }
134
135 $id_user = intval($this->getLastId($sequence));
136
137 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
138 $params = array($id_user, 'pager', PAGINATION);
139 $query = $this->executeQuery($sql, $params);
140
141 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
142 $params = array($id_user, 'language', LANG);
143 $query = $this->executeQuery($sql, $params);
144
145 $sql = 'INSERT INTO users_config ( user_id, name, value ) VALUES (?, ?, ?)';
146 $params = array($id_user, 'theme', DEFAULT_THEME);
147 $query = $this->executeQuery($sql, $params);
148
149 return TRUE;
150 }
151
152 public function getConfigUser($id)
153 {
154 $sql = "SELECT * FROM users_config WHERE user_id = ?";
155 $query = $this->executeQuery($sql, array($id));
156 $result = $query->fetchAll();
157 $user_config = array();
158
159 foreach ($result as $key => $value) {
160 $user_config[$value['name']] = $value['value'];
161 }
162
163 return $user_config;
164 }
165
166 public function userExists($username)
167 {
168 $sql = "SELECT * FROM users WHERE username=?";
169 $query = $this->executeQuery($sql, array($username));
170 $login = $query->fetchAll();
171 if (isset($login[0])) {
172 return true;
173 } else {
174 return false;
175 }
176 }
177
178 public function login($username, $password, $isauthenticated = FALSE)
179 {
180 if ($isauthenticated) {
181 $sql = "SELECT * FROM users WHERE username=?";
182 $query = $this->executeQuery($sql, array($username));
183 } else {
184 $sql = "SELECT * FROM users WHERE username=? AND password=?";
185 $query = $this->executeQuery($sql, array($username, $password));
186 }
187 $login = $query->fetchAll();
188
189 $user = array();
190 if (isset($login[0])) {
191 $user['id'] = $login[0]['id'];
192 $user['username'] = $login[0]['username'];
193 $user['password'] = $login[0]['password'];
194 $user['name'] = $login[0]['name'];
195 $user['email'] = $login[0]['email'];
196 $user['config'] = $this->getConfigUser($login[0]['id']);
197 }
198
199 return $user;
200 }
201
202 public function updatePassword($userId, $password)
203 {
204 $sql_update = "UPDATE users SET password=? WHERE id=?";
205 $params_update = array($password, $userId);
206 $query = $this->executeQuery($sql_update, $params_update);
207 }
208
209 public function updateUserConfig($userId, $key, $value)
210 {
211 $config = $this->getConfigUser($userId);
212
213 if (! isset($config[$key])) {
214 $sql = "INSERT INTO users_config (value, user_id, name) VALUES (?, ?, ?)";
215 }
216 else {
217 $sql = "UPDATE users_config SET value=? WHERE user_id=? AND name=?";
218 }
219
220 $params = array($value, $userId, $key);
221 $query = $this->executeQuery($sql, $params);
222 }
223
224 private function executeQuery($sql, $params)
225 {
226 try
227 {
228 $query = $this->getHandle()->prepare($sql);
229 $query->execute($params);
230 return $query;
231 }
232 catch (Exception $e)
233 {
234 Tools::logm('execute query error : '.$e->getMessage());
235 return FALSE;
236 }
237 }
238
239 public function listUsers($username = NULL)
240 {
241 $sql = 'SELECT count(*) FROM users'.( $username ? ' WHERE username=?' : '');
242 $query = $this->executeQuery($sql, ( $username ? array($username) : array()));
243 list($count) = $query->fetch();
244 return $count;
245 }
246
247 public function getUserPassword($userID)
248 {
249 $sql = "SELECT * FROM users WHERE id=?";
250 $query = $this->executeQuery($sql, array($userID));
251 $password = $query->fetchAll();
252 return isset($password[0]['password']) ? $password[0]['password'] : null;
253 }
254
255 public function deleteUserConfig($userID)
256 {
257 $sql_action = 'DELETE from users_config WHERE user_id=?';
258 $params_action = array($userID);
259 $query = $this->executeQuery($sql_action, $params_action);
260 return $query;
261 }
262
263 public function deleteTagsEntriesAndEntries($userID)
264 {
265 $entries = $this->retrieveAll($userID);
266 foreach($entries as $entryid) {
267 $tags = $this->retrieveTagsByEntry($entryid);
268 foreach($tags as $tag) {
269 $this->removeTagForEntry($entryid,$tags);
270 }
271 $this->deleteById($entryid,$userID);
272 }
273 }
274
275 public function deleteUser($userID)
276 {
277 $sql_action = 'DELETE from users WHERE id=?';
278 $params_action = array($userID);
279 $query = $this->executeQuery($sql_action, $params_action);
280 }
281
282 public function updateContentAndTitle($id, $title, $body, $user_id)
283 {
284 $sql_action = 'UPDATE entries SET content = ?, title = ? WHERE id=? AND user_id=?';
285 $params_action = array($body, $title, $id, $user_id);
286 $query = $this->executeQuery($sql_action, $params_action);
287 return $query;
288 }
289
290 public function retrieveUnfetchedEntries($user_id, $limit)
291 {
292
293 $sql_limit = "LIMIT 0,".$limit;
294 if (STORAGE == 'postgres') {
295 $sql_limit = "LIMIT ".$limit." OFFSET 0";
296 }
297
298 $sql = "SELECT * FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE 'Untitled - Import%' AND user_id=? ORDER BY id " . $sql_limit;
299 $query = $this->executeQuery($sql, array($user_id));
300 $entries = $query->fetchAll();
301
302 return $entries;
303 }
304
305 public function retrieveUnfetchedEntriesCount($user_id)
306 {
307 $sql = "SELECT count(*) FROM entries WHERE (content = '' OR content IS NULL) AND title LIKE 'Untitled - Import%' AND user_id=?";
308 $query = $this->executeQuery($sql, array($user_id));
309 list($count) = $query->fetch();
310
311 return $count;
312 }
313
314 public function retrieveAll($user_id)
315 {
316 $sql = "SELECT * FROM entries WHERE user_id=? ORDER BY id";
317 $query = $this->executeQuery($sql, array($user_id));
318 $entries = $query->fetchAll();
319
320 return $entries;
321 }
322
323 public function retrieveOneById($id, $user_id)
324 {
325 $entry = NULL;
326 $sql = "SELECT * FROM entries WHERE id=? AND user_id=?";
327 $params = array(intval($id), $user_id);
328 $query = $this->executeQuery($sql, $params);
329 $entry = $query->fetchAll();
330
331 return isset($entry[0]) ? $entry[0] : null;
332 }
333
334 public function retrieveOneByURL($url, $user_id)
335 {
336 $entry = NULL;
337 $sql = "SELECT * FROM entries WHERE url=? AND user_id=?";
338 $params = array($url, $user_id);
339 $query = $this->executeQuery($sql, $params);
340 $entry = $query->fetchAll();
341
342 return isset($entry[0]) ? $entry[0] : null;
343 }
344
345 public function reassignTags($old_entry_id, $new_entry_id)
346 {
347 $sql = "UPDATE tags_entries SET entry_id=? WHERE entry_id=?";
348 $params = array($new_entry_id, $old_entry_id);
349 $query = $this->executeQuery($sql, $params);
350 }
351
352 public function getEntriesByView($view, $user_id, $limit = '', $tag_id = 0)
353 {
354 switch ($view) {
355 case 'archive':
356 $sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? ";
357 $params = array($user_id, 1);
358 break;
359 case 'fav' :
360 $sql = "SELECT * FROM entries WHERE user_id=? AND is_fav=? ";
361 $params = array($user_id, 1);
362 break;
363 case 'tag' :
364 $sql = "SELECT entries.* FROM entries
365 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
366 WHERE entries.user_id=? AND tags_entries.tag_id = ? ";
367 $params = array($user_id, $tag_id);
368 break;
369 default:
370 $sql = "SELECT * FROM entries WHERE user_id=? AND is_read=? ";
371 $params = array($user_id, 0);
372 break;
373 }
374
375 $sql .= $this->getEntriesOrder().' ' . $limit;
376
377 $query = $this->executeQuery($sql, $params);
378 $entries = $query->fetchAll();
379
380 return $entries;
381 }
382
383 public function getEntriesByViewCount($view, $user_id, $tag_id = 0)
384 {
385 switch ($view) {
386 case 'archive':
387 $sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_read=? ";
388 $params = array($user_id, 1);
389 break;
390 case 'fav' :
391 $sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_fav=? ";
392 $params = array($user_id, 1);
393 break;
394 case 'tag' :
395 $sql = "SELECT count(*) FROM entries
396 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
397 WHERE entries.user_id=? AND tags_entries.tag_id = ? ";
398 $params = array($user_id, $tag_id);
399 break;
400 default:
401 $sql = "SELECT count(*) FROM entries WHERE user_id=? AND is_read=? ";
402 $params = array($user_id, 0);
403 break;
404 }
405
406 $query = $this->executeQuery($sql, $params);
407 list($count) = $query->fetch();
408
409 return $count;
410 }
411
412 public function updateContent($id, $content, $user_id)
413 {
414 $sql_action = 'UPDATE entries SET content = ? WHERE id=? AND user_id=?';
415 $params_action = array($content, $id, $user_id);
416 $query = $this->executeQuery($sql_action, $params_action);
417 return $query;
418 }
419
420 /**
421 *
422 * @param string $url
423 * @param string $title
424 * @param string $content
425 * @param integer $user_id
426 * @return integer $id of inserted record
427 */
428 public function add($url, $title, $content, $user_id, $isFavorite=0, $isRead=0)
429 {
430 $sql_action = 'INSERT INTO entries ( url, title, content, user_id, is_fav, is_read ) VALUES (?, ?, ?, ?, ?, ?)';
431 $params_action = array($url, $title, $content, $user_id, $isFavorite, $isRead);
432
433 if ( !$this->executeQuery($sql_action, $params_action) ) {
434 $id = null;
435 }
436 else {
437 $id = intval($this->getLastId( (STORAGE == 'postgres') ? 'entries_id_seq' : '') );
438 }
439 return $id;
440 }
441
442 public function deleteById($id, $user_id)
443 {
444 $sql_action = "DELETE FROM entries WHERE id=? AND user_id=?";
445 $params_action = array($id, $user_id);
446 $query = $this->executeQuery($sql_action, $params_action);
447 return $query;
448 }
449
450 public function favoriteById($id, $user_id)
451 {
452 $sql_action = "UPDATE entries SET is_fav=NOT is_fav WHERE id=? AND user_id=?";
453 $params_action = array($id, $user_id);
454 $query = $this->executeQuery($sql_action, $params_action);
455 }
456
457 public function archiveById($id, $user_id)
458 {
459 $sql_action = "UPDATE entries SET is_read=NOT is_read WHERE id=? AND user_id=?";
460 $params_action = array($id, $user_id);
461 $query = $this->executeQuery($sql_action, $params_action);
462 }
463
464 public function archiveAll($user_id)
465 {
466 $sql_action = "UPDATE entries SET is_read=? WHERE user_id=? AND is_read=?";
467 $params_action = array($user_id, 1, 0);
468 $query = $this->executeQuery($sql_action, $params_action);
469 }
470
471 public function getLastId($column = '')
472 {
473 return $this->getHandle()->lastInsertId($column);
474 }
475
476 public function search($term, $user_id, $limit = '')
477 {
478 $search = '%'.$term.'%';
479 $sql_action = "SELECT * FROM entries WHERE user_id=? AND (content LIKE ? OR title LIKE ? OR url LIKE ?) "; //searches in content, title and URL
480 $sql_action .= $this->getEntriesOrder().' ' . $limit;
481 $params_action = array($user_id, $search, $search, $search);
482 $query = $this->executeQuery($sql_action, $params_action);
483 return $query->fetchAll();
484 }
485
486 public function retrieveAllTags($user_id, $term = NULL)
487 {
488 $sql = "SELECT DISTINCT tags.*, count(entries.id) AS entriescount FROM tags
489 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
490 LEFT JOIN entries ON tags_entries.entry_id=entries.id
491 WHERE entries.user_id=?
492 ". (($term) ? "AND lower(tags.value) LIKE ?" : '') ."
493 GROUP BY tags.id, tags.value
494 ORDER BY tags.value";
495 $query = $this->executeQuery($sql, (($term)? array($user_id, strtolower('%'.$term.'%')) : array($user_id) ));
496 $tags = $query->fetchAll();
497
498 return $tags;
499 }
500
501 public function retrieveTag($id, $user_id)
502 {
503 $tag = NULL;
504 $sql = "SELECT DISTINCT tags.* FROM tags
505 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
506 LEFT JOIN entries ON tags_entries.entry_id=entries.id
507 WHERE tags.id=? AND entries.user_id=?";
508 $params = array(intval($id), $user_id);
509 $query = $this->executeQuery($sql, $params);
510 $tag = $query->fetchAll();
511
512 return isset($tag[0]) ? $tag[0] : NULL;
513 }
514
515 public function retrieveEntriesByTag($tag_id, $user_id)
516 {
517 $sql =
518 "SELECT entries.* FROM entries
519 LEFT JOIN tags_entries ON tags_entries.entry_id=entries.id
520 WHERE tags_entries.tag_id = ? AND entries.user_id=? ORDER by entries.id DESC";
521 $query = $this->executeQuery($sql, array($tag_id, $user_id));
522 $entries = $query->fetchAll();
523
524 return $entries;
525 }
526
527 public function retrieveTagsByEntry($entry_id)
528 {
529 $sql =
530 "SELECT tags.* FROM tags
531 LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id
532 WHERE tags_entries.entry_id = ?";
533 $query = $this->executeQuery($sql, array($entry_id));
534 $tags = $query->fetchAll();
535
536 return $tags;
537 }
538
539 public function removeTagForEntry($entry_id, $tag_id)
540 {
541 $sql_action = "DELETE FROM tags_entries WHERE tag_id=? AND entry_id=?";
542 $params_action = array($tag_id, $entry_id);
543 $query = $this->executeQuery($sql_action, $params_action);
544 return $query;
545 }
546
547 public function cleanUnusedTag($tag_id)
548 {
549 $sql_action = "SELECT tags.* FROM tags JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?";
550 $query = $this->executeQuery($sql_action,array($tag_id));
551 $tagstokeep = $query->fetchAll();
552 $sql_action = "SELECT tags.* FROM tags LEFT JOIN tags_entries ON tags_entries.tag_id=tags.id WHERE tags.id=?";
553 $query = $this->executeQuery($sql_action,array($tag_id));
554 $alltags = $query->fetchAll();
555
556 foreach ($alltags as $tag) {
557 if ($tag && !in_array($tag,$tagstokeep)) {
558 $sql_action = "DELETE FROM tags WHERE id=?";
559 $params_action = array($tag[0]);
560 $this->executeQuery($sql_action, $params_action);
561 return true;
562 }
563 }
564
565 }
566
567 public function retrieveTagByValue($value)
568 {
569 $tag = NULL;
570 $sql = "SELECT * FROM tags WHERE value=?";
571 $params = array($value);
572 $query = $this->executeQuery($sql, $params);
573 $tag = $query->fetchAll();
574
575 return isset($tag[0]) ? $tag[0] : null;
576 }
577
578 public function createTag($value)
579 {
580 $sql_action = 'INSERT INTO tags ( value ) VALUES (?)';
581 $params_action = array($value);
582 $query = $this->executeQuery($sql_action, $params_action);
583 return $query;
584 }
585
586 public function setTagToEntry($tag_id, $entry_id)
587 {
588 $sql_action = 'INSERT INTO tags_entries ( tag_id, entry_id ) VALUES (?, ?)';
589 $params_action = array($tag_id, $entry_id);
590 $query = $this->executeQuery($sql_action, $params_action);
591 return $query;
592 }
593
594 private function getEntriesOrder()
595 {
596 if (isset($_SESSION['sort']) and array_key_exists($_SESSION['sort'], $this->order)) {
597 return $this->order[$_SESSION['sort']];
598 }
599 else {
600 return $this->order['default'];
601 }
602 }
603}
diff --git a/src/Wallabag/Wallabag/Ebooks.php b/src/Wallabag/Wallabag/Ebooks.php
new file mode 100644
index 00000000..2ad89a1c
--- /dev/null
+++ b/src/Wallabag/Wallabag/Ebooks.php
@@ -0,0 +1,247 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class Ebooks
14{
15 protected $wallabag;
16 protected $method;
17 protected $value;
18 protected $entries;
19 protected $bookTitle;
20 protected $bookFileName;
21 protected $author = 'wallabag';
22
23 public function __construct(Wallabag $wallabag, $method, $value)
24 {
25 $this->wallabag = $wallabag;
26 $this->method = $method;
27 $this->value = $value;
28 }
29
30 public function prepareData()
31 {
32 switch ($this->method) {
33 case 'id':
34 $entryID = filter_var($this->value, FILTER_SANITIZE_NUMBER_INT);
35 $entry = $this->wallabag->store->retrieveOneById($entryID, $this->wallabag->user->getId());
36 $this->entries = array($entry);
37 $this->bookTitle = $entry['title'];
38 $this->bookFileName = substr($this->bookTitle, 0, 200);
39 $this->author = preg_replace('#^w{3}.#', '', Tools::getdomain($entry["url"])); # if only one article, set author to domain name (we strip the eventual www part)
40 Tools::logm('Producing ebook from article ' . $this->bookTitle);
41 break;
42 case 'all':
43 $this->entries = $this->wallabag->store->retrieveAll($this->wallabag->user->getId());
44 $this->bookTitle = sprintf(_('All my articles on %s'), date(_('d.m.y'))); #translatable because each country has it's own date format system
45 $this->bookFileName = _('Allarticles') . date(_('dmY'));
46 Tools::logm('Producing ebook from all articles');
47 break;
48 case 'tag':
49 $tag = filter_var($this->value, FILTER_SANITIZE_STRING);
50 $tags_id = $this->wallabag->store->retrieveAllTags($this->wallabag->user->getId(), $tag);
51 $tag_id = $tags_id[0]["id"]; // we take the first result, which is supposed to match perfectly. There must be a workaround.
52 $this->entries = $this->wallabag->store->retrieveEntriesByTag($tag_id, $this->wallabag->user->getId());
53 $this->bookTitle = sprintf(_('Articles tagged %s'), $tag);
54 $this->bookFileName = substr(sprintf(_('Tag %s'), $tag), 0, 200);
55 Tools::logm('Producing ebook from tag ' . $tag);
56 break;
57 case 'category':
58 $category = filter_var($this->value, FILTER_SANITIZE_STRING);
59 $this->entries = $this->wallabag->store->getEntriesByView($category, $this->wallabag->user->getId());
60 $this->bookTitle = sprintf(_('Articles in category %s'), $category);
61 $this->bookFileName = substr(sprintf(_('Category %s'), $category), 0, 200);
62 Tools::logm('Producing ebook from category ' . $category);
63 break;
64 case 'search':
65 $search = filter_var($this->value, FILTER_SANITIZE_STRING);
66 Tools::logm($search);
67 $this->entries = $this->wallabag->store->search($search, $this->wallabag->user->getId());
68 $this->bookTitle = sprintf(_('Articles for search %s'), $search);
69 $this->bookFileName = substr(sprintf(_('Search %s'), $search), 0, 200);
70 Tools::logm('Producing ebook from search ' . $search);
71 break;
72 case 'default':
73 die(_('Uh, there is a problem while generating eBook.'));
74 }
75 }
76}
77
78class WallabagEpub extends WallabagEBooks
79{
80 /**
81 * handle ePub
82 */
83 public function produceEpub()
84 {
85 Tools::logm('Starting to produce ePub 3 file');
86 $content_start =
87 "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n"
88 . "<html xmlns=\"http://www.w3.org/1999/xhtml\" xmlns:epub=\"http://www.idpf.org/2007/ops\">\n"
89 . "<head>"
90 . "<meta http-equiv=\"Default-Style\" content=\"text/html; charset=utf-8\" />\n"
91 . "<title>" . _("wallabag articles book") . "</title>\n"
92 . "</head>\n"
93 . "<body>\n";
94
95 $bookEnd = "</body>\n</html>\n";
96
97 $log = new Logger("wallabag", TRUE);
98 $fileDir = CACHE;
99
100 $book = new EPub(EPub::BOOK_VERSION_EPUB3, DEBUG_POCHE);
101 $log->logLine("new EPub()");
102 $log->logLine("EPub class version: " . EPub::VERSION);
103 $log->logLine("EPub Req. Zip version: " . EPub::REQ_ZIP_VERSION);
104 $log->logLine("Zip version: " . Zip::VERSION);
105 $log->logLine("getCurrentServerURL: " . $book->getCurrentServerURL());
106 $log->logLine("getCurrentPageURL..: " . $book->getCurrentPageURL());
107
108 Tools::logm('Filling metadata for ePub...');
109
110 $book->setTitle($this->bookTitle);
111 $book->setIdentifier("http://$_SERVER[HTTP_HOST]", EPub::IDENTIFIER_URI); // Could also be the ISBN number, prefered for published books, or a UUID.
112 //$book->setLanguage("en"); // Not needed, but included for the example, Language is mandatory, but EPub defaults to "en". Use RFC3066 Language codes, such as "en", "da", "fr" etc.
113 $book->setDescription(_("Some articles saved on my wallabag"));
114 $book->setAuthor($this->author,$this->author);
115 $book->setPublisher("wallabag", "wallabag"); // I hope this is a non existant address :)
116 $book->setDate(time()); // Strictly not needed as the book date defaults to time().
117 //$book->setRights("Copyright and licence information specific for the book."); // As this is generated, this _could_ contain the name or licence information of the user who purchased the book, if needed. If this is used that way, the identifier must also be made unique for the book.
118 $book->setSourceURL("http://$_SERVER[HTTP_HOST]");
119
120 $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "PHP");
121 $book->addDublinCoreMetadata(DublinCore::CONTRIBUTOR, "wallabag");
122
123 $cssData = "body {\n margin-left: .5em;\n margin-right: .5em;\n text-align: justify;\n}\n\np {\n font-family: serif;\n font-size: 10pt;\n text-align: justify;\n text-indent: 1em;\n margin-top: 0px;\n margin-bottom: 1ex;\n}\n\nh1, h2 {\n font-family: sans-serif;\n font-style: italic;\n text-align: center;\n background-color: #6b879c;\n color: white;\n width: 100%;\n}\n\nh1 {\n margin-bottom: 2px;\n}\n\nh2 {\n margin-top: -2px;\n margin-bottom: 2px;\n}\n";
124
125 $log->logLine("Add Cover");
126
127 $fullTitle = "<h1> " . $this->bookTitle . "</h1>\n";
128
129 $book->setCoverImage("Cover.png", file_get_contents("themes/_global/img/appicon/apple-touch-icon-152.png"), "image/png", $fullTitle);
130
131 $cover = $content_start . '<div style="text-align:center;"><p>' . _('Produced by wallabag with PHPePub') . '</p><p>'. _('Please open <a href="https://github.com/wallabag/wallabag/issues" >an issue</a> if you have trouble with the display of this E-Book on your device.') . '</p></div>' . $bookEnd;
132
133 //$book->addChapter("Table of Contents", "TOC.xhtml", NULL, false, EPub::EXTERNAL_REF_IGNORE);
134 $book->addChapter("Notices", "Cover2.html", $cover);
135
136 $book->buildTOC();
137
138 Tools::logm('Adding actual content...');
139
140 foreach ($this->entries as $entry) { //set tags as subjects
141 $tags = $this->wallabag->store->retrieveTagsByEntry($entry['id']);
142 foreach ($tags as $tag) {
143 $book->setSubject($tag['value']);
144 }
145
146 $log->logLine("Set up parameters");
147
148 $chapter = $content_start . $entry['content'] . $bookEnd;
149 $book->addChapter($entry['title'], htmlspecialchars($entry['title']) . ".html", $chapter, true, EPub::EXTERNAL_REF_ADD);
150 $log->logLine("Added chapter " . $entry['title']);
151 }
152
153 if (DEBUG_POCHE) {
154 $book->addChapter("Log", "Log.html", $content_start . $log->getLog() . "\n</pre>" . $bookEnd); // log generation
155 Tools::logm('Production log available in produced file');
156 }
157 $book->finalize();
158 $zipData = $book->sendBook($this->bookFileName);
159 Tools::logm('Ebook produced');
160 }
161}
162
163class WallabagMobi extends WallabagEBooks
164{
165 /**
166 * MOBI Class
167 * @author Sander Kromwijk
168 */
169
170 public function produceMobi()
171 {
172
173 Tools::logm('Starting to produce Mobi file');
174 $mobi = new MOBI();
175 $content = new MOBIFile();
176
177 $messages = new Messages(); // for later
178
179 Tools::logm('Filling metadata for Mobi...');
180
181 $content->set("title", $this->bookTitle);
182 $content->set("author", $this->author);
183 $content->set("subject", $this->bookTitle);
184
185 # introduction
186 $content->appendParagraph('<div style="text-align:center;" ><p>' . _('Produced by wallabag with PHPMobi') . '</p><p>'. _('Please open <a href="https://github.com/wallabag/wallabag/issues" >an issue</a> if you have trouble with the display of this E-Book on your device.') . '</p></div>');
187 $content->appendImage(imagecreatefrompng("themes/_global/img/appicon/apple-touch-icon-152.png"));
188 $content->appendPageBreak();
189
190 Tools::logm('Adding actual content...');
191
192 foreach ($this->entries as $item) {
193 $content->appendChapterTitle($item['title']);
194 $content->appendParagraph($item['content']);
195 $content->appendPageBreak();
196 }
197 $mobi->setContentProvider($content);
198
199 // we offer file to download
200 $mobi->download($this->bookFileName.'.mobi');
201 Tools::logm('Mobi file produced');
202 }
203}
204
205class WallabagPDF extends WallabagEbooks
206{
207 public function producePDF()
208 {
209
210 Tools::logm('Starting to produce PDF file');
211
212 $pdf = new TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
213
214 Tools::logm('Filling metadata for PDF...');
215 $pdf->SetCreator(PDF_CREATOR);
216 $pdf->SetAuthor('');
217 $pdf->SetTitle($this->bookTitle);
218 $pdf->SetSubject($this->bookTitle);
219
220 Tools::logm('Adding introduction...');
221 $pdf->AddPage();
222 $intro = '<h1>' . $this->bookTitle . '</h1><div style="text-align:center;" >
223 <p>' . _('Produced by wallabag with tcpdf') . '</p>
224 <p>'. _('Please open <a href="https://github.com/wallabag/wallabag/issues" >an issue</a> if you have trouble with the display of this E-Book on your device.') . '</p>
225 <img src="themes/_global/img/appicon/apple-touch-icon-152.png" /></div>';
226
227
228 $pdf->writeHTMLCell(0, 0, '', '', $intro, 0, 1, 0, true, '', true);
229
230 $i = 1;
231 Tools::logm('Adding actual content...');
232 foreach ($this->entries as $item) {
233 $pdf->AddPage();
234 $html = '<h1>' . $item['title'] . '</h1>';
235 $html .= $item['content'];
236 $pdf->writeHTMLCell(0, 0, '', '', $html, 0, 1, 0, true, '', true);
237 $i = $i+1;
238 }
239
240 // set image scale factor
241 $pdf->setImageScale(PDF_IMAGE_SCALE_RATIO);
242
243
244 $pdf->Output(CACHE . '/' . $this->bookFileName . '.pdf', 'FD');
245
246 }
247}
diff --git a/src/Wallabag/Wallabag/FlattrItem.php b/src/Wallabag/Wallabag/FlattrItem.php
new file mode 100644
index 00000000..17eccd3f
--- /dev/null
+++ b/src/Wallabag/Wallabag/FlattrItem.php
@@ -0,0 +1,59 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class FlattrItem
14{
15 public $status;
16 public $urlToFlattr;
17 public $flattrItemURL;
18 public $numFlattrs;
19
20 public function checkItem($urlToFlattr, $id)
21 {
22 $this->_cacheFlattrFile($urlToFlattr, $id);
23 $flattrResponse = file_get_contents(CACHE . "/flattr/".$id.".cache");
24 if($flattrResponse != FALSE) {
25 $result = json_decode($flattrResponse);
26 if (isset($result->message)) {
27 if ($result->message == "flattrable") {
28 $this->status = FLATTRABLE;
29 }
30 }
31 elseif (is_object($result) && $result->link) {
32 $this->status = FLATTRED;
33 $this->flattrItemURL = $result->link;
34 $this->numFlattrs = $result->flattrs;
35 }
36 else {
37 $this->status = NOT_FLATTRABLE;
38 }
39 }
40 else {
41 $this->status = "FLATTR_ERR_CONNECTION";
42 }
43 }
44
45 private function _cacheFlattrFile($urlToFlattr, $id)
46 {
47 if (!is_dir(CACHE . '/flattr')) {
48 mkdir(CACHE . '/flattr', 0777);
49 }
50
51 // if a cache flattr file for this url already exists and it's been less than one day than it have been updated, see in /cache
52 if ((!file_exists(CACHE . "/flattr/".$id.".cache")) || (time() - filemtime(CACHE . "/flattr/".$id.".cache") > 86400)) {
53 $askForFlattr = Tools::getFile(FLATTR_API . $urlToFlattr);
54 $flattrCacheFile = fopen(CACHE . "/flattr/".$id.".cache", 'w+');
55 fwrite($flattrCacheFile, $askForFlattr);
56 fclose($flattrCacheFile);
57 }
58 }
59}
diff --git a/src/Wallabag/Wallabag/Language.php b/src/Wallabag/Wallabag/Language.php
new file mode 100644
index 00000000..43411817
--- /dev/null
+++ b/src/Wallabag/Wallabag/Language.php
@@ -0,0 +1,116 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class Language
14{
15 protected $wallabag;
16
17 private $currentLanguage;
18
19 private $languageNames = array(
20 'cs_CZ.utf8' => 'čeština',
21 'de_DE.utf8' => 'German',
22 'en_EN.utf8' => 'English',
23 'en_US.utf8' => 'English (US)',
24 'es_ES.utf8' => 'Español',
25 'fa_IR.utf8' => 'فارسی',
26 'fr_FR.utf8' => 'Français',
27 'it_IT.utf8' => 'Italiano',
28 'pl_PL.utf8' => 'Polski',
29 'pt_BR.utf8' => 'Português (Brasil)',
30 'ru_RU.utf8' => 'Pусский',
31 'sl_SI.utf8' => 'Slovenščina',
32 'uk_UA.utf8' => 'Українська',
33 );
34
35 public function __construct(Wallabag $wallabag)
36 {
37 $this->wallabag = $wallabag;
38 $pocheUser = Session::getParam('poche_user');
39 $language = (is_null($pocheUser) ? LANG : $pocheUser->getConfigValue('language'));
40
41 @putenv('LC_ALL=' . $language);
42 setlocale(LC_ALL, $language);
43 bindtextdomain($language, LOCALE);
44 textdomain($language);
45
46 $this->currentLanguage = $language;
47 }
48
49 public function getLanguage() {
50 return $this->currentLanguage;
51 }
52
53 public function getInstalledLanguages() {
54 $handle = opendir(LOCALE);
55 $languages = array();
56
57 while (($language = readdir($handle)) !== false) {
58 # Languages are stored in a directory, so all directory names are languages
59 # @todo move language installation data to database
60 if (! is_dir(LOCALE . '/' . $language) || in_array($language, array('..', '.', 'tools'))) {
61 continue;
62 }
63
64 $current = false;
65
66 if ($language === $this->getLanguage()) {
67 $current = true;
68 }
69
70 $languages[] = array('name' => (isset($this->languageNames[$language]) ? $this->languageNames[$language] : $language), 'value' => $language, 'current' => $current);
71 }
72
73 return $languages;
74 }
75
76
77 /**
78 * Update language for current user
79 *
80 * @param $newLanguage
81 */
82 public function updateLanguage($newLanguage)
83 {
84 # we are not going to change it to the current language
85 if ($newLanguage == $this->getLanguage()) {
86 $this->wallabag->messages->add('w', _('still using the "' . $this->getLanguage() . '" language!'));
87 Tools::redirect('?view=config');
88 }
89
90 $languages = $this->getInstalledLanguages();
91 $actualLanguage = false;
92
93 foreach ($languages as $language) {
94 if ($language['value'] == $newLanguage) {
95 $actualLanguage = true;
96 break;
97 }
98 }
99
100 if (!$actualLanguage) {
101 $this->wallabag->messages->add('e', _('that language does not seem to be installed'));
102 Tools::redirect('?view=config');
103 }
104
105 $this->wallabag->store->updateUserConfig($this->wallabag->user->getId(), 'language', $newLanguage);
106 $this->wallabag->messages->add('s', _('you have changed your language preferences'));
107
108 $currentConfig = $_SESSION['poche_user']->config;
109 $currentConfig['language'] = $newLanguage;
110
111 $_SESSION['poche_user']->setConfig($currentConfig);
112
113 Tools::emptyCache();
114 Tools::redirect('?view=config');
115 }
116}
diff --git a/src/Wallabag/Wallabag/Picture.php b/src/Wallabag/Wallabag/Picture.php
new file mode 100644
index 00000000..8a9cd764
--- /dev/null
+++ b/src/Wallabag/Wallabag/Picture.php
@@ -0,0 +1,169 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13final class Picture
14{
15 /**
16 * Changing pictures URL in article content
17 */
18 public static function filterPicture($content, $url, $id)
19 {
20 $matches = array();
21 $processing_pictures = array(); // list of processing image to avoid processing the same pictures twice
22 preg_match_all('#<\s*(img)[^>]+src="([^"]*)"[^>]*>#Si', $content, $matches, PREG_SET_ORDER);
23 foreach($matches as $i => $link) {
24 $link[1] = trim($link[1]);
25 if (!preg_match('#^(([a-z]+://)|(\#))#', $link[1])) {
26 $absolute_path = self::_getAbsoluteLink($link[2], $url);
27 $filename = basename(parse_url($absolute_path, PHP_URL_PATH));
28 $directory = self::_createAssetsDirectory($id);
29 $fullpath = $directory . '/' . $filename;
30
31 if (in_array($absolute_path, $processing_pictures) === true) {
32 // replace picture's URL only if processing is OK : already processing -> go to next picture
33 continue;
34 }
35
36 if (self::_downloadPictures($absolute_path, $fullpath) === true) {
37 $content = str_replace($matches[$i][2], Tools::getPocheUrl() . $fullpath, $content);
38 }
39
40 $processing_pictures[] = $absolute_path;
41 }
42 }
43
44 return $content;
45 }
46
47 /**
48 * Get absolute URL
49 */
50 private static function _getAbsoluteLink($relativeLink, $url)
51 {
52 /* return if already absolute URL */
53 if (parse_url($relativeLink, PHP_URL_SCHEME) != '') return $relativeLink;
54
55 /* queries and anchors */
56 if ($relativeLink[0]=='#' || $relativeLink[0]=='?') return $url . $relativeLink;
57
58 /* parse base URL and convert to local variables:
59 $scheme, $host, $path */
60 extract(parse_url($url));
61
62 /* remove non-directory element from path */
63 $path = preg_replace('#/[^/]*$#', '', $path);
64
65 /* destroy path if relative url points to root */
66 if ($relativeLink[0] == '/') $path = '';
67
68 /* dirty absolute URL */
69 $abs = $host . $path . '/' . $relativeLink;
70
71 /* replace '//' or '/./' or '/foo/../' with '/' */
72 $re = array('#(/\.?/)#', '#/(?!\.\.)[^/]+/\.\./#');
73 for($n=1; $n>0; $abs=preg_replace($re, '/', $abs, -1, $n)) {}
74
75 /* absolute URL is ready! */
76 return $scheme.'://'.$abs;
77 }
78
79 /**
80 * Downloading pictures
81 *
82 * @return bool true if the download and processing is OK, false else
83 */
84 private static function _downloadPictures($absolute_path, $fullpath)
85 {
86 $rawdata = Tools::getFile($absolute_path);
87 $fullpath = urldecode($fullpath);
88
89 if(file_exists($fullpath)) {
90 unlink($fullpath);
91 }
92
93 // check extension
94 $file_ext = strrchr($fullpath, '.');
95 $whitelist = array(".jpg",".jpeg",".gif",".png");
96 if (!(in_array($file_ext, $whitelist))) {
97 Tools::logm('processed image with not allowed extension. Skipping ' . $fullpath);
98 return false;
99 }
100
101 // check headers
102 $imageinfo = getimagesize($absolute_path);
103 if ($imageinfo['mime'] != 'image/gif' && $imageinfo['mime'] != 'image/jpeg'&& $imageinfo['mime'] != 'image/jpg'&& $imageinfo['mime'] != 'image/png') {
104 Tools::logm('processed image with bad header. Skipping ' . $fullpath);
105 return false;
106 }
107
108 // regenerate image
109 $im = imagecreatefromstring($rawdata);
110 if ($im === false) {
111 Tools::logm('error while regenerating image ' . $fullpath);
112 return false;
113 }
114
115 switch ($imageinfo['mime']) {
116 case 'image/gif':
117 $result = imagegif($im, $fullpath);
118 break;
119 case 'image/jpeg':
120 case 'image/jpg':
121 $result = imagejpeg($im, $fullpath, REGENERATE_PICTURES_QUALITY);
122 break;
123 case 'image/png':
124 $result = imagepng($im, $fullpath, ceil(REGENERATE_PICTURES_QUALITY / 100 * 9));
125 break;
126 }
127 imagedestroy($im);
128
129 return $result;
130 }
131
132 /**
133 * Create a directory for an article
134 *
135 * @param $id ID of the article
136 * @return string
137 */
138 private static function _createAssetsDirectory($id)
139 {
140 $assets_path = ABS_PATH;
141 if (!is_dir($assets_path)) {
142 mkdir($assets_path, 0715);
143 }
144
145 $article_directory = $assets_path . $id;
146 if (!is_dir($article_directory)) {
147 mkdir($article_directory, 0715);
148 }
149
150 return $article_directory;
151 }
152
153 /**
154 * Remove the directory
155 *
156 * @param $directory
157 * @return bool
158 */
159 public static function removeDirectory($directory)
160 {
161 if (is_dir($directory)) {
162 $files = array_diff(scandir($directory), array('.','..'));
163 foreach ($files as $file) {
164 (is_dir("$directory/$file")) ? self::removeDirectory("$directory/$file") : unlink("$directory/$file");
165 }
166 return rmdir($directory);
167 }
168 }
169} \ No newline at end of file
diff --git a/src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.mo
new file mode 100644
index 00000000..af0920d2
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.po b/src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.po
new file mode 100644
index 00000000..cf727432
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/cs_CZ.utf8/LC_MESSAGES/cs_CZ.utf8.po
@@ -0,0 +1,567 @@
1#
2# Translators:
3# David Štancl <dstancl@gmail.com>, 2013
4msgid ""
5msgstr ""
6"Project-Id-Version: poche\n"
7"Report-Msgid-Bugs-To: \n"
8"POT-Creation-Date: 2014-02-25 15:28+0300\n"
9"PO-Revision-Date: 2014-02-25 15:29+0300\n"
10"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
11"Language-Team: Czech (http://www.transifex.com/projects/p/poche/language/cs/)\n"
12"Language: cs\n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"Plural-Forms: nplurals=3; plural=(n==1) ? 0 : (n>=2 && n<=4) ? 1 : 2;\n"
17"X-Generator: Poedit 1.5.4\n"
18"X-Poedit-Language: Czech\n"
19"X-Poedit-Basepath: .\n"
20"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
21
22msgid "wallabag, a read it later open source system"
23msgstr ""
24
25msgid "login failed: user doesn't exist"
26msgstr ""
27
28msgid "return home"
29msgstr ""
30
31msgid "config"
32msgstr "nastavení"
33
34msgid "Saving articles"
35msgstr ""
36
37msgid "There are several ways to save an article:"
38msgstr ""
39
40msgid "read the documentation"
41msgstr "číst dokumentaci"
42
43msgid "download the extension"
44msgstr ""
45
46msgid "via F-Droid"
47msgstr ""
48
49msgid " or "
50msgstr ""
51
52msgid "via Google Play"
53msgstr ""
54
55msgid "download the application"
56msgstr ""
57
58#, fuzzy
59msgid "By filling this field"
60msgstr "vyplněním tohoto pole"
61
62msgid "bag it!"
63msgstr ""
64
65msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
66msgstr ""
67
68msgid "Upgrading wallabag"
69msgstr ""
70
71#, fuzzy
72msgid "Installed version"
73msgstr "poslední stabilní verze"
74
75#, fuzzy
76msgid "Latest stable version"
77msgstr "poslední stabilní verze"
78
79#, fuzzy
80msgid "A more recent stable version is available."
81msgstr "je k dispozici novější stabilní verze."
82
83#, fuzzy
84msgid "You are up to date."
85msgstr "je aktuální"
86
87#, fuzzy
88msgid "Latest dev version"
89msgstr "poslední vývojová verze"
90
91#, fuzzy
92msgid "A more recent development version is available."
93msgstr "je k dispozici novější vývojová verze."
94
95msgid "Feeds"
96msgstr ""
97
98msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
99msgstr ""
100
101msgid "Unread feed"
102msgstr ""
103
104#, fuzzy
105msgid "Favorites feed"
106msgstr "oblíbené"
107
108#, fuzzy
109msgid "Archive feed"
110msgstr "archív"
111
112msgid "Your token:"
113msgstr ""
114
115msgid "Your user id:"
116msgstr ""
117
118msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
119msgstr ""
120
121#, fuzzy
122msgid "Change your theme"
123msgstr "Změnit heslo"
124
125msgid "Theme:"
126msgstr ""
127
128msgid "Update"
129msgstr "Aktualizovat"
130
131#, fuzzy
132msgid "Change your language"
133msgstr "Změnit heslo"
134
135msgid "Language:"
136msgstr ""
137
138msgid "Change your password"
139msgstr "Změnit heslo"
140
141msgid "New password:"
142msgstr "Nové heslo:"
143
144msgid "Password"
145msgstr "Heslo"
146
147msgid "Repeat your new password:"
148msgstr "Znovu nové heslo:"
149
150msgid "Import"
151msgstr "Importovat"
152
153#, fuzzy
154msgid "Please execute the import script locally as it can take a very long time."
155msgstr "Spusťte importní skript lokálně, může to dlouho trvat."
156
157#, fuzzy
158msgid "More info in the official documentation:"
159msgstr "Více informací v oficiální dokumentaci:"
160
161#, fuzzy
162msgid "Import from Pocket"
163msgstr "importovat z Pocket"
164
165#, php-format
166msgid "(you must have a %s file on your server)"
167msgstr ""
168
169#, fuzzy
170msgid "Import from Readability"
171msgstr "importovat z Readability"
172
173#, fuzzy
174msgid "Import from Instapaper"
175msgstr "importovat z Instapaper"
176
177#, fuzzy
178msgid "Import from wallabag"
179msgstr "importovat z Readability"
180
181#, fuzzy
182msgid "Export your wallabag data"
183msgstr "Export dat"
184
185msgid "Click here"
186msgstr "Klikněte zde"
187
188msgid "to download your database."
189msgstr ""
190
191#, fuzzy
192msgid "to export your wallabag data."
193msgstr "pro export vašich dat."
194
195msgid "Cache"
196msgstr ""
197
198msgid "to delete cache."
199msgstr ""
200
201msgid "You can enter multiple tags, separated by commas."
202msgstr ""
203
204msgid "return to article"
205msgstr ""
206
207msgid "plop"
208msgstr ""
209
210msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
211msgstr ""
212
213msgid "favoris"
214msgstr "oblíbené"
215
216msgid "archive"
217msgstr "archív"
218
219msgid "unread"
220msgstr "nepřečtené"
221
222msgid "by date asc"
223msgstr "podle data od nejstarších"
224
225msgid "by date"
226msgstr "podle data"
227
228msgid "by date desc"
229msgstr "podle data od nejnovějších"
230
231msgid "by title asc"
232msgstr "podle nadpisu vzestupně"
233
234msgid "by title"
235msgstr "podle nadpisu"
236
237msgid "by title desc"
238msgstr "podle nadpisu sestupně"
239
240msgid "Tag"
241msgstr ""
242
243msgid "No articles found."
244msgstr ""
245
246#, fuzzy
247msgid "Toggle mark as read"
248msgstr "označit jako přečtené"
249
250msgid "toggle favorite"
251msgstr "označit jako oblíbené"
252
253msgid "delete"
254msgstr "smazat"
255
256msgid "original"
257msgstr "originál"
258
259msgid "estimated reading time:"
260msgstr ""
261
262msgid "mark all the entries as read"
263msgstr ""
264
265msgid "results"
266msgstr "výsledky"
267
268msgid "installation"
269msgstr "instalace"
270
271#, fuzzy
272msgid "install your wallabag"
273msgstr "instalovat"
274
275#, fuzzy
276msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
277msgstr "poche ještě není nainstalováno. Pro instalaci vyplňte níže uvedený formulář. Nezapomeňte <a href='http://doc.inthepoche.com'>si přečíst dokumentaci</a> na stránkách programu."
278
279msgid "Login"
280msgstr "Jméno"
281
282msgid "Repeat your password"
283msgstr "Zopakujte heslo"
284
285msgid "Install"
286msgstr "Instalovat"
287
288#, fuzzy
289msgid "login to your wallabag"
290msgstr "přihlásit se k poche"
291
292msgid "Login to wallabag"
293msgstr ""
294
295msgid "you are in demo mode, some features may be disabled."
296msgstr "používáte ukázkový mód, některé funkce jsou zakázány."
297
298msgid "Username"
299msgstr ""
300
301msgid "Stay signed in"
302msgstr "Zůstat přihlášen(a)"
303
304msgid "(Do not check on public computers)"
305msgstr "(Nezaškrtávejte na veřejně dostupných počítačích)"
306
307msgid "Sign in"
308msgstr "Přihlásit se"
309
310msgid "favorites"
311msgstr "oblíbené"
312
313msgid "estimated reading time :"
314msgstr ""
315
316msgid "Mark all the entries as read"
317msgstr ""
318
319msgid "Return home"
320msgstr ""
321
322#, fuzzy
323msgid "Back to top"
324msgstr "zpět na začátek"
325
326#, fuzzy
327msgid "Mark as read"
328msgstr "označit jako přečtené"
329
330#, fuzzy
331msgid "Favorite"
332msgstr "oblíbené"
333
334#, fuzzy
335msgid "Toggle favorite"
336msgstr "označit jako oblíbené"
337
338#, fuzzy
339msgid "Delete"
340msgstr "smazat"
341
342#, fuzzy
343msgid "Tweet"
344msgstr "tweetnout"
345
346#, fuzzy
347msgid "Email"
348msgstr "email"
349
350msgid "shaarli"
351msgstr "shaarli"
352
353msgid "flattr"
354msgstr "flattr"
355
356#, fuzzy
357msgid "Does this article appear wrong?"
358msgstr "vypadá tento článek špatně?"
359
360msgid "tags:"
361msgstr ""
362
363msgid "Edit tags"
364msgstr ""
365
366msgid "save link!"
367msgstr ""
368
369msgid "home"
370msgstr "domů"
371
372msgid "tags"
373msgstr ""
374
375msgid "logout"
376msgstr "odhlásit se"
377
378msgid "powered by"
379msgstr "běží na"
380
381msgid "debug mode is on so cache is off."
382msgstr "je zapnut ladicí mód, proto je keš vypnuta."
383
384#, fuzzy
385msgid "your wallabag version:"
386msgstr "vaše verze"
387
388msgid "storage:"
389msgstr "úložiště:"
390
391msgid "save a link"
392msgstr ""
393
394msgid "back to home"
395msgstr "zpět na úvod"
396
397msgid "toggle mark as read"
398msgstr "označit jako přečtené"
399
400msgid "tweet"
401msgstr "tweetnout"
402
403msgid "email"
404msgstr "email"
405
406msgid "this article appears wrong?"
407msgstr "vypadá tento článek špatně?"
408
409msgid "No link available here!"
410msgstr "Není k dispozici žádný odkaz!"
411
412msgid "Poching a link"
413msgstr "Odkaz se ukládá"
414
415msgid "by filling this field"
416msgstr "vyplněním tohoto pole"
417
418msgid "bookmarklet: drag & drop this link to your bookmarks bar"
419msgstr ""
420
421msgid "your version"
422msgstr "vaše verze"
423
424msgid "latest stable version"
425msgstr "poslední stabilní verze"
426
427msgid "a more recent stable version is available."
428msgstr "je k dispozici novější stabilní verze."
429
430msgid "you are up to date."
431msgstr "je aktuální"
432
433msgid "latest dev version"
434msgstr "poslední vývojová verze"
435
436msgid "a more recent development version is available."
437msgstr "je k dispozici novější vývojová verze."
438
439msgid "Please execute the import script locally, it can take a very long time."
440msgstr "Spusťte importní skript lokálně, může to dlouho trvat."
441
442#, fuzzy
443msgid "More infos in the official doc:"
444msgstr "Více informací v oficiální dokumentaci:"
445
446msgid "import from Pocket"
447msgstr "importovat z Pocket"
448
449msgid "import from Readability"
450msgstr "importovat z Readability"
451
452msgid "import from Instapaper"
453msgstr "importovat z Instapaper"
454
455msgid "Tags"
456msgstr ""
457
458#, fuzzy
459msgid "Untitled"
460msgstr "podle nadpisu"
461
462msgid "the link has been added successfully"
463msgstr ""
464
465msgid "error during insertion : the link wasn't added"
466msgstr ""
467
468msgid "the link has been deleted successfully"
469msgstr ""
470
471msgid "the link wasn't deleted"
472msgstr ""
473
474msgid "Article not found!"
475msgstr ""
476
477msgid "previous"
478msgstr ""
479
480msgid "next"
481msgstr ""
482
483msgid "in demo mode, you can't update your password"
484msgstr ""
485
486msgid "your password has been updated"
487msgstr ""
488
489msgid "the two fields have to be filled & the password must be the same in the two fields"
490msgstr ""
491
492msgid "still using the \""
493msgstr ""
494
495msgid "that theme does not seem to be installed"
496msgstr ""
497
498msgid "you have changed your theme preferences"
499msgstr ""
500
501msgid "that language does not seem to be installed"
502msgstr ""
503
504msgid "you have changed your language preferences"
505msgstr ""
506
507msgid "login failed: you have to fill all fields"
508msgstr ""
509
510msgid "welcome to your wallabag"
511msgstr ""
512
513msgid "login failed: bad login or password"
514msgstr ""
515
516#, fuzzy
517msgid "import from instapaper completed"
518msgstr "importovat z Instapaper"
519
520#, fuzzy
521msgid "import from pocket completed"
522msgstr "importovat z Pocket"
523
524#, fuzzy
525msgid "import from Readability completed. "
526msgstr "importovat z Readability"
527
528#, fuzzy
529msgid "import from Poche completed. "
530msgstr "importovat z Pocket"
531
532msgid "Unknown import provider."
533msgstr ""
534
535msgid "Incomplete inc/poche/define.inc.php file, please define \""
536msgstr ""
537
538msgid "Could not find required \""
539msgstr ""
540
541msgid "Uh, there is a problem while generating feeds."
542msgstr ""
543
544#, fuzzy
545msgid "Cache deleted."
546msgstr "smazat"
547
548msgid "Oops, it seems you don't have PHP 5."
549msgstr ""
550
551#~ msgid "poche it!"
552#~ msgstr "uložit!"
553
554#~ msgid "Updating poche"
555#~ msgstr "Poche se aktualizuje"
556
557#~ msgid "create an issue"
558#~ msgstr "odeslat požadavek"
559
560#~ msgid "or"
561#~ msgstr "nebo"
562
563#~ msgid "contact us by mail"
564#~ msgstr "kontaktovat e-mailem"
565
566#~ msgid "your poche version:"
567#~ msgstr "verze:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo
new file mode 100644
index 00000000..bd18817f
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po b/src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po
new file mode 100644
index 00000000..8b82721d
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/de_DE.utf8/LC_MESSAGES/de_DE.utf8.po
@@ -0,0 +1,658 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: Wallabag\n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-03-27 13:41+0100\n"
6"PO-Revision-Date: \n"
7"Last-Translator: Kevin Meyer <wallabag@kevin-meyer.de>\n"
8"Language-Team: \n"
9"Language: de\n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.6.4\n"
14"X-Poedit-Basepath: .\n"
15"X-Poedit-SearchPath-0: /Users/kevinmeyer/Dropbox/dev_web/wallabag-dev\n"
16
17msgid "config"
18msgstr "Konfiguration"
19
20msgid "Saving articles"
21msgstr "Artikel speichern"
22
23msgid "There are several ways to save an article:"
24msgstr "Es gibt viele Methoden um Artikel zu speichern:"
25
26msgid "read the documentation"
27msgstr "Die Dokumentation lesen"
28
29msgid "download the extension"
30msgstr "installiere die Erweiterung"
31
32msgid "via F-Droid"
33msgstr "via F-Droid"
34
35msgid " or "
36msgstr " oder "
37
38msgid "via Google Play"
39msgstr "via Google Play"
40
41msgid "download the application"
42msgstr "lade die App"
43
44msgid "By filling this field"
45msgstr "Durch Ausfüllen dieses Feldes"
46
47msgid "bag it!"
48msgstr "bag it!"
49
50msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
51msgstr "Bookmarklet: Ziehe diesen Link in deine Lesezeichen-Leiste"
52
53msgid "Upgrading wallabag"
54msgstr "wallabag aktualisieren"
55
56msgid "Installed version"
57msgstr "Installierte Version"
58
59msgid "Latest stable version"
60msgstr "Neuste stabile Version"
61
62msgid "A more recent stable version is available."
63msgstr "Eine neuere stabile Version ist verfügbar."
64
65msgid "You are up to date."
66msgstr "Du bist auf den neuesten Stand."
67
68msgid "Last check:"
69msgstr "Zuletzt geprüft:"
70
71msgid "Latest dev version"
72msgstr "Neuste Entwicklungsversion"
73
74msgid "A more recent development version is available."
75msgstr "Eine neuere Entwicklungsversion ist verfügbar."
76
77msgid "You can clear cache to check the latest release."
78msgstr "Leere den Cache um die neueste Version zu prüfen."
79
80msgid "Feeds"
81msgstr "Feeds"
82
83msgid ""
84"Your feed token is currently empty and must first be generated to enable "
85"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
86msgstr ""
87"Dein Feed Token ist noch nicht vorhanden und muss zunächst generiert werden, "
88"um deine Feeds zu aktivieren. Klicke <a href='?feed&amp;"
89"action=generate'>hier um ihn zu generieren</a>."
90
91msgid "Unread feed"
92msgstr "Ungelesen Feed"
93
94msgid "Favorites feed"
95msgstr "Favoriten Feed"
96
97msgid "Archive feed"
98msgstr "Archiv Feed"
99
100msgid "Your token:"
101msgstr "Dein Token:"
102
103msgid "Your user id:"
104msgstr "Deine User ID:"
105
106msgid ""
107"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
108"</a>."
109msgstr ""
110"Hier kannst du dein Token erzeugen: <a href='?feed&amp;"
111"action=generate'>Generieren!</a>."
112
113msgid "Change your theme"
114msgstr "Theme ändern"
115
116msgid "Theme:"
117msgstr "Theme:"
118
119msgid "Update"
120msgstr "Aktualisieren"
121
122msgid "Change your language"
123msgstr "Sprache ändern"
124
125msgid "Language:"
126msgstr "Sprache:"
127
128msgid "Change your password"
129msgstr "Passwort ändern"
130
131msgid "New password:"
132msgstr "Neues Passwort:"
133
134msgid "Password"
135msgstr "Passwort"
136
137msgid "Repeat your new password:"
138msgstr "Neues Passwort wiederholen:"
139
140msgid "Import"
141msgstr "Import"
142
143msgid ""
144"Importing from other services can be quite long, and webservers default "
145"configuration often prevents long scripts execution time, so it must be done "
146"in multiple parts."
147msgstr ""
148"Der Import von anderen Diensten kann sehr lange dauern. Deswegen bricht der "
149"Webserver diesen in vielen Konfigurationen ab. Daher muss der Import in "
150"mehrere Teile aufgeteilt werden."
151
152msgid "First, select the export file on your computer and upload it."
153msgstr "Wähle eine Datei von deinem Computer aus und lade sie hoch."
154
155msgid "File:"
156msgstr "Datei:"
157
158msgid "Upload"
159msgstr "Hochladen"
160
161msgid "Then, click on the right link below."
162msgstr "Klicke dann unten auf den entsprechenden Link."
163
164msgid "Import from Pocket"
165msgstr "Import aus Pocket"
166
167#, php-format
168msgid "(after uploaded %s file)"
169msgstr "(nach Upload der Datei %s)"
170
171msgid "Import from Readability"
172msgstr "Import aus Readability"
173
174msgid "Import from Instapaper"
175msgstr "Import aus Instapaper"
176
177msgid "Import from wallabag"
178msgstr "Import aus Readability"
179
180msgid ""
181"3. Your feed token is currently empty and must first be generated to fetch "
182"content. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
183msgstr ""
184"3. Dein Feed Token ist noch nicht vorhanden und muss zunächst generiert "
185"werden, um Inhalt abrufen zu können. Klicke <a href='?feed&amp;"
186"action=generate'>hier um ihn zu generieren</a>."
187
188msgid "Finally, you have to fetch content for imported items."
189msgstr "Jetzt musst du den Inhalt der importierten Artikel abrufen."
190
191msgid "Click here"
192msgstr "Klicke hier"
193
194msgid "to fetch content for 10 articles"
195msgstr "um den Inhalt von 10 Artikeln abzurufen"
196
197msgid ""
198"If you have console access to your server, you can also create a cron task:"
199msgstr ""
200"Wenn du Konsolenzugang zu deinem Server hast kannst du auch einen cron "
201"erstellen:"
202
203msgid "Export your wallabag data"
204msgstr "Exportieren deine wallabag Daten"
205
206msgid "to download your database."
207msgstr "um deine Datenbank herunterzuladen"
208
209msgid "to export your wallabag data."
210msgstr "um deine Daten aus wallabag zu exportieren."
211
212msgid "Cache"
213msgstr "Cache"
214
215msgid "to delete cache."
216msgstr "um den Cache zu löschen."
217
218msgid "Tags"
219msgstr "Tags"
220
221msgid "by date asc"
222msgstr "nach Datum aufsteigend"
223
224msgid "by date"
225msgstr "nach Datum"
226
227msgid "by date desc"
228msgstr "nach Datum absteigend"
229
230msgid "by title asc"
231msgstr "nach Titel aufsteigend"
232
233msgid "by title"
234msgstr "nach Titel"
235
236msgid "by title desc"
237msgstr "nach Titel absteigend"
238
239#, fuzzy
240msgid "toggle view mode"
241msgstr "Favorit"
242
243msgid "home"
244msgstr "Start"
245
246msgid "favorites"
247msgstr "Favoriten"
248
249msgid "archive"
250msgstr "Archiv"
251
252msgid "tags"
253msgstr "Tags"
254
255msgid "save a link"
256msgstr "Speichere einen Link"
257
258msgid "search"
259msgstr "Suche"
260
261msgid "logout"
262msgstr "Logout"
263
264msgid "return home"
265msgstr "Zurück zum Start"
266
267#, fuzzy
268msgid "Search"
269msgstr "Archiv"
270
271msgid "powered by"
272msgstr "bereitgestellt von"
273
274msgid "debug mode is on so cache is off."
275msgstr "Debug Modus ist aktiviert, das Caching ist somit deaktiviert"
276
277msgid "your wallabag version:"
278msgstr "Deine wallabag Version"
279
280msgid "storage:"
281msgstr "Speicher:"
282
283msgid "Save a link"
284msgstr "Speichere einen Link"
285
286msgid "save link!"
287msgstr "Link speichern!"
288
289msgid "unread"
290msgstr "ungelesen"
291
292msgid "Tag"
293msgstr "Tag"
294
295msgid "No articles found."
296msgstr "Keine Artikel gefunden."
297
298msgid "estimated reading time:"
299msgstr "geschätzte Lesezeit:"
300
301msgid "estimated reading time :"
302msgstr "geschätzte Lesezeit:"
303
304msgid "Toggle mark as read"
305msgstr "Als gelesen markieren"
306
307msgid "toggle favorite"
308msgstr "Favorit"
309
310msgid "delete"
311msgstr "Löschen"
312
313msgid "original"
314msgstr "Original"
315
316msgid "Mark all the entries as read"
317msgstr "Markiere alle als gelesen"
318
319msgid "results"
320msgstr "Ergebnisse"
321
322msgid "Uh, there is a problem with the cron."
323msgstr "Oh, es gab ein Problem mit dem cron."
324
325msgid "Untitled"
326msgstr "Ohne Titel"
327
328msgid "the link has been added successfully"
329msgstr "Speichern des Links erfolgreich"
330
331msgid "error during insertion : the link wasn't added"
332msgstr "Fehler beim Einfügen: Der Link wurde nicht hinzugefügt"
333
334msgid "the link has been deleted successfully"
335msgstr "Löschen des Links erfolgreich"
336
337msgid "the link wasn't deleted"
338msgstr "Der Link wurde nicht entfernt"
339
340msgid "Article not found!"
341msgstr "Artikel nicht gefunden!"
342
343msgid "previous"
344msgstr "vorherige"
345
346msgid "next"
347msgstr "nächste"
348
349msgid "in demo mode, you can't update your password"
350msgstr "im Demo-Modus kann das Passwort nicht geändert werden"
351
352msgid "your password has been updated"
353msgstr "Dein Passwort wurde geändert"
354
355msgid ""
356"the two fields have to be filled & the password must be the same in the two "
357"fields"
358msgstr "Beide Felder müssen mit selbem Inhalt ausgefüllt sein"
359
360msgid "still using the \""
361msgstr "nutze immernoch die \""
362
363msgid "that theme does not seem to be installed"
364msgstr "dieses Theme scheint nicht installiert zu sein"
365
366msgid "you have changed your theme preferences"
367msgstr "Du hast deine Theme Einstellungen geändert"
368
369msgid "that language does not seem to be installed"
370msgstr "Diese Sprache scheint nicht installiert zu sein"
371
372msgid "you have changed your language preferences"
373msgstr "Du hast deine Spracheinstellungen geändert"
374
375msgid "login failed: you have to fill all fields"
376msgstr "Anmeldung fehlgeschlagen: Alle Felder müssen ausgefüllt werden"
377
378msgid "welcome to your wallabag"
379msgstr "Willkommen bei deiner wallabag"
380
381msgid "login failed: bad login or password"
382msgstr "Anmeldung fehlgeschlagen: Falscher Benutzername oder Passwort"
383
384msgid ""
385"import from instapaper completed. You have to execute the cron to fetch "
386"content."
387msgstr ""
388"Import aus Instapaper vollständig. Führe den cronjob aus um den Inhalt "
389"abzurufen."
390
391msgid ""
392"import from pocket completed. You have to execute the cron to fetch content."
393msgstr ""
394"Import aus Pocket vollständig. Führe den cronjob aus um den Inhalt abzurufen."
395
396msgid ""
397"import from Readability completed. You have to execute the cron to fetch "
398"content."
399msgstr ""
400"Import aus Readability vollständig. Führe den cronjob aus um den Inhalt "
401"abzurufen."
402
403msgid ""
404"import from Poche completed. You have to execute the cron to fetch content."
405msgstr ""
406"Import aus Poche vollständig. Führe den cronjob aus um den Inhalt abzurufen."
407
408msgid "Unknown import provider."
409msgstr "Unbekannter Import Anbieter."
410
411msgid "Could not find required \""
412msgstr "Nicht gefunden: \""
413
414msgid "File uploaded. You can now execute import."
415msgstr "Datei hochgeladen. Du kannst nun importieren."
416
417msgid "Error while importing file. Do you have access to upload it?"
418msgstr "Fehler beim Importieren. Hast du das Recht zum Hochladen?"
419
420msgid "User with this id ("
421msgstr "Nutzer mit dieser id ("
422
423msgid "Uh, there is a problem while generating feeds."
424msgstr "Oh, es gab ein Problem beim Erstellen des Feeds."
425
426msgid "Cache deleted."
427msgstr "Cache gelöscht"
428
429msgid "Oops, it seems you don't have PHP 5."
430msgstr "Oops, es scheint als würde PHP 5 fehlen."
431
432msgid "wallabag, a read it later open source system"
433msgstr "wallabag, ein Später-Lesen Open Source System"
434
435msgid "login failed: user doesn't exist"
436msgstr "Anmeldung fehlgeschlagen: Benutzer existiert nicht"
437
438#~ msgid "You can enter multiple tags, separated by commas."
439#~ msgstr "Du kannst mehrere Tags, durch Kommata getrennt, eingeben."
440
441#~ msgid "return to article"
442#~ msgstr "zurück zum Artikel"
443
444#, fuzzy
445#~ msgid "favoris"
446#~ msgstr "Favoriten"
447
448#~ msgid "mark all the entries as read"
449#~ msgstr "Markiere alle als gelesen"
450
451#~ msgid "Back to top"
452#~ msgstr "Nach Oben"
453
454#~ msgid "Mark as read"
455#~ msgstr "Als gelesen markieren"
456
457#~ msgid "Favorite"
458#~ msgstr "Favoriten"
459
460#~ msgid "Toggle favorite"
461#~ msgstr "Favorit"
462
463#~ msgid "Delete"
464#~ msgstr "Löschen"
465
466#~ msgid "Tweet"
467#~ msgstr "Twittern"
468
469#~ msgid "Email"
470#~ msgstr "per E-Mail senden"
471
472#~ msgid "shaarli"
473#~ msgstr "Shaarli"
474
475#~ msgid "flattr"
476#~ msgstr "flattr"
477
478#~ msgid "Does this article appear wrong?"
479#~ msgstr "Erscheint dieser Artikel falsch?"
480
481#~ msgid "Edit tags"
482#~ msgstr "Tags bearbeiten"
483
484#~ msgid "Start typing for auto complete."
485#~ msgstr "Beginne zu tippen für die Autovervollständigung."
486
487#~ msgid "Return home"
488#~ msgstr "Zurück zum Start"
489
490#~ msgid "tags:"
491#~ msgstr "Tags:"
492
493#~ msgid "login to your wallabag"
494#~ msgstr "Bei wallabag anmelden"
495
496#~ msgid "you are in demo mode, some features may be disabled."
497#~ msgstr ""
498#~ "Du befindest dich im Demomodus, einige Funktionen könnten deaktiviert "
499#~ "sein."
500
501#~ msgid "Login"
502#~ msgstr "Benutzername"
503
504#~ msgid "Stay signed in"
505#~ msgstr "Angemeldet bleiben"
506
507#~ msgid "(Do not check on public computers)"
508#~ msgstr "(nicht auf einem öffentlichen Computer anhaken)"
509
510#~ msgid "plop"
511#~ msgstr "plop"
512
513#~ msgid "Login to wallabag"
514#~ msgstr "Bei wallabag anmelden"
515
516#~ msgid "Username"
517#~ msgstr "Benutzername"
518
519#~ msgid "Sign in"
520#~ msgstr "Einloggen"
521
522#~ msgid "Enter your search here"
523#~ msgstr "Gib hier deine Suchanfrage ein"
524
525#~ msgid "installation"
526#~ msgstr "Installieren"
527
528#~ msgid "install your wallabag"
529#~ msgstr "Installiere deine wallabag"
530
531#~ msgid ""
532#~ "wallabag is still not installed. Please fill the below form to install "
533#~ "it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the "
534#~ "documentation on wallabag website</a>."
535#~ msgstr ""
536#~ "wallabag ist noch nicht installiert. Bitte fülle die Felder unten aus, um "
537#~ "die Installation durchzuführen. Zögere nicht, <a href='http://doc."
538#~ "wallabag.org/'>die Dokumentation auf der Website von wallabag zu lesen, "
539#~ "falls du Probleme haben solltest."
540
541#~ msgid "Repeat your password"
542#~ msgstr "Wiederhole dein Passwort"
543
544#~ msgid "Install"
545#~ msgstr "Installieren"
546
547#~ msgid "No link available here!"
548#~ msgstr "Kein Link verfügbar!"
549
550#~ msgid "toggle mark as read"
551#~ msgstr "Als gelesen markieren"
552
553#~ msgid ""
554#~ "You can <a href='wallabag_compatibility_test.php'>check your "
555#~ "configuration here</a>."
556#~ msgstr ""
557#~ "Du kannst deine Konfiguration <a href='wallabag_compatibility_test."
558#~ "php'>hier testen</a>."
559
560#~ msgid "back to home"
561#~ msgstr "züruck zur Hauptseite"
562
563#~ msgid "tweet"
564#~ msgstr "Twittern"
565
566#~ msgid "email"
567#~ msgstr "senden per E-Mail"
568
569#~ msgid "this article appears wrong?"
570#~ msgstr "dieser Artikel erscheint falsch?"
571
572#~ msgid "Poching a link"
573#~ msgstr "Poche einen Link"
574
575#~ msgid "by filling this field"
576#~ msgstr "durch das ausfüllen dieses Feldes:"
577
578#~ msgid "bookmarklet: drag & drop this link to your bookmarks bar"
579#~ msgstr "Bookmarklet: Ziehe diesen Link in deine Lesezeichen-Leiste"
580
581#~ msgid "your version"
582#~ msgstr "Deine Version"
583
584#~ msgid "latest stable version"
585#~ msgstr "Neuste stabile Version"
586
587#~ msgid "a more recent stable version is available."
588#~ msgstr "Eine neuere stabile Version ist verfügbar."
589
590#~ msgid "you are up to date."
591#~ msgstr "Du bist auf den neuesten Stand."
592
593#~ msgid "latest dev version"
594#~ msgstr "Neuste Entwicklungsversion"
595
596#~ msgid "a more recent development version is available."
597#~ msgstr "Eine neuere Entwicklungsversion ist verfügbar."
598
599#~ msgid ""
600#~ "Please execute the import script locally, it can take a very long time."
601#~ msgstr ""
602#~ "Bitte führe das Import Script lokal aus, dies kann eine Weile dauern."
603
604#~ msgid "More infos in the official doc:"
605#~ msgstr "Mehr Informationen in der offiziellen Dokumentation:"
606
607#~ msgid "import from Pocket"
608#~ msgstr "Import aus Pocket"
609
610#~ msgid "(you must have a %s file on your server)"
611#~ msgstr "(du brauchst eine %s Datei auf deinem Server)"
612
613#~ msgid "import from Readability"
614#~ msgstr "Import aus Readability"
615
616#~ msgid "import from Instapaper"
617#~ msgstr "Import aus Instapaper"
618
619#~ msgid "You can also create a cron task:"
620#~ msgstr "Du kannst auch einen cronjob anlegen:"
621
622#~ msgid ""
623#~ "Please execute the import script locally as it can take a very long time."
624#~ msgstr ""
625#~ "Bitte führe das Import Script lokal aus, da dies eine Weile dauern kann."
626
627#~ msgid "More info in the official documentation:"
628#~ msgstr "Mehr Informationen in der offiziellen Dokumentation:"
629
630#~ msgid "import from instapaper completed"
631#~ msgstr "Import aus Instapaper erfolgreich"
632
633#~ msgid "import from pocket completed"
634#~ msgstr "Import aus Pocket erfolgreich"
635
636#~ msgid "import from Poche completed. "
637#~ msgstr "Import aus Poche erfolgreich"
638
639#~ msgid "Incomplete inc/poche/define.inc.php file, please define \""
640#~ msgstr "Unvollständige inc/poche/define.inc.php Datei, bitte setze \""
641
642#~ msgid "poche it!"
643#~ msgstr "Poche es!"
644
645#~ msgid "Updating poche"
646#~ msgstr "Poche aktualisieren"
647
648#~ msgid "create an issue"
649#~ msgstr "ein Ticket erstellen"
650
651#~ msgid "or"
652#~ msgstr "oder"
653
654#~ msgid "contact us by mail"
655#~ msgstr "kontaktieren Sie uns per E-Mail"
656
657#~ msgid "your poche version:"
658#~ msgstr "Deine Poche Version"
diff --git a/src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo
new file mode 100644
index 00000000..c9105ee6
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po b/src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po
new file mode 100644
index 00000000..81f87342
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/en_EN.utf8/LC_MESSAGES/en_EN.utf8.po
@@ -0,0 +1,770 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: wallabag\n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-07-26 15:17+0300\n"
6"PO-Revision-Date: \n"
7"Last-Translator: Thomas Citharel <tcit@openmailbox.org>\n"
8"Language-Team: \n"
9"Language: en\n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.5.4\n"
14"X-Poedit-Basepath: .\n"
15
16msgid "wallabag, a read it later open source system"
17msgstr "wallabag, a read it later open source system"
18
19msgid "login failed: user doesn't exist"
20msgstr "Login failed: user doesn't exist"
21
22msgid "return home"
23msgstr "Return Home"
24
25msgid "config"
26msgstr "Config"
27
28msgid "Saving articles"
29msgstr "Saving articles"
30
31msgid "There are several ways to save an article:"
32msgstr "There are several ways to save an article:"
33
34msgid "read the documentation"
35msgstr "Read the documentation"
36
37msgid "download the extension"
38msgstr "Download the extension"
39
40msgid "Firefox Add-On"
41msgstr "Firefox Add-On"
42
43msgid "Chrome Extension"
44msgstr "Chrome Extension"
45
46msgid "via F-Droid"
47msgstr "via F-Droid"
48
49msgid " or "
50msgstr " or "
51
52msgid "via Google Play"
53msgstr "via Google Play"
54
55msgid "download the application"
56msgstr "Download the application"
57
58msgid "By filling this field"
59msgstr "By filling this field"
60
61msgid "bag it!"
62msgstr "bag it!"
63
64msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
65msgstr "Bookmarklet: Drag & drop this link to your bookmarks bar"
66
67msgid "Upgrading wallabag"
68msgstr "Upgrading wallabag"
69
70msgid "Installed version"
71msgstr "Installed version"
72
73msgid "Latest stable version"
74msgstr "Latest stable version"
75
76msgid "A more recent stable version is available."
77msgstr "A more recent stable version is available."
78
79msgid "You are up to date."
80msgstr "You are up to date."
81
82msgid "Latest dev version"
83msgstr "Latest dev version"
84
85msgid "A more recent development version is available."
86msgstr "A more recent development version is available."
87
88msgid "Feeds"
89msgstr "Feeds"
90
91msgid ""
92"Your feed token is currently empty and must first be generated to enable "
93"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
94msgstr ""
95"Your feed token is currently empty and must first be generated to enable "
96"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
97
98msgid "Unread feed"
99msgstr "Unread feed"
100
101msgid "Favorites feed"
102msgstr "Favorites feed"
103
104msgid "Archive feed"
105msgstr "Archive feed"
106
107msgid "Your token:"
108msgstr "Your token:"
109
110msgid "Your user id:"
111msgstr "Your user ID:"
112
113msgid ""
114"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
115"</a>."
116msgstr "<a href='?feed&amp;action=generate'>Regenerate Token</a>"
117
118msgid "Change your theme"
119msgstr "Change Your Theme"
120
121msgid "Theme:"
122msgstr "Theme:"
123
124msgid "Update"
125msgstr "Update"
126
127msgid "Change your language"
128msgstr "Change Your Language"
129
130msgid "Language:"
131msgstr "Language:"
132
133msgid "Change your password"
134msgstr "Change Your Password"
135
136msgid "New password:"
137msgstr "New password:"
138
139msgid "Password"
140msgstr "Password"
141
142msgid "Repeat your new password:"
143msgstr "Repeat your new password:"
144
145msgid "Import"
146msgstr "Import"
147
148msgid ""
149"You can import your Pocket, Readability, Instapaper, Wallabag or any data in "
150"appropriate json or html format."
151msgstr ""
152"You can import your Pocket, Readability, Instapaper, wallabag or any fil in "
153"appropriate JSON or HTML format."
154
155msgid ""
156"Please select export file on your computer and press \"Import\" button "
157"below. Wallabag will parse your file, insert all URLs and start fetching of "
158"articles if required."
159msgstr ""
160"Please select export file on your computer and press &ldquo;Import&rdquo; "
161"button below. wallabag will parse your file, insert all URLs and start "
162"fetching of articles if required.Please execute the import script locally as "
163"it can take a very long time."
164
165msgid "You can click here to fetch content for articles with no content."
166msgstr "Fetch content for articles with no content"
167
168msgid ""
169"Please execute the import script locally as it can take a very long time."
170msgstr ""
171"Please execute the import script locally as it can take a very long time."
172
173msgid "More info in the official documentation:"
174msgstr "More info in the official documentation:"
175
176msgid ""
177"(<a href=\"http://doc.wallabag.org/en/User_documentation/"
178"Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)"
179msgstr ""
180"(<a href=\"http://doc.wallabag.org/en/User_documentation/"
181"Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)"
182
183msgid "Import from Pocket"
184msgstr "Import from Pocket"
185
186#, php-format
187msgid "(you must have a %s file on your server)"
188msgstr "(you must have a %s file on your server)"
189
190msgid "Import from Readability"
191msgstr "Import from Readability"
192
193msgid "Import from Instapaper"
194msgstr "Import from Instapaper"
195
196msgid "Import from wallabag"
197msgstr "Import from wallabag"
198
199msgid "Export your wallabag data"
200msgstr "Export your wallabag data"
201
202msgid "Click here"
203msgstr "Click here"
204
205msgid "to download your database."
206msgstr "to download your database."
207
208msgid "to export your wallabag data."
209msgstr "to export your wallabag data."
210
211msgid "Export JSON"
212msgstr "Export JSON"
213
214msgid "Cache"
215msgstr "Cache"
216
217msgid "to delete cache."
218msgstr "to delete cache."
219
220msgid "Delete Cache"
221msgstr "Delete Cache"
222
223msgid "You can enter multiple tags, separated by commas."
224msgstr "You can enter multiple tags, separated by commas."
225
226msgid "Add tags:"
227msgstr "Add tags:"
228
229msgid "no tags"
230msgstr "no tags"
231
232msgid "The tag has been applied successfully"
233msgstr "The tag has been applied successfully"
234
235msgid "interview"
236msgstr "interview"
237
238msgid "editorial"
239msgstr "editorial"
240
241msgid "video"
242msgstr "video"
243
244msgid "return to article"
245msgstr "Return to article"
246
247msgid "plop"
248msgstr "plop"
249
250msgid ""
251"You can <a href='wallabag_compatibility_test.php'>check your configuration "
252"here</a>."
253msgstr ""
254"You can <a href='wallabag_compatibility_test.php'>check your configuration "
255"here</a>."
256
257msgid "favoris"
258msgstr "Favorites"
259
260msgid "archive"
261msgstr "Archive"
262
263msgid "unread"
264msgstr "Unread"
265
266msgid "by date asc"
267msgstr "by date asc"
268
269msgid "by date"
270msgstr "by date"
271
272msgid "by date desc"
273msgstr "by date desc"
274
275msgid "by title asc"
276msgstr "by title asc"
277
278msgid "by title"
279msgstr "by title"
280
281msgid "by title desc"
282msgstr "by title desc"
283
284msgid "Tag"
285msgstr "Tag"
286
287msgid "No articles found."
288msgstr "No articles found."
289
290msgid "Toggle mark as read"
291msgstr "Toggle mark as read"
292
293msgid "toggle favorite"
294msgstr "Toggle favorite"
295
296msgid "delete"
297msgstr "Delete"
298
299msgid "original"
300msgstr "Original"
301
302msgid "estimated reading time:"
303msgstr "Estimated reading time:"
304
305msgid "mark all the entries as read"
306msgstr "Mark all the entries as read"
307
308msgid "results"
309msgstr "Results"
310
311msgid "installation"
312msgstr "Installation"
313
314msgid "install your wallabag"
315msgstr "Install your wallabag"
316
317msgid ""
318"wallabag is still not installed. Please fill the below form to install it. "
319"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
320"on wallabag website</a>."
321msgstr ""
322"wallabag is still not installed. Please fill the below form to install it. "
323"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
324"on wallabag website</a>."
325
326msgid "Login"
327msgstr "Login"
328
329msgid "Repeat your password"
330msgstr "Repeat your password"
331
332msgid "Install"
333msgstr "Install"
334
335msgid "login to your wallabag"
336msgstr "Login to your wallabag"
337
338msgid "Login to wallabag"
339msgstr "Login to wallabag"
340
341msgid "you are in demo mode, some features may be disabled."
342msgstr "You are in demo mode; some features may be disabled."
343
344msgid "Username"
345msgstr "Username"
346
347msgid "Stay signed in"
348msgstr "Stay signed in"
349
350msgid "(Do not check on public computers)"
351msgstr "(Do not check on public computers)"
352
353msgid "Sign in"
354msgstr "Sign in"
355
356msgid "favorites"
357msgstr "Favorites"
358
359msgid "estimated reading time :"
360msgstr "Estimated reading time:"
361
362msgid "Mark all the entries as read"
363msgstr "Mark all the entries as read"
364
365msgid "Return home"
366msgstr "Return home"
367
368msgid "Back to top"
369msgstr "Back to top"
370
371msgid "Mark as read"
372msgstr "Mark as read"
373
374msgid "Favorite"
375msgstr "Favorite"
376
377msgid "Toggle favorite"
378msgstr "Toggle favorite"
379
380msgid "Delete"
381msgstr "Delete"
382
383msgid "Tweet"
384msgstr "Tweet"
385
386msgid "Email"
387msgstr "Email"
388
389msgid "shaarli"
390msgstr "shaarli"
391
392msgid "flattr"
393msgstr "flattr"
394
395msgid "Does this article appear wrong?"
396msgstr "Does this article appear wrong?"
397
398msgid "tags:"
399msgstr "tags:"
400
401msgid "Edit tags"
402msgstr "Edit Tags"
403
404msgid "save link!"
405msgstr "Save Link"
406
407msgid "home"
408msgstr "Home"
409
410msgid "tags"
411msgstr "Tags"
412
413msgid "logout"
414msgstr "Logout"
415
416msgid "powered by"
417msgstr "Powered by"
418
419msgid "debug mode is on so cache is off."
420msgstr "Debug mode is on, so cache is off."
421
422msgid "your wallabag version:"
423msgstr "Your wallabag version:"
424
425msgid "storage:"
426msgstr "Storage:"
427
428msgid "save a link"
429msgstr "Save a Link"
430
431msgid "back to home"
432msgstr "Back to Home"
433
434msgid "toggle mark as read"
435msgstr "Toggle mark as read"
436
437msgid "tweet"
438msgstr "Tweet"
439
440msgid "email"
441msgstr "Email"
442
443msgid "this article appears wrong?"
444msgstr "This article appears wrong?"
445
446msgid "No link available here!"
447msgstr "No link available here"
448
449msgid "Poching a link"
450msgstr "bagging a link"
451
452msgid "by filling this field"
453msgstr "by filling this field"
454
455msgid "bookmarklet: drag & drop this link to your bookmarks bar"
456msgstr "Bookmarklet: Drag & drop this link to your bookmarks bar"
457
458msgid "Drag &amp; drop this link to your bookmarks bar:"
459msgstr "Drag &amp; drop this link to your bookmarks bar:"
460
461msgid "your version"
462msgstr "your version"
463
464msgid "latest stable version"
465msgstr "latest stable version"
466
467msgid "a more recent stable version is available."
468msgstr "A more recent stable version is available."
469
470msgid "you are up to date."
471msgstr "You are up to date."
472
473msgid "latest dev version"
474msgstr "latest dev version"
475
476msgid "a more recent development version is available."
477msgstr "A more recent development version is available."
478
479msgid "You can clear cache to check the latest release."
480msgstr ""
481"You can <a href=\"#cache\">clear the cache</a> to check for the latest "
482"release."
483
484msgid "Please execute the import script locally, it can take a very long time."
485msgstr ""
486"Please execute the import script locally, it can take a very long time."
487
488msgid "More infos in the official doc:"
489msgstr "More information in the official doc:"
490
491msgid "import from Pocket"
492msgstr "Import from Pocket"
493
494msgid "import from Readability"
495msgstr "Import from Readability"
496
497msgid "import from Instapaper"
498msgstr "Import from Instapaper"
499
500msgid "Tags"
501msgstr "Tags"
502
503msgid "Untitled"
504msgstr "Untitled"
505
506msgid "the link has been added successfully"
507msgstr "The link has been added successfully."
508
509msgid "error during insertion : the link wasn't added"
510msgstr "Error during insertion: the link wasn't added."
511
512msgid "the link has been deleted successfully"
513msgstr "The link has been deleted successfully."
514
515msgid "the link wasn't deleted"
516msgstr "The link wasn't deleted."
517
518msgid "Article not found!"
519msgstr "Article not found."
520
521msgid "previous"
522msgstr "Previous"
523
524msgid "next"
525msgstr "Next"
526
527msgid "in demo mode, you can't update your password"
528msgstr "In demo mode, you can't update your password."
529
530msgid "your password has been updated"
531msgstr "Your password has been updated."
532
533msgid ""
534"the two fields have to be filled & the password must be the same in the two "
535"fields"
536msgstr ""
537"les deux champs doivent être remplis et le mot de passe doit être le même "
538"pour les deux champs"
539
540msgid "still using the \""
541msgstr "Still using the \""
542
543msgid "that theme does not seem to be installed"
544msgstr "That theme does not seem to be installed."
545
546msgid "you have changed your theme preferences"
547msgstr "You have changed your theme preferences."
548
549msgid "that language does not seem to be installed"
550msgstr "That language does not seem to be installed."
551
552msgid "you have changed your language preferences"
553msgstr "You have changed your language preferences."
554
555msgid "login failed: you have to fill all fields"
556msgstr "Login failed: you have to fill all fields."
557
558msgid "welcome to your wallabag"
559msgstr "Welcome to your wallabag."
560
561msgid "login failed: bad login or password"
562msgstr "Login failed: bad login or password."
563
564msgid "import from instapaper completed"
565msgstr "Import from Instapaper completed."
566
567msgid "import from pocket completed"
568msgstr "Import from Pocket completed."
569
570msgid "import from Readability completed. "
571msgstr "Import from Readability completed."
572
573msgid "import from Poche completed. "
574msgstr "Import from Poche completed. "
575
576msgid "Unknown import provider."
577msgstr "Unknown import provider."
578
579msgid "Incomplete inc/poche/define.inc.php file, please define \""
580msgstr "Incomplete inc/poche/define.inc.php file, please define \""
581
582msgid "Could not find required \""
583msgstr "Could not find required \""
584
585msgid "Uh, there is a problem while generating feeds."
586msgstr "There is a problem generating feeds."
587
588msgid "Cache deleted."
589msgstr "Cache deleted."
590
591msgid "Oops, it seems you don't have PHP 5."
592msgstr "Oops, it seems you don't have PHP 5."
593
594msgid "Add user"
595msgstr "Add User"
596
597msgid "Add a new user :"
598msgstr "Add a new user:"
599
600msgid "Login for new user"
601msgstr "Login for new user:"
602
603msgid "Password for new user"
604msgstr "Password for new user:"
605
606msgid "Email for new user (not required)"
607msgstr "Email for new user (not required):"
608
609msgid "Send"
610msgstr "Send"
611
612msgid "Delete account"
613msgstr "Delete Account"
614
615msgid "You can delete your account by entering your password and validating."
616msgstr "You can delete your account by entering your password and validating."
617
618msgid "Be careful, data will be erased forever (that is a very long time)."
619msgstr "Be careful, data will be erased forever (that is a very long time)."
620
621msgid "Type here your password"
622msgstr "Enter your password"
623
624msgid "You are the only user, you cannot delete your own account."
625msgstr "You are the only user, you cannot delete your own account."
626
627msgid ""
628"To completely remove wallabag, delete the wallabag folder on your web server "
629"(and eventual databases)."
630msgstr ""
631"To completely remove wallabag, delete the wallabag folder on your web server "
632"(and eventual databases)."
633
634msgid "Enter your search here"
635msgstr "Enter your search here"
636
637msgid "Tag these results as"
638msgstr "Tag these results as"
639
640# ebook
641msgid "Fancy an E-Book ?"
642msgstr "Fancy an E-Book?"
643
644msgid "Click to get all your articles in one ebook :"
645msgstr "Click to get all your articles in one ebook :"
646
647msgid "Generate ePub file"
648msgstr "Generate ePub file"
649
650msgid "Generate Mobi file"
651msgstr "Generate Mobi file"
652
653msgid "Generate PDF file"
654msgstr "Generate PDF file"
655
656msgid ""
657"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
658"articles, depending on your server configuration."
659msgstr ""
660"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
661"articles, depending on your server configuration."
662
663msgid "Download the articles from this tag in an ePub file"
664msgstr "Download the articles from this tag in an ePub file"
665
666msgid "Download the articles from this tag in an Mobi file"
667msgstr "Download the articles from this tag in an Mobi file"
668
669msgid "Download the articles from this tag in an PDF file"
670msgstr "Download the articles from this tag in an PDF file"
671
672msgid "Download the articles from this search in an ePub"
673msgstr "Download the articles from this search in an ePub"
674
675msgid "Download the articles from this search in a Mobi file"
676msgstr "Download the articles from this search in a Mobi file"
677
678msgid "Download the articles from this search in a PDF file"
679msgstr "Download the articles from this search in a PDF file"
680
681msgid "Download the articles from this category in an ePub"
682msgstr "Download the articles from this category in an ePub"
683
684msgid "Download the articles from this category in a Mobi file"
685msgstr "Download the articles from this category in a Mobi file"
686
687msgid "Download the articles from this category in a PDF file"
688msgstr "Download the articles from this category in a PDF file"
689
690msgid "Download as ePub3"
691msgstr "Download as ePub3"
692
693msgid "Download as Mobi"
694msgstr "Download as Mobi"
695
696msgid "Download as PDF"
697msgstr "Download as PDF"
698
699msgid "All my articles on %s"
700msgstr "All my articles on %s"
701
702msgid "Allarticles"
703msgstr "Allarticles"
704
705msgid "Articles tagged %s"
706msgstr "Articles tagged %s"
707
708msgid "Tag %s"
709msgstr "Tag %s"
710
711msgid "Articles in category %s"
712msgstr "All articles in category %s"
713
714msgid "Category %s"
715msgstr "Category %s"
716
717msgid "Articles for search %s"
718msgstr "All articles for search %s"
719
720msgid "Search %s"
721msgstr "Search %s"
722
723msgid "wallabag articles book"
724msgstr "wallabag articles book"
725
726msgid "Some articles saved on my wallabag"
727msgstr "Some articles saved on my wallabag"
728
729msgid "Produced by wallabag with PHPePub"
730msgstr "Produced by wallabag with PHPePub"
731
732msgid ""
733"Please open <a href='https://github.com/wallabag/wallabag/issues'>an issue</"
734"a> if you have trouble with the display of this E-Book on your device."
735msgstr ""
736"Please open <a href='https://github.com/wallabag/wallabag/issues'>an issue</"
737"a> if you have trouble with the display of this E-Book on your device."
738
739msgid "Produced by wallabag with PHPMobi"
740msgstr "Produced by wallabag with PHPMobi"
741
742msgid "Mail function is disabled. You can't send emails from your server"
743msgstr "Mail function is disabled. You can't send emails from your server"
744
745msgid "You didn't set your kindle's email adress !"
746msgstr "You didn't set your kindle's email adress !"
747
748msgid "The email has been sent to your kindle !"
749msgstr "The email has been sent to your kindle !"
750
751msgid "Produced by wallabag with mPDF"
752msgstr "Produced by wallabag with mPDF"
753
754#~ msgid "poche it!"
755#~ msgstr "poche it!"
756
757#~ msgid "Updating poche"
758#~ msgstr "Updating poche"
759
760#~ msgid "create an issue"
761#~ msgstr "create an issue"
762
763#~ msgid "or"
764#~ msgstr "or"
765
766#~ msgid "contact us by mail"
767#~ msgstr "contact us by mail"
768
769#~ msgid "your poche version:"
770#~ msgstr "your poche version:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.mo
new file mode 100644
index 00000000..77dee070
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.po b/src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.po
new file mode 100644
index 00000000..579d1aca
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/en_US.utf8/LC_MESSAGES/en_US.utf8.po
@@ -0,0 +1,682 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: wallabag\n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-02-25 15:17+0300\n"
6"PO-Revision-Date: \n"
7"Last-Translator: Thomas Citharel <tcit@openmailbox.org>\n"
8"Language-Team: \n"
9"Language: en_US\n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.5.4\n"
14"X-Poedit-Basepath: .\n"
15
16msgid "wallabag, a read it later open source system"
17msgstr "wallabag, a read it later open source system"
18
19msgid "login failed: user doesn't exist"
20msgstr "Login failed: user doesn't exist"
21
22msgid "return home"
23msgstr "Return Home"
24
25msgid "config"
26msgstr "Config"
27
28msgid "Saving articles"
29msgstr "Saving articles"
30
31msgid "There are several ways to save an article:"
32msgstr "There are several ways to save an article:"
33
34msgid "read the documentation"
35msgstr "Read the documentation"
36
37msgid "download the extension"
38msgstr "Download the extension"
39
40msgid "Firefox Add-On"
41msgstr "Firefox Add-On"
42
43msgid "Chrome Extension"
44msgstr "Chrome Extension"
45
46msgid "via F-Droid"
47msgstr "via F-Droid"
48
49msgid " or "
50msgstr " or "
51
52msgid "via Google Play"
53msgstr "via Google Play"
54
55msgid "download the application"
56msgstr "Download the application"
57
58msgid "By filling this field"
59msgstr "By filling this field"
60
61msgid "bag it!"
62msgstr "bag it!"
63
64msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
65msgstr "Bookmarklet: Drag & drop this link to your bookmarks bar"
66
67msgid "Upgrading wallabag"
68msgstr "Upgrading wallabag"
69
70msgid "Installed version"
71msgstr "Installed version"
72
73msgid "Latest stable version"
74msgstr "Latest stable version"
75
76msgid "A more recent stable version is available."
77msgstr "A more recent stable version is available."
78
79msgid "You are up to date."
80msgstr "You are up to date."
81
82msgid "Latest dev version"
83msgstr "Latest dev version"
84
85msgid "A more recent development version is available."
86msgstr "A more recent development version is available."
87
88msgid "You can clear cache to check the latest release."
89msgstr ""
90"You can <a href=\"#cache\">clear the cache</a> to check for the latest "
91"release."
92
93msgid "Feeds"
94msgstr "Feeds"
95
96msgid ""
97"Your feed token is currently empty and must first be generated to enable "
98"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
99msgstr ""
100"Your feed token is currently empty and must first be generated to enable "
101"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
102
103msgid "Unread feed"
104msgstr "Unread feed"
105
106msgid "Favorites feed"
107msgstr "Favorites feed"
108
109msgid "Archive feed"
110msgstr "Archive feed"
111
112msgid "Your token:"
113msgstr "Your token:"
114
115msgid "Your user id:"
116msgstr "Your user ID:"
117
118msgid ""
119"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
120"</a>."
121msgstr "<a href='?feed&amp;action=generate'>Regenerate Token</a>"
122
123msgid "Change your theme"
124msgstr "Change Your Theme"
125
126msgid "Theme:"
127msgstr "Theme:"
128
129msgid "Update"
130msgstr "Update"
131
132msgid "Change your language"
133msgstr "Change Your Language"
134
135msgid "Language:"
136msgstr "Language:"
137
138msgid "Change your password"
139msgstr "Change Your Password"
140
141msgid "New password:"
142msgstr "New password:"
143
144msgid "Password"
145msgstr "Password"
146
147msgid "Repeat your new password:"
148msgstr "Repeat your new password:"
149
150msgid "Import"
151msgstr "Import"
152
153msgid ""
154"You can import your Pocket, Readability, Instapaper, Wallabag or any data in "
155"appropriate json or html format."
156msgstr ""
157"You can import your Pocket, Readability, Instapaper, wallabag or any file in "
158"appropriate JSON or HTML format."
159
160msgid ""
161"Please execute the import script locally as it can take a very long time."
162msgstr ""
163"Please execute the import script locally as it can take a very long time."
164
165msgid ""
166"Please select export file on your computer and press \"Import\" button "
167"below. Wallabag will parse your file, insert all URLs and start fetching of "
168"articles if required."
169msgstr ""
170"Please select export file on your computer and press &ldquo;Import&rdquo; "
171"button below. wallabag will parse your file, insert all URLs and start "
172"fetching of articles if required."
173
174msgid "You can click here to fetch content for articles with no content."
175msgstr "Fetch content for articles with no content"
176
177msgid "More info in the official documentation:"
178msgstr "More info in the official documentation:"
179
180msgid ""
181"(<a href=\"http://doc.wallabag.org/en/User_documentation/"
182"Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)"
183msgstr ""
184"(<a href=\"http://doc.wallabag.org/en/User_documentation/"
185"Save_your_first_article\" target=\"_blank\" title=\"Documentation\">?</a>)"
186
187msgid "Import from Pocket"
188msgstr "Import from Pocket"
189
190#, php-format
191msgid "(you must have a %s file on your server)"
192msgstr "(you must have a %s file on your server)"
193
194msgid "Import from Readability"
195msgstr "Import from Readability"
196
197msgid "Import from Instapaper"
198msgstr "Import from Instapaper"
199
200msgid "Import from wallabag"
201msgstr "Import from wallabag"
202
203msgid "Export your wallabag data"
204msgstr "Export your wallabag data"
205
206msgid "Click here"
207msgstr "Click here"
208
209msgid "to download your database."
210msgstr "to download your database."
211
212msgid "to export your wallabag data."
213msgstr "to export your wallabag data."
214
215msgid "Export JSON"
216msgstr "Export JSON"
217
218msgid "Cache"
219msgstr "Cache"
220
221msgid "to delete cache."
222msgstr "to delete cache."
223
224msgid "Delete Cache"
225msgstr "Delete Cache"
226
227msgid "You can enter multiple tags, separated by commas."
228msgstr "You can enter multiple tags, separated by commas."
229
230msgid "Add tags:"
231msgstr "Add tags:"
232
233msgid "no tags"
234msgstr "no tags"
235
236msgid "The tag has been applied successfully"
237msgstr "The tag has been applied successfully"
238
239msgid "interview"
240msgstr "interview"
241
242msgid "editorial"
243msgstr "editorial"
244
245msgid "video"
246msgstr "video"
247
248msgid "return to article"
249msgstr "Return to article"
250
251msgid "plop"
252msgstr "plop"
253
254msgid ""
255"You can <a href='wallabag_compatibility_test.php'>check your configuration "
256"here</a>."
257msgstr ""
258"You can <a href='wallabag_compatibility_test.php'>check your configuration "
259"here</a>."
260
261msgid "favoris"
262msgstr "Favorites"
263
264msgid "archive"
265msgstr "Archive"
266
267msgid "unread"
268msgstr "Unread"
269
270msgid "by date asc"
271msgstr "by date asc"
272
273msgid "by date"
274msgstr "by date"
275
276msgid "by date desc"
277msgstr "by date desc"
278
279msgid "by title asc"
280msgstr "by title asc"
281
282msgid "by title"
283msgstr "by title"
284
285msgid "by title desc"
286msgstr "by title desc"
287
288msgid "Tag"
289msgstr "Tag"
290
291msgid "No articles found."
292msgstr "No articles found."
293
294msgid "Toggle mark as read"
295msgstr "Toggle mark as read"
296
297msgid "toggle favorite"
298msgstr "Toggle favorite"
299
300msgid "delete"
301msgstr "Delete"
302
303msgid "original"
304msgstr "Original"
305
306msgid "estimated reading time:"
307msgstr "Estimated reading time:"
308
309msgid "mark all the entries as read"
310msgstr "Mark all the entries as read"
311
312msgid "results"
313msgstr "Results"
314
315msgid "installation"
316msgstr "Installation"
317
318msgid "install your wallabag"
319msgstr "Install your wallabag"
320
321msgid ""
322"wallabag is still not installed. Please fill the below form to install it. "
323"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
324"on wallabag website</a>."
325msgstr ""
326"wallabag is still not installed. Please fill the below form to install it. "
327"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
328"on wallabag website</a>."
329
330msgid "Login"
331msgstr "Login"
332
333msgid "Repeat your password"
334msgstr "Repeat your password"
335
336msgid "Install"
337msgstr "Install"
338
339msgid "login to your wallabag"
340msgstr "Login to your wallabag"
341
342msgid "Login to wallabag"
343msgstr "Login to wallabag"
344
345msgid "you are in demo mode, some features may be disabled."
346msgstr "You are in demo mode; some features may be disabled."
347
348msgid "Username"
349msgstr "Username"
350
351msgid "Stay signed in"
352msgstr "Stay signed in"
353
354msgid "(Do not check on public computers)"
355msgstr "(Do not check on public computers)"
356
357msgid "Sign in"
358msgstr "Sign in"
359
360msgid "favorites"
361msgstr "Favorites"
362
363msgid "estimated reading time :"
364msgstr "Estimated reading time:"
365
366msgid "Mark all the entries as read"
367msgstr "Mark all the entries as read"
368
369msgid "Return home"
370msgstr "Return home"
371
372msgid "Back to top"
373msgstr "Back to top"
374
375msgid "Mark as read"
376msgstr "Mark as read"
377
378msgid "Favorite"
379msgstr "Favorite"
380
381msgid "Toggle favorite"
382msgstr "Toggle favorite"
383
384msgid "Delete"
385msgstr "Delete"
386
387msgid "Tweet"
388msgstr "Tweet"
389
390msgid "Email"
391msgstr "Email"
392
393msgid "shaarli"
394msgstr "shaarli"
395
396msgid "flattr"
397msgstr "flattr"
398
399msgid "Does this article appear wrong?"
400msgstr "Does this article appear wrong?"
401
402msgid "tags:"
403msgstr "tags:"
404
405msgid "Edit tags"
406msgstr "Edit Tags"
407
408msgid "save link!"
409msgstr "Save Link"
410
411msgid "home"
412msgstr "Home"
413
414msgid "tags"
415msgstr "Tags"
416
417msgid "logout"
418msgstr "Logout"
419
420msgid "powered by"
421msgstr "Powered by"
422
423msgid "debug mode is on so cache is off."
424msgstr "Debug mode is on, so cache is off."
425
426msgid "your wallabag version:"
427msgstr "Your wallabag version:"
428
429msgid "storage:"
430msgstr "Storage:"
431
432msgid "save a link"
433msgstr "Save a Link"
434
435msgid "back to home"
436msgstr "Back to Home"
437
438msgid "toggle mark as read"
439msgstr "Toggle mark as read"
440
441msgid "tweet"
442msgstr "Tweet"
443
444msgid "email"
445msgstr "Email"
446
447msgid "this article appears wrong?"
448msgstr "This article appears wrong?"
449
450msgid "No link available here!"
451msgstr "No link available here"
452
453msgid "Poching a link"
454msgstr "bagging a link"
455
456msgid "by filling this field"
457msgstr "by filling this field"
458
459msgid "bookmarklet: drag & drop this link to your bookmarks bar"
460msgstr "Bookmarklet: Drag & drop this link to your bookmarks bar"
461
462msgid "Drag &amp; drop this link to your bookmarks bar:"
463msgstr "Drag &amp; drop this link to your bookmarks bar:"
464
465msgid "your version"
466msgstr "your version"
467
468msgid "latest stable version"
469msgstr "latest stable version"
470
471msgid "a more recent stable version is available."
472msgstr "A more recent stable version is available."
473
474msgid "you are up to date."
475msgstr "You are up to date."
476
477msgid "latest dev version"
478msgstr "latest dev version"
479
480msgid "a more recent development version is available."
481msgstr "A more recent development version is available."
482
483msgid "Please execute the import script locally, it can take a very long time."
484msgstr ""
485"Please execute the import script locally, it can take a very long time."
486
487msgid "More infos in the official doc:"
488msgstr "More information in the official doc:"
489
490msgid "import from Pocket"
491msgstr "Import from Pocket"
492
493msgid "import from Readability"
494msgstr "Import from Readability"
495
496msgid "import from Instapaper"
497msgstr "Import from Instapaper"
498
499msgid "Tags"
500msgstr "Tags"
501
502msgid "Untitled"
503msgstr "Untitled"
504
505msgid "the link has been added successfully"
506msgstr "The link has been added successfully."
507
508msgid "error during insertion : the link wasn't added"
509msgstr "Error during insertion: the link wasn't added."
510
511msgid "the link has been deleted successfully"
512msgstr "The link has been deleted successfully."
513
514msgid "the link wasn't deleted"
515msgstr "The link wasn't deleted."
516
517msgid "Article not found!"
518msgstr "Article not found."
519
520msgid "previous"
521msgstr "Previous"
522
523msgid "next"
524msgstr "Next"
525
526msgid "in demo mode, you can't update your password"
527msgstr "In demo mode, you can't update your password."
528
529msgid "your password has been updated"
530msgstr "Your password has been updated."
531
532msgid ""
533"the two fields have to be filled & the password must be the same in the two "
534"fields"
535msgstr ""
536"The two fields must be filled, and the password must be the same in both "
537"fields"
538
539msgid "still using the \""
540msgstr "Still using the \""
541
542msgid "that theme does not seem to be installed"
543msgstr "That theme does not seem to be installed."
544
545msgid "you have changed your theme preferences"
546msgstr "You have changed your theme preferences."
547
548msgid "that language does not seem to be installed"
549msgstr "That language does not seem to be installed."
550
551msgid "you have changed your language preferences"
552msgstr "You have changed your language preferences."
553
554msgid "login failed: you have to fill all fields"
555msgstr "Login failed: you have to fill all fields."
556
557msgid "welcome to your wallabag"
558msgstr "Welcome to your wallabag."
559
560msgid "login failed: bad login or password"
561msgstr "Login failed: bad login or password."
562
563msgid "import from instapaper completed"
564msgstr "Import from Instapaper completed."
565
566msgid "import from pocket completed"
567msgstr "Import from Pocket completed."
568
569msgid "import from Readability completed. "
570msgstr "Import from Readability completed."
571
572msgid "import from Poche completed. "
573msgstr "Import from Poche completed. "
574
575msgid "Unknown import provider."
576msgstr "Unknown import provider."
577
578msgid "Incomplete inc/poche/define.inc.php file, please define \""
579msgstr "Incomplete inc/poche/define.inc.php file, please define \""
580
581msgid "Could not find required \""
582msgstr "Could not find required \""
583
584msgid "Uh, there is a problem while generating feeds."
585msgstr "There is a problem generating feeds."
586
587msgid "Cache deleted."
588msgstr "Cache deleted."
589
590msgid "Oops, it seems you don't have PHP 5."
591msgstr "Oops, it seems you don't have PHP 5."
592
593msgid "Add user"
594msgstr "Add User"
595
596msgid "Add a new user :"
597msgstr "Add a new user:"
598
599msgid "Login for new user"
600msgstr "Login for new user:"
601
602msgid "Password for new user"
603msgstr "Password for new user:"
604
605msgid "Email for new user (not required)"
606msgstr "Email for new user (not required):"
607
608msgid "Send"
609msgstr "Send"
610
611msgid "Delete account"
612msgstr "Delete Account"
613
614msgid "You can delete your account by entering your password and validating."
615msgstr "You can delete your account by entering your password and validating."
616
617msgid "Be careful, data will be erased forever (that is a very long time)."
618msgstr "Be careful, data will be erased forever (that is a very long time)."
619
620msgid "Type here your password"
621msgstr "Enter your password"
622
623msgid "You are the only user, you cannot delete your own account."
624msgstr "You cannot delete your account because you are the only user."
625
626msgid ""
627"To completely remove wallabag, delete the wallabag folder on your web server "
628"(and eventual databases)."
629msgstr ""
630"To completely remove wallabag, delete the wallabag folder and database(s) "
631"from your web server."
632
633msgid "Enter your search here"
634msgstr "Enter your search here"
635
636msgid "Tag these results as"
637msgstr "Tag these results as"
638
639# ebook
640msgid "Fancy an E-Book ?"
641msgstr "Fancy an E-Book?"
642
643msgid ""
644"Click on <a href=\"./?epub&amp;method=all\" title=\"Generate ePub\">this "
645"link</a> to get all your articles in one ebook (ePub 3 format)."
646msgstr ""
647"Click on <a href=\"./?epub&amp;method=all\" title=\"Generate EPUB\">this "
648"link</a> to get all your articles in one ebook (EPUB 3 format)."
649
650msgid ""
651"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
652"articles, depending on your server configuration."
653msgstr ""
654"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
655"articles, depending on your server configuration."
656
657msgid "Download the articles from this tag in an epub"
658msgstr "Download the articles from this tag in an EPUB"
659
660msgid "Download the articles from this search in an epub"
661msgstr "Download the articles from this search in an EPUB"
662
663msgid "Download the articles from this category in an epub"
664msgstr "Download the articles from this category in an EPUB"
665
666#~ msgid "poche it!"
667#~ msgstr "poche it!"
668
669#~ msgid "Updating poche"
670#~ msgstr "Updating poche"
671
672#~ msgid "create an issue"
673#~ msgstr "create an issue"
674
675#~ msgid "or"
676#~ msgstr "or"
677
678#~ msgid "contact us by mail"
679#~ msgstr "contact us by mail"
680
681#~ msgid "your poche version:"
682#~ msgstr "your poche version:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo
new file mode 100644
index 00000000..f4309896
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po b/src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po
new file mode 100644
index 00000000..c08decfe
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/es_ES.utf8/LC_MESSAGES/es_ES.utf8.po
@@ -0,0 +1,563 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: \n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-02-25 15:16+0300\n"
6"PO-Revision-Date: \n"
7"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
8"Language-Team: \n"
9"Language: \n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.5.4\n"
14"X-Poedit-Language: Spanish\n"
15"X-Poedit-Basepath: .\n"
16"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
17
18msgid "wallabag, a read it later open source system"
19msgstr ""
20
21msgid "login failed: user doesn't exist"
22msgstr ""
23
24msgid "return home"
25msgstr ""
26
27msgid "config"
28msgstr "configuración"
29
30msgid "Saving articles"
31msgstr ""
32
33msgid "There are several ways to save an article:"
34msgstr ""
35
36msgid "read the documentation"
37msgstr "leer la documentación"
38
39msgid "download the extension"
40msgstr ""
41
42msgid "via F-Droid"
43msgstr ""
44
45msgid " or "
46msgstr ""
47
48msgid "via Google Play"
49msgstr ""
50
51msgid "download the application"
52msgstr ""
53
54#, fuzzy
55msgid "By filling this field"
56msgstr "rellenando este campo"
57
58msgid "bag it!"
59msgstr ""
60
61msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
62msgstr ""
63
64msgid "Upgrading wallabag"
65msgstr ""
66
67#, fuzzy
68msgid "Installed version"
69msgstr "ultima versión estable"
70
71#, fuzzy
72msgid "Latest stable version"
73msgstr "ultima versión estable"
74
75#, fuzzy
76msgid "A more recent stable version is available."
77msgstr "una versión estable más reciente está disponible."
78
79#, fuzzy
80msgid "You are up to date."
81msgstr "estás actualizado."
82
83#, fuzzy
84msgid "Latest dev version"
85msgstr "ultima versión de desarollo"
86
87#, fuzzy
88msgid "A more recent development version is available."
89msgstr "una versión de desarollo más reciente está disponible."
90
91msgid "Feeds"
92msgstr ""
93
94msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
95msgstr ""
96
97msgid "Unread feed"
98msgstr ""
99
100#, fuzzy
101msgid "Favorites feed"
102msgstr "preferidos"
103
104#, fuzzy
105msgid "Archive feed"
106msgstr "archivos"
107
108msgid "Your token:"
109msgstr ""
110
111msgid "Your user id:"
112msgstr ""
113
114msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
115msgstr ""
116
117#, fuzzy
118msgid "Change your theme"
119msgstr "Modificar tu contraseña"
120
121msgid "Theme:"
122msgstr ""
123
124msgid "Update"
125msgstr "Actualizar"
126
127#, fuzzy
128msgid "Change your language"
129msgstr "Modificar tu contraseña"
130
131msgid "Language:"
132msgstr ""
133
134msgid "Change your password"
135msgstr "Modificar tu contraseña"
136
137msgid "New password:"
138msgstr "Nueva contraseña :"
139
140msgid "Password"
141msgstr "Contraseña"
142
143msgid "Repeat your new password:"
144msgstr "Repetir la nueva contraseña :"
145
146msgid "Import"
147msgstr "Importar"
148
149#, fuzzy
150msgid "Please execute the import script locally as it can take a very long time."
151msgstr "Por favor, ejecute la importación en local, esto puede demorar un tiempo."
152
153#, fuzzy
154msgid "More info in the official documentation:"
155msgstr "Más información en la documentación oficial :"
156
157#, fuzzy
158msgid "Import from Pocket"
159msgstr "importación desde Pocket"
160
161#, php-format
162msgid "(you must have a %s file on your server)"
163msgstr ""
164
165#, fuzzy
166msgid "Import from Readability"
167msgstr "importación desde Readability"
168
169#, fuzzy
170msgid "Import from Instapaper"
171msgstr "importación desde Instapaper"
172
173#, fuzzy
174msgid "Import from wallabag"
175msgstr "importación desde Readability"
176
177#, fuzzy
178msgid "Export your wallabag data"
179msgstr "Exportar sus datos de poche"
180
181msgid "Click here"
182msgstr "Haga clic aquí"
183
184msgid "to download your database."
185msgstr ""
186
187#, fuzzy
188msgid "to export your wallabag data."
189msgstr "para exportar sus datos de poche."
190
191msgid "Cache"
192msgstr ""
193
194msgid "to delete cache."
195msgstr ""
196
197msgid "You can enter multiple tags, separated by commas."
198msgstr ""
199
200msgid "return to article"
201msgstr ""
202
203msgid "plop"
204msgstr "plop"
205
206msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
207msgstr ""
208
209msgid "favoris"
210msgstr "preferidos"
211
212msgid "archive"
213msgstr "archivos"
214
215msgid "unread"
216msgstr "sin leer"
217
218msgid "by date asc"
219msgstr "por fecha ascendiente"
220
221msgid "by date"
222msgstr "por fecha"
223
224msgid "by date desc"
225msgstr "por fecha descendiente"
226
227msgid "by title asc"
228msgstr "por titulo ascendiente"
229
230msgid "by title"
231msgstr "por título"
232
233msgid "by title desc"
234msgstr "por título descendiente"
235
236msgid "Tag"
237msgstr ""
238
239msgid "No articles found."
240msgstr ""
241
242#, fuzzy
243msgid "Toggle mark as read"
244msgstr "marcar como leído"
245
246msgid "toggle favorite"
247msgstr "preferido"
248
249msgid "delete"
250msgstr "eliminar"
251
252msgid "original"
253msgstr "original"
254
255msgid "estimated reading time:"
256msgstr ""
257
258msgid "mark all the entries as read"
259msgstr ""
260
261msgid "results"
262msgstr "resultados"
263
264msgid "installation"
265msgstr "instalación"
266
267#, fuzzy
268msgid "install your wallabag"
269msgstr "instala tu Poche"
270
271#, fuzzy
272msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
273msgstr "Poche todavia no està instalado. Por favor, completa los campos siguientes para instalarlo. No dudes de <a href='http://doc.inthepoche.com'>leer la documentación en el sitio de Poche</a>."
274
275msgid "Login"
276msgstr "Nombre de usuario"
277
278msgid "Repeat your password"
279msgstr "Repita su contraseña"
280
281msgid "Install"
282msgstr "Instalar"
283
284#, fuzzy
285msgid "login to your wallabag"
286msgstr "conectarse a tu Poche"
287
288msgid "Login to wallabag"
289msgstr ""
290
291msgid "you are in demo mode, some features may be disabled."
292msgstr "este es el modo de demostración, algunas funcionalidades pueden estar desactivadas."
293
294msgid "Username"
295msgstr ""
296
297msgid "Stay signed in"
298msgstr "Seguir conectado"
299
300msgid "(Do not check on public computers)"
301msgstr "(no marcar en un ordenador público)"
302
303msgid "Sign in"
304msgstr "Iniciar sesión"
305
306msgid "favorites"
307msgstr "preferidos"
308
309msgid "estimated reading time :"
310msgstr ""
311
312msgid "Mark all the entries as read"
313msgstr ""
314
315msgid "Return home"
316msgstr ""
317
318#, fuzzy
319msgid "Back to top"
320msgstr "volver arriba"
321
322#, fuzzy
323msgid "Mark as read"
324msgstr "marcar como leído"
325
326#, fuzzy
327msgid "Favorite"
328msgstr "preferidos"
329
330#, fuzzy
331msgid "Toggle favorite"
332msgstr "preferido"
333
334#, fuzzy
335msgid "Delete"
336msgstr "eliminar"
337
338#, fuzzy
339msgid "Tweet"
340msgstr "tweetear"
341
342#, fuzzy
343msgid "Email"
344msgstr "enviar por mail"
345
346msgid "shaarli"
347msgstr "shaarli"
348
349msgid "flattr"
350msgstr "flattr"
351
352#, fuzzy
353msgid "Does this article appear wrong?"
354msgstr "este articulo no se ve bien?"
355
356msgid "tags:"
357msgstr ""
358
359msgid "Edit tags"
360msgstr ""
361
362msgid "save link!"
363msgstr ""
364
365msgid "home"
366msgstr "inicio"
367
368msgid "tags"
369msgstr ""
370
371msgid "logout"
372msgstr "cerrar sesión"
373
374msgid "powered by"
375msgstr "hecho con"
376
377msgid "debug mode is on so cache is off."
378msgstr "el modo de depuración está activado, así que la cache está desactivada."
379
380#, fuzzy
381msgid "your wallabag version:"
382msgstr "su versión"
383
384msgid "storage:"
385msgstr "almacenamiento:"
386
387msgid "save a link"
388msgstr ""
389
390msgid "back to home"
391msgstr "volver a la página de inicio"
392
393msgid "toggle mark as read"
394msgstr "marcar como leído"
395
396msgid "tweet"
397msgstr "tweetear"
398
399msgid "email"
400msgstr "enviar por mail"
401
402msgid "this article appears wrong?"
403msgstr "este articulo no se ve bien?"
404
405msgid "No link available here!"
406msgstr "¡No hay ningún enlace disponible por aquí!"
407
408msgid "Poching a link"
409msgstr "Pochear un enlace"
410
411msgid "by filling this field"
412msgstr "rellenando este campo"
413
414msgid "bookmarklet: drag & drop this link to your bookmarks bar"
415msgstr ""
416
417msgid "your version"
418msgstr "su versión"
419
420msgid "latest stable version"
421msgstr "ultima versión estable"
422
423msgid "a more recent stable version is available."
424msgstr "una versión estable más reciente está disponible."
425
426msgid "you are up to date."
427msgstr "estás actualizado."
428
429msgid "latest dev version"
430msgstr "ultima versión de desarollo"
431
432msgid "a more recent development version is available."
433msgstr "una versión de desarollo más reciente está disponible."
434
435msgid "Please execute the import script locally, it can take a very long time."
436msgstr "Por favor, ejecute la importación en local, esto puede demorar un tiempo."
437
438#, fuzzy
439msgid "More infos in the official doc:"
440msgstr "Más información en la documentación oficial :"
441
442msgid "import from Pocket"
443msgstr "importación desde Pocket"
444
445msgid "import from Readability"
446msgstr "importación desde Readability"
447
448msgid "import from Instapaper"
449msgstr "importación desde Instapaper"
450
451msgid "Tags"
452msgstr ""
453
454#, fuzzy
455msgid "Untitled"
456msgstr "por título"
457
458msgid "the link has been added successfully"
459msgstr ""
460
461msgid "error during insertion : the link wasn't added"
462msgstr ""
463
464msgid "the link has been deleted successfully"
465msgstr ""
466
467msgid "the link wasn't deleted"
468msgstr ""
469
470msgid "Article not found!"
471msgstr ""
472
473msgid "previous"
474msgstr ""
475
476msgid "next"
477msgstr ""
478
479msgid "in demo mode, you can't update your password"
480msgstr ""
481
482msgid "your password has been updated"
483msgstr ""
484
485msgid "the two fields have to be filled & the password must be the same in the two fields"
486msgstr ""
487
488msgid "still using the \""
489msgstr ""
490
491msgid "that theme does not seem to be installed"
492msgstr ""
493
494msgid "you have changed your theme preferences"
495msgstr ""
496
497msgid "that language does not seem to be installed"
498msgstr ""
499
500msgid "you have changed your language preferences"
501msgstr ""
502
503msgid "login failed: you have to fill all fields"
504msgstr ""
505
506msgid "welcome to your wallabag"
507msgstr ""
508
509msgid "login failed: bad login or password"
510msgstr ""
511
512#, fuzzy
513msgid "import from instapaper completed"
514msgstr "importación desde Instapaper"
515
516#, fuzzy
517msgid "import from pocket completed"
518msgstr "importación desde Pocket"
519
520#, fuzzy
521msgid "import from Readability completed. "
522msgstr "importación desde Readability"
523
524#, fuzzy
525msgid "import from Poche completed. "
526msgstr "importación desde Pocket"
527
528msgid "Unknown import provider."
529msgstr ""
530
531msgid "Incomplete inc/poche/define.inc.php file, please define \""
532msgstr ""
533
534msgid "Could not find required \""
535msgstr ""
536
537msgid "Uh, there is a problem while generating feeds."
538msgstr ""
539
540#, fuzzy
541msgid "Cache deleted."
542msgstr "eliminar"
543
544msgid "Oops, it seems you don't have PHP 5."
545msgstr ""
546
547#~ msgid "poche it!"
548#~ msgstr "pochéalo!"
549
550#~ msgid "Updating poche"
551#~ msgstr "Actualizar"
552
553#~ msgid "create an issue"
554#~ msgstr "crear un ticket"
555
556#~ msgid "or"
557#~ msgstr "o"
558
559#~ msgid "contact us by mail"
560#~ msgstr "contactarnos por mail"
561
562#~ msgid "your poche version:"
563#~ msgstr "tu versión de Poche:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.mo
new file mode 100644
index 00000000..be6ebc57
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.po b/src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.po
new file mode 100644
index 00000000..f24814d5
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/fa_IR.utf8/LC_MESSAGES/fa_IR.utf8.po
@@ -0,0 +1,563 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: \n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-02-25 15:15+0300\n"
6"PO-Revision-Date: \n"
7"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
8"Language-Team: \n"
9"Language: \n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.5.4\n"
14"X-Poedit-Language: Persian\n"
15"X-Poedit-Basepath: .\n"
16"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
17
18msgid "wallabag, a read it later open source system"
19msgstr ""
20
21msgid "login failed: user doesn't exist"
22msgstr ""
23
24msgid "return home"
25msgstr ""
26
27msgid "config"
28msgstr "تنظیمات"
29
30msgid "Saving articles"
31msgstr ""
32
33msgid "There are several ways to save an article:"
34msgstr ""
35
36msgid "read the documentation"
37msgstr "راهنما را بخوانید"
38
39msgid "download the extension"
40msgstr ""
41
42msgid "via F-Droid"
43msgstr ""
44
45msgid " or "
46msgstr ""
47
48msgid "via Google Play"
49msgstr ""
50
51msgid "download the application"
52msgstr ""
53
54#, fuzzy
55msgid "By filling this field"
56msgstr "با پرکردن این بخش"
57
58msgid "bag it!"
59msgstr ""
60
61msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
62msgstr ""
63
64msgid "Upgrading wallabag"
65msgstr ""
66
67#, fuzzy
68msgid "Installed version"
69msgstr "آخرین نسخهٔ پایدار"
70
71#, fuzzy
72msgid "Latest stable version"
73msgstr "آخرین نسخهٔ پایدار"
74
75#, fuzzy
76msgid "A more recent stable version is available."
77msgstr "نسخهٔ پایدار تازه‌ای منتشر شده است."
78
79#, fuzzy
80msgid "You are up to date."
81msgstr "شما به‌روز هستید."
82
83#, fuzzy
84msgid "Latest dev version"
85msgstr "آخرین نسخهٔ آزمایشی"
86
87#, fuzzy
88msgid "A more recent development version is available."
89msgstr "نسخهٔ آزمایشی تازه‌ای منتشر شده است."
90
91msgid "Feeds"
92msgstr ""
93
94msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
95msgstr ""
96
97msgid "Unread feed"
98msgstr ""
99
100#, fuzzy
101msgid "Favorites feed"
102msgstr "بهترین‌ها"
103
104#, fuzzy
105msgid "Archive feed"
106msgstr "بایگانی"
107
108msgid "Your token:"
109msgstr ""
110
111msgid "Your user id:"
112msgstr ""
113
114msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
115msgstr ""
116
117#, fuzzy
118msgid "Change your theme"
119msgstr "گذرواژهٔ خود را تغییر دهید"
120
121msgid "Theme:"
122msgstr ""
123
124msgid "Update"
125msgstr "به‌روزرسانی"
126
127#, fuzzy
128msgid "Change your language"
129msgstr "گذرواژهٔ خود را تغییر دهید"
130
131msgid "Language:"
132msgstr ""
133
134msgid "Change your password"
135msgstr "گذرواژهٔ خود را تغییر دهید"
136
137msgid "New password:"
138msgstr "گذرواژهٔ تازه:"
139
140msgid "Password"
141msgstr "گذرواژه"
142
143msgid "Repeat your new password:"
144msgstr "گذرواژهٔ تازه را دوباره وارد کنید"
145
146msgid "Import"
147msgstr "درون‌ریزی"
148
149#, fuzzy
150msgid "Please execute the import script locally as it can take a very long time."
151msgstr "لطفاً برنامهٔ درون‌ریزی را به‌طور محلی اجرا کنید، شاید خیلی طول بکشد."
152
153#, fuzzy
154msgid "More info in the official documentation:"
155msgstr "اطلاعات بیشتر در راهنمای رسمی:"
156
157#, fuzzy
158msgid "Import from Pocket"
159msgstr "درون‌ریزی از Pocket"
160
161#, php-format
162msgid "(you must have a %s file on your server)"
163msgstr ""
164
165#, fuzzy
166msgid "Import from Readability"
167msgstr "درون‌ریزی از Readability"
168
169#, fuzzy
170msgid "Import from Instapaper"
171msgstr "درون‌ریزی از Instapaper"
172
173#, fuzzy
174msgid "Import from wallabag"
175msgstr "درون‌ریزی از Readability"
176
177#, fuzzy
178msgid "Export your wallabag data"
179msgstr "داده‌های poche خود را برون‌بری کنید"
180
181msgid "Click here"
182msgstr "اینجا را کلیک کنید"
183
184msgid "to download your database."
185msgstr ""
186
187#, fuzzy
188msgid "to export your wallabag data."
189msgstr "برای برون‌بری داده‌های poche شما"
190
191msgid "Cache"
192msgstr ""
193
194msgid "to delete cache."
195msgstr ""
196
197msgid "You can enter multiple tags, separated by commas."
198msgstr ""
199
200msgid "return to article"
201msgstr ""
202
203msgid "plop"
204msgstr "plop"
205
206msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
207msgstr ""
208
209msgid "favoris"
210msgstr "بهترین‌ها"
211
212msgid "archive"
213msgstr "بایگانی"
214
215msgid "unread"
216msgstr "خوانده‌نشده"
217
218msgid "by date asc"
219msgstr "قدیمی‌ترها بالا"
220
221msgid "by date"
222msgstr "با تاریخ"
223
224msgid "by date desc"
225msgstr "تازه‌ترها بالا"
226
227msgid "by title asc"
228msgstr "با عنوان (الفبایی)"
229
230msgid "by title"
231msgstr "با عنوان"
232
233msgid "by title desc"
234msgstr "با عنوان (الفبایی معکوس)"
235
236msgid "Tag"
237msgstr ""
238
239msgid "No articles found."
240msgstr ""
241
242#, fuzzy
243msgid "Toggle mark as read"
244msgstr "خوانده‌شده/خوانده‌نشده"
245
246msgid "toggle favorite"
247msgstr "جزء بهترین‌ها هست/نیست"
248
249msgid "delete"
250msgstr "پاک‌کردن"
251
252msgid "original"
253msgstr "اصلی"
254
255msgid "estimated reading time:"
256msgstr ""
257
258msgid "mark all the entries as read"
259msgstr ""
260
261msgid "results"
262msgstr "نتایج"
263
264msgid "installation"
265msgstr "نصب"
266
267#, fuzzy
268msgid "install your wallabag"
269msgstr "poche خود را نصب کنید"
270
271#, fuzzy
272msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
273msgstr "poche هنوز نصب نیست. برای نصب لطفاً فرم زیر را پر کنید. خواندن <a href='http://doc.inthepoche.com'>راهنما در وبگاه poche</a> را از یاد نبرید."
274
275msgid "Login"
276msgstr "ورود"
277
278msgid "Repeat your password"
279msgstr "گذرواژه را دوباره وارد کنید"
280
281msgid "Install"
282msgstr "نصب"
283
284#, fuzzy
285msgid "login to your wallabag"
286msgstr "به poche خود وارد شوید"
287
288msgid "Login to wallabag"
289msgstr ""
290
291msgid "you are in demo mode, some features may be disabled."
292msgstr "این تنها نسخهٔ نمایشی است، برخی از ویژگی‌ها کار نمی‌کنند."
293
294msgid "Username"
295msgstr ""
296
297msgid "Stay signed in"
298msgstr "مرا به خاطر بسپار"
299
300msgid "(Do not check on public computers)"
301msgstr "(روی رایانه‌های عمومی این کار را نکنید)"
302
303msgid "Sign in"
304msgstr "ورود"
305
306msgid "favorites"
307msgstr "بهترین‌ها"
308
309msgid "estimated reading time :"
310msgstr ""
311
312msgid "Mark all the entries as read"
313msgstr ""
314
315msgid "Return home"
316msgstr ""
317
318#, fuzzy
319msgid "Back to top"
320msgstr "بازگشت به بالای صفحه"
321
322#, fuzzy
323msgid "Mark as read"
324msgstr "خوانده‌شده/خوانده‌نشده"
325
326#, fuzzy
327msgid "Favorite"
328msgstr "بهترین‌ها"
329
330#, fuzzy
331msgid "Toggle favorite"
332msgstr "جزء بهترین‌ها هست/نیست"
333
334#, fuzzy
335msgid "Delete"
336msgstr "پاک‌کردن"
337
338#, fuzzy
339msgid "Tweet"
340msgstr "توییت"
341
342#, fuzzy
343msgid "Email"
344msgstr "ایمیل"
345
346msgid "shaarli"
347msgstr "shaarli"
348
349msgid "flattr"
350msgstr "flattr"
351
352#, fuzzy
353msgid "Does this article appear wrong?"
354msgstr "این مطلب اشتباه نمایش داده شده؟"
355
356msgid "tags:"
357msgstr ""
358
359msgid "Edit tags"
360msgstr ""
361
362msgid "save link!"
363msgstr ""
364
365msgid "home"
366msgstr "خانه"
367
368msgid "tags"
369msgstr ""
370
371msgid "logout"
372msgstr "بیرون رفتن"
373
374msgid "powered by"
375msgstr "نیروگرفته از"
376
377msgid "debug mode is on so cache is off."
378msgstr "حالت عیب‌یابی فعال است، پس کاشه خاموش است."
379
380#, fuzzy
381msgid "your wallabag version:"
382msgstr "نسخهٔ شما"
383
384msgid "storage:"
385msgstr "ذخیره‌سازی:"
386
387msgid "save a link"
388msgstr ""
389
390msgid "back to home"
391msgstr "بازگشت به خانه"
392
393msgid "toggle mark as read"
394msgstr "خوانده‌شده/خوانده‌نشده"
395
396msgid "tweet"
397msgstr "توییت"
398
399msgid "email"
400msgstr "ایمیل"
401
402msgid "this article appears wrong?"
403msgstr "این مطلب اشتباه نمایش داده شده؟"
404
405msgid "No link available here!"
406msgstr "اینجا پیوندی موجود نیست!"
407
408msgid "Poching a link"
409msgstr "پیوندی را poche کنید"
410
411msgid "by filling this field"
412msgstr "با پرکردن این بخش"
413
414msgid "bookmarklet: drag & drop this link to your bookmarks bar"
415msgstr ""
416
417msgid "your version"
418msgstr "نسخهٔ شما"
419
420msgid "latest stable version"
421msgstr "آخرین نسخهٔ پایدار"
422
423msgid "a more recent stable version is available."
424msgstr "نسخهٔ پایدار تازه‌ای منتشر شده است."
425
426msgid "you are up to date."
427msgstr "شما به‌روز هستید."
428
429msgid "latest dev version"
430msgstr "آخرین نسخهٔ آزمایشی"
431
432msgid "a more recent development version is available."
433msgstr "نسخهٔ آزمایشی تازه‌ای منتشر شده است."
434
435msgid "Please execute the import script locally, it can take a very long time."
436msgstr "لطفاً برنامهٔ درون‌ریزی را به‌طور محلی اجرا کنید، شاید خیلی طول بکشد."
437
438#, fuzzy
439msgid "More infos in the official doc:"
440msgstr "اطلاعات بیشتر در راهنمای رسمی:"
441
442msgid "import from Pocket"
443msgstr "درون‌ریزی از Pocket"
444
445msgid "import from Readability"
446msgstr "درون‌ریزی از Readability"
447
448msgid "import from Instapaper"
449msgstr "درون‌ریزی از Instapaper"
450
451msgid "Tags"
452msgstr ""
453
454#, fuzzy
455msgid "Untitled"
456msgstr "با عنوان"
457
458msgid "the link has been added successfully"
459msgstr ""
460
461msgid "error during insertion : the link wasn't added"
462msgstr ""
463
464msgid "the link has been deleted successfully"
465msgstr ""
466
467msgid "the link wasn't deleted"
468msgstr ""
469
470msgid "Article not found!"
471msgstr ""
472
473msgid "previous"
474msgstr ""
475
476msgid "next"
477msgstr ""
478
479msgid "in demo mode, you can't update your password"
480msgstr ""
481
482msgid "your password has been updated"
483msgstr ""
484
485msgid "the two fields have to be filled & the password must be the same in the two fields"
486msgstr ""
487
488msgid "still using the \""
489msgstr ""
490
491msgid "that theme does not seem to be installed"
492msgstr ""
493
494msgid "you have changed your theme preferences"
495msgstr ""
496
497msgid "that language does not seem to be installed"
498msgstr ""
499
500msgid "you have changed your language preferences"
501msgstr ""
502
503msgid "login failed: you have to fill all fields"
504msgstr ""
505
506msgid "welcome to your wallabag"
507msgstr ""
508
509msgid "login failed: bad login or password"
510msgstr ""
511
512#, fuzzy
513msgid "import from instapaper completed"
514msgstr "درون‌ریزی از Instapaper"
515
516#, fuzzy
517msgid "import from pocket completed"
518msgstr "درون‌ریزی از Pocket"
519
520#, fuzzy
521msgid "import from Readability completed. "
522msgstr "درون‌ریزی از Readability"
523
524#, fuzzy
525msgid "import from Poche completed. "
526msgstr "درون‌ریزی از Pocket"
527
528msgid "Unknown import provider."
529msgstr ""
530
531msgid "Incomplete inc/poche/define.inc.php file, please define \""
532msgstr ""
533
534msgid "Could not find required \""
535msgstr ""
536
537msgid "Uh, there is a problem while generating feeds."
538msgstr ""
539
540#, fuzzy
541msgid "Cache deleted."
542msgstr "پاک‌کردن"
543
544msgid "Oops, it seems you don't have PHP 5."
545msgstr ""
546
547#~ msgid "poche it!"
548#~ msgstr "poche کنید!"
549
550#~ msgid "Updating poche"
551#~ msgstr "به‌روزرسانی poche"
552
553#~ msgid "create an issue"
554#~ msgstr "یک درخواست رفع‌مشکل بنویسید"
555
556#~ msgid "or"
557#~ msgstr "یا"
558
559#~ msgid "contact us by mail"
560#~ msgstr "به ما ایمیل بزنید"
561
562#~ msgid "your poche version:"
563#~ msgstr "نسخهٔ poche شما:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo
new file mode 100644
index 00000000..83f397a0
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po b/src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
new file mode 100644
index 00000000..fef31208
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/fr_FR.utf8/LC_MESSAGES/fr_FR.utf8.po
@@ -0,0 +1,804 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: wallabag 1.7.2\n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-07-26 20:09+0100\n"
6"PO-Revision-Date: \n"
7"Last-Translator: Thomas Citharel <tcit@openmailbox.org>\n"
8"Language-Team: \n"
9"Language: fr_FR\n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
14"X-Poedit-SourceCharset: UTF-8\n"
15"X-Generator: Poedit 1.5.4\n"
16"Plural-Forms: nplurals=2; plural=(n != 1);\n"
17
18msgid "wallabag, a read it later open source system"
19msgstr "wallabag, un système open source de lecture différé"
20
21msgid "login failed: user doesn't exist"
22msgstr "échec de l'identification : cet utilisateur n'existe pas"
23
24msgid "save link!"
25msgstr "enregistrer le lien !"
26
27msgid "plop"
28msgstr "plop"
29
30msgid "powered by"
31msgstr "propulsé par"
32
33msgid "debug mode is on so cache is off."
34msgstr "le mode de debug est actif, le cache est donc désactivé."
35
36msgid "your wallabag version:"
37msgstr "votre version de wallabag :"
38
39msgid "storage:"
40msgstr "stockage :"
41
42msgid "login to your wallabag"
43msgstr "se connecter à votre wallabag"
44
45msgid "Login to wallabag"
46msgstr "Se connecter à wallabag"
47
48msgid "you are in demo mode, some features may be disabled."
49msgstr ""
50"vous êtes en mode démo, certaines fonctionnalités peuvent être désactivées."
51
52msgid "Username"
53msgstr "Nom d'utilisateur"
54
55msgid "Password"
56msgstr "Mot de passe"
57
58msgid "Stay signed in"
59msgstr "Rester connecté"
60
61msgid "(Do not check on public computers)"
62msgstr "(Ne pas cocher sur un ordinateur public)"
63
64msgid "Sign in"
65msgstr "Se connecter"
66
67msgid "back to home"
68msgstr "retour à l'accueil"
69
70msgid "favorites"
71msgstr "favoris"
72
73msgid "archive"
74msgstr "archive"
75
76msgid "unread"
77msgstr "non lus"
78
79msgid "Tag"
80msgstr "Tag"
81
82msgid "No articles found."
83msgstr "Aucun article trouvé."
84
85msgid "estimated reading time:"
86msgstr "temps de lecture estimé :"
87
88msgid "estimated reading time :"
89msgstr "temps de lecture estimé :"
90
91msgid "Toggle mark as read"
92msgstr "Marquer comme lu / non lu"
93
94msgid "toggle favorite"
95msgstr "marquer / enlever comme favori"
96
97msgid "delete"
98msgstr "supprimer"
99
100msgid "original"
101msgstr "original"
102
103msgid "Mark all the entries as read"
104msgstr "Marquer tous les articles comme lus"
105
106msgid "results"
107msgstr "résultats"
108
109msgid " found for « "
110msgstr "trouvé pour « "
111
112msgid "Only one result found for "
113msgstr "Seulement un résultat trouvé pour "
114
115msgid "config"
116msgstr "configuration"
117
118msgid "Saving articles"
119msgstr "Sauvegarde des articles"
120
121msgid "There are several ways to save an article:"
122msgstr "Il y a plusieurs façons d'enregistrer un article :"
123
124msgid "read the documentation"
125msgstr "lisez la documentation"
126
127msgid "download the extension"
128msgstr "téléchargez l'extension"
129
130msgid "via F-Droid"
131msgstr "via F-Droid"
132
133msgid " or "
134msgstr " ou "
135
136msgid "via Google Play"
137msgstr "via Google PlayStore"
138
139msgid "download the application"
140msgstr "téléchargez l'application"
141
142msgid "By filling this field"
143msgstr "En remplissant ce champ"
144
145msgid "bag it!"
146msgstr "bag it !"
147
148msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
149msgstr "Bookmarklet : glissez-déposez ce lien dans votre barre de favoris"
150
151msgid "Upgrading wallabag"
152msgstr "Mise à jour de wallabag"
153
154msgid "Installed version"
155msgstr "Version installée"
156
157msgid "Latest stable version"
158msgstr "Dernière version stable"
159
160msgid "A more recent stable version is available."
161msgstr "Une version stable plus récente est disponible."
162
163msgid "You are up to date."
164msgstr "Vous êtes à jour."
165
166msgid "Last check:"
167msgstr "Dernière vérification: "
168
169msgid "Latest dev version"
170msgstr "Dernière version de développement"
171
172msgid "A more recent development version is available."
173msgstr "Une version de développement plus récente est disponible."
174
175msgid "You can clear cache to check the latest release."
176msgstr ""
177"Vous pouvez vider le cache pour vérifier que vous avez la dernière version."
178
179msgid "Feeds"
180msgstr "Flux"
181
182msgid ""
183"Your feed token is currently empty and must first be generated to enable "
184"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
185msgstr ""
186"Votre jeton de flux est actuellement vide et doit d'abord être généré pour "
187"activer les flux. Cliquez <a href='?feed&amp;action=generate'>ici</a> pour "
188"le générer."
189
190msgid "Unread feed"
191msgstr "Flux des non lus"
192
193msgid "Favorites feed"
194msgstr "Flux des favoris"
195
196msgid "Archive feed"
197msgstr "Flux des archives"
198
199msgid "Your token:"
200msgstr "Votre jeton :"
201
202msgid "Your user id:"
203msgstr "Votre ID utilisateur :"
204
205msgid ""
206"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
207"</a>."
208msgstr ""
209"Vous pouvez regénérer votre jeton : <a href='?feed&amp;"
210"action=generate'>génération !</a>."
211
212msgid "Change your theme"
213msgstr "Changer votre thème"
214
215msgid "Theme:"
216msgstr "Thème :"
217
218msgid "Update"
219msgstr "Mettre à jour"
220
221msgid "Change your language"
222msgstr "Changer votre langue"
223
224msgid "Language:"
225msgstr "Langue :"
226
227msgid "Change your password"
228msgstr "Modifier votre mot de passe"
229
230msgid "New password:"
231msgstr "Nouveau mot de passe :"
232
233msgid "Repeat your new password:"
234msgstr "Répétez votre nouveau mot de passe :"
235
236msgid "Import"
237msgstr "Importer"
238
239msgid ""
240"You can import your Pocket, Readability, Instapaper, Wallabag or any data in "
241"appropriate json or html format."
242msgstr ""
243"Vous pouvez importer depuis Pocket, Readability, Instapaper, wallabag, ou "
244"n'importe quel fichier au format JSON ou HTML approprié."
245
246msgid ""
247"Please select export file on your computer and press \"Import\" button below."
248"<br>Wallabag will parse your file, insert all URLs and start fetching of "
249"articles if required.<br>Fetching process is controlled by two constants in "
250"your config file: IMPORT_LIMIT (how many articles are fetched at once) and "
251"IMPORT_DELAY (delay between fetch of next batch of articles)."
252msgstr ""
253"Sélectionnez le fichier à importer sur votre disque dur, et pressez la "
254"bouton « Importer » ci-dessous.<br />wallabag analysera votre fichier, "
255"ajoutera toutes les URL trouvées et commencera à télécharger les contenus si "
256"nécessaire.<br />Le processus de téléchargement est contrôlé par deux "
257"constantes dans votre fichier de configuration:<wbr /><code>IMPORT_LIMIT</"
258"code> (nombre d'éléments téléchargés à la fois) et <code>IMPORT_DELAY</code> "
259"(le délai d'attente entre deux séquences de téléchargement)."
260
261msgid "File:"
262msgstr "Fichier : "
263
264msgid "You can click here to fetch content for articles with no content."
265msgstr ""
266"Vous pouvez cliquer ici pour télécharger le contenu des articles vides."
267
268msgid "Export your wallabag data"
269msgstr "Exporter vos données de wallabag"
270
271msgid "Click here"
272msgstr "Cliquez ici"
273
274msgid "to download your database."
275msgstr "pour télécharger votre base de données."
276
277msgid "to export your wallabag data."
278msgstr "pour exporter vos données de wallabag."
279
280msgid "Cache"
281msgstr "Cache"
282
283msgid "to delete cache."
284msgstr "pour effacer le cache."
285
286msgid "Add user"
287msgstr "Ajouter un utilisateur"
288
289msgid "Add a new user :"
290msgstr "Ajouter un nouvel utilisateur : "
291
292msgid "Login for new user"
293msgstr "Identifiant du nouvel utilisateur"
294
295msgid "Login"
296msgstr "Nom d'utilisateur"
297
298msgid "Password for new user"
299msgstr "Mot de passe du nouvel utilisateur"
300
301msgid "Email for new user (not required)"
302msgstr "E-mail pour le nouvel utilisateur (facultatif)"
303
304msgid "Send"
305msgstr "Envoyer"
306
307msgid "Delete account"
308msgstr "Supprimer le compte"
309
310msgid "You can delete your account by entering your password and validating."
311msgstr ""
312"Vous pouvez supprimer votre compte en entrant votre mot de passe et en "
313"validant."
314
315msgid "Be careful, data will be erased forever (that is a very long time)."
316msgstr "Attention, les données seront perdues pour toujours."
317
318msgid "Type here your password"
319msgstr "Entrez votre mot de passe ici"
320
321msgid "You are the only user, you cannot delete your own account."
322msgstr ""
323"Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre compte."
324
325msgid ""
326"To completely remove wallabag, delete the wallabag folder on your web server "
327"(and eventual databases)."
328msgstr ""
329"Pour désinstaller complètement wallabag, supprimez le répertoire "
330"<code>wallabag</code> de votre serveur Web (ainsi que les bases de données "
331"éventuelles)."
332
333msgid "Save a link"
334msgstr "Ajouter un lien"
335
336msgid "Return home"
337msgstr "Retour accueil"
338
339msgid "Back to top"
340msgstr "Haut de page"
341
342msgid "Mark as read"
343msgstr "Marquer comme lu"
344
345msgid "Favorite"
346msgstr "Favoris"
347
348msgid "Toggle favorite"
349msgstr "Marquer / enlever comme favori"
350
351msgid "Delete"
352msgstr "Effacer"
353
354msgid "Tweet"
355msgstr "Tweet"
356
357msgid "Email"
358msgstr "E-mail"
359
360msgid "shaarli"
361msgstr "Shaarli"
362
363msgid "flattr"
364msgstr "Flattr"
365
366msgid "Print"
367msgstr "Imprimer"
368
369msgid "Does this article appear wrong?"
370msgstr "Cet article s'affiche mal ?"
371
372msgid "tags:"
373msgstr "tags :"
374
375msgid "Add tags:"
376msgstr "Ajouter des tags :"
377
378msgid "no tags"
379msgstr "pas de tags"
380
381msgid "The tag has been applied successfully"
382msgstr "Le tag a été appliqué avec succès"
383
384msgid "interview"
385msgstr "interview"
386
387msgid "editorial"
388msgstr "éditorial"
389
390msgid "video"
391msgstr "vidéo"
392
393msgid "Edit tags"
394msgstr "Modifier les tags"
395
396msgid "favoris"
397msgstr "favoris"
398
399msgid "mark all the entries as read"
400msgstr "marquer tous les articles comme lus"
401
402msgid "toggle view mode"
403msgstr "changer de mode de visualisation"
404
405msgid "return home"
406msgstr "retour à l'accueil"
407
408msgid "Poching a link"
409msgstr "Enregistrer un lien"
410
411msgid "by filling this field"
412msgstr "en remplissant ce champ"
413
414msgid "bookmarklet: drag & drop this link to your bookmarks bar"
415msgstr "bookmarklet : glissez-déposez ce lien dans votre barre de favoris"
416
417msgid "your version"
418msgstr "votre version"
419
420msgid "latest stable version"
421msgstr "dernière version stable"
422
423msgid "a more recent stable version is available."
424msgstr "une version stable plus récente est disponible."
425
426msgid "you are up to date."
427msgstr "vous êtes à jour."
428
429msgid "latest dev version"
430msgstr "dernière version de développement"
431
432msgid "a more recent development version is available."
433msgstr "une version de développement plus récente est disponible."
434
435msgid "Please execute the import script locally, it can take a very long time."
436msgstr ""
437"Merci d'exécuter le script d'importation en local car cela peut prendre du "
438"temps."
439
440msgid "More infos in the official doc:"
441msgstr "Plus d'infos dans la documentation officielle :"
442
443msgid "import from Pocket"
444msgstr "importer depuis Pocket"
445
446#, php-format
447msgid "(you must have a %s file on your server)"
448msgstr "(le fichier %s doit être présent sur le serveur)"
449
450msgid "import from Readability"
451msgstr "importer depuis Readability"
452
453msgid "import from Instapaper"
454msgstr "importer depuis Instapaper"
455
456msgid "Start typing for auto complete."
457msgstr "Commencez à taper pour activer l'auto-complétion."
458
459msgid "You can enter multiple tags, separated by commas."
460msgstr "Vous pouvez entrer plusieurs tags, séparés par des virgules."
461
462msgid "return to article"
463msgstr "retourner à l'article"
464
465msgid "by date asc"
466msgstr "par date asc"
467
468msgid "by date"
469msgstr "par date"
470
471msgid "by date desc"
472msgstr "par date desc"
473
474msgid "by title asc"
475msgstr "par titre asc"
476
477msgid "by title"
478msgstr "par titre"
479
480msgid "by title desc"
481msgstr "par titre desc"
482
483msgid "home"
484msgstr "accueil"
485
486msgid "tags"
487msgstr "tags"
488
489msgid "save a link"
490msgstr "sauver un lien"
491
492msgid "search"
493msgstr "rechercher"
494
495msgid "logout"
496msgstr "déconnexion"
497
498msgid "installation"
499msgstr "installation"
500
501msgid "install your wallabag"
502msgstr "installez votre wallabag"
503
504msgid ""
505"wallabag is still not installed. Please fill the below form to install it. "
506"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
507"on wallabag website</a>."
508msgstr ""
509"wallabag n'est pas encore installé. Merci de remplir le formulaire suivant "
510"pour l'installer. N'hésitez pas à <a href='http://doc.wallabag.org'>lire la "
511"documentation sur le site de wallabag</a>."
512
513msgid "Repeat your password"
514msgstr "Répétez votre mot de passe"
515
516msgid "Install"
517msgstr "Installer"
518
519msgid ""
520"You can <a href='wallabag_compatibility_test.php'>check your configuration "
521"here</a>."
522msgstr ""
523"Vous pouvez vérifier votre configuration <a "
524"href='wallabag_compatibility_test.php'>ici</a>."
525
526msgid "Tags"
527msgstr "Tags"
528
529msgid "No link available here!"
530msgstr "Aucun lien n'est disponible ici !"
531
532msgid "toggle mark as read"
533msgstr "marquer comme lu / non lu"
534
535msgid "tweet"
536msgstr "tweet"
537
538msgid "email"
539msgstr "e-mail"
540
541msgid "this article appears wrong?"
542msgstr "cet article s'affiche mal ?"
543
544msgid "Search"
545msgstr "Rechercher"
546
547msgid "Download required for "
548msgstr "Téléchargement requis pour "
549
550msgid "records"
551msgstr " articles"
552
553msgid "Downloading next "
554msgstr "Téléchargement des "
555
556msgid "articles, please wait"
557msgstr " articles suivants, veuillez patienter..."
558
559msgid "Enter your search here"
560msgstr "Entrez votre recherche ici"
561
562#, php-format
563msgid ""
564"The new user %s has been installed. Do you want to <a href=\"?logout"
565"\">logout ?</a>"
566msgstr ""
567"Le nouvel utilisateur « %s » a été ajouté. Voulez-vous vous <a href=\"?"
568"logout\">déconnecter ?</a>"
569
570#, php-format
571msgid "Error : An user with the name %s already exists !"
572msgstr "Erreur : Un utilisateur avec le nom « %s » existe déjà !"
573
574#, php-format
575msgid "User %s has been successfully deleted !"
576msgstr "L'utilisateur « %s » a été supprimé avec succès !"
577
578msgid "Error : The password is wrong !"
579msgstr "Erreur : le mot de passe est incorrect !"
580
581msgid "Error : You are the only user, you cannot delete your account !"
582msgstr ""
583"Erreur : Vous êtes l'unique utilisateur, vous ne pouvez pas supprimer votre "
584"compte !"
585
586msgid "Untitled"
587msgstr "Sans titre"
588
589msgid "the link has been added successfully"
590msgstr "le lien a été ajouté avec succès"
591
592msgid "error during insertion : the link wasn't added"
593msgstr "erreur pendant l'insertion : le lien n'a pas été ajouté"
594
595msgid "the link has been deleted successfully"
596msgstr "le lien a été effacé avec succès"
597
598msgid "the link wasn't deleted"
599msgstr "le lien n'a pas été effacé"
600
601msgid "Article not found!"
602msgstr "Article non trouvé !"
603
604msgid "previous"
605msgstr "précédent"
606
607msgid "next"
608msgstr "suivant"
609
610msgid "in demo mode, you can't update your password"
611msgstr "en mode démo, vous ne pouvez pas mettre à jour votre mot de passe"
612
613msgid "your password has been updated"
614msgstr "votre mot de passe a été mis à jour"
615
616msgid ""
617"the two fields have to be filled & the password must be the same in the two "
618"fields"
619msgstr ""
620"les deux champs doivent être remplis & le mot de passe doit être le même "
621"dans les deux"
622
623msgid "still using the \""
624msgstr "vous utilisez toujours \""
625
626msgid "that theme does not seem to be installed"
627msgstr "ce thème ne semble pas installé"
628
629msgid "you have changed your theme preferences"
630msgstr "vous avez changé vos préférences de thème"
631
632msgid "that language does not seem to be installed"
633msgstr "cette langue ne semble pas être installée"
634
635msgid "you have changed your language preferences"
636msgstr "vous avez changé vos préférences de langue"
637
638msgid "login failed: you have to fill all fields"
639msgstr "échec de l'identification : vous devez remplir tous les champs"
640
641msgid "welcome to your wallabag"
642msgstr "bienvenue dans votre wallabag"
643
644msgid "login failed: bad login or password"
645msgstr "échec de l'identification : mauvais identifiant ou mot de passe"
646
647msgid "Untitled - Import - "
648msgstr "Sans titre - Importer - "
649
650msgid "click to finish import"
651msgstr "cliquez pour terminer l'importation"
652
653msgid "Articles inserted: "
654msgstr "Articles ajoutés : "
655
656msgid ". Please note, that some may be marked as \"read\"."
657msgstr ". Notez que certains pourraient être marqués comme \"lus\"."
658
659msgid "Import finished."
660msgstr "Importation terminée."
661
662msgid "Undefined"
663msgstr "Non défini"
664
665msgid "User with this id ("
666msgstr "Utilisateur avec cet identifiant ("
667
668msgid "Uh, there is a problem while generating feeds."
669msgstr "Hum, il y a un problème lors de la génération des flux."
670
671msgid "Cache deleted."
672msgstr "Cache effacé."
673
674msgid "Oops, it seems you don't have PHP 5."
675msgstr "Oups, vous ne semblez pas avoir PHP 5."
676
677msgid "Tag these results as"
678msgstr "Appliquer à ces résultats le tag"
679
680# ebook
681msgid "Fancy an E-Book ?"
682msgstr "Envie d'un E-Book ?"
683
684msgid "Click to get all your articles in one ebook :"
685msgstr "Cliquez pour obtenir tous vos articles dans un E-Book :"
686
687msgid "Generate ePub file"
688msgstr "Générer fichier ePub"
689
690msgid "Generate Mobi file"
691msgstr "Générer fichier Mobi"
692
693msgid "Generate PDF file"
694msgstr "Générer fichier PDF"
695
696msgid ""
697"This can <b>take a while</b> and can <b>even fail</b> if you have too many "
698"articles, depending on your server configuration."
699msgstr ""
700"Ceci peut <b>prendre un moment</b> et même <b>échouer</b> si vous avez trop "
701"d'articles, selon la configuration matérielle de votre serveur."
702
703msgid "Download the articles from this tag in an epub"
704msgstr "Télécharger les articles de ce tag dans un epub"
705
706msgid "Download the articles from this search in an epub"
707msgstr "Télécharger les articles de cette recherche dans un epub"
708
709msgid "Download the articles from this category in an epub"
710msgstr "Télécharger les articles de cette catégorie dans un epub"
711
712msgid "Download the articles from this tag in an ePub file"
713msgstr "Télécharger les articles de ce tag dans un fichier ePub"
714
715msgid "Download the articles from this tag in an Mobi file"
716msgstr "Télécharger les articles de ce tag dans un fichier Mobi"
717
718msgid "Download the articles from this tag in an PDF file"
719msgstr "Télécharger les articles de ce tag dans un fichier PDF"
720
721msgid "Download the articles from this search in an ePub"
722msgstr "Télécharger les articles de cette recherche dans un fichier ePub"
723
724msgid "Download the articles from this search in a Mobi file"
725msgstr "Télécharger les articles de cette recherche dans un fichier Mobi"
726
727msgid "Download the articles from this search in a PDF file"
728msgstr "Télécharger les articles de cette recherche dans un fichier PDF"
729
730msgid "Download the articles from this category in an ePub"
731msgstr "Télécharger les articles de cette catégorie dans un fichier ePub"
732
733msgid "Download the articles from this category in a Mobi file"
734msgstr "Télécharger les articles de cette catégorie dans un fichier Mobi"
735
736msgid "Download the articles from this category in a PDF file"
737msgstr "Télécharger les articles de cette catégorie dans un fichier PDF"
738
739msgid "Download as ePub3"
740msgstr "Télécharger en ePub3"
741
742msgid "Download as Mobi"
743msgstr "Télécharger en Mobi"
744
745msgid "Download as PDF"
746msgstr "Télécharger en PDF"
747
748msgid "All my articles on %s"
749msgstr "Tous mes articles le %s"
750
751msgid "Allarticles"
752msgstr "TousArticles"
753
754msgid "Articles tagged %s"
755msgstr "Articles avec le tag %s"
756
757msgid "Tag %s"
758msgstr "Tag %s"
759
760msgid "Articles in category %s"
761msgstr "Articles de la catégorie %s"
762
763msgid "Category %s"
764msgstr "Catégorie %s"
765
766msgid "Articles for search %s"
767msgstr "Articles pour la recherche %s"
768
769msgid "Search %s"
770msgstr "Recherche %s"
771
772msgid "wallabag articles book"
773msgstr "Livre d'articles issus de wallabag"
774
775msgid "Some articles saved on my wallabag"
776msgstr "Des articles sauvegardés sur wallabag"
777
778msgid "Produced by wallabag with PHPePub"
779msgstr "Produit par wallabag avec PHPePub"
780
781msgid ""
782"Please open <a href='https://github.com/wallabag/wallabag/issues'>an issue</"
783"a> if you have trouble with the display of this E-Book on your device."
784msgstr ""
785"Merci d'ouvrir <a href='https://github.com/wallabag/wallabag/issues'>un "
786"ticket</a> si vous avez des problèmes d'affichage de cet E-Book sur votre "
787"appareil."
788
789msgid "Produced by wallabag with PHPMobi"
790msgstr "Produit par wallabag avec PHPMobi"
791
792msgid "Mail function is disabled. You can't send emails from your server"
793msgstr ""
794"La fonction mail est désactivée. Vous ne pouvez pas envoyer d'E-mails depuis "
795"votre serveur"
796
797msgid "You didn't set your kindle's email adress !"
798msgstr "Vous n'avez pas renseigné l'adresse E-mail de votre Kindle !"
799
800msgid "The email has been sent to your kindle !"
801msgstr "L'E-mail a été envoyé à votre Kindle !"
802
803msgid "Produced by wallabag with mPDF"
804msgstr "Produit par wallabag avec mPDF"
diff --git a/src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.mo
new file mode 100644
index 00000000..42e26ba0
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.po b/src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.po
new file mode 100644
index 00000000..41cc01e0
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/it_IT.utf8/LC_MESSAGES/it_IT.utf8.po
@@ -0,0 +1,568 @@
1#
2# Translators:
3# Damtux <sun_lion@live.com>, 2013
4msgid ""
5msgstr ""
6"Project-Id-Version: poche\n"
7"Report-Msgid-Bugs-To: \n"
8"POT-Creation-Date: 2014-02-25 15:13+0300\n"
9"PO-Revision-Date: 2014-02-25 15:13+0300\n"
10"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
11"Language-Team: Italian (http://www.transifex.com/projects/p/poche/language/it/)\n"
12"Language: it\n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"Plural-Forms: nplurals=2; plural=(n != 1);\n"
17"X-Generator: Poedit 1.5.4\n"
18"X-Poedit-Language: Italian\n"
19"X-Poedit-Country: ITALY\n"
20"X-Poedit-Basepath: .\n"
21"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
22
23msgid "wallabag, a read it later open source system"
24msgstr ""
25
26msgid "login failed: user doesn't exist"
27msgstr ""
28
29msgid "return home"
30msgstr ""
31
32msgid "config"
33msgstr "configurazione"
34
35msgid "Saving articles"
36msgstr ""
37
38msgid "There are several ways to save an article:"
39msgstr ""
40
41msgid "read the documentation"
42msgstr "leggi la documentazione"
43
44msgid "download the extension"
45msgstr ""
46
47msgid "via F-Droid"
48msgstr ""
49
50msgid " or "
51msgstr ""
52
53msgid "via Google Play"
54msgstr ""
55
56msgid "download the application"
57msgstr ""
58
59#, fuzzy
60msgid "By filling this field"
61msgstr "compilando questo campo"
62
63msgid "bag it!"
64msgstr ""
65
66msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
67msgstr ""
68
69msgid "Upgrading wallabag"
70msgstr ""
71
72#, fuzzy
73msgid "Installed version"
74msgstr "ultima versione stabile"
75
76#, fuzzy
77msgid "Latest stable version"
78msgstr "ultima versione stabile"
79
80#, fuzzy
81msgid "A more recent stable version is available."
82msgstr "è disponibile una versione stabile più recente."
83
84#, fuzzy
85msgid "You are up to date."
86msgstr "sei aggiornato."
87
88#, fuzzy
89msgid "Latest dev version"
90msgstr "ultima versione di sviluppo"
91
92#, fuzzy
93msgid "A more recent development version is available."
94msgstr "è disponibile una versione di sviluppo più recente."
95
96msgid "Feeds"
97msgstr ""
98
99msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
100msgstr ""
101
102msgid "Unread feed"
103msgstr ""
104
105#, fuzzy
106msgid "Favorites feed"
107msgstr "preferiti"
108
109#, fuzzy
110msgid "Archive feed"
111msgstr "archivio"
112
113msgid "Your token:"
114msgstr ""
115
116msgid "Your user id:"
117msgstr ""
118
119msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
120msgstr ""
121
122#, fuzzy
123msgid "Change your theme"
124msgstr "Cambia la tua password"
125
126msgid "Theme:"
127msgstr ""
128
129msgid "Update"
130msgstr "Aggiorna"
131
132#, fuzzy
133msgid "Change your language"
134msgstr "Cambia la tua password"
135
136msgid "Language:"
137msgstr ""
138
139msgid "Change your password"
140msgstr "Cambia la tua password"
141
142msgid "New password:"
143msgstr "Nuova password:"
144
145msgid "Password"
146msgstr "Password"
147
148msgid "Repeat your new password:"
149msgstr "Ripeti la nuova password:"
150
151msgid "Import"
152msgstr "Importa"
153
154#, fuzzy
155msgid "Please execute the import script locally as it can take a very long time."
156msgstr "Si prega di eseguire lo script di importazione a livello locale, può richiedere un tempo molto lungo."
157
158#, fuzzy
159msgid "More info in the official documentation:"
160msgstr "Maggiori info nella documentazione ufficiale"
161
162#, fuzzy
163msgid "Import from Pocket"
164msgstr "Importa da Pocket"
165
166#, php-format
167msgid "(you must have a %s file on your server)"
168msgstr ""
169
170#, fuzzy
171msgid "Import from Readability"
172msgstr "Importa da Readability"
173
174#, fuzzy
175msgid "Import from Instapaper"
176msgstr "Importa da Instapaper"
177
178#, fuzzy
179msgid "Import from wallabag"
180msgstr "Importa da Readability"
181
182#, fuzzy
183msgid "Export your wallabag data"
184msgstr "Esporta i tuoi dati di poche"
185
186msgid "Click here"
187msgstr "Fai clic qui"
188
189msgid "to download your database."
190msgstr ""
191
192#, fuzzy
193msgid "to export your wallabag data."
194msgstr "per esportare i tuoi dati di poche."
195
196msgid "Cache"
197msgstr ""
198
199msgid "to delete cache."
200msgstr ""
201
202msgid "You can enter multiple tags, separated by commas."
203msgstr ""
204
205msgid "return to article"
206msgstr ""
207
208msgid "plop"
209msgstr "plop"
210
211msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
212msgstr ""
213
214msgid "favoris"
215msgstr "preferiti"
216
217msgid "archive"
218msgstr "archivio"
219
220msgid "unread"
221msgstr "non letti"
222
223msgid "by date asc"
224msgstr "per data cresc"
225
226msgid "by date"
227msgstr "per data"
228
229msgid "by date desc"
230msgstr "per data decr"
231
232msgid "by title asc"
233msgstr "per titolo cresc"
234
235msgid "by title"
236msgstr "per titolo"
237
238msgid "by title desc"
239msgstr "per titolo decr"
240
241msgid "Tag"
242msgstr ""
243
244msgid "No articles found."
245msgstr ""
246
247#, fuzzy
248msgid "Toggle mark as read"
249msgstr "segna come letto / non letto"
250
251msgid "toggle favorite"
252msgstr "segna come preferito"
253
254msgid "delete"
255msgstr "elimina"
256
257msgid "original"
258msgstr "originale"
259
260msgid "estimated reading time:"
261msgstr ""
262
263msgid "mark all the entries as read"
264msgstr ""
265
266msgid "results"
267msgstr "risultati"
268
269msgid "installation"
270msgstr "installazione"
271
272#, fuzzy
273msgid "install your wallabag"
274msgstr "installa il tuo poche"
275
276#, fuzzy
277msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
278msgstr "poche non è ancora installato. Si prega di riempire il modulo sottostante per completare l'installazione. <a href='http://doc.inthepoche.com'>Leggere la documentazione sul sito di poche</a>."
279
280msgid "Login"
281msgstr "Nome utente"
282
283msgid "Repeat your password"
284msgstr "Ripeti la tua password"
285
286msgid "Install"
287msgstr "Installa"
288
289#, fuzzy
290msgid "login to your wallabag"
291msgstr "accedi al tuo poche"
292
293msgid "Login to wallabag"
294msgstr ""
295
296msgid "you are in demo mode, some features may be disabled."
297msgstr "sei in modalità dimostrazione, alcune funzionalità potrebbero essere disattivate."
298
299msgid "Username"
300msgstr ""
301
302msgid "Stay signed in"
303msgstr "Resta connesso"
304
305msgid "(Do not check on public computers)"
306msgstr "(non selezionare su computer pubblici)"
307
308msgid "Sign in"
309msgstr "Accedi"
310
311msgid "favorites"
312msgstr "preferiti"
313
314msgid "estimated reading time :"
315msgstr ""
316
317msgid "Mark all the entries as read"
318msgstr ""
319
320msgid "Return home"
321msgstr ""
322
323#, fuzzy
324msgid "Back to top"
325msgstr "torna a inizio pagina"
326
327#, fuzzy
328msgid "Mark as read"
329msgstr "segna come letto / non letto"
330
331#, fuzzy
332msgid "Favorite"
333msgstr "preferiti"
334
335#, fuzzy
336msgid "Toggle favorite"
337msgstr "segna come preferito"
338
339#, fuzzy
340msgid "Delete"
341msgstr "elimina"
342
343#, fuzzy
344msgid "Tweet"
345msgstr "twitta"
346
347#, fuzzy
348msgid "Email"
349msgstr "email"
350
351msgid "shaarli"
352msgstr "shaarli"
353
354msgid "flattr"
355msgstr "flattr"
356
357#, fuzzy
358msgid "Does this article appear wrong?"
359msgstr "articolo non visualizzato correttamente?"
360
361msgid "tags:"
362msgstr ""
363
364msgid "Edit tags"
365msgstr ""
366
367msgid "save link!"
368msgstr ""
369
370msgid "home"
371msgstr "home"
372
373msgid "tags"
374msgstr ""
375
376msgid "logout"
377msgstr "esci"
378
379msgid "powered by"
380msgstr "realizzato con"
381
382msgid "debug mode is on so cache is off."
383msgstr "modalità di debug attiva, cache disattivata."
384
385#, fuzzy
386msgid "your wallabag version:"
387msgstr "la tua versione"
388
389msgid "storage:"
390msgstr "memoria:"
391
392msgid "save a link"
393msgstr ""
394
395msgid "back to home"
396msgstr "torna alla home"
397
398msgid "toggle mark as read"
399msgstr "segna come letto / non letto"
400
401msgid "tweet"
402msgstr "twitta"
403
404msgid "email"
405msgstr "email"
406
407msgid "this article appears wrong?"
408msgstr "articolo non visualizzato correttamente?"
409
410msgid "No link available here!"
411msgstr "Nessun link disponibile!"
412
413msgid "Poching a link"
414msgstr "Pochare un link"
415
416msgid "by filling this field"
417msgstr "compilando questo campo"
418
419msgid "bookmarklet: drag & drop this link to your bookmarks bar"
420msgstr ""
421
422msgid "your version"
423msgstr "la tua versione"
424
425msgid "latest stable version"
426msgstr "ultima versione stabile"
427
428msgid "a more recent stable version is available."
429msgstr "è disponibile una versione stabile più recente."
430
431msgid "you are up to date."
432msgstr "sei aggiornato."
433
434msgid "latest dev version"
435msgstr "ultima versione di sviluppo"
436
437msgid "a more recent development version is available."
438msgstr "è disponibile una versione di sviluppo più recente."
439
440msgid "Please execute the import script locally, it can take a very long time."
441msgstr "Si prega di eseguire lo script di importazione a livello locale, può richiedere un tempo molto lungo."
442
443#, fuzzy
444msgid "More infos in the official doc:"
445msgstr "Maggiori info nella documentazione ufficiale"
446
447msgid "import from Pocket"
448msgstr "Importa da Pocket"
449
450msgid "import from Readability"
451msgstr "Importa da Readability"
452
453msgid "import from Instapaper"
454msgstr "Importa da Instapaper"
455
456msgid "Tags"
457msgstr ""
458
459#, fuzzy
460msgid "Untitled"
461msgstr "per titolo"
462
463msgid "the link has been added successfully"
464msgstr ""
465
466msgid "error during insertion : the link wasn't added"
467msgstr ""
468
469msgid "the link has been deleted successfully"
470msgstr ""
471
472msgid "the link wasn't deleted"
473msgstr ""
474
475msgid "Article not found!"
476msgstr ""
477
478msgid "previous"
479msgstr ""
480
481msgid "next"
482msgstr ""
483
484msgid "in demo mode, you can't update your password"
485msgstr ""
486
487msgid "your password has been updated"
488msgstr ""
489
490msgid "the two fields have to be filled & the password must be the same in the two fields"
491msgstr ""
492
493msgid "still using the \""
494msgstr ""
495
496msgid "that theme does not seem to be installed"
497msgstr ""
498
499msgid "you have changed your theme preferences"
500msgstr ""
501
502msgid "that language does not seem to be installed"
503msgstr ""
504
505msgid "you have changed your language preferences"
506msgstr ""
507
508msgid "login failed: you have to fill all fields"
509msgstr ""
510
511msgid "welcome to your wallabag"
512msgstr ""
513
514msgid "login failed: bad login or password"
515msgstr ""
516
517#, fuzzy
518msgid "import from instapaper completed"
519msgstr "Importa da Instapaper"
520
521#, fuzzy
522msgid "import from pocket completed"
523msgstr "Importa da Pocket"
524
525#, fuzzy
526msgid "import from Readability completed. "
527msgstr "Importa da Readability"
528
529#, fuzzy
530msgid "import from Poche completed. "
531msgstr "Importa da Pocket"
532
533msgid "Unknown import provider."
534msgstr ""
535
536msgid "Incomplete inc/poche/define.inc.php file, please define \""
537msgstr ""
538
539msgid "Could not find required \""
540msgstr ""
541
542msgid "Uh, there is a problem while generating feeds."
543msgstr ""
544
545#, fuzzy
546msgid "Cache deleted."
547msgstr "elimina"
548
549msgid "Oops, it seems you don't have PHP 5."
550msgstr ""
551
552#~ msgid "poche it!"
553#~ msgstr "pochalo!"
554
555#~ msgid "Updating poche"
556#~ msgstr "Aggiornamento poche"
557
558#~ msgid "create an issue"
559#~ msgstr "crea una segnalazione"
560
561#~ msgid "or"
562#~ msgstr "oppure"
563
564#~ msgid "contact us by mail"
565#~ msgstr "contattaci via email"
566
567#~ msgid "your poche version:"
568#~ msgstr "la tua versione di poche:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.mo
new file mode 100644
index 00000000..297516c0
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.po b/src/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.po
new file mode 100755
index 00000000..e39156e6
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/pl_PL.utf8/LC_MESSAGES/pl_PL.utf8.po
@@ -0,0 +1,553 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: wallabag\n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-02-25 15:17+0300\n"
6"PO-Revision-Date: \n"
7"Last-Translator: skibbipl <skibbipl@users.noreply.github.com>\n"
8"Language-Team: \n"
9"Language: pl\n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.6.6\n"
14"X-Poedit-Basepath: .\n"
15"Plural-Forms: nplurals=3; plural=(n==1 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 "
16"|| n%100>=20) ? 1 : 2);\n"
17"X-Poedit-SourceCharset: UTF-8\n"
18"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-"
19"testing\n"
20
21msgid "wallabag, a read it later open source system"
22msgstr "wallabag, open source'owy system typu \"przeczytaj to później\""
23
24msgid "login failed: user doesn't exist"
25msgstr "logowanie się nie powiodło: użytkownik nie istnieje"
26
27msgid "return home"
28msgstr "powrót do strony domowej"
29
30msgid "config"
31msgstr "konfiguracja"
32
33msgid "Saving articles"
34msgstr "Zapisywanie artykułów"
35
36msgid "There are several ways to save an article:"
37msgstr "Istnieje kilka sposobów aby zapisać artykuł:"
38
39msgid "read the documentation"
40msgstr "przeczytaj dokumentację"
41
42msgid "download the extension"
43msgstr "pobierz rozszerzenie"
44
45msgid "via F-Droid"
46msgstr "przez F-Droid"
47
48msgid " or "
49msgstr "albo "
50
51msgid "via Google Play"
52msgstr "przez Google Play"
53
54msgid "download the application"
55msgstr "pobierz aplikację"
56
57msgid "By filling this field"
58msgstr "Poprzez wypełnienie tego pola"
59
60msgid "bag it!"
61msgstr "zapisz!"
62
63msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
64msgstr "Skryptozakładka: przeciągnij i upuść ten link na twój pasek zakładek"
65
66msgid "Upgrading wallabag"
67msgstr "Aktualizacja wallabag"
68
69msgid "Installed version"
70msgstr "Zainstalowana wersja"
71
72msgid "Latest stable version"
73msgstr "Najnowsza stabilna wersja"
74
75msgid "A more recent stable version is available."
76msgstr "Nowsza stabilna wersja jest dostępna."
77
78msgid "You are up to date."
79msgstr "Posiadasz najnowszą wersję."
80
81msgid "Latest dev version"
82msgstr "Najnowsza wersja developerska"
83
84msgid "A more recent development version is available."
85msgstr "Nowsza developerska wersja jest dostępna."
86
87msgid "Feeds"
88msgstr "Kanały"
89
90msgid ""
91"Your feed token is currently empty and must first be generated to enable "
92"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
93msgstr ""
94"Twój token kanału jest aktualnie pusty i musi zostać wygenerowany, aby "
95"włączyć kanały. Kliknij <a href='?feed&amp;action=generate'>tutaj, aby go "
96"wygenerować</a>."
97
98msgid "Unread feed"
99msgstr "Nieprzeczytane kanały"
100
101msgid "Favorites feed"
102msgstr "Ulubione kanały"
103
104msgid "Archive feed"
105msgstr "Kanały archiwum"
106
107msgid "Your token:"
108msgstr "Twój token:"
109
110msgid "Your user id:"
111msgstr "Twój id użytkownika:"
112
113msgid ""
114"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
115"</a>."
116msgstr ""
117"Możesz wygenewrować ponownie swój token: <a href='?feed&amp;"
118"action=generate'>generuj!</a>."
119
120msgid "Change your theme"
121msgstr "Zmień swój motyw"
122
123msgid "Theme:"
124msgstr "Motyw:"
125
126msgid "Update"
127msgstr "Aktualizuj"
128
129msgid "Change your language"
130msgstr "Zmień język"
131
132msgid "Language:"
133msgstr "Język:"
134
135msgid "Change your password"
136msgstr "Zmień swoje hasło"
137
138msgid "New password:"
139msgstr "Nowe hasło:"
140
141msgid "Password"
142msgstr "Hasło"
143
144msgid "Repeat your new password:"
145msgstr "Powtórz twoje nowe hasło:"
146
147msgid "Import"
148msgstr "Import"
149
150msgid ""
151"Please execute the import script locally as it can take a very long time."
152msgstr ""
153"Proszę wykonaj skrypt importu lokalnie, ponieważ może to trwać bardzo długo."
154
155msgid "More info in the official documentation:"
156msgstr "Więcej informacji znajdziesz w oficjalnej dokumentacji:"
157
158msgid "Import from Pocket"
159msgstr "Importuj z Pocket"
160
161#, php-format
162msgid "(you must have a %s file on your server)"
163msgstr "(musisz mieć plik %s na swoim serwerze)"
164
165msgid "Import from Readability"
166msgstr "Importuj z Readability"
167
168msgid "Import from Instapaper"
169msgstr "Importuj z Instapaper"
170
171msgid "Import from wallabag"
172msgstr "Importuj z wallabag"
173
174msgid "Export your wallabag data"
175msgstr "Wyeksportuj swoje dane wallabag"
176
177msgid "Click here"
178msgstr "Kliknij tu"
179
180msgid "to download your database."
181msgstr "aby pobrać twoją bazę danych."
182
183msgid "to export your wallabag data."
184msgstr "aby wyeksportować dane wallabag."
185
186msgid "Cache"
187msgstr "Cache"
188
189msgid "to delete cache."
190msgstr "aby wyczyścić cache."
191
192msgid "You can enter multiple tags, separated by commas."
193msgstr "Możesz wprowadzić wiele tagów, oddzielonych przecinkami."
194
195msgid "return to article"
196msgstr "powrót do artykułu"
197
198msgid "plop"
199msgstr "plop"
200
201msgid ""
202"You can <a href='wallabag_compatibility_test.php'>check your configuration "
203"here</a>."
204msgstr ""
205"Możesz <a href='wallabag_compatibility_test.php'>sprawdzić swoją "
206"konfigurację tutaj</a>."
207
208msgid "favoris"
209msgstr "favoris"
210
211msgid "archive"
212msgstr "archiwum"
213
214msgid "unread"
215msgstr "nieprzeczytane"
216
217msgid "by date asc"
218msgstr "po dacie rosnąco"
219
220msgid "by date"
221msgstr "po dacie"
222
223msgid "by date desc"
224msgstr "po dacie malejąco"
225
226msgid "by title asc"
227msgstr "po tytule rosnąco"
228
229msgid "by title"
230msgstr "po tytule"
231
232msgid "by title desc"
233msgstr "po tytule malejąco"
234
235msgid "Tag"
236msgstr "Otaguj"
237
238msgid "No articles found."
239msgstr "Nie znaleziono artykułów."
240
241msgid "Toggle mark as read"
242msgstr "Przełącz jako przeczytane"
243
244msgid "toggle favorite"
245msgstr "przełącz ulubione"
246
247msgid "delete"
248msgstr "usuń"
249
250msgid "original"
251msgstr "oryginał"
252
253msgid "estimated reading time:"
254msgstr "szacowany czas czytania:"
255
256msgid "mark all the entries as read"
257msgstr "zaznacz wszystkie wpisy jako przeczytane"
258
259msgid "results"
260msgstr "rezultaty"
261
262msgid "installation"
263msgstr "instalacja"
264
265msgid "install your wallabag"
266msgstr "zainstauj wallabag"
267
268msgid ""
269"wallabag is still not installed. Please fill the below form to install it. "
270"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
271"on wallabag website</a>."
272msgstr ""
273"wallabag wciąż nie jest zainstalowany. Proszę wypełnij poniższy formularz "
274"aby go zainstalować. Nie wahaj się <a href='http://doc.wallabag."
275"org/'>przeczytać dokumentacji na stronie wallabag</a>."
276
277msgid "Login"
278msgstr "Login"
279
280msgid "Repeat your password"
281msgstr "Powtórz swoje hasło"
282
283msgid "Install"
284msgstr "Zainstauj"
285
286msgid "login to your wallabag"
287msgstr "zaloguj się do twojego wallabag"
288
289msgid "Login to wallabag"
290msgstr "Logowanie do wallabag"
291
292msgid "you are in demo mode, some features may be disabled."
293msgstr "jesteś w trybie demo, niektóre funkcjonalności mogą być wyłączone."
294
295msgid "Username"
296msgstr "Nazwa użytkownika"
297
298msgid "Stay signed in"
299msgstr "Pozostań zalogowany"
300
301msgid "(Do not check on public computers)"
302msgstr "(Nie zaznaczaj na komputerach z publicznym dostępem)"
303
304msgid "Sign in"
305msgstr "Zaloguj się"
306
307msgid "favorites"
308msgstr "ulubione"
309
310msgid "estimated reading time :"
311msgstr "szacowany czas czytania :"
312
313msgid "Mark all the entries as read"
314msgstr "Zaznacz wszystkie wpisy jako przeczytane"
315
316msgid "Return home"
317msgstr "Powrót na stronę domową"
318
319msgid "Back to top"
320msgstr "Powrót na górę"
321
322msgid "Mark as read"
323msgstr "Oznacz jako przeczytane"
324
325msgid "Favorite"
326msgstr "Ulubione"
327
328msgid "Toggle favorite"
329msgstr "Przełącz ulubione"
330
331msgid "Delete"
332msgstr "Usuń"
333
334msgid "Tweet"
335msgstr "Tweet"
336
337msgid "Email"
338msgstr "Email"
339
340msgid "shaarli"
341msgstr "shaarli"
342
343msgid "flattr"
344msgstr "flattr"
345
346msgid "Does this article appear wrong?"
347msgstr "Czy ten artykuł jest wyświetlany niepoprawnie?"
348
349msgid "tags:"
350msgstr "tagi:"
351
352msgid "Edit tags"
353msgstr "Edytuj tagi"
354
355msgid "save link!"
356msgstr "zapisz link!"
357
358msgid "home"
359msgstr "strona domowa"
360
361msgid "tags"
362msgstr "tagi"
363
364msgid "logout"
365msgstr "wyloguj"
366
367msgid "powered by"
368msgstr "w oparciu o"
369
370msgid "debug mode is on so cache is off."
371msgstr "tryb debug jest włączony zatem cache jest wyłączony."
372
373msgid "your wallabag version:"
374msgstr "wersja twojego wallabag:"
375
376msgid "storage:"
377msgstr "storage:"
378
379msgid "save a link"
380msgstr "zapisz link"
381
382msgid "back to home"
383msgstr "powrót do strony domowej"
384
385msgid "toggle mark as read"
386msgstr "przełącz jako przeczytane"
387
388msgid "tweet"
389msgstr "tweet"
390
391msgid "email"
392msgstr "email"
393
394msgid "this article appears wrong?"
395msgstr "ten artykuł wygląda niepoprawnie?"
396
397msgid "No link available here!"
398msgstr "No link available here!"
399
400#, fuzzy
401msgid "Poching a link"
402msgstr "Poching a link"
403
404msgid "by filling this field"
405msgstr "przez wypełnienie tego pola"
406
407msgid "bookmarklet: drag & drop this link to your bookmarks bar"
408msgstr "skryptozakładka: przeciągnij i upuść ten link na twój pasek zakładek"
409
410msgid "your version"
411msgstr "twoja wersja"
412
413msgid "latest stable version"
414msgstr "najnowsza stabilna wersja"
415
416msgid "a more recent stable version is available."
417msgstr "nowsza wersja stabilna jest dostępna."
418
419msgid "you are up to date."
420msgstr "posiadasz najnowszą wersję."
421
422msgid "latest dev version"
423msgstr "najnowsza wersja developerska"
424
425msgid "a more recent development version is available."
426msgstr "nowsza wersja developerska jest dostępna."
427
428msgid "Please execute the import script locally, it can take a very long time."
429msgstr ""
430"Please execute the import script locally, it can take a very long time."
431
432msgid "More infos in the official doc:"
433msgstr "More infos in the official doc:"
434
435msgid "import from Pocket"
436msgstr "import from Pocket"
437
438msgid "import from Readability"
439msgstr "import from Readability"
440
441msgid "import from Instapaper"
442msgstr "import from Instapaper"
443
444msgid "Tags"
445msgstr "Tagi"
446
447msgid "Untitled"
448msgstr "Untitled"
449
450msgid "the link has been added successfully"
451msgstr "link został dodany pomyślnie"
452
453msgid "error during insertion : the link wasn't added"
454msgstr "błąd podczas dodawania : link nie został dodany"
455
456msgid "the link has been deleted successfully"
457msgstr "link został usunięty pomyślnie"
458
459msgid "the link wasn't deleted"
460msgstr "link nie został usunięty"
461
462msgid "Article not found!"
463msgstr "Artykuł nie znaleziony!"
464
465msgid "previous"
466msgstr "poprzedni"
467
468msgid "next"
469msgstr "następny"
470
471msgid "in demo mode, you can't update your password"
472msgstr "w trybie demo nie możesz zaktualizować swojego hasła"
473
474msgid "your password has been updated"
475msgstr "twoje hasło zostało zaktualizowane"
476
477msgid ""
478"the two fields have to be filled & the password must be the same in the two "
479"fields"
480msgstr ""
481"oba pola muszą być wypełnione oraz hasło musi być takie same w obu polach"
482
483msgid "still using the \""
484msgstr "wciąż używam \""
485
486msgid "that theme does not seem to be installed"
487msgstr "ten motyw nie wygląda na zainstalowany"
488
489msgid "you have changed your theme preferences"
490msgstr "zmieniłeś swoje preferencje motywu"
491
492msgid "that language does not seem to be installed"
493msgstr "ten język nie wygląda na zainstalowany"
494
495msgid "you have changed your language preferences"
496msgstr "zmieniłeś swoje preferencje językowe"
497
498msgid "login failed: you have to fill all fields"
499msgstr "logowanie się nie powiodło: musisz wypełnić wszystkie pola"
500
501msgid "welcome to your wallabag"
502msgstr "witaj w twoim wallabag"
503
504msgid "login failed: bad login or password"
505msgstr "logowanie się nie powiodło: nieprawidłowy login lub hasło"
506
507msgid "import from instapaper completed"
508msgstr "import z instapaper zakończony"
509
510msgid "import from pocket completed"
511msgstr "import z pocket zakończony"
512
513msgid "import from Readability completed. "
514msgstr "import z Readability zakończony. "
515
516msgid "import from Poche completed. "
517msgstr "import z Poche zakończony. "
518
519msgid "Unknown import provider."
520msgstr "Nieznany dostawca importu."
521
522msgid "Incomplete inc/poche/define.inc.php file, please define \""
523msgstr "Niekompletny plik inc/poche/define.inc.php, proszę zdefiniuj \""
524
525msgid "Could not find required \""
526msgstr "Nie znaleziono wymaganego \""
527
528msgid "Uh, there is a problem while generating feeds."
529msgstr "Ah, wystąpił problem podczas generowania kanałów."
530
531msgid "Cache deleted."
532msgstr "Cache usunięty."
533
534msgid "Oops, it seems you don't have PHP 5."
535msgstr "Oops, wygląda na to że nie masz PHP 5."
536
537#~ msgid "poche it!"
538#~ msgstr "poche it!"
539
540#~ msgid "Updating poche"
541#~ msgstr "Updating poche"
542
543#~ msgid "create an issue"
544#~ msgstr "create an issue"
545
546#~ msgid "or"
547#~ msgstr "or"
548
549#~ msgid "contact us by mail"
550#~ msgstr "contact us by mail"
551
552#~ msgid "your poche version:"
553#~ msgstr "your poche version:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.mo
new file mode 100644
index 00000000..c1ce317f
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.po b/src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.po
new file mode 100644
index 00000000..e1453922
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/pt_BR.utf8/LC_MESSAGES/pt_BR.utf8.po
@@ -0,0 +1,549 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: wallabag\n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-02-25 15:17+0300\n"
6"PO-Revision-Date: \n"
7"Last-Translator: @iancamporez <ian@camporez.com>\n"
8"Language-Team: @iancamporez <ian@camporez.com>\n"
9"Language: pt_BR\n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.6.4\n"
14"X-Poedit-Basepath: .\n"
15"X-Poedit-SearchPath-0: /home/ian/Projetos/wallabag/locale/en_EN.utf8/"
16"LC_MESSAGES\n"
17
18msgid "wallabag, a read it later open source system"
19msgstr "wallabag, um \"read it later\" de código aberto"
20
21msgid "login failed: user doesn't exist"
22msgstr "falha ao entrar: o usuário não existe"
23
24msgid "return home"
25msgstr "retornar à página inicial"
26
27msgid "config"
28msgstr "configurar"
29
30msgid "Saving articles"
31msgstr "Salvando artigos"
32
33msgid "There are several ways to save an article:"
34msgstr "Existem várias maneiras de salvar um artigo:"
35
36msgid "read the documentation"
37msgstr "ler a documentação"
38
39msgid "download the extension"
40msgstr "baixar a extensão"
41
42msgid "via F-Droid"
43msgstr "via F-Droid"
44
45msgid " or "
46msgstr "ou "
47
48msgid "via Google Play"
49msgstr "via Google Play"
50
51msgid "download the application"
52msgstr "baixar o aplicativo"
53
54msgid "By filling this field"
55msgstr "Preenchendo esse campo"
56
57msgid "bag it!"
58msgstr "adicionar ao wallabag"
59
60msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
61msgstr "Bookmarklet: arraste esse link para sua barra de favoritos"
62
63msgid "Upgrading wallabag"
64msgstr "Atualizando o wallabag"
65
66msgid "Installed version"
67msgstr "Versão instalada"
68
69msgid "Latest stable version"
70msgstr "Última versão estável"
71
72msgid "A more recent stable version is available."
73msgstr "Uma versão estável mais nova está disponível"
74
75msgid "You are up to date."
76msgstr "Você está atualizado."
77
78msgid "Latest dev version"
79msgstr "Última versão em desenvolvimento"
80
81msgid "A more recent development version is available."
82msgstr "Uma versão em desenvolvimento mais recente está disponível"
83
84msgid "Feeds"
85msgstr "Feeds"
86
87msgid ""
88"Your feed token is currently empty and must first be generated to enable "
89"feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
90msgstr ""
91"Seu token do feed e precisa ser gerado para ativar os feeds. Clique <a "
92"href='?feed&amp;action=generate'>aqui para gerar um token</a>."
93
94msgid "Unread feed"
95msgstr "Feed de artigos não lidos"
96
97msgid "Favorites feed"
98msgstr "Feed dos favoritos"
99
100msgid "Archive feed"
101msgstr "Feed de arquivados"
102
103msgid "Your token:"
104msgstr "Seu token:"
105
106msgid "Your user id:"
107msgstr "Seu código de usuário:"
108
109msgid ""
110"You can regenerate your token: <a href='?feed&amp;action=generate'>generate!"
111"</a>."
112msgstr ""
113"Você pode regerar seu token: <a href='?feed&amp;action=generate'>gerar!</a>."
114
115msgid "Change your theme"
116msgstr "Mudar seu tema"
117
118msgid "Theme:"
119msgstr "Tema:"
120
121msgid "Update"
122msgstr "Atualizar"
123
124msgid "Change your language"
125msgstr "Alterar seu idioma"
126
127msgid "Language:"
128msgstr "Idioma:"
129
130msgid "Change your password"
131msgstr "Alterar sua senha"
132
133msgid "New password:"
134msgstr "Nova senha:"
135
136msgid "Password"
137msgstr "Senha"
138
139msgid "Repeat your new password:"
140msgstr "Repetir sua nova senha:"
141
142msgid "Import"
143msgstr "Importar"
144
145msgid ""
146"Please execute the import script locally as it can take a very long time."
147msgstr ""
148"Por favor, execute o script de importação localmente, pois pode demorar "
149"muito tempo."
150
151msgid "More info in the official documentation:"
152msgstr "Mais informações na documentação oficial:"
153
154msgid "Import from Pocket"
155msgstr "Importar do Pocket"
156
157#, php-format
158msgid "(you must have a %s file on your server)"
159msgstr "(você deve ter um arquivo %s no seu servidor)"
160
161msgid "Import from Readability"
162msgstr "Importar do Readability"
163
164msgid "Import from Instapaper"
165msgstr "Importar do Instapaper"
166
167msgid "Import from wallabag"
168msgstr "Importar do wallabag"
169
170msgid "Export your wallabag data"
171msgstr "Exportar seus dados do wallabag"
172
173msgid "Click here"
174msgstr "Clique aqui"
175
176msgid "to download your database."
177msgstr "para baixar seu banco de dados."
178
179msgid "to export your wallabag data."
180msgstr "para exportar seus dados do wallabag."
181
182msgid "Cache"
183msgstr "Cache"
184
185msgid "to delete cache."
186msgstr "para apagar o cache."
187
188msgid "You can enter multiple tags, separated by commas."
189msgstr "Você pode inserir várias tags, separadas por vírgulas."
190
191msgid "return to article"
192msgstr "retornar ao artigo"
193
194msgid "plop"
195msgstr "plop"
196
197msgid ""
198"You can <a href='wallabag_compatibility_test.php'>check your configuration "
199"here</a>."
200msgstr ""
201"Você pode <a href='wallabag_compatibility_test.php'>checar suas "
202"configurações aqui</a>."
203
204msgid "favoris"
205msgstr "favoritos"
206
207msgid "archive"
208msgstr "arquivo"
209
210msgid "unread"
211msgstr "não lidos"
212
213msgid "by date asc"
214msgstr "por data (cresc.)"
215
216msgid "by date"
217msgstr "por data"
218
219msgid "by date desc"
220msgstr "por data (decr.)"
221
222msgid "by title asc"
223msgstr "por título (cresc.)"
224
225msgid "by title"
226msgstr "por título"
227
228msgid "by title desc"
229msgstr "por título (decr.)"
230
231msgid "Tag"
232msgstr "Tag"
233
234msgid "No articles found."
235msgstr "Nenhum artigo encontrado."
236
237msgid "Toggle mark as read"
238msgstr "Alterar \"marcar como lido\""
239
240msgid "toggle favorite"
241msgstr "alterar \"favorito\""
242
243msgid "delete"
244msgstr "deletar"
245
246msgid "original"
247msgstr "original"
248
249msgid "estimated reading time:"
250msgstr "tempo estimado de leitura:"
251
252msgid "mark all the entries as read"
253msgstr "marcar todas as entradas como lidas"
254
255msgid "results"
256msgstr "resultados"
257
258msgid "installation"
259msgstr "instalação"
260
261msgid "install your wallabag"
262msgstr "instalar seu wallabag"
263
264msgid ""
265"wallabag is still not installed. Please fill the below form to install it. "
266"Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation "
267"on wallabag website</a>."
268msgstr ""
269"O wallabag ainda não está instalado. Preencha o formulário abaixo para "
270"instalá-lo. Não hesite em <a href='http://doc.wallabag.org/'>ler a "
271"documentação no site do wallabag</a>."
272
273msgid "Login"
274msgstr "Login"
275
276msgid "Repeat your password"
277msgstr "Repetir sua senha"
278
279msgid "Install"
280msgstr "Instalar"
281
282msgid "login to your wallabag"
283msgstr "entrar no seu wallabag"
284
285msgid "Login to wallabag"
286msgstr "Entrar no wallabag"
287
288msgid "you are in demo mode, some features may be disabled."
289msgstr "você está no modo demo, alguns recursos podem estar desativados."
290
291msgid "Username"
292msgstr "Nome de usuário"
293
294msgid "Stay signed in"
295msgstr "Continuar conectado"
296
297msgid "(Do not check on public computers)"
298msgstr "(Não marque em computadores públicos)"
299
300msgid "Sign in"
301msgstr "Entrar"
302
303msgid "favorites"
304msgstr "favoritos"
305
306msgid "estimated reading time :"
307msgstr "tempo estimado de leitura :"
308
309msgid "Mark all the entries as read"
310msgstr "Marcar todas as entradas como lidas"
311
312msgid "Return home"
313msgstr "Retornar à página inicial"
314
315msgid "Back to top"
316msgstr "Voltar ao topo"
317
318msgid "Mark as read"
319msgstr "Marcar como lido"
320
321msgid "Favorite"
322msgstr "Favoritar"
323
324msgid "Toggle favorite"
325msgstr "Alterar \"favorito\""
326
327msgid "Delete"
328msgstr "Deletar"
329
330msgid "Tweet"
331msgstr "Tweetar"
332
333msgid "Email"
334msgstr "Email"
335
336msgid "shaarli"
337msgstr "shaarli"
338
339msgid "flattr"
340msgstr "flattr"
341
342msgid "Does this article appear wrong?"
343msgstr "Esse artigo está sendo exibido incorretamente?"
344
345msgid "tags:"
346msgstr "tags:"
347
348msgid "Edit tags"
349msgstr "Editar tags"
350
351msgid "save link!"
352msgstr "salvar link!"
353
354msgid "home"
355msgstr "início"
356
357msgid "tags"
358msgstr "tags"
359
360msgid "logout"
361msgstr "sair"
362
363msgid "powered by"
364msgstr "powered by"
365
366msgid "debug mode is on so cache is off."
367msgstr "o modo debug está ativo, então o cache foi desativado."
368
369msgid "your wallabag version:"
370msgstr "sua versão do wallabag:"
371
372msgid "storage:"
373msgstr "armazenamento:"
374
375msgid "save a link"
376msgstr "salvar link"
377
378msgid "back to home"
379msgstr "voltar à página inicial"
380
381msgid "toggle mark as read"
382msgstr "alterar \"marcar como lido\""
383
384msgid "tweet"
385msgstr "tweetar"
386
387msgid "email"
388msgstr "email"
389
390msgid "this article appears wrong?"
391msgstr "esse artigo está sendo mostrado incorretamente?"
392
393msgid "No link available here!"
394msgstr "Nenhum link disponível aqui!"
395
396msgid "Poching a link"
397msgstr "Pocheando um link"
398
399msgid "by filling this field"
400msgstr "preenchendo esse campo"
401
402msgid "bookmarklet: drag & drop this link to your bookmarks bar"
403msgstr "bookmarklet: arraste esse link para a sua barra de favoritos"
404
405msgid "your version"
406msgstr "sua versão"
407
408msgid "latest stable version"
409msgstr "última versão estável"
410
411msgid "a more recent stable version is available."
412msgstr "uma versão estável mais nova está disponível"
413
414msgid "you are up to date."
415msgstr "você está atualizado."
416
417msgid "latest dev version"
418msgstr "última versão em desenvolvimento"
419
420msgid "a more recent development version is available."
421msgstr "uma versão em desenvolvimento mais nova está disponível"
422
423msgid "Please execute the import script locally, it can take a very long time."
424msgstr ""
425"Por favor, execute o script de importação localmente, pois pode demorar "
426"muito tempo."
427
428msgid "More infos in the official doc:"
429msgstr "Mais informações na documentação oficial:"
430
431msgid "import from Pocket"
432msgstr "importar do Pocket"
433
434msgid "import from Readability"
435msgstr "importar do Readability"
436
437msgid "import from Instapaper"
438msgstr "importar do Instapaper"
439
440msgid "Tags"
441msgstr "Tags"
442
443msgid "Untitled"
444msgstr "Sem título"
445
446msgid "the link has been added successfully"
447msgstr "o link foi adicionado com sucesso"
448
449msgid "error during insertion : the link wasn't added"
450msgstr "erro durante a inserção: o link não foi adicionado"
451
452msgid "the link has been deleted successfully"
453msgstr "o link foi deletado com sucesso"
454
455msgid "the link wasn't deleted"
456msgstr "o link não foi deletado"
457
458msgid "Article not found!"
459msgstr "Artigo não encontrado!"
460
461msgid "previous"
462msgstr "anterior"
463
464msgid "next"
465msgstr "próximo"
466
467msgid "in demo mode, you can't update your password"
468msgstr "você não pode alterar a senha no modo demo"
469
470msgid "your password has been updated"
471msgstr "sua senha foi atualizada"
472
473msgid ""
474"the two fields have to be filled & the password must be the same in the two "
475"fields"
476msgstr ""
477"os dois campos devem estar preenchidos e as senhas devem ser iguais em ambos"
478
479msgid "still using the \""
480msgstr "ainda usando o \""
481
482msgid "that theme does not seem to be installed"
483msgstr "esse tema aparentemente não está instalado"
484
485msgid "you have changed your theme preferences"
486msgstr "você alterou suas preferências de tema"
487
488msgid "that language does not seem to be installed"
489msgstr "esse idioma aparentemente não está instalado"
490
491msgid "you have changed your language preferences"
492msgstr "você alterou suas preferências de idioma"
493
494msgid "login failed: you have to fill all fields"
495msgstr "falha ao entrar: você deve preencher todos os campos"
496
497msgid "welcome to your wallabag"
498msgstr "bem-vindo ao seu wallabag"
499
500msgid "login failed: bad login or password"
501msgstr "falha ao entrar: login ou senha incorretos"
502
503msgid "import from instapaper completed"
504msgstr "importação do instapaper completa"
505
506msgid "import from pocket completed"
507msgstr "importação do pocket completa"
508
509msgid "import from Readability completed. "
510msgstr "importação do Readability completa. "
511
512msgid "import from Poche completed. "
513msgstr "importação do Poche completa. "
514
515msgid "Unknown import provider."
516msgstr "Serviço de importação desconhecido."
517
518msgid "Incomplete inc/poche/define.inc.php file, please define \""
519msgstr "Arquivo inc/poche/define.inc.php incompleto, por favor defina \""
520
521msgid "Could not find required \""
522msgstr "Não foi possível encontrar o requerido \""
523
524msgid "Uh, there is a problem while generating feeds."
525msgstr "Uh, houve um problema ao gerar os feeds."
526
527msgid "Cache deleted."
528msgstr "Cache deletado."
529
530msgid "Oops, it seems you don't have PHP 5."
531msgstr "Oops, parece que você não tem o PHP 5."
532
533#~ msgid "poche it!"
534#~ msgstr "poche it!"
535
536#~ msgid "Updating poche"
537#~ msgstr "Updating poche"
538
539#~ msgid "create an issue"
540#~ msgstr "create an issue"
541
542#~ msgid "or"
543#~ msgstr "or"
544
545#~ msgid "contact us by mail"
546#~ msgstr "contact us by mail"
547
548#~ msgid "your poche version:"
549#~ msgstr "your poche version:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.mo
new file mode 100755
index 00000000..5cbfad16
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.po b/src/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.po
new file mode 100755
index 00000000..08f12b7c
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/ru_RU.utf8/LC_MESSAGES/ru_RU.utf8.po
@@ -0,0 +1,561 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: \n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-02-25 15:09+0300\n"
6"PO-Revision-Date: \n"
7"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
8"Language-Team: \n"
9"Language: \n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Generator: Poedit 1.5.4\n"
14"X-Poedit-Language: Russian\n"
15"X-Poedit-Country: RUSSIA\n"
16"X-Poedit-SourceCharset: utf-8\n"
17"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
18
19msgid "wallabag, a read it later open source system"
20msgstr "wallabag, сервис отложенного чтения с открытым исходным кодом"
21
22msgid "login failed: user doesn't exist"
23msgstr "войти не удалось: пользователь не существует"
24
25msgid "return home"
26msgstr "на главную"
27
28msgid "config"
29msgstr "настройки"
30
31msgid "Saving articles"
32msgstr "Сохранение статей"
33
34#, fuzzy
35msgid "There are several ways to save an article:"
36msgstr "Существует несколько способов сохранить ссылку:"
37
38msgid "read the documentation"
39msgstr "читать инструкцию"
40
41msgid "download the extension"
42msgstr "скачать расширение"
43
44msgid "via F-Droid"
45msgstr "с F-Droid"
46
47msgid " or "
48msgstr "или"
49
50msgid "via Google Play"
51msgstr "с Google Play"
52
53msgid "download the application"
54msgstr "скачать приложение"
55
56msgid "By filling this field"
57msgstr "Заполнением этого поля"
58
59msgid "bag it!"
60msgstr "прикарманить!"
61
62msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
63msgstr "Закладка: перетащите и опустите ссылку на панель закладок"
64
65msgid "Upgrading wallabag"
66msgstr "Обновление wallabag"
67
68msgid "Installed version"
69msgstr "Установленная версия"
70
71msgid "Latest stable version"
72msgstr "Последняя стабильная версия"
73
74msgid "A more recent stable version is available."
75msgstr "Доступна новая стабильная версия."
76
77msgid "You are up to date."
78msgstr "У вас всё самое новое."
79
80#, fuzzy
81msgid "Latest dev version"
82msgstr "последняя версия в разработке"
83
84#, fuzzy
85msgid "A more recent development version is available."
86msgstr "есть более свежая версия в разработке."
87
88msgid "Feeds"
89msgstr "Ленты (feeds)"
90
91msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
92msgstr "Ваш маркер ленты (feed token) не определен, для того, чтобы активировать ленту, сначала создайте его. Нажмите <a href='?feed&action=generate'>здесь для его генерации</ а>."
93
94msgid "Unread feed"
95msgstr "Лента непрочитанного"
96
97msgid "Favorites feed"
98msgstr "Лента избранного"
99
100msgid "Archive feed"
101msgstr "Лента архива"
102
103msgid "Your token:"
104msgstr "Ваш маркер (token):"
105
106msgid "Your user id:"
107msgstr "Ваш идентификатор пользователя (user id):"
108
109msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
110msgstr "Вы можете создать новый ​​маркер: <a href='?feed&action=generate'>сгенерировать!</a>."
111
112msgid "Change your theme"
113msgstr "Изменить тему"
114
115msgid "Theme:"
116msgstr "Тема:"
117
118msgid "Update"
119msgstr "Обновить"
120
121msgid "Change your language"
122msgstr "Изменить язык"
123
124msgid "Language:"
125msgstr "Язык:"
126
127msgid "Change your password"
128msgstr "Смена пароля"
129
130msgid "New password:"
131msgstr "Новый пароль:"
132
133msgid "Password"
134msgstr "Пароль"
135
136msgid "Repeat your new password:"
137msgstr "Ещё раз новый пароль:"
138
139msgid "Import"
140msgstr "Импортировать"
141
142msgid "Please execute the import script locally as it can take a very long time."
143msgstr "Пожалуйста, выполните сценарий импорта локально - это может занять слишком много времени."
144
145#, fuzzy
146msgid "More info in the official documentation:"
147msgstr "Больше сведений в официальной документации:"
148
149msgid "Import from Pocket"
150msgstr "Импортировать из Pocket"
151
152#, php-format
153msgid "(you must have a %s file on your server)"
154msgstr "(файл %s должен присутствовать на вашем сервере)"
155
156msgid "Import from Readability"
157msgstr "Импортировать из Readability"
158
159msgid "Import from Instapaper"
160msgstr "Импортировать из Instapaper"
161
162msgid "Import from wallabag"
163msgstr "Импортировать из wallabag"
164
165msgid "Export your wallabag data"
166msgstr "Экспортировать данные wallabag"
167
168msgid "Click here"
169msgstr "Кликните здесь"
170
171msgid "to download your database."
172msgstr "чтобы скачать вашу базу данных"
173
174msgid "to export your wallabag data."
175msgstr "чтобы экспортировать свои записи из wallabag."
176
177msgid "Cache"
178msgstr "Кэш"
179
180msgid "to delete cache."
181msgstr "чтобы сбросить кэш."
182
183msgid "You can enter multiple tags, separated by commas."
184msgstr "Вы можете ввести несколько тегов, разделяя их запятой."
185
186msgid "return to article"
187msgstr "вернуться к статье"
188
189msgid "plop"
190msgstr "plop"
191
192msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
193msgstr "Вы можете <a href='wallabag_compatibility_test.php'>проверить конфигурацию здесь</a>."
194
195msgid "favoris"
196msgstr "избранное"
197
198msgid "archive"
199msgstr "архив"
200
201msgid "unread"
202msgstr "непрочитанное"
203
204msgid "by date asc"
205msgstr "по дате, сперва старые"
206
207msgid "by date"
208msgstr "по дате"
209
210msgid "by date desc"
211msgstr "по дате, сперва новые"
212
213msgid "by title asc"
214msgstr "по заголовку (прямой)"
215
216msgid "by title"
217msgstr "по заголовку"
218
219msgid "by title desc"
220msgstr "по заголовку (обратный)"
221
222msgid "Tag"
223msgstr "Тег"
224
225msgid "No articles found."
226msgstr "Статей не найдено."
227
228msgid "Toggle mark as read"
229msgstr "Изменить отметку 'прочитано'"
230
231msgid "toggle favorite"
232msgstr "изменить метку избранного"
233
234msgid "delete"
235msgstr "удалить"
236
237msgid "original"
238msgstr "источник"
239
240msgid "estimated reading time:"
241msgstr "ориентировочное время чтения:"
242
243msgid "mark all the entries as read"
244msgstr "отметить все статьи как прочитанные "
245
246msgid "results"
247msgstr "найдено"
248
249msgid "installation"
250msgstr "установка"
251
252msgid "install your wallabag"
253msgstr "установка wallabag"
254
255msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
256msgstr "wallabag всё ещё не установлен. Надо заполнить форму ниже, чтобы установить его. Неплохо также <a href='http://doc.wallabag.org'>прочесть документацию на сайте wallabag</a>."
257
258msgid "Login"
259msgstr "Имя пользователя"
260
261msgid "Repeat your password"
262msgstr "Повторите пароль"
263
264msgid "Install"
265msgstr "Установить"
266
267msgid "login to your wallabag"
268msgstr "войти в свой wallabag"
269
270msgid "Login to wallabag"
271msgstr "Войдите в wallabag"
272
273msgid "you are in demo mode, some features may be disabled."
274msgstr "демонстрационный режим - работают не все возможности."
275
276msgid "Username"
277msgstr "Имя пользователя"
278
279msgid "Stay signed in"
280msgstr "Запомнить меня"
281
282msgid "(Do not check on public computers)"
283msgstr "(Не отмечайте на чужих компьютерах)"
284
285msgid "Sign in"
286msgstr "Зарегистрироваться"
287
288msgid "favorites"
289msgstr "избранное"
290
291#, fuzzy
292msgid "estimated reading time :"
293msgstr "ориентировочное время чтения:"
294
295msgid "Mark all the entries as read"
296msgstr "Отметить все как прочитанное"
297
298msgid "Return home"
299msgstr "На главную"
300
301msgid "Back to top"
302msgstr "Наверх"
303
304msgid "Mark as read"
305msgstr "Отметить как прочитанное"
306
307msgid "Favorite"
308msgstr "Избранное"
309
310msgid "Toggle favorite"
311msgstr "Изменить метку избранного"
312
313msgid "Delete"
314msgstr "Удалить"
315
316msgid "Tweet"
317msgstr "Твитнуть"
318
319msgid "Email"
320msgstr "Отправить по почте"
321
322msgid "shaarli"
323msgstr "shaarli"
324
325msgid "flattr"
326msgstr "проспонсировать"
327
328msgid "Does this article appear wrong?"
329msgstr "Статья выглядит криво?"
330
331msgid "tags:"
332msgstr "теги:"
333
334msgid "Edit tags"
335msgstr "Редактировать теги"
336
337msgid "save link!"
338msgstr "сохранить ссылку!"
339
340msgid "home"
341msgstr "главная"
342
343msgid "tags"
344msgstr "теги"
345
346msgid "logout"
347msgstr "выход"
348
349msgid "powered by"
350msgstr "при поддержке"
351
352msgid "debug mode is on so cache is off."
353msgstr "включён режим отладки - кеш выключен."
354
355msgid "your wallabag version:"
356msgstr "Ваша версия wallabag:"
357
358msgid "storage:"
359msgstr "хранилище:"
360
361msgid "save a link"
362msgstr "сохранить ссылку"
363
364msgid "back to home"
365msgstr "домой"
366
367msgid "toggle mark as read"
368msgstr "изменить отметку 'прочитано'"
369
370msgid "tweet"
371msgstr "твитнуть"
372
373msgid "email"
374msgstr "email"
375
376#, fuzzy
377msgid "this article appears wrong?"
378msgstr "Статья выглядит криво?"
379
380msgid "No link available here!"
381msgstr "Здесь нет ссылки!"
382
383#, fuzzy
384msgid "Poching a link"
385msgstr "Сохранение ссылок"
386
387#, fuzzy
388msgid "by filling this field"
389msgstr "Заполнением этого поля"
390
391#, fuzzy
392msgid "bookmarklet: drag & drop this link to your bookmarks bar"
393msgstr "Закладка: перетащите и опустите ссылку на панель закладок"
394
395msgid "your version"
396msgstr "Ваша версия"
397
398#, fuzzy
399msgid "latest stable version"
400msgstr "Последняя стабильная версия"
401
402#, fuzzy
403msgid "a more recent stable version is available."
404msgstr "Доступна новая стабильная версия."
405
406msgid "you are up to date."
407msgstr "у вас всё самое новое."
408
409msgid "latest dev version"
410msgstr "последняя версия в разработке"
411
412msgid "a more recent development version is available."
413msgstr "есть более свежая версия в разработке."
414
415#, fuzzy
416msgid "Please execute the import script locally, it can take a very long time."
417msgstr "Пожалуйста, выполните сценарий импорта локально - это может занять слишком много времени."
418
419#, fuzzy
420msgid "More infos in the official doc:"
421msgstr "Больше сведений в официальной документации:"
422
423#, fuzzy
424msgid "import from Pocket"
425msgstr "Импортировать из Pocket"
426
427#, fuzzy
428msgid "import from Readability"
429msgstr "Импортировать из Readability"
430
431#, fuzzy
432msgid "import from Instapaper"
433msgstr "Импортировать из Instapaper"
434
435msgid "Tags"
436msgstr "Теги"
437
438msgid "Untitled"
439msgstr "Без названия"
440
441msgid "the link has been added successfully"
442msgstr "ссылка успешно добавлена"
443
444msgid "error during insertion : the link wasn't added"
445msgstr "ошибка во время вставки: ссылка не добавлена"
446
447msgid "the link has been deleted successfully"
448msgstr "ссылка успешно удалена"
449
450msgid "the link wasn't deleted"
451msgstr "ссылка не удалена"
452
453msgid "Article not found!"
454msgstr "Статью не найдено."
455
456msgid "previous"
457msgstr "предыдущая"
458
459msgid "next"
460msgstr "следующая"
461
462msgid "in demo mode, you can't update your password"
463msgstr "в демонстрационном режиме смена пароля не разрешена"
464
465msgid "your password has been updated"
466msgstr "ваш пароль обновлен"
467
468msgid "the two fields have to be filled & the password must be the same in the two fields"
469msgstr "необходимо заполнить оба поля и пароль в обоих должен совпадать"
470
471msgid "still using the \""
472msgstr "все еще используется \""
473
474msgid "that theme does not seem to be installed"
475msgstr "кажется, эта тема не установлена"
476
477msgid "you have changed your theme preferences"
478msgstr "вы изменили свои настройки темы"
479
480msgid "that language does not seem to be installed"
481msgstr "кажется, что этот язык не установлен"
482
483msgid "you have changed your language preferences"
484msgstr "вы изменили свои настройки языка"
485
486msgid "login failed: you have to fill all fields"
487msgstr "войти не удалось: вы должны заполнить все поля"
488
489msgid "welcome to your wallabag"
490msgstr "добро пожаловать в wallabag"
491
492msgid "login failed: bad login or password"
493msgstr "войти не удалось: неправильное имя пользователя или пароль"
494
495msgid "import from instapaper completed"
496msgstr "импорт из instapaper завершен"
497
498msgid "import from pocket completed"
499msgstr "импорт из pocket завершен"
500
501msgid "import from Readability completed. "
502msgstr "импорт из Readability завершен"
503
504msgid "import from Poche completed. "
505msgstr "импорт из Poche завершен."
506
507msgid "Unknown import provider."
508msgstr "Неизвестный провайдер импорта."
509
510msgid "Incomplete inc/poche/define.inc.php file, please define \""
511msgstr "Незавершенный файл inc/poche/define.inc.php file, пожалуйста определите \""
512
513msgid "Could not find required \""
514msgstr "Не удалось найти требуемый \""
515
516msgid "Uh, there is a problem while generating feeds."
517msgstr "Ох, возникла проблема при создании ленты."
518
519msgid "Cache deleted."
520msgstr "Кэш очищен. "
521
522msgid "Oops, it seems you don't have PHP 5."
523msgstr "Упс, кажется у вас не установлен PHP 5."
524
525#~ msgid "You can poche a link by several methods:"
526#~ msgstr "Вы можете сохранить ссылку несколькими путями:"
527
528#~ msgid "poche it!"
529#~ msgstr "прикарманить!"
530
531#~ msgid "Updating poche"
532#~ msgstr "Обновления poche"
533
534#, fuzzy
535#~ msgid "Export your poche datas"
536#~ msgstr "Экспортировать данные poche"
537
538#, fuzzy
539#~ msgid "to export your poche datas."
540#~ msgstr "чтобы экспортировать свои записи из poche."
541
542#~ msgid "your poche version:"
543#~ msgstr "ваша версия poche:"
544
545#~ msgid "Import from poche"
546#~ msgstr "Импортировать из poche"
547
548#~ msgid "welcome to your poche"
549#~ msgstr "добро пожаловать в ваш poche"
550
551#~ msgid "see you soon!"
552#~ msgstr "увидимся!"
553
554#~ msgid "create an issue"
555#~ msgstr "оповестить об ошибке"
556
557#~ msgid "or"
558#~ msgstr "или"
559
560#~ msgid "contact us by mail"
561#~ msgstr "связаться по почте"
diff --git a/src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.mo
new file mode 100644
index 00000000..5518fad1
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.po b/src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.po
new file mode 100644
index 00000000..8ad2eded
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/sl_SI.utf8/LC_MESSAGES/sl_SI.utf8.po
@@ -0,0 +1,568 @@
1#
2# Translators:
3# bungabunga, 2014
4msgid ""
5msgstr ""
6"Project-Id-Version: wallabag\n"
7"Report-Msgid-Bugs-To: \n"
8"POT-Creation-Date: 2014-02-25 15:12+0300\n"
9"PO-Revision-Date: 2014-02-25 15:12+0300\n"
10"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
11"Language-Team: Slovenian (Slovenia) (http://www.transifex.com/projects/p/wallabag/language/sl_SI/)\n"
12"Language: sl_SI\n"
13"MIME-Version: 1.0\n"
14"Content-Type: text/plain; charset=UTF-8\n"
15"Content-Transfer-Encoding: 8bit\n"
16"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3);\n"
17"X-Generator: Poedit 1.5.4\n"
18"X-Poedit-Language: Slovenian\n"
19"X-Poedit-Country: SLOVENIA\n"
20"X-Poedit-Basepath: .\n"
21"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
22
23msgid "wallabag, a read it later open source system"
24msgstr ""
25
26msgid "login failed: user doesn't exist"
27msgstr ""
28
29msgid "return home"
30msgstr ""
31
32msgid "config"
33msgstr "nastavitve"
34
35msgid "Saving articles"
36msgstr ""
37
38msgid "There are several ways to save an article:"
39msgstr ""
40
41msgid "read the documentation"
42msgstr "preberite dokumentacijo"
43
44msgid "download the extension"
45msgstr ""
46
47msgid "via F-Droid"
48msgstr ""
49
50msgid " or "
51msgstr ""
52
53msgid "via Google Play"
54msgstr ""
55
56msgid "download the application"
57msgstr ""
58
59#, fuzzy
60msgid "By filling this field"
61msgstr "z vnosom v to polje"
62
63msgid "bag it!"
64msgstr ""
65
66msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
67msgstr ""
68
69msgid "Upgrading wallabag"
70msgstr ""
71
72#, fuzzy
73msgid "Installed version"
74msgstr "zadnja stabilna različica"
75
76#, fuzzy
77msgid "Latest stable version"
78msgstr "zadnja stabilna različica"
79
80#, fuzzy
81msgid "A more recent stable version is available."
82msgstr "na voljo je nova stabilna različica."
83
84#, fuzzy
85msgid "You are up to date."
86msgstr "imate najnovejšo različico."
87
88#, fuzzy
89msgid "Latest dev version"
90msgstr "zadnja razvojna različica"
91
92#, fuzzy
93msgid "A more recent development version is available."
94msgstr "na voljo je nova razvojna različica."
95
96msgid "Feeds"
97msgstr ""
98
99msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
100msgstr ""
101
102msgid "Unread feed"
103msgstr ""
104
105#, fuzzy
106msgid "Favorites feed"
107msgstr "priljubljeni"
108
109#, fuzzy
110msgid "Archive feed"
111msgstr "arhiv"
112
113msgid "Your token:"
114msgstr ""
115
116msgid "Your user id:"
117msgstr ""
118
119msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
120msgstr ""
121
122#, fuzzy
123msgid "Change your theme"
124msgstr "Zamenjava gesla"
125
126msgid "Theme:"
127msgstr ""
128
129msgid "Update"
130msgstr "Posodobi"
131
132#, fuzzy
133msgid "Change your language"
134msgstr "Zamenjava gesla"
135
136msgid "Language:"
137msgstr ""
138
139msgid "Change your password"
140msgstr "Zamenjava gesla"
141
142msgid "New password:"
143msgstr "Novo geslo:"
144
145msgid "Password"
146msgstr "Geslo"
147
148msgid "Repeat your new password:"
149msgstr "Ponovite novo geslo:"
150
151msgid "Import"
152msgstr "Uvozi"
153
154#, fuzzy
155msgid "Please execute the import script locally as it can take a very long time."
156msgstr "Prosimo poženite skripto za uvoz lokalno, saj lahko postopek traja precej časa."
157
158#, fuzzy
159msgid "More info in the official documentation:"
160msgstr "Več informacij v uradni dokumentaciji:"
161
162#, fuzzy
163msgid "Import from Pocket"
164msgstr "Uvoz iz aplikacije Pocket"
165
166#, php-format
167msgid "(you must have a %s file on your server)"
168msgstr ""
169
170#, fuzzy
171msgid "Import from Readability"
172msgstr "Uvoz iz aplikacije Readability"
173
174#, fuzzy
175msgid "Import from Instapaper"
176msgstr "Uvoz iz aplikacije Instapaper"
177
178#, fuzzy
179msgid "Import from wallabag"
180msgstr "Uvoz iz aplikacije Readability"
181
182#, fuzzy
183msgid "Export your wallabag data"
184msgstr "Izvoz vsebine"
185
186msgid "Click here"
187msgstr "Kliknite tukaj"
188
189#, fuzzy
190msgid "to download your database."
191msgstr "za izvoz vsebine aplikacije Poche."
192
193#, fuzzy
194msgid "to export your wallabag data."
195msgstr "za izvoz vsebine aplikacije Poche."
196
197msgid "Cache"
198msgstr ""
199
200msgid "to delete cache."
201msgstr ""
202
203msgid "You can enter multiple tags, separated by commas."
204msgstr ""
205
206msgid "return to article"
207msgstr ""
208
209msgid "plop"
210msgstr "štrbunk"
211
212msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
213msgstr ""
214
215msgid "favoris"
216msgstr "priljubljeni"
217
218msgid "archive"
219msgstr "arhiv"
220
221msgid "unread"
222msgstr "neprebrano"
223
224msgid "by date asc"
225msgstr "po datumu - naraščajoče"
226
227msgid "by date"
228msgstr "po datumu"
229
230msgid "by date desc"
231msgstr "po datumu - padajoče"
232
233msgid "by title asc"
234msgstr "po naslovu - naraščajoče"
235
236msgid "by title"
237msgstr "po naslovu"
238
239msgid "by title desc"
240msgstr "po naslovu - padajoče"
241
242msgid "Tag"
243msgstr ""
244
245msgid "No articles found."
246msgstr ""
247
248#, fuzzy
249msgid "Toggle mark as read"
250msgstr "označi kot prebrano"
251
252msgid "toggle favorite"
253msgstr "označi kot priljubljeno"
254
255msgid "delete"
256msgstr "zavrzi"
257
258msgid "original"
259msgstr "izvirnik"
260
261msgid "estimated reading time:"
262msgstr ""
263
264msgid "mark all the entries as read"
265msgstr ""
266
267msgid "results"
268msgstr "rezultati"
269
270msgid "installation"
271msgstr "Namestitev"
272
273#, fuzzy
274msgid "install your wallabag"
275msgstr "Namestitev aplikacije Poche"
276
277#, fuzzy
278msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
279msgstr "Poche še vedno ni nameščen. Za namestitev izpolnite spodnji obrazec. Za več informacij <a href='http://inthepoche.com/doc'>preberite dokumentacijo na spletni strani</a>."
280
281msgid "Login"
282msgstr "Prijava"
283
284msgid "Repeat your password"
285msgstr "Ponovite geslo"
286
287msgid "Install"
288msgstr "Namesti"
289
290#, fuzzy
291msgid "login to your wallabag"
292msgstr "prijavite se v svoj Poche"
293
294msgid "Login to wallabag"
295msgstr ""
296
297msgid "you are in demo mode, some features may be disabled."
298msgstr "uporabljate vzorčno različico programa, zato so lahko nekatere funkcije izklopljene."
299
300msgid "Username"
301msgstr ""
302
303msgid "Stay signed in"
304msgstr "Ostani prijavljen"
305
306msgid "(Do not check on public computers)"
307msgstr "(Ne označi na javnih napravah)"
308
309msgid "Sign in"
310msgstr "Prijava"
311
312msgid "favorites"
313msgstr "priljubljeni"
314
315msgid "estimated reading time :"
316msgstr ""
317
318msgid "Mark all the entries as read"
319msgstr ""
320
321msgid "Return home"
322msgstr ""
323
324#, fuzzy
325msgid "Back to top"
326msgstr "nazaj na vrh"
327
328#, fuzzy
329msgid "Mark as read"
330msgstr "označi kot prebrano"
331
332#, fuzzy
333msgid "Favorite"
334msgstr "priljubljeni"
335
336#, fuzzy
337msgid "Toggle favorite"
338msgstr "označi kot priljubljeno"
339
340#, fuzzy
341msgid "Delete"
342msgstr "zavrzi"
343
344#, fuzzy
345msgid "Tweet"
346msgstr "tvitni"
347
348#, fuzzy
349msgid "Email"
350msgstr "pošlji po e-pošti"
351
352msgid "shaarli"
353msgstr "shaarli"
354
355msgid "flattr"
356msgstr "flattr"
357
358#, fuzzy
359msgid "Does this article appear wrong?"
360msgstr "napaka?"
361
362msgid "tags:"
363msgstr ""
364
365msgid "Edit tags"
366msgstr ""
367
368msgid "save link!"
369msgstr ""
370
371msgid "home"
372msgstr "domov"
373
374msgid "tags"
375msgstr ""
376
377msgid "logout"
378msgstr "odjava"
379
380msgid "powered by"
381msgstr "stran poganja"
382
383msgid "debug mode is on so cache is off."
384msgstr "vklopljen je način odpravljanja napak, zato je predpomnilnik izključen."
385
386#, fuzzy
387msgid "your wallabag version:"
388msgstr "vaša različica"
389
390msgid "storage:"
391msgstr "pomnilnik:"
392
393msgid "save a link"
394msgstr ""
395
396msgid "back to home"
397msgstr "Nazaj domov"
398
399msgid "toggle mark as read"
400msgstr "označi kot prebrano"
401
402msgid "tweet"
403msgstr "tvitni"
404
405msgid "email"
406msgstr "pošlji po e-pošti"
407
408msgid "this article appears wrong?"
409msgstr "napaka?"
410
411msgid "No link available here!"
412msgstr "Povezava ni na voljo!"
413
414msgid "Poching a link"
415msgstr "Shrani povezavo"
416
417msgid "by filling this field"
418msgstr "z vnosom v to polje"
419
420msgid "bookmarklet: drag & drop this link to your bookmarks bar"
421msgstr ""
422
423msgid "your version"
424msgstr "vaša različica"
425
426msgid "latest stable version"
427msgstr "zadnja stabilna različica"
428
429msgid "a more recent stable version is available."
430msgstr "na voljo je nova stabilna različica."
431
432msgid "you are up to date."
433msgstr "imate najnovejšo različico."
434
435msgid "latest dev version"
436msgstr "zadnja razvojna različica"
437
438msgid "a more recent development version is available."
439msgstr "na voljo je nova razvojna različica."
440
441msgid "Please execute the import script locally, it can take a very long time."
442msgstr "Prosimo poženite skripto za uvoz lokalno, saj lahko postopek traja precej časa."
443
444msgid "More infos in the official doc:"
445msgstr "Več informacij v uradni dokumentaciji:"
446
447msgid "import from Pocket"
448msgstr "Uvoz iz aplikacije Pocket"
449
450msgid "import from Readability"
451msgstr "Uvoz iz aplikacije Readability"
452
453msgid "import from Instapaper"
454msgstr "Uvoz iz aplikacije Instapaper"
455
456msgid "Tags"
457msgstr ""
458
459#, fuzzy
460msgid "Untitled"
461msgstr "po naslovu"
462
463msgid "the link has been added successfully"
464msgstr ""
465
466msgid "error during insertion : the link wasn't added"
467msgstr ""
468
469msgid "the link has been deleted successfully"
470msgstr ""
471
472msgid "the link wasn't deleted"
473msgstr ""
474
475msgid "Article not found!"
476msgstr ""
477
478msgid "previous"
479msgstr ""
480
481msgid "next"
482msgstr ""
483
484msgid "in demo mode, you can't update your password"
485msgstr ""
486
487msgid "your password has been updated"
488msgstr ""
489
490msgid "the two fields have to be filled & the password must be the same in the two fields"
491msgstr ""
492
493msgid "still using the \""
494msgstr ""
495
496msgid "that theme does not seem to be installed"
497msgstr ""
498
499msgid "you have changed your theme preferences"
500msgstr ""
501
502msgid "that language does not seem to be installed"
503msgstr ""
504
505msgid "you have changed your language preferences"
506msgstr ""
507
508msgid "login failed: you have to fill all fields"
509msgstr ""
510
511msgid "welcome to your wallabag"
512msgstr ""
513
514msgid "login failed: bad login or password"
515msgstr ""
516
517#, fuzzy
518msgid "import from instapaper completed"
519msgstr "Uvoz iz aplikacije Instapaper"
520
521#, fuzzy
522msgid "import from pocket completed"
523msgstr "Uvoz iz aplikacije Pocket"
524
525#, fuzzy
526msgid "import from Readability completed. "
527msgstr "Uvoz iz aplikacije Readability"
528
529#, fuzzy
530msgid "import from Poche completed. "
531msgstr "Uvoz iz aplikacije Pocket"
532
533msgid "Unknown import provider."
534msgstr ""
535
536msgid "Incomplete inc/poche/define.inc.php file, please define \""
537msgstr ""
538
539msgid "Could not find required \""
540msgstr ""
541
542msgid "Uh, there is a problem while generating feeds."
543msgstr ""
544
545#, fuzzy
546msgid "Cache deleted."
547msgstr "zavrzi"
548
549msgid "Oops, it seems you don't have PHP 5."
550msgstr ""
551
552#~ msgid "poche it!"
553#~ msgstr "shrani!"
554
555#~ msgid "Updating poche"
556#~ msgstr "Posodabljam Poche"
557
558#~ msgid "create an issue"
559#~ msgstr "prijavi napako"
560
561#~ msgid "or"
562#~ msgstr "ali"
563
564#~ msgid "contact us by mail"
565#~ msgstr "pošlji e-pošto razvijalcem"
566
567#~ msgid "your poche version:"
568#~ msgstr "vaša verzija Poche:"
diff --git a/src/Wallabag/Wallabag/Resources/translations/tools/fillCache.php b/src/Wallabag/Wallabag/Resources/translations/tools/fillCache.php
new file mode 100755
index 00000000..bdd9cc58
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/tools/fillCache.php
@@ -0,0 +1,59 @@
1<?php
2
3// this script compile all twig templates and put it in cahce to get Poedit (or xgettext) to extract phrases fron chached templates.
4
5// gettext command line tools:
6// msgunfmt - get po from mo
7// msgfmt - get mo from po
8// xgettext - extract phrases from files
9
10
11 $siteRoot = dirname(__FILE__) . '/../..';
12
13 require_once $siteRoot . '/vendor/twig/twig/lib/Twig/Autoloader.php';
14 Twig_Autoloader::register();
15
16 require_once $siteRoot . '/vendor/twig/extensions/lib/Twig/Extensions/Autoloader.php';
17 Twig_Extensions_Autoloader::register();
18
19 //$tplDir = $siteRoot.'/themes/default';
20 $tplDirRoot = $siteRoot.'/themes/';
21 $tmpDir = $siteRoot. '/cache/';
22
23 foreach (new IteratorIterator(new DirectoryIterator($tplDirRoot)) as $tplDir) {
24
25 if ($tplDir->isDir() and $tplDir!='.' and $tplDir!='..') {
26 echo "\n$tplDir\n";
27
28 $loader = new Twig_Loader_Filesystem($tplDirRoot.$tplDir);
29
30 // force auto-reload to always have the latest version of the template
31 $twig = new Twig_Environment($loader, array(
32 'cache' => $tmpDir,
33 'auto_reload' => true
34 ));
35
36 $twig->addExtension(new Twig_Extensions_Extension_I18n());
37
38 $filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain');
39 $twig->addFilter($filter);
40
41 $filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime');
42 $twig->addFilter($filter);
43
44 $filter = new Twig_SimpleFilter('getPrettyFilename', function($string) { return str_replace($siteRoot, '', $string); });
45 $twig->addFilter($filter);
46
47// // iterate over all your templates
48 foreach (new RecursiveIteratorIterator(new RecursiveDirectoryIterator($tplDirRoot.$tplDir), RecursiveIteratorIterator::LEAVES_ONLY) as $file) {
49 // force compilation
50 if ($file->isFile() and pathinfo($file, PATHINFO_EXTENSION)=='twig') {
51 echo "\t$file\n";
52 $twig->loadTemplate(str_replace($tplDirRoot.$tplDir.'/', '', $file));
53 }
54 }
55
56 }
57
58 }
59
diff --git a/src/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.mo b/src/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.mo
new file mode 100755
index 00000000..4884abf5
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.mo
Binary files differ
diff --git a/src/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.po b/src/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.po
new file mode 100755
index 00000000..08797705
--- /dev/null
+++ b/src/Wallabag/Wallabag/Resources/translations/uk_UA.utf8/LC_MESSAGES/uk_UA.utf8.po
@@ -0,0 +1,534 @@
1msgid ""
2msgstr ""
3"Project-Id-Version: wballabag\n"
4"Report-Msgid-Bugs-To: \n"
5"POT-Creation-Date: 2014-02-25 15:06+0300\n"
6"PO-Revision-Date: 2014-02-25 15:08+0300\n"
7"Last-Translator: Maryana <mariroz@mr.lviv.ua>\n"
8"Language-Team: \n"
9"Language: \n"
10"MIME-Version: 1.0\n"
11"Content-Type: text/plain; charset=UTF-8\n"
12"Content-Transfer-Encoding: 8bit\n"
13"X-Poedit-KeywordsList: _;gettext;gettext_noop\n"
14"X-Poedit-Basepath: .\n"
15"X-Poedit-Language: Ukrainian\n"
16"X-Poedit-Country: UKRAINE\n"
17"X-Poedit-SourceCharset: utf-8\n"
18"X-Poedit-SearchPath-0: /home/mariroz/_DEV/web/wallabag/wallabag-master-testing\n"
19
20msgid "wallabag, a read it later open source system"
21msgstr "wallabag, сервіс відкладеного читання з відкритим кодом"
22
23msgid "login failed: user doesn't exist"
24msgstr "увійти не вдалося: користувач не існує"
25
26msgid "return home"
27msgstr "повернутися на головну"
28
29msgid "config"
30msgstr "налаштування"
31
32msgid "Saving articles"
33msgstr "Зберігання посилань"
34
35msgid "There are several ways to save an article:"
36msgstr "Є кілька способів зберегти статтю:"
37
38msgid "read the documentation"
39msgstr "читати документацію"
40
41msgid "download the extension"
42msgstr "завантажити розширення"
43
44msgid "via F-Droid"
45msgstr "через F-Droid"
46
47msgid " or "
48msgstr "або"
49
50msgid "via Google Play"
51msgstr "через Google Play"
52
53msgid "download the application"
54msgstr "завантажити додаток"
55
56msgid "By filling this field"
57msgstr "Заповнивши це поле"
58
59msgid "bag it!"
60msgstr "зберегти!"
61
62msgid "Bookmarklet: drag & drop this link to your bookmarks bar"
63msgstr "З допомогою закладки: перетягніть і відпустіть посилання на панель закладок"
64
65msgid "Upgrading wallabag"
66msgstr "Оновлення wallabag"
67
68msgid "Installed version"
69msgstr "Встановлено ​​версію"
70
71msgid "Latest stable version"
72msgstr "Остання стабільна версія"
73
74msgid "A more recent stable version is available."
75msgstr "Є новіша стабільна версія."
76
77msgid "You are up to date."
78msgstr "У вас остання версія."
79
80msgid "Latest dev version"
81msgstr "Остання версія в розробці"
82
83msgid "A more recent development version is available."
84msgstr "Доступна новіша версія в розробці."
85
86msgid "Feeds"
87msgstr "Завантаження (feeds)"
88
89msgid "Your feed token is currently empty and must first be generated to enable feeds. Click <a href='?feed&amp;action=generate'>here to generate it</a>."
90msgstr "Ваш маркер завантажень (feed token) не визначено, ви повинні спочатку згенерувати його для того, щоб активувати завантаження. Натисніть <a href='?feed&action=generate'>тут для його генерації</ A>."
91
92msgid "Unread feed"
93msgstr "Завантаження непрочитаного"
94
95msgid "Favorites feed"
96msgstr "Завантаження вибраного"
97
98msgid "Archive feed"
99msgstr "Завантаження архіву"
100
101msgid "Your token:"
102msgstr "Ваш маркер (token): "
103
104msgid "Your user id:"
105msgstr "Ваш ідентифікатор користувача (user id):"
106
107msgid "You can regenerate your token: <a href='?feed&amp;action=generate'>generate!</a>."
108msgstr "Ви можете перестворити ваш маркер: натисніть <a href='?feed&amp;action=generate'>згенерувати!</a>."
109
110msgid "Change your theme"
111msgstr "Змінити тему"
112
113msgid "Theme:"
114msgstr "Тема:"
115
116msgid "Update"
117msgstr "Оновити"
118
119msgid "Change your language"
120msgstr "Змінити мову"
121
122msgid "Language:"
123msgstr "Мова:"
124
125msgid "Change your password"
126msgstr "Зміна паролю"
127
128msgid "New password:"
129msgstr "Новий пароль:"
130
131msgid "Password"
132msgstr "Пароль"
133
134msgid "Repeat your new password:"
135msgstr "Новий пароль ще раз:"
136
137msgid "Import"
138msgstr "Імпортування"
139
140msgid "Please execute the import script locally as it can take a very long time."
141msgstr "Будь ласка, виконайте сценарій імпорту локально, оскільки це може тривати досить довго."
142
143msgid "More info in the official documentation:"
144msgstr "Більше інформації в офіційній документації:"
145
146msgid "Import from Pocket"
147msgstr "Імпорт з Pocket-а"
148
149#, php-format
150msgid "(you must have a %s file on your server)"
151msgstr "(файл %s повинен бути присутнім на вашому сервері)"
152
153msgid "Import from Readability"
154msgstr "Імпорт з Readability"
155
156msgid "Import from Instapaper"
157msgstr "Імпорт з Instapaper"
158
159msgid "Import from wallabag"
160msgstr "Імпорт з wallabag"
161
162msgid "Export your wallabag data"
163msgstr "Експортувати ваші дані з wallabag"
164
165msgid "Click here"
166msgstr "Клікніть тут"
167
168msgid "to download your database."
169msgstr "щоб завантажити вашу базу даних."
170
171msgid "to export your wallabag data."
172msgstr "щоб експортувати ваші дані wallabag."
173
174msgid "Cache"
175msgstr "Кеш"
176
177msgid "to delete cache."
178msgstr "щоб очистити кеш."
179
180msgid "You can enter multiple tags, separated by commas."
181msgstr "Ви можете ввести декілька тегів, розділених комами."
182
183msgid "return to article"
184msgstr "повернутися до статті"
185
186msgid "plop"
187msgstr "plop"
188
189msgid "You can <a href='wallabag_compatibility_test.php'>check your configuration here</a>."
190msgstr "Ви можете <a href='wallabag_compatibility_test.php'>перевірити вашу конфігурацію тут</a>."
191
192msgid "favoris"
193msgstr "вибране"
194
195msgid "archive"
196msgstr "архів"
197
198msgid "unread"
199msgstr "непрочитане"
200
201msgid "by date asc"
202msgstr "за датою по зростанню"
203
204msgid "by date"
205msgstr "за датою"
206
207msgid "by date desc"
208msgstr "за датою по спаданню"
209
210msgid "by title asc"
211msgstr "за назвою по зростанню"
212
213msgid "by title"
214msgstr "за назвою"
215
216msgid "by title desc"
217msgstr "за назвою по спаданню"
218
219msgid "Tag"
220msgstr "Тег"
221
222msgid "No articles found."
223msgstr "Статей не знайдено."
224
225msgid "Toggle mark as read"
226msgstr "змінити мітку прочитаного"
227
228msgid "toggle favorite"
229msgstr "змінити мітку вибраного"
230
231msgid "delete"
232msgstr "видалити"
233
234msgid "original"
235msgstr "оригінал"
236
237msgid "estimated reading time:"
238msgstr "приблизний час читання:"
239
240msgid "mark all the entries as read"
241msgstr "відмітити всі статті як прочитані"
242
243msgid "results"
244msgstr "результат(ів)"
245
246msgid "installation"
247msgstr "інсталяція"
248
249msgid "install your wallabag"
250msgstr "встановити wallabag"
251
252msgid "wallabag is still not installed. Please fill the below form to install it. Don't hesitate to <a href='http://doc.wallabag.org/'>read the documentation on wallabag website</a>."
253msgstr "wallabag ще не встановлено. Будь ласка, заповніть форму нижче, щоб його встановити. Ви можете <a href='http://doc.wallabag.org/'>звертутися до документації на сайті wallabag</ A>."
254
255msgid "Login"
256msgstr "Логін"
257
258msgid "Repeat your password"
259msgstr "Пароль ще раз"
260
261msgid "Install"
262msgstr "Встановити"
263
264msgid "login to your wallabag"
265msgstr "увійти до wallabag"
266
267msgid "Login to wallabag"
268msgstr "Увійти до wallabag"
269
270msgid "you are in demo mode, some features may be disabled."
271msgstr "ви в демонстраційному режимі, деякі функції можуть бути відключені."
272
273msgid "Username"
274msgstr "Ім’я користувача"
275
276msgid "Stay signed in"
277msgstr "Запам'ятати мене"
278
279msgid "(Do not check on public computers)"
280msgstr "(Не відмічайте на загальнодоступних комп'ютерах)"
281
282msgid "Sign in"
283msgstr "Увійти"
284
285msgid "favorites"
286msgstr "вибране"
287
288msgid "estimated reading time :"
289msgstr "приблизний час читання:"
290
291msgid "Mark all the entries as read"
292msgstr "Відмітити все як прочитане"
293
294msgid "Return home"
295msgstr "Повернутися на головну"
296
297msgid "Back to top"
298msgstr "Догори"
299
300msgid "Mark as read"
301msgstr "Відмітити як прочитано/не прочитано"
302
303msgid "Favorite"
304msgstr "Вибране"
305
306msgid "Toggle favorite"
307msgstr "Відмітити як вибране/не вибране"
308
309msgid "Delete"
310msgstr "Видалити"
311
312msgid "Tweet"
313msgstr "Твітнути"
314
315msgid "Email"
316msgstr "Надіслати по e-mail"
317
318msgid "shaarli"
319msgstr "shaarli"
320
321msgid "flattr"
322msgstr "flattr"
323
324msgid "Does this article appear wrong?"
325msgstr "Ця стаття виглядає не так, як треба?"
326
327msgid "tags:"
328msgstr "теги:"
329
330msgid "Edit tags"
331msgstr "Редагувати теги"
332
333msgid "save link!"
334msgstr "зберегти лінк!"
335
336msgid "home"
337msgstr "головна"
338
339msgid "tags"
340msgstr "теги"
341
342msgid "logout"
343msgstr "вихід"
344
345msgid "powered by"
346msgstr "за підтримки"
347
348msgid "debug mode is on so cache is off."
349msgstr "режим відладки включено, отже кеш виключено."
350
351msgid "your wallabag version:"
352msgstr "версія вашого wallabag:"
353
354msgid "storage:"
355msgstr "сховище:"
356
357msgid "save a link"
358msgstr "зберегти лінк"
359
360msgid "back to home"
361msgstr "назад на головну"
362
363msgid "toggle mark as read"
364msgstr "змінити мітку на прочитано"
365
366msgid "tweet"
367msgstr "твітнути"
368
369msgid "email"
370msgstr "email"
371
372msgid "this article appears wrong?"
373msgstr "ця стаття виглядає не так, як треба?"
374
375msgid "No link available here!"
376msgstr "Немає доступних посилань!"
377
378msgid "Poching a link"
379msgstr "Зберігання посилання"
380
381msgid "by filling this field"
382msgstr "заповнивши це поле"
383
384msgid "bookmarklet: drag & drop this link to your bookmarks bar"
385msgstr "з допомогою закладки: перетягніть і відпустіть посилання на панель закладок"
386
387msgid "your version"
388msgstr "ваша версія:"
389
390msgid "latest stable version"
391msgstr "остання стабільна версія"
392
393msgid "a more recent stable version is available."
394msgstr "є новіша стабільна версія."
395
396msgid "you are up to date."
397msgstr "у вас остання версія."
398
399msgid "latest dev version"
400msgstr "остання версія в розробці"
401
402msgid "a more recent development version is available."
403msgstr "доступна новіша версія в розробці."
404
405msgid "Please execute the import script locally, it can take a very long time."
406msgstr "Будь ласка, виконайте сценарій імпорту локально, оскільки це може тривати досить довго."
407
408msgid "More infos in the official doc:"
409msgstr "Більше інформації в офіційній документації:"
410
411msgid "import from Pocket"
412msgstr "імпорт з Pocket-а"
413
414msgid "import from Readability"
415msgstr "імпорт з Readability"
416
417msgid "import from Instapaper"
418msgstr "імпорт з Instapaper"
419
420msgid "Tags"
421msgstr "Теги"
422
423msgid "Untitled"
424msgstr "Без назви"
425
426msgid "the link has been added successfully"
427msgstr "посилання успішно додано"
428
429msgid "error during insertion : the link wasn't added"
430msgstr "помилка при вставці: посилання не додано"
431
432msgid "the link has been deleted successfully"
433msgstr "посилання успішно видалено"
434
435msgid "the link wasn't deleted"
436msgstr "посилання не було видалено"
437
438msgid "Article not found!"
439msgstr "Статтю не знайдено!"
440
441msgid "previous"
442msgstr "попередня"
443
444msgid "next"
445msgstr "наступна"
446
447msgid "in demo mode, you can't update your password"
448msgstr "в демонстраційному режимі ви не можете змінювати свій пароль"
449
450msgid "your password has been updated"
451msgstr "ваш пароль змінено"
452
453msgid "the two fields have to be filled & the password must be the same in the two fields"
454msgstr "обидва поля повинні бути заповнені і пароль повинен співпадати в обох"
455
456msgid "still using the \""
457msgstr "досі використовується \""
458
459msgid "that theme does not seem to be installed"
460msgstr "виглядає, що цю тему не було встановлено"
461
462msgid "you have changed your theme preferences"
463msgstr "ви змінили налаштування своєї теми"
464
465msgid "that language does not seem to be installed"
466msgstr "виглядає, що цю мову не було встановлено"
467
468msgid "you have changed your language preferences"
469msgstr "ви змінили свої налаштування мови"
470
471msgid "login failed: you have to fill all fields"
472msgstr "увійти не вдалося: ви повинні заповнити всі поля"
473
474msgid "welcome to your wallabag"
475msgstr "ласкаво просимо до вашого wallabag"
476
477msgid "login failed: bad login or password"
478msgstr "увійти не вдалося: не вірний логін або пароль"
479
480msgid "import from instapaper completed"
481msgstr "імпорт з instapaper-а завершено"
482
483msgid "import from pocket completed"
484msgstr "імпорт з pocket-а завершено"
485
486msgid "import from Readability completed. "
487msgstr "імпорт з Readability завершено"
488
489msgid "import from Poche completed. "
490msgstr "імпорт з Poche завершено."
491
492msgid "Unknown import provider."
493msgstr "Невідомий провайдер імпорту."
494
495msgid "Incomplete inc/poche/define.inc.php file, please define \""
496msgstr "Неповний файл inc/poche/define.inc.php, будь ласка, визначте \""
497
498msgid "Could not find required \""
499msgstr "Не вдалося знайти потрібний \""
500
501msgid "Uh, there is a problem while generating feeds."
502msgstr "Ох, є проблема при створенні завантажень (feeds)."
503
504msgid "Cache deleted."
505msgstr "Кеш очищено."
506
507msgid "Oops, it seems you don't have PHP 5."
508msgstr "Упс, здається, у вас немає PHP 5."
509
510#~ msgid "You can poche a link by several methods:"
511#~ msgstr "Ви можете зберегти посилання кількома способами:"
512
513#~ msgid "poche it!"
514#~ msgstr "зберегти!"
515
516#~ msgid "Updating poche"
517#~ msgstr "Оновлення poche"
518
519#, fuzzy
520#~ msgid "Export your poche datas"
521#~ msgstr "Експортувати ваші дані з poche"
522
523#, fuzzy
524#~ msgid "to export your poche datas."
525#~ msgstr "щоб експортувати ваші дані poche."
526
527#~ msgid "Import from poche"
528#~ msgstr "Імпорт з poche"
529
530#~ msgid "welcome to your poche"
531#~ msgstr "ласкаво просимо до вашого poche"
532
533#~ msgid "see you soon!"
534#~ msgstr "бувайте, ще побачимось!"
diff --git a/src/Wallabag/Wallabag/Routing.php b/src/Wallabag/Wallabag/Routing.php
new file mode 100755
index 00000000..85b6af1e
--- /dev/null
+++ b/src/Wallabag/Wallabag/Routing.php
@@ -0,0 +1,163 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class Routing
14{
15 protected $wallabag;
16 protected $referer;
17 protected $view;
18 protected $action;
19 protected $id;
20 protected $url;
21 protected $file;
22 protected $defaultVars = array();
23 protected $vars = array();
24
25 public function __construct(Wallabag $wallabag)
26 {
27 $this->wallabag = $wallabag;
28 $this->_init();
29 }
30
31 private function _init()
32 {
33 # Parse GET & REFERER vars
34 $this->referer = empty($_SERVER['HTTP_REFERER']) ? '' : $_SERVER['HTTP_REFERER'];
35 $this->view = Tools::checkVar('view', 'home');
36 $this->action = Tools::checkVar('action');
37 $this->id = Tools::checkVar('id');
38 $_SESSION['sort'] = Tools::checkVar('sort', 'id');
39 $this->url = new Url((isset ($_GET['url'])) ? $_GET['url'] : '');
40 }
41
42 public function run()
43 {
44 # vars to _always_ send to templates
45 $this->defaultVars = array(
46 'referer' => $this->referer,
47 'view' => $this->view,
48 'poche_url' => Tools::getPocheUrl(),
49 'title' => _('wallabag, a read it later open source system'),
50 'token' => \Session::getToken(),
51 'theme' => $this->wallabag->tpl->getTheme()
52 );
53
54 $this->_launchAction();
55 $this->_defineTplInformation();
56
57 # because messages can be added in $poche->action(), we have to add this entry now (we can add it before)
58 $this->vars = array_merge($this->vars, array('messages' => $this->wallabag->messages->display('all', FALSE)));
59
60 $this->_render($this->file, $this->vars);
61 }
62
63 private function _defineTplInformation()
64 {
65 $tplFile = array();
66 $tplVars = array();
67
68 if (\Session::isLogged()) {
69 $this->wallabag->action($this->action, $this->url, $this->id);
70 $tplFile = Tools::getTplFile($this->view);
71 $tplVars = array_merge($this->vars, $this->wallabag->displayView($this->view, $this->id));
72 } elseif(isset($_SERVER['PHP_AUTH_USER'])) {
73 if($this->wallabag->store->userExists($_SERVER['PHP_AUTH_USER'])) {
74 $this->wallabag->login($this->referer);
75 } else {
76 $this->wallabag->messages->add('e', _('login failed: user doesn\'t exist'));
77 Tools::logm('user doesn\'t exist');
78 $tplFile = Tools::getTplFile('login');
79 $tplVars['http_auth'] = 1;
80 }
81 } elseif(isset($_SERVER['REMOTE_USER'])) {
82 if($this->wallabag->store->userExists($_SERVER['REMOTE_USER'])) {
83 $this->wallabag->login($this->referer);
84 } else {
85 $this->wallabag->messages->add('e', _('login failed: user doesn\'t exist'));
86 Tools::logm('user doesn\'t exist');
87 $tplFile = Tools::getTplFile('login');
88 $tplVars['http_auth'] = 1;
89 }
90 } else {
91 $tplFile = Tools::getTplFile('login');
92 $tplVars['http_auth'] = 0;
93 \Session::logout();
94 }
95
96 $this->file = $tplFile;
97 $this->vars = array_merge($this->defaultVars, $tplVars);
98 }
99
100 private function _launchAction()
101 {
102 if (isset($_GET['login'])) {
103 // hello to you
104 $this->wallabag->login($this->referer);
105 } elseif (isset($_GET['feed']) && isset($_GET['user_id'])) {
106 $tag_id = (isset($_GET['tag_id']) ? intval($_GET['tag_id']) : 0);
107 $limit = (isset($_GET['limit']) ? intval($_GET['limit']) : 0);
108 $this->wallabag->generateFeeds($_GET['token'], filter_var($_GET['user_id'],FILTER_SANITIZE_NUMBER_INT), $tag_id, $_GET['type'], $limit);
109 }
110
111 //allowed ONLY to logged in user
112 if (\Session::isLogged() === true)
113 {
114 if (isset($_GET['logout'])) {
115 // see you soon !
116 $this->wallabag->logout();
117 } elseif (isset($_GET['config'])) {
118 // update password
119 $this->wallabag->updatePassword($_POST['password'], $_POST['password_repeat']);
120 } elseif (isset($_GET['newuser'])) {
121 $this->wallabag->createNewUser($_POST['newusername'], $_POST['password4newuser']);
122 } elseif (isset($_GET['deluser'])) {
123 $this->wallabag->deleteUser($_POST['password4deletinguser']);
124 } elseif (isset($_GET['epub'])) {
125 $epub = new WallabagEpub($this->wallabag, $_GET['method'], $_GET['value']);
126 $epub->prepareData();
127 $epub->produceEpub();
128 } elseif (isset($_GET['mobi'])) {
129 $mobi = new WallabagMobi($this->wallabag, $_GET['method'], $_GET['value']);
130 $mobi->prepareData();
131 $mobi->produceMobi();
132 } elseif (isset($_GET['pdf'])) {
133 $pdf = new WallabagPDF($this->wallabag, $_GET['method'], $_GET['value']);
134 $pdf->prepareData();
135 $pdf->producePDF();
136 } elseif (isset($_GET['import'])) {
137 $import = $this->wallabag->import();
138 $tplVars = array_merge($this->vars, $import);
139 } elseif (isset($_GET['empty-cache'])) {
140 Tools::emptyCache();
141 } elseif (isset($_GET['export'])) {
142 $this->wallabag->export();
143 } elseif (isset($_GET['updatetheme'])) {
144 $this->wallabag->tpl->updateTheme($_POST['theme']);
145 } elseif (isset($_GET['updatelanguage'])) {
146 $this->wallabag->language->updateLanguage($_POST['language']);
147 } elseif (isset($_GET['uploadfile'])) {
148 $this->wallabag->uploadFile();
149 } elseif (isset($_GET['feed']) && isset($_GET['action']) && $_GET['action'] == 'generate') {
150 $this->wallabag->updateToken();
151 }
152 elseif (isset($_GET['plainurl']) && !empty($_GET['plainurl'])) {
153 $plainUrl = new Url(base64_encode($_GET['plainurl']));
154 $this->wallabag->action('add', $plainUrl);
155 }
156 }
157 }
158
159 public function _render($file, $vars)
160 {
161 echo $this->wallabag->tpl->render($file, $vars);
162 }
163}
diff --git a/src/Wallabag/Wallabag/Template.php b/src/Wallabag/Wallabag/Template.php
new file mode 100644
index 00000000..e8a6daa3
--- /dev/null
+++ b/src/Wallabag/Wallabag/Template.php
@@ -0,0 +1,237 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class Template extends Twig_Environment
14{
15 protected $wallabag;
16
17 private $canRenderTemplates = TRUE;
18 private $currentTheme = '';
19
20 public function __construct(Wallabag $wallabag)
21 {
22 $this->wallabag = $wallabag;
23
24 // Set up theme
25 $pocheUser = Session::getParam('poche_user');
26
27 $themeDirectory = (is_null($pocheUser) ? DEFAULT_THEME : $pocheUser->getConfigValue('theme'));
28
29 if ($themeDirectory === false || !is_dir(THEME . '/' . $themeDirectory)) {
30 $themeDirectory = DEFAULT_THEME;
31 }
32
33 $this->currentTheme = $themeDirectory;
34
35 if ($this->_themeIsInstalled() === array()) {
36 $this->_init();
37 }
38 }
39
40 /**
41 * Returns true if selected theme is installed
42 *
43 * @return bool
44 */
45 private function _themeIsInstalled()
46 {
47 $errors = array();
48
49 // Twig is an absolute requirement for wallabag to function.
50 // Abort immediately if the Composer installer hasn't been run yet
51 if (!$this->canRenderTemplates) {
52 $errors[] = 'Twig does not seem to be installed. Please initialize the Composer installation to automatically fetch dependencies. You can also download <a href="http://wllbg.org/vendor">vendor.zip</a> and extract it in your wallabag folder.';
53 }
54
55 // Check if the selected theme and its requirements are present
56 $theme = $this->getTheme();
57 if ($theme != '' && !is_dir(THEME . '/' . $theme)) {
58 $errors[] = 'The currently selected theme (' . $theme . ') does not seem to be properly installed (Missing directory: ' . THEME . '/' . $theme . ')';
59 $this->canRenderTemplates = FALSE;
60 }
61
62 $themeInfo = $this->getThemeInfo($theme);
63 if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) {
64 foreach ($themeInfo['requirements'] as $requiredTheme) {
65 if (! is_dir(THEME . '/' . $requiredTheme)) {
66 $errors[] = 'The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')';
67 $this->canRenderTemplates = FALSE;
68 }
69 }
70 }
71
72 $currentErrors = (is_null(Session::getParam('errors'))? array() : Session::getParam('errors'));
73 Session::setParam('errors', array_merge($errors, $currentErrors));
74
75 return $errors;
76 }
77
78 /**
79 * Initialization for templates
80 */
81 private function _init()
82 {
83 $loaderChain = new Twig_Loader_Chain();
84 $theme = $this->getTheme();
85
86 // add the current theme as first to the loader chain
87 // so Twig will look there first for overridden template files
88 try {
89 $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $theme));
90 } catch (Twig_Error_Loader $e) {
91 # @todo isInstalled() should catch this, inject Twig later
92 die('The currently selected theme (' . $theme . ') does not seem to be properly installed (' . THEME . '/' . $theme .' is missing)');
93 }
94
95 // add all required themes to the loader chain
96 $themeInfo = $this->getThemeInfo($theme);
97 if (isset($themeInfo['requirements']) && is_array($themeInfo['requirements'])) {
98 foreach ($themeInfo['requirements'] as $requiredTheme) {
99 try {
100 $loaderChain->addLoader(new Twig_Loader_Filesystem(THEME . '/' . $requiredTheme));
101 } catch (Twig_Error_Loader $e) {
102 # @todo isInstalled() should catch this, inject Twig later
103 die('The required "' . $requiredTheme . '" theme is missing for the current theme (' . $theme . ')');
104 }
105 }
106 }
107
108 if (DEBUG_POCHE) {
109 $twigParams = array();
110 } else {
111 $twigParams = array('cache' => CACHE);
112 }
113
114 parent::__construct($loaderChain, $twigParams);
115
116 //$tpl = new Twig_Environment($loaderChain, $twigParams);
117 $this->addExtension(new Twig_Extensions_Extension_I18n());
118
119 # filter to display domain name of an url
120 $filter = new Twig_SimpleFilter('getDomain', 'Tools::getDomain');
121 $this->addFilter($filter);
122
123 # filter for reading time
124 $filter = new Twig_SimpleFilter('getReadingTime', 'Tools::getReadingTime');
125 $this->addFilter($filter);
126 }
127
128 /**
129 * Returns current theme
130 *
131 * @return string
132 */
133 public function getTheme()
134 {
135 return $this->currentTheme;
136 }
137
138 /**
139 * Provides theme information by parsing theme.ini file if present in the theme's root directory.
140 * In all cases, the following data will be returned:
141 * - name: theme's name, or key if the theme is unnamed,
142 * - current: boolean informing if the theme is the current user theme.
143 *
144 * @param string $theme Theme key (directory name)
145 * @return array|boolean Theme information, or false if the theme doesn't exist.
146 */
147 public function getThemeInfo($theme)
148 {
149 if (!is_dir(THEME . '/' . $theme)) {
150 return false;
151 }
152
153 $themeIniFile = THEME . '/' . $theme . '/theme.ini';
154 $themeInfo = array();
155
156 if (is_file($themeIniFile) && is_readable($themeIniFile)) {
157 $themeInfo = parse_ini_file($themeIniFile);
158 }
159
160 if ($themeInfo === false) {
161 $themeInfo = array();
162 }
163
164 if (!isset($themeInfo['name'])) {
165 $themeInfo['name'] = $theme;
166 }
167
168 $themeInfo['current'] = ($theme === $this->getTheme());
169
170 return $themeInfo;
171 }
172
173 /**
174 * Returns an array with installed themes
175 *
176 * @return array
177 */
178 public function getInstalledThemes()
179 {
180 $handle = opendir(THEME);
181 $themes = array();
182
183 while (($theme = readdir($handle)) !== false) {
184 # Themes are stored in a directory, so all directory names are themes
185 # @todo move theme installation data to database
186 if (!is_dir(THEME . '/' . $theme) || in_array($theme, array('.', '..', '_global'))) {
187 continue;
188 }
189
190 $themes[$theme] = $this->getThemeInfo($theme);
191 }
192
193 ksort($themes);
194
195 return $themes;
196 }
197
198 /**
199 * Update theme for the current user
200 *
201 * @param $newTheme
202 */
203 public function updateTheme($newTheme)
204 {
205 # we are not going to change it to the current theme...
206 if ($newTheme == $this->getTheme()) {
207 $this->wallabag->messages->add('w', _('still using the "' . $this->getTheme() . '" theme!'));
208 Tools::redirect('?view=config');
209 }
210
211 $themes = $this->getInstalledThemes();
212 $actualTheme = false;
213
214 foreach (array_keys($themes) as $theme) {
215 if ($theme == $newTheme) {
216 $actualTheme = true;
217 break;
218 }
219 }
220
221 if (!$actualTheme) {
222 $this->wallabag->messages->add('e', _('that theme does not seem to be installed'));
223 Tools::redirect('?view=config');
224 }
225
226 $this->wallabag->store->updateUserConfig($this->wallabag->user->getId(), 'theme', $newTheme);
227 $this->wallabag->messages->add('s', _('you have changed your theme preferences'));
228
229 $currentConfig = $_SESSION['poche_user']->config;
230 $currentConfig['theme'] = $newTheme;
231
232 $_SESSION['poche_user']->setConfig($currentConfig);
233
234 Tools::emptyCache();
235 Tools::redirect('?view=config');
236 }
237}
diff --git a/src/Wallabag/Wallabag/Tools.php b/src/Wallabag/Wallabag/Tools.php
new file mode 100755
index 00000000..19d98614
--- /dev/null
+++ b/src/Wallabag/Wallabag/Tools.php
@@ -0,0 +1,422 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13final class Tools
14{
15 /**
16 * Initialize PHP environment
17 */
18 public static function initPhp()
19 {
20 define('START_TIME', microtime(true));
21
22 function stripslashesDeep($value) {
23 return is_array($value)
24 ? array_map('stripslashesDeep', $value)
25 : stripslashes($value);
26 }
27
28 if (get_magic_quotes_gpc()) {
29 $_POST = array_map('stripslashesDeep', $_POST);
30 $_GET = array_map('stripslashesDeep', $_GET);
31 $_COOKIE = array_map('stripslashesDeep', $_COOKIE);
32 }
33
34 ob_start();
35 register_shutdown_function('ob_end_flush');
36 }
37
38 /**
39 * Get wallabag instance URL
40 *
41 * @return string
42 */
43 public static function getPocheUrl()
44 {
45 $https = (!empty($_SERVER['HTTPS'])
46 && (strtolower($_SERVER['HTTPS']) == 'on'))
47 || (isset($_SERVER["SERVER_PORT"])
48 && $_SERVER["SERVER_PORT"] == '443') // HTTPS detection.
49 || (isset($_SERVER["SERVER_PORT"]) //Custom HTTPS port detection
50 && $_SERVER["SERVER_PORT"] == SSL_PORT)
51 || (isset($_SERVER['HTTP_X_FORWARDED_PROTO'])
52 && $_SERVER['HTTP_X_FORWARDED_PROTO'] == 'https');
53
54 $serverport = (!isset($_SERVER["SERVER_PORT"])
55 || $_SERVER["SERVER_PORT"] == '80'
56 || $_SERVER["SERVER_PORT"] == HTTP_PORT
57 || ($https && $_SERVER["SERVER_PORT"] == '443')
58 || ($https && $_SERVER["SERVER_PORT"]==SSL_PORT) //Custom HTTPS port detection
59 ? '' : ':' . $_SERVER["SERVER_PORT"]);
60
61 if (isset($_SERVER["HTTP_X_FORWARDED_PORT"])) {
62 $serverport = ':' . $_SERVER["HTTP_X_FORWARDED_PORT"];
63 }
64
65 $scriptname = str_replace('/index.php', '/', $_SERVER["SCRIPT_NAME"]);
66
67 if (!isset($_SERVER["HTTP_HOST"])) {
68 return $scriptname;
69 }
70
71 $host = (isset($_SERVER['HTTP_X_FORWARDED_HOST']) ? $_SERVER['HTTP_X_FORWARDED_HOST'] : (isset($_SERVER['HTTP_HOST']) ? $_SERVER['HTTP_HOST'] : $_SERVER['SERVER_NAME']));
72
73 if (strpos($host, ':') !== false) {
74 $serverport = '';
75 }
76
77 return 'http' . ($https ? 's' : '') . '://'
78 . $host . $serverport . $scriptname;
79 }
80
81 /**
82 * Redirects to a URL
83 *
84 * @param string $url
85 */
86 public static function redirect($url = '')
87 {
88 if ($url === '') {
89 $url = (empty($_SERVER['HTTP_REFERER'])?'?':$_SERVER['HTTP_REFERER']);
90 if (isset($_POST['returnurl'])) {
91 $url = $_POST['returnurl'];
92 }
93 }
94
95 # prevent loop
96 if (empty($url) || parse_url($url, PHP_URL_QUERY) === $_SERVER['QUERY_STRING']) {
97 $url = Tools::getPocheUrl();
98 }
99
100 if (substr($url, 0, 1) !== '?') {
101 $ref = Tools::getPocheUrl();
102 if (substr($url, 0, strlen($ref)) !== $ref) {
103 $url = $ref;
104 }
105 }
106
107 self::logm('redirect to ' . $url);
108 header('Location: '.$url);
109 exit();
110 }
111
112 /**
113 * Returns name of the template file to display
114 *
115 * @param $view
116 * @return string
117 */
118 public static function getTplFile($view)
119 {
120 $views = array(
121 'install', 'import', 'export', 'config', 'tags',
122 'edit-tags', 'view', 'login', 'error', 'about'
123 );
124
125 return (in_array($view, $views) ? $view . '.twig' : 'home.twig');
126 }
127
128 /**
129 * Download a file (typically, for downloading pictures on web server)
130 *
131 * @param $url
132 * @return bool|mixed|string
133 */
134 public static function getFile($url)
135 {
136 $timeout = 15;
137 $useragent = "Mozilla/5.0 (Windows NT 5.1; rv:18.0) Gecko/20100101 Firefox/18.0";
138
139 if (in_array ('curl', get_loaded_extensions())) {
140 # Fetch feed from URL
141 $curl = curl_init();
142 curl_setopt($curl, CURLOPT_URL, $url);
143 curl_setopt($curl, CURLOPT_TIMEOUT, $timeout);
144 if (!ini_get('open_basedir') && !ini_get('safe_mode')) {
145 curl_setopt($curl, CURLOPT_FOLLOWLOCATION, true);
146 }
147 curl_setopt($curl, CURLOPT_RETURNTRANSFER, true);
148 curl_setopt($curl, CURLOPT_HEADER, false);
149
150 # for ssl, do not verified certificate
151 curl_setopt($curl, CURLOPT_SSL_VERIFYPEER, FALSE);
152 curl_setopt($curl, CURLOPT_AUTOREFERER, TRUE );
153
154 # FeedBurner requires a proper USER-AGENT...
155 curl_setopt($curl, CURL_HTTP_VERSION_1_1, true);
156 curl_setopt($curl, CURLOPT_ENCODING, "gzip, deflate");
157 curl_setopt($curl, CURLOPT_USERAGENT, $useragent);
158
159 $data = curl_exec($curl);
160 $httpcode = curl_getinfo($curl, CURLINFO_HTTP_CODE);
161 $httpcodeOK = isset($httpcode) and ($httpcode == 200 or $httpcode == 301);
162 curl_close($curl);
163 } else {
164 # create http context and add timeout and user-agent
165 $context = stream_context_create(
166 array(
167 'http' => array(
168 'timeout' => $timeout,
169 'header' => "User-Agent: " . $useragent,
170 'follow_location' => true
171 ),
172 'ssl' => array(
173 'verify_peer' => false,
174 'allow_self_signed' => true
175 )
176 )
177 );
178
179 # only download page lesser than 4MB
180 $data = @file_get_contents($url, false, $context, -1, 4000000);
181
182 if (isset($http_response_header) and isset($http_response_header[0])) {
183 $httpcodeOK = isset($http_response_header) and isset($http_response_header[0]) and ((strpos($http_response_header[0], '200 OK') !== FALSE) or (strpos($http_response_header[0], '301 Moved Permanently') !== FALSE));
184 }
185 }
186
187 # if response is not empty and response is OK
188 if (isset($data) and isset($httpcodeOK) and $httpcodeOK) {
189
190 # take charset of page and get it
191 preg_match('#<meta .*charset=.*>#Usi', $data, $meta);
192
193 # if meta tag is found
194 if (!empty($meta[0])) {
195 preg_match('#charset="?(.*)"#si', $meta[0], $encoding);
196 # if charset is found set it otherwise, set it to utf-8
197 $html_charset = (!empty($encoding[1])) ? strtolower($encoding[1]) : 'utf-8';
198 if (empty($encoding[1])) $encoding[1] = 'utf-8';
199 } else {
200 $html_charset = 'utf-8';
201 $encoding[1] = '';
202 }
203
204 # replace charset of url to charset of page
205 $data = str_replace('charset=' . $encoding[1], 'charset=' . $html_charset, $data);
206
207 return $data;
208 }
209 else {
210 return FALSE;
211 }
212 }
213
214 /**
215 * Headers for JSON export
216 *
217 * @param $data
218 */
219 public static function renderJson($data)
220 {
221 header('Cache-Control: no-cache, must-revalidate');
222 header('Expires: Sat, 26 Jul 1997 05:00:00 GMT');
223 header('Content-type: application/json; charset=UTF-8');
224 echo json_encode($data);
225 exit();
226 }
227
228 /**
229 * Create new line in log file
230 *
231 * @param $message
232 */
233 public static function logm($message)
234 {
235 if (DEBUG_POCHE && php_sapi_name() != 'cli') {
236 $t = strval(date('Y/m/d_H:i:s')) . ' - ' . $_SERVER["REMOTE_ADDR"] . ' - ' . strval($message) . "\n";
237 file_put_contents(CACHE . '/log.txt', $t, FILE_APPEND);
238 error_log('DEBUG POCHE : ' . $message);
239 }
240 }
241
242 /**
243 * Encode a URL by using a salt
244 *
245 * @param $string
246 * @return string
247 */
248 public static function encodeString($string)
249 {
250 return sha1($string . SALT);
251 }
252
253 /**
254 * Cleans a variable
255 *
256 * @param $var
257 * @param string $default
258 * @return string
259 */
260 public static function checkVar($var, $default = '')
261 {
262 return ((isset($_REQUEST["$var"])) ? htmlentities($_REQUEST["$var"]) : $default);
263 }
264
265 /**
266 * Returns the domain name for a URL
267 *
268 * @param $url
269 * @return string
270 */
271 public static function getDomain($url)
272 {
273 return parse_url($url, PHP_URL_HOST);
274 }
275
276 /**
277 * For a given text, we calculate reading time for an article
278 *
279 * @param $text
280 * @return float
281 */
282 public static function getReadingTime($text)
283 {
284 return floor(str_word_count(strip_tags($text)) / 200);
285 }
286
287 /**
288 * Returns the correct header for a status code
289 *
290 * @param $status_code
291 */
292 private static function _status($status_code)
293 {
294 if (strpos(php_sapi_name(), 'apache') !== false) {
295
296 header('HTTP/1.0 '.$status_code);
297 }
298 else {
299
300 header('Status: '.$status_code);
301 }
302 }
303
304 /**
305 * Get the content for a given URL (by a call to FullTextFeed)
306 *
307 * @param Url $url
308 * @return mixed
309 */
310 public static function getPageContent(Url $url)
311 {
312 // Saving and clearing context
313 $REAL = array();
314 foreach( $GLOBALS as $key => $value ) {
315 if( $key != 'GLOBALS' && $key != '_SESSION' && $key != 'HTTP_SESSION_VARS' ) {
316 $GLOBALS[$key] = array();
317 $REAL[$key] = $value;
318 }
319 }
320 // Saving and clearing session
321 if (isset($_SESSION)) {
322 $REAL_SESSION = array();
323 foreach( $_SESSION as $key => $value ) {
324 $REAL_SESSION[$key] = $value;
325 unset($_SESSION[$key]);
326 }
327 }
328
329 // Running code in different context
330 $scope = function() {
331 extract( func_get_arg(1) );
332 $_GET = $_REQUEST = array(
333 "url" => $url->getUrl(),
334 "max" => 5,
335 "links" => "preserve",
336 "exc" => "",
337 "format" => "json",
338 "submit" => "Create Feed"
339 );
340 ob_start();
341 require func_get_arg(0);
342 $json = ob_get_contents();
343 ob_end_clean();
344 return $json;
345 };
346
347 // Silence $scope function to avoid
348 // issues with FTRSS when error_reporting is to high
349 // FTRSS generates PHP warnings which break output
350 $json = @$scope("vendor/wallabag/Fivefilters_Libraries/makefulltextfeed.php", array("url" => $url));
351
352 // Clearing and restoring context
353 foreach ($GLOBALS as $key => $value) {
354 if($key != "GLOBALS" && $key != "_SESSION" ) {
355 unset($GLOBALS[$key]);
356 }
357 }
358 foreach ($REAL as $key => $value) {
359 $GLOBALS[$key] = $value;
360 }
361
362 // Clearing and restoring session
363 if (isset($REAL_SESSION)) {
364 foreach($_SESSION as $key => $value) {
365 unset($_SESSION[$key]);
366 }
367
368 foreach($REAL_SESSION as $key => $value) {
369 $_SESSION[$key] = $value;
370 }
371 }
372
373 return json_decode($json, true);
374 }
375
376 /**
377 * Returns whether we handle an AJAX (XMLHttpRequest) request.
378 *
379 * @return boolean whether we handle an AJAX (XMLHttpRequest) request.
380 */
381 public static function isAjaxRequest()
382 {
383 return isset($_SERVER['HTTP_X_REQUESTED_WITH']) && $_SERVER['HTTP_X_REQUESTED_WITH']==='XMLHttpRequest';
384 }
385
386 /*
387 * Empty cache folder
388 */
389 public static function emptyCache()
390 {
391 $files = new RecursiveIteratorIterator(
392 new RecursiveDirectoryIterator(CACHE, RecursiveDirectoryIterator::SKIP_DOTS),
393 RecursiveIteratorIterator::CHILD_FIRST
394 );
395
396 foreach ($files as $fileInfo) {
397 $todo = ($fileInfo->isDir() ? 'rmdir' : 'unlink');
398 $todo($fileInfo->getRealPath());
399 }
400
401 Tools::logm('empty cache');
402 Tools::redirect();
403 }
404
405 public static function generateToken()
406 {
407 if (ini_get('open_basedir') === '') {
408 if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
409 // alternative to /dev/urandom for Windows
410 $token = substr(base64_encode(uniqid(mt_rand(), true)), 0, 20);
411 } else {
412 $token = substr(base64_encode(file_get_contents('/dev/urandom', false, null, 0, 20)), 0, 15);
413 }
414 }
415 else {
416 $token = substr(base64_encode(uniqid(mt_rand(), true)), 0, 20);
417 }
418
419 return str_replace('+', '', $token);
420 }
421
422}
diff --git a/src/Wallabag/Wallabag/Url.php b/src/Wallabag/Wallabag/Url.php
new file mode 100644
index 00000000..b18fe3d4
--- /dev/null
+++ b/src/Wallabag/Wallabag/Url.php
@@ -0,0 +1,33 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class Url
14{
15 public $url;
16
17 function __construct($url)
18 {
19 $this->url = base64_decode($url);
20 }
21
22 public function getUrl() {
23 return $this->url;
24 }
25
26 public function setUrl($url) {
27 $this->url = $url;
28 }
29
30 public function isCorrect() {
31 return filter_var($this->url, FILTER_VALIDATE_URL) !== FALSE;
32 }
33} \ No newline at end of file
diff --git a/src/Wallabag/Wallabag/User.php b/src/Wallabag/Wallabag/User.php
new file mode 100644
index 00000000..4a10c2ed
--- /dev/null
+++ b/src/Wallabag/Wallabag/User.php
@@ -0,0 +1,59 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class User
14{
15 public $id;
16 public $username;
17 public $name;
18 public $password;
19 public $email;
20 public $config;
21
22 function __construct($user = array())
23 {
24 if ($user != array()) {
25 $this->id = $user['id'];
26 $this->username = $user['username'];
27 $this->name = $user['name'];
28 $this->password = $user['password'];
29 $this->email = $user['email'];
30 $this->config = $user['config'];
31 }
32 }
33
34 public function getId()
35 {
36 return $this->id;
37 }
38
39 public function getUsername()
40 {
41 return $this->username;
42 }
43
44 public function setConfig($config)
45 {
46 $this->config = $config;
47 }
48
49 /**
50 * Returns configuration entry for a user
51 *
52 * @param $name
53 * @return bool
54 */
55 public function getConfigValue($name)
56 {
57 return (isset($this->config[$name])) ? $this->config[$name] : FALSE;
58 }
59} \ No newline at end of file
diff --git a/src/Wallabag/Wallabag/Wallabag.php b/src/Wallabag/Wallabag/Wallabag.php
new file mode 100755
index 00000000..c172a95d
--- /dev/null
+++ b/src/Wallabag/Wallabag/Wallabag.php
@@ -0,0 +1,861 @@
1<?php
2/**
3 * wallabag, self hostable application allowing you to not miss any content anymore
4 *
5 * @category wallabag
6 * @author Nicolas Lœuillet <nicolas@loeuillet.org>
7 * @copyright 2013
8 * @license http://opensource.org/licenses/MIT see COPYING file
9 */
10
11namespace Wallabag\Wallabag;
12
13class Wallabag
14{
15 /**
16 * @var User
17 */
18 public $user;
19 /**
20 * @var Database
21 */
22 public $store;
23 /**
24 * @var Template
25 */
26 public $tpl;
27 /**
28 * @var Language
29 */
30 public $language;
31 /**
32 * @var Routing
33 */
34 public $routing;
35 /**
36 * @var Messages
37 */
38 public $messages;
39 /**
40 * @var Paginator
41 */
42 public $pagination;
43
44 public function __construct()
45 {
46 $this->init();
47 }
48
49 private function init()
50 {
51 Tools::initPhp();
52
53 $pocheUser = Session::getParam('poche_user');
54
55 if ($pocheUser && $pocheUser != array()) {
56 $this->user = $pocheUser;
57 } else {
58 // fake user, just for install & login screens
59 $this->user = new User();
60 $this->user->setConfig($this->getDefaultConfig());
61 }
62
63 $this->pagination = new Paginator($this->user->getConfigValue('pager'), 'p');
64 $this->language = new Language($this);
65 $this->tpl = new Template($this);
66 $this->store = new Database();
67 $this->messages = new Messages();
68 $this->routing = new Routing($this);
69 }
70
71 public function run()
72 {
73 $this->routing->run();
74 }
75
76 /**
77 * Creates a new user
78 */
79 public function createNewUser($username, $password, $email = "")
80 {
81 if (!empty($username) && !empty($password)){
82 $newUsername = filter_var($username, FILTER_SANITIZE_STRING);
83 $email = filter_var($email, FILTER_SANITIZE_STRING);
84 if (!$this->store->userExists($newUsername)){
85 if ($this->store->install($newUsername, Tools::encodeString($password . $newUsername), $email)) {
86 Tools::logm('The new user ' . $newUsername . ' has been installed');
87 $this->messages->add('s', sprintf(_('The new user %s has been installed. Do you want to <a href="?logout">logout ?</a>'), $newUsername));
88 Tools::redirect();
89 }
90 else {
91 Tools::logm('error during adding new user');
92 Tools::redirect();
93 }
94 }
95 else {
96 $this->messages->add('e', sprintf(_('Error : An user with the name %s already exists !'), $newUsername));
97 Tools::logm('An user with the name ' . $newUsername . ' already exists !');
98 Tools::redirect();
99 }
100 }
101 }
102
103 /**
104 * Delete an existing user
105 */
106 public function deleteUser($password)
107 {
108 if ($this->store->listUsers() > 1) {
109 if (Tools::encodeString($password . $this->user->getUsername()) == $this->store->getUserPassword($this->user->getId())) {
110 $username = $this->user->getUsername();
111 $this->store->deleteUserConfig($this->user->getId());
112 Tools::logm('The configuration for user '. $username .' has been deleted !');
113 $this->store->deleteTagsEntriesAndEntries($this->user->getId());
114 Tools::logm('The entries for user '. $username .' has been deleted !');
115 $this->store->deleteUser($this->user->getId());
116 Tools::logm('User '. $username .' has been completely deleted !');
117 Session::logout();
118 Tools::logm('logout');
119 Tools::redirect();
120 $this->messages->add('s', sprintf(_('User %s has been successfully deleted !'), $username));
121 }
122 else {
123 Tools::logm('Bad password !');
124 $this->messages->add('e', _('Error : The password is wrong !'));
125 }
126 }
127 else {
128 Tools::logm('Only user !');
129 $this->messages->add('e', _('Error : You are the only user, you cannot delete your account !'));
130 }
131 }
132
133 public function getDefaultConfig()
134 {
135 return array(
136 'pager' => PAGINATION,
137 'language' => LANG,
138 'theme' => DEFAULT_THEME
139 );
140 }
141
142 /**
143 * Call action (mark as fav, archive, delete, etc.)
144 */
145 public function action($action, Url $url, $id = 0, $import = FALSE, $autoclose = FALSE, $tags = null)
146 {
147 switch ($action)
148 {
149 case 'add':
150 $content = Tools::getPageContent($url);
151 $title = ($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled');
152 $body = $content['rss']['channel']['item']['description'];
153
154 // clean content from prevent xss attack
155 $purifier = $this->_getPurifier();
156 $title = $purifier->purify($title);
157 $body = $purifier->purify($body);
158
159 //search for possible duplicate
160 $duplicate = NULL;
161 $duplicate = $this->store->retrieveOneByURL($url->getUrl(), $this->user->getId());
162
163 $last_id = $this->store->add($url->getUrl(), $title, $body, $this->user->getId());
164 if ( $last_id ) {
165 Tools::logm('add link ' . $url->getUrl());
166 if (DOWNLOAD_PICTURES) {
167 $content = Picture::filterPicture($body, $url->getUrl(), $last_id);
168 Tools::logm('updating content article');
169 $this->store->updateContent($last_id, $content, $this->user->getId());
170 }
171
172 if ($duplicate != NULL) {
173 // duplicate exists, so, older entry needs to be deleted (as new entry should go to the top of list), BUT favorite mark and tags should be preserved
174 Tools::logm('link ' . $url->getUrl() . ' is a duplicate');
175 // 1) - preserve tags and favorite, then drop old entry
176 $this->store->reassignTags($duplicate['id'], $last_id);
177 if ($duplicate['is_fav']) {
178 $this->store->favoriteById($last_id, $this->user->getId());
179 }
180 if ($this->store->deleteById($duplicate['id'], $this->user->getId())) {
181 Tools::logm('previous link ' . $url->getUrl() .' entry deleted');
182 }
183 }
184
185 // if there are tags, add them to the new article
186 if (isset($_GET['tags'])) {
187 $_POST['value'] = $_GET['tags'];
188 $_POST['entry_id'] = $last_id;
189 $this->action('add_tag', $url);
190 }
191
192 $this->messages->add('s', _('the link has been added successfully'));
193 }
194 else {
195 $this->messages->add('e', _('error during insertion : the link wasn\'t added'));
196 Tools::logm('error during insertion : the link wasn\'t added ' . $url->getUrl());
197 }
198
199 if ($autoclose == TRUE) {
200 Tools::redirect('?view=home');
201 } else {
202 Tools::redirect('?view=home&closewin=true');
203 }
204 break;
205 case 'delete':
206 if (isset($_GET['search'])) {
207 //when we want to apply a delete to a search
208 $tags = array($_GET['search']);
209 $allentry_ids = $this->store->search($tags[0], $this->user->getId());
210 $entry_ids = array();
211 foreach ($allentry_ids as $eachentry) {
212 $entry_ids[] = $eachentry[0];
213 }
214 } else { // delete a single article
215 $entry_ids = array($id);
216 }
217 foreach($entry_ids as $id) {
218 $msg = 'delete link #' . $id;
219 if ($this->store->deleteById($id, $this->user->getId())) {
220 if (DOWNLOAD_PICTURES) {
221 Picture::removeDirectory(ABS_PATH . $id);
222 }
223 $this->messages->add('s', _('the link has been deleted successfully'));
224 }
225 else {
226 $this->messages->add('e', _('the link wasn\'t deleted'));
227 $msg = 'error : can\'t delete link #' . $id;
228 }
229 Tools::logm($msg);
230 }
231 Tools::redirect('?');
232 break;
233 case 'toggle_fav' :
234 $this->store->favoriteById($id, $this->user->getId());
235 Tools::logm('mark as favorite link #' . $id);
236 if ( Tools::isAjaxRequest() ) {
237 echo 1;
238 exit;
239 }
240 else {
241 Tools::redirect();
242 }
243 break;
244 case 'toggle_archive' :
245 if (isset($_GET['tag_id'])) {
246 //when we want to archive a whole tag
247 $tag_id = $_GET['tag_id'];
248 $allentry_ids = $this->store->retrieveEntriesByTag($tag_id, $this->user->getId());
249 $entry_ids = array();
250 foreach ($allentry_ids as $eachentry) {
251 $entry_ids[] = $eachentry[0];
252 }
253 } else { //archive a single article
254 $entry_ids = array($id);
255 }
256 foreach($entry_ids as $id) {
257 $this->store->archiveById($id, $this->user->getId());
258 Tools::logm('archive link #' . $id);
259 }
260 if ( Tools::isAjaxRequest() ) {
261 echo 1;
262 exit;
263 }
264 else {
265 Tools::redirect();
266 }
267 break;
268 case 'archive_all' :
269 $this->store->archiveAll($this->user->getId());
270 Tools::logm('archive all links');
271 Tools::redirect();
272 break;
273 case 'add_tag' :
274 if (isset($_GET['search'])) {
275 //when we want to apply a tag to a search
276 $tags = array($_GET['search']);
277 $allentry_ids = $this->store->search($tags[0], $this->user->getId());
278 $entry_ids = array();
279 foreach ($allentry_ids as $eachentry) {
280 $entry_ids[] = $eachentry[0];
281 }
282 } else { //add a tag to a single article
283 $tags = explode(',', $_POST['value']);
284 $entry_ids = array($_POST['entry_id']);
285 }
286 foreach($entry_ids as $entry_id) {
287 $entry = $this->store->retrieveOneById($entry_id, $this->user->getId());
288 if (!$entry) {
289 $this->messages->add('e', _('Article not found!'));
290 Tools::logm('error : article not found');
291 Tools::redirect();
292 }
293 //get all already set tags to preven duplicates
294 $already_set_tags = array();
295 $entry_tags = $this->store->retrieveTagsByEntry($entry_id);
296 foreach ($entry_tags as $tag) {
297 $already_set_tags[] = $tag['value'];
298 }
299 foreach($tags as $key => $tag_value) {
300 $value = trim($tag_value);
301 if ($value && !in_array($value, $already_set_tags)) {
302 $tag = $this->store->retrieveTagByValue($value);
303 if (is_null($tag)) {
304 # we create the tag
305 $tag = $this->store->createTag($value);
306 $sequence = '';
307 if (STORAGE == 'postgres') {
308 $sequence = 'tags_id_seq';
309 }
310 $tag_id = $this->store->getLastId($sequence);
311 }
312 else {
313 $tag_id = $tag['id'];
314 }
315
316 # we assign the tag to the article
317 $this->store->setTagToEntry($tag_id, $entry_id);
318 }
319 }
320 }
321 $this->messages->add('s', _('The tag has been applied successfully'));
322 Tools::logm('The tag has been applied successfully');
323 Tools::redirect();
324 break;
325 case 'remove_tag' :
326 $tag_id = $_GET['tag_id'];
327 $entry = $this->store->retrieveOneById($id, $this->user->getId());
328 if (!$entry) {
329 $this->messages->add('e', _('Article not found!'));
330 Tools::logm('error : article not found');
331 Tools::redirect();
332 }
333 $this->store->removeTagForEntry($id, $tag_id);
334 Tools::logm('tag entry deleted');
335 if ($this->store->cleanUnusedTag($tag_id)) {
336 Tools::logm('tag deleted');
337 }
338 $this->messages->add('s', _('The tag has been successfully deleted'));
339 Tools::redirect();
340 break;
341 default:
342 break;
343 }
344 }
345
346 function displayView($view, $id = 0)
347 {
348 $tpl_vars = array();
349
350 switch ($view)
351 {
352 case 'about':
353 break;
354 case 'config':
355 $dev_infos = $this->_getPocheVersion('dev');
356 $dev = trim($dev_infos[0]);
357 $check_time_dev = date('d-M-Y H:i', $dev_infos[1]);
358 $prod_infos = $this->_getPocheVersion('prod');
359 $prod = trim($prod_infos[0]);
360 $check_time_prod = date('d-M-Y H:i', $prod_infos[1]);
361 $compare_dev = version_compare(POCHE, $dev);
362 $compare_prod = version_compare(POCHE, $prod);
363 $themes = $this->tpl->getInstalledThemes();
364 $languages = $this->language->getInstalledLanguages();
365 $token = $this->user->getConfigValue('token');
366 $http_auth = (isset($_SERVER['PHP_AUTH_USER']) || isset($_SERVER['REMOTE_USER'])) ? true : false;
367 $only_user = ($this->store->listUsers() > 1) ? false : true;
368 $tpl_vars = array(
369 'themes' => $themes,
370 'languages' => $languages,
371 'dev' => $dev,
372 'prod' => $prod,
373 'check_time_dev' => $check_time_dev,
374 'check_time_prod' => $check_time_prod,
375 'compare_dev' => $compare_dev,
376 'compare_prod' => $compare_prod,
377 'token' => $token,
378 'user_id' => $this->user->getId(),
379 'http_auth' => $http_auth,
380 'only_user' => $only_user
381 );
382 Tools::logm('config view');
383 break;
384 case 'edit-tags':
385 # tags
386 $entry = $this->store->retrieveOneById($id, $this->user->getId());
387 if (!$entry) {
388 $this->messages->add('e', _('Article not found!'));
389 Tools::logm('error : article not found');
390 Tools::redirect();
391 }
392 $tags = $this->store->retrieveTagsByEntry($id);
393 $tpl_vars = array(
394 'entry_id' => $id,
395 'tags' => $tags,
396 'entry' => $entry,
397 );
398 break;
399 case 'tags':
400 $token = $this->user->getConfigValue('token');
401 //if term is set - search tags for this term
402 $term = Tools::checkVar('term');
403 $tags = $this->store->retrieveAllTags($this->user->getId(), $term);
404 if (Tools::isAjaxRequest()) {
405 $result = array();
406 foreach ($tags as $tag) {
407 $result[] = $tag['value'];
408 }
409 echo json_encode($result);
410 exit;
411 }
412 $tpl_vars = array(
413 'token' => $token,
414 'user_id' => $this->user->getId(),
415 'tags' => $tags,
416 );
417 break;
418 case 'search':
419 if (isset($_GET['search'])) {
420 $search = filter_var($_GET['search'], FILTER_SANITIZE_STRING);
421 $tpl_vars['entries'] = $this->store->search($search, $this->user->getId());
422 $count = count($tpl_vars['entries']);
423 $this->pagination->set_total($count);
424 $page_links = str_replace(array('previous', 'next'), array(_('previous'), _('next')),
425 $this->pagination->page_links('?view=' . $view . '?search=' . $search . '&sort=' . $_SESSION['sort'] . '&' ));
426 $tpl_vars['page_links'] = $page_links;
427 $tpl_vars['nb_results'] = $count;
428 $tpl_vars['searchterm'] = $search;
429 }
430 break;
431 case 'view':
432 $entry = $this->store->retrieveOneById($id, $this->user->getId());
433 if ($entry != NULL) {
434 Tools::logm('view link #' . $id);
435 $content = $entry['content'];
436 if (function_exists('tidy_parse_string')) {
437 $tidy = tidy_parse_string($content, array('indent'=>true, 'show-body-only' => true), 'UTF8');
438 $tidy->cleanRepair();
439 $content = $tidy->value;
440 }
441
442 # flattr checking
443 $flattr = NULL;
444 if (FLATTR) {
445 $flattr = new FlattrItem();
446 $flattr->checkItem($entry['url'], $entry['id']);
447 }
448
449 # tags
450 $tags = $this->store->retrieveTagsByEntry($entry['id']);
451
452 $tpl_vars = array(
453 'entry' => $entry,
454 'content' => $content,
455 'flattr' => $flattr,
456 'tags' => $tags
457 );
458 }
459 else {
460 Tools::logm('error in view call : entry is null');
461 }
462 break;
463 default: # home, favorites, archive and tag views
464 $tpl_vars = array(
465 'entries' => '',
466 'page_links' => '',
467 'nb_results' => '',
468 'listmode' => (isset($_COOKIE['listmode']) ? true : false),
469 );
470
471 //if id is given - we retrieve entries by tag: id is tag id
472 if ($id) {
473 $tpl_vars['tag'] = $this->store->retrieveTag($id, $this->user->getId());
474 $tpl_vars['id'] = intval($id);
475 }
476
477 $count = $this->store->getEntriesByViewCount($view, $this->user->getId(), $id);
478
479 if ($count > 0) {
480 $this->pagination->set_total($count);
481 $page_links = str_replace(array('previous', 'next'), array(_('previous'), _('next')),
482 $this->pagination->page_links('?view=' . $view . '&sort=' . $_SESSION['sort'] . (($id)?'&id='.$id:'') . '&' ));
483 $tpl_vars['entries'] = $this->store->getEntriesByView($view, $this->user->getId(), $this->pagination->get_limit(), $id);
484 $tpl_vars['page_links'] = $page_links;
485 $tpl_vars['nb_results'] = $count;
486 }
487 Tools::logm('display ' . $view . ' view');
488 break;
489 }
490
491 return $tpl_vars;
492 }
493
494 /**
495 * update the password of the current user.
496 * if MODE_DEMO is TRUE, the password can't be updated.
497 * @todo add the return value
498 * @todo set the new password in function header like this updatePassword($newPassword)
499 * @return boolean
500 */
501 public function updatePassword($password, $confirmPassword)
502 {
503 if (MODE_DEMO) {
504 $this->messages->add('i', _('in demo mode, you can\'t update your password'));
505 Tools::logm('in demo mode, you can\'t do this');
506 Tools::redirect('?view=config');
507 }
508 else {
509 if (isset($password) && isset($confirmPassword)) {
510 if ($password == $confirmPassword && !empty($password)) {
511 $this->messages->add('s', _('your password has been updated'));
512 $this->store->updatePassword($this->user->getId(), Tools::encodeString($password . $this->user->getUsername()));
513 Session::logout();
514 Tools::logm('password updated');
515 Tools::redirect();
516 }
517 else {
518 $this->messages->add('e', _('the two fields have to be filled & the password must be the same in the two fields'));
519 Tools::redirect('?view=config');
520 }
521 }
522 }
523 }
524
525 /**
526 * Get credentials from differents sources
527 * It redirects the user to the $referer link
528 *
529 * @return array
530 */
531 private function credentials()
532 {
533 if (isset($_SERVER['PHP_AUTH_USER'])) {
534 return array($_SERVER['PHP_AUTH_USER'], 'php_auth', true);
535 }
536 if (!empty($_POST['login']) && !empty($_POST['password'])) {
537 return array($_POST['login'], $_POST['password'], false);
538 }
539 if (isset($_SERVER['REMOTE_USER'])) {
540 return array($_SERVER['REMOTE_USER'], 'http_auth', true);
541 }
542
543 return array(false, false, false);
544 }
545
546 /**
547 * checks if login & password are correct and save the user in session.
548 * it redirects the user to the $referer link
549 * @param string $referer the url to redirect after login
550 * @todo add the return value
551 * @return boolean
552 */
553 public function login($referer)
554 {
555 list($login,$password,$isauthenticated)=$this->credentials();
556 if($login === false || $password === false) {
557 $this->messages->add('e', _('login failed: you have to fill all fields'));
558 Tools::logm('login failed');
559 Tools::redirect();
560 }
561 if (!empty($login) && !empty($password)) {
562 $user = $this->store->login($login, Tools::encodeString($password . $login), $isauthenticated);
563 if ($user != array()) {
564 # Save login into Session
565 $longlastingsession = isset($_POST['longlastingsession']);
566 $passwordTest = ($isauthenticated) ? $user['password'] : Tools::encodeString($password . $login);
567 Session::login($user['username'], $user['password'], $login, $passwordTest, $longlastingsession, array('poche_user' => new User($user)));
568
569 # reload l10n
570 $language = $user['config']['language'];
571 @putenv('LC_ALL=' . $language);
572 setlocale(LC_ALL, $language);
573 bindtextdomain($language, LOCALE);
574 textdomain($language);
575
576 $this->messages->add('s', _('welcome to your wallabag'));
577 Tools::logm('login successful');
578 Tools::redirect($referer);
579 }
580 $this->messages->add('e', _('login failed: bad login or password'));
581 // log login failure in web server log to allow fail2ban usage
582 error_log('user '.$login.' authentication failure');
583 Tools::logm('login failed');
584 Tools::redirect();
585 }
586 }
587
588 /**
589 * log out the poche user. It cleans the session.
590 * @todo add the return value
591 * @return boolean
592 */
593 public function logout()
594 {
595 $this->user = array();
596 Session::logout();
597 Tools::logm('logout');
598 Tools::redirect();
599 }
600
601 /**
602 * import datas into your wallabag
603 * @return boolean
604 */
605
606 public function import() {
607
608 if ( isset($_FILES['file']) && $_FILES['file']['tmp_name'] ) {
609 Tools::logm('Import stated: parsing file');
610
611 // assume, that file is in json format
612 $str_data = file_get_contents($_FILES['file']['tmp_name']);
613 $data = json_decode($str_data, true);
614
615 if ( $data === null ) {
616 //not json - assume html
617 $html = new simple_html_dom();
618 $html->load_file($_FILES['file']['tmp_name']);
619 $data = array();
620 $read = 0;
621 foreach (array('ol','ul') as $list) {
622 foreach ($html->find($list) as $ul) {
623 foreach ($ul->find('li') as $li) {
624 $tmpEntry = array();
625 $a = $li->find('a');
626 $tmpEntry['url'] = $a[0]->href;
627 $tmpEntry['tags'] = $a[0]->tags;
628 $tmpEntry['is_read'] = $read;
629 if ($tmpEntry['url']) {
630 $data[] = $tmpEntry;
631 }
632 }
633 # the second <ol/ul> is for read links
634 $read = ((sizeof($data) && $read)?0:1);
635 }
636 }
637 }
638
639 // for readability structure
640
641 foreach($data as $record) {
642 if (is_array($record)) {
643 $data[] = $record;
644 foreach($record as $record2) {
645 if (is_array($record2)) {
646 $data[] = $record2;
647 }
648 }
649 }
650 }
651
652 $urlsInserted = array(); //urls of articles inserted
653 foreach($data as $record) {
654 $url = trim(isset($record['article__url']) ? $record['article__url'] : (isset($record['url']) ? $record['url'] : ''));
655 if ($url and !in_array($url, $urlsInserted)) {
656 $title = (isset($record['title']) ? $record['title'] : _('Untitled - Import - ') . '</a> <a href="./?import">' . _('click to finish import') . '</a><a>');
657 $body = (isset($record['content']) ? $record['content'] : '');
658 $isRead = (isset($record['is_read']) ? intval($record['is_read']) : (isset($record['archive']) ? intval($record['archive']) : 0));
659 $isFavorite = (isset($record['is_fav']) ? intval($record['is_fav']) : (isset($record['favorite']) ? intval($record['favorite']) : 0));
660
661 // insert new record
662
663 $id = $this->store->add($url, $title, $body, $this->user->getId() , $isFavorite, $isRead);
664 if ($id) {
665 $urlsInserted[] = $url; //add
666 if (isset($record['tags']) && trim($record['tags'])) {
667
668 // @TODO: set tags
669
670 }
671 }
672 }
673 }
674
675 $i = sizeof($urlsInserted);
676 if ($i > 0) {
677 $this->messages->add('s', _('Articles inserted: ') . $i . _('. Please note, that some may be marked as "read".'));
678 }
679
680 Tools::logm('Import of articles finished: '.$i.' articles added (w/o content if not provided).');
681 }
682 else {
683 $this->messages->add('s', _('Did you forget to select a file?'));
684 }
685 // file parsing finished here
686 // now download article contents if any
687 // check if we need to download any content
688
689 $recordsDownloadRequired = $this->store->retrieveUnfetchedEntriesCount($this->user->getId());
690
691 if ($recordsDownloadRequired == 0) {
692
693 // nothing to download
694
695 $this->messages->add('s', _('Import finished.'));
696 Tools::logm('Import finished completely');
697 Tools::redirect();
698 }
699 else {
700
701 // if just inserted - don't download anything, download will start in next reload
702
703 if (!isset($_FILES['file'])) {
704
705 // download next batch
706
707 Tools::logm('Fetching next batch of articles...');
708 $items = $this->store->retrieveUnfetchedEntries($this->user->getId() , IMPORT_LIMIT);
709 $purifier = $this->_getPurifier();
710 foreach($items as $item) {
711 $url = new Url(base64_encode($item['url']));
712 Tools::logm('Fetching article ' . $item['id']);
713 $content = Tools::getPageContent($url);
714 $title = (($content['rss']['channel']['item']['title'] != '') ? $content['rss']['channel']['item']['title'] : _('Untitled'));
715 $body = (($content['rss']['channel']['item']['description'] != '') ? $content['rss']['channel']['item']['description'] : _('Undefined'));
716
717 // clean content to prevent xss attack
718
719 $title = $purifier->purify($title);
720 $body = $purifier->purify($body);
721 $this->store->updateContentAndTitle($item['id'], $title, $body, $this->user->getId());
722 Tools::logm('Article ' . $item['id'] . ' updated.');
723 }
724 }
725 }
726
727 return array(
728 'includeImport' => true,
729 'import' => array(
730 'recordsDownloadRequired' => $recordsDownloadRequired,
731 'recordsUnderDownload' => IMPORT_LIMIT,
732 'delay' => IMPORT_DELAY * 1000
733 )
734 );
735 }
736
737 /**
738 * export poche entries in json
739 * @return json all poche entries
740 */
741 public function export()
742 {
743 $filename = "wallabag-export-".$this->user->getId()."-".date("Y-m-d").".json";
744 header('Content-Disposition: attachment; filename='.$filename);
745
746 $entries = $this->store->retrieveAll($this->user->getId());
747 echo $this->tpl->render('export.twig', array(
748 'export' => Tools::renderJson($entries),
749 ));
750 Tools::logm('export view');
751 }
752
753 /**
754 * Checks online the latest version of poche and cache it
755 * @param string $which 'prod' or 'dev'
756 * @return string latest $which version
757 */
758 private function _getPocheVersion($which = 'prod') {
759 $cache_file = CACHE . '/' . $which;
760 $check_time = time();
761
762 # checks if the cached version file exists
763 if (file_exists($cache_file) && (filemtime($cache_file) > (time() - 86400 ))) {
764 $version = file_get_contents($cache_file);
765 $check_time = filemtime($cache_file);
766 } else {
767 $version = file_get_contents('http://static.wallabag.org/versions/' . $which);
768 file_put_contents($cache_file, $version, LOCK_EX);
769 }
770 return array($version, $check_time);
771 }
772
773 /**
774 * Update token for current user
775 */
776 public function updateToken()
777 {
778 $token = Tools::generateToken();
779 $this->store->updateUserConfig($this->user->getId(), 'token', $token);
780 $currentConfig = $_SESSION['poche_user']->config;
781 $currentConfig['token'] = $token;
782 $_SESSION['poche_user']->setConfig($currentConfig);
783 Tools::redirect();
784 }
785
786 /**
787 * Generate RSS feeds for current user
788 *
789 * @param $token
790 * @param $user_id
791 * @param $tag_id if $type is 'tag', the id of the tag to generate feed for
792 * @param string $type the type of feed to generate
793 * @param int $limit the maximum number of items (0 means all)
794 */
795 public function generateFeeds($token, $user_id, $tag_id, $type = 'home', $limit = 0)
796 {
797 $allowed_types = array('home', 'fav', 'archive', 'tag');
798 $config = $this->store->getConfigUser($user_id);
799
800 if ($config == null) {
801 die(sprintf(_('User with this id (%d) does not exist.'), $user_id));
802 }
803
804 if (!in_array($type, $allowed_types) || !isset($config['token']) || $token != $config['token']) {
805 die(_('Uh, there is a problem while generating feed. Wrong token used?'));
806 }
807
808 $feed = new FeedWriter(RSS2);
809 $feed->setTitle('wallabag — ' . $type . ' feed');
810 $feed->setLink(Tools::getPocheUrl());
811 $feed->setChannelElement('pubDate', date(DATE_RSS , time()));
812 $feed->setChannelElement('generator', 'wallabag');
813 $feed->setDescription('wallabag ' . $type . ' elements');
814
815 if ($type == 'tag') {
816 $entries = $this->store->retrieveEntriesByTag($tag_id, $user_id);
817 }
818 else {
819 $entries = $this->store->getEntriesByView($type, $user_id);
820 }
821
822 // if $limit is set to zero, use all entries
823 if (0 == $limit) {
824 $limit = count($entries);
825 }
826 if (count($entries) > 0) {
827 for ($i = 0; $i < min(count($entries), $limit); $i++) {
828 $entry = $entries[$i];
829 $newItem = $feed->createNewItem();
830 $newItem->setTitle($entry['title']);
831 $newItem->setSource(Tools::getPocheUrl() . '?view=view&amp;id=' . $entry['id']);
832 $newItem->setLink($entry['url']);
833 $newItem->setDate(time());
834 $newItem->setDescription($entry['content']);
835 $feed->addItem($newItem);
836 }
837 }
838
839 $feed->genarateFeed();
840 exit;
841 }
842
843
844
845 /**
846 * Returns new purifier object with actual config
847 */
848 private function _getPurifier()
849 {
850 $config = HTMLPurifier_Config::createDefault();
851 $config->set('Cache.SerializerPath', CACHE);
852 $config->set('HTML.SafeIframe', true);
853
854 //allow YouTube, Vimeo and dailymotion videos
855 $config->set('URI.SafeIframeRegexp', '%^(https?:)?//(www\.youtube(?:-nocookie)?\.com/embed/|player\.vimeo\.com/video/|www\.dailymotion\.com/embed/video/)%');
856
857 return new HTMLPurifier($config);
858 }
859
860
861}