diff options
Diffstat (limited to 'src')
123 files changed, 5866 insertions, 2782 deletions
diff --git a/src/Wallabag/AnnotationBundle/Entity/Annotation.php b/src/Wallabag/AnnotationBundle/Entity/Annotation.php index db9590b0..90ee7c2d 100644 --- a/src/Wallabag/AnnotationBundle/Entity/Annotation.php +++ b/src/Wallabag/AnnotationBundle/Entity/Annotation.php | |||
@@ -82,7 +82,7 @@ class Annotation | |||
82 | /* | 82 | /* |
83 | * @param User $user | 83 | * @param User $user |
84 | */ | 84 | */ |
85 | public function __construct(\Wallabag\UserBundle\Entity\User $user) | 85 | public function __construct(User $user) |
86 | { | 86 | { |
87 | $this->user = $user; | 87 | $this->user = $user; |
88 | } | 88 | } |
@@ -204,7 +204,7 @@ class Annotation | |||
204 | /** | 204 | /** |
205 | * Set user. | 205 | * Set user. |
206 | * | 206 | * |
207 | * @param string $user | 207 | * @param User $user |
208 | * | 208 | * |
209 | * @return Annotation | 209 | * @return Annotation |
210 | */ | 210 | */ |
@@ -218,7 +218,7 @@ class Annotation | |||
218 | /** | 218 | /** |
219 | * Get user. | 219 | * Get user. |
220 | * | 220 | * |
221 | * @return string | 221 | * @return User |
222 | */ | 222 | */ |
223 | public function getUser() | 223 | public function getUser() |
224 | { | 224 | { |
diff --git a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php index ccb72d23..04875f29 100644 --- a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php +++ b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php | |||
@@ -171,6 +171,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase | |||
171 | $this->client->request('POST', '/api/entries.json', array( | 171 | $this->client->request('POST', '/api/entries.json', array( |
172 | 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', | 172 | 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', |
173 | 'archive' => '1', | 173 | 'archive' => '1', |
174 | 'tags' => 'google, apple', | ||
174 | )); | 175 | )); |
175 | 176 | ||
176 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); | 177 | $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); |
@@ -181,7 +182,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase | |||
181 | $this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']); | 182 | $this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']); |
182 | $this->assertEquals(true, $content['is_archived']); | 183 | $this->assertEquals(true, $content['is_archived']); |
183 | $this->assertEquals(false, $content['is_starred']); | 184 | $this->assertEquals(false, $content['is_starred']); |
184 | $this->assertCount(1, $content['tags']); | 185 | $this->assertCount(2, $content['tags']); |
185 | } | 186 | } |
186 | 187 | ||
187 | public function testPostArchivedAndStarredEntry() | 188 | public function testPostArchivedAndStarredEntry() |
diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php index c9dad0df..6665f4b5 100644 --- a/src/Wallabag/CoreBundle/Command/InstallCommand.php +++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php | |||
@@ -73,36 +73,36 @@ class InstallCommand extends ContainerAwareCommand | |||
73 | 73 | ||
74 | $fulfilled = true; | 74 | $fulfilled = true; |
75 | 75 | ||
76 | $label = '<comment>PDO Drivers</comment>'; | 76 | $label = '<comment>PDO Driver</comment>'; |
77 | if (extension_loaded('pdo_sqlite') || extension_loaded('pdo_mysql') || extension_loaded('pdo_pgsql')) { | 77 | $status = '<info>OK!</info>'; |
78 | $status = '<info>OK!</info>'; | 78 | $help = ''; |
79 | $help = ''; | 79 | |
80 | } else { | 80 | if (!extension_loaded($this->getContainer()->getParameter('database_driver'))) { |
81 | $fulfilled = false; | 81 | $fulfilled = false; |
82 | $status = '<error>ERROR!</error>'; | 82 | $status = '<error>ERROR!</error>'; |
83 | $help = 'Needs one of sqlite, mysql or pgsql PDO drivers'; | 83 | $help = 'Database driver "'.$this->getContainer()->getParameter('database_driver').'" is not installed.'; |
84 | } | 84 | } |
85 | 85 | ||
86 | $rows[] = array($label, $status, $help); | 86 | $rows = []; |
87 | $rows[] = [$label, $status, $help]; | ||
87 | 88 | ||
88 | foreach ($this->functionExists as $functionRequired) { | 89 | foreach ($this->functionExists as $functionRequired) { |
89 | $label = '<comment>'.$functionRequired.'</comment>'; | 90 | $label = '<comment>'.$functionRequired.'</comment>'; |
91 | $status = '<info>OK!</info>'; | ||
92 | $help = ''; | ||
90 | 93 | ||
91 | if (function_exists($functionRequired)) { | 94 | if (!function_exists($functionRequired)) { |
92 | $status = '<info>OK!</info>'; | ||
93 | $help = ''; | ||
94 | } else { | ||
95 | $fulfilled = false; | 95 | $fulfilled = false; |
96 | $status = '<error>ERROR!</error>'; | 96 | $status = '<error>ERROR!</error>'; |
97 | $help = 'You need the '.$functionRequired.' function activated'; | 97 | $help = 'You need the '.$functionRequired.' function activated'; |
98 | } | 98 | } |
99 | 99 | ||
100 | $rows[] = array($label, $status, $help); | 100 | $rows[] = [$label, $status, $help]; |
101 | } | 101 | } |
102 | 102 | ||
103 | $table = new Table($this->defaultOutput); | 103 | $table = new Table($this->defaultOutput); |
104 | $table | 104 | $table |
105 | ->setHeaders(array('Checked', 'Status', 'Recommendation')) | 105 | ->setHeaders(['Checked', 'Status', 'Recommendation']) |
106 | ->setRows($rows) | 106 | ->setRows($rows) |
107 | ->render(); | 107 | ->render(); |
108 | 108 | ||
@@ -126,7 +126,7 @@ class InstallCommand extends ContainerAwareCommand | |||
126 | $this->defaultOutput->writeln('Droping database, creating database and schema, clearing the cache'); | 126 | $this->defaultOutput->writeln('Droping database, creating database and schema, clearing the cache'); |
127 | 127 | ||
128 | $this | 128 | $this |
129 | ->runCommand('doctrine:database:drop', array('--force' => true)) | 129 | ->runCommand('doctrine:database:drop', ['--force' => true]) |
130 | ->runCommand('doctrine:database:create') | 130 | ->runCommand('doctrine:database:create') |
131 | ->runCommand('doctrine:schema:create') | 131 | ->runCommand('doctrine:schema:create') |
132 | ->runCommand('cache:clear') | 132 | ->runCommand('cache:clear') |
@@ -158,7 +158,7 @@ class InstallCommand extends ContainerAwareCommand | |||
158 | $this->defaultOutput->writeln('Droping database, creating database and schema'); | 158 | $this->defaultOutput->writeln('Droping database, creating database and schema'); |
159 | 159 | ||
160 | $this | 160 | $this |
161 | ->runCommand('doctrine:database:drop', array('--force' => true)) | 161 | ->runCommand('doctrine:database:drop', ['--force' => true]) |
162 | ->runCommand('doctrine:database:create') | 162 | ->runCommand('doctrine:database:create') |
163 | ->runCommand('doctrine:schema:create') | 163 | ->runCommand('doctrine:schema:create') |
164 | ; | 164 | ; |
@@ -168,7 +168,7 @@ class InstallCommand extends ContainerAwareCommand | |||
168 | $this->defaultOutput->writeln('Droping schema and creating schema'); | 168 | $this->defaultOutput->writeln('Droping schema and creating schema'); |
169 | 169 | ||
170 | $this | 170 | $this |
171 | ->runCommand('doctrine:schema:drop', array('--force' => true)) | 171 | ->runCommand('doctrine:schema:drop', ['--force' => true]) |
172 | ->runCommand('doctrine:schema:create') | 172 | ->runCommand('doctrine:schema:create') |
173 | ; | 173 | ; |
174 | } | 174 | } |
@@ -388,19 +388,19 @@ class InstallCommand extends ContainerAwareCommand | |||
388 | * @param string $command | 388 | * @param string $command |
389 | * @param array $parameters Parameters to this command (usually 'force' => true) | 389 | * @param array $parameters Parameters to this command (usually 'force' => true) |
390 | */ | 390 | */ |
391 | protected function runCommand($command, $parameters = array()) | 391 | protected function runCommand($command, $parameters = []) |
392 | { | 392 | { |
393 | $parameters = array_merge( | 393 | $parameters = array_merge( |
394 | array('command' => $command), | 394 | ['command' => $command], |
395 | $parameters, | 395 | $parameters, |
396 | array( | 396 | [ |
397 | '--no-debug' => true, | 397 | '--no-debug' => true, |
398 | '--env' => $this->defaultInput->getOption('env') ?: 'dev', | 398 | '--env' => $this->defaultInput->getOption('env') ?: 'dev', |
399 | ) | 399 | ] |
400 | ); | 400 | ); |
401 | 401 | ||
402 | if ($this->defaultInput->getOption('no-interaction')) { | 402 | if ($this->defaultInput->getOption('no-interaction')) { |
403 | $parameters = array_merge($parameters, array('--no-interaction' => true)); | 403 | $parameters = array_merge($parameters, ['--no-interaction' => true]); |
404 | } | 404 | } |
405 | 405 | ||
406 | $this->getApplication()->setAutoExit(false); | 406 | $this->getApplication()->setAutoExit(false); |
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index 1930a2ae..779be268 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php | |||
@@ -45,7 +45,7 @@ class ConfigController extends Controller | |||
45 | 45 | ||
46 | $this->get('session')->getFlashBag()->add( | 46 | $this->get('session')->getFlashBag()->add( |
47 | 'notice', | 47 | 'notice', |
48 | 'Config saved. Some parameters will be considered after disconnection.' | 48 | 'flashes.config.notice.config_saved' |
49 | ); | 49 | ); |
50 | 50 | ||
51 | return $this->redirect($this->generateUrl('config')); | 51 | return $this->redirect($this->generateUrl('config')); |
@@ -57,9 +57,9 @@ class ConfigController extends Controller | |||
57 | 57 | ||
58 | if ($pwdForm->isValid()) { | 58 | if ($pwdForm->isValid()) { |
59 | if ($this->get('craue_config')->get('demo_mode_enabled') && $this->get('craue_config')->get('demo_mode_username') === $user->getUsername()) { | 59 | if ($this->get('craue_config')->get('demo_mode_enabled') && $this->get('craue_config')->get('demo_mode_username') === $user->getUsername()) { |
60 | $message = 'In demonstration mode, you can\'t change password for this user.'; | 60 | $message = 'flashes.config.notice.password_not_updated_demo'; |
61 | } else { | 61 | } else { |
62 | $message = 'Password updated'; | 62 | $message = 'flashes.config.notice.password_updated'; |
63 | 63 | ||
64 | $user->setPlainPassword($pwdForm->get('new_password')->getData()); | 64 | $user->setPlainPassword($pwdForm->get('new_password')->getData()); |
65 | $userManager->updateUser($user, true); | 65 | $userManager->updateUser($user, true); |
@@ -82,7 +82,7 @@ class ConfigController extends Controller | |||
82 | 82 | ||
83 | $this->get('session')->getFlashBag()->add( | 83 | $this->get('session')->getFlashBag()->add( |
84 | 'notice', | 84 | 'notice', |
85 | 'Information updated' | 85 | 'flashes.config.notice.user_updated' |
86 | ); | 86 | ); |
87 | 87 | ||
88 | return $this->redirect($this->generateUrl('config').'#set3'); | 88 | return $this->redirect($this->generateUrl('config').'#set3'); |
@@ -98,7 +98,7 @@ class ConfigController extends Controller | |||
98 | 98 | ||
99 | $this->get('session')->getFlashBag()->add( | 99 | $this->get('session')->getFlashBag()->add( |
100 | 'notice', | 100 | 'notice', |
101 | 'RSS information updated' | 101 | 'flashes.config.notice.rss_updated' |
102 | ); | 102 | ); |
103 | 103 | ||
104 | return $this->redirect($this->generateUrl('config').'#set2'); | 104 | return $this->redirect($this->generateUrl('config').'#set2'); |
@@ -116,7 +116,7 @@ class ConfigController extends Controller | |||
116 | 116 | ||
117 | $this->get('session')->getFlashBag()->add( | 117 | $this->get('session')->getFlashBag()->add( |
118 | 'notice', | 118 | 'notice', |
119 | 'Tagging rules updated' | 119 | 'flashes.config.notice.tagging_rules_updated' |
120 | ); | 120 | ); |
121 | 121 | ||
122 | return $this->redirect($this->generateUrl('config').'#set5'); | 122 | return $this->redirect($this->generateUrl('config').'#set5'); |
@@ -147,7 +147,7 @@ class ConfigController extends Controller | |||
147 | 147 | ||
148 | $this->get('session')->getFlashBag()->add( | 148 | $this->get('session')->getFlashBag()->add( |
149 | 'notice', | 149 | 'notice', |
150 | $this->get('translator')->trans('User "%username%" added', array('%username%' => $newUser->getUsername())) | 150 | $this->get('translator')->trans('flashes.config.notice.user_added', array('%username%' => $newUser->getUsername())) |
151 | ); | 151 | ); |
152 | 152 | ||
153 | return $this->redirect($this->generateUrl('config').'#set6'); | 153 | return $this->redirect($this->generateUrl('config').'#set6'); |
@@ -192,7 +192,7 @@ class ConfigController extends Controller | |||
192 | 192 | ||
193 | $this->get('session')->getFlashBag()->add( | 193 | $this->get('session')->getFlashBag()->add( |
194 | 'notice', | 194 | 'notice', |
195 | 'RSS token updated' | 195 | 'flashes.config.notice.rss_token_updated' |
196 | ); | 196 | ); |
197 | 197 | ||
198 | return $this->redirect($this->generateUrl('config').'#set2'); | 198 | return $this->redirect($this->generateUrl('config').'#set2'); |
@@ -210,7 +210,7 @@ class ConfigController extends Controller | |||
210 | public function deleteTaggingRuleAction(TaggingRule $rule) | 210 | public function deleteTaggingRuleAction(TaggingRule $rule) |
211 | { | 211 | { |
212 | if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { | 212 | if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { |
213 | throw $this->createAccessDeniedException('You can not access this tagging ryle.'); | 213 | throw $this->createAccessDeniedException('You can not access this tagging rule.'); |
214 | } | 214 | } |
215 | 215 | ||
216 | $em = $this->getDoctrine()->getManager(); | 216 | $em = $this->getDoctrine()->getManager(); |
@@ -219,7 +219,7 @@ class ConfigController extends Controller | |||
219 | 219 | ||
220 | $this->get('session')->getFlashBag()->add( | 220 | $this->get('session')->getFlashBag()->add( |
221 | 'notice', | 221 | 'notice', |
222 | 'Tagging rule deleted' | 222 | 'flashes.config.notice.tagging_rules_deleted' |
223 | ); | 223 | ); |
224 | 224 | ||
225 | return $this->redirect($this->generateUrl('config').'#set5'); | 225 | return $this->redirect($this->generateUrl('config').'#set5'); |
diff --git a/src/Wallabag/CoreBundle/Controller/DeveloperController.php b/src/Wallabag/CoreBundle/Controller/DeveloperController.php index e5cfd83c..7cb0ead2 100644 --- a/src/Wallabag/CoreBundle/Controller/DeveloperController.php +++ b/src/Wallabag/CoreBundle/Controller/DeveloperController.php | |||
@@ -49,7 +49,7 @@ class DeveloperController extends Controller | |||
49 | 49 | ||
50 | $this->get('session')->getFlashBag()->add( | 50 | $this->get('session')->getFlashBag()->add( |
51 | 'notice', | 51 | 'notice', |
52 | 'New client created.' | 52 | 'flashes.developer.notice.client_created' |
53 | ); | 53 | ); |
54 | 54 | ||
55 | return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', array( | 55 | return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', array( |
@@ -80,7 +80,7 @@ class DeveloperController extends Controller | |||
80 | 80 | ||
81 | $this->get('session')->getFlashBag()->add( | 81 | $this->get('session')->getFlashBag()->add( |
82 | 'notice', | 82 | 'notice', |
83 | 'Client deleted' | 83 | 'flashes.developer.notice.client_deleted' |
84 | ); | 84 | ); |
85 | 85 | ||
86 | return $this->redirect($this->generateUrl('developer')); | 86 | return $this->redirect($this->generateUrl('developer')); |
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php index 0fae3a0f..fa633031 100644 --- a/src/Wallabag/CoreBundle/Controller/EntryController.php +++ b/src/Wallabag/CoreBundle/Controller/EntryController.php | |||
@@ -55,7 +55,7 @@ class EntryController extends Controller | |||
55 | if (false !== $existingEntry) { | 55 | if (false !== $existingEntry) { |
56 | $this->get('session')->getFlashBag()->add( | 56 | $this->get('session')->getFlashBag()->add( |
57 | 'notice', | 57 | 'notice', |
58 | 'Entry already saved on '.$existingEntry->getCreatedAt()->format('d-m-Y') | 58 | $this->get('translator')->trans('flashes.entry.notice.entry_already_saved', array('%date%' => $existingEntry->getCreatedAt()->format('d-m-Y'))) |
59 | ); | 59 | ); |
60 | 60 | ||
61 | return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId()))); | 61 | return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId()))); |
@@ -64,7 +64,7 @@ class EntryController extends Controller | |||
64 | $this->updateEntry($entry); | 64 | $this->updateEntry($entry); |
65 | $this->get('session')->getFlashBag()->add( | 65 | $this->get('session')->getFlashBag()->add( |
66 | 'notice', | 66 | 'notice', |
67 | 'Entry saved' | 67 | 'flashes.entry.notice.entry_saved' |
68 | ); | 68 | ); |
69 | 69 | ||
70 | return $this->redirect($this->generateUrl('homepage')); | 70 | return $this->redirect($this->generateUrl('homepage')); |
@@ -92,13 +92,11 @@ class EntryController extends Controller | |||
92 | } | 92 | } |
93 | 93 | ||
94 | /** | 94 | /** |
95 | * @param Request $request | ||
96 | * | ||
97 | * @Route("/new", name="new") | 95 | * @Route("/new", name="new") |
98 | * | 96 | * |
99 | * @return \Symfony\Component\HttpFoundation\Response | 97 | * @return \Symfony\Component\HttpFoundation\Response |
100 | */ | 98 | */ |
101 | public function addEntryAction(Request $request) | 99 | public function addEntryAction() |
102 | { | 100 | { |
103 | return $this->render('WallabagCoreBundle:Entry:new.html.twig'); | 101 | return $this->render('WallabagCoreBundle:Entry:new.html.twig'); |
104 | } | 102 | } |
@@ -128,7 +126,7 @@ class EntryController extends Controller | |||
128 | 126 | ||
129 | $this->get('session')->getFlashBag()->add( | 127 | $this->get('session')->getFlashBag()->add( |
130 | 'notice', | 128 | 'notice', |
131 | 'Entry updated' | 129 | 'flashes.entry.notice.entry_updated' |
132 | ); | 130 | ); |
133 | 131 | ||
134 | return $this->redirect($this->generateUrl('view', array('id' => $entry->getId()))); | 132 | return $this->redirect($this->generateUrl('view', array('id' => $entry->getId()))); |
@@ -304,9 +302,9 @@ class EntryController extends Controller | |||
304 | { | 302 | { |
305 | $this->checkUserAction($entry); | 303 | $this->checkUserAction($entry); |
306 | 304 | ||
307 | $message = 'Entry reloaded'; | 305 | $message = 'flashes.entry.notice.entry_reloaded'; |
308 | if (false === $this->updateEntry($entry)) { | 306 | if (false === $this->updateEntry($entry)) { |
309 | $message = 'Failed to reload entry'; | 307 | $message = 'flashes.entry.notice.entry_reload_failed'; |
310 | } | 308 | } |
311 | 309 | ||
312 | $this->get('session')->getFlashBag()->add( | 310 | $this->get('session')->getFlashBag()->add( |
@@ -334,9 +332,14 @@ class EntryController extends Controller | |||
334 | $entry->toggleArchive(); | 332 | $entry->toggleArchive(); |
335 | $this->getDoctrine()->getManager()->flush(); | 333 | $this->getDoctrine()->getManager()->flush(); |
336 | 334 | ||
335 | $message = 'flashes.entry.notice.entry_unarchived'; | ||
336 | if ($entry->isArchived()) { | ||
337 | $message = 'flashes.entry.notice.entry_archived'; | ||
338 | } | ||
339 | |||
337 | $this->get('session')->getFlashBag()->add( | 340 | $this->get('session')->getFlashBag()->add( |
338 | 'notice', | 341 | 'notice', |
339 | 'Entry '.($entry->isArchived() ? 'archived' : 'unarchived') | 342 | $message |
340 | ); | 343 | ); |
341 | 344 | ||
342 | return $this->redirect($request->headers->get('referer')); | 345 | return $this->redirect($request->headers->get('referer')); |
@@ -359,9 +362,14 @@ class EntryController extends Controller | |||
359 | $entry->toggleStar(); | 362 | $entry->toggleStar(); |
360 | $this->getDoctrine()->getManager()->flush(); | 363 | $this->getDoctrine()->getManager()->flush(); |
361 | 364 | ||
365 | $message = 'flashes.entry.notice.entry_unstarred'; | ||
366 | if ($entry->isStarred()) { | ||
367 | $message = 'flashes.entry.notice.entry_starred'; | ||
368 | } | ||
369 | |||
362 | $this->get('session')->getFlashBag()->add( | 370 | $this->get('session')->getFlashBag()->add( |
363 | 'notice', | 371 | 'notice', |
364 | 'Entry '.($entry->isStarred() ? 'starred' : 'unstarred') | 372 | $message |
365 | ); | 373 | ); |
366 | 374 | ||
367 | return $this->redirect($request->headers->get('referer')); | 375 | return $this->redirect($request->headers->get('referer')); |
@@ -394,7 +402,7 @@ class EntryController extends Controller | |||
394 | 402 | ||
395 | $this->get('session')->getFlashBag()->add( | 403 | $this->get('session')->getFlashBag()->add( |
396 | 'notice', | 404 | 'notice', |
397 | 'Entry deleted' | 405 | 'flashes.entry.notice.entry_deleted' |
398 | ); | 406 | ); |
399 | 407 | ||
400 | // don't redirect user to the deleted entry | 408 | // don't redirect user to the deleted entry |
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php index 7b34939d..1a1f8c3d 100644 --- a/src/Wallabag/CoreBundle/Controller/TagController.php +++ b/src/Wallabag/CoreBundle/Controller/TagController.php | |||
@@ -20,30 +20,22 @@ class TagController extends Controller | |||
20 | */ | 20 | */ |
21 | public function addTagFormAction(Request $request, Entry $entry) | 21 | public function addTagFormAction(Request $request, Entry $entry) |
22 | { | 22 | { |
23 | $tag = new Tag(); | 23 | $form = $this->createForm(NewTagType::class, new Tag()); |
24 | $form = $this->createForm(NewTagType::class, $tag); | ||
25 | $form->handleRequest($request); | 24 | $form->handleRequest($request); |
26 | 25 | ||
27 | if ($form->isValid()) { | 26 | if ($form->isValid()) { |
28 | $existingTag = $this->getDoctrine() | 27 | $this->get('wallabag_core.content_proxy')->assignTagsToEntry( |
29 | ->getRepository('WallabagCoreBundle:Tag') | 28 | $entry, |
30 | ->findOneByLabel($tag->getLabel()); | 29 | $form->get('label')->getData() |
30 | ); | ||
31 | 31 | ||
32 | $em = $this->getDoctrine()->getManager(); | 32 | $em = $this->getDoctrine()->getManager(); |
33 | 33 | $em->persist($entry); | |
34 | if (is_null($existingTag)) { | ||
35 | $entry->addTag($tag); | ||
36 | $em->persist($tag); | ||
37 | } elseif (!$existingTag->hasEntry($entry)) { | ||
38 | $entry->addTag($existingTag); | ||
39 | $em->persist($existingTag); | ||
40 | } | ||
41 | |||
42 | $em->flush(); | 34 | $em->flush(); |
43 | 35 | ||
44 | $this->get('session')->getFlashBag()->add( | 36 | $this->get('session')->getFlashBag()->add( |
45 | 'notice', | 37 | 'notice', |
46 | 'Tag added' | 38 | 'flashes.tag.notice.tag_added' |
47 | ); | 39 | ); |
48 | 40 | ||
49 | return $this->redirect($this->generateUrl('view', array('id' => $entry->getId()))); | 41 | return $this->redirect($this->generateUrl('view', array('id' => $entry->getId()))); |
diff --git a/src/Wallabag/CoreBundle/Entity/Config.php b/src/Wallabag/CoreBundle/Entity/Config.php index e18b543b..a25656d3 100644 --- a/src/Wallabag/CoreBundle/Entity/Config.php +++ b/src/Wallabag/CoreBundle/Entity/Config.php | |||
@@ -40,7 +40,7 @@ class Config | |||
40 | * @Assert\Range( | 40 | * @Assert\Range( |
41 | * min = 1, | 41 | * min = 1, |
42 | * max = 100000, | 42 | * max = 100000, |
43 | * maxMessage = "This will certainly kill the app" | 43 | * maxMessage = "validator.item_per_page_too_high" |
44 | * ) | 44 | * ) |
45 | * @ORM\Column(name="items_per_page", type="integer", nullable=false) | 45 | * @ORM\Column(name="items_per_page", type="integer", nullable=false) |
46 | */ | 46 | */ |
@@ -68,7 +68,7 @@ class Config | |||
68 | * @Assert\Range( | 68 | * @Assert\Range( |
69 | * min = 1, | 69 | * min = 1, |
70 | * max = 100000, | 70 | * max = 100000, |
71 | * maxMessage = "This will certainly kill the app" | 71 | * maxMessage = "validator.rss_limit_too_hight" |
72 | * ) | 72 | * ) |
73 | */ | 73 | */ |
74 | private $rssLimit; | 74 | private $rssLimit; |
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php index 8f4ddf61..1271f1f5 100644 --- a/src/Wallabag/CoreBundle/Entity/Entry.php +++ b/src/Wallabag/CoreBundle/Entity/Entry.php | |||
@@ -187,7 +187,7 @@ class Entry | |||
187 | /* | 187 | /* |
188 | * @param User $user | 188 | * @param User $user |
189 | */ | 189 | */ |
190 | public function __construct(\Wallabag\UserBundle\Entity\User $user) | 190 | public function __construct(User $user) |
191 | { | 191 | { |
192 | $this->user = $user; | 192 | $this->user = $user; |
193 | $this->tags = new ArrayCollection(); | 193 | $this->tags = new ArrayCollection(); |
diff --git a/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php b/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php index 7d05a5d8..841af51e 100644 --- a/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php +++ b/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php | |||
@@ -16,23 +16,27 @@ class ChangePasswordType extends AbstractType | |||
16 | { | 16 | { |
17 | $builder | 17 | $builder |
18 | ->add('old_password', PasswordType::class, array( | 18 | ->add('old_password', PasswordType::class, array( |
19 | 'constraints' => new UserPassword(array('message' => 'Wrong value for your current password')), | 19 | 'constraints' => new UserPassword(array('message' => 'validator.password_wrong_value')), |
20 | 'label' => 'config.form_password.old_password_label', | ||
20 | )) | 21 | )) |
21 | ->add('new_password', RepeatedType::class, array( | 22 | ->add('new_password', RepeatedType::class, array( |
22 | 'type' => PasswordType::class, | 23 | 'type' => PasswordType::class, |
23 | 'invalid_message' => 'The password fields must match.', | 24 | 'invalid_message' => 'validator.password_must_match', |
24 | 'required' => true, | 25 | 'required' => true, |
25 | 'first_options' => array('label' => 'New password'), | 26 | 'first_options' => array('label' => 'config.form_password.new_password_label'), |
26 | 'second_options' => array('label' => 'Repeat new password'), | 27 | 'second_options' => array('label' => 'config.form_password.repeat_new_password_label'), |
27 | 'constraints' => array( | 28 | 'constraints' => array( |
28 | new Constraints\Length(array( | 29 | new Constraints\Length(array( |
29 | 'min' => 8, | 30 | 'min' => 8, |
30 | 'minMessage' => 'Password should by at least 8 chars long', | 31 | 'minMessage' => 'validator.password_too_short', |
31 | )), | 32 | )), |
32 | new Constraints\NotBlank(), | 33 | new Constraints\NotBlank(), |
33 | ), | 34 | ), |
35 | 'label' => 'config.form_password.new_password_label', | ||
36 | )) | ||
37 | ->add('save', SubmitType::class, array( | ||
38 | 'label' => 'config.form.save', | ||
34 | )) | 39 | )) |
35 | ->add('save', SubmitType::class) | ||
36 | ; | 40 | ; |
37 | } | 41 | } |
38 | 42 | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/ClientType.php b/src/Wallabag/CoreBundle/Form/Type/ClientType.php index dd934715..9f620414 100644 --- a/src/Wallabag/CoreBundle/Form/Type/ClientType.php +++ b/src/Wallabag/CoreBundle/Form/Type/ClientType.php | |||
@@ -14,8 +14,8 @@ class ClientType extends AbstractType | |||
14 | public function buildForm(FormBuilderInterface $builder, array $options) | 14 | public function buildForm(FormBuilderInterface $builder, array $options) |
15 | { | 15 | { |
16 | $builder | 16 | $builder |
17 | ->add('redirect_uris', UrlType::class, array('required' => true, 'label' => 'Redirect URIs')) | 17 | ->add('redirect_uris', UrlType::class, array('required' => true, 'label' => 'developer.client.form.redirect_uris_label')) |
18 | ->add('save', SubmitType::class, array('label' => 'Create a new client')) | 18 | ->add('save', SubmitType::class, array('label' => 'developer.client.form.save_label')) |
19 | ; | 19 | ; |
20 | 20 | ||
21 | $builder->get('redirect_uris') | 21 | $builder->get('redirect_uris') |
diff --git a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php index 0a5ea6cc..b30b4706 100644 --- a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php +++ b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php | |||
@@ -33,21 +33,28 @@ class ConfigType extends AbstractType | |||
33 | ->add('theme', ChoiceType::class, array( | 33 | ->add('theme', ChoiceType::class, array( |
34 | 'choices' => array_flip($this->themes), | 34 | 'choices' => array_flip($this->themes), |
35 | 'choices_as_values' => true, | 35 | 'choices_as_values' => true, |
36 | 'label' => 'config.form_settings.theme_label', | ||
37 | )) | ||
38 | ->add('items_per_page', null, array( | ||
39 | 'label' => 'config.form_settings.items_per_page_label', | ||
36 | )) | 40 | )) |
37 | ->add('items_per_page') | ||
38 | ->add('reading_speed', ChoiceType::class, array( | 41 | ->add('reading_speed', ChoiceType::class, array( |
42 | 'label' => 'config.form_settings.reading_speed.label', | ||
39 | 'choices' => array( | 43 | 'choices' => array( |
40 | 'I read ~100 words per minute' => '0.5', | 44 | 'config.form_settings.reading_speed.100_word' => '0.5', |
41 | 'I read ~200 words per minute' => '1', | 45 | 'config.form_settings.reading_speed.200_word' => '1', |
42 | 'I read ~300 words per minute' => '1.5', | 46 | 'config.form_settings.reading_speed.300_word' => '1.5', |
43 | 'I read ~400 words per minute' => '2', | 47 | 'config.form_settings.reading_speed.400_word' => '2', |
44 | ), | 48 | ), |
45 | )) | 49 | )) |
46 | ->add('language', ChoiceType::class, array( | 50 | ->add('language', ChoiceType::class, array( |
47 | 'choices' => array_flip($this->languages), | 51 | 'choices' => array_flip($this->languages), |
48 | 'choices_as_values' => true, | 52 | 'choices_as_values' => true, |
53 | 'label' => 'config.form_settings.language_label', | ||
54 | )) | ||
55 | ->add('save', SubmitType::class, array( | ||
56 | 'label' => 'config.form.save', | ||
49 | )) | 57 | )) |
50 | ->add('save', SubmitType::class) | ||
51 | ; | 58 | ; |
52 | } | 59 | } |
53 | 60 | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php b/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php index 2b1e1ef4..23d7b239 100644 --- a/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php +++ b/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php | |||
@@ -14,9 +14,22 @@ class EditEntryType extends AbstractType | |||
14 | public function buildForm(FormBuilderInterface $builder, array $options) | 14 | public function buildForm(FormBuilderInterface $builder, array $options) |
15 | { | 15 | { |
16 | $builder | 16 | $builder |
17 | ->add('title', TextType::class, array('required' => true)) | 17 | ->add('title', TextType::class, array( |
18 | ->add('is_public', CheckboxType::class, array('required' => false)) | 18 | 'required' => true, |
19 | ->add('save', SubmitType::class) | 19 | 'label' => 'entry.edit.title_label', |
20 | )) | ||
21 | ->add('is_public', CheckboxType::class, array( | ||
22 | 'required' => false, | ||
23 | 'label' => 'entry.edit.is_public_label', | ||
24 | )) | ||
25 | ->add('url', TextType::class, array( | ||
26 | 'disabled' => true, | ||
27 | 'required' => false, | ||
28 | 'label' => 'entry.edit.url_label', | ||
29 | )) | ||
30 | ->add('save', SubmitType::class, array( | ||
31 | 'label' => 'entry.edit.save_label', | ||
32 | )) | ||
20 | ; | 33 | ; |
21 | } | 34 | } |
22 | 35 | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php index ee10bc8b..ec36503b 100644 --- a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php +++ b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php | |||
@@ -34,7 +34,9 @@ class EntryFilterType extends AbstractType | |||
34 | public function buildForm(FormBuilderInterface $builder, array $options) | 34 | public function buildForm(FormBuilderInterface $builder, array $options) |
35 | { | 35 | { |
36 | $builder | 36 | $builder |
37 | ->add('readingTime', NumberRangeFilterType::class) | 37 | ->add('readingTime', NumberRangeFilterType::class, array( |
38 | 'label' => 'entry.filters.reading_time.label', | ||
39 | )) | ||
38 | ->add('createdAt', DateRangeFilterType::class, array( | 40 | ->add('createdAt', DateRangeFilterType::class, array( |
39 | 'left_date_options' => array( | 41 | 'left_date_options' => array( |
40 | 'attr' => array( | 42 | 'attr' => array( |
@@ -50,6 +52,7 @@ class EntryFilterType extends AbstractType | |||
50 | 'format' => 'dd/MM/yyyy', | 52 | 'format' => 'dd/MM/yyyy', |
51 | 'widget' => 'single_text', | 53 | 'widget' => 'single_text', |
52 | ), | 54 | ), |
55 | 'label' => 'entry.filters.created_at.label', | ||
53 | ) | 56 | ) |
54 | ) | 57 | ) |
55 | ->add('domainName', TextFilterType::class, array( | 58 | ->add('domainName', TextFilterType::class, array( |
@@ -62,9 +65,14 @@ class EntryFilterType extends AbstractType | |||
62 | 65 | ||
63 | return $filterQuery->createCondition($expression); | 66 | return $filterQuery->createCondition($expression); |
64 | }, | 67 | }, |
68 | 'label' => 'entry.filters.domain_label', | ||
69 | )) | ||
70 | ->add('isArchived', CheckboxFilterType::class, array( | ||
71 | 'label' => 'entry.filters.archived_label', | ||
72 | )) | ||
73 | ->add('isStarred', CheckboxFilterType::class, array( | ||
74 | 'label' => 'entry.filters.starred_label', | ||
65 | )) | 75 | )) |
66 | ->add('isArchived', CheckboxFilterType::class) | ||
67 | ->add('isStarred', CheckboxFilterType::class) | ||
68 | ->add('previewPicture', CheckboxFilterType::class, array( | 76 | ->add('previewPicture', CheckboxFilterType::class, array( |
69 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { | 77 | 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { |
70 | if (false === $values['value']) { | 78 | if (false === $values['value']) { |
@@ -75,10 +83,12 @@ class EntryFilterType extends AbstractType | |||
75 | 83 | ||
76 | return $filterQuery->createCondition($expression); | 84 | return $filterQuery->createCondition($expression); |
77 | }, | 85 | }, |
86 | 'label' => 'entry.filters.preview_picture_label', | ||
78 | )) | 87 | )) |
79 | ->add('language', ChoiceFilterType::class, array( | 88 | ->add('language', ChoiceFilterType::class, array( |
80 | 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())), | 89 | 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())), |
81 | 'choices_as_values' => true, | 90 | 'choices_as_values' => true, |
91 | 'label' => 'entry.filters.language_label', | ||
82 | )) | 92 | )) |
83 | ; | 93 | ; |
84 | } | 94 | } |
diff --git a/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php b/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php index fbce13f1..69fab6fb 100644 --- a/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php +++ b/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php | |||
@@ -3,7 +3,6 @@ | |||
3 | namespace Wallabag\CoreBundle\Form\Type; | 3 | namespace Wallabag\CoreBundle\Form\Type; |
4 | 4 | ||
5 | use Symfony\Component\Form\AbstractType; | 5 | use Symfony\Component\Form\AbstractType; |
6 | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||
7 | use Symfony\Component\Form\Extension\Core\Type\UrlType; | 6 | use Symfony\Component\Form\Extension\Core\Type\UrlType; |
8 | use Symfony\Component\Form\FormBuilderInterface; | 7 | use Symfony\Component\Form\FormBuilderInterface; |
9 | use Symfony\Component\OptionsResolver\OptionsResolver; | 8 | use Symfony\Component\OptionsResolver\OptionsResolver; |
@@ -13,8 +12,10 @@ class NewEntryType extends AbstractType | |||
13 | public function buildForm(FormBuilderInterface $builder, array $options) | 12 | public function buildForm(FormBuilderInterface $builder, array $options) |
14 | { | 13 | { |
15 | $builder | 14 | $builder |
16 | ->add('url', UrlType::class, array('required' => true)) | 15 | ->add('url', UrlType::class, array( |
17 | ->add('save', SubmitType::class) | 16 | 'required' => true, |
17 | 'label' => 'entry.new.form_new.url_label', | ||
18 | )) | ||
18 | ; | 19 | ; |
19 | } | 20 | } |
20 | 21 | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/NewTagType.php b/src/Wallabag/CoreBundle/Form/Type/NewTagType.php index 0f559031..c7568de7 100644 --- a/src/Wallabag/CoreBundle/Form/Type/NewTagType.php +++ b/src/Wallabag/CoreBundle/Form/Type/NewTagType.php | |||
@@ -3,7 +3,6 @@ | |||
3 | namespace Wallabag\CoreBundle\Form\Type; | 3 | namespace Wallabag\CoreBundle\Form\Type; |
4 | 4 | ||
5 | use Symfony\Component\Form\AbstractType; | 5 | use Symfony\Component\Form\AbstractType; |
6 | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||
7 | use Symfony\Component\Form\Extension\Core\Type\TextType; | 6 | use Symfony\Component\Form\Extension\Core\Type\TextType; |
8 | use Symfony\Component\Form\FormBuilderInterface; | 7 | use Symfony\Component\Form\FormBuilderInterface; |
9 | use Symfony\Component\OptionsResolver\OptionsResolver; | 8 | use Symfony\Component\OptionsResolver\OptionsResolver; |
@@ -14,7 +13,6 @@ class NewTagType extends AbstractType | |||
14 | { | 13 | { |
15 | $builder | 14 | $builder |
16 | ->add('label', TextType::class, array('required' => true)) | 15 | ->add('label', TextType::class, array('required' => true)) |
17 | ->add('save', SubmitType::class) | ||
18 | ; | 16 | ; |
19 | } | 17 | } |
20 | 18 | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/NewUserType.php b/src/Wallabag/CoreBundle/Form/Type/NewUserType.php index 6eb0e63f..60fcc20c 100644 --- a/src/Wallabag/CoreBundle/Form/Type/NewUserType.php +++ b/src/Wallabag/CoreBundle/Form/Type/NewUserType.php | |||
@@ -17,22 +17,30 @@ class NewUserType extends AbstractType | |||
17 | public function buildForm(FormBuilderInterface $builder, array $options) | 17 | public function buildForm(FormBuilderInterface $builder, array $options) |
18 | { | 18 | { |
19 | $builder | 19 | $builder |
20 | ->add('username', TextType::class, array('required' => true)) | 20 | ->add('username', TextType::class, array( |
21 | 'required' => true, | ||
22 | 'label' => 'config.form_new_user.username_label', | ||
23 | )) | ||
21 | ->add('plainPassword', RepeatedType::class, array( | 24 | ->add('plainPassword', RepeatedType::class, array( |
22 | 'type' => PasswordType::class, | 25 | 'type' => PasswordType::class, |
23 | 'invalid_message' => 'The password fields must match', | 26 | 'invalid_message' => 'validator.password_must_match', |
24 | 'first_options' => array('label' => 'Password'), | 27 | 'first_options' => array('label' => 'config.form_new_user.password_label'), |
25 | 'second_options' => array('label' => 'Repeat new password'), | 28 | 'second_options' => array('label' => 'config.form_new_user.repeat_new_password_label'), |
26 | 'constraints' => array( | 29 | 'constraints' => array( |
27 | new Constraints\Length(array( | 30 | new Constraints\Length(array( |
28 | 'min' => 8, | 31 | 'min' => 8, |
29 | 'minMessage' => 'Password should by at least 8 chars long', | 32 | 'minMessage' => 'validator.password_too_short', |
30 | )), | 33 | )), |
31 | new Constraints\NotBlank(), | 34 | new Constraints\NotBlank(), |
32 | ), | 35 | ), |
36 | 'label' => 'config.form_new_user.plain_password_label', | ||
37 | )) | ||
38 | ->add('email', EmailType::class, array( | ||
39 | 'label' => 'config.form_new_user.email_label', | ||
40 | )) | ||
41 | ->add('save', SubmitType::class, array( | ||
42 | 'label' => 'config.form.save', | ||
33 | )) | 43 | )) |
34 | ->add('email', EmailType::class) | ||
35 | ->add('save', SubmitType::class) | ||
36 | ; | 44 | ; |
37 | } | 45 | } |
38 | 46 | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/RssType.php b/src/Wallabag/CoreBundle/Form/Type/RssType.php index def8782c..a9f68e54 100644 --- a/src/Wallabag/CoreBundle/Form/Type/RssType.php +++ b/src/Wallabag/CoreBundle/Form/Type/RssType.php | |||
@@ -12,8 +12,12 @@ class RssType extends AbstractType | |||
12 | public function buildForm(FormBuilderInterface $builder, array $options) | 12 | public function buildForm(FormBuilderInterface $builder, array $options) |
13 | { | 13 | { |
14 | $builder | 14 | $builder |
15 | ->add('rss_limit') | 15 | ->add('rss_limit', null, array( |
16 | ->add('save', SubmitType::class) | 16 | 'label' => 'config.form_rss.rss_limit', |
17 | )) | ||
18 | ->add('save', SubmitType::class, array( | ||
19 | 'label' => 'config.form.save', | ||
20 | )) | ||
17 | ; | 21 | ; |
18 | } | 22 | } |
19 | 23 | ||
diff --git a/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php index 5815b8c6..cfee21f1 100644 --- a/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php +++ b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php | |||
@@ -14,12 +14,19 @@ class TaggingRuleType extends AbstractType | |||
14 | public function buildForm(FormBuilderInterface $builder, array $options) | 14 | public function buildForm(FormBuilderInterface $builder, array $options) |
15 | { | 15 | { |
16 | $builder | 16 | $builder |
17 | ->add('rule', TextType::class, array('required' => true)) | 17 | ->add('rule', TextType::class, array( |
18 | ->add('save', SubmitType::class) | 18 | 'required' => true, |
19 | 'label' => 'config.form_rules.rule_label', | ||
20 | )) | ||
21 | ->add('save', SubmitType::class, array( | ||
22 | 'label' => 'config.form.save', | ||
23 | )) | ||
19 | ; | 24 | ; |
20 | 25 | ||
21 | $tagsField = $builder | 26 | $tagsField = $builder |
22 | ->create('tags', TextType::class) | 27 | ->create('tags', TextType::class, array( |
28 | 'label' => 'config.form_rules.tags_label', | ||
29 | )) | ||
23 | ->addModelTransformer(new StringToListTransformer(',')); | 30 | ->addModelTransformer(new StringToListTransformer(',')); |
24 | 31 | ||
25 | $builder->add($tagsField); | 32 | $builder->add($tagsField); |
diff --git a/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php b/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php index f491b0ae..799ea39e 100644 --- a/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php +++ b/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php | |||
@@ -15,10 +15,19 @@ class UserInformationType extends AbstractType | |||
15 | public function buildForm(FormBuilderInterface $builder, array $options) | 15 | public function buildForm(FormBuilderInterface $builder, array $options) |
16 | { | 16 | { |
17 | $builder | 17 | $builder |
18 | ->add('name', TextType::class) | 18 | ->add('name', TextType::class, array( |
19 | ->add('email', EmailType::class) | 19 | 'label' => 'config.form_user.name_label', |
20 | ->add('twoFactorAuthentication', CheckboxType::class, array('required' => false)) | 20 | )) |
21 | ->add('save', SubmitType::class) | 21 | ->add('email', EmailType::class, array( |
22 | 'label' => 'config.form_user.email_label', | ||
23 | )) | ||
24 | ->add('twoFactorAuthentication', CheckboxType::class, array( | ||
25 | 'required' => false, | ||
26 | 'label' => 'config.form_user.twoFactorAuthentication_label', | ||
27 | )) | ||
28 | ->add('save', SubmitType::class, array( | ||
29 | 'label' => 'config.form.save', | ||
30 | )) | ||
22 | ->remove('username') | 31 | ->remove('username') |
23 | ->remove('plainPassword') | 32 | ->remove('plainPassword') |
24 | ; | 33 | ; |
diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php index ba90b731..ed4a220d 100644 --- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php +++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php | |||
@@ -32,14 +32,21 @@ class ContentProxy | |||
32 | * Fetch content using graby and hydrate given entry with results information. | 32 | * Fetch content using graby and hydrate given entry with results information. |
33 | * In case we couldn't find content, we'll try to use Open Graph data. | 33 | * In case we couldn't find content, we'll try to use Open Graph data. |
34 | * | 34 | * |
35 | * @param Entry $entry Entry to update | 35 | * We can also force the content, in case of an import from the v1 for example, so the function won't |
36 | * @param string $url Url to grab content for | 36 | * fetch the content from the website but rather use information given with the $content parameter. |
37 | * | ||
38 | * @param Entry $entry Entry to update | ||
39 | * @param string $url Url to grab content for | ||
40 | * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url | ||
37 | * | 41 | * |
38 | * @return Entry | 42 | * @return Entry |
39 | */ | 43 | */ |
40 | public function updateEntry(Entry $entry, $url) | 44 | public function updateEntry(Entry $entry, $url, array $content = []) |
41 | { | 45 | { |
42 | $content = $this->graby->fetchContent($url); | 46 | // do we have to fetch the content or the provided one is ok? |
47 | if (empty($content) || false === $this->validateContent($content)) { | ||
48 | $content = $this->graby->fetchContent($url); | ||
49 | } | ||
43 | 50 | ||
44 | $title = $content['title']; | 51 | $title = $content['title']; |
45 | if (!$title && isset($content['open_graph']['og_title'])) { | 52 | if (!$title && isset($content['open_graph']['og_title'])) { |
@@ -62,7 +69,11 @@ class ContentProxy | |||
62 | $entry->setLanguage($content['language']); | 69 | $entry->setLanguage($content['language']); |
63 | $entry->setMimetype($content['content_type']); | 70 | $entry->setMimetype($content['content_type']); |
64 | $entry->setReadingTime(Utils::getReadingTime($html)); | 71 | $entry->setReadingTime(Utils::getReadingTime($html)); |
65 | $entry->setDomainName(parse_url($entry->getUrl(), PHP_URL_HOST)); | 72 | |
73 | $domainName = parse_url($entry->getUrl(), PHP_URL_HOST); | ||
74 | if (false !== $domainName) { | ||
75 | $entry->setDomainName($domainName); | ||
76 | } | ||
66 | 77 | ||
67 | if (isset($content['open_graph']['og_image'])) { | 78 | if (isset($content['open_graph']['og_image'])) { |
68 | $entry->setPreviewPicture($content['open_graph']['og_image']); | 79 | $entry->setPreviewPicture($content['open_graph']['og_image']); |
@@ -113,4 +124,17 @@ class ContentProxy | |||
113 | } | 124 | } |
114 | } | 125 | } |
115 | } | 126 | } |
127 | |||
128 | /** | ||
129 | * Validate that the given content as enough value to be used | ||
130 | * instead of fetch the content from the url. | ||
131 | * | ||
132 | * @param array $content | ||
133 | * | ||
134 | * @return bool true if valid otherwise false | ||
135 | */ | ||
136 | private function validateContent(array $content) | ||
137 | { | ||
138 | return isset($content['title']) && isset($content['html']) && isset($content['url']) && isset($content['language']) && isset($content['content_type']); | ||
139 | } | ||
116 | } | 140 | } |
diff --git a/src/Wallabag/CoreBundle/Helper/EntriesExport.php b/src/Wallabag/CoreBundle/Helper/EntriesExport.php index 6ecdf019..d0680c3f 100644 --- a/src/Wallabag/CoreBundle/Helper/EntriesExport.php +++ b/src/Wallabag/CoreBundle/Helper/EntriesExport.php | |||
@@ -81,27 +81,9 @@ class EntriesExport | |||
81 | */ | 81 | */ |
82 | public function exportAs($format) | 82 | public function exportAs($format) |
83 | { | 83 | { |
84 | switch ($format) { | 84 | $functionName = 'produce'.ucfirst($format); |
85 | case 'epub': | 85 | if (method_exists($this, $functionName)) { |
86 | return $this->produceEpub(); | 86 | return $this->$functionName(); |
87 | |||
88 | case 'mobi': | ||
89 | return $this->produceMobi(); | ||
90 | |||
91 | case 'pdf': | ||
92 | return $this->producePDF(); | ||
93 | |||
94 | case 'csv': | ||
95 | return $this->produceCSV(); | ||
96 | |||
97 | case 'json': | ||
98 | return $this->produceJSON(); | ||
99 | |||
100 | case 'xml': | ||
101 | return $this->produceXML(); | ||
102 | |||
103 | case 'txt': | ||
104 | return $this->produceTXT(); | ||
105 | } | 87 | } |
106 | 88 | ||
107 | throw new \InvalidArgumentException(sprintf('The format "%s" is not yet supported.', $format)); | 89 | throw new \InvalidArgumentException(sprintf('The format "%s" is not yet supported.', $format)); |
@@ -242,7 +224,7 @@ class EntriesExport | |||
242 | /** | 224 | /** |
243 | * Use TCPDF to dump a .pdf file. | 225 | * Use TCPDF to dump a .pdf file. |
244 | */ | 226 | */ |
245 | private function producePDF() | 227 | private function producePdf() |
246 | { | 228 | { |
247 | $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); | 229 | $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); |
248 | 230 | ||
@@ -296,7 +278,7 @@ class EntriesExport | |||
296 | /** | 278 | /** |
297 | * Inspired from CsvFileDumper. | 279 | * Inspired from CsvFileDumper. |
298 | */ | 280 | */ |
299 | private function produceCSV() | 281 | private function produceCsv() |
300 | { | 282 | { |
301 | $delimiter = ';'; | 283 | $delimiter = ';'; |
302 | $enclosure = '"'; | 284 | $enclosure = '"'; |
@@ -336,7 +318,7 @@ class EntriesExport | |||
336 | ); | 318 | ); |
337 | } | 319 | } |
338 | 320 | ||
339 | private function produceJSON() | 321 | private function produceJson() |
340 | { | 322 | { |
341 | return Response::create( | 323 | return Response::create( |
342 | $this->prepareSerializingContent('json'), | 324 | $this->prepareSerializingContent('json'), |
@@ -349,7 +331,7 @@ class EntriesExport | |||
349 | ); | 331 | ); |
350 | } | 332 | } |
351 | 333 | ||
352 | private function produceXML() | 334 | private function produceXml() |
353 | { | 335 | { |
354 | return Response::create( | 336 | return Response::create( |
355 | $this->prepareSerializingContent('xml'), | 337 | $this->prepareSerializingContent('xml'), |
@@ -362,7 +344,7 @@ class EntriesExport | |||
362 | ); | 344 | ); |
363 | } | 345 | } |
364 | 346 | ||
365 | private function produceTXT() | 347 | private function produceTxt() |
366 | { | 348 | { |
367 | $content = ''; | 349 | $content = ''; |
368 | $bar = str_repeat('=', 100); | 350 | $bar = str_repeat('=', 100); |
@@ -385,6 +367,8 @@ class EntriesExport | |||
385 | /** | 367 | /** |
386 | * Return a Serializer object for producing processes that need it (JSON & XML). | 368 | * Return a Serializer object for producing processes that need it (JSON & XML). |
387 | * | 369 | * |
370 | * @param string $format | ||
371 | * | ||
388 | * @return Serializer | 372 | * @return Serializer |
389 | */ | 373 | */ |
390 | private function prepareSerializingContent($format) | 374 | private function prepareSerializingContent($format) |
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js index a7acd84c..34e934cc 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js +++ b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js | |||
@@ -79,19 +79,6 @@ $.fn.ready(function() { | |||
79 | }); | 79 | }); |
80 | 80 | ||
81 | /* ========================================================================== | 81 | /* ========================================================================== |
82 | Keyboard gestion | ||
83 | ========================================================================== */ | ||
84 | |||
85 | $(window).keydown(function(e){ | ||
86 | if ( ( e.target.tagName.toLowerCase() !== 'input' && e.keyCode == 83 ) || (e.keyCode == 27 && $bagitForm.is(':visible') ) ) { | ||
87 | $bagit.removeClass("current"); | ||
88 | $("#bagit-arrow").removeClass("arrow-down"); | ||
89 | toggleSaveLinkForm(); | ||
90 | return false; | ||
91 | } | ||
92 | }); | ||
93 | |||
94 | /* ========================================================================== | ||
95 | Process all links inside an article | 82 | Process all links inside an article |
96 | ========================================================================== */ | 83 | ========================================================================== */ |
97 | 84 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css index 6f44e1da..96c38822 100755 --- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css +++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css | |||
@@ -54,20 +54,6 @@ body.login main { | |||
54 | padding: 0; | 54 | padding: 0; |
55 | } | 55 | } |
56 | 56 | ||
57 | #warning_message { | ||
58 | position: fixed; | ||
59 | background-color: #ff6347; | ||
60 | z-index: 1000; | ||
61 | bottom: 0; | ||
62 | left: 0; | ||
63 | width: 100%; | ||
64 | color: #000; | ||
65 | } | ||
66 | |||
67 | #warning_message a { | ||
68 | color: #555; | ||
69 | } | ||
70 | |||
71 | .border-bottom { | 57 | .border-bottom { |
72 | border-bottom: 1px solid #DDD; | 58 | border-bottom: 1px solid #DDD; |
73 | } | 59 | } |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml index d3311d3a..d19cf1bf 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml | |||
@@ -1,130 +1,425 @@ | |||
1 | #Login | 1 | security: |
2 | Keep me logged in: 'Forbliv logget ind' | 2 | login: |
3 | Forgot your password?: 'Glemt adgangskoden?' | 3 | # page_title: 'Welcome to wallabag!' |
4 | Login: 'Log ind' | 4 | keep_logged_in: 'Forbliv logget ind' |
5 | Back to login: 'Tilbage til login' | 5 | forgot_password: 'Glemt adgangskoden?' |
6 | Send: 'Send' | 6 | submit: 'Log ind' |
7 | "Enter your email address below and we'll send you password reset instructions.": "Indtast din emailadresse nedenfor, så vil du modtage instrukser om at nulstille adgangskoden." | 7 | # register: 'Register' |
8 | username: 'Brugernavn' | ||
9 | password: 'Adgangskode' | ||
10 | # cancel: 'Cancel' | ||
11 | resetting: | ||
12 | description: "Indtast din emailadresse nedenfor, så vil du modtage instrukser om at nulstille adgangskoden." | ||
13 | register: | ||
14 | # page_title: 'Create an account' | ||
15 | # go_to_account: 'Go to your account' | ||
8 | 16 | ||
9 | # Menu | 17 | menu: |
10 | unread: 'ulæst' | 18 | left: |
11 | starred: 'favoritter' | 19 | unread: 'Ulæst' |
12 | archive: 'arkiv' | 20 | starred: 'Favoritter' |
13 | all: 'alle artikler' | 21 | archive: 'Arkiv' |
14 | tags: 'tags' | 22 | all_articles: 'Alle artikler' |
15 | config: 'Opsætning' | 23 | config: 'Opsætning' |
16 | howto: 'how-to' | 24 | tags: 'Tags' |
17 | logout: 'log ud' | 25 | # internal_settings: 'Internal Settings' |
18 | Filtered: 'Filtreret' | 26 | # import: 'Import' |
19 | About: 'Om' | 27 | howto: 'KUow-to' |
28 | # developer: 'Developer' | ||
29 | logout: 'Log ud' | ||
30 | about: 'Om' | ||
31 | search: 'Søg' | ||
32 | # save_link: 'Save a link' | ||
33 | back_to_unread: 'Tilbage til de ulæste artikler' | ||
34 | top: | ||
35 | add_new_entry: 'Tilføj ny artikel' | ||
36 | search: 'Søg' | ||
37 | filter_entries: 'Filtrer artikler' | ||
38 | # export: 'Export' | ||
39 | search_form: | ||
40 | input_label: 'Indtast søgning' | ||
20 | 41 | ||
21 | # Header | 42 | footer: |
22 | Back to unread articles: 'Tilbage til de ulæste artikler' | 43 | wallabag: |
23 | Add a new entry: 'Tilføj ny artikel' | 44 | # elsewhere: 'Take wallabag with you' |
24 | Search: 'Søg' | 45 | # social: 'Social' |
25 | Filter entries: 'Filtrer artikler' | 46 | # powered_by: 'powered by' |
26 | Enter your search here: 'Indtast søgning' | 47 | about: 'Om' |
27 | Save new entry: 'Gem ny artikel' | ||
28 | 48 | ||
29 | # Config screen | 49 | config: |
30 | Settings: 'Indstillinger' | 50 | page_title: 'Opsætning' |
31 | User information: 'Brugeroplysninger' | 51 | tab_menu: |
32 | Password: 'Adgangskode' | 52 | settings: 'Indstillinger' |
33 | RSS: 'RSS' | 53 | rss: 'RSS' |
34 | Add a user: 'Tilføj bruger' | 54 | user_info: 'Brugeroplysninger' |
35 | Theme: 'Tema' | 55 | password: 'Adgangskode' |
36 | Items per page: 'Poster pr. side' | 56 | # rules: 'Tagging rules' |
37 | Language: 'Sprog' | 57 | new_user: 'Tilføj bruger' |
38 | Save: 'Gem' | 58 | form: |
39 | RSS token: 'RSS-Token' | 59 | save: 'Gem' |
40 | Name: 'Navn' | 60 | form_settings: |
41 | Email: 'Emailadresse' | 61 | theme_label: 'Tema' |
42 | No token: 'Intet token' | 62 | items_per_page_label: 'Poster pr. side' |
43 | Reset your token: 'Nulstil token' | 63 | language_label: 'Sprog' |
44 | Create your token: 'Opret token' | 64 | reading_speed: |
45 | Rss limit: 'RSS-grænse' | 65 | # label: 'Reading speed' |
46 | RSS links: 'RSS-Links' | 66 | # help_message: 'You can use online tools to estimate your reading speed:' |
47 | 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'RSS-feeds fra wallabag gør det muligt at læse de artikler, der gemmes i wallabag, med din RSS-læser. Det kræver, at du genererer et token først.' | 67 | # 100_word: 'I read ~100 words per minute' |
48 | Old password: 'Gammel adgangskode' | 68 | # 200_word: 'I read ~200 words per minute' |
49 | New password: 'Ny adgangskode' | 69 | # 300_word: 'I read ~300 words per minute' |
50 | Repeat new password: 'Gentag adgangskode' | 70 | # 400_word: 'I read ~400 words per minute' |
51 | Username: 'Brugernavn' | 71 | form_rss: |
72 | description: 'RSS-feeds fra wallabag gør det muligt at læse de artikler, der gemmes i wallabag, med din RSS-læser. Det kræver, at du genererer et token først.' | ||
73 | token_label: 'RSS-Token' | ||
74 | no_token: 'Intet token' | ||
75 | token_create: 'Opret token' | ||
76 | token_reset: 'Nulstil token' | ||
77 | rss_links: 'RSS-Links' | ||
78 | rss_link: | ||
79 | unread: 'ulæst' | ||
80 | starred: 'favoritter' | ||
81 | archive: 'arkiv' | ||
82 | # rss_limit: 'Number of items in the feed' | ||
83 | form_user: | ||
84 | # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion" | ||
85 | name_label: 'Navn' | ||
86 | email_label: 'Emailadresse' | ||
87 | # twoFactorAuthentication_label: 'Two factor authentication' | ||
88 | form_password: | ||
89 | old_password_label: 'Gammel adgangskode' | ||
90 | new_password_label: 'Ny adgangskode' | ||
91 | repeat_new_password_label: 'Gentag adgangskode' | ||
92 | form_rules: | ||
93 | # if_label: 'if' | ||
94 | # then_tag_as_label: 'then tag as' | ||
95 | # delete_rule_label: 'delete' | ||
96 | # rule_label: 'Rule' | ||
97 | # tags_label: 'Tags' | ||
98 | # faq: | ||
99 | # title: 'FAQ' | ||
100 | # tagging_rules_definition_title: 'What does « tagging rules » mean?' | ||
101 | # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.' | ||
102 | # how_to_use_them_title: 'How do I use them?' | ||
103 | # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' | ||
104 | # variables_available_title: 'Which variables and operators can I use to write rules?' | ||
105 | # variables_available_description: 'The following variables and operators can be used to create tagging rules:' | ||
106 | # meaning: 'Meaning' | ||
107 | # variable_description: | ||
108 | # label: 'Variable' | ||
109 | # title: 'Title of the entry' | ||
110 | # url: 'URL of the entry' | ||
111 | # isArchived: 'Whether the entry is archived or not' | ||
112 | # isStarred: 'Whether the entry is starred or not' | ||
113 | # content: "The entry's content" | ||
114 | # language: "The entry's language" | ||
115 | # mimetype: "The entry's mime-type" | ||
116 | # readingTime: "The estimated entry's reading time, in minutes" | ||
117 | # domainName: 'The domain name of the entry' | ||
118 | # operator_description: | ||
119 | # label: 'Operator' | ||
120 | # less_than: 'Less than...' | ||
121 | # strictly_less_than: 'Strictly less than...' | ||
122 | # greater_than: 'Greater than...' | ||
123 | # strictly_greater_than: 'Strictly greater than...' | ||
124 | # equal_to: 'Equal to...' | ||
125 | # not_equal_to: 'Not equal to...' | ||
126 | # or: 'One rule OR another' | ||
127 | # and: 'One rule AND another' | ||
128 | # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'Brugernavn' | ||
131 | password_label: 'Adgangskode' | ||
132 | repeat_new_password_label: 'Gentag adgangskode' | ||
133 | plain_password_label: '????' | ||
134 | email_label: 'Emailadresse' | ||
52 | 135 | ||
53 | # Entries | 136 | entry: |
54 | 'estimated reading time': 'estimeret læsetid' | 137 | page_titles: |
55 | original: original | 138 | # unread: 'Unread entries' |
56 | Toggle mark as read: 'Marker som læst' | 139 | # starred: 'Starred entries' |
57 | Toggle favorite: 'Skift favoritstatus' | 140 | # archived: 'Archived entries' |
58 | Delete: 'Slet' | 141 | # filtered: 'Filtered entries' |
142 | list: | ||
143 | # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' | ||
144 | reading_time: 'estimeret læsetid' | ||
145 | reading_time_minutes: 'estimeret læsetid: %readingTime% min' | ||
146 | reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | ||
148 | toogle_as_read: 'Marker som læst' | ||
149 | toogle_as_star: 'Skift favoritstatus' | ||
150 | delete: 'Slet' | ||
151 | # export_title: 'Export' | ||
152 | filters: | ||
153 | title: 'Filtre' | ||
154 | status_label: 'Status' | ||
155 | archived_label: 'Arkiveret' | ||
156 | starred_label: 'Favorit' | ||
157 | preview_picture_label: 'Har et vist billede' | ||
158 | preview_picture_help: 'Forhåndsvis billede' | ||
159 | language_label: 'Sprog' | ||
160 | reading_time: | ||
161 | label: 'Læsetid i minutter' | ||
162 | from: 'fra' | ||
163 | to: 'til' | ||
164 | domain_label: 'Domænenavn' | ||
165 | created_at: | ||
166 | label: 'Oprettelsesdato' | ||
167 | from: 'fra' | ||
168 | to: 'til' | ||
169 | action: | ||
170 | clear: 'Ryd' | ||
171 | filter: 'Filter' | ||
172 | view: | ||
173 | left_menu: | ||
174 | # back_to_top: 'Back to top' | ||
175 | back_to_homepage: 'Tilbage' | ||
176 | set_as_read: 'Marker som læst' | ||
177 | # set_as_unread: 'Mark as unread' | ||
178 | set_as_favorite: 'Marker som favorit' | ||
179 | view_original_article: 'Originalartikel' | ||
180 | # re_fetch_content: 'Re-fetch content' | ||
181 | delete: 'Slet' | ||
182 | add_a_tag: 'Tliføj et tag' | ||
183 | share_content: 'Deling' | ||
184 | # share_email_label: 'Email' | ||
185 | download: 'Download' | ||
186 | # print: 'Print' | ||
187 | problem: | ||
188 | label: 'Problemer?' | ||
189 | description: 'Vises artiklen forkert?' | ||
190 | edit_title: 'Rediger titel' | ||
191 | original_article: 'original' | ||
192 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | ||
193 | new: | ||
194 | page_title: 'Gem ny artikel' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | # page_title: 'Edit an entry' | ||
200 | # title_label: 'Title' | ||
201 | url_label: 'Url' | ||
202 | # is_public_label: 'Public' | ||
203 | save_label: 'Gem' | ||
59 | 204 | ||
60 | # Filters | 205 | about: |
61 | Filters: 'Filtre' | 206 | page_title: 'Om' |
62 | Status: 'Status' | 207 | top_menu: |
63 | Archived: 'Arkiveret' | 208 | who_behind_wallabag: 'Hvem står bag wallabag' |
64 | Starred: 'Favorit' | 209 | getting_help: 'Find hjælp' |
65 | Preview picture: 'Forhåndsvis billede' | 210 | helping: 'Hjælp wallabag' |
66 | Has a preview picture: 'Har et vist billede' | 211 | contributors: 'Bidragsydere' |
67 | Reading time in minutes: 'Læsetid i minutter' | 212 | # third_party: 'Third-party libraries' |
68 | from: 'fra' | 213 | who_behind_wallabag: |
69 | to: 'til' | 214 | developped_by: 'Udviklet af' |
70 | website.com: 'website.com' | 215 | website: 'Hjemmeside' |
71 | Domain name: 'Domænenavn' | 216 | many_contributors: 'Og mange andre bidragsydere ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">på Github</a>' |
72 | Creation date: 'Oprettelsesdato' | 217 | project_website: 'Projektets hjemmeside' |
73 | dd/mm/yyyy: 'dd.mm.åååå' | 218 | license: 'Licens' |
74 | Clear: 'Ryd' | 219 | version: 'Version' |
75 | Filter: 'Filter' | 220 | getting_help: |
221 | documentation: 'Dokumentation' | ||
222 | bug_reports: 'Bugs' | ||
223 | support: '<a href="https://support.wallabag.org">På vor support-side</a> eller <a href="https://github.com/wallabag/wallabag/issues">på GitHub</a>' | ||
224 | helping: | ||
225 | description: 'wallabag er gratis og Open source. Du kan hjælpe os:' | ||
226 | by_contributing: 'ved at bidrage til projektet:' | ||
227 | by_contributing_2: 'et Github-issue fortæller om alt, hvad vi har brug for:' | ||
228 | by_paypal: 'via Paypal' | ||
229 | contributors: | ||
230 | # description: 'Thank you to contributors on wallabag web application' | ||
231 | third_party: | ||
232 | # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' | ||
233 | # package: 'Package' | ||
234 | license: 'Licens' | ||
76 | 235 | ||
77 | # About | 236 | howto: |
78 | Who is behind wallabag: "hvem står bag wallabag" | 237 | page_title: 'How-to' |
79 | Getting help: "Find hjælp" | 238 | # page_description: 'There are several ways to save an article:' |
80 | Helping wallabag: "hjælp wallabag" | 239 | top_menu: |
81 | Developed by: "Udviklet af" | 240 | browser_addons: 'Browserudvidelser' |
82 | website: "Hjemmeside" | 241 | mobile_apps: 'Apps' |
83 | And many others contributors ♥: "Og mange andre bidragsydere ♥" | 242 | bookmarklet: 'Bookmarklet' |
84 | on GitHub: "på GitHub" | 243 | form: |
85 | Project website: "Projektets hjemmeside" | 244 | description: 'Tak gennem denne formular' |
86 | License: "Licens" | 245 | browser_addons: |
87 | Version: "Version" | 246 | firefox: 'Standardudvidelse til Firefox' |
88 | Documentation: "Dokumentation" | 247 | chrome: 'Chrome-udvidelse' |
89 | Bug reports: "Bugs" | 248 | mobile_apps: |
90 | On our support website: "På vor support-side" | 249 | android: |
91 | or: "eller" | 250 | via_f_droid: 'via F-Droid' |
92 | "wallabag is free and opensource. You can help us:": "wallabag er gratis og Open source. Du kan hjælpe os:" | 251 | via_google_play: 'via Google Play' |
93 | "by contributing to the project:": "ved at bidrage til projektet:" | 252 | # ios: 'on the iTunes Store' |
94 | an issue lists all our needs: "et Github-issue fortæller om alt, hvad vi har brug for:" | 253 | # windows: 'on the Microsoft Store' |
95 | via Paypal: "via PayPal" | 254 | bookmarklet: |
255 | description: 'Træk dette link til din bogmærkeliste:' | ||
96 | 256 | ||
97 | # Howto | 257 | quickstart: |
98 | Form: Formular | 258 | # page_title: 'Quickstart' |
99 | Thanks to this form: "Tak gennem denne formular" | 259 | # intro: |
100 | Browser addons: "Browserudvidelser" | 260 | # title: 'Welcome to wallabag!' |
101 | Mobile apps: "Apps" | 261 | # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." |
102 | Bookmarklet: "Bookmarklet" | 262 | # paragraph_2: 'Follow us!' |
103 | Standard Firefox Add-On: "Standardudvidelse til Firefox" | 263 | # configure: |
104 | Chrome Extension: "Chrome-udvidelse" | 264 | # title: 'Configure the application' |
105 | download the application: "Download" | 265 | # language: 'Change language and design' |
106 | "Drag & drop this link to your bookmarks bar:": "Træk dette link til din bogmærkeliste:" | 266 | # rss: 'Enable RSS feeds' |
267 | # tagging_rules: 'Write rules to automatically tag your articles' | ||
268 | # admin: | ||
269 | # title: 'Administration' | ||
270 | # description: 'As an administrator, you have privileges on wallabag. You can:' | ||
271 | # new_user: 'Create a new user' | ||
272 | # analytics: 'Configure analytics' | ||
273 | # sharing: 'Enable some parameters about article sharing' | ||
274 | # export: 'Configure export' | ||
275 | # import: 'Configure import' | ||
276 | # first_steps: | ||
277 | # title: 'First steps' | ||
278 | # new_article: 'Save your first article' | ||
279 | # unread_articles: 'And classify it!' | ||
280 | # migrate: | ||
281 | # title: 'Migrate from an existing service' | ||
282 | # description: "Are you using another service? We'll help you to retrieve your data on wallabag." | ||
283 | # pocket: 'Migrate from Pocket' | ||
284 | # wallabag_v1: 'Migrate from wallabag v1' | ||
285 | # wallabag_v2: 'Migrate from wallabag v2' | ||
286 | # developer: | ||
287 | # title: 'Developers' | ||
288 | # create_application: 'Create your third application' | ||
289 | # docs: | ||
290 | # title: 'Full documentation' | ||
291 | # annotate: 'Annotate your article' | ||
292 | # export: 'Convert your articles into ePUB or PDF' | ||
293 | # search_filters: 'See how you can look for an article by using search engine and filters' | ||
294 | # fetching_errors: 'What can I do if an article encounters errors during fetching?' | ||
295 | # all_docs: 'And so many other articles!' | ||
296 | # support: | ||
297 | # title: 'Support' | ||
298 | # description: 'If you need some help, we are here for you.' | ||
299 | # github: 'On GitHub' | ||
300 | # email: 'By email' | ||
301 | # gitter: 'On Gitter' | ||
107 | 302 | ||
108 | # Flash messages | 303 | tag: |
109 | Information updated: "Oplysninger opdateret" | 304 | page_title: 'Tags' |
110 | "Config saved. Some parameters will be considered after disconnection.": "Opsætning gemt. Visse ændringer vil først fremgå ved næste login." | 305 | list: |
111 | RSS information updated: "RSS-oplysninger opdateret" | 306 | # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' |
112 | Password updated: "Adgangskode opdateret" | ||
113 | Entry starred: "Artikel markeret som favorit" | ||
114 | Entry unstarred: "Artikel ikke længere markeret som favorit" | ||
115 | Entry archived: "Artikel arkiveret" | ||
116 | Entry unarchived: "Artikel ikke længere arkiveret" | ||
117 | Entry deleted: "Artikel slettet" | ||
118 | 307 | ||
119 | # Entry | 308 | import: |
120 | Mark as read: 'Marker som læst' | 309 | # page_title: 'Import' |
121 | Favorite: 'Marker som favorit' | 310 | # page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.' |
122 | back: 'tilbage' | 311 | # action: |
123 | original article: 'Originalartikel' | 312 | # import_contents: 'Import contents' |
124 | Add a tag: 'Tliføj et tag' | 313 | # form: |
125 | Share: 'Deling' | 314 | # mark_as_read_title: 'Mark all as read?' |
126 | Download: 'Download' | 315 | # mark_as_read_label: 'Mark all imported entries as read' |
127 | Does this article appear wrong?: "Vises artiklen forkert?" | 316 | # file_label: 'File' |
128 | Problems?: 'Problemer?' | 317 | # save_label: 'Upload file' |
129 | Edit title: "Rediger titel" | 318 | # pocket: |
319 | # page_title: 'Import > Pocket' | ||
320 | # description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag." | ||
321 | # config_missing: | ||
322 | # description: "Pocket import isn't configured." | ||
323 | # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' | ||
324 | # user_message: 'Your server admin needs to define an API Key for Pocket.' | ||
325 | # authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.' | ||
326 | # connect_to_pocket: 'Connect to Pocket and import data' | ||
327 | # wallabag_v1: | ||
328 | # page_title: 'Import > Wallabag v1' | ||
329 | # description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.' | ||
330 | # how_to: 'Please select your wallabag export and click on the below button to upload and import it.' | ||
331 | # wallabag_v2: | ||
332 | # page_title: 'Import > Wallabag v2' | ||
333 | # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' | ||
130 | 334 | ||
335 | developer: | ||
336 | # page_title: 'Developer' | ||
337 | # welcome_message: 'Welcome to the wallabag API' | ||
338 | # documentation: 'Documentation' | ||
339 | # how_to_first_app: 'How to create my first application' | ||
340 | # full_documentation: 'View full API documentation' | ||
341 | # list_methods: 'List API methods' | ||
342 | # clients: | ||
343 | # title: 'Clients' | ||
344 | # create_new: 'Create a new client' | ||
345 | # existing_clients: | ||
346 | # title: 'Existing clients' | ||
347 | # field_id: 'Client ID' | ||
348 | # field_secret: 'Client secret' | ||
349 | # field_uris: 'Redirect URIs' | ||
350 | # field_grant_types: 'Grant type allowed' | ||
351 | # no_client: 'No client yet.' | ||
352 | # remove: | ||
353 | # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !' | ||
354 | # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag." | ||
355 | # action: 'Remove this client' | ||
356 | # client: | ||
357 | # page_title: 'Developer > New client' | ||
358 | # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' | ||
359 | # form: | ||
360 | # redirect_uris_label: 'Redirect URIs' | ||
361 | # save_label: 'Create a new client' | ||
362 | # action_back: 'Back' | ||
363 | # client_parameter: | ||
364 | # page_title: 'Developer > Client parameters' | ||
365 | # page_description: 'Here are your client parameters.' | ||
366 | # field_id: 'Client ID' | ||
367 | # field_secret: 'Client secret' | ||
368 | # back: 'Back' | ||
369 | # read_howto: 'Read the howto "Create my first application"' | ||
370 | # howto: | ||
371 | # page_title: 'Developer > How to create my first application' | ||
372 | # description: | ||
373 | # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.' | ||
374 | # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.' | ||
375 | # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.' | ||
376 | # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):' | ||
377 | # paragraph_5: 'The API will return a response like this:' | ||
378 | # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:' | ||
379 | # paragraph_7: 'This call will return all the entries for your user.' | ||
380 | # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' | ||
381 | # back: 'Back' | ||
382 | |||
383 | validator: | ||
384 | password_must_match: 'De indtastede adgangskoder skal være ens' | ||
385 | password_too_short: 'Adgangskoden skal være mindst 8 tegn' | ||
386 | # password_wrong_value: 'Wrong value for your current password' | ||
387 | # item_per_page_too_high: 'This will certainly kill the app' | ||
388 | # rss_limit_too_hight: 'This will certainly kill the app' | ||
389 | |||
390 | flashes: | ||
391 | config: | ||
392 | notice: | ||
393 | config_saved: 'Opsætning gemt. Visse ændringer vil først fremgå ved næste login.' | ||
394 | password_updated: 'Adgangskode opdateret' | ||
395 | # password_not_updated_demo: "In demonstration mode, you can't change password for this user." | ||
396 | user_updated: 'Oplysninger opdateret' | ||
397 | rss_updated: 'RSS-oplysninger opdateret' | ||
398 | # tagging_rules_updated: 'Tagging rules updated' | ||
399 | # tagging_rules_deleted: 'Tagging rule deleted' | ||
400 | # user_added: 'User "%username%" added' | ||
401 | # rss_token_updated: 'RSS token updated' | ||
402 | entry: | ||
403 | notice: | ||
404 | # entry_already_saved: 'Entry already saved on %date%' | ||
405 | # entry_saved: 'Entry saved' | ||
406 | # entry_updated: 'Entry updated' | ||
407 | # entry_reloaded: 'Entry reloaded' | ||
408 | # entry_reload_failed: 'Failed to reload entry' | ||
409 | entry_archived: 'Artikel arkiveret' | ||
410 | entry_unarchived: 'Artikel ikke længere arkiveret' | ||
411 | entry_starred: 'Artikel markeret som favorit' | ||
412 | entry_unstarred: 'Artikel ikke længere markeret som favorit' | ||
413 | entry_deleted: 'Artikel slettet' | ||
414 | tag: | ||
415 | notice: | ||
416 | # tag_added: 'Tag added' | ||
417 | import: | ||
418 | notice: | ||
419 | # failed: 'Import failed, please try again.' | ||
420 | # failed_on_file: 'Error while processing import. Please verify your import file.' | ||
421 | # summary: 'Import summary: %imported% imported, %skipped% already saved.' | ||
422 | developer: | ||
423 | notice: | ||
424 | # client_created: 'New client created.' | ||
425 | # client_deleted: 'Client deleted' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml index 8b75594c..f1e7b6b8 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml | |||
@@ -1,129 +1,425 @@ | |||
1 | #Login | 1 | security: |
2 | Keep me logged in: 'Angemeldet bleiben' | 2 | login: |
3 | Forgot your password?: 'Kennwort vergessen?' | 3 | page_title: 'Willkommen bei wallabag!' |
4 | Login: 'Anmelden' | 4 | keep_logged_in: 'Angemeldet bleiben' |
5 | Back to login: 'Zurück zur Anmeldung' | 5 | forgot_password: 'Kennwort vergessen?' |
6 | Send: 'Senden' | 6 | submit: 'Anmelden' |
7 | "Enter your email address below and we'll send you password reset instructions.": "Gib unten deine E-Mail-Adresse ein und wir senden dir eine Anleitung für das Zurücksetzen deines Kennworts." | 7 | register: 'Registrieren' |
8 | username: 'Benutzername' | ||
9 | password: 'Kennwort' | ||
10 | cancel: 'Abbrechen' | ||
11 | resetting: | ||
12 | description: "Gib unten deine E-Mail-Adresse ein und wir senden dir eine Anleitung für das Zurücksetzen deines Kennworts." | ||
13 | register: | ||
14 | page_title: 'Account erstellen' | ||
15 | go_to_account: 'Gehe zu deinem Account' | ||
8 | 16 | ||
9 | # Menu | 17 | menu: |
10 | unread: 'ungelesen' | 18 | left: |
11 | starred: 'favoriten' | 19 | unread: 'Ungelesen' |
12 | archive: 'archiv' | 20 | starred: 'Favoriten' |
13 | all: 'alle artikel' | 21 | archive: 'Archiv' |
14 | tags: 'tags' | 22 | all_articles: 'Alle Artikel' |
15 | config: 'konfiguration' | 23 | config: 'Konfiguration' |
16 | howto: 'how-to' | 24 | tags: 'Tags' |
17 | logout: 'abmelden' | 25 | internal_settings: 'Interne Einstellungen' |
18 | Filtered: 'Gefiltert' | 26 | import: 'Importieren' |
19 | About: 'Über' | 27 | howto: 'How-To' |
28 | developer: 'Entwickler' | ||
29 | logout: 'Abmelden' | ||
30 | about: 'Über' | ||
31 | search: 'Suche' | ||
32 | save_link: 'Link speichern' | ||
33 | back_to_unread: 'Zurück zu ungelesenen Artikeln' | ||
34 | top: | ||
35 | add_new_entry: 'Neuen Artikel hinzufügen' | ||
36 | search: 'Suche' | ||
37 | filter_entries: 'Artikel filtern' | ||
38 | export: 'Exportieren' | ||
39 | search_form: | ||
40 | input_label: 'Suchbegriff hier eingeben' | ||
20 | 41 | ||
21 | # Header | 42 | footer: |
22 | Back to unread articles: 'Zurück zu ungelesenen Artikeln' | 43 | wallabag: |
23 | Add a new entry: 'Neuen Artikel hinzufügen' | 44 | elsewhere: 'Nimm wallabag mit dir mit' |
24 | Search: 'Suche' | 45 | social: 'Soziales' |
25 | Filter entries: 'Artikel filtern' | 46 | powered_by: 'angetrieben von' |
26 | Enter your search here: 'Suchbegriff hier eingeben' | 47 | about: 'Über' |
27 | Save new entry: 'Neuen Artikel speichern' | ||
28 | 48 | ||
29 | # Config screen | 49 | config: |
30 | Settings: 'Einstellungen' | 50 | page_title: 'Einstellungen' |
31 | User information: 'Benutzer-Information' | 51 | tab_menu: |
32 | Password: 'Kennwort' | 52 | settings: 'Einstellungen' |
33 | RSS: 'RSS' | 53 | rss: 'RSS' |
34 | Add a user: 'Benutzer hinzufügen' | 54 | user_info: 'Benutzer-Information' |
35 | Theme: 'Theme' | 55 | password: 'Kennwort' |
36 | Items per page: 'Einträge pro Seite' | 56 | rules: 'Tagging-Regeln' |
37 | Language: 'Sprache' | 57 | new_user: 'Benutzer hinzufügen' |
38 | Save: 'Speichern' | 58 | form: |
39 | RSS token: 'RSS-Token' | 59 | save: 'Speichern' |
40 | Name: 'Name' | 60 | form_settings: |
41 | Email: 'E-Mail-Adresse' | 61 | theme_label: 'Theme' |
42 | No token: 'Kein Token' | 62 | items_per_page_label: 'Einträge pro Seite' |
43 | Reset your token: 'Token zurücksetzen' | 63 | language_label: 'Sprache' |
44 | Create your token: 'Token erstellen' | 64 | reading_speed: |
45 | Rss limit: 'RSS-Limit' | 65 | label: 'Lesegeschwindigkeit' |
46 | RSS links: 'RSS-Links' | 66 | help_message: 'Du kannst Online-Tools nutzen, um deine Lesegeschwindigkeit herauszufinden.' |
47 | 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'Die RSS-Feeds von wallabag erlauben es dir, deine gespeicherten Artikel mit deinem bevorzugten RSS-Reader zu lesen. Vorher musst du jedoch einen Token erstellen.' | 67 | 100_word: 'Ich lese ~100 Wörter pro Minute' |
48 | Old password: 'Altes Kennwort' | 68 | 200_word: 'Ich lese ~200 Wörter pro Minute' |
49 | New password: 'Neues Kennwort' | 69 | 300_word: 'Ich lese ~300 Wörter pro Minute' |
50 | Repeat new password: 'Neues Kennwort wiederholen' | 70 | 400_word: 'Ich lese ~400 Wörter pro Minute' |
51 | Username: 'Benutzername' | 71 | form_rss: |
72 | description: 'Die RSS-Feeds von wallabag erlauben es dir, deine gespeicherten Artikel mit deinem bevorzugten RSS-Reader zu lesen. Vorher musst du jedoch einen Token erstellen.' | ||
73 | token_label: 'RSS-token' | ||
74 | no_token: 'Kein Token' | ||
75 | token_create: 'Token erstellen' | ||
76 | token_reset: 'Token zurücksetzen' | ||
77 | rss_links: 'RSS-Links' | ||
78 | rss_link: | ||
79 | unread: 'ungelesen' | ||
80 | starred: 'favoriten' | ||
81 | archive: 'archiv' | ||
82 | rss_limit: 'Anzahl der Einträge im Feed' | ||
83 | form_user: | ||
84 | two_factor_description: "Wenn du die Zwei-Faktor-Authentifizierung aktivierst, erhältst du eine E-Mail mit einem Code bei jeder nicht vertraulichen Verbindung" | ||
85 | name_label: 'Name' | ||
86 | email_label: 'E-Mail-Adresse' | ||
87 | twoFactorAuthentication_label: 'Zwei-Faktor-Authentifizierung' | ||
88 | form_password: | ||
89 | old_password_label: 'Altes Kennwort' | ||
90 | new_password_label: 'Neues Kennwort' | ||
91 | repeat_new_password_label: 'Neues Kennwort wiederholen' | ||
92 | form_rules: | ||
93 | if_label: 'Wenn' | ||
94 | then_tag_as_label: 'dann tagge als' | ||
95 | delete_rule_label: 'löschen' | ||
96 | rule_label: 'Regel' | ||
97 | tags_label: 'Tags' | ||
98 | faq: | ||
99 | title: 'FAQ' | ||
100 | tagging_rules_definition_title: 'Was bedeuten die "Tagging-Regeln"?' | ||
101 | tagging_rules_definition_description: 'Dies sind Regeln von wallabag, um neu hinzugefügte Einträge autmatisch zu taggen.<br />Jedes Mal, wenn ein neuer Eintrag hinzufügt wird, werden die Tagging-Regeln angewandt. Dies erleichtert dir die Arbeit, deine Einträge manuell zu klassifizieren.' | ||
102 | how_to_use_them_title: 'Wie nutze ich sie?' | ||
103 | how_to_use_them_description: 'Nehmen wir an, du möchtest deine Einträge als "<i>schnell lesbar</i>" taggen, wenn die Lesezeit kürzer als drei Minuten ist.<br />In diesem Falle solltest du "readingTime <= 3" in das <i>Regel</i>-Feld und "<i>schnell lesbar</i>" in das <i>Tags</i>-Feld schreiben.<br />Mehrere Tags können gleichzeitig hinzugefügt werden, indem sie durch ein Kommata getrennt werden: "<i>schnell lesbar, interessant</i>"<br />Komplexe Regeln können durch vordefinierte Operatoren geschrieben werden: if "<i>readingTime >= 5 AND domainName = "github.com"</i>" then tag as "<i>long reading, github </i>"' | ||
104 | variables_available_title: 'Welche Variablen und Operatoren kann ich nutzen, um Regeln zu schreiben?' | ||
105 | variables_available_description: 'Die folgenden Variablen und Operatoren können genutzt werden, um Tagging-Regeln zu erstellen:' | ||
106 | meaning: 'Bedeutung' | ||
107 | variable_description: | ||
108 | label: 'Variable' | ||
109 | title: 'Titel des Eintrags' | ||
110 | url: 'URL des Eintrags' | ||
111 | isArchived: 'gibt an, ob der Eintrag archiviert ist oder nicht' | ||
112 | isStarred: 'gibt an, ob der Eintrag favorisiert ist oder nicht' | ||
113 | content: "Inhalt des Eintrags" | ||
114 | language: "Sprache des Eintrags" | ||
115 | mimetype: "MIME-Typ des Eintrags" | ||
116 | readingTime: "Die geschätzte Lesezeit in Minuten" | ||
117 | domainName: 'Der Domain-Name des Eintrags' | ||
118 | operator_description: | ||
119 | label: 'Operator' | ||
120 | less_than: 'Weniger oder gleich als…' | ||
121 | strictly_less_than: 'Weniger als…' | ||
122 | greater_than: 'Größer oder gleich als…' | ||
123 | strictly_greater_than: 'Größer als…' | ||
124 | equal_to: 'gleich' | ||
125 | not_equal_to: 'ungleich' | ||
126 | or: 'Eine Regel ODER die andere' | ||
127 | and: 'Eine Regel UND eine andere' | ||
128 | matches: 'Tests, ob eine <i>Variable</i> auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title matches "Fußball"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'Benutzername' | ||
131 | password_label: 'Kennwort' | ||
132 | repeat_new_password_label: 'Neues Kennwort wiederholen' | ||
133 | plain_password_label: '????' | ||
134 | email_label: 'E-Mail-Adresse' | ||
52 | 135 | ||
53 | # Entries | 136 | entry: |
54 | 'estimated reading time': 'geschätzte Lesezeit' | 137 | page_titles: |
55 | original: original | 138 | unread: 'Ungelesene Einträge' |
56 | Toggle mark as read: 'Gelesen-Status ändern' | 139 | starred: 'Favorisierte Einträge' |
57 | Toggle favorite: 'Favoriten-Status ändern' | 140 | archived: 'Archivierte Einträge' |
58 | Delete: 'Löschen' | 141 | filtered: 'Gefilterte Einträge' |
142 | list: | ||
143 | number_on_the_page: '{0} Es gibt keine Einträge.|{1} Es gibt einen Eintrag.|]1,Inf[ Es gibt %count% Einträge.' | ||
144 | reading_time: 'geschätzte Lesezeit' | ||
145 | reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min' | ||
146 | reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | ||
148 | toogle_as_read: 'Gelesen-Status ändern' | ||
149 | toogle_as_star: 'Favoriten-Status ändern' | ||
150 | delete: 'Löschen' | ||
151 | export_title: 'Exportieren' | ||
152 | filters: | ||
153 | title: 'Filters' | ||
154 | status_label: 'Status' | ||
155 | archived_label: 'Archiviert' | ||
156 | starred_label: 'Favorisiert' | ||
157 | preview_picture_label: 'Vorschaubild vorhanden' | ||
158 | preview_picture_help: 'Vorschaubild' | ||
159 | language_label: 'Sprache' | ||
160 | reading_time: | ||
161 | label: 'Lesezeit in Minuten' | ||
162 | from: 'von' | ||
163 | to: 'bis' | ||
164 | domain_label: 'Domain-Name' | ||
165 | created_at: | ||
166 | label: 'Erstellungsdatum' | ||
167 | from: 'von' | ||
168 | to: 'bis' | ||
169 | action: | ||
170 | clear: 'Zurücksetzen' | ||
171 | filter: 'Filter' | ||
172 | view: | ||
173 | left_menu: | ||
174 | back_to_top: 'Nach oben' | ||
175 | back_to_homepage: 'Zurück' | ||
176 | set_as_read: 'Als gelesen markieren' | ||
177 | set_as_unread: 'Als ungelesen markieren' | ||
178 | set_as_favorite: 'Favorisieren' | ||
179 | view_original_article: 'Original-Artikel' | ||
180 | re_fetch_content: 'Inhalt neu laden' | ||
181 | delete: 'Löschen' | ||
182 | add_a_tag: 'Tag hinzufügen' | ||
183 | share_content: 'Teilen' | ||
184 | share_email_label: 'E-Mail' | ||
185 | download: 'Herunterladen' | ||
186 | print: 'Drucken' | ||
187 | problem: | ||
188 | label: 'Probleme?' | ||
189 | description: 'Erscheint dieser Artikel falsch?' | ||
190 | edit_title: 'Titel ändern' | ||
191 | original_article: 'original' | ||
192 | annotations_on_the_entry: '{0} Keine Anmerkungen|{1} Eine Anmerkung|]1,Inf[ %nbAnnotations% Anmerkungen' | ||
193 | new: | ||
194 | page_title: 'Neuen Artikel speichern' | ||
195 | placeholder: 'https://website.de' | ||
196 | form_new: | ||
197 | url_label: URL | ||
198 | edit: | ||
199 | page_title: 'Eintrag bearbeiten' | ||
200 | title_label: 'Titel' | ||
201 | url_label: 'URL' | ||
202 | is_public_label: 'Öffentlich' | ||
203 | save_label: 'Speichern' | ||
59 | 204 | ||
60 | # Filters | 205 | about: |
61 | Filters: 'Filter' | 206 | page_title: 'Über' |
62 | Status: 'Status' | 207 | top_menu: |
63 | Archived: 'Archiviert' | 208 | who_behind_wallabag: 'Wer steht hinter wallabag' |
64 | Starred: 'Favorisiert' | 209 | getting_help: 'Hilfe bekommen' |
65 | Preview picture: 'Vorschaubild' | 210 | helping: 'wallabag unterstützen' |
66 | Has a preview picture: 'Vorschaubild vorhanden' | 211 | contributors: 'Unterstützer' |
67 | Reading time in minutes: 'Lesezeit in Minuten' | 212 | third_party: 'Third-party libraries' |
68 | from: 'von' | 213 | who_behind_wallabag: |
69 | to: 'bis' | 214 | developped_by: 'Entwickelt von' |
70 | website.com: 'website.com' | 215 | website: 'Webseite' |
71 | Domain name: 'Domain-Name' | 216 | many_contributors: 'Und vielen anderen Unterstützern ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">auf Github</a>' |
72 | Creation date: 'Erstellungsdatum' | 217 | project_website: 'Projektwebseite' |
73 | dd/mm/yyyy: 'dd.mm.yyyy' | 218 | license: 'Lizenz' |
74 | Clear: 'zurücksetzen' | 219 | version: 'Version' |
75 | Filter: 'Filter' | 220 | getting_help: |
221 | documentation: 'Dokumentation' | ||
222 | bug_reports: 'Bugs' | ||
223 | support: '<a href="https://support.wallabag.org">Auf unserer Support-Webseite</a> oder <a href="https://github.com/wallabag/wallabag/issues">auf GitHub</a>' | ||
224 | helping: | ||
225 | description: 'wallabag ist kostenlos und Open-Source. Du kannst uns helfen:' | ||
226 | by_contributing: 'indem du zu dem Projekt beiträgst:' | ||
227 | by_contributing_2: 'ein Issue listet alle unsere Bedürfnisse:' | ||
228 | by_paypal: 'via PayPal' | ||
229 | contributors: | ||
230 | description: 'Ein Dankeschön an die Unterstützer von wallabag' | ||
231 | third_party: | ||
232 | description: 'Hier ist eine Liste der verwendeten Bibliotheken in wallabag (mit den jeweiligen Lizenzen):' | ||
233 | package: 'Paket' | ||
234 | license: 'Lizenz' | ||
76 | 235 | ||
77 | # About | 236 | howto: |
78 | Who is behind wallabag: "Wer steht hinter wallabag" | 237 | page_title: 'How-To' |
79 | Getting help: "Hilfe bekommen" | 238 | page_description: 'Es gibt mehrere Möglichkeiten, einen Artikel zu speichern:' |
80 | Helping wallabag: "wallabag unterstützen" | 239 | top_menu: |
81 | Developed by: "Entwickelt von" | 240 | browser_addons: 'Browser-Addons' |
82 | website: "Webseite" | 241 | mobile_apps: 'Apps' |
83 | And many others contributors ♥: "Und vielen anderen Unterstützern ♥" | 242 | bookmarklet: 'Bookmarklet' |
84 | on GitHub: "auf GitHub" | 243 | form: |
85 | Project website: "Projektwebseite" | 244 | description: 'Danke an dieses Formular' |
86 | License: "Lizenz" | 245 | browser_addons: |
87 | Version: "Version" | 246 | firefox: 'Firefox-Erweiterung' |
88 | Documentation: "Dokumentation" | 247 | chrome: 'Chrome-Erweiterung' |
89 | Bug reports: "Bugs" | 248 | mobile_apps: |
90 | On our support website: "Auf unserer Support-Webseite" | 249 | android: |
91 | or: "oder" | 250 | via_f_droid: 'via F-Droid' |
92 | "wallabag is free and opensource. You can help us:": "wallabag ist kostenlos und Open-Source. Du kannst uns helfen:" | 251 | via_google_play: 'via Google Play' |
93 | "by contributing to the project:": "indem du zu dem Projekt beiträgst:" | 252 | ios: 'im iTunes-Store' |
94 | an issue lists all our needs: "ein Issue listet alle unsere Bedürfnisse:" | 253 | windows: 'im Microsoft-Store' |
95 | via Paypal: "via PayPal" | 254 | bookmarklet: |
255 | description: 'Ziehe diesen Link in deine Lesezeichenleiste:' | ||
96 | 256 | ||
97 | # Howto | 257 | quickstart: |
98 | Form: Formular | 258 | page_title: 'Schnelleinstieg' |
99 | Thanks to this form: "Danke an dieses Formular" | 259 | intro: |
100 | Browser addons: "Browser-Addons" | 260 | title: 'Willkommen zu wallabag!' |
101 | Mobile apps: "Apps" | 261 | paragraph_1: "Wir werden dich bei der Benutzung von wallabag begleiten und dir einige Funktionen zeigen, die dich interessieren könnten." |
102 | Bookmarklet: "Bookmarklet" | 262 | paragraph_2: 'Folge uns!' |
103 | Standard Firefox Add-On: "Firefox-Erweiterung" | 263 | configure: |
104 | Chrome Extension: "Chrome-Erweiterung" | 264 | title: 'Anwendung konfigurieren' |
105 | download the application: "herunterladen" | 265 | language: 'Sprache und Design ändern' |
106 | "Drag & drop this link to your bookmarks bar:": "Ziehe diesen Link in deine Lesezeichenleiste:" | 266 | rss: 'RSS-Feeds aktivieren' |
267 | tagging_rules: 'Schreibe Regeln, um deine Beiträge automatisch zu taggen (verschlagworten)' | ||
268 | admin: | ||
269 | title: 'Administration' | ||
270 | description: 'Als Adminstrator hast du einige Privilegien. Du kannst:' | ||
271 | new_user: 'Einen neuen Nutzer anlegen' | ||
272 | analytics: 'das Tracking konfigurieren' | ||
273 | sharing: 'Einige Parameter für das Teilen von Artikel setzen' | ||
274 | export: 'Export-Einstellungen ändern' | ||
275 | import: 'Import-Einstellungen ändern' | ||
276 | first_steps: | ||
277 | title: 'Erste Schritte' | ||
278 | new_article: 'Speichere deinen ersten Artikel' | ||
279 | unread_articles: 'Und klassifiziere ihn!' | ||
280 | migrate: | ||
281 | title: 'Von einem anderen Dienst migrieren' | ||
282 | description: "Du nutzt einen anderen Dienst? Wir helfen dir, um deine Daten zu wallabag zu transportieren." | ||
283 | pocket: 'von Pocket migrieren' | ||
284 | wallabag_v1: 'von wallabag v1 migrieren' | ||
285 | wallabag_v2: 'von wallabag v2 migrieren' | ||
286 | developer: | ||
287 | title: 'Entwickler' | ||
288 | create_application: 'Erstelle eine Anwendung und nutze die wallabag API' | ||
289 | docs: | ||
290 | title: 'Komplette Dokumentation' | ||
291 | annotate: 'Anmerkungen zu Artikeln hinzufügen' | ||
292 | export: 'Artikel nach ePUB oder PDF konvertieren' | ||
293 | search_filters: 'Schau nach, wie du nach einem Artikel über die Such- und Filterfunktion suchen kannst' | ||
294 | fetching_errors: 'Was kann ich machen, wenn ein Artikel Fehler beim Herunterladen des Inhalts zeigt?' | ||
295 | all_docs: 'Und viele weitere Artikel!' | ||
296 | support: | ||
297 | title: 'Support' | ||
298 | description: 'Wenn du Hilfe brauchst, wir sind für dich da.' | ||
299 | github: 'Auf GitHub' | ||
300 | email: 'Über E-Mail' | ||
301 | gitter: 'Auf Gitter' | ||
107 | 302 | ||
108 | # Flash messages | 303 | tag: |
109 | Information updated: "Information aktualisiert" | 304 | page_title: 'Tags' |
110 | "Config saved. Some parameters will be considered after disconnection.": "Konfiguration gespeichert. Einige Einstellungen werden erst nach einer erneuten Anmeldung übernommen." | 305 | list: |
111 | RSS information updated: "RSS-Informationen aktualisiert" | 306 | number_on_the_page: '{0} Es gibt keine Tags.|{1} Es gibt einen Tag.|]1,Inf[ Es gibt %count% Tags.' |
112 | Password updated: "Kennwort aktualisiert" | ||
113 | Entry starred: "Artikel favorisiert" | ||
114 | Entry unstarred: "Artikel defavorisiert" | ||
115 | Entry archived: "Artikel archiviert" | ||
116 | Entry unarchived: "Artikel dearchiviert" | ||
117 | Entry deleted: "Artikel gelöscht" | ||
118 | 307 | ||
119 | # Entry | 308 | import: |
120 | Mark as read: 'Als gelesen markieren' | 309 | page_title: 'Importieren' |
121 | Favorite: 'Favorisieren' | 310 | page_description: 'Willkommen beim wallabag-Importer. Wähle deinen vorherigen Service aus, von dem du die Daten migrieren willst.' |
122 | back: 'zurück' | 311 | action: |
123 | original article: 'Original-Artikel' | 312 | import_contents: 'Inhalte importieren' |
124 | Add a tag: 'Tag hinzufügen' | 313 | form: |
125 | Share: 'Teilen' | 314 | mark_as_read_title: 'Alle als gelesen markieren?' |
126 | Download: 'Herunterladen' | 315 | mark_as_read_label: 'Alle importierten Einträge als gelesen markieren' |
127 | Does this article appear wrong?: "Erscheint dieser Artikel falsch?" | 316 | file_label: 'Datei' |
128 | Problems?: 'Probleme?' | 317 | save_label: 'Datei hochladen' |
129 | Edit title: "Titel ändern" | 318 | pocket: |
319 | page_title: 'Aus Pocket importieren' | ||
320 | description: "Dieser Importer wird all deine Pocket-Daten importieren. Pocket erlaubt es uns nicht, den Inhalt zu migrieren, daher wird der lesbare Inhalt erneut von wallabag heruntergeladen." | ||
321 | config_missing: | ||
322 | description: "Pocket-Import ist nicht konfiguriert." | ||
323 | admin_message: 'Du musst noch den %keyurls%a pocket_consumer_key%keyurle% definieren.' | ||
324 | user_message: 'Der Server-Administrator muss noch einen API-Key für Pocket konfigurieren.' | ||
325 | authorize_message: 'Du kannst deine Daten von deinem Pocket-Account importieren. Dazu musst du nur den nachfolgenden Button klicken und die Anwendung authentifizieren, sich mit getpocket.com zu verbinden.' | ||
326 | connect_to_pocket: 'Mit Pocket verbinden und Daten importieren' | ||
327 | wallabag_v1: | ||
328 | page_title: 'Aus wallabag v1 importieren' | ||
329 | description: 'Dieser Import wird all deine Artikel aus wallabag v1 importieren. Klicke auf der Konfigurations-Seite auf "JSON-Export" im "wallabag-Daten exportieren"-Abschnitt. Du erhältst eine "wallabag-export-1-xxxx-xx-xx.json"-Datei.' | ||
330 | how_to: 'Wähle die Export-Datei aus und klicke den nachfolgenden Button, um diese hochzuladen und zu importieren.' | ||
331 | wallabag_v2: | ||
332 | page_title: 'Aus wallabag v2 importieren' | ||
333 | description: 'Dieser Import wird all deine Artikel aus wallabag v2 importieren. Gehe auf "Alle Artikel" und dann, in der Exportieren-Seitenleiste auf "JSON". Dabei erhältst du eine "All articles.json"-Datei.' | ||
334 | |||
335 | developer: | ||
336 | page_title: 'Entwickler' | ||
337 | welcome_message: 'Willkomen zur wallabag-API' | ||
338 | documentation: 'Dokumentation' | ||
339 | how_to_first_app: 'Wie erstelle ich meine erste Anwendung' | ||
340 | full_documentation: 'Komplette API-Dokumentation einsehen' | ||
341 | # list_methods: 'List API methods' | ||
342 | clients: | ||
343 | title: 'Clients' | ||
344 | create_new: 'Neuen Client erstellen' | ||
345 | existing_clients: | ||
346 | title: 'Bestehende Clients' | ||
347 | field_id: 'Client-ID' | ||
348 | field_secret: 'Client-Secret' | ||
349 | field_uris: 'Weiterleitungs-URIs' | ||
350 | field_grant_types: "Erlaubte grant_types" | ||
351 | no_client: 'Bisher kein Client.' | ||
352 | remove: | ||
353 | warn_message_1: 'Du hast die Möglichkeit, diesen Client zu entfernen. DIESE AKTION IST NICHT WIDERRUFBAR!' | ||
354 | warn_message_2: "Wenn du ihn entfernst, hat keine der damit konfigurierten Anwendungen mehr die Möglichkeit, sich in deinen wallabag-Account anzumelden." | ||
355 | action: 'Client entfernen' | ||
356 | client: | ||
357 | page_title: 'Entwickler > Neuer Client' | ||
358 | page_description: 'Du bist dabei, einen neuen Client zu erstellen. Fülle das nachfolgende Feld für die Weiterleitungs-URIs deiner Anwendung aus.' | ||
359 | form: | ||
360 | redirect_uris_label: 'Weiterleitungs-URIs' | ||
361 | save_label: 'Neuen Client erstellen' | ||
362 | action_back: 'Zurück' | ||
363 | client_parameter: | ||
364 | page_title: 'Entwickler > Client-Parameter' | ||
365 | page_description: 'Dies sind deine Client-Parameter.' | ||
366 | field_id: 'Client-ID' | ||
367 | field_secret: 'Client-Secret' | ||
368 | back: 'Zurück' | ||
369 | read_howto: 'Lese des How-To zu "Wie erstelle ich meine erste Anwendung"' | ||
370 | howto: | ||
371 | page_title: 'Entwickler > Wie erstelle ich meine erste Anwendung' | ||
372 | description: | ||
373 | paragraph_1: 'Die folgenden Befehle machen Gebrauch von der <a href="https://github.com/jkbrzt/httpie">HTTPie-Bibliothek</a>. Stelle sicher, dass sie auf deinem System installiert ist, bevor du fortfährst.' | ||
374 | paragraph_2: 'Du benötigst einen Token, damit deine Anwendung mit der wallabag-API kommunizieren kann.' | ||
375 | paragraph_3: 'Um diesen Token zu erstellen, muss <a href="%link%">ein neuer Client erstellt werden</a>.' | ||
376 | paragraph_4: 'Nun erstelle deinen Token (ersetze client_id, client_secret, username und password mit deinen Werten):' | ||
377 | paragraph_5: 'Die API wird eine Antwort der folgenden Art zurückgeben:' | ||
378 | paragraph_6: 'Der access_token ist nützlich, um die API aufzurufen. Beispiel:' | ||
379 | paragraph_7: 'Dieser Aufruf wird alle Einträge für den Nutzer zurückgeben.' | ||
380 | paragraph_8: 'Wenn du alle API-Endpunkte sehen willst, werfe einen Blick auf die <a href="%link%">API-Dokumentation</a>.' | ||
381 | back: 'Zurück' | ||
382 | |||
383 | validator: | ||
384 | password_must_match: 'Die Kennwort-Felder müssen übereinstimmen.' | ||
385 | password_too_short: 'Kennwort-Mindestlänge von acht Zeichen nicht erfüllt' | ||
386 | password_wrong_value: 'Falscher Wert für dein aktuelles Kennwort' | ||
387 | item_per_page_too_high: 'Dies wird die Anwendung möglicherweise beenden' | ||
388 | rss_limit_too_hight: 'Dies wird die Anwendung möglicherweise beenden' | ||
389 | |||
390 | flashes: | ||
391 | config: | ||
392 | notice: | ||
393 | config_saved: 'Konfiguration gespeichert. Einige Einstellungen werden erst nach einer erneuten Anmeldung übernommen.' | ||
394 | password_updated: 'Kennwort aktualisiert' | ||
395 | password_not_updated_demo: "Im Test-Modus kannst du das Kennwort nicht ändern." | ||
396 | user_updated: 'Information aktualisiert' | ||
397 | rss_updated: 'RSS-Informationen aktualisiert' | ||
398 | tagging_rules_updated: 'Tagging-Regeln aktualisiert' | ||
399 | tagging_rules_deleted: 'Tagging-Regel gelöscht' | ||
400 | user_added: 'Benutzer "%username%" erstellt' | ||
401 | rss_token_updated: 'RSS-Token aktualisiert' | ||
402 | entry: | ||
403 | notice: | ||
404 | entry_already_saved: 'Eintrag bereits am %date% gespeichert' | ||
405 | entry_saved: 'Eintag gespeichert' | ||
406 | entry_updated: 'Eintrag aktualisiert' | ||
407 | entry_reloaded: 'Eintrag neugeladen' | ||
408 | entry_reload_failed: 'Neuladen des Eintrags fehlgeschlagen' | ||
409 | entry_archived: 'Artikel archiviert' | ||
410 | entry_unarchived: 'Artikel dearchiviert' | ||
411 | entry_starred: 'Artikel favorisiert' | ||
412 | entry_unstarred: 'Artikel defavorisiert' | ||
413 | entry_deleted: 'Artikel gelöscht' | ||
414 | tag: | ||
415 | notice: | ||
416 | tag_added: 'Tag hinzugefügt' | ||
417 | import: | ||
418 | notice: | ||
419 | failed: 'Import fehlgeschlagen, bitte erneut probieren.' | ||
420 | failed_on_file: 'Fehler während des Imports. Bitte überprüfe deine Import-Datei.' | ||
421 | summary: 'Import-Zusammenfassung: %imported% importiert, %skipped% bereits gespeichert.' | ||
422 | developer: | ||
423 | notice: | ||
424 | client_created: 'Neuer Client erstellt.' | ||
425 | client_deleted: 'Client gelöscht' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml new file mode 100644 index 00000000..3dc22998 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml | |||
@@ -0,0 +1,425 @@ | |||
1 | security: | ||
2 | login: | ||
3 | page_title: 'Welcome to wallabag!' | ||
4 | keep_logged_in: 'Keep me logged in' | ||
5 | forgot_password: 'Forgot your password?' | ||
6 | submit: 'Login' | ||
7 | register: 'Register' | ||
8 | username: 'Username' | ||
9 | password: 'Password' | ||
10 | cancel: 'Cancel' | ||
11 | resetting: | ||
12 | description: "Enter your email address below and we'll send you password reset instructions." | ||
13 | register: | ||
14 | page_title: 'Create an account' | ||
15 | go_to_account: 'Go to your account' | ||
16 | |||
17 | menu: | ||
18 | left: | ||
19 | unread: 'Unread' | ||
20 | starred: 'Starred' | ||
21 | archive: 'Archive' | ||
22 | all_articles: 'All entries' | ||
23 | config: 'Config' | ||
24 | tags: 'Tags' | ||
25 | internal_settings: 'Internal Settings' | ||
26 | import: 'Import' | ||
27 | howto: 'How to' | ||
28 | developer: 'Developer' | ||
29 | logout: 'Logout' | ||
30 | about: 'About' | ||
31 | search: 'Search' | ||
32 | save_link: 'Save a link' | ||
33 | back_to_unread: 'Back to unread articles' | ||
34 | top: | ||
35 | add_new_entry: 'Add a new entry' | ||
36 | search: 'Search' | ||
37 | filter_entries: 'Filter entries' | ||
38 | export: 'Export' | ||
39 | search_form: | ||
40 | input_label: 'Enter your search here' | ||
41 | |||
42 | footer: | ||
43 | wallabag: | ||
44 | elsewhere: 'Take wallabag with you' | ||
45 | social: 'Social' | ||
46 | powered_by: 'powered by' | ||
47 | about: 'About' | ||
48 | |||
49 | config: | ||
50 | page_title: 'Config' | ||
51 | tab_menu: | ||
52 | settings: 'Settings' | ||
53 | rss: 'RSS' | ||
54 | user_info: 'User information' | ||
55 | password: 'Password' | ||
56 | rules: 'Tagging rules' | ||
57 | new_user: 'Add a user' | ||
58 | form: | ||
59 | save: 'Save' | ||
60 | form_settings: | ||
61 | theme_label: 'Theme' | ||
62 | items_per_page_label: 'Items per page' | ||
63 | language_label: 'Language' | ||
64 | reading_speed: | ||
65 | label: 'Reading speed' | ||
66 | help_message: 'You can use online tools to estimate your reading speed:' | ||
67 | 100_word: 'I read ~100 words per minute' | ||
68 | 200_word: 'I read ~200 words per minute' | ||
69 | 300_word: 'I read ~300 words per minute' | ||
70 | 400_word: 'I read ~400 words per minute' | ||
71 | form_rss: | ||
72 | description: 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.' | ||
73 | token_label: 'RSS token' | ||
74 | no_token: 'No token' | ||
75 | token_create: 'Create your token' | ||
76 | token_reset: 'Regenerate your token' | ||
77 | rss_links: 'RSS links' | ||
78 | rss_link: | ||
79 | unread: 'unread' | ||
80 | starred: 'starred' | ||
81 | archive: 'archived' | ||
82 | rss_limit: 'Number of items in the feed' | ||
83 | form_user: | ||
84 | two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion" | ||
85 | name_label: 'Name' | ||
86 | email_label: 'Email' | ||
87 | twoFactorAuthentication_label: 'Two factor authentication' | ||
88 | form_password: | ||
89 | old_password_label: 'Current password' | ||
90 | new_password_label: 'New password' | ||
91 | repeat_new_password_label: 'Repeat new password' | ||
92 | form_rules: | ||
93 | if_label: 'if' | ||
94 | then_tag_as_label: 'then tag as' | ||
95 | delete_rule_label: 'delete' | ||
96 | rule_label: 'Rule' | ||
97 | tags_label: 'Tags' | ||
98 | faq: | ||
99 | title: 'FAQ' | ||
100 | tagging_rules_definition_title: 'What does « tagging rules » mean?' | ||
101 | tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.' | ||
102 | how_to_use_them_title: 'How do I use them?' | ||
103 | how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' | ||
104 | variables_available_title: 'Which variables and operators can I use to write rules?' | ||
105 | variables_available_description: 'The following variables and operators can be used to create tagging rules:' | ||
106 | meaning: 'Meaning' | ||
107 | variable_description: | ||
108 | label: 'Variable' | ||
109 | title: 'Title of the entry' | ||
110 | url: 'URL of the entry' | ||
111 | isArchived: 'Whether the entry is archived or not' | ||
112 | isStarred: 'Whether the entry is starred or not' | ||
113 | content: "The entry's content" | ||
114 | language: "The entry's language" | ||
115 | mimetype: "The entry's mime-type" | ||
116 | readingTime: "The estimated entry's reading time, in minutes" | ||
117 | domainName: 'The domain name of the entry' | ||
118 | operator_description: | ||
119 | label: 'Operator' | ||
120 | less_than: 'Less than...' | ||
121 | strictly_less_than: 'Strictly less than...' | ||
122 | greater_than: 'Greater than...' | ||
123 | strictly_greater_than: 'Strictly greater than...' | ||
124 | equal_to: 'Equal to...' | ||
125 | not_equal_to: 'Not equal to...' | ||
126 | or: 'One rule OR another' | ||
127 | and: 'One rule AND another' | ||
128 | matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'Username' | ||
131 | password_label: 'Password' | ||
132 | repeat_new_password_label: 'Repeat new password' | ||
133 | plain_password_label: '????' | ||
134 | email_label: 'Email' | ||
135 | |||
136 | entry: | ||
137 | page_titles: | ||
138 | unread: 'Unread entries' | ||
139 | starred: 'Starred entries' | ||
140 | archived: 'Archived entries' | ||
141 | filtered: 'Filtered entries' | ||
142 | list: | ||
143 | number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' | ||
144 | reading_time: 'estimated reading time' | ||
145 | reading_time_minutes: 'estimated reading time: %readingTime% min' | ||
146 | reading_time_less_one_minute: 'estimated reading time: <small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | ||
148 | toogle_as_read: 'Toggle mark as read' | ||
149 | toogle_as_star: 'Toggle favorite' | ||
150 | delete: 'Delete' | ||
151 | export_title: 'Export' | ||
152 | filters: | ||
153 | title: 'Filters' | ||
154 | status_label: 'Status' | ||
155 | archived_label: 'Archived' | ||
156 | starred_label: 'Starred' | ||
157 | preview_picture_label: 'Has a preview picture' | ||
158 | preview_picture_help: 'Preview picture' | ||
159 | language_label: 'Language' | ||
160 | reading_time: | ||
161 | label: 'Reading time in minutes' | ||
162 | from: 'from' | ||
163 | to: 'to' | ||
164 | domain_label: 'Domain name' | ||
165 | created_at: | ||
166 | label: 'Creation date' | ||
167 | from: 'from' | ||
168 | to: 'to' | ||
169 | action: | ||
170 | clear: 'Clear' | ||
171 | filter: 'Filter' | ||
172 | view: | ||
173 | left_menu: | ||
174 | back_to_top: 'Back to top' | ||
175 | back_to_homepage: 'Back' | ||
176 | set_as_read: 'Mark as read' | ||
177 | set_as_unread: 'Mark as unread' | ||
178 | set_as_favorite: 'Favorite' | ||
179 | view_original_article: 'Orignal article' | ||
180 | re_fetch_content: 'Re-fetch content' | ||
181 | delete: 'Delete' | ||
182 | add_a_tag: 'Add a tag' | ||
183 | share_content: 'Share' | ||
184 | share_email_label: 'Email' | ||
185 | download: 'Download' | ||
186 | print: 'Print' | ||
187 | problem: | ||
188 | label: 'Problems?' | ||
189 | description: 'Does this article appear wrong?' | ||
190 | edit_title: 'Edit title' | ||
191 | original_article: 'original' | ||
192 | annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | ||
193 | new: | ||
194 | page_title: 'Save new entry' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | page_title: 'Edit an entry' | ||
200 | title_label: 'Title' | ||
201 | url_label: 'Url' | ||
202 | is_public_label: 'Public' | ||
203 | save_label: 'Save' | ||
204 | |||
205 | about: | ||
206 | page_title: 'About' | ||
207 | top_menu: | ||
208 | who_behind_wallabag: 'Who is behind wallabag' | ||
209 | getting_help: 'Getting help' | ||
210 | helping: 'Helping wallabag' | ||
211 | contributors: 'Contributors' | ||
212 | third_party: 'Third-party libraries' | ||
213 | who_behind_wallabag: | ||
214 | developped_by: 'Developed by' | ||
215 | website: 'website' | ||
216 | many_contributors: 'And many others contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">on Github</a>' | ||
217 | project_website: 'Project website' | ||
218 | license: 'License' | ||
219 | version: 'Version' | ||
220 | getting_help: | ||
221 | documentation: 'Documentation' | ||
222 | bug_reports: 'Bug reports' | ||
223 | support: '<a href="https://support.wallabag.org">On our support website</a> or <a href="https://github.com/wallabag/wallabag/issues">on GitHub</a>' | ||
224 | helping: | ||
225 | description: 'wallabag is free and opensource. You can help us:' | ||
226 | by_contributing: 'by contributing to the project:' | ||
227 | by_contributing_2: 'an issue lists all our needs' | ||
228 | by_paypal: 'via Paypal' | ||
229 | contributors: | ||
230 | description: 'Thank you to contributors on wallabag web application' | ||
231 | third_party: | ||
232 | description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' | ||
233 | package: 'Package' | ||
234 | license: 'License' | ||
235 | |||
236 | howto: | ||
237 | page_title: 'How to' | ||
238 | page_description: 'There are several ways to save an article:' | ||
239 | top_menu: | ||
240 | browser_addons: 'Browser addons' | ||
241 | mobile_apps: 'Mobile apps' | ||
242 | bookmarklet: 'Bookmarklet' | ||
243 | form: | ||
244 | description: 'Thanks to this form' | ||
245 | browser_addons: | ||
246 | firefox: 'Standard Firefox Add-On' | ||
247 | chrome: 'Chrome Extension' | ||
248 | mobile_apps: | ||
249 | android: | ||
250 | via_f_droid: 'via F-Droid' | ||
251 | via_google_play: 'via Google Play' | ||
252 | ios: 'on the iTunes Store' | ||
253 | windows: 'on the Microsoft Store' | ||
254 | bookmarklet: | ||
255 | description: 'Drag & drop this link to your bookmarks bar:' | ||
256 | |||
257 | quickstart: | ||
258 | page_title: 'Quickstart' | ||
259 | intro: | ||
260 | title: 'Welcome to wallabag!' | ||
261 | paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." | ||
262 | paragraph_2: 'Follow us!' | ||
263 | configure: | ||
264 | title: 'Configure the application' | ||
265 | language: 'Change language and design' | ||
266 | rss: 'Enable RSS feeds' | ||
267 | tagging_rules: 'Write rules to automatically tag your articles' | ||
268 | admin: | ||
269 | title: 'Administration' | ||
270 | description: 'As an administrator, you have privileges on wallabag. You can:' | ||
271 | new_user: 'Create a new user' | ||
272 | analytics: 'Configure analytics' | ||
273 | sharing: 'Enable some parameters about article sharing' | ||
274 | export: 'Configure export' | ||
275 | import: 'Configure import' | ||
276 | first_steps: | ||
277 | title: 'First steps' | ||
278 | new_article: 'Save your first article' | ||
279 | unread_articles: 'And classify it!' | ||
280 | migrate: | ||
281 | title: 'Migrate from an existing service' | ||
282 | description: "Are you using another service? We'll help you to retrieve your data on wallabag." | ||
283 | pocket: 'Migrate from Pocket' | ||
284 | wallabag_v1: 'Migrate from wallabag v1' | ||
285 | wallabag_v2: 'Migrate from wallabag v2' | ||
286 | developer: | ||
287 | title: 'Developers' | ||
288 | create_application: 'Create your third application' | ||
289 | docs: | ||
290 | title: 'Full documentation' | ||
291 | annotate: 'Annotate your article' | ||
292 | export: 'Convert your articles into ePUB or PDF' | ||
293 | search_filters: 'See how you can look for an article by using search engine and filters' | ||
294 | fetching_errors: 'What can I do if an article encounters errors during fetching?' | ||
295 | all_docs: 'And so many other articles!' | ||
296 | support: | ||
297 | title: 'Support' | ||
298 | description: 'If you need some help, we are here for you.' | ||
299 | github: 'On GitHub' | ||
300 | email: 'By email' | ||
301 | gitter: 'On Gitter' | ||
302 | |||
303 | tag: | ||
304 | page_title: 'Tags' | ||
305 | list: | ||
306 | number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' | ||
307 | |||
308 | import: | ||
309 | page_title: 'Import' | ||
310 | page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.' | ||
311 | action: | ||
312 | import_contents: 'Import contents' | ||
313 | form: | ||
314 | mark_as_read_title: 'Mark all as read?' | ||
315 | mark_as_read_label: 'Mark all imported entries as read' | ||
316 | file_label: 'File' | ||
317 | save_label: 'Upload file' | ||
318 | pocket: | ||
319 | page_title: 'Import > Pocket' | ||
320 | description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag." | ||
321 | config_missing: | ||
322 | description: "Pocket import isn't configured." | ||
323 | admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' | ||
324 | user_message: 'Your server admin needs to define an API Key for Pocket.' | ||
325 | authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.' | ||
326 | connect_to_pocket: 'Connect to Pocket and import data' | ||
327 | wallabag_v1: | ||
328 | page_title: 'Import > Wallabag v1' | ||
329 | description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.' | ||
330 | how_to: 'Please select your wallabag export and click on the below button to upload and import it.' | ||
331 | wallabag_v2: | ||
332 | page_title: 'Import > Wallabag v2' | ||
333 | description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' | ||
334 | |||
335 | developer: | ||
336 | page_title: 'Developer' | ||
337 | welcome_message: 'Welcome to the wallabag API' | ||
338 | documentation: 'Documentation' | ||
339 | how_to_first_app: 'How to create my first application' | ||
340 | full_documentation: 'View full API documentation' | ||
341 | list_methods: 'List API methods' | ||
342 | clients: | ||
343 | title: 'Clients' | ||
344 | create_new: 'Create a new client' | ||
345 | existing_clients: | ||
346 | title: 'Existing clients' | ||
347 | field_id: 'Client ID' | ||
348 | field_secret: 'Client secret' | ||
349 | field_uris: 'Redirect URIs' | ||
350 | field_grant_types: 'Grant type allowed' | ||
351 | no_client: 'No client yet.' | ||
352 | remove: | ||
353 | warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !' | ||
354 | warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag." | ||
355 | action: 'Remove this client' | ||
356 | client: | ||
357 | page_title: 'Developer > New client' | ||
358 | page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' | ||
359 | form: | ||
360 | redirect_uris_label: 'Redirect URIs' | ||
361 | save_label: 'Create a new client' | ||
362 | action_back: 'Back' | ||
363 | client_parameter: | ||
364 | page_title: 'Developer > Client parameters' | ||
365 | page_description: 'Here are your client parameters.' | ||
366 | field_id: 'Client ID' | ||
367 | field_secret: 'Client secret' | ||
368 | back: 'Back' | ||
369 | read_howto: 'Read the howto "Create my first application"' | ||
370 | howto: | ||
371 | page_title: 'Developer > How to create my first application' | ||
372 | description: | ||
373 | paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.' | ||
374 | paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.' | ||
375 | paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.' | ||
376 | paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):' | ||
377 | paragraph_5: 'The API will return a response like this:' | ||
378 | paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:' | ||
379 | paragraph_7: 'This call will return all the entries for your user.' | ||
380 | paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' | ||
381 | back: 'Back' | ||
382 | |||
383 | validator: | ||
384 | password_must_match: 'The password fields must match.' | ||
385 | password_too_short: 'Password should by at least 8 chars long' | ||
386 | password_wrong_value: 'Wrong value for your current password' | ||
387 | item_per_page_too_high: 'This will certainly kill the app' | ||
388 | rss_limit_too_hight: 'This will certainly kill the app' | ||
389 | |||
390 | flashes: | ||
391 | config: | ||
392 | notice: | ||
393 | config_saved: 'Config saved. Some parameters will be considered after disconnection.' | ||
394 | password_updated: 'Password updated' | ||
395 | password_not_updated_demo: "In demonstration mode, you can't change password for this user." | ||
396 | user_updated: 'Information updated' | ||
397 | rss_updated: 'RSS information updated' | ||
398 | tagging_rules_updated: 'Tagging rules updated' | ||
399 | tagging_rules_deleted: 'Tagging rule deleted' | ||
400 | user_added: 'User "%username%" added' | ||
401 | rss_token_updated: 'RSS token updated' | ||
402 | entry: | ||
403 | notice: | ||
404 | entry_already_saved: 'Entry already saved on %date%' | ||
405 | entry_saved: 'Entry saved' | ||
406 | entry_updated: 'Entry updated' | ||
407 | entry_reloaded: 'Entry reloaded' | ||
408 | entry_reload_failed: 'Failed to reload entry' | ||
409 | entry_archived: 'Entry archived' | ||
410 | entry_unarchived: 'Entry unarchived' | ||
411 | entry_starred: 'Entry starred' | ||
412 | entry_unstarred: 'Entry unstarred' | ||
413 | entry_deleted: 'Entry deleted' | ||
414 | tag: | ||
415 | notice: | ||
416 | tag_added: 'Tag added' | ||
417 | import: | ||
418 | notice: | ||
419 | failed: 'Import failed, please try again.' | ||
420 | failed_on_file: 'Error while processing import. Please verify your import file.' | ||
421 | summary: 'Import summary: %imported% imported, %skipped% already saved.' | ||
422 | developer: | ||
423 | notice: | ||
424 | client_created: 'New client created.' | ||
425 | client_deleted: 'Client deleted' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml index b666f2df..a8fcbcf6 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml | |||
@@ -1,242 +1,425 @@ | |||
1 | #Login | 1 | security: |
2 | Keep me logged in: 'Mantenme conectado' | 2 | login: |
3 | Forgot your password?: '¿Ha olvidado su contraseña?' | 3 | page_title: '¡Bienvenido a wallabag !' |
4 | Login: 'Conectarse' | 4 | keep_logged_in: 'Manténgame conectado' |
5 | Back to login: 'Revenir au formulaire de connexion' | 5 | forgot_password: '¿Se ha olvidado de su contraseña?' |
6 | Send: 'Envíar' | 6 | submit: 'Conectarse' |
7 | "Enter your email address below and we'll send you password reset instructions.": "Introduce tu dirección de email y le enviaremos las instrucciones para resetear la contraseña" | 7 | register: 'Registrarse' |
8 | Register: 'Registrarse' | 8 | username: 'Nombre de usuario' |
9 | password: 'Contraseña' | ||
10 | # cancel: 'Cancel' | ||
11 | resetting: | ||
12 | description: "Introduzca su dirección del correo electrónico y le enviaremos las instrucciones para reiniciar la contraseña" | ||
13 | register: | ||
14 | page_title: 'Crear una cuenta' | ||
15 | go_to_account: 'Acceder su cuenta' | ||
9 | 16 | ||
10 | # Menu | 17 | menu: |
11 | unread: 'Sin leer' | 18 | left: |
12 | starred: 'Favoritos' | 19 | unread: 'Sin leer' |
13 | archive: 'Archivo' | 20 | starred: 'Favoritos' |
14 | all: 'Todos los artículos' | 21 | archive: 'Archivo' |
15 | tags: 'Tags' | 22 | all_articles: 'Todos los artículos' |
16 | config: 'Configuración' | 23 | config: 'Configuración' |
17 | internal settings: 'Configuración interna' | 24 | tags: 'Tags' |
18 | import: 'Importar' | 25 | internal_settings: 'Configuración interna' |
19 | howto: 'Ayuda' | 26 | import: 'Importar' |
20 | logout: 'Desconectarse' | 27 | howto: 'Ayuda' |
21 | Filtered: 'Articulos filtrados' | 28 | developer: 'Promotor' |
22 | About: 'Acerca de' | 29 | logout: 'Desconectarse' |
30 | about: 'Acerca de' | ||
31 | search: 'Buscar' | ||
32 | save_link: 'Archivar un enlace' | ||
33 | back_to_unread: 'Volver a los artículos sin leer' | ||
34 | top: | ||
35 | add_new_entry: 'Añadir un nuevo artículo' | ||
36 | search: 'Buscar' | ||
37 | filter_entries: 'Filtrar los artículos' | ||
38 | export: 'Exportar' | ||
39 | search_form: | ||
40 | input_label: 'Introduzca su búsqueda aquí' | ||
23 | 41 | ||
24 | # Header | 42 | footer: |
25 | Back to unread articles: 'Volver a los artículos sin leer' | 43 | wallabag: |
26 | Add a new entry: 'Añadir un nuevo artículo' | 44 | elsewhere: 'Lleve wallabag consigo' |
27 | Search: 'Buscar' | 45 | social: 'Social' |
28 | Filter entries: 'Filtrar los artículos' | 46 | # powered_by: 'powered by' |
29 | Enter your search here: 'Introduce tu búsqueda aquí' | 47 | about: 'Acerca de' |
30 | Save new entry: 'Guardar un nuevo artículo' | ||
31 | Export: 'Exportar' | ||
32 | 48 | ||
33 | # Config screen | 49 | config: |
34 | Settings: 'Configuración' | 50 | page_title: 'Configuración' |
35 | User information: 'Información de usuario' | 51 | tab_menu: |
36 | Password: 'Contraseña' | 52 | settings: 'Configuración' |
37 | RSS: 'RSS' | 53 | rss: 'RSS' |
38 | Add a user: 'Añadir un usuario' | 54 | user_info: 'Información de usuario' |
39 | Theme: 'Tema' | 55 | password: 'Contraseña' |
40 | Items per page: "Número de artículos por página" | 56 | rules: 'Reglas de etiquetado automáticas' |
41 | Language: 'Idioma' | 57 | new_user: 'Añadir un usuario' |
42 | Save: 'Enregistrer' | 58 | form: |
43 | RSS token: 'RSS token' | 59 | save: 'Guardar' |
44 | RSS token updated: 'RSS token actualizado ' | 60 | form_settings: |
45 | Name: 'Nombre' | 61 | theme_label: 'Tema' |
46 | Email: 'Direccion e-mail' | 62 | items_per_page_label: 'Número de artículos por página' |
47 | No token: 'Aucun jeton généré' | 63 | language_label: 'Idioma' |
48 | Reset your token: 'Resetear token' | 64 | reading_speed: |
49 | Create your token: 'Crear token' | 65 | # label: 'Reading speed' |
50 | Rss limit: "Límite de artículos en feed RSS" | 66 | # help_message: 'You can use online tools to estimate your reading speed:' |
51 | RSS links: 'URL de su feed RSS' | 67 | # 100_word: 'I read ~100 words per minute' |
52 | "RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.": "Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero" | 68 | # 200_word: 'I read ~200 words per minute' |
53 | Old password: 'Contraseña actual' | 69 | # 300_word: 'I read ~300 words per minute' |
54 | New password: 'Nueva contraseña' | 70 | # 400_word: 'I read ~400 words per minute' |
55 | Repeat new password: 'Confirmar la nueva contraseña' | 71 | form_rss: |
56 | Username: "Nombre de usuario" | 72 | description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero' |
57 | Two factor authentication: "Autentificación de dos factores" | 73 | token_label: 'RSS token' |
58 | "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion": "Con la autentificación de dos factores recibirá código mediante email en cada nueva conexión que no sea de confianza" | 74 | # no_token: 'No token' |
75 | token_create: 'Crear token' | ||
76 | token_reset: 'Resetear token' | ||
77 | rss_links: 'URL de su feed RSS' | ||
78 | rss_link: | ||
79 | unread: 'sin leer' | ||
80 | starred: 'favoritos' | ||
81 | archive: 'archivo' | ||
82 | rss_limit: 'Límite de artículos en feed RSS' | ||
83 | form_user: | ||
84 | two_factor_description: "Con la autentificación de dos factores recibirá código mediante email en cada nueva conexión que no sea de confianza" | ||
85 | name_label: 'Nombre' | ||
86 | email_label: 'Direccion e-mail' | ||
87 | twoFactorAuthentication_label: 'Autentificación de dos factores' | ||
88 | form_password: | ||
89 | old_password_label: 'Contraseña actual' | ||
90 | new_password_label: 'Nueva contraseña' | ||
91 | repeat_new_password_label: 'Confirmar la nueva contraseña' | ||
92 | form_rules: | ||
93 | # if_label: 'if' | ||
94 | # then_tag_as_label: 'then tag as' | ||
95 | # delete_rule_label: 'delete' | ||
96 | rule_label: 'Regla' | ||
97 | tags_label: 'Tags' | ||
98 | faq: | ||
99 | title: 'FAQ' | ||
100 | tagging_rules_definition_title: '¿Qué significa reglas de etiquetado autómaticas?' | ||
101 | tagging_rules_definition_description: 'Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cáda vez que un nuevo artículo es añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudandote a clasificar automáticamente los artículos.' | ||
102 | how_to_use_them_title: '¿Cómo se utilizan?' | ||
103 | # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' | ||
104 | variables_available_title: '¿Qué variables y operadores se pueden utilizar para escribir las reglas?' | ||
105 | variables_available_description: 'Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:' | ||
106 | meaning: 'Significado' | ||
107 | variable_description: | ||
108 | label: 'Variable' | ||
109 | title: 'Titúlo del artículo' | ||
110 | url: 'URL del artículo' | ||
111 | isArchived: 'El artículo está guardado o no' | ||
112 | isStarred: 'Si el artículo es un favorito o no' | ||
113 | content: "El contenido del artículo" | ||
114 | language: "El idoma del artículo" | ||
115 | mimetype: "Tipo MIME del artículo" | ||
116 | readingTime: "El tiempo estimado de lectura del artículo, en minutos" | ||
117 | domainName: 'El dominio del artículo' | ||
118 | operator_description: | ||
119 | label: 'Operador' | ||
120 | less_than: 'Menos que…' | ||
121 | strictly_less_than: 'Estrictámente menos que…' | ||
122 | greater_than: 'Más que…' | ||
123 | strictly_greater_than: 'Estrictámente mas que…' | ||
124 | equal_to: 'Egual a…' | ||
125 | not_equal_to: 'Diferente de…' | ||
126 | or: 'Una regla O otra' | ||
127 | and: 'Una regla Y la otra' | ||
128 | matches: 'Prueba si un <i>sujeto</i> corresponde a una <i>busqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide "football"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'Nombre de usuario' | ||
131 | password_label: 'Contraseña' | ||
132 | repeat_new_password_label: 'Confirmar la nueva contraseña' | ||
133 | plain_password_label: '????' | ||
134 | email_label: 'Email' | ||
59 | 135 | ||
60 | # Tagging rules | 136 | entry: |
61 | Tagging rules: "Reglas de etiquetado automáticas" | 137 | page_titles: |
62 | What does « tagging rules » mean?: "¿Qué significa reglas de etiquetado autómaticas?" | 138 | # unread: 'Unread entries' |
63 | "They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.": "Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cáda vez que un nuevo artículo es añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudandote a clasificar automáticamente los artículos." | 139 | # starred: 'Starred entries' |
64 | How do I use them?: "¿Cómo se utilizan?" | 140 | # archived: 'Archived entries' |
65 | "Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = \"github.com\"</i> » then tag as « <i>long reading, github </i> »": "Imaginons que voulez attribuer aux nouveaux articles le tag « <i>lecture courte</i> » lorsque le temps de lecture est inférieur à 3 minutes.<br />Dans ce cas, vous devriez mettre « readingTime <= 3 » dans le champ <i>Règle</i> et « <i>lecture courte</i> » dans le champ <i>Tag</i>.<br />Plusieurs tags peuvent être ajoutés simultanément en les séparant par des virgules : « <i>lecture courte, à lire</i> »<br />Des règles complexes peuvent être créées en utilisant des opérateurs prédéfinis: si « <i>readingTime >= 5 AND domainName = \"github.com\"</i> » alors attribuer les tags « <i>lecteur longue, github </i> »" | 141 | # filtered: 'Filtered entries' |
66 | Which variables and operators can I use to write rules?: "¿Qué variables y operadores se pueden utilizar para escribir las reglas?" | 142 | list: |
67 | The following variables and operators can be used to create tagging rules:: "Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:" | 143 | number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.' |
68 | Variable: "Variable" | 144 | reading_time: 'tiempo estimado de lectura' |
69 | Meaning: "Significado" | 145 | reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min' |
70 | Operator: "Operador" | 146 | reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur"><</small> 1 min' |
71 | Title of the entry: "Titúlo del artículo" | 147 | original_article: 'original' |
72 | Less than…: "Menos que…" | 148 | toogle_as_read: 'Marcar cómo leído/ no leído' |
73 | URL of the entry: "URL del artículo" | 149 | toogle_as_star: 'Marcar cómo favorito/ no favorito' |
74 | Strictly less than…: "Estrictámente menos que…" | 150 | delete: 'Suprimir' |
75 | Whether the entry is archived or not: "El artículo está guardado o no" | 151 | export_title: 'Exportar' |
76 | Greater than…: "Más que…" | 152 | filters: |
77 | Whether the entry is starred or not: "Si el artículo es un favorito o no" | 153 | title: 'Filtros' |
78 | Strictly greater than…: "Estrictámente mas que…" | 154 | status_label: 'Estatus' |
79 | The entry's content: "El contenido del artículo" | 155 | archived_label: 'Archivado' |
80 | Equal to…: "Egual a…" | 156 | starred_label: 'Favorito' |
81 | The entry's language: "El idoma del artículo" | 157 | preview_picture_label: 'Hay una foto' |
82 | Not equal to…: "Diferente de…" | 158 | preview_picture_help: 'Foto de preview' |
83 | The entry's mime-type: "Tipo MIME del artículo" | 159 | language_label: 'Idioma' |
84 | One rule or another: "Una regla o otra" | 160 | reading_time: |
85 | The estimated entry's reading time, in minutes: "El tiempo estimado de lectura del artículo, en minutos" | 161 | label: 'Duración de lectura en minutos' |
86 | One rule and another: "Una regla y la otra" | 162 | from: 'de' |
87 | The domain name of the entry: "El dominio del artículo" | 163 | to: 'a' |
88 | "Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches \"football\"</code>": "Prueba si un <i>sujeto</i> corresponde a una <i>busqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide \"football\"</code>" | 164 | domain_label: 'Nombre de dominio' |
89 | Rule: "Regla" | 165 | created_at: |
90 | FAQ: "FAQ" | 166 | label: 'Fecha de creación' |
167 | from: 'de' | ||
168 | to: 'a' | ||
169 | action: | ||
170 | clear: 'Limpiar' | ||
171 | filter: 'Filtrar' | ||
172 | view: | ||
173 | left_menu: | ||
174 | # back_to_top: 'Back to top' | ||
175 | back_to_homepage: 'Volver' | ||
176 | set_as_read: 'Marcar como leído' | ||
177 | # set_as_unread: 'Mark as unread' | ||
178 | set_as_favorite: 'Marcar cómo favorito' | ||
179 | view_original_article: 'Artículo original' | ||
180 | re_fetch_content: 'Redescargar el contenido' | ||
181 | delete: 'Suprimir' | ||
182 | add_a_tag: 'Añadir una etiqueta' | ||
183 | share_content: 'Compartir' | ||
184 | share_email_label: 'Direccion e-mail' | ||
185 | download: 'Descargar' | ||
186 | # print: 'Print' | ||
187 | problem: | ||
188 | label: '¿Algún problema?' | ||
189 | description: '¿Este artículo no se muestra bien?' | ||
190 | edit_title: 'Modificar el título' | ||
191 | original_article: 'original' | ||
192 | annotations_on_the_entry: '{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones' | ||
193 | new: | ||
194 | page_title: 'Guardar un nuevo artículo' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | page_title: 'Editar una artículo' | ||
200 | title_label: 'Título' | ||
201 | url_label: 'Url' | ||
202 | is_public_label: 'Es Público' | ||
203 | save_label: 'Guardar' | ||
91 | 204 | ||
92 | # Entries | 205 | about: |
93 | "estimated reading time: %readingTime% min": "tiempo estimado de lectura: %readingTime% min" | 206 | page_title: 'Acerca de' |
94 | "estimated reading time: %inferior% 1 min": "tiempo estimado de lectura: %inferior% 1 min" | 207 | top_menu: |
95 | original: "original" | 208 | who_behind_wallabag: 'Equipo de desarrollo de wallabag' |
96 | Toggle mark as read: 'Marcar cómo leído/ no leído' | 209 | getting_help: 'Conseguir ayuda' |
97 | Toggle favorite: 'Marcar cómo favorito/ no favorito' | 210 | helping: 'Ayudar a wallabag' |
98 | Delete: 'Suprimir' | 211 | contributors: 'Contribuidores' |
99 | "{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.": "{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos." | 212 | third_party: 'Librerías de terceeros' |
100 | http://website: "http://website" | 213 | who_behind_wallabag: |
101 | "{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations": "{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones" | 214 | developped_by: 'Desarrollado por' |
215 | website: 'Sitio web' | ||
216 | many_contributors: 'Y muchos otros contribuidores ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">en Github</a>' | ||
217 | project_website: 'Web del proyecto' | ||
218 | license: 'Licencia' | ||
219 | version: 'Version' | ||
220 | getting_help: | ||
221 | documentation: 'Documentación' | ||
222 | bug_reports: 'Reporte de errores' | ||
223 | support: '<a href="https://support.wallabag.org">En nuestra web de soporte website</a> o <a href="https://github.com/wallabag/wallabag/issues">en GitHub</a>' | ||
224 | helping: | ||
225 | description: 'wallabag es libre y gratuito. Usted puede ayudarnos :' | ||
226 | by_contributing: 'contribuyendo al proyecto :' | ||
227 | by_contributing_2: 'nuestras necesidades están en un ticket' | ||
228 | by_paypal: 'via Paypal' | ||
229 | contributors: | ||
230 | description: 'Gradias a los contribuidores de la aplicación web de wallabag' | ||
231 | third_party: | ||
232 | description: 'Aquí está la lista de las dependencias utilizadas por wallabag (con sus licencias) :' | ||
233 | package: 'Paquete' | ||
234 | license: 'Licencia' | ||
102 | 235 | ||
103 | # Edit entry | 236 | howto: |
104 | Edit an entry: "Editar una artículo" | 237 | page_title: 'Ayuda' |
105 | Title: "Título" | 238 | # page_description: 'There are several ways to save an article:' |
106 | Is public: "Es Público" | 239 | top_menu: |
240 | browser_addons: 'Extensiones de navigador' | ||
241 | mobile_apps: 'Applicaciones para smartphone' | ||
242 | bookmarklet: 'Bookmarklet' | ||
243 | form: | ||
244 | description: 'Gracias a este formulario' | ||
245 | browser_addons: | ||
246 | firefox: 'Extensión Firefox' | ||
247 | chrome: 'Extensión Chrome' | ||
248 | mobile_apps: | ||
249 | android: | ||
250 | via_f_droid: 'via F-Droid' | ||
251 | via_google_play: 'via Google Play' | ||
252 | # ios: 'on the iTunes Store' | ||
253 | # windows: 'on the Microsoft Store' | ||
254 | bookmarklet: | ||
255 | description: 'Desplazar y soltar este link en la barra de marcadores :' | ||
107 | 256 | ||
108 | # tag | 257 | quickstart: |
109 | Tags: Tags | 258 | page_title: 'Comienzo rápido' |
110 | "{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.": "{0} No hay ningun tag.|{1} Hay un tag.|]1,Inf[ Hay %count% tags." | 259 | intro: |
260 | title: 'Bienvenido a wallabag !' | ||
261 | paragraph_1: "Le acompañaremos a su visita de wallabag y le mostraremos algunas características que le pueden interesar." | ||
262 | paragraph_2: '¡Siganos!' | ||
263 | configure: | ||
264 | title: 'Configure la aplicación' | ||
265 | language: 'Cambie el idoma y el diseño de la aplicación' | ||
266 | rss: 'Activar los feeds RSS' | ||
267 | # tagging_rules: 'Write rules to automatically tag your articles' | ||
268 | admin: | ||
269 | # title: 'Administration' | ||
270 | # description: 'As an administrator, you have privileges on wallabag. You can:' | ||
271 | # new_user: 'Create a new user' | ||
272 | # analytics: 'Configure analytics' | ||
273 | # sharing: 'Enable some parameters about article sharing' | ||
274 | # export: 'Configure export' | ||
275 | # import: 'Configure import' | ||
276 | first_steps: | ||
277 | title: 'Prieros pasos' | ||
278 | new_article: 'Guarde su primer artículo' | ||
279 | unread_articles: '¡Y clasifiquelo!' | ||
280 | migrate: | ||
281 | title: 'Migrar de un servicio existente' | ||
282 | description: "¿Está usando otro servicio? Le ayudaremos a migrar sus datos a wallabag." | ||
283 | pocket: 'Migrar desde Pocket' | ||
284 | wallabag_v1: 'Migrar desde wallabag v1' | ||
285 | wallabag_v2: 'Migrar desde wallabag v2' | ||
286 | developer: | ||
287 | # title: 'Developers' | ||
288 | # create_application: 'Create your third application' | ||
289 | docs: | ||
290 | title: 'Documentación completa' | ||
291 | # annotate: 'Annotate your article' | ||
292 | export: 'Convierta sus artículos a ePub o a PDF' | ||
293 | search_filters: 'Aprenda a utilizar el buscador y los filtros para encontrar el artículo que le interese' | ||
294 | # fetching_errors: 'What can I do if an article encounters errors during fetching?' | ||
295 | all_docs: '¡Y muchos más artículos!' | ||
296 | support: | ||
297 | title: 'Soporte' | ||
298 | description: 'Sí necesita ayuda, estamos disponibles para usted.' | ||
299 | github: 'En GitHub' | ||
300 | email: 'Por email' | ||
301 | gitter: 'En Gitter' | ||
111 | 302 | ||
112 | # Filters | 303 | tag: |
113 | Filters: 'Filtros' | 304 | page_title: 'Tags' |
114 | Status: 'Estatus' | 305 | list: |
115 | Archived: 'Archivado' | 306 | number_on_the_page: '{0} No hay ningun tag.|{1} Hay un tag.|]1,Inf[ Hay %count% tags.' |
116 | Starred: 'Favorito' | ||
117 | Preview picture: 'Foto de preview' | ||
118 | Has a preview picture: 'Hay una foto' | ||
119 | Reading time in minutes: 'Duración de lectura en minutos' | ||
120 | from: 'de' | ||
121 | to: 'a' | ||
122 | website.com: 'website.com' | ||
123 | Domain name: 'Nombre de dominio' | ||
124 | Creation date: 'Fecha de creación' | ||
125 | dd/mm/yyyy: 'dd/mm/aaaa' | ||
126 | Clear: 'Limpiar' | ||
127 | Filter: 'Filtrar' | ||
128 | website.com: "website.com" | ||
129 | 307 | ||
130 | # About | 308 | import: |
131 | About: "Acerca de" | 309 | page_title: 'Importar' |
132 | Who is behind wallabag: "Equipo de desarrollo de wallabag" | 310 | page_description: 'Bienvenido al útil de migración de wallabag. Seleccione el servicio previo del que usted quiera migrar.' |
133 | Getting help: "Conseguir ayuda" | 311 | action: |
134 | Helping wallabag: "Ayudar a wallabag" | 312 | import_contents: 'Importar los contenidos' |
135 | Developed by: "Desarrollado por" | 313 | form: |
136 | website: "Sitio web" | 314 | # mark_as_read_title: 'Mark all as read?' |
137 | And many others contributors ♥: "Y muchos otros contribuidores ♥" | 315 | # mark_as_read_label: 'Mark all imported entries as read' |
138 | on GitHub: "en GitHub" | 316 | file_label: 'Fichero' |
139 | Project website: "Web del proyecto" | 317 | save_label: 'Importar el fichero' |
140 | License: "Licencia" | 318 | pocket: |
141 | Version: "Versión" | 319 | page_title: 'Importar > Pocket' |
142 | Documentation: "Documentación" | 320 | description: "Va a importar sus datos de Pocket. Pocket no nos permite descargar el contenido de su servicio, así que el contenido de cada artículo será redescargado por wallabag." |
143 | Bug reports: "Reporte de errores" | 321 | config_missing: |
144 | On our support website: "En nuestra web de soporte" | 322 | description: "La importación de Pocket no está configurada." |
145 | or: "o" | 323 | admin_message: 'Debe definir %keyurls%una clava del API Pocket%keyurle%.' |
146 | "wallabag is free and opensource. You can help us:": "wallabag es libre y gratuito. Usted puede ayudarnos :" | 324 | user_message: 'El administrador de vuestro servidor debe definir una clave API Pocket.' |
147 | "by contributing to the project:": "contribuyendo al proyecto :" | 325 | authorize_message: 'Puedes importar sus datos desde su cuenta de Pocket. Sólo tienes que pulsar en el botón para autrizar que wallabag se conecte a getpocket.com.' |
148 | an issue lists all our needs: "nuestras necesidades están en un ticket" | 326 | connect_to_pocket: 'Conectese a Pocket para importar los datos' |
149 | via Paypal: "via Paypal" | 327 | wallabag_v1: |
150 | Take wallabag with you: "Llevate wallabag contigo" | 328 | page_title: 'Importar > Wallabag v1' |
151 | Social: "Social" | 329 | description: 'Va a importar sus artículos de wallabag v1. En su configuración de wallabag v1, pulse sobre "Exportar JSON" dentro de la sección "Exportar sus datos de wallabag". Usted tendrá un fichero "wallabag-export-1-xxxx-xx-xx.json".' |
152 | powered by: "propulsé par" | 330 | how_to: 'Seleccione el fichero de su exportación de wallabag v1 y puelse en el botón para subirla y importarla.' |
153 | Contributors: "Contribuidores" | 331 | wallabag_v2: |
154 | Thank you to contributors on wallabag web application: "Gradias a los contribuidores de la aplicación web de wallabag" | 332 | page_title: 'Importar > Wallabag v2' |
155 | Third-party libraries: "Librerías de terceeros" | 333 | description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, clickee en "JSON". Usted tendrá un fichero "All articles.json"' |
156 | "Here are the list of third-party libraries used in wallabag (with their licenses):": "Aquí está la lista de las dependencias utilizadas por wallabag (con sus licencias):" | ||
157 | Package: Paquete | ||
158 | License: Licencia | ||
159 | 334 | ||
160 | # Howto | 335 | developer: |
161 | Form: "Formulario" | 336 | # page_title: 'Developer' |
162 | Thanks to this form: "Gracias a este formulario" | 337 | # welcome_message: 'Welcome to the wallabag API' |
163 | Browser addons: "Extensiones de navigador" | 338 | # documentation: 'Documentation' |
164 | Mobile apps: "Applicaciones para smartphone" | 339 | # how_to_first_app: 'How to create my first application' |
165 | Bookmarklet: "Bookmarklet" | 340 | # full_documentation: 'View full API documentation' |
166 | Standard Firefox Add-On: "Extensión Firefox" | 341 | # list_methods: 'List API methods' |
167 | Chrome Extension: "Extensión Chrome" | 342 | # clients: |
168 | download the application: "descargar la aplicación" | 343 | # title: 'Clients' |
169 | "Drag & drop this link to your bookmarks bar:": "Desplazar y soltar este link en la barra de marcadores :" | 344 | # create_new: 'Create a new client' |
345 | # existing_clients: | ||
346 | # title: 'Existing clients' | ||
347 | # field_id: 'Client ID' | ||
348 | # field_secret: 'Client secret' | ||
349 | # field_uris: 'Redirect URIs' | ||
350 | # field_grant_types: 'Grant type allowed' | ||
351 | # no_client: 'No client yet.' | ||
352 | # remove: | ||
353 | # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !' | ||
354 | # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag." | ||
355 | # action: 'Remove this client' | ||
356 | # client: | ||
357 | # page_title: 'Developer > New client' | ||
358 | # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' | ||
359 | # form: | ||
360 | # redirect_uris_label: 'Redirect URIs' | ||
361 | # save_label: 'Create a new client' | ||
362 | # action_back: 'Back' | ||
363 | # client_parameter: | ||
364 | # page_title: 'Developer > Client parameters' | ||
365 | # page_description: 'Here are your client parameters.' | ||
366 | # field_id: 'Client ID' | ||
367 | # field_secret: 'Client secret' | ||
368 | # back: 'Back' | ||
369 | # read_howto: 'Read the howto "Create my first application"' | ||
370 | # howto: | ||
371 | # page_title: 'Developer > How to create my first application' | ||
372 | # description: | ||
373 | # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.' | ||
374 | # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.' | ||
375 | # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.' | ||
376 | # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):' | ||
377 | # paragraph_5: 'The API will return a response like this:' | ||
378 | # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:' | ||
379 | # paragraph_7: 'This call will return all the entries for your user.' | ||
380 | # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' | ||
381 | # back: 'Back' | ||
170 | 382 | ||
171 | # Flash messages | 383 | validator: |
172 | Information updated: "Su información personal ha sido actualizada" | 384 | password_must_match: 'Las contraseñas no coinciden' |
173 | "Config saved. Some parameters will be considered after disconnection.": "Configuración guardada. Algunos parámetros serán recargados cuando se vuelva a conectar." | 385 | password_too_short: 'La contraseña debe tener al menos 8 carácteres' |
174 | RSS information updated: "La configuración de los feeds RSS ha sido actualizada" | 386 | # password_wrong_value: 'Wrong value for your current password' |
175 | Password updated: "Contraseña actualizada" | 387 | # item_per_page_too_high: 'This will certainly kill the app' |
176 | Entry starred: "Artículo guardado en los favoritos" | 388 | # rss_limit_too_hight: 'This will certainly kill the app' |
177 | Entry unstarred: "Artículo retirado de los favoritos" | ||
178 | Entry archived: "Artículo archivado" | ||
179 | Entry unarchived: "Artículo desarchivado" | ||
180 | Entry deleted: "Artículo suprimido" | ||
181 | Tagging rule deleted: "Regla de etiquetado borrada" | ||
182 | Tagging rules updated: "Regla de etiquetado actualizada" | ||
183 | User "%username%" added: 'Usuario "%username%" añadido' | ||
184 | In demonstration mode, you can't change password for this user.: 'En modo demo, no puedes cambiar la contraseña del usuario.' | ||
185 | 389 | ||
186 | # Entry | 390 | flashes: |
187 | Mark as read: 'Marcar como leído' | 391 | config: |
188 | Favorite: 'Marcar cómo favorito' | 392 | notice: |
189 | back: 'Volver' | 393 | config_saved: 'Configuración guardada. Algunos parámetros serán recargados cuando se vuelva a conectar.' |
190 | original article: 'Artículo original' | 394 | password_updated: 'Contraseña actualizada' |
191 | Add a tag: 'Añadir una etiqueta' | 395 | password_not_updated_demo: "En modo demo, no puedes cambiar la contraseña del usuario." |
192 | Share: 'Compartir' | 396 | user_updated: 'Su información personal ha sido actualizada' |
193 | Download: 'Descargar' | 397 | rss_updated: 'La configuración de los feeds RSS ha sido actualizada' |
194 | Does this article appear wrong?: "¿Este artículo no se muestra bien?" | 398 | tagging_rules_updated: 'Regla de etiquetado borrada' |
195 | Problems?: '¿Algún problema?' | 399 | tagging_rules_deleted: 'Regla de etiquetado actualizada' |
196 | Edit title: "Modificar el título" | 400 | user_added: 'Usuario "%username%" añadido' |
197 | Re-fetch content: "Redescargar el contenido" | 401 | rss_token_updated: 'RSS token actualizado' |
198 | Tag added: "Etiqueta añadida" | 402 | entry: |
199 | 403 | notice: | |
200 | # Import | 404 | # entry_already_saved: 'Entry already saved on %date%' |
201 | Welcome to wallabag importer. Please select your previous service that you want to migrate.: "Bienvenido al útil de migración de wallabag. Seleccione el servicio previo del que usted quiera migrar." | 405 | # entry_saved: 'Entry saved' |
202 | "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.": "Va a importar sus datos de Pocket. Pocket no nos permite descargar el contenido de su servicio, así que el contenido de cada artículo será redescargado por wallabag." | 406 | # entry_updated: 'Entry updated' |
203 | "This importer will import all your wallabag v1 articles. On your config page, click on \"JSON export\" in the \"Export your wallabag data\" section. You will have a \"wallabag-export-1-xxxx-xx-xx.json\" file.": "Va a importar sus artículos de wallabag v1. En su configuración de wallabag v1, pulse sobre \"Exportar JSON\" dentro de la sección \"Exportar sus datos de wallabag\". Usted tendrá un fichero \"wallabag-export-1-xxxx-xx-xx.json\"." | 407 | # entry_reloaded: 'Entry reloaded' |
204 | "This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on \"JSON\". You will have a \"All articles.json\" file.": "Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, clickee en \"JSON\". Usted tendrá un fichero \"All articles.json\"" | 408 | # entry_reload_failed: 'Failed to reload entry' |
205 | "You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.": "Puedes importar sus datos desde su cuenta de Pocket. Sólo tienes que pulsar en el botón para autrizar que wallabag se conecte a getpocket.com." | 409 | entry_archived: 'Artículo archivado' |
206 | Import > Pocket: "Importar > Pocket" | 410 | entry_unarchived: 'Artículo desarchivado' |
207 | Pocket import isn't configured.: "La importación de Pocket no está configurada." | 411 | entry_starred: 'Artículo guardado en los favoritos' |
208 | You need to define %keyurls% a pocket_consumer_key %keyurle%.: "Debe definir %keyurls% una clava del API Pocket %keyurle%." | 412 | entry_unstarred: 'Artículo retirado de los favoritos' |
209 | Your server admin needs to define an API Key for Pocket.: "El administrador de vuestro servidor debe definir una clave API Pocket." | 413 | entry_deleted: 'Artículo suprimido' |
210 | Connect to Pocket and import data: "Conectese a Pocket para importar los datos" | 414 | tag: |
211 | Please select your wallabag export and click on the below button to upload and import it.: "Seleccione el fichero de su exportación de wallabag v1 y puelse en el botón para subirla y importarla." | 415 | notice: |
212 | File: "Fichero" | 416 | tag_added: 'Etiqueta añadida' |
213 | Upload file: "Importar el fichero" | 417 | import: |
214 | Import contents: "Importar los contenidos" | 418 | notice: |
215 | Import: "Importar" | 419 | # failed: 'Import failed, please try again.' |
216 | Import > Wallabag v1: "Importar > Wallabag v1" | 420 | # failed_on_file: 'Error while processing import. Please verify your import file.' |
217 | Import > Wallabag v2: "Importar > Wallabag v2" | 421 | # summary: 'Import summary: %imported% imported, %skipped% already saved.' |
218 | 422 | developer: | |
219 | # Quickstart | 423 | notice: |
220 | Quickstart: Comienzo rápido | 424 | # client_created: 'New client created.' |
221 | Welcome to wallabag!: "Bienvenido a wallabag !" | 425 | # client_deleted: 'Client deleted' |
222 | We'll accompany you to visit wallabag and show you some features which can interess you.: "Le acompañaremos a su visita de wallabag y le mostraremos algunas características que le pueden interesar." | ||
223 | Follow us!: "¡Siganos!" | ||
224 | Configure the application: "Configure la aplicación" | ||
225 | Change language and design: "Cambie el idoma y el diseño de la aplicación" | ||
226 | Enable RSS feeds: "Activar los feeds RSS" | ||
227 | First steps: "Prieros pasos" | ||
228 | Save your first article: "Guarde su primer artículo" | ||
229 | And classify it!: "¡Y clasifiquelo!" | ||
230 | Migrate from an existing service: "Migrar de un servicio existente" | ||
231 | You're using an other service? We'll help you to retrieve your data on wallabag.: "¿Está usando otro servicio? Le ayudaremos a migrar sus datos a wallabag." | ||
232 | Migrate from Pocket: "Migrar desde Pocket" | ||
233 | Migrate from wallabag v1: "Migrar desde wallabag v1" | ||
234 | Full documentation: "Documentación completa" | ||
235 | Convert your articles into ePUB or PDF: "Convierta sus artículos a ePub o a PDF" | ||
236 | See how you can look for an article by using search engine and filters: "Aprenda a utilizar el buscador y los filtros para encontrar el artículo que le interese" | ||
237 | And so many other articles!: "¡Y muchos más artículos!" | ||
238 | Support: "Soporte" | ||
239 | If you need some help, we are here for you.: "Sí necesita ayuda, estamos disponibles para usted." | ||
240 | On GitHub: "En GitHub" | ||
241 | By email: "Por email" | ||
242 | On Gitter: "On Gitter" | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml index e0ef3102..6be7d22e 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml | |||
@@ -1,129 +1,425 @@ | |||
1 | #Login | 1 | security: |
2 | Keep me logged in: 'مرا به خاطر بسپار' | 2 | login: |
3 | Forgot your password?: ' رمزتان را گم کردهاید؟' | 3 | # page_title: 'Welcome to wallabag!' |
4 | Login: 'ورود' | 4 | keep_logged_in: 'مرا به خاطر بسپار' |
5 | Back to login: 'بازگشت به صفحهٔ ورود' | 5 | forgot_password: ' رمزتان را گم کردهاید؟' |
6 | Send: 'بفرست' | 6 | submit: 'ورود' |
7 | "Enter your email address below and we'll send you password reset instructions.": "نشانی ایمیل خود را بنویسید تا راهنمای تغییر رمز را برایتان بفرستیم." | 7 | # register: 'Register' |
8 | username: 'نام کاربری' | ||
9 | password: 'رمز' | ||
10 | # cancel: 'Cancel' | ||
11 | resetting: | ||
12 | description: "نشانی ایمیل خود را بنویسید تا راهنمای تغییر رمز را برایتان بفرستیم." | ||
13 | register: | ||
14 | # page_title: 'Create an account' | ||
15 | # go_to_account: 'Go to your account' | ||
8 | 16 | ||
9 | # Menu | 17 | menu: |
10 | unread: 'خواندهنشده' | 18 | left: |
11 | starred: 'برگزیده' | 19 | unread: 'خواندهنشده' |
12 | archive: 'بایگانی' | 20 | starred: 'برگزیده' |
13 | all: 'همه' | 21 | archive: 'بایگانی' |
14 | tags: 'برچسبها' | 22 | all_articles: 'همه' |
15 | config: 'پیکربندی' | 23 | config: 'پیکربندی' |
16 | howto: 'خودآموز' | 24 | tags: 'برچسبها' |
17 | logout: 'خروج' | 25 | # internal_settings: 'Internal Settings' |
18 | Filtered: 'فیلترشده' | 26 | # import: 'Import' |
19 | About: 'درباره' | 27 | howto: 'خودآموز' |
28 | # developer: 'Developer' | ||
29 | logout: 'خروج' | ||
30 | about: 'درباره' | ||
31 | search: 'جستجو' | ||
32 | # save_link: 'Save a link' | ||
33 | back_to_unread: 'بازگشت به خواندهنشدهها' | ||
34 | top: | ||
35 | add_new_entry: 'افزودن مقالهٔ تازه' | ||
36 | search: 'جستجو' | ||
37 | filter_entries: 'فیلترکردن مقالهها' | ||
38 | # export: 'Export' | ||
39 | search_form: | ||
40 | input_label: 'جستجوی خود را اینجا بنویسید:' | ||
20 | 41 | ||
21 | # Header | 42 | footer: |
22 | Back to unread articles: 'بازگشت به خواندهنشدهها' | 43 | wallabag: |
23 | Add a new entry: 'افزودن مقالهٔ تازه' | 44 | # elsewhere: 'Take wallabag with you' |
24 | Search: 'جستجو' | 45 | # social: 'Social' |
25 | Filter entries: 'فیلترکردن مقالهها' | 46 | # powered_by: 'powered by' |
26 | Enter your search here: 'جستجوی خود را اینجا بنویسید:' | 47 | about: 'درباره' |
27 | Save new entry: 'ذخیرهٔ مقالهٔ تازه' | ||
28 | 48 | ||
29 | # Config screen | 49 | config: |
30 | Settings: 'تنظیمات' | 50 | page_title: 'پیکربندی' |
31 | User information: 'اطلاعات کاربر' | 51 | tab_menu: |
32 | Password: 'رمز' | 52 | settings: 'تنظیمات' |
33 | RSS: 'آر-اس-اس' | 53 | rss: 'آر-اس-اس' |
34 | Add a user: 'افزودن کاربر' | 54 | user_info: 'اطلاعات کاربر' |
35 | Theme: 'پوسته' | 55 | password: 'رمز' |
36 | Items per page: 'تعداد مقاله در هر صفحه' | 56 | # rules: 'Tagging rules' |
37 | Language: 'زبان' | 57 | new_user: 'افزودن کاربر' |
38 | Save: 'ذخیره' | 58 | form: |
39 | RSS token: 'کد آر-اس-اس' | 59 | save: 'ذخیره' |
40 | Name: 'نام' | 60 | form_settings: |
41 | Email: 'نشانی ایمیل' | 61 | theme_label: 'پوسته' |
42 | No token: 'بدون کد' | 62 | items_per_page_label: 'تعداد مقاله در هر صفحه' |
43 | Reset your token: 'بازنشانی کد' | 63 | language_label: 'زبان' |
44 | Create your token: 'کد خود را بسازید' | 64 | reading_speed: |
45 | Rss limit: 'محدودیت آر-اس-اس' | 65 | # label: 'Reading speed' |
46 | RSS links: 'پیوند آر-اس-اس' | 66 | # help_message: 'You can use online tools to estimate your reading speed:' |
47 | 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'با خوراک آر-اس-اس که wallabag در اختیارتان میگذارد، میتوانید مقالههای ذخیرهشده را در نرمافزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.' | 67 | # 100_word: 'I read ~100 words per minute' |
48 | Old password: 'رمز قدیمی' | 68 | # 200_word: 'I read ~200 words per minute' |
49 | New password: 'رمز تازه' | 69 | # 300_word: 'I read ~300 words per minute' |
50 | Repeat new password: 'رمز تازه را دوباره بنویسید' | 70 | # 400_word: 'I read ~400 words per minute' |
51 | Username: 'نام کاربری' | 71 | form_rss: |
72 | description: 'با خوراک آر-اس-اس که wallabag در اختیارتان میگذارد، میتوانید مقالههای ذخیرهشده را در نرمافزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.' | ||
73 | token_label: 'کد آر-اس-اس' | ||
74 | no_token: 'بدون کد' | ||
75 | token_create: 'کد خود را بسازید' | ||
76 | token_reset: 'بازنشانی کد' | ||
77 | rss_links: 'پیوند آر-اس-اس' | ||
78 | rss_link: | ||
79 | unread: 'خواندهنشده' | ||
80 | starred: 'برگزیده' | ||
81 | archive: 'بایگانی' | ||
82 | rss_limit: 'محدودیت آر-اس-اس' | ||
83 | form_user: | ||
84 | # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion" | ||
85 | name_label: 'نام' | ||
86 | email_label: 'نشانی ایمیل' | ||
87 | # twoFactorAuthentication_label: 'Two factor authentication' | ||
88 | form_password: | ||
89 | old_password_label: 'رمز قدیمی' | ||
90 | new_password_label: 'رمز تازه' | ||
91 | repeat_new_password_label: 'رمز تازه را دوباره بنویسید' | ||
92 | form_rules: | ||
93 | # if_label: 'if' | ||
94 | # then_tag_as_label: 'then tag as' | ||
95 | # delete_rule_label: 'delete' | ||
96 | # rule_label: 'Rule' | ||
97 | # tags_label: 'Tags' | ||
98 | # faq: | ||
99 | # title: 'FAQ' | ||
100 | # tagging_rules_definition_title: 'What does « tagging rules » mean?' | ||
101 | # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.' | ||
102 | # how_to_use_them_title: 'How do I use them?' | ||
103 | # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' | ||
104 | # variables_available_title: 'Which variables and operators can I use to write rules?' | ||
105 | # variables_available_description: 'The following variables and operators can be used to create tagging rules:' | ||
106 | # meaning: 'Meaning' | ||
107 | # variable_description: | ||
108 | # label: 'Variable' | ||
109 | # title: 'Title of the entry' | ||
110 | # url: 'URL of the entry' | ||
111 | # isArchived: 'Whether the entry is archived or not' | ||
112 | # isStarred: 'Whether the entry is starred or not' | ||
113 | # content: "The entry's content" | ||
114 | # language: "The entry's language" | ||
115 | # mimetype: "The entry's mime-type" | ||
116 | # readingTime: "The estimated entry's reading time, in minutes" | ||
117 | # domainName: 'The domain name of the entry' | ||
118 | # operator_description: | ||
119 | # label: 'Operator' | ||
120 | # less_than: 'Less than...' | ||
121 | # strictly_less_than: 'Strictly less than...' | ||
122 | # greater_than: 'Greater than...' | ||
123 | # strictly_greater_than: 'Strictly greater than...' | ||
124 | # equal_to: 'Equal to...' | ||
125 | # not_equal_to: 'Not equal to...' | ||
126 | # or: 'One rule OR another' | ||
127 | # and: 'One rule AND another' | ||
128 | # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'نام کاربری' | ||
131 | password_label: 'رمز' | ||
132 | repeat_new_password_label: 'رمز تازه را دوباره بنویسید' | ||
133 | plain_password_label: '????' | ||
134 | email_label: 'نشانی ایمیل' | ||
52 | 135 | ||
53 | # Entries | 136 | entry: |
54 | 'estimated reading time': 'زمان تخمینی برای خواندن' | 137 | page_titles: |
55 | original: اصلی | 138 | # unread: 'Unread entries' |
56 | Toggle mark as read: 'خواندهشده/خواندهنشده' | 139 | # starred: 'Starred entries' |
57 | Toggle favorite: 'برگزیده/نابرگزیده' | 140 | # archived: 'Archived entries' |
58 | Delete: 'پاک کردن' | 141 | # filtered: 'Filtered entries' |
142 | list: | ||
143 | # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' | ||
144 | reading_time: 'زمان تخمینی برای خواندن' | ||
145 | reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min' | ||
146 | reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | ||
148 | toogle_as_read: 'خواندهشده/خواندهنشده' | ||
149 | toogle_as_star: 'برگزیده/نابرگزیده' | ||
150 | delete: 'پاک کردن' | ||
151 | # export_title: 'Export' | ||
152 | filters: | ||
153 | title: 'فیلتر' | ||
154 | status_label: 'وضعیت' | ||
155 | archived_label: 'بایگانیشده' | ||
156 | starred_label: 'برگزیده' | ||
157 | preview_picture_label: 'دارای عکس پیشنمایش' | ||
158 | preview_picture_help: 'پیشنمایش عکس' | ||
159 | language_label: 'زبان' | ||
160 | reading_time: | ||
161 | label: 'زمان خواندن به دقیقه' | ||
162 | from: 'از' | ||
163 | to: 'تا' | ||
164 | domain_label: 'نام دامنه' | ||
165 | created_at: | ||
166 | label: 'زمان ساخت' | ||
167 | from: 'از' | ||
168 | to: 'تا' | ||
169 | action: | ||
170 | clear: 'از نو' | ||
171 | filter: 'فیلتر' | ||
172 | view: | ||
173 | left_menu: | ||
174 | # back_to_top: 'Back to top' | ||
175 | back_to_homepage: 'بازگشت' | ||
176 | set_as_read: 'خواندهشده' | ||
177 | # set_as_unread: 'Mark as unread' | ||
178 | set_as_favorite: 'برگزیده' | ||
179 | view_original_article: 'مقالهٔ اصلی' | ||
180 | # re_fetch_content: 'Re-fetch content' | ||
181 | delete: 'پاک کردن' | ||
182 | add_a_tag: 'افزودن برچسب' | ||
183 | share_content: 'همرسانی' | ||
184 | share_email_label: 'نشانی ایمیل' | ||
185 | download: 'بارگیری' | ||
186 | # print: 'Print' | ||
187 | problem: | ||
188 | label: 'مشکلات؟' | ||
189 | description: 'آیا مقاله نادرست نشان داده شده؟' | ||
190 | edit_title: 'ویرایش عنوان' | ||
191 | original_article: 'original' | ||
192 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | ||
193 | new: | ||
194 | page_title: 'ذخیرهٔ مقالهٔ تازه' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | # url_label: Url | ||
198 | edit: | ||
199 | # page_title: 'Edit an entry' | ||
200 | # title_label: 'Title' | ||
201 | # url_label: 'Url' | ||
202 | # is_public_label: 'Public' | ||
203 | save_label: 'ذخیره' | ||
59 | 204 | ||
60 | # Filters | 205 | about: |
61 | Filters: 'فیلتر' | 206 | page_title: 'درباره' |
62 | Status: 'وضعیت' | 207 | top_menu: |
63 | Archived: 'بایگانیشده' | 208 | who_behind_wallabag: 'سازندگان wallabag' |
64 | Starred: 'برگزیده' | 209 | getting_help: 'گرفتن کمک' |
65 | Preview picture: 'پیشنمایش عکس' | 210 | helping: 'کمککردن به wallabag' |
66 | Has a preview picture: 'دارای عکس پیشنمایش' | 211 | # contributors: 'Contributors' |
67 | Reading time in minutes: 'زمان خواندن به دقیقه' | 212 | # third_party: 'Third-party libraries' |
68 | from: 'از' | 213 | who_behind_wallabag: |
69 | to: 'تا' | 214 | developped_by: 'ساختهٔ' |
70 | website.com: 'website.com' | 215 | website: 'وبگاه' |
71 | Domain name: 'نام دامنه' | 216 | many_contributors: 'و بسیاری دیگر از مشارکتکنندگان ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">روی Github</a>' |
72 | Creation date: 'زمان ساخت' | 217 | project_website: 'وبگاه پروژه' |
73 | dd/mm/yyyy: 'dd.mm.yyyy' | 218 | license: 'پروانه' |
74 | Clear: 'از نو' | 219 | version: 'نسخه' |
75 | Filter: 'فیلتر' | 220 | getting_help: |
221 | documentation: 'راهنما' | ||
222 | bug_reports: 'گزارش اشکالها' | ||
223 | support: '<a href="https://support.wallabag.org">در وبگاه پشتیبانی</a> یا <a href="https://github.com/wallabag/wallabag/issues">روی GitHub</a>' | ||
224 | helping: | ||
225 | description: 'wallabag رایگان، آزاد، و متنباز است. شما میتوانید به ما کمک کنید:' | ||
226 | by_contributing: 'با مشارکت در پروژه:' | ||
227 | by_contributing_2: 'فهرست نیازمندیهای ما در این صفحه است:' | ||
228 | by_paypal: 'از راه Paypal' | ||
229 | contributors: | ||
230 | # description: 'Thank you to contributors on wallabag web application' | ||
231 | third_party: | ||
232 | # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' | ||
233 | # package: 'Package' | ||
234 | license: 'پروانه' | ||
76 | 235 | ||
77 | # About | 236 | howto: |
78 | Who is behind wallabag: "سازندگان wallabag" | 237 | page_title: 'خودآموز' |
79 | Getting help: "گرفتن کمک" | 238 | # page_description: 'There are several ways to save an article:' |
80 | Helping wallabag: "کمککردن به wallabag" | 239 | top_menu: |
81 | Developed by: "ساختهٔ" | 240 | browser_addons: 'افزونه برای مرورگرها' |
82 | website: "وبگاه" | 241 | mobile_apps: 'برنامههای موبایل' |
83 | And many others contributors ♥: "و بسیاری دیگر از مشارکتکنندگان ♥" | 242 | bookmarklet: 'ابزار علامتگذاری صفحهها' |
84 | on GitHub: "روی GitHub" | 243 | form: |
85 | Project website: "وبگاه پروژه" | 244 | description: 'به کمک این فرم' |
86 | License: "پروانه" | 245 | browser_addons: |
87 | Version: "نسخه" | 246 | firefox: 'افزونهٔ فایرفاکس' |
88 | Documentation: "راهنما" | 247 | chrome: 'افزونهٔ کروم' |
89 | Bug reports: "گزارش اشکالها" | 248 | mobile_apps: |
90 | On our support website: "در وبگاه پشتیبانی" | 249 | android: |
91 | or: "یا" | 250 | via_f_droid: 'از راه F-Droid' |
92 | "wallabag is free and opensource. You can help us:": "wallabag رایگان، آزاد، و متنباز است. شما میتوانید به ما کمک کنید:" | 251 | via_google_play: 'از راه Google Play' |
93 | "by contributing to the project:": "با مشارکت در پروژه:" | 252 | ios: 'از راه iTunes Store' |
94 | an issue lists all our needs: "فهرست نیازمندیهای ما در این صفحه است:" | 253 | windows: 'از راه Microsoft Store' |
95 | via Paypal: "از راه PayPal" | 254 | bookmarklet: |
255 | description: 'این پیوند را به نوار بوکمارک مرورگرتان بکشید:' | ||
96 | 256 | ||
97 | # Howto | 257 | quickstart: |
98 | Form: فرم | 258 | # page_title: 'Quickstart' |
99 | Thanks to this form: "به کمک این فرم" | 259 | # intro: |
100 | Browser addons: "افزونه برای مرورگرها" | 260 | # title: 'Welcome to wallabag!' |
101 | Mobile apps: "برنامههای موبایل" | 261 | # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." |
102 | Bookmarklet: "ابزار علامتگذاری صفحهها" | 262 | # paragraph_2: 'Follow us!' |
103 | Standard Firefox Add-On: "افزونهٔ فایرفاکس" | 263 | # configure: |
104 | Chrome Extension: "افزونهٔ کروم" | 264 | # title: 'Configure the application' |
105 | download the application: "برنامه را باربگیرید" | 265 | # language: 'Change language and design' |
106 | "Drag & drop this link to your bookmarks bar:": "این پیوند را به نوار بوکمارک مرورگرتان بکشید:" | 266 | # rss: 'Enable RSS feeds' |
267 | # tagging_rules: 'Write rules to automatically tag your articles' | ||
268 | # admin: | ||
269 | # title: 'Administration' | ||
270 | # description: 'As an administrator, you have privileges on wallabag. You can:' | ||
271 | # new_user: 'Create a new user' | ||
272 | # analytics: 'Configure analytics' | ||
273 | # sharing: 'Enable some parameters about article sharing' | ||
274 | # export: 'Configure export' | ||
275 | # import: 'Configure import' | ||
276 | # first_steps: | ||
277 | # title: 'First steps' | ||
278 | # new_article: 'Save your first article' | ||
279 | # unread_articles: 'And classify it!' | ||
280 | # migrate: | ||
281 | # title: 'Migrate from an existing service' | ||
282 | # description: "Are you using another service? We'll help you to retrieve your data on wallabag." | ||
283 | # pocket: 'Migrate from Pocket' | ||
284 | # wallabag_v1: 'Migrate from wallabag v1' | ||
285 | # wallabag_v2: 'Migrate from wallabag v2' | ||
286 | # developer: | ||
287 | # title: 'Developers' | ||
288 | # create_application: 'Create your third application' | ||
289 | # docs: | ||
290 | # title: 'Full documentation' | ||
291 | # annotate: 'Annotate your article' | ||
292 | # export: 'Convert your articles into ePUB or PDF' | ||
293 | # search_filters: 'See how you can look for an article by using search engine and filters' | ||
294 | # fetching_errors: 'What can I do if an article encounters errors during fetching?' | ||
295 | # all_docs: 'And so many other articles!' | ||
296 | # support: | ||
297 | # title: 'Support' | ||
298 | # description: 'If you need some help, we are here for you.' | ||
299 | # github: 'On GitHub' | ||
300 | # email: 'By email' | ||
301 | # gitter: 'On Gitter' | ||
107 | 302 | ||
108 | # Flash messages | 303 | tag: |
109 | Information updated: "اطلاعات بهروز شد" | 304 | page_title: 'برچسبها' |
110 | "Config saved. Some parameters will be considered after disconnection.": "پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال میشود." | 305 | list: |
111 | RSS information updated: "اطلاعات آر-اس-اس بهروز شد" | 306 | # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' |
112 | Password updated: "رمز بهروز شد" | ||
113 | Entry starred: "مقاله برگزیده شد" | ||
114 | Entry unstarred: "مقاله نابرگزیده شد" | ||
115 | Entry archived: "مقاله بایگانی شد" | ||
116 | Entry unarchived: "مقاله از بایگانی درآمد" | ||
117 | Entry deleted: "مقاله پاک شد" | ||
118 | 307 | ||
119 | # Entry | 308 | import: |
120 | Mark as read: 'خواندهشده' | 309 | # page_title: 'Import' |
121 | Favorite: 'برگزیده' | 310 | # page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.' |
122 | back: 'بازگشت' | 311 | # action: |
123 | original article: 'مقالهٔ اصلی' | 312 | # import_contents: 'Import contents' |
124 | Add a tag: 'افزودن برچسب' | 313 | # form: |
125 | Share: 'همرسانی' | 314 | # mark_as_read_title: 'Mark all as read?' |
126 | Download: 'بارگیری' | 315 | # mark_as_read_label: 'Mark all imported entries as read' |
127 | Does this article appear wrong?: "آیا مقاله نادرست نشان داده شده؟" | 316 | # file_label: 'File' |
128 | Problems?: 'مشکلات؟' | 317 | # save_label: 'Upload file' |
129 | Edit title: "ویرایش عنوان" | 318 | # pocket: |
319 | # page_title: 'Import > Pocket' | ||
320 | # description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag." | ||
321 | # config_missing: | ||
322 | # description: "Pocket import isn't configured." | ||
323 | # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' | ||
324 | # user_message: 'Your server admin needs to define an API Key for Pocket.' | ||
325 | # authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.' | ||
326 | # connect_to_pocket: 'Connect to Pocket and import data' | ||
327 | # wallabag_v1: | ||
328 | # page_title: 'Import > Wallabag v1' | ||
329 | # description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.' | ||
330 | # how_to: 'Please select your wallabag export and click on the below button to upload and import it.' | ||
331 | # wallabag_v2: | ||
332 | # page_title: 'Import > Wallabag v2' | ||
333 | # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' | ||
334 | |||
335 | developer: | ||
336 | # page_title: 'Developer' | ||
337 | # welcome_message: 'Welcome to the wallabag API' | ||
338 | # documentation: 'Documentation' | ||
339 | # how_to_first_app: 'How to create my first application' | ||
340 | # full_documentation: 'View full API documentation' | ||
341 | # list_methods: 'List API methods' | ||
342 | # clients: | ||
343 | # title: 'Clients' | ||
344 | # create_new: 'Create a new client' | ||
345 | # existing_clients: | ||
346 | # title: 'Existing clients' | ||
347 | # field_id: 'Client ID' | ||
348 | # field_secret: 'Client secret' | ||
349 | # field_uris: 'Redirect URIs' | ||
350 | # field_grant_types: 'Grant type allowed' | ||
351 | # no_client: 'No client yet.' | ||
352 | # remove: | ||
353 | # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !' | ||
354 | # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag." | ||
355 | # action: 'Remove this client' | ||
356 | # client: | ||
357 | # page_title: 'Developer > New client' | ||
358 | # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' | ||
359 | # form: | ||
360 | # redirect_uris_label: 'Redirect URIs' | ||
361 | # save_label: 'Create a new client' | ||
362 | # action_back: 'بازگشت' | ||
363 | # client_parameter: | ||
364 | # page_title: 'Developer > Client parameters' | ||
365 | # page_description: 'Here are your client parameters.' | ||
366 | # field_id: 'Client ID' | ||
367 | # field_secret: 'Client secret' | ||
368 | # back: 'بازگشت' | ||
369 | # read_howto: 'Read the howto "Create my first application"' | ||
370 | # howto: | ||
371 | # page_title: 'Developer > How to create my first application' | ||
372 | # description: | ||
373 | # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.' | ||
374 | # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.' | ||
375 | # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.' | ||
376 | # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):' | ||
377 | # paragraph_5: 'The API will return a response like this:' | ||
378 | # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:' | ||
379 | # paragraph_7: 'This call will return all the entries for your user.' | ||
380 | # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' | ||
381 | # back: 'بازگشت' | ||
382 | |||
383 | validator: | ||
384 | password_must_match: 'رمزها باید یکی باشند' | ||
385 | password_too_short: 'رمز شما باید ۸ حرف یا بیشتر باشد' | ||
386 | # password_wrong_value: 'Wrong value for your current password' | ||
387 | # item_per_page_too_high: 'This will certainly kill the app' | ||
388 | # rss_limit_too_hight: 'This will certainly kill the app' | ||
389 | |||
390 | flashes: | ||
391 | config: | ||
392 | notice: | ||
393 | config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال میشود.' | ||
394 | password_updated: 'رمز بهروز شد' | ||
395 | # password_not_updated_demo: "In demonstration mode, you can't change password for this user." | ||
396 | user_updated: 'اطلاعات بهروز شد' | ||
397 | rss_updated: 'اطلاعات آر-اس-اس بهروز شد' | ||
398 | # tagging_rules_updated: 'Tagging rules updated' | ||
399 | # tagging_rules_deleted: 'Tagging rule deleted' | ||
400 | # user_added: 'User "%username%" added' | ||
401 | # rss_token_updated: 'RSS token updated' | ||
402 | entry: | ||
403 | notice: | ||
404 | # entry_already_saved: 'Entry already saved on %date%' | ||
405 | # entry_saved: 'Entry saved' | ||
406 | # entry_updated: 'Entry updated' | ||
407 | # entry_reloaded: 'Entry reloaded' | ||
408 | # entry_reload_failed: 'Failed to reload entry' | ||
409 | entry_archived: 'مقاله بایگانی شد' | ||
410 | entry_unarchived: 'مقاله از بایگانی درآمد' | ||
411 | entry_starred: 'مقاله برگزیده شد' | ||
412 | entry_unstarred: 'مقاله نابرگزیده شد' | ||
413 | entry_deleted: 'مقاله پاک شد' | ||
414 | tag: | ||
415 | notice: | ||
416 | # tag_added: 'Tag added' | ||
417 | import: | ||
418 | notice: | ||
419 | # failed: 'Import failed, please try again.' | ||
420 | # failed_on_file: 'Error while processing import. Please verify your import file.' | ||
421 | # summary: 'Import summary: %imported% imported, %skipped% already saved.' | ||
422 | developer: | ||
423 | notice: | ||
424 | # client_created: 'New client created.' | ||
425 | # client_deleted: 'Client deleted' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml index 7c6ad07e..6ff1a3b1 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml | |||
@@ -1,284 +1,425 @@ | |||
1 | #Login | 1 | security: |
2 | Keep me logged in: 'Rester connecté' | 2 | login: |
3 | Forgot your password?: 'Mot de passe oublié ?' | 3 | page_title: 'Bienvenue sur wallabag !' |
4 | Login: 'Se connecter' | 4 | keep_logged_in: 'Rester connecté' |
5 | Back to login: 'Revenir au formulaire de connexion' | 5 | forgot_password: 'Mot de passe oublié ?' |
6 | Send: 'Envoyer' | 6 | submit: 'Se connecter' |
7 | "Enter your email address below and we'll send you password reset instructions.": "Saisissez votre adresse e-mail ci-dessous, nous vous enverrons les instructions pour réinitialiser votre mot de passe." | 7 | register: 'Créer un compte' |
8 | Register: 'Créer un compte' | 8 | username: "Nom d'utilisateur" |
9 | password: 'Mot de passe' | ||
10 | cancel: 'Annuler' | ||
11 | resetting: | ||
12 | description: "Saisissez votre adresse e-mail ci-dessous, nous vous enverrons les instructions pour réinitialiser votre mot de passe." | ||
13 | register: | ||
14 | page_title: 'Se créer un compte' | ||
15 | go_to_account: 'Aller sur votre compte' | ||
9 | 16 | ||
10 | # Menu | 17 | menu: |
11 | unread: 'Non lus' | 18 | left: |
12 | starred: 'Favoris' | 19 | unread: 'Non lus' |
13 | archive: 'Lus' | 20 | starred: 'Favoris' |
14 | all: 'Tous les articles' | 21 | archive: 'Lus' |
15 | tags: 'Tags' | 22 | all_articles: 'Tous les articles' |
16 | config: 'Configuration' | 23 | config: 'Configuration' |
17 | internal settings: 'Configuration interne' | 24 | tags: 'Tags' |
18 | import: 'Importer' | 25 | internal_settings: 'Configuration interne' |
19 | howto: 'Aide' | 26 | import: 'Importer' |
20 | logout: 'Déconnexion' | 27 | howto: 'Aide' |
21 | Filtered: 'Articles filtrés' | 28 | developer: 'Développeur' |
22 | About: 'À propos' | 29 | logout: 'Déconnexion' |
30 | about: 'À propos' | ||
31 | search: 'Recherche' | ||
32 | save_link: 'Sauvegarder un nouvel article' | ||
33 | back_to_unread: 'Retour aux articles non lus' | ||
34 | top: | ||
35 | add_new_entry: 'Sauvegarder un nouvel article' | ||
36 | search: 'Rechercher' | ||
37 | filter_entries: 'Filtrer les articles' | ||
38 | export: 'Exporter' | ||
39 | search_form: | ||
40 | input_label: 'Saisissez votre terme de recherche' | ||
23 | 41 | ||
24 | # Header | 42 | footer: |
25 | Back to unread articles: 'Retour aux articles non lus' | 43 | wallabag: |
26 | Add a new entry: 'Sauvegarder un nouvel article' | 44 | elsewhere: 'Emportez wallabag avec vous' |
27 | Search: 'Rechercher' | 45 | social: 'Social' |
28 | Filter entries: 'Filtrer les articles' | 46 | powered_by: 'propulsé par' |
29 | Enter your search here: 'Saisissez votre terme de recherche' | 47 | about: 'À propos' |
30 | Save new entry: 'Sauvegarder un nouvel article' | 48 | page_title: 'Configuration' |
31 | Export: Exporter | ||
32 | 49 | ||
33 | # Config screen | 50 | config: |
34 | Settings: 'Paramètres' | 51 | tab_menu: |
35 | User information: 'Mon compte' | 52 | settings: 'Paramètres' |
36 | Password: 'Mot de passe' | 53 | rss: 'RSS' |
37 | RSS: 'RSS' | 54 | user_info: 'Mon compte' |
38 | Add a user: 'Créer un compte' | 55 | password: 'Mot de passe' |
39 | Theme: 'Thème' | 56 | rules: 'Règles de tag automatiques' |
40 | Items per page: "Nombre d'articles par page" | 57 | new_user: 'Créer un compte' |
41 | Reading speed: "Vitesse de lecture" | 58 | form: |
42 | Language: 'Langue' | 59 | save: 'Enregistrer' |
43 | Save: 'Enregistrer' | 60 | form_settings: |
44 | RSS token: 'Jeton RSS' | 61 | theme_label: 'Thème' |
45 | RSS token updated: 'Jeton RSS mis à jour' | 62 | items_per_page_label: "Nombre d'articles par page" |
46 | Name: 'Nom' | 63 | language_label: 'Langue' |
47 | Email: 'Adresse e-mail' | 64 | reading_speed: |
48 | No token: 'Aucun jeton généré' | 65 | label: 'Vitesse de lecture' |
49 | Reset your token: 'Réinitialisez votre jeton' | 66 | help_message: 'Vous pouvez utiliser un outil en ligne pour estimer votre vitesse de lecture :' |
50 | Create your token: 'Créez votre jeton' | 67 | 100_word: 'Je lis environ 100 mots par minute' |
51 | Rss limit: "Nombre d'articles dans un flux RSS" | 68 | 200_word: 'Je lis environ 200 mots par minute' |
52 | RSS links: 'URL de vos flux RSS' | 69 | 300_word: 'Je lis environ 300 mots par minute' |
53 | "RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.": "Les flux RSS fournis par wallabag vous permettent de lire vos articles sauvegardés dans votre lecteur de flux préféré. Pour pouvoir les utiliser, vous devez d'abord créer un jeton." | 70 | 400_word: 'Je lis environ 400 mots par minute' |
54 | Old password: 'Mot de passe actuel' | 71 | form_rss: |
55 | New password: 'Nouveau mot de passe' | 72 | description: "Les flux RSS fournis par wallabag vous permettent de lire vos articles sauvegardés dans votre lecteur de flux préféré. Pour pouvoir les utiliser, vous devez d'abord créer un jeton." |
56 | Repeat new password: 'Confirmez votre nouveau mot de passe' | 73 | token_label: 'Jeton RSS' |
57 | Username: "Nom d'utilisateur" | 74 | no_token: 'Aucun jeton généré' |
58 | Two factor authentication: "Double authentification" | 75 | token_create: 'Créez votre jeton' |
59 | "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion": "Activer l'authentification double-facteur veut dire que vous allez recevoir un code par email à chaque nouvelle connexion non approuvée." | 76 | token_reset: 'Réinitialisez votre jeton' |
60 | "I read ~100 words per minute": "Je lis environ 100 mots par minute" | 77 | rss_links: 'URL de vos flux RSS' |
61 | "I read ~200 words per minute": "Je lis environ 200 mots par minute" | 78 | rss_link: |
62 | "I read ~300 words per minute": "Je lis environ 300 mots par minute" | 79 | unread: 'non lus' |
63 | "I read ~400 words per minute": "Je lis environ 400 mots par minute" | 80 | starred: 'favoris' |
64 | "You can use online tools to estimate your reading speed": "Vous pouvez utiliser un outil en ligne pour estimer votre vitesse de lecture" | 81 | archive: 'lus' |
65 | "like this one": "comme celui-ci" | 82 | rss_limit: "Nombre d'articles dans le flux" |
83 | form_user: | ||
84 | two_factor_description: "Activer l'authentification double-facteur veut dire que vous allez recevoir un code par email à chaque nouvelle connexion non approuvée." | ||
85 | name_label: 'Nom' | ||
86 | email_label: 'Adresse e-mail' | ||
87 | twoFactorAuthentication_label: 'Double authentification' | ||
88 | form_password: | ||
89 | old_password_label: 'Mot de passe actuel' | ||
90 | new_password_label: 'Nouveau mot de passe' | ||
91 | repeat_new_password_label: 'Confirmez votre nouveau mot de passe' | ||
92 | form_rules: | ||
93 | if_label: 'si' | ||
94 | then_tag_as_label: 'alors attribuer les tags' | ||
95 | delete_rule_label: 'supprimer' | ||
96 | rule_label: 'Règle' | ||
97 | tags_label: 'Tags' | ||
98 | faq: | ||
99 | title: 'FAQ' | ||
100 | tagging_rules_definition_title: 'Que signifient les règles de tag automatiques ?' | ||
101 | tagging_rules_definition_description: "Ce sont des règles utilisées par wallabag pour classer automatiquement vos nouveaux articles.<br />À chaque fois qu'un nouvel article est ajouté, toutes les règles de tag automatiques seront utilisées afin d'ajouter les tags que vous avez configurés, vous épargnant ainsi l'effort de classifier vos articles manuellement." | ||
102 | how_to_use_them_title: 'Comment les utiliser ?' | ||
103 | how_to_use_them_description: 'Imaginons que voulez attribuer aux nouveaux articles le tag « <i>lecture courte</i> » lorsque le temps de lecture est inférieur à 3 minutes.<br />Dans ce cas, vous devriez mettre « readingTime <= 3 » dans le champ <i>Règle</i> et « <i>lecture courte</i> » dans le champ <i>Tag</i>.<br />Plusieurs tags peuvent être ajoutés simultanément en les séparant par des virgules : « <i>lecture courte, à lire</i> »<br />Des règles complexes peuvent être créées en utilisant des opérateurs prédéfinis: si « <i>readingTime >= 5 AND domainName = \"github.com\"</i> » alors attribuer les tags « <i>lecture longue, github </i> »' | ||
104 | variables_available_title: 'Quelles variables et opérateurs puis-je utiliser pour écrire des règles ?' | ||
105 | variables_available_description: 'Les variables et opérateurs suivants peuvent être utilisés pour écrire des règles de tag automatiques :' | ||
106 | meaning: 'Signification' | ||
107 | variable_description: | ||
108 | label: 'Variable' | ||
109 | title: "Titre de l'article" | ||
110 | url: "URL de l'article" | ||
111 | isArchived: "Si l'article est archivé ou non" | ||
112 | isStarred: "Si l'article est favori ou non" | ||
113 | content: "Le contenu de l'article" | ||
114 | language: "La langue de l'article" | ||
115 | mimetype: "Le type MIME de l'article" | ||
116 | readingTime: "Le temps de lecture estimé de l'article, en minutes" | ||
117 | domainName: "Le nom de domaine de l'article" | ||
118 | operator_description: | ||
119 | label: 'Opérateur' | ||
120 | less_than: 'Moins que…...' | ||
121 | strictly_less_than: 'Strictement moins que…' | ||
122 | greater_than: 'Plus que…' | ||
123 | strictly_greater_than: 'Strictement plus que…' | ||
124 | equal_to: 'Égal à…' | ||
125 | not_equal_to: 'Différent de…' | ||
126 | or: "Une règle OU l'autre" | ||
127 | and: "Une règle ET l'autre" | ||
128 | matches: 'Teste si un <i>sujet</i> correspond à une <i>recherche</i> (non sensible à la casse).<br />Exemple : <code>title matches "football"</code>' | ||
129 | form_new_user: | ||
130 | username_label: "Nom d'utilisateur" | ||
131 | password_label: 'Mot de passe' | ||
132 | repeat_new_password_label: 'Confirmez votre nouveau mot de passe' | ||
133 | plain_password_label: 'Mot de passe en clair' | ||
134 | email_label: 'Adresse e-mail' | ||
66 | 135 | ||
67 | # Tagging rules | 136 | entry: |
68 | Tagging rules: "Règles de tag automatiques" | 137 | page_titles: |
69 | What does « tagging rules » mean?: "Que signifient les règles de tag automatiques ?" | 138 | unread: 'Articles non lus' |
70 | "They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.": "Ce sont des règles utilisées par wallabag pour classer automatiquement vos nouveaux articles.<br />À chaque fois qu'un nouvel article est ajouté, toutes les règles de tag automatiques seront utilisées afin d'ajouter les tags que vous avez configurés, vous épargnant ainsi l'effort de classifier vos articles manuellement." | 139 | starred: 'Articles favoris' |
71 | How do I use them?: "Comment les utiliser ?" | 140 | archived: 'Articles lus' |
72 | "Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = \"github.com\"</i> » then tag as « <i>long reading, github </i> »": "Imaginons que voulez attribuer aux nouveaux articles le tag « <i>lecture courte</i> » lorsque le temps de lecture est inférieur à 3 minutes.<br />Dans ce cas, vous devriez mettre « readingTime <= 3 » dans le champ <i>Règle</i> et « <i>lecture courte</i> » dans le champ <i>Tag</i>.<br />Plusieurs tags peuvent être ajoutés simultanément en les séparant par des virgules : « <i>lecture courte, à lire</i> »<br />Des règles complexes peuvent être créées en utilisant des opérateurs prédéfinis: si « <i>readingTime >= 5 AND domainName = \"github.com\"</i> » alors attribuer les tags « <i>lecteur longue, github </i> »" | 141 | filtered: 'Articles filtrés' |
73 | Which variables and operators can I use to write rules?: "Quelles variables et opérateurs puis-je utiliser pour écrire des règles ?" | 142 | list: |
74 | The following variables and operators can be used to create tagging rules:: "Les variables et opérateurs suivants peuvent être utilisés pour écrire des règles de tag automatiques :" | 143 | number_on_the_page: "{0} Il n'y a pas d'articles.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles." |
75 | Variable: "Variable" | 144 | reading_time: 'durée de lecture' |
76 | Meaning: "Signification" | 145 | reading_time_minutes: 'durée de lecture: %readingTime% min' |
77 | Operator: "Opérateur" | 146 | reading_time_less_one_minute: 'durée de lecture: <small class="inferieur"><</small> 1 min' |
78 | Title of the entry: "Titre de l'article" | 147 | original_article: 'original' |
79 | Less than…: "Moins que…" | 148 | toogle_as_read: 'Marquer comme lu/non lu' |
80 | URL of the entry: "URL de l'article" | 149 | toogle_as_star: 'Marquer comme favori' |
81 | Strictly less than…: "Strictement moins que…" | 150 | delete: 'Supprimer' |
82 | Whether the entry is archived or not: "Si l'article est archivé ou non" | 151 | export_title: 'Exporter' |
83 | Greater than…: "Plus que…" | 152 | filters: |
84 | Whether the entry is starred or not: "Si l'article est favori ou non" | 153 | title: 'Filtres' |
85 | Strictly greater than…: "Strictement plus que…" | 154 | status_label: 'Status' |
86 | The entry's content: "Le contenu de l'article" | 155 | archived_label: 'Lus' |
87 | Equal to…: "Égal à…" | 156 | starred_label: 'Favoris' |
88 | The entry's language: "La langue de l'article" | 157 | preview_picture_label: 'A une photo' |
89 | Not equal to…: "Différent de…" | 158 | preview_picture_help: 'Photo' |
90 | The entry's mime-type: "Le Type MIME de l'article" | 159 | language_label: 'Langue' |
91 | One rule or another: "Une règle ou l'autre" | 160 | reading_time: |
92 | The estimated entry's reading time, in minutes: "Le temps de lecture estimé de l'article, en minutes" | 161 | label: 'Durée de lecture en minutes' |
93 | One rule and another: "Une règle et l'autre" | 162 | from: 'de' |
94 | The domain name of the entry: "Le nom de domaine de l'article" | 163 | to: 'à' |
95 | "Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches \"football\"</code>": "Teste si un <i>sujet</i> correspond à une <i>recherche</i> (non sensible à la casse).<br />Exemple : <code>title matches \"football\"</code>" | 164 | domain_label: 'Nom de domaine' |
96 | Rule: "Règle" | 165 | created_at: |
97 | FAQ: "FAQ" | 166 | label: 'Date de création' |
167 | from: 'de' | ||
168 | to: 'à' | ||
169 | action: | ||
170 | clear: 'Effacer' | ||
171 | filter: 'Filtrer' | ||
172 | view: | ||
173 | left_menu: | ||
174 | back_to_top: 'Revenir en haut' | ||
175 | back_to_homepage: 'Retour' | ||
176 | set_as_read: 'Marquer comme lu' | ||
177 | set_as_unread: 'Marquer comme non lu' | ||
178 | set_as_favorite: 'Mettre en favori' | ||
179 | view_original_article: 'Article original' | ||
180 | re_fetch_content: 'Recharger le contenu' | ||
181 | delete: 'Supprimer' | ||
182 | add_a_tag: 'Ajouter un tag' | ||
183 | share_content: 'Partager' | ||
184 | share_email_label: 'Email' | ||
185 | download: 'Télécharger' | ||
186 | print: 'Imprimer' | ||
187 | problem: | ||
188 | label: 'Un problème ?' | ||
189 | description: "Est-ce que cet article s'affiche mal ?" | ||
190 | edit_title: 'Modifier le titre' | ||
191 | original_article: 'original' | ||
192 | annotations_on_the_entry: '{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations' | ||
193 | new: | ||
194 | page_title: 'Sauvegarder un nouvel article' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | page_title: 'Éditer un article' | ||
200 | title_label: 'Titre' | ||
201 | url_label: 'Url' | ||
202 | is_public_label: 'Public' | ||
203 | save_label: 'Enregistrer' | ||
98 | 204 | ||
99 | # Entries | 205 | about: |
100 | "estimated reading time: %readingTime% min": "durée de lecture : %readingTime% min" | 206 | page_title: 'À propos' |
101 | "estimated reading time: %inferior% 1 min": "durée de lecture : %inferior% 1 min" | 207 | top_menu: |
102 | original: "original" | 208 | who_behind_wallabag: "L'équipe derrière wallabag" |
103 | Toggle mark as read: 'Marquer comme lu/non lu' | 209 | getting_help: "Besoin d'aide" |
104 | Toggle favorite: 'Marquer comme favori' | 210 | helping: 'Aider wallabag' |
105 | Delete: 'Supprimer' | 211 | contributors: 'Contributeurs' |
106 | "{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.": "{0} Il n'y a pas d'articles.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles." | 212 | third_party: 'Librairies tierces' |
107 | http://website: "http://siteweb" | 213 | who_behind_wallabag: |
108 | "{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations": "{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations" | 214 | developped_by: 'Développé par' |
215 | website: 'Site web' | ||
216 | many_contributors: 'Et plein de contributeurs ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>' | ||
217 | project_website: 'Site web du projet' | ||
218 | license: 'Licence' | ||
219 | version: 'Version' | ||
220 | getting_help: | ||
221 | documentation: 'Documentation' | ||
222 | bug_reports: 'Rapport de bugs' | ||
223 | support: '<a href="https://support.wallabag.org">Sur notre site de support</a> ou <a href="https://github.com/wallabag/wallabag/issues">sur GitHub</a>' | ||
224 | helping: | ||
225 | description: 'wallabag est gratuit et opensource. Vous pouvez nous aider :' | ||
226 | by_contributing: 'en contribuant au projet :' | ||
227 | by_contributing_2: 'un ticket recense tous nos besoins' | ||
228 | by_paypal: 'via Paypal' | ||
229 | contributors: | ||
230 | description: "Merci aux contributeurs de l'application web de wallabag" | ||
231 | third_party: | ||
232 | description: 'Voici la liste des dépendances utilisées dans wallabag (et leur license) :' | ||
233 | package: 'Dépendance' | ||
234 | license: 'Licence' | ||
109 | 235 | ||
110 | # Edit entry | 236 | howto: |
111 | Edit an entry: "Éditer un article" | 237 | page_title: 'Aide' |
112 | Title: "Titre" | 238 | page_description: "Il y a plusieurs façon d'enregistrer un article :" |
113 | Is public: "Public" | 239 | top_menu: |
240 | browser_addons: 'Extensions de navigateur' | ||
241 | mobile_apps: 'Applications smartphone' | ||
242 | bookmarklet: 'Bookmarklet' | ||
243 | form: | ||
244 | description: 'Grâce à ce formulaire' | ||
245 | browser_addons: | ||
246 | firefox: 'Extension Firefox' | ||
247 | chrome: 'Extension Chrome' | ||
248 | mobile_apps: | ||
249 | android: | ||
250 | via_f_droid: 'via F-Droid' | ||
251 | via_google_play: 'via Google Play' | ||
252 | ios: 'sur iTunes Store' | ||
253 | windows: 'sur Microsoft Store' | ||
254 | bookmarklet: | ||
255 | description: 'Glissez et déposez ce lien dans votre barre de favoris :' | ||
114 | 256 | ||
115 | # tag | 257 | quickstart: |
116 | Tags: Tags | 258 | page_title: 'Pour bien débuter' |
117 | "{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.": "{0} Il n'y a pas de tag.|{1} Il y a un tag.|]1,Inf[ Il y a %count% tags." | 259 | intro: |
260 | title: 'Bienvenue sur wallabag !' | ||
261 | paragraph_1: "Nous allons vous accompagner pour vous faire faire le tour de la maison et vous présenter quelques fonctionnalités qui pourraient vous intéresser pour vous approprier cet outil." | ||
262 | paragraph_2: 'Suivez-nous !' | ||
263 | configure: | ||
264 | title: "Configurez l'application" | ||
265 | language: "Changez la langue et le design de l'application" | ||
266 | rss: 'Activez les flux RSS' | ||
267 | tagging_rules: 'Écrivez des règles pour classer automatiquement vos articles' | ||
268 | admin: | ||
269 | title: 'Administration' | ||
270 | description: "En tant qu'adminitrasteur sur wallabag, vous avez des privilèges qui vous permette de :" | ||
271 | new_user: 'Créer un nouvel utilisateur' | ||
272 | analytics: 'Configurer les statistiques' | ||
273 | sharing: 'Activer des paramètres de partages' | ||
274 | export: 'Configurer les export' | ||
275 | import: 'Configurer les import' | ||
276 | first_steps: | ||
277 | title: 'Premiers pas' | ||
278 | new_article: 'Ajoutez votre premier article' | ||
279 | unread_articles: 'Et rangez-le !' | ||
280 | migrate: | ||
281 | title: 'Migrer depuis un service existant' | ||
282 | description: "Vous êtes un ancien utilisateur d'un service existant ? Nous allons vous aider à récupérer vos données sur wallabag." | ||
283 | pocket: 'Migrer depuis Pocket' | ||
284 | wallabag_v1: 'Migrer depuis wallabag v1' | ||
285 | wallabag_v2: 'Migrer depuis wallabag v2' | ||
286 | developer: | ||
287 | title: 'Pour les développeurs' | ||
288 | create_application: 'Créer votre application tierce' | ||
289 | docs: | ||
290 | title: 'Documentation complète' | ||
291 | annotate: 'Annotater votre article' | ||
292 | export: 'Convertissez vos articles en ePub ou en PDF' | ||
293 | search_filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse" | ||
294 | fetching_errors: "Que faire si mon article n'est pas correctement récupéré ?" | ||
295 | all_docs: "Et encore plein d'autres choses !" | ||
296 | support: | ||
297 | title: 'Support' | ||
298 | description: 'Parce que vous avez peut-être besoin de nous poser une question, nous sommes disponibles pour vous.' | ||
299 | github: 'Sur GitHub' | ||
300 | email: 'Par e-mail' | ||
301 | gitter: 'Sur Gitter' | ||
118 | 302 | ||
119 | # Filters | 303 | tag: |
120 | Filters: 'Filtres' | 304 | page_title: 'Tags' |
121 | Status: 'Statut' | 305 | list: |
122 | Archived: 'Lu' | 306 | number_on_the_page: "{0} Il n'y a pas de tag.|{1} Il y a un tag.|]1,Inf[ Il y a %count% tags." |
123 | Starred: 'Favori' | ||
124 | Preview picture: 'Photo' | ||
125 | Has a preview picture: 'A une photo' | ||
126 | Reading time in minutes: 'Durée de lecture en minutes' | ||
127 | from: 'de' | ||
128 | to: 'à' | ||
129 | website.com: 'website.com' | ||
130 | Domain name: 'Nom de domaine' | ||
131 | Creation date: 'Date de création' | ||
132 | dd/mm/yyyy: 'jj/mm/aaaa' | ||
133 | Clear: 'Effacer' | ||
134 | Filter: 'Filtrer' | ||
135 | website.com: "siteweb.com" | ||
136 | 307 | ||
137 | # About | 308 | import: |
138 | About: "À propos" | 309 | page_title: 'Importer' |
139 | Who is behind wallabag: "L'équipe derrière wallabag" | 310 | page_description: "Bienvenue dans l'outil de migration de wallabag. Choisissez ci-dessous le service depuis lequel vous souhaitez migrer." |
140 | Getting help: "Besoin d'aide" | 311 | action: |
141 | Helping wallabag: "Aider wallabag" | 312 | import_contents: 'Importer les contenus' |
142 | Developed by: "Développé par" | 313 | form: |
143 | website: "Site web" | 314 | mark_as_read_title: 'Marquer tout comme lu ?' |
144 | And many others contributors ♥: "Et plein de contributeurs ♥" | 315 | mark_as_read_label: 'Marquer tous les contenus importés comme lus' |
145 | on GitHub: "sur GitHub" | 316 | file_label: 'Fichier' |
146 | Project website: "Site web du projet" | 317 | save_label: 'Importer le fichier' |
147 | License: "Licence" | 318 | pocket: |
148 | Version: "Version" | 319 | page_title: 'Importer > Pocket' |
149 | Documentation: "Documentation" | 320 | description: "Cet outil va importer toutes vos données de Pocket. Pocket ne nous autorise pas à récupérer le contenu depuis leur service, donc wallabag doit reparcourir chaque article pour récupérer son contenu." |
150 | Bug reports: "Rapport de bugs" | 321 | config_missing: |
151 | On our support website: "Sur notre site de support" | 322 | description: "L'import à partir de Pocket n'est pas configuré." |
152 | or: "ou" | 323 | admin_message: "Vous devez définir %keyurls%une clé pour l'API Pocket%keyurle%." |
153 | "wallabag is free and opensource. You can help us:": "wallabag est gratuit et opensource. Vous pouvez nous aider :" | 324 | user_message: "L'administrateur de votre serveur doit définir une clé pour l'API Pocket." |
154 | "by contributing to the project:": "en contribuant au projet :" | 325 | authorize_message: "Vous pouvez importer vos données depuis votre compte Pocket. Vous n'avez qu'à cliquer sur le bouton ci-dessous et à autoriser wallabag à se connecter à getpocket.com." |
155 | an issue lists all our needs: "un ticket recense tous nos besoins" | 326 | connect_to_pocket: 'Se connecter à Pocket et importer les données' |
156 | via Paypal: "via Paypal" | 327 | wallabag_v1: |
157 | Take wallabag with you: "Emportez wallabag avec vous" | 328 | page_title: 'Importer > Wallabag v1' |
158 | Social: "Social" | 329 | description: 'Cet outil va importer toutes vos données de wallabag v1. Sur votre page de configuration de wallabag v1, cliquez sur "Export JSON" dans la section "Exporter vos données de wallabag". Vous allez récupérer un fichier "wallabag-export-1-xxxx-xx-xx.json".' |
159 | powered by: "propulsé par" | 330 | how_to: "Choisissez le fichier de votre export wallabag v1 et cliquez sur le bouton ci-dessous pour l'importer." |
160 | Contributors: "Contributeurs" | 331 | wallabag_v2: |
161 | Thank you to contributors on wallabag web application: "Merci aux contributeurs de l'application web de wallabag" | 332 | page_title: 'Importer > Wallabag v2' |
162 | Third-party libraries: Librairies tierces | 333 | description: "Cet outil va importer tous vos articles d'une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur \"JSON\". Vous allez récupérer un fichier \"All articles.json\"" |
163 | "Here are the list of third-party libraries used in wallabag (with their licenses):": "Voici la liste des dépendances utilisées dans wallabag (et leur license) :" | ||
164 | Package: Dépendance | ||
165 | License: Licence | ||
166 | 334 | ||
167 | # Howto | 335 | developer: |
168 | Form: "Formulaire" | 336 | page_title: 'Développeur' |
169 | Thanks to this form: "Grâce à ce formulaire" | 337 | welcome_message: "Bienvenue sur l'API de wallabag" |
170 | Browser addons: "Extensions de navigateur" | 338 | documentation: 'Documentation' |
171 | Mobile apps: "Applications smartphone" | 339 | how_to_first_app: 'Comment créer votre première application' |
172 | Bookmarklet: "Bookmarklet" | 340 | full_documentation: "Voir la documentation complète de l'API" |
173 | Standard Firefox Add-On: "Extension Firefox" | 341 | list_methods: "Lister toutes les méthodes de l'API" |
174 | Chrome Extension: "Extension Chrome" | 342 | clients: |
175 | download the application: "téléchargez l'application" | 343 | title: 'Clients' |
176 | "Drag & drop this link to your bookmarks bar:": "Glissez et déposez ce lien dans votre barre de favoris :" | 344 | create_new: 'Créer une nouveau client' |
345 | existing_clients: | ||
346 | title: 'Les clients existants' | ||
347 | field_id: 'ID Client' | ||
348 | field_secret: 'Clé secrète' | ||
349 | field_uris: 'URLs de redirection' | ||
350 | field_grant_types: 'Type de privilège accordé' | ||
351 | no_client: 'Aucun client pour le moment' | ||
352 | remove: | ||
353 | warn_message_1: 'Vous avez la possibilité de supprimer un client. Cette action est IRREVERSIBLE !' | ||
354 | warn_message_2: "Si vous supprimez un client, toutes les applications qui l'utilisaient ne fonctionneront plus avec votre compte wallabag." | ||
355 | action: 'Supprimer ce client' | ||
356 | client: | ||
357 | page_title: 'Développeur > Nouveau client' | ||
358 | page_description: "Vous allez créer un nouveau client. Merci de remplir l'url de redirection vers votre application." | ||
359 | form: | ||
360 | redirect_uris_label: 'URLs de redirection' | ||
361 | save_label: 'Créer un nouveau client' | ||
362 | action_back: 'Retour' | ||
363 | client_parameter: | ||
364 | page_title: 'Développeur > Les paramètres de votre client' | ||
365 | page_description: 'Voilà les paramètres de votre client' | ||
366 | field_id: 'ID Client' | ||
367 | field_secret: 'Clé secrète' | ||
368 | back: 'Retour' | ||
369 | read_howto: 'Lire "comment créer ma première application"' | ||
370 | howto: | ||
371 | page_title: 'Développeur > Comment créer votre première application' | ||
372 | description: | ||
373 | paragraph_1: "Les commandes suivantes utilisent la <a href=\"https://github.com/jkbrzt/httpie\">librarie HTTPie</a>. Assurez-vous qu'elle soit installée avant de l'utiliser." | ||
374 | paragraph_2: "Vous avez besoin d'un token pour échanger entre votre application et l'API de wallabag." | ||
375 | paragraph_3: 'Pour créer un token, vous devez <a href="%link%">créer un nouveau client</a>.' | ||
376 | paragraph_4: 'Maintenant créez votre token (remplacer client_id, client_secret, username et password avec les bonnes valeurs):' | ||
377 | paragraph_5: "L'API vous retournera une réponse comme ça :" | ||
378 | paragraph_6: "L'access_token doit être utilisé pour faire un appel à l'API. Par exemple :" | ||
379 | paragraph_7: "Cet appel va retourner tous les articles de l'utilisateur." | ||
380 | paragraph_8: "Si vous voulez toutes les méthodes de l'API, jetez un oeil <a href=\"%link%\">à la documentation de l'API</a>." | ||
381 | back: 'Retour' | ||
177 | 382 | ||
178 | # Flash messages | 383 | validator: |
179 | Information updated: "Vos informations personnelles ont bien été mises à jour" | 384 | password_must_match: 'Les deux mots de passe doivent être les mêmes' |
180 | "Config saved. Some parameters will be considered after disconnection.": "Les paramètres ont bien été mis à jour. Certains seront pris en compte après déconnexion." | 385 | password_too_short: 'Le mot de passe doit contenir au moins 8 caractères' |
181 | RSS information updated: "La configuration des flux RSS a bien été mise à jour" | 386 | password_wrong_value: 'Votre mot de passe actuel est faux' |
182 | Password updated: "Votre mot de passe a bien été mis à jour" | 387 | item_per_page_too_high: "Ca ne va pas plaire à l'application" |
183 | Entry starred: "Article ajouté dans les favoris" | 388 | rss_limit_too_hight: "Ca ne va pas plaire à l'application" |
184 | Entry unstarred: "Article retiré des favoris" | ||
185 | Entry archived: "Article marqué comme lu" | ||
186 | Entry unarchived: "Article marqué comme non lu" | ||
187 | Entry deleted: "Article supprimé" | ||
188 | Tagging rule deleted: "Règle supprimée" | ||
189 | Tagging rules updated: "Règles mises à jour" | ||
190 | User "%username%" added: 'Utilisateur "%username%" ajouté' | ||
191 | In demonstration mode, you can't change password for this user.: 'En démo, vous ne pouvez pas changer le mot de passe de cet utilisateur.' | ||
192 | 389 | ||
193 | # Entry | 390 | flashes: |
194 | Mark as read: 'Marquer comme lu' | 391 | config: |
195 | Favorite: 'Mettre en favori' | 392 | notice: |
196 | back: 'Retour' | 393 | config_saved: 'Les paramètres ont bien été mis à jour. Certains seront pris en compte après déconnexion.' |
197 | original article: 'Article original' | 394 | password_updated: 'Votre mot de passe a bien été mis à jour' |
198 | Add a tag: 'Ajouter un tag' | 395 | password_not_updated_demo: "En démo, vous ne pouvez pas changer le mot de passe de cet utilisateur." |
199 | Share: 'Partager' | 396 | user_updated: 'Vos informations personnelles ont bien été mises à jour' |
200 | Download: 'Télécharger' | 397 | rss_updated: 'La configuration des flux RSS a bien été mise à jour' |
201 | Does this article appear wrong?: "Est-ce que cet article s'affiche mal ?" | 398 | tagging_rules_updated: 'Règles mises à jour' |
202 | Problems?: 'Un problème ?' | 399 | tagging_rules_deleted: 'Règle supprimée' |
203 | Edit title: "Modifier le titre" | 400 | user_added: 'Utilisateur "%username%" ajouté' |
204 | Re-fetch content: "Recharger le contenu" | 401 | rss_token_updated: 'Jeton RSS mis à jour' |
205 | Tag added: "Tag ajouté" | 402 | entry: |
206 | 403 | notice: | |
207 | # Import | 404 | entry_already_saved: 'Article déjà sauvergardé le %date%' |
208 | Welcome to wallabag importer. Please select your previous service that you want to migrate.: "Bienvenue dans l'outil de migration de wallabag. Choisissez ci-dessous le service depuis lequel vous souhaitez migrer." | 405 | entry_saved: 'Article enregistré' |
209 | "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.": "Cet outil va importer toutes vos données de Pocket. Pocket ne nous autorise pas à récupérer le contenu depuis leur service, donc wallabag doit reparcourir chaque article pour récupérer son contenu." | 406 | entry_updated: 'Article mis à jour' |
210 | "This importer will import all your wallabag v1 articles. On your config page, click on \"JSON export\" in the \"Export your wallabag data\" section. You will have a \"wallabag-export-1-xxxx-xx-xx.json\" file.": "Cet outil va importer toutes vos données de wallabag v1. Sur votre page de configuration de wallabag v1, cliquez sur \"Export JSON\" dans la section \"Exporter vos données de wallabag\". Vous allez récupérer un fichier \"wallabag-export-1-xxxx-xx-xx.json\"." | 407 | entry_reloaded: 'Article rechargé' |
211 | "This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on \"JSON\". You will have a \"All articles.json\" file.": "Cet outil va importer tous vos articles d'une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur \"JSON\". Vous allez récupérer un fichier \"All articles.json\"" | 408 | entry_reload_failed: "Le rechargement de l'article a échoué" |
212 | "You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.": "Vous pouvez importer vos données depuis votre compte Pocket. Vous n'avez qu'à cliquer sur le bouton ci-dessous et à autoriser wallabag à se connecter à getpocket.com." | 409 | entry_archived: 'Article marqué comme lu' |
213 | Import > Pocket: "Import > Pocket" | 410 | entry_unarchived: 'Article marqué comme non lu' |
214 | Pocket import isn't configured.: "L'import à partir de Pocket n'est pas configuré." | 411 | entry_starred: 'Article ajouté dans les favoris' |
215 | You need to define %keyurls% a pocket_consumer_key %keyurle%.: "Vous devez définir %keyurls% une clé pour l'API Pocket %keyurle%." | 412 | entry_unstarred: 'Article retiré des favoris' |
216 | Your server admin needs to define an API Key for Pocket.: L'administrateur de votre serveur doit définir une clé pour l'API Pocket." | 413 | entry_deleted: 'Article supprimé' |
217 | Connect to Pocket and import data: "Se connecter à Pocket et importer les données" | 414 | tag: |
218 | Please select your wallabag export and click on the below button to upload and import it.: "Choisissez le fichier de votre export wallabag v1 et cliquez sur le bouton ci-dessous pour l'importer." | 415 | notice: |
219 | File: "Fichier" | 416 | tag_added: 'Tag ajouté' |
220 | Upload file: "Importer le fichier" | 417 | import: |
221 | Import contents: "Importer les contenus" | 418 | notice: |
222 | Import: "Importer" | 419 | failed: "L'import a échoué, veuillez ré-essayer" |
223 | Import > Wallabag v1: "Importer > Wallabag v1" | 420 | failed_on_file: "Erreur lors du traitement de l'import. Vérifier votre fichier." |
224 | Import > Wallabag v2: "Importer > Wallabag v2" | 421 | summary: "Rapport d'import: %imported% importés, %skipped% déjà présent." |
225 | Mark all as read ?: "Marquer tout comme lu ?" | 422 | developer: |
226 | Mark all imported entries as read: "Marquer tous les contenus importés comme lus" | 423 | notice: |
227 | 424 | client_created: 'Nouveau client créé' | |
228 | # Quickstart | 425 | client_deleted: 'Client supprimé' |
229 | Quickstart: Pour bien débuter | ||
230 | Welcome to wallabag!: "Bienvenue sur wallabag !" | ||
231 | We'll accompany you to visit wallabag and show you some features which can interess you.: "Nous allons vous accompagner pour vous faire faire le tour de la maison et vous présenter quelques fonctionnalités qui pourraient vous intéresser pour vous approprier cet outil." | ||
232 | Follow us!: "Suivez-nous !" | ||
233 | Configure the application: "Configurez l'application" | ||
234 | Change language and design: "Changez la langue et le design de l'application" | ||
235 | Enable RSS feeds: "Activez les flux RSS" | ||
236 | First steps: "Premiers pas" | ||
237 | Save your first article: "Ajoutez votre premier article" | ||
238 | And classify it!: "Et rangez-le !" | ||
239 | Migrate from an existing service: "Migrer depuis un service existant" | ||
240 | You're using an other service? We'll help you to retrieve your data on wallabag.: "Vous êtes un ancien utilisateur d'un service existant ? Nous allons vous aider à récupérer vos données sur wallabag." | ||
241 | Migrate from Pocket: "Migrer depuis Pocket" | ||
242 | Migrate from wallabag v1: "Migrer depuis wallabag v1" | ||
243 | Full documentation: "Documentation complète" | ||
244 | Convert your articles into ePUB or PDF: "Convertissez vos articles en ePub ou en PDF" | ||
245 | See how you can look for an article by using search engine and filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse" | ||
246 | And so many other articles!: "Et encore plein d'autres choses !" | ||
247 | Support: "Support" | ||
248 | If you need some help, we are here for you.: "Parce que vous avez peut-être besoin de nous poser une question, nous sommes disponibles pour vous." | ||
249 | On GitHub: "Sur GitHub" | ||
250 | By email: "Par email" | ||
251 | On Gitter: "Sur Gitter" | ||
252 | |||
253 | # developer | ||
254 | Developer: Développeur | ||
255 | Welcome to the wallabag API: "Bienvenue sur l'API de wallabag" | ||
256 | How to create my first application: "Comment créer votre première application" | ||
257 | View full API documentation: "Voir la documentation complète de l'API" | ||
258 | Clients: "Clients" | ||
259 | Create a new client: "Créer une nouveau client" | ||
260 | Existing clients: "Les clients existants" | ||
261 | Client ID: "ID Client" | ||
262 | Client secret: "Clé secrète" | ||
263 | Redirect URIs: "URLs de redirection" | ||
264 | Grant type allowed: "Type de privilège accordé" | ||
265 | You have the ability to remove this client. This action is IRREVERSIBLE !: "Vous avez la possibilité de supprimer un client. Cette action est IRREVERSIBLE !" | ||
266 | If you remove it, every app configured with that client won't be able to auth on your wallabag.: "Si vous supprimez un client, toutes les applications qui l'utilisaient ne fonctionneront plus avec votre compte wallabag." | ||
267 | Remove this client: "Supprimer ce client" | ||
268 | New client: "Nouveau client" | ||
269 | You are about to create a new client. Please fill the field below for the redirect URI of your application.: "Vous allez créer un nouveau client. Merci de remplir l'url de redirection vers votre application." | ||
270 | Back: "Retour" | ||
271 | Client parameters: "Les paramètres de votre client" | ||
272 | New client created.: "Nouveau client créé." | ||
273 | Here are your client parameters.: "Voilà les paramètres de votre client" | ||
274 | Read the howto "Create my first application": "Lire \"comment créer ma première application\"" | ||
275 | Client deleted: "Client supprimé" | ||
276 | No client yet.: "Aucun client pour le moment" | ||
277 | "The following commands make use of the <a href=\"https://github.com/jkbrzt/httpie\">HTTPie library</a>. Make sure it is installed on your system before using it.": "Les commandes suivantes utilisent la <a href=\"https://github.com/jkbrzt/httpie\">librarie HTTPie</a>. Assurez-vous qu'elle soit installée avant de l'utiliser." | ||
278 | You need a token to communicate between your 3rd application and wallabag API.: "Vous avez besoin d'un token pour échanger entre votre application et l'API de wallabag." | ||
279 | "To create this token, you need <a href=\"%link%\">to create a new client</a>.": "Pour créer un token, vous devez <a href=\"%link%\">créer un nouveau client</a>." | ||
280 | Now, create your token (replace client_id, client_secret, username and password with the good values):: "Maintenant créez votre token (remplacer client_id, client_secret, username et password avec les bonnes valeurs):" | ||
281 | The API will return a response like this:: "L'API vous retournera une réponse comme ça:" | ||
282 | The access_token is useful to do a call to the API endpoint. For example:: "L'access_token doit être utilisé pour faire un appel à l'API. Par exemple :" | ||
283 | This call will return all the entries for your user.: "Cet appel va retourner tous les articles de l'utilisateur." | ||
284 | "If you want to see all the API endpoints, you can have a look <a href=\"%link%\">to our API documentation</a>.": "Si vous voulez toutes les méthodes de l'API, jetez un oeil <a href=\"%link%\">à la documentation de l'API</a>." | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml new file mode 100644 index 00000000..bbd813e2 --- /dev/null +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml | |||
@@ -0,0 +1,425 @@ | |||
1 | security: | ||
2 | login: | ||
3 | page_title: 'Benvenguda sus wallabag !' | ||
4 | keep_logged_in: 'Demorar connectat' | ||
5 | forgot_password: 'Senhal doblidat ?' | ||
6 | submit: 'Se connectar' | ||
7 | register: 'Crear un compte' | ||
8 | username: "Nom d'utilizaire" | ||
9 | password: 'Senhal' | ||
10 | cancel: 'Anullar' | ||
11 | resetting: | ||
12 | description: "Picatz vòstra adreça de corrièl çai-jos, vos mandarem las instruccions per reïnicializar vòstre senhal." | ||
13 | register: | ||
14 | page_title: 'Se crear un compte' | ||
15 | go_to_account: 'Anar sus vòstre compte' | ||
16 | |||
17 | menu: | ||
18 | left: | ||
19 | unread: 'Pas legits' | ||
20 | starred: 'Favorits' | ||
21 | archive: 'Legits' | ||
22 | all_articles: 'Tots los articles' | ||
23 | config: 'Configuracion' | ||
24 | tags: 'Etiquetas' | ||
25 | internal_settings: 'Configuracion interna' | ||
26 | import: 'Importar' | ||
27 | howto: 'Ajuda' | ||
28 | developer: 'Desvolopador' | ||
29 | logout: 'Déconnexion' | ||
30 | about: 'A prepaus' | ||
31 | search: 'Cercar' | ||
32 | save_link: 'Enregistrar un novèl article' | ||
33 | back_to_unread: 'Tornar als articles pas legits' | ||
34 | top: | ||
35 | add_new_entry: 'Enregistrar un novèl article' | ||
36 | search: 'Cercar' | ||
37 | filter_entries: 'Filtrar los articles' | ||
38 | export: 'Exportar' | ||
39 | search_form: | ||
40 | input_label: 'Picatz vòstre mot-clau a cercar aquí' | ||
41 | |||
42 | footer: | ||
43 | wallabag: | ||
44 | elsewhere: 'Emportatz wallabag amb vosaultres' | ||
45 | social: 'Social' | ||
46 | powered_by: 'propulsat per' | ||
47 | about: 'A prepaus' | ||
48 | page_title: 'Configuracion' | ||
49 | |||
50 | config: | ||
51 | tab_menu: | ||
52 | settings: 'Paramètres' | ||
53 | rss: 'RSS' | ||
54 | user_info: 'Mon compte' | ||
55 | password: 'Senhal' | ||
56 | rules: "Règlas d'etiquetas automaticas" | ||
57 | new_user: 'Crear un compte' | ||
58 | form: | ||
59 | save: 'Enregistrar' | ||
60 | form_settings: | ||
61 | theme_label: 'Tèma' | ||
62 | items_per_page_label: "Nombre d'articles per pagina" | ||
63 | language_label: 'Lenga' | ||
64 | reading_speed: | ||
65 | label: 'Velocitat de lectura' | ||
66 | help_message: 'Podètz utilizar una aisina en linha per estimar vòstra velocitat de lectura :' | ||
67 | 100_word: "Legissi a l'entorn de 100 mots per minuta" | ||
68 | 200_word: "Legissi a l'entorn de 200 mots per minuta" | ||
69 | 300_word: "Legissi a l'entorn de 300 mots per minuta" | ||
70 | 400_word: "Legissi a l'entorn de 400 mots per minuta" | ||
71 | form_rss: | ||
72 | description: "Los fluxes RSS fornits per wallabag vos permeton de legir vòstres articles salvagardats dins vòstre lector de fluxes preferit. Per los poder emplegar, vos cal, d'en primièr crear un geton." | ||
73 | token_label: 'Geton RSS' | ||
74 | no_token: 'Aucun jeton généré' | ||
75 | token_create: 'Pas cap de geton generat' | ||
76 | token_reset: 'Reïnicializatz vòstre geton' | ||
77 | rss_links: 'URL de vòstres fluxes RSS' | ||
78 | rss_link: | ||
79 | unread: 'pas legits' | ||
80 | starred: 'favorits' | ||
81 | archive: 'legits' | ||
82 | rss_limit: "Nombre d'articles dins un flux RSS" | ||
83 | form_user: | ||
84 | two_factor_description: "Activar l'autentificacion doble-factor vòl dire que recebretz un còdi per corrièl per cada novèla connexion pas aprovada." | ||
85 | name_label: 'Nom' | ||
86 | email_label: 'Adreça de corrièl' | ||
87 | twoFactorAuthentication_label: 'Dobla autentificacion' | ||
88 | form_password: | ||
89 | old_password_label: 'Senhal actual' | ||
90 | new_password_label: 'Senhal novèl' | ||
91 | repeat_new_password_label: 'Confirmatz vòstre novèl senhal' | ||
92 | form_rules: | ||
93 | if_label: 'se' | ||
94 | then_tag_as_label: 'alara atribuir las etiquetas' | ||
95 | delete_rule_label: 'suprimir' | ||
96 | rule_label: 'Règla' | ||
97 | tags_label: 'Etiquetas' | ||
98 | faq: | ||
99 | title: 'FAQ' | ||
100 | tagging_rules_definition_title: "Qué significa las règlas d'etiquetas automaticas ?" | ||
101 | tagging_rules_definition_description: "Son de règlas utilizadas per wallabad per classar automaticament vòstres novèls articles.<br />Cada còp qu'un novèl article es apondut, totas las règlas d'etiquetas automaticas seràn utilizadas per ajustar d'etiquetas qu'avètz configuradas, en vos esparnhant l'esfòrç de classificar vòstres articles manualament." | ||
102 | how_to_use_them_title: 'Cossí las utilizar ?' | ||
103 | how_to_use_them_description: "Imaginem que volètz atribuir als novèls article l'etiqueta « <i>lectura corta</i> » quand lo temps per legir es inferior a 3 minutas.<br />Dins aquel cas, deuriatz metre « readingTime <= 3 » dins lo camp <i>Règla</i> e « <i>lectura corta</i> » dins lo camp <i>Etiqueta</i>.<br />Mai d'una etiquetas pòdon èsser apondudas simultanèament ne las separant amb de virgulas : « <i>lectura corta, per ligir</i> »<br />De règlas complèxas pòdon èsser creadas en emplegant d'operators predefinits : se « <i>readingTime >= 5 AND domainName = \"github.com\"</i> » alara atribuir las etiquetas « <i>lectura longa, github </i> »" | ||
104 | variables_available_title: 'Quinas variablas e operators pòdi utilizar per escriure de règlas ?' | ||
105 | variables_available_description: "Las variablas e operators seguents pòdon èsser utilizats per escriure de règlas d'etiquetas automaticas :" | ||
106 | meaning: 'Significacion' | ||
107 | variable_description: | ||
108 | label: 'Variabla' | ||
109 | title: "Títol de l'article" | ||
110 | url: "URL de l'article" | ||
111 | isArchived: "Se l'article es archivat o pas" | ||
112 | isStarred: "Se l'article es favorit o pas" | ||
113 | content: "Lo contengut de l'article" | ||
114 | language: "La lenga de l'article" | ||
115 | mimetype: "Lo tipe MIME de l'article" | ||
116 | readingTime: "Lo temps de lectura estimat de l'article, en minutas" | ||
117 | domainName: "Lo nom de domeni de l'article" | ||
118 | operator_description: | ||
119 | label: 'Operator' | ||
120 | less_than: 'Mens que…...' | ||
121 | strictly_less_than: 'Estrictament mens que…' | ||
122 | greater_than: 'Mai que…' | ||
123 | strictly_greater_than: 'Estrictament mai que…' | ||
124 | equal_to: 'Egal a…' | ||
125 | not_equal_to: 'Diferent de…' | ||
126 | or: "Una règla O l'autra" | ||
127 | and: "Una règla E l'autra" | ||
128 | matches: 'Teste se un <i>subjècte</i> correspond a una <i>recerca</i> (non sensibla a la cassa).<br />Exemple : <code>title matches \"football\"</code>' | ||
129 | form_new_user: | ||
130 | username_label: "Nom d'utilizaire" | ||
131 | password_label: 'Senhal' | ||
132 | repeat_new_password_label: 'Confirmatz vòstre novèl senhal' | ||
133 | plain_password_label: 'Senhal en clar' | ||
134 | email_label: 'Adreça de corrièl' | ||
135 | |||
136 | entry: | ||
137 | page_titles: | ||
138 | unread: 'Articles pas legits' | ||
139 | starred: 'Articles favorits' | ||
140 | archived: 'Articles legits' | ||
141 | filtered: 'Articles filtrats' | ||
142 | list: | ||
143 | number_on_the_page: "{0} I a pas cap d'article.|{1} I a un article.|]1,Inf[ I a %count% articles." | ||
144 | reading_time: 'durada de lectura' | ||
145 | reading_time_minutes: 'durada de lectura : %readingTime% min' | ||
146 | reading_time_less_one_minute: 'durada de lectura : <small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | ||
148 | toogle_as_read: 'Marcar coma legit/pas legit' | ||
149 | toogle_as_star: 'Marcar coma favorit' | ||
150 | delete: 'Suprimir' | ||
151 | export_title: 'Exportar' | ||
152 | filters: | ||
153 | title: 'Filtres' | ||
154 | status_label: 'Estatus' | ||
155 | archived_label: 'Legits' | ||
156 | starred_label: 'Favorits' | ||
157 | preview_picture_label: 'A una fotò' | ||
158 | preview_picture_help: 'Fotò' | ||
159 | language_label: 'Lenga' | ||
160 | reading_time: | ||
161 | label: 'Durada de lectura en minutas' | ||
162 | from: 'de' | ||
163 | to: 'per' | ||
164 | domain_label: 'Nom de domeni' | ||
165 | created_at: | ||
166 | label: 'Data de creacion' | ||
167 | from: 'de' | ||
168 | to: 'per' | ||
169 | action: | ||
170 | clear: 'Escafar' | ||
171 | filter: 'Filtrar' | ||
172 | view: | ||
173 | left_menu: | ||
174 | back_to_top: 'Tornar en naut' | ||
175 | back_to_homepage: 'Tornar' | ||
176 | set_as_read: 'Marcar coma legit' | ||
177 | set_as_unread: 'Marcar coma pas legit' | ||
178 | set_as_favorite: 'Metre en favori' | ||
179 | view_original_article: 'Article original' | ||
180 | re_fetch_content: 'Tornar cargar lo contengut' | ||
181 | delete: 'Suprimir' | ||
182 | add_a_tag: 'Ajustar una etiqueta' | ||
183 | share_content: 'Partatjar' | ||
184 | share_email_label: 'Corrièl' | ||
185 | download: 'Telecargar' | ||
186 | print: 'Imprimir' | ||
187 | problem: | ||
188 | label: 'Un problèma ?' | ||
189 | description: "Marca mal la presentacion d'aqueste article ?" | ||
190 | edit_title: 'Modificar lo títol' | ||
191 | original_article: 'original' | ||
192 | annotations_on_the_entry: "{0} Pas cap d'anotacion|{1} Una anotacion|]1,Inf[ %nbAnnotations% anotacions" | ||
193 | new: | ||
194 | page_title: 'Enregistrar un novèl article' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | page_title: 'Modificar un article' | ||
200 | title_label: 'Títol' | ||
201 | url_label: 'Url' | ||
202 | is_public_label: 'Public' | ||
203 | save_label: 'Enregistrar' | ||
204 | |||
205 | about: | ||
206 | page_title: 'A prepaus' | ||
207 | top_menu: | ||
208 | who_behind_wallabag: "L'equipa darrèr wallabag" | ||
209 | getting_help: "Besonh d'ajuda" | ||
210 | helping: 'Ajudar wallabag' | ||
211 | contributors: 'Contributors' | ||
212 | third_party: 'Bibliotècas tèrças' | ||
213 | who_behind_wallabag: | ||
214 | developped_by: 'Desvolopat per' | ||
215 | website: 'Site web' | ||
216 | many_contributors: 'E un fum de contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>' | ||
217 | project_website: 'Site web del projète' | ||
218 | license: 'Licéncia' | ||
219 | version: 'Version' | ||
220 | getting_help: | ||
221 | documentation: 'Documentacion' | ||
222 | bug_reports: 'Rapòrt de bugs' | ||
223 | support: "<a href=\"https://support.wallabag.org\">Sus nòstre site d'assisténcia</a> ou <a href=\"https://github.com/wallabag/wallabag/issues\">sur GitHub</a>" | ||
224 | helping: | ||
225 | description: 'wallabag es a gratuit e opensource. Nos podètz ajudar :' | ||
226 | by_contributing: 'en ajudant lo projècte :' | ||
227 | by_contributing_2: 'un bilhet recensa totes nòstres besonhs' | ||
228 | by_paypal: 'via Paypal' | ||
229 | contributors: | ||
230 | description: "Mercés als contributors de l'aplicacion web de wallabag" | ||
231 | third_party: | ||
232 | description: 'Aquí la lista de las dependéncias utilizadas dins wallabag (e lor licéncia) :' | ||
233 | package: 'Dependéncia' | ||
234 | license: 'Licéncia' | ||
235 | |||
236 | howto: | ||
237 | page_title: 'Ajuda' | ||
238 | page_description: "I a mai d'un biai d'enregistrar un article :" | ||
239 | top_menu: | ||
240 | browser_addons: 'Extensions de navigator' | ||
241 | mobile_apps: 'Aplicacions mobil' | ||
242 | bookmarklet: 'Bookmarklet' | ||
243 | form: | ||
244 | description: 'Gràcias a aqueste formulari' | ||
245 | browser_addons: | ||
246 | firefox: 'Extension Firefox' | ||
247 | chrome: 'Extension Chrome' | ||
248 | mobile_apps: | ||
249 | android: | ||
250 | via_f_droid: 'via F-Droid' | ||
251 | via_google_play: 'via Google Play' | ||
252 | ios: 'sus iTunes Store' | ||
253 | windows: 'sus Microsoft Store' | ||
254 | bookmarklet: | ||
255 | description: 'Lisatz-depausatz aqueste ligam dins vòstra barra de favorits :' | ||
256 | |||
257 | quickstart: | ||
258 | page_title: 'Per ben començar' | ||
259 | intro: | ||
260 | title: 'Benvenguda sus wallabag !' | ||
261 | paragraph_1: "Anem vos guidar per far lo torn de la proprietat e vos presentar unas fonccionalitats que vos poirián interessar per vos apropriar aquesta aisina." | ||
262 | paragraph_2: 'Seguètz-nos ' | ||
263 | configure: | ||
264 | title: "Configuratz l'aplicacio" | ||
265 | language: "Cambiatz la lenga e l'estil de l'aplicacion" | ||
266 | rss: 'Activatz los fluxes RSS' | ||
267 | tagging_rules: 'Escrivètz de règlas per classar automaticament vòstres articles' | ||
268 | admin: | ||
269 | title: 'Administracion' | ||
270 | description: "En qualitat d'adminitrastor sus wallabag, avètz de privilègis que vos permeton de :" | ||
271 | new_user: 'Crear un novèl utilizaire' | ||
272 | analytics: 'Configurar las estadisticas' | ||
273 | sharing: 'Activar de paramètres de partatge' | ||
274 | export: 'Configurar los expòrt' | ||
275 | import: 'Configurar los impòrt' | ||
276 | first_steps: | ||
277 | title: 'Primièrs passes' | ||
278 | new_article: 'Ajustatz vòstre primièr article' | ||
279 | unread_articles: 'E racaptatz-lo !' | ||
280 | migrate: | ||
281 | title: 'Migrar dempuèi un servici existent' | ||
282 | description: "Sètz un ancian utilizaire d'un servici existent ? Vos ajudarem a trapar vòstras donadas sus wallabag." | ||
283 | pocket: 'Migrar dempuèi Pocket' | ||
284 | wallabag_v1: 'Migrar dempuèi wallabag v1' | ||
285 | wallabag_v2: 'Migrar dempuèi wallabag v2' | ||
286 | developer: | ||
287 | title: 'Pels desvolopadors' | ||
288 | create_application: 'Crear vòstra aplicacion tèrça' | ||
289 | docs: | ||
290 | title: 'Documentacion complèta' | ||
291 | annotate: 'Anotatar vòstre article' | ||
292 | export: 'Convertissètz vòstres articles en ePub o en PDF' | ||
293 | search_filters: "Aprenètz a utilizar lo motor de recèrca e los filtres per retrobar l'article que vos interèssa" | ||
294 | fetching_errors: "Qué far se mon article es pas recuperat coma cal ?" | ||
295 | all_docs: "E encara plen de causas mai !" | ||
296 | support: | ||
297 | title: 'Assisténcia' | ||
298 | description: 'Perque avètz benlèu besonh de nos pausar una question, sèm disponibles per vosautres.' | ||
299 | github: 'Sus GitHub' | ||
300 | email: 'Per e-mail' | ||
301 | gitter: 'Sus Gitter' | ||
302 | |||
303 | tag: | ||
304 | page_title: 'Etiquetas' | ||
305 | list: | ||
306 | number_on_the_page: "{0} I a pas cap d'etiquetas.|{1} I a una etiqueta.|]1,Inf[ I a %count% etiquetas." | ||
307 | |||
308 | import: | ||
309 | page_title: 'Importar' | ||
310 | page_description: "Benvenguda sus l'aisina de migracion de wallabag. Causissètz çai-jos lo servici dempuèi lo qual volètz migrar." | ||
311 | action: | ||
312 | import_contents: 'Importar los contenguts' | ||
313 | form: | ||
314 | mark_as_read_title: 'Tot marcar coma legit ?' | ||
315 | mark_as_read_label: 'Marcar tot los contenguts importats coma legits' | ||
316 | file_label: 'Fichièr' | ||
317 | save_label: 'Importar lo fichièr' | ||
318 | pocket: | ||
319 | page_title: 'Importer > Pocket' | ||
320 | description: "Aquesta aisina importarà totas vòstras donadas de Pocket. Pocket nos permet pas de recuperar lo contengut dempuèi lor servidor, alara wallabag deu tornar fulhetar cada article per recuperar son contengut." | ||
321 | config_missing: | ||
322 | description: "L'importacion dempuèi Pocket es pas configurada." | ||
323 | admin_message: "Vos cal definir %keyurls% una clau per l'API Pocket %keyurle%." | ||
324 | user_message: "L'administrator de vòstre servidor deu definir una clau per l'API Pocket." | ||
325 | authorize_message: "Podètz importar vòstras donadas dempuèi vòstre compte Pocket. Vos cal pas que clicar sul boton çai-jos e autorizar wallabag a se connectar a getpocket.com." | ||
326 | connect_to_pocket: 'Se connectar a Pocket e importar las donadas' | ||
327 | wallabag_v1: | ||
328 | page_title: 'Importer > Wallabag v1' | ||
329 | description: 'Aquesta aisina importarà totas vòstras donadas de wallabag v1. Sus vòstre pagina de configuracion de wallabag v1, clicatz sus \"Export JSON\" dins la seccion \"Exportar vòstras donadas de wallabag\". Traparatz un fichièr \"wallabag-export-1-xxxx-xx-xx.json\".' | ||
330 | how_to: "Causissètz lo fichièr de vòstra exportacion wallabag v1 e clicatz sul boton çai-jos per l'importar." | ||
331 | wallabag_v2: | ||
332 | page_title: 'Importer > Wallabag v2' | ||
333 | description: "Aquesta aisina importarà totas vòstras donadas d'una instància mai de wallabag v2. Anatz dins totes vòstres articles, puèi, sus la barra laterala, clicatz sus \"JSON\". Traparatz un fichièr \"All articles.json\"" | ||
334 | |||
335 | developer: | ||
336 | page_title: 'Desvolopador' | ||
337 | welcome_message: "Benvenguda sus l'API de wallabag" | ||
338 | documentation: 'Documentacion' | ||
339 | how_to_first_app: 'Cossí crear vòstra primièra aplicacion' | ||
340 | full_documentation: "Veire la documentacion completa de l'API" | ||
341 | # list_methods: 'List API methods' | ||
342 | clients: | ||
343 | title: 'Clients' | ||
344 | create_new: 'Crear un novèl client' | ||
345 | existing_clients: | ||
346 | title: 'Los clients existents' | ||
347 | field_id: 'ID Client' | ||
348 | field_secret: 'Clé secreta' | ||
349 | field_uris: 'URLs de redireccion' | ||
350 | field_grant_types: 'Tipe de privilègi acordat' | ||
351 | no_client: 'Pas cap de client pel moment' | ||
352 | remove: | ||
353 | warn_message_1: 'Avètz la possibilitat de supriimr un client. Aquesta accion es IRREVERSIBLA !' | ||
354 | warn_message_2: "Se suprimissètz un client, totas las aplicacions que l'emplegan foncionaràn pas mai amb vòstre compte wallabag." | ||
355 | action: 'Suprimir aqueste client' | ||
356 | client: | ||
357 | page_title: 'Desvlopador > Novèl client' | ||
358 | page_description: "Anatz crear un novèl client. Mercés de cumplir l'url de redireccion cap a vòstra aplicacion." | ||
359 | form: | ||
360 | redirect_uris_label: 'URLs de redireccion' | ||
361 | save_label: 'Crear un novèl client' | ||
362 | action_back: 'Retorn' | ||
363 | client_parameter: | ||
364 | page_title: 'Desvolopador > Los paramètres de vòstre client' | ||
365 | page_description: 'Vaquí los paramètres de vòstre client' | ||
366 | field_id: 'ID Client' | ||
367 | field_secret: 'Clau secreta' | ||
368 | back: 'Retour' | ||
369 | read_howto: 'Legir \"cossí crear ma primièra aplicacion\"' | ||
370 | howto: | ||
371 | page_title: 'Desvolopador > Cossí crear ma primièra aplicacion' | ||
372 | description: | ||
373 | paragraph_1: "Las comandas seguentas utilizan la <a href=\"https://github.com/jkbrzt/httpie\">libraria HTTPie</a>. Asseguratz-vos que siasqueòu installadas abans de l'utilizar." | ||
374 | paragraph_2: "Vos cal un geton per escambiar entre vòstra aplicacion e l'API de wallabar." | ||
375 | paragraph_3: 'Per crear un geton, vos cal crear <a href=\"%link%\">crear un novèl client</a>.' | ||
376 | paragraph_4: 'Ara creatz un geton (remplaçar client_id, client_secret, username e password amb las bonas valors) :' | ||
377 | paragraph_5: "L'API vos tornarà una responsa coma aquò :" | ||
378 | paragraph_6: "L'access_token deu èsser emplegat per far una requèsta a l'API. Per exemple :" | ||
379 | paragraph_7: "Aquesta requèsta tornarà totes los articles de l'utilizaire." | ||
380 | paragraph_8: "Se volètz totas las adreças d'accès de l'API, donatz un còp d’uèlh <a href=\"%link%\">a la documentacion de l'API</a>." | ||
381 | back: 'Retorn' | ||
382 | |||
383 | validator: | ||
384 | password_must_match: 'Cal que los dos senhals siasquen los meteisses' | ||
385 | password_too_short: 'Lo senhal deu aver almens 8 caractèrs' | ||
386 | password_wrong_value: 'Vòstre senhal actual es pas bon' | ||
387 | item_per_page_too_high: "Aquò li agradarà pas a l'aplicacion" | ||
388 | rss_limit_too_hight: "Aquò li agradarà pas a l'aplicacion" | ||
389 | |||
390 | flashes: | ||
391 | config: | ||
392 | notice: | ||
393 | config_saved: 'Los paramètres son ben estats meses a jorn. Certans seràn aplicats aprèp desconnexion.' | ||
394 | password_updated: 'Vòstre senhal es ben estat mes a jorn' | ||
395 | password_not_updated_demo: "En demostration, podètz pas cambiar lo senhal d'aqueste utilizaire." | ||
396 | user_updated: 'Vòstres informacions personnelas son ben estadas mesas a jorn' | ||
397 | rss_updated: 'La configuracion dels fluxes RSS es ben estada mesa a jorn' | ||
398 | tagging_rules_updated: 'Règlas misa a jorn' | ||
399 | tagging_rules_deleted: 'Règla suprimida' | ||
400 | user_added: 'Utilizaire "%username%" apondut' | ||
401 | rss_token_updated: 'Geton RSS mes a jorn' | ||
402 | entry: | ||
403 | notice: | ||
404 | entry_already_saved: 'Article ja salvargardat lo %date%' | ||
405 | entry_saved: 'Article enregistrat' | ||
406 | entry_updated: 'Article mes a jorn' | ||
407 | entry_reloaded: 'Article recargat' | ||
408 | entry_reload_failed: "Fracàs de l'actualizacion de l'article" | ||
409 | entry_archived: 'Article marcat coma legit' | ||
410 | entry_unarchived: 'Article marcat coma pas legit' | ||
411 | entry_starred: 'Article apondut dins los favorits' | ||
412 | entry_unstarred: 'Article quitat dels favorits' | ||
413 | entry_deleted: 'Article suprimit' | ||
414 | tag: | ||
415 | notice: | ||
416 | tag_added: 'Etiqueta aponduda' | ||
417 | import: | ||
418 | notice: | ||
419 | failed: "L'importacion a fracassat, mercés de tornar ensajar" | ||
420 | failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr." | ||
421 | summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents." | ||
422 | developer: | ||
423 | notice: | ||
424 | client_created: 'Novèl client creat' | ||
425 | client_deleted: 'Client suprimit' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml index 61f05c89..fb26de89 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml | |||
@@ -1,129 +1,425 @@ | |||
1 | #Login | 1 | security: |
2 | Keep me logged in: 'Zapamiętaj mnie' | 2 | login: |
3 | Forgot your password?: 'Zapomniałeś hasła' | 3 | page_title: 'Witaj w wallabag!' |
4 | Login: 'Loguj' | 4 | keep_logged_in: 'Zapamiętaj mnie' |
5 | Back to login: 'Wróć do logowania' | 5 | forgot_password: 'Zapomniałeś hasła' |
6 | Send: 'Wyślij' | 6 | submit: 'Loguj' |
7 | "Enter your email address below and we'll send you password reset instructions.": 'Wpisz swój adres email poniżej. Wyślemy Ci instrukcję resetowania hasła' | 7 | register: 'Zarejestruj' |
8 | username: 'Nazwa użytkownika' | ||
9 | password: 'Hasło' | ||
10 | cancel: 'Anuluj' | ||
11 | resetting: | ||
12 | description: "Wpisz swój adres email poniżej. Wyślemy Ci instrukcję resetowania hasła" | ||
13 | register: | ||
14 | page_title: 'Utwórz konto' | ||
15 | go_to_account: 'Idź do konta' | ||
8 | 16 | ||
9 | # Menu | 17 | menu: |
10 | unread: 'nieprzeczytane' | 18 | left: |
11 | starred: 'oznaczone gwiazdką' | 19 | unread: 'Nieprzeczytane' |
12 | archive: 'archiwum' | 20 | starred: 'Oznaczone gwiazdką' |
13 | all: 'wszystkie' | 21 | archive: 'Archiwum' |
14 | tags: 'tagi' | 22 | all_articles: 'Wszystkie' |
15 | config: 'konfiguracja' | 23 | config: 'Konfiguracja' |
16 | howto: 'howto' | 24 | tags: 'Tagi' |
17 | logout: 'wyloguj' | 25 | internal_settings: 'Wewnętrzne ustawienia' |
18 | Filtered: 'Filtrowane' | 26 | import: 'Importuj' |
19 | About: 'O nas' | 27 | howto: 'Howto' |
28 | developer: 'Deweloper' | ||
29 | logout: 'Wyloguj' | ||
30 | about: 'O nas' | ||
31 | search: 'Szukaj' | ||
32 | save_link: 'Zapisz link' | ||
33 | back_to_unread: 'Powrót do nieprzeczytanych artykułów' | ||
34 | top: | ||
35 | add_new_entry: 'Dodaj nowy wpis' | ||
36 | search: 'Szukaj' | ||
37 | filter_entries: 'Filtruj wpisy' | ||
38 | export: 'Eksportuj' | ||
39 | search_form: | ||
40 | input_label: 'Wpisz swoje zapytanie tutaj' | ||
20 | 41 | ||
21 | # Header | 42 | footer: |
22 | Back to unread articles: 'Powrót do nieprzeczytanych artykułów' | 43 | wallabag: |
23 | Add a new entry: 'Dodaj nowy wpis' | 44 | elsewhere: 'Weż wallabag ze sobą' |
24 | Search: 'Szukaj' | 45 | social: 'Społeczność' |
25 | Filter entries: 'Filtruj wpisy' | 46 | powered_by: 'Kontrolowany przez' |
26 | Enter your search here: 'Wpisz swoje zapytanie tutaj:' | 47 | about: 'O nas' |
27 | Save new entry: 'Zapisz nowy wpis' | ||
28 | 48 | ||
29 | # Config screen | 49 | config: |
30 | Settings: 'Ustawienia' | 50 | page_title: 'Konfiguracja' |
31 | User information: 'Informacje o użytkowniku' | 51 | tab_menu: |
32 | Password: 'Hasło' | 52 | settings: 'Ustawienia' |
33 | RSS: 'Kanał RSS' | 53 | rss: 'Kanał RSS' |
34 | Add a user: 'Dodaj użytkownika' | 54 | user_info: 'Informacje o użytkowniku' |
35 | Theme: 'Temat' | 55 | password: 'Hasło' |
36 | Items per page: 'Ilość elementóœ na stronie' | 56 | rules: 'Zasady tagowania' |
37 | Language: 'Język' | 57 | new_user: 'Dodaj użytkownika' |
38 | Save: 'Zapisz' | 58 | form: |
39 | RSS token: 'Token RSS' | 59 | save: 'Zapisz' |
40 | Name: 'Nazwa' | 60 | form_settings: |
41 | Email: 'Adres email' | 61 | theme_label: 'Temat' |
42 | No token: 'Brak tokena' | 62 | items_per_page_label: 'Ilość elementóœ na stronie' |
43 | Reset your token: 'Zresetuj swojego tokena' | 63 | language_label: 'Język' |
44 | Create your token: 'Stwórz tokena' | 64 | reading_speed: |
45 | Rss limit: 'Limit RSS' | 65 | label: 'Prędkość czytania' |
46 | RSS links: 'Link do RSS' | 66 | help_message: 'Możesz skorzystać z narzędzi online do określenia twojej prędkości czytania:' |
47 | RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'Kanały RSS prowadzone przez wallabag pozwalają Ci na czytanie twoich zapisanych artykułów w twoium ulubionym czytniku RSS. Musisz najpierw wynegenerować tokena.' | 67 | 100_word: 'Czytam ~100 słów na minutę' |
48 | Old password: 'Stare hasło' | 68 | 200_word: 'Czytam ~200 słów na minutę' |
49 | New password: 'Nowe hasło' | 69 | 300_word: 'Czytam ~300 słów na minutę' |
50 | Repeat new password: 'Powtórz nowe hasło' | 70 | 400_word: 'Czytam ~400 słów na minutę' |
51 | Username: 'Nazwa użytkownika' | 71 | form_rss: |
72 | description: 'Kanały RSS prowadzone przez wallabag pozwalają Ci na czytanie twoich zapisanych artykułów w twoium ulubionym czytniku RSS. Musisz najpierw wynegenerować tokena.' | ||
73 | token_label: 'Token RSS' | ||
74 | no_token: 'Brak tokena' | ||
75 | token_create: 'Stwórz tokena' | ||
76 | token_reset: 'Zresetuj swojego tokena' | ||
77 | rss_links: 'RSS links' | ||
78 | rss_link: | ||
79 | unread: 'nieprzeczytane' | ||
80 | starred: 'oznaczone gwiazdką' | ||
81 | archive: 'archiwum' | ||
82 | rss_limit: 'Link do RSS' | ||
83 | form_user: | ||
84 | two_factor_description: "Włączenie autoryzacji dwuetapowej oznacza, że będziesz otrzymywał maile z kodem przy każdym nowym, niezaufanyum połączeniu" | ||
85 | name_label: 'Nazwa' | ||
86 | email_label: 'Adres email' | ||
87 | twoFactorAuthentication_label: 'Autoryzacja dwuetapowa' | ||
88 | form_password: | ||
89 | old_password_label: 'Stare hasło' | ||
90 | new_password_label: 'Nowe hasło' | ||
91 | repeat_new_password_label: 'Powtórz nowe hasło' | ||
92 | form_rules: | ||
93 | if_label: 'jeżeli' | ||
94 | then_tag_as_label: 'wtedy otaguj jako' | ||
95 | delete_rule_label: 'usuń' | ||
96 | rule_label: 'Reguła' | ||
97 | tags_label: 'Tagi' | ||
98 | faq: | ||
99 | title: 'FAQ' | ||
100 | tagging_rules_definition_title: 'Co oznaczają « reguły tagowania » ?' | ||
101 | tagging_rules_definition_description: 'Istnieją reguły używane przez wallabag służące do automatycznego tagowania nowych wpisów.<br />Za każdym razem kiedy dodasz nowi wpis, zostaną użyte wszystkie skonfigurowane przez ciebie regułu. Dzięki temu unikniesz konieczności ręcznego ich klasyfikowania.' | ||
102 | how_to_use_them_title: 'Jak ich użyć?' | ||
103 | how_to_use_them_description: 'Załóżmy, że chcesz otagować nowe wpisy jako « <i>do szybkiego przeczytania</i> » jeżeli czas czytania wynosi mniej niż 3 minuty.<br />W tym przypadku ponienieneś umieścić « czasCzytania <= 3 » w polu <i>Reguła</i> i « <i><do szybkiego przeczytania/i> » w polu <i>Tagi</i>.<br />Wiele tagów może zostać dodanych jednocześnie rozdzielając je przecinkami: « <i>do szybkiego przeczytania, koniecznie przeczytać</i> »<br />Kompleksowe reguły mogą być napisane przy użyciu operatorów: jeżeli « <i>czasCzytania >= 5 I nazwaDomeny = "github.com"</i> » wtedy otagój jako « <i>dłuższy tekst, github </i> »' | ||
104 | variables_available_title: 'Jakich zmiennych i operatorów mogę użyć przy pisaniu reguł?' | ||
105 | variables_available_description: 'Następujące zmienne i operatory mogą być użyte przy tworzeniu reguł tagowania:' | ||
106 | meaning: 'Znaczenie' | ||
107 | variable_description: | ||
108 | label: 'Zmienna' | ||
109 | title: 'Tytuł wpisu' | ||
110 | url: 'Adres URL wpisu' | ||
111 | isArchived: 'Czy wpis został zarchiwizowany czy nie' | ||
112 | isStarred: 'Czy wpis został oznaczony gwiazdką czy nie' | ||
113 | content: 'Zawartość wpisu' | ||
114 | language: 'Język wpisu' | ||
115 | mimetype: 'Mime-type wpisu' | ||
116 | readingTime: 'Szacunkowy czas czytania wpisu w minutach' | ||
117 | domainName: 'Nazwa domeny wpisu' | ||
118 | operator_description: | ||
119 | label: 'Operator' | ||
120 | less_than: 'Mniej niż...' | ||
121 | strictly_less_than: 'Wyłącznie mniej niż...' | ||
122 | greater_than: 'Więcej niż...' | ||
123 | strictly_greater_than: 'Wyłącznie więcej niż...' | ||
124 | equal_to: 'Równe...' | ||
125 | not_equal_to: 'Nierówny...' | ||
126 | or: 'Jedna reguła LUB inna' | ||
127 | and: 'Jedna reguła I inna' | ||
128 | matches: 'Sprawdź czy <i>temat</i> pasuje <i>szukaj</i> (duże lub małe litery).<br />Przykład: <code>tytuł zawiera "piłka nożna"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'Nazwa użytkownika' | ||
131 | password_label: 'Hasło' | ||
132 | repeat_new_password_label: 'Powtórz nowe hasło' | ||
133 | plain_password_label: 'Jawne hasło' | ||
134 | email_label: 'Adres email' | ||
52 | 135 | ||
53 | # Entries | 136 | entry: |
54 | 'estimated reading time': 'Szacunkowy czas czytania' | 137 | page_titles: |
55 | original: 'oryginał' | 138 | unread: 'Nieprzeczytane wpisy' |
56 | Toggle mark as read: 'Oznacz jako przeczytane' | 139 | starred: 'Wpisy oznaczone gwiazdką' |
57 | Toggle favorite: 'Oznacz jako ulubione' | 140 | archived: 'Zarchiwizowane wpisy' |
58 | Delete: 'Usuń' | 141 | filtered: 'Odfiltrowane wpisy' |
142 | list: | ||
143 | number_on_the_page: '{0} Nie ma wpisów.|{1} Jest jeden wpis.|]1,Inf[ Są %count% wpisy.' | ||
144 | reading_time: 'szacunkowy czas czytania' | ||
145 | reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min' | ||
146 | reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'oryginał' | ||
148 | toogle_as_read: 'Oznacz jako przeczytane' | ||
149 | toogle_as_star: 'Oznacz jako ulubione' | ||
150 | delete: 'Usuń' | ||
151 | export_title: 'Export' | ||
152 | filters: | ||
153 | title: 'Filtry' | ||
154 | status_label: 'Status' | ||
155 | archived_label: 'Zarchiwizowane' | ||
156 | starred_label: 'Oznaczone gwiazdką' | ||
157 | preview_picture_label: 'Posiada podgląd obrazu' | ||
158 | preview_picture_help: 'Podgląd obrazu' | ||
159 | language_label: 'Język' | ||
160 | reading_time: | ||
161 | label: 'Czas czytania w minutach' | ||
162 | from: 'od' | ||
163 | to: 'do' | ||
164 | domain_label: 'Nazwa domeny' | ||
165 | created_at: | ||
166 | label: 'Czas stworzenia' | ||
167 | from: 'od' | ||
168 | to: 'do' | ||
169 | action: | ||
170 | clear: 'Wyczyść' | ||
171 | filter: 'Filtruj' | ||
172 | view: | ||
173 | left_menu: | ||
174 | back_to_top: 'Wróć na górę' | ||
175 | back_to_homepage: 'Cofnij' | ||
176 | set_as_read: 'Oznacz jako przeczytane' | ||
177 | set_as_unread: 'Oznacz jako nieprzeczytane' | ||
178 | set_as_favorite: 'Ulubione' | ||
179 | view_original_article: 'Oryginalny artykuł' | ||
180 | re_fetch_content: 'Pobierz ponownie treść' | ||
181 | delete: 'Usuń' | ||
182 | add_a_tag: 'Dodaj tag' | ||
183 | share_content: 'Udostępnij' | ||
184 | share_email_label: 'Adres email' | ||
185 | download: 'Pobierz' | ||
186 | print: 'Drukuj' | ||
187 | problem: | ||
188 | label: 'Problemy' | ||
189 | description: 'Czy ten artykuł wygląda źle?' | ||
190 | edit_title: 'Edytuj tytuł' | ||
191 | original_article: 'oryginalny' | ||
192 | annotations_on_the_entry: '{0} Nie ma adnotacji |{1} Jedna adnotacja |]1,Inf[ %nbAnnotations% adnotacji' | ||
193 | new: | ||
194 | page_title: 'Zapisz nowy wpis' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | page_title: 'Edytuj wpis' | ||
200 | title_label: 'Tytuł' | ||
201 | url_label: 'Adres URL' | ||
202 | is_public_label: 'Publiczny' | ||
203 | save_label: 'Zapisz' | ||
59 | 204 | ||
60 | # Filters | 205 | about: |
61 | Filters: 'Filtry' | 206 | page_title: 'O nas' |
62 | Status: 'Status' | 207 | top_menu: |
63 | Archived: 'Zarchiwizowane' | 208 | who_behind_wallabag: 'Kto stoi za wallabag' |
64 | Starred: 'Oznaczone gwiazdką' | 209 | getting_help: 'Pomoc' |
65 | Preview picture: 'Podgląd obrazu' | 210 | helping: 'Pomóż wallabag' |
66 | Has a preview picture: 'Posiada podgląd obrazu' | 211 | contributors: 'Osoby, które pomogły przy projekcie' |
67 | Reading time in minutes: 'Czas czytania w minutach' | 212 | third_party: 'Biblioteki Third-party' |
68 | from: 'od' | 213 | who_behind_wallabag: |
69 | to: 'do' | 214 | developped_by: 'Stworzony przez' |
70 | website.com: 'website.com' | 215 | website: 'strona internetowa' |
71 | Domain name: 'Nazwa domeny' | 216 | many_contributors: 'i wielu innych ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">na GitHubie</a>' |
72 | Creation date: 'Czas stworzenia' | 217 | project_website: 'Stona projektu' |
73 | dd/mm/yyyy: 'dd.mm.yyyy' | 218 | license: 'Licencja' |
74 | Clear: 'Wyczyść' | 219 | version: 'Wersja' |
75 | Filter: 'Filtruj' | 220 | getting_help: |
221 | documentation: 'Dokumentacja' | ||
222 | bug_reports: 'Raportuj błędy' | ||
223 | support: '<a href="https://support.wallabag.org">Na naszej stronie wsparcia technicznego</a> lub <a href="https://github.com/wallabag/wallabag/issues">na GitHubie</a>' | ||
224 | helping: | ||
225 | description: 'wallabag jest darmowy i otwartoźródłowy. Możesz nam pomóc:' | ||
226 | by_contributing: 'przez przyłączenie się do projektu:' | ||
227 | by_contributing_2: 'lista wszystkich naszych potrzeb' | ||
228 | by_paypal: 'przez Paypal' | ||
229 | contributors: | ||
230 | description: 'Podziękuj osobą, które przyczyniły się do projektu przez aplikację webową' | ||
231 | third_party: | ||
232 | description: 'Tutaj znajduje się lista Third-party bibliotek użytych w wallabag (z ich licencjami):' | ||
233 | package: 'Paczka' | ||
234 | license: 'Licencja' | ||
76 | 235 | ||
77 | # About | 236 | howto: |
78 | Who is behind wallabag: 'Kto stoi za wallabag' | 237 | page_title: 'Howto' |
79 | Getting help: 'Pomoc' | 238 | page_description: 'Sposoby zapisania artykułu:' |
80 | Helping wallabag: 'Pomóż wallabag' | 239 | top_menu: |
81 | Developed by: 'Stworzony przez' | 240 | browser_addons: 'Wtyczki dla przeglądarki' |
82 | website: 'strona internetowa' | 241 | mobile_apps: 'Aplikacje mobilne' |
83 | And many others contributors ♥: ' i wielu innych ♥' | 242 | bookmarklet: 'Bookmarklet' |
84 | on GitHub: 'na GitHubie' | 243 | form: |
85 | Project website: 'Stona projektu' | 244 | description: 'Podziękuj przez ten formularz' |
86 | License: 'Licencja' | 245 | browser_addons: |
87 | Version: 'Wersja' | 246 | firefox: 'Standardowe rozszerzenie dla Firefox' |
88 | Documentation: 'Dokumentacja' | 247 | chrome: 'Rozszerzenie dla Chrome' |
89 | Bug reports: 'Raportuj błędy' | 248 | mobile_apps: |
90 | On our support website: 'Na naszeej stronie wsparcia technicznego' | 249 | android: |
91 | or: 'lub' | 250 | via_f_droid: 'w F-Droid' |
92 | 'wallabag is free and opensource. You can help us:': 'wallabag jest darmowy i otwartoźródłowy. Możesz nam pomóc: ' | 251 | via_google_play: 'w Google Play' |
93 | 'by contributing to the project:': 'przez przyłączenie się do projektu:' | 252 | ios: 'w iTunes Store' |
94 | an issue lists all our needs: 'lista wszystkich naszych potrzeb' | 253 | windows: 'w Microsoft Store' |
95 | via Paypal: 'przez PayPal' | 254 | bookmarklet: |
255 | description: 'Przeciągnij i upuść ten link na swój pasek zakładek' | ||
96 | 256 | ||
97 | # Howto | 257 | quickstart: |
98 | Form: 'Od' | 258 | page_title: 'Szybki start' |
99 | Thanks to this form: 'Podziękuj przez ten formularz' | 259 | intro: |
100 | Browser addons: 'Wtyczki dla przeglądarki' | 260 | title: 'Witaj w wallabag!' |
101 | Mobile apps: 'Aplikacje mobilne' | 261 | paragraph_1: "Będziemy ci towarzyszyli w Twojej poznaniu wallabag i pokażemy możliwości, które mogą cię zainteresować." |
102 | Bookmarklet: 'Bookmarklet' | 262 | paragraph_2: 'Śledź nas!' |
103 | Standard Firefox Add-On: 'Standardowe rozszerzenia dla Firefox' | 263 | configure: |
104 | Chrome Extension: 'Rozszerzenie dla Chrome' | 264 | title: 'Konfiguruj aplikację' |
105 | download the application: 'Pobierz aplikację ' | 265 | language: 'Zmień język i wygląd' |
106 | 'Drag & drop this link to your bookmarks bar:': 'Przeciągnij i upuść ten link na swój pasek zakładek' | 266 | rss: 'Włącz kanały RSS' |
267 | tagging_rules: 'Napisz reguły pozwalające na automatyczne otagowanie twoich artykułów' | ||
268 | admin: | ||
269 | title: 'Administracja' | ||
270 | description: 'Jako administrator wallabag, możesz:' | ||
271 | new_user: 'Tworzyć nowego użytkownika' | ||
272 | analytics: 'Configure analytics' | ||
273 | sharing: 'Włączyć pewne parametry dotyczące udostępniania artykułów' | ||
274 | export: 'Skonfigurować eksport' | ||
275 | import: 'Skonfigurować import' | ||
276 | first_steps: | ||
277 | title: 'Pierwsze kroki' | ||
278 | new_article: 'Zapisz swój pierwszy artukuł' | ||
279 | unread_articles: 'I sklasyfikuj go!' | ||
280 | migrate: | ||
281 | title: 'Migruj w istniejącej usługi' | ||
282 | description: "Używasz innej usługi? Pomożemy ci pobrać twoje dane do wallabag." | ||
283 | pocket: 'Migruj z Pocket' | ||
284 | wallabag_v1: 'Migruj z wallabag v1' | ||
285 | wallabag_v2: 'Migruj z wallabag v2' | ||
286 | developer: | ||
287 | title: 'Deweloperzy' | ||
288 | create_application: 'Stwórz swoją aplikację' | ||
289 | docs: | ||
290 | title: 'Pełna Dokumentacja' | ||
291 | annotate: 'Dadaj adnotację do swojego artykułu' | ||
292 | export: 'Konwertuj swoje artykuły do ePUB lub PDF' | ||
293 | search_filters: 'Zabacz jak możesz znaleźć artykuł dzięku użyciu silnika wyszukiwarki i filtrów' | ||
294 | fetching_errors: 'Co mogę zrobić jeżeli artukuł napotka błędy podczas pobierania?' | ||
295 | all_docs: 'I wiele innych artykułów!' | ||
296 | support: | ||
297 | title: 'Wsparcie' | ||
298 | description: 'Jeżeli potrzebujesz pomocy, jesteśmy tutaj dla ciebie.' | ||
299 | github: 'na GitHubie' | ||
300 | email: 'przez email' | ||
301 | gitter: 'na Gitterze' | ||
107 | 302 | ||
108 | # Flash messages | 303 | tag: |
109 | Information updated: 'Informacje zaktualizowane' | 304 | page_title: 'Tagi' |
110 | Config saved. Some parameters will be considered after disconnection.': 'Konfiguracja zapisana. Niektóre parametry zostaną uznane po rozłączeniu' | 305 | list: |
111 | RSS information updated: 'Informacje RSS zaktualizowane' | 306 | number_on_the_page: '{0} Nie ma tagów.|{1} Jest jeden tag.|]1,Inf[ Są %count% tagi.' |
112 | Password updated: 'Hasło zaktualizowane' | ||
113 | Entry starred: 'Wpis oznaczony gwiazdką' | ||
114 | Entry unstarred: 'Wpis odznaczony gwiazdką' | ||
115 | Entry archived: 'Wpis dodany do archiwum' | ||
116 | Entry unarchived: 'Wpis usunięty z archiwum' | ||
117 | Entry deleted: 'Wpis usunięty' | ||
118 | 307 | ||
119 | # Entry | 308 | import: |
120 | Mark as read: 'Oznacz jako przeczytane' | 309 | page_title: 'Import' |
121 | Favorite: 'Ulubione' | 310 | page_description: 'Witaj w importerze Wallabag. Wybierz swoją poprzednią usługę, z której chcech migrować.' |
122 | back: 'Cofnij' | 311 | action: |
123 | original article: 'Oryginalny artykuł' | 312 | import_contents: 'Import zawartości' |
124 | Add a tag: 'Dodaj tag' | 313 | form: |
125 | Share: 'Udostępnij' | 314 | mark_as_read_title: 'Oznaczyć wszystkie jako przeczytane?' |
126 | Download: 'Pobierz' | 315 | mark_as_read_label: 'Oznacz wszystkie zaimportowane wpisy jako przeczytane' |
127 | Does this article appear wrong?: 'Czy ten artykuł wygląda źle?' | 316 | file_label: 'Plik' |
128 | Problems?: 'Problemy' | 317 | save_label: 'Właduj plik' |
129 | Edit title: 'Edytuj tytuł' | 318 | pocket: |
319 | page_title: 'Import > Pocket' | ||
320 | description: "Ten importer, zaimportuje dane z usługi Pocket. Pocket nie pozwala na nam na pobranie zawartości ze swojej usługi, więc kontent każdego arthykuł\u zostanie ponownie pobrany przez wallabag." | ||
321 | config_missing: | ||
322 | description: "Import z Pocket nie jest skonfigurowany." | ||
323 | admin_message: 'Musisz zdefiniować %keyurls%a pocket_consumer_key%keyurle%.' | ||
324 | user_message: 'Admin twojego servera musi zdefiniować API Key dla Pocket.' | ||
325 | authorize_message: 'Możesz zaimportować dane ze swojego konta Pocket. Kliknij poniższy przycisk i autoryzuj aplikacje aby połączyć się z getpocket.com.' | ||
326 | connect_to_pocket: 'Połącz z Pocket i importuj dane' | ||
327 | wallabag_v1: | ||
328 | page_title: 'Import > Wallabag v1' | ||
329 | description: 'Ten importer, zaimportuje wszystkie twoje artykułu z wallabag v1. Na swojej stronie konfiguracyjnej kliknij "JSON eksport" w sekcji "Eksportuj swoje dane wallabag". Otrzymasz plik "wallabag-export-1-xxxx-xx-xx.json".' | ||
330 | how_to: 'Wybierz swój plik eksportu z wallabag i kliknij poniższy przycisk, aby go załadować.' | ||
331 | wallabag_v2: | ||
332 | page_title: 'Import > Wallabag v2' | ||
333 | description: 'Ten importer, zaimportuje wszystkie twoje artykułu z wallabag v2. Idź do wszystkich artykułów, a następnie na panelu exportu kliknij na "JSON". Otrzymasz plik "All articles.json".' | ||
334 | |||
335 | developer: | ||
336 | page_title: 'Deweloper' | ||
337 | welcome_message: 'Witaj w API wallabag' | ||
338 | documentation: 'Dokumentacja' | ||
339 | how_to_first_app: 'Jak stworzyć moją pierwszą aplikację' | ||
340 | full_documentation: 'Pokaż pełne API' | ||
341 | # list_methods: 'List API methods' | ||
342 | clients: | ||
343 | title: 'Klienci' | ||
344 | create_new: 'Utwórz nowego klienta' | ||
345 | existing_clients: | ||
346 | title: 'Istniejący klienci' | ||
347 | field_id: 'Client ID' | ||
348 | field_secret: 'Client secret' | ||
349 | field_uris: 'Przekieruj URIs' | ||
350 | field_grant_types: 'Przyznaj pozwolenie' | ||
351 | no_client: 'Nie ma jeszcze klienta.' | ||
352 | remove: | ||
353 | warn_message_1: 'Masz możliwość usunięcia tego klienta. Ta akcja jest NIEODWRACALNA !' | ||
354 | warn_message_2: "Jeżeli go usuniesz, aplikacje skonfigurowane z tym klientem nię będa w stanie autoryzować twojego wallabag." | ||
355 | action: 'Usuń tego klienta' | ||
356 | client: | ||
357 | page_title: 'Deweloper > Nowy klient' | ||
358 | page_description: 'Tworzysz nowego klienta. Wypełnij poniższe pole w celu przekierowania URI twojej aplikacji.' | ||
359 | form: | ||
360 | redirect_uris_label: 'Przekieruj adresy URI' | ||
361 | save_label: 'Stwórz nowego klienta' | ||
362 | action_back: 'Cofnij' | ||
363 | client_parameter: | ||
364 | page_title: 'Deweloper > Parametry klienta' | ||
365 | page_description: 'Tutaj znajdują się parametry klienta.' | ||
366 | field_id: 'Client ID' | ||
367 | field_secret: 'Client secret' | ||
368 | back: 'Cofnij' | ||
369 | read_howto: 'Przeczytaj jak "Stworzyć moją pierwszą aplikację"' | ||
370 | howto: | ||
371 | page_title: 'Deweloper > Jak stworzyć moją pierwszą aplikację' | ||
372 | description: | ||
373 | paragraph_1: 'Następujące komendy korzystają <a href="https://github.com/jkbrzt/httpie">Biblioteka HTTPie</a>. Upewnij się, czy zainstalowałeś ją w swoim systemie zanim z niej skorzystasz' | ||
374 | paragraph_2: 'Potrzebujesz tokena w celu nawiązania komunikacji między swoją aplikacją a API wallabag.' | ||
375 | paragraph_3: 'W celu stworzenia tokena musisz <a href="%link%">stwórz nowego klienta</a>.' | ||
376 | paragraph_4: 'Teraz, utwórz tokena (zmień client_id, client_secret, username i password z poprawnymi wartościami):' | ||
377 | paragraph_5: 'API powinno zwrócić taką informację:' | ||
378 | paragraph_6: 'access_token jest użyteczny do wywołania API endpoint. Na przykład:' | ||
379 | paragraph_7: 'To wywołanie zwróci wszystkie twoje wpisy.' | ||
380 | paragraph_8: 'Jeżeli chcesz wyświetlić wszystkie punkty końcowe API, zobacz <a href="%link%">Dokumentacja naszego API</a>.' | ||
381 | back: 'Cofnij' | ||
382 | |||
383 | validator: | ||
384 | password_must_match: 'Hasło w polach musi być takie same' | ||
385 | password_too_short: 'Hasło powinno mieć minimum 8 znaków długości' | ||
386 | password_wrong_value: 'Twoje obecne hasło jest błędne' | ||
387 | item_per_page_too_high: 'To może spowodować problemy z aplikacją' | ||
388 | rss_limit_too_hight: 'To może spowodować problemy z aplikacją' | ||
389 | |||
390 | flashes: | ||
391 | config: | ||
392 | notice: | ||
393 | config_saved: 'Konfiguracja zapisana. Niektóre parametry zostaną uznane po rozłączeniu' | ||
394 | password_updated: 'Hasło zaktualizowane' | ||
395 | password_not_updated_demo: "In demonstration mode, you can't change password for this user." | ||
396 | user_updated: 'Informacje zaktualizowane' | ||
397 | rss_updated: 'Informacje RSS zaktualizowane' | ||
398 | tagging_rules_updated: 'Reguły tagowania zaktualizowane' | ||
399 | tagging_rules_deleted: 'Reguła tagowania usunięta' | ||
400 | user_added: 'Użytkownik "%username%" dodany' | ||
401 | rss_token_updated: 'Token kanału RSS zaktualizowany' | ||
402 | entry: | ||
403 | notice: | ||
404 | entry_already_saved: 'Wpis już został dodany %date%' | ||
405 | entry_saved: 'Wpis zapisany' | ||
406 | entry_updated: 'Wpis zaktualizowany' | ||
407 | entry_reloaded: 'Wpis ponownie załadowany' | ||
408 | entry_reload_failed: 'Błąd ponownego załadowania' | ||
409 | entry_archived: 'Wpis dodany do archiwum' | ||
410 | entry_unarchived: 'Wpis usunięty z archiwum' | ||
411 | entry_starred: 'Wpis oznaczony gwiazdką' | ||
412 | entry_unstarred: 'Wpis odznaczony gwiazdką' | ||
413 | entry_deleted: 'Wpis usunięty' | ||
414 | tag: | ||
415 | notice: | ||
416 | tag_added: 'Tag dodany' | ||
417 | import: | ||
418 | notice: | ||
419 | failed: 'Nieudany import, prosimy spróbować ponownie.' | ||
420 | failed_on_file: 'Błąd podczas ptrzetwarzania pliku. Sprawdż swój importowany plik.' | ||
421 | summary: 'Podsumowanie importu: %imported% zaimportowane, %skipped% już zapisane.' | ||
422 | developer: | ||
423 | notice: | ||
424 | client_created: 'Nowy klient utworzony.' | ||
425 | client_deleted: 'Klient usunięty' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml index d779bcbd..bb817cb3 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml | |||
@@ -1,129 +1,425 @@ | |||
1 | #Login | 1 | security: |
2 | Keep me logged in: 'Ține-mă logat' | 2 | login: |
3 | Forgot your password?: 'Ți-ai uitat parola?' | 3 | # page_title: 'Welcome to wallabag!' |
4 | Login: 'Logare' | 4 | keep_logged_in: 'Ține-mă logat' |
5 | Back to login: 'Înapoi la logare' | 5 | forgot_password: 'Ți-ai uitat parola?' |
6 | Send: 'Trimite' | 6 | submit: 'Logare' |
7 | "Enter your email address below and we'll send you password reset instructions.": "Introduceți adresa de e-mail, iar noi vă vom trimite instrucțiunile pentru resetarea parolei." | 7 | # register: 'Register' |
8 | username: 'Nume de utilizator' | ||
9 | password: 'Parolă' | ||
10 | # cancel: 'Cancel' | ||
11 | resetting: | ||
12 | description: "Introduceți adresa de e-mail, iar noi vă vom trimite instrucțiunile pentru resetarea parolei." | ||
13 | register: | ||
14 | # page_title: 'Create an account' | ||
15 | # go_to_account: 'Go to your account' | ||
8 | 16 | ||
9 | # Menu | 17 | menu: |
10 | unread: 'necitite' | 18 | left: |
11 | starred: 'cu steluță' | 19 | unread: 'Necitite' |
12 | archive: 'arhivă' | 20 | starred: 'Cu steluță' |
13 | all: 'toate' | 21 | archive: 'Arhivă' |
14 | tags: 'tag-uri' | 22 | all_articles: 'Toate' |
15 | config: 'configurație' | 23 | config: 'Configurație' |
16 | howto: 'cum să' | 24 | tags: 'Tag-uri' |
17 | logout: 'delogare' | 25 | # internal_settings: 'Internal Settings' |
18 | Filtered: 'Filtrate' | 26 | # import: 'Import' |
19 | About: 'Despre' | 27 | howto: 'Cum să' |
28 | # developer: 'Developer' | ||
29 | logout: 'cum să' | ||
30 | about: 'Despre' | ||
31 | search: 'Căutare' | ||
32 | # save_link: 'Save a link' | ||
33 | back_to_unread: 'Înapoi la articolele necitite' | ||
34 | top: | ||
35 | add_new_entry: 'Introdu un nou articol' | ||
36 | search: 'Căutare' | ||
37 | filter_entries: 'Filtrează articolele' | ||
38 | # export: 'Export' | ||
39 | search_form: | ||
40 | input_label: 'Introdu căutarea ta' | ||
20 | 41 | ||
21 | # Header | 42 | footer: |
22 | Back to unread articles: 'Înapoi la articolele necitite' | 43 | wallabag: |
23 | Add a new entry: 'Introdu un nou articol' | 44 | # elsewhere: 'Take wallabag with you' |
24 | Search: 'Căutare' | 45 | # social: 'Social' |
25 | Filter entries: 'Filtrează articolele' | 46 | # powered_by: 'powered by' |
26 | Enter your search here: 'Introdu căutarea ta' | 47 | about: 'Despre' |
27 | Save new entry: 'Salvează un nou articol' | ||
28 | 48 | ||
29 | # Config screen | 49 | config: |
30 | Settings: 'Setări' | 50 | page_title: 'Configurație' |
31 | User information: 'Informații despre utilizator' | 51 | tab_menu: |
32 | Password: 'Parolă' | 52 | settings: 'Setări' |
33 | RSS: 'RSS' | 53 | rss: 'RSS' |
34 | Add a user: 'Crează un utilizator' | 54 | user_info: 'Informații despre utilizator' |
35 | Theme: 'Temă' | 55 | password: 'Parolă' |
36 | Items per page: 'Articole pe pagină' | 56 | # rules: 'Tagging rules' |
37 | Language: 'Limbă' | 57 | new_user: 'Crează un utilizator' |
38 | Save: 'Salvează' | 58 | form: |
39 | RSS token: 'RSS-Token' | 59 | save: 'Salvează' |
40 | Name: 'Nume' | 60 | form_settings: |
41 | Email: 'E-mail' | 61 | theme_label: 'Temă' |
42 | No token: 'Fără token' | 62 | items_per_page_label: 'Articole pe pagină' |
43 | Reset your token: 'Resetează-ți token-ul' | 63 | language_label: 'Limbă' |
44 | Create your token: 'Crează-ți token' | 64 | reading_speed: |
45 | Rss limit: 'Limită RSS' | 65 | # label: 'Reading speed' |
46 | RSS links: 'Link-uri RSS' | 66 | # help_message: 'You can use online tools to estimate your reading speed:' |
47 | 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'Feed-urile RSS oferite de wallabag îți permit să-ți citești articolele salvate în reader-ul tău preferat RSS.' | 67 | # 100_word: 'I read ~100 words per minute' |
48 | Old password: 'Parola veche' | 68 | # 200_word: 'I read ~200 words per minute' |
49 | New password: 'Parola nouă' | 69 | # 300_word: 'I read ~300 words per minute' |
50 | Repeat new password: 'Repetă parola' | 70 | # 400_word: 'I read ~400 words per minute' |
51 | Username: 'Nume de utilizator' | 71 | form_rss: |
72 | description: 'Feed-urile RSS oferite de wallabag îți permit să-ți citești articolele salvate în reader-ul tău preferat RSS.' | ||
73 | token_label: 'RSS-Token' | ||
74 | no_token: 'Fără token' | ||
75 | token_create: 'Crează-ți token' | ||
76 | token_reset: 'Resetează-ți token-ul' | ||
77 | rss_links: 'Link-uri RSS' | ||
78 | rss_link: | ||
79 | unread: 'unread' | ||
80 | starred: 'starred' | ||
81 | archive: 'archived' | ||
82 | rss_limit: 'Limită RSS' | ||
83 | form_user: | ||
84 | # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion" | ||
85 | name_label: 'Nume' | ||
86 | email_label: 'E-mail' | ||
87 | # twoFactorAuthentication_label: 'Two factor authentication' | ||
88 | form_password: | ||
89 | old_password_label: 'Parola veche' | ||
90 | new_password_label: 'Parola nouă' | ||
91 | repeat_new_password_label: 'Repeat new password' | ||
92 | form_rules: | ||
93 | # if_label: 'if' | ||
94 | # then_tag_as_label: 'then tag as' | ||
95 | # delete_rule_label: 'delete' | ||
96 | # rule_label: 'Rule' | ||
97 | # tags_label: 'Tags' | ||
98 | # faq: | ||
99 | # title: 'FAQ' | ||
100 | # tagging_rules_definition_title: 'What does « tagging rules » mean?' | ||
101 | # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.' | ||
102 | # how_to_use_them_title: 'How do I use them?' | ||
103 | # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' | ||
104 | # variables_available_title: 'Which variables and operators can I use to write rules?' | ||
105 | # variables_available_description: 'The following variables and operators can be used to create tagging rules:' | ||
106 | # meaning: 'Meaning' | ||
107 | # variable_description: | ||
108 | # label: 'Variable' | ||
109 | # title: 'Title of the entry' | ||
110 | # url: 'URL of the entry' | ||
111 | # isArchived: 'Whether the entry is archived or not' | ||
112 | # isStarred: 'Whether the entry is starred or not' | ||
113 | # content: "The entry's content" | ||
114 | # language: "The entry's language" | ||
115 | # mimetype: "The entry's mime-type" | ||
116 | # readingTime: "The estimated entry's reading time, in minutes" | ||
117 | # domainName: 'The domain name of the entry' | ||
118 | # operator_description: | ||
119 | # label: 'Operator' | ||
120 | # less_than: 'Less than...' | ||
121 | # strictly_less_than: 'Strictly less than...' | ||
122 | # greater_than: 'Greater than...' | ||
123 | # strictly_greater_than: 'Strictly greater than...' | ||
124 | # equal_to: 'Equal to...' | ||
125 | # not_equal_to: 'Not equal to...' | ||
126 | # or: 'One rule OR another' | ||
127 | # and: 'One rule AND another' | ||
128 | # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'Nume de utilizator' | ||
131 | password_label: 'Parolă' | ||
132 | repeat_new_password_label: 'Repeat new password' | ||
133 | plain_password_label: '????' | ||
134 | email_label: 'E-mail' | ||
52 | 135 | ||
53 | # Entries | 136 | entry: |
54 | 'estimated reading time': 'timp estimat de citire' | 137 | page_titles: |
55 | original: original | 138 | # unread: 'Unread entries' |
56 | Toggle mark as read: 'Comută marcat ca citit' | 139 | # starred: 'Starred entries' |
57 | Toggle favorite: 'Comută marcat ca favorit' | 140 | # archived: 'Archived entries' |
58 | Delete: 'Șterge' | 141 | # filtered: 'Filtered entries' |
142 | list: | ||
143 | # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' | ||
144 | reading_time: 'timp estimat de citire' | ||
145 | reading_time_minutes: 'timp estimat de citire: %readingTime% min' | ||
146 | reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur"><</small> 1 min' | ||
147 | original_article: 'original' | ||
148 | toogle_as_read: 'Comută marcat ca citit' | ||
149 | toogle_as_star: 'Comută marcat ca favorit' | ||
150 | delete: 'Șterge' | ||
151 | # export_title: 'Export' | ||
152 | filters: | ||
153 | title: 'Filtre' | ||
154 | status_label: 'Status' | ||
155 | archived_label: 'Arhivat' | ||
156 | starred_label: 'Steluțe' | ||
157 | preview_picture_label: 'Are o imagine de previzualizare' | ||
158 | preview_picture_help: 'Previzualizare imagine' | ||
159 | language_label: 'Limbă' | ||
160 | reading_time: | ||
161 | label: 'Timp de citire în minute' | ||
162 | from: 'de la' | ||
163 | to: 'către' | ||
164 | domain_label: 'Nume domeniu' | ||
165 | created_at: | ||
166 | label: 'Data creării' | ||
167 | from: 'de la' | ||
168 | to: 'către' | ||
169 | action: | ||
170 | clear: 'Șterge' | ||
171 | filter: 'Filtru' | ||
172 | view: | ||
173 | left_menu: | ||
174 | # back_to_top: 'Back to top' | ||
175 | back_to_homepage: 'Înapoi' | ||
176 | set_as_read: 'Marchează ca citit' | ||
177 | # set_as_unread: 'Mark as unread' | ||
178 | set_as_favorite: 'Favorit' | ||
179 | view_original_article: 'Articol original' | ||
180 | # re_fetch_content: 'Re-fetch content' | ||
181 | delete: 'Șterge' | ||
182 | add_a_tag: 'Adaugă un tag' | ||
183 | share_content: 'Dă mai departe' | ||
184 | share_email_label: 'E-mail' | ||
185 | download: 'Descarcă' | ||
186 | # print: 'Print' | ||
187 | problem: | ||
188 | label: 'Probleme?' | ||
189 | description: 'Îți pare ciudat articolul?' | ||
190 | edit_title: 'Editează titlul' | ||
191 | original_article: 'original' | ||
192 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | ||
193 | new: | ||
194 | page_title: 'Salvează un nou articol' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | # page_title: 'Edit an entry' | ||
200 | # title_label: 'Title' | ||
201 | url_label: 'Url' | ||
202 | # is_public_label: 'Public' | ||
203 | save_label: 'Salvează' | ||
59 | 204 | ||
60 | # Filters | 205 | about: |
61 | Filters: 'Filtre' | 206 | page_title: 'Despre' |
62 | Status: 'Status' | 207 | top_menu: |
63 | Archived: 'Arhivat' | 208 | who_behind_wallabag: 'Cine e în spatele wallabag' |
64 | Starred: 'Steluțe' | 209 | getting_help: 'Ajutor' |
65 | Preview picture: 'Previzualizare imagine' | 210 | helping: 'Cum să ajuți wallabag' |
66 | Has a preview picture: 'Are o imagine de previzualizare' | 211 | # contributors: 'Contributors' |
67 | Reading time in minutes: 'Timp de citire în minute' | 212 | # third_party: 'Third-party libraries' |
68 | from: 'de la' | 213 | who_behind_wallabag: |
69 | to: 'către' | 214 | developped_by: 'Dezvoltat de' |
70 | website.com: 'website.com' | 215 | website: 'website' |
71 | Domain name: 'Nume domeniu' | 216 | many_contributors: 'Și mulți alți contribuitori ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">pe Github</a>' |
72 | Creation date: 'Data creării' | 217 | project_website: 'Website-ul proiectului' |
73 | dd/mm/yyyy: 'zz/ll/aaaa' | 218 | license: 'Licență' |
74 | Clear: 'Șterge' | 219 | version: 'Versiune' |
75 | Filter: 'Filtru' | 220 | getting_help: |
221 | documentation: 'Documentație' | ||
222 | bug_reports: 'Bug-uri' | ||
223 | support: '<a href="https://support.wallabag.org">Pe site-ul nostru de suport</a> sau <a href="https://github.com/wallabag/wallabag/issues">pe GitHub</a>' | ||
224 | helping: | ||
225 | description: 'wallabag este gratis și Open-Source. Cum ne poți ajuta:' | ||
226 | by_contributing: 'contribuind la proiect:' | ||
227 | by_contributing_2: 'o problemă ne listează toate nevoile:' | ||
228 | by_paypal: 'prin Paypal' | ||
229 | contributors: | ||
230 | # description: 'Thank you to contributors on wallabag web application' | ||
231 | third_party: | ||
232 | # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' | ||
233 | # package: 'Package' | ||
234 | license: 'Licență' | ||
76 | 235 | ||
77 | # About | 236 | howto: |
78 | Who is behind wallabag: "Cine e în spatele wallabag" | 237 | page_title: 'Cum să' |
79 | Getting help: "Ajutor" | 238 | # page_description: 'There are several ways to save an article:' |
80 | Helping wallabag: "Cum să ajuți wallabag" | 239 | top_menu: |
81 | Developed by: "Dezvoltat de" | 240 | browser_addons: 'Add-On-uri de Browser' |
82 | website: "website" | 241 | mobile_apps: 'Aplicații mobile' |
83 | And many others contributors ♥: "Și mulți alți contribuitori ♥" | 242 | bookmarklet: 'Bookmarklet' |
84 | on GitHub: "pe GitHub" | 243 | form: |
85 | Project website: "Website-ul proiectului" | 244 | description: 'Mulțumită acestui formular' |
86 | License: "Licență" | 245 | browser_addons: |
87 | Version: "Versiune" | 246 | firefox: 'Add-On standard de Firefox' |
88 | Documentation: "Documentație" | 247 | chrome: 'Extensie Chrome' |
89 | Bug reports: "Bug-uri" | 248 | mobile_apps: |
90 | On our support website: "Pe site-ul nostru de suport" | 249 | android: |
91 | or: "sau" | 250 | via_f_droid: 'prin F-Droid' |
92 | "wallabag is free and opensource. You can help us:": "wallabag este gratis și Open-Source. Cum ne poți ajuta:" | 251 | via_google_play: 'prin Google Play' |
93 | "by contributing to the project:": "contribuind la proiect:" | 252 | ios: 'prin iTunes Store' |
94 | an issue lists all our needs: "o problemă ne listează toate nevoile:" | 253 | windows: 'prin Microsoft Store' |
95 | via Paypal: "prin PayPal" | 254 | bookmarklet: |
255 | description: 'Drag & drop acest link în bara de bookmark-uri:' | ||
96 | 256 | ||
97 | # Howto | 257 | quickstart: |
98 | Form: Formular | 258 | # page_title: 'Quickstart' |
99 | Thanks to this form: "Mulțumită acestui formular" | 259 | # intro: |
100 | Browser addons: "Add-On-uri de Browser" | 260 | # title: 'Welcome to wallabag!' |
101 | Mobile apps: "Aplicații mobile" | 261 | # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." |
102 | Bookmarklet: "Bookmarklet" | 262 | # paragraph_2: 'Follow us!' |
103 | Standard Firefox Add-On: "Add-On standard de Firefox" | 263 | # configure: |
104 | Chrome Extension: "Extensie Chrome" | 264 | # title: 'Configure the application' |
105 | download the application: "descarcă aplicația" | 265 | # language: 'Change language and design' |
106 | "Drag & drop this link to your bookmarks bar:": "Drag & drop acest link în bara de bookmark-uri:" | 266 | # rss: 'Enable RSS feeds' |
267 | # tagging_rules: 'Write rules to automatically tag your articles' | ||
268 | # admin: | ||
269 | # title: 'Administration' | ||
270 | # description: 'As an administrator, you have privileges on wallabag. You can:' | ||
271 | # new_user: 'Create a new user' | ||
272 | # analytics: 'Configure analytics' | ||
273 | # sharing: 'Enable some parameters about article sharing' | ||
274 | # export: 'Configure export' | ||
275 | # import: 'Configure import' | ||
276 | # first_steps: | ||
277 | # title: 'First steps' | ||
278 | # new_article: 'Save your first article' | ||
279 | # unread_articles: 'And classify it!' | ||
280 | # migrate: | ||
281 | # title: 'Migrate from an existing service' | ||
282 | # description: "Are you using another service? We'll help you to retrieve your data on wallabag." | ||
283 | # pocket: 'Migrate from Pocket' | ||
284 | # wallabag_v1: 'Migrate from wallabag v1' | ||
285 | # wallabag_v2: 'Migrate from wallabag v2' | ||
286 | # developer: | ||
287 | # title: 'Developers' | ||
288 | # create_application: 'Create your third application' | ||
289 | # docs: | ||
290 | # title: 'Full documentation' | ||
291 | # annotate: 'Annotate your article' | ||
292 | # export: 'Convert your articles into ePUB or PDF' | ||
293 | # search_filters: 'See how you can look for an article by using search engine and filters' | ||
294 | # fetching_errors: 'What can I do if an article encounters errors during fetching?' | ||
295 | # all_docs: 'And so many other articles!' | ||
296 | # support: | ||
297 | # title: 'Support' | ||
298 | # description: 'If you need some help, we are here for you.' | ||
299 | # github: 'On GitHub' | ||
300 | # email: 'By email' | ||
301 | # gitter: 'On Gitter' | ||
107 | 302 | ||
108 | # Flash messages | 303 | tag: |
109 | Information updated: "Informație actualizată" | 304 | page_title: 'Tag-uri' |
110 | "Config saved. Some parameters will be considered after disconnection.": "configurație salvată. Unii parametrii vor fi considerați după deconectare." | 305 | list: |
111 | RSS information updated: "Informație RSS actualizată" | 306 | # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' |
112 | Password updated: "Parolă actualizată" | ||
113 | Entry starred: "Articol adăugat la favorite" | ||
114 | Entry unstarred: "Articol șters de la favorite" | ||
115 | Entry archived: "Articol arhivat" | ||
116 | Entry unarchived: "Articol dezarhivat" | ||
117 | Entry deleted: "Articol șters" | ||
118 | 307 | ||
119 | # Entry | 308 | import: |
120 | Mark as read: 'Marchează ca citit' | 309 | # page_title: 'Import' |
121 | Favorite: 'Favorit' | 310 | # page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.' |
122 | back: 'înapoi' | 311 | # action: |
123 | original article: 'articol original' | 312 | # import_contents: 'Import contents' |
124 | Add a tag: 'Adaugă un tag' | 313 | # form: |
125 | Share: 'Dă mai departe' | 314 | # mark_as_read_title: 'Mark all as read?' |
126 | Download: 'Descarcă' | 315 | # mark_as_read_label: 'Mark all imported entries as read' |
127 | Does this article appear wrong?: "Îți pare ciudat articolul?" | 316 | # file_label: 'File' |
128 | Problems?: 'Probleme?' | 317 | # save_label: 'Upload file' |
129 | Edit title: "Editează titlul" | 318 | # pocket: |
319 | # page_title: 'Import > Pocket' | ||
320 | # description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag." | ||
321 | # config_missing: | ||
322 | # description: "Pocket import isn't configured." | ||
323 | # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' | ||
324 | # user_message: 'Your server admin needs to define an API Key for Pocket.' | ||
325 | # authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.' | ||
326 | # connect_to_pocket: 'Connect to Pocket and import data' | ||
327 | # wallabag_v1: | ||
328 | # page_title: 'Import > Wallabag v1' | ||
329 | # description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.' | ||
330 | # how_to: 'Please select your wallabag export and click on the below button to upload and import it.' | ||
331 | # wallabag_v2: | ||
332 | # page_title: 'Import > Wallabag v2' | ||
333 | # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' | ||
334 | |||
335 | developer: | ||
336 | # page_title: 'Developer' | ||
337 | # welcome_message: 'Welcome to the wallabag API' | ||
338 | # documentation: 'Documentation' | ||
339 | # how_to_first_app: 'How to create my first application' | ||
340 | # full_documentation: 'View full API documentation' | ||
341 | # list_methods: 'List API methods' | ||
342 | # clients: | ||
343 | # title: 'Clients' | ||
344 | # create_new: 'Create a new client' | ||
345 | # existing_clients: | ||
346 | # title: 'Existing clients' | ||
347 | # field_id: 'Client ID' | ||
348 | # field_secret: 'Client secret' | ||
349 | # field_uris: 'Redirect URIs' | ||
350 | # field_grant_types: 'Grant type allowed' | ||
351 | # no_client: 'No client yet.' | ||
352 | # remove: | ||
353 | # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !' | ||
354 | # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag." | ||
355 | # action: 'Remove this client' | ||
356 | # client: | ||
357 | # page_title: 'Developer > New client' | ||
358 | # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' | ||
359 | # form: | ||
360 | # redirect_uris_label: 'Redirect URIs' | ||
361 | # save_label: 'Create a new client' | ||
362 | # action_back: 'Back' | ||
363 | # client_parameter: | ||
364 | # page_title: 'Developer > Client parameters' | ||
365 | # page_description: 'Here are your client parameters.' | ||
366 | # field_id: 'Client ID' | ||
367 | # field_secret: 'Client secret' | ||
368 | # back: 'Back' | ||
369 | # read_howto: 'Read the howto "Create my first application"' | ||
370 | # howto: | ||
371 | # page_title: 'Developer > How to create my first application' | ||
372 | # description: | ||
373 | # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.' | ||
374 | # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.' | ||
375 | # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.' | ||
376 | # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):' | ||
377 | # paragraph_5: 'The API will return a response like this:' | ||
378 | # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:' | ||
379 | # paragraph_7: 'This call will return all the entries for your user.' | ||
380 | # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' | ||
381 | # back: 'Back' | ||
382 | |||
383 | validator: | ||
384 | password_must_match: 'Câmpurile destinate parolelor trebuie să se potrivească' | ||
385 | password_too_short: 'Parola ar trebui să conțină cel puțin 8 caractere' | ||
386 | # password_wrong_value: 'Wrong value for your current password' | ||
387 | # item_per_page_too_high: 'This will certainly kill the app' | ||
388 | # rss_limit_too_hight: 'This will certainly kill the app' | ||
389 | |||
390 | flashes: | ||
391 | config: | ||
392 | notice: | ||
393 | config_saved: 'Configurație salvată. Unii parametrii vor fi considerați după deconectare.' | ||
394 | password_updated: 'Parolă actualizată' | ||
395 | password_not_updated_demo: "In demonstration mode, you can't change password for this user." | ||
396 | user_updated: 'Informație actualizată' | ||
397 | rss_updated: 'Informație RSS actualizată' | ||
398 | # tagging_rules_updated: 'Tagging rules updated' | ||
399 | # tagging_rules_deleted: 'Tagging rule deleted' | ||
400 | # user_added: 'User "%username%" added' | ||
401 | # rss_token_updated: 'RSS token updated' | ||
402 | entry: | ||
403 | notice: | ||
404 | # entry_already_saved: 'Entry already saved on %date%' | ||
405 | # entry_saved: 'Entry saved' | ||
406 | # entry_updated: 'Entry updated' | ||
407 | # entry_reloaded: 'Entry reloaded' | ||
408 | # entry_reload_failed: 'Failed to reload entry' | ||
409 | entry_archived: 'Articol arhivat' | ||
410 | entry_unarchived: 'Articol dezarhivat' | ||
411 | entry_starred: 'Articol adăugat la favorite' | ||
412 | entry_unstarred: 'Articol șters de la favorite' | ||
413 | entry_deleted: 'Articol șters' | ||
414 | tag: | ||
415 | notice: | ||
416 | # tag_added: 'Tag added' | ||
417 | import: | ||
418 | notice: | ||
419 | # failed: 'Import failed, please try again.' | ||
420 | # failed_on_file: 'Error while processing import. Please verify your import file.' | ||
421 | # summary: 'Import summary: %imported% imported, %skipped% already saved.' | ||
422 | developer: | ||
423 | notice: | ||
424 | # client_created: 'New client created.' | ||
425 | # client_deleted: 'Client deleted' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml index 6d9bf0db..897cc2f4 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml | |||
@@ -1,226 +1,425 @@ | |||
1 | # Login | 1 | security: |
2 | Keep me logged in: 'Oturumumu açık tut' | 2 | login: |
3 | Forgot your password?: 'Şifrenizi mi unuttunuz?' | 3 | page_title: 'wallabag' |
4 | Login: 'Giriş Yap' | 4 | keep_logged_in: 'Oturumumu açık tut' |
5 | Back to login: 'Giriş yapma ekranına geri dön' | 5 | forgot_password: 'Şifrenizi mi unuttunuz?' |
6 | Send: 'Gönder' | 6 | submit: 'Giriş Yap' |
7 | Register: 'Kayıt Ol' | 7 | register: 'Kayıt Ol' |
8 | username: 'Kullanıcı adı' | ||
9 | password: 'Şifre' | ||
10 | # cancel: 'Cancel' | ||
11 | resetting: | ||
12 | # description: "Enter your email address below and we'll send you password reset instructions." | ||
13 | register: | ||
14 | # page_title: 'Create an account' | ||
15 | # go_to_account: 'Go to your account' | ||
8 | 16 | ||
9 | # Menu | 17 | menu: |
10 | unread: 'Okunmayan' | 18 | left: |
11 | starred: 'Favoriler' | 19 | unread: 'Okunmayan' |
12 | archive: 'Arşiv' | 20 | starred: 'Favoriler' |
13 | all: 'Hepsi' | 21 | archive: 'Arşiv' |
14 | tags: 'Etiketler' | 22 | all_articles: 'Hepsi' |
15 | config: 'Yapılandırma' | 23 | config: 'Yapılandırma' |
16 | import: 'İçe Aktar' | 24 | tags: 'Etiketler' |
17 | howto: 'Yardım' | 25 | # internal_settings: 'Internal Settings' |
18 | logout: 'Çıkış Yap' | 26 | import: 'İçe Aktar' |
19 | Filtered: 'Filtreli' | 27 | howto: 'Yardım' |
20 | About: 'Hakkımızda' | 28 | # developer: 'Developer' |
29 | logout: 'Çıkış Yap' | ||
30 | about: 'Hakkımızda' | ||
31 | search: 'Ara' | ||
32 | # save_link: 'Save a link' | ||
33 | back_to_unread: 'Okunmayan makalelere geri dön' | ||
34 | top: | ||
35 | add_new_entry: 'Yeni bir makale ekle' | ||
36 | search: 'Ara' | ||
37 | filter_entries: 'Filtrele' | ||
38 | export: 'Dışa Aktar' | ||
39 | search_form: | ||
40 | input_label: 'Aramak istediğiniz herhangi bir şey yazın' | ||
21 | 41 | ||
22 | # Header | 42 | footer: |
23 | Back to unread articles: 'Okunmayan makalelere geri dön' | 43 | wallabag: |
24 | Add a new entry: 'Yeni bir makale ekle' | 44 | elsewhere: 'wallabag her an seninle' |
25 | Search: 'Ara' | 45 | social: 'Sosyal' |
26 | Filter entries: 'Filtrele' | 46 | powered_by: 'powered by' |
27 | Enter your search here: 'Aramak istediğiniz herhangi bir şey yazın' | 47 | about: 'Hakkımızda' |
28 | Save new entry: 'Yeni makaleyi kaydet' | ||
29 | 48 | ||
30 | # Config screen | 49 | config: |
31 | Settings: 'Ayarlar' | 50 | page_title: 'Yapılandırma' |
32 | User information: 'Kullanıcı bilgileri' | 51 | tab_menu: |
33 | Tagging rules: "Etiketleme kuralları" | 52 | settings: 'Ayarlar' |
34 | Password: 'Şifre' | 53 | rss: 'RSS' |
35 | RSS: 'RSS' | 54 | user_info: 'Kullanıcı bilgileri' |
36 | Add a user: 'Bir kullanıcı ekle' | 55 | password: 'Şifre' |
37 | Theme: 'Tema' | 56 | rules: 'Etiketleme kuralları' |
38 | Items per page: "Sayfa başına makale sayısı" | 57 | new_user: 'Bir kullanıcı ekle' |
39 | Language: 'Dil' | 58 | form: |
40 | Save: 'Kaydet' | 59 | save: 'Kaydet' |
41 | RSS token: 'RSS belirteci (token)' | 60 | form_settings: |
42 | Name: 'İsim' | 61 | theme_label: 'Tema' |
43 | Email: 'E-posta' | 62 | items_per_page_label: 'Sayfa başına makale sayısı' |
44 | No token: 'Belirteç (token) yok' | 63 | language_label: 'Dil' |
45 | Reset your token: 'Belirteci (token) sıfırla' | 64 | reading_speed: |
46 | Create your token: 'Yeni belirteç (token) oluştur' | 65 | # label: 'Reading speed' |
47 | Rss limit: "RSS içeriğinden talep edilecek makale limiti" | 66 | # help_message: 'You can use online tools to estimate your reading speed:' |
48 | RSS links: 'RSS akış bağlantıları' | 67 | # 100_word: 'I read ~100 words per minute' |
49 | "RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.": "wallabag RSS akışı kaydetmiş olduğunuz makalelerini favori RSS okuyucunuzda görüntülemenizi sağlar. Bunu yapabilmek için öncelikle belirteç (token) oluşturmalısınız." | 68 | # 200_word: 'I read ~200 words per minute' |
50 | Old password: 'Eski şifre' | 69 | # 300_word: 'I read ~300 words per minute' |
51 | New password: 'Yeni şifre' | 70 | # 400_word: 'I read ~400 words per minute' |
52 | Repeat new password: 'Yeni şifrenin tekrarı' | 71 | form_rss: |
53 | Username: "Kullanıcı adı" | 72 | description: 'wallabag RSS akışı kaydetmiş olduğunuz makalelerini favori RSS okuyucunuzda görüntülemenizi sağlar. Bunu yapabilmek için öncelikle belirteç (token) oluşturmalısınız.' |
54 | Two factor authentication: "İki adımlı doğrulama" | 73 | token_label: 'RSS belirteci (token)' |
55 | "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion": "İki adımlı doğrulamayı aktifleştirdiğinizde, her yeni güvenilmeyen bağlantılarda size e-posta ile bir kod alacaksınız." | 74 | no_token: 'Belirteç (token) yok' |
56 | Baggy: "Baggy" | 75 | token_create: 'Yeni belirteç (token) oluştur' |
57 | Material: "Material" | 76 | token_reset: 'Belirteci (token) sıfırla' |
58 | English: "İngilizce" | 77 | rss_links: 'RSS akış bağlantıları' |
59 | Français: "Fransızca" | 78 | rss_link: |
60 | Deutsch: "Almanca" | 79 | unread: 'okunmayan' |
61 | Türkçe: "Türkçe" | 80 | starred: 'favoriler' |
81 | archive: 'arşiv' | ||
82 | rss_limit: 'RSS içeriğinden talep edilecek makale limiti' | ||
83 | form_user: | ||
84 | two_factor_description: "İki adımlı doğrulamayı aktifleştirdiğinizde, her yeni güvenilmeyen bağlantılarda size e-posta ile bir kod alacaksınız." | ||
85 | name_label: 'İsim' | ||
86 | email_label: 'E-posta' | ||
87 | twoFactorAuthentication_label: 'İki adımlı doğrulama' | ||
88 | form_password: | ||
89 | old_password_label: 'Eski şifre' | ||
90 | new_password_label: 'Yeni şifre' | ||
91 | repeat_new_password_label: 'Yeni şifrenin tekrarı' | ||
92 | form_rules: | ||
93 | # if_label: 'if' | ||
94 | # then_tag_as_label: 'then tag as' | ||
95 | # delete_rule_label: 'delete' | ||
96 | rule_label: 'Kural' | ||
97 | tags_label: 'Etiketler' | ||
98 | faq: | ||
99 | title: 'S.S.S.' | ||
100 | tagging_rules_definition_title: '« etiketleme kuralları » ne anlama geliyor?' | ||
101 | # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.' | ||
102 | how_to_use_them_title: 'Bunu nasıl kullanırım?' | ||
103 | # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »' | ||
104 | variables_available_title: 'Kurallar içerisinde hangi değişken ve operatörleri kullanabilirim?' | ||
105 | variables_available_description: 'Etiket kuralı oluşturmak istediğinizde aşağıdaki değişken ve operatörleri kullanabilirsin:' | ||
106 | meaning: 'Anlamı' | ||
107 | variable_description: | ||
108 | label: 'Değişken' | ||
109 | title: 'Makalenin başlığı' | ||
110 | url: 'Makalenin bağlantısı' | ||
111 | isArchived: 'Makale arşivlendi mi? Arşivlenmedi mi?' | ||
112 | isStarred: 'Makale favorilere eklendi mi? Eklenmedi mi?' | ||
113 | content: "Makalenin içeriği" | ||
114 | language: "Makalenin dili" | ||
115 | mimetype: "Makalenin mime türü" | ||
116 | readingTime: "Makalenin dakika cinsinden tahmini okuma süresi" | ||
117 | domainName: 'Makalenin bulunduğu internet sitesinin alan adı' | ||
118 | operator_description: | ||
119 | label: 'Operatör' | ||
120 | less_than: 'Küçüktür ve eşittir…' | ||
121 | strictly_less_than: 'Küçüktür…' | ||
122 | greater_than: 'Büyüktür ve eşittir…' | ||
123 | strictly_greater_than: 'Büyüktür…' | ||
124 | equal_to: 'Eşittir…' | ||
125 | not_equal_to: 'Eşit değildir…' | ||
126 | or: 'Bir kural veya birbaşkası' | ||
127 | and: 'Bir kural ve diğeri' | ||
128 | # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' | ||
129 | form_new_user: | ||
130 | username_label: 'Kullanıcı adı' | ||
131 | password_label: 'Şifre' | ||
132 | repeat_new_password_label: 'Yeni şifrenin tekrarı' | ||
133 | plain_password_label: '????' | ||
134 | email_label: 'E-posta' | ||
62 | 135 | ||
63 | # Tagging rules | 136 | entry: |
64 | Rule: "Kural" | 137 | page_titles: |
65 | Tags: "Etiketler" | 138 | # unread: 'Unread entries' |
66 | FAQ: "S.S.S." | 139 | # starred: 'Starred entries' |
67 | Variable: "Değişken" | 140 | # archived: 'Archived entries' |
68 | Meaning: "Anlamı" | 141 | # filtered: 'Filtered entries' |
69 | Operator: "Operatör" | 142 | list: |
70 | "What does « tagging rules » mean?": "« etiketleme kuralları » ne anlama geliyor?" | 143 | number_on_the_page: '{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var.' |
71 | "How do I use them?": "Bunu nasıl kullanırım?" | 144 | reading_time: 'tahmini okuma süresi' |
72 | "Which variables and operators can I use to write rules?": "Kurallar içerisinde hangi değişken ve operatörleri kullanabilirim?" | 145 | reading_time_minutes: 'tahmini okuma süresi: %readingTime% min' |
73 | "The following variables and operators can be used to create tagging rules:": "Etiket kuralı oluşturmak istediğinizde aşağıdaki değişken ve operatörleri kullanabilirsin:" | 146 | reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur"><</small> 1 min' |
74 | Title of the entry: "Makalenin başlığı" | 147 | original_article: 'orijinal' |
75 | URL of the entry: "Makalenin bağlantısı" | 148 | toogle_as_read: 'Okundu/okunmadı olarak işaretle' |
76 | The domain name of the entry: "Makalenin bulunduğu internet sitesinin alan adı" | 149 | toogle_as_star: 'Favorilere ekle/çıkar' |
77 | "The entry's content": "Makalenin içeriği" | 150 | delete: 'Sil' |
78 | "The entry's language": "Makalenin dili" | 151 | export_title: 'Dışa Aktar' |
79 | "The entry's mime-type": "Makalenin mime türü" | 152 | filters: |
80 | "The estimated entry's reading time, in minutes": "Makalenin dakika cinsinden tahmini okuma süresi" | 153 | title: 'Filtreler' |
81 | "Whether the entry is archived or not": "Makale arşivlendi mi? Arşivlenmedi mi?" | 154 | status_label: 'Durum' |
82 | "Whether the entry is starred or not": "Makale favorilere eklendi mi? Eklenmedi mi?" | 155 | archived_label: 'Arşiv' |
83 | "Less than…": "Küçüktür ve eşittir…" | 156 | starred_label: 'Favori' |
84 | "Strictly less than…": "Küçüktür…" | 157 | preview_picture_label: 'Resim önizlemesi varsa' |
85 | "Greater than…": "Büyüktür ve eşittir…" | 158 | preview_picture_help: 'Resim önizlemesi' |
86 | "Strictly greater than…": "Büyüktür…" | 159 | language_label: 'Dil' |
87 | "Equal to…": "Eşittir…" | 160 | reading_time: |
88 | "Not equal to…": "Eşit değildir…" | 161 | label: 'Dakika cinsinden okuma süresi' |
89 | "One rule or another": "Bir kural veya birbaşkası" | 162 | from: 'başlangıç' |
90 | "One rule and another": "Bir kural ve diğeri" | 163 | to: 'bitiş' |
164 | domain_label: 'Alan adı' | ||
165 | created_at: | ||
166 | label: 'Oluşturulma tarihi' | ||
167 | from: 'başlangıç' | ||
168 | to: 'bitiş' | ||
169 | action: | ||
170 | clear: 'Temizle' | ||
171 | filter: 'Filtrele' | ||
172 | view: | ||
173 | left_menu: | ||
174 | # back_to_top: 'Back to top' | ||
175 | back_to_homepage: 'Back' | ||
176 | set_as_read: 'Okundu olarak işaretle' | ||
177 | set_as_unread: 'Okunmadı olarak işaretle' | ||
178 | set_as_favorite: 'Favorilere ekle/çıkar' | ||
179 | view_original_article: 'Orijinal makale' | ||
180 | re_fetch_content: 'İçeriği yenile' | ||
181 | delete: 'Sil' | ||
182 | add_a_tag: 'Bir etiket ekle' | ||
183 | share_content: 'Paylaş' | ||
184 | share_email_label: 'E-posta' | ||
185 | download: 'İndir' | ||
186 | # print: 'Print' | ||
187 | problem: | ||
188 | label: 'Bir sorun mu var?' | ||
189 | description: 'Bu makalede herhangi bir yanlışlık mı var?' | ||
190 | edit_title: 'Başlığı düzenle' | ||
191 | original_article: 'orijinal' | ||
192 | # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' | ||
193 | new: | ||
194 | page_title: 'Yeni makaleyi kaydet' | ||
195 | placeholder: 'http://website.com' | ||
196 | form_new: | ||
197 | url_label: Url | ||
198 | edit: | ||
199 | page_title: 'Makaleyi düzenle' | ||
200 | title_label: 'Başlık' | ||
201 | url_label: 'Url' | ||
202 | is_public_label: 'Herkes tarafından erişime açık olsun mu?' | ||
203 | save_label: 'Kaydet' | ||
91 | 204 | ||
92 | # Entries | 205 | about: |
93 | 'estimated reading time': 'tahmini okuma süresi' | 206 | page_title: 'Hakkımızda' |
94 | original: "orijinal" | 207 | top_menu: |
95 | Toggle mark as read: 'Okundu/okunmadı olarak işaretle' | 208 | who_behind_wallabag: "wallabag'in arkasındakiler" |
96 | Toggle favorite: 'Favorilere ekle/çıkar' | 209 | getting_help: 'Yardım' |
97 | Delete: 'Sil' | 210 | helping: 'wallabag destek olun' |
211 | # contributors: 'Contributors' | ||
212 | # third_party: 'Third-party libraries' | ||
213 | who_behind_wallabag: | ||
214 | developped_by: 'Geliştiriciler' | ||
215 | website: 'i̇nternet sitesi' | ||
216 | many_contributors: 'Ve katkıda bulunanlar ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">GitHub üzerinde</a>' | ||
217 | project_website: 'Proje internet sitesi' | ||
218 | license: 'Lisans' | ||
219 | version: 'Sürüm' | ||
220 | getting_help: | ||
221 | documentation: 'Dokümantasyon' | ||
222 | bug_reports: 'Sorun bildir' | ||
223 | support: '<a href="https://support.wallabag.org">Destek internet sitesinde</a> ya da <a href="https://github.com/wallabag/wallabag/issues">GitHub üzerinde</a>' | ||
224 | helping: | ||
225 | description: 'wallabag açık kaynak kodlu ve ücretsizdir. Bize destek ol :' | ||
226 | by_contributing: 'projemize katkıda bulunun :' | ||
227 | by_contributing_2: 'ihtiyacımız olanların listelendiği yapılacaklar listesi' | ||
228 | by_paypal: 'PayPal ile' | ||
229 | contributors: | ||
230 | # description: 'Thank you to contributors on wallabag web application' | ||
231 | third_party: | ||
232 | # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' | ||
233 | # package: 'Package' | ||
234 | license: 'Lisans' | ||
98 | 235 | ||
99 | # Filters | 236 | howto: |
100 | Filters: 'Filtreler' | 237 | page_title: 'Yardım' |
101 | Status: 'Durum' | 238 | # page_description: 'There are several ways to save an article:' |
102 | Archived: 'Arşiv' | 239 | top_menu: |
103 | Starred: 'Favori' | 240 | browser_addons: 'Tarayıcı eklentileri' |
104 | Preview picture: 'Resim önizlemesi' | 241 | mobile_apps: 'Mobil uygulamalar' |
105 | Has a preview picture: 'Resim önizlemesi varsa' | 242 | bookmarklet: 'Bookmarklet' |
106 | Reading time in minutes: 'Dakika cinsinden okuma süresi' | 243 | form: |
107 | from: 'başlangıç' | 244 | description: 'Yeni makale kaydet' |
108 | to: 'bitiş' | 245 | browser_addons: |
109 | website.com: 'internet-sitesi.com' | 246 | firefox: 'Standart Firefox Eklentisi' |
110 | Domain name: 'Alan adı' | 247 | chrome: 'Chrome Eklentisi' |
111 | Creation date: 'Oluşturulma tarihi' | 248 | mobile_apps: |
112 | dd/mm/yyyy: 'dd/mm/aaaa' | 249 | android: |
113 | Clear: 'Temizle' | 250 | # via_f_droid: 'via F-Droid' |
114 | Filter: 'Filtrele' | 251 | # via_google_play: 'via Google Play' |
252 | # ios: 'on the iTunes Store' | ||
253 | # windows: 'on the Microsoft Store' | ||
254 | bookmarklet: | ||
255 | description: "Bu bağlantı ile yer imlerinizi sürükleyip bırakarak wallabag'e ekleyebilirsiniz:" | ||
115 | 256 | ||
116 | # About | 257 | quickstart: |
117 | Who is behind wallabag: "wallabag'in arkasındakiler" | 258 | page_title: 'Hızlı başlangıç' |
118 | Getting help: "Yardım" | 259 | intro: |
119 | Helping wallabag: "wallabag destek olun" | 260 | title: 'wallabag' |
120 | Developed by: "Geliştiriciler:" | 261 | paragraph_1: "wallabag kurduğunuz için teşekkür ederiz. Bu sayfada biz size eşlik edecek ve ilginizi çekecek birkaç özellik göstereceğim." |
121 | website: "İnternet sitesi" | 262 | paragraph_2: 'Bizi takip edin!' |
122 | And many others contributors ♥: "Ve katkıda bulunanlar ♥" | 263 | configure: |
123 | on GitHub: "GitHub üzerinde" | 264 | title: 'Uygulamayı Yapılandırma' |
124 | Project website: "Proje internet sitesi" | 265 | language: 'Dili ve tasarımı değiştirme' |
125 | License: "Lisans" | 266 | rss: 'RSS akışını aktifleştirme' |
126 | Version: "Sürüm" | 267 | # tagging_rules: 'Write rules to automatically tag your articles' |
127 | Documentation: "Dokümantasyon" | 268 | admin: |
128 | Bug reports: "Sorun bildir" | 269 | # title: 'Administration' |
129 | On our support website: "Destek internet sitesinde" | 270 | # description: 'As an administrator, you have privileges on wallabag. You can:' |
130 | or: "ya da" | 271 | # new_user: 'Create a new user' |
131 | "wallabag is free and opensource. You can help us:": "wallabag açık kaynak kodlu ve ücretsizdir. Bize destek ol :" | 272 | # analytics: 'Configure analytics' |
132 | "by contributing to the project:": "projemize katkıda bulunun :" | 273 | # sharing: 'Enable some parameters about article sharing' |
133 | an issue lists all our needs: "ihtiyacımız olanların listelendiği yapılacaklar listesi" | 274 | # export: 'Configure export' |
134 | via Paypal: "PayPal ile" | 275 | # import: 'Configure import' |
276 | first_steps: | ||
277 | title: 'İlk adım' | ||
278 | new_article: 'İlk makalenizi kaydedin' | ||
279 | unread_articles: 'Ve bunu sınıflandırın!' | ||
280 | migrate: | ||
281 | title: 'Varolan servislerden veri aktarma' | ||
282 | description: "Kullanmakta olduğunuz farklı bir hizmet mi var? Biz size yardımcı olacak ve verilerinizi wallabag'e aktarmanıza yardımcı olacağız." | ||
283 | pocket: "Pocket üzerindeki verilerinizi wallabag'e aktarın" | ||
284 | wallabag_v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" | ||
285 | wallabag_v2: "wallabag v2 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" | ||
286 | developer: | ||
287 | # title: 'Developers' | ||
288 | # create_application: 'Create your third application' | ||
289 | docs: | ||
290 | title: 'Dokümantasyon' | ||
291 | # annotate: 'Annotate your article' | ||
292 | export: 'Makalelerinizi ePUB ya da PDF formatına çevirme' | ||
293 | search_filters: 'Makaleleri görüntülemek için arama motorlarını ve filteri kullanma' | ||
294 | # fetching_errors: 'What can I do if an article encounters errors during fetching?' | ||
295 | all_docs: 'Ve daha fazlası!' | ||
296 | support: | ||
297 | title: 'Destek' | ||
298 | description: 'Eğer yardıma ihtiyacınız varsa, biz her daim senin için burada olacağız.' | ||
299 | github: 'GitHub' | ||
300 | email: 'E-posta' | ||
301 | gitter: 'Gitter' | ||
135 | 302 | ||
136 | # Howto | 303 | tag: |
137 | Form: "Form" | 304 | page_title: 'Etiketler' |
138 | Thanks to this form: "Yeni makale kaydet" | 305 | list: |
139 | Browser addons: "Tarayıcı eklentileri" | 306 | number_on_the_page: '{0} Herhangi bir etiket yok.|{1} Burada bir adet etiket var.|]1,Inf[ Burada %count% adet etiket var.' |
140 | Mobile apps: "Mobil uygulamalar" | ||
141 | Bookmarklet: "Bookmarklet" | ||
142 | Standard Firefox Add-On: "Standart Firefox Eklentisi" | ||
143 | Chrome Extension: "Chrome Eklentisi" | ||
144 | download the application: "uygulamayı indir" | ||
145 | "Drag & drop this link to your bookmarks bar:": "Bu bağlantı ile yer imlerinizi sürükleyip bırakarak wallabag'e ekleyebilirsiniz:" | ||
146 | via F-Droid: "F-Droid" | ||
147 | via Google Play: "Google Play" | ||
148 | bag it!: "bag it!" | ||
149 | 307 | ||
150 | # Flash messages | 308 | import: |
151 | Information updated: "Bilgiler güncellendi" | 309 | page_title: 'İçe Aktar' |
152 | "Config saved. Some parameters will be considered after disconnection.": "Yapılandırma ayarları kaydedildi. Bazı yapılandırmalar tekrar giriş yaptığınızda aktif olacaktır." | 310 | page_description: 'wallabag içe aktarma aracına hoşgeldiniz. Lütfen içe aktarmak istediğiiz önceki servisinizi seçin.' |
153 | RSS information updated: "RSS bilgiler güncellendi" | 311 | action: |
154 | Password updated: "Şifre güncellendi" | 312 | import_contents: 'İçe Aktar contents' |
155 | Entry starred: "Makale favorilere eklendi" | 313 | form: |
156 | Entry unstarred: "Makale favorilerden çıkartıldı" | 314 | # mark_as_read_title: 'Mark all as read?' |
157 | Entry archived: "Makale arşivlendi" | 315 | # mark_as_read_label: 'Mark all imported entries as read' |
158 | Entry unarchived: "Makale arşivden çıkartıldı" | 316 | file_label: 'Dosya' |
159 | Entry reloaded: "Makale içeriği yenilendi" | 317 | save_label: 'Dosyayı yükle' |
160 | Entry deleted: "Makale silindi" | 318 | pocket: |
161 | Entry saved: "Makale kaydedildi" | 319 | page_title: 'İçe Aktar > Pocket' |
162 | Tag added: "Etiket eklendi" | 320 | description: "Bu araç tüm Pocket verinizi içe aktarır. Pocket içeriklerin getirilmesine izin vermez, okunabilen içerikler wallabag tarafından yeniden getirilir." |
321 | config_missing: | ||
322 | # description: "Pocket import isn't configured." | ||
323 | # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' | ||
324 | # user_message: 'Your server admin needs to define an API Key for Pocket.' | ||
325 | authorize_message: 'Pocket hesabınızda verilerinizi içe aktarabilmemiz için öncelikle aşağıdaki butona tıklayın. Daha sonra, getpocket.com üzerindeki uygulamamıza gereken izinleri verin. Hepsi bu kadar!' | ||
326 | connect_to_pocket: "Pocket'a bağlanın ve verilerinizi içe aktarın" | ||
327 | wallabag_v1: | ||
328 | page_title: 'İçe Aktar > Wallabag v1' | ||
329 | description: 'Bu araç wallabag v1 üzerindeki tüm makalelerinizi içe aktarır. Yapılandırma sayfasında, "Export your wallabag data" sekmesinden "JSON export" adımını izleyin. Bu adım size "wallabag-export-1-xxxx-xx-xx.json" isimli bir dosya verecektir.' | ||
330 | how_to: 'Aşağıdaki butona tıklayarak wallabag v1 tarafından dışa aktarılmış dosyanızı yükleyin.' | ||
331 | wallabag_v2: | ||
332 | page_title: 'İçe Aktar > Wallabag v2' | ||
333 | # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.' | ||
163 | 334 | ||
164 | # Entry | 335 | developer: |
165 | Mark as read: 'Okundu olarak işaretle' | 336 | # page_title: 'Developer' |
166 | Mark as unread: 'Okunmadı olarak işaretle' | 337 | # welcome_message: 'Welcome to the wallabag API' |
167 | Favorite: 'Favorilere ekle/çıkar' | 338 | # documentation: 'Documentation' |
168 | back: 'geri dön' | 339 | # how_to_first_app: 'How to create my first application' |
169 | original article: 'Orijinal makale' | 340 | # full_documentation: 'View full API documentation' |
170 | Add a tag: 'Bir etiket ekle' | 341 | # list_methods: 'List API methods' |
171 | Share: 'Paylaş' | 342 | # clients: |
172 | Download: 'İndir' | 343 | # title: 'Clients' |
173 | Does this article appear wrong?: "Bu makalede herhangi bir yanlışlık mı var?" | 344 | # create_new: 'Create a new client' |
174 | Problems?: 'Bir sorun mu var?' | 345 | # existing_clients: |
175 | Edit title: "Başlığı düzenle" | 346 | # title: 'Existing clients' |
176 | "{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.": "{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var." | 347 | # field_id: 'Client ID' |
177 | "{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.": "{0} Herhangi bir etiket yok.|{1} Burada bir adet etiket var.|]1,Inf[ Burada %count% adet etiket var." | 348 | # field_secret: 'Client secret' |
178 | Reload content: "İçeriği yenile" | 349 | # field_uris: 'Redirect URIs' |
179 | Edit an entry: "Makaleyi düzenle" | 350 | # field_grant_types: 'Grant type allowed' |
180 | Title: "Başlık" | 351 | # no_client: 'No client yet.' |
181 | Is public: "Herkes tarafından erişime açık olsun mu?" | 352 | # remove: |
353 | # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !' | ||
354 | # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag." | ||
355 | # action: 'Remove this client' | ||
356 | # client: | ||
357 | # page_title: 'Developer > New client' | ||
358 | # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' | ||
359 | # form: | ||
360 | # redirect_uris_label: 'Redirect URIs' | ||
361 | # save_label: 'Create a new client' | ||
362 | # action_back: 'Back' | ||
363 | # client_parameter: | ||
364 | # page_title: 'Developer > Client parameters' | ||
365 | # page_description: 'Here are your client parameters.' | ||
366 | # field_id: 'Client ID' | ||
367 | # field_secret: 'Client secret' | ||
368 | # back: 'Back' | ||
369 | # read_howto: 'Read the howto "Create my first application"' | ||
370 | # howto: | ||
371 | # page_title: 'Developer > How to create my first application' | ||
372 | # description: | ||
373 | # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.' | ||
374 | # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.' | ||
375 | # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.' | ||
376 | # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):' | ||
377 | # paragraph_5: 'The API will return a response like this:' | ||
378 | # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:' | ||
379 | # paragraph_7: 'This call will return all the entries for your user.' | ||
380 | # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' | ||
381 | # back: 'Back' | ||
182 | 382 | ||
183 | # Import | 383 | validator: |
184 | Import: "İçe Aktar" | 384 | # password_must_match: 'The password fields must match.' |
185 | "Import > Pocket": "İçe Aktar > Pocket" | 385 | # password_too_short: 'Password should by at least 8 chars long' |
186 | "Import > Wallabag v1": "İçe Aktar > Wallabag v1" | 386 | # password_wrong_value: 'Wrong value for your current password' |
187 | Welcome to wallabag importer. Please select your previous service that you want to migrate.: "wallabag içe aktarma aracına hoşgeldiniz. Lütfen içe aktarmak istediğiiz önceki servisinizi seçin." | 387 | # item_per_page_too_high: 'This will certainly kill the app' |
188 | "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.": "Bu araç tüm Pocket verinizi içe aktarır. Pocket içeriklerin getirilmesine izin vermez, okunabilen içerikler wallabag tarafından yeniden getirilir." | 388 | # rss_limit_too_hight: 'This will certainly kill the app' |
189 | "This importer will import all your wallabag v1 articles. On your config page, click on \"JSON export\" in the \"Export your wallabag data\" section. You will have a \"wallabag-export-1-xxxx-xx-xx.json\" file.": "Bu araç wallabag v1 üzerindeki tüm makalelerinizi içe aktarır. Yapılandırma sayfasında, \"Export your wallabag data\" sekmesinden \"JSON export\" adımını izleyin. Bu adım size \"wallabag-export-1-xxxx-xx-xx.json\" isimli bir dosya verecektir." | ||
190 | "You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.": "Pocket hesabınızda verilerinizi içe aktarabilmemiz için öncelikle aşağıdaki butona tıklayın. Daha sonra, getpocket.com üzerindeki uygulamamıza gereken izinleri verin. Hepsi bu kadar!" | ||
191 | Connect to Pocket and import data: "Pocket'a bağlanın ve verilerinizi içe aktarın" | ||
192 | Please select your wallabag export and click on the below button to upload and import it.: "Aşağıdaki butona tıklayarak wallabag v1 tarafından dışa aktarılmış dosyanızı yükleyin." | ||
193 | File: "Dosya" | ||
194 | Upload file: "Dosyayı yükle" | ||
195 | Import contents: "İçerikleri içe aktar" | ||
196 | 389 | ||
197 | # Quickstart | 390 | flashes: |
198 | Welcome to wallabag!: "wallabag" | 391 | config: |
199 | Quickstart: "Hızlı başlangıç" | 392 | notice: |
200 | We'll accompany you to visit wallabag and show you some features which can interess you.: "wallabag kurduğunuz için teşekkür ederiz. Bu sayfada biz size eşlik edecek ve ilginizi çekecek birkaç özellik göstereceğim." | 393 | config_saved: 'Yapılandırma ayarları kaydedildi. Bazı yapılandırmalar tekrar giriş yaptığınızda aktif olacaktır.' |
201 | Follow us!: "Bizi takip edin!" | 394 | password_updated: 'Şifre güncellendi' |
202 | Configure the application: "Uygulamayı Yapılandırma" | 395 | password_not_updated_demo: "In demonstration mode, you can't change password for this user." |
203 | Change language and design: "Dili ve tasarımı değiştirme" | 396 | user_updated: 'Bilgiler güncellendi' |
204 | Enable RSS feeds: "RSS akışını aktifleştirme" | 397 | rss_updated: 'RSS bilgiler güncellendi' |
205 | First steps: "İlk adım" | 398 | tagging_rules_updated: 'Tagging rules updated' |
206 | Save your first article: "İlk makalenizi kaydedin" | 399 | tagging_rules_deleted: 'Tagging rule deleted' |
207 | And classify it!: "Ve bunu sınıflandırın!" | 400 | user_added: 'User "%username%" added' |
208 | Migrate from an existing service: "Varolan servislerden veri aktarma" | 401 | rss_token_updated: 'RSS token updated' |
209 | You're using an other service? We'll help you to retrieve your data on wallabag.: "Kullanmakta olduğunuz farklı bir hizmet mi var? Biz size yardımcı olacak ve verilerinizi wallabag'e aktarmanıza yardımcı olacağız." | 402 | entry: |
210 | Migrate from Pocket: "Pocket üzerindeki verilerinizi wallabag'e aktarın" | 403 | notice: |
211 | Migrate from wallabag v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" | 404 | entry_already_saved: 'Entry already saved on %date%' |
212 | Full documentation: "Dokümantasyon" | 405 | entry_saved: 'Makale kaydedildi' |
213 | Convert your articles into ePUB or PDF: "Makalelerinizi ePUB ya da PDF formatına çevirme" | 406 | # entry_updated: 'Entry updated' |
214 | See how you can look for an article by using search engine and filters: "Makaleleri görüntülemek için arama motorlarını ve filteri kullanma" | 407 | entry_reloaded: 'Makale içeriği yenilendi' |
215 | And so many other articles!: "Ve daha fazlası!" | 408 | # entry_reload_failed: 'Failed to reload entry' |
216 | Support: "Destek" | 409 | entry_archived: 'Makale arşivlendi' |
217 | Social: "Sosyal" | 410 | entry_unarchived: 'Makale arşivden çıkartıldı' |
218 | If you need some help, we are here for you.: "Eğer yardıma ihtiyacınız varsa, biz her daim senin için burada olacağız." | 411 | entry_starred: 'Makale favorilere eklendi' |
219 | On GitHub: "GitHub" | 412 | entry_unstarred: 'Makale favorilerden çıkartıldı' |
220 | By email: "E-posta" | 413 | entry_deleted: 'Makale silindi' |
221 | On Gitter: "Gitter" | 414 | tag: |
222 | Export: "Dışa Aktar" | 415 | notice: |
223 | "http://website": "http://internet-sitesi" | 416 | tag_added: 'Etiket eklendi' |
224 | Take wallabag with you: "wallabag her an seninle" | 417 | import: |
225 | about: "hakkımızda" | 418 | notice: |
226 | powered by: "powered by" | 419 | # failed: 'Import failed, please try again.' |
420 | # failed_on_file: 'Error while processing import. Please verify your import file.' | ||
421 | # summary: 'Import summary: %imported% imported, %skipped% already saved.' | ||
422 | developer: | ||
423 | notice: | ||
424 | # client_created: 'New client created.' | ||
425 | # client_deleted: 'Client deleted' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml deleted file mode 100644 index 196f1ade..00000000 --- a/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | # Config screen | ||
2 | The password fields must match: 'De indtastede adgangskoder skal være ens' | ||
3 | Password should by at least 8 chars long: 'Adgangskoden skal være mindst 8 tegn' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.es.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.es.yml deleted file mode 100644 index 5c0b6df3..00000000 --- a/src/Wallabag/CoreBundle/Resources/translations/validators.es.yml +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | # Config screen | ||
2 | The password fields must match: 'Las contraseñas no coinciden' | ||
3 | Password should by at least 8 chars long: 'La contraseña debe tener al menos 8 carácteres' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.fa.yml deleted file mode 100644 index fe63af76..00000000 --- a/src/Wallabag/CoreBundle/Resources/translations/validators.fa.yml +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | # Config screen | ||
2 | The password fields must match: 'رمزها باید یکی باشند' | ||
3 | Password should by at least 8 chars long: 'رمز شما باید ۸ حرف یا بیشتر باشد' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.fr.yml deleted file mode 100644 index 40513f2a..00000000 --- a/src/Wallabag/CoreBundle/Resources/translations/validators.fr.yml +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | # Config screen | ||
2 | The password fields must match: 'Les deux mots de passe doivent être les mêmes' | ||
3 | Password should by at least 8 chars long: 'Le mot de passe doit contenir au moins 8 caractères' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.pl.yml deleted file mode 100644 index f3cde461..00000000 --- a/src/Wallabag/CoreBundle/Resources/translations/validators.pl.yml +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | # Config screen | ||
2 | The password fields must match: 'Hasło w polach musi być takie same ' | ||
3 | Password should by at least 8 chars long: 'Hasło powinno mieć minimum 8 znaków długości' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.ro.yml deleted file mode 100644 index d6d4dfcc..00000000 --- a/src/Wallabag/CoreBundle/Resources/translations/validators.ro.yml +++ /dev/null | |||
@@ -1,3 +0,0 @@ | |||
1 | # Config screen | ||
2 | The password fields must match: 'Câmpurile destinate parolelor trebuie să se potrivească' | ||
3 | Password should by at least 8 chars long: 'Parola ar trebui să conțină cel puțin 8 caractere' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/base.html.twig b/src/Wallabag/CoreBundle/Resources/views/base.html.twig index dacdb9ca..f024b633 100644 --- a/src/Wallabag/CoreBundle/Resources/views/base.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/base.html.twig | |||
@@ -70,10 +70,6 @@ | |||
70 | 70 | ||
71 | {% block footer %}{% endblock %} | 71 | {% block footer %}{% endblock %} |
72 | 72 | ||
73 | <div id="warning_message"> | ||
74 | You're trying wallabag v2, which is in beta version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new one if necessary</a>. | ||
75 | </div> | ||
76 | |||
77 | {% if craue_setting('piwik_enabled') %} | 73 | {% if craue_setting('piwik_enabled') %} |
78 | {{ piwik(craue_setting('piwik_host'), craue_setting('piwik_site_id')) }} | 74 | {{ piwik(craue_setting('piwik_host'), craue_setting('piwik_site_id')) }} |
79 | {% endif %} | 75 | {% endif %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig index 54faa788..0798962c 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig | |||
@@ -1,9 +1,9 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Config{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'config.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <h2>{% trans %}Wallabag configuration{% endtrans %}</h2> | 6 | <h2>{{ 'config.tab_menu.settings'|trans }}</h2> |
7 | 7 | ||
8 | {{ form_start(form.config) }} | 8 | {{ form_start(form.config) }} |
9 | {{ form_errors(form.config) }} | 9 | {{ form_errors(form.config) }} |
@@ -29,7 +29,10 @@ | |||
29 | {{ form_label(form.config.reading_speed) }} | 29 | {{ form_label(form.config.reading_speed) }} |
30 | {{ form_errors(form.config.reading_speed) }} | 30 | {{ form_errors(form.config.reading_speed) }} |
31 | {{ form_widget(form.config.reading_speed) }} | 31 | {{ form_widget(form.config.reading_speed) }} |
32 | <p>{% trans %}You can use online tools to estimate your reading speed{% endtrans %} (<a href="http://www.myreadspeed.com/calculate/">{% trans %}like this one{%endtrans%}</a>).</p> | 32 | <p> |
33 | {{ 'config.form_settings.reading_speed.help_message'|trans }} | ||
34 | <a href="http://www.myreadspeed.com/calculate/">myreadspeed</a> | ||
35 | </p> | ||
33 | </div> | 36 | </div> |
34 | </fieldset> | 37 | </fieldset> |
35 | 38 | ||
@@ -44,13 +47,13 @@ | |||
44 | {{ form_rest(form.config) }} | 47 | {{ form_rest(form.config) }} |
45 | </form> | 48 | </form> |
46 | 49 | ||
47 | <h2>{% trans %}RSS configuration{% endtrans %}</h2> | 50 | <h2>{{ 'config.tab_menu.rss'|trans }}</h2> |
48 | 51 | ||
49 | {{ form_start(form.rss) }} | 52 | {{ form_start(form.rss) }} |
50 | {{ form_errors(form.rss) }} | 53 | {{ form_errors(form.rss) }} |
51 | 54 | ||
52 | <div class="row"> | 55 | <div class="row"> |
53 | {% trans %}RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader.{% endtrans %} | 56 | {{ 'config.form_rss.description'|trans }} |
54 | </div> | 57 | </div> |
55 | 58 | ||
56 | <fieldset class="w500p inline"> | 59 | <fieldset class="w500p inline"> |
@@ -59,27 +62,31 @@ | |||
59 | {% if rss.token %} | 62 | {% if rss.token %} |
60 | {{ rss.token }} | 63 | {{ rss.token }} |
61 | {% else %} | 64 | {% else %} |
62 | <em>No token</em> | 65 | <em>{{ 'config.form_rss.no_token'|trans }}</em> |
63 | {% endif %} | 66 | {% endif %} |
64 | – | 67 | – |
65 | <a href="{{ path('generate_token') }}">Regenerate ?</a> | 68 | <a href="{{ path('generate_token') }}"> |
69 | {% if rss.token %} | ||
70 | {{ 'config.form_rss.token_reset'|trans }} | ||
71 | {% else %} | ||
72 | {{ 'config.form_rss.token_create'|trans }} | ||
73 | {% endif %} | ||
74 | </a> | ||
66 | </div> | 75 | </div> |
67 | </fieldset> | 76 | </fieldset> |
68 | 77 | ||
78 | {% if rss.token %} | ||
69 | <fieldset class="w500p inline"> | 79 | <fieldset class="w500p inline"> |
70 | <div class="row"> | 80 | <div class="row"> |
71 | <label>Rss links:</label> | 81 | <label>{{ 'config.form_rss.rss_links'|trans }}</label> |
72 | {% if rss.token %} | 82 | <ul> |
73 | <ul> | 83 | <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">unread</a></li> |
74 | <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">unread</a></li> | 84 | <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">fav</a></li> |
75 | <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">fav</a></li> | 85 | <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">archives</a></li> |
76 | <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">archives</a></li> | 86 | </ul> |
77 | </ul> | ||
78 | {% else %} | ||
79 | <strong>You need to generate a token first.</strong> | ||
80 | {% endif %} | ||
81 | </div> | 87 | </div> |
82 | </fieldset> | 88 | </fieldset> |
89 | {% endif %} | ||
83 | 90 | ||
84 | <fieldset class="w500p inline"> | 91 | <fieldset class="w500p inline"> |
85 | <div class="row"> | 92 | <div class="row"> |
@@ -92,7 +99,7 @@ | |||
92 | {{ form_rest(form.rss) }} | 99 | {{ form_rest(form.rss) }} |
93 | </form> | 100 | </form> |
94 | 101 | ||
95 | <h2>{% trans %}User information{% endtrans %}</h2> | 102 | <h2>{{ 'config.tab_menu.user_info'|trans }}</h2> |
96 | 103 | ||
97 | {{ form_start(form.user) }} | 104 | {{ form_start(form.user) }} |
98 | {{ form_errors(form.user) }} | 105 | {{ form_errors(form.user) }} |
@@ -115,7 +122,7 @@ | |||
115 | 122 | ||
116 | {% if twofactor_auth %} | 123 | {% if twofactor_auth %} |
117 | <div class="row"> | 124 | <div class="row"> |
118 | {% trans %}Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion{% endtrans %} | 125 | {{ 'config.form_user.two_factor_description'|trans }} |
119 | </div> | 126 | </div> |
120 | 127 | ||
121 | <fieldset class="w500p inline"> | 128 | <fieldset class="w500p inline"> |
@@ -130,7 +137,7 @@ | |||
130 | {{ form_rest(form.user) }} | 137 | {{ form_rest(form.user) }} |
131 | </form> | 138 | </form> |
132 | 139 | ||
133 | <h2>{% trans %}Change your password{% endtrans %}</h2> | 140 | <h2>{{ 'config.tab_menu.password'|trans }}</h2> |
134 | 141 | ||
135 | {{ form_start(form.pwd) }} | 142 | {{ form_start(form.pwd) }} |
136 | {{ form_errors(form.pwd) }} | 143 | {{ form_errors(form.pwd) }} |
@@ -162,18 +169,21 @@ | |||
162 | {{ form_rest(form.pwd) }} | 169 | {{ form_rest(form.pwd) }} |
163 | </form> | 170 | </form> |
164 | 171 | ||
165 | <h2>{% trans %}Tagging rules{% endtrans %}</h2> | 172 | <h2>{{ 'config.tab_menu.rules'|trans }}</h2> |
166 | 173 | ||
167 | <ul> | 174 | <ul> |
168 | {% for tagging_rule in app.user.config.taggingRules %} | 175 | {% for tagging_rule in app.user.config.taggingRules %} |
169 | <li> | 176 | <li> |
170 | if « {{ tagging_rule.rule }} » then tag as « {{ tagging_rule.tags|join(', ') }} » | 177 | {{ 'config.form_rules.if_label'|trans }} |
171 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{% trans %}Delete{% endtrans %}" class="tool delete icon-trash icon"></a> | 178 | « {{ tagging_rule.rule }} » |
179 | {{ 'config.form_rules.then_tag_as_label'|trans }} | ||
180 | « {{ tagging_rule.tags|join(', ') }} » | ||
181 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}" class="tool delete icon-trash icon"></a> | ||
172 | </li> | 182 | </li> |
173 | {% endfor %} | 183 | {% endfor %} |
174 | </ul> | 184 | </ul> |
175 | 185 | ||
176 | {{ form_start(form.new_tagging_rule) }} | 186 | {{ form_start(form.new_tagging_rule) }} |
177 | {{ form_errors(form.new_tagging_rule) }} | 187 | {{ form_errors(form.new_tagging_rule) }} |
178 | 188 | ||
179 | <fieldset class="w500p inline"> | 189 | <fieldset class="w500p inline"> |
@@ -195,8 +205,93 @@ | |||
195 | {{ form_rest(form.new_tagging_rule) }} | 205 | {{ form_rest(form.new_tagging_rule) }} |
196 | </form> | 206 | </form> |
197 | 207 | ||
208 | <div class="row"> | ||
209 | <div class="input-field col s12"> | ||
210 | <h3>{{ 'config.form_rules.faq.title'|trans }}</h3> | ||
211 | |||
212 | <h4>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h4> | ||
213 | <p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p> | ||
214 | |||
215 | <h4>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h4> | ||
216 | <p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p> | ||
217 | |||
218 | <h4>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h4> | ||
219 | <p class="help"> | ||
220 | {{ 'config.form_rules.faq.variables_available_description'|trans }} | ||
221 | </p> | ||
222 | |||
223 | <table class="bordered"> | ||
224 | <thead> | ||
225 | <tr> | ||
226 | <th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th> | ||
227 | <th>{{ 'config.form_rules.faq.meaning'|trans }}</th> | ||
228 | <th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th> | ||
229 | <th>{{ 'config.form_rules.faq.meaning'|trans }}</th> | ||
230 | </tr> | ||
231 | </thead> | ||
232 | |||
233 | <tbody> | ||
234 | <tr> | ||
235 | <td>title</td> | ||
236 | <td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td> | ||
237 | <td><=</td> | ||
238 | <td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td> | ||
239 | </tr> | ||
240 | <tr> | ||
241 | <td>url</td> | ||
242 | <td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td> | ||
243 | <td><</td> | ||
244 | <td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td> | ||
245 | </tr> | ||
246 | <tr> | ||
247 | <td>isArchived</td> | ||
248 | <td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td> | ||
249 | <td>=></td> | ||
250 | <td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td> | ||
251 | </tr> | ||
252 | <tr> | ||
253 | <td>isStarred</td> | ||
254 | <td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td> | ||
255 | <td>></td> | ||
256 | <td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td> | ||
257 | </tr> | ||
258 | <tr> | ||
259 | <td>content</td> | ||
260 | <td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td> | ||
261 | <td>=</td> | ||
262 | <td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td> | ||
263 | </tr> | ||
264 | <tr> | ||
265 | <td>language</td> | ||
266 | <td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td> | ||
267 | <td>!=</td> | ||
268 | <td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td> | ||
269 | </tr> | ||
270 | <tr> | ||
271 | <td>mimetype</td> | ||
272 | <td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td> | ||
273 | <td>OR</td> | ||
274 | <td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td> | ||
275 | </tr> | ||
276 | <tr> | ||
277 | <td>readingTime</td> | ||
278 | <td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td> | ||
279 | <td>AND</td> | ||
280 | <td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td> | ||
281 | </tr> | ||
282 | <tr> | ||
283 | <td>domainName</td> | ||
284 | <td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td> | ||
285 | <td>matches</td> | ||
286 | <td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td> | ||
287 | </tr> | ||
288 | </tbody> | ||
289 | </table> | ||
290 | </div> | ||
291 | </div> | ||
292 | |||
198 | {% if is_granted('ROLE_SUPER_ADMIN') %} | 293 | {% if is_granted('ROLE_SUPER_ADMIN') %} |
199 | <h2>{% trans %}Add a user{% endtrans %}</h2> | 294 | <h2>{{ 'config.tab_menu.new_user'|trans }}</h2> |
200 | 295 | ||
201 | {{ form_start(form.new_user) }} | 296 | {{ form_start(form.new_user) }} |
202 | {{ form_errors(form.new_user) }} | 297 | {{ form_errors(form.new_user) }} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig index c9ce6d08..78a9dc04 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}New client{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.client.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <div class="row"> | 6 | <div class="row"> |
@@ -8,7 +8,7 @@ | |||
8 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
9 | 9 | ||
10 | <div class="row"> | 10 | <div class="row"> |
11 | <p>{% trans %}You are about to create a new client. Please fill the field below for the redirect URI of your application.{% endtrans %}</p> | 11 | <p>{{ 'developer.client.page_description'|trans }}</p> |
12 | {{ form_start(form) }} | 12 | {{ form_start(form) }} |
13 | {{ form_errors(form) }} | 13 | {{ form_errors(form) }} |
14 | 14 | ||
@@ -18,7 +18,7 @@ | |||
18 | {{ form_widget(form.redirect_uris) }} | 18 | {{ form_widget(form.redirect_uris) }} |
19 | </div> | 19 | </div> |
20 | 20 | ||
21 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> | 21 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client.action_back'|trans }}</a> |
22 | {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} | 22 | {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
23 | 23 | ||
24 | {{ form_rest(form) }} | 24 | {{ form_rest(form) }} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig index a214dfd0..b615fa3b 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig | |||
@@ -1,20 +1,20 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Client parameters{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.client_parameter.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <div class="row"> | 6 | <div class="row"> |
7 | <div class="col s12"> | 7 | <div class="col s12"> |
8 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
9 | <div class="row"> | 9 | <div class="row"> |
10 | <p>{% trans %}Here are your client parameters.{% endtrans %}</p> | 10 | <p>{{ 'developer.client_parameter.page_description'|trans }}</p> |
11 | <ul> | 11 | <ul> |
12 | <li>{% trans %}Client ID{% endtrans %}: <strong><pre>{{ client_id }}</pre></strong></li> | 12 | <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li> |
13 | <li>{% trans %}Client secret{% endtrans %}: <strong><pre>{{ client_secret }}</pre></strong></li> | 13 | <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li> |
14 | </ul> | 14 | </ul> |
15 | 15 | ||
16 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> | 16 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client_parameter.back'|trans }}</a> |
17 | <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{% trans %}Read the howto "Create my first application"{% endtrans %}</a> | 17 | <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{{ 'developer.client_parameter.read_howto'|trans }}</a> |
18 | </div> | 18 | </div> |
19 | </div> | 19 | </div> |
20 | </div> | 20 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig index 382e6311..acbc2c88 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}How to create my first application{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.howto.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block css %} | 5 | {% block css %} |
6 | {{ parent() }} | 6 | {{ parent() }} |
@@ -13,10 +13,10 @@ | |||
13 | <div class="card-panel settings"> | 13 | <div class="card-panel settings"> |
14 | 14 | ||
15 | <div class="row"> | 15 | <div class="row"> |
16 | <p>{% trans %}The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.{% endtrans %}</p> | 16 | <p>{{ 'developer.howto.description.paragraph_1'|trans|raw }}</p> |
17 | <p>{% trans %}You need a token to communicate between your 3rd application and wallabag API.{% endtrans %}</p> | 17 | <p>{{ 'developer.howto.description.paragraph_2'|trans }}</p> |
18 | <p>{% trans with {'%link%': path('developer_create_client')} %}To create this token, you need <a href="%link%">to create a new client</a>.{% endtrans %}</p> | 18 | <p>{{ 'developer.howto.description.paragraph_3'|trans({'%link%': path('developer_create_client')})|raw }}</p> |
19 | <p>{% trans %}Now, create your token (replace client_id, client_secret, username and password with the good values):{% endtrans %}</p> | 19 | <p>{{ 'developer.howto.description.paragraph_4'|trans }}</p> |
20 | <p> | 20 | <p> |
21 | <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \ | 21 | <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \ |
22 | grant_type=password \ | 22 | grant_type=password \ |
@@ -25,7 +25,7 @@ | |||
25 | username=yourUsername \ | 25 | username=yourUsername \ |
26 | password=yourPassw0rd</code></pre> | 26 | password=yourPassw0rd</code></pre> |
27 | </p> | 27 | </p> |
28 | <p>{% trans %}The API will return a response like this:{% endtrans %}</p> | 28 | <p>{{ 'developer.howto.description.paragraph_5'|trans }}</p> |
29 | <p> | 29 | <p> |
30 | <pre><code class="language-bash">HTTP/1.1 200 OK | 30 | <pre><code class="language-bash">HTTP/1.1 200 OK |
31 | Cache-Control: no-store, private | 31 | Cache-Control: no-store, private |
@@ -45,14 +45,14 @@ X-Powered-By: PHP/5.5.9-1ubuntu4.13 | |||
45 | "token_type": "bearer" | 45 | "token_type": "bearer" |
46 | }</code></pre> | 46 | }</code></pre> |
47 | </p> | 47 | </p> |
48 | <p>{% trans %}The access_token is useful to do a call to the API endpoint. For example:{% endtrans %}</p> | 48 | <p>{{ 'developer.howto.description.paragraph_6'|trans }}</p> |
49 | <p> | 49 | <p> |
50 | <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \ | 50 | <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \ |
51 | "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre> | 51 | "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre> |
52 | </p> | 52 | </p> |
53 | <p>{% trans %}This call will return all the entries for your user.{% endtrans %}</p> | 53 | <p>{{ 'developer.howto.description.paragraph_7'|trans }}</p> |
54 | <p>{% trans with {'%link%': path('nelmio_api_doc_index')} %}If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.{% endtrans %}</p> | 54 | <p>{{ 'developer.howto.description.paragraph_8'|trans({'%link%': path('nelmio_api_doc_index')})|raw }}</p> |
55 | <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a></p> | 55 | <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.howto.back'|trans }}</a></p> |
56 | </div> | 56 | </div> |
57 | 57 | ||
58 | </div> | 58 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig index 2e7dbcab..7ff64ca6 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Developer{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <div class="row"> | 6 | <div class="row"> |
@@ -8,21 +8,22 @@ | |||
8 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
9 | 9 | ||
10 | <div class="row"> | 10 | <div class="row"> |
11 | <h3>{% trans %}Welcome to the wallabag API{% endtrans %}</h3> | 11 | <h3>{{ 'developer.welcome_message'|trans }}</h3> |
12 | 12 | ||
13 | <h4>{% trans %}Documentation{% endtrans %}</h4> | 13 | <h4>{{ 'developer.documentation'|trans }}</h4> |
14 | 14 | ||
15 | <ul> | 15 | <ul> |
16 | <li><a href="{{ path('developer_howto_firstapp') }}">{% trans %}How to create my first application{% endtrans %}</a></li> | 16 | <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li> |
17 | <li><a href="{{ path('nelmio_api_doc_index') }}">{% trans %}View full API documentation{% endtrans %}</a></li> | 17 | <li><a href="http://doc.wallabag.org/en/v2-documentation-api/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li> |
18 | <li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li> | ||
18 | </ul> | 19 | </ul> |
19 | 20 | ||
20 | <h4>{% trans %}Clients{% endtrans %}</h4> | 21 | <h4>{{ 'developer.clients.title'|trans }}</h4> |
21 | <ul> | 22 | <ul> |
22 | <li><a href="{{ path('developer_create_client') }}">{% trans %}Create a new client{% endtrans %}</a></li> | 23 | <li><a href="{{ path('developer_create_client') }}">{{ 'developer.clients.create_new'|trans }}</a></li> |
23 | </ul> | 24 | </ul> |
24 | 25 | ||
25 | <h4>{% trans %}Existing clients{% endtrans %}</h4> | 26 | <h4>{{ 'developer.existing_clients.title'|trans }}</h4> |
26 | {% if clients %} | 27 | {% if clients %} |
27 | <ul class="collapsible" data-collapsible="expandable"> | 28 | <ul class="collapsible" data-collapsible="expandable"> |
28 | {% for client in clients %} | 29 | {% for client in clients %} |
@@ -31,33 +32,33 @@ | |||
31 | <div class="collapsible-body"> | 32 | <div class="collapsible-body"> |
32 | <table class="striped"> | 33 | <table class="striped"> |
33 | <tr> | 34 | <tr> |
34 | <td>{% trans %}Client ID{% endtrans %}</td> | 35 | <td>{{ 'developer.existing_clients.field_id'|trans }}</td> |
35 | <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td> | 36 | <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td> |
36 | </tr> | 37 | </tr> |
37 | <tr> | 38 | <tr> |
38 | <td>{% trans %}Client secret{% endtrans %}</td> | 39 | <td>{{ 'developer.existing_clients.field_secret'|trans }}</td> |
39 | <td><strong><code>{{ client.secret }}</code></strong></td> | 40 | <td><strong><code>{{ client.secret }}</code></strong></td> |
40 | </tr> | 41 | </tr> |
41 | <tr> | 42 | <tr> |
42 | <td>{% trans %}Redirect URIs{% endtrans %}</td> | 43 | <td>{{ 'developer.existing_clients.field_uris'|trans }}</td> |
43 | <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td> | 44 | <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td> |
44 | </tr> | 45 | </tr> |
45 | <tr> | 46 | <tr> |
46 | <td>{% trans %}Grant type allowed{% endtrans %}</td> | 47 | <td>{{ 'developer.existing_clients.field_grant_types'|trans }}</td> |
47 | <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td> | 48 | <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td> |
48 | </tr> | 49 | </tr> |
49 | </table> | 50 | </table> |
50 | <p> | 51 | <p> |
51 | {% trans %}You have the ability to remove this client. This action is IRREVERSIBLE !{% endtrans %}<br/> | 52 | {{ 'developer.remove.warn_message_1'|trans }}<br/> |
52 | {% trans %}If you remove it, every app configured with that client won't be able to auth on your wallabag.{% endtrans %}<br/> | 53 | {{ 'developer.remove.warn_message_2'|trans }}<br/> |
53 | <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{% trans %}Remove this client{% endtrans %}</a> | 54 | <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans }}</a> |
54 | </p> | 55 | </p> |
55 | </div> | 56 | </div> |
56 | </li> | 57 | </li> |
57 | {% endfor %} | 58 | {% endfor %} |
58 | </ul> | 59 | </ul> |
59 | {% else %} | 60 | {% else %} |
60 | {% trans %}No client yet.{% endtrans %} | 61 | {{ 'developer.existing_clients.no_client'|trans }} |
61 | {% endif %} | 62 | {% endif %} |
62 | </div> | 63 | </div> |
63 | 64 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig index 0d4d5ad2..e974fc69 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Edit an entry{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'entry.edit.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | {{ form(form) }} | 6 | {{ form(form) }} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig index 7271bdaa..22f456da 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig | |||
@@ -1,13 +1,13 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title "Unread" %} | 3 | {% block title %}{{ 'entry.page_titles.unread'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | {% block pager %} | 6 | {% block pager %} |
7 | <div class="results"> | 7 | <div class="results"> |
8 | <div class="nb-results">{{ entries.count }} {% trans %}entries{% endtrans %}</div> | 8 | <div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div> |
9 | <div class="pagination"> | 9 | <div class="pagination"> |
10 | <a href="#" id="filter">{% trans %}Filter{% endtrans %}</a> | 10 | <a href="#" id="filter">{{ 'entry.filters.title'|trans }}</a> |
11 | {% if entries is not empty %} | 11 | {% if entries is not empty %} |
12 | – | 12 | – |
13 | {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %} | 13 | {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %} |
@@ -20,68 +20,62 @@ | |||
20 | </div> | 20 | </div> |
21 | {% endblock %} | 21 | {% endblock %} |
22 | 22 | ||
23 | {% if entries is empty %} | 23 | {% for entry in entries %} |
24 | <div class="messages warning"><p>{% trans %}No articles found.{% endtrans %}</p></div> | 24 | <div id="entry-{{ entry.id|e }}" class="entry"> |
25 | {% else %} | 25 | <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2> |
26 | {% for entry in entries %} | 26 | |
27 | <div id="entry-{{ entry.id|e }}" class="entry"> | 27 | {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} |
28 | <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2> | 28 | <div class="estimatedTime"> |
29 | {% if entry.readingTime > 0 %} | 29 | <span class="tool reading-time"> |
30 | <div class="estimatedTime"> | 30 | {% if readingTime > 0 %} |
31 | <span class="tool reading-time"> | 31 | {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }} |
32 | {% trans with {'%readingTime%': entry.readingTime } %}estimated reading time: %readingTime% min{% endtrans %} | 32 | {% else %} |
33 | </span> | 33 | {{ 'entry.list.reading_time_less_one_minute'|trans|raw }} |
34 | </div> | 34 | {% endif %} |
35 | {% else %} | 35 | </span> |
36 | <div class="estimatedTime"> | ||
37 | <span class="tool reading-time"> | ||
38 | {% trans with {'%inferior%': '<small class="inferieur"><</small>'} %}estimated reading time: %inferior% 1 min{% endtrans %} | ||
39 | </span> | ||
40 | </div> | ||
41 | {% endif %} | ||
42 | |||
43 | <ul class="tools links"> | ||
44 | <li><a title="{% trans %}Toggle mark as read{% endtrans %}" class="tool icon-check icon {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% trans %}Toggle mark as read{% endtrans %}</span></a></li> | ||
45 | <li><a title="{% trans %}toggle favorite{% endtrans %}" class="tool icon-star icon {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{% trans %}toggle favorite{% endtrans %}</span></a></li> | ||
46 | <li><a title="{% trans %}delete{% endtrans %}" class="tool delete icon-trash icon" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{% trans %}delete{% endtrans %}</span></a></li> | ||
47 | <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %} : {{ entry.title|e }}" class="tool link icon-link icon"><span>{{ entry.domainName|removeWww }}</span></a></li> | ||
48 | </ul> | ||
49 | {% if entry.previewPicture is null %} | ||
50 | <p>{{ entry.content|striptags|slice(0, 300) }}…</p> | ||
51 | {% else %} | ||
52 | <img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /> | ||
53 | {% endif %} | ||
54 | </div> | 36 | </div> |
55 | {% endfor %} | 37 | |
56 | {% endif %} | 38 | <ul class="tools links"> |
39 | <li><a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool icon-check icon {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.toogle_as_read'|trans }}</span></a></li> | ||
40 | <li><a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool icon-star icon {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.toogle_as_star'|trans }}</span></a></li> | ||
41 | <li><a title="{{ 'entry.list.delete'|trans }}" class="tool delete icon-trash icon" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.delete'|trans }}</span></a></li> | ||
42 | <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon-link icon"><span>{{ entry.domainName|removeWww }}</span></a></li> | ||
43 | </ul> | ||
44 | {% if entry.previewPicture is null %} | ||
45 | <p>{{ entry.content|striptags|slice(0, 300) }}…</p> | ||
46 | {% else %} | ||
47 | <img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /> | ||
48 | {% endif %} | ||
49 | </div> | ||
50 | {% endfor %} | ||
57 | 51 | ||
58 | <aside id="filter-form" class=""> | 52 | <aside id="filter-form" class=""> |
59 | <form method="get" action="{{ path('all') }}"> | 53 | <form method="get" action="{{ path('all') }}"> |
60 | <h2>{% trans %}Filters{% endtrans %}</h2> | 54 | <h2>{{ 'entry.filters.title'|trans }}</h2> |
61 | <a href="javascript: void(null);" id="filter-form-close" class="close-button--popup close-button">×</a> | 55 | <a href="javascript: void(null);" id="filter-form-close" class="close-button--popup close-button">×</a> |
62 | 56 | ||
63 | <div id="filter-status" class="filter-group"> | 57 | <div id="filter-status" class="filter-group"> |
64 | <div class=""> | 58 | <div class=""> |
65 | <label>{% trans %}Status{% endtrans %}</label> | 59 | <label>{{ 'entry.filters.status_label'|trans }}</label> |
66 | </div> | 60 | </div> |
67 | <div class="input-field"> | 61 | <div class="input-field"> |
68 | {{ form_widget(form.isArchived) }} | 62 | {{ form_widget(form.isArchived) }} |
69 | <label for="entry_filter_isArchived">{% trans %}Archived{% endtrans %}</label> | 63 | {{ form_label(form.isArchived) }} |
70 | </div> | 64 | </div> |
71 | 65 | ||
72 | <div class="input-field"> | 66 | <div class="input-field"> |
73 | {{ form_widget(form.isStarred) }} | 67 | {{ form_widget(form.isStarred) }} |
74 | <label for="entry_filter_isStarred">{% trans %}Starred{% endtrans %}</label> | 68 | {{ form_label(form.isStarred) }} |
75 | </div> | 69 | </div> |
76 | 70 | ||
77 | <div class="input-field"> | 71 | <div class="input-field"> |
78 | {{ form_widget(form.previewPicture) }} | 72 | {{ form_widget(form.previewPicture) }} |
79 | <label for="entry_filter_previewPicture">{% trans %}Has a preview picture{% endtrans %}</label> | 73 | {{ form_label(form.previewPicture) }} |
80 | </div> | 74 | </div> |
81 | </div> | 75 | </div> |
82 | 76 | ||
83 | <div id="filter-language" class="filter-group"> | 77 | <div id="filter-language" class="filter-group"> |
84 | <label for="entry_filter_language">{% trans %}Language{% endtrans %}</label> | 78 | {{ form_label(form.language) }} |
85 | <div class="input-field "> | 79 | <div class="input-field "> |
86 | {{ form_widget(form.language) }} | 80 | {{ form_widget(form.language) }} |
87 | </div> | 81 | </div> |
@@ -89,20 +83,20 @@ | |||
89 | 83 | ||
90 | <div id="filter-reading-time" class="filter-group"> | 84 | <div id="filter-reading-time" class="filter-group"> |
91 | <div class=""> | 85 | <div class=""> |
92 | <label>{% trans %}Reading time in minutes{% endtrans %}</label> | 86 | {{ form_label(form.readingTime) }} |
93 | </div> | 87 | </div> |
94 | <div class="input-field "> | 88 | <div class="input-field "> |
95 | <label for="entry_filter_readingTime_left_number">{% trans %}from{% endtrans %}</label> | 89 | <label for="entry_filter_readingTime_left_number">{{ 'entry.filters.reading_time.from'|trans }}</label> |
96 | {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }} | 90 | {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }} |
97 | </div> | 91 | </div> |
98 | <div class="input-field "> | 92 | <div class="input-field "> |
99 | <label for="entry_filter_readingTime_right_number">{% trans %}to{% endtrans %}</label> | 93 | <label for="entry_filter_readingTime_right_number">{{ 'entry.filters.reading_time.to'|trans }}</label> |
100 | {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }} | 94 | {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }} |
101 | </div> | 95 | </div> |
102 | </div> | 96 | </div> |
103 | 97 | ||
104 | <div id="filter-domain-name" class="filter-group"> | 98 | <div id="filter-domain-name" class="filter-group"> |
105 | <label for="entry_filter_domainName">{% trans %}Domain name{% endtrans %}</label> | 99 | {{ form_label(form.domainName) }} |
106 | <div class="input-field "> | 100 | <div class="input-field "> |
107 | {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com'} }) }} | 101 | {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com'} }) }} |
108 | </div> | 102 | </div> |
@@ -110,26 +104,25 @@ | |||
110 | 104 | ||
111 | <div id="filter-creation-date" class="filter-group"> | 105 | <div id="filter-creation-date" class="filter-group"> |
112 | <div class=""> | 106 | <div class=""> |
113 | <label>{% trans %}Creation date{% endtrans %}</label> | 107 | {{ form_label(form.createdAt) }} |
114 | </div> | 108 | </div> |
115 | <div class="input-field "> | 109 | <div class="input-field "> |
116 | <label for="entry_filter_createdAt_left_date" class="active">{% trans %}from{% endtrans %}</label> | 110 | <label for="entry_filter_createdAt_left_date" class="active">{{ 'entry.filters.created_at.from'|trans }}</label> |
117 | {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }} | 111 | {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }} |
118 | </div> | 112 | </div> |
119 | <div class="input-field "> | 113 | <div class="input-field "> |
120 | <label for="entry_filter_createdAt_right_date" class="active">{% trans %}to{% endtrans %}</label> | 114 | <label for="entry_filter_createdAt_right_date" class="active">{{ 'entry.filters.created_at.to'|trans }}</label> |
121 | {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }} | 115 | {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }} |
122 | </div> | 116 | </div> |
123 | </div> | 117 | </div> |
124 | <div id="filter-buttons" class="filter-group"> | ||
125 | 118 | ||
119 | <div id="filter-buttons" class="filter-group"> | ||
126 | <div class=""> | 120 | <div class=""> |
127 | <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{% trans %}Clear{% endtrans %}</a> | 121 | <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{{ 'entry.filters.action.clear'|trans }}</a> |
128 | </div> | 122 | </div> |
129 | 123 | ||
130 | <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{% trans %}Filters{% endtrans %}</button> | 124 | <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{{ 'entry.filters.action.filter'|trans }}</button> |
131 | 125 | </div> | |
132 | </div> | ||
133 | </form> | 126 | </form> |
134 | </aside> | 127 | </aside> |
135 | 128 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig index a39a8dc3..98f7194c 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig | |||
@@ -18,9 +18,9 @@ | |||
18 | <description> | 18 | <description> |
19 | <![CDATA[ | 19 | <![CDATA[ |
20 | {%- if entry.readingTime > 0 -%} | 20 | {%- if entry.readingTime > 0 -%} |
21 | {% trans %}estimated reading time :{% endtrans %} {{ entry.readingTime }} min | 21 | {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }} |
22 | {%- else -%} | 22 | {%- else -%} |
23 | {% trans %}estimated reading time :{% endtrans %} < 1 min | 23 | {{ 'entry.list.reading_time_less_one_minute'|trans|raw }} |
24 | {%- endif %} | 24 | {%- endif %} |
25 | 25 | ||
26 | {{ entry.content|raw -}} | 26 | {{ entry.content|raw -}} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig index 9323e787..3cda3949 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig | |||
@@ -5,32 +5,32 @@ | |||
5 | {% block content %} | 5 | {% block content %} |
6 | <div id="article"> | 6 | <div id="article"> |
7 | <header class="mbm"> | 7 | <header class="mbm"> |
8 | <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{% trans %}Edit title{% endtrans %}">✎</a></h1> | 8 | <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1> |
9 | </header> | 9 | </header> |
10 | 10 | ||
11 | <div id="article_toolbar"> | 11 | <div id="article_toolbar"> |
12 | <ul class="links"> | 12 | <ul class="links"> |
13 | <li class="topPosF"><a href="#top" title="{% trans %}Back to top{% endtrans %}" class="tool top icon icon-arrow-up-thick"><span>{% trans %}Back to top{% endtrans %}</span></a></li> | 13 | <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li> |
14 | <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li> | 14 | <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li> |
15 | <li><a title="{% trans %}Re-fetch content{% endtrans %}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{% trans %}Re-fetch content{% endtrans %}</span></a></li> | 15 | <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li> |
16 | <li><a title="{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}</span></a></li> | 16 | <li><a title="{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span></a></li> |
17 | <li><a title="{% trans %}Favorite{% endtrans %}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{% trans %}Toggle favorite{% endtrans %}</span></a></li> | 17 | <li><a title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span></a></li> |
18 | <li><a id="nav-btn-add-tag" title="{% trans %}Add a tag{% endtrans %}"><span>{% trans %}Tag{% endtrans %}</span></a></li> | 18 | <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li> |
19 | <li><a title="{% trans %}Delete{% endtrans %}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{% trans %}Delete{% endtrans %}</span></a></li> | 19 | <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li> |
20 | {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans %}Tweet{% endtrans %}"><span>{% trans %}Tweet{% endtrans %}</span></a></li>{% endif %} | 20 | {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %} |
21 | {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"><span>{% trans %}Email{% endtrans %}</span></a></li>{% endif %} | 21 | {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %} |
22 | {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans %}shaarli{% endtrans %}"><span>{% trans %}shaarli{% endtrans %}</span></a></li>{% endif %} | 22 | {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %} |
23 | {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}¬es=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans %}diaspora{% endtrans %}"><span>{% trans %}diaspora{% endtrans %}</span></a></li>{% endif %} | 23 | {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}¬es=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %} |
24 | {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans %}carrot{% endtrans %}"><span>Carrot</span></a></li>{% endif %} | 24 | {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %} |
25 | {% if craue_setting('show_printlink') %}<li><a title="{% trans %}Print{% endtrans %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans %}Print{% endtrans %}</span></a></li>{% endif %} | 25 | {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>{% endif %} |
26 | {% if craue_setting('export_epub') %}<li><a href="?epub&method=id&value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %} | 26 | {% if craue_setting('export_epub') %}<li><a href="?epub&method=id&value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %} |
27 | {% if craue_setting('export_mobi') %}<li><a href="?mobi&method=id&value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %} | 27 | {% if craue_setting('export_mobi') %}<li><a href="?mobi&method=id&value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %} |
28 | {% if craue_setting('export_pdf') %}<li><a href="?pdf&method=id&value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %} | 28 | {% if craue_setting('export_pdf') %}<li><a href="?pdf&method=id&value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %} |
29 | <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{% trans %}Does this article appear wrong?{% endtrans %}" class="tool bad-display icon icon-delete"><span>{% trans %}Does this article appear wrong?{% endtrans %}</span></a></li> | 29 | <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li> |
30 | </ul> | 30 | </ul> |
31 | </div> | 31 | </div> |
32 | {% set nbAnnotations = entry.annotations | length %} | 32 | {% set nbAnnotations = entry.annotations | length %} |
33 | <span class="tool link mdi-communication-comment"> {% transchoice nbAnnotations %}{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations{% endtranschoice %}</span> | 33 | <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> |
34 | <aside class="tags"> | 34 | <aside class="tags"> |
35 | {% for tag in entry.tags %} | 35 | {% for tag in entry.tags %} |
36 | <span class="mdi-action-label-outline">{{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i>✘</i></a> | 36 | <span class="mdi-action-label-outline">{{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i>✘</i></a> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig index 95ed0785..03768a3d 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Save new entry{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'entry.new.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} | 6 | {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig index fa0a9f53..8c129068 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig | |||
@@ -8,7 +8,7 @@ | |||
8 | {% endif %} | 8 | {% endif %} |
9 | 9 | ||
10 | {{ form_label(form.url) }} | 10 | {{ form_label(form.url) }} |
11 | {{ form_widget(form.url) }} | 11 | {{ form_widget(form.url, { 'attr': {'autocomplete': 'off', 'placeholder': 'entry.new.placeholder'} }) }} |
12 | 12 | ||
13 | <div class="hidden">{{ form_rest(form) }}</div> | 13 | {{ form_rest(form) }} |
14 | </form> | 14 | </form> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig index fdd12cf7..5687e48c 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig | |||
@@ -1,57 +1,56 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}About{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'about.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <h2>{% trans %}Who is behind wallabag{% endtrans %}</h2> | 6 | <h2>{{ 'about.top_menu.who_behind_wallabag'|trans }}</h2> |
7 | 7 | ||
8 | <dl> | 8 | <dl> |
9 | <dt>{% trans %}Developed by{% endtrans %}</dt> | 9 | <dt>{{ 'about.who_behind_wallabag.developped_by'|trans }}</dt> |
10 | <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://cdetc.fr">{% trans %}website{% endtrans %}</a></dd> | 10 | <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://www.loeuillet.org">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd> |
11 | <dd>Thomas Citharel — <a href="https://tcit.fr">{% trans %}website{% endtrans %}</a></dd> | 11 | <dd>Thomas Citharel — <a href="https://tcit.fr">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd> |
12 | <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{% trans %}website{% endtrans %}</a></dd> | 12 | <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd> |
13 | 13 | ||
14 | <dt>{% trans %}And many others contributors ♥{% endtrans %} <a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}on Github{% endtrans %}</a></dt> | 14 | <dt>{{ 'about.who_behind_wallabag.many_contributors'|trans|raw }}</dt> |
15 | 15 | ||
16 | <dt>{% trans %}Project website{% endtrans %}</dt> | 16 | <dt>{{ 'about.who_behind_wallabag.project_website'|trans }}</dt> |
17 | <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd> | 17 | <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd> |
18 | 18 | ||
19 | <dt>{% trans %}License{% endtrans %}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt> | 19 | <dt>{{ 'about.who_behind_wallabag.license'|trans }}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt> |
20 | 20 | ||
21 | <dt>{% trans %}Version{% endtrans %}: {{ version }}</dt> | 21 | <dt>{{ 'about.who_behind_wallabag.version'|trans }}: {{ version }}</dt> |
22 | </dl> | 22 | </dl> |
23 | 23 | ||
24 | <h2>{% trans %}Getting help{% endtrans %}</h2> | 24 | <h2>{{ 'about.top_menu.getting_help'|trans }}</h2> |
25 | 25 | ||
26 | <dl> | 26 | <dl> |
27 | <dt>{% trans %}Documentation{% endtrans %}</dt> | 27 | <dt>{{ 'about.getting_help.documentation'|trans }}</dt> |
28 | <dd><a href="https://doc.wallabag.org/en">english</a></dd> | 28 | <dd><a href="http://doc.wallabag.org/en/v2/">english</a></dd> |
29 | <dd><a href="https://doc.wallabag.org/fr">français</a></dd> | 29 | <dd><a href="http://doc.wallabag.org/fr/v2/">français</a></dd> |
30 | <dd><a href="https://doc.wallabag.org/de">deutsch</a></dd> | ||
31 | 30 | ||
32 | <dt>{% trans %}Bug reports{% endtrans %}</dt> | 31 | <dt>{{ 'about.getting_help.bug_reports'|trans }}</dt> |
33 | <dd><a href="https://support.wallabag.org">{% trans %}On our support website{% endtrans %}</a> {% trans %}or{% endtrans %} <a href="https://github.com/wallabag/wallabag/issues">{% trans %}on Github{% endtrans %}</a></dd> | 32 | <dd>{{ 'about.getting_help.support'|trans|raw }}</dd> |
34 | </dl> | 33 | </dl> |
35 | 34 | ||
36 | <h2>{% trans %}Helping wallabag{% endtrans %}</h2> | 35 | <h2>{{ 'about.top_menu.helping'|trans }}</h2> |
37 | 36 | ||
38 | <p>{% trans %}wallabag is free and opensource. You can help us:{% endtrans %}</p> | 37 | <p>{{ 'about.helping.description'|trans }}</p> |
39 | 38 | ||
40 | <dl> | 39 | <dl> |
41 | <dt>{% trans %}wallabag is free and opensource. You can help us:{% endtrans %}</dt> | 40 | <dt>{{ 'about.helping.description'|trans }}</dt> |
42 | <dd>by contributing to the project: <a href="https://github.com/wallabag/wallabag/issues/1254">an issue lists all our needs</a></dd> | 41 | <dd>{{ 'about.helping.by_contributing_2'|trans }} <a href="https://github.com/wallabag/wallabag/issues/1254">{{ 'about.helping.by_contributing'|trans }}</a></dd> |
43 | <dd><a href="{{ paypal_url }}">{% trans %}via Paypal{% endtrans %}</a></dd> | 42 | <dd><a href="{{ paypal_url }}">{{ 'about.helping.by_paypal'|trans }}</a></dd> |
44 | </dl> | 43 | </dl> |
45 | 44 | ||
46 | <h2>{% trans %}Contributors{% endtrans %}</h2> | 45 | <h2>{{ 'about.top_menu.contributors'|trans }}</h2> |
47 | <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}Thank you to contributors on wallabag web application{% endtrans %}</a></p> | 46 | <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{{ 'about.contributors.description'|trans }}</a></p> |
48 | 47 | ||
49 | <h2>{% trans %}Third-party libraries{% endtrans %}</h2> | 48 | <h2>{{ 'about.top_menu.third_party'|trans }}</h2> |
50 | <p>{% trans %}Here are the list of third-party libraries used in wallabag (with their licenses):{% endtrans %}</p> | 49 | <p>{{ 'about.third_party.description'|trans }}</p> |
51 | <table> | 50 | <table class="striped"> |
52 | <tr> | 51 | <tr> |
53 | <th>{% trans %}Package{% endtrans %}</th> | 52 | <th>{{ 'about.third_party.package'|trans }}</th> |
54 | <th>{% trans %}License{% endtrans %}</th> | 53 | <th>{{ 'about.third_party.license'|trans }}</th> |
55 | </tr> | 54 | </tr> |
56 | <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr> | 55 | <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr> |
57 | <tr><td>CraueConfigBundle</td><td>MIT</td></tr> | 56 | <tr><td>CraueConfigBundle</td><td>MIT</td></tr> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig index e32264f3..eab092c7 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig | |||
@@ -1,28 +1,28 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Howto{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'howto.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <h2>{% trans %}Howto{% endtrans %}</h2> | 6 | <h2>{{ 'howto.page_title'|trans }}</h2> |
7 | 7 | ||
8 | <p>{% trans %}There are several ways to save an article:{% endtrans %}</p> | 8 | <p>{{ 'howto.page_description'|trans }}</p> |
9 | <ul> | 9 | <ul> |
10 | <li><a href="{{ path('new') }}">{% trans %}Thanks to this form{% endtrans %}</a></li> | 10 | <li><a href="{{ path('new') }}">{{ 'howto.form.description'|trans }}</a></li> |
11 | </ul> | 11 | </ul> |
12 | <h3>{% trans %}Browser Addons{% endtrans %}</h3> | 12 | <h3>{{ 'howto.top_menu.browser_addons'|trans }}</h3> |
13 | <ul> | 13 | <ul> |
14 | <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans %}Standard Firefox Add-On{% endtrans %}</a></li> | 14 | <li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li> |
15 | <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans %}Chrome Extension{% endtrans %}</a></li> | 15 | <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li> |
16 | </ul> | 16 | </ul> |
17 | <h3>{% trans %}Mobile Apps{% endtrans %}</h3> | 17 | <h3>{{ 'howto.top_menu.mobile_apps'|trans }}</h3> |
18 | <ul> | 18 | <ul> |
19 | <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">via F-Droid</a> {% trans %} or {% endtrans %} <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">via Google Play</a></li> | 19 | <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li> |
20 | <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{% trans %}download the application{% endtrans %}</a></li> | 20 | <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li> |
21 | <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{% trans %}download the application{% endtrans %}</a></li> | 21 | <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li> |
22 | </ul> | 22 | </ul> |
23 | <h3>{% trans %}Bookmarklet{% endtrans %}</h3> | 23 | <h3>{{ 'howto.top_menu.bookmarklet'|trans }}</h3> |
24 | <p> | 24 | <p> |
25 | {% trans %}Drag & drop this link to your bookmarks bar:{% endtrans %} | 25 | {{ 'howto.bookmarklet.description'|trans }} |
26 | {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} | 26 | {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} |
27 | 27 | ||
28 | {% endblock %} | 28 | {% endblock %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig index 6b008fca..5f65ce15 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig | |||
@@ -1,55 +1,66 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Quickstart{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | 6 | ||
7 | <h3>{% trans %}Welcome to wallabag!{% endtrans %}</h3> | 7 | <h3>{{ 'quickstart.intro.title'|trans }}</h3> |
8 | <p>{% trans %}We'll accompany you to visit wallabag and show you some features which can interess you.{% endtrans %}</p> | 8 | <p>{{ 'quickstart.intro.paragraph_1'|trans }}</p> |
9 | <p>{% trans %}Follow us!{% endtrans %}</p> | 9 | <p>{{ 'quickstart.intro.paragraph_2'|trans }}</p> |
10 | <h4>{% trans %}Configure the application{% endtrans %}</h4> | 10 | |
11 | <h4>{{ 'quickstart.configure.title'|trans }}</h4> | ||
11 | <ul> | 12 | <ul> |
12 | <li><a href="{{ path('config') }}">{% trans %}Change language and design{% endtrans %}</a></li> | 13 | <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li> |
13 | <li><a href="{{ path('config') }}#set2">{% trans %}Enable RSS feeds{% endtrans %}</a></li> | 14 | <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li> |
14 | <li><a href="{{ path('config') }}#set5">{% trans %}Write rules to automatically tag your articles{% endtrans %}</a></li> | 15 | <li><a href="{{ path('config') }}#set5">{{ 'quickstart.configure.tagging_rules'|trans }}</a></li> |
15 | </ul> | 16 | </ul> |
17 | |||
16 | {% if is_granted('ROLE_SUPER_ADMIN') %} | 18 | {% if is_granted('ROLE_SUPER_ADMIN') %} |
17 | <h4>{% trans %}Administration{% endtrans %}</h4> | 19 | <h4>{{ 'quickstart.admin.title'|trans }}</h4> |
18 | <p>{% trans %}As a administrator, you have privileges on wallabag. You can:{% endtrans %}</p> | 20 | <p>{{ 'quickstart.admin.description'|trans }}</p> |
19 | <ul> | 21 | <ul> |
20 | <li><a href="{{ path('config') }}#set6">{% trans %}Create a new user{% endtrans %}</a></li> | 22 | <li><a href="{{ path('config') }}#set6">{{ 'quickstart.admin.new_user'|trans }}</a></li> |
21 | <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{% trans %}Configure analytics{% endtrans %}</a></li> | 23 | <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{{ 'quickstart.admin.analytics'|trans }}</a></li> |
22 | <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{% trans %}Enable some parameters about article sharing{% endtrans %}</a></li> | 24 | <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{{ 'quickstart.admin.sharing'|trans }}</a></li> |
23 | <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{% trans %}Configure export{% endtrans %}</a></li> | 25 | <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{{ 'quickstart.admin.export'|trans }}</a></li> |
24 | <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{% trans %}Configure import{% endtrans %}</a></li> | 26 | <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{{ 'quickstart.admin.import'|trans }}</a></li> |
25 | </ul> | 27 | </ul> |
26 | {% endif %} | 28 | {% endif %} |
27 | <h4>{% trans %}First steps{% endtrans %}</h4> | 29 | |
30 | <h4>{{ 'quickstart.first_steps.title'|trans }}</h4> | ||
28 | <ul> | 31 | <ul> |
29 | <li><a href="{{ path('new') }}">{% trans %}Save your first article{% endtrans %}</a></li> | 32 | <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li> |
30 | <li><a href="{{ path('unread') }}">{% trans %}And classify it!{% endtrans %}</a></li> | 33 | <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li> |
31 | </ul> | 34 | </ul> |
32 | <h4>{% trans %}Migrate from an existing service{% endtrans %}</h4> | 35 | |
33 | <p>{% trans %}You're using an other service? We'll help you to retrieve your data on wallabag.{% endtrans %}</p> | 36 | <h4>{{ 'quickstart.migrate.title'|trans }}</h4> |
37 | <p>{{ 'quickstart.migrate.description'|trans }}</p> | ||
34 | <ul> | 38 | <ul> |
35 | <li><a href="{{ path('import_pocket') }}">{% trans %}Migrate from Pocket{% endtrans %}</a></li> | 39 | <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li> |
36 | <li><a href="{{ path('import_wallabag_v1') }}">{% trans %}Migrate from wallabag v1{% endtrans %}</a></li> | 40 | <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li> |
37 | <li><a href="{{ path('import_wallabag_v2') }}">{% trans %}Migrate from wallabag v2{% endtrans %}</a></li> | 41 | <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li> |
38 | </ul> | 42 | </ul> |
39 | <h4>{% trans %}Full documentation{% endtrans %}</h4> | 43 | |
44 | <h4>{{ 'quickstart.developer.title'|trans }}</h4> | ||
40 | <ul> | 45 | <ul> |
41 | <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{% trans %}Annotate your article{% endtrans %}</a></li> | 46 | <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li> |
42 | <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{% trans %}Convert your articles into ePUB or PDF{% endtrans %}</a></li> | ||
43 | <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{% trans %}See how you can look for an article by using search engine and filters{% endtrans %}</a></li> | ||
44 | <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{% trans %}What can I do if an article encounters errors during fetching?{% endtrans %}</a></li> | ||
45 | <li><a href="http://doc.wallabag.org/">{% trans %}And so many other articles!{% endtrans %}</a></li> | ||
46 | </ul> | 47 | </ul> |
47 | <h4>{% trans %}Support{% endtrans %}</h4> | 48 | |
48 | <p>{% trans %}If you need some help, we are here for you.{% endtrans %}</p> | 49 | <h4>{{ 'quickstart.docs.title'|trans }}</h4> |
50 | <ul> | ||
51 | <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li> | ||
52 | <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li> | ||
53 | <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{{ 'quickstart.docs.search_filters'|trans }}</a></li> | ||
54 | <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{{ 'quickstart.docs.fetching_errors'|trans }}</a></li> | ||
55 | <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li> | ||
56 | </ul> | ||
57 | |||
58 | <h4>{{ 'quickstart.support.title'|trans }}</h4> | ||
59 | <p>{{ 'quickstart.support.description'|trans }}</p> | ||
49 | <ul> | 60 | <ul> |
50 | <li><a href="https://github.com/wallabag/wallabag/issues/">{% trans %}On GitHub{% endtrans %}</a></li> | 61 | <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li> |
51 | <li><a href="mailto:hello@wallabag.org">{% trans %}By email{% endtrans %}</a></li> | 62 | <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li> |
52 | <li><a href="https://gitter.im/wallabag/wallabag">{% trans %}On Gitter{% endtrans %}</a></li> | 63 | <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li> |
53 | </ul> | 64 | </ul> |
54 | 65 | ||
55 | {% endblock %} | 66 | {% endblock %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig index ade7f56d..6e552560 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig | |||
@@ -8,7 +8,6 @@ | |||
8 | {% endif %} | 8 | {% endif %} |
9 | 9 | ||
10 | {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }} | 10 | {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }} |
11 | {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'}, 'label': 'add tag' }) }} | ||
12 | 11 | ||
13 | <div class="hidden">{{ form_rest(form) }}</div> | 12 | {{ form_rest(form) }} |
14 | </form> | 13 | </form> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig index c2a461b8..dfc61751 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig | |||
@@ -1,13 +1,15 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title "Tags" %} | 3 | {% block title %}{{ 'tag.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | {% if tags is empty %} | 6 | <div class="results"> |
7 | <div class="messages warning"><p>{% trans %}No tags found.{% endtrans %}</p></div> | 7 | <div class="nb-results">{{ 'tag.list.number_on_the_page'|transchoice(tags.count) }}</div> |
8 | {% else %} | 8 | </div> |
9 | {% for tag in tags %} | 9 | |
10 | {{tag.label}} | 10 | <ul> |
11 | {% endfor %} | 11 | {% for tag in tags %} |
12 | {% endif %} | 12 | <li id="tag-{{ tag.id|e }}">{{tag.label}} ({{ tag.entries.getValues | length }})</li> |
13 | {% endfor %} | ||
14 | </ul> | ||
13 | {% endblock %} | 15 | {% endblock %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig index 7f098066..2c15ad95 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig | |||
@@ -33,32 +33,32 @@ | |||
33 | {% block menu %} | 33 | {% block menu %} |
34 | <button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button> | 34 | <button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button> |
35 | <ul id="links" class="links"> | 35 | <ul id="links" class="links"> |
36 | <li><a href="{{ path('unread') }}">{% trans %}unread{% endtrans %}</a></li> | 36 | <li><a href="{{ path('unread') }}">{{ 'menu.left.unread'|trans }}</a></li> |
37 | <li><a href="{{ path('starred') }}">{% trans %}favorites{% endtrans %}</a></li> | 37 | <li><a href="{{ path('starred') }}">{{ 'menu.left.starred'|trans }}</a></li> |
38 | <li><a href="{{ path('archive') }}">{% trans %}archive{% endtrans %}</a></li> | 38 | <li><a href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }}</a></li> |
39 | <li><a href="{{ path('all') }}">{% trans %}all{% endtrans %}</a></li> | 39 | <li><a href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }}</a></li> |
40 | <li><a href="{{ path('tag') }}">{% trans %}tags{% endtrans %}</a></li> | 40 | <li><a href="{{ path('tag') }}">{{ 'menu.left.tags'|trans }}</a></li> |
41 | <li><a href="{{ path('new') }}">{% trans %}save a link{% endtrans %}</a></li> | 41 | <li><a href="{{ path('new') }}">{{ 'menu.left.save_link'|trans }}</a></li> |
42 | <li style="position: relative;"><a href="javascript: void(null);" id="search">{% trans %}search{% endtrans %}</a> | 42 | <!--<li style="position: relative;"><a href="javascript: void(null);" id="search">{{ 'menu.left.search'|trans }}</a> |
43 | <div id="search-form" class="messages info popup-form"> | 43 | <div id="search-form" class="messages info popup-form"> |
44 | <form method="get" action="index.php"> | 44 | <form method="get" action="index.php"> |
45 | <h2>{% trans %}Search{% endtrans %}</h2> | 45 | <h2>{{ 'menu.left.search'|trans }}</h2> |
46 | <a href="javascript: void(null);" id="search-form-close" class="close-button--popup close-button">×</a> | 46 | <a href="javascript: void(null);" id="search-form-close" class="close-button--popup close-button">×</a> |
47 | <input type="hidden" name="view" value="search"> | 47 | <input type="hidden" name="view" value="search"> |
48 | <input required placeholder="{% trans %}Enter your search here{% endtrans %}" type="text" name="search" id="searchfield"><br> | 48 | <input required placeholder="{{ 'menu.search_form.input_label'|trans }}" type="text" name="search" id="searchfield"><br> |
49 | <input id="submit-search" type="submit" value="{% trans %}Search{% endtrans %}"> | 49 | <input id="submit-search" type="submit" value="{{ 'menu.left.search'|trans }}"> |
50 | </form> | 50 | </form> |
51 | </div> | 51 | </div> |
52 | </li> | 52 | </li>--> |
53 | <li><a href="{{ path('config') }}">{% trans %}config{% endtrans %}</a></li> | 53 | <li><a href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a></li> |
54 | {% if is_granted('ROLE_SUPER_ADMIN') %} | 54 | {% if is_granted('ROLE_SUPER_ADMIN') %} |
55 | <li><a href="{{ path('craue_config_settings_modify') }}">{% trans %}internal settings{% endtrans %}</a></li> | 55 | <li><a href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a></li> |
56 | {% endif %} | 56 | {% endif %} |
57 | <li><a href="{{ path('import') }}">{% trans %}import{% endtrans %}</a></li> | 57 | <li><a href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a></li> |
58 | <li><a href="{{ path('howto') }}">{% trans %}howto{% endtrans %}</a></li> | 58 | <li><a href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a></li> |
59 | <li><a href="{{ path('developer') }}">{% trans %}Developer{% endtrans %}</a></li> | 59 | <li><a href="{{ path('developer') }}">{{ 'menu.left.developer'|trans }}</a></li> |
60 | <li><a href="{{ path('about') }}">{% trans %}about{% endtrans %}</a></li> | 60 | <li><a href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a></li> |
61 | <li><a class="icon icon-power" href="{{ path('fos_user_security_logout') }}" title="{% trans %}logout{% endtrans %}">{% trans %}logout{% endtrans %}</a></li> | 61 | <li><a class="icon icon-power" href="{{ path('fos_user_security_logout') }}">{{ 'menu.left.logout'|trans }}</a></li> |
62 | </ul> | 62 | </ul> |
63 | {% endblock %} | 63 | {% endblock %} |
64 | 64 | ||
@@ -66,13 +66,13 @@ | |||
66 | {% for flashMessage in app.session.flashbag.get('notice') %} | 66 | {% for flashMessage in app.session.flashbag.get('notice') %} |
67 | <div class="messages success"> | 67 | <div class="messages success"> |
68 | <a href="#" class="closeMessage">×</a> | 68 | <a href="#" class="closeMessage">×</a> |
69 | <p>{{ flashMessage }}</p> | 69 | <p>{{ flashMessage|trans }}</p> |
70 | </div> | 70 | </div> |
71 | {% endfor %} | 71 | {% endfor %} |
72 | {% endblock %} | 72 | {% endblock %} |
73 | 73 | ||
74 | {% block footer %} | 74 | {% block footer %} |
75 | <footer class="w600p center mt3 mb3 smaller txtright"> | 75 | <footer class="w600p center mt3 mb3 smaller txtright"> |
76 | <p>{% trans %}powered by{% endtrans %} <a href="http://wallabag.org">wallabag</a></p> | 76 | <p>{{ 'footer.wallabag.powered_by'|trans }} <a href="http://wallabag.org">wallabag</a></p> |
77 | </footer> | 77 | </footer> |
78 | {% endblock %} | 78 | {% endblock %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig index 2b0b0828..5b94f01c 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}config{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'config.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | 6 | ||
@@ -11,13 +11,13 @@ | |||
11 | <div class="row"> | 11 | <div class="row"> |
12 | <div class="div_tabs col s12"> | 12 | <div class="div_tabs col s12"> |
13 | <ul class="tabs"> | 13 | <ul class="tabs"> |
14 | <li class="tab col s3"><a class="active" href="#set1">{% trans %}Settings{% endtrans %}</a></li> | 14 | <li class="tab col s3"><a class="active" href="#set1">{{ 'config.tab_menu.settings'|trans }}</a></li> |
15 | <li class="tab col s3"><a href="#set2">{% trans %}RSS{% endtrans %}</a></li> | 15 | <li class="tab col s3"><a href="#set2">{{ 'config.tab_menu.rss'|trans }}</a></li> |
16 | <li class="tab col s3"><a href="#set3">{% trans %}User information{% endtrans %}</a></li> | 16 | <li class="tab col s3"><a href="#set3">{{ 'config.tab_menu.user_info'|trans }}</a></li> |
17 | <li class="tab col s3"><a href="#set4">{% trans %}Password{% endtrans %}</a></li> | 17 | <li class="tab col s3"><a href="#set4">{{ 'config.tab_menu.password'|trans }}</a></li> |
18 | <li class="tab col s3"><a href="#set5">{% trans %}Tagging rules{% endtrans %}</a></li> | 18 | <li class="tab col s3"><a href="#set5">{{ 'config.tab_menu.rules'|trans }}</a></li> |
19 | {% if is_granted('ROLE_SUPER_ADMIN') %} | 19 | {% if is_granted('ROLE_SUPER_ADMIN') %} |
20 | <li class="tab col s3"><a href="#set6">{% trans %}Add a user{% endtrans %}</a></li> | 20 | <li class="tab col s3"><a href="#set6">{{ 'config.tab_menu.new_user'|trans }}</a></li> |
21 | {% endif %} | 21 | {% endif %} |
22 | </ul> | 22 | </ul> |
23 | </div> | 23 | </div> |
@@ -28,9 +28,9 @@ | |||
28 | 28 | ||
29 | <div class="row"> | 29 | <div class="row"> |
30 | <div class="input-field col s12"> | 30 | <div class="input-field col s12"> |
31 | {{ form_label(form.config.theme) }} | ||
31 | {{ form_errors(form.config.theme) }} | 32 | {{ form_errors(form.config.theme) }} |
32 | {{ form_widget(form.config.theme) }} | 33 | {{ form_widget(form.config.theme) }} |
33 | <label class="required">{% trans %}Theme{% endtrans %}</label> | ||
34 | </div> | 34 | </div> |
35 | </div> | 35 | </div> |
36 | 36 | ||
@@ -47,7 +47,10 @@ | |||
47 | {{ form_label(form.config.reading_speed) }} | 47 | {{ form_label(form.config.reading_speed) }} |
48 | {{ form_errors(form.config.reading_speed) }} | 48 | {{ form_errors(form.config.reading_speed) }} |
49 | {{ form_widget(form.config.reading_speed) }} | 49 | {{ form_widget(form.config.reading_speed) }} |
50 | <p>{% trans %}You can use online tools to estimate your reading speed{% endtrans %} (<a href="http://www.myreadspeed.com/calculate/">{% trans %}like this one{%endtrans%}</a>).</p> | 50 | <p> |
51 | {{ 'config.form_settings.reading_speed.help_message'|trans }} | ||
52 | <a href="http://www.myreadspeed.com/calculate/">myreadspeed</a> | ||
53 | </p> | ||
51 | </div> | 54 | </div> |
52 | </div> | 55 | </div> |
53 | 56 | ||
@@ -59,10 +62,8 @@ | |||
59 | </div> | 62 | </div> |
60 | </div> | 63 | </div> |
61 | 64 | ||
62 | <div class="hidden">{{ form_rest(form.config) }}</div> | 65 | {{ form_widget(form.config.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
63 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 66 | {{ form_rest(form.config) }} |
64 | {% trans %}Save{% endtrans %} | ||
65 | </button> | ||
66 | </form> | 67 | </form> |
67 | </div> | 68 | </div> |
68 | 69 | ||
@@ -72,33 +73,37 @@ | |||
72 | 73 | ||
73 | <div class="row"> | 74 | <div class="row"> |
74 | <div class="input-field col s12"> | 75 | <div class="input-field col s12"> |
75 | {% trans %}RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.{% endtrans %} | 76 | {{ 'config.form_rss.description'|trans }} |
76 | </div> | 77 | </div> |
77 | </div> | 78 | </div> |
78 | 79 | ||
79 | <div class="row"> | 80 | <div class="row"> |
80 | <div class="input-field col s12"> | 81 | <div class="input-field col s12"> |
81 | <label>{% trans %}RSS token{% endtrans %}</label> | 82 | <label>{{ 'config.form_rss.token_label'|trans }}</label> |
82 | <div> | 83 | <div> |
83 | {% if rss.token %} | 84 | {% if rss.token %} |
84 | {{ rss.token }} | 85 | {{ rss.token }} |
85 | {% else %} | 86 | {% else %} |
86 | <em>{% trans %}No token{% endtrans %}</em> | 87 | <em>{{ 'config.form_rss.no_token'|trans }}</em> |
87 | {% endif %} | 88 | {% endif %} |
88 | – <a href="{{ path('generate_token') }}">{% if rss.token %}{% trans %}Reset your token{% endtrans %}{% else %}{% trans %}Create your token{% endtrans %}{% endif %}</a> | 89 | – <a href="{{ path('generate_token') }}"> |
90 | {% if rss.token %} | ||
91 | {{ 'config.form_rss.token_reset'|trans }} | ||
92 | {% else %} | ||
93 | {{ 'config.form_rss.token_create'|trans }} | ||
94 | {% endif %}</a> | ||
89 | </div> | 95 | </div> |
90 | </div> | 96 | </div> |
91 | </div> | 97 | </div> |
92 | {% if rss.token %} | 98 | {% if rss.token %} |
93 | <div class="row"> | 99 | <div class="row"> |
94 | <div class="input-field col s12"> | 100 | <div class="input-field col s12"> |
95 | <label>{% trans %}RSS links{% endtrans %}</label> | 101 | <label>{{ 'config.form_rss.rss_links'|trans }}</label> |
96 | <ul> | 102 | <ul> |
97 | <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}unread{% endtrans %}</a></li> | 103 | <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">{{ 'config.form_rss.rss_link.unread'|trans }}</a></li> |
98 | <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}starred{% endtrans %}</a></li> | 104 | <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">{{ 'config.form_rss.rss_link.starred'|trans }}</a></li> |
99 | <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}archive{% endtrans %}</a></li> | 105 | <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">{{ 'config.form_rss.rss_link.archive'|trans }}</a></li> |
100 | </ul> | 106 | </ul> |
101 | |||
102 | </div> | 107 | </div> |
103 | </div> | 108 | </div> |
104 | {% endif %} | 109 | {% endif %} |
@@ -111,11 +116,8 @@ | |||
111 | </div> | 116 | </div> |
112 | </div> | 117 | </div> |
113 | 118 | ||
114 | <div class="hidden">{{ form_rest(form.rss) }}</div> | 119 | {{ form_widget(form.rss.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
115 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 120 | {{ form_rest(form.rss) }} |
116 | {% trans %}Save{% endtrans %} | ||
117 | </button> | ||
118 | |||
119 | </form> | 121 | </form> |
120 | </div> | 122 | </div> |
121 | 123 | ||
@@ -142,7 +144,7 @@ | |||
142 | {% if twofactor_auth %} | 144 | {% if twofactor_auth %} |
143 | <div class="row"> | 145 | <div class="row"> |
144 | <div class="input-field col s12"> | 146 | <div class="input-field col s12"> |
145 | {% trans %}Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion{% endtrans %} | 147 | {{ 'config.form_user.two_factor_description'|trans }} |
146 | </div> | 148 | </div> |
147 | </div> | 149 | </div> |
148 | 150 | ||
@@ -155,11 +157,8 @@ | |||
155 | </div> | 157 | </div> |
156 | {% endif %} | 158 | {% endif %} |
157 | 159 | ||
158 | <div class="hidden">{{ form_rest(form.user) }}</div> | 160 | {{ form_widget(form.user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
159 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 161 | {{ form_rest(form.user) }} |
160 | {% trans %}Save{% endtrans %} | ||
161 | </button> | ||
162 | |||
163 | </form> | 162 | </form> |
164 | </div> | 163 | </div> |
165 | 164 | ||
@@ -191,11 +190,8 @@ | |||
191 | </div> | 190 | </div> |
192 | </div> | 191 | </div> |
193 | 192 | ||
194 | <div class="hidden">{{ form_rest(form.pwd) }}</div> | 193 | {{ form_widget(form.pwd.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
195 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 194 | {{ form_rest(form.pwd) }} |
196 | {% trans %}Save{% endtrans %} | ||
197 | </button> | ||
198 | |||
199 | </form> | 195 | </form> |
200 | </div> | 196 | </div> |
201 | 197 | ||
@@ -205,8 +201,11 @@ | |||
205 | <ul> | 201 | <ul> |
206 | {% for tagging_rule in app.user.config.taggingRules %} | 202 | {% for tagging_rule in app.user.config.taggingRules %} |
207 | <li> | 203 | <li> |
208 | if « {{ tagging_rule.rule }} » then tag as « {{ tagging_rule.tags|join(', ') }} » | 204 | {{ 'config.form_rules.if_label'|trans }} |
209 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{% trans %}Delete{% endtrans %}"> | 205 | « {{ tagging_rule.rule }} » |
206 | {{ 'config.form_rules.then_tag_as_label'|trans }} | ||
207 | « {{ tagging_rule.tags|join(', ') }} » | ||
208 | <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}"> | ||
210 | <i class="tool grey-text delete mdi-action-delete"></i> | 209 | <i class="tool grey-text delete mdi-action-delete"></i> |
211 | </a> | 210 | </a> |
212 | </li> | 211 | </li> |
@@ -234,106 +233,92 @@ | |||
234 | </div> | 233 | </div> |
235 | </div> | 234 | </div> |
236 | 235 | ||
237 | <div class="hidden">{{ form_rest(form.new_tagging_rule) }}</div> | 236 | {{ form_widget(form.new_tagging_rule.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
238 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 237 | {{ form_rest(form.new_tagging_rule) }} |
239 | {% trans %}Save{% endtrans %} | ||
240 | </button> | ||
241 | </form> | 238 | </form> |
242 | 239 | ||
243 | <div class="row"> | 240 | <div class="row"> |
244 | <div class="input-field col s12"> | 241 | <div class="input-field col s12"> |
245 | <h4>{% trans %}FAQ{% endtrans %}</h4> | 242 | <h4>{{ 'config.form_rules.faq.title'|trans }}</h4> |
246 | 243 | ||
247 | <h5>{% trans %}What does « tagging rules » mean?{% endtrans %}</h5> | 244 | <h5>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h5> |
248 | <p class="help"> | 245 | <p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p> |
249 | {% trans %} | ||
250 | They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries. | ||
251 | {% endtrans %} | ||
252 | </p> | ||
253 | 246 | ||
254 | <h5>{% trans %}How do I use them?{% endtrans %}</h5> | 247 | <h5>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h5> |
255 | <p class="help"> | 248 | <p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p> |
256 | {% trans %} | ||
257 | Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime <= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime >= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> » | ||
258 | {% endtrans %} | ||
259 | </p> | ||
260 | 249 | ||
261 | <h5>{% trans %}Which variables and operators can I use to write rules?{% endtrans %}</h5> | 250 | <h5>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h5> |
262 | <p class="help"> | 251 | <p class="help"> |
263 | {% trans %}The following variables and operators can be used to create tagging rules:{% endtrans %} | 252 | {{ 'config.form_rules.faq.variables_available_description'|trans }} |
264 | |||
265 | <table> | ||
266 | <thead> | ||
267 | <tr> | ||
268 | <th>{% trans %}Variable{% endtrans %}</th> | ||
269 | <th>{% trans %}Meaning{% endtrans %}</th> | ||
270 | <th>{% trans %}Operator{% endtrans %}</th> | ||
271 | <th>{% trans %}Meaning{% endtrans %}</th> | ||
272 | </tr> | ||
273 | </thead> | ||
274 | |||
275 | <tbody> | ||
276 | <tr> | ||
277 | <td>title</td> | ||
278 | <td>{% trans %}Title of the entry{% endtrans %}</td> | ||
279 | <td><=</td> | ||
280 | <td>{% trans %}Less than…{% endtrans %}</td> | ||
281 | </tr> | ||
282 | <tr> | ||
283 | <td>url</td> | ||
284 | <td>{% trans %}URL of the entry{% endtrans %}</td> | ||
285 | <td><</td> | ||
286 | <td>{% trans %}Strictly less than…{% endtrans %}</td> | ||
287 | </tr> | ||
288 | <tr> | ||
289 | <td>isArchived</td> | ||
290 | <td>{% trans %}Whether the entry is archived or not{% endtrans %}</td> | ||
291 | <td>=></td> | ||
292 | <td>{% trans %}Greater than…{% endtrans %}</td> | ||
293 | </tr> | ||
294 | <tr> | ||
295 | <td>isStarred</td> | ||
296 | <td>{% trans %}Whether the entry is starred or not{% endtrans %}</td> | ||
297 | <td>></td> | ||
298 | <td>{% trans %}Strictly greater than…{% endtrans %}</td> | ||
299 | </tr> | ||
300 | <tr> | ||
301 | <td>content</td> | ||
302 | <td>{% trans %}The entry's content{% endtrans %}</td> | ||
303 | <td>=</td> | ||
304 | <td>{% trans %}Equal to…{% endtrans %}</td> | ||
305 | </tr> | ||
306 | <tr> | ||
307 | <td>language</td> | ||
308 | <td>{% trans %}The entry's language{% endtrans %}</td> | ||
309 | <td>!=</td> | ||
310 | <td>{% trans %}Not equal to…{% endtrans %}</td> | ||
311 | </tr> | ||
312 | <tr> | ||
313 | <td>mimetype</td> | ||
314 | <td>{% trans %}The entry's mime-type{% endtrans %}</td> | ||
315 | <td>OR</td> | ||
316 | <td>{% trans %}One rule or another{% endtrans %}</td> | ||
317 | </tr> | ||
318 | <tr> | ||
319 | <td>readingTime</td> | ||
320 | <td>{% trans %}The estimated entry's reading time, in minutes{% endtrans %}</td> | ||
321 | <td>AND</td> | ||
322 | <td>{% trans %}One rule and another{% endtrans %}</td> | ||
323 | </tr> | ||
324 | <tr> | ||
325 | <td>domainName</td> | ||
326 | <td>{% trans %}The domain name of the entry{% endtrans %}</td> | ||
327 | <td>matches</td> | ||
328 | <td> | ||
329 | {% trans %} | ||
330 | Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code> | ||
331 | {% endtrans %} | ||
332 | </td> | ||
333 | </tr> | ||
334 | </tbody> | ||
335 | </table> | ||
336 | </p> | 253 | </p> |
254 | |||
255 | <table class="bordered"> | ||
256 | <thead> | ||
257 | <tr> | ||
258 | <th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th> | ||
259 | <th>{{ 'config.form_rules.faq.meaning'|trans }}</th> | ||
260 | <th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th> | ||
261 | <th>{{ 'config.form_rules.faq.meaning'|trans }}</th> | ||
262 | </tr> | ||
263 | </thead> | ||
264 | |||
265 | <tbody> | ||
266 | <tr> | ||
267 | <td>title</td> | ||
268 | <td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td> | ||
269 | <td><=</td> | ||
270 | <td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td> | ||
271 | </tr> | ||
272 | <tr> | ||
273 | <td>url</td> | ||
274 | <td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td> | ||
275 | <td><</td> | ||
276 | <td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td> | ||
277 | </tr> | ||
278 | <tr> | ||
279 | <td>isArchived</td> | ||
280 | <td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td> | ||
281 | <td>=></td> | ||
282 | <td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td> | ||
283 | </tr> | ||
284 | <tr> | ||
285 | <td>isStarred</td> | ||
286 | <td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td> | ||
287 | <td>></td> | ||
288 | <td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td> | ||
289 | </tr> | ||
290 | <tr> | ||
291 | <td>content</td> | ||
292 | <td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td> | ||
293 | <td>=</td> | ||
294 | <td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td> | ||
295 | </tr> | ||
296 | <tr> | ||
297 | <td>language</td> | ||
298 | <td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td> | ||
299 | <td>!=</td> | ||
300 | <td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td> | ||
301 | </tr> | ||
302 | <tr> | ||
303 | <td>mimetype</td> | ||
304 | <td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td> | ||
305 | <td>OR</td> | ||
306 | <td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td> | ||
307 | </tr> | ||
308 | <tr> | ||
309 | <td>readingTime</td> | ||
310 | <td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td> | ||
311 | <td>AND</td> | ||
312 | <td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td> | ||
313 | </tr> | ||
314 | <tr> | ||
315 | <td>domainName</td> | ||
316 | <td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td> | ||
317 | <td>matches</td> | ||
318 | <td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td> | ||
319 | </tr> | ||
320 | </tbody> | ||
321 | </table> | ||
337 | </div> | 322 | </div> |
338 | </div> | 323 | </div> |
339 | </div> | 324 | </div> |
@@ -375,11 +360,8 @@ | |||
375 | </div> | 360 | </div> |
376 | </div> | 361 | </div> |
377 | 362 | ||
378 | <div class="hidden">{{ form_rest(form.new_user) }}</div> | 363 | {{ form_widget(form.new_user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
379 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 364 | {{ form_rest(form.new_user) }} |
380 | {% trans %}Add a user{% endtrans %} | ||
381 | </button> | ||
382 | |||
383 | </form> | 365 | </form> |
384 | </div> | 366 | </div> |
385 | {% endif %} | 367 | {% endif %} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig index c9ce6d08..78a9dc04 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}New client{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.client.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <div class="row"> | 6 | <div class="row"> |
@@ -8,7 +8,7 @@ | |||
8 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
9 | 9 | ||
10 | <div class="row"> | 10 | <div class="row"> |
11 | <p>{% trans %}You are about to create a new client. Please fill the field below for the redirect URI of your application.{% endtrans %}</p> | 11 | <p>{{ 'developer.client.page_description'|trans }}</p> |
12 | {{ form_start(form) }} | 12 | {{ form_start(form) }} |
13 | {{ form_errors(form) }} | 13 | {{ form_errors(form) }} |
14 | 14 | ||
@@ -18,7 +18,7 @@ | |||
18 | {{ form_widget(form.redirect_uris) }} | 18 | {{ form_widget(form.redirect_uris) }} |
19 | </div> | 19 | </div> |
20 | 20 | ||
21 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> | 21 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client.action_back'|trans }}</a> |
22 | {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} | 22 | {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
23 | 23 | ||
24 | {{ form_rest(form) }} | 24 | {{ form_rest(form) }} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig index a214dfd0..b615fa3b 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig | |||
@@ -1,20 +1,20 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Client parameters{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.client_parameter.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <div class="row"> | 6 | <div class="row"> |
7 | <div class="col s12"> | 7 | <div class="col s12"> |
8 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
9 | <div class="row"> | 9 | <div class="row"> |
10 | <p>{% trans %}Here are your client parameters.{% endtrans %}</p> | 10 | <p>{{ 'developer.client_parameter.page_description'|trans }}</p> |
11 | <ul> | 11 | <ul> |
12 | <li>{% trans %}Client ID{% endtrans %}: <strong><pre>{{ client_id }}</pre></strong></li> | 12 | <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li> |
13 | <li>{% trans %}Client secret{% endtrans %}: <strong><pre>{{ client_secret }}</pre></strong></li> | 13 | <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li> |
14 | </ul> | 14 | </ul> |
15 | 15 | ||
16 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> | 16 | <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client_parameter.back'|trans }}</a> |
17 | <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{% trans %}Read the howto "Create my first application"{% endtrans %}</a> | 17 | <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{{ 'developer.client_parameter.read_howto'|trans }}</a> |
18 | </div> | 18 | </div> |
19 | </div> | 19 | </div> |
20 | </div> | 20 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig index 382e6311..acbc2c88 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}How to create my first application{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.howto.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block css %} | 5 | {% block css %} |
6 | {{ parent() }} | 6 | {{ parent() }} |
@@ -13,10 +13,10 @@ | |||
13 | <div class="card-panel settings"> | 13 | <div class="card-panel settings"> |
14 | 14 | ||
15 | <div class="row"> | 15 | <div class="row"> |
16 | <p>{% trans %}The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.{% endtrans %}</p> | 16 | <p>{{ 'developer.howto.description.paragraph_1'|trans|raw }}</p> |
17 | <p>{% trans %}You need a token to communicate between your 3rd application and wallabag API.{% endtrans %}</p> | 17 | <p>{{ 'developer.howto.description.paragraph_2'|trans }}</p> |
18 | <p>{% trans with {'%link%': path('developer_create_client')} %}To create this token, you need <a href="%link%">to create a new client</a>.{% endtrans %}</p> | 18 | <p>{{ 'developer.howto.description.paragraph_3'|trans({'%link%': path('developer_create_client')})|raw }}</p> |
19 | <p>{% trans %}Now, create your token (replace client_id, client_secret, username and password with the good values):{% endtrans %}</p> | 19 | <p>{{ 'developer.howto.description.paragraph_4'|trans }}</p> |
20 | <p> | 20 | <p> |
21 | <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \ | 21 | <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \ |
22 | grant_type=password \ | 22 | grant_type=password \ |
@@ -25,7 +25,7 @@ | |||
25 | username=yourUsername \ | 25 | username=yourUsername \ |
26 | password=yourPassw0rd</code></pre> | 26 | password=yourPassw0rd</code></pre> |
27 | </p> | 27 | </p> |
28 | <p>{% trans %}The API will return a response like this:{% endtrans %}</p> | 28 | <p>{{ 'developer.howto.description.paragraph_5'|trans }}</p> |
29 | <p> | 29 | <p> |
30 | <pre><code class="language-bash">HTTP/1.1 200 OK | 30 | <pre><code class="language-bash">HTTP/1.1 200 OK |
31 | Cache-Control: no-store, private | 31 | Cache-Control: no-store, private |
@@ -45,14 +45,14 @@ X-Powered-By: PHP/5.5.9-1ubuntu4.13 | |||
45 | "token_type": "bearer" | 45 | "token_type": "bearer" |
46 | }</code></pre> | 46 | }</code></pre> |
47 | </p> | 47 | </p> |
48 | <p>{% trans %}The access_token is useful to do a call to the API endpoint. For example:{% endtrans %}</p> | 48 | <p>{{ 'developer.howto.description.paragraph_6'|trans }}</p> |
49 | <p> | 49 | <p> |
50 | <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \ | 50 | <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \ |
51 | "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre> | 51 | "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre> |
52 | </p> | 52 | </p> |
53 | <p>{% trans %}This call will return all the entries for your user.{% endtrans %}</p> | 53 | <p>{{ 'developer.howto.description.paragraph_7'|trans }}</p> |
54 | <p>{% trans with {'%link%': path('nelmio_api_doc_index')} %}If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.{% endtrans %}</p> | 54 | <p>{{ 'developer.howto.description.paragraph_8'|trans({'%link%': path('nelmio_api_doc_index')})|raw }}</p> |
55 | <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a></p> | 55 | <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.howto.back'|trans }}</a></p> |
56 | </div> | 56 | </div> |
57 | 57 | ||
58 | </div> | 58 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig index 2e7dbcab..7ff64ca6 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Developer{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'developer.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <div class="row"> | 6 | <div class="row"> |
@@ -8,21 +8,22 @@ | |||
8 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
9 | 9 | ||
10 | <div class="row"> | 10 | <div class="row"> |
11 | <h3>{% trans %}Welcome to the wallabag API{% endtrans %}</h3> | 11 | <h3>{{ 'developer.welcome_message'|trans }}</h3> |
12 | 12 | ||
13 | <h4>{% trans %}Documentation{% endtrans %}</h4> | 13 | <h4>{{ 'developer.documentation'|trans }}</h4> |
14 | 14 | ||
15 | <ul> | 15 | <ul> |
16 | <li><a href="{{ path('developer_howto_firstapp') }}">{% trans %}How to create my first application{% endtrans %}</a></li> | 16 | <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li> |
17 | <li><a href="{{ path('nelmio_api_doc_index') }}">{% trans %}View full API documentation{% endtrans %}</a></li> | 17 | <li><a href="http://doc.wallabag.org/en/v2-documentation-api/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li> |
18 | <li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li> | ||
18 | </ul> | 19 | </ul> |
19 | 20 | ||
20 | <h4>{% trans %}Clients{% endtrans %}</h4> | 21 | <h4>{{ 'developer.clients.title'|trans }}</h4> |
21 | <ul> | 22 | <ul> |
22 | <li><a href="{{ path('developer_create_client') }}">{% trans %}Create a new client{% endtrans %}</a></li> | 23 | <li><a href="{{ path('developer_create_client') }}">{{ 'developer.clients.create_new'|trans }}</a></li> |
23 | </ul> | 24 | </ul> |
24 | 25 | ||
25 | <h4>{% trans %}Existing clients{% endtrans %}</h4> | 26 | <h4>{{ 'developer.existing_clients.title'|trans }}</h4> |
26 | {% if clients %} | 27 | {% if clients %} |
27 | <ul class="collapsible" data-collapsible="expandable"> | 28 | <ul class="collapsible" data-collapsible="expandable"> |
28 | {% for client in clients %} | 29 | {% for client in clients %} |
@@ -31,33 +32,33 @@ | |||
31 | <div class="collapsible-body"> | 32 | <div class="collapsible-body"> |
32 | <table class="striped"> | 33 | <table class="striped"> |
33 | <tr> | 34 | <tr> |
34 | <td>{% trans %}Client ID{% endtrans %}</td> | 35 | <td>{{ 'developer.existing_clients.field_id'|trans }}</td> |
35 | <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td> | 36 | <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td> |
36 | </tr> | 37 | </tr> |
37 | <tr> | 38 | <tr> |
38 | <td>{% trans %}Client secret{% endtrans %}</td> | 39 | <td>{{ 'developer.existing_clients.field_secret'|trans }}</td> |
39 | <td><strong><code>{{ client.secret }}</code></strong></td> | 40 | <td><strong><code>{{ client.secret }}</code></strong></td> |
40 | </tr> | 41 | </tr> |
41 | <tr> | 42 | <tr> |
42 | <td>{% trans %}Redirect URIs{% endtrans %}</td> | 43 | <td>{{ 'developer.existing_clients.field_uris'|trans }}</td> |
43 | <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td> | 44 | <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td> |
44 | </tr> | 45 | </tr> |
45 | <tr> | 46 | <tr> |
46 | <td>{% trans %}Grant type allowed{% endtrans %}</td> | 47 | <td>{{ 'developer.existing_clients.field_grant_types'|trans }}</td> |
47 | <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td> | 48 | <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td> |
48 | </tr> | 49 | </tr> |
49 | </table> | 50 | </table> |
50 | <p> | 51 | <p> |
51 | {% trans %}You have the ability to remove this client. This action is IRREVERSIBLE !{% endtrans %}<br/> | 52 | {{ 'developer.remove.warn_message_1'|trans }}<br/> |
52 | {% trans %}If you remove it, every app configured with that client won't be able to auth on your wallabag.{% endtrans %}<br/> | 53 | {{ 'developer.remove.warn_message_2'|trans }}<br/> |
53 | <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{% trans %}Remove this client{% endtrans %}</a> | 54 | <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans }}</a> |
54 | </p> | 55 | </p> |
55 | </div> | 56 | </div> |
56 | </li> | 57 | </li> |
57 | {% endfor %} | 58 | {% endfor %} |
58 | </ul> | 59 | </ul> |
59 | {% else %} | 60 | {% else %} |
60 | {% trans %}No client yet.{% endtrans %} | 61 | {{ 'developer.existing_clients.no_client'|trans }} |
61 | {% endif %} | 62 | {% endif %} |
62 | </div> | 63 | </div> |
63 | 64 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig index c002c4c3..1c5e2aab 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Edit an entry{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'entry.edit.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | 6 | ||
@@ -10,7 +10,6 @@ | |||
10 | 10 | ||
11 | <form name="entry" method="post" action=""> | 11 | <form name="entry" method="post" action=""> |
12 | <div class="card-content"> | 12 | <div class="card-content"> |
13 | |||
14 | {% if form_errors(form) %} | 13 | {% if form_errors(form) %} |
15 | <span class="black-text">{{ form_errors(form) }}</span> | 14 | <span class="black-text">{{ form_errors(form) }}</span> |
16 | {% endif %} | 15 | {% endif %} |
@@ -25,16 +24,19 @@ | |||
25 | </div> | 24 | </div> |
26 | 25 | ||
27 | <div class="input-field s12"> | 26 | <div class="input-field s12"> |
27 | {{ form_label(form.url) }} | ||
28 | {{ form_widget(form.url) }} | ||
29 | </div> | ||
30 | |||
31 | <div class="input-field s12"> | ||
28 | {{ form_widget(form.is_public) }} | 32 | {{ form_widget(form.is_public) }} |
29 | {{ form_label(form.is_public) }} | 33 | {{ form_label(form.is_public) }} |
30 | </div> | 34 | </div> |
31 | <br> | 35 | <br> |
32 | <button class="btn waves-effect waves-light" type="submit" name="entry[save]"> | 36 | |
33 | {% trans %}Save{% endtrans %} | 37 | {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} |
34 | <i class="mdi-content-send right"></i> | ||
35 | </button> | ||
36 | </div> | 38 | </div> |
37 | <div class="hidden">{{ form_rest(form) }}</div> | 39 | {{ form_rest(form) }} |
38 | </form> | 40 | </form> |
39 | 41 | ||
40 | </div> | 42 | </div> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig index 371992df..8782d639 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig | |||
@@ -4,13 +4,13 @@ | |||
4 | {% set currentRoute = app.request.attributes.get('_route') %} | 4 | {% set currentRoute = app.request.attributes.get('_route') %} |
5 | 5 | ||
6 | {% if currentRoute == 'starred' %} | 6 | {% if currentRoute == 'starred' %} |
7 | {% trans %}starred{% endtrans %} | 7 | {{ 'entry.page_titles.starred'|trans }} |
8 | {% elseif currentRoute == 'archive' %} | 8 | {% elseif currentRoute == 'archive' %} |
9 | {% trans %}archive{% endtrans %} | 9 | {{ 'entry.page_titles.archived'|trans }} |
10 | {% elseif currentRoute == 'all' %} | 10 | {% elseif currentRoute == 'all' %} |
11 | {% trans %}Filtered{% endtrans %} | 11 | {{ 'entry.page_titles.filtered'|trans }} |
12 | {% else %} | 12 | {% else %} |
13 | {% trans %}unread{% endtrans %} | 13 | {{ 'entry.page_titles.unread'|trans }} |
14 | {% endif %} | 14 | {% endif %} |
15 | 15 | ||
16 | {% endblock %} | 16 | {% endblock %} |
@@ -18,7 +18,9 @@ | |||
18 | {% block content %} | 18 | {% block content %} |
19 | {% block pager %} | 19 | {% block pager %} |
20 | <div class="results clearfix"> | 20 | <div class="results clearfix"> |
21 | <div class="nb-results left">{% transchoice entries.count %}{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.{% endtranschoice %}</div> | 21 | <div class="nb-results left"> |
22 | {{ 'entry.list.number_on_the_page'|transchoice(entries.count) }} | ||
23 | </div> | ||
22 | <ul class="pagination right"> | 24 | <ul class="pagination right"> |
23 | {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %} | 25 | {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %} |
24 | <li class="{{ currentPage == p ? 'active':'waves-effect'}}"> | 26 | <li class="{{ currentPage == p ? 'active':'waves-effect'}}"> |
@@ -52,9 +54,9 @@ | |||
52 | <span class="tool reading-time"> | 54 | <span class="tool reading-time"> |
53 | {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} | 55 | {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} |
54 | {% if readingTime > 0 %} | 56 | {% if readingTime > 0 %} |
55 | {% trans with {'%readingTime%': readingTime } %}estimated reading time: %readingTime% min{% endtrans %} | 57 | {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }} |
56 | {% else %} | 58 | {% else %} |
57 | {% trans with {'%inferior%': '<small class="inferieur"><</small>'} %}estimated reading time: %inferior% 1 min{% endtrans %} | 59 | {{ 'entry.list.reading_time_less_one_minute'|trans|raw }} |
58 | {% endif %} | 60 | {% endif %} |
59 | </span> | 61 | </span> |
60 | </div> | 62 | </div> |
@@ -72,7 +74,7 @@ | |||
72 | 74 | ||
73 | <div class="estimatedTime grey-text"> | 75 | <div class="estimatedTime grey-text"> |
74 | <span class="tool reading-time"> | 76 | <span class="tool reading-time"> |
75 | {% trans %}estimated reading time{% endtrans %}: | 77 | {{ 'entry.list.reading_time'|trans }} |
76 | {% if entry.readingTime > 0 %}{{ entry.readingTime }}{% else %}<small class="inferieur"><</small> 1{% endif %} min | 78 | {% if entry.readingTime > 0 %}{{ entry.readingTime }}{% else %}<small class="inferieur"><</small> 1{% endif %} min |
77 | </span> | 79 | </span> |
78 | </div> | 80 | </div> |
@@ -82,13 +84,15 @@ | |||
82 | {% endif %} | 84 | {% endif %} |
83 | 85 | ||
84 | <div class="card-action"> | 86 | <div class="card-action"> |
85 | <span class="bold"><a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a></bold> | 87 | <span class="bold"> |
88 | <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a> | ||
89 | </bold> | ||
86 | 90 | ||
87 | <ul class="tools links right"> | 91 | <ul class="tools links right"> |
88 | <li> | 92 | <li> |
89 | <a title="{% trans %}Toggle mark as read{% endtrans %}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a> | 93 | <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a> |
90 | <a title="{% trans %}Toggle favorite{% endtrans %}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a> | 94 | <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a> |
91 | <a title="{% trans %}Delete{% endtrans %}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a> | 95 | <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a> |
92 | </li> | 96 | </li> |
93 | </ul> | 97 | </ul> |
94 | </div> | 98 | </div> |
@@ -103,7 +107,7 @@ | |||
103 | {% if currentRoute == 'homepage' %} | 107 | {% if currentRoute == 'homepage' %} |
104 | {% set currentRoute = 'unread' %} | 108 | {% set currentRoute = 'unread' %} |
105 | {% endif %} | 109 | {% endif %} |
106 | <h4 class="center">{% trans %}Export{% endtrans %}</h4> | 110 | <h4 class="center">{{ 'entry.list.export_title'|trans }}</h4> |
107 | <ul> | 111 | <ul> |
108 | {% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">EPUB</a></li>{% endif %} | 112 | {% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">EPUB</a></li>{% endif %} |
109 | {% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">MOBI</a></li>{% endif %} | 113 | {% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">MOBI</a></li>{% endif %} |
@@ -119,34 +123,34 @@ | |||
119 | <div id="filters" class="side-nav fixed right-aligned"> | 123 | <div id="filters" class="side-nav fixed right-aligned"> |
120 | <form action="{{ path('all') }}"> | 124 | <form action="{{ path('all') }}"> |
121 | 125 | ||
122 | <h4 class="center">{% trans %}Filters{% endtrans %}</h4> | 126 | <h4 class="center">{{ 'entry.filters.title'|trans }}</h4> |
123 | 127 | ||
124 | <div class="row"> | 128 | <div class="row"> |
125 | <div class="col s12"> | 129 | <div class="col s12"> |
126 | <label>{% trans %}Status{% endtrans %}</label> | 130 | <label>{{ 'entry.filters.status_label'|trans }}</label> |
127 | </div> | 131 | </div> |
128 | 132 | ||
129 | <div class="input-field col s6 with-checkbox"> | 133 | <div class="input-field col s6 with-checkbox"> |
130 | {{ form_widget(form.isArchived) }} | 134 | {{ form_widget(form.isArchived) }} |
131 | <label for="entry_filter_isArchived">{% trans %}Archived{% endtrans %}</label> | 135 | {{ form_label(form.isArchived) }} |
132 | </div> | 136 | </div> |
133 | 137 | ||
134 | <div class="input-field col s6 with-checkbox"> | 138 | <div class="input-field col s6 with-checkbox"> |
135 | {{ form_widget(form.isStarred) }} | 139 | {{ form_widget(form.isStarred) }} |
136 | <label for="entry_filter_isStarred">{% trans %}Starred{% endtrans %}</label> | 140 | {{ form_label(form.isStarred) }} |
137 | </div> | 141 | </div> |
138 | 142 | ||
139 | <div class="col s12"> | 143 | <div class="col s12"> |
140 | <label>{% trans %}Preview picture{% endtrans %}</label> | 144 | <label>{{ 'entry.filters.preview_picture_help'|trans }}</label> |
141 | </div> | 145 | </div> |
142 | 146 | ||
143 | <div class="input-field col s12 with-checkbox"> | 147 | <div class="input-field col s12 with-checkbox"> |
144 | {{ form_widget(form.previewPicture) }} | 148 | {{ form_widget(form.previewPicture) }} |
145 | <label for="entry_filter_previewPicture">{% trans %}Has a preview picture{% endtrans %}</label> | 149 | {{ form_label(form.previewPicture) }} |
146 | </div> | 150 | </div> |
147 | 151 | ||
148 | <div class="col s12"> | 152 | <div class="col s12"> |
149 | <label>{% trans %}Language{% endtrans %}</label> | 153 | {{ form_label(form.language) }} |
150 | </div> | 154 | </div> |
151 | 155 | ||
152 | <div class="input-field col s12"> | 156 | <div class="input-field col s12"> |
@@ -154,43 +158,42 @@ | |||
154 | </div> | 158 | </div> |
155 | 159 | ||
156 | <div class="col s12"> | 160 | <div class="col s12"> |
157 | <label>{% trans %}Reading time in minutes{% endtrans %}</label> | 161 | {{ form_label(form.readingTime) }} |
158 | </div> | 162 | </div> |
159 | <div class="input-field col s6"> | 163 | <div class="input-field col s6"> |
160 | {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }} | 164 | {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }} |
161 | <label for="entry_filter_readingTime_left_number">{% trans %}from{% endtrans %}</label> | 165 | <label for="entry_filter_readingTime_left_number">{{ 'entry.filters.reading_time.from'|trans }}</label> |
162 | </div> | 166 | </div> |
163 | <div class="input-field col s6"> | 167 | <div class="input-field col s6"> |
164 | {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }} | 168 | {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }} |
165 | <label for="entry_filter_readingTime_right_number">{% trans %}to{% endtrans %}</label> | 169 | <label for="entry_filter_readingTime_right_number">{{ 'entry.filters.reading_time.to'|trans }}</label> |
166 | </div> | 170 | </div> |
167 | 171 | ||
168 | <div class="input-field col s12"> | 172 | <div class="input-field col s12"> |
169 | {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com' | trans} }) }} | 173 | {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com'} }) }} |
170 | <label for="entry_filter_domainName">{% trans %}Domain name{% endtrans %}</label> | 174 | {{ form_label(form.domainName) }} |
171 | </div> | 175 | </div> |
172 | 176 | ||
173 | <div class="col s12"> | 177 | <div class="col s12"> |
174 | <label>{% trans %}Creation date{% endtrans %}</label> | 178 | {{ form_label(form.createdAt) }} |
175 | </div> | 179 | </div> |
176 | 180 | ||
177 | <div class="input-field col s6"> | 181 | <div class="input-field col s6"> |
178 | {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }} | 182 | {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }} |
179 | <label for="entry_filter_createdAt_left_date" class="active">{% trans %}from{% endtrans %}</label> | 183 | <label for="entry_filter_createdAt_left_date" class="active">{{ 'entry.filters.created_at.from'|trans }}</label> |
180 | </div> | 184 | </div> |
181 | <div class="input-field col s6"> | 185 | <div class="input-field col s6"> |
182 | {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }} | 186 | {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }} |
183 | <label for="entry_filter_createdAt_right_date" class="active">{% trans %}to{% endtrans %}</label> | 187 | <label for="entry_filter_createdAt_right_date" class="active">{{ 'entry.filters.created_at.to'|trans }}</label> |
184 | </div> | 188 | </div> |
185 | 189 | ||
186 | <div class="col s6"> | 190 | <div class="col s6"> |
187 | <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{% trans %}Clear{% endtrans %}</a> | 191 | <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{{ 'entry.filters.action.clear'|trans }}</a> |
188 | </div> | 192 | </div> |
189 | 193 | ||
190 | <div class="col s6"> | 194 | <div class="col s6"> |
191 | <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{% trans %}Filter{% endtrans %}</button> | 195 | <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{{ 'entry.filters.action.filter'|trans }}</button> |
192 | </div> | 196 | </div> |
193 | |||
194 | </div> | 197 | </div> |
195 | 198 | ||
196 | </form> | 199 | </form> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig index a39a8dc3..98f7194c 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig | |||
@@ -18,9 +18,9 @@ | |||
18 | <description> | 18 | <description> |
19 | <![CDATA[ | 19 | <![CDATA[ |
20 | {%- if entry.readingTime > 0 -%} | 20 | {%- if entry.readingTime > 0 -%} |
21 | {% trans %}estimated reading time :{% endtrans %} {{ entry.readingTime }} min | 21 | {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }} |
22 | {%- else -%} | 22 | {%- else -%} |
23 | {% trans %}estimated reading time :{% endtrans %} < 1 min | 23 | {{ 'entry.list.reading_time_less_one_minute'|trans|raw }} |
24 | {%- endif %} | 24 | {%- endif %} |
25 | 25 | ||
26 | {{ entry.content|raw -}} | 26 | {{ entry.content|raw -}} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig index 6f33da23..032d2d9b 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig | |||
@@ -2,6 +2,8 @@ | |||
2 | 2 | ||
3 | {% block title %}{{ entry.title|raw }} ({{ entry.domainName|removeWww }}){% endblock %} | 3 | {% block title %}{{ entry.title|raw }} ({{ entry.domainName|removeWww }}){% endblock %} |
4 | 4 | ||
5 | {% block body_class %}entry{% endblock %} | ||
6 | |||
5 | {% block menu %} | 7 | {% block menu %} |
6 | <div class="progress"> | 8 | <div class="progress"> |
7 | <div class="determinate"></div> | 9 | <div class="determinate"></div> |
@@ -17,12 +19,12 @@ | |||
17 | </ul> | 19 | </ul> |
18 | <ul class="right"> | 20 | <ul class="right"> |
19 | <li> | 21 | <li> |
20 | <a class="waves-effect" title="{% trans %}Mark as read{% endtrans %}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> | 22 | <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> |
21 | <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> | 23 | <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> |
22 | </a> | 24 | </a> |
23 | </li> | 25 | </li> |
24 | <li> | 26 | <li> |
25 | <a class="waves-effect" title="{% trans %}Favorite{% endtrans %}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> | 27 | <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> |
26 | <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> | 28 | <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> |
27 | </a> | 29 | </a> |
28 | </li> | 30 | </li> |
@@ -38,7 +40,7 @@ | |||
38 | <li class="bold border-bottom hide-on-med-and-down"> | 40 | <li class="bold border-bottom hide-on-med-and-down"> |
39 | <a class="waves-effect collapsible-header" href="{{ path('homepage') }}"> | 41 | <a class="waves-effect collapsible-header" href="{{ path('homepage') }}"> |
40 | <i class="mdi-action-exit-to-app small"></i> | 42 | <i class="mdi-action-exit-to-app small"></i> |
41 | <span>{% trans %}back{% endtrans %}</span> | 43 | <span>{{ 'entry.view.left_menu.back_to_homepage'|trans }}</span> |
42 | </a> | 44 | </a> |
43 | <div class="collapsible-body"></div> | 45 | <div class="collapsible-body"></div> |
44 | </li> | 46 | </li> |
@@ -46,38 +48,38 @@ | |||
46 | <li class="bold border-bottom hide-on-med-and-down"> | 48 | <li class="bold border-bottom hide-on-med-and-down"> |
47 | <a class="waves-effect collapsible-header" href="{{ entry.url|e }}"> | 49 | <a class="waves-effect collapsible-header" href="{{ entry.url|e }}"> |
48 | <i class="mdi-content-link small"></i> | 50 | <i class="mdi-content-link small"></i> |
49 | <span>{% trans %}original article{% endtrans %}</span> | 51 | <span>{{ 'entry.view.left_menu.view_original_article'|trans }}</span> |
50 | </a> | 52 | </a> |
51 | <div class="collapsible-body"></div> | 53 | <div class="collapsible-body"></div> |
52 | </li> | 54 | </li> |
53 | 55 | ||
54 | <li class="bold hide-on-med-and-down"> | 56 | <li class="bold hide-on-med-and-down"> |
55 | <a class="waves-effect collapsible-header" title="{% trans %}Re-fetch content{% endtrans %}" href="{{ path('reload_entry', { 'id': entry.id }) }}" id="reload"> | 57 | <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" href="{{ path('reload_entry', { 'id': entry.id }) }}" id="reload"> |
56 | <i class="mdi-action-autorenew small"></i> | 58 | <i class="mdi-action-autorenew small"></i> |
57 | <span>{% trans %}Re-fetch content{% endtrans %}</span> | 59 | <span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span> |
58 | </a> | 60 | </a> |
59 | <div class="collapsible-body"></div> | 61 | <div class="collapsible-body"></div> |
60 | </li> | 62 | </li> |
61 | 63 | ||
62 | <li class="bold hide-on-med-and-down"> | 64 | <li class="bold hide-on-med-and-down"> |
63 | <a class="waves-effect collapsible-header" title="{% trans %}Mark as read{% endtrans %}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> | 65 | <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> |
64 | <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> | 66 | <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> |
65 | <span>{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}</span> | 67 | <span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span> |
66 | </a> | 68 | </a> |
67 | <div class="collapsible-body"></div> | 69 | <div class="collapsible-body"></div> |
68 | </li> | 70 | </li> |
69 | 71 | ||
70 | <li class="bold hide-on-med-and-down"> | 72 | <li class="bold hide-on-med-and-down"> |
71 | <a class="waves-effect collapsible-header" title="{% trans %}Favorite{% endtrans %}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> | 73 | <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> |
72 | <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> | 74 | <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> |
73 | <span>{% trans %}Favorite{% endtrans %}</span> | 75 | <span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span> |
74 | </a> | 76 | </a> |
75 | <div class="collapsible-body"></div> | 77 | <div class="collapsible-body"></div> |
76 | </li> | 78 | </li> |
77 | <li class="bold border-bottom hide-on-med-and-down"> | 79 | <li class="bold border-bottom hide-on-med-and-down"> |
78 | <a class="waves-effect collapsible-header" title="{% trans %}Delete{% endtrans %}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> | 80 | <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> |
79 | <i class="mdi-action-delete small"></i> | 81 | <i class="mdi-action-delete small"></i> |
80 | <span>{% trans %}Delete{% endtrans %}</span> | 82 | <span>{{ 'entry.view.left_menu.delete'|trans }}</span> |
81 | </a> | 83 | </a> |
82 | <div class="collapsible-body"></div> | 84 | <div class="collapsible-body"></div> |
83 | </li> | 85 | </li> |
@@ -85,7 +87,7 @@ | |||
85 | <li class="bold border-bottom hide-on-med-and-down"> | 87 | <li class="bold border-bottom hide-on-med-and-down"> |
86 | <a class="waves-effect collapsible-header" id="nav-btn-add-tag"> | 88 | <a class="waves-effect collapsible-header" id="nav-btn-add-tag"> |
87 | <i class="mdi-action-label-outline small"></i> | 89 | <i class="mdi-action-label-outline small"></i> |
88 | <span>{% trans %}Add a tag{% endtrans %}</span> | 90 | <span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span> |
89 | </a> | 91 | </a> |
90 | <div class="collapsible-body"></div> | 92 | <div class="collapsible-body"></div> |
91 | </li> | 93 | </li> |
@@ -93,7 +95,7 @@ | |||
93 | <li class="bold"> | 95 | <li class="bold"> |
94 | <a class="waves-effect collapsible-header"> | 96 | <a class="waves-effect collapsible-header"> |
95 | <i class="mdi-social-share small"></i> | 97 | <i class="mdi-social-share small"></i> |
96 | <span>{% trans %}Share{% endtrans %}</span> | 98 | <span>{{ 'entry.view.left_menu.share_content'|trans }}</span> |
97 | </a> | 99 | </a> |
98 | <div class="collapsible-body"> | 100 | <div class="collapsible-body"> |
99 | <ul> | 101 | <ul> |
@@ -114,7 +116,7 @@ | |||
114 | {% if craue_setting('share_diaspora') %} | 116 | {% if craue_setting('share_diaspora') %} |
115 | <li> | 117 | <li> |
116 | <a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}¬es=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora}"> | 118 | <a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}¬es=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora}"> |
117 | <span>diaspora}</span> | 119 | <span>diaspora*</span> |
118 | </a> | 120 | </a> |
119 | </li> | 121 | </li> |
120 | {% endif %} | 122 | {% endif %} |
@@ -127,8 +129,8 @@ | |||
127 | {% endif %} | 129 | {% endif %} |
128 | {% if craue_setting('share_mail') %} | 130 | {% if craue_setting('share_mail') %} |
129 | <li> | 131 | <li> |
130 | <a href="mailto:?subject={{ entry.title|url_encode }}&body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"> | 132 | <a href="mailto:?subject={{ entry.title|url_encode }}&body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{{ 'entry.view.left_menu.share_email_label'|trans }}"> |
131 | <span>{% trans %}Email{% endtrans %}</span> | 133 | <span>{{ 'entry.view.left_menu.share_email_label'|trans }}</span> |
132 | </a> | 134 | </a> |
133 | </li> | 135 | </li> |
134 | {% endif %} | 136 | {% endif %} |
@@ -139,7 +141,7 @@ | |||
139 | <li class="bold"> | 141 | <li class="bold"> |
140 | <a class="waves-effect collapsible-header"> | 142 | <a class="waves-effect collapsible-header"> |
141 | <i class="mdi-file-file-download small"></i> | 143 | <i class="mdi-file-file-download small"></i> |
142 | <span>{% trans %}Download{% endtrans %}</span> | 144 | <span>{{ 'entry.view.left_menu.download'|trans }}</span> |
143 | </a> | 145 | </a> |
144 | <div class="collapsible-body"> | 146 | <div class="collapsible-body"> |
145 | <ul> | 147 | <ul> |
@@ -155,40 +157,33 @@ | |||
155 | </li> | 157 | </li> |
156 | 158 | ||
157 | <li class="bold hide-on-large-only"> | 159 | <li class="bold hide-on-large-only"> |
158 | <a class="waves-effect collapsible-header" title="{% trans %}Delete{% endtrans %}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> | 160 | <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> |
159 | <i class="mdi-action-delete small"></i> | 161 | <i class="mdi-action-delete small"></i> |
160 | <span>{% trans %}Delete{% endtrans %}</span> | 162 | <span>{{ 'entry.view.left_menu.delete'|trans }}</span> |
161 | </a> | 163 | </a> |
162 | <div class="collapsible-body"></div> | 164 | <div class="collapsible-body"></div> |
163 | </li> | 165 | </li> |
164 | 166 | ||
165 | <li class="bold"> | 167 | <li class="bold"> |
166 | <a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{% trans %}Does this article appear wrong?{% endtrans %}"> | 168 | <a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.description'|trans }}"> |
167 | <i class="mdi-alert-error small"></i> | 169 | <i class="mdi-alert-error small"></i> |
168 | <span>{% trans %}Problems?{% endtrans %}</span> | 170 | <span>{{ 'entry.view.left_menu.problem.label'|trans }}</span> |
169 | </a> | 171 | </a> |
170 | <div class="collapsible-body"></div> | 172 | <div class="collapsible-body"></div> |
171 | </li> | 173 | </li> |
172 | 174 | ||
173 | </ul> | 175 | </ul> |
174 | 176 | ||
175 | <style> | ||
176 | main { | ||
177 | padding: 0; | ||
178 | } | ||
179 | </style> | ||
180 | |||
181 | {% endblock %} | 177 | {% endblock %} |
182 | 178 | ||
183 | {% block content %} | 179 | {% block content %} |
184 | <div id="article"> | 180 | <div id="article"> |
185 | <header class="mbm"> | 181 | <header class="mbm"> |
186 | <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{% trans %}Edit title{% endtrans %}">✎</a></h1> | 182 | <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1> |
187 | </header> | 183 | </header> |
188 | <aside> | 184 | <aside> |
189 | <a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a> | 185 | <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a> |
190 | {% set nbAnnotations = entry.annotations | length %} | 186 | <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span> |
191 | <span class="tool link mdi-communication-comment"> {% transchoice nbAnnotations %}{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations{% endtranschoice %}</span> | ||
192 | <div id="list"> | 187 | <div id="list"> |
193 | {% for tag in entry.tags %} | 188 | {% for tag in entry.tags %} |
194 | <div class="chip"> | 189 | <div class="chip"> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig index 95ed0785..03768a3d 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Save new entry{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'entry.new.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} | 6 | {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig index f1e56412..0cf4fb74 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig | |||
@@ -7,7 +7,7 @@ | |||
7 | <span class="black-text">{{ form_errors(form.url) }}</span> | 7 | <span class="black-text">{{ form_errors(form.url) }}</span> |
8 | {% endif %} | 8 | {% endif %} |
9 | 9 | ||
10 | {{ form_widget(form.url, { 'attr': {'autocomplete': 'off', 'placeholder': 'http://website'} }) }} | 10 | {{ form_widget(form.url, { 'attr': {'autocomplete': 'off', 'placeholder': 'entry.new.placeholder'} }) }} |
11 | 11 | ||
12 | <div class="hidden">{{ form_rest(form) }}</div> | 12 | {{ form_rest(form) }} |
13 | </form> | 13 | </form> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig index 1368bb09..4b1fdcce 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}About{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'about.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | 6 | ||
@@ -11,56 +11,55 @@ | |||
11 | <div class="row"> | 11 | <div class="row"> |
12 | <div class="div_tabs col s12"> | 12 | <div class="div_tabs col s12"> |
13 | <ul class="tabs"> | 13 | <ul class="tabs"> |
14 | <li class="tab col s3"><a class="active" href="#set1">{% trans %}Who is behind wallabag{% endtrans %}</a></li> | 14 | <li class="tab col s3"><a class="active" href="#set1">{{ 'about.top_menu.who_behind_wallabag'|trans }}</a></li> |
15 | <li class="tab col s3"><a href="#set2">{% trans %}Getting help{% endtrans %}</a></li> | 15 | <li class="tab col s3"><a href="#set2">{{ 'about.top_menu.getting_help'|trans }}</a></li> |
16 | <li class="tab col s3"><a href="#set3">{% trans %}Helping wallabag{% endtrans %}</a></li> | 16 | <li class="tab col s3"><a href="#set3">{{ 'about.top_menu.helping'|trans }}</a></li> |
17 | <li class="tab col s3"><a href="#set4">{% trans %}Contributors{% endtrans %}</a></li> | 17 | <li class="tab col s3"><a href="#set4">{{ 'about.top_menu.contributors'|trans }}</a></li> |
18 | <li class="tab col s3"><a href="#set5">{% trans %}Third-party libraries{% endtrans %}</a></li> | 18 | <li class="tab col s3"><a href="#set5">{{ 'about.top_menu.third_party'|trans }}</a></li> |
19 | </ul> | 19 | </ul> |
20 | </div> | 20 | </div> |
21 | 21 | ||
22 | <div id="set1" class="col s12"> | 22 | <div id="set1" class="col s12"> |
23 | <dt>{% trans %}Developed by{% endtrans %}</dt> | 23 | <dt>{{ 'about.who_behind_wallabag.developped_by'|trans }}</dt> |
24 | <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://cdetc.fr">{% trans %}website{% endtrans %}</a></dd> | 24 | <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://www.loeuillet.org">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd> |
25 | <dd>Thomas Citharel — <a href="https://tcit.fr">{% trans %}website{% endtrans %}</a></dd> | 25 | <dd>Thomas Citharel — <a href="https://tcit.fr">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd> |
26 | <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{% trans %}website{% endtrans %}</a></dd> | 26 | <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd> |
27 | <dt>{% trans %}And many others contributors ♥{% endtrans %} <a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}on GitHub{% endtrans %}</a></dt> | 27 | <dt>{{ 'about.who_behind_wallabag.many_contributors'|trans|raw }}</dt> |
28 | <dt>{% trans %}Project website{% endtrans %}</dt> | 28 | <dt>{{ 'about.who_behind_wallabag.project_website'|trans }}</dt> |
29 | <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd> | 29 | <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd> |
30 | <dt>{% trans %}License{% endtrans %}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt> | 30 | <dt>{{ 'about.who_behind_wallabag.license'|trans }}: <a href="https://en.wikipedia.org/wiki/MIT_License">MIT</a></dt> |
31 | <dt>{% trans %}Version{% endtrans %}: {{ version }}</dt> | 31 | <dt>{{ 'about.who_behind_wallabag.version'|trans }}: {{ version }}</dt> |
32 | </div> | 32 | </div> |
33 | 33 | ||
34 | <div id="set2" class="col s12"> | 34 | <div id="set2" class="col s12"> |
35 | <dl> | 35 | <dl> |
36 | <dt>{% trans %}Documentation{% endtrans %}</dt> | 36 | <dt>{{ 'about.getting_help.documentation'|trans }}</dt> |
37 | <dd><a href="https://doc.wallabag.org/en">english</a></dd> | 37 | <dd><a href="http://doc.wallabag.org/en/v2/">english</a></dd> |
38 | <dd><a href="https://doc.wallabag.org/fr">français</a></dd> | 38 | <dd><a href="http://doc.wallabag.org/fr/v2/">français</a></dd> |
39 | <dd><a href="https://doc.wallabag.org/de">deutsch</a></dd> | ||
40 | 39 | ||
41 | <dt>{% trans %}Bug reports{% endtrans %}</dt> | 40 | <dt>{{ 'about.getting_help.bug_reports'|trans }}</dt> |
42 | <dd><a href="https://support.wallabag.org">{% trans %}On our support website{% endtrans %}</a> {% trans %}or{% endtrans %} <a href="https://github.com/wallabag/wallabag/issues">{% trans %}on GitHub{% endtrans %}</a></dd> | 41 | <dd>{{ 'about.getting_help.support'|trans|raw }}</dd> |
43 | </dl> | 42 | </dl> |
44 | </div> | 43 | </div> |
45 | 44 | ||
46 | <div id="set3" class="col s12"> | 45 | <div id="set3" class="col s12"> |
47 | <dl> | 46 | <dl> |
48 | <dt>{% trans %}wallabag is free and opensource. You can help us:{% endtrans %}</dt> | 47 | <dt>{{ 'about.helping.description'|trans }}</dt> |
49 | <dd>{% trans %}by contributing to the project:{% endtrans %} <a href="https://github.com/wallabag/wallabag/issues/1254">{% trans %}an issue lists all our needs{% endtrans %}</a></dd> | 48 | <dd>{{ 'about.helping.by_contributing_2'|trans }} <a href="https://github.com/wallabag/wallabag/issues/1254">{{ 'about.helping.by_contributing'|trans }}</a></dd> |
50 | <dd><a href="{{ paypal_url }}">{% trans %}via Paypal{% endtrans %}</a></dd> | 49 | <dd><a href="{{ paypal_url }}">{{ 'about.helping.by_paypal'|trans }}</a></dd> |
51 | </dl> | 50 | </dl> |
52 | </div> | 51 | </div> |
53 | 52 | ||
54 | <div id="set4" class="col s12"> | 53 | <div id="set4" class="col s12"> |
55 | <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}Thank you to contributors on wallabag web application{% endtrans %}</a></p> | 54 | <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{{ 'about.contributors.description'|trans }}</a></p> |
56 | </div> | 55 | </div> |
57 | 56 | ||
58 | <div id="set5" class="col s12"> | 57 | <div id="set5" class="col s12"> |
59 | <p>{% trans %}Here are the list of third-party libraries used in wallabag (with their licenses):{% endtrans %}</p> | 58 | <p>{{ 'about.third_party.description'|trans }}</p> |
60 | <table> | 59 | <table class="striped"> |
61 | <tr> | 60 | <tr> |
62 | <th>{% trans %}Package{% endtrans %}</th> | 61 | <th>{{ 'about.third_party.package'|trans }}</th> |
63 | <th>{% trans %}License{% endtrans %}</th> | 62 | <th>{{ 'about.third_party.license'|trans }}</th> |
64 | </tr> | 63 | </tr> |
65 | <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr> | 64 | <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr> |
66 | <tr><td>CraueConfigBundle</td><td>MIT</td></tr> | 65 | <tr><td>CraueConfigBundle</td><td>MIT</td></tr> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig index e2795409..4354a6b7 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig | |||
@@ -1,44 +1,40 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}howto{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'howto.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | 6 | ||
7 | <div class="row"> | 7 | <div class="row"> |
8 | <div class="col s12"> | 8 | <div class="col s12"> |
9 | <div class="card-panel settings"> | 9 | <div class="card-panel settings"> |
10 | <p>{{ 'howto.page_description'|trans }}</p> | ||
10 | 11 | ||
11 | <div class="row"> | 12 | <div class="row"> |
12 | <div class="div_tabs col s12"> | ||
13 | <ul class="tabs"> | ||
14 | <li class="tab col s3"><a class="active" href="#set1">{% trans %}Form{% endtrans %}</a></li> | ||
15 | <li class="tab col s3"><a href="#set2">{% trans %}Browser addons{% endtrans %}</a></li> | ||
16 | <li class="tab col s3"><a href="#set3">{% trans %}Mobile apps{% endtrans %}</a></li> | ||
17 | <li class="tab col s3"><a href="#set4">{% trans %}Bookmarklet{% endtrans %}</a></li> | ||
18 | </ul> | ||
19 | </div> | ||
20 | 13 | ||
21 | <div id="set1" class="col s12"> | 14 | <div class="col s12"> |
22 | <a href="{{ path('new') }}">{% trans %}Thanks to this form{% endtrans %}</a> | 15 | <a href="{{ path('new') }}">{{ 'howto.form.description'|trans }}</a> |
23 | </div> | 16 | </div> |
24 | 17 | ||
25 | <div id="set2" class="col s12"> | 18 | <div class="col s12"> |
19 | <h5>{{ 'howto.top_menu.browser_addons'|trans }}</h5> | ||
26 | <ul> | 20 | <ul> |
27 | <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans %}Standard Firefox Add-On{% endtrans %}</a></li> | 21 | <li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li> |
28 | <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans %}Chrome Extension{% endtrans %}</a></li> | 22 | <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li> |
29 | </ul> | 23 | </ul> |
30 | </div> | 24 | </div> |
31 | 25 | ||
32 | <div id="set3" class="col s12"> | 26 | <div class="col s12"> |
27 | <h5>{{ 'howto.top_menu.mobile_apps'|trans }}</h5> | ||
33 | <ul> | 28 | <ul> |
34 | <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">via F-Droid</a> {% trans %} or {% endtrans %} <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">via Google Play</a></li> | 29 | <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li> |
35 | <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{% trans %}download the application{% endtrans %}</a></li> | 30 | <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li> |
36 | <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{% trans %}download the application{% endtrans %}</a></li> | 31 | <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li> |
37 | </ul> | 32 | </ul> |
38 | </div> | 33 | </div> |
39 | 34 | ||
40 | <div id="set4" class="col s12"> | 35 | <div class="col s12"> |
41 | {% trans %}Drag & drop this link to your bookmarks bar:{% endtrans %} | 36 | <h5>{{ 'howto.top_menu.bookmarklet'|trans }}</h5> |
37 | {{ 'howto.bookmarklet.description'|trans }} | ||
42 | {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} | 38 | {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} |
43 | </div> | 39 | </div> |
44 | 40 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig index 03754d38..706c4a79 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Quickstart{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | 6 | ||
@@ -9,56 +9,63 @@ | |||
9 | <div class="card-panel settings"> | 9 | <div class="card-panel settings"> |
10 | 10 | ||
11 | <div class="row"> | 11 | <div class="row"> |
12 | <h3>{% trans %}Welcome to wallabag!{% endtrans %}</h3> | 12 | <h3>{{ 'quickstart.intro.title'|trans }}</h3> |
13 | <p>{% trans %}We'll accompany you to visit wallabag and show you some features which can interess you.{% endtrans %}</p> | 13 | <p>{{ 'quickstart.intro.paragraph_1'|trans }}</p> |
14 | <p>{% trans %}Follow us!{% endtrans %}</p> | 14 | <p>{{ 'quickstart.intro.paragraph_2'|trans }}</p> |
15 | <h4>{% trans %}Configure the application{% endtrans %}</h4> | 15 | |
16 | <h4>{{ 'quickstart.configure.title'|trans }}</h4> | ||
16 | <ul> | 17 | <ul> |
17 | <li><a href="{{ path('config') }}">{% trans %}Change language and design{% endtrans %}</a></li> | 18 | <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li> |
18 | <li><a href="{{ path('config') }}#set2">{% trans %}Enable RSS feeds{% endtrans %}</a></li> | 19 | <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li> |
19 | <li><a href="{{ path('config') }}#set5">{% trans %}Write rules to automatically tag your articles{% endtrans %}</a></li> | 20 | <li><a href="{{ path('config') }}#set5">{{ 'quickstart.configure.tagging_rules'|trans }}</a></li> |
20 | </ul> | 21 | </ul> |
22 | |||
21 | {% if is_granted('ROLE_SUPER_ADMIN') %} | 23 | {% if is_granted('ROLE_SUPER_ADMIN') %} |
22 | <h4>{% trans %}Administration{% endtrans %}</h4> | 24 | <h4>{{ 'quickstart.admin.title'|trans }}</h4> |
23 | <p>{% trans %}As a administrator, you have privileges on wallabag. You can:{% endtrans %}</p> | 25 | <p>{{ 'quickstart.admin.description'|trans }}</p> |
24 | <ul> | 26 | <ul> |
25 | <li><a href="{{ path('config') }}#set6">{% trans %}Create a new user{% endtrans %}</a></li> | 27 | <li><a href="{{ path('config') }}#set6">{{ 'quickstart.admin.new_user'|trans }}</a></li> |
26 | <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{% trans %}Configure analytics{% endtrans %}</a></li> | 28 | <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{{ 'quickstart.admin.analytics'|trans }}</a></li> |
27 | <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{% trans %}Enable some parameters about article sharing{% endtrans %}</a></li> | 29 | <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{{ 'quickstart.admin.sharing'|trans }}</a></li> |
28 | <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{% trans %}Configure export{% endtrans %}</a></li> | 30 | <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{{ 'quickstart.admin.export'|trans }}</a></li> |
29 | <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{% trans %}Configure import{% endtrans %}</a></li> | 31 | <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{{ 'quickstart.admin.import'|trans }}</a></li> |
30 | </ul> | 32 | </ul> |
31 | {% endif %} | 33 | {% endif %} |
32 | <h4>{% trans %}First steps{% endtrans %}</h4> | 34 | |
35 | <h4>{{ 'quickstart.first_steps.title'|trans }}</h4> | ||
33 | <ul> | 36 | <ul> |
34 | <li><a href="{{ path('new') }}">{% trans %}Save your first article{% endtrans %}</a></li> | 37 | <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li> |
35 | <li><a href="{{ path('unread') }}">{% trans %}And classify it!{% endtrans %}</a></li> | 38 | <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li> |
36 | </ul> | 39 | </ul> |
37 | <h4>{% trans %}Migrate from an existing service{% endtrans %}</h4> | 40 | |
38 | <p>{% trans %}You're using an other service? We'll help you to retrieve your data on wallabag.{% endtrans %}</p> | 41 | <h4>{{ 'quickstart.migrate.title'|trans }}</h4> |
42 | <p>{{ 'quickstart.migrate.description'|trans }}</p> | ||
39 | <ul> | 43 | <ul> |
40 | <li><a href="{{ path('import_pocket') }}">{% trans %}Migrate from Pocket{% endtrans %}</a></li> | 44 | <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li> |
41 | <li><a href="{{ path('import_wallabag_v1') }}">{% trans %}Migrate from wallabag v1{% endtrans %}</a></li> | 45 | <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li> |
42 | <li><a href="{{ path('import_wallabag_v2') }}">{% trans %}Migrate from wallabag v2{% endtrans %}</a></li> | 46 | <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li> |
43 | </ul> | 47 | </ul> |
44 | <h4>{% trans %}Developers{% endtrans %}</h4> | 48 | |
49 | <h4>{{ 'quickstart.developer.title'|trans }}</h4> | ||
45 | <ul> | 50 | <ul> |
46 | <li><a href="{{ path('developer') }}">{% trans %}Create your third application{% endtrans %}</a></li> | 51 | <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li> |
47 | </ul> | 52 | </ul> |
48 | <h4>{% trans %}Full documentation{% endtrans %}</h4> | 53 | |
54 | <h4>{{ 'quickstart.docs.title'|trans }}</h4> | ||
49 | <ul> | 55 | <ul> |
50 | <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{% trans %}Annotate your article{% endtrans %}</a></li> | 56 | <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li> |
51 | <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{% trans %}Convert your articles into ePUB or PDF{% endtrans %}</a></li> | 57 | <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li> |
52 | <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{% trans %}See how you can look for an article by using search engine and filters{% endtrans %}</a></li> | 58 | <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{{ 'quickstart.docs.search_filters'|trans }}</a></li> |
53 | <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{% trans %}What can I do if an article encounters errors during fetching?{% endtrans %}</a></li> | 59 | <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{{ 'quickstart.docs.fetching_errors'|trans }}</a></li> |
54 | <li><a href="http://doc.wallabag.org/">{% trans %}And so many other articles!{% endtrans %}</a></li> | 60 | <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li> |
55 | </ul> | 61 | </ul> |
56 | <h4>{% trans %}Support{% endtrans %}</h4> | 62 | |
57 | <p>{% trans %}If you need some help, we are here for you.{% endtrans %}</p> | 63 | <h4>{{ 'quickstart.support.title'|trans }}</h4> |
64 | <p>{{ 'quickstart.support.description'|trans }}</p> | ||
58 | <ul> | 65 | <ul> |
59 | <li><a href="https://github.com/wallabag/wallabag/issues/">{% trans %}On GitHub{% endtrans %}</a></li> | 66 | <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li> |
60 | <li><a href="mailto:hello@wallabag.org">{% trans %}By email{% endtrans %}</a></li> | 67 | <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li> |
61 | <li><a href="https://gitter.im/wallabag/wallabag">{% trans %}On Gitter{% endtrans %}</a></li> | 68 | <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li> |
62 | </ul> | 69 | </ul> |
63 | </div> | 70 | </div> |
64 | 71 | ||
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig index 79310307..6e552560 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig | |||
@@ -9,5 +9,5 @@ | |||
9 | 9 | ||
10 | {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }} | 10 | {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }} |
11 | 11 | ||
12 | <div class="hidden">{{ form_rest(form) }}</div> | 12 | {{ form_rest(form) }} |
13 | </form> | 13 | </form> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig index 19754d41..6b583689 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig | |||
@@ -1,10 +1,10 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title "Tags" %} | 3 | {% block title %}{{ 'tag.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block content %} | 5 | {% block content %} |
6 | <div class="results clearfix"> | 6 | <div class="results clearfix"> |
7 | <div class="nb-results left">{% transchoice tags.count %}{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.{% endtranschoice %}</div> | 7 | <div class="nb-results left">{{ 'tag.list.number_on_the_page'|transchoice(tags.count) }}</div> |
8 | </div> | 8 | </div> |
9 | <br /> | 9 | <br /> |
10 | <ul class="row data"> | 10 | <ul class="row data"> |
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig index f5d03084..75170f91 100644 --- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig | |||
@@ -31,7 +31,7 @@ | |||
31 | <ul id="slide-out" class="side-nav fixed"> | 31 | <ul id="slide-out" class="side-nav fixed"> |
32 | {% block logo %} | 32 | {% block logo %} |
33 | <li class="logo border-bottom"> | 33 | <li class="logo border-bottom"> |
34 | <a title="{% trans %}Back to unread articles{% endtrans %}" href="{{ path('unread') }}"> | 34 | <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}"> |
35 | <img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-square.png') }}" alt="wallabag logo" /> | 35 | <img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-square.png') }}" alt="wallabag logo" /> |
36 | </a> | 36 | </a> |
37 | </li> | 37 | </li> |
@@ -39,19 +39,41 @@ | |||
39 | 39 | ||
40 | {% set currentRoute = app.request.attributes.get('_route') %} | 40 | {% set currentRoute = app.request.attributes.get('_route') %} |
41 | 41 | ||
42 | <li class="bold {% if currentRoute == 'unread' or currentRoute == 'homepage' %}active{% endif %}"><a class="waves-effect" href="{{ path('unread') }}">{% trans %}unread{% endtrans %}</a></li> | 42 | <li class="bold {% if currentRoute == 'unread' or currentRoute == 'homepage' %}active{% endif %}"> |
43 | <li class="bold {% if currentRoute == 'starred' %}active{% endif %}"><a class="waves-effect" href="{{ path('starred') }}">{% trans %}starred{% endtrans %}</a></li> | 43 | <a class="waves-effect" href="{{ path('unread') }}">{{ 'menu.left.unread'|trans }}</a> |
44 | <li class="bold {% if currentRoute == 'archive' %}active{% endif %}"><a class="waves-effect" href="{{ path('archive') }}">{% trans %}archive{% endtrans %}</a></li> | 44 | </li> |
45 | <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}"><a class="waves-effect" href="{{ path('all') }}">{% trans %}all{% endtrans %}</a></li> | 45 | <li class="bold {% if currentRoute == 'starred' %}active{% endif %}"> |
46 | <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}"><a class="waves-effect" href="{{ path('tag') }}">{% trans %}tags{% endtrans %}</a></li> | 46 | <a class="waves-effect" href="{{ path('starred') }}">{{ 'menu.left.starred'|trans }}</a> |
47 | <li class="bold {% if currentRoute == 'config' %}active{% endif %}"><a class="waves-effect" href="{{ path('config') }}">{% trans %}config{% endtrans %}</a></li> | 47 | </li> |
48 | <li class="bold {% if currentRoute == 'archive' %}active{% endif %}"> | ||
49 | <a class="waves-effect" href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }}</a> | ||
50 | </li> | ||
51 | <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}"> | ||
52 | <a class="waves-effect" href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }}</a> | ||
53 | </li> | ||
54 | <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}"> | ||
55 | <a class="waves-effect" href="{{ path('tag') }}">{{ 'menu.left.tags'|trans }}</a> | ||
56 | </li> | ||
57 | <li class="bold {% if currentRoute == 'config' %}active{% endif %}"> | ||
58 | <a class="waves-effect" href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a> | ||
59 | </li> | ||
48 | {% if is_granted('ROLE_SUPER_ADMIN') %} | 60 | {% if is_granted('ROLE_SUPER_ADMIN') %} |
49 | <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}"><a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{% trans %}internal settings{% endtrans %}</a></li> | 61 | <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}"> |
62 | <a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a> | ||
63 | </li> | ||
50 | {% endif %} | 64 | {% endif %} |
51 | <li class="bold {% if currentRoute == 'import' %}active{% endif %}"><a class="waves-effect" href="{{ path('import') }}">{% trans %}import{% endtrans %}</a></li> | 65 | <li class="bold {% if currentRoute == 'import' %}active{% endif %}"> |
52 | <li class="bold {% if currentRoute == 'howto' %}active{% endif %}"><a class="waves-effect" href="{{ path('howto') }}">{% trans %}howto{% endtrans %}</a></li> | 66 | <a class="waves-effect" href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a> |
53 | <li class="bold {% if currentRoute == 'developer' %}active{% endif %}"><a class="waves-effect" href="{{ path('developer') }}">{% trans %}Developer{% endtrans %}</a></li> | 67 | </li> |
54 | <li class="bold"><a class="waves-effect" class="icon icon-power" href="{{ path('fos_user_security_logout') }}" title="{% trans %}logout{% endtrans %}">{% trans %}logout{% endtrans %}</a></li> | 68 | <li class="bold {% if currentRoute == 'developer' %}active{% endif %}"> |
69 | <a class="waves-effect" href="{{ path('developer') }}">{{ 'menu.left.developer'|trans }}</a> | ||
70 | </li> | ||
71 | <li class="bold {% if currentRoute == 'howto' %}active{% endif %}"> | ||
72 | <a class="waves-effect" href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a> | ||
73 | </li> | ||
74 | <li class="bold"> | ||
75 | <a class="waves-effect" class="icon icon-power" href="{{ path('fos_user_security_logout') }}">{{ 'menu.left.logout'|trans }}</a> | ||
76 | </li> | ||
55 | </ul> | 77 | </ul> |
56 | <div class="nav-wrapper nav-panels"> | 78 | <div class="nav-wrapper nav-panels"> |
57 | <a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="mdi-navigation-menu"></i></a> | 79 | <a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="mdi-navigation-menu"></i></a> |
@@ -61,21 +83,37 @@ | |||
61 | </div> | 83 | </div> |
62 | <div class="input-field nav-panel-buttom"> | 84 | <div class="input-field nav-panel-buttom"> |
63 | <ul> | 85 | <ul> |
64 | <li class="bold"><a title="{% trans %}Add a new entry{% endtrans %}" class="waves-effect" href="{{ path('new') }}" id="nav-btn-add"><i class="mdi-content-add"></i></a></li> | 86 | <li class="bold"> |
65 | <li><a title="{% trans %}Search{% endtrans %}" class="waves-effect" href="javascript: void(null);" id="nav-btn-search"><i class="mdi-action-search"></i></a> | 87 | <a title="{{ 'menu.top.add_new_entry'|trans }}" class="waves-effect" href="{{ path('new') }}" id="nav-btn-add"> |
66 | <li id="button_filters"><a title="{% trans %}Filter entries{% endtrans %}" href="#" data-activates="filters" class="nav-panel-menu button-collapse-right"><i class="mdi-content-filter-list"></i></a></li> | 88 | <i class="mdi-content-add"></i> |
67 | <li id="button_export"><a title="{% trans %}Export{% endtrans %}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export" class="nav-panel-menu button-collapse-right"><i class="mdi-file-file-download"></i></a></li> | 89 | </a> |
90 | </li> | ||
91 | <!--<li> | ||
92 | <a title="{{ 'menu.top.search'|trans }}" class="waves-effect" href="javascript: void(null);" id="nav-btn-search"> | ||
93 | <i class="mdi-action-search"></i> | ||
94 | </a> | ||
95 | </li>--> | ||
96 | <li id="button_filters"> | ||
97 | <a title="{{ 'menu.top.filter_entries'|trans }}" href="#" data-activates="filters" class="nav-panel-menu button-collapse-right"> | ||
98 | <i class="mdi-content-filter-list"></i> | ||
99 | </a> | ||
100 | </li> | ||
101 | <li id="button_export"> | ||
102 | <a title="{{ 'menu.top.export'|trans }}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export" class="nav-panel-menu button-collapse-right"> | ||
103 | <i class="mdi-file-file-download"></i> | ||
104 | </a> | ||
105 | </li> | ||
68 | </ul> | 106 | </ul> |
69 | </div> | 107 | </div> |
70 | <form method="get" action="index.php"> | 108 | <form method="get" action="index.php"> |
71 | <div class="input-field nav-panel-search" style="display: none"> | 109 | <div class="input-field nav-panel-search" style="display: none"> |
72 | <input name="search" id="searchfield" type="search" required placeholder="{% trans %}Enter your search here{% endtrans %}"> | 110 | <input name="search" id="searchfield" type="search" required placeholder="{{ 'menu.search_form.input_label'|trans }}"> |
73 | <label for="search"><i class="mdi-action-search"></i></label> | 111 | <label for="search"><i class="mdi-action-search"></i></label> |
74 | <i class="mdi-navigation-close"></i> | 112 | <i class="mdi-navigation-close"></i> |
75 | </div> | 113 | </div> |
76 | </form> | 114 | </form> |
77 | <div class="input-field nav-panel-add" style="display: none"> | 115 | <div class="input-field nav-panel-add" style="display: none"> |
78 | {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} | 116 | {{ render(controller("WallabagCoreBundle:Entry:addEntryForm")) }} |
79 | <label for="add" class="active"><i class="mdi-content-add"></i></label> | 117 | <label for="add" class="active"><i class="mdi-content-add"></i></label> |
80 | <i class="mdi-navigation-close"></i> | 118 | <i class="mdi-navigation-close"></i> |
81 | </div> | 119 | </div> |
@@ -88,35 +126,40 @@ | |||
88 | <div class="container"> | 126 | <div class="container"> |
89 | <div class="row"> | 127 | <div class="row"> |
90 | <div class="col l6 s12"> | 128 | <div class="col l6 s12"> |
91 | <h5 class="white-text">{% trans %}Take wallabag with you{% endtrans %}</h5> | 129 | <h5 class="white-text">{{ 'footer.wallabag.elsewhere'|trans }}</h5> |
92 | <p class="grey-text text-lighten-4"> | 130 | <p class="grey-text text-lighten-4"> |
93 | 131 | <a target="_blank" class="grey-text text-lighten-3" href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" title="Android"> | |
94 | <a target="_blank" class="grey-text text-lighten-3" href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" title="android"><span class="icon-android"></span></a> | 132 | <span class="icon-android"></span> |
95 | 133 | </a> | |
96 | <a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS"><span class="icon-apple"></a> | 134 | <a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS"> |
97 | 135 | <span class="icon-apple"></span> | |
98 | <a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/ru/firefox/addon/wallabag/" title="Firefox"><span class="icon-firefox"></span></a> | 136 | </a> |
99 | 137 | <a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/ru/firefox/addon/wallabag/" title="Firefox"> | |
100 | <a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome"><span class="icon-chrome"></a> | 138 | <span class="icon-firefox"></span> |
101 | 139 | </a> | |
140 | <a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome"> | ||
141 | <span class="icon-chrome"></span> | ||
142 | </a> | ||
102 | </p> | 143 | </p> |
103 | </div> | 144 | </div> |
104 | <div class="col l4 offset-l2 s12"> | 145 | <div class="col l4 offset-l2 s12"> |
105 | <h5 class="white-text">{% trans %}Social{% endtrans %}</h5> | 146 | <h5 class="white-text">{{ 'footer.wallabag.social'|trans }}</h5> |
106 | 147 | <a target="_blank" class="grey-text text-lighten-3" href="https://twitter.com/wallabagapp" title="Twitter"> | |
107 | <a target="_blank" class="grey-text text-lighten-3" href="https://twitter.com/wallabagapp" title="Twitter"><span class="icon-twitter"></span></a> | 148 | <span class="icon-twitter"></span> |
108 | 149 | </a> | |
109 | <a target="_blank" class="grey-text text-lighten-3" href="https://plus.google.com/+WallabagOrg/posts" title="Google+"><span class="icon-google-plus2"></span></a> | 150 | <a target="_blank" class="grey-text text-lighten-3" href="https://plus.google.com/+WallabagOrg/posts" title="Google+"> |
110 | 151 | <span class="icon-google-plus2"></span> | |
111 | <a target="_blank" class="grey-text text-lighten-3" href="https://facebook.com/Wallabag" title="Facebook"><span class="icon-facebook2"></span></a> | 152 | </a> |
112 | 153 | <a target="_blank" class="grey-text text-lighten-3" href="https://facebook.com/Wallabag" title="Facebook"> | |
154 | <span class="icon-facebook2"></span> | ||
155 | </a> | ||
113 | </div> | 156 | </div> |
114 | </div> | 157 | </div> |
115 | </div> | 158 | </div> |
116 | <div class="footer-copyright"> | 159 | <div class="footer-copyright"> |
117 | <div class="container"> | 160 | <div class="container"> |
118 | <p>{% trans %}powered by{% endtrans %} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p> | 161 | <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p> |
119 | <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{% trans %}About{% endtrans %}</a> | 162 | <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a> |
120 | </div> | 163 | </div> |
121 | </div> | 164 | </div> |
122 | </footer> | 165 | </footer> |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php index 51425fe1..f2d26750 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php | |||
@@ -57,7 +57,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
57 | $crawler = $client->followRedirect(); | 57 | $crawler = $client->followRedirect(); |
58 | 58 | ||
59 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 59 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
60 | $this->assertContains('Config saved', $alert[0]); | 60 | $this->assertContains('flashes.config.notice.config_saved', $alert[0]); |
61 | } | 61 | } |
62 | 62 | ||
63 | public function dataForUpdateFailed() | 63 | public function dataForUpdateFailed() |
@@ -102,7 +102,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
102 | 'change_passwd[new_password][first]' => '', | 102 | 'change_passwd[new_password][first]' => '', |
103 | 'change_passwd[new_password][second]' => '', | 103 | 'change_passwd[new_password][second]' => '', |
104 | ), | 104 | ), |
105 | 'Wrong value for your current password', | 105 | 'validator.password_wrong_value', |
106 | ), | 106 | ), |
107 | array( | 107 | array( |
108 | array( | 108 | array( |
@@ -118,7 +118,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
118 | 'change_passwd[new_password][first]' => 'hop', | 118 | 'change_passwd[new_password][first]' => 'hop', |
119 | 'change_passwd[new_password][second]' => '', | 119 | 'change_passwd[new_password][second]' => '', |
120 | ), | 120 | ), |
121 | 'The password fields must match', | 121 | 'validator.password_must_match', |
122 | ), | 122 | ), |
123 | array( | 123 | array( |
124 | array( | 124 | array( |
@@ -126,7 +126,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
126 | 'change_passwd[new_password][first]' => 'hop', | 126 | 'change_passwd[new_password][first]' => 'hop', |
127 | 'change_passwd[new_password][second]' => 'hop', | 127 | 'change_passwd[new_password][second]' => 'hop', |
128 | ), | 128 | ), |
129 | 'Password should by at least', | 129 | 'validator.password_too_short', |
130 | ), | 130 | ), |
131 | ); | 131 | ); |
132 | } | 132 | } |
@@ -177,7 +177,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
177 | $crawler = $client->followRedirect(); | 177 | $crawler = $client->followRedirect(); |
178 | 178 | ||
179 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 179 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
180 | $this->assertContains('Password updated', $alert[0]); | 180 | $this->assertContains('flashes.config.notice.password_updated', $alert[0]); |
181 | } | 181 | } |
182 | 182 | ||
183 | public function dataForUserFailed() | 183 | public function dataForUserFailed() |
@@ -188,14 +188,14 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
188 | 'update_user[name]' => '', | 188 | 'update_user[name]' => '', |
189 | 'update_user[email]' => '', | 189 | 'update_user[email]' => '', |
190 | ), | 190 | ), |
191 | 'Please enter an email', | 191 | 'fos_user.email.blank', |
192 | ), | 192 | ), |
193 | array( | 193 | array( |
194 | array( | 194 | array( |
195 | 'update_user[name]' => '', | 195 | 'update_user[name]' => '', |
196 | 'update_user[email]' => 'test', | 196 | 'update_user[email]' => 'test', |
197 | ), | 197 | ), |
198 | 'The email is not valid', | 198 | 'fos_user.email.invalid', |
199 | ), | 199 | ), |
200 | ); | 200 | ); |
201 | } | 201 | } |
@@ -244,8 +244,8 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
244 | 244 | ||
245 | $crawler = $client->followRedirect(); | 245 | $crawler = $client->followRedirect(); |
246 | 246 | ||
247 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 247 | $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text'))); |
248 | $this->assertContains('Information updated', $alert[0]); | 248 | $this->assertContains('flashes.config.notice.user_updated', $alert[0]); |
249 | } | 249 | } |
250 | 250 | ||
251 | public function dataForNewUserFailed() | 251 | public function dataForNewUserFailed() |
@@ -258,7 +258,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
258 | 'new_user[plainPassword][second]' => '', | 258 | 'new_user[plainPassword][second]' => '', |
259 | 'new_user[email]' => '', | 259 | 'new_user[email]' => '', |
260 | ), | 260 | ), |
261 | 'Please enter a username', | 261 | 'fos_user.username.blank', |
262 | ), | 262 | ), |
263 | array( | 263 | array( |
264 | array( | 264 | array( |
@@ -267,7 +267,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
267 | 'new_user[plainPassword][second]' => 'mypassword', | 267 | 'new_user[plainPassword][second]' => 'mypassword', |
268 | 'new_user[email]' => '', | 268 | 'new_user[email]' => '', |
269 | ), | 269 | ), |
270 | 'The username is too short', | 270 | 'fos_user.username.short', |
271 | ), | 271 | ), |
272 | array( | 272 | array( |
273 | array( | 273 | array( |
@@ -276,7 +276,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
276 | 'new_user[plainPassword][second]' => 'mypassword', | 276 | 'new_user[plainPassword][second]' => 'mypassword', |
277 | 'new_user[email]' => 'test', | 277 | 'new_user[email]' => 'test', |
278 | ), | 278 | ), |
279 | 'The email is not valid', | 279 | 'fos_user.email.invalid', |
280 | ), | 280 | ), |
281 | array( | 281 | array( |
282 | array( | 282 | array( |
@@ -285,7 +285,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
285 | 'new_user[plainPassword][second]' => 'wallacewallace', | 285 | 'new_user[plainPassword][second]' => 'wallacewallace', |
286 | 'new_user[email]' => 'wallace@wallace.me', | 286 | 'new_user[email]' => 'wallace@wallace.me', |
287 | ), | 287 | ), |
288 | 'The username is already used', | 288 | 'fos_user.username.already_used', |
289 | ), | 289 | ), |
290 | array( | 290 | array( |
291 | array( | 291 | array( |
@@ -294,7 +294,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
294 | 'new_user[plainPassword][second]' => 'mypassword2', | 294 | 'new_user[plainPassword][second]' => 'mypassword2', |
295 | 'new_user[email]' => 'wallace@wallace.me', | 295 | 'new_user[email]' => 'wallace@wallace.me', |
296 | ), | 296 | ), |
297 | 'The password fields must match', | 297 | 'validator.password_must_match', |
298 | ), | 298 | ), |
299 | ); | 299 | ); |
300 | } | 300 | } |
@@ -346,7 +346,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
346 | $crawler = $client->followRedirect(); | 346 | $crawler = $client->followRedirect(); |
347 | 347 | ||
348 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 348 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
349 | $this->assertContains('User "wallace" added', $alert[0]); | 349 | $this->assertContains('flashes.config.notice.user_added', $alert[0]); |
350 | 350 | ||
351 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | 351 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); |
352 | $user = $em | 352 | $user = $em |
@@ -382,7 +382,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
382 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 382 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
383 | 383 | ||
384 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); | 384 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
385 | $this->assertContains('You need to generate a token first.', $body[0]); | 385 | $this->assertContains('config.form_rss.no_token', $body[0]); |
386 | 386 | ||
387 | $client->request('GET', '/generate-token'); | 387 | $client->request('GET', '/generate-token'); |
388 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | 388 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); |
@@ -390,7 +390,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
390 | $crawler = $client->followRedirect(); | 390 | $crawler = $client->followRedirect(); |
391 | 391 | ||
392 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); | 392 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
393 | $this->assertNotContains('You need to generate a token first.', $body[0]); | 393 | $this->assertNotContains('config.form_rss.no_token', $body[0]); |
394 | } | 394 | } |
395 | 395 | ||
396 | public function testGenerateTokenAjax() | 396 | public function testGenerateTokenAjax() |
@@ -418,11 +418,6 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
418 | 418 | ||
419 | $crawler = $client->request('GET', '/config'); | 419 | $crawler = $client->request('GET', '/config'); |
420 | 420 | ||
421 | if (500 == $client->getResponse()->getStatusCode()) { | ||
422 | var_export($client->getResponse()->getContent()); | ||
423 | die(); | ||
424 | } | ||
425 | |||
426 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 421 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
427 | 422 | ||
428 | $form = $crawler->filter('button[id=rss_config_save]')->form(); | 423 | $form = $crawler->filter('button[id=rss_config_save]')->form(); |
@@ -438,7 +433,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
438 | $crawler = $client->followRedirect(); | 433 | $crawler = $client->followRedirect(); |
439 | 434 | ||
440 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 435 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
441 | $this->assertContains('RSS information updated', $alert[0]); | 436 | $this->assertContains('flashes.config.notice.rss_updated', $alert[0]); |
442 | } | 437 | } |
443 | 438 | ||
444 | public function dataForRssFailed() | 439 | public function dataForRssFailed() |
@@ -454,7 +449,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
454 | array( | 449 | array( |
455 | 'rss_config[rss_limit]' => 1000000000000, | 450 | 'rss_config[rss_limit]' => 1000000000000, |
456 | ), | 451 | ), |
457 | 'This will certainly kill the app', | 452 | 'validator.rss_limit_too_hight', |
458 | ), | 453 | ), |
459 | ); | 454 | ); |
460 | } | 455 | } |
@@ -504,7 +499,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
504 | $crawler = $client->followRedirect(); | 499 | $crawler = $client->followRedirect(); |
505 | 500 | ||
506 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 501 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
507 | $this->assertContains('Tagging rules updated', $alert[0]); | 502 | $this->assertContains('flashes.config.notice.tagging_rules_updated', $alert[0]); |
508 | 503 | ||
509 | $deleteLink = $crawler->filter('.delete')->last()->link(); | 504 | $deleteLink = $crawler->filter('.delete')->last()->link(); |
510 | 505 | ||
@@ -513,7 +508,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
513 | 508 | ||
514 | $crawler = $client->followRedirect(); | 509 | $crawler = $client->followRedirect(); |
515 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 510 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); |
516 | $this->assertContains('Tagging rule deleted', $alert[0]); | 511 | $this->assertContains('flashes.config.notice.tagging_rules_deleted', $alert[0]); |
517 | } | 512 | } |
518 | 513 | ||
519 | public function dataForTaggingRuleFailed() | 514 | public function dataForTaggingRuleFailed() |
@@ -556,12 +551,14 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
556 | 551 | ||
557 | $form = $crawler->filter('button[id=tagging_rule_save]')->form(); | 552 | $form = $crawler->filter('button[id=tagging_rule_save]')->form(); |
558 | 553 | ||
559 | $client->submit($form, $data); | 554 | $crawler = $client->submit($form, $data); |
560 | 555 | ||
561 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 556 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
562 | 557 | ||
558 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); | ||
559 | |||
563 | foreach ($messages as $message) { | 560 | foreach ($messages as $message) { |
564 | $this->assertContains($message, $client->getResponse()->getContent()); | 561 | $this->assertContains($message, $body[0]); |
565 | } | 562 | } |
566 | } | 563 | } |
567 | 564 | ||
@@ -574,9 +571,11 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
574 | ->getRepository('WallabagCoreBundle:TaggingRule') | 571 | ->getRepository('WallabagCoreBundle:TaggingRule') |
575 | ->findAll()[0]; | 572 | ->findAll()[0]; |
576 | 573 | ||
577 | $client->request('GET', '/tagging-rule/delete/'.$rule->getId()); | 574 | $crawler = $client->request('GET', '/tagging-rule/delete/'.$rule->getId()); |
575 | |||
578 | $this->assertEquals(403, $client->getResponse()->getStatusCode()); | 576 | $this->assertEquals(403, $client->getResponse()->getStatusCode()); |
579 | $this->assertContains('You can not access this tagging ryle', $client->getResponse()->getContent()); | 577 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
578 | $this->assertContains('You can not access this tagging rule', $body[0]); | ||
580 | } | 579 | } |
581 | 580 | ||
582 | public function testDemoMode() | 581 | public function testDemoMode() |
@@ -603,7 +602,7 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
603 | $client->submit($form, $data); | 602 | $client->submit($form, $data); |
604 | 603 | ||
605 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | 604 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); |
606 | $this->assertContains('In demonstration mode, you can\'t change password for this user.', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]); | 605 | $this->assertContains('flashes.config.notice.password_not_updated_demo', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]); |
607 | 606 | ||
608 | $config->set('demo_mode_enabled', 0); | 607 | $config->set('demo_mode_enabled', 0); |
609 | $config->set('demo_mode_username', 'wallabag'); | 608 | $config->set('demo_mode_username', 'wallabag'); |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php index 5512d6e1..46fbaf91 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php | |||
@@ -25,17 +25,18 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
25 | $client = $this->getClient(); | 25 | $client = $this->getClient(); |
26 | 26 | ||
27 | $client->request('GET', '/unread/list'); | 27 | $client->request('GET', '/unread/list'); |
28 | $client->followRedirect(); | 28 | $crawler = $client->followRedirect(); |
29 | 29 | ||
30 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 30 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
31 | $this->assertContains('We\'ll accompany you to visit wallabag', $client->getResponse()->getContent()); | 31 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
32 | $this->assertContains('quickstart.intro.paragraph_1', $body[0]); | ||
32 | 33 | ||
33 | // Test if quickstart is disabled when user has 1 entry | 34 | // Test if quickstart is disabled when user has 1 entry |
34 | $crawler = $client->request('GET', '/new'); | 35 | $crawler = $client->request('GET', '/new'); |
35 | 36 | ||
36 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 37 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
37 | 38 | ||
38 | $form = $crawler->filter('button[type=submit]')->form(); | 39 | $form = $crawler->filter('form[name=entry]')->form(); |
39 | 40 | ||
40 | $data = array( | 41 | $data = array( |
41 | 'entry[url]' => $this->url, | 42 | 'entry[url]' => $this->url, |
@@ -45,8 +46,9 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
45 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | 46 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); |
46 | $client->followRedirect(); | 47 | $client->followRedirect(); |
47 | 48 | ||
48 | $client->request('GET', '/unread/list'); | 49 | $crawler = $client->request('GET', '/unread/list'); |
49 | $this->assertContains('There is one entry.', $client->getResponse()->getContent()); | 50 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
51 | $this->assertContains('entry.list.number_on_the_page', $body[0]); | ||
50 | } | 52 | } |
51 | 53 | ||
52 | public function testGetNew() | 54 | public function testGetNew() |
@@ -59,7 +61,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
59 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 61 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
60 | 62 | ||
61 | $this->assertCount(1, $crawler->filter('input[type=url]')); | 63 | $this->assertCount(1, $crawler->filter('input[type=url]')); |
62 | $this->assertCount(1, $crawler->filter('button[type=submit]')); | 64 | $this->assertCount(1, $crawler->filter('form[name=entry]')); |
63 | } | 65 | } |
64 | 66 | ||
65 | public function testPostNewViaBookmarklet() | 67 | public function testPostNewViaBookmarklet() |
@@ -96,7 +98,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
96 | 98 | ||
97 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 99 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
98 | 100 | ||
99 | $form = $crawler->filter('button[type=submit]')->form(); | 101 | $form = $crawler->filter('form[name=entry]')->form(); |
100 | 102 | ||
101 | $crawler = $client->submit($form); | 103 | $crawler = $client->submit($form); |
102 | 104 | ||
@@ -117,7 +119,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
117 | 119 | ||
118 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 120 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
119 | 121 | ||
120 | $form = $crawler->filter('button[type=submit]')->form(); | 122 | $form = $crawler->filter('form[name=entry]')->form(); |
121 | 123 | ||
122 | $data = array( | 124 | $data = array( |
123 | 'entry[url]' => $this->url, | 125 | 'entry[url]' => $this->url, |
@@ -146,7 +148,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
146 | 148 | ||
147 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 149 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
148 | 150 | ||
149 | $form = $crawler->filter('button[type=submit]')->form(); | 151 | $form = $crawler->filter('form[name=entry]')->form(); |
150 | 152 | ||
151 | $data = array( | 153 | $data = array( |
152 | 'entry[url]' => $this->url, | 154 | 'entry[url]' => $this->url, |
@@ -170,7 +172,7 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
170 | 172 | ||
171 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 173 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
172 | 174 | ||
173 | $form = $crawler->filter('button[type=submit]')->form(); | 175 | $form = $crawler->filter('form[name=entry]')->form(); |
174 | 176 | ||
175 | $data = array( | 177 | $data = array( |
176 | 'entry[url]' => $url = 'https://github.com/wallabag/wallabag', | 178 | 'entry[url]' => $url = 'https://github.com/wallabag/wallabag', |
@@ -240,10 +242,11 @@ class EntryControllerTest extends WallabagCoreTestCase | |||
240 | ->getRepository('WallabagCoreBundle:Entry') | 242 | ->getRepository('WallabagCoreBundle:Entry') |
241 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); | 243 | ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); |
242 | 244 | ||
243 | $client->request('GET', '/view/'.$content->getId()); | 245 | $crawler = $client->request('GET', '/view/'.$content->getId()); |
244 | 246 | ||
245 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); | 247 | $this->assertEquals(200, $client->getResponse()->getStatusCode()); |
246 | $this->assertContains($content->getTitle(), $client->getResponse()->getContent()); | 248 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
249 | $this->assertContains($content->getTitle(), $body[0]); | ||
247 | } | 250 | } |
248 | 251 | ||
249 | /** | 252 | /** |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php index b9f5d835..ed292633 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php | |||
@@ -12,53 +12,61 @@ class SecurityControllerTest extends WallabagCoreTestCase | |||
12 | $client = $this->getClient(); | 12 | $client = $this->getClient(); |
13 | $client->followRedirects(); | 13 | $client->followRedirects(); |
14 | 14 | ||
15 | $client->request('GET', '/config'); | 15 | $crawler = $client->request('GET', '/config'); |
16 | $this->assertContains('RSS', $client->getResponse()->getContent()); | 16 | $this->assertContains('config.form_rss.description', $crawler->filter('body')->extract(array('_text'))[0]); |
17 | } | 17 | } |
18 | 18 | ||
19 | public function testLoginWith2Factor() | 19 | public function testLoginWith2Factor() |
20 | { | 20 | { |
21 | $client = $this->getClient(); | 21 | $client = $this->getClient(); |
22 | 22 | ||
23 | if ($client->getContainer()->getParameter('twofactor_auth')) { | 23 | if (!$client->getContainer()->getParameter('twofactor_auth')) { |
24 | $client->followRedirects(); | 24 | $this->markTestSkipped('twofactor_auth is not enabled.'); |
25 | 25 | ||
26 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | 26 | return; |
27 | $user = $em | ||
28 | ->getRepository('WallabagUserBundle:User') | ||
29 | ->findOneByUsername('admin'); | ||
30 | $user->setTwoFactorAuthentication(true); | ||
31 | $em->persist($user); | ||
32 | $em->flush(); | ||
33 | |||
34 | $this->logInAs('admin'); | ||
35 | $client->request('GET', '/config'); | ||
36 | $this->assertContains('trusted computer', $client->getResponse()->getContent()); | ||
37 | |||
38 | // restore user | ||
39 | $user = $em | ||
40 | ->getRepository('WallabagUserBundle:User') | ||
41 | ->findOneByUsername('admin'); | ||
42 | $user->setTwoFactorAuthentication(false); | ||
43 | $em->persist($user); | ||
44 | $em->flush(); | ||
45 | } | 27 | } |
28 | |||
29 | $client->followRedirects(); | ||
30 | |||
31 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
32 | $user = $em | ||
33 | ->getRepository('WallabagUserBundle:User') | ||
34 | ->findOneByUsername('admin'); | ||
35 | $user->setTwoFactorAuthentication(true); | ||
36 | $em->persist($user); | ||
37 | $em->flush(); | ||
38 | |||
39 | $this->logInAs('admin'); | ||
40 | $crawler = $client->request('GET', '/config'); | ||
41 | $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(array('_text'))[0]); | ||
42 | |||
43 | // restore user | ||
44 | $user = $em | ||
45 | ->getRepository('WallabagUserBundle:User') | ||
46 | ->findOneByUsername('admin'); | ||
47 | $user->setTwoFactorAuthentication(false); | ||
48 | $em->persist($user); | ||
49 | $em->flush(); | ||
46 | } | 50 | } |
47 | 51 | ||
48 | public function testTrustedComputer() | 52 | public function testTrustedComputer() |
49 | { | 53 | { |
50 | $client = $this->getClient(); | 54 | $client = $this->getClient(); |
51 | 55 | ||
52 | if ($client->getContainer()->getParameter('twofactor_auth')) { | 56 | if (!$client->getContainer()->getParameter('twofactor_auth')) { |
53 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | 57 | $this->markTestSkipped('twofactor_auth is not enabled.'); |
54 | $user = $em | ||
55 | ->getRepository('WallabagUserBundle:User') | ||
56 | ->findOneByUsername('admin'); | ||
57 | 58 | ||
58 | $date = new \DateTime(); | 59 | return; |
59 | $user->addTrustedComputer('ABCDEF', $date->add(new \DateInterval('P1M'))); | ||
60 | $this->assertTrue($user->isTrustedComputer('ABCDEF')); | ||
61 | $this->assertFalse($user->isTrustedComputer('FEDCBA')); | ||
62 | } | 60 | } |
61 | |||
62 | $em = $client->getContainer()->get('doctrine.orm.entity_manager'); | ||
63 | $user = $em | ||
64 | ->getRepository('WallabagUserBundle:User') | ||
65 | ->findOneByUsername('admin'); | ||
66 | |||
67 | $date = new \DateTime(); | ||
68 | $user->addTrustedComputer('ABCDEF', $date->add(new \DateInterval('P1M'))); | ||
69 | $this->assertTrue($user->isTrustedComputer('ABCDEF')); | ||
70 | $this->assertFalse($user->isTrustedComputer('FEDCBA')); | ||
63 | } | 71 | } |
64 | } | 72 | } |
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php index d6391282..1457c807 100644 --- a/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php +++ b/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php | |||
@@ -30,7 +30,7 @@ class TagControllerTest extends WallabagCoreTestCase | |||
30 | 30 | ||
31 | $crawler = $client->request('GET', '/view/'.$entry->getId()); | 31 | $crawler = $client->request('GET', '/view/'.$entry->getId()); |
32 | 32 | ||
33 | $form = $crawler->filter('button[id=tag_save]')->form(); | 33 | $form = $crawler->filter('form[name=tag]')->form(); |
34 | 34 | ||
35 | $data = array( | 35 | $data = array( |
36 | 'tag[label]' => $this->tagName, | 36 | 'tag[label]' => $this->tagName, |
@@ -68,6 +68,38 @@ class TagControllerTest extends WallabagCoreTestCase | |||
68 | $this->assertEquals(2, count($newEntry->getTags())); | 68 | $this->assertEquals(2, count($newEntry->getTags())); |
69 | } | 69 | } |
70 | 70 | ||
71 | public function testAddMultipleTagToEntry() | ||
72 | { | ||
73 | $this->logInAs('admin'); | ||
74 | $client = $this->getClient(); | ||
75 | |||
76 | $entry = $client->getContainer() | ||
77 | ->get('doctrine.orm.entity_manager') | ||
78 | ->getRepository('WallabagCoreBundle:Entry') | ||
79 | ->findOneByUsernameAndNotArchived('admin'); | ||
80 | |||
81 | $crawler = $client->request('GET', '/view/'.$entry->getId()); | ||
82 | |||
83 | $form = $crawler->filter('form[name=tag]')->form(); | ||
84 | |||
85 | $data = array( | ||
86 | 'tag[label]' => 'foo2, bar2', | ||
87 | ); | ||
88 | |||
89 | $client->submit($form, $data); | ||
90 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
91 | |||
92 | $newEntry = $client->getContainer() | ||
93 | ->get('doctrine.orm.entity_manager') | ||
94 | ->getRepository('WallabagCoreBundle:Entry') | ||
95 | ->find($entry->getId()); | ||
96 | |||
97 | $tags = $newEntry->getTags()->toArray(); | ||
98 | $this->assertGreaterThanOrEqual(2, count($tags)); | ||
99 | $this->assertNotEquals(false, array_search('foo2', $tags), 'Tag foo2 is assigned to the entry'); | ||
100 | $this->assertNotEquals(false, array_search('bar2', $tags), 'Tag bar2 is assigned to the entry'); | ||
101 | } | ||
102 | |||
71 | public function testRemoveTagFromEntry() | 103 | public function testRemoveTagFromEntry() |
72 | { | 104 | { |
73 | $this->logInAs('admin'); | 105 | $this->logInAs('admin'); |
diff --git a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php b/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php index f58b5828..74bfb054 100644 --- a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php +++ b/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php | |||
@@ -10,6 +10,40 @@ use Wallabag\UserBundle\Entity\User; | |||
10 | 10 | ||
11 | class ContentProxyTest extends \PHPUnit_Framework_TestCase | 11 | class ContentProxyTest extends \PHPUnit_Framework_TestCase |
12 | { | 12 | { |
13 | public function testWithBadUrl() | ||
14 | { | ||
15 | $tagger = $this->getTaggerMock(); | ||
16 | $tagger->expects($this->once()) | ||
17 | ->method('tag'); | ||
18 | |||
19 | $graby = $this->getMockBuilder('Graby\Graby') | ||
20 | ->setMethods(array('fetchContent')) | ||
21 | ->disableOriginalConstructor() | ||
22 | ->getMock(); | ||
23 | |||
24 | $graby->expects($this->any()) | ||
25 | ->method('fetchContent') | ||
26 | ->willReturn(array( | ||
27 | 'html' => false, | ||
28 | 'title' => '', | ||
29 | 'url' => '', | ||
30 | 'content_type' => '', | ||
31 | 'language' => '', | ||
32 | )); | ||
33 | |||
34 | $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger()); | ||
35 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://user@:80'); | ||
36 | |||
37 | $this->assertEquals('http://user@:80', $entry->getUrl()); | ||
38 | $this->assertEmpty($entry->getTitle()); | ||
39 | $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent()); | ||
40 | $this->assertEmpty($entry->getPreviewPicture()); | ||
41 | $this->assertEmpty($entry->getMimetype()); | ||
42 | $this->assertEmpty($entry->getLanguage()); | ||
43 | $this->assertEquals(0.0, $entry->getReadingTime()); | ||
44 | $this->assertEquals(false, $entry->getDomainName()); | ||
45 | } | ||
46 | |||
13 | public function testWithEmptyContent() | 47 | public function testWithEmptyContent() |
14 | { | 48 | { |
15 | $tagger = $this->getTaggerMock(); | 49 | $tagger = $this->getTaggerMock(); |
@@ -121,6 +155,57 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase | |||
121 | $this->assertEquals('1.1.1.1', $entry->getDomainName()); | 155 | $this->assertEquals('1.1.1.1', $entry->getDomainName()); |
122 | } | 156 | } |
123 | 157 | ||
158 | public function testWithForcedContent() | ||
159 | { | ||
160 | $tagger = $this->getTaggerMock(); | ||
161 | $tagger->expects($this->once()) | ||
162 | ->method('tag'); | ||
163 | |||
164 | $graby = $this->getMockBuilder('Graby\Graby')->getMock(); | ||
165 | |||
166 | $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger()); | ||
167 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [ | ||
168 | 'html' => str_repeat('this is my content', 325), | ||
169 | 'title' => 'this is my title', | ||
170 | 'url' => 'http://1.1.1.1', | ||
171 | 'content_type' => 'text/html', | ||
172 | 'language' => 'fr', | ||
173 | ]); | ||
174 | |||
175 | $this->assertEquals('http://1.1.1.1', $entry->getUrl()); | ||
176 | $this->assertEquals('this is my title', $entry->getTitle()); | ||
177 | $this->assertContains('this is my content', $entry->getContent()); | ||
178 | $this->assertEquals('text/html', $entry->getMimetype()); | ||
179 | $this->assertEquals('fr', $entry->getLanguage()); | ||
180 | $this->assertEquals(4.0, $entry->getReadingTime()); | ||
181 | $this->assertEquals('1.1.1.1', $entry->getDomainName()); | ||
182 | } | ||
183 | |||
184 | public function testTaggerThrowException() | ||
185 | { | ||
186 | $graby = $this->getMockBuilder('Graby\Graby') | ||
187 | ->disableOriginalConstructor() | ||
188 | ->getMock(); | ||
189 | |||
190 | $tagger = $this->getTaggerMock(); | ||
191 | $tagger->expects($this->once()) | ||
192 | ->method('tag') | ||
193 | ->will($this->throwException(new \Exception())); | ||
194 | |||
195 | $tagRepo = $this->getTagRepositoryMock(); | ||
196 | $proxy = new ContentProxy($graby, $tagger, $tagRepo, $this->getLogger()); | ||
197 | |||
198 | $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [ | ||
199 | 'html' => str_repeat('this is my content', 325), | ||
200 | 'title' => 'this is my title', | ||
201 | 'url' => 'http://1.1.1.1', | ||
202 | 'content_type' => 'text/html', | ||
203 | 'language' => 'fr', | ||
204 | ]); | ||
205 | |||
206 | $this->assertCount(0, $entry->getTags()); | ||
207 | } | ||
208 | |||
124 | public function testAssignTagsWithArrayAndExtraSpaces() | 209 | public function testAssignTagsWithArrayAndExtraSpaces() |
125 | { | 210 | { |
126 | $graby = $this->getMockBuilder('Graby\Graby') | 211 | $graby = $this->getMockBuilder('Graby\Graby') |
diff --git a/src/Wallabag/ImportBundle/Controller/PocketController.php b/src/Wallabag/ImportBundle/Controller/PocketController.php index c88e115e..11ce649d 100644 --- a/src/Wallabag/ImportBundle/Controller/PocketController.php +++ b/src/Wallabag/ImportBundle/Controller/PocketController.php | |||
@@ -17,8 +17,8 @@ class PocketController extends Controller | |||
17 | { | 17 | { |
18 | $pocket = $this->get('wallabag_import.pocket.import'); | 18 | $pocket = $this->get('wallabag_import.pocket.import'); |
19 | $form = $this->createFormBuilder($pocket) | 19 | $form = $this->createFormBuilder($pocket) |
20 | ->add('read', CheckboxType::class, array( | 20 | ->add('mark_as_read', CheckboxType::class, array( |
21 | 'label' => 'Mark all as read', | 21 | 'label' => 'import.form.mark_as_read_label', |
22 | 'required' => false, | 22 | 'required' => false, |
23 | )) | 23 | )) |
24 | ->getForm(); | 24 | ->getForm(); |
@@ -38,8 +38,17 @@ class PocketController extends Controller | |||
38 | $requestToken = $this->get('wallabag_import.pocket.import') | 38 | $requestToken = $this->get('wallabag_import.pocket.import') |
39 | ->getRequestToken($this->generateUrl('import', array(), UrlGeneratorInterface::ABSOLUTE_URL)); | 39 | ->getRequestToken($this->generateUrl('import', array(), UrlGeneratorInterface::ABSOLUTE_URL)); |
40 | 40 | ||
41 | if (false === $requestToken) { | ||
42 | $this->get('session')->getFlashBag()->add( | ||
43 | 'notice', | ||
44 | 'flashes.import.notice.failed' | ||
45 | ); | ||
46 | |||
47 | return $this->redirect($this->generateUrl('import_pocket')); | ||
48 | } | ||
49 | |||
41 | $this->get('session')->set('import.pocket.code', $requestToken); | 50 | $this->get('session')->set('import.pocket.code', $requestToken); |
42 | $this->get('session')->set('read', $request->request->get('form')['read']); | 51 | $this->get('session')->set('mark_as_read', $request->request->get('form')['mark_as_read']); |
43 | 52 | ||
44 | return $this->redirect( | 53 | return $this->redirect( |
45 | 'https://getpocket.com/auth/authorize?request_token='.$requestToken.'&redirect_uri='.$this->generateUrl('import_pocket_callback', array(), UrlGeneratorInterface::ABSOLUTE_URL), | 54 | 'https://getpocket.com/auth/authorize?request_token='.$requestToken.'&redirect_uri='.$this->generateUrl('import_pocket_callback', array(), UrlGeneratorInterface::ABSOLUTE_URL), |
@@ -52,10 +61,11 @@ class PocketController extends Controller | |||
52 | */ | 61 | */ |
53 | public function callbackAction() | 62 | public function callbackAction() |
54 | { | 63 | { |
55 | $message = 'Import failed, please try again.'; | 64 | $message = 'flashes.import.notice.failed'; |
56 | $pocket = $this->get('wallabag_import.pocket.import'); | 65 | $pocket = $this->get('wallabag_import.pocket.import'); |
57 | $markAsRead = $this->get('session')->get('read'); | 66 | |
58 | $this->get('session')->remove('read'); | 67 | $markAsRead = $this->get('session')->get('mark_as_read'); |
68 | $this->get('session')->remove('mark_as_read'); | ||
59 | 69 | ||
60 | // something bad happend on pocket side | 70 | // something bad happend on pocket side |
61 | if (false === $pocket->authorize($this->get('session')->get('import.pocket.code'))) { | 71 | if (false === $pocket->authorize($this->get('session')->get('import.pocket.code'))) { |
@@ -69,7 +79,10 @@ class PocketController extends Controller | |||
69 | 79 | ||
70 | if (true === $pocket->setMarkAsRead($markAsRead)->import()) { | 80 | if (true === $pocket->setMarkAsRead($markAsRead)->import()) { |
71 | $summary = $pocket->getSummary(); | 81 | $summary = $pocket->getSummary(); |
72 | $message = 'Import summary: '.$summary['imported'].' imported, '.$summary['skipped'].' already saved.'; | 82 | $message = $this->get('translator')->trans('flashes.import.notice.summary', array( |
83 | '%imported%' => $summary['imported'], | ||
84 | '%skipped%' => $summary['skipped'], | ||
85 | )); | ||
73 | } | 86 | } |
74 | 87 | ||
75 | $this->get('session')->getFlashBag()->add( | 88 | $this->get('session')->getFlashBag()->add( |
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagController.php b/src/Wallabag/ImportBundle/Controller/WallabagController.php new file mode 100644 index 00000000..01883d4a --- /dev/null +++ b/src/Wallabag/ImportBundle/Controller/WallabagController.php | |||
@@ -0,0 +1,85 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\ImportBundle\Controller; | ||
4 | |||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Symfony\Component\HttpFoundation\Request; | ||
7 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | ||
8 | |||
9 | /** | ||
10 | * Define Wallabag import for v1 and v2, since there are very similar. | ||
11 | */ | ||
12 | abstract class WallabagController extends Controller | ||
13 | { | ||
14 | /** | ||
15 | * Return the service to handle the import. | ||
16 | * | ||
17 | * @return \Wallabag\ImportBundle\Import\ImportInterface | ||
18 | */ | ||
19 | abstract protected function getImportService(); | ||
20 | |||
21 | /** | ||
22 | * Return the template used for the form. | ||
23 | * | ||
24 | * @return string | ||
25 | */ | ||
26 | abstract protected function getImportTemplate(); | ||
27 | |||
28 | /** | ||
29 | * Handle import request. | ||
30 | * | ||
31 | * @param Request $request | ||
32 | * | ||
33 | * @return Response|RedirectResponse | ||
34 | */ | ||
35 | public function indexAction(Request $request) | ||
36 | { | ||
37 | $form = $this->createForm(UploadImportType::class); | ||
38 | $form->handleRequest($request); | ||
39 | |||
40 | $wallabag = $this->getImportService(); | ||
41 | |||
42 | if ($form->isValid()) { | ||
43 | $file = $form->get('file')->getData(); | ||
44 | $markAsRead = $form->get('mark_as_read')->getData(); | ||
45 | $name = $this->getUser()->getId().'.json'; | ||
46 | |||
47 | if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | ||
48 | $res = $wallabag | ||
49 | ->setUser($this->getUser()) | ||
50 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | ||
51 | ->setMarkAsRead($markAsRead) | ||
52 | ->import(); | ||
53 | |||
54 | $message = 'flashes.import.notice.failed'; | ||
55 | |||
56 | if (true === $res) { | ||
57 | $summary = $wallabag->getSummary(); | ||
58 | $message = $this->get('translator')->trans('flashes.import.notice.summary', array( | ||
59 | '%imported%' => $summary['imported'], | ||
60 | '%skipped%' => $summary['skipped'], | ||
61 | )); | ||
62 | |||
63 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | ||
64 | } | ||
65 | |||
66 | $this->get('session')->getFlashBag()->add( | ||
67 | 'notice', | ||
68 | $message | ||
69 | ); | ||
70 | |||
71 | return $this->redirect($this->generateUrl('homepage')); | ||
72 | } else { | ||
73 | $this->get('session')->getFlashBag()->add( | ||
74 | 'notice', | ||
75 | 'flashes.import.notice.failed_on_file' | ||
76 | ); | ||
77 | } | ||
78 | } | ||
79 | |||
80 | return $this->render($this->getImportTemplate(), [ | ||
81 | 'form' => $form->createView(), | ||
82 | 'import' => $wallabag, | ||
83 | ]); | ||
84 | } | ||
85 | } | ||
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php index 154a0769..3e748d57 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php | |||
@@ -2,61 +2,32 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
7 | use Symfony\Component\HttpFoundation\Request; | 6 | use Symfony\Component\HttpFoundation\Request; |
8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | ||
9 | 7 | ||
10 | class WallabagV1Controller extends Controller | 8 | class WallabagV1Controller extends WallabagController |
11 | { | 9 | { |
12 | /** | 10 | /** |
13 | * @Route("/wallabag-v1", name="import_wallabag_v1") | 11 | * {@inheritdoc} |
14 | */ | 12 | */ |
15 | public function indexAction(Request $request) | 13 | protected function getImportService() |
16 | { | 14 | { |
17 | $form = $this->createForm(UploadImportType::class); | 15 | return $this->get('wallabag_import.wallabag_v1.import'); |
18 | $form->handleRequest($request); | 16 | } |
19 | |||
20 | $wallabag = $this->get('wallabag_import.wallabag_v1.import'); | ||
21 | |||
22 | if ($form->isValid()) { | ||
23 | $file = $form->get('file')->getData(); | ||
24 | $markAsRead = $form->get('mark_as_read')->getData(); | ||
25 | $name = $this->getUser()->getId().'.json'; | ||
26 | |||
27 | if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | ||
28 | $res = $wallabag | ||
29 | ->setUser($this->getUser()) | ||
30 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | ||
31 | ->setMarkAsRead($markAsRead) | ||
32 | ->import(); | ||
33 | |||
34 | $message = 'Import failed, please try again.'; | ||
35 | |||
36 | if (true === $res) { | ||
37 | $summary = $wallabag->getSummary(); | ||
38 | $message = 'Import summary: '.$summary['imported'].' imported, '.$summary['skipped'].' already saved.'; | ||
39 | |||
40 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | ||
41 | } | ||
42 | |||
43 | $this->get('session')->getFlashBag()->add( | ||
44 | 'notice', | ||
45 | $message | ||
46 | ); | ||
47 | 17 | ||
48 | return $this->redirect($this->generateUrl('homepage')); | 18 | /** |
49 | } else { | 19 | * {@inheritdoc} |
50 | $this->get('session')->getFlashBag()->add( | 20 | */ |
51 | 'notice', | 21 | protected function getImportTemplate() |
52 | 'Error while processing import. Please verify your import file.' | 22 | { |
53 | ); | 23 | return 'WallabagImportBundle:WallabagV1:index.html.twig'; |
54 | } | 24 | } |
55 | } | ||
56 | 25 | ||
57 | return $this->render('WallabagImportBundle:WallabagV1:index.html.twig', [ | 26 | /** |
58 | 'form' => $form->createView(), | 27 | * @Route("/wallabag-v1", name="import_wallabag_v1") |
59 | 'import' => $wallabag, | 28 | */ |
60 | ]); | 29 | public function indexAction(Request $request) |
30 | { | ||
31 | return parent::indexAction($request); | ||
61 | } | 32 | } |
62 | } | 33 | } |
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php index 6dcd204a..c2a42165 100644 --- a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php +++ b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php | |||
@@ -2,61 +2,32 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Controller; | 3 | namespace Wallabag\ImportBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | ||
6 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; | 5 | use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; |
7 | use Symfony\Component\HttpFoundation\Request; | 6 | use Symfony\Component\HttpFoundation\Request; |
8 | use Wallabag\ImportBundle\Form\Type\UploadImportType; | ||
9 | 7 | ||
10 | class WallabagV2Controller extends Controller | 8 | class WallabagV2Controller extends WallabagController |
11 | { | 9 | { |
12 | /** | 10 | /** |
13 | * @Route("/wallabag-v2", name="import_wallabag_v2") | 11 | * {@inheritdoc} |
14 | */ | 12 | */ |
15 | public function indexAction(Request $request) | 13 | protected function getImportService() |
16 | { | 14 | { |
17 | $form = $this->createForm(UploadImportType::class); | 15 | return $this->get('wallabag_import.wallabag_v2.import'); |
18 | $form->handleRequest($request); | 16 | } |
19 | |||
20 | $wallabag = $this->get('wallabag_import.wallabag_v2.import'); | ||
21 | |||
22 | if ($form->isValid()) { | ||
23 | $file = $form->get('file')->getData(); | ||
24 | $markAsRead = $form->get('mark_as_read')->getData(); | ||
25 | $name = $this->getUser()->getId().'.json'; | ||
26 | |||
27 | if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) { | ||
28 | $res = $wallabag | ||
29 | ->setUser($this->getUser()) | ||
30 | ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name) | ||
31 | ->setMarkAsRead($markAsRead) | ||
32 | ->import(); | ||
33 | |||
34 | $message = 'Import failed, please try again.'; | ||
35 | |||
36 | if (true === $res) { | ||
37 | $summary = $wallabag->getSummary(); | ||
38 | $message = 'Import summary: '.$summary['imported'].' imported, '.$summary['skipped'].' already saved.'; | ||
39 | |||
40 | unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name); | ||
41 | } | ||
42 | |||
43 | $this->get('session')->getFlashBag()->add( | ||
44 | 'notice', | ||
45 | $message | ||
46 | ); | ||
47 | 17 | ||
48 | return $this->redirect($this->generateUrl('homepage')); | 18 | /** |
49 | } else { | 19 | * {@inheritdoc} |
50 | $this->get('session')->getFlashBag()->add( | 20 | */ |
51 | 'notice', | 21 | protected function getImportTemplate() |
52 | 'Error while processing import. Please verify your import file.' | 22 | { |
53 | ); | 23 | return 'WallabagImportBundle:WallabagV2:index.html.twig'; |
54 | } | 24 | } |
55 | } | ||
56 | 25 | ||
57 | return $this->render('WallabagImportBundle:WallabagV2:index.html.twig', [ | 26 | /** |
58 | 'form' => $form->createView(), | 27 | * @Route("/wallabag-v2", name="import_wallabag_v2") |
59 | 'import' => $wallabag, | 28 | */ |
60 | ]); | 29 | public function indexAction(Request $request) |
30 | { | ||
31 | return parent::indexAction($request); | ||
61 | } | 32 | } |
62 | } | 33 | } |
diff --git a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php index 38670379..e0a44c36 100644 --- a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php +++ b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php | |||
@@ -13,12 +13,16 @@ class UploadImportType extends AbstractType | |||
13 | public function buildForm(FormBuilderInterface $builder, array $options) | 13 | public function buildForm(FormBuilderInterface $builder, array $options) |
14 | { | 14 | { |
15 | $builder | 15 | $builder |
16 | ->add('file', FileType::class) | 16 | ->add('file', FileType::class, array( |
17 | 'label' => 'import.form.file_label', | ||
18 | )) | ||
17 | ->add('mark_as_read', CheckboxType::class, array( | 19 | ->add('mark_as_read', CheckboxType::class, array( |
18 | 'label' => 'Mark all as read', | 20 | 'label' => 'import.form.mark_as_read_label', |
19 | 'required' => false, | 21 | 'required' => false, |
20 | )) | 22 | )) |
21 | ->add('save', SubmitType::class) | 23 | ->add('save', SubmitType::class, array( |
24 | 'label' => 'import.form.save_label', | ||
25 | )) | ||
22 | ; | 26 | ; |
23 | } | 27 | } |
24 | 28 | ||
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php index 238ddbd1..f598e611 100644 --- a/src/Wallabag/ImportBundle/Import/PocketImport.php +++ b/src/Wallabag/ImportBundle/Import/PocketImport.php | |||
@@ -60,7 +60,7 @@ class PocketImport implements ImportInterface | |||
60 | */ | 60 | */ |
61 | public function getDescription() | 61 | public function getDescription() |
62 | { | 62 | { |
63 | return 'This importer will import all your Pocket data. Pocket doesn\'t allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.'; | 63 | return 'import.pocket.description'; |
64 | } | 64 | } |
65 | 65 | ||
66 | /** | 66 | /** |
@@ -68,7 +68,7 @@ class PocketImport implements ImportInterface | |||
68 | * | 68 | * |
69 | * @param string $redirectUri Redirect url in case of error | 69 | * @param string $redirectUri Redirect url in case of error |
70 | * | 70 | * |
71 | * @return string request_token for callback method | 71 | * @return string|false request_token for callback method |
72 | */ | 72 | */ |
73 | public function getRequestToken($redirectUri) | 73 | public function getRequestToken($redirectUri) |
74 | { | 74 | { |
@@ -139,7 +139,7 @@ class PocketImport implements ImportInterface | |||
139 | /** | 139 | /** |
140 | * Get whether articles must be all marked as read. | 140 | * Get whether articles must be all marked as read. |
141 | */ | 141 | */ |
142 | public function getRead() | 142 | public function getMarkAsRead() |
143 | { | 143 | { |
144 | return $this->markAsRead; | 144 | return $this->markAsRead; |
145 | } | 145 | } |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php new file mode 100644 index 00000000..d65bc530 --- /dev/null +++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php | |||
@@ -0,0 +1,204 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\ImportBundle\Import; | ||
4 | |||
5 | use Psr\Log\LoggerInterface; | ||
6 | use Psr\Log\NullLogger; | ||
7 | use Doctrine\ORM\EntityManager; | ||
8 | use Wallabag\CoreBundle\Entity\Entry; | ||
9 | use Wallabag\UserBundle\Entity\User; | ||
10 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
11 | |||
12 | abstract class WallabagImport implements ImportInterface | ||
13 | { | ||
14 | protected $user; | ||
15 | protected $em; | ||
16 | protected $logger; | ||
17 | protected $contentProxy; | ||
18 | protected $skippedEntries = 0; | ||
19 | protected $importedEntries = 0; | ||
20 | protected $filepath; | ||
21 | protected $markAsRead; | ||
22 | // untitled in all languages from v1 | ||
23 | protected $untitled = [ | ||
24 | 'Untitled', | ||
25 | 'Sans titre', | ||
26 | 'podle nadpisu', | ||
27 | 'Sin título', | ||
28 | 'با عنوان', | ||
29 | 'per titolo', | ||
30 | 'Sem título', | ||
31 | 'Без названия', | ||
32 | 'po naslovu', | ||
33 | 'Без назви', | ||
34 | 'No title found', | ||
35 | '', | ||
36 | ]; | ||
37 | |||
38 | public function __construct(EntityManager $em, ContentProxy $contentProxy) | ||
39 | { | ||
40 | $this->em = $em; | ||
41 | $this->logger = new NullLogger(); | ||
42 | $this->contentProxy = $contentProxy; | ||
43 | } | ||
44 | |||
45 | public function setLogger(LoggerInterface $logger) | ||
46 | { | ||
47 | $this->logger = $logger; | ||
48 | } | ||
49 | |||
50 | /** | ||
51 | * We define the user in a custom call because on the import command there is no logged in user. | ||
52 | * So we can't retrieve user from the `security.token_storage` service. | ||
53 | * | ||
54 | * @param User $user | ||
55 | */ | ||
56 | public function setUser(User $user) | ||
57 | { | ||
58 | $this->user = $user; | ||
59 | |||
60 | return $this; | ||
61 | } | ||
62 | |||
63 | /** | ||
64 | * {@inheritdoc} | ||
65 | */ | ||
66 | abstract public function getName(); | ||
67 | |||
68 | /** | ||
69 | * {@inheritdoc} | ||
70 | */ | ||
71 | abstract public function getUrl(); | ||
72 | |||
73 | /** | ||
74 | * {@inheritdoc} | ||
75 | */ | ||
76 | abstract public function getDescription(); | ||
77 | |||
78 | /** | ||
79 | * {@inheritdoc} | ||
80 | */ | ||
81 | public function import() | ||
82 | { | ||
83 | if (!$this->user) { | ||
84 | $this->logger->error('WallabagImport: user is not defined'); | ||
85 | |||
86 | return false; | ||
87 | } | ||
88 | |||
89 | if (!file_exists($this->filepath) || !is_readable($this->filepath)) { | ||
90 | $this->logger->error('WallabagImport: unable to read file', ['filepath' => $this->filepath]); | ||
91 | |||
92 | return false; | ||
93 | } | ||
94 | |||
95 | $data = json_decode(file_get_contents($this->filepath), true); | ||
96 | |||
97 | if (empty($data)) { | ||
98 | return false; | ||
99 | } | ||
100 | |||
101 | $this->parseEntries($data); | ||
102 | |||
103 | return true; | ||
104 | } | ||
105 | |||
106 | /** | ||
107 | * {@inheritdoc} | ||
108 | */ | ||
109 | public function getSummary() | ||
110 | { | ||
111 | return [ | ||
112 | 'skipped' => $this->skippedEntries, | ||
113 | 'imported' => $this->importedEntries, | ||
114 | ]; | ||
115 | } | ||
116 | |||
117 | /** | ||
118 | * Set file path to the json file. | ||
119 | * | ||
120 | * @param string $filepath | ||
121 | */ | ||
122 | public function setFilepath($filepath) | ||
123 | { | ||
124 | $this->filepath = $filepath; | ||
125 | |||
126 | return $this; | ||
127 | } | ||
128 | |||
129 | /** | ||
130 | * Set whether articles must be all marked as read. | ||
131 | * | ||
132 | * @param bool $markAsRead | ||
133 | */ | ||
134 | public function setMarkAsRead($markAsRead) | ||
135 | { | ||
136 | $this->markAsRead = $markAsRead; | ||
137 | |||
138 | return $this; | ||
139 | } | ||
140 | |||
141 | /** | ||
142 | * Parse and insert all given entries. | ||
143 | * | ||
144 | * @param $entries | ||
145 | */ | ||
146 | protected function parseEntries($entries) | ||
147 | { | ||
148 | $i = 1; | ||
149 | |||
150 | foreach ($entries as $importedEntry) { | ||
151 | $existingEntry = $this->em | ||
152 | ->getRepository('WallabagCoreBundle:Entry') | ||
153 | ->findByUrlAndUserId($importedEntry['url'], $this->user->getId()); | ||
154 | |||
155 | if (false !== $existingEntry) { | ||
156 | ++$this->skippedEntries; | ||
157 | continue; | ||
158 | } | ||
159 | |||
160 | $data = $this->prepareEntry($importedEntry, $this->markAsRead); | ||
161 | |||
162 | $entry = $this->contentProxy->updateEntry( | ||
163 | new Entry($this->user), | ||
164 | $importedEntry['url'], | ||
165 | $data | ||
166 | ); | ||
167 | |||
168 | if (array_key_exists('tags', $data)) { | ||
169 | $this->contentProxy->assignTagsToEntry( | ||
170 | $entry, | ||
171 | $data['tags'] | ||
172 | ); | ||
173 | } | ||
174 | |||
175 | if (isset($importedEntry['preview_picture'])) { | ||
176 | $entry->setPreviewPicture($importedEntry['preview_picture']); | ||
177 | } | ||
178 | |||
179 | $entry->setArchived($data['is_archived']); | ||
180 | $entry->setStarred($data['is_starred']); | ||
181 | |||
182 | $this->em->persist($entry); | ||
183 | ++$this->importedEntries; | ||
184 | |||
185 | // flush every 20 entries | ||
186 | if (($i % 20) === 0) { | ||
187 | $this->em->flush(); | ||
188 | } | ||
189 | ++$i; | ||
190 | } | ||
191 | |||
192 | $this->em->flush(); | ||
193 | } | ||
194 | |||
195 | /** | ||
196 | * This should return a cleaned array for a given entry to be given to `updateEntry`. | ||
197 | * | ||
198 | * @param array $entry Data from the imported file | ||
199 | * @param bool $markAsRead Should we mark as read content? | ||
200 | * | ||
201 | * @return array | ||
202 | */ | ||
203 | abstract protected function prepareEntry($entry = [], $markAsRead = false); | ||
204 | } | ||
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php index 1d773d3b..6cf3467a 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php | |||
@@ -2,50 +2,8 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Psr\Log\LoggerInterface; | 5 | class WallabagV1Import extends WallabagImport |
6 | use Psr\Log\NullLogger; | ||
7 | use Doctrine\ORM\EntityManager; | ||
8 | use Wallabag\CoreBundle\Entity\Entry; | ||
9 | use Wallabag\UserBundle\Entity\User; | ||
10 | use Wallabag\CoreBundle\Tools\Utils; | ||
11 | use Wallabag\CoreBundle\Helper\ContentProxy; | ||
12 | |||
13 | class WallabagV1Import implements ImportInterface | ||
14 | { | 6 | { |
15 | protected $user; | ||
16 | protected $em; | ||
17 | protected $logger; | ||
18 | protected $contentProxy; | ||
19 | protected $skippedEntries = 0; | ||
20 | protected $importedEntries = 0; | ||
21 | protected $filepath; | ||
22 | protected $markAsRead; | ||
23 | |||
24 | public function __construct(EntityManager $em, ContentProxy $contentProxy) | ||
25 | { | ||
26 | $this->em = $em; | ||
27 | $this->logger = new NullLogger(); | ||
28 | $this->contentProxy = $contentProxy; | ||
29 | } | ||
30 | |||
31 | public function setLogger(LoggerInterface $logger) | ||
32 | { | ||
33 | $this->logger = $logger; | ||
34 | } | ||
35 | |||
36 | /** | ||
37 | * We define the user in a custom call because on the import command there is no logged in user. | ||
38 | * So we can't retrieve user from the `security.token_storage` service. | ||
39 | * | ||
40 | * @param User $user | ||
41 | */ | ||
42 | public function setUser(User $user) | ||
43 | { | ||
44 | $this->user = $user; | ||
45 | |||
46 | return $this; | ||
47 | } | ||
48 | |||
49 | /** | 7 | /** |
50 | * {@inheritdoc} | 8 | * {@inheritdoc} |
51 | */ | 9 | */ |
@@ -67,125 +25,35 @@ class WallabagV1Import implements ImportInterface | |||
67 | */ | 25 | */ |
68 | public function getDescription() | 26 | public function getDescription() |
69 | { | 27 | { |
70 | return 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.'; | 28 | return 'import.wallabag_v1.description'; |
71 | } | ||
72 | |||
73 | /** | ||
74 | * {@inheritdoc} | ||
75 | */ | ||
76 | public function import() | ||
77 | { | ||
78 | if (!$this->user) { | ||
79 | $this->logger->error('WallabagImport: user is not defined'); | ||
80 | |||
81 | return false; | ||
82 | } | ||
83 | |||
84 | if (!file_exists($this->filepath) || !is_readable($this->filepath)) { | ||
85 | $this->logger->error('WallabagImport: unable to read file', array('filepath' => $this->filepath)); | ||
86 | |||
87 | return false; | ||
88 | } | ||
89 | |||
90 | $data = json_decode(file_get_contents($this->filepath), true); | ||
91 | |||
92 | if (empty($data)) { | ||
93 | return false; | ||
94 | } | ||
95 | |||
96 | $this->parseEntries($data); | ||
97 | |||
98 | return true; | ||
99 | } | 29 | } |
100 | 30 | ||
101 | /** | 31 | /** |
102 | * {@inheritdoc} | 32 | * {@inheritdoc} |
103 | */ | 33 | */ |
104 | public function getSummary() | 34 | protected function prepareEntry($entry = [], $markAsRead = false) |
105 | { | 35 | { |
106 | return [ | 36 | $data = [ |
107 | 'skipped' => $this->skippedEntries, | 37 | 'title' => $entry['title'], |
108 | 'imported' => $this->importedEntries, | 38 | 'html' => $entry['content'], |
39 | 'url' => $entry['url'], | ||
40 | 'content_type' => '', | ||
41 | 'language' => '', | ||
42 | 'is_archived' => $entry['is_read'] || $markAsRead, | ||
43 | 'is_starred' => $entry['is_fav'], | ||
44 | 'tags' => '', | ||
109 | ]; | 45 | ]; |
110 | } | ||
111 | |||
112 | /** | ||
113 | * Set file path to the json file. | ||
114 | * | ||
115 | * @param string $filepath | ||
116 | */ | ||
117 | public function setFilepath($filepath) | ||
118 | { | ||
119 | $this->filepath = $filepath; | ||
120 | |||
121 | return $this; | ||
122 | } | ||
123 | |||
124 | /** | ||
125 | * Set whether articles must be all marked as read. | ||
126 | * | ||
127 | * @param bool $markAsRead | ||
128 | */ | ||
129 | public function setMarkAsRead($markAsRead) | ||
130 | { | ||
131 | $this->markAsRead = $markAsRead; | ||
132 | 46 | ||
133 | return $this; | 47 | // force content to be refreshed in case on bad fetch in the v1 installation |
134 | } | 48 | if (in_array($entry['title'], $this->untitled)) { |
135 | 49 | $data['title'] = ''; | |
136 | /** | 50 | $data['html'] = ''; |
137 | * @param $entries | 51 | } |
138 | */ | ||
139 | protected function parseEntries($entries) | ||
140 | { | ||
141 | $i = 1; | ||
142 | |||
143 | //Untitled in all languages from v1. This should never have been translated | ||
144 | $untitled = array('Untitled', 'Sans titre', 'podle nadpisu', 'Sin título', 'با عنوان', 'per titolo', 'Sem título', 'Без названия', 'po naslovu', 'Без назви', 'No title found', ''); | ||
145 | |||
146 | foreach ($entries as $importedEntry) { | ||
147 | $existingEntry = $this->em | ||
148 | ->getRepository('WallabagCoreBundle:Entry') | ||
149 | ->findByUrlAndUserId($importedEntry['url'], $this->user->getId()); | ||
150 | |||
151 | if (false !== $existingEntry) { | ||
152 | ++$this->skippedEntries; | ||
153 | continue; | ||
154 | } | ||
155 | |||
156 | // @see ContentProxy->updateEntry | ||
157 | $entry = new Entry($this->user); | ||
158 | $entry->setUrl($importedEntry['url']); | ||
159 | |||
160 | if (in_array($importedEntry['title'], $untitled)) { | ||
161 | $entry = $this->contentProxy->updateEntry($entry, $importedEntry['url']); | ||
162 | } else { | ||
163 | $entry->setContent($importedEntry['content']); | ||
164 | $entry->setTitle($importedEntry['title']); | ||
165 | $entry->setReadingTime(Utils::getReadingTime($importedEntry['content'])); | ||
166 | $entry->setDomainName(parse_url($importedEntry['url'], PHP_URL_HOST)); | ||
167 | } | ||
168 | |||
169 | if (array_key_exists('tags', $importedEntry) && $importedEntry['tags'] != '') { | ||
170 | $this->contentProxy->assignTagsToEntry( | ||
171 | $entry, | ||
172 | $importedEntry['tags'] | ||
173 | ); | ||
174 | } | ||
175 | |||
176 | $entry->setArchived($importedEntry['is_read'] || $this->markAsRead); | ||
177 | $entry->setStarred($importedEntry['is_fav']); | ||
178 | |||
179 | $this->em->persist($entry); | ||
180 | ++$this->importedEntries; | ||
181 | 52 | ||
182 | // flush every 20 entries | 53 | if (array_key_exists('tags', $entry) && $entry['tags'] != '') { |
183 | if (($i % 20) === 0) { | 54 | $data['tags'] = $entry['tags']; |
184 | $this->em->flush(); | ||
185 | } | ||
186 | ++$i; | ||
187 | } | 55 | } |
188 | 56 | ||
189 | $this->em->flush(); | 57 | return $data; |
190 | } | 58 | } |
191 | } | 59 | } |
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php index c4bac561..d0035b63 100644 --- a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php +++ b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php | |||
@@ -2,9 +2,7 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Import; | 3 | namespace Wallabag\ImportBundle\Import; |
4 | 4 | ||
5 | use Wallabag\CoreBundle\Entity\Entry; | 5 | class WallabagV2Import extends WallabagImport |
6 | |||
7 | class WallabagV2Import extends WallabagV1Import implements ImportInterface | ||
8 | { | 6 | { |
9 | /** | 7 | /** |
10 | * {@inheritdoc} | 8 | * {@inheritdoc} |
@@ -27,55 +25,18 @@ class WallabagV2Import extends WallabagV1Import implements ImportInterface | |||
27 | */ | 25 | */ |
28 | public function getDescription() | 26 | public function getDescription() |
29 | { | 27 | { |
30 | return 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'; | 28 | return 'import.wallabag_v2.description'; |
31 | } | 29 | } |
32 | 30 | ||
33 | /** | 31 | /** |
34 | * @param $entries | 32 | * {@inheritdoc} |
35 | */ | 33 | */ |
36 | protected function parseEntries($entries) | 34 | protected function prepareEntry($entry = [], $markAsRead = false) |
37 | { | 35 | { |
38 | $i = 1; | 36 | return [ |
39 | 37 | 'html' => $entry['content'], | |
40 | foreach ($entries as $importedEntry) { | 38 | 'content_type' => $entry['mimetype'], |
41 | $existingEntry = $this->em | 39 | 'is_archived' => ($entry['is_archived'] || $markAsRead), |
42 | ->getRepository('WallabagCoreBundle:Entry') | 40 | ] + $entry; |
43 | ->findByUrlAndUserId($importedEntry['url'], $this->user->getId()); | ||
44 | |||
45 | if (false !== $existingEntry) { | ||
46 | ++$this->skippedEntries; | ||
47 | continue; | ||
48 | } | ||
49 | |||
50 | // @see ContentProxy->updateEntry | ||
51 | $entry = new Entry($this->user); | ||
52 | $entry->setUrl($importedEntry['url']); | ||
53 | $entry->setTitle($importedEntry['title']); | ||
54 | $entry->setArchived($importedEntry['is_archived'] || $this->markAsRead); | ||
55 | $entry->setStarred($importedEntry['is_starred']); | ||
56 | $entry->setContent($importedEntry['content']); | ||
57 | $entry->setReadingTime($importedEntry['reading_time']); | ||
58 | $entry->setDomainName($importedEntry['domain_name']); | ||
59 | if (isset($importedEntry['mimetype'])) { | ||
60 | $entry->setMimetype($importedEntry['mimetype']); | ||
61 | } | ||
62 | if (isset($importedEntry['language'])) { | ||
63 | $entry->setLanguage($importedEntry['language']); | ||
64 | } | ||
65 | if (isset($importedEntry['preview_picture'])) { | ||
66 | $entry->setPreviewPicture($importedEntry['preview_picture']); | ||
67 | } | ||
68 | |||
69 | $this->em->persist($entry); | ||
70 | ++$this->importedEntries; | ||
71 | |||
72 | // flush every 20 entries | ||
73 | if (($i % 20) === 0) { | ||
74 | $this->em->flush(); | ||
75 | } | ||
76 | ++$i; | ||
77 | } | ||
78 | |||
79 | $this->em->flush(); | ||
80 | } | 41 | } |
81 | } | 42 | } |
diff --git a/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig index 8c300624..aebbfa20 100644 --- a/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig +++ b/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig | |||
@@ -1,17 +1,18 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | {% block title %}{% trans %}Import{% endtrans %}{% endblock %} | 2 | |
3 | {% block title %}{{ 'import.page_title'|trans }}{% endblock %} | ||
3 | 4 | ||
4 | {% block content %} | 5 | {% block content %} |
5 | <div class="row"> | 6 | <div class="row"> |
6 | <div class="col s12"> | 7 | <div class="col s12"> |
7 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
8 | {% trans %}Welcome to wallabag importer. Please select your previous service that you want to migrate.{% endtrans %} | 9 | {{ 'import.page_description'|trans }} |
9 | <ul> | 10 | <ul> |
10 | {% for import in imports %} | 11 | {% for import in imports %} |
11 | <li> | 12 | <li> |
12 | <h5>{{ import.name }}</h5> | 13 | <h5>{{ import.name }}</h5> |
13 | <blockquote>{{ import.description|trans }}</blockquote> | 14 | <blockquote>{{ import.description|trans }}</blockquote> |
14 | <p><a class="waves-effect waves-light btn" href="{{ path(import.url) }}">{% trans %}Import contents{% endtrans %}</a></p> | 15 | <p><a class="waves-effect waves-light btn" href="{{ path(import.url) }}">{{ 'import.action.import_contents'|trans }}</a></p> |
15 | </li> | 16 | </li> |
16 | {% endfor %} | 17 | {% endfor %} |
17 | </ul> | 18 | </ul> |
diff --git a/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig index 3365fc6a..401dbd33 100644 --- a/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig +++ b/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig | |||
@@ -1,5 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | {% block title %}{% trans %}Import > Pocket{% endtrans %}{% endblock %} | 2 | |
3 | {% block title %}{{ 'import.pocket.page_title'|trans }}{% endblock %} | ||
3 | 4 | ||
4 | {% block content %} | 5 | {% block content %} |
5 | <div class="row"> | 6 | <div class="row"> |
@@ -7,27 +8,29 @@ | |||
7 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
8 | {% if not has_consumer_key %} | 9 | {% if not has_consumer_key %} |
9 | <div class="card-panel red darken-1"> | 10 | <div class="card-panel red darken-1"> |
10 | {% trans %}Pocket import isn't configured.{% endtrans %} | 11 | {{ 'import.pocket.config_missing.description'|trans }} |
12 | |||
11 | {% if is_granted('ROLE_SUPER_ADMIN') %} | 13 | {% if is_granted('ROLE_SUPER_ADMIN') %} |
12 | {% trans with {'%keyurls%': '<a href="' ~ path('craue_config_settings_modify') ~ '#set-import">', '%keyurle%':'</a>'} %}You need to define %keyurls% a pocket_consumer_key %keyurle%.{% endtrans %} | 14 | {{ 'import.pocket.config_missing.admin_message'|trans({'%keyurls%': '<a href="' ~ path('craue_config_settings_modify') ~ '#set-import">', '%keyurle%':'</a>'})|raw }} |
13 | {% else %} | 15 | {% else %} |
14 | {% trans %}Your server admin needs to define an API Key for Pocket.{% endtrans %} | 16 | {{ 'import.pocket.config_missing.user_message'|trans }} |
15 | {% endif %} | 17 | {% endif %} |
16 | </div> | 18 | </div> |
17 | {% endif %} | 19 | {% endif %} |
18 | 20 | ||
19 | <blockquote>{{ import.description|trans }}</blockquote> | 21 | <blockquote>{{ import.description|trans }}</blockquote> |
20 | <p>{% trans %}You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.{% endtrans %}</p> | 22 | <p>{{ 'import.pocket.authorize_message'|trans }}</p> |
23 | |||
21 | <form method="post" action="{{ path('import_pocket_auth') }}"> | 24 | <form method="post" action="{{ path('import_pocket_auth') }}"> |
22 | <div class="row"> | 25 | <div class="row"> |
23 | <div class="input-field col s6 with-checkbox"> | 26 | <div class="input-field col s6 with-checkbox"> |
24 | <h6>{% trans %}Mark all as read ?{% endtrans %}</h6> | 27 | <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6> |
25 | {{ form_widget(form.read) }} | 28 | {{ form_widget(form.mark_as_read) }} |
26 | <label for="form_read">{% trans %}Mark all imported entries as read{% endtrans %}</label> | 29 | {{ form_label(form.mark_as_read) }} |
30 | </div> | ||
27 | </div> | 31 | </div> |
28 | </div> | ||
29 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 32 | <button class="btn waves-effect waves-light" type="submit" name="action"> |
30 | {% trans %}Connect to Pocket and import data{% endtrans %} | 33 | {{ 'import.pocket.connect_to_pocket'|trans }} |
31 | </button> | 34 | </button> |
32 | </form> | 35 | </form> |
33 | </div> | 36 | </div> |
diff --git a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig index a418ed1c..13e24c8c 100644 --- a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig +++ b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig | |||
@@ -1,5 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | {% block title %}{% trans %}Import > Wallabag v1{% endtrans %}{% endblock %} | 2 | |
3 | {% block title %}{{ 'import.wallabag_v1.page_title'|trans }}{% endblock %} | ||
3 | 4 | ||
4 | {% block content %} | 5 | {% block content %} |
5 | <div class="row"> | 6 | <div class="row"> |
@@ -7,7 +8,8 @@ | |||
7 | <div class="card-panel settings"> | 8 | <div class="card-panel settings"> |
8 | <div class="row"> | 9 | <div class="row"> |
9 | <blockquote>{{ import.description|trans }}</blockquote> | 10 | <blockquote>{{ import.description|trans }}</blockquote> |
10 | <p>{% trans %}Please select your wallabag export and click on the below button to upload and import it.{% endtrans %}</p> | 11 | <p>{{ 'import.wallabag_v1.how_to'|trans }}</p> |
12 | |||
11 | <div class="col s12"> | 13 | <div class="col s12"> |
12 | {{ form_start(form, {'method': 'POST'}) }} | 14 | {{ form_start(form, {'method': 'POST'}) }} |
13 | {{ form_errors(form) }} | 15 | {{ form_errors(form) }} |
@@ -15,7 +17,7 @@ | |||
15 | <div class="file-field input-field col s12"> | 17 | <div class="file-field input-field col s12"> |
16 | {{ form_errors(form.file) }} | 18 | {{ form_errors(form.file) }} |
17 | <div class="btn"> | 19 | <div class="btn"> |
18 | <span>{% trans %}File{% endtrans %}</span> | 20 | <span>{{ form.file.vars.label|trans }}</span> |
19 | {{ form_widget(form.file) }} | 21 | {{ form_widget(form.file) }} |
20 | </div> | 22 | </div> |
21 | <div class="file-path-wrapper"> | 23 | <div class="file-path-wrapper"> |
@@ -23,15 +25,15 @@ | |||
23 | </div> | 25 | </div> |
24 | </div> | 26 | </div> |
25 | <div class="input-field col s6 with-checkbox"> | 27 | <div class="input-field col s6 with-checkbox"> |
26 | <h6>{% trans %}Mark all as read ?{% endtrans %}</h6> | 28 | <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6> |
27 | {{ form_widget(form.mark_as_read) }} | 29 | {{ form_widget(form.mark_as_read) }} |
28 | <label for="upload_import_file_mark_as_read">{% trans %}Mark all imported entries as read{% endtrans %}</label> | 30 | {{ form_label(form.mark_as_read) }} |
29 | </div> | 31 | </div> |
30 | </div> | 32 | </div> |
31 | <div class="hidden">{{ form_rest(form) }}</div> | 33 | |
32 | <button class="btn waves-effect waves-light" type="submit" name="action"> | 34 | {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'} }) }} |
33 | {% trans %}Upload file{% endtrans %} | 35 | |
34 | </button> | 36 | {{ form_rest(form) }} |
35 | </form> | 37 | </form> |
36 | </div> | 38 | </div> |
37 | </div> | 39 | </div> |
diff --git a/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig index 78fe67e4..c2905fc6 100644 --- a/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig +++ b/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig | |||
@@ -1,2 +1,3 @@ | |||
1 | {% extends "WallabagImportBundle:WallabagV1:index.html.twig" %} | 1 | {% extends "WallabagImportBundle:WallabagV1:index.html.twig" %} |
2 | {% block title %}{% trans %}Import > Wallabag v2{% endtrans %}{% endblock %} | 2 | |
3 | {% block title %}{{ 'import.wallabag_v2.page_title'|trans }}{% endblock %} | ||
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php index c2acd68c..403fe9b0 100644 --- a/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php +++ b/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php | |||
@@ -17,11 +17,34 @@ class PocketControllerTest extends WallabagCoreTestCase | |||
17 | $this->assertEquals(1, $crawler->filter('button[type=submit]')->count()); | 17 | $this->assertEquals(1, $crawler->filter('button[type=submit]')->count()); |
18 | } | 18 | } |
19 | 19 | ||
20 | public function testImportPocketAuthBadToken() | ||
21 | { | ||
22 | $this->logInAs('admin'); | ||
23 | $client = $this->getClient(); | ||
24 | |||
25 | $crawler = $client->request('GET', '/import/pocket/auth'); | ||
26 | |||
27 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | ||
28 | } | ||
29 | |||
20 | public function testImportPocketAuth() | 30 | public function testImportPocketAuth() |
21 | { | 31 | { |
32 | $this->markTestSkipped('PocketImport: Find a way to properly mock a service.'); | ||
33 | |||
22 | $this->logInAs('admin'); | 34 | $this->logInAs('admin'); |
23 | $client = $this->getClient(); | 35 | $client = $this->getClient(); |
24 | 36 | ||
37 | $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport') | ||
38 | ->disableOriginalConstructor() | ||
39 | ->getMock(); | ||
40 | |||
41 | $pocketImport | ||
42 | ->expects($this->once()) | ||
43 | ->method('getRequestToken') | ||
44 | ->willReturn('token'); | ||
45 | |||
46 | $client->getContainer()->set('wallabag_import.pocket.import', $pocketImport); | ||
47 | |||
25 | $crawler = $client->request('GET', '/import/pocket/auth'); | 48 | $crawler = $client->request('GET', '/import/pocket/auth'); |
26 | 49 | ||
27 | $this->assertEquals(301, $client->getResponse()->getStatusCode()); | 50 | $this->assertEquals(301, $client->getResponse()->getStatusCode()); |
@@ -37,6 +60,6 @@ class PocketControllerTest extends WallabagCoreTestCase | |||
37 | 60 | ||
38 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); | 61 | $this->assertEquals(302, $client->getResponse()->getStatusCode()); |
39 | $this->assertContains('import/pocket', $client->getResponse()->headers->get('location')); | 62 | $this->assertContains('import/pocket', $client->getResponse()->headers->get('location')); |
40 | $this->assertEquals('Import failed, please try again.', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); | 63 | $this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); |
41 | } | 64 | } |
42 | } | 65 | } |
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php index 7f97b0f5..8d353a71 100644 --- a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php +++ b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php | |||
@@ -54,8 +54,8 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase | |||
54 | 54 | ||
55 | $this->assertTrue($content->getTags()->contains($tag)); | 55 | $this->assertTrue($content->getTags()->contains($tag)); |
56 | 56 | ||
57 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 57 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
58 | $this->assertContains('Import summary', $alert[0]); | 58 | $this->assertContains('flashes.import.notice.summary', $body[0]); |
59 | } | 59 | } |
60 | 60 | ||
61 | public function testImportWallabagWithFileAndMarkAllAsRead() | 61 | public function testImportWallabagWithFileAndMarkAllAsRead() |
@@ -99,7 +99,8 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase | |||
99 | 99 | ||
100 | $this->assertTrue($content2->isArchived()); | 100 | $this->assertTrue($content2->isArchived()); |
101 | 101 | ||
102 | $this->assertContains('Import summary', $client->getResponse()->getContent()); | 102 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
103 | $this->assertContains('flashes.import.notice.summary', $body[0]); | ||
103 | } | 104 | } |
104 | 105 | ||
105 | public function testImportWallabagWithEmptyFile() | 106 | public function testImportWallabagWithEmptyFile() |
@@ -122,7 +123,7 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase | |||
122 | 123 | ||
123 | $crawler = $client->followRedirect(); | 124 | $crawler = $client->followRedirect(); |
124 | 125 | ||
125 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 126 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
126 | $this->assertContains('Import failed, please try again', $alert[0]); | 127 | $this->assertContains('flashes.import.notice.failed', $body[0]); |
127 | } | 128 | } |
128 | } | 129 | } |
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php index 617c0517..490f9ede 100644 --- a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php +++ b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php | |||
@@ -39,8 +39,8 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase | |||
39 | 39 | ||
40 | $crawler = $client->followRedirect(); | 40 | $crawler = $client->followRedirect(); |
41 | 41 | ||
42 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 42 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
43 | $this->assertContains('Import summary', $alert[0]); | 43 | $this->assertContains('flashes.import.notice.summary', $body[0]); |
44 | 44 | ||
45 | $content = $client->getContainer() | 45 | $content = $client->getContainer() |
46 | ->get('doctrine.orm.entity_manager') | 46 | ->get('doctrine.orm.entity_manager') |
@@ -53,6 +53,7 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase | |||
53 | $this->assertEmpty($content->getMimetype()); | 53 | $this->assertEmpty($content->getMimetype()); |
54 | $this->assertEmpty($content->getPreviewPicture()); | 54 | $this->assertEmpty($content->getPreviewPicture()); |
55 | $this->assertEmpty($content->getLanguage()); | 55 | $this->assertEmpty($content->getLanguage()); |
56 | $this->assertEquals(0, count($content->getTags())); | ||
56 | 57 | ||
57 | $content = $client->getContainer() | 58 | $content = $client->getContainer() |
58 | ->get('doctrine.orm.entity_manager') | 59 | ->get('doctrine.orm.entity_manager') |
@@ -65,6 +66,7 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase | |||
65 | $this->assertNotEmpty($content->getMimetype()); | 66 | $this->assertNotEmpty($content->getMimetype()); |
66 | $this->assertNotEmpty($content->getPreviewPicture()); | 67 | $this->assertNotEmpty($content->getPreviewPicture()); |
67 | $this->assertNotEmpty($content->getLanguage()); | 68 | $this->assertNotEmpty($content->getLanguage()); |
69 | $this->assertEquals(2, count($content->getTags())); | ||
68 | } | 70 | } |
69 | 71 | ||
70 | public function testImportWallabagWithEmptyFile() | 72 | public function testImportWallabagWithEmptyFile() |
@@ -87,7 +89,7 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase | |||
87 | 89 | ||
88 | $crawler = $client->followRedirect(); | 90 | $crawler = $client->followRedirect(); |
89 | 91 | ||
90 | $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); | 92 | $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); |
91 | $this->assertContains('Import failed, please try again', $alert[0]); | 93 | $this->assertContains('flashes.import.notice.failed', $body[0]); |
92 | } | 94 | } |
93 | } | 95 | } |
diff --git a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php index 450cdc95..43b60ec3 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php +++ b/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php | |||
@@ -85,7 +85,7 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase | |||
85 | 85 | ||
86 | $this->assertEquals('Pocket', $pocketImport->getName()); | 86 | $this->assertEquals('Pocket', $pocketImport->getName()); |
87 | $this->assertNotEmpty($pocketImport->getUrl()); | 87 | $this->assertNotEmpty($pocketImport->getUrl()); |
88 | $this->assertContains('This importer will import all your Pocket data.', $pocketImport->getDescription()); | 88 | $this->assertEquals('import.pocket.description', $pocketImport->getDescription()); |
89 | } | 89 | } |
90 | 90 | ||
91 | public function testOAuthRequest() | 91 | public function testOAuthRequest() |
diff --git a/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php index 8ab7e830..3ef852e5 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php +++ b/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php | |||
@@ -2,8 +2,9 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\ImportBundle\Tests\Import; | 3 | namespace Wallabag\ImportBundle\Tests\Import; |
4 | 4 | ||
5 | use Wallabag\UserBundle\Entity\User; | ||
6 | use Wallabag\ImportBundle\Import\WallabagV1Import; | 5 | use Wallabag\ImportBundle\Import\WallabagV1Import; |
6 | use Wallabag\UserBundle\Entity\User; | ||
7 | use Wallabag\CoreBundle\Entity\Entry; | ||
7 | use Monolog\Logger; | 8 | use Monolog\Logger; |
8 | use Monolog\Handler\TestHandler; | 9 | use Monolog\Handler\TestHandler; |
9 | 10 | ||
@@ -45,7 +46,7 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase | |||
45 | 46 | ||
46 | $this->assertEquals('wallabag v1', $wallabagV1Import->getName()); | 47 | $this->assertEquals('wallabag v1', $wallabagV1Import->getName()); |
47 | $this->assertNotEmpty($wallabagV1Import->getUrl()); | 48 | $this->assertNotEmpty($wallabagV1Import->getUrl()); |
48 | $this->assertContains('This importer will import all your wallabag v1 articles.', $wallabagV1Import->getDescription()); | 49 | $this->assertEquals('import.wallabag_v1.description', $wallabagV1Import->getDescription()); |
49 | } | 50 | } |
50 | 51 | ||
51 | public function testImport() | 52 | public function testImport() |
@@ -71,7 +72,7 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase | |||
71 | ->getMock(); | 72 | ->getMock(); |
72 | 73 | ||
73 | $this->contentProxy | 74 | $this->contentProxy |
74 | ->expects($this->once()) | 75 | ->expects($this->exactly(3)) |
75 | ->method('updateEntry') | 76 | ->method('updateEntry') |
76 | ->willReturn($entry); | 77 | ->willReturn($entry); |
77 | 78 | ||
@@ -99,6 +100,11 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase | |||
99 | ->method('getRepository') | 100 | ->method('getRepository') |
100 | ->willReturn($entryRepo); | 101 | ->willReturn($entryRepo); |
101 | 102 | ||
103 | $this->contentProxy | ||
104 | ->expects($this->exactly(3)) | ||
105 | ->method('updateEntry') | ||
106 | ->willReturn(new Entry($this->user)); | ||
107 | |||
102 | // check that every entry persisted are archived | 108 | // check that every entry persisted are archived |
103 | $this->em | 109 | $this->em |
104 | ->expects($this->any()) | 110 | ->expects($this->any()) |
diff --git a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php index 2b642d27..dbefdee3 100644 --- a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php +++ b/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php | |||
@@ -4,6 +4,7 @@ namespace Wallabag\ImportBundle\Tests\Import; | |||
4 | 4 | ||
5 | use Wallabag\ImportBundle\Import\WallabagV2Import; | 5 | use Wallabag\ImportBundle\Import\WallabagV2Import; |
6 | use Wallabag\UserBundle\Entity\User; | 6 | use Wallabag\UserBundle\Entity\User; |
7 | use Wallabag\CoreBundle\Entity\Entry; | ||
7 | use Monolog\Logger; | 8 | use Monolog\Logger; |
8 | use Monolog\Handler\TestHandler; | 9 | use Monolog\Handler\TestHandler; |
9 | 10 | ||
@@ -45,7 +46,7 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase | |||
45 | 46 | ||
46 | $this->assertEquals('wallabag v2', $wallabagV2Import->getName()); | 47 | $this->assertEquals('wallabag v2', $wallabagV2Import->getName()); |
47 | $this->assertNotEmpty($wallabagV2Import->getUrl()); | 48 | $this->assertNotEmpty($wallabagV2Import->getUrl()); |
48 | $this->assertContains('This importer will import all your wallabag v2 articles.', $wallabagV2Import->getDescription()); | 49 | $this->assertEquals('import.wallabag_v2.description', $wallabagV2Import->getDescription()); |
49 | } | 50 | } |
50 | 51 | ||
51 | public function testImport() | 52 | public function testImport() |
@@ -66,6 +67,11 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase | |||
66 | ->method('getRepository') | 67 | ->method('getRepository') |
67 | ->willReturn($entryRepo); | 68 | ->willReturn($entryRepo); |
68 | 69 | ||
70 | $this->contentProxy | ||
71 | ->expects($this->exactly(2)) | ||
72 | ->method('updateEntry') | ||
73 | ->willReturn(new Entry($this->user)); | ||
74 | |||
69 | $res = $wallabagV2Import->import(); | 75 | $res = $wallabagV2Import->import(); |
70 | 76 | ||
71 | $this->assertTrue($res); | 77 | $this->assertTrue($res); |
@@ -90,6 +96,11 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase | |||
90 | ->method('getRepository') | 96 | ->method('getRepository') |
91 | ->willReturn($entryRepo); | 97 | ->willReturn($entryRepo); |
92 | 98 | ||
99 | $this->contentProxy | ||
100 | ->expects($this->exactly(2)) | ||
101 | ->method('updateEntry') | ||
102 | ->willReturn(new Entry($this->user)); | ||
103 | |||
93 | // check that every entry persisted are archived | 104 | // check that every entry persisted are archived |
94 | $this->em | 105 | $this->em |
95 | ->expects($this->any()) | 106 | ->expects($this->any()) |
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json b/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json index 37d2d0ae..618ce546 100644 --- a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json +++ b/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json | |||
@@ -1,31 +1,34 @@ | |||
1 | [ | 1 | [ |
2 | { | 2 | { |
3 | "id": "23", | 3 | "id": "23", |
4 | "title": "Site d'information fran\u00e7ais d'actualit\u00e9s ind\u00e9pendant et participatif en ligne | Mediapart", | 4 | "title": "Site d'information français d'actualités indépendant et participatif en ligne | Mediapart", |
5 | "url": "https:\/\/www.mediapart.fr\/", | 5 | "url": "https://www.mediapart.fr/", |
6 | "is_archived": false, | 6 | "is_archived": false, |
7 | "is_starred": false, | 7 | "is_starred": false, |
8 | "content": "<div alt=\"li\">\u00c9dition <a href=\"https:\/\/blogs.mediapart.fr\/edition\/camedia-0\">CAM\u00e9dia<\/a>\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/edition\/camedia\/article\/180116\/deux-nouvelles-editions-pour-debattre-dans-le-club-sur-la-laicite-et-sur-la-democratie\">Deux nouvelles \u00e9ditions pour d\u00e9battre dans le club sur la la\u00efcit\u00e9 et sur la d\u00e9mocratie<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>CAM\u00e9dia apr\u00e8s un \u00e9change sur \u00ab\u00a0l'\u00e9thique du d\u00e9bat\u00a0\u00bb a lanc\u00e9 deux discussions , l'une sur le th\u00e8me de la la\u00efcit\u00e9, l'autre ( encore en cours) sur celui de la d\u00e9mocratie. Nous sommes heureux de pouvoir signaler la cr\u00e9ation de deux nouvelles \u00e9ditions participatives sur ces th\u00e8mes. Nous vous invitons \u00e0 les lire et \u00e0 participer \u00e0 leurs d\u00e9bats.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/lucile-longre\/blog\/170116\/de-limportance-de-rever-eloge-du-merveilleux\">De l'importance de r\u00eaver, \u00e9loge du merveilleux<\/a><\/h3>\n<p>17 janv. 2016 | Par <\/p>\n<p>Je parlerai ici des r\u00eaves comme moteur de vie, de ces r\u00eaves qui vous rattachent et vous font esp\u00e9rer \u00e0 ce qu\u2019il y a de plus humain dans l\u2019homme, m\u00eame au milieu de la plus noire des d\u00e9tresses.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/barbara-romagnan\/blog\/180116\/fins-dune-toute-puissance\">Fin(s) d'une toute-puissance<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>En ce d\u00e9but d\u2019ann\u00e9e, je recommande la lecture du dernier ouvrage de Guillaume Duval, La France ne sera jamais plus une grande puissance ? Tant mieux !<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/jean-pierre-thibaudat\/blog\/170116\/l-allier-departement-de-destruction-massive-du-tissu-culturel\">L\u2019Allier, d\u00e9partement de destruction massive du tissu culturel<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>Les temps sont durs pour les petites structures, les associations culturelles qui, de bourgades en villages, travaillent au c\u0153ur des r\u00e9gions. Leurs subventions sont souvent revues \u00e0 la baisse. Le d\u00e9partement de l\u2019Allier les a carr\u00e9ment supprim\u00e9es. Pour favoriser \u00ab l\u2019\u00e9v\u00e9nementiel \u00bb.<\/p>\n<\/div><div alt=\"li\">\u00c9dition <a href=\"https:\/\/blogs.mediapart.fr\/edition\/les-invites-de-mediapart\">Les invit\u00e9s de Mediapart<\/a>\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/edition\/les-invites-de-mediapart\/article\/180116\/la-democratie-deja-attaquee-par-la-cooperation-reglementaire-transatlantiqu\">La d\u00e9mocratie d\u00e9j\u00e0 attaqu\u00e9e par la coop\u00e9ration r\u00e9glementaire transatlantique<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>Lora Verheecke et David Lundy travaillent pour Corporate Europe Observatory, une ONG bas\u00e9e \u00e0 Bruxelles qui enqu\u00eate sur le pouvoir des lobbies des grandes entreprises sur la politique de l\u2019Union europ\u00e9enne. Ils r\u00e9v\u00e8lent que depuis 25 ans le projet de \u00ab coop\u00e9ration r\u00e9glementaire \u00bb men\u00e9 par l\u2019Union europ\u00e9enne et les \u00c9tats-Unis a \u00e9t\u00e9 domin\u00e9 par les grandes entreprises. ET que le TTIP cherche \u00e0 ent\u00e9riner ce projet.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/jacqueline-derens\/blog\/180116\/2016-une-annee-test-pour-jacob-zuma-et-son-gouvernement\">2016, une ann\u00e9e test pour Jacob Zuma et son gouvernement<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>Les turbulences de l\u2019an pass\u00e9 ont toutes les chances de continuer \u00e0 troubler le climat politique et social de l\u2019Afrique du Sud en 2016. La situation exige des changements profonds dans la conduite des affaires du pays. Jacob Zuma tout en admettant la n\u00e9cessit\u00e9 de ces changements, est-il l\u2019homme de la situation ? Son gouvernement r\u00e9pondra-t-il aux attentes des citoyens sud-africains ?<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/marie-cosnay\/blog\/140116\/un-mal-fou-janvier-2016\">Un mal fou (janvier 2016)<\/a><\/h3>\n<p>14 janv. 2016 | Par <\/p>\n<p>J\u2019ai une fringale d\u2019aventure, d\u2019aventures \u00e0 venir. J\u2019ai la fringale de la fringale des aventures et soudain, rupture. Je n\u2019y arrive plus, tout est bloqu\u00e9, tout emp\u00each\u00e9. Faut dire que depuis un an environ, tout est devenu plus compliqu\u00e9. Ecrire va de moins en moins de soi.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/jean-pierre-veran\/blog\/170116\/redoublement-le-changement-bas-bruit\">Redoublement : le changement \u00e0 bas bruit ?<\/a><\/h3>\n<p>17 janv. 2016 | Par <\/p>\n<p>S\u2019il est une caract\u00e9ristique de la forme scolaire fran\u00e7aise bien \u00e9tablie dans la culture des personnels, des \u00e9l\u00e8ves et des parents, c\u2019est bien le redoublement, cens\u00e9 sanctionner des r\u00e9sultats insuffisants pour envisager le passage dans la classe sup\u00e9rieure. Or, en ce domaine, l\u2019\u00e9volution est nette.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/michel-de-pracontal\/blog\/160116\/samedi-sciences-196-des-chasseurs-de-mammouths-en-arctique-il-y-45-000-ans\">Samedi-sciences (196): des chasseurs de mammouths en Arctique il y a 45 000 ans<\/a><\/h3>\n<p>16 janv. 2016 | Par <a href=\"https:\/\/blogs.mediapart.fr\/michel-de-pracontal\" class=\"journalist\">Michel de Pracontal<\/a><\/p>\n<p>Les restes d\u2019un mammouth retrouv\u00e9s en Arctique sib\u00e9rien, dat\u00e9s de 45 000 ans, portent les traces de blessures inflig\u00e9es par des chasseurs humains. Les scientifiques pensaient jusqu\u2019ici que notre esp\u00e8ce ne s\u2019\u00e9tait pas aventur\u00e9e dans cette r\u00e9gion glaciale il y a plus de 30 000 ou 35 0000 ans. En r\u00e9alit\u00e9, des hommes ont r\u00e9ussi \u00e0 survivre en Arctique au moins 10 000 ans plus t\u00f4t que l\u2019on croyait.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/alain-zolty\/blog\/140116\/de-la-democratie-du-citoyen-et-de-lethique\">De la d\u00e9mocratie, du citoyen et de l'\u00e9thique<\/a><\/h3>\n<p>14 janv. 2016 | Par <\/p>\n<p>Trois ouvrages sont parus au Seuil, qui font \u00e9tat de la n\u00e9cessit\u00e9 d\u2019int\u00e9grer le citoyen dans la gouvernance de la nation. Non pas \u00e0 titre consultatif mais dot\u00e9 d\u2019un pouvoir d\u00e9lib\u00e9ratif pour constituer une contre-force face aux clans politico-financiers qui dominent la vie publique.<\/p>\n<\/div>", | 8 | "content": "<div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/camedia-0\">CAMédia</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/camedia/article/180116/deux-nouvelles-editions-pour-debattre-dans-le-club-sur-la-laicite-et-sur-la-democratie\">Deux nouvelles éditions pour débattre dans le club sur la laïcité et sur la démocratie</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>CAMédia après un échange sur « l'éthique du débat » a lancé deux discussions , l'une sur le thème de la laïcité, l'autre ( encore en cours) sur celui de la démocratie. Nous sommes heureux de pouvoir signaler la création de deux nouvelles éditions participatives sur ces thèmes. Nous vous invitons à les lire et à participer à leurs débats.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/lucile-longre/blog/170116/de-limportance-de-rever-eloge-du-merveilleux\">De l'importance de rêver, éloge du merveilleux</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>Je parlerai ici des rêves comme moteur de vie, de ces rêves qui vous rattachent et vous font espérer à ce qu’il y a de plus humain dans l’homme, même au milieu de la plus noire des détresses.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/barbara-romagnan/blog/180116/fins-dune-toute-puissance\">Fin(s) d'une toute-puissance</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>En ce début d’année, je recommande la lecture du dernier ouvrage de Guillaume Duval, La France ne sera jamais plus une grande puissance ? Tant mieux !</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-thibaudat/blog/170116/l-allier-departement-de-destruction-massive-du-tissu-culturel\">L’Allier, département de destruction massive du tissu culturel</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les temps sont durs pour les petites structures, les associations culturelles qui, de bourgades en villages, travaillent au cœur des régions. Leurs subventions sont souvent revues à la baisse. Le département de l’Allier les a carrément supprimées. Pour favoriser « l’événementiel ».</p>\n</div><div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart\">Les invités de Mediapart</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart/article/180116/la-democratie-deja-attaquee-par-la-cooperation-reglementaire-transatlantiqu\">La démocratie déjà attaquée par la coopération réglementaire transatlantique</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Lora Verheecke et David Lundy travaillent pour Corporate Europe Observatory, une ONG basée à Bruxelles qui enquête sur le pouvoir des lobbies des grandes entreprises sur la politique de l’Union européenne. Ils révèlent que depuis 25 ans le projet de « coopération réglementaire » mené par l’Union européenne et les États-Unis a été dominé par les grandes entreprises. ET que le TTIP cherche à entériner ce projet.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jacqueline-derens/blog/180116/2016-une-annee-test-pour-jacob-zuma-et-son-gouvernement\">2016, une année test pour Jacob Zuma et son gouvernement</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les turbulences de l’an passé ont toutes les chances de continuer à troubler le climat politique et social de l’Afrique du Sud en 2016. La situation exige des changements profonds dans la conduite des affaires du pays. Jacob Zuma tout en admettant la nécessité de ces changements, est-il l’homme de la situation ? Son gouvernement répondra-t-il aux attentes des citoyens sud-africains ?</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/marie-cosnay/blog/140116/un-mal-fou-janvier-2016\">Un mal fou (janvier 2016)</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>J’ai une fringale d’aventure, d’aventures à venir. J’ai la fringale de la fringale des aventures et soudain, rupture. Je n’y arrive plus, tout est bloqué, tout empêché. Faut dire que depuis un an environ, tout est devenu plus compliqué. Ecrire va de moins en moins de soi.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-veran/blog/170116/redoublement-le-changement-bas-bruit\">Redoublement : le changement à bas bruit ?</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>S’il est une caractéristique de la forme scolaire française bien établie dans la culture des personnels, des élèves et des parents, c’est bien le redoublement, censé sanctionner des résultats insuffisants pour envisager le passage dans la classe supérieure. Or, en ce domaine, l’évolution est nette.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/michel-de-pracontal/blog/160116/samedi-sciences-196-des-chasseurs-de-mammouths-en-arctique-il-y-45-000-ans\">Samedi-sciences (196): des chasseurs de mammouths en Arctique il y a 45 000 ans</a></h3>\n<p>16 janv. 2016 | Par <a href=\"https://blogs.mediapart.fr/michel-de-pracontal\" class=\"journalist\">Michel de Pracontal</a></p>\n<p>Les restes d’un mammouth retrouvés en Arctique sibérien, datés de 45 000 ans, portent les traces de blessures infligées par des chasseurs humains. Les scientifiques pensaient jusqu’ici que notre espèce ne s’était pas aventurée dans cette région glaciale il y a plus de 30 000 ou 35 0000 ans. En réalité, des hommes ont réussi à survivre en Arctique au moins 10 000 ans plus tôt que l’on croyait.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/alain-zolty/blog/140116/de-la-democratie-du-citoyen-et-de-lethique\">De la démocratie, du citoyen et de l'éthique</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>Trois ouvrages sont parus au Seuil, qui font état de la nécessité d’intégrer le citoyen dans la gouvernance de la nation. Non pas à titre consultatif mais doté d’un pouvoir délibératif pour constituer une contre-force face aux clans politico-financiers qui dominent la vie publique.</p>\n</div>", |
9 | "mimetype": "text\/html", | 9 | "mimetype": "text/html", |
10 | "language": "fr", | 10 | "language": "fr", |
11 | "reading_time": 3, | 11 | "reading_time": 3, |
12 | "domain_name": "www.mediapart.fr", | 12 | "domain_name": "www.mediapart.fr", |
13 | "preview_picture": "https:\/\/www.mediapart.fr\/images\/social\/800\/mediapart.png", | 13 | "preview_picture": "https://www.mediapart.fr/images/social/800/mediapart.png", |
14 | "tags": [] | 14 | "tags": [ |
15 | } | 15 | "mediapart", |
16 | , | 16 | "blog" |
17 | ] | ||
18 | }, | ||
17 | { | 19 | { |
18 | "id": 22, | 20 | "id": 22, |
19 | "title": "R\u00e9fugi\u00e9s: l'UE va cr\u00e9er 100\u00a0000\u00a0places d'accueil dans les Balkans", | 21 | "title": "Réfugiés: l'UE va créer 100 000 places d'accueil dans les Balkans", |
20 | "url": "http:\/\/www.liberation.fr\/planete\/2015\/10\/26\/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867", | 22 | "url": "http://www.liberation.fr/planete/2015/10/26/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867", |
21 | "is_archived": false, | 23 | "is_archived": false, |
22 | "is_starred": false, | 24 | "is_starred": false, |
23 | "content": "<p>Pour un sommet sur les r\u00e9fugi\u00e9s qui devait se concentrer sur des <em>\u00abmesures op\u00e9rationnelles imm\u00e9diates\u00bb<\/em> dans les Balkans, la r\u00e9union, dimanche \u00e0 Bruxelles, de 11\u00a0chefs d\u2019Etat et de gouvernement, dont 8 Europ\u00e9ens, a \u00e9t\u00e9 agit\u00e9e. D\u00e8s leur arriv\u00e9e, Viktor\u00a0Orb\u00e1n (Hongrie) et\u00a0Al\u00e9xis Ts\u00edpras (Gr\u00e8ce) se sont jet\u00e9 des anath\u00e8mes. Le Premier ministre grec a d\u00e9nonc\u00e9 l\u2019attitude <em>\u00abnot in my backyard\u00bb<\/em> (pas de \u00e7a chez moi) de certains Etats europ\u00e9ens, alors que son pays est montr\u00e9 du doigt par d\u2019autres dirigeants, dont\u00a0Orb\u00e1n\u00a0: ils reprochent \u00e0 la Gr\u00e8ce de ne pas suffisamment contr\u00f4ler ses fronti\u00e8res avec la Turquie et ne pas montrer assez de z\u00e8le dans l\u2019enregistrement des demandeurs d\u2019asile.<\/p>\n<p>Le sommet, convoqu\u00e9 par la Commission europ\u00e9enne, sur suggestion de l\u2019Allemagne, aura au moins permis \u00e0 ces 11\u00a0Etats \u2013\u00a0Autriche, Bulgarie, Croatie, Allemagne, Gr\u00e8ce, Hongrie, Roumanie, Slov\u00e9nie c\u00f4t\u00e9 europ\u00e9en, et 3 pays \u00abnon UE\u00bb, Albanie, Mac\u00e9doine et Serbie\u00a0\u2013 de discuter ensemble.<\/p>\n<h3>400\u00a0policiers europ\u00e9ens en Slov\u00e9nie<\/h3>\n<p>L\u2019objectif, rappel\u00e9 par Angela Merkel, \u00e9tait de trouver une <em>\u00abr\u00e9ponse coordonn\u00e9e\u00bb<\/em> \u00e0 la crise des r\u00e9fugi\u00e9s. Quelques mesures ont \u00e9t\u00e9 annonc\u00e9es\u00a0: 100\u00a0000\u00a0places d\u2019accueil seront cr\u00e9\u00e9es, dont 50\u00a0000 en Gr\u00e8ce, et le reste le long de la route des Balkans.\u00a0400\u00a0officiers de police de pays europ\u00e9ens partiront en Slov\u00e9nie, actuellement submerg\u00e9e, pour aider au contr\u00f4le des fronti\u00e8res. Frontex, l\u2019agence europ\u00e9enne de surveillance des fronti\u00e8res, s\u2019impliquera aux fronti\u00e8res gr\u00e9co-mac\u00e9donienne et gr\u00e9co-albanaise pour des contr\u00f4les et identifications.<\/p>\n<p>Ce sommet est intervenu dans un contexte de fortes tensions, marqu\u00e9 par des fermetures de fronti\u00e8res bloquant les r\u00e9fugi\u00e9s dans des zones tampon. Ces obstacles ont \u00e9t\u00e9 partiellement lev\u00e9s ces derniers jours, les autorit\u00e9s tentant d\u2019organiser un \u00abcorridor\u00bb informel vers l\u2019Allemagne, qui pourtant durcit sa politique d\u2019accueil et souhaite d\u00e9sormais ralentir le flux. Mais la situation des r\u00e9fugi\u00e9s est catastrophique. L\u2019ONG Human Rights Watch craint que des r\u00e9fugi\u00e9s ne meurent dans les Balkans. Des groupes de centaines, voire de milliers de personnes, bloqu\u00e9s pr\u00e8s des postes-fronti\u00e8res, se retrouvent dans des conditions humanitaires intenables.<\/p>\n<p>Depuis mi-septembre, 250\u00a0000\u00a0personnes ont travers\u00e9 les Balkans. En une semaine, la Slov\u00e9nie a vu 60\u00a0000\u00a0r\u00e9fugi\u00e9s fouler le sol de son territoire. Dimanche, 15\u00a0000\u00a0personnes ont transit\u00e9 en Slov\u00e9nie.<\/p>\n<h3>Des zones tampon<\/h3>\n<p>L\u2019enjeu principal du sommet, aux yeux de nombreux Etats de l\u2019Union europ\u00e9enne, \u00e9tait aussi que les pays des Balkans <em>\u00abprennent leur part\u00bb<\/em> face \u00e0 la crise\u00a0: qu\u2019ils accueillent et enregistrent davantage de r\u00e9fugi\u00e9s. Ces Etats craignent que l\u2019Autriche ou l\u2019Allemagne ne ferment leurs fronti\u00e8res et fassent de leurs pays des <em>\u00abzones tampon\u00bb<\/em>, comme s\u2019en inqui\u00e9tait Boyko Borissov, Premier ministre bulgare.<\/p>\n<p><em>\u00ab\u00a0Aujourd\u2019hui, plusieurs Etats du nord de l\u2019Europe veulent que l\u2019on enregistre les migrants puis que l\u2019on d\u00e9termine leur \u00e9ligibilit\u00e9 au statut de r\u00e9fugi\u00e9,<\/em> explique Marc Pierini, du think tank Carnegie Europe. <em>La difficult\u00e9, c\u2019est que les gens sont en mouvement. Pour le faire, il faut se poser quelque part. La crainte des pays interm\u00e9diaires, donc ceux des Balkans, est qu\u2019on enregistre ces personnes sur leur territoire et qu\u2019ils soient contraints de rester sur leur sol. Donc les pays des Balkans ne sont pas d\u00e9sireux d\u2019accueillir ces r\u00e9fugi\u00e9s et ces derniers veulent avancer.\u00bb<\/em><\/p>\n<p>Le sommet a \u00e9labor\u00e9 quelques principes. L\u2019id\u00e9e g\u00e9n\u00e9rale est de rendre effective la \u00ablogique de hotspot\u00bb\u00a0: un enregistrement des demandeurs d\u2019asile \u00e0 leur point d\u2019entr\u00e9e dans l\u2019Union europ\u00e9enne, suivi de l\u2019expulsion de ceux qui ne correspondraient pas aux crit\u00e8res de la Convention de Gen\u00e8ve, et la r\u00e9partition des autres, via le m\u00e9canisme de relocalisation.<\/p>\n<p>Dans ce cadre, l\u2019enregistrement des demandeurs d\u2019asile est un \u00e9l\u00e9ment cl\u00e9. <em>\u00abPas d\u2019enregistrement, pas de droit\u00bb<\/em>, a pr\u00e9venu le pr\u00e9sident de la Commission europ\u00e9enne, Jean-Claude Juncker, dimanche soir. Les Etats ont tenu \u00e0 rappeler que les migrants qui refusent de demander l\u2019asile \u00e0 la fronti\u00e8re peuvent se voir refuser l\u2019entr\u00e9e dans un pays.<\/p>\n<p>Et les Etats <em>\u00abd\u00e9courageront les mouvements de r\u00e9fugi\u00e9s\u00bb<\/em> de fronti\u00e8re en fronti\u00e8re. La politique consistant \u00e0 laisser passer les migrants vers un autre pays est officiellement jug\u00e9e <em>\u00abinacceptable\u00bb<\/em>.<\/p>\n<h3>Se jeter dans la gueule du loup<\/h3>\n<p>Voil\u00e0 pour la th\u00e9orie. En pratique, la relocalisation ne devrait concerner que 160\u00a0000\u00a0r\u00e9fugi\u00e9s en deux\u00a0ans, alors que pr\u00e8s de 700\u00a0000\u00a0personnes sont arriv\u00e9es en Europe depuis le d\u00e9but de l\u2019ann\u00e9e. De plus, les Etats ne jouent pas le jeu. La semaine pass\u00e9e, seules 854\u00a0places de relocalisation avaient \u00e9t\u00e9 propos\u00e9es.<\/p>\n<p>Dans ce contexte, il est probable que les Etats des Balkans ne s\u2019impliqueront pas outre mesure dans les solutions propos\u00e9es, craignant de devoir \u00abgarder\u00bb les r\u00e9fugi\u00e9s alors que l\u2019Union europ\u00e9enne tarde \u00e0 mettre en \u0153uvre leur r\u00e9partition.<\/p>\n<p>Quant aux r\u00e9fugi\u00e9s, ils pr\u00e9f\u00e8rent traverser les fronti\u00e8res par eux-m\u00eames, plut\u00f4t que de se jeter dans ces \u00abhotspots\u00bb, consid\u00e9r\u00e9s comme la gueule du loup.<\/p>\n<a itemprop=\"name\" href=\"http:\/\/www.liberation.fr\/auteur\/15743-cedric-vallet\">C\u00e9dric Vallet<\/a>", | 25 | "content": "<p>Pour un sommet sur les réfugiés qui devait se concentrer sur des <em>«mesures opérationnelles immédiates»</em> dans les Balkans, la réunion, dimanche à Bruxelles, de 11 chefs d’Etat et de gouvernement, dont 8 Européens, a été agitée. Dès leur arrivée, Viktor Orbán (Hongrie) et Aléxis Tsípras (Grèce) se sont jeté des anathèmes. Le Premier ministre grec a dénoncé l’attitude <em>«not in my backyard»</em> (pas de ça chez moi) de certains Etats européens, alors que son pays est montré du doigt par d’autres dirigeants, dont Orbán : ils reprochent à la Grèce de ne pas suffisamment contrôler ses frontières avec la Turquie et ne pas montrer assez de zèle dans l’enregistrement des demandeurs d’asile.</p>\n<p>Le sommet, convoqué par la Commission européenne, sur suggestion de l’Allemagne, aura au moins permis à ces 11 Etats – Autriche, Bulgarie, Croatie, Allemagne, Grèce, Hongrie, Roumanie, Slovénie côté européen, et 3 pays «non UE», Albanie, Macédoine et Serbie – de discuter ensemble.</p>\n<h3>400 policiers européens en Slovénie</h3>\n<p>L’objectif, rappelé par Angela Merkel, était de trouver une <em>«réponse coordonnée»</em> à la crise des réfugiés. Quelques mesures ont été annoncées : 100 000 places d’accueil seront créées, dont 50 000 en Grèce, et le reste le long de la route des Balkans. 400 officiers de police de pays européens partiront en Slovénie, actuellement submergée, pour aider au contrôle des frontières. Frontex, l’agence européenne de surveillance des frontières, s’impliquera aux frontières gréco-macédonienne et gréco-albanaise pour des contrôles et identifications.</p>\n<p>Ce sommet est intervenu dans un contexte de fortes tensions, marqué par des fermetures de frontières bloquant les réfugiés dans des zones tampon. Ces obstacles ont été partiellement levés ces derniers jours, les autorités tentant d’organiser un «corridor» informel vers l’Allemagne, qui pourtant durcit sa politique d’accueil et souhaite désormais ralentir le flux. Mais la situation des réfugiés est catastrophique. L’ONG Human Rights Watch craint que des réfugiés ne meurent dans les Balkans. Des groupes de centaines, voire de milliers de personnes, bloqués près des postes-frontières, se retrouvent dans des conditions humanitaires intenables.</p>\n<p>Depuis mi-septembre, 250 000 personnes ont traversé les Balkans. En une semaine, la Slovénie a vu 60 000 réfugiés fouler le sol de son territoire. Dimanche, 15 000 personnes ont transité en Slovénie.</p>\n<h3>Des zones tampon</h3>\n<p>L’enjeu principal du sommet, aux yeux de nombreux Etats de l’Union européenne, était aussi que les pays des Balkans <em>«prennent leur part»</em> face à la crise : qu’ils accueillent et enregistrent davantage de réfugiés. Ces Etats craignent que l’Autriche ou l’Allemagne ne ferment leurs frontières et fassent de leurs pays des <em>«zones tampon»</em>, comme s’en inquiétait Boyko Borissov, Premier ministre bulgare.</p>\n<p><em>« Aujourd’hui, plusieurs Etats du nord de l’Europe veulent que l’on enregistre les migrants puis que l’on détermine leur éligibilité au statut de réfugié,</em> explique Marc Pierini, du think tank Carnegie Europe. <em>La difficulté, c’est que les gens sont en mouvement. Pour le faire, il faut se poser quelque part. La crainte des pays intermédiaires, donc ceux des Balkans, est qu’on enregistre ces personnes sur leur territoire et qu’ils soient contraints de rester sur leur sol. Donc les pays des Balkans ne sont pas désireux d’accueillir ces réfugiés et ces derniers veulent avancer.»</em></p>\n<p>Le sommet a élaboré quelques principes. L’idée générale est de rendre effective la «logique de hotspot» : un enregistrement des demandeurs d’asile à leur point d’entrée dans l’Union européenne, suivi de l’expulsion de ceux qui ne correspondraient pas aux critères de la Convention de Genève, et la répartition des autres, via le mécanisme de relocalisation.</p>\n<p>Dans ce cadre, l’enregistrement des demandeurs d’asile est un élément clé. <em>«Pas d’enregistrement, pas de droit»</em>, a prévenu le président de la Commission européenne, Jean-Claude Juncker, dimanche soir. Les Etats ont tenu à rappeler que les migrants qui refusent de demander l’asile à la frontière peuvent se voir refuser l’entrée dans un pays.</p>\n<p>Et les Etats <em>«décourageront les mouvements de réfugiés»</em> de frontière en frontière. La politique consistant à laisser passer les migrants vers un autre pays est officiellement jugée <em>«inacceptable»</em>.</p>\n<h3>Se jeter dans la gueule du loup</h3>\n<p>Voilà pour la théorie. En pratique, la relocalisation ne devrait concerner que 160 000 réfugiés en deux ans, alors que près de 700 000 personnes sont arrivées en Europe depuis le début de l’année. De plus, les Etats ne jouent pas le jeu. La semaine passée, seules 854 places de relocalisation avaient été proposées.</p>\n<p>Dans ce contexte, il est probable que les Etats des Balkans ne s’impliqueront pas outre mesure dans les solutions proposées, craignant de devoir «garder» les réfugiés alors que l’Union européenne tarde à mettre en œuvre leur répartition.</p>\n<p>Quant aux réfugiés, ils préfèrent traverser les frontières par eux-mêmes, plutôt que de se jeter dans ces «hotspots», considérés comme la gueule du loup.</p>\n<a itemprop=\"name\" href=\"http://www.liberation.fr/auteur/15743-cedric-vallet\">Cédric Vallet</a>", |
26 | "mimetype": "", | ||
27 | "language": "", | ||
24 | "reading_time": 4, | 28 | "reading_time": 4, |
25 | "domain_name": "www.liberation.fr", | 29 | "domain_name": "www.liberation.fr", |
26 | "tags": [] | 30 | "tags": [] |
27 | } | 31 | }, |
28 | , | ||
29 | { | 32 | { |
30 | "id": "21", | 33 | "id": "21", |
31 | "title": "No title found", | 34 | "title": "No title found", |
@@ -33,6 +36,8 @@ | |||
33 | "is_archived": false, | 36 | "is_archived": false, |
34 | "is_starred": true, | 37 | "is_starred": true, |
35 | "content": "Oh, what a shame, no content", | 38 | "content": "Oh, what a shame, no content", |
39 | "mimetype": "", | ||
40 | "language": "", | ||
36 | "reading_time": 4, | 41 | "reading_time": 4, |
37 | "domain_name": "news.nationalgeographic.com", | 42 | "domain_name": "news.nationalgeographic.com", |
38 | "tags": [] | 43 | "tags": [] |
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml index 4da6075f..85f2ea9c 100644 --- a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml +++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml | |||
@@ -1,7 +1,11 @@ | |||
1 | # Two factor mail | 1 | # Two factor mail |
2 | auth_code.mailer.subject: 'Wallabag authentication Code' | 2 | auth_code: |
3 | auth_code.mailer.body.hello: "Hi %user%," | 3 | on: 'on' |
4 | auth_code.mailer.body.first_para: "Since you enable two factor authentication on your wallabag account and you just logged in from a new device (computer, phone, etc.), we send you a code to validate your connection." | 4 | mailer: |
5 | auth_code.mailer.body.second_para: "Here is the code:" | 5 | subject: 'Wallabag authentication Code' |
6 | auth_code.mailer.body.support: "Please don't hesitate to contact us if you have any problems:" | 6 | body: |
7 | auth_code.mailer.body.signature: "The wallabag team" | 7 | hello: "Hi %user%," |
8 | first_para: "Since you enable two factor authentication on your wallabag account and you just logged in from a new device (computer, phone, etc.), we send you a code to validate your connection." | ||
9 | second_para: "Here is the code:" | ||
10 | support: "Please don't hesitate to contact us if you have any problems:" | ||
11 | signature: "The wallabag team" | ||
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml index b4448d3a..30ab5dd9 100644 --- a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml +++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml | |||
@@ -1,7 +1,11 @@ | |||
1 | # Two factor mail | 1 | # Two factor mail |
2 | auth_code.mailer.subject: "Code d'authentification wallabag" | 2 | auth_code: |
3 | auth_code.mailer.body.hello: "Bonjour %user%," | 3 | on: 'sur' |
4 | auth_code.mailer.body.first_para: "Comme vous avez activé la double authentification sur votre compte wallabag et que vous venez de vous connecter depuis un nouvel appareil (ordinateur, téléphone, etc.), nous vous envoyons un code pour valider votre connexion." | 4 | mailer: |
5 | auth_code.mailer.body.second_para: "Voici le code à renseigner :" | 5 | subject: "Code d'authentification wallabag" |
6 | auth_code.mailer.body.support: "Si vous avez un problème de connexion, n'hésitez pas à contacter le support :" | 6 | body: |
7 | auth_code.mailer.body.signature: "L'équipe wallabag" | 7 | hello: "Bonjour %user%," |
8 | first_para: "Comme vous avez activé la double authentification sur votre compte wallabag et que vous venez de vous connecter depuis un nouvel appareil (ordinateur, téléphone, etc.), nous vous envoyons un code pour valider votre connexion." | ||
9 | second_para: "Voici le code à renseigner :" | ||
10 | support: "Si vous avez un problème de connexion, n'hésitez pas à contacter le support :" | ||
11 | signature: "L'équipe wallabag" | ||
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml index d1fcb0e0..70646355 100644 --- a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml +++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml | |||
@@ -1,7 +1,11 @@ | |||
1 | # Two factor mail | 1 | # Two factor mail |
2 | auth_code.mailer.subject: 'Wallabag Doğrulama Kodu' | 2 | auth_code: |
3 | auth_code.mailer.body.hello: "Merhaba %user%," | 3 | on: 'on' |
4 | auth_code.mailer.body.first_para: "wallabag hesabınızda iki adımlı doğrulamayı etkinleştirdiğinizde ve bu yeni cihaz olduğunda (bilgisayar, telefon, vs.), biz size bu işlemi doğrulamak için bir kod göndeririz." | 4 | mailer: |
5 | auth_code.mailer.body.second_para: "Bu işlem için doğrulama kodunuz:" | 5 | subject: 'Wallabag Doğrulama Kodu' |
6 | auth_code.mailer.body.support: "Eğer herhangi bir soru/sorununuz varsa, bizimle iletişime geçmekten çekinmeyin:" | 6 | body: |
7 | auth_code.mailer.body.signature: "wallabag ekibi" | 7 | hello: "Merhaba %user%," |
8 | first_para: "wallabag hesabınızda iki adımlı doğrulamayı etkinleştirdiğinizde ve bu yeni cihaz olduğunda (bilgisayar, telefon, vs.), biz size bu işlemi doğrulamak için bir kod göndeririz." | ||
9 | second_para: "Bu işlem için doğrulama kodunuz:" | ||
10 | support: "Eğer herhangi bir soru/sorununuz varsa, bizimle iletişime geçmekten çekinmeyin:" | ||
11 | signature: "wallabag ekibi" | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Authentication/form.html.twig b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig index fa0e3dc1..acf69196 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Authentication/form.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig | |||
@@ -23,7 +23,7 @@ | |||
23 | </div> | 23 | </div> |
24 | </div> | 24 | </div> |
25 | <div class="card-action center"> | 25 | <div class="card-action center"> |
26 | <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Cancel{% endtrans %}</a> | 26 | <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.cancel'|trans }}</a> |
27 | <button class="btn waves-effect waves-light" type="submit" name="send"> | 27 | <button class="btn waves-effect waves-light" type="submit" name="send"> |
28 | {{ "scheb_two_factor.login"|trans }} | 28 | {{ "scheb_two_factor.login"|trans }} |
29 | <i class="mdi-content-send right"></i> | 29 | <i class="mdi-content-send right"></i> |
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/ChangePassword/changePassword_content.html.twig b/src/Wallabag/UserBundle/Resources/views/ChangePassword/changePassword_content.html.twig index abb68421..abb68421 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/ChangePassword/changePassword_content.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/ChangePassword/changePassword_content.html.twig | |||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig index 50937276..50937276 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/checkEmail.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig | |||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/confirmed.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig index c6d4d3d2..674eb217 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/confirmed.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig | |||
@@ -11,7 +11,7 @@ | |||
11 | {% endif %} | 11 | {% endif %} |
12 | </div> | 12 | </div> |
13 | <div class="card-action center"> | 13 | <div class="card-action center"> |
14 | <a href="{{ path('homepage') }}" class="waves-effect waves-light btn"><i class="material-icons left"></i> {% trans %}Go to your account{% endtrans %}</a> | 14 | <a href="{{ path('homepage') }}" class="waves-effect waves-light btn"><i class="material-icons left"></i> {{ 'security.register.go_to_account'|trans }}</a> |
15 | </div> | 15 | </div> |
16 | </div> | 16 | </div> |
17 | {% endblock fos_user_content %} | 17 | {% endblock fos_user_content %} |
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/register_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig index e92b515e..7d2b45d4 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/register_content.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig | |||
@@ -36,7 +36,7 @@ | |||
36 | </div> | 36 | </div> |
37 | </div> | 37 | </div> |
38 | <div class="card-action center"> | 38 | <div class="card-action center"> |
39 | <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Login{% endtrans %}</a> | 39 | <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.submit'|trans }}</a> |
40 | <button class="btn waves-effect waves-light" type="submit" name="send"> | 40 | <button class="btn waves-effect waves-light" type="submit" name="send"> |
41 | {{ 'registration.submit'|trans({}, 'FOSUserBundle') }} | 41 | {{ 'registration.submit'|trans({}, 'FOSUserBundle') }} |
42 | <i class="mdi-content-send right"></i> | 42 | <i class="mdi-content-send right"></i> |
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/checkEmail.html.twig index 66cbdc28..66cbdc28 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/checkEmail.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Resetting/checkEmail.html.twig | |||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/passwordAlreadyRequested.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/passwordAlreadyRequested.html.twig index 1e245372..1e245372 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/passwordAlreadyRequested.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Resetting/passwordAlreadyRequested.html.twig | |||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/request_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig index e871d7be..7a5ac838 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/request_content.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig | |||
@@ -1,8 +1,10 @@ | |||
1 | {% trans_default_domain 'FOSUserBundle' %} | 1 | {% trans_default_domain 'FOSUserBundle' %} |
2 | |||
2 | <form action="{{ path('fos_user_resetting_send_email') }}" method="POST" class="fos_user_resetting_request"> | 3 | <form action="{{ path('fos_user_resetting_send_email') }}" method="POST" class="fos_user_resetting_request"> |
3 | <div class="card-content"> | 4 | <div class="card-content"> |
4 | <div class="row"> | 5 | <div class="row"> |
5 | <p>{% trans %}Enter your email address below and we'll send you password reset instructions.{% endtrans %}</p> | 6 | <p>{{ 'security.resetting.description'|trans({}, "messages") }}</p> |
7 | |||
6 | {% for flashMessage in app.session.flashbag.get('notice') %} | 8 | {% for flashMessage in app.session.flashbag.get('notice') %} |
7 | <span class="black-text"><p>{{ flashMessage }}</p></span> | 9 | <span class="black-text"><p>{{ flashMessage }}</p></span> |
8 | {% endfor %} | 10 | {% endfor %} |
@@ -18,7 +20,9 @@ | |||
18 | </div> | 20 | </div> |
19 | </div> | 21 | </div> |
20 | <div class="card-action center"> | 22 | <div class="card-action center"> |
21 | <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Login{% endtrans %}</a> | 23 | <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"> |
24 | <i class="material-icons left"></i> {{ 'security.login.submit'|trans({}, "messages") }} | ||
25 | </a> | ||
22 | <button class="btn waves-effect waves-light" type="submit" name="send"> | 26 | <button class="btn waves-effect waves-light" type="submit" name="send"> |
23 | {{ 'resetting.request.submit'|trans }} | 27 | {{ 'resetting.request.submit'|trans }} |
24 | </button> | 28 | </button> |
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/reset_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig index 9d0a061c..9d0a061c 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/reset_content.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig | |||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Security/login.html.twig b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig index 6bf99bf8..982a33b2 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/Security/login.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig | |||
@@ -15,32 +15,32 @@ | |||
15 | <div class="row"> | 15 | <div class="row"> |
16 | 16 | ||
17 | <div class="input-field col s12"> | 17 | <div class="input-field col s12"> |
18 | <label for="username">{% trans %}Username{% endtrans %}</label> | 18 | <label for="username">{{ 'security.login.username'|trans }}</label> |
19 | <input type="text" id="username" name="_username" value="{{ last_username }}" /> | 19 | <input type="text" id="username" name="_username" value="{{ last_username }}" /> |
20 | </div> | 20 | </div> |
21 | 21 | ||
22 | <div class="input-field col s12"> | 22 | <div class="input-field col s12"> |
23 | <label for="password">{% trans %}Password{% endtrans %}</label> | 23 | <label for="password">{{ 'security.login.password'|trans }}</label> |
24 | <input type="password" id="password" name="_password" /> | 24 | <input type="password" id="password" name="_password" /> |
25 | </div> | 25 | </div> |
26 | 26 | ||
27 | <div class="input-field col s12"> | 27 | <div class="input-field col s12"> |
28 | <input type="checkbox" id="remember_me" name="_remember_me" checked /> | 28 | <input type="checkbox" id="remember_me" name="_remember_me" checked /> |
29 | <label for="remember_me">{% trans %}Keep me logged in{% endtrans %}</label> | 29 | <label for="remember_me">{{ 'security.login.keep_logged_in'|trans }}</label> |
30 | </div> | 30 | </div> |
31 | 31 | ||
32 | </div> | 32 | </div> |
33 | </div> | 33 | </div> |
34 | <div class="card-action center"> | 34 | <div class="card-action center"> |
35 | <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" /> | 35 | <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" /> |
36 | <a href="{{ path('fos_user_registration_register') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Register{% endtrans %}</a> | 36 | <a href="{{ path('fos_user_registration_register') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.register'|trans }}</a> |
37 | <button class="btn waves-effect waves-light" type="submit" name="send"> | 37 | <button class="btn waves-effect waves-light" type="submit" name="send"> |
38 | {% trans %}Login{% endtrans %} | 38 | {{ 'security.login.submit'|trans }} |
39 | <i class="mdi-content-send right"></i> | 39 | <i class="mdi-content-send right"></i> |
40 | </button> | 40 | </button> |
41 | </div> | 41 | </div> |
42 | <div class="center"> | 42 | <div class="center"> |
43 | <a href="{{ path('fos_user_resetting_request') }}">{% trans %}Forgot your password?{% endtrans %}</a> | 43 | <a href="{{ path('fos_user_resetting_request') }}">{{ 'security.login.forgot_password'|trans }}</a> |
44 | </div> | 44 | </div> |
45 | </form> | 45 | </form> |
46 | {% endblock fos_user_content %} | 46 | {% endblock fos_user_content %} |
diff --git a/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig b/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig index 69d23160..c44fcfb7 100644 --- a/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig | |||
@@ -77,7 +77,7 @@ | |||
77 | <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ wallabag_url }}/themes/material/img/logo-other_themes.png" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td> | 77 | <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ wallabag_url }}/themes/material/img/logo-other_themes.png" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td> |
78 | <td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc"> | 78 | <td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc"> |
79 | <h1>wallabag</h1> | 79 | <h1>wallabag</h1> |
80 | <h5>{% trans %}on{% endtrans %} {{ wallabag_url }}</h5> | 80 | <h5>{{ "auth_code.on"|trans({}, 'wallabag_user') }} {{ wallabag_url }}</h5> |
81 | </td> | 81 | </td> |
82 | </tr> | 82 | </tr> |
83 | <tr><td colspan="2" style="padding: 0;"><div style="height: 0; border-top: 1px solid #c5c5c5;"> </div></td></tr> | 83 | <tr><td colspan="2" style="padding: 0;"><div style="height: 0; border-top: 1px solid #c5c5c5;"> </div></td></tr> |
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/UserBundle/Resources/views/layout.html.twig index cbdc1da2..1d0189ca 100644 --- a/src/Wallabag/UserBundle/Resources/views/themes/material/layout.html.twig +++ b/src/Wallabag/UserBundle/Resources/views/layout.html.twig | |||
@@ -1,6 +1,6 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | 1 | {% extends "WallabagCoreBundle::layout.html.twig" %} |
2 | 2 | ||
3 | {% block title %}{% trans %}Welcome to wallabag!{% endtrans %}{% endblock %} | 3 | {% block title %}{{ 'security.login.page_title'|trans }}{% endblock %} |
4 | 4 | ||
5 | {% block body_class %}login{% endblock %} | 5 | {% block body_class %}login{% endblock %} |
6 | 6 | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Authentication/form.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Authentication/form.html.twig deleted file mode 100644 index 5bb91081..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Authentication/form.html.twig +++ /dev/null | |||
@@ -1,32 +0,0 @@ | |||
1 | {% extends "WallabagUserBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block fos_user_content %} | ||
4 | <form class="form" action="" method="post"> | ||
5 | <fieldset class="w500p center"> | ||
6 | {% for flashMessage in app.session.flashbag.get("two_factor") %} | ||
7 | <p class="error">{{ flashMessage|trans }}</p> | ||
8 | {% endfor %} | ||
9 | |||
10 | <div class="row"> | ||
11 | <label for="_auth_code">{{ "scheb_two_factor.auth_code"|trans }}</label> | ||
12 | <input id="_auth_code" type="text" autocomplete="off" name="_auth_code" /> | ||
13 | </div> | ||
14 | |||
15 | {% if useTrustedOption %} | ||
16 | <div class="row"> | ||
17 | <input id="_trusted" type="checkbox" name="_trusted" /> | ||
18 | <label for="_trusted">{{ "scheb_two_factor.trusted"|trans }}</label> | ||
19 | </div> | ||
20 | {% endif %} | ||
21 | |||
22 | <div class="row mts txtcenter"> | ||
23 | <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Cancel{% endtrans %}</a> | ||
24 | <button type="submit" name="send"> | ||
25 | {{ "scheb_two_factor.login"|trans }} | ||
26 | <i class="mdi-content-send right"></i> | ||
27 | </button> | ||
28 | </div> | ||
29 | </fieldset> | ||
30 | |||
31 | </form> | ||
32 | {% endblock %} | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register.html.twig deleted file mode 100644 index 2713bf45..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register.html.twig +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block title %}{% trans %}create an account{% endtrans %}{% endblock %} | ||
4 | |||
5 | {% block body_class %}login{% endblock %} | ||
6 | |||
7 | {% block menu %}{% endblock %} | ||
8 | {% block messages %}{% endblock %} | ||
9 | |||
10 | {% block content %} | ||
11 | {{ form_start(form) }} | ||
12 | <fieldset class="w500p center"> | ||
13 | <h2 class="mbs txtcenter">{% trans %}create an account{% endtrans %}</h2> | ||
14 | {% include "FOSUserBundle:Registration:register_content.html.twig" %} | ||
15 | </fieldset> | ||
16 | </form> | ||
17 | {% endblock %} | ||
18 | |||
19 | {% block footer %} | ||
20 | {% endblock %} | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register_content.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register_content.html.twig deleted file mode 100644 index 41f94006..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register_content.html.twig +++ /dev/null | |||
@@ -1,37 +0,0 @@ | |||
1 | {% trans_default_domain 'FOSUserBundle' %} | ||
2 | |||
3 | {{ form_widget(form._token) }} | ||
4 | |||
5 | {% for flashMessage in app.session.flashbag.get('notice') %} | ||
6 | <span><p>{{ flashMessage }}</p></span> | ||
7 | {% endfor %} | ||
8 | |||
9 | <div class="row"> | ||
10 | {{ form_errors(form.email) }} | ||
11 | {{ form_label(form.email) }} | ||
12 | {{ form_widget(form.email) }} | ||
13 | </div> | ||
14 | |||
15 | <div class="row"> | ||
16 | {{ form_errors(form.username) }} | ||
17 | {{ form_label(form.username) }} | ||
18 | {{ form_widget(form.username) }} | ||
19 | </div> | ||
20 | |||
21 | <div class="row"> | ||
22 | {{ form_errors(form.plainPassword.first) }} | ||
23 | {{ form_label(form.plainPassword.first) }} | ||
24 | {{ form_widget(form.plainPassword.first) }} | ||
25 | </div> | ||
26 | |||
27 | <div class="row"> | ||
28 | {{ form_errors(form.plainPassword.second) }} | ||
29 | {{ form_label(form.plainPassword.second) }} | ||
30 | {{ form_widget(form.plainPassword.second) }} | ||
31 | </div> | ||
32 | |||
33 | |||
34 | <div class="row mts txtcenter"> | ||
35 | <button type="submit">{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}</button> | ||
36 | <a href="{{ path('fos_user_security_login') }}" class="button">{% trans %}Login{% endtrans %}</a> | ||
37 | </div> | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/checkEmail.html.twig deleted file mode 100644 index 056d65b5..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/checkEmail.html.twig +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block title %}{% trans %}Forgot password{% endtrans %}{% endblock %} | ||
4 | |||
5 | {% block body_class %}login{% endblock %} | ||
6 | |||
7 | {% block menu %}{% endblock %} | ||
8 | |||
9 | {% block content %} | ||
10 | <form> | ||
11 | <fieldset class="w500p center"> | ||
12 | <h2 class="mbs txtcenter">{% trans %}Forgot password{% endtrans %}</h2> | ||
13 | |||
14 | <p>{{ 'An email has been sent to %email%. It contains a link you must click to reset your password.'|trans({'%email%': email}) }}</p> | ||
15 | </fieldset> | ||
16 | </form> | ||
17 | {% endblock %} | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request.html.twig deleted file mode 100644 index 10094e83..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request.html.twig +++ /dev/null | |||
@@ -1,20 +0,0 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block title %}{% trans %}Forgot password{% endtrans %}{% endblock %} | ||
4 | |||
5 | {% block body_class %}login{% endblock %} | ||
6 | |||
7 | {% block menu %}{% endblock %} | ||
8 | {% block messages %}{% endblock %} | ||
9 | |||
10 | {% block content %} | ||
11 | <form action="{{ path('fos_user_resetting_send_email') }}" method="post" name="forgotPasswordform"> | ||
12 | <fieldset class="w500p center"> | ||
13 | <h2 class="mbs txtcenter">{% trans %}Forgot password{% endtrans %}</h2> | ||
14 | {% include "FOSUserBundle:Resetting:request_content.html.twig" %} | ||
15 | </fieldset> | ||
16 | </form> | ||
17 | {% endblock %} | ||
18 | |||
19 | {% block footer %} | ||
20 | {% endblock %} | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request_content.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request_content.html.twig deleted file mode 100644 index 1f8da8d7..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request_content.html.twig +++ /dev/null | |||
@@ -1,17 +0,0 @@ | |||
1 | {% trans_default_domain 'FOSUserBundle' %} | ||
2 | |||
3 | {% trans %}Enter your email address below and we'll send you password reset instructions.{% endtrans %} | ||
4 | |||
5 | {% if invalid_username is defined %} | ||
6 | <p>{{ 'resetting.request.invalid_username'|trans({'%username%': invalid_username}) }}</p> | ||
7 | {% endif %} | ||
8 | |||
9 | <div class="row"> | ||
10 | <label for="username">{{ 'resetting.request.username'|trans }}</label> | ||
11 | <input type="text" id="username" name="username" required="required" /> | ||
12 | </div> | ||
13 | |||
14 | <div class="row mts txtcenter"> | ||
15 | <button type="submit">{{ 'resetting.request.submit'|trans }}</button> | ||
16 | <a href="{{ path('fos_user_security_login') }}" class="button">{% trans %}Login{% endtrans %}</a> | ||
17 | </div> | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Security/login.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Security/login.html.twig deleted file mode 100644 index d52c3662..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Security/login.html.twig +++ /dev/null | |||
@@ -1,33 +0,0 @@ | |||
1 | {% extends "FOSUserBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block fos_user_content %} | ||
4 | <form action="{{ path('fos_user_security_check') }}" method="post" name="loginform"> | ||
5 | <fieldset class="w500p center"> | ||
6 | <h2 class="mbs txtcenter">{% trans %}Login to wallabag{% endtrans %}</h2> | ||
7 | {% if error %} | ||
8 | <div>{{ error.message }}</div> | ||
9 | {% endif %} | ||
10 | |||
11 | {% for flashMessage in app.session.flashbag.get('notice') %} | ||
12 | <p>{{ flashMessage }}</p> | ||
13 | {% endfor %} | ||
14 | |||
15 | <div class="row"> | ||
16 | <label class="col w150p" for="username">{% trans %}Username{% endtrans %}</label> | ||
17 | <input type="text" id="username" name="_username" value="{{ last_username }}" /> | ||
18 | </div> | ||
19 | |||
20 | <div class="row"> | ||
21 | <label class="col w150p" for="password">{% trans %}Password{% endtrans %}</label> | ||
22 | <input type="password" id="password" name="_password" /> | ||
23 | </div> | ||
24 | |||
25 | <div class="row mts txtcenter"> | ||
26 | <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" /> | ||
27 | <button type="submit">Login</button> | ||
28 | <a href="{{ path('fos_user_registration_register') }}" class="button">{% trans %}Register{% endtrans %}</a> | ||
29 | <a href="{{ path('fos_user_resetting_request') }}" class="small">Forgot your password?</a> | ||
30 | </div> | ||
31 | </fieldset> | ||
32 | </form> | ||
33 | {% endblock %} | ||
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/layout.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/layout.html.twig deleted file mode 100644 index 60b321bf..00000000 --- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/layout.html.twig +++ /dev/null | |||
@@ -1,16 +0,0 @@ | |||
1 | {% extends "WallabagCoreBundle::layout.html.twig" %} | ||
2 | |||
3 | {% block title %}{% trans %}Welcome to wallabag!{% endtrans %}{% endblock %} | ||
4 | |||
5 | {% block body_class %}login{% endblock %} | ||
6 | |||
7 | {% block menu %}{% endblock %} | ||
8 | {% block messages %}{% endblock %} | ||
9 | |||
10 | {% block content %} | ||
11 | {% block fos_user_content %} | ||
12 | {% endblock fos_user_content %} | ||
13 | {% endblock %} | ||
14 | |||
15 | {% block footer %} | ||
16 | {% endblock %} | ||