aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag')
-rw-r--r--src/Wallabag/ApiBundle/Controller/WallabagRestController.php49
-rw-r--r--src/Wallabag/CoreBundle/Command/InstallCommand.php13
-rw-r--r--src/Wallabag/CoreBundle/Controller/ConfigController.php83
-rw-r--r--src/Wallabag/CoreBundle/Controller/DeveloperController.php8
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php2
-rw-r--r--src/Wallabag/CoreBundle/Controller/ExceptionController.php40
-rw-r--r--src/Wallabag/CoreBundle/Controller/RssController.php2
-rw-r--r--src/Wallabag/CoreBundle/Controller/StaticController.php6
-rw-r--r--src/Wallabag/CoreBundle/Helper/EntriesExport.php2
-rw-r--r--src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php7
-rw-r--r--src/Wallabag/CoreBundle/Repository/EntryRepository.php4
-rw-r--r--src/Wallabag/CoreBundle/Resources/config/services.yml17
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.da.yml51
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.de.yml69
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.en.yml55
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.es.yml69
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml64
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml51
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.it.yml66
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml99
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml103
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml51
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml64
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.da.yml6
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.tr.yml10
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/base.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig43
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig24
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig169
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig28
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig67
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig1
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client_parameters.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/howto_app.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/index.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/_title.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/_title.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/entries.xml.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/share.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig6
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/_bookmarklet.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/about.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig)0
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/howto.html.twig (renamed from src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig)2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/common/Static/quickstart.html.twig119
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig55
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig37
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig23
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig63
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig69
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig26
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig30
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig77
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig21
-rw-r--r--src/Wallabag/CoreBundle/Twig/WallabagExtension.php40
-rw-r--r--src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php2
-rw-r--r--src/Wallabag/ImportBundle/Controller/ImportController.php12
-rw-r--r--src/Wallabag/ImportBundle/Controller/InstapaperController.php77
-rw-r--r--src/Wallabag/ImportBundle/Import/AbstractImport.php4
-rw-r--r--src/Wallabag/ImportBundle/Import/BrowserImport.php2
-rw-r--r--src/Wallabag/ImportBundle/Import/InstapaperImport.php140
-rw-r--r--src/Wallabag/ImportBundle/Import/ReadabilityImport.php2
-rw-r--r--src/Wallabag/ImportBundle/Import/WallabagImport.php2
-rw-r--r--src/Wallabag/ImportBundle/Resources/config/rabbit.yml7
-rw-r--r--src/Wallabag/ImportBundle/Resources/config/redis.yml20
-rw-r--r--src/Wallabag/ImportBundle/Resources/config/services.yml10
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig45
-rw-r--r--src/Wallabag/UserBundle/Controller/ManageController.php149
-rw-r--r--src/Wallabag/UserBundle/Entity/User.php2
-rw-r--r--src/Wallabag/UserBundle/EventListener/CreateConfigListener.php (renamed from src/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListener.php)24
-rw-r--r--src/Wallabag/UserBundle/Form/NewUserType.php (renamed from src/Wallabag/CoreBundle/Form/Type/NewUserType.php)14
-rw-r--r--src/Wallabag/UserBundle/Form/UserType.php61
-rw-r--r--src/Wallabag/UserBundle/Resources/config/services.yml12
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Manage/edit.html.twig86
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig48
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Manage/new.html.twig61
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Registration/check_email.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig)0
-rw-r--r--src/Wallabag/UserBundle/Resources/views/manage.html.twig43
79 files changed, 1793 insertions, 927 deletions
diff --git a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
index dd17ef97..791bf80b 100644
--- a/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
+++ b/src/Wallabag/ApiBundle/Controller/WallabagRestController.php
@@ -23,6 +23,38 @@ class WallabagRestController extends FOSRestController
23 } 23 }
24 24
25 /** 25 /**
26 * Check if an entry exist by url.
27 *
28 * @ApiDoc(
29 * parameters={
30 * {"name"="url", "dataType"="string", "required"=true, "format"="An url", "description"="Url to check if it exists"}
31 * }
32 * )
33 *
34 * @return JsonResponse
35 */
36 public function getEntriesExistsAction(Request $request)
37 {
38 $this->validateAuthentication();
39
40 $url = $request->query->get('url', '');
41
42 if (empty($url)) {
43 throw $this->createAccessDeniedException('URL is empty?, logged user id: '.$user->getId());
44 }
45
46 $res = $this->getDoctrine()
47 ->getRepository('WallabagCoreBundle:Entry')
48 ->findByUrlAndUserId($url, $this->getUser()->getId());
49
50 $exists = false === $res ? false : true;
51
52 $json = $this->get('serializer')->serialize(['exists' => $exists], 'json');
53
54 return (new JsonResponse())->setJson($json);
55 }
56
57 /**
26 * Retrieve all entries. It could be filtered by many options. 58 * Retrieve all entries. It could be filtered by many options.
27 * 59 *
28 * @ApiDoc( 60 * @ApiDoc(
@@ -50,8 +82,8 @@ class WallabagRestController extends FOSRestController
50 $order = $request->query->get('order', 'desc'); 82 $order = $request->query->get('order', 'desc');
51 $page = (int) $request->query->get('page', 1); 83 $page = (int) $request->query->get('page', 1);
52 $perPage = (int) $request->query->get('perPage', 30); 84 $perPage = (int) $request->query->get('perPage', 30);
53 $since = $request->query->get('since', 0);
54 $tags = $request->query->get('tags', ''); 85 $tags = $request->query->get('tags', '');
86 $since = $request->query->get('since', 0);
55 87
56 $pager = $this->getDoctrine() 88 $pager = $this->getDoctrine()
57 ->getRepository('WallabagCoreBundle:Entry') 89 ->getRepository('WallabagCoreBundle:Entry')
@@ -63,7 +95,20 @@ class WallabagRestController extends FOSRestController
63 $pagerfantaFactory = new PagerfantaFactory('page', 'perPage'); 95 $pagerfantaFactory = new PagerfantaFactory('page', 'perPage');
64 $paginatedCollection = $pagerfantaFactory->createRepresentation( 96 $paginatedCollection = $pagerfantaFactory->createRepresentation(
65 $pager, 97 $pager,
66 new Route('api_get_entries', [], UrlGeneratorInterface::ABSOLUTE_URL) 98 new Route(
99 'api_get_entries',
100 [
101 'archive' => $isArchived,
102 'starred' => $isStarred,
103 'sort' => $sort,
104 'order' => $order,
105 'page' => $page,
106 'perPage' => $perPage,
107 'tags' => $tags,
108 'since' => $since,
109 ],
110 UrlGeneratorInterface::ABSOLUTE_URL
111 )
67 ); 112 );
68 113
69 $json = $this->get('serializer')->serialize($paginatedCollection, 'json'); 114 $json = $this->get('serializer')->serialize($paginatedCollection, 'json');
diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php
index 3873d2d3..cc7c2c94 100644
--- a/src/Wallabag/CoreBundle/Command/InstallCommand.php
+++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php
@@ -2,6 +2,8 @@
2 2
3namespace Wallabag\CoreBundle\Command; 3namespace Wallabag\CoreBundle\Command;
4 4
5use FOS\UserBundle\Event\UserEvent;
6use FOS\UserBundle\FOSUserEvents;
5use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand; 7use Symfony\Bundle\FrameworkBundle\Command\ContainerAwareCommand;
6use Symfony\Component\Console\Helper\Table; 8use Symfony\Component\Console\Helper\Table;
7use Symfony\Component\Console\Input\ArrayInput; 9use Symfony\Component\Console\Input\ArrayInput;
@@ -236,14 +238,9 @@ class InstallCommand extends ContainerAwareCommand
236 238
237 $em->persist($user); 239 $em->persist($user);
238 240
239 $config = new Config($user); 241 // dispatch a created event so the associated config will be created
240 $config->setTheme($this->getContainer()->getParameter('wallabag_core.theme')); 242 $event = new UserEvent($user);
241 $config->setItemsPerPage($this->getContainer()->getParameter('wallabag_core.items_on_page')); 243 $this->getContainer()->get('event_dispatcher')->dispatch(FOSUserEvents::USER_CREATED, $event);
242 $config->setRssLimit($this->getContainer()->getParameter('wallabag_core.rss_limit'));
243 $config->setReadingSpeed($this->getContainer()->getParameter('wallabag_core.reading_speed'));
244 $config->setLanguage($this->getContainer()->getParameter('wallabag_core.language'));
245
246 $em->persist($config);
247 244
248 $this->defaultOutput->writeln(''); 245 $this->defaultOutput->writeln('');
249 246
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php
index 4f75511b..91cdcae5 100644
--- a/src/Wallabag/CoreBundle/Controller/ConfigController.php
+++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php
@@ -11,7 +11,6 @@ use Wallabag\CoreBundle\Entity\Config;
11use Wallabag\CoreBundle\Entity\TaggingRule; 11use Wallabag\CoreBundle\Entity\TaggingRule;
12use Wallabag\CoreBundle\Form\Type\ConfigType; 12use Wallabag\CoreBundle\Form\Type\ConfigType;
13use Wallabag\CoreBundle\Form\Type\ChangePasswordType; 13use Wallabag\CoreBundle\Form\Type\ChangePasswordType;
14use Wallabag\CoreBundle\Form\Type\NewUserType;
15use Wallabag\CoreBundle\Form\Type\RssType; 14use Wallabag\CoreBundle\Form\Type\RssType;
16use Wallabag\CoreBundle\Form\Type\TaggingRuleType; 15use Wallabag\CoreBundle\Form\Type\TaggingRuleType;
17use Wallabag\CoreBundle\Form\Type\UserInformationType; 16use Wallabag\CoreBundle\Form\Type\UserInformationType;
@@ -106,7 +105,21 @@ class ConfigController extends Controller
106 105
107 // handle tagging rule 106 // handle tagging rule
108 $taggingRule = new TaggingRule(); 107 $taggingRule = new TaggingRule();
109 $newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $this->generateUrl('config').'#set5']); 108 $action = $this->generateUrl('config').'#set5';
109
110 if ($request->query->has('tagging-rule')) {
111 $taggingRule = $this->getDoctrine()
112 ->getRepository('WallabagCoreBundle:TaggingRule')
113 ->find($request->query->get('tagging-rule'));
114
115 if ($this->getUser()->getId() !== $taggingRule->getConfig()->getUser()->getId()) {
116 return $this->redirect($action);
117 }
118
119 $action = $this->generateUrl('config').'?tagging-rule='.$taggingRule->getId().'#set5';
120 }
121
122 $newTaggingRule = $this->createForm(TaggingRuleType::class, $taggingRule, ['action' => $action]);
110 $newTaggingRule->handleRequest($request); 123 $newTaggingRule->handleRequest($request);
111 124
112 if ($newTaggingRule->isValid()) { 125 if ($newTaggingRule->isValid()) {
@@ -122,45 +135,12 @@ class ConfigController extends Controller
122 return $this->redirect($this->generateUrl('config').'#set5'); 135 return $this->redirect($this->generateUrl('config').'#set5');
123 } 136 }
124 137
125 // handle adding new user
126 $newUser = $userManager->createUser();
127 // enable created user by default
128 $newUser->setEnabled(true);
129 $newUserForm = $this->createForm(NewUserType::class, $newUser, [
130 'validation_groups' => ['Profile'],
131 'action' => $this->generateUrl('config').'#set6',
132 ]);
133 $newUserForm->handleRequest($request);
134
135 if ($newUserForm->isValid() && $this->get('security.authorization_checker')->isGranted('ROLE_SUPER_ADMIN')) {
136 $userManager->updateUser($newUser, true);
137
138 $config = new Config($newUser);
139 $config->setTheme($this->getParameter('wallabag_core.theme'));
140 $config->setItemsPerPage($this->getParameter('wallabag_core.items_on_page'));
141 $config->setRssLimit($this->getParameter('wallabag_core.rss_limit'));
142 $config->setLanguage($this->getParameter('wallabag_core.language'));
143 $config->setReadingSpeed($this->getParameter('wallabag_core.reading_speed'));
144
145 $em->persist($config);
146
147 $em->flush();
148
149 $this->get('session')->getFlashBag()->add(
150 'notice',
151 $this->get('translator')->trans('flashes.config.notice.user_added', ['%username%' => $newUser->getUsername()])
152 );
153
154 return $this->redirect($this->generateUrl('config').'#set6');
155 }
156
157 return $this->render('WallabagCoreBundle:Config:index.html.twig', [ 138 return $this->render('WallabagCoreBundle:Config:index.html.twig', [
158 'form' => [ 139 'form' => [
159 'config' => $configForm->createView(), 140 'config' => $configForm->createView(),
160 'rss' => $rssForm->createView(), 141 'rss' => $rssForm->createView(),
161 'pwd' => $pwdForm->createView(), 142 'pwd' => $pwdForm->createView(),
162 'user' => $userForm->createView(), 143 'user' => $userForm->createView(),
163 'new_user' => $newUserForm->createView(),
164 'new_tagging_rule' => $newTaggingRule->createView(), 144 'new_tagging_rule' => $newTaggingRule->createView(),
165 ], 145 ],
166 'rss' => [ 146 'rss' => [
@@ -210,9 +190,7 @@ class ConfigController extends Controller
210 */ 190 */
211 public function deleteTaggingRuleAction(TaggingRule $rule) 191 public function deleteTaggingRuleAction(TaggingRule $rule)
212 { 192 {
213 if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { 193 $this->validateRuleAction($rule);
214 throw $this->createAccessDeniedException('You can not access this tagging rule.');
215 }
216 194
217 $em = $this->getDoctrine()->getManager(); 195 $em = $this->getDoctrine()->getManager();
218 $em->remove($rule); 196 $em->remove($rule);
@@ -227,6 +205,34 @@ class ConfigController extends Controller
227 } 205 }
228 206
229 /** 207 /**
208 * Edit a tagging rule.
209 *
210 * @param TaggingRule $rule
211 *
212 * @Route("/tagging-rule/edit/{id}", requirements={"id" = "\d+"}, name="edit_tagging_rule")
213 *
214 * @return RedirectResponse
215 */
216 public function editTaggingRuleAction(TaggingRule $rule)
217 {
218 $this->validateRuleAction($rule);
219
220 return $this->redirect($this->generateUrl('config').'?tagging-rule='.$rule->getId().'#set5');
221 }
222
223 /**
224 * Validate that a rule can be edited/deleted by the current user.
225 *
226 * @param TaggingRule $rule
227 */
228 private function validateRuleAction(TaggingRule $rule)
229 {
230 if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) {
231 throw $this->createAccessDeniedException('You can not access this tagging rule.');
232 }
233 }
234
235 /**
230 * Retrieve config for the current user. 236 * Retrieve config for the current user.
231 * If no config were found, create a new one. 237 * If no config were found, create a new one.
232 * 238 *
@@ -238,6 +244,7 @@ class ConfigController extends Controller
238 ->getRepository('WallabagCoreBundle:Config') 244 ->getRepository('WallabagCoreBundle:Config')
239 ->findOneByUser($this->getUser()); 245 ->findOneByUser($this->getUser());
240 246
247 // should NEVER HAPPEN ...
241 if (!$config) { 248 if (!$config) {
242 $config = new Config($this->getUser()); 249 $config = new Config($this->getUser());
243 } 250 }
diff --git a/src/Wallabag/CoreBundle/Controller/DeveloperController.php b/src/Wallabag/CoreBundle/Controller/DeveloperController.php
index 63386db0..f3492b74 100644
--- a/src/Wallabag/CoreBundle/Controller/DeveloperController.php
+++ b/src/Wallabag/CoreBundle/Controller/DeveloperController.php
@@ -21,7 +21,7 @@ class DeveloperController extends Controller
21 { 21 {
22 $clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findAll(); 22 $clients = $this->getDoctrine()->getRepository('WallabagApiBundle:Client')->findAll();
23 23
24 return $this->render('WallabagCoreBundle:Developer:index.html.twig', [ 24 return $this->render('@WallabagCore/themes/common/Developer/index.html.twig', [
25 'clients' => $clients, 25 'clients' => $clients,
26 ]); 26 ]);
27 } 27 }
@@ -52,14 +52,14 @@ class DeveloperController extends Controller
52 $this->get('translator')->trans('flashes.developer.notice.client_created', ['%name%' => $client->getName()]) 52 $this->get('translator')->trans('flashes.developer.notice.client_created', ['%name%' => $client->getName()])
53 ); 53 );
54 54
55 return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', [ 55 return $this->render('@WallabagCore/themes/common/Developer/client_parameters.html.twig', [
56 'client_id' => $client->getPublicId(), 56 'client_id' => $client->getPublicId(),
57 'client_secret' => $client->getSecret(), 57 'client_secret' => $client->getSecret(),
58 'client_name' => $client->getName(), 58 'client_name' => $client->getName(),
59 ]); 59 ]);
60 } 60 }
61 61
62 return $this->render('WallabagCoreBundle:Developer:client.html.twig', [ 62 return $this->render('@WallabagCore/themes/common/Developer/client.html.twig', [
63 'form' => $clientForm->createView(), 63 'form' => $clientForm->createView(),
64 ]); 64 ]);
65 } 65 }
@@ -96,6 +96,6 @@ class DeveloperController extends Controller
96 */ 96 */
97 public function howtoFirstAppAction() 97 public function howtoFirstAppAction()
98 { 98 {
99 return $this->render('WallabagCoreBundle:Developer:howto_app.html.twig'); 99 return $this->render('@WallabagCore/themes/common/Developer/howto_app.html.twig');
100 } 100 }
101} 101}
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index 40111af0..3b28e635 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -531,7 +531,7 @@ class EntryController extends Controller
531 } 531 }
532 532
533 return $this->render( 533 return $this->render(
534 '@WallabagCore/themes/share.html.twig', 534 '@WallabagCore/themes/common/Entry/share.html.twig',
535 ['entry' => $entry] 535 ['entry' => $entry]
536 ); 536 );
537 } 537 }
diff --git a/src/Wallabag/CoreBundle/Controller/ExceptionController.php b/src/Wallabag/CoreBundle/Controller/ExceptionController.php
new file mode 100644
index 00000000..abfa9c2f
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Controller/ExceptionController.php
@@ -0,0 +1,40 @@
1<?php
2
3namespace Wallabag\CoreBundle\Controller;
4
5use Symfony\Bundle\TwigBundle\Controller\ExceptionController as BaseExceptionController;
6use Symfony\Component\HttpFoundation\Request;
7
8/**
9 * This controller allow us to customize the error template.
10 * The only modified line from the parent template is for "WallabagCoreBundle".
11 */
12class ExceptionController extends BaseExceptionController
13{
14 protected function findTemplate(Request $request, $format, $code, $showException)
15 {
16 $name = $showException ? 'exception' : 'error';
17 if ($showException && 'html' == $format) {
18 $name = 'exception_full';
19 }
20
21 // For error pages, try to find a template for the specific HTTP status code and format
22 if (!$showException) {
23 $template = sprintf('WallabagCoreBundle:Exception:%s.%s.twig', $name, $format);
24 if ($this->templateExists($template)) {
25 return $template;
26 }
27 }
28
29 // try to find a template for the given format
30 $template = sprintf('@Twig/Exception/%s.%s.twig', $name, $format);
31 if ($this->templateExists($template)) {
32 return $template;
33 }
34
35 // default to a generic HTML exception
36 $request->setRequestFormat('html');
37
38 return sprintf('@Twig/Exception/%s.html.twig', $showException ? 'exception_full' : $name);
39 }
40}
diff --git a/src/Wallabag/CoreBundle/Controller/RssController.php b/src/Wallabag/CoreBundle/Controller/RssController.php
index 2118885c..38e3b5a0 100644
--- a/src/Wallabag/CoreBundle/Controller/RssController.php
+++ b/src/Wallabag/CoreBundle/Controller/RssController.php
@@ -87,7 +87,7 @@ class RssController extends Controller
87 $perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit'); 87 $perPage = $user->getConfig()->getRssLimit() ?: $this->getParameter('wallabag_core.rss_limit');
88 $entries->setMaxPerPage($perPage); 88 $entries->setMaxPerPage($perPage);
89 89
90 return $this->render('WallabagCoreBundle:Entry:entries.xml.twig', [ 90 return $this->render('@WallabagCore/themes/common/Entry/entries.xml.twig', [
91 'type' => $type, 91 'type' => $type,
92 'entries' => $entries, 92 'entries' => $entries,
93 ]); 93 ]);
diff --git a/src/Wallabag/CoreBundle/Controller/StaticController.php b/src/Wallabag/CoreBundle/Controller/StaticController.php
index 2a57f06f..82714217 100644
--- a/src/Wallabag/CoreBundle/Controller/StaticController.php
+++ b/src/Wallabag/CoreBundle/Controller/StaticController.php
@@ -15,7 +15,7 @@ class StaticController extends Controller
15 $addonsUrl = $this->container->getParameter('addons_url'); 15 $addonsUrl = $this->container->getParameter('addons_url');
16 16
17 return $this->render( 17 return $this->render(
18 'WallabagCoreBundle:Static:howto.html.twig', 18 '@WallabagCore/themes/common/Static/howto.html.twig',
19 ['addonsUrl' => $addonsUrl] 19 ['addonsUrl' => $addonsUrl]
20 ); 20 );
21 } 21 }
@@ -26,7 +26,7 @@ class StaticController extends Controller
26 public function aboutAction() 26 public function aboutAction()
27 { 27 {
28 return $this->render( 28 return $this->render(
29 'WallabagCoreBundle:Static:about.html.twig', 29 '@WallabagCore/themes/common/Static/about.html.twig',
30 [ 30 [
31 'version' => $this->getParameter('wallabag_core.version'), 31 'version' => $this->getParameter('wallabag_core.version'),
32 'paypal_url' => $this->getParameter('wallabag_core.paypal_url'), 32 'paypal_url' => $this->getParameter('wallabag_core.paypal_url'),
@@ -40,7 +40,7 @@ class StaticController extends Controller
40 public function quickstartAction() 40 public function quickstartAction()
41 { 41 {
42 return $this->render( 42 return $this->render(
43 'WallabagCoreBundle:Static:quickstart.html.twig', 43 '@WallabagCore/themes/common/Static/quickstart.html.twig',
44 [] 44 []
45 ); 45 );
46 } 46 }
diff --git a/src/Wallabag/CoreBundle/Helper/EntriesExport.php b/src/Wallabag/CoreBundle/Helper/EntriesExport.php
index 1dfa12c8..0c627dcd 100644
--- a/src/Wallabag/CoreBundle/Helper/EntriesExport.php
+++ b/src/Wallabag/CoreBundle/Helper/EntriesExport.php
@@ -25,7 +25,7 @@ class EntriesExport
25 private $footerTemplate = '<div style="text-align:center;"> 25 private $footerTemplate = '<div style="text-align:center;">
26 <p>Produced by wallabag with %EXPORT_METHOD%</p> 26 <p>Produced by wallabag with %EXPORT_METHOD%</p>
27 <p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p> 27 <p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p>
28 </div'; 28 </div>';
29 29
30 /** 30 /**
31 * @param Config $craueConfig CraueConfig instance to get wallabag instance url from database 31 * @param Config $craueConfig CraueConfig instance to get wallabag instance url from database
diff --git a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php
index 6ea2a4f3..40b5673d 100644
--- a/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php
+++ b/src/Wallabag/CoreBundle/ParamConverter/UsernameRssTokenConverter.php
@@ -49,7 +49,7 @@ class UsernameRssTokenConverter implements ParamConverterInterface
49 $em = $this->registry->getManagerForClass($configuration->getClass()); 49 $em = $this->registry->getManagerForClass($configuration->getClass());
50 50
51 // Check, if class name is what we need 51 // Check, if class name is what we need
52 if ('Wallabag\UserBundle\Entity\User' !== $em->getClassMetadata($configuration->getClass())->getName()) { 52 if (null !== $em && 'Wallabag\UserBundle\Entity\User' !== $em->getClassMetadata($configuration->getClass())->getName()) {
53 return false; 53 return false;
54 } 54 }
55 55
@@ -69,9 +69,8 @@ class UsernameRssTokenConverter implements ParamConverterInterface
69 $username = $request->attributes->get('username'); 69 $username = $request->attributes->get('username');
70 $rssToken = $request->attributes->get('token'); 70 $rssToken = $request->attributes->get('token');
71 71
72 // Check, if route attributes exists 72 if (!$request->attributes->has('username') || !$request->attributes->has('token')) {
73 if (null === $username || null === $rssToken) { 73 return false;
74 throw new \InvalidArgumentException('Route attribute is missing');
75 } 74 }
76 75
77 // Get actual entity manager for class 76 // Get actual entity manager for class
diff --git a/src/Wallabag/CoreBundle/Repository/EntryRepository.php b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
index 302e5a53..75127b7d 100644
--- a/src/Wallabag/CoreBundle/Repository/EntryRepository.php
+++ b/src/Wallabag/CoreBundle/Repository/EntryRepository.php
@@ -128,7 +128,7 @@ class EntryRepository extends EntityRepository
128 $qb->andWhere('e.isStarred =:isStarred')->setParameter('isStarred', (bool) $isStarred); 128 $qb->andWhere('e.isStarred =:isStarred')->setParameter('isStarred', (bool) $isStarred);
129 } 129 }
130 130
131 if ($since >= 0) { 131 if ($since > 0) {
132 $qb->andWhere('e.updatedAt > :since')->setParameter('since', new \DateTime(date('Y-m-d H:i:s', $since))); 132 $qb->andWhere('e.updatedAt > :since')->setParameter('since', new \DateTime(date('Y-m-d H:i:s', $since)));
133 } 133 }
134 134
@@ -281,7 +281,7 @@ class EntryRepository extends EntityRepository
281 public function findByUrlAndUserId($url, $userId) 281 public function findByUrlAndUserId($url, $userId)
282 { 282 {
283 $res = $this->createQueryBuilder('e') 283 $res = $this->createQueryBuilder('e')
284 ->where('e.url = :url')->setParameter('url', $url) 284 ->where('e.url = :url')->setParameter('url', urldecode($url))
285 ->andWhere('e.user = :user_id')->setParameter('user_id', $userId) 285 ->andWhere('e.user = :user_id')->setParameter('user_id', $userId)
286 ->getQuery() 286 ->getQuery()
287 ->getResult(); 287 ->getResult();
diff --git a/src/Wallabag/CoreBundle/Resources/config/services.yml b/src/Wallabag/CoreBundle/Resources/config/services.yml
index 23e6d3ca..d1139846 100644
--- a/src/Wallabag/CoreBundle/Resources/config/services.yml
+++ b/src/Wallabag/CoreBundle/Resources/config/services.yml
@@ -88,17 +88,6 @@ services:
88 arguments: 88 arguments:
89 - WallabagCoreBundle:Tag 89 - WallabagCoreBundle:Tag
90 90
91 wallabag_core.registration_confirmed:
92 class: Wallabag\CoreBundle\EventListener\RegistrationConfirmedListener
93 arguments:
94 - "@doctrine.orm.entity_manager"
95 - "%wallabag_core.theme%"
96 - "%wallabag_core.items_on_page%"
97 - "%wallabag_core.rss_limit%"
98 - "%wallabag_core.language%"
99 tags:
100 - { name: kernel.event_subscriber }
101
102 wallabag_core.helper.entries_export: 91 wallabag_core.helper.entries_export:
103 class: Wallabag\CoreBundle\Helper\EntriesExport 92 class: Wallabag\CoreBundle\Helper\EntriesExport
104 arguments: 93 arguments:
@@ -133,3 +122,9 @@ services:
133 host: '%redis_host%' 122 host: '%redis_host%'
134 port: '%redis_port%' 123 port: '%redis_port%'
135 schema: tcp 124 schema: tcp
125
126 wallabag_core.exception_controller:
127 class: Wallabag\CoreBundle\Controller\ExceptionController
128 arguments:
129 - '@twig'
130 - '%kernel.debug%'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
index 9eeb210b..40644ff5 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Søg' 31 search: 'Søg'
32 # save_link: 'Save a link' 32 # save_link: 'Save a link'
33 back_to_unread: 'Tilbage til de ulæste artikler' 33 back_to_unread: 'Tilbage til de ulæste artikler'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Tilføj ny artikel' 36 add_new_entry: 'Tilføj ny artikel'
36 search: 'Søg' 37 search: 'Søg'
@@ -45,6 +46,7 @@ footer:
45 # social: 'Social' 46 # social: 'Social'
46 # powered_by: 'powered by' 47 # powered_by: 'powered by'
47 about: 'Om' 48 about: 'Om'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Opsætning' 52 page_title: 'Opsætning'
@@ -94,6 +96,7 @@ config:
94 # if_label: 'if' 96 # if_label: 'if'
95 # then_tag_as_label: 'then tag as' 97 # then_tag_as_label: 'then tag as'
96 # delete_rule_label: 'delete' 98 # delete_rule_label: 'delete'
99 # edit_rule_label: 'edit'
97 # rule_label: 'Rule' 100 # rule_label: 'Rule'
98 # tags_label: 'Tags' 101 # tags_label: 'Tags'
99 # faq: 102 # faq:
@@ -127,12 +130,6 @@ config:
127 # or: 'One rule OR another' 130 # or: 'One rule OR another'
128 # and: 'One rule AND another' 131 # and: 'One rule AND another'
129 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' 132 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
130 form_new_user:
131 username_label: 'Brugernavn'
132 password_label: 'Adgangskode'
133 repeat_new_password_label: 'Gentag adgangskode'
134 plain_password_label: '????'
135 email_label: 'Emailadresse'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 # page_title: 'Quickstart' 265 # page_title: 'Quickstart'
266 # more: 'More…'
269 # intro: 267 # intro:
270 # title: 'Welcome to wallabag!' 268 # title: 'Welcome to wallabag!'
271 # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." 269 # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
272 # paragraph_2: 'Follow us!' 270 # paragraph_2: 'Follow us!'
273 # configure: 271 # configure:
274 # title: 'Configure the application' 272 # title: 'Configure the application'
273 # description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 # language: 'Change language and design' 274 # language: 'Change language and design'
276 # rss: 'Enable RSS feeds' 275 # rss: 'Enable RSS feeds'
277 # tagging_rules: 'Write rules to automatically tag your articles' 276 # tagging_rules: 'Write rules to automatically tag your articles'
@@ -285,6 +284,7 @@ quickstart:
285 # import: 'Configure import' 284 # import: 'Configure import'
286 # first_steps: 285 # first_steps:
287 # title: 'First steps' 286 # title: 'First steps'
287 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
288 # new_article: 'Save your first article' 288 # new_article: 'Save your first article'
289 # unread_articles: 'And classify it!' 289 # unread_articles: 'And classify it!'
290 # migrate: 290 # migrate:
@@ -294,11 +294,15 @@ quickstart:
294 # wallabag_v1: 'Migrate from wallabag v1' 294 # wallabag_v1: 'Migrate from wallabag v1'
295 # wallabag_v2: 'Migrate from wallabag v2' 295 # wallabag_v2: 'Migrate from wallabag v2'
296 # readability: 'Migrate from Readability' 296 # readability: 'Migrate from Readability'
297 # instapaper: 'Migrate from Instapaper'
297 # developer: 298 # developer:
298 # title: 'Developers' 299 # title: 'Developers'
300 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 # create_application: 'Create your third application' 301 # create_application: 'Create your third application'
302 # use_docker: 'Use Docker to install wallabag'
300 # docs: 303 # docs:
301 # title: 'Full documentation' 304 # title: 'Full documentation'
305 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 # annotate: 'Annotate your article' 306 # annotate: 'Annotate your article'
303 # export: 'Convert your articles into ePUB or PDF' 307 # export: 'Convert your articles into ePUB or PDF'
304 # search_filters: 'See how you can look for an article by using search engine and filters' 308 # search_filters: 'See how you can look for an article by using search engine and filters'
@@ -351,12 +355,16 @@ import:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 355 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox: 356 # firefox:
353 # page_title: 'Import > Firefox' 357 # page_title: 'Import > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 358 # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 #chrome: 360 #chrome:
357 # page_title: 'Import > Chrome' 361 # page_title: 'Import > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 362 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 363 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
364 # instapaper:
365 # page_title: 'Import > Instapaper'
366 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
367 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
360 368
361developer: 369developer:
362 # page_title: 'Developer' 370 # page_title: 'Developer'
@@ -383,12 +391,14 @@ developer:
383 # page_title: 'Developer > New client' 391 # page_title: 'Developer > New client'
384 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' 392 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
385 # form: 393 # form:
394 # name_label: 'Name of the client'
386 # redirect_uris_label: 'Redirect URIs' 395 # redirect_uris_label: 'Redirect URIs'
387 # save_label: 'Create a new client' 396 # save_label: 'Create a new client'
388 # action_back: 'Back' 397 # action_back: 'Back'
389 # client_parameter: 398 # client_parameter:
390 # page_title: 'Developer > Client parameters' 399 # page_title: 'Developer > Client parameters'
391 # page_description: 'Here are your client parameters.' 400 # page_description: 'Here are your client parameters.'
401 # field_name: 'Client name'
392 # field_id: 'Client ID' 402 # field_id: 'Client ID'
393 # field_secret: 'Client secret' 403 # field_secret: 'Client secret'
394 # back: 'Back' 404 # back: 'Back'
@@ -406,6 +416,33 @@ developer:
406 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' 416 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
407 # back: 'Back' 417 # back: 'Back'
408 418
419user:
420 # page_title: Users management
421 # new_user: Create a new user
422 # edit_user: Edit an existing user
423 # description: "Here you can manage all users (create, edit and delete)"
424 # list:
425 # actions: Actions
426 # edit_action: Edit
427 # yes: Yes
428 # no: No
429 # create_new_one: Create a new user
430 form:
431 username_label: 'Brugernavn'
432 # name_label: 'Name'
433 password_label: 'Adgangskode'
434 repeat_new_password_label: 'Gentag adgangskode'
435 plain_password_label: '????'
436 email_label: 'Emailadresse'
437 # enabled_label: 'Enabled'
438 # locked_label: 'Locked'
439 # last_login_label: 'Last login'
440 # twofactor_label: Two factor authentication
441 # save: Save
442 # delete: Delete
443 # delete_confirm: Are you sure?
444 # back_to_list: Back to list
445
409flashes: 446flashes:
410 config: 447 config:
411 notice: 448 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
index a9ec2519..6f790744 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Suche' 31 search: 'Suche'
32 save_link: 'Link speichern' 32 save_link: 'Link speichern'
33 back_to_unread: 'Zurück zu ungelesenen Artikeln' 33 back_to_unread: 'Zurück zu ungelesenen Artikeln'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Neuen Artikel hinzufügen' 36 add_new_entry: 'Neuen Artikel hinzufügen'
36 search: 'Suche' 37 search: 'Suche'
@@ -45,6 +46,7 @@ footer:
45 social: 'Soziales' 46 social: 'Soziales'
46 powered_by: 'angetrieben von' 47 powered_by: 'angetrieben von'
47 about: 'Über' 48 about: 'Über'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Einstellungen' 52 page_title: 'Einstellungen'
@@ -94,6 +96,7 @@ config:
94 if_label: 'Wenn' 96 if_label: 'Wenn'
95 then_tag_as_label: 'dann tagge als' 97 then_tag_as_label: 'dann tagge als'
96 delete_rule_label: 'löschen' 98 delete_rule_label: 'löschen'
99 # edit_rule_label: 'edit'
97 rule_label: 'Regel' 100 rule_label: 'Regel'
98 tags_label: 'Tags' 101 tags_label: 'Tags'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 or: 'Eine Regel ODER die andere' 130 or: 'Eine Regel ODER die andere'
128 and: 'Eine Regel UND eine andere' 131 and: 'Eine Regel UND eine andere'
129 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>' 132 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>'
130 form_new_user:
131 username_label: 'Benutzername'
132 password_label: 'Kennwort'
133 repeat_new_password_label: 'Neues Kennwort wiederholen'
134 plain_password_label: '????'
135 email_label: 'E-Mail-Adresse'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 page_title: 'Schnelleinstieg' 265 page_title: 'Schnelleinstieg'
266 # more: 'More…'
269 intro: 267 intro:
270 title: 'Willkommen zu wallabag!' 268 title: 'Willkommen zu wallabag!'
271 paragraph_1: "Wir werden dich bei der Benutzung von wallabag begleiten und dir einige Funktionen zeigen, die dich interessieren könnten." 269 paragraph_1: "Wir werden dich bei der Benutzung von wallabag begleiten und dir einige Funktionen zeigen, die dich interessieren könnten."
272 paragraph_2: 'Folge uns!' 270 paragraph_2: 'Folge uns!'
273 configure: 271 configure:
274 title: 'Anwendung konfigurieren' 272 title: 'Anwendung konfigurieren'
273 # description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 language: 'Sprache und Design ändern' 274 language: 'Sprache und Design ändern'
276 rss: 'RSS-Feeds aktivieren' 275 rss: 'RSS-Feeds aktivieren'
277 tagging_rules: 'Schreibe Regeln, um deine Beiträge automatisch zu taggen (verschlagworten)' 276 tagging_rules: 'Schreibe Regeln, um deine Beiträge automatisch zu taggen (verschlagworten)'
@@ -285,6 +284,7 @@ quickstart:
285 import: 'Import-Einstellungen ändern' 284 import: 'Import-Einstellungen ändern'
286 first_steps: 285 first_steps:
287 title: 'Erste Schritte' 286 title: 'Erste Schritte'
287 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link"
288 new_article: 'Speichere deinen ersten Artikel' 288 new_article: 'Speichere deinen ersten Artikel'
289 unread_articles: 'Und klassifiziere ihn!' 289 unread_articles: 'Und klassifiziere ihn!'
290 migrate: 290 migrate:
@@ -294,11 +294,15 @@ quickstart:
294 wallabag_v1: 'von wallabag v1 migrieren' 294 wallabag_v1: 'von wallabag v1 migrieren'
295 wallabag_v2: 'von wallabag v2 migrieren' 295 wallabag_v2: 'von wallabag v2 migrieren'
296 readability: 'von Readability migrieren' 296 readability: 'von Readability migrieren'
297 instapaper: 'von Instapaper migrieren'
297 developer: 298 developer:
298 title: 'Entwickler' 299 title: 'Entwickler'
300 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 create_application: 'Erstelle eine Anwendung und nutze die wallabag API' 301 create_application: 'Erstelle eine Anwendung und nutze die wallabag API'
302 # use_docker: 'Use Docker to install wallabag'
300 docs: 303 docs:
301 title: 'Komplette Dokumentation' 304 title: 'Komplette Dokumentation'
305 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 annotate: 'Anmerkungen zu Artikeln hinzufügen' 306 annotate: 'Anmerkungen zu Artikeln hinzufügen'
303 export: 'Artikel nach ePUB oder PDF konvertieren' 307 export: 'Artikel nach ePUB oder PDF konvertieren'
304 search_filters: 'Schau nach, wie du nach einem Artikel über die Such- und Filterfunktion suchen kannst' 308 search_filters: 'Schau nach, wie du nach einem Artikel über die Such- und Filterfunktion suchen kannst'
@@ -345,18 +349,22 @@ import:
345 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.' 349 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.'
346 readability: 350 readability:
347 page_title: 'Aus Readability importieren' 351 page_title: 'Aus Readability importieren'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).' 352 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.' 353 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker: 354 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 355 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox: 356 firefox:
353 # page_title: 'Import > Firefox' 357 page_title: 'Aus Firefox importieren'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 358 # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 # chrome: 360 chrome:
357 # page_title: 'Import > Chrome' 361 page_title: 'Aus Chrome importieren'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 362 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 363 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
364 instapaper:
365 page_title: 'Aus Instapaper importieren'
366 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
367 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
360 368
361developer: 369developer:
362 page_title: 'Entwickler' 370 page_title: 'Entwickler'
@@ -383,12 +391,14 @@ developer:
383 page_title: 'Entwickler > Neuer Client' 391 page_title: 'Entwickler > Neuer Client'
384 page_description: 'Du bist dabei, einen neuen Client zu erstellen. Fülle das nachfolgende Feld für die Weiterleitungs-URIs deiner Anwendung aus.' 392 page_description: 'Du bist dabei, einen neuen Client zu erstellen. Fülle das nachfolgende Feld für die Weiterleitungs-URIs deiner Anwendung aus.'
385 form: 393 form:
394 # name_label: 'Name of the client'
386 redirect_uris_label: 'Weiterleitungs-URIs' 395 redirect_uris_label: 'Weiterleitungs-URIs'
387 save_label: 'Neuen Client erstellen' 396 save_label: 'Neuen Client erstellen'
388 action_back: 'Zurück' 397 action_back: 'Zurück'
389 client_parameter: 398 client_parameter:
390 page_title: 'Entwickler > Client-Parameter' 399 page_title: 'Entwickler > Client-Parameter'
391 page_description: 'Dies sind deine Client-Parameter.' 400 page_description: 'Dies sind deine Client-Parameter.'
401 # field_name: 'Client name'
392 field_id: 'Client-ID' 402 field_id: 'Client-ID'
393 field_secret: 'Client-Secret' 403 field_secret: 'Client-Secret'
394 back: 'Zurück' 404 back: 'Zurück'
@@ -406,6 +416,33 @@ developer:
406 paragraph_8: 'Wenn du alle API-Endpunkte sehen willst, werfe einen Blick auf die <a href="%link%">API-Dokumentation</a>.' 416 paragraph_8: 'Wenn du alle API-Endpunkte sehen willst, werfe einen Blick auf die <a href="%link%">API-Dokumentation</a>.'
407 back: 'Zurück' 417 back: 'Zurück'
408 418
419user:
420 # page_title: Users management
421 # new_user: Create a new user
422 # edit_user: Edit an existing user
423 # description: "Here you can manage all users (create, edit and delete)"
424 # list:
425 # actions: Actions
426 # edit_action: Edit
427 # yes: Yes
428 # no: No
429 # create_new_one: Create a new user
430 form:
431 username_label: 'Benutzername'
432 # name_label: 'Name'
433 password_label: 'Kennwort'
434 repeat_new_password_label: 'Neues Kennwort wiederholen'
435 plain_password_label: '????'
436 email_label: 'E-Mail-Adresse'
437 # enabled_label: 'Enabled'
438 # locked_label: 'Locked'
439 # last_login_label: 'Last login'
440 # twofactor_label: Two factor authentication
441 # save: Save
442 # delete: Delete
443 # delete_confirm: Are you sure?
444 # back_to_list: Back to list
445
409flashes: 446flashes:
410 config: 447 config:
411 notice: 448 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
index c0d8656d..91abe162 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Search' 31 search: 'Search'
32 save_link: 'Save a link' 32 save_link: 'Save a link'
33 back_to_unread: 'Back to unread articles' 33 back_to_unread: 'Back to unread articles'
34 users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Add a new entry' 36 add_new_entry: 'Add a new entry'
36 search: 'Search' 37 search: 'Search'
@@ -45,6 +46,7 @@ footer:
45 social: 'Social' 46 social: 'Social'
46 powered_by: 'powered by' 47 powered_by: 'powered by'
47 about: 'About' 48 about: 'About'
49 stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Config' 52 page_title: 'Config'
@@ -94,6 +96,7 @@ config:
94 if_label: 'if' 96 if_label: 'if'
95 then_tag_as_label: 'then tag as' 97 then_tag_as_label: 'then tag as'
96 delete_rule_label: 'delete' 98 delete_rule_label: 'delete'
99 edit_rule_label: 'edit'
97 rule_label: 'Rule' 100 rule_label: 'Rule'
98 tags_label: 'Tags' 101 tags_label: 'Tags'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 or: 'One rule OR another' 130 or: 'One rule OR another'
128 and: 'One rule AND another' 131 and: 'One rule AND another'
129 matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' 132 matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
130 form_new_user:
131 username_label: 'Username'
132 password_label: 'Password'
133 repeat_new_password_label: 'Repeat new password'
134 plain_password_label: '????'
135 email_label: 'Email'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 page_title: 'Quickstart' 265 page_title: 'Quickstart'
266 more: 'More…'
269 intro: 267 intro:
270 title: 'Welcome to wallabag!' 268 title: 'Welcome to wallabag!'
271 paragraph_1: "We'll accompany you on your visit to wallabag and show you some features that might interest you." 269 paragraph_1: "We'll accompany you on your visit to wallabag and show you some features that might interest you."
272 paragraph_2: 'Follow us!' 270 paragraph_2: 'Follow us!'
273 configure: 271 configure:
274 title: 'Configure the application' 272 title: 'Configure the application'
273 description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 language: 'Change language and design' 274 language: 'Change language and design'
276 rss: 'Enable RSS feeds' 275 rss: 'Enable RSS feeds'
277 tagging_rules: 'Write rules to automatically tag your articles' 276 tagging_rules: 'Write rules to automatically tag your articles'
@@ -285,6 +284,7 @@ quickstart:
285 import: 'Configure import' 284 import: 'Configure import'
286 first_steps: 285 first_steps:
287 title: 'First steps' 286 title: 'First steps'
287 description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
288 new_article: 'Save your first article' 288 new_article: 'Save your first article'
289 unread_articles: 'And classify it!' 289 unread_articles: 'And classify it!'
290 migrate: 290 migrate:
@@ -294,11 +294,15 @@ quickstart:
294 wallabag_v1: 'Migrate from wallabag v1' 294 wallabag_v1: 'Migrate from wallabag v1'
295 wallabag_v2: 'Migrate from wallabag v2' 295 wallabag_v2: 'Migrate from wallabag v2'
296 readability: 'Migrate from Readability' 296 readability: 'Migrate from Readability'
297 instapaper: 'Migrate from Instapaper'
297 developer: 298 developer:
298 title: 'Developers' 299 title: 'Developers'
300 description: 'We also thought to the developers: Docker, API, translations, etc.'
299 create_application: 'Create your third application' 301 create_application: 'Create your third application'
302 use_docker: 'Use Docker to install wallabag'
300 docs: 303 docs:
301 title: 'Full documentation' 304 title: 'Full documentation'
305 description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 annotate: 'Annotate your article' 306 annotate: 'Annotate your article'
303 export: 'Convert your articles into ePUB or PDF' 307 export: 'Convert your articles into ePUB or PDF'
304 search_filters: 'See how you can look for an article by using the search engine and filters' 308 search_filters: 'See how you can look for an article by using the search engine and filters'
@@ -351,12 +355,16 @@ import:
351 enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 355 enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 firefox: 356 firefox:
353 page_title: 'Import > Firefox' 357 page_title: 'Import > Firefox'
354 description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 358 description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 359 how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 chrome: 360 chrome:
357 page_title: 'Import > Chrome' 361 page_title: 'Import > Chrome'
358 description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 362 description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 363 how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
364 instapaper:
365 page_title: 'Import > Instapaper'
366 description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
367 how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
360 368
361developer: 369developer:
362 page_title: 'Developer' 370 page_title: 'Developer'
@@ -408,6 +416,33 @@ developer:
408 paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' 416 paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
409 back: 'Back' 417 back: 'Back'
410 418
419user:
420 page_title: Users management
421 new_user: Create a new user
422 edit_user: Edit an existing user
423 description: "Here you can manage all users (create, edit and delete)"
424 list:
425 actions: Actions
426 edit_action: Edit
427 yes: Yes
428 no: No
429 create_new_one: Create a new user
430 form:
431 username_label: 'Username'
432 name_label: 'Name'
433 password_label: 'Password'
434 repeat_new_password_label: 'Repeat new password'
435 plain_password_label: '????'
436 email_label: 'Email'
437 enabled_label: 'Enabled'
438 locked_label: 'Locked'
439 last_login_label: 'Last login'
440 twofactor_label: Two factor authentication
441 save: Save
442 delete: Delete
443 delete_confirm: Are you sure?
444 back_to_list: Back to list
445
411flashes: 446flashes:
412 config: 447 config:
413 notice: 448 notice:
@@ -418,7 +453,6 @@ flashes:
418 rss_updated: 'RSS information updated' 453 rss_updated: 'RSS information updated'
419 tagging_rules_updated: 'Tagging rules updated' 454 tagging_rules_updated: 'Tagging rules updated'
420 tagging_rules_deleted: 'Tagging rule deleted' 455 tagging_rules_deleted: 'Tagging rule deleted'
421 user_added: 'User "%username%" added'
422 rss_token_updated: 'RSS token updated' 456 rss_token_updated: 'RSS token updated'
423 entry: 457 entry:
424 notice: 458 notice:
@@ -449,3 +483,8 @@ flashes:
449 notice: 483 notice:
450 client_created: 'New client %name% created.' 484 client_created: 'New client %name% created.'
451 client_deleted: 'Client %name% deleted' 485 client_deleted: 'Client %name% deleted'
486 user:
487 notice:
488 added: 'User "%username%" added'
489 updated: 'User "%username%" updated'
490 deleted: 'User "%username%" deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
index 1d6993db..25d2f3a2 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Buscar' 31 search: 'Buscar'
32 save_link: 'Archivar un enlace' 32 save_link: 'Archivar un enlace'
33 back_to_unread: 'Volver a los artículos sin leer' 33 back_to_unread: 'Volver a los artículos sin leer'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Añadir un nuevo artículo' 36 add_new_entry: 'Añadir un nuevo artículo'
36 search: 'Buscar' 37 search: 'Buscar'
@@ -45,6 +46,7 @@ footer:
45 social: 'Social' 46 social: 'Social'
46 powered_by: 'funciona por' 47 powered_by: 'funciona por'
47 about: 'Acerca de' 48 about: 'Acerca de'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Configuración' 52 page_title: 'Configuración'
@@ -94,6 +96,7 @@ config:
94 if_label: 'si' 96 if_label: 'si'
95 then_tag_as_label: 'Etiquete como' 97 then_tag_as_label: 'Etiquete como'
96 delete_rule_label: 'Borre' 98 delete_rule_label: 'Borre'
99 # edit_rule_label: 'edit'
97 rule_label: 'Regla' 100 rule_label: 'Regla'
98 tags_label: 'Etiquetas' 101 tags_label: 'Etiquetas'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 or: 'Una regla U otra' 130 or: 'Una regla U otra'
128 and: 'Una regla Y la otra' 131 and: 'Una regla Y la otra'
129 matches: 'Pruebe si un <i>sujeto</i> corresponde a una <i>búsqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide "football"</code>' 132 matches: 'Pruebe si un <i>sujeto</i> corresponde a una <i>búsqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide "football"</code>'
130 form_new_user:
131 username_label: 'Nombre de usuario'
132 password_label: 'Contraseña'
133 repeat_new_password_label: 'Confirmar la nueva contraseña'
134 plain_password_label: '????'
135 email_label: 'Email'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 page_title: 'Comienzo rápido' 265 page_title: 'Comienzo rápido'
266 # more: 'More…'
269 intro: 267 intro:
270 title: 'Bienvenido a wallabag !' 268 title: 'Bienvenido a wallabag !'
271 paragraph_1: "Le acompañaremos a su visita de wallabag y le mostraremos algunas características que le pueden interesar." 269 paragraph_1: "Le acompañaremos a su visita de wallabag y le mostraremos algunas características que le pueden interesar."
272 paragraph_2: '¡Síganos!' 270 paragraph_2: '¡Síganos!'
273 configure: 271 configure:
274 title: 'Configure la aplicación' 272 title: 'Configure la aplicación'
273 # description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 language: 'Cambie el idioma y el diseño de la aplicación' 274 language: 'Cambie el idioma y el diseño de la aplicación'
276 rss: 'Activar los feeds RSS' 275 rss: 'Activar los feeds RSS'
277 tagging_rules: 'Escribir reglas para etiquetear automaticamente sus artículos' 276 tagging_rules: 'Escribir reglas para etiquetear automaticamente sus artículos'
@@ -285,6 +284,7 @@ quickstart:
285 import: 'Configure importación' 284 import: 'Configure importación'
286 first_steps: 285 first_steps:
287 title: 'Primeros pasos' 286 title: 'Primeros pasos'
287 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
288 new_article: 'Guarde su primer artículo' 288 new_article: 'Guarde su primer artículo'
289 unread_articles: '¡Y clasifíquelo!' 289 unread_articles: '¡Y clasifíquelo!'
290 migrate: 290 migrate:
@@ -294,11 +294,15 @@ quickstart:
294 wallabag_v1: 'Migrar desde wallabag v1' 294 wallabag_v1: 'Migrar desde wallabag v1'
295 wallabag_v2: 'Migrar desde wallabag v2' 295 wallabag_v2: 'Migrar desde wallabag v2'
296 readability: 'Migrar desde Readability' 296 readability: 'Migrar desde Readability'
297 instapaper: 'Migrar desde Instapaper'
297 developer: 298 developer:
298 title: 'Promotores' 299 title: 'Promotores'
300 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 create_application: 'Cree su tercera aplicación' 301 create_application: 'Cree su tercera aplicación'
302 # use_docker: 'Use Docker to install wallabag'
300 docs: 303 docs:
301 title: 'Documentación completa' 304 title: 'Documentación completa'
305 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 annotate: 'Anote su artículo' 306 annotate: 'Anote su artículo'
303 export: 'Convierta sus artículos a ePub o a PDF' 307 export: 'Convierta sus artículos a ePub o a PDF'
304 search_filters: 'Aprenda a utilizar el buscador y los filtros para encontrar el artículo que le interese' 308 search_filters: 'Aprenda a utilizar el buscador y los filtros para encontrar el artículo que le interese'
@@ -345,18 +349,22 @@ import:
345 description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, oprima en "JSON". Usted tendrá un fichero "All articles.json"' 349 description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, oprima en "JSON". Usted tendrá un fichero "All articles.json"'
346 readability: 350 readability:
347 page_title: 'Importar > Readability' 351 page_title: 'Importar > Readability'
348 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).' 352 # description: 'This importer will import all your Readability articles. On the tools (https://www.readability.com/tools/) page, click on "Export your data" in the "Data Export" section. You will received an email to download a json (which does not end with .json in fact).'
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.' 353 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker: 354 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 355 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox: 356 firefox:
353 # page_title: 'Import > Firefox' 357 page_title: 'Importar > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 358 # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 # chrome: 360 chrome:
357 # page_title: 'Import > Chrome' 361 page_title: 'Importar > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 362 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 363 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
364 instapaper:
365 page_title: 'Importar > Instapaper'
366 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
367 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
360 368
361developer: 369developer:
362 page_title: 'Promotor' 370 page_title: 'Promotor'
@@ -383,12 +391,14 @@ developer:
383 page_title: 'Promotor > Nuevo cliente' 391 page_title: 'Promotor > Nuevo cliente'
384 page_description: 'Va a crear un nuevo cliente. Por favor, llene el campo abajo para URI redirigido de su aplicación.' 392 page_description: 'Va a crear un nuevo cliente. Por favor, llene el campo abajo para URI redirigido de su aplicación.'
385 form: 393 form:
394 # name_label: 'Name of the client'
386 redirect_uris_label: 'los URI redirigidos' 395 redirect_uris_label: 'los URI redirigidos'
387 save_label: 'Crear un nuevo cliente' 396 save_label: 'Crear un nuevo cliente'
388 action_back: 'Atrás' 397 action_back: 'Atrás'
389 client_parameter: 398 client_parameter:
390 page_title: 'Promotor > Parámetros del cliente' 399 page_title: 'Promotor > Parámetros del cliente'
391 page_description: 'Aquí hay sus parámetros del cliente.' 400 page_description: 'Aquí hay sus parámetros del cliente.'
401 # field_name: 'Client name'
392 field_id: 'Identificación del cliente' 402 field_id: 'Identificación del cliente'
393 field_secret: 'Cliente secreto' 403 field_secret: 'Cliente secreto'
394 back: 'Atrás' 404 back: 'Atrás'
@@ -406,6 +416,33 @@ developer:
406 paragraph_8: 'Si quiere ver todos los fines de API, se puede ver <a href="%link%">a nuestra documentación API</a>.' 416 paragraph_8: 'Si quiere ver todos los fines de API, se puede ver <a href="%link%">a nuestra documentación API</a>.'
407 back: 'Atrás' 417 back: 'Atrás'
408 418
419user:
420 # page_title: Users management
421 # new_user: Create a new user
422 # edit_user: Edit an existing user
423 # description: "Here you can manage all users (create, edit and delete)"
424 # list:
425 # actions: Actions
426 # edit_action: Edit
427 # yes: Yes
428 # no: No
429 # create_new_one: Create a new user
430 form:
431 username_label: 'Nombre de usuario'
432 # name_label: 'Name'
433 password_label: 'Contraseña'
434 repeat_new_password_label: 'Confirmar la nueva contraseña'
435 plain_password_label: '????'
436 email_label: 'Email'
437 # enabled_label: 'Enabled'
438 # locked_label: 'Locked'
439 # last_login_label: 'Last login'
440 # twofactor_label: Two factor authentication
441 # save: Save
442 # delete: Delete
443 # delete_confirm: Are you sure?
444 # back_to_list: Back to list
445
409flashes: 446flashes:
410 config: 447 config:
411 notice: 448 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
index 68272f99..b02ffea0 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'جستجو' 31 search: 'جستجو'
32 save_link: 'ذخیرهٔ یک پیوند' 32 save_link: 'ذخیرهٔ یک پیوند'
33 back_to_unread: 'بازگشت به خوانده‌نشده‌ها' 33 back_to_unread: 'بازگشت به خوانده‌نشده‌ها'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'افزودن مقالهٔ تازه' 36 add_new_entry: 'افزودن مقالهٔ تازه'
36 search: 'جستجو' 37 search: 'جستجو'
@@ -45,6 +46,7 @@ footer:
45 social: 'شبکه‌های اجتماعی' 46 social: 'شبکه‌های اجتماعی'
46 powered_by: 'توانمند با' 47 powered_by: 'توانمند با'
47 about: 'درباره' 48 about: 'درباره'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'پیکربندی' 52 page_title: 'پیکربندی'
@@ -94,6 +96,7 @@ config:
94 if_label: 'اگر' 96 if_label: 'اگر'
95 then_tag_as_label: 'این برچسب را بزن' 97 then_tag_as_label: 'این برچسب را بزن'
96 delete_rule_label: 'پاک کن' 98 delete_rule_label: 'پاک کن'
99 # edit_rule_label: 'edit'
97 rule_label: 'قانون' 100 rule_label: 'قانون'
98 tags_label: 'برچسب‌ها' 101 tags_label: 'برچسب‌ها'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 # or: 'One rule OR another' 130 # or: 'One rule OR another'
128 # and: 'One rule AND another' 131 # and: 'One rule AND another'
129 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' 132 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
130 form_new_user:
131 username_label: 'نام کاربری'
132 password_label: 'رمز'
133 repeat_new_password_label: 'رمز تازه را دوباره بنویسید'
134 plain_password_label: '????'
135 email_label: 'نشانی ایمیل'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,6 +263,7 @@ howto:
266 263
267quickstart: 264quickstart:
268 page_title: 'Quickstart' 265 page_title: 'Quickstart'
266 # more: 'More…'
269 intro: 267 intro:
270 title: 'به wallabag خوش آمدید!!' 268 title: 'به wallabag خوش آمدید!!'
271 paragraph_1: "به شما کمک خواهیم کرد تا wallabag را بشناسید و با برخی از ویژگی‌های جالبش آشنا شوید" 269 paragraph_1: "به شما کمک خواهیم کرد تا wallabag را بشناسید و با برخی از ویژگی‌های جالبش آشنا شوید"
@@ -285,6 +283,7 @@ quickstart:
285 import: 'درون‌ریزی را تنظیم کنید' 283 import: 'درون‌ریزی را تنظیم کنید'
286 first_steps: 284 first_steps:
287 title: 'گام نخست' 285 title: 'گام نخست'
286 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
288 new_article: 'نخستین مقالهٔ خود را ذخیره کنید' 287 new_article: 'نخستین مقالهٔ خود را ذخیره کنید'
289 unread_articles: 'و آن را طبقه‌بندی کنید!' 288 unread_articles: 'و آن را طبقه‌بندی کنید!'
290 migrate: 289 migrate:
@@ -294,11 +293,15 @@ quickstart:
294 wallabag_v1: 'مهاجرت از نسخهٔ یکم wallabag' 293 wallabag_v1: 'مهاجرت از نسخهٔ یکم wallabag'
295 wallabag_v2: 'مهاجرت از نسخهٔ دوم wallabag' 294 wallabag_v2: 'مهاجرت از نسخهٔ دوم wallabag'
296 readability: 'مهاجرت از نسخهٔ دوم Readability' 295 readability: 'مهاجرت از نسخهٔ دوم Readability'
296 instapaper: 'مهاجرت از نسخهٔ دوم Instapaper'
297 developer: 297 developer:
298 title: 'برنامه‌نویسان' 298 title: 'برنامه‌نویسان'
299 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 create_application: 'برنامهٔ wallabag خود را بسازید' 300 create_application: 'برنامهٔ wallabag خود را بسازید'
301 # use_docker: 'Use Docker to install wallabag'
300 docs: 302 docs:
301 title: 'راهنمای کامل' 303 title: 'راهنمای کامل'
304 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 annotate: 'روی مقاله‌هایتان یادداشت بگذارید' 305 annotate: 'روی مقاله‌هایتان یادداشت بگذارید'
303 export: 'مقاله‌هایتان را به قالب ePUB یا PDF دربیاورید' 306 export: 'مقاله‌هایتان را به قالب ePUB یا PDF دربیاورید'
304 search_filters: 'به کمک موتور جستجو و فیلترها به دنبال مقاله‌هایتان بگردید' 307 search_filters: 'به کمک موتور جستجو و فیلترها به دنبال مقاله‌هایتان بگردید'
@@ -349,14 +352,18 @@ import:
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.' 352 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker: 353 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 354 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox: 355 firefox:
353 # page_title: 'Import > Firefox' 356 page_title: 'درون‌ریزی > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 357 # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 358 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 # chrome: 359 chrome:
357 # page_title: 'Import > Chrome' 360 page_title: 'درون‌ریزی > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 361 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 362 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
363 instapaper:
364 page_title: 'درون‌ریزی > Instapaper'
365 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
366 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
360 367
361developer: 368developer:
362 # page_title: 'Developer' 369 # page_title: 'Developer'
@@ -383,12 +390,14 @@ developer:
383 # page_title: 'Developer > New client' 390 # page_title: 'Developer > New client'
384 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' 391 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
385 # form: 392 # form:
393 # name_label: 'Name of the client'
386 # redirect_uris_label: 'Redirect URIs' 394 # redirect_uris_label: 'Redirect URIs'
387 # save_label: 'Create a new client' 395 # save_label: 'Create a new client'
388 # action_back: 'بازگشت' 396 # action_back: 'بازگشت'
389 # client_parameter: 397 # client_parameter:
390 # page_title: 'Developer > Client parameters' 398 # page_title: 'Developer > Client parameters'
391 # page_description: 'Here are your client parameters.' 399 # page_description: 'Here are your client parameters.'
400 # field_name: 'Client name'
392 # field_id: 'Client ID' 401 # field_id: 'Client ID'
393 # field_secret: 'Client secret' 402 # field_secret: 'Client secret'
394 # back: 'بازگشت' 403 # back: 'بازگشت'
@@ -406,6 +415,33 @@ developer:
406 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' 415 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
407 # back: 'بازگشت' 416 # back: 'بازگشت'
408 417
418user:
419 # page_title: Users management
420 # new_user: Create a new user
421 # edit_user: Edit an existing user
422 # description: "Here you can manage all users (create, edit and delete)"
423 # list:
424 # actions: Actions
425 # edit_action: Edit
426 # yes: Yes
427 # no: No
428 # create_new_one: Create a new user
429 form:
430 username_label: 'نام کاربری'
431 # name_label: 'Name'
432 password_label: 'رمز'
433 repeat_new_password_label: 'رمز تازه را دوباره بنویسید'
434 plain_password_label: '????'
435 email_label: 'نشانی ایمیل'
436 # enabled_label: 'Enabled'
437 # locked_label: 'Locked'
438 # last_login_label: 'Last login'
439 # twofactor_label: Two factor authentication
440 # save: Save
441 # delete: Delete
442 # delete_confirm: Are you sure?
443 # back_to_list: Back to list
444
409flashes: 445flashes:
410 config: 446 config:
411 notice: 447 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
index b28068b6..598205b0 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Recherche' 31 search: 'Recherche'
32 save_link: 'Sauvegarder un nouvel article' 32 save_link: 'Sauvegarder un nouvel article'
33 back_to_unread: 'Retour aux articles non lus' 33 back_to_unread: 'Retour aux articles non lus'
34 users_management: 'Gestion des utilisateurs'
34 top: 35 top:
35 add_new_entry: 'Sauvegarder un nouvel article' 36 add_new_entry: 'Sauvegarder un nouvel article'
36 search: 'Rechercher' 37 search: 'Rechercher'
@@ -45,9 +46,10 @@ footer:
45 social: 'Social' 46 social: 'Social'
46 powered_by: 'propulsé par' 47 powered_by: 'propulsé par'
47 about: 'À propos' 48 about: 'À propos'
48 page_title: 'Configuration' 49 stats: Depuis le %user_creation% vous avez lu %nb_archives% articles. Ce qui fait %per_day% par jour !
49 50
50config: 51config:
52 page_title: 'Configuration'
51 tab_menu: 53 tab_menu:
52 settings: 'Paramètres' 54 settings: 'Paramètres'
53 rss: 'RSS' 55 rss: 'RSS'
@@ -94,6 +96,7 @@ config:
94 if_label: 'si' 96 if_label: 'si'
95 then_tag_as_label: 'alors attribuer les tags' 97 then_tag_as_label: 'alors attribuer les tags'
96 delete_rule_label: 'supprimer' 98 delete_rule_label: 'supprimer'
99 edit_rule_label: 'éditer'
97 rule_label: 'Règle' 100 rule_label: 'Règle'
98 tags_label: 'Tags' 101 tags_label: 'Tags'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 or: "Une règle OU l'autre" 130 or: "Une règle OU l'autre"
128 and: "Une règle ET l'autre" 131 and: "Une règle ET l'autre"
129 matches: 'Teste si un <i>sujet</i> correspond à une <i>recherche</i> (non sensible à la casse).<br />Exemple : <code>title matches "football"</code>' 132 matches: 'Teste si un <i>sujet</i> correspond à une <i>recherche</i> (non sensible à la casse).<br />Exemple : <code>title matches "football"</code>'
130 form_new_user:
131 username_label: "Nom d'utilisateur"
132 password_label: 'Mot de passe'
133 repeat_new_password_label: 'Confirmez votre nouveau mot de passe'
134 plain_password_label: 'Mot de passe en clair'
135 email_label: 'Adresse e-mail'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 page_title: 'Pour bien débuter' 265 page_title: 'Pour bien débuter'
266 more: 'Et plus encore…'
269 intro: 267 intro:
270 title: 'Bienvenue sur wallabag !' 268 title: 'Bienvenue sur wallabag !'
271 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." 269 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."
272 paragraph_2: 'Suivez-nous !' 270 paragraph_2: 'Suivez-nous !'
273 configure: 271 configure:
274 title: "Configurez l'application" 272 title: "Configurez l'application"
273 description: 'Pour voir une application qui vous correspond, allez voir du côté de la configuration de wallabag.'
275 language: "Changez la langue et le design de l'application" 274 language: "Changez la langue et le design de l'application"
276 rss: 'Activez les flux RSS' 275 rss: 'Activez les flux RSS'
277 tagging_rules: 'Écrivez des règles pour classer automatiquement vos articles' 276 tagging_rules: 'Écrivez des règles pour classer automatiquement vos articles'
@@ -285,6 +284,7 @@ quickstart:
285 import: "Configurer l'import" 284 import: "Configurer l'import"
286 first_steps: 285 first_steps:
287 title: 'Premiers pas' 286 title: 'Premiers pas'
287 description: "Maintenant que wallabag est bien configuré, il est temps d'archiver le web. Vous pouvez cliquer sur le signe + dans le coin en haut à droite."
288 new_article: 'Ajoutez votre premier article' 288 new_article: 'Ajoutez votre premier article'
289 unread_articles: 'Et rangez-le !' 289 unread_articles: 'Et rangez-le !'
290 migrate: 290 migrate:
@@ -294,11 +294,15 @@ quickstart:
294 wallabag_v1: 'Migrer depuis wallabag v1' 294 wallabag_v1: 'Migrer depuis wallabag v1'
295 wallabag_v2: 'Migrer depuis wallabag v2' 295 wallabag_v2: 'Migrer depuis wallabag v2'
296 readability: 'Migrer depuis Readability' 296 readability: 'Migrer depuis Readability'
297 instapaper: 'Migrer depuis Instapaper'
297 developer: 298 developer:
298 title: 'Pour les développeurs' 299 title: 'Pour les développeurs'
300 description: 'Nous avons aussi pensé aux développeurs : Docker, API, traductions, etc.'
299 create_application: 'Créer votre application tierce' 301 create_application: 'Créer votre application tierce'
302 use_docker: 'Utiliser Docker pour installer wallabag'
300 docs: 303 docs:
301 title: 'Documentation complète' 304 title: 'Documentation complète'
305 description: "Il y a tellement de fonctionnalités dans wallabag. N'hésitez pas à lire le manuel pour les connaitre et apprendre comment les utiliser."
302 annotate: 'Annoter votre article' 306 annotate: 'Annoter votre article'
303 export: 'Convertissez vos articles en ePub ou en PDF' 307 export: 'Convertissez vos articles en ePub ou en PDF'
304 search_filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse" 308 search_filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse"
@@ -351,12 +355,16 @@ import:
351 enabled: "Les imports sont asynchrones. Une fois l'import commencé un worker externe traitera les messages un par un. Le service activé est :" 355 enabled: "Les imports sont asynchrones. Une fois l'import commencé un worker externe traitera les messages un par un. Le service activé est :"
352 firefox: 356 firefox:
353 page_title: 'Import > Firefox' 357 page_title: 'Import > Firefox'
354 description: "Cet outil va vous permettre d'importer tous vos marques-pages de Firefox. <p>Pour Firefox, ouvrez le panneau des marques-pages (Ctrl+Maj+O), puis dans « Importation et sauvegarde », choisissez « Sauvegarde... ». Vous allez récupérer un fichier .json. </p>" 358 description: "Cet outil va vous permettre d'importer tous vos marques-pages de Firefox. Ouvrez le panneau des marques-pages (Ctrl+Maj+O), puis dans « Importation et sauvegarde », choisissez « Sauvegarde... ». Vous allez récupérer un fichier .json. </p>"
355 how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne." 359 how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne."
356 chrome: 360 chrome:
357 page_title: 'Import > Chrome' 361 page_title: 'Import > Chrome'
358 description: "Cet outil va vous permettre d'importer tous vos marques-pages de Google Chrome/Chromium. Pour Google Chrome, la situation du fichier dépend de votre système d'exploitation : <ul><li>Sur GNU/Linux, allez dans le répertoire <code>~/.config/google-chrome/Default/</code></li><li>Sous Windows, il devrait se trouver à <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>Sur OS X, il devrait se trouver dans le fichier <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Une fois que vous y êtes, copiez le fichier Bookmarks à un endroit où vous le retrouverez.<em><br>Notez que si vous utilisez Chromium à la place de Chrome, vous devez corriger les chemins en conséquence.</em></p>" 362 description: "Cet outil va vous permettre d'importer tous vos marques-pages de Google Chrome/Chromium. Pour Google Chrome, la situation du fichier dépend de votre système d'exploitation : <ul><li>Sur GNU/Linux, allez dans le répertoire <code>~/.config/google-chrome/Default/</code></li><li>Sous Windows, il devrait se trouver à <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>Sur OS X, il devrait se trouver dans le fichier <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Une fois que vous y êtes, copiez le fichier Bookmarks à un endroit où vous le retrouverez.<em><br>Notez que si vous utilisez Chromium à la place de Chrome, vous devez corriger les chemins en conséquence.</em></p>"
359 how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne." 363 how_to: "Choisissez le fichier de sauvegarde de vos marques-page et cliquez sur le bouton pour l'importer. Soyez avertis que le processus peut prendre un temps assez long car tous les articles doivent être récupérés en ligne."
364 instapaper:
365 page_title: 'Import > Instapaper'
366 description: 'Sur la page des paramètres (`https://www.instapaper.com/user<https://www.instapaper.com/user>`_), cliquez sur "Download .CSV file" dans la section "Export". Un fichier CSV se téléchargera ("instapaper-export.csv").'
367 how_to: "Choisissez le fichier de votre export Instapaper et cliquez sur le bouton ci-dessous pour l'importer."
360 368
361developer: 369developer:
362 page_title: 'Développeur' 370 page_title: 'Développeur'
@@ -408,6 +416,33 @@ developer:
408 paragraph_8: "Si vous voulez toutes les méthodes de l'API, jetez un oeil <a href=\"%link%\">à la documentation de l'API</a>." 416 paragraph_8: "Si vous voulez toutes les méthodes de l'API, jetez un oeil <a href=\"%link%\">à la documentation de l'API</a>."
409 back: 'Retour' 417 back: 'Retour'
410 418
419user:
420 page_title: Gestion des utilisateurs
421 new_user: Créer un nouvel utilisateur
422 edit_user: Éditer un utilisateur existant
423 description: Ici vous pouvez gérer vos utilisateurs (création, mise à jour et suppression)
424 list:
425 actions: Actions
426 edit_action: Éditer
427 yes: Oui
428 no: Non
429 create_new_one: Créer un nouvel utilisateur
430 form:
431 username_label: "Nom d'utilisateur"
432 name_label: 'Nom'
433 password_label: 'Mot de passe'
434 repeat_new_password_label: 'Confirmez votre nouveau mot de passe'
435 plain_password_label: 'Mot de passe en clair'
436 email_label: 'Adresse e-mail'
437 enabled_label: 'Activé'
438 locked_label: 'Bloqué'
439 last_login_label: 'Dernière connexion'
440 twofactor_label: Double authentification
441 save: Sauvegarder
442 delete: Supprimer
443 delete_confirm: Êtes-vous sûr?
444 back_to_list: Revenir à la liste
445
411flashes: 446flashes:
412 config: 447 config:
413 notice: 448 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
index bd98c8c0..c58c929f 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Cerca' 31 search: 'Cerca'
32 save_link: 'Salva collegamento' 32 save_link: 'Salva collegamento'
33 back_to_unread: 'Torna ai contenuti non letti' 33 back_to_unread: 'Torna ai contenuti non letti'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Aggiungi un nuovo contenuto' 36 add_new_entry: 'Aggiungi un nuovo contenuto'
36 search: 'Cerca' 37 search: 'Cerca'
@@ -45,6 +46,7 @@ footer:
45 social: 'Social' 46 social: 'Social'
46 powered_by: 'powered by' 47 powered_by: 'powered by'
47 about: 'About' 48 about: 'About'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Configurazione' 52 page_title: 'Configurazione'
@@ -94,6 +96,7 @@ config:
94 if_label: 'se' 96 if_label: 'se'
95 then_tag_as_label: 'allora tagga come' 97 then_tag_as_label: 'allora tagga come'
96 delete_rule_label: 'elimina' 98 delete_rule_label: 'elimina'
99 # edit_rule_label: 'edit'
97 rule_label: 'Regola' 100 rule_label: 'Regola'
98 tags_label: 'Tag' 101 tags_label: 'Tag'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 or: "Una regola O un'altra" 130 or: "Una regola O un'altra"
128 and: "Una regola E un'altra" 131 and: "Una regola E un'altra"
129 matches: 'Verifica che un <i>oggetto</i> risulti in una <i>ricerca</i> (case-insensitive).<br />Esempio: <code>titolo contiene "football"</code>' 132 matches: 'Verifica che un <i>oggetto</i> risulti in una <i>ricerca</i> (case-insensitive).<br />Esempio: <code>titolo contiene "football"</code>'
130 form_new_user:
131 username_label: 'Username'
132 password_label: 'Password'
133 repeat_new_password_label: 'Ripeti password'
134 plain_password_label: '????'
135 email_label: 'E-mail'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -160,6 +157,7 @@ entry:
160 status_label: 'Stato' 157 status_label: 'Stato'
161 archived_label: 'Archiviati' 158 archived_label: 'Archiviati'
162 starred_label: 'Preferiti' 159 starred_label: 'Preferiti'
160 # unread_label: 'Unread'
163 preview_picture_label: "Ha un'immagine di anteprima" 161 preview_picture_label: "Ha un'immagine di anteprima"
164 preview_picture_help: 'Immagine di anteprima' 162 preview_picture_help: 'Immagine di anteprima'
165 language_label: 'Lingua' 163 language_label: 'Lingua'
@@ -265,12 +263,14 @@ howto:
265 263
266quickstart: 264quickstart:
267 page_title: 'Introduzione' 265 page_title: 'Introduzione'
266 # more: 'More…'
268 intro: 267 intro:
269 title: 'Benvenuto su wallabag!' 268 title: 'Benvenuto su wallabag!'
270 paragraph_1: "Un tour in cui ti guideremo per scoprire e che ti mostrerà delle funzionalità che potrebbero interessarti." 269 paragraph_1: "Un tour in cui ti guideremo per scoprire e che ti mostrerà delle funzionalità che potrebbero interessarti."
271 paragraph_2: 'Seguici!' 270 paragraph_2: 'Seguici!'
272 configure: 271 configure:
273 title: "Configura l'applicazione" 272 title: "Configura l'applicazione"
273 # description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
274 language: 'Cambia lingua e design' 274 language: 'Cambia lingua e design'
275 rss: 'Abilita i feed RSS' 275 rss: 'Abilita i feed RSS'
276 tagging_rules: 'Scrivi delle regole per taggare automaticamente i contenuti' 276 tagging_rules: 'Scrivi delle regole per taggare automaticamente i contenuti'
@@ -284,6 +284,7 @@ quickstart:
284 import: "Configura l'importazione" 284 import: "Configura l'importazione"
285 first_steps: 285 first_steps:
286 title: 'Pimi passi' 286 title: 'Pimi passi'
287 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
287 new_article: 'Salva il tuo primo contenuto' 288 new_article: 'Salva il tuo primo contenuto'
288 unread_articles: 'E classificalo!' 289 unread_articles: 'E classificalo!'
289 migrate: 290 migrate:
@@ -293,11 +294,15 @@ quickstart:
293 wallabag_v1: 'Trasferisci da wallabag v1' 294 wallabag_v1: 'Trasferisci da wallabag v1'
294 wallabag_v2: 'Trasferisci da wallabag v2' 295 wallabag_v2: 'Trasferisci da wallabag v2'
295 readability: 'Trasferisci da Readability' 296 readability: 'Trasferisci da Readability'
297 instapaper: 'Trasferisci da Instapaper'
296 developer: 298 developer:
297 title: 'Sviluppatori' 299 title: 'Sviluppatori'
300 # description: 'We also thought to the developers: Docker, API, translations, etc.'
298 create_application: 'Crea la tua applicazione' 301 create_application: 'Crea la tua applicazione'
302 # use_docker: 'Use Docker to install wallabag'
299 docs: 303 docs:
300 title: 'Documentazione completa' 304 title: 'Documentazione completa'
305 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
301 annotate: 'Annota il tuo contenuto' 306 annotate: 'Annota il tuo contenuto'
302 export: 'Converti i tuoi contenuti in EPUB o PDF' 307 export: 'Converti i tuoi contenuti in EPUB o PDF'
303 search_filters: 'Impara come puoi recuperare un contenuto tramite la ricerca e i filtri' 308 search_filters: 'Impara come puoi recuperare un contenuto tramite la ricerca e i filtri'
@@ -348,14 +353,18 @@ import:
348 # how_to: 'Please select your Readability export and click on the below button to upload and import it.' 353 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
349 worker: 354 worker:
350 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 355 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
351 # firefox: 356 firefox:
352 # page_title: 'Import > Firefox' 357 page_title: 'Importa da > Firefox'
353 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 358 # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
354 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
355 # chrome: 360 chrome:
356 # page_title: 'Import > Chrome' 361 page_title: 'Importa da > Chrome'
357 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 362 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
358 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 363 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
364 instapaper:
365 page_title: 'Importa da > Instapaper'
366 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
367 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
359 368
360developer: 369developer:
361 page_title: 'Sviluppatori' 370 page_title: 'Sviluppatori'
@@ -382,12 +391,14 @@ developer:
382 page_title: 'Sviluppatori > Nuovo client' 391 page_title: 'Sviluppatori > Nuovo client'
383 page_description: 'Stai per creare un nuovo client. Compila i campi sottostanti per il redirect URI della tua applicazione.' 392 page_description: 'Stai per creare un nuovo client. Compila i campi sottostanti per il redirect URI della tua applicazione.'
384 form: 393 form:
394 # name_label: 'Name of the client'
385 redirect_uris_label: 'Redirect URI' 395 redirect_uris_label: 'Redirect URI'
386 save_label: 'Crea un nuovo client' 396 save_label: 'Crea un nuovo client'
387 action_back: 'Indietro' 397 action_back: 'Indietro'
388 client_parameter: 398 client_parameter:
389 page_title: 'Sviluppatori > parametri Client' 399 page_title: 'Sviluppatori > parametri Client'
390 page_description: 'Questi sono i tuoi parametri del client.' 400 page_description: 'Questi sono i tuoi parametri del client.'
401 # field_name: 'Client name'
391 field_id: 'Client ID' 402 field_id: 'Client ID'
392 field_secret: 'Client secret' 403 field_secret: 'Client secret'
393 back: 'Indietro' 404 back: 'Indietro'
@@ -405,6 +416,33 @@ developer:
405 paragraph_8: 'Se vuoi visualizzare tutti gli API endpoints, dai una occhiata alla <a href="%link%">documentazione delle API</a>.' 416 paragraph_8: 'Se vuoi visualizzare tutti gli API endpoints, dai una occhiata alla <a href="%link%">documentazione delle API</a>.'
406 back: 'Indietro' 417 back: 'Indietro'
407 418
419user:
420 # page_title: Users management
421 # new_user: Create a new user
422 # edit_user: Edit an existing user
423 # description: "Here you can manage all users (create, edit and delete)"
424 # list:
425 # actions: Actions
426 # edit_action: Edit
427 # yes: Yes
428 # no: No
429 # create_new_one: Create a new user
430 form:
431 username_label: 'Username'
432 # name_label: 'Name'
433 password_label: 'Password'
434 repeat_new_password_label: 'Ripeti password'
435 plain_password_label: '????'
436 email_label: 'E-mail'
437 # enabled_label: 'Enabled'
438 # locked_label: 'Locked'
439 # last_login_label: 'Last login'
440 # twofactor_label: Two factor authentication
441 # save: Save
442 # delete: Delete
443 # delete_confirm: Are you sure?
444 # back_to_list: Back to list
445
408flashes: 446flashes:
409 config: 447 config:
410 notice: 448 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
index 6da9ff18..8f06434d 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
@@ -19,18 +19,19 @@ menu:
19 unread: 'Pas legits' 19 unread: 'Pas legits'
20 starred: 'Favorits' 20 starred: 'Favorits'
21 archive: 'Legits' 21 archive: 'Legits'
22 all_articles: 'Tots los articles' 22 all_articles: 'Totes los articles'
23 config: 'Configuracion' 23 config: 'Configuracion'
24 tags: 'Etiquetas' 24 tags: 'Etiquetas'
25 internal_settings: 'Configuracion interna' 25 internal_settings: 'Configuracion interna'
26 import: 'Importar' 26 import: 'Importar'
27 howto: 'Ajuda' 27 howto: 'Ajuda'
28 developer: 'Desvolopador' 28 developer: 'Desvolopador'
29 logout: 'Déconnexion' 29 logout: 'Desconnexion'
30 about: 'A prepaus' 30 about: 'A prepaus'
31 search: 'Cercar' 31 search: 'Cercar'
32 save_link: 'Enregistrar un novèl article' 32 save_link: 'Enregistrar un novèl article'
33 back_to_unread: 'Tornar als articles pas legits' 33 back_to_unread: 'Tornar als articles pas legits'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Enregistrar un novèl article' 36 add_new_entry: 'Enregistrar un novèl article'
36 search: 'Cercar' 37 search: 'Cercar'
@@ -45,9 +46,10 @@ footer:
45 social: 'Social' 46 social: 'Social'
46 powered_by: 'propulsat per' 47 powered_by: 'propulsat per'
47 about: 'A prepaus' 48 about: 'A prepaus'
48 page_title: 'Configuracion' 49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
49 50
50config: 51config:
52 page_title: 'Configuracion'
51 tab_menu: 53 tab_menu:
52 settings: 'Paramètres' 54 settings: 'Paramètres'
53 rss: 'RSS' 55 rss: 'RSS'
@@ -72,8 +74,8 @@ config:
72 form_rss: 74 form_rss:
73 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." 75 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."
74 token_label: 'Geton RSS' 76 token_label: 'Geton RSS'
75 no_token: 'Aucun jeton généré' 77 no_token: 'Pas cap de geton generat'
76 token_create: 'Pas cap de geton generat' 78 token_create: 'Creatz vòstre geton'
77 token_reset: 'Reïnicializatz vòstre geton' 79 token_reset: 'Reïnicializatz vòstre geton'
78 rss_links: 'URL de vòstres fluxes RSS' 80 rss_links: 'URL de vòstres fluxes RSS'
79 rss_link: 81 rss_link:
@@ -94,6 +96,7 @@ config:
94 if_label: 'se' 96 if_label: 'se'
95 then_tag_as_label: 'alara atribuir las etiquetas' 97 then_tag_as_label: 'alara atribuir las etiquetas'
96 delete_rule_label: 'suprimir' 98 delete_rule_label: 'suprimir'
99 # edit_rule_label: 'edit'
97 rule_label: 'Règla' 100 rule_label: 'Règla'
98 tags_label: 'Etiquetas' 101 tags_label: 'Etiquetas'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 or: "Una règla O l'autra" 130 or: "Una règla O l'autra"
128 and: "Una règla E l'autra" 131 and: "Una règla E l'autra"
129 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>' 132 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>'
130 form_new_user:
131 username_label: "Nom d'utilizaire"
132 password_label: 'Senhal'
133 repeat_new_password_label: 'Confirmatz vòstre novèl senhal'
134 plain_password_label: 'Senhal en clar'
135 email_label: 'Adreça de corrièl'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -187,7 +184,7 @@ entry:
187 re_fetch_content: 'Tornar cargar lo contengut' 184 re_fetch_content: 'Tornar cargar lo contengut'
188 delete: 'Suprimir' 185 delete: 'Suprimir'
189 add_a_tag: 'Ajustar una etiqueta' 186 add_a_tag: 'Ajustar una etiqueta'
190 share_content: 'Partatjar' 187 share_content: 'Partejar'
191 share_email_label: 'Corrièl' 188 share_email_label: 'Corrièl'
192 public_link: 'ligam public' 189 public_link: 'ligam public'
193 delete_public_link: 'suprimir lo ligam public' 190 delete_public_link: 'suprimir lo ligam public'
@@ -224,7 +221,7 @@ about:
224 developped_by: 'Desvolopat per' 221 developped_by: 'Desvolopat per'
225 website: 'Site web' 222 website: 'Site web'
226 many_contributors: 'E un fum de contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>' 223 many_contributors: 'E un fum de contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>'
227 project_website: 'Site web del projète' 224 project_website: 'Site web del projècte'
228 license: 'Licéncia' 225 license: 'Licéncia'
229 version: 'Version' 226 version: 'Version'
230 getting_help: 227 getting_help:
@@ -245,7 +242,7 @@ about:
245 242
246howto: 243howto:
247 page_title: 'Ajuda' 244 page_title: 'Ajuda'
248 page_description: "I a mai d'un biai d'enregistrar un article :" 245 page_description: "I a mai d'un biais d'enregistrar un article :"
249 top_menu: 246 top_menu:
250 browser_addons: 'Extensions de navigator' 247 browser_addons: 'Extensions de navigator'
251 mobile_apps: 'Aplicacions mobil' 248 mobile_apps: 'Aplicacions mobil'
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 page_title: 'Per ben començar' 265 page_title: 'Per ben començar'
266 # more: 'More…'
269 intro: 267 intro:
270 title: 'Benvenguda sus wallabag !' 268 title: 'Benvenguda sus wallabag !'
271 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." 269 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."
272 paragraph_2: 'Seguètz-nos ' 270 paragraph_2: 'Seguètz-nos '
273 configure: 271 configure:
274 title: "Configuratz l'aplicacio" 272 title: "Configuratz l'aplicacio"
273 # description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 language: "Cambiatz la lenga e l'estil de l'aplicacion" 274 language: "Cambiatz la lenga e l'estil de l'aplicacion"
276 rss: 'Activatz los fluxes RSS' 275 rss: 'Activatz los fluxes RSS'
277 tagging_rules: 'Escrivètz de règlas per classar automaticament vòstres articles' 276 tagging_rules: 'Escrivètz de règlas per classar automaticament vòstres articles'
@@ -285,6 +284,7 @@ quickstart:
285 import: 'Configurar los impòrt' 284 import: 'Configurar los impòrt'
286 first_steps: 285 first_steps:
287 title: 'Primièrs passes' 286 title: 'Primièrs passes'
287 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
288 new_article: 'Ajustatz vòstre primièr article' 288 new_article: 'Ajustatz vòstre primièr article'
289 unread_articles: 'E racaptatz-lo !' 289 unread_articles: 'E racaptatz-lo !'
290 migrate: 290 migrate:
@@ -294,11 +294,15 @@ quickstart:
294 wallabag_v1: 'Migrar dempuèi wallabag v1' 294 wallabag_v1: 'Migrar dempuèi wallabag v1'
295 wallabag_v2: 'Migrar dempuèi wallabag v2' 295 wallabag_v2: 'Migrar dempuèi wallabag v2'
296 readability: 'Migrar dempuèi Readability' 296 readability: 'Migrar dempuèi Readability'
297 instapaper: 'Migrar dempuèi Instapaper'
297 developer: 298 developer:
298 title: 'Pels desvolopadors' 299 title: 'Pels desvolopadors'
300 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 create_application: 'Crear vòstra aplicacion tèrça' 301 create_application: 'Crear vòstra aplicacion tèrça'
302 # use_docker: 'Use Docker to install wallabag'
300 docs: 303 docs:
301 title: 'Documentacion complèta' 304 title: 'Documentacion complèta'
305 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 annotate: 'Anotatar vòstre article' 306 annotate: 'Anotatar vòstre article'
303 export: 'Convertissètz vòstres articles en ePub o en PDF' 307 export: 'Convertissètz vòstres articles en ePub o en PDF'
304 search_filters: "Aprenètz a utilizar lo motor de recèrca e los filtres per retrobar l'article que vos interèssa" 308 search_filters: "Aprenètz a utilizar lo motor de recèrca e los filtres per retrobar l'article que vos interèssa"
@@ -344,22 +348,26 @@ import:
344 page_title: 'Importar > Wallabag v2' 348 page_title: 'Importar > Wallabag v2'
345 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\"" 349 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\""
346 readability: 350 readability:
347 page_title: 'Importer > Readability' 351 page_title: 'Importar > Readability'
348 description: "Aquesta aisina importarà totas vòstres articles de Readability. Sus la pagina de l'aisina (https://www.readability.com/tools/), clicatz sus \"Export your data\" dins la seccion \"Data Export\". Recebretz un corrièl per telecargar un json (qu'acaba pas amb un .json de fach)." 352 description: "Aquesta aisina importarà totas vòstres articles de Readability. Sus la pagina de l'aisina (https://www.readability.com/tools/), clicatz sus \"Export your data\" dins la seccion \"Data Export\". Recebretz un corrièl per telecargar un json (qu'acaba pas amb un .json de fach)."
349 how_to: "Mercés de seleccionar vòstre Readability fichièr e de clicar sul boton dejós per lo telecargar e l'importar." 353 how_to: "Mercés de seleccionar vòstre Readability fichièr e de clicar sul boton dejós per lo telecargar e l'importar."
350 worker: 354 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 355 enabled: "L'importacion se fa de manièra asincròna. Un còp l'importacion lançada, una aisina externa s'ocuparà dels messatges un per un. Lo servici actual es : "
352 # firefox: 356 firefox:
353 # page_title: 'Import > Firefox' 357 page_title: 'Importar > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 358 description: "Aquesta aisina importarà totas vòstres favorits de Firefox. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 359 how_to: "Mercés de causir lo fichièr de salvagarda e de clicar sul boton dejós per l'importar. Notatz que lo tractament pòt durar un moment ja que totes los articles an d'èsser recuperats."
356 # chrome: 360 chrome:
357 # page_title: 'Import > Chrome' 361 page_title: 'Importar > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 362 description: "Aquesta aisina importarà totas vòstres favorits de Chrome. L'emplaçament del fichièr depend de vòstre sistèma operatiu : <ul><li>Sus Linux, anatz al dorsièr <code>~/.config/chromium/Default/</code></li><li>Sus Windows, deu èsser dins <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>sus OS X, deu èsser dins <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Un còp enlà, copiatz lo fichièr de favorits dins un endrech que volètz.<em><br>Notatz que s'avètz Chromium al lòc de Chrome, vos cal cambiar lo camin segon aquesta situacion.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 363 how_to: "Mercés de causir lo fichièr de salvagarda e de clicar sul boton dejós per l'importar. Notatz que lo tractament pòt durar un moment ja que totes los articles an d'èsser recuperats."
364 instapaper:
365 page_title: 'Importar > Instapaper'
366 description: "Aquesta aisina importarà totas vòstres articles d'Instapaper. Sus la pagina de paramètres (https://www.instapaper.com/user), clicatz sus \"Download .CSV file\" dins la seccion \"Export\". Un fichièr CSV serà telecargat (aital \"instapaper-export.csv\")."
367 how_to: "Mercés de causir vòstre fichièr Instapaper e de clicar sul boton dejós per lo telecargar e l'importar"
360 368
361developer: 369developer:
362 page_title: 'Desvolopador' 370 page_title: 'Desvolopaire'
363 welcome_message: "Benvenguda sus l'API de wallabag" 371 welcome_message: "Benvenguda sus l'API de wallabag"
364 documentation: 'Documentacion' 372 documentation: 'Documentacion'
365 how_to_first_app: 'Cossí crear vòstra primièra aplicacion' 373 how_to_first_app: 'Cossí crear vòstra primièra aplicacion'
@@ -383,16 +391,18 @@ developer:
383 page_title: 'Desvlopador > Novèl client' 391 page_title: 'Desvlopador > Novèl client'
384 page_description: "Anatz crear un novèl client. Mercés de cumplir l'url de redireccion cap a vòstra aplicacion." 392 page_description: "Anatz crear un novèl client. Mercés de cumplir l'url de redireccion cap a vòstra aplicacion."
385 form: 393 form:
394 name_label: "Nom del client"
386 redirect_uris_label: 'URLs de redireccion' 395 redirect_uris_label: 'URLs de redireccion'
387 save_label: 'Crear un novèl client' 396 save_label: 'Crear un novèl client'
388 action_back: 'Retorn' 397 action_back: 'Retorn'
389 client_parameter: 398 client_parameter:
390 page_title: 'Desvolopador > Los paramètres de vòstre client' 399 page_title: 'Desvolopador > Los paramètres de vòstre client'
391 page_description: 'Vaquí los paramètres de vòstre client' 400 page_description: 'Vaquí los paramètres de vòstre client'
401 field_name: 'Nom del client'
392 field_id: 'ID Client' 402 field_id: 'ID Client'
393 field_secret: 'Clau secreta' 403 field_secret: 'Clau secreta'
394 back: 'Retour' 404 back: 'Retour'
395 read_howto: 'Legir \"cossí crear ma primièra aplicacion\"' 405 read_howto: 'Legir "cossí crear ma primièra aplicacion"'
396 howto: 406 howto:
397 page_title: 'Desvolopador > Cossí crear ma primièra aplicacion' 407 page_title: 'Desvolopador > Cossí crear ma primièra aplicacion'
398 description: 408 description:
@@ -406,6 +416,33 @@ developer:
406 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>." 416 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>."
407 back: 'Retorn' 417 back: 'Retorn'
408 418
419user:
420 # page_title: Users management
421 # new_user: Create a new user
422 # edit_user: Edit an existing user
423 # description: "Here you can manage all users (create, edit and delete)"
424 # list:
425 # actions: Actions
426 # edit_action: Edit
427 # yes: Yes
428 # no: No
429 # create_new_one: Create a new user
430 form:
431 username_label: "Nom d'utilizaire"
432 # name_label: 'Name'
433 password_label: 'Senhal'
434 repeat_new_password_label: 'Confirmatz vòstre novèl senhal'
435 plain_password_label: 'Senhal en clar'
436 email_label: 'Adreça de corrièl'
437 # enabled_label: 'Enabled'
438 # locked_label: 'Locked'
439 # last_login_label: 'Last login'
440 # twofactor_label: Two factor authentication
441 # save: Save
442 # delete: Delete
443 # delete_confirm: Are you sure?
444 # back_to_list: Back to list
445
409flashes: 446flashes:
410 config: 447 config:
411 notice: 448 notice:
@@ -422,10 +459,10 @@ flashes:
422 notice: 459 notice:
423 entry_already_saved: 'Article ja salvargardat lo %date%' 460 entry_already_saved: 'Article ja salvargardat lo %date%'
424 entry_saved: 'Article enregistrat' 461 entry_saved: 'Article enregistrat'
425 # entry_saved_failed: 'Entry saved but fetching content failed' 462 entry_saved_failed: 'Article salvat mai fracàs de la recuperacion del contengut'
426 entry_updated: 'Article mes a jorn' 463 entry_updated: 'Article mes a jorn'
427 entry_reloaded: 'Article recargat' 464 entry_reloaded: 'Article recargat'
428 # entry_reload_failed: 'Entry reloaded but fetching content failed' 465 entry_reload_failed: "L'article es estat cargat de u mai la recuperacion del contengut a fracassat"
429 entry_archived: 'Article marcat coma legit' 466 entry_archived: 'Article marcat coma legit'
430 entry_unarchived: 'Article marcat coma pas legit' 467 entry_unarchived: 'Article marcat coma pas legit'
431 entry_starred: 'Article apondut dins los favorits' 468 entry_starred: 'Article apondut dins los favorits'
@@ -439,10 +476,10 @@ flashes:
439 failed: "L'importacion a fracassat, mercés de tornar ensajar" 476 failed: "L'importacion a fracassat, mercés de tornar ensajar"
440 failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr." 477 failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr."
441 summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents." 478 summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents."
442 # summary_with_queue: 'Import summary: %queued% queued.' 479 summary_with_queue: "Rapòrt d'import : %queued% en espèra de tractament."
443 error: 480 error:
444 # redis_enabled_not_installed: Redis is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check Redis configuration. 481 redis_enabled_not_installed: "Redis es capable d'importar de manièra asincròna mai sembla que <u>podèm pas nos conectar amb el</u>. Mercés de verificar la configuracion de Redis."
445 # rabbit_enabled_not_installed: RabbitMQ is enabled for handle asynchronous import but it looks like <u>we can't connect to it</u>. Please check RabbitMQ configuration. 482 rabbit_enabled_not_installed: "RabbitMQ es capable d'importar de manièra asincròna mai sembla que <u>podèm pas nos conectar amb el</u>. Mercés de verificar la configuracion de RabbitMQ."
446 developer: 483 developer:
447 notice: 484 notice:
448 client_created: 'Novèl client creat' 485 client_created: 'Novèl client creat'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
index f58cd039..54e669b3 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Szukaj' 31 search: 'Szukaj'
32 save_link: 'Zapisz link' 32 save_link: 'Zapisz link'
33 back_to_unread: 'Powrót do nieprzeczytanych artykułów' 33 back_to_unread: 'Powrót do nieprzeczytanych artykułów'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Dodaj nowy wpis' 36 add_new_entry: 'Dodaj nowy wpis'
36 search: 'Szukaj' 37 search: 'Szukaj'
@@ -45,6 +46,7 @@ footer:
45 social: 'Społeczność' 46 social: 'Społeczność'
46 powered_by: 'Kontrolowany przez' 47 powered_by: 'Kontrolowany przez'
47 about: 'O nas' 48 about: 'O nas'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Konfiguracja' 52 page_title: 'Konfiguracja'
@@ -94,6 +96,7 @@ config:
94 if_label: 'jeżeli' 96 if_label: 'jeżeli'
95 then_tag_as_label: 'wtedy otaguj jako' 97 then_tag_as_label: 'wtedy otaguj jako'
96 delete_rule_label: 'usuń' 98 delete_rule_label: 'usuń'
99 # edit_rule_label: 'edit'
97 rule_label: 'Reguła' 100 rule_label: 'Reguła'
98 tags_label: 'Tagi' 101 tags_label: 'Tagi'
99 faq: 102 faq:
@@ -127,12 +130,6 @@ config:
127 or: 'Jedna reguła LUB inna' 130 or: 'Jedna reguła LUB inna'
128 and: 'Jedna reguła I inna' 131 and: 'Jedna reguła I inna'
129 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>' 132 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>'
130 form_new_user:
131 username_label: 'Nazwa użytkownika'
132 password_label: 'Hasło'
133 repeat_new_password_label: 'Powtórz nowe hasło'
134 plain_password_label: 'Jawne hasło'
135 email_label: 'Adres email'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 page_title: 'Szybki start' 265 page_title: 'Szybki start'
266 # more: 'More…'
269 intro: 267 intro:
270 title: 'Witaj w wallabag!' 268 title: 'Witaj w wallabag!'
271 paragraph_1: "Będziemy ci towarzyszyli w Twojej poznaniu wallabag i pokażemy możliwości, które mogą cię zainteresować." 269 paragraph_1: "Będziemy ci towarzyszyli w Twojej poznaniu wallabag i pokażemy możliwości, które mogą cię zainteresować."
272 paragraph_2: 'Śledź nas!' 270 paragraph_2: 'Śledź nas!'
273 configure: 271 configure:
274 title: 'Konfiguruj aplikację' 272 title: 'Konfiguruj aplikację'
273 description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 language: 'Zmień język i wygląd' 274 language: 'Zmień język i wygląd'
276 rss: 'Włącz kanały RSS' 275 rss: 'Włącz kanały RSS'
277 tagging_rules: 'Napisz reguły pozwalające na automatyczne otagowanie twoich artykułów' 276 tagging_rules: 'Napisz reguły pozwalające na automatyczne otagowanie twoich artykułów'
@@ -285,6 +284,7 @@ quickstart:
285 import: 'Skonfigurować import' 284 import: 'Skonfigurować import'
286 first_steps: 285 first_steps:
287 title: 'Pierwsze kroki' 286 title: 'Pierwsze kroki'
287 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link"
288 new_article: 'Zapisz swój pierwszy artukuł' 288 new_article: 'Zapisz swój pierwszy artukuł'
289 unread_articles: 'I sklasyfikuj go!' 289 unread_articles: 'I sklasyfikuj go!'
290 migrate: 290 migrate:
@@ -294,11 +294,15 @@ quickstart:
294 wallabag_v1: 'Migruj z wallabag v1' 294 wallabag_v1: 'Migruj z wallabag v1'
295 wallabag_v2: 'Migruj z wallabag v2' 295 wallabag_v2: 'Migruj z wallabag v2'
296 readability: 'Migruj z Readability' 296 readability: 'Migruj z Readability'
297 instapaper: 'Migruj z Instapaper'
297 developer: 298 developer:
298 title: 'Deweloperzy' 299 title: 'Deweloperzy'
300 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 create_application: 'Stwórz swoją aplikację' 301 create_application: 'Stwórz swoją aplikację'
302 # use_docker: 'Use Docker to install wallabag'
300 docs: 303 docs:
301 title: 'Pełna Dokumentacja' 304 title: 'Pełna Dokumentacja'
305 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 annotate: 'Dadaj adnotację do swojego artykułu' 306 annotate: 'Dadaj adnotację do swojego artykułu'
303 export: 'Konwertuj swoje artykuły do ePUB lub PDF' 307 export: 'Konwertuj swoje artykuły do ePUB lub PDF'
304 search_filters: 'Zabacz jak możesz znaleźć artykuł dzięku użyciu silnika wyszukiwarki i filtrów' 308 search_filters: 'Zabacz jak możesz znaleźć artykuł dzięku użyciu silnika wyszukiwarki i filtrów'
@@ -351,12 +355,16 @@ import:
351 enabled: "Import jest wykonywany asynchronicznie. Od momentu rozpoczęcia importu, zewnętrzna usługa może zajmować się na raz tylko jednym zadaniem. Bieżącą usługą jest:" 355 enabled: "Import jest wykonywany asynchronicznie. Od momentu rozpoczęcia importu, zewnętrzna usługa może zajmować się na raz tylko jednym zadaniem. Bieżącą usługą jest:"
352 firefox: 356 firefox:
353 page_title: 'Import > Firefox' 357 page_title: 'Import > Firefox'
354 description: "Ten importer zaimportuje wszystkie twoje zakładki z Firefoksa. <p>Dla Firefoksa, idź do twoich zakładek (Ctrl+Shift+O), następnie w \"Import i kopie zapasowe\", wybierz \"Utwórz kopię zapasową...\". Uzyskasz plik .json." 358 description: "Ten importer zaimportuje wszystkie twoje zakładki z Firefoksa. Idź do twoich zakładek (Ctrl+Shift+O), następnie w \"Import i kopie zapasowe\", wybierz \"Utwórz kopię zapasową...\". Uzyskasz plik .json."
355 how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione." 359 how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione."
356 chrome: 360 chrome:
357 page_title: 'Import > Chrome' 361 page_title: 'Import > Chrome'
358 description: "Ten importer zaimportuje wszystkie twoje zakładki z Chrome. Lokalizacja pliku jest zależna od twojego systemy operacyjnego : <ul><li>Pod Linuksem, idź do katalogu <code>~/.config/chromium/Default/</code></li><li>Pod Windowsem, powinien się on znajdować w <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>Pod OS X, powinien się on znajdować w <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Po odnalezieniu pliku, skopiuj go w łatwo dostęne miejsce.<em><br>Jeżeli używasz Chromium zamiast Chrome, będziesz musiał odpowiednio poprawić ścieżkę dostępu.</em></p>" 362 description: "Ten importer zaimportuje wszystkie twoje zakładki z Chrome. Lokalizacja pliku jest zależna od twojego systemy operacyjnego : <ul><li>Pod Linuksem, idź do katalogu <code>~/.config/chromium/Default/</code></li><li>Pod Windowsem, powinien się on znajdować w <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>Pod OS X, powinien się on znajdować w <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Po odnalezieniu pliku, skopiuj go w łatwo dostęne miejsce.<em><br>Jeżeli używasz Chromium zamiast Chrome, będziesz musiał odpowiednio poprawić ścieżkę dostępu.</em></p>"
359 how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione." 363 how_to: "Wybierz swój plik z zakładkami i naciśnij poniższy przycisk, aby je zaimportować. Może to zająć dłuższą chwilę, zanim wszystkie artykuły zostaną przeniesione."
364 instapaper:
365 page_title: 'Import > Instapaper'
366 description: 'Ten importer, zaimportuje wszystkie twoje artykuły z Instapaper. W ustawieniach (https://www.instapaper.com/user), kliknij na "Download .CSV file" w sekcji "Export". Otrzymasz plik CSV.'
367 how_to: 'Wybierz swój plik eksportu z Instapaper i kliknij poniższy przycisk, aby go załadować.'
360 368
361developer: 369developer:
362 page_title: 'Deweloper' 370 page_title: 'Deweloper'
@@ -366,36 +374,38 @@ developer:
366 full_documentation: 'Pokaż pełne API' 374 full_documentation: 'Pokaż pełne API'
367 list_methods: 'Lista metod API' 375 list_methods: 'Lista metod API'
368 clients: 376 clients:
369 title: 'Klienci' 377 title: 'Klienci'
370 create_new: 'Utwórz nowego klienta' 378 create_new: 'Utwórz nowego klienta'
371 existing_clients: 379 existing_clients:
372 title: 'Istniejący klienci' 380 title: 'Istniejący klienci'
373 field_id: 'ID klienta' 381 field_id: 'ID klienta'
374 field_secret: 'Client secret' 382 field_secret: 'Client secret'
375 field_uris: 'Przekieruj URIs' 383 field_uris: 'Przekieruj URIs'
376 field_grant_types: 'Przyznaj pozwolenie' 384 field_grant_types: 'Przyznaj pozwolenie'
377 no_client: 'Nie ma jeszcze klienta.' 385 no_client: 'Nie ma jeszcze klienta.'
378 remove: 386 remove:
379 warn_message_1: 'Masz możliwość usunięcia tego klienta. Ta akcja jest NIEODWRACALNA !' 387 warn_message_1: 'Masz możliwość usunięcia tego klienta. Ta akcja jest NIEODWRACALNA !'
380 warn_message_2: "Jeżeli go usuniesz, aplikacje skonfigurowane z tym klientem nię będa w stanie autoryzować twojego wallabag." 388 warn_message_2: "Jeżeli go usuniesz, aplikacje skonfigurowane z tym klientem nię będa w stanie autoryzować twojego wallabag."
381 action: 'Usuń tego klienta' 389 action: 'Usuń tego klienta'
382 client: 390 client:
383 page_title: 'Deweloper > Nowy klient' 391 page_title: 'Deweloper > Nowy klient'
384 page_description: 'Tworzysz nowego klienta. Wypełnij poniższe pole w celu przekierowania URI twojej aplikacji.' 392 page_description: 'Tworzysz nowego klienta. Wypełnij poniższe pole w celu przekierowania URI twojej aplikacji.'
385 form: 393 form:
386 redirect_uris_label: 'Przekieruj adresy URI' 394 # name_label: 'Name of the client'
387 save_label: 'Stwórz nowego klienta' 395 redirect_uris_label: 'Przekieruj adresy URI'
388 action_back: 'Cofnij' 396 save_label: 'Stwórz nowego klienta'
397 action_back: 'Cofnij'
389 client_parameter: 398 client_parameter:
390 page_title: 'Deweloper > Parametry klienta' 399 page_title: 'Deweloper > Parametry klienta'
391 page_description: 'Tutaj znajdują się parametry klienta.' 400 page_description: 'Tutaj znajdują się parametry klienta.'
392 field_id: 'Client ID' 401 # field_name: 'Client name'
393 field_secret: 'Client secret' 402 field_id: 'Client ID'
394 back: 'Cofnij' 403 field_secret: 'Client secret'
395 read_howto: 'Przeczytaj jak "Stworzyć moją pierwszą aplikację"' 404 back: 'Cofnij'
405 read_howto: 'Przeczytaj jak "Stworzyć moją pierwszą aplikację"'
396 howto: 406 howto:
397 page_title: 'Deweloper > Jak stworzyć moją pierwszą aplikację' 407 page_title: 'Deweloper > Jak stworzyć moją pierwszą aplikację'
398 description: 408 description:
399 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' 409 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'
400 paragraph_2: 'Potrzebujesz tokena w celu nawiązania komunikacji między swoją aplikacją a API wallabag.' 410 paragraph_2: 'Potrzebujesz tokena w celu nawiązania komunikacji między swoją aplikacją a API wallabag.'
401 paragraph_3: 'W celu stworzenia tokena musisz <a href="%link%">stwórz nowego klienta</a>.' 411 paragraph_3: 'W celu stworzenia tokena musisz <a href="%link%">stwórz nowego klienta</a>.'
@@ -404,7 +414,34 @@ developer:
404 paragraph_6: 'access_token jest użyteczny do wywołania API endpoint. Na przykład:' 414 paragraph_6: 'access_token jest użyteczny do wywołania API endpoint. Na przykład:'
405 paragraph_7: 'To wywołanie zwróci wszystkie twoje wpisy.' 415 paragraph_7: 'To wywołanie zwróci wszystkie twoje wpisy.'
406 paragraph_8: 'Jeżeli chcesz wyświetlić wszystkie punkty końcowe API, zobacz <a href="%link%">Dokumentacja naszego API</a>.' 416 paragraph_8: 'Jeżeli chcesz wyświetlić wszystkie punkty końcowe API, zobacz <a href="%link%">Dokumentacja naszego API</a>.'
407 back: 'Cofnij' 417 back: 'Cofnij'
418
419user:
420 # page_title: Users management
421 # new_user: Create a new user
422 # edit_user: Edit an existing user
423 # description: "Here you can manage all users (create, edit and delete)"
424 # list:
425 # actions: Actions
426 # edit_action: Edit
427 # yes: Yes
428 # no: No
429 # create_new_one: Create a new user
430 form:
431 username_label: 'Nazwa użytkownika'
432 # name_label: 'Name'
433 password_label: 'Hasło'
434 repeat_new_password_label: 'Powtórz nowe hasło'
435 plain_password_label: 'Jawne hasło'
436 email_label: 'Adres email'
437 # enabled_label: 'Enabled'
438 # locked_label: 'Locked'
439 # last_login_label: 'Last login'
440 # twofactor_label: Two factor authentication
441 # save: Save
442 # delete: Delete
443 # delete_confirm: Are you sure?
444 # back_to_list: Back to list
408 445
409flashes: 446flashes:
410 config: 447 config:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
index 067f7878..4e0e454c 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Căutare' 31 search: 'Căutare'
32 # save_link: 'Save a link' 32 # save_link: 'Save a link'
33 back_to_unread: 'Înapoi la articolele necitite' 33 back_to_unread: 'Înapoi la articolele necitite'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Introdu un nou articol' 36 add_new_entry: 'Introdu un nou articol'
36 search: 'Căutare' 37 search: 'Căutare'
@@ -45,6 +46,7 @@ footer:
45 # social: 'Social' 46 # social: 'Social'
46 # powered_by: 'powered by' 47 # powered_by: 'powered by'
47 about: 'Despre' 48 about: 'Despre'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Configurație' 52 page_title: 'Configurație'
@@ -94,6 +96,7 @@ config:
94 # if_label: 'if' 96 # if_label: 'if'
95 # then_tag_as_label: 'then tag as' 97 # then_tag_as_label: 'then tag as'
96 # delete_rule_label: 'delete' 98 # delete_rule_label: 'delete'
99 # edit_rule_label: 'edit'
97 # rule_label: 'Rule' 100 # rule_label: 'Rule'
98 # tags_label: 'Tags' 101 # tags_label: 'Tags'
99 # faq: 102 # faq:
@@ -127,12 +130,6 @@ config:
127 # or: 'One rule OR another' 130 # or: 'One rule OR another'
128 # and: 'One rule AND another' 131 # and: 'One rule AND another'
129 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' 132 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
130 form_new_user:
131 username_label: 'Nume de utilizator'
132 password_label: 'Parolă'
133 repeat_new_password_label: 'Repeat new password'
134 plain_password_label: '????'
135 email_label: 'E-mail'
136 133
137entry: 134entry:
138 page_titles: 135 page_titles:
@@ -266,12 +263,14 @@ howto:
266 263
267quickstart: 264quickstart:
268 # page_title: 'Quickstart' 265 # page_title: 'Quickstart'
266 # more: 'More…'
269 # intro: 267 # intro:
270 # title: 'Welcome to wallabag!' 268 # title: 'Welcome to wallabag!'
271 # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." 269 # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
272 # paragraph_2: 'Follow us!' 270 # paragraph_2: 'Follow us!'
273 # configure: 271 # configure:
274 # title: 'Configure the application' 272 # title: 'Configure the application'
273 # description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 # language: 'Change language and design' 274 # language: 'Change language and design'
276 # rss: 'Enable RSS feeds' 275 # rss: 'Enable RSS feeds'
277 # tagging_rules: 'Write rules to automatically tag your articles' 276 # tagging_rules: 'Write rules to automatically tag your articles'
@@ -285,6 +284,7 @@ quickstart:
285 # import: 'Configure import' 284 # import: 'Configure import'
286 # first_steps: 285 # first_steps:
287 # title: 'First steps' 286 # title: 'First steps'
287 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
288 # new_article: 'Save your first article' 288 # new_article: 'Save your first article'
289 # unread_articles: 'And classify it!' 289 # unread_articles: 'And classify it!'
290 # migrate: 290 # migrate:
@@ -294,11 +294,15 @@ quickstart:
294 # wallabag_v1: 'Migrate from wallabag v1' 294 # wallabag_v1: 'Migrate from wallabag v1'
295 # wallabag_v2: 'Migrate from wallabag v2' 295 # wallabag_v2: 'Migrate from wallabag v2'
296 # readability: 'Migrate from Readability' 296 # readability: 'Migrate from Readability'
297 # instapaper: 'Migrate from Instapaper'
297 # developer: 298 # developer:
298 # title: 'Developers' 299 # title: 'Developers'
300 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 # create_application: 'Create your third application' 301 # create_application: 'Create your third application'
302 # use_docker: 'Use Docker to install wallabag'
300 # docs: 303 # docs:
301 # title: 'Full documentation' 304 # title: 'Full documentation'
305 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 # annotate: 'Annotate your article' 306 # annotate: 'Annotate your article'
303 # export: 'Convert your articles into ePUB or PDF' 307 # export: 'Convert your articles into ePUB or PDF'
304 # search_filters: 'See how you can look for an article by using search engine and filters' 308 # search_filters: 'See how you can look for an article by using search engine and filters'
@@ -351,12 +355,16 @@ import:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 355 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox: 356 # firefox:
353 # page_title: 'Import > Firefox' 357 # page_title: 'Import > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 358 # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 # chrome: 360 # chrome:
357 # page_title: 'Import > Chrome' 361 # page_title: 'Import > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 362 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 363 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
364 # instapaper:
365 # page_title: 'Import > Instapaper'
366 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
367 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
360 368
361developer: 369developer:
362 # page_title: 'Developer' 370 # page_title: 'Developer'
@@ -383,12 +391,14 @@ developer:
383 # page_title: 'Developer > New client' 391 # page_title: 'Developer > New client'
384 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' 392 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
385 # form: 393 # form:
394 # name_label: 'Name of the client'
386 # redirect_uris_label: 'Redirect URIs' 395 # redirect_uris_label: 'Redirect URIs'
387 # save_label: 'Create a new client' 396 # save_label: 'Create a new client'
388 # action_back: 'Back' 397 # action_back: 'Back'
389 # client_parameter: 398 # client_parameter:
390 # page_title: 'Developer > Client parameters' 399 # page_title: 'Developer > Client parameters'
391 # page_description: 'Here are your client parameters.' 400 # page_description: 'Here are your client parameters.'
401 # field_name: 'Client name'
392 # field_id: 'Client ID' 402 # field_id: 'Client ID'
393 # field_secret: 'Client secret' 403 # field_secret: 'Client secret'
394 # back: 'Back' 404 # back: 'Back'
@@ -406,6 +416,33 @@ developer:
406 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' 416 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
407 # back: 'Back' 417 # back: 'Back'
408 418
419user:
420 # page_title: Users management
421 # new_user: Create a new user
422 # edit_user: Edit an existing user
423 # description: "Here you can manage all users (create, edit and delete)"
424 # list:
425 # actions: Actions
426 # edit_action: Edit
427 # yes: Yes
428 # no: No
429 # create_new_one: Create a new user
430 form:
431 username_label: 'Nume de utilizator'
432 # name_label: 'Name'
433 password_label: 'Parolă'
434 repeat_new_password_label: 'Repeat new password'
435 plain_password_label: '????'
436 email_label: 'E-mail'
437 # enabled_label: 'Enabled'
438 # locked_label: 'Locked'
439 # last_login_label: 'Last login'
440 # twofactor_label: Two factor authentication
441 # save: Save
442 # delete: Delete
443 # delete_confirm: Are you sure?
444 # back_to_list: Back to list
445
409flashes: 446flashes:
410 config: 447 config:
411 notice: 448 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
index 62c69510..02b3aae6 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
@@ -31,6 +31,7 @@ menu:
31 search: 'Ara' 31 search: 'Ara'
32 # save_link: 'Save a link' 32 # save_link: 'Save a link'
33 back_to_unread: 'Okunmayan makalelere geri dön' 33 back_to_unread: 'Okunmayan makalelere geri dön'
34 # users_management: 'Users management'
34 top: 35 top:
35 add_new_entry: 'Yeni bir makale ekle' 36 add_new_entry: 'Yeni bir makale ekle'
36 search: 'Ara' 37 search: 'Ara'
@@ -45,6 +46,7 @@ footer:
45 social: 'Sosyal' 46 social: 'Sosyal'
46 powered_by: 'powered by' 47 powered_by: 'powered by'
47 about: 'Hakkımızda' 48 about: 'Hakkımızda'
49 # stats: Since %user_creation% you read %nb_archives% articles. That is about %per_day% a day!
48 50
49config: 51config:
50 page_title: 'Yapılandırma' 52 page_title: 'Yapılandırma'
@@ -127,12 +129,6 @@ config:
127 or: 'Bir kural veya birbaşkası' 129 or: 'Bir kural veya birbaşkası'
128 and: 'Bir kural ve diğeri' 130 and: 'Bir kural ve diğeri'
129 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>' 131 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
130 form_new_user:
131 username_label: 'Kullanıcı adı'
132 password_label: 'Şifre'
133 repeat_new_password_label: 'Yeni şifrenin tekrarı'
134 plain_password_label: '????'
135 email_label: 'E-posta'
136 132
137entry: 133entry:
138 page_titles: 134 page_titles:
@@ -266,12 +262,14 @@ howto:
266 262
267quickstart: 263quickstart:
268 page_title: 'Hızlı başlangıç' 264 page_title: 'Hızlı başlangıç'
265 # more: 'More…'
269 intro: 266 intro:
270 title: 'wallabag' 267 title: 'wallabag'
271 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." 268 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."
272 paragraph_2: 'Bizi takip edin!' 269 paragraph_2: 'Bizi takip edin!'
273 configure: 270 configure:
274 title: 'Uygulamayı Yapılandırma' 271 title: 'Uygulamayı Yapılandırma'
272 # description: 'In order to have an application which suits you, have a look into the configuration of wallabag.'
275 language: 'Dili ve tasarımı değiştirme' 273 language: 'Dili ve tasarımı değiştirme'
276 rss: 'RSS akışını aktifleştirme' 274 rss: 'RSS akışını aktifleştirme'
277 # tagging_rules: 'Write rules to automatically tag your articles' 275 # tagging_rules: 'Write rules to automatically tag your articles'
@@ -285,6 +283,7 @@ quickstart:
285 # import: 'Configure import' 283 # import: 'Configure import'
286 first_steps: 284 first_steps:
287 title: 'İlk adım' 285 title: 'İlk adım'
286 # description: "Now wallabag is well configured, it's time to archive the web. You can click on the top right sign + to add a link."
288 new_article: 'İlk makalenizi kaydedin' 287 new_article: 'İlk makalenizi kaydedin'
289 unread_articles: 'Ve bunu sınıflandırın!' 288 unread_articles: 'Ve bunu sınıflandırın!'
290 migrate: 289 migrate:
@@ -294,11 +293,15 @@ quickstart:
294 wallabag_v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" 293 wallabag_v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın"
295 wallabag_v2: "wallabag v2 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" 294 wallabag_v2: "wallabag v2 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın"
296 readability: "Readability üzerindeki verilerinizi wallabag'e aktarın'" 295 readability: "Readability üzerindeki verilerinizi wallabag'e aktarın'"
296 instapaper: "Instapaper üzerindeki verilerinizi wallabag'e aktarın'"
297 developer: 297 developer:
298 # title: 'Developers' 298 # title: 'Developers'
299 # description: 'We also thought to the developers: Docker, API, translations, etc.'
299 # create_application: 'Create your third application' 300 # create_application: 'Create your third application'
301 # use_docker: 'Use Docker to install wallabag'
300 docs: 302 docs:
301 title: 'Dokümantasyon' 303 title: 'Dokümantasyon'
304 # description: "There are so much features in wallabag. Don't hesitate to read the manual to know them and to learn how to use them."
302 # annotate: 'Annotate your article' 305 # annotate: 'Annotate your article'
303 export: 'Makalelerinizi ePUB ya da PDF formatına çevirme' 306 export: 'Makalelerinizi ePUB ya da PDF formatına çevirme'
304 search_filters: 'Makaleleri görüntülemek için arama motorlarını ve filteri kullanma' 307 search_filters: 'Makaleleri görüntülemek için arama motorlarını ve filteri kullanma'
@@ -349,14 +352,18 @@ import:
349 # how_to: 'Please select your Readability export and click on the below button to upload and import it.' 352 # how_to: 'Please select your Readability export and click on the below button to upload and import it.'
350 worker: 353 worker:
351 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:" 354 # enabled: "Import is made asynchronously. Once the import task is started, an external worker will handle jobs one at a time. The current service is:"
352 # firefox: 355 firefox:
353 # page_title: 'Import > Firefox' 356 page_title: 'İçe Aktar > Firefox'
354 # description: "This importer will import all your Firefox bookmarks. <p>For Firefox, just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file." 357 # description: "This importer will import all your Firefox bookmarks. Just go to your bookmarks (Ctrl+Maj+O), then into \"Import and backup\", choose \"Backup...\". You will obtain a .json file."
355 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 358 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
356 # chrome: 359 chrome:
357 # page_title: 'Import > Chrome' 360 page_title: 'İçe Aktar > Chrome'
358 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>" 361 # description: "This importer will import all your Chrome bookmarks. The location of the file depends on your operating system : <ul><li>On Linux, go into the <code>~/.config/chromium/Default/</code> directory</li><li>On Windows, it should be at <code>%LOCALAPPDATA%\\Google\\Chrome\\User Data\\Default</code></li><li>On OS X, it should be at <code>~/Library/Application Support/Google/Chrome/Default/Bookmarks</code></li></ul>Once you got there, copy the Bookmarks file someplace you'll find.<em><br>Note that if you have Chromium instead of Chrome, you'll have to correct paths accordingly.</em></p>"
359 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched." 362 # how_to: "Please choose the bookmark backup file and click on the button below to import it. Note that the process may take a long time since all articles have to be fetched."
363 instapaper:
364 page_title: 'İçe Aktar > Instapaper'
365 # description: 'This importer will import all your Instapaper articles. On the settings (https://www.instapaper.com/user) page, click on "Download .CSV file" in the "Export" section. A CSV file will be downloaded (like "instapaper-export.csv").'
366 # how_to: 'Please select your Instapaper export and click on the below button to upload and import it.'
360 367
361developer: 368developer:
362 # page_title: 'Developer' 369 # page_title: 'Developer'
@@ -383,12 +390,14 @@ developer:
383 # page_title: 'Developer > New client' 390 # page_title: 'Developer > New client'
384 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.' 391 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
385 # form: 392 # form:
393 # name_label: 'Name of the client'
386 # redirect_uris_label: 'Redirect URIs' 394 # redirect_uris_label: 'Redirect URIs'
387 # save_label: 'Create a new client' 395 # save_label: 'Create a new client'
388 # action_back: 'Back' 396 # action_back: 'Back'
389 # client_parameter: 397 # client_parameter:
390 # page_title: 'Developer > Client parameters' 398 # page_title: 'Developer > Client parameters'
391 # page_description: 'Here are your client parameters.' 399 # page_description: 'Here are your client parameters.'
400 # field_name: 'Client name'
392 # field_id: 'Client ID' 401 # field_id: 'Client ID'
393 # field_secret: 'Client secret' 402 # field_secret: 'Client secret'
394 # back: 'Back' 403 # back: 'Back'
@@ -406,6 +415,33 @@ developer:
406 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.' 415 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
407 # back: 'Back' 416 # back: 'Back'
408 417
418user:
419 # page_title: Users management
420 # new_user: Create a new user
421 # edit_user: Edit an existing user
422 # description: "Here you can manage all users (create, edit and delete)"
423 # list:
424 # actions: Actions
425 # edit_action: Edit
426 # yes: Yes
427 # no: No
428 # create_new_one: Create a new user
429 form:
430 username_label: 'Kullanıcı adı'
431 # name_label: 'Name'
432 password_label: 'Şifre'
433 repeat_new_password_label: 'Yeni şifrenin tekrarı'
434 plain_password_label: '????'
435 email_label: 'E-posta'
436 # enabled_label: 'Enabled'
437 # locked_label: 'Locked'
438 # last_login_label: 'Last login'
439 # twofactor_label: Two factor authentication
440 # save: Save
441 # delete: Delete
442 # delete_confirm: Are you sure?
443 # back_to_list: Back to list
444
409flashes: 445flashes:
410 config: 446 config:
411 notice: 447 notice:
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml
index dfe2c64d..313339ed 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml
@@ -1,6 +1,6 @@
1validator: 1validator:
2 password_must_match: 'De indtastede adgangskoder skal være ens' 2 password_must_match: 'De indtastede adgangskoder skal være ens'
3 password_too_short: 'Adgangskoden skal være mindst 8 tegn' 3 password_too_short: 'Adgangskoden skal være mindst 8 tegn'
4# password_wrong_value: 'Wrong value for your current password' 4 # password_wrong_value: 'Wrong value for your current password'
5# item_per_page_too_high: 'This will certainly kill the app' 5 # item_per_page_too_high: 'This will certainly kill the app'
6# rss_limit_too_hight: 'This will certainly kill the app' 6 # rss_limit_too_hight: 'This will certainly kill the app'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.tr.yml
index 80ab470a..1b358965 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.tr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/validators.tr.yml
@@ -1,6 +1,6 @@
1validator: 1validator:
2# password_must_match: 'The password fields must match.' 2 # password_must_match: 'The password fields must match.'
3# password_too_short: 'Password should by at least 8 chars long' 3 # password_too_short: 'Password should by at least 8 chars long'
4# password_wrong_value: 'Wrong value for your current password' 4 # password_wrong_value: 'Wrong value for your current password'
5# item_per_page_too_high: 'This will certainly kill the app' 5 # item_per_page_too_high: 'This will certainly kill the app'
6# rss_limit_too_hight: 'This will certainly kill the app' 6 # rss_limit_too_hight: 'This will certainly kill the app'
diff --git a/src/Wallabag/CoreBundle/Resources/views/base.html.twig b/src/Wallabag/CoreBundle/Resources/views/base.html.twig
index 0f88901a..a1a9a136 100644
--- a/src/Wallabag/CoreBundle/Resources/views/base.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/base.html.twig
@@ -43,7 +43,7 @@
43 {% block scripts %} 43 {% block scripts %}
44 {% endblock %} 44 {% endblock %}
45 45
46 <title>wallabag - {% block title %}{% endblock %}</title> 46 <title>{% block title %}{% endblock %} – wallabag</title>
47 {% endblock %} 47 {% endblock %}
48 </head> 48 </head>
49 49
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 6446cf2c..ff7ef73a 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
@@ -191,6 +191,7 @@
191 « {{ tagging_rule.rule }} » 191 « {{ tagging_rule.rule }} »
192 {{ 'config.form_rules.then_tag_as_label'|trans }} 192 {{ 'config.form_rules.then_tag_as_label'|trans }}
193 « {{ tagging_rule.tags|join(', ') }} » 193 « {{ tagging_rule.tags|join(', ') }} »
194 <a href="{{ path('edit_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.edit_rule_label'|trans }}" class="tool mode_edit">✎</a>
194 <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> 195 <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>
195 </li> 196 </li>
196 {% endfor %} 197 {% endfor %}
@@ -301,46 +302,4 @@
301 </table> 302 </table>
302 </div> 303 </div>
303 </div> 304 </div>
304
305 {% if is_granted('ROLE_SUPER_ADMIN') %}
306 <h2>{{ 'config.tab_menu.new_user'|trans }}</h2>
307
308 {{ form_start(form.new_user) }}
309 {{ form_errors(form.new_user) }}
310
311 <fieldset class="w500p inline">
312 <div class="row">
313 {{ form_label(form.new_user.username) }}
314 {{ form_errors(form.new_user.username) }}
315 {{ form_widget(form.new_user.username) }}
316 </div>
317 </fieldset>
318
319 <fieldset class="w500p inline">
320 <div class="row">
321 {{ form_label(form.new_user.plainPassword.first) }}
322 {{ form_errors(form.new_user.plainPassword.first) }}
323 {{ form_widget(form.new_user.plainPassword.first) }}
324 </div>
325 </fieldset>
326
327 <fieldset class="w500p inline">
328 <div class="row">
329 {{ form_label(form.new_user.plainPassword.second) }}
330 {{ form_errors(form.new_user.plainPassword.second) }}
331 {{ form_widget(form.new_user.plainPassword.second) }}
332 </div>
333 </fieldset>
334
335 <fieldset class="w500p inline">
336 <div class="row">
337 {{ form_label(form.new_user.email) }}
338 {{ form_errors(form.new_user.email) }}
339 {{ form_widget(form.new_user.email) }}
340 </div>
341 </fieldset>
342
343 {{ form_rest(form.new_user) }}
344 {% endif %}
345 </form>
346{% endblock %} 305{% endblock %}
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 8d841b4c..1c0430e8 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,7 +1,7 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %} 3{% block title %}
4 {% include "@WallabagCore/themes/_title.html.twig" %} 4 {% include "@WallabagCore/themes/common/Entry/_title.html.twig" %}
5{% endblock %} 5{% endblock %}
6 6
7{% block content %} 7{% block content %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig
new file mode 100644
index 00000000..b52634fd
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Exception/error.html.twig
@@ -0,0 +1,24 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'error.page_title'|trans }}{% endblock %}
4
5{% block body_class %}login{% endblock %}
6
7{% block menu %}{% endblock %}
8{% block messages %}{% endblock %}
9{% block header %}{% endblock %}
10
11{% block content %}
12<main class="valign-wrapper">
13 <div class="valign row">
14 <div class="card sw">
15 <div class="center"><img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-w.png') }}" alt="wallabag logo" /></div>
16 <h2>{{ status_code }}: {{ status_text }}</h2>
17 <p>{{ exception.message }}</p>
18 </div>
19 </div>
20</main>
21{% endblock %}
22
23{% block footer %}
24{% endblock %}
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
deleted file mode 100644
index 918249dc..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig
+++ /dev/null
@@ -1,169 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'about.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 <h2>{{ 'about.top_menu.who_behind_wallabag'|trans }}</h2>
7
8 <dl>
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://www.loeuillet.org">{{ 'about.who_behind_wallabag.website'|trans }}</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">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
13
14 <dt>{{ 'about.who_behind_wallabag.many_contributors'|trans|raw }}</dt>
15
16 <dt>{{ 'about.who_behind_wallabag.project_website'|trans }}</dt>
17 <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd>
18
19 <dt>{{ 'about.who_behind_wallabag.license'|trans }}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt>
20
21 <dt>{{ 'about.who_behind_wallabag.version'|trans }}: {{ version }}</dt>
22 </dl>
23
24 <h2>{{ 'about.top_menu.getting_help'|trans }}</h2>
25
26 <dl>
27 <dt>{{ 'about.getting_help.documentation'|trans }}</dt>
28 <dd><a href="http://doc.wallabag.org/en/master/">english</a></dd>
29 <dd><a href="http://doc.wallabag.org/fr/master/">français</a></dd>
30
31 <dt>{{ 'about.getting_help.bug_reports'|trans }}</dt>
32 <dd>{{ 'about.getting_help.support'|trans|raw }}</dd>
33 </dl>
34
35 <h2>{{ 'about.top_menu.helping'|trans }}</h2>
36
37 <p>{{ 'about.helping.description'|trans }}</p>
38
39 <dl>
40 <dd>{{ 'about.helping.by_contributing_2'|trans }} <a href="https://github.com/wallabag/wallabag/issues/1254">{{ 'about.helping.by_contributing'|trans }}</a></dd>
41 <dd><a href="{{ paypal_url }}">{{ 'about.helping.by_paypal'|trans }}</a></dd>
42 </dl>
43
44 <h2>{{ 'about.top_menu.contributors'|trans }}</h2>
45 <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{{ 'about.contributors.description'|trans }}</a></p>
46
47 <h2>{{ 'about.top_menu.third_party'|trans }}</h2>
48 <p>{{ 'about.third_party.description'|trans }}</p>
49 <table class="striped">
50 <tr>
51 <th>{{ 'about.third_party.package'|trans }}</th>
52 <th>{{ 'about.third_party.license'|trans }}</th>
53 </tr>
54 <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr>
55 <tr><td>CraueConfigBundle</td><td>MIT</td></tr>
56 <tr><td>doctrine/annotations</td><td>MIT</td></tr>
57 <tr><td>doctrine/cache</td><td>MIT</td></tr>
58 <tr><td>doctrine/collections</td><td>MIT</td></tr>
59 <tr><td>doctrine/common</td><td>MIT</td></tr>
60 <tr><td>doctrine/dbal</td><td>MIT</td></tr>
61 <tr><td>doctrine/doctrine-bundle</td><td>MIT</td></tr>
62 <tr><td>doctrine/doctrine-cache-bundle</td><td>MIT</td></tr>
63 <tr><td>doctrine/doctrine-migrations-bundle</td><td>MIT</td></tr>
64 <tr><td>doctrine/inflector</td><td>MIT</td></tr>
65 <tr><td>doctrine/instantiator</td><td>MIT</td></tr>
66 <tr><td>doctrine/lexer</td><td>MIT</td></tr>
67 <tr><td>doctrine/migrations</td><td>LGPL-2.1</td></tr>
68 <tr><td>doctrine/orm</td><td>MIT</td></tr>
69 <tr><td>friendsofsymfony/oauth-server-bundle</td><td>MIT</td></tr>
70 <tr><td>friendsofsymfony/oauth2-php</td><td>MIT</td></tr>
71 <tr><td>friendsofsymfony/rest-bundle</td><td>MIT</td></tr>
72 <tr><td>friendsofsymfony/user-bundle</td><td>MIT</td></tr>
73 <tr><td>gedmo/doctrine-extensions</td><td>MIT</td></tr>
74 <tr><td>grandt/binstring</td><td>LGPL-2.1</td></tr>
75 <tr><td>grandt/phpepub</td><td>LGPL-2.1</td></tr>
76 <tr><td>grandt/phpresizegif</td><td>LGPL-2.1</td></tr>
77 <tr><td>grandt/phpzipmerge</td><td>LGPL-2.1</td></tr>
78 <tr><td>grandt/relativepath</td><td>LGPL-2.1</td></tr>
79 <tr><td>guzzlehttp/guzzle</td><td>MIT</td></tr>
80 <tr><td>guzzlehttp/ringphp</td><td>MIT</td></tr>
81 <tr><td>guzzlehttp/streams</td><td>MIT</td></tr>
82 <tr><td>hoa/compiler</td><td>BSD-3-Clause</td></tr>
83 <tr><td>hoa/consistency</td><td>BSD-3-Clause</td></tr>
84 <tr><td>hoa/event</td><td>BSD-3-Clause</td></tr>
85 <tr><td>hoa/exception</td><td>BSD-3-Clause</td></tr>
86 <tr><td>hoa/file</td><td>BSD-3-Clause</td></tr>
87 <tr><td>hoa/iterator</td><td>BSD-3-Clause</td></tr>
88 <tr><td>hoa/math</td><td>BSD-3-Clause</td></tr>
89 <tr><td>hoa/protocol</td><td>BSD-3-Clause</td></tr>
90 <tr><td>hoa/regex</td><td>BSD-3-Clause</td></tr>
91 <tr><td>hoa/ruler</td><td>BSD-3-Clausev
92 <tr><td>hoa/stream</td><td>BSD-3-Clause</td></tr>
93 <tr><td>hoa/ustring</td><td>BSD-3-Clause</td></tr>
94 <tr><td>hoa/visitor</td><td>BSD-3-Clause</td></tr>
95 <tr><td>hoa/zformat</td><td>BSD-3-Clause</td></tr>
96 <tr><td>htmlawed/htmlawed</td><td>GPL-2.0+ or LGPL-3.0</td></tr>
97 <tr><td>incenteev/composer-parameter-handler</td><td>MIT</td></tr>
98 <tr><td>j0k3r/graby</td><td>AGPL-3.0</td></tr>
99 <tr><td>j0k3r/graby-site-config</td><td>AGPL-3.0</td></tr>
100 <tr><td>j0k3r/php-readability</td><td>Apache-2.0</td></tr>
101 <tr><td>j0k3r/safecurl</td><td>MIT</td></tr>
102 <tr><td>jdorn/sql-formatter</td><td>MIT</td></tr>
103 <tr><td>jms/metadata</td><td>Apache</td></tr>
104 <tr><td>jms/parser-lib</td><td>Apache2</td></tr>
105 <tr><td>jms/serializer</td><td>Apache2</td></tr>
106 <tr><td>jms/serializer-bundle</td><td>Apache2</td></tr>
107 <tr><td>kphoen/rulerz</td><td>MIT</td></tr>
108 <tr><td>kphoen/rulerz-bundle</td><td>MIT</td></tr>
109 <tr><td>kriswallsmith/assetic</td><td>MIT</td></tr>
110 <tr><td>lexik/form-filter-bundle</td><td>MIT</td></tr>
111 <tr><td>liip/theme-bundle</td><td>MIT</td></tr>
112 <tr><td>mgargano/simplehtmldom</td><td>MIT</td></tr>
113 <tr><td>michelf/php-markdown</td><td>BSD-3-Clause</td></tr>
114 <tr><td>monolog/monolog</td><td>MIT</td></tr>
115 <tr><td>neitanod/forceutf8</td><td>BSD-3-Clause</td></tr>
116 <tr><td>nelmio/api-doc-bundle</td><td>MIT</td></tr>
117 <tr><td>nelmio/cors-bundle</td><td>MIT</td></tr>
118 <tr><td>ocramius/proxy-manager</td><td>MIT</td></tr>
119 <tr><td>pagerfanta/pagerfanta</td><td>MIT</td></tr>
120 <tr><td>paragonie/random_compat</td><td>MIT</td></tr>
121 <tr><td>phpcollection/phpcollection</td><td>Apache2</td></tr>
122 <tr><td>phpoption/phpoption</td><td>Apache2</td></tr>
123 <tr><td>phpzip/phpzip</td><td>LGPL-2.1</td></tr>
124 <tr><td>psr/log</td><td>MIT</td></tr>
125 <tr><td>react/promise</td><td>MIT</td></tr>
126 <tr><td>scheb/two-factor-bundle</td><td>MIT</td></tr>
127 <tr><td>sensio/distribution-bundle</td><td>MIT</td></tr>
128 <tr><td>sensio/framework-extra-bundle</td><td>MIT</td></tr>
129 <tr><td>sensiolabs/security-checker</td><td>MIT</td></tr>
130 <tr><td>simplepie/simplepie</td><td>BSD-3-Clause</td></tr>
131 <tr><td>smalot/pdfparser</td><td>GPL-3.0</td></tr>
132 <tr><td>sonata-project/google-authenticator</td><td>MIT</td></tr>
133 <tr><td>stof/doctrine-extensions-bundle</td><td>MIT</td></tr>
134 <tr><td>swiftmailer/swiftmailer</td><td>MIT</td></tr>
135 <tr><td>symfony/assetic-bundle</td><td>MIT</td></tr>
136 <tr><td>symfony/monolog-bundle</td><td>MIT</td></tr>
137 <tr><td>All of Symfony</td><td>MIT-licenced</td></tr>
138 <tr><td>tecnickcom/tcpdf</td><td>LGPLv3</td></tr>
139 <tr><td>twig/extensions</td><td>MIT</td></tr>
140 <tr><td>twig/twig</td><td>BSD-3-Clause</td></tr>
141 <tr><td>wallabag/php-mobi</td><td>Apache-2.0</td></tr>
142 <tr><td>willdurand/hateoas</td><td>MIT</td></tr>
143 <tr><td>willdurand/hateoas-bundle</td><td>MIT</td></tr>
144 <tr><td>willdurand/jsonp-callback-validator</td><td>MIT</td></tr>
145 <tr><td>willdurand/negotiation</td><td>MIT</td></tr>
146 <tr><td>zendframework/zend-code</td><td>BSD-3-Clause</td></tr>
147 <tr><td>zendframework/zend-eventmanager</td><td>BSD-3-Clause</td></tr>
148 <tr><td>doctrine/data-fixtures</td><td>MIT</td></tr>
149 <tr><td>doctrine/doctrine-fixtures-bundle</td><td>MIT</td></tr>
150 <tr><td>phpdocumentor/reflection-docblock</td><td>MIT</td></tr>
151 <tr><td>phpspec/prophecy</td><td>MIT</td></tr>
152 <tr><td>phpunit/php-code-coverage</td><td>BSD-3-Clause</td></tr>
153 <tr><td>phpunit/php-file-iterator</td><td>BSD-3-Clause</td></tr>
154 <tr><td>phpunit/php-text-template</td><td>BSD-3-Clause</td></tr>
155 <tr><td>phpunit/php-timer</td><td>BSD-3-Clause</td></tr>
156 <tr><td>phpunit/php-token-stream</td><td>BSD-3-Clause</td></tr>
157 <tr><td>phpunit/phpunit</td><td>BSD-3-Clause</td></tr>
158 <tr><td>phpunit/phpunit-mock-objects</td><td>BSD-3-Clause</td></tr>
159 <tr><td>sebastian/comparator</td><td>BSD-3-Clause</td></tr>
160 <tr><td>sebastian/diff</td><td>BSD-3-Clause</td></tr>
161 <tr><td>sebastian/environment</td><td>BSD-3-Clause</td></tr>
162 <tr><td>sebastian/exporter</td><td>BSD-3-Clause</td></tr>
163 <tr><td>sebastian/global-state</td><td>BSD-3-Clause</td></tr>
164 <tr><td>sebastian/recursion-context</td><td>BSD-3-Clause</td></tr>
165 <tr><td>sebastian/version</td><td>BSD-3-Clause</td></tr>
166 <tr><td>sensio/generator-bundle</td><td>MIT</td></tr>
167 <tr><td>symfony/phpunit-bridge</td><td>MIT</td></tr>
168 </table>
169{% endblock %}
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
deleted file mode 100644
index b529a0ac..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig
+++ /dev/null
@@ -1,28 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'howto.page_title'|trans }}{% endblock %}
4
5{% block content %}
6 <h2>{{ 'howto.page_title'|trans }}</h2>
7
8 <p>{{ 'howto.page_description'|trans }}</p>
9 <ul>
10 <li><a href="{{ path('new') }}">{{ 'howto.form.description'|trans }}</a></li>
11 </ul>
12 <h3>{{ 'howto.top_menu.browser_addons'|trans }}</h3>
13 <ul>
14 <li><a href="{{ addonsUrl.firefox }}" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
15 <li><a href="{{ addonsUrl.chrome }}" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
16 </ul>
17 <h3>{{ 'howto.top_menu.mobile_apps'|trans }}</h3>
18 <ul>
19 <li>Android: <a href="{{ addonsUrl.f_droid }}" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="{{ addonsUrl.google_play }}" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li>
20 <li>iOS: <a href="{{ addonsUrl.ios }}" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
21 <li>Windows Phone: <a href="{{ addonsUrl.windows }}" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li>
22 </ul>
23 <h3>{{ 'howto.top_menu.bookmarklet'|trans }}</h3>
24 <p>
25 {{ 'howto.bookmarklet.description'|trans }}
26 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %}
27
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
deleted file mode 100644
index ea1c1cbe..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig
+++ /dev/null
@@ -1,67 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <h3>{{ 'quickstart.intro.title'|trans }}</h3>
8 <p>{{ 'quickstart.intro.paragraph_1'|trans }}</p>
9 <p>{{ 'quickstart.intro.paragraph_2'|trans }}</p>
10
11 <h4>{{ 'quickstart.configure.title'|trans }}</h4>
12 <ul>
13 <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li>
14 <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li>
15 <li><a href="{{ path('config') }}#set5">{{ 'quickstart.configure.tagging_rules'|trans }}</a></li>
16 </ul>
17
18 {% if is_granted('ROLE_SUPER_ADMIN') %}
19 <h4>{{ 'quickstart.admin.title'|trans }}</h4>
20 <p>{{ 'quickstart.admin.description'|trans }}</p>
21 <ul>
22 <li><a href="{{ path('config') }}#set6">{{ 'quickstart.admin.new_user'|trans }}</a></li>
23 <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{{ 'quickstart.admin.analytics'|trans }}</a></li>
24 <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{{ 'quickstart.admin.sharing'|trans }}</a></li>
25 <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{{ 'quickstart.admin.export'|trans }}</a></li>
26 <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{{ 'quickstart.admin.import'|trans }}</a></li>
27 </ul>
28 {% endif %}
29
30 <h4>{{ 'quickstart.first_steps.title'|trans }}</h4>
31 <ul>
32 <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li>
33 <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li>
34 </ul>
35
36 <h4>{{ 'quickstart.migrate.title'|trans }}</h4>
37 <p>{{ 'quickstart.migrate.description'|trans }}</p>
38 <ul>
39 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li>
40 <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li>
41 <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li>
42 <li><a href="{{ path('import_readability') }}">{{ 'quickstart.migrate.readability'|trans }}</a></li>
43 </ul>
44
45 <h4>{{ 'quickstart.developer.title'|trans }}</h4>
46 <ul>
47 <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li>
48 </ul>
49
50 <h4>{{ 'quickstart.docs.title'|trans }}</h4>
51 <ul>
52 <li><a href="http://doc.wallabag.org/en/master/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li>
53 <li><a href="http://doc.wallabag.org/en/master/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li>
54 <li><a href="http://doc.wallabag.org/en/master/user/filters.html">{{ 'quickstart.docs.search_filters'|trans }}</a></li>
55 <li><a href="http://doc.wallabag.org/en/master/user/errors_during_fetching.html">{{ 'quickstart.docs.fetching_errors'|trans }}</a></li>
56 <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li>
57 </ul>
58
59 <h4>{{ 'quickstart.support.title'|trans }}</h4>
60 <p>{{ 'quickstart.support.description'|trans }}</p>
61 <ul>
62 <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li>
63 <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li>
64 <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li>
65 </ul>
66
67{% 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 4fd4d317..30fd0d85 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
@@ -42,6 +42,7 @@
42 </li>--> 42 </li>-->
43 <li><a href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a></li> 43 <li><a href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a></li>
44 {% if is_granted('ROLE_SUPER_ADMIN') %} 44 {% if is_granted('ROLE_SUPER_ADMIN') %}
45 <li><a href="{{ path('user_index') }}">{{ 'menu.left.users_management'|trans }}</a></li>
45 <li><a href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a></li> 46 <li><a href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a></li>
46 {% endif %} 47 {% endif %}
47 <li><a href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a></li> 48 <li><a href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a></li>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client.html.twig
index 8a5da71a..8a5da71a 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client_parameters.html.twig
index b498cceb..b498cceb 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/client_parameters.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/howto_app.html.twig
index acbc2c88..acbc2c88 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/howto_app.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/index.html.twig
index 3430c0d4..3430c0d4 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Developer/index.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/_title.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/_title.html.twig
index d1c2f203..d1c2f203 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/_title.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/_title.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/entries.xml.twig
index 288bb54f..288bb54f 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/entries.xml.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/share.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig
index b82b3d3d..b82b3d3d 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/share.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Entry/share.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig
new file mode 100644
index 00000000..631bcb88
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Mail/forgotPassword.txt.twig
@@ -0,0 +1,6 @@
1Hello {{username}}!
2
3To reset your password - please visit {{confirmationUrl}}
4
5Regards,
6Wallabag bot
diff --git a/src/Wallabag/CoreBundle/Resources/views/_bookmarklet.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig
index 966a84db..966a84db 100644
--- a/src/Wallabag/CoreBundle/Resources/views/_bookmarklet.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/_bookmarklet.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/about.html.twig
index d0b94279..d0b94279 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/about.html.twig
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/howto.html.twig
index 6a177d6b..67a10190 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/howto.html.twig
@@ -35,7 +35,7 @@
35 <div class="col s12"> 35 <div class="col s12">
36 <h5>{{ 'howto.top_menu.bookmarklet'|trans }}</h5> 36 <h5>{{ 'howto.top_menu.bookmarklet'|trans }}</h5>
37 {{ 'howto.bookmarklet.description'|trans }} 37 {{ 'howto.bookmarklet.description'|trans }}
38 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} 38 {% include '@WallabagCore/themes/common/Static/_bookmarklet.html.twig' %}
39 </div> 39 </div>
40 40
41 </div> 41 </div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/quickstart.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/quickstart.html.twig
new file mode 100644
index 00000000..226bafea
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/common/Static/quickstart.html.twig
@@ -0,0 +1,119 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel settings">
10
11 <div class="row">
12 <h3>{{ 'quickstart.intro.title'|trans }}</h3>
13
14 <ul class="row data">
15 <li class="col l4 m6 s12">
16 <div class="card teal darken-1">
17 <div class="card-content white-text">
18 <span class="card-title">{{ 'quickstart.configure.title'|trans }}</span>
19 <p>{{ 'quickstart.configure.description'|trans }}</p>
20 </div>
21 <div class="card-action">
22 <ul>
23 <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li>
24 <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li>
25 <li><a href="{{ path('config') }}#set5">{{ 'quickstart.more'|trans }}</a></li>
26 </ul>
27 </div>
28 </div>
29 </li>
30
31 <li class="col l4 m6 s12">
32 <div class="card green darken-1">
33 <div class="card-content white-text">
34 <span class="card-title">{{ 'quickstart.first_steps.title'|trans }}</span>
35 <p>{{ 'quickstart.first_steps.description'|trans }}</p>
36 </div>
37 <div class="card-action">
38 <ul>
39 <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li>
40 <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li>
41 </ul>
42 </div>
43 </div>
44 </li>
45
46 <li class="col l4 m6 s12">
47 <div class="card light-green darken-1">
48 <div class="card-content white-text">
49 <span class="card-title">{{ 'quickstart.migrate.title'|trans }}</span>
50 <p>{{ 'quickstart.migrate.description'|trans }}</p>
51 </div>
52 <div class="card-action">
53 <ul>
54 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li>
55 <li><a href="{{ path('import_readability') }}">{{ 'quickstart.migrate.readability'|trans }}</a></li>
56 <li><a href="{{ path('import_instapaper') }}">{{ 'quickstart.migrate.instapaper'|trans }}</a></li>
57 <li><a href="{{ path('import') }}">{{ 'quickstart.more'|trans }}</a></li>
58 </ul>
59 </div>
60 </div>
61 </li>
62
63 <li class="col l4 m6 s12">
64 <div class="card blue darken-1">
65 <div class="card-content white-text">
66 <span class="card-title">{{ 'quickstart.developer.title'|trans }}</span>
67 <p>{{ 'quickstart.developer.description'|trans }}</p>
68 </div>
69 <div class="card-action">
70 <ul>
71 <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li>
72 <li><a href="http://doc.wallabag.org/en/master/developer/docker.html">{{ 'quickstart.developer.use_docker'|trans }}</a></li>
73 <li><a href="http://doc.wallabag.org/en/master/index.html#dev-docs">{{ 'quickstart.more'|trans }}</a></li>
74 </ul>
75 </div>
76 </div>
77 </li>
78
79 <li class="col l4 m6 s12">
80 <div class="card light-blue darken-1">
81 <div class="card-content white-text">
82 <span class="card-title">{{ 'quickstart.docs.title'|trans }}</span>
83 <p>{{ 'quickstart.docs.description'|trans }}</p>
84 </div>
85 <div class="card-action">
86 <ul>
87 <li><a href="http://doc.wallabag.org/en/master/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li>
88 <li><a href="http://doc.wallabag.org/en/master/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li>
89 <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li>
90 </ul>
91 </div>
92 </div>
93 </li>
94
95 <li class="col l4 m6 s12">
96 <div class="card cyan darken-1">
97 <div class="card-content white-text">
98 <span class="card-title">{{ 'quickstart.support.title'|trans }}</span>
99 <p>{{ 'quickstart.support.description'|trans }}</p>
100 </div>
101 <div class="card-action">
102 <ul>
103 <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li>
104 <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li>
105 <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li>
106 </ul>
107 </div>
108 </div>
109 </li>
110
111 </ul>
112
113 </div>
114
115 </div>
116 </div>
117 </div>
118
119{% 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 5330c353..270c077f 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
@@ -16,9 +16,6 @@
16 <li class="tab col s3"><a href="#set3">{{ 'config.tab_menu.user_info'|trans }}</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">{{ 'config.tab_menu.password'|trans }}</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">{{ 'config.tab_menu.rules'|trans }}</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') %}
20 <li class="tab col s3"><a href="#set6">{{ 'config.tab_menu.new_user'|trans }}</a></li>
21 {% endif %}
22 </ul> 19 </ul>
23 </div> 20 </div>
24 21
@@ -157,11 +154,9 @@
157 <div class="row"> 154 <div class="row">
158 <div class="input-field col s12"> 155 <div class="input-field col s12">
159 {{ 'config.form_user.two_factor_description'|trans }} 156 {{ 'config.form_user.two_factor_description'|trans }}
160 </div>
161 </div>
162 157
163 <div class="row"> 158 <br />
164 <div class="input-field col s12"> 159
165 {{ form_widget(form.user.twoFactorAuthentication) }} 160 {{ form_widget(form.user.twoFactorAuthentication) }}
166 {{ form_label(form.user.twoFactorAuthentication) }} 161 {{ form_label(form.user.twoFactorAuthentication) }}
167 {{ form_errors(form.user.twoFactorAuthentication) }} 162 {{ form_errors(form.user.twoFactorAuthentication) }}
@@ -218,6 +213,9 @@
218 « {{ tagging_rule.rule }} » 213 « {{ tagging_rule.rule }} »
219 {{ 'config.form_rules.then_tag_as_label'|trans }} 214 {{ 'config.form_rules.then_tag_as_label'|trans }}
220 « {{ tagging_rule.tags|join(', ') }} » 215 « {{ tagging_rule.tags|join(', ') }} »
216 <a href="{{ path('edit_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.edit_rule_label'|trans }}">
217 <i class="tool grey-text mode_edit material-icons">mode_edit</i>
218 </a>
221 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}"> 219 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}">
222 <i class="tool grey-text delete material-icons">delete</i> 220 <i class="tool grey-text delete material-icons">delete</i>
223 </a> 221 </a>
@@ -336,49 +334,6 @@
336 </div> 334 </div>
337 </div> 335 </div>
338 </div> 336 </div>
339
340 {% if is_granted('ROLE_SUPER_ADMIN') %}
341 <div id="set6" class="col s12">
342 {{ form_start(form.new_user) }}
343 {{ form_errors(form.new_user) }}
344
345 <div class="row">
346 <div class="input-field col s12">
347 {{ form_label(form.new_user.username) }}
348 {{ form_errors(form.new_user.username) }}
349 {{ form_widget(form.new_user.username) }}
350 </div>
351 </div>
352
353 <div class="row">
354 <div class="input-field col s12">
355 {{ form_label(form.new_user.plainPassword.first) }}
356 {{ form_errors(form.new_user.plainPassword.first) }}
357 {{ form_widget(form.new_user.plainPassword.first) }}
358 </div>
359 </div>
360
361 <div class="row">
362 <div class="input-field col s12">
363 {{ form_label(form.new_user.plainPassword.second) }}
364 {{ form_errors(form.new_user.plainPassword.second) }}
365 {{ form_widget(form.new_user.plainPassword.second) }}
366 </div>
367 </div>
368
369 <div class="row">
370 <div class="input-field col s12">
371 {{ form_label(form.new_user.email) }}
372 {{ form_errors(form.new_user.email) }}
373 {{ form_widget(form.new_user.email) }}
374 </div>
375 </div>
376
377 {{ form_widget(form.new_user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
378 {{ form_rest(form.new_user) }}
379 </form>
380 </div>
381 {% endif %}
382 </div> 337 </div>
383 338
384 </div> 339 </div>
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
deleted file mode 100644
index 8a5da71a..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig
+++ /dev/null
@@ -1,37 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.client.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9
10 <div class="row">
11 <p>{{ 'developer.client.page_description'|trans }}</p>
12 {{ form_start(form) }}
13 {{ form_errors(form) }}
14
15 <div class="input-field col s12">
16 {{ form_label(form.name) }}
17 {{ form_errors(form.name) }}
18 {{ form_widget(form.name) }}
19 </div>
20
21 <div class="input-field col s12">
22 {{ form_label(form.redirect_uris) }}
23 {{ form_errors(form.redirect_uris) }}
24 {{ form_widget(form.redirect_uris) }}
25 </div>
26
27 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client.action_back'|trans }}</a>
28 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
29
30 {{ form_rest(form) }}
31 </div>
32
33 </div>
34 </div>
35</div>
36
37{% endblock %}
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
deleted file mode 100644
index b498cceb..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig
+++ /dev/null
@@ -1,23 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.client_parameter.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9 <div class="row">
10 <p>{{ 'developer.client_parameter.page_description'|trans }}</p>
11 <ul>
12 <li>{{ 'developer.client_parameter.field_name'|trans }}: <strong><pre>{{ client_name }}</pre></strong></li>
13 <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li>
14 <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li>
15 </ul>
16
17 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client_parameter.back'|trans }}</a>
18 <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{{ 'developer.client_parameter.read_howto'|trans }}</a>
19 </div>
20 </div>
21 </div>
22</div>
23{% endblock %}
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
deleted file mode 100644
index acbc2c88..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig
+++ /dev/null
@@ -1,63 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.howto.page_title'|trans }}{% endblock %}
4
5{% block css %}
6 {{ parent() }}
7 <link rel="stylesheet" href="{{ asset('https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/themes/prism-dark.min.css') }}">
8{% endblock %}
9
10{% block content %}
11<div class="row">
12 <div class="col s12">
13 <div class="card-panel settings">
14
15 <div class="row">
16 <p>{{ 'developer.howto.description.paragraph_1'|trans|raw }}</p>
17 <p>{{ 'developer.howto.description.paragraph_2'|trans }}</p>
18 <p>{{ 'developer.howto.description.paragraph_3'|trans({'%link%': path('developer_create_client')})|raw }}</p>
19 <p>{{ 'developer.howto.description.paragraph_4'|trans }}</p>
20 <p>
21 <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \
22 grant_type=password \
23 client_id=12_5um6nz50ceg4088c0840wwc0kgg44g00kk84og044ggkscso0k \
24 client_secret=3qd12zpeaxes8cwg8c0404g888co4wo8kc4gcw0occww8cgw4k \
25 username=yourUsername \
26 password=yourPassw0rd</code></pre>
27 </p>
28 <p>{{ 'developer.howto.description.paragraph_5'|trans }}</p>
29 <p>
30 <pre><code class="language-bash">HTTP/1.1 200 OK
31Cache-Control: no-store, private
32Connection: close
33Content-Type: application/json
34Date: Tue, 06 Oct 2015 18:24:03 GMT
35Host: localhost:8000
36Pragma: no-cache
37X-Debug-Token: be00a1
38X-Debug-Token-Link: /profiler/be00a1
39X-Powered-By: PHP/5.5.9-1ubuntu4.13
40{
41 "access_token": "ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw",
42 "expires_in": 3600,
43 "refresh_token": "ODBjODU1NWUwNmUzZTBkNDQ5YWVlZTVlMjQ2Y2I0OWM2NTM1ZGM2M2Y3MDhjMTViM2U2MzYxYzRkMDk5ODRlZg",
44 "scope": null,
45 "token_type": "bearer"
46}</code></pre>
47 </p>
48 <p>{{ 'developer.howto.description.paragraph_6'|trans }}</p>
49 <p>
50 <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \
51 "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre>
52 </p>
53 <p>{{ 'developer.howto.description.paragraph_7'|trans }}</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">{{ 'developer.howto.back'|trans }}</a></p>
56 </div>
57
58 </div>
59 </div>
60</div>
61<script src="{{ asset('https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/prism.min.js') }}"></script>
62<script src="{{ asset('https://cdnjs.cloudflare.com/ajax/libs/prism/1.4.1/components/prism-bash.min.js') }}"></script>
63{% endblock %}
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
deleted file mode 100644
index 3430c0d4..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig
+++ /dev/null
@@ -1,69 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'developer.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9
10 <div class="row">
11 <h3>{{ 'developer.welcome_message'|trans }}</h3>
12
13 <h4>{{ 'developer.documentation'|trans }}</h4>
14
15 <ul>
16 <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
17 <li><a href="http://doc.wallabag.org/en/master/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
18 <li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
19 </ul>
20
21 <h4>{{ 'developer.clients.title'|trans }}</h4>
22 <ul>
23 <li><a href="{{ path('developer_create_client') }}">{{ 'developer.clients.create_new'|trans }}</a></li>
24 </ul>
25
26 <h4>{{ 'developer.existing_clients.title'|trans }}</h4>
27 {% if clients %}
28 <ul class="collapsible" data-collapsible="expandable">
29 {% for client in clients %}
30 <li>
31 <div class="collapsible-header">{{ client.name }} - #{{ client.id }}</div>
32 <div class="collapsible-body">
33 <table class="striped">
34 <tr>
35 <td>{{ 'developer.existing_clients.field_id'|trans }}</td>
36 <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td>
37 </tr>
38 <tr>
39 <td>{{ 'developer.existing_clients.field_secret'|trans }}</td>
40 <td><strong><code>{{ client.secret }}</code></strong></td>
41 </tr>
42 <tr>
43 <td>{{ 'developer.existing_clients.field_uris'|trans }}</td>
44 <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td>
45 </tr>
46 <tr>
47 <td>{{ 'developer.existing_clients.field_grant_types'|trans }}</td>
48 <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td>
49 </tr>
50 </table>
51 <p>
52 {{ 'developer.remove.warn_message_1'|trans({'%name%': client.name }) }}<br/>
53 {{ 'developer.remove.warn_message_2'|trans({'%name%': client.name }) }}<br/>
54 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans({'%name%': client.name }) }}</a>
55 </p>
56 </div>
57 </li>
58 {% endfor %}
59 </ul>
60 {% else %}
61 {{ 'developer.existing_clients.no_client'|trans }}
62 {% endif %}
63 </div>
64
65 </div>
66 </div>
67</div>
68
69{% endblock %}
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 1c5057dd..01fde953 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
@@ -1,7 +1,7 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %} 3{% block title %}
4 {% include "@WallabagCore/themes/_title.html.twig" %} 4 {% include "@WallabagCore/themes/common/Entry/_title.html.twig" %}
5{% endblock %} 5{% endblock %}
6 6
7{% block content %} 7{% block content %}
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
deleted file mode 100644
index 288bb54f..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig
+++ /dev/null
@@ -1,26 +0,0 @@
1<?xml version="1.0" encoding="utf-8"?>
2<rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:media="http://search.yahoo.com/mrss/">
3 <channel>
4 <title>wallabag — {{type}} feed</title>
5 <link>{{ url('unread') }}</link>
6 <pubDate>{{ "now"|date('D, d M Y H:i:s') }}</pubDate>
7 <generator>wallabag</generator>
8 <description>wallabag {{type}} elements</description>
9
10 {% for entry in entries %}
11
12 <item>
13 <title><![CDATA[{{ entry.title }}]]></title>
14 <source url="{{ url('view', { 'id': entry.id }) }}">wallabag</source>
15 <link>{{ entry.url }}</link>
16 <guid>{{ entry.url }}</guid>
17 <pubDate>{{ entry.createdAt|date('D, d M Y H:i:s') }}</pubDate>
18 <description>
19 <![CDATA[{%- if entry.readingTime > 0 -%}{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }}{%- else -%}{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}{%- endif %}{{ entry.content|raw -}}]]>
20 </description>
21 </item>
22
23 {% endfor %}
24
25 </channel>
26</rss>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig
new file mode 100644
index 00000000..6be78edb
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Exception/error.html.twig
@@ -0,0 +1,30 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'error.page_title'|trans }}{% endblock %}
4
5{% block body_class %}login{% endblock %}
6
7{% block menu %}{% endblock %}
8{% block messages %}{% endblock %}
9
10{% block content %}
11<main class="valign-wrapper">
12 <div class="valign row">
13 <div class="card sw">
14 <div class="center"><img src="{{ asset('bundles/wallabagcore/themes/_global/img/logo-other_themes.png') }}" alt="wallabag logo" /></div>
15 <div class="card-content">
16 <div class="row">
17 <h5>{{ status_code }}: {{ status_text }}</h5>
18 <p>{{ exception.message }}</p>
19 {# {% for trace in exception.trace %}
20 <p>{{ trace.class }} - {{ trace.type }} - {{ trace.file }} - {{ trace.line }}</p>
21 {% endfor %} #}
22 </div>
23 </div>
24 </div>
25 </div>
26</main>
27{% endblock %}
28
29{% block footer %}
30{% endblock %}
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
deleted file mode 100644
index 8cbf4ab4..00000000
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig
+++ /dev/null
@@ -1,77 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel settings">
10
11 <div class="row">
12 <h3>{{ 'quickstart.intro.title'|trans }}</h3>
13 <p>{{ 'quickstart.intro.paragraph_1'|trans }}</p>
14 <p>{{ 'quickstart.intro.paragraph_2'|trans }}</p>
15
16 <h4>{{ 'quickstart.configure.title'|trans }}</h4>
17 <ul>
18 <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li>
19 <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li>
20 <li><a href="{{ path('config') }}#set5">{{ 'quickstart.configure.tagging_rules'|trans }}</a></li>
21 </ul>
22
23 {% if is_granted('ROLE_SUPER_ADMIN') %}
24 <h4>{{ 'quickstart.admin.title'|trans }}</h4>
25 <p>{{ 'quickstart.admin.description'|trans }}</p>
26 <ul>
27 <li><a href="{{ path('config') }}#set6">{{ 'quickstart.admin.new_user'|trans }}</a></li>
28 <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{{ 'quickstart.admin.analytics'|trans }}</a></li>
29 <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{{ 'quickstart.admin.sharing'|trans }}</a></li>
30 <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{{ 'quickstart.admin.export'|trans }}</a></li>
31 <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{{ 'quickstart.admin.import'|trans }}</a></li>
32 </ul>
33 {% endif %}
34
35 <h4>{{ 'quickstart.first_steps.title'|trans }}</h4>
36 <ul>
37 <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li>
38 <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li>
39 </ul>
40
41 <h4>{{ 'quickstart.migrate.title'|trans }}</h4>
42 <p>{{ 'quickstart.migrate.description'|trans }}</p>
43 <ul>
44 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li>
45 <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li>
46 <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li>
47 <li><a href="{{ path('import_readability') }}">{{ 'quickstart.migrate.readability'|trans }}</a></li>
48 </ul>
49
50 <h4>{{ 'quickstart.developer.title'|trans }}</h4>
51 <ul>
52 <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li>
53 </ul>
54
55 <h4>{{ 'quickstart.docs.title'|trans }}</h4>
56 <ul>
57 <li><a href="http://doc.wallabag.org/en/master/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li>
58 <li><a href="http://doc.wallabag.org/en/master/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li>
59 <li><a href="http://doc.wallabag.org/en/master/user/filters.html">{{ 'quickstart.docs.search_filters'|trans }}</a></li>
60 <li><a href="http://doc.wallabag.org/en/master/user/errors_during_fetching.html">{{ 'quickstart.docs.fetching_errors'|trans }}</a></li>
61 <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li>
62 </ul>
63
64 <h4>{{ 'quickstart.support.title'|trans }}</h4>
65 <p>{{ 'quickstart.support.description'|trans }}</p>
66 <ul>
67 <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li>
68 <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li>
69 <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li>
70 </ul>
71 </div>
72
73 </div>
74 </div>
75 </div>
76
77{% endblock %}
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 df05e2a4..c7d6d70d 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
@@ -45,7 +45,7 @@
45 <li class="bold {% if currentRoute == 'archive' %}active{% endif %}"> 45 <li class="bold {% if currentRoute == 'archive' %}active{% endif %}">
46 <a class="waves-effect" href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }} <span class="numberItems grey-text">{{ count_entries('archive') }}</span></a> 46 <a class="waves-effect" href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }} <span class="numberItems grey-text">{{ count_entries('archive') }}</span></a>
47 </li> 47 </li>
48 <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}"> 48 <li class="bold {% if currentRoute == 'all' %}active{% endif %}">
49 <a class="waves-effect" href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }} <span class="numberItems grey-text">{{ count_entries('all') }}</span></a> 49 <a class="waves-effect" href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }} <span class="numberItems grey-text">{{ count_entries('all') }}</span></a>
50 </li> 50 </li>
51 <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}"> 51 <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}">
@@ -55,6 +55,10 @@
55 <a class="waves-effect" href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a> 55 <a class="waves-effect" href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a>
56 </li> 56 </li>
57 {% if is_granted('ROLE_SUPER_ADMIN') %} 57 {% if is_granted('ROLE_SUPER_ADMIN') %}
58 <li class="bold {% if currentRoute starts with 'user_' %}active{% endif %}">
59 <a class="waves-effect" href="{{ path('user_index') }}">{{ 'menu.left.users_management'|trans }}</a>
60 </li>
61
58 <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}"> 62 <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}">
59 <a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a> 63 <a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a>
60 </li> 64 </li>
@@ -122,8 +126,19 @@
122 <footer class="page-footer cyan darken-2"> 126 <footer class="page-footer cyan darken-2">
123 <div class="footer-copyright"> 127 <div class="footer-copyright">
124 <div class="container"> 128 <div class="container">
125 <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p> 129 <div class="row">
126 <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a> 130 <div class="col s8">
131 <p>
132 {{ display_stats() }}
133 </p>
134 </div>
135 <div class="col s4">
136 <p>
137 {{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a> –
138 <a class="grey-text text-lighten-4" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans|lower }}</a>
139 </p>
140 </div>
141 </div>
127 </div> 142 </div>
128 </div> 143 </div>
129 </footer> 144 </footer>
diff --git a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php
index fb4c7412..783cde3e 100644
--- a/src/Wallabag/CoreBundle/Twig/WallabagExtension.php
+++ b/src/Wallabag/CoreBundle/Twig/WallabagExtension.php
@@ -5,6 +5,7 @@ namespace Wallabag\CoreBundle\Twig;
5use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface; 5use Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface;
6use Wallabag\CoreBundle\Repository\EntryRepository; 6use Wallabag\CoreBundle\Repository\EntryRepository;
7use Wallabag\CoreBundle\Repository\TagRepository; 7use Wallabag\CoreBundle\Repository\TagRepository;
8use Symfony\Component\Translation\TranslatorInterface;
8 9
9class WallabagExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface 10class WallabagExtension extends \Twig_Extension implements \Twig_Extension_GlobalsInterface
10{ 11{
@@ -12,13 +13,15 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa
12 private $entryRepository; 13 private $entryRepository;
13 private $tagRepository; 14 private $tagRepository;
14 private $lifeTime; 15 private $lifeTime;
16 private $translator;
15 17
16 public function __construct(EntryRepository $entryRepository = null, TagRepository $tagRepository = null, TokenStorageInterface $tokenStorage = null, $lifeTime = 0) 18 public function __construct(EntryRepository $entryRepository, TagRepository $tagRepository, TokenStorageInterface $tokenStorage, $lifeTime, TranslatorInterface $translator)
17 { 19 {
18 $this->entryRepository = $entryRepository; 20 $this->entryRepository = $entryRepository;
19 $this->tagRepository = $tagRepository; 21 $this->tagRepository = $tagRepository;
20 $this->tokenStorage = $tokenStorage; 22 $this->tokenStorage = $tokenStorage;
21 $this->lifeTime = $lifeTime; 23 $this->lifeTime = $lifeTime;
24 $this->translator = $translator;
22 } 25 }
23 26
24 public function getFilters() 27 public function getFilters()
@@ -33,6 +36,7 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa
33 return array( 36 return array(
34 new \Twig_SimpleFunction('count_entries', [$this, 'countEntries']), 37 new \Twig_SimpleFunction('count_entries', [$this, 'countEntries']),
35 new \Twig_SimpleFunction('count_tags', [$this, 'countTags']), 38 new \Twig_SimpleFunction('count_tags', [$this, 'countTags']),
39 new \Twig_SimpleFunction('display_stats', [$this, 'displayStats']),
36 ); 40 );
37 } 41 }
38 42
@@ -107,6 +111,40 @@ class WallabagExtension extends \Twig_Extension implements \Twig_Extension_Globa
107 return $this->tagRepository->countAllTags($user->getId()); 111 return $this->tagRepository->countAllTags($user->getId());
108 } 112 }
109 113
114 /**
115 * Display a single line about reading stats.
116 *
117 * @return string
118 */
119 public function displayStats()
120 {
121 $user = $this->tokenStorage->getToken() ? $this->tokenStorage->getToken()->getUser() : null;
122
123 if (null === $user || !is_object($user)) {
124 return 0;
125 }
126
127 $query = $this->entryRepository->getBuilderForArchiveByUser($user->getId())
128 ->select('e.id')
129 ->groupBy('e.id')
130 ->getQuery();
131
132 $query->useQueryCache(true);
133 $query->useResultCache(true);
134 $query->setResultCacheLifetime($this->lifeTime);
135
136 $nbArchives = count($query->getArrayResult());
137
138 $interval = $user->getCreatedAt()->diff(new \DateTime('now'));
139 $nbDays = (int) $interval->format('%a') ?: 1;
140
141 return $this->translator->trans('footer.stats', [
142 '%user_creation%' => $user->getCreatedAt()->format('F jS, Y'),
143 '%nb_archives%' => $nbArchives,
144 '%per_day%' => round($nbArchives / $nbDays, 2),
145 ]);
146 }
147
110 public function getName() 148 public function getName()
111 { 149 {
112 return 'wallabag_extension'; 150 return 'wallabag_extension';
diff --git a/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php b/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php
index 5f90e00f..c2c11f11 100644
--- a/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php
+++ b/src/Wallabag/ImportBundle/Command/RedisWorkerCommand.php
@@ -17,7 +17,7 @@ class RedisWorkerCommand extends ContainerAwareCommand
17 $this 17 $this
18 ->setName('wallabag:import:redis-worker') 18 ->setName('wallabag:import:redis-worker')
19 ->setDescription('Launch Redis worker') 19 ->setDescription('Launch Redis worker')
20 ->addArgument('serviceName', InputArgument::REQUIRED, 'Service to use: wallabag_v1, wallabag_v2, pocket or readability') 20 ->addArgument('serviceName', InputArgument::REQUIRED, 'Service to use: wallabag_v1, wallabag_v2, pocket, readability, firefox, chrome or instapaper')
21 ->addOption('maxIterations', '', InputOption::VALUE_OPTIONAL, 'Number of iterations before stoping', false) 21 ->addOption('maxIterations', '', InputOption::VALUE_OPTIONAL, 'Number of iterations before stoping', false)
22 ; 22 ;
23 } 23 }
diff --git a/src/Wallabag/ImportBundle/Controller/ImportController.php b/src/Wallabag/ImportBundle/Controller/ImportController.php
index 36a2a399..15de75ff 100644
--- a/src/Wallabag/ImportBundle/Controller/ImportController.php
+++ b/src/Wallabag/ImportBundle/Controller/ImportController.php
@@ -38,7 +38,11 @@ class ImportController extends Controller
38 $nbRabbitMessages = $this->getTotalMessageInRabbitQueue('pocket') 38 $nbRabbitMessages = $this->getTotalMessageInRabbitQueue('pocket')
39 + $this->getTotalMessageInRabbitQueue('readability') 39 + $this->getTotalMessageInRabbitQueue('readability')
40 + $this->getTotalMessageInRabbitQueue('wallabag_v1') 40 + $this->getTotalMessageInRabbitQueue('wallabag_v1')
41 + $this->getTotalMessageInRabbitQueue('wallabag_v2'); 41 + $this->getTotalMessageInRabbitQueue('wallabag_v2')
42 + $this->getTotalMessageInRabbitQueue('firefox')
43 + $this->getTotalMessageInRabbitQueue('chrome')
44 + $this->getTotalMessageInRabbitQueue('instapaper')
45 ;
42 } catch (\Exception $e) { 46 } catch (\Exception $e) {
43 $rabbitNotInstalled = true; 47 $rabbitNotInstalled = true;
44 } 48 }
@@ -49,7 +53,11 @@ class ImportController extends Controller
49 $nbRedisMessages = $redis->llen('wallabag.import.pocket') 53 $nbRedisMessages = $redis->llen('wallabag.import.pocket')
50 + $redis->llen('wallabag.import.readability') 54 + $redis->llen('wallabag.import.readability')
51 + $redis->llen('wallabag.import.wallabag_v1') 55 + $redis->llen('wallabag.import.wallabag_v1')
52 + $redis->llen('wallabag.import.wallabag_v2'); 56 + $redis->llen('wallabag.import.wallabag_v2')
57 + $redis->llen('wallabag.import.firefox')
58 + $redis->llen('wallabag.import.chrome')
59 + $redis->llen('wallabag.import.instapaper')
60 ;
53 } catch (\Exception $e) { 61 } catch (\Exception $e) {
54 $redisNotInstalled = true; 62 $redisNotInstalled = true;
55 } 63 }
diff --git a/src/Wallabag/ImportBundle/Controller/InstapaperController.php b/src/Wallabag/ImportBundle/Controller/InstapaperController.php
new file mode 100644
index 00000000..c3fc8a39
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Controller/InstapaperController.php
@@ -0,0 +1,77 @@
1<?php
2
3namespace Wallabag\ImportBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
7use Symfony\Component\HttpFoundation\Request;
8use Wallabag\ImportBundle\Form\Type\UploadImportType;
9
10class InstapaperController extends Controller
11{
12 /**
13 * @Route("/instapaper", name="import_instapaper")
14 */
15 public function indexAction(Request $request)
16 {
17 $form = $this->createForm(UploadImportType::class);
18 $form->handleRequest($request);
19
20 $instapaper = $this->get('wallabag_import.instapaper.import');
21 $instapaper->setUser($this->getUser());
22
23 if ($this->get('craue_config')->get('import_with_rabbitmq')) {
24 $instapaper->setProducer($this->get('old_sound_rabbit_mq.import_instapaper_producer'));
25 } elseif ($this->get('craue_config')->get('import_with_redis')) {
26 $instapaper->setProducer($this->get('wallabag_import.producer.redis.instapaper'));
27 }
28
29 if ($form->isValid()) {
30 $file = $form->get('file')->getData();
31 $markAsRead = $form->get('mark_as_read')->getData();
32 $name = 'instapaper_'.$this->getUser()->getId().'.csv';
33
34 if (null !== $file && in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
35 $res = $instapaper
36 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
37 ->setMarkAsRead($markAsRead)
38 ->import();
39
40 $message = 'flashes.import.notice.failed';
41
42 if (true === $res) {
43 $summary = $instapaper->getSummary();
44 $message = $this->get('translator')->trans('flashes.import.notice.summary', [
45 '%imported%' => $summary['imported'],
46 '%skipped%' => $summary['skipped'],
47 ]);
48
49 if (0 < $summary['queued']) {
50 $message = $this->get('translator')->trans('flashes.import.notice.summary_with_queue', [
51 '%queued%' => $summary['queued'],
52 ]);
53 }
54
55 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
56 }
57
58 $this->get('session')->getFlashBag()->add(
59 'notice',
60 $message
61 );
62
63 return $this->redirect($this->generateUrl('homepage'));
64 } else {
65 $this->get('session')->getFlashBag()->add(
66 'notice',
67 'flashes.import.notice.failed_on_file'
68 );
69 }
70 }
71
72 return $this->render('WallabagImportBundle:Instapaper:index.html.twig', [
73 'form' => $form->createView(),
74 'import' => $instapaper,
75 ]);
76 }
77}
diff --git a/src/Wallabag/ImportBundle/Import/AbstractImport.php b/src/Wallabag/ImportBundle/Import/AbstractImport.php
index a1a14576..764b390a 100644
--- a/src/Wallabag/ImportBundle/Import/AbstractImport.php
+++ b/src/Wallabag/ImportBundle/Import/AbstractImport.php
@@ -106,6 +106,10 @@ abstract class AbstractImport implements ImportInterface
106 $i = 1; 106 $i = 1;
107 107
108 foreach ($entries as $importedEntry) { 108 foreach ($entries as $importedEntry) {
109 if ($this->markAsRead) {
110 $importedEntry = $this->setEntryAsRead($importedEntry);
111 }
112
109 $entry = $this->parseEntry($importedEntry); 113 $entry = $this->parseEntry($importedEntry);
110 114
111 if (null === $entry) { 115 if (null === $entry) {
diff --git a/src/Wallabag/ImportBundle/Import/BrowserImport.php b/src/Wallabag/ImportBundle/Import/BrowserImport.php
index e15443c4..9d75685b 100644
--- a/src/Wallabag/ImportBundle/Import/BrowserImport.php
+++ b/src/Wallabag/ImportBundle/Import/BrowserImport.php
@@ -45,6 +45,8 @@ abstract class BrowserImport extends AbstractImport
45 $data = json_decode(file_get_contents($this->filepath), true); 45 $data = json_decode(file_get_contents($this->filepath), true);
46 46
47 if (empty($data)) { 47 if (empty($data)) {
48 $this->logger->error('Wallabag Browser: no entries in imported file');
49
48 return false; 50 return false;
49 } 51 }
50 52
diff --git a/src/Wallabag/ImportBundle/Import/InstapaperImport.php b/src/Wallabag/ImportBundle/Import/InstapaperImport.php
new file mode 100644
index 00000000..cf4c785c
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Import/InstapaperImport.php
@@ -0,0 +1,140 @@
1<?php
2
3namespace Wallabag\ImportBundle\Import;
4
5use Wallabag\CoreBundle\Entity\Entry;
6
7class InstapaperImport extends AbstractImport
8{
9 private $filepath;
10
11 /**
12 * {@inheritdoc}
13 */
14 public function getName()
15 {
16 return 'Instapaper';
17 }
18
19 /**
20 * {@inheritdoc}
21 */
22 public function getUrl()
23 {
24 return 'import_instapaper';
25 }
26
27 /**
28 * {@inheritdoc}
29 */
30 public function getDescription()
31 {
32 return 'import.instapaper.description';
33 }
34
35 /**
36 * Set file path to the json file.
37 *
38 * @param string $filepath
39 */
40 public function setFilepath($filepath)
41 {
42 $this->filepath = $filepath;
43
44 return $this;
45 }
46
47 /**
48 * {@inheritdoc}
49 */
50 public function import()
51 {
52 if (!$this->user) {
53 $this->logger->error('InstapaperImport: user is not defined');
54
55 return false;
56 }
57
58 if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
59 $this->logger->error('InstapaperImport: unable to read file', ['filepath' => $this->filepath]);
60
61 return false;
62 }
63
64 $entries = [];
65 $handle = fopen($this->filepath, 'r');
66 while (($data = fgetcsv($handle, 10240)) !== false) {
67 if ('URL' === $data[0]) {
68 continue;
69 }
70
71 $entries[] = [
72 'url' => $data[0],
73 'title' => $data[1],
74 'status' => $data[3],
75 'is_archived' => $data[3] === 'Archive' || $data[3] === 'Starred',
76 'is_starred' => $data[3] === 'Starred',
77 'content_type' => '',
78 'language' => '',
79 ];
80 }
81 fclose($handle);
82
83 if (empty($entries)) {
84 $this->logger->error('InstapaperImport: no entries in imported file');
85
86 return false;
87 }
88
89 if ($this->producer) {
90 $this->parseEntriesForProducer($entries);
91
92 return true;
93 }
94
95 $this->parseEntries($entries);
96
97 return true;
98 }
99
100 /**
101 * {@inheritdoc}
102 */
103 public function parseEntry(array $importedEntry)
104 {
105 $existingEntry = $this->em
106 ->getRepository('WallabagCoreBundle:Entry')
107 ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
108
109 if (false !== $existingEntry) {
110 ++$this->skippedEntries;
111
112 return;
113 }
114
115 $entry = new Entry($this->user);
116 $entry->setUrl($importedEntry['url']);
117 $entry->setTitle($importedEntry['title']);
118
119 // update entry with content (in case fetching failed, the given entry will be return)
120 $entry = $this->fetchContent($entry, $importedEntry['url'], $importedEntry);
121
122 $entry->setArchived($importedEntry['is_archived']);
123 $entry->setStarred($importedEntry['is_starred']);
124
125 $this->em->persist($entry);
126 ++$this->importedEntries;
127
128 return $entry;
129 }
130
131 /**
132 * {@inheritdoc}
133 */
134 protected function setEntryAsRead(array $importedEntry)
135 {
136 $importedEntry['is_archived'] = 1;
137
138 return $importedEntry;
139 }
140}
diff --git a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php
index fa2b7053..b8c0f777 100644
--- a/src/Wallabag/ImportBundle/Import/ReadabilityImport.php
+++ b/src/Wallabag/ImportBundle/Import/ReadabilityImport.php
@@ -64,6 +64,8 @@ class ReadabilityImport extends AbstractImport
64 $data = json_decode(file_get_contents($this->filepath), true); 64 $data = json_decode(file_get_contents($this->filepath), true);
65 65
66 if (empty($data) || empty($data['bookmarks'])) { 66 if (empty($data) || empty($data['bookmarks'])) {
67 $this->logger->error('ReadabilityImport: no entries in imported file');
68
67 return false; 69 return false;
68 } 70 }
69 71
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php
index 3754e4a9..702da057 100644
--- a/src/Wallabag/ImportBundle/Import/WallabagImport.php
+++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php
@@ -58,6 +58,8 @@ abstract class WallabagImport extends AbstractImport
58 $data = json_decode(file_get_contents($this->filepath), true); 58 $data = json_decode(file_get_contents($this->filepath), true);
59 59
60 if (empty($data)) { 60 if (empty($data)) {
61 $this->logger->error('WallabagImport: no entries in imported file');
62
61 return false; 63 return false;
62 } 64 }
63 65
diff --git a/src/Wallabag/ImportBundle/Resources/config/rabbit.yml b/src/Wallabag/ImportBundle/Resources/config/rabbit.yml
index 6ada6302..70b8a0d4 100644
--- a/src/Wallabag/ImportBundle/Resources/config/rabbit.yml
+++ b/src/Wallabag/ImportBundle/Resources/config/rabbit.yml
@@ -14,6 +14,13 @@ services:
14 - "@wallabag_user.user_repository" 14 - "@wallabag_user.user_repository"
15 - "@wallabag_import.readability.import" 15 - "@wallabag_import.readability.import"
16 - "@logger" 16 - "@logger"
17 wallabag_import.consumer.amqp.instapaper:
18 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
19 arguments:
20 - "@doctrine.orm.entity_manager"
21 - "@wallabag_user.user_repository"
22 - "@wallabag_import.instapaper.import"
23 - "@logger"
17 wallabag_import.consumer.amqp.wallabag_v1: 24 wallabag_import.consumer.amqp.wallabag_v1:
18 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer 25 class: Wallabag\ImportBundle\Consumer\AMQPEntryConsumer
19 arguments: 26 arguments:
diff --git a/src/Wallabag/ImportBundle/Resources/config/redis.yml b/src/Wallabag/ImportBundle/Resources/config/redis.yml
index c9c2cf26..0a81e1b5 100644
--- a/src/Wallabag/ImportBundle/Resources/config/redis.yml
+++ b/src/Wallabag/ImportBundle/Resources/config/redis.yml
@@ -20,6 +20,26 @@ services:
20 - "@wallabag_import.readability.import" 20 - "@wallabag_import.readability.import"
21 - "@logger" 21 - "@logger"
22 22
23 # instapaper
24 wallabag_import.queue.redis.instapaper:
25 class: Simpleue\Queue\RedisQueue
26 arguments:
27 - "@wallabag_core.redis.client"
28 - "wallabag.import.instapaper"
29
30 wallabag_import.producer.redis.instapaper:
31 class: Wallabag\ImportBundle\Redis\Producer
32 arguments:
33 - "@wallabag_import.queue.redis.instapaper"
34
35 wallabag_import.consumer.redis.instapaper:
36 class: Wallabag\ImportBundle\Consumer\RedisEntryConsumer
37 arguments:
38 - "@doctrine.orm.entity_manager"
39 - "@wallabag_user.user_repository"
40 - "@wallabag_import.instapaper.import"
41 - "@logger"
42
23 # pocket 43 # pocket
24 wallabag_import.queue.redis.pocket: 44 wallabag_import.queue.redis.pocket:
25 class: Simpleue\Queue\RedisQueue 45 class: Simpleue\Queue\RedisQueue
diff --git a/src/Wallabag/ImportBundle/Resources/config/services.yml b/src/Wallabag/ImportBundle/Resources/config/services.yml
index 990f336d..89adc71b 100644
--- a/src/Wallabag/ImportBundle/Resources/config/services.yml
+++ b/src/Wallabag/ImportBundle/Resources/config/services.yml
@@ -57,6 +57,16 @@ services:
57 tags: 57 tags:
58 - { name: wallabag_import.import, alias: readability } 58 - { name: wallabag_import.import, alias: readability }
59 59
60 wallabag_import.instapaper.import:
61 class: Wallabag\ImportBundle\Import\InstapaperImport
62 arguments:
63 - "@doctrine.orm.entity_manager"
64 - "@wallabag_core.content_proxy"
65 calls:
66 - [ setLogger, [ "@logger" ]]
67 tags:
68 - { name: wallabag_import.import, alias: instapaper }
69
60 wallabag_import.firefox.import: 70 wallabag_import.firefox.import:
61 class: Wallabag\ImportBundle\Import\FirefoxImport 71 class: Wallabag\ImportBundle\Import\FirefoxImport
62 arguments: 72 arguments:
diff --git a/src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig
new file mode 100644
index 00000000..5789361f
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Resources/views/Instapaper/index.html.twig
@@ -0,0 +1,45 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'import.instapaper.page_title'|trans }}{% endblock %}
4
5{% block content %}
6<div class="row">
7 <div class="col s12">
8 <div class="card-panel settings">
9 {% include 'WallabagImportBundle:Import:_workerEnabled.html.twig' %}
10
11 <div class="row">
12 <blockquote>{{ import.description|trans }}</blockquote>
13 <p>{{ 'import.instapaper.how_to'|trans }}</p>
14
15 <div class="col s12">
16 {{ form_start(form, {'method': 'POST'}) }}
17 {{ form_errors(form) }}
18 <div class="row">
19 <div class="file-field input-field col s12">
20 {{ form_errors(form.file) }}
21 <div class="btn">
22 <span>{{ form.file.vars.label|trans }}</span>
23 {{ form_widget(form.file) }}
24 </div>
25 <div class="file-path-wrapper">
26 <input class="file-path validate" type="text">
27 </div>
28 </div>
29 <div class="input-field col s6 with-checkbox">
30 <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6>
31 {{ form_widget(form.mark_as_read) }}
32 {{ form_label(form.mark_as_read) }}
33 </div>
34 </div>
35
36 {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'} }) }}
37
38 {{ form_rest(form) }}
39 </form>
40 </div>
41 </div>
42 </div>
43 </div>
44</div>
45{% endblock %}
diff --git a/src/Wallabag/UserBundle/Controller/ManageController.php b/src/Wallabag/UserBundle/Controller/ManageController.php
new file mode 100644
index 00000000..92ee2b41
--- /dev/null
+++ b/src/Wallabag/UserBundle/Controller/ManageController.php
@@ -0,0 +1,149 @@
1<?php
2
3namespace Wallabag\UserBundle\Controller;
4
5use FOS\UserBundle\Event\UserEvent;
6use FOS\UserBundle\FOSUserEvents;
7use Symfony\Component\HttpFoundation\Request;
8use Symfony\Bundle\FrameworkBundle\Controller\Controller;
9use Sensio\Bundle\FrameworkExtraBundle\Configuration\Method;
10use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
11use Wallabag\UserBundle\Entity\User;
12use Wallabag\CoreBundle\Entity\Config;
13
14/**
15 * User controller.
16 */
17class ManageController extends Controller
18{
19 /**
20 * Lists all User entities.
21 *
22 * @Route("/", name="user_index")
23 * @Method("GET")
24 */
25 public function indexAction()
26 {
27 $em = $this->getDoctrine()->getManager();
28
29 $users = $em->getRepository('WallabagUserBundle:User')->findAll();
30
31 return $this->render('WallabagUserBundle:Manage:index.html.twig', array(
32 'users' => $users,
33 ));
34 }
35
36 /**
37 * Creates a new User entity.
38 *
39 * @Route("/new", name="user_new")
40 * @Method({"GET", "POST"})
41 */
42 public function newAction(Request $request)
43 {
44 $userManager = $this->container->get('fos_user.user_manager');
45
46 $user = $userManager->createUser();
47 // enable created user by default
48 $user->setEnabled(true);
49
50 $form = $this->createForm('Wallabag\UserBundle\Form\NewUserType', $user, [
51 'validation_groups' => ['Profile'],
52 ]);
53 $form->handleRequest($request);
54
55 if ($form->isSubmitted() && $form->isValid()) {
56 $userManager->updateUser($user);
57
58 // dispatch a created event so the associated config will be created
59 $event = new UserEvent($user, $request);
60 $this->get('event_dispatcher')->dispatch(FOSUserEvents::USER_CREATED, $event);
61
62 $this->get('session')->getFlashBag()->add(
63 'notice',
64 $this->get('translator')->trans('flashes.user.notice.added', ['%username%' => $user->getUsername()])
65 );
66
67 return $this->redirectToRoute('user_edit', array('id' => $user->getId()));
68 }
69
70 return $this->render('WallabagUserBundle:Manage:new.html.twig', array(
71 'user' => $user,
72 'form' => $form->createView(),
73 ));
74 }
75
76 /**
77 * Displays a form to edit an existing User entity.
78 *
79 * @Route("/{id}/edit", name="user_edit")
80 * @Method({"GET", "POST"})
81 */
82 public function editAction(Request $request, User $user)
83 {
84 $deleteForm = $this->createDeleteForm($user);
85 $editForm = $this->createForm('Wallabag\UserBundle\Form\UserType', $user);
86 $editForm->handleRequest($request);
87
88 if ($editForm->isSubmitted() && $editForm->isValid()) {
89 $em = $this->getDoctrine()->getManager();
90 $em->persist($user);
91 $em->flush();
92
93 $this->get('session')->getFlashBag()->add(
94 'notice',
95 $this->get('translator')->trans('flashes.user.notice.updated', ['%username%' => $user->getUsername()])
96 );
97
98 return $this->redirectToRoute('user_edit', array('id' => $user->getId()));
99 }
100
101 return $this->render('WallabagUserBundle:Manage:edit.html.twig', array(
102 'user' => $user,
103 'edit_form' => $editForm->createView(),
104 'delete_form' => $deleteForm->createView(),
105 'twofactor_auth' => $this->getParameter('twofactor_auth'),
106 ));
107 }
108
109 /**
110 * Deletes a User entity.
111 *
112 * @Route("/{id}", name="user_delete")
113 * @Method("DELETE")
114 */
115 public function deleteAction(Request $request, User $user)
116 {
117 $form = $this->createDeleteForm($user);
118 $form->handleRequest($request);
119
120 if ($form->isSubmitted() && $form->isValid()) {
121 $this->get('session')->getFlashBag()->add(
122 'notice',
123 $this->get('translator')->trans('flashes.user.notice.deleted', ['%username%' => $user->getUsername()])
124 );
125
126 $em = $this->getDoctrine()->getManager();
127 $em->remove($user);
128 $em->flush();
129 }
130
131 return $this->redirectToRoute('user_index');
132 }
133
134 /**
135 * Creates a form to delete a User entity.
136 *
137 * @param User $user The User entity
138 *
139 * @return \Symfony\Component\Form\Form The form
140 */
141 private function createDeleteForm(User $user)
142 {
143 return $this->createFormBuilder()
144 ->setAction($this->generateUrl('user_delete', array('id' => $user->getId())))
145 ->setMethod('DELETE')
146 ->getForm()
147 ;
148 }
149}
diff --git a/src/Wallabag/UserBundle/Entity/User.php b/src/Wallabag/UserBundle/Entity/User.php
index dfed8e47..d98ae76a 100644
--- a/src/Wallabag/UserBundle/Entity/User.php
+++ b/src/Wallabag/UserBundle/Entity/User.php
@@ -64,7 +64,7 @@ class User extends BaseUser implements TwoFactorInterface, TrustedComputerInterf
64 protected $entries; 64 protected $entries;
65 65
66 /** 66 /**
67 * @ORM\OneToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", mappedBy="user") 67 * @ORM\OneToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", mappedBy="user", cascade={"remove"})
68 */ 68 */
69 protected $config; 69 protected $config;
70 70
diff --git a/src/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListener.php b/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php
index 10586126..15f4ac3d 100644
--- a/src/Wallabag/CoreBundle/EventListener/RegistrationConfirmedListener.php
+++ b/src/Wallabag/UserBundle/EventListener/CreateConfigListener.php
@@ -1,39 +1,49 @@
1<?php 1<?php
2 2
3namespace Wallabag\CoreBundle\EventListener; 3namespace Wallabag\UserBundle\EventListener;
4 4
5use Doctrine\ORM\EntityManager; 5use Doctrine\ORM\EntityManager;
6use FOS\UserBundle\Event\FilterUserResponseEvent; 6use FOS\UserBundle\Event\UserEvent;
7use FOS\UserBundle\FOSUserEvents; 7use FOS\UserBundle\FOSUserEvents;
8use Symfony\Component\EventDispatcher\EventDispatcherInterface; 8use Symfony\Component\EventDispatcher\EventDispatcherInterface;
9use Symfony\Component\EventDispatcher\EventSubscriberInterface; 9use Symfony\Component\EventDispatcher\EventSubscriberInterface;
10use Wallabag\CoreBundle\Entity\Config; 10use Wallabag\CoreBundle\Entity\Config;
11 11
12class RegistrationConfirmedListener implements EventSubscriberInterface 12/**
13 * This listener will create the associated configuration when a user register.
14 * This configuration will be created right after the registration (no matter if it needs an email validation).
15 */
16class CreateConfigListener implements EventSubscriberInterface
13{ 17{
14 private $em; 18 private $em;
15 private $theme; 19 private $theme;
16 private $itemsOnPage; 20 private $itemsOnPage;
17 private $rssLimit; 21 private $rssLimit;
18 private $language; 22 private $language;
23 private $readingSpeed;
19 24
20 public function __construct(EntityManager $em, $theme, $itemsOnPage, $rssLimit, $language) 25 public function __construct(EntityManager $em, $theme, $itemsOnPage, $rssLimit, $language, $readingSpeed)
21 { 26 {
22 $this->em = $em; 27 $this->em = $em;
23 $this->theme = $theme; 28 $this->theme = $theme;
24 $this->itemsOnPage = $itemsOnPage; 29 $this->itemsOnPage = $itemsOnPage;
25 $this->rssLimit = $rssLimit; 30 $this->rssLimit = $rssLimit;
26 $this->language = $language; 31 $this->language = $language;
32 $this->readingSpeed = $readingSpeed;
27 } 33 }
28 34
29 public static function getSubscribedEvents() 35 public static function getSubscribedEvents()
30 { 36 {
31 return [ 37 return [
32 FOSUserEvents::REGISTRATION_CONFIRMED => 'authenticate', 38 // when a user register using the normal form
39 FOSUserEvents::REGISTRATION_COMPLETED => 'createConfig',
40 // when we manually create a user using the command line
41 // OR when we create it from the config UI
42 FOSUserEvents::USER_CREATED => 'createConfig',
33 ]; 43 ];
34 } 44 }
35 45
36 public function authenticate(FilterUserResponseEvent $event, $eventName = null, EventDispatcherInterface $eventDispatcher = null) 46 public function createConfig(UserEvent $event, $eventName = null, EventDispatcherInterface $eventDispatcher = null)
37 { 47 {
38 if (!$event->getUser()->isEnabled()) { 48 if (!$event->getUser()->isEnabled()) {
39 return; 49 return;
@@ -44,6 +54,8 @@ class RegistrationConfirmedListener implements EventSubscriberInterface
44 $config->setItemsPerPage($this->itemsOnPage); 54 $config->setItemsPerPage($this->itemsOnPage);
45 $config->setRssLimit($this->rssLimit); 55 $config->setRssLimit($this->rssLimit);
46 $config->setLanguage($this->language); 56 $config->setLanguage($this->language);
57 $config->setReadingSpeed($this->readingSpeed);
58
47 $this->em->persist($config); 59 $this->em->persist($config);
48 $this->em->flush(); 60 $this->em->flush();
49 } 61 }
diff --git a/src/Wallabag/CoreBundle/Form/Type/NewUserType.php b/src/Wallabag/UserBundle/Form/NewUserType.php
index 6a6f63d1..ad5a2405 100644
--- a/src/Wallabag/CoreBundle/Form/Type/NewUserType.php
+++ b/src/Wallabag/UserBundle/Form/NewUserType.php
@@ -1,6 +1,6 @@
1<?php 1<?php
2 2
3namespace Wallabag\CoreBundle\Form\Type; 3namespace Wallabag\UserBundle\Form;
4 4
5use Symfony\Component\Form\AbstractType; 5use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\Extension\Core\Type\EmailType; 6use Symfony\Component\Form\Extension\Core\Type\EmailType;
@@ -19,13 +19,13 @@ class NewUserType extends AbstractType
19 $builder 19 $builder
20 ->add('username', TextType::class, [ 20 ->add('username', TextType::class, [
21 'required' => true, 21 'required' => true,
22 'label' => 'config.form_new_user.username_label', 22 'label' => 'user.form.username_label',
23 ]) 23 ])
24 ->add('plainPassword', RepeatedType::class, [ 24 ->add('plainPassword', RepeatedType::class, [
25 'type' => PasswordType::class, 25 'type' => PasswordType::class,
26 'invalid_message' => 'validator.password_must_match', 26 'invalid_message' => 'validator.password_must_match',
27 'first_options' => ['label' => 'config.form_new_user.password_label'], 27 'first_options' => ['label' => 'user.form.password_label'],
28 'second_options' => ['label' => 'config.form_new_user.repeat_new_password_label'], 28 'second_options' => ['label' => 'user.form.repeat_new_password_label'],
29 'constraints' => [ 29 'constraints' => [
30 new Constraints\Length([ 30 new Constraints\Length([
31 'min' => 8, 31 'min' => 8,
@@ -33,13 +33,13 @@ class NewUserType extends AbstractType
33 ]), 33 ]),
34 new Constraints\NotBlank(), 34 new Constraints\NotBlank(),
35 ], 35 ],
36 'label' => 'config.form_new_user.plain_password_label', 36 'label' => 'user.form.plain_password_label',
37 ]) 37 ])
38 ->add('email', EmailType::class, [ 38 ->add('email', EmailType::class, [
39 'label' => 'config.form_new_user.email_label', 39 'label' => 'user.form.email_label',
40 ]) 40 ])
41 ->add('save', SubmitType::class, [ 41 ->add('save', SubmitType::class, [
42 'label' => 'config.form.save', 42 'label' => 'user.form.save',
43 ]) 43 ])
44 ; 44 ;
45 } 45 }
diff --git a/src/Wallabag/UserBundle/Form/UserType.php b/src/Wallabag/UserBundle/Form/UserType.php
new file mode 100644
index 00000000..cfa67793
--- /dev/null
+++ b/src/Wallabag/UserBundle/Form/UserType.php
@@ -0,0 +1,61 @@
1<?php
2
3namespace Wallabag\UserBundle\Form;
4
5use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\FormBuilderInterface;
7use Symfony\Component\OptionsResolver\OptionsResolver;
8use Symfony\Component\Form\Extension\Core\Type\CheckboxType;
9use Symfony\Component\Form\Extension\Core\Type\SubmitType;
10use Symfony\Component\Form\Extension\Core\Type\TextType;
11use Symfony\Component\Form\Extension\Core\Type\EmailType;
12
13class UserType extends AbstractType
14{
15 /**
16 * @param FormBuilderInterface $builder
17 * @param array $options
18 */
19 public function buildForm(FormBuilderInterface $builder, array $options)
20 {
21 $builder
22 ->add('name', TextType::class, [
23 'required' => false,
24 'label' => 'user.form.name_label',
25 ])
26 ->add('username', TextType::class, [
27 'required' => true,
28 'label' => 'user.form.username_label',
29 ])
30 ->add('email', EmailType::class, [
31 'required' => true,
32 'label' => 'user.form.email_label',
33 ])
34 ->add('enabled', CheckboxType::class, [
35 'required' => false,
36 'label' => 'user.form.enabled_label',
37 ])
38 ->add('locked', CheckboxType::class, [
39 'required' => false,
40 'label' => 'user.form.locked_label',
41 ])
42 ->add('twoFactorAuthentication', CheckboxType::class, [
43 'required' => false,
44 'label' => 'user.form.twofactor_label',
45 ])
46 ->add('save', SubmitType::class, [
47 'label' => 'user.form.save',
48 ])
49 ;
50 }
51
52 /**
53 * @param OptionsResolver $resolver
54 */
55 public function configureOptions(OptionsResolver $resolver)
56 {
57 $resolver->setDefaults(array(
58 'data_class' => 'Wallabag\UserBundle\Entity\User',
59 ));
60 }
61}
diff --git a/src/Wallabag/UserBundle/Resources/config/services.yml b/src/Wallabag/UserBundle/Resources/config/services.yml
index 05830555..eb9c8e67 100644
--- a/src/Wallabag/UserBundle/Resources/config/services.yml
+++ b/src/Wallabag/UserBundle/Resources/config/services.yml
@@ -20,3 +20,15 @@ services:
20 factory: [ "@doctrine.orm.default_entity_manager", getRepository ] 20 factory: [ "@doctrine.orm.default_entity_manager", getRepository ]
21 arguments: 21 arguments:
22 - WallabagUserBundle:User 22 - WallabagUserBundle:User
23
24 wallabag_user.create_config:
25 class: Wallabag\UserBundle\EventListener\CreateConfigListener
26 arguments:
27 - "@doctrine.orm.entity_manager"
28 - "%wallabag_core.theme%"
29 - "%wallabag_core.items_on_page%"
30 - "%wallabag_core.rss_limit%"
31 - "%wallabag_core.language%"
32 - "%wallabag_core.reading_speed%"
33 tags:
34 - { name: kernel.event_subscriber }
diff --git a/src/Wallabag/UserBundle/Resources/views/Manage/edit.html.twig b/src/Wallabag/UserBundle/Resources/views/Manage/edit.html.twig
new file mode 100644
index 00000000..d5cf99c3
--- /dev/null
+++ b/src/Wallabag/UserBundle/Resources/views/Manage/edit.html.twig
@@ -0,0 +1,86 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'user.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel">
10 <div class="row">
11 <div class="input-field col s12">
12 <h4>{{ 'user.edit_user'|trans }}</h4>
13
14 <div id="set6" class="col s12">
15 {{ form_start(edit_form) }}
16 {{ form_errors(edit_form) }}
17
18 <div class="row">
19 <div class="input-field col s12">
20 {{ form_label(edit_form.name) }}
21 {{ form_errors(edit_form.name) }}
22 {{ form_widget(edit_form.name) }}
23 </div>
24 </div>
25
26 <div class="row">
27 <div class="input-field col s12">
28 {{ form_label(edit_form.username) }}
29 {{ form_errors(edit_form.username) }}
30 {{ form_widget(edit_form.username) }}
31 </div>
32 </div>
33
34 <div class="row">
35 <div class="input-field col s12">
36 {{ form_label(edit_form.email) }}
37 {{ form_errors(edit_form.email) }}
38 {{ form_widget(edit_form.email) }}
39 </div>
40 </div>
41
42 <div class="row">
43 <div class="input-field col s12">
44 {{ form_widget(edit_form.enabled) }}
45 {{ form_label(edit_form.enabled) }}
46 {{ form_errors(edit_form.enabled) }}
47 </div>
48 </div>
49
50 <div class="row">
51 <div class="input-field col s12">
52 {{ form_widget(edit_form.locked) }}
53 {{ form_label(edit_form.locked) }}
54 {{ form_errors(edit_form.locked) }}
55 </div>
56 </div>
57
58 {% if twofactor_auth %}
59 <div class="row">
60 <div class="input-field col s12">
61 {{ form_widget(edit_form.twoFactorAuthentication) }}
62 {{ form_label(edit_form.twoFactorAuthentication) }}
63 {{ form_errors(edit_form.twoFactorAuthentication) }}
64 </div>
65 </div>
66 {% endif %}
67
68 <br/>
69
70 {{ form_widget(edit_form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
71 {{ form_rest(edit_form) }}
72 </form>
73 <p>
74 {{ form_start(delete_form) }}
75 <button {% if app.user.id == user.id %}disabled="disabled"{% endif %} onclick="return confirm('{{ 'user.form.delete_confirm'|trans|escape('js') }}')" type="submit" class="btn waves-effect waves-light red">{{ 'user.form.delete'|trans }}</button>
76 {{ form_end(delete_form) }}
77 </p>
78 <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('user_index') }}">{{ 'user.form.back_to_list'|trans }}</a></p>
79 </div>
80 </div>
81 </div>
82 </div>
83 </div>
84 </div>
85
86{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig b/src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig
new file mode 100644
index 00000000..996bdb1a
--- /dev/null
+++ b/src/Wallabag/UserBundle/Resources/views/Manage/index.html.twig
@@ -0,0 +1,48 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'user.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel">
10 <div class="row">
11 <div class="input-field col s12">
12 <p class="help">{{ 'user.description'|trans|raw }}</p>
13
14 <table class="bordered">
15 <thead>
16 <tr>
17 <th>{{ 'user.form.username_label'|trans }}</th>
18 <th>{{ 'user.form.email_label'|trans }}</th>
19 <th>{{ 'user.form.last_login_label'|trans }}</th>
20 <th>{{ 'user.form.locked_label'|trans }}</th>
21 <th>{{ 'user.list.actions'|trans }}</th>
22 </tr>
23 </thead>
24 <tbody>
25 {% for user in users %}
26 <tr>
27 <td>{{ user.username }}</td>
28 <td>{{ user.email }}</td>
29 <td>{% if user.lastLogin %}{{ user.lastLogin|date('Y-m-d H:i:s') }}{% endif %}</td>
30 <td>{% if user.locked %}{{ 'user.list.yes'|trans }}{% else %}{{ 'user.list.no'|trans }}{% endif %}</td>
31 <td>
32 <a href="{{ path('user_edit', { 'id': user.id }) }}">{{ 'user.list.edit_action'|trans }}</a>
33 </td>
34 </tr>
35 {% endfor %}
36 </tbody>
37 </table>
38 <br />
39 <p>
40 <a href="{{ path('user_new') }}" class="waves-effect waves-light btn">{{ 'user.list.create_new_one'|trans }}</a>
41 </p>
42 </div>
43 </div>
44 </div>
45 </div>
46 </div>
47
48{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/Manage/new.html.twig b/src/Wallabag/UserBundle/Resources/views/Manage/new.html.twig
new file mode 100644
index 00000000..8c894c04
--- /dev/null
+++ b/src/Wallabag/UserBundle/Resources/views/Manage/new.html.twig
@@ -0,0 +1,61 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'user.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel">
10 <div class="row">
11 <div class="input-field col s12">
12 <h4>{{ 'user.new_user'|trans }}</h4>
13
14 <div id="set6" class="col s12">
15 {{ form_start(form) }}
16 {{ form_errors(form) }}
17
18 <div class="row">
19 <div class="input-field col s12">
20 {{ form_label(form.username) }}
21 {{ form_errors(form.username) }}
22 {{ form_widget(form.username) }}
23 </div>
24 </div>
25
26 <div class="row">
27 <div class="input-field col s12">
28 {{ form_label(form.plainPassword.first) }}
29 {{ form_errors(form.plainPassword.first) }}
30 {{ form_widget(form.plainPassword.first) }}
31 </div>
32 </div>
33
34 <div class="row">
35 <div class="input-field col s12">
36 {{ form_label(form.plainPassword.second) }}
37 {{ form_errors(form.plainPassword.second) }}
38 {{ form_widget(form.plainPassword.second) }}
39 </div>
40 </div>
41
42 <div class="row">
43 <div class="input-field col s12">
44 {{ form_label(form.email) }}
45 {{ form_errors(form.email) }}
46 {{ form_widget(form.email) }}
47 </div>
48 </div>
49
50 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
51 {{ form_rest(form) }}
52 </form>
53 <p><a class="waves-effect waves-light btn blue-grey" href="{{ path('user_index') }}">{{ 'user.form.back_to_list'|trans }}</a></p>
54 </div>
55 </div>
56 </div>
57 </div>
58 </div>
59 </div>
60
61{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/check_email.html.twig
index 50937276..50937276 100644
--- a/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Registration/check_email.html.twig
diff --git a/src/Wallabag/UserBundle/Resources/views/manage.html.twig b/src/Wallabag/UserBundle/Resources/views/manage.html.twig
new file mode 100644
index 00000000..c614c55f
--- /dev/null
+++ b/src/Wallabag/UserBundle/Resources/views/manage.html.twig
@@ -0,0 +1,43 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{{ 'user.manage.page_title'|trans }}{% endblock %}
4
5{% block content %}
6
7 <div class="row">
8 <div class="col s12">
9 <div class="card-panel">
10 <div class="row">
11 <div class="input-field col s12">
12 <p class="help">{{ 'user.manage.description'|trans|raw }}</p>
13
14 <table class="bordered">
15 <thead>
16 <tr>
17 <th>{{ 'user.manage.field.username'|trans }}</th>
18 <th>{{ 'user.manage.field.email'|trans }}</th>
19 <th>{{ 'user.manage.field.last_login'|trans }}</th>
20 <th>{{ 'user.manage.field.locked'|trans }}</th>
21 <th>{{ 'user.manage.action'|trans }}</th>
22 </tr>
23 </thead>
24
25 <tbody>
26 {% for user in users %}
27 <tr>
28 <td>{{ user.username }}</td>
29 <td>{{ user.email }}</td>
30 <td>{{ user.lastLogin|date('d/m/Y H:i:s') }}</td>
31 <td>{{ user.locked ? 'yes' : 'no' }}</td>
32 <td>edit - delete</td>
33 </tr>
34 {% endfor %}
35 </tbody>
36 </table>
37 </div>
38 </div>
39 </div>
40 </div>
41 </div>
42
43{% endblock %}