aboutsummaryrefslogtreecommitdiffhomepage
path: root/src/Wallabag
diff options
context:
space:
mode:
Diffstat (limited to 'src/Wallabag')
-rw-r--r--src/Wallabag/AnnotationBundle/Entity/Annotation.php6
-rw-r--r--src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php3
-rw-r--r--src/Wallabag/CoreBundle/Command/InstallCommand.php42
-rw-r--r--src/Wallabag/CoreBundle/Controller/ConfigController.php20
-rw-r--r--src/Wallabag/CoreBundle/Controller/DeveloperController.php4
-rw-r--r--src/Wallabag/CoreBundle/Controller/EntryController.php30
-rw-r--r--src/Wallabag/CoreBundle/Controller/TagController.php22
-rw-r--r--src/Wallabag/CoreBundle/Entity/Config.php4
-rw-r--r--src/Wallabag/CoreBundle/Entity/Entry.php2
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php16
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/ClientType.php4
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/ConfigType.php19
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/EditEntryType.php19
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php16
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/NewEntryType.php7
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/NewTagType.php2
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/NewUserType.php22
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/RssType.php8
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php13
-rw-r--r--src/Wallabag/CoreBundle/Form/Type/UserInformationType.php17
-rw-r--r--src/Wallabag/CoreBundle/Helper/ContentProxy.php34
-rw-r--r--src/Wallabag/CoreBundle/Helper/EntriesExport.php36
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js13
-rwxr-xr-xsrc/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css14
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.da.yml535
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.de.yml536
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.en.yml425
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.es.yml643
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml536
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml685
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml425
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml536
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml536
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml627
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.da.yml3
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.es.yml3
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.fa.yml3
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.fr.yml3
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.pl.yml3
-rw-r--r--src/Wallabag/CoreBundle/Resources/translations/validators.ro.yml3
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/base.html.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig147
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig6
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig12
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig20
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig33
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig101
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig32
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig57
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig26
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig83
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig3
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig18
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig40
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig258
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig6
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig12
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig20
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig33
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig16
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig65
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig59
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig55
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig36
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig79
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig2
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig4
-rw-r--r--src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig119
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php61
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php27
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php74
-rw-r--r--src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php34
-rw-r--r--src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php85
-rw-r--r--src/Wallabag/ImportBundle/Controller/PocketController.php27
-rw-r--r--src/Wallabag/ImportBundle/Controller/WallabagController.php85
-rw-r--r--src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php65
-rw-r--r--src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php65
-rw-r--r--src/Wallabag/ImportBundle/Form/Type/UploadImportType.php10
-rw-r--r--src/Wallabag/ImportBundle/Import/PocketImport.php6
-rw-r--r--src/Wallabag/ImportBundle/Import/WallabagImport.php204
-rw-r--r--src/Wallabag/ImportBundle/Import/WallabagV1Import.php174
-rw-r--r--src/Wallabag/ImportBundle/Import/WallabagV2Import.php57
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig7
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig27
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig20
-rw-r--r--src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig3
-rw-r--r--src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php25
-rw-r--r--src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php11
-rw-r--r--src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php10
-rw-r--r--src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php2
-rw-r--r--src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php12
-rw-r--r--src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php13
-rw-r--r--src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json31
-rw-r--r--src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml16
-rw-r--r--src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml16
-rw-r--r--src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml16
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Authentication/form.html.twig)2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/ChangePassword/changePassword_content.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/ChangePassword/changePassword_content.html.twig)0
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Registration/checkEmail.html.twig)0
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Registration/confirmed.html.twig)2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Registration/register_content.html.twig)2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Resetting/checkEmail.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/checkEmail.html.twig)0
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Resetting/passwordAlreadyRequested.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/passwordAlreadyRequested.html.twig)0
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/request_content.html.twig)8
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/reset_content.html.twig)0
-rw-r--r--src/Wallabag/UserBundle/Resources/views/Security/login.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/Security/login.html.twig)12
-rw-r--r--src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/layout.html.twig (renamed from src/Wallabag/UserBundle/Resources/views/themes/material/layout.html.twig)2
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/Authentication/form.html.twig32
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register.html.twig20
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register_content.html.twig37
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/checkEmail.html.twig17
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request.html.twig20
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request_content.html.twig17
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/Security/login.html.twig33
-rw-r--r--src/Wallabag/UserBundle/Resources/views/themes/baggy/layout.html.twig16
123 files changed, 5866 insertions, 2782 deletions
diff --git a/src/Wallabag/AnnotationBundle/Entity/Annotation.php b/src/Wallabag/AnnotationBundle/Entity/Annotation.php
index db9590b0..90ee7c2d 100644
--- a/src/Wallabag/AnnotationBundle/Entity/Annotation.php
+++ b/src/Wallabag/AnnotationBundle/Entity/Annotation.php
@@ -82,7 +82,7 @@ class Annotation
82 /* 82 /*
83 * @param User $user 83 * @param User $user
84 */ 84 */
85 public function __construct(\Wallabag\UserBundle\Entity\User $user) 85 public function __construct(User $user)
86 { 86 {
87 $this->user = $user; 87 $this->user = $user;
88 } 88 }
@@ -204,7 +204,7 @@ class Annotation
204 /** 204 /**
205 * Set user. 205 * Set user.
206 * 206 *
207 * @param string $user 207 * @param User $user
208 * 208 *
209 * @return Annotation 209 * @return Annotation
210 */ 210 */
@@ -218,7 +218,7 @@ class Annotation
218 /** 218 /**
219 * Get user. 219 * Get user.
220 * 220 *
221 * @return string 221 * @return User
222 */ 222 */
223 public function getUser() 223 public function getUser()
224 { 224 {
diff --git a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php
index ccb72d23..04875f29 100644
--- a/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php
+++ b/src/Wallabag/ApiBundle/Tests/Controller/WallabagRestControllerTest.php
@@ -171,6 +171,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
171 $this->client->request('POST', '/api/entries.json', array( 171 $this->client->request('POST', '/api/entries.json', array(
172 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', 172 'url' => 'http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html',
173 'archive' => '1', 173 'archive' => '1',
174 'tags' => 'google, apple',
174 )); 175 ));
175 176
176 $this->assertEquals(200, $this->client->getResponse()->getStatusCode()); 177 $this->assertEquals(200, $this->client->getResponse()->getStatusCode());
@@ -181,7 +182,7 @@ class WallabagRestControllerTest extends WallabagApiTestCase
181 $this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']); 182 $this->assertEquals('http://www.lemonde.fr/pixels/article/2015/03/28/plongee-dans-l-univers-d-ingress-le-jeu-de-google-aux-frontieres-du-reel_4601155_4408996.html', $content['url']);
182 $this->assertEquals(true, $content['is_archived']); 183 $this->assertEquals(true, $content['is_archived']);
183 $this->assertEquals(false, $content['is_starred']); 184 $this->assertEquals(false, $content['is_starred']);
184 $this->assertCount(1, $content['tags']); 185 $this->assertCount(2, $content['tags']);
185 } 186 }
186 187
187 public function testPostArchivedAndStarredEntry() 188 public function testPostArchivedAndStarredEntry()
diff --git a/src/Wallabag/CoreBundle/Command/InstallCommand.php b/src/Wallabag/CoreBundle/Command/InstallCommand.php
index c9dad0df..6665f4b5 100644
--- a/src/Wallabag/CoreBundle/Command/InstallCommand.php
+++ b/src/Wallabag/CoreBundle/Command/InstallCommand.php
@@ -73,36 +73,36 @@ class InstallCommand extends ContainerAwareCommand
73 73
74 $fulfilled = true; 74 $fulfilled = true;
75 75
76 $label = '<comment>PDO Drivers</comment>'; 76 $label = '<comment>PDO Driver</comment>';
77 if (extension_loaded('pdo_sqlite') || extension_loaded('pdo_mysql') || extension_loaded('pdo_pgsql')) { 77 $status = '<info>OK!</info>';
78 $status = '<info>OK!</info>'; 78 $help = '';
79 $help = ''; 79
80 } else { 80 if (!extension_loaded($this->getContainer()->getParameter('database_driver'))) {
81 $fulfilled = false; 81 $fulfilled = false;
82 $status = '<error>ERROR!</error>'; 82 $status = '<error>ERROR!</error>';
83 $help = 'Needs one of sqlite, mysql or pgsql PDO drivers'; 83 $help = 'Database driver "'.$this->getContainer()->getParameter('database_driver').'" is not installed.';
84 } 84 }
85 85
86 $rows[] = array($label, $status, $help); 86 $rows = [];
87 $rows[] = [$label, $status, $help];
87 88
88 foreach ($this->functionExists as $functionRequired) { 89 foreach ($this->functionExists as $functionRequired) {
89 $label = '<comment>'.$functionRequired.'</comment>'; 90 $label = '<comment>'.$functionRequired.'</comment>';
91 $status = '<info>OK!</info>';
92 $help = '';
90 93
91 if (function_exists($functionRequired)) { 94 if (!function_exists($functionRequired)) {
92 $status = '<info>OK!</info>';
93 $help = '';
94 } else {
95 $fulfilled = false; 95 $fulfilled = false;
96 $status = '<error>ERROR!</error>'; 96 $status = '<error>ERROR!</error>';
97 $help = 'You need the '.$functionRequired.' function activated'; 97 $help = 'You need the '.$functionRequired.' function activated';
98 } 98 }
99 99
100 $rows[] = array($label, $status, $help); 100 $rows[] = [$label, $status, $help];
101 } 101 }
102 102
103 $table = new Table($this->defaultOutput); 103 $table = new Table($this->defaultOutput);
104 $table 104 $table
105 ->setHeaders(array('Checked', 'Status', 'Recommendation')) 105 ->setHeaders(['Checked', 'Status', 'Recommendation'])
106 ->setRows($rows) 106 ->setRows($rows)
107 ->render(); 107 ->render();
108 108
@@ -126,7 +126,7 @@ class InstallCommand extends ContainerAwareCommand
126 $this->defaultOutput->writeln('Droping database, creating database and schema, clearing the cache'); 126 $this->defaultOutput->writeln('Droping database, creating database and schema, clearing the cache');
127 127
128 $this 128 $this
129 ->runCommand('doctrine:database:drop', array('--force' => true)) 129 ->runCommand('doctrine:database:drop', ['--force' => true])
130 ->runCommand('doctrine:database:create') 130 ->runCommand('doctrine:database:create')
131 ->runCommand('doctrine:schema:create') 131 ->runCommand('doctrine:schema:create')
132 ->runCommand('cache:clear') 132 ->runCommand('cache:clear')
@@ -158,7 +158,7 @@ class InstallCommand extends ContainerAwareCommand
158 $this->defaultOutput->writeln('Droping database, creating database and schema'); 158 $this->defaultOutput->writeln('Droping database, creating database and schema');
159 159
160 $this 160 $this
161 ->runCommand('doctrine:database:drop', array('--force' => true)) 161 ->runCommand('doctrine:database:drop', ['--force' => true])
162 ->runCommand('doctrine:database:create') 162 ->runCommand('doctrine:database:create')
163 ->runCommand('doctrine:schema:create') 163 ->runCommand('doctrine:schema:create')
164 ; 164 ;
@@ -168,7 +168,7 @@ class InstallCommand extends ContainerAwareCommand
168 $this->defaultOutput->writeln('Droping schema and creating schema'); 168 $this->defaultOutput->writeln('Droping schema and creating schema');
169 169
170 $this 170 $this
171 ->runCommand('doctrine:schema:drop', array('--force' => true)) 171 ->runCommand('doctrine:schema:drop', ['--force' => true])
172 ->runCommand('doctrine:schema:create') 172 ->runCommand('doctrine:schema:create')
173 ; 173 ;
174 } 174 }
@@ -388,19 +388,19 @@ class InstallCommand extends ContainerAwareCommand
388 * @param string $command 388 * @param string $command
389 * @param array $parameters Parameters to this command (usually 'force' => true) 389 * @param array $parameters Parameters to this command (usually 'force' => true)
390 */ 390 */
391 protected function runCommand($command, $parameters = array()) 391 protected function runCommand($command, $parameters = [])
392 { 392 {
393 $parameters = array_merge( 393 $parameters = array_merge(
394 array('command' => $command), 394 ['command' => $command],
395 $parameters, 395 $parameters,
396 array( 396 [
397 '--no-debug' => true, 397 '--no-debug' => true,
398 '--env' => $this->defaultInput->getOption('env') ?: 'dev', 398 '--env' => $this->defaultInput->getOption('env') ?: 'dev',
399 ) 399 ]
400 ); 400 );
401 401
402 if ($this->defaultInput->getOption('no-interaction')) { 402 if ($this->defaultInput->getOption('no-interaction')) {
403 $parameters = array_merge($parameters, array('--no-interaction' => true)); 403 $parameters = array_merge($parameters, ['--no-interaction' => true]);
404 } 404 }
405 405
406 $this->getApplication()->setAutoExit(false); 406 $this->getApplication()->setAutoExit(false);
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php
index 1930a2ae..779be268 100644
--- a/src/Wallabag/CoreBundle/Controller/ConfigController.php
+++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php
@@ -45,7 +45,7 @@ class ConfigController extends Controller
45 45
46 $this->get('session')->getFlashBag()->add( 46 $this->get('session')->getFlashBag()->add(
47 'notice', 47 'notice',
48 'Config saved. Some parameters will be considered after disconnection.' 48 'flashes.config.notice.config_saved'
49 ); 49 );
50 50
51 return $this->redirect($this->generateUrl('config')); 51 return $this->redirect($this->generateUrl('config'));
@@ -57,9 +57,9 @@ class ConfigController extends Controller
57 57
58 if ($pwdForm->isValid()) { 58 if ($pwdForm->isValid()) {
59 if ($this->get('craue_config')->get('demo_mode_enabled') && $this->get('craue_config')->get('demo_mode_username') === $user->getUsername()) { 59 if ($this->get('craue_config')->get('demo_mode_enabled') && $this->get('craue_config')->get('demo_mode_username') === $user->getUsername()) {
60 $message = 'In demonstration mode, you can\'t change password for this user.'; 60 $message = 'flashes.config.notice.password_not_updated_demo';
61 } else { 61 } else {
62 $message = 'Password updated'; 62 $message = 'flashes.config.notice.password_updated';
63 63
64 $user->setPlainPassword($pwdForm->get('new_password')->getData()); 64 $user->setPlainPassword($pwdForm->get('new_password')->getData());
65 $userManager->updateUser($user, true); 65 $userManager->updateUser($user, true);
@@ -82,7 +82,7 @@ class ConfigController extends Controller
82 82
83 $this->get('session')->getFlashBag()->add( 83 $this->get('session')->getFlashBag()->add(
84 'notice', 84 'notice',
85 'Information updated' 85 'flashes.config.notice.user_updated'
86 ); 86 );
87 87
88 return $this->redirect($this->generateUrl('config').'#set3'); 88 return $this->redirect($this->generateUrl('config').'#set3');
@@ -98,7 +98,7 @@ class ConfigController extends Controller
98 98
99 $this->get('session')->getFlashBag()->add( 99 $this->get('session')->getFlashBag()->add(
100 'notice', 100 'notice',
101 'RSS information updated' 101 'flashes.config.notice.rss_updated'
102 ); 102 );
103 103
104 return $this->redirect($this->generateUrl('config').'#set2'); 104 return $this->redirect($this->generateUrl('config').'#set2');
@@ -116,7 +116,7 @@ class ConfigController extends Controller
116 116
117 $this->get('session')->getFlashBag()->add( 117 $this->get('session')->getFlashBag()->add(
118 'notice', 118 'notice',
119 'Tagging rules updated' 119 'flashes.config.notice.tagging_rules_updated'
120 ); 120 );
121 121
122 return $this->redirect($this->generateUrl('config').'#set5'); 122 return $this->redirect($this->generateUrl('config').'#set5');
@@ -147,7 +147,7 @@ class ConfigController extends Controller
147 147
148 $this->get('session')->getFlashBag()->add( 148 $this->get('session')->getFlashBag()->add(
149 'notice', 149 'notice',
150 $this->get('translator')->trans('User "%username%" added', array('%username%' => $newUser->getUsername())) 150 $this->get('translator')->trans('flashes.config.notice.user_added', array('%username%' => $newUser->getUsername()))
151 ); 151 );
152 152
153 return $this->redirect($this->generateUrl('config').'#set6'); 153 return $this->redirect($this->generateUrl('config').'#set6');
@@ -192,7 +192,7 @@ class ConfigController extends Controller
192 192
193 $this->get('session')->getFlashBag()->add( 193 $this->get('session')->getFlashBag()->add(
194 'notice', 194 'notice',
195 'RSS token updated' 195 'flashes.config.notice.rss_token_updated'
196 ); 196 );
197 197
198 return $this->redirect($this->generateUrl('config').'#set2'); 198 return $this->redirect($this->generateUrl('config').'#set2');
@@ -210,7 +210,7 @@ class ConfigController extends Controller
210 public function deleteTaggingRuleAction(TaggingRule $rule) 210 public function deleteTaggingRuleAction(TaggingRule $rule)
211 { 211 {
212 if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) { 212 if ($this->getUser()->getId() != $rule->getConfig()->getUser()->getId()) {
213 throw $this->createAccessDeniedException('You can not access this tagging ryle.'); 213 throw $this->createAccessDeniedException('You can not access this tagging rule.');
214 } 214 }
215 215
216 $em = $this->getDoctrine()->getManager(); 216 $em = $this->getDoctrine()->getManager();
@@ -219,7 +219,7 @@ class ConfigController extends Controller
219 219
220 $this->get('session')->getFlashBag()->add( 220 $this->get('session')->getFlashBag()->add(
221 'notice', 221 'notice',
222 'Tagging rule deleted' 222 'flashes.config.notice.tagging_rules_deleted'
223 ); 223 );
224 224
225 return $this->redirect($this->generateUrl('config').'#set5'); 225 return $this->redirect($this->generateUrl('config').'#set5');
diff --git a/src/Wallabag/CoreBundle/Controller/DeveloperController.php b/src/Wallabag/CoreBundle/Controller/DeveloperController.php
index e5cfd83c..7cb0ead2 100644
--- a/src/Wallabag/CoreBundle/Controller/DeveloperController.php
+++ b/src/Wallabag/CoreBundle/Controller/DeveloperController.php
@@ -49,7 +49,7 @@ class DeveloperController extends Controller
49 49
50 $this->get('session')->getFlashBag()->add( 50 $this->get('session')->getFlashBag()->add(
51 'notice', 51 'notice',
52 'New client created.' 52 'flashes.developer.notice.client_created'
53 ); 53 );
54 54
55 return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', array( 55 return $this->render('WallabagCoreBundle:Developer:client_parameters.html.twig', array(
@@ -80,7 +80,7 @@ class DeveloperController extends Controller
80 80
81 $this->get('session')->getFlashBag()->add( 81 $this->get('session')->getFlashBag()->add(
82 'notice', 82 'notice',
83 'Client deleted' 83 'flashes.developer.notice.client_deleted'
84 ); 84 );
85 85
86 return $this->redirect($this->generateUrl('developer')); 86 return $this->redirect($this->generateUrl('developer'));
diff --git a/src/Wallabag/CoreBundle/Controller/EntryController.php b/src/Wallabag/CoreBundle/Controller/EntryController.php
index 0fae3a0f..fa633031 100644
--- a/src/Wallabag/CoreBundle/Controller/EntryController.php
+++ b/src/Wallabag/CoreBundle/Controller/EntryController.php
@@ -55,7 +55,7 @@ class EntryController extends Controller
55 if (false !== $existingEntry) { 55 if (false !== $existingEntry) {
56 $this->get('session')->getFlashBag()->add( 56 $this->get('session')->getFlashBag()->add(
57 'notice', 57 'notice',
58 'Entry already saved on '.$existingEntry->getCreatedAt()->format('d-m-Y') 58 $this->get('translator')->trans('flashes.entry.notice.entry_already_saved', array('%date%' => $existingEntry->getCreatedAt()->format('d-m-Y')))
59 ); 59 );
60 60
61 return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId()))); 61 return $this->redirect($this->generateUrl('view', array('id' => $existingEntry->getId())));
@@ -64,7 +64,7 @@ class EntryController extends Controller
64 $this->updateEntry($entry); 64 $this->updateEntry($entry);
65 $this->get('session')->getFlashBag()->add( 65 $this->get('session')->getFlashBag()->add(
66 'notice', 66 'notice',
67 'Entry saved' 67 'flashes.entry.notice.entry_saved'
68 ); 68 );
69 69
70 return $this->redirect($this->generateUrl('homepage')); 70 return $this->redirect($this->generateUrl('homepage'));
@@ -92,13 +92,11 @@ class EntryController extends Controller
92 } 92 }
93 93
94 /** 94 /**
95 * @param Request $request
96 *
97 * @Route("/new", name="new") 95 * @Route("/new", name="new")
98 * 96 *
99 * @return \Symfony\Component\HttpFoundation\Response 97 * @return \Symfony\Component\HttpFoundation\Response
100 */ 98 */
101 public function addEntryAction(Request $request) 99 public function addEntryAction()
102 { 100 {
103 return $this->render('WallabagCoreBundle:Entry:new.html.twig'); 101 return $this->render('WallabagCoreBundle:Entry:new.html.twig');
104 } 102 }
@@ -128,7 +126,7 @@ class EntryController extends Controller
128 126
129 $this->get('session')->getFlashBag()->add( 127 $this->get('session')->getFlashBag()->add(
130 'notice', 128 'notice',
131 'Entry updated' 129 'flashes.entry.notice.entry_updated'
132 ); 130 );
133 131
134 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId()))); 132 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
@@ -304,9 +302,9 @@ class EntryController extends Controller
304 { 302 {
305 $this->checkUserAction($entry); 303 $this->checkUserAction($entry);
306 304
307 $message = 'Entry reloaded'; 305 $message = 'flashes.entry.notice.entry_reloaded';
308 if (false === $this->updateEntry($entry)) { 306 if (false === $this->updateEntry($entry)) {
309 $message = 'Failed to reload entry'; 307 $message = 'flashes.entry.notice.entry_reload_failed';
310 } 308 }
311 309
312 $this->get('session')->getFlashBag()->add( 310 $this->get('session')->getFlashBag()->add(
@@ -334,9 +332,14 @@ class EntryController extends Controller
334 $entry->toggleArchive(); 332 $entry->toggleArchive();
335 $this->getDoctrine()->getManager()->flush(); 333 $this->getDoctrine()->getManager()->flush();
336 334
335 $message = 'flashes.entry.notice.entry_unarchived';
336 if ($entry->isArchived()) {
337 $message = 'flashes.entry.notice.entry_archived';
338 }
339
337 $this->get('session')->getFlashBag()->add( 340 $this->get('session')->getFlashBag()->add(
338 'notice', 341 'notice',
339 'Entry '.($entry->isArchived() ? 'archived' : 'unarchived') 342 $message
340 ); 343 );
341 344
342 return $this->redirect($request->headers->get('referer')); 345 return $this->redirect($request->headers->get('referer'));
@@ -359,9 +362,14 @@ class EntryController extends Controller
359 $entry->toggleStar(); 362 $entry->toggleStar();
360 $this->getDoctrine()->getManager()->flush(); 363 $this->getDoctrine()->getManager()->flush();
361 364
365 $message = 'flashes.entry.notice.entry_unstarred';
366 if ($entry->isStarred()) {
367 $message = 'flashes.entry.notice.entry_starred';
368 }
369
362 $this->get('session')->getFlashBag()->add( 370 $this->get('session')->getFlashBag()->add(
363 'notice', 371 'notice',
364 'Entry '.($entry->isStarred() ? 'starred' : 'unstarred') 372 $message
365 ); 373 );
366 374
367 return $this->redirect($request->headers->get('referer')); 375 return $this->redirect($request->headers->get('referer'));
@@ -394,7 +402,7 @@ class EntryController extends Controller
394 402
395 $this->get('session')->getFlashBag()->add( 403 $this->get('session')->getFlashBag()->add(
396 'notice', 404 'notice',
397 'Entry deleted' 405 'flashes.entry.notice.entry_deleted'
398 ); 406 );
399 407
400 // don't redirect user to the deleted entry 408 // don't redirect user to the deleted entry
diff --git a/src/Wallabag/CoreBundle/Controller/TagController.php b/src/Wallabag/CoreBundle/Controller/TagController.php
index 7b34939d..1a1f8c3d 100644
--- a/src/Wallabag/CoreBundle/Controller/TagController.php
+++ b/src/Wallabag/CoreBundle/Controller/TagController.php
@@ -20,30 +20,22 @@ class TagController extends Controller
20 */ 20 */
21 public function addTagFormAction(Request $request, Entry $entry) 21 public function addTagFormAction(Request $request, Entry $entry)
22 { 22 {
23 $tag = new Tag(); 23 $form = $this->createForm(NewTagType::class, new Tag());
24 $form = $this->createForm(NewTagType::class, $tag);
25 $form->handleRequest($request); 24 $form->handleRequest($request);
26 25
27 if ($form->isValid()) { 26 if ($form->isValid()) {
28 $existingTag = $this->getDoctrine() 27 $this->get('wallabag_core.content_proxy')->assignTagsToEntry(
29 ->getRepository('WallabagCoreBundle:Tag') 28 $entry,
30 ->findOneByLabel($tag->getLabel()); 29 $form->get('label')->getData()
30 );
31 31
32 $em = $this->getDoctrine()->getManager(); 32 $em = $this->getDoctrine()->getManager();
33 33 $em->persist($entry);
34 if (is_null($existingTag)) {
35 $entry->addTag($tag);
36 $em->persist($tag);
37 } elseif (!$existingTag->hasEntry($entry)) {
38 $entry->addTag($existingTag);
39 $em->persist($existingTag);
40 }
41
42 $em->flush(); 34 $em->flush();
43 35
44 $this->get('session')->getFlashBag()->add( 36 $this->get('session')->getFlashBag()->add(
45 'notice', 37 'notice',
46 'Tag added' 38 'flashes.tag.notice.tag_added'
47 ); 39 );
48 40
49 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId()))); 41 return $this->redirect($this->generateUrl('view', array('id' => $entry->getId())));
diff --git a/src/Wallabag/CoreBundle/Entity/Config.php b/src/Wallabag/CoreBundle/Entity/Config.php
index e18b543b..a25656d3 100644
--- a/src/Wallabag/CoreBundle/Entity/Config.php
+++ b/src/Wallabag/CoreBundle/Entity/Config.php
@@ -40,7 +40,7 @@ class Config
40 * @Assert\Range( 40 * @Assert\Range(
41 * min = 1, 41 * min = 1,
42 * max = 100000, 42 * max = 100000,
43 * maxMessage = "This will certainly kill the app" 43 * maxMessage = "validator.item_per_page_too_high"
44 * ) 44 * )
45 * @ORM\Column(name="items_per_page", type="integer", nullable=false) 45 * @ORM\Column(name="items_per_page", type="integer", nullable=false)
46 */ 46 */
@@ -68,7 +68,7 @@ class Config
68 * @Assert\Range( 68 * @Assert\Range(
69 * min = 1, 69 * min = 1,
70 * max = 100000, 70 * max = 100000,
71 * maxMessage = "This will certainly kill the app" 71 * maxMessage = "validator.rss_limit_too_hight"
72 * ) 72 * )
73 */ 73 */
74 private $rssLimit; 74 private $rssLimit;
diff --git a/src/Wallabag/CoreBundle/Entity/Entry.php b/src/Wallabag/CoreBundle/Entity/Entry.php
index 8f4ddf61..1271f1f5 100644
--- a/src/Wallabag/CoreBundle/Entity/Entry.php
+++ b/src/Wallabag/CoreBundle/Entity/Entry.php
@@ -187,7 +187,7 @@ class Entry
187 /* 187 /*
188 * @param User $user 188 * @param User $user
189 */ 189 */
190 public function __construct(\Wallabag\UserBundle\Entity\User $user) 190 public function __construct(User $user)
191 { 191 {
192 $this->user = $user; 192 $this->user = $user;
193 $this->tags = new ArrayCollection(); 193 $this->tags = new ArrayCollection();
diff --git a/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php b/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php
index 7d05a5d8..841af51e 100644
--- a/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/ChangePasswordType.php
@@ -16,23 +16,27 @@ class ChangePasswordType extends AbstractType
16 { 16 {
17 $builder 17 $builder
18 ->add('old_password', PasswordType::class, array( 18 ->add('old_password', PasswordType::class, array(
19 'constraints' => new UserPassword(array('message' => 'Wrong value for your current password')), 19 'constraints' => new UserPassword(array('message' => 'validator.password_wrong_value')),
20 'label' => 'config.form_password.old_password_label',
20 )) 21 ))
21 ->add('new_password', RepeatedType::class, array( 22 ->add('new_password', RepeatedType::class, array(
22 'type' => PasswordType::class, 23 'type' => PasswordType::class,
23 'invalid_message' => 'The password fields must match.', 24 'invalid_message' => 'validator.password_must_match',
24 'required' => true, 25 'required' => true,
25 'first_options' => array('label' => 'New password'), 26 'first_options' => array('label' => 'config.form_password.new_password_label'),
26 'second_options' => array('label' => 'Repeat new password'), 27 'second_options' => array('label' => 'config.form_password.repeat_new_password_label'),
27 'constraints' => array( 28 'constraints' => array(
28 new Constraints\Length(array( 29 new Constraints\Length(array(
29 'min' => 8, 30 'min' => 8,
30 'minMessage' => 'Password should by at least 8 chars long', 31 'minMessage' => 'validator.password_too_short',
31 )), 32 )),
32 new Constraints\NotBlank(), 33 new Constraints\NotBlank(),
33 ), 34 ),
35 'label' => 'config.form_password.new_password_label',
36 ))
37 ->add('save', SubmitType::class, array(
38 'label' => 'config.form.save',
34 )) 39 ))
35 ->add('save', SubmitType::class)
36 ; 40 ;
37 } 41 }
38 42
diff --git a/src/Wallabag/CoreBundle/Form/Type/ClientType.php b/src/Wallabag/CoreBundle/Form/Type/ClientType.php
index dd934715..9f620414 100644
--- a/src/Wallabag/CoreBundle/Form/Type/ClientType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/ClientType.php
@@ -14,8 +14,8 @@ class ClientType extends AbstractType
14 public function buildForm(FormBuilderInterface $builder, array $options) 14 public function buildForm(FormBuilderInterface $builder, array $options)
15 { 15 {
16 $builder 16 $builder
17 ->add('redirect_uris', UrlType::class, array('required' => true, 'label' => 'Redirect URIs')) 17 ->add('redirect_uris', UrlType::class, array('required' => true, 'label' => 'developer.client.form.redirect_uris_label'))
18 ->add('save', SubmitType::class, array('label' => 'Create a new client')) 18 ->add('save', SubmitType::class, array('label' => 'developer.client.form.save_label'))
19 ; 19 ;
20 20
21 $builder->get('redirect_uris') 21 $builder->get('redirect_uris')
diff --git a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php
index 0a5ea6cc..b30b4706 100644
--- a/src/Wallabag/CoreBundle/Form/Type/ConfigType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/ConfigType.php
@@ -33,21 +33,28 @@ class ConfigType extends AbstractType
33 ->add('theme', ChoiceType::class, array( 33 ->add('theme', ChoiceType::class, array(
34 'choices' => array_flip($this->themes), 34 'choices' => array_flip($this->themes),
35 'choices_as_values' => true, 35 'choices_as_values' => true,
36 'label' => 'config.form_settings.theme_label',
37 ))
38 ->add('items_per_page', null, array(
39 'label' => 'config.form_settings.items_per_page_label',
36 )) 40 ))
37 ->add('items_per_page')
38 ->add('reading_speed', ChoiceType::class, array( 41 ->add('reading_speed', ChoiceType::class, array(
42 'label' => 'config.form_settings.reading_speed.label',
39 'choices' => array( 43 'choices' => array(
40 'I read ~100 words per minute' => '0.5', 44 'config.form_settings.reading_speed.100_word' => '0.5',
41 'I read ~200 words per minute' => '1', 45 'config.form_settings.reading_speed.200_word' => '1',
42 'I read ~300 words per minute' => '1.5', 46 'config.form_settings.reading_speed.300_word' => '1.5',
43 'I read ~400 words per minute' => '2', 47 'config.form_settings.reading_speed.400_word' => '2',
44 ), 48 ),
45 )) 49 ))
46 ->add('language', ChoiceType::class, array( 50 ->add('language', ChoiceType::class, array(
47 'choices' => array_flip($this->languages), 51 'choices' => array_flip($this->languages),
48 'choices_as_values' => true, 52 'choices_as_values' => true,
53 'label' => 'config.form_settings.language_label',
54 ))
55 ->add('save', SubmitType::class, array(
56 'label' => 'config.form.save',
49 )) 57 ))
50 ->add('save', SubmitType::class)
51 ; 58 ;
52 } 59 }
53 60
diff --git a/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php b/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php
index 2b1e1ef4..23d7b239 100644
--- a/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/EditEntryType.php
@@ -14,9 +14,22 @@ class EditEntryType extends AbstractType
14 public function buildForm(FormBuilderInterface $builder, array $options) 14 public function buildForm(FormBuilderInterface $builder, array $options)
15 { 15 {
16 $builder 16 $builder
17 ->add('title', TextType::class, array('required' => true)) 17 ->add('title', TextType::class, array(
18 ->add('is_public', CheckboxType::class, array('required' => false)) 18 'required' => true,
19 ->add('save', SubmitType::class) 19 'label' => 'entry.edit.title_label',
20 ))
21 ->add('is_public', CheckboxType::class, array(
22 'required' => false,
23 'label' => 'entry.edit.is_public_label',
24 ))
25 ->add('url', TextType::class, array(
26 'disabled' => true,
27 'required' => false,
28 'label' => 'entry.edit.url_label',
29 ))
30 ->add('save', SubmitType::class, array(
31 'label' => 'entry.edit.save_label',
32 ))
20 ; 33 ;
21 } 34 }
22 35
diff --git a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php
index ee10bc8b..ec36503b 100644
--- a/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/EntryFilterType.php
@@ -34,7 +34,9 @@ class EntryFilterType extends AbstractType
34 public function buildForm(FormBuilderInterface $builder, array $options) 34 public function buildForm(FormBuilderInterface $builder, array $options)
35 { 35 {
36 $builder 36 $builder
37 ->add('readingTime', NumberRangeFilterType::class) 37 ->add('readingTime', NumberRangeFilterType::class, array(
38 'label' => 'entry.filters.reading_time.label',
39 ))
38 ->add('createdAt', DateRangeFilterType::class, array( 40 ->add('createdAt', DateRangeFilterType::class, array(
39 'left_date_options' => array( 41 'left_date_options' => array(
40 'attr' => array( 42 'attr' => array(
@@ -50,6 +52,7 @@ class EntryFilterType extends AbstractType
50 'format' => 'dd/MM/yyyy', 52 'format' => 'dd/MM/yyyy',
51 'widget' => 'single_text', 53 'widget' => 'single_text',
52 ), 54 ),
55 'label' => 'entry.filters.created_at.label',
53 ) 56 )
54 ) 57 )
55 ->add('domainName', TextFilterType::class, array( 58 ->add('domainName', TextFilterType::class, array(
@@ -62,9 +65,14 @@ class EntryFilterType extends AbstractType
62 65
63 return $filterQuery->createCondition($expression); 66 return $filterQuery->createCondition($expression);
64 }, 67 },
68 'label' => 'entry.filters.domain_label',
69 ))
70 ->add('isArchived', CheckboxFilterType::class, array(
71 'label' => 'entry.filters.archived_label',
72 ))
73 ->add('isStarred', CheckboxFilterType::class, array(
74 'label' => 'entry.filters.starred_label',
65 )) 75 ))
66 ->add('isArchived', CheckboxFilterType::class)
67 ->add('isStarred', CheckboxFilterType::class)
68 ->add('previewPicture', CheckboxFilterType::class, array( 76 ->add('previewPicture', CheckboxFilterType::class, array(
69 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) { 77 'apply_filter' => function (QueryInterface $filterQuery, $field, $values) {
70 if (false === $values['value']) { 78 if (false === $values['value']) {
@@ -75,10 +83,12 @@ class EntryFilterType extends AbstractType
75 83
76 return $filterQuery->createCondition($expression); 84 return $filterQuery->createCondition($expression);
77 }, 85 },
86 'label' => 'entry.filters.preview_picture_label',
78 )) 87 ))
79 ->add('language', ChoiceFilterType::class, array( 88 ->add('language', ChoiceFilterType::class, array(
80 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())), 89 'choices' => array_flip($this->repository->findDistinctLanguageByUser($this->user->getId())),
81 'choices_as_values' => true, 90 'choices_as_values' => true,
91 'label' => 'entry.filters.language_label',
82 )) 92 ))
83 ; 93 ;
84 } 94 }
diff --git a/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php b/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php
index fbce13f1..69fab6fb 100644
--- a/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/NewEntryType.php
@@ -3,7 +3,6 @@
3namespace Wallabag\CoreBundle\Form\Type; 3namespace Wallabag\CoreBundle\Form\Type;
4 4
5use Symfony\Component\Form\AbstractType; 5use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\Extension\Core\Type\SubmitType;
7use Symfony\Component\Form\Extension\Core\Type\UrlType; 6use Symfony\Component\Form\Extension\Core\Type\UrlType;
8use Symfony\Component\Form\FormBuilderInterface; 7use Symfony\Component\Form\FormBuilderInterface;
9use Symfony\Component\OptionsResolver\OptionsResolver; 8use Symfony\Component\OptionsResolver\OptionsResolver;
@@ -13,8 +12,10 @@ class NewEntryType extends AbstractType
13 public function buildForm(FormBuilderInterface $builder, array $options) 12 public function buildForm(FormBuilderInterface $builder, array $options)
14 { 13 {
15 $builder 14 $builder
16 ->add('url', UrlType::class, array('required' => true)) 15 ->add('url', UrlType::class, array(
17 ->add('save', SubmitType::class) 16 'required' => true,
17 'label' => 'entry.new.form_new.url_label',
18 ))
18 ; 19 ;
19 } 20 }
20 21
diff --git a/src/Wallabag/CoreBundle/Form/Type/NewTagType.php b/src/Wallabag/CoreBundle/Form/Type/NewTagType.php
index 0f559031..c7568de7 100644
--- a/src/Wallabag/CoreBundle/Form/Type/NewTagType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/NewTagType.php
@@ -3,7 +3,6 @@
3namespace Wallabag\CoreBundle\Form\Type; 3namespace Wallabag\CoreBundle\Form\Type;
4 4
5use Symfony\Component\Form\AbstractType; 5use Symfony\Component\Form\AbstractType;
6use Symfony\Component\Form\Extension\Core\Type\SubmitType;
7use Symfony\Component\Form\Extension\Core\Type\TextType; 6use Symfony\Component\Form\Extension\Core\Type\TextType;
8use Symfony\Component\Form\FormBuilderInterface; 7use Symfony\Component\Form\FormBuilderInterface;
9use Symfony\Component\OptionsResolver\OptionsResolver; 8use Symfony\Component\OptionsResolver\OptionsResolver;
@@ -14,7 +13,6 @@ class NewTagType extends AbstractType
14 { 13 {
15 $builder 14 $builder
16 ->add('label', TextType::class, array('required' => true)) 15 ->add('label', TextType::class, array('required' => true))
17 ->add('save', SubmitType::class)
18 ; 16 ;
19 } 17 }
20 18
diff --git a/src/Wallabag/CoreBundle/Form/Type/NewUserType.php b/src/Wallabag/CoreBundle/Form/Type/NewUserType.php
index 6eb0e63f..60fcc20c 100644
--- a/src/Wallabag/CoreBundle/Form/Type/NewUserType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/NewUserType.php
@@ -17,22 +17,30 @@ class NewUserType extends AbstractType
17 public function buildForm(FormBuilderInterface $builder, array $options) 17 public function buildForm(FormBuilderInterface $builder, array $options)
18 { 18 {
19 $builder 19 $builder
20 ->add('username', TextType::class, array('required' => true)) 20 ->add('username', TextType::class, array(
21 'required' => true,
22 'label' => 'config.form_new_user.username_label',
23 ))
21 ->add('plainPassword', RepeatedType::class, array( 24 ->add('plainPassword', RepeatedType::class, array(
22 'type' => PasswordType::class, 25 'type' => PasswordType::class,
23 'invalid_message' => 'The password fields must match', 26 'invalid_message' => 'validator.password_must_match',
24 'first_options' => array('label' => 'Password'), 27 'first_options' => array('label' => 'config.form_new_user.password_label'),
25 'second_options' => array('label' => 'Repeat new password'), 28 'second_options' => array('label' => 'config.form_new_user.repeat_new_password_label'),
26 'constraints' => array( 29 'constraints' => array(
27 new Constraints\Length(array( 30 new Constraints\Length(array(
28 'min' => 8, 31 'min' => 8,
29 'minMessage' => 'Password should by at least 8 chars long', 32 'minMessage' => 'validator.password_too_short',
30 )), 33 )),
31 new Constraints\NotBlank(), 34 new Constraints\NotBlank(),
32 ), 35 ),
36 'label' => 'config.form_new_user.plain_password_label',
37 ))
38 ->add('email', EmailType::class, array(
39 'label' => 'config.form_new_user.email_label',
40 ))
41 ->add('save', SubmitType::class, array(
42 'label' => 'config.form.save',
33 )) 43 ))
34 ->add('email', EmailType::class)
35 ->add('save', SubmitType::class)
36 ; 44 ;
37 } 45 }
38 46
diff --git a/src/Wallabag/CoreBundle/Form/Type/RssType.php b/src/Wallabag/CoreBundle/Form/Type/RssType.php
index def8782c..a9f68e54 100644
--- a/src/Wallabag/CoreBundle/Form/Type/RssType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/RssType.php
@@ -12,8 +12,12 @@ class RssType extends AbstractType
12 public function buildForm(FormBuilderInterface $builder, array $options) 12 public function buildForm(FormBuilderInterface $builder, array $options)
13 { 13 {
14 $builder 14 $builder
15 ->add('rss_limit') 15 ->add('rss_limit', null, array(
16 ->add('save', SubmitType::class) 16 'label' => 'config.form_rss.rss_limit',
17 ))
18 ->add('save', SubmitType::class, array(
19 'label' => 'config.form.save',
20 ))
17 ; 21 ;
18 } 22 }
19 23
diff --git a/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php
index 5815b8c6..cfee21f1 100644
--- a/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleType.php
@@ -14,12 +14,19 @@ class TaggingRuleType extends AbstractType
14 public function buildForm(FormBuilderInterface $builder, array $options) 14 public function buildForm(FormBuilderInterface $builder, array $options)
15 { 15 {
16 $builder 16 $builder
17 ->add('rule', TextType::class, array('required' => true)) 17 ->add('rule', TextType::class, array(
18 ->add('save', SubmitType::class) 18 'required' => true,
19 'label' => 'config.form_rules.rule_label',
20 ))
21 ->add('save', SubmitType::class, array(
22 'label' => 'config.form.save',
23 ))
19 ; 24 ;
20 25
21 $tagsField = $builder 26 $tagsField = $builder
22 ->create('tags', TextType::class) 27 ->create('tags', TextType::class, array(
28 'label' => 'config.form_rules.tags_label',
29 ))
23 ->addModelTransformer(new StringToListTransformer(',')); 30 ->addModelTransformer(new StringToListTransformer(','));
24 31
25 $builder->add($tagsField); 32 $builder->add($tagsField);
diff --git a/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php b/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php
index f491b0ae..799ea39e 100644
--- a/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php
+++ b/src/Wallabag/CoreBundle/Form/Type/UserInformationType.php
@@ -15,10 +15,19 @@ class UserInformationType extends AbstractType
15 public function buildForm(FormBuilderInterface $builder, array $options) 15 public function buildForm(FormBuilderInterface $builder, array $options)
16 { 16 {
17 $builder 17 $builder
18 ->add('name', TextType::class) 18 ->add('name', TextType::class, array(
19 ->add('email', EmailType::class) 19 'label' => 'config.form_user.name_label',
20 ->add('twoFactorAuthentication', CheckboxType::class, array('required' => false)) 20 ))
21 ->add('save', SubmitType::class) 21 ->add('email', EmailType::class, array(
22 'label' => 'config.form_user.email_label',
23 ))
24 ->add('twoFactorAuthentication', CheckboxType::class, array(
25 'required' => false,
26 'label' => 'config.form_user.twoFactorAuthentication_label',
27 ))
28 ->add('save', SubmitType::class, array(
29 'label' => 'config.form.save',
30 ))
22 ->remove('username') 31 ->remove('username')
23 ->remove('plainPassword') 32 ->remove('plainPassword')
24 ; 33 ;
diff --git a/src/Wallabag/CoreBundle/Helper/ContentProxy.php b/src/Wallabag/CoreBundle/Helper/ContentProxy.php
index ba90b731..ed4a220d 100644
--- a/src/Wallabag/CoreBundle/Helper/ContentProxy.php
+++ b/src/Wallabag/CoreBundle/Helper/ContentProxy.php
@@ -32,14 +32,21 @@ class ContentProxy
32 * Fetch content using graby and hydrate given entry with results information. 32 * Fetch content using graby and hydrate given entry with results information.
33 * In case we couldn't find content, we'll try to use Open Graph data. 33 * In case we couldn't find content, we'll try to use Open Graph data.
34 * 34 *
35 * @param Entry $entry Entry to update 35 * We can also force the content, in case of an import from the v1 for example, so the function won't
36 * @param string $url Url to grab content for 36 * fetch the content from the website but rather use information given with the $content parameter.
37 *
38 * @param Entry $entry Entry to update
39 * @param string $url Url to grab content for
40 * @param array $content An array with AT LEAST keys title, html, url, language & content_type to skip the fetchContent from the url
37 * 41 *
38 * @return Entry 42 * @return Entry
39 */ 43 */
40 public function updateEntry(Entry $entry, $url) 44 public function updateEntry(Entry $entry, $url, array $content = [])
41 { 45 {
42 $content = $this->graby->fetchContent($url); 46 // do we have to fetch the content or the provided one is ok?
47 if (empty($content) || false === $this->validateContent($content)) {
48 $content = $this->graby->fetchContent($url);
49 }
43 50
44 $title = $content['title']; 51 $title = $content['title'];
45 if (!$title && isset($content['open_graph']['og_title'])) { 52 if (!$title && isset($content['open_graph']['og_title'])) {
@@ -62,7 +69,11 @@ class ContentProxy
62 $entry->setLanguage($content['language']); 69 $entry->setLanguage($content['language']);
63 $entry->setMimetype($content['content_type']); 70 $entry->setMimetype($content['content_type']);
64 $entry->setReadingTime(Utils::getReadingTime($html)); 71 $entry->setReadingTime(Utils::getReadingTime($html));
65 $entry->setDomainName(parse_url($entry->getUrl(), PHP_URL_HOST)); 72
73 $domainName = parse_url($entry->getUrl(), PHP_URL_HOST);
74 if (false !== $domainName) {
75 $entry->setDomainName($domainName);
76 }
66 77
67 if (isset($content['open_graph']['og_image'])) { 78 if (isset($content['open_graph']['og_image'])) {
68 $entry->setPreviewPicture($content['open_graph']['og_image']); 79 $entry->setPreviewPicture($content['open_graph']['og_image']);
@@ -113,4 +124,17 @@ class ContentProxy
113 } 124 }
114 } 125 }
115 } 126 }
127
128 /**
129 * Validate that the given content as enough value to be used
130 * instead of fetch the content from the url.
131 *
132 * @param array $content
133 *
134 * @return bool true if valid otherwise false
135 */
136 private function validateContent(array $content)
137 {
138 return isset($content['title']) && isset($content['html']) && isset($content['url']) && isset($content['language']) && isset($content['content_type']);
139 }
116} 140}
diff --git a/src/Wallabag/CoreBundle/Helper/EntriesExport.php b/src/Wallabag/CoreBundle/Helper/EntriesExport.php
index 6ecdf019..d0680c3f 100644
--- a/src/Wallabag/CoreBundle/Helper/EntriesExport.php
+++ b/src/Wallabag/CoreBundle/Helper/EntriesExport.php
@@ -81,27 +81,9 @@ class EntriesExport
81 */ 81 */
82 public function exportAs($format) 82 public function exportAs($format)
83 { 83 {
84 switch ($format) { 84 $functionName = 'produce'.ucfirst($format);
85 case 'epub': 85 if (method_exists($this, $functionName)) {
86 return $this->produceEpub(); 86 return $this->$functionName();
87
88 case 'mobi':
89 return $this->produceMobi();
90
91 case 'pdf':
92 return $this->producePDF();
93
94 case 'csv':
95 return $this->produceCSV();
96
97 case 'json':
98 return $this->produceJSON();
99
100 case 'xml':
101 return $this->produceXML();
102
103 case 'txt':
104 return $this->produceTXT();
105 } 87 }
106 88
107 throw new \InvalidArgumentException(sprintf('The format "%s" is not yet supported.', $format)); 89 throw new \InvalidArgumentException(sprintf('The format "%s" is not yet supported.', $format));
@@ -242,7 +224,7 @@ class EntriesExport
242 /** 224 /**
243 * Use TCPDF to dump a .pdf file. 225 * Use TCPDF to dump a .pdf file.
244 */ 226 */
245 private function producePDF() 227 private function producePdf()
246 { 228 {
247 $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false); 229 $pdf = new \TCPDF(PDF_PAGE_ORIENTATION, PDF_UNIT, PDF_PAGE_FORMAT, true, 'UTF-8', false);
248 230
@@ -296,7 +278,7 @@ class EntriesExport
296 /** 278 /**
297 * Inspired from CsvFileDumper. 279 * Inspired from CsvFileDumper.
298 */ 280 */
299 private function produceCSV() 281 private function produceCsv()
300 { 282 {
301 $delimiter = ';'; 283 $delimiter = ';';
302 $enclosure = '"'; 284 $enclosure = '"';
@@ -336,7 +318,7 @@ class EntriesExport
336 ); 318 );
337 } 319 }
338 320
339 private function produceJSON() 321 private function produceJson()
340 { 322 {
341 return Response::create( 323 return Response::create(
342 $this->prepareSerializingContent('json'), 324 $this->prepareSerializingContent('json'),
@@ -349,7 +331,7 @@ class EntriesExport
349 ); 331 );
350 } 332 }
351 333
352 private function produceXML() 334 private function produceXml()
353 { 335 {
354 return Response::create( 336 return Response::create(
355 $this->prepareSerializingContent('xml'), 337 $this->prepareSerializingContent('xml'),
@@ -362,7 +344,7 @@ class EntriesExport
362 ); 344 );
363 } 345 }
364 346
365 private function produceTXT() 347 private function produceTxt()
366 { 348 {
367 $content = ''; 349 $content = '';
368 $bar = str_repeat('=', 100); 350 $bar = str_repeat('=', 100);
@@ -385,6 +367,8 @@ class EntriesExport
385 /** 367 /**
386 * Return a Serializer object for producing processes that need it (JSON & XML). 368 * Return a Serializer object for producing processes that need it (JSON & XML).
387 * 369 *
370 * @param string $format
371 *
388 * @return Serializer 372 * @return Serializer
389 */ 373 */
390 private function prepareSerializingContent($format) 374 private function prepareSerializingContent($format)
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js
index a7acd84c..34e934cc 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js
+++ b/src/Wallabag/CoreBundle/Resources/public/themes/baggy/js/saveLink.js
@@ -79,19 +79,6 @@ $.fn.ready(function() {
79 }); 79 });
80 80
81 /* ========================================================================== 81 /* ==========================================================================
82 Keyboard gestion
83 ========================================================================== */
84
85 $(window).keydown(function(e){
86 if ( ( e.target.tagName.toLowerCase() !== 'input' && e.keyCode == 83 ) || (e.keyCode == 27 && $bagitForm.is(':visible') ) ) {
87 $bagit.removeClass("current");
88 $("#bagit-arrow").removeClass("arrow-down");
89 toggleSaveLinkForm();
90 return false;
91 }
92 });
93
94 /* ==========================================================================
95 Process all links inside an article 82 Process all links inside an article
96 ========================================================================== */ 83 ========================================================================== */
97 84
diff --git a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css
index 6f44e1da..96c38822 100755
--- a/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css
+++ b/src/Wallabag/CoreBundle/Resources/public/themes/material/css/main.css
@@ -54,20 +54,6 @@ body.login main {
54 padding: 0; 54 padding: 0;
55} 55}
56 56
57#warning_message {
58 position: fixed;
59 background-color: #ff6347;
60 z-index: 1000;
61 bottom: 0;
62 left: 0;
63 width: 100%;
64 color: #000;
65}
66
67#warning_message a {
68 color: #555;
69}
70
71.border-bottom { 57.border-bottom {
72 border-bottom: 1px solid #DDD; 58 border-bottom: 1px solid #DDD;
73} 59}
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
index d3311d3a..d19cf1bf 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml
@@ -1,130 +1,425 @@
1#Login 1security:
2Keep me logged in: 'Forbliv logget ind' 2 login:
3Forgot your password?: 'Glemt adgangskoden?' 3 # page_title: 'Welcome to wallabag!'
4Login: 'Log ind' 4 keep_logged_in: 'Forbliv logget ind'
5Back to login: 'Tilbage til login' 5 forgot_password: 'Glemt adgangskoden?'
6Send: 'Send' 6 submit: 'Log ind'
7"Enter your email address below and we'll send you password reset instructions.": "Indtast din emailadresse nedenfor, så vil du modtage instrukser om at nulstille adgangskoden." 7 # register: 'Register'
8 username: 'Brugernavn'
9 password: 'Adgangskode'
10 # cancel: 'Cancel'
11 resetting:
12 description: "Indtast din emailadresse nedenfor, så vil du modtage instrukser om at nulstille adgangskoden."
13 register:
14 # page_title: 'Create an account'
15 # go_to_account: 'Go to your account'
8 16
9# Menu 17menu:
10unread: 'ulæst' 18 left:
11starred: 'favoritter' 19 unread: 'Ulæst'
12archive: 'arkiv' 20 starred: 'Favoritter'
13all: 'alle artikler' 21 archive: 'Arkiv'
14tags: 'tags' 22 all_articles: 'Alle artikler'
15config: 'Opsætning' 23 config: 'Opsætning'
16howto: 'how-to' 24 tags: 'Tags'
17logout: 'log ud' 25 # internal_settings: 'Internal Settings'
18Filtered: 'Filtreret' 26 # import: 'Import'
19About: 'Om' 27 howto: 'KUow-to'
28 # developer: 'Developer'
29 logout: 'Log ud'
30 about: 'Om'
31 search: 'Søg'
32 # save_link: 'Save a link'
33 back_to_unread: 'Tilbage til de ulæste artikler'
34 top:
35 add_new_entry: 'Tilføj ny artikel'
36 search: 'Søg'
37 filter_entries: 'Filtrer artikler'
38 # export: 'Export'
39 search_form:
40 input_label: 'Indtast søgning'
20 41
21# Header 42footer:
22Back to unread articles: 'Tilbage til de ulæste artikler' 43 wallabag:
23Add a new entry: 'Tilføj ny artikel' 44 # elsewhere: 'Take wallabag with you'
24Search: 'Søg' 45 # social: 'Social'
25Filter entries: 'Filtrer artikler' 46 # powered_by: 'powered by'
26Enter your search here: 'Indtast søgning' 47 about: 'Om'
27Save new entry: 'Gem ny artikel'
28 48
29# Config screen 49config:
30Settings: 'Indstillinger' 50 page_title: 'Opsætning'
31User information: 'Brugeroplysninger' 51 tab_menu:
32Password: 'Adgangskode' 52 settings: 'Indstillinger'
33RSS: 'RSS' 53 rss: 'RSS'
34Add a user: 'Tilføj bruger' 54 user_info: 'Brugeroplysninger'
35Theme: 'Tema' 55 password: 'Adgangskode'
36Items per page: 'Poster pr. side' 56 # rules: 'Tagging rules'
37Language: 'Sprog' 57 new_user: 'Tilføj bruger'
38Save: 'Gem' 58 form:
39RSS token: 'RSS-Token' 59 save: 'Gem'
40Name: 'Navn' 60 form_settings:
41Email: 'Emailadresse' 61 theme_label: 'Tema'
42No token: 'Intet token' 62 items_per_page_label: 'Poster pr. side'
43Reset your token: 'Nulstil token' 63 language_label: 'Sprog'
44Create your token: 'Opret token' 64 reading_speed:
45Rss limit: 'RSS-grænse' 65 # label: 'Reading speed'
46RSS links: 'RSS-Links' 66 # help_message: 'You can use online tools to estimate your reading speed:'
47'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'RSS-feeds fra wallabag gør det muligt at læse de artikler, der gemmes i wallabag, med din RSS-læser. Det kræver, at du genererer et token først.' 67 # 100_word: 'I read ~100 words per minute'
48Old password: 'Gammel adgangskode' 68 # 200_word: 'I read ~200 words per minute'
49New password: 'Ny adgangskode' 69 # 300_word: 'I read ~300 words per minute'
50Repeat new password: 'Gentag adgangskode' 70 # 400_word: 'I read ~400 words per minute'
51Username: 'Brugernavn' 71 form_rss:
72 description: 'RSS-feeds fra wallabag gør det muligt at læse de artikler, der gemmes i wallabag, med din RSS-læser. Det kræver, at du genererer et token først.'
73 token_label: 'RSS-Token'
74 no_token: 'Intet token'
75 token_create: 'Opret token'
76 token_reset: 'Nulstil token'
77 rss_links: 'RSS-Links'
78 rss_link:
79 unread: 'ulæst'
80 starred: 'favoritter'
81 archive: 'arkiv'
82 # rss_limit: 'Number of items in the feed'
83 form_user:
84 # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion"
85 name_label: 'Navn'
86 email_label: 'Emailadresse'
87 # twoFactorAuthentication_label: 'Two factor authentication'
88 form_password:
89 old_password_label: 'Gammel adgangskode'
90 new_password_label: 'Ny adgangskode'
91 repeat_new_password_label: 'Gentag adgangskode'
92 form_rules:
93 # if_label: 'if'
94 # then_tag_as_label: 'then tag as'
95 # delete_rule_label: 'delete'
96 # rule_label: 'Rule'
97 # tags_label: 'Tags'
98 # faq:
99 # title: 'FAQ'
100 # tagging_rules_definition_title: 'What does « tagging rules » mean?'
101 # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.'
102 # how_to_use_them_title: 'How do I use them?'
103 # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
104 # variables_available_title: 'Which variables and operators can I use to write rules?'
105 # variables_available_description: 'The following variables and operators can be used to create tagging rules:'
106 # meaning: 'Meaning'
107 # variable_description:
108 # label: 'Variable'
109 # title: 'Title of the entry'
110 # url: 'URL of the entry'
111 # isArchived: 'Whether the entry is archived or not'
112 # isStarred: 'Whether the entry is starred or not'
113 # content: "The entry's content"
114 # language: "The entry's language"
115 # mimetype: "The entry's mime-type"
116 # readingTime: "The estimated entry's reading time, in minutes"
117 # domainName: 'The domain name of the entry'
118 # operator_description:
119 # label: 'Operator'
120 # less_than: 'Less than...'
121 # strictly_less_than: 'Strictly less than...'
122 # greater_than: 'Greater than...'
123 # strictly_greater_than: 'Strictly greater than...'
124 # equal_to: 'Equal to...'
125 # not_equal_to: 'Not equal to...'
126 # or: 'One rule OR another'
127 # and: 'One rule AND another'
128 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
129 form_new_user:
130 username_label: 'Brugernavn'
131 password_label: 'Adgangskode'
132 repeat_new_password_label: 'Gentag adgangskode'
133 plain_password_label: '????'
134 email_label: 'Emailadresse'
52 135
53# Entries 136entry:
54'estimated reading time': 'estimeret læsetid' 137 page_titles:
55original: original 138 # unread: 'Unread entries'
56Toggle mark as read: 'Marker som læst' 139 # starred: 'Starred entries'
57Toggle favorite: 'Skift favoritstatus' 140 # archived: 'Archived entries'
58Delete: 'Slet' 141 # filtered: 'Filtered entries'
142 list:
143 # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'estimeret læsetid'
145 reading_time_minutes: 'estimeret læsetid: %readingTime% min'
146 reading_time_less_one_minute: 'estimeret læsetid: <small class="inferieur">&lt;</small> 1 min'
147 original_article: 'original'
148 toogle_as_read: 'Marker som læst'
149 toogle_as_star: 'Skift favoritstatus'
150 delete: 'Slet'
151 # export_title: 'Export'
152 filters:
153 title: 'Filtre'
154 status_label: 'Status'
155 archived_label: 'Arkiveret'
156 starred_label: 'Favorit'
157 preview_picture_label: 'Har et vist billede'
158 preview_picture_help: 'Forhåndsvis billede'
159 language_label: 'Sprog'
160 reading_time:
161 label: 'Læsetid i minutter'
162 from: 'fra'
163 to: 'til'
164 domain_label: 'Domænenavn'
165 created_at:
166 label: 'Oprettelsesdato'
167 from: 'fra'
168 to: 'til'
169 action:
170 clear: 'Ryd'
171 filter: 'Filter'
172 view:
173 left_menu:
174 # back_to_top: 'Back to top'
175 back_to_homepage: 'Tilbage'
176 set_as_read: 'Marker som læst'
177 # set_as_unread: 'Mark as unread'
178 set_as_favorite: 'Marker som favorit'
179 view_original_article: 'Originalartikel'
180 # re_fetch_content: 'Re-fetch content'
181 delete: 'Slet'
182 add_a_tag: 'Tliføj et tag'
183 share_content: 'Deling'
184 # share_email_label: 'Email'
185 download: 'Download'
186 # print: 'Print'
187 problem:
188 label: 'Problemer?'
189 description: 'Vises artiklen forkert?'
190 edit_title: 'Rediger titel'
191 original_article: 'original'
192 # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
193 new:
194 page_title: 'Gem ny artikel'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 # page_title: 'Edit an entry'
200 # title_label: 'Title'
201 url_label: 'Url'
202 # is_public_label: 'Public'
203 save_label: 'Gem'
59 204
60# Filters 205about:
61Filters: 'Filtre' 206 page_title: 'Om'
62Status: 'Status' 207 top_menu:
63Archived: 'Arkiveret' 208 who_behind_wallabag: 'Hvem står bag wallabag'
64Starred: 'Favorit' 209 getting_help: 'Find hjælp'
65Preview picture: 'Forhåndsvis billede' 210 helping: 'Hjælp wallabag'
66Has a preview picture: 'Har et vist billede' 211 contributors: 'Bidragsydere'
67Reading time in minutes: 'Læsetid i minutter' 212 # third_party: 'Third-party libraries'
68from: 'fra' 213 who_behind_wallabag:
69to: 'til' 214 developped_by: 'Udviklet af'
70website.com: 'website.com' 215 website: 'Hjemmeside'
71Domain name: 'Domænenavn' 216 many_contributors: 'Og mange andre bidragsydere ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">på Github</a>'
72Creation date: 'Oprettelsesdato' 217 project_website: 'Projektets hjemmeside'
73dd/mm/yyyy: 'dd.mm.åååå' 218 license: 'Licens'
74Clear: 'Ryd' 219 version: 'Version'
75Filter: 'Filter' 220 getting_help:
221 documentation: 'Dokumentation'
222 bug_reports: 'Bugs'
223 support: '<a href="https://support.wallabag.org">På vor support-side</a> eller <a href="https://github.com/wallabag/wallabag/issues">på GitHub</a>'
224 helping:
225 description: 'wallabag er gratis og Open source. Du kan hjælpe os:'
226 by_contributing: 'ved at bidrage til projektet:'
227 by_contributing_2: 'et Github-issue fortæller om alt, hvad vi har brug for:'
228 by_paypal: 'via Paypal'
229 contributors:
230 # description: 'Thank you to contributors on wallabag web application'
231 third_party:
232 # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):'
233 # package: 'Package'
234 license: 'Licens'
76 235
77# About 236howto:
78Who is behind wallabag: "hvem står bag wallabag" 237 page_title: 'How-to'
79Getting help: "Find hjælp" 238 # page_description: 'There are several ways to save an article:'
80Helping wallabag: "hjælp wallabag" 239 top_menu:
81Developed by: "Udviklet af" 240 browser_addons: 'Browserudvidelser'
82website: "Hjemmeside" 241 mobile_apps: 'Apps'
83And many others contributors ♥: "Og mange andre bidragsydere ♥" 242 bookmarklet: 'Bookmarklet'
84on GitHub: "på GitHub" 243 form:
85Project website: "Projektets hjemmeside" 244 description: 'Tak gennem denne formular'
86License: "Licens" 245 browser_addons:
87Version: "Version" 246 firefox: 'Standardudvidelse til Firefox'
88Documentation: "Dokumentation" 247 chrome: 'Chrome-udvidelse'
89Bug reports: "Bugs" 248 mobile_apps:
90On our support website: "På vor support-side" 249 android:
91or: "eller" 250 via_f_droid: 'via F-Droid'
92"wallabag is free and opensource. You can help us:": "wallabag er gratis og Open source. Du kan hjælpe os:" 251 via_google_play: 'via Google Play'
93"by contributing to the project:": "ved at bidrage til projektet:" 252 # ios: 'on the iTunes Store'
94an issue lists all our needs: "et Github-issue fortæller om alt, hvad vi har brug for:" 253 # windows: 'on the Microsoft Store'
95via Paypal: "via PayPal" 254 bookmarklet:
255 description: 'Træk dette link til din bogmærkeliste:'
96 256
97# Howto 257quickstart:
98Form: Formular 258 # page_title: 'Quickstart'
99Thanks to this form: "Tak gennem denne formular" 259 # intro:
100Browser addons: "Browserudvidelser" 260 # title: 'Welcome to wallabag!'
101Mobile apps: "Apps" 261 # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
102Bookmarklet: "Bookmarklet" 262 # paragraph_2: 'Follow us!'
103Standard Firefox Add-On: "Standardudvidelse til Firefox" 263 # configure:
104Chrome Extension: "Chrome-udvidelse" 264 # title: 'Configure the application'
105download the application: "Download" 265 # language: 'Change language and design'
106"Drag &amp; drop this link to your bookmarks bar:": "Træk dette link til din bogmærkeliste:" 266 # rss: 'Enable RSS feeds'
267 # tagging_rules: 'Write rules to automatically tag your articles'
268 # admin:
269 # title: 'Administration'
270 # description: 'As an administrator, you have privileges on wallabag. You can:'
271 # new_user: 'Create a new user'
272 # analytics: 'Configure analytics'
273 # sharing: 'Enable some parameters about article sharing'
274 # export: 'Configure export'
275 # import: 'Configure import'
276 # first_steps:
277 # title: 'First steps'
278 # new_article: 'Save your first article'
279 # unread_articles: 'And classify it!'
280 # migrate:
281 # title: 'Migrate from an existing service'
282 # description: "Are you using another service? We'll help you to retrieve your data on wallabag."
283 # pocket: 'Migrate from Pocket'
284 # wallabag_v1: 'Migrate from wallabag v1'
285 # wallabag_v2: 'Migrate from wallabag v2'
286 # developer:
287 # title: 'Developers'
288 # create_application: 'Create your third application'
289 # docs:
290 # title: 'Full documentation'
291 # annotate: 'Annotate your article'
292 # export: 'Convert your articles into ePUB or PDF'
293 # search_filters: 'See how you can look for an article by using search engine and filters'
294 # fetching_errors: 'What can I do if an article encounters errors during fetching?'
295 # all_docs: 'And so many other articles!'
296 # support:
297 # title: 'Support'
298 # description: 'If you need some help, we are here for you.'
299 # github: 'On GitHub'
300 # email: 'By email'
301 # gitter: 'On Gitter'
107 302
108# Flash messages 303tag:
109Information updated: "Oplysninger opdateret" 304 page_title: 'Tags'
110"Config saved. Some parameters will be considered after disconnection.": "Opsætning gemt. Visse ændringer vil først fremgå ved næste login." 305 list:
111RSS information updated: "RSS-oplysninger opdateret" 306 # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
112Password updated: "Adgangskode opdateret"
113Entry starred: "Artikel markeret som favorit"
114Entry unstarred: "Artikel ikke længere markeret som favorit"
115Entry archived: "Artikel arkiveret"
116Entry unarchived: "Artikel ikke længere arkiveret"
117Entry deleted: "Artikel slettet"
118 307
119# Entry 308import:
120Mark as read: 'Marker som læst' 309 # page_title: 'Import'
121Favorite: 'Marker som favorit' 310 # page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.'
122back: 'tilbage' 311 # action:
123original article: 'Originalartikel' 312 # import_contents: 'Import contents'
124Add a tag: 'Tliføj et tag' 313 # form:
125Share: 'Deling' 314 # mark_as_read_title: 'Mark all as read?'
126Download: 'Download' 315 # mark_as_read_label: 'Mark all imported entries as read'
127Does this article appear wrong?: "Vises artiklen forkert?" 316 # file_label: 'File'
128Problems?: 'Problemer?' 317 # save_label: 'Upload file'
129Edit title: "Rediger titel" 318 # pocket:
319 # page_title: 'Import > Pocket'
320 # description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag."
321 # config_missing:
322 # description: "Pocket import isn't configured."
323 # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
324 # user_message: 'Your server admin needs to define an API Key for Pocket.'
325 # authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.'
326 # connect_to_pocket: 'Connect to Pocket and import data'
327 # wallabag_v1:
328 # page_title: 'Import > Wallabag v1'
329 # description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.'
330 # how_to: 'Please select your wallabag export and click on the below button to upload and import it.'
331 # wallabag_v2:
332 # page_title: 'Import > Wallabag v2'
333 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
130 334
335developer:
336 # page_title: 'Developer'
337 # welcome_message: 'Welcome to the wallabag API'
338 # documentation: 'Documentation'
339 # how_to_first_app: 'How to create my first application'
340 # full_documentation: 'View full API documentation'
341 # list_methods: 'List API methods'
342 # clients:
343 # title: 'Clients'
344 # create_new: 'Create a new client'
345 # existing_clients:
346 # title: 'Existing clients'
347 # field_id: 'Client ID'
348 # field_secret: 'Client secret'
349 # field_uris: 'Redirect URIs'
350 # field_grant_types: 'Grant type allowed'
351 # no_client: 'No client yet.'
352 # remove:
353 # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !'
354 # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
355 # action: 'Remove this client'
356 # client:
357 # page_title: 'Developer > New client'
358 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
359 # form:
360 # redirect_uris_label: 'Redirect URIs'
361 # save_label: 'Create a new client'
362 # action_back: 'Back'
363 # client_parameter:
364 # page_title: 'Developer > Client parameters'
365 # page_description: 'Here are your client parameters.'
366 # field_id: 'Client ID'
367 # field_secret: 'Client secret'
368 # back: 'Back'
369 # read_howto: 'Read the howto "Create my first application"'
370 # howto:
371 # page_title: 'Developer > How to create my first application'
372 # description:
373 # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.'
374 # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.'
375 # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.'
376 # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):'
377 # paragraph_5: 'The API will return a response like this:'
378 # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:'
379 # paragraph_7: 'This call will return all the entries for your user.'
380 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
381 # back: 'Back'
382
383validator:
384 password_must_match: 'De indtastede adgangskoder skal være ens'
385 password_too_short: 'Adgangskoden skal være mindst 8 tegn'
386 # password_wrong_value: 'Wrong value for your current password'
387 # item_per_page_too_high: 'This will certainly kill the app'
388 # rss_limit_too_hight: 'This will certainly kill the app'
389
390flashes:
391 config:
392 notice:
393 config_saved: 'Opsætning gemt. Visse ændringer vil først fremgå ved næste login.'
394 password_updated: 'Adgangskode opdateret'
395 # password_not_updated_demo: "In demonstration mode, you can't change password for this user."
396 user_updated: 'Oplysninger opdateret'
397 rss_updated: 'RSS-oplysninger opdateret'
398 # tagging_rules_updated: 'Tagging rules updated'
399 # tagging_rules_deleted: 'Tagging rule deleted'
400 # user_added: 'User "%username%" added'
401 # rss_token_updated: 'RSS token updated'
402 entry:
403 notice:
404 # entry_already_saved: 'Entry already saved on %date%'
405 # entry_saved: 'Entry saved'
406 # entry_updated: 'Entry updated'
407 # entry_reloaded: 'Entry reloaded'
408 # entry_reload_failed: 'Failed to reload entry'
409 entry_archived: 'Artikel arkiveret'
410 entry_unarchived: 'Artikel ikke længere arkiveret'
411 entry_starred: 'Artikel markeret som favorit'
412 entry_unstarred: 'Artikel ikke længere markeret som favorit'
413 entry_deleted: 'Artikel slettet'
414 tag:
415 notice:
416 # tag_added: 'Tag added'
417 import:
418 notice:
419 # failed: 'Import failed, please try again.'
420 # failed_on_file: 'Error while processing import. Please verify your import file.'
421 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
422 developer:
423 notice:
424 # client_created: 'New client created.'
425 # client_deleted: 'Client deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
index 8b75594c..f1e7b6b8 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml
@@ -1,129 +1,425 @@
1#Login 1security:
2Keep me logged in: 'Angemeldet bleiben' 2 login:
3Forgot your password?: 'Kennwort vergessen?' 3 page_title: 'Willkommen bei wallabag!'
4Login: 'Anmelden' 4 keep_logged_in: 'Angemeldet bleiben'
5Back to login: 'Zurück zur Anmeldung' 5 forgot_password: 'Kennwort vergessen?'
6Send: 'Senden' 6 submit: 'Anmelden'
7"Enter your email address below and we'll send you password reset instructions.": "Gib unten deine E-Mail-Adresse ein und wir senden dir eine Anleitung für das Zurücksetzen deines Kennworts." 7 register: 'Registrieren'
8 username: 'Benutzername'
9 password: 'Kennwort'
10 cancel: 'Abbrechen'
11 resetting:
12 description: "Gib unten deine E-Mail-Adresse ein und wir senden dir eine Anleitung für das Zurücksetzen deines Kennworts."
13 register:
14 page_title: 'Account erstellen'
15 go_to_account: 'Gehe zu deinem Account'
8 16
9# Menu 17menu:
10unread: 'ungelesen' 18 left:
11starred: 'favoriten' 19 unread: 'Ungelesen'
12archive: 'archiv' 20 starred: 'Favoriten'
13all: 'alle artikel' 21 archive: 'Archiv'
14tags: 'tags' 22 all_articles: 'Alle Artikel'
15config: 'konfiguration' 23 config: 'Konfiguration'
16howto: 'how-to' 24 tags: 'Tags'
17logout: 'abmelden' 25 internal_settings: 'Interne Einstellungen'
18Filtered: 'Gefiltert' 26 import: 'Importieren'
19About: 'Über' 27 howto: 'How-To'
28 developer: 'Entwickler'
29 logout: 'Abmelden'
30 about: 'Über'
31 search: 'Suche'
32 save_link: 'Link speichern'
33 back_to_unread: 'Zurück zu ungelesenen Artikeln'
34 top:
35 add_new_entry: 'Neuen Artikel hinzufügen'
36 search: 'Suche'
37 filter_entries: 'Artikel filtern'
38 export: 'Exportieren'
39 search_form:
40 input_label: 'Suchbegriff hier eingeben'
20 41
21# Header 42footer:
22Back to unread articles: 'Zurück zu ungelesenen Artikeln' 43 wallabag:
23Add a new entry: 'Neuen Artikel hinzufügen' 44 elsewhere: 'Nimm wallabag mit dir mit'
24Search: 'Suche' 45 social: 'Soziales'
25Filter entries: 'Artikel filtern' 46 powered_by: 'angetrieben von'
26Enter your search here: 'Suchbegriff hier eingeben' 47 about: 'Über'
27Save new entry: 'Neuen Artikel speichern'
28 48
29# Config screen 49config:
30Settings: 'Einstellungen' 50 page_title: 'Einstellungen'
31User information: 'Benutzer-Information' 51 tab_menu:
32Password: 'Kennwort' 52 settings: 'Einstellungen'
33RSS: 'RSS' 53 rss: 'RSS'
34Add a user: 'Benutzer hinzufügen' 54 user_info: 'Benutzer-Information'
35Theme: 'Theme' 55 password: 'Kennwort'
36Items per page: 'Einträge pro Seite' 56 rules: 'Tagging-Regeln'
37Language: 'Sprache' 57 new_user: 'Benutzer hinzufügen'
38Save: 'Speichern' 58 form:
39RSS token: 'RSS-Token' 59 save: 'Speichern'
40Name: 'Name' 60 form_settings:
41Email: 'E-Mail-Adresse' 61 theme_label: 'Theme'
42No token: 'Kein Token' 62 items_per_page_label: 'Einträge pro Seite'
43Reset your token: 'Token zurücksetzen' 63 language_label: 'Sprache'
44Create your token: 'Token erstellen' 64 reading_speed:
45Rss limit: 'RSS-Limit' 65 label: 'Lesegeschwindigkeit'
46RSS links: 'RSS-Links' 66 help_message: 'Du kannst Online-Tools nutzen, um deine Lesegeschwindigkeit herauszufinden.'
47'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'Die RSS-Feeds von wallabag erlauben es dir, deine gespeicherten Artikel mit deinem bevorzugten RSS-Reader zu lesen. Vorher musst du jedoch einen Token erstellen.' 67 100_word: 'Ich lese ~100 Wörter pro Minute'
48Old password: 'Altes Kennwort' 68 200_word: 'Ich lese ~200 Wörter pro Minute'
49New password: 'Neues Kennwort' 69 300_word: 'Ich lese ~300 Wörter pro Minute'
50Repeat new password: 'Neues Kennwort wiederholen' 70 400_word: 'Ich lese ~400 Wörter pro Minute'
51Username: 'Benutzername' 71 form_rss:
72 description: 'Die RSS-Feeds von wallabag erlauben es dir, deine gespeicherten Artikel mit deinem bevorzugten RSS-Reader zu lesen. Vorher musst du jedoch einen Token erstellen.'
73 token_label: 'RSS-token'
74 no_token: 'Kein Token'
75 token_create: 'Token erstellen'
76 token_reset: 'Token zurücksetzen'
77 rss_links: 'RSS-Links'
78 rss_link:
79 unread: 'ungelesen'
80 starred: 'favoriten'
81 archive: 'archiv'
82 rss_limit: 'Anzahl der Einträge im Feed'
83 form_user:
84 two_factor_description: "Wenn du die Zwei-Faktor-Authentifizierung aktivierst, erhältst du eine E-Mail mit einem Code bei jeder nicht vertraulichen Verbindung"
85 name_label: 'Name'
86 email_label: 'E-Mail-Adresse'
87 twoFactorAuthentication_label: 'Zwei-Faktor-Authentifizierung'
88 form_password:
89 old_password_label: 'Altes Kennwort'
90 new_password_label: 'Neues Kennwort'
91 repeat_new_password_label: 'Neues Kennwort wiederholen'
92 form_rules:
93 if_label: 'Wenn'
94 then_tag_as_label: 'dann tagge als'
95 delete_rule_label: 'löschen'
96 rule_label: 'Regel'
97 tags_label: 'Tags'
98 faq:
99 title: 'FAQ'
100 tagging_rules_definition_title: 'Was bedeuten die "Tagging-Regeln"?'
101 tagging_rules_definition_description: 'Dies sind Regeln von wallabag, um neu hinzugefügte Einträge autmatisch zu taggen.<br />Jedes Mal, wenn ein neuer Eintrag hinzufügt wird, werden die Tagging-Regeln angewandt. Dies erleichtert dir die Arbeit, deine Einträge manuell zu klassifizieren.'
102 how_to_use_them_title: 'Wie nutze ich sie?'
103 how_to_use_them_description: 'Nehmen wir an, du möchtest deine Einträge als "<i>schnell lesbar</i>" taggen, wenn die Lesezeit kürzer als drei Minuten ist.<br />In diesem Falle solltest du "readingTime &lt;= 3" in das <i>Regel</i>-Feld und "<i>schnell lesbar</i>" in das <i>Tags</i>-Feld schreiben.<br />Mehrere Tags können gleichzeitig hinzugefügt werden, indem sie durch ein Kommata getrennt werden: "<i>schnell lesbar, interessant</i>"<br />Komplexe Regeln können durch vordefinierte Operatoren geschrieben werden: if "<i>readingTime &gt;= 5 AND domainName = "github.com"</i>" then tag as "<i>long reading, github </i>"'
104 variables_available_title: 'Welche Variablen und Operatoren kann ich nutzen, um Regeln zu schreiben?'
105 variables_available_description: 'Die folgenden Variablen und Operatoren können genutzt werden, um Tagging-Regeln zu erstellen:'
106 meaning: 'Bedeutung'
107 variable_description:
108 label: 'Variable'
109 title: 'Titel des Eintrags'
110 url: 'URL des Eintrags'
111 isArchived: 'gibt an, ob der Eintrag archiviert ist oder nicht'
112 isStarred: 'gibt an, ob der Eintrag favorisiert ist oder nicht'
113 content: "Inhalt des Eintrags"
114 language: "Sprache des Eintrags"
115 mimetype: "MIME-Typ des Eintrags"
116 readingTime: "Die geschätzte Lesezeit in Minuten"
117 domainName: 'Der Domain-Name des Eintrags'
118 operator_description:
119 label: 'Operator'
120 less_than: 'Weniger oder gleich als…'
121 strictly_less_than: 'Weniger als…'
122 greater_than: 'Größer oder gleich als…'
123 strictly_greater_than: 'Größer als…'
124 equal_to: 'gleich'
125 not_equal_to: 'ungleich'
126 or: 'Eine Regel ODER die andere'
127 and: 'Eine Regel UND eine andere'
128 matches: 'Tests, ob eine <i>Variable</i> auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title matches "Fußball"</code>'
129 form_new_user:
130 username_label: 'Benutzername'
131 password_label: 'Kennwort'
132 repeat_new_password_label: 'Neues Kennwort wiederholen'
133 plain_password_label: '????'
134 email_label: 'E-Mail-Adresse'
52 135
53# Entries 136entry:
54'estimated reading time': 'geschätzte Lesezeit' 137 page_titles:
55original: original 138 unread: 'Ungelesene Einträge'
56Toggle mark as read: 'Gelesen-Status ändern' 139 starred: 'Favorisierte Einträge'
57Toggle favorite: 'Favoriten-Status ändern' 140 archived: 'Archivierte Einträge'
58Delete: 'Löschen' 141 filtered: 'Gefilterte Einträge'
142 list:
143 number_on_the_page: '{0} Es gibt keine Einträge.|{1} Es gibt einen Eintrag.|]1,Inf[ Es gibt %count% Einträge.'
144 reading_time: 'geschätzte Lesezeit'
145 reading_time_minutes: 'geschätzte Lesezeit: %readingTime% min'
146 reading_time_less_one_minute: 'geschätzte Lesezeit: <small class="inferieur">&lt;</small> 1 min'
147 original_article: 'original'
148 toogle_as_read: 'Gelesen-Status ändern'
149 toogle_as_star: 'Favoriten-Status ändern'
150 delete: 'Löschen'
151 export_title: 'Exportieren'
152 filters:
153 title: 'Filters'
154 status_label: 'Status'
155 archived_label: 'Archiviert'
156 starred_label: 'Favorisiert'
157 preview_picture_label: 'Vorschaubild vorhanden'
158 preview_picture_help: 'Vorschaubild'
159 language_label: 'Sprache'
160 reading_time:
161 label: 'Lesezeit in Minuten'
162 from: 'von'
163 to: 'bis'
164 domain_label: 'Domain-Name'
165 created_at:
166 label: 'Erstellungsdatum'
167 from: 'von'
168 to: 'bis'
169 action:
170 clear: 'Zurücksetzen'
171 filter: 'Filter'
172 view:
173 left_menu:
174 back_to_top: 'Nach oben'
175 back_to_homepage: 'Zurück'
176 set_as_read: 'Als gelesen markieren'
177 set_as_unread: 'Als ungelesen markieren'
178 set_as_favorite: 'Favorisieren'
179 view_original_article: 'Original-Artikel'
180 re_fetch_content: 'Inhalt neu laden'
181 delete: 'Löschen'
182 add_a_tag: 'Tag hinzufügen'
183 share_content: 'Teilen'
184 share_email_label: 'E-Mail'
185 download: 'Herunterladen'
186 print: 'Drucken'
187 problem:
188 label: 'Probleme?'
189 description: 'Erscheint dieser Artikel falsch?'
190 edit_title: 'Titel ändern'
191 original_article: 'original'
192 annotations_on_the_entry: '{0} Keine Anmerkungen|{1} Eine Anmerkung|]1,Inf[ %nbAnnotations% Anmerkungen'
193 new:
194 page_title: 'Neuen Artikel speichern'
195 placeholder: 'https://website.de'
196 form_new:
197 url_label: URL
198 edit:
199 page_title: 'Eintrag bearbeiten'
200 title_label: 'Titel'
201 url_label: 'URL'
202 is_public_label: 'Öffentlich'
203 save_label: 'Speichern'
59 204
60# Filters 205about:
61Filters: 'Filter' 206 page_title: 'Über'
62Status: 'Status' 207 top_menu:
63Archived: 'Archiviert' 208 who_behind_wallabag: 'Wer steht hinter wallabag'
64Starred: 'Favorisiert' 209 getting_help: 'Hilfe bekommen'
65Preview picture: 'Vorschaubild' 210 helping: 'wallabag unterstützen'
66Has a preview picture: 'Vorschaubild vorhanden' 211 contributors: 'Unterstützer'
67Reading time in minutes: 'Lesezeit in Minuten' 212 third_party: 'Third-party libraries'
68from: 'von' 213 who_behind_wallabag:
69to: 'bis' 214 developped_by: 'Entwickelt von'
70website.com: 'website.com' 215 website: 'Webseite'
71Domain name: 'Domain-Name' 216 many_contributors: 'Und vielen anderen Unterstützern ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">auf Github</a>'
72Creation date: 'Erstellungsdatum' 217 project_website: 'Projektwebseite'
73dd/mm/yyyy: 'dd.mm.yyyy' 218 license: 'Lizenz'
74Clear: 'zurücksetzen' 219 version: 'Version'
75Filter: 'Filter' 220 getting_help:
221 documentation: 'Dokumentation'
222 bug_reports: 'Bugs'
223 support: '<a href="https://support.wallabag.org">Auf unserer Support-Webseite</a> oder <a href="https://github.com/wallabag/wallabag/issues">auf GitHub</a>'
224 helping:
225 description: 'wallabag ist kostenlos und Open-Source. Du kannst uns helfen:'
226 by_contributing: 'indem du zu dem Projekt beiträgst:'
227 by_contributing_2: 'ein Issue listet alle unsere Bedürfnisse:'
228 by_paypal: 'via PayPal'
229 contributors:
230 description: 'Ein Dankeschön an die Unterstützer von wallabag'
231 third_party:
232 description: 'Hier ist eine Liste der verwendeten Bibliotheken in wallabag (mit den jeweiligen Lizenzen):'
233 package: 'Paket'
234 license: 'Lizenz'
76 235
77# About 236howto:
78Who is behind wallabag: "Wer steht hinter wallabag" 237 page_title: 'How-To'
79Getting help: "Hilfe bekommen" 238 page_description: 'Es gibt mehrere Möglichkeiten, einen Artikel zu speichern:'
80Helping wallabag: "wallabag unterstützen" 239 top_menu:
81Developed by: "Entwickelt von" 240 browser_addons: 'Browser-Addons'
82website: "Webseite" 241 mobile_apps: 'Apps'
83And many others contributors ♥: "Und vielen anderen Unterstützern ♥" 242 bookmarklet: 'Bookmarklet'
84on GitHub: "auf GitHub" 243 form:
85Project website: "Projektwebseite" 244 description: 'Danke an dieses Formular'
86License: "Lizenz" 245 browser_addons:
87Version: "Version" 246 firefox: 'Firefox-Erweiterung'
88Documentation: "Dokumentation" 247 chrome: 'Chrome-Erweiterung'
89Bug reports: "Bugs" 248 mobile_apps:
90On our support website: "Auf unserer Support-Webseite" 249 android:
91or: "oder" 250 via_f_droid: 'via F-Droid'
92"wallabag is free and opensource. You can help us:": "wallabag ist kostenlos und Open-Source. Du kannst uns helfen:" 251 via_google_play: 'via Google Play'
93"by contributing to the project:": "indem du zu dem Projekt beiträgst:" 252 ios: 'im iTunes-Store'
94an issue lists all our needs: "ein Issue listet alle unsere Bedürfnisse:" 253 windows: 'im Microsoft-Store'
95via Paypal: "via PayPal" 254 bookmarklet:
255 description: 'Ziehe diesen Link in deine Lesezeichenleiste:'
96 256
97# Howto 257quickstart:
98Form: Formular 258 page_title: 'Schnelleinstieg'
99Thanks to this form: "Danke an dieses Formular" 259 intro:
100Browser addons: "Browser-Addons" 260 title: 'Willkommen zu wallabag!'
101Mobile apps: "Apps" 261 paragraph_1: "Wir werden dich bei der Benutzung von wallabag begleiten und dir einige Funktionen zeigen, die dich interessieren könnten."
102Bookmarklet: "Bookmarklet" 262 paragraph_2: 'Folge uns!'
103Standard Firefox Add-On: "Firefox-Erweiterung" 263 configure:
104Chrome Extension: "Chrome-Erweiterung" 264 title: 'Anwendung konfigurieren'
105download the application: "herunterladen" 265 language: 'Sprache und Design ändern'
106"Drag &amp; drop this link to your bookmarks bar:": "Ziehe diesen Link in deine Lesezeichenleiste:" 266 rss: 'RSS-Feeds aktivieren'
267 tagging_rules: 'Schreibe Regeln, um deine Beiträge automatisch zu taggen (verschlagworten)'
268 admin:
269 title: 'Administration'
270 description: 'Als Adminstrator hast du einige Privilegien. Du kannst:'
271 new_user: 'Einen neuen Nutzer anlegen'
272 analytics: 'das Tracking konfigurieren'
273 sharing: 'Einige Parameter für das Teilen von Artikel setzen'
274 export: 'Export-Einstellungen ändern'
275 import: 'Import-Einstellungen ändern'
276 first_steps:
277 title: 'Erste Schritte'
278 new_article: 'Speichere deinen ersten Artikel'
279 unread_articles: 'Und klassifiziere ihn!'
280 migrate:
281 title: 'Von einem anderen Dienst migrieren'
282 description: "Du nutzt einen anderen Dienst? Wir helfen dir, um deine Daten zu wallabag zu transportieren."
283 pocket: 'von Pocket migrieren'
284 wallabag_v1: 'von wallabag v1 migrieren'
285 wallabag_v2: 'von wallabag v2 migrieren'
286 developer:
287 title: 'Entwickler'
288 create_application: 'Erstelle eine Anwendung und nutze die wallabag API'
289 docs:
290 title: 'Komplette Dokumentation'
291 annotate: 'Anmerkungen zu Artikeln hinzufügen'
292 export: 'Artikel nach ePUB oder PDF konvertieren'
293 search_filters: 'Schau nach, wie du nach einem Artikel über die Such- und Filterfunktion suchen kannst'
294 fetching_errors: 'Was kann ich machen, wenn ein Artikel Fehler beim Herunterladen des Inhalts zeigt?'
295 all_docs: 'Und viele weitere Artikel!'
296 support:
297 title: 'Support'
298 description: 'Wenn du Hilfe brauchst, wir sind für dich da.'
299 github: 'Auf GitHub'
300 email: 'Über E-Mail'
301 gitter: 'Auf Gitter'
107 302
108# Flash messages 303tag:
109Information updated: "Information aktualisiert" 304 page_title: 'Tags'
110"Config saved. Some parameters will be considered after disconnection.": "Konfiguration gespeichert. Einige Einstellungen werden erst nach einer erneuten Anmeldung übernommen." 305 list:
111RSS information updated: "RSS-Informationen aktualisiert" 306 number_on_the_page: '{0} Es gibt keine Tags.|{1} Es gibt einen Tag.|]1,Inf[ Es gibt %count% Tags.'
112Password updated: "Kennwort aktualisiert"
113Entry starred: "Artikel favorisiert"
114Entry unstarred: "Artikel defavorisiert"
115Entry archived: "Artikel archiviert"
116Entry unarchived: "Artikel dearchiviert"
117Entry deleted: "Artikel gelöscht"
118 307
119# Entry 308import:
120Mark as read: 'Als gelesen markieren' 309 page_title: 'Importieren'
121Favorite: 'Favorisieren' 310 page_description: 'Willkommen beim wallabag-Importer. Wähle deinen vorherigen Service aus, von dem du die Daten migrieren willst.'
122back: 'zurück' 311 action:
123original article: 'Original-Artikel' 312 import_contents: 'Inhalte importieren'
124Add a tag: 'Tag hinzufügen' 313 form:
125Share: 'Teilen' 314 mark_as_read_title: 'Alle als gelesen markieren?'
126Download: 'Herunterladen' 315 mark_as_read_label: 'Alle importierten Einträge als gelesen markieren'
127Does this article appear wrong?: "Erscheint dieser Artikel falsch?" 316 file_label: 'Datei'
128Problems?: 'Probleme?' 317 save_label: 'Datei hochladen'
129Edit title: "Titel ändern" 318 pocket:
319 page_title: 'Aus Pocket importieren'
320 description: "Dieser Importer wird all deine Pocket-Daten importieren. Pocket erlaubt es uns nicht, den Inhalt zu migrieren, daher wird der lesbare Inhalt erneut von wallabag heruntergeladen."
321 config_missing:
322 description: "Pocket-Import ist nicht konfiguriert."
323 admin_message: 'Du musst noch den %keyurls%a pocket_consumer_key%keyurle% definieren.'
324 user_message: 'Der Server-Administrator muss noch einen API-Key für Pocket konfigurieren.'
325 authorize_message: 'Du kannst deine Daten von deinem Pocket-Account importieren. Dazu musst du nur den nachfolgenden Button klicken und die Anwendung authentifizieren, sich mit getpocket.com zu verbinden.'
326 connect_to_pocket: 'Mit Pocket verbinden und Daten importieren'
327 wallabag_v1:
328 page_title: 'Aus wallabag v1 importieren'
329 description: 'Dieser Import wird all deine Artikel aus wallabag v1 importieren. Klicke auf der Konfigurations-Seite auf "JSON-Export" im "wallabag-Daten exportieren"-Abschnitt. Du erhältst eine "wallabag-export-1-xxxx-xx-xx.json"-Datei.'
330 how_to: 'Wähle die Export-Datei aus und klicke den nachfolgenden Button, um diese hochzuladen und zu importieren.'
331 wallabag_v2:
332 page_title: 'Aus wallabag v2 importieren'
333 description: 'Dieser Import wird all deine Artikel aus wallabag v2 importieren. Gehe auf "Alle Artikel" und dann, in der Exportieren-Seitenleiste auf "JSON". Dabei erhältst du eine "All articles.json"-Datei.'
334
335developer:
336 page_title: 'Entwickler'
337 welcome_message: 'Willkomen zur wallabag-API'
338 documentation: 'Dokumentation'
339 how_to_first_app: 'Wie erstelle ich meine erste Anwendung'
340 full_documentation: 'Komplette API-Dokumentation einsehen'
341 # list_methods: 'List API methods'
342 clients:
343 title: 'Clients'
344 create_new: 'Neuen Client erstellen'
345 existing_clients:
346 title: 'Bestehende Clients'
347 field_id: 'Client-ID'
348 field_secret: 'Client-Secret'
349 field_uris: 'Weiterleitungs-URIs'
350 field_grant_types: "Erlaubte grant_types"
351 no_client: 'Bisher kein Client.'
352 remove:
353 warn_message_1: 'Du hast die Möglichkeit, diesen Client zu entfernen. DIESE AKTION IST NICHT WIDERRUFBAR!'
354 warn_message_2: "Wenn du ihn entfernst, hat keine der damit konfigurierten Anwendungen mehr die Möglichkeit, sich in deinen wallabag-Account anzumelden."
355 action: 'Client entfernen'
356 client:
357 page_title: 'Entwickler > Neuer Client'
358 page_description: 'Du bist dabei, einen neuen Client zu erstellen. Fülle das nachfolgende Feld für die Weiterleitungs-URIs deiner Anwendung aus.'
359 form:
360 redirect_uris_label: 'Weiterleitungs-URIs'
361 save_label: 'Neuen Client erstellen'
362 action_back: 'Zurück'
363 client_parameter:
364 page_title: 'Entwickler > Client-Parameter'
365 page_description: 'Dies sind deine Client-Parameter.'
366 field_id: 'Client-ID'
367 field_secret: 'Client-Secret'
368 back: 'Zurück'
369 read_howto: 'Lese des How-To zu "Wie erstelle ich meine erste Anwendung"'
370 howto:
371 page_title: 'Entwickler > Wie erstelle ich meine erste Anwendung'
372 description:
373 paragraph_1: 'Die folgenden Befehle machen Gebrauch von der <a href="https://github.com/jkbrzt/httpie">HTTPie-Bibliothek</a>. Stelle sicher, dass sie auf deinem System installiert ist, bevor du fortfährst.'
374 paragraph_2: 'Du benötigst einen Token, damit deine Anwendung mit der wallabag-API kommunizieren kann.'
375 paragraph_3: 'Um diesen Token zu erstellen, muss <a href="%link%">ein neuer Client erstellt werden</a>.'
376 paragraph_4: 'Nun erstelle deinen Token (ersetze client_id, client_secret, username und password mit deinen Werten):'
377 paragraph_5: 'Die API wird eine Antwort der folgenden Art zurückgeben:'
378 paragraph_6: 'Der access_token ist nützlich, um die API aufzurufen. Beispiel:'
379 paragraph_7: 'Dieser Aufruf wird alle Einträge für den Nutzer zurückgeben.'
380 paragraph_8: 'Wenn du alle API-Endpunkte sehen willst, werfe einen Blick auf die <a href="%link%">API-Dokumentation</a>.'
381 back: 'Zurück'
382
383validator:
384 password_must_match: 'Die Kennwort-Felder müssen übereinstimmen.'
385 password_too_short: 'Kennwort-Mindestlänge von acht Zeichen nicht erfüllt'
386 password_wrong_value: 'Falscher Wert für dein aktuelles Kennwort'
387 item_per_page_too_high: 'Dies wird die Anwendung möglicherweise beenden'
388 rss_limit_too_hight: 'Dies wird die Anwendung möglicherweise beenden'
389
390flashes:
391 config:
392 notice:
393 config_saved: 'Konfiguration gespeichert. Einige Einstellungen werden erst nach einer erneuten Anmeldung übernommen.'
394 password_updated: 'Kennwort aktualisiert'
395 password_not_updated_demo: "Im Test-Modus kannst du das Kennwort nicht ändern."
396 user_updated: 'Information aktualisiert'
397 rss_updated: 'RSS-Informationen aktualisiert'
398 tagging_rules_updated: 'Tagging-Regeln aktualisiert'
399 tagging_rules_deleted: 'Tagging-Regel gelöscht'
400 user_added: 'Benutzer "%username%" erstellt'
401 rss_token_updated: 'RSS-Token aktualisiert'
402 entry:
403 notice:
404 entry_already_saved: 'Eintrag bereits am %date% gespeichert'
405 entry_saved: 'Eintag gespeichert'
406 entry_updated: 'Eintrag aktualisiert'
407 entry_reloaded: 'Eintrag neugeladen'
408 entry_reload_failed: 'Neuladen des Eintrags fehlgeschlagen'
409 entry_archived: 'Artikel archiviert'
410 entry_unarchived: 'Artikel dearchiviert'
411 entry_starred: 'Artikel favorisiert'
412 entry_unstarred: 'Artikel defavorisiert'
413 entry_deleted: 'Artikel gelöscht'
414 tag:
415 notice:
416 tag_added: 'Tag hinzugefügt'
417 import:
418 notice:
419 failed: 'Import fehlgeschlagen, bitte erneut probieren.'
420 failed_on_file: 'Fehler während des Imports. Bitte überprüfe deine Import-Datei.'
421 summary: 'Import-Zusammenfassung: %imported% importiert, %skipped% bereits gespeichert.'
422 developer:
423 notice:
424 client_created: 'Neuer Client erstellt.'
425 client_deleted: 'Client gelöscht'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
new file mode 100644
index 00000000..3dc22998
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml
@@ -0,0 +1,425 @@
1security:
2 login:
3 page_title: 'Welcome to wallabag!'
4 keep_logged_in: 'Keep me logged in'
5 forgot_password: 'Forgot your password?'
6 submit: 'Login'
7 register: 'Register'
8 username: 'Username'
9 password: 'Password'
10 cancel: 'Cancel'
11 resetting:
12 description: "Enter your email address below and we'll send you password reset instructions."
13 register:
14 page_title: 'Create an account'
15 go_to_account: 'Go to your account'
16
17menu:
18 left:
19 unread: 'Unread'
20 starred: 'Starred'
21 archive: 'Archive'
22 all_articles: 'All entries'
23 config: 'Config'
24 tags: 'Tags'
25 internal_settings: 'Internal Settings'
26 import: 'Import'
27 howto: 'How to'
28 developer: 'Developer'
29 logout: 'Logout'
30 about: 'About'
31 search: 'Search'
32 save_link: 'Save a link'
33 back_to_unread: 'Back to unread articles'
34 top:
35 add_new_entry: 'Add a new entry'
36 search: 'Search'
37 filter_entries: 'Filter entries'
38 export: 'Export'
39 search_form:
40 input_label: 'Enter your search here'
41
42footer:
43 wallabag:
44 elsewhere: 'Take wallabag with you'
45 social: 'Social'
46 powered_by: 'powered by'
47 about: 'About'
48
49config:
50 page_title: 'Config'
51 tab_menu:
52 settings: 'Settings'
53 rss: 'RSS'
54 user_info: 'User information'
55 password: 'Password'
56 rules: 'Tagging rules'
57 new_user: 'Add a user'
58 form:
59 save: 'Save'
60 form_settings:
61 theme_label: 'Theme'
62 items_per_page_label: 'Items per page'
63 language_label: 'Language'
64 reading_speed:
65 label: 'Reading speed'
66 help_message: 'You can use online tools to estimate your reading speed:'
67 100_word: 'I read ~100 words per minute'
68 200_word: 'I read ~200 words per minute'
69 300_word: 'I read ~300 words per minute'
70 400_word: 'I read ~400 words per minute'
71 form_rss:
72 description: 'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.'
73 token_label: 'RSS token'
74 no_token: 'No token'
75 token_create: 'Create your token'
76 token_reset: 'Regenerate your token'
77 rss_links: 'RSS links'
78 rss_link:
79 unread: 'unread'
80 starred: 'starred'
81 archive: 'archived'
82 rss_limit: 'Number of items in the feed'
83 form_user:
84 two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion"
85 name_label: 'Name'
86 email_label: 'Email'
87 twoFactorAuthentication_label: 'Two factor authentication'
88 form_password:
89 old_password_label: 'Current password'
90 new_password_label: 'New password'
91 repeat_new_password_label: 'Repeat new password'
92 form_rules:
93 if_label: 'if'
94 then_tag_as_label: 'then tag as'
95 delete_rule_label: 'delete'
96 rule_label: 'Rule'
97 tags_label: 'Tags'
98 faq:
99 title: 'FAQ'
100 tagging_rules_definition_title: 'What does « tagging rules » mean?'
101 tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.'
102 how_to_use_them_title: 'How do I use them?'
103 how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
104 variables_available_title: 'Which variables and operators can I use to write rules?'
105 variables_available_description: 'The following variables and operators can be used to create tagging rules:'
106 meaning: 'Meaning'
107 variable_description:
108 label: 'Variable'
109 title: 'Title of the entry'
110 url: 'URL of the entry'
111 isArchived: 'Whether the entry is archived or not'
112 isStarred: 'Whether the entry is starred or not'
113 content: "The entry's content"
114 language: "The entry's language"
115 mimetype: "The entry's mime-type"
116 readingTime: "The estimated entry's reading time, in minutes"
117 domainName: 'The domain name of the entry'
118 operator_description:
119 label: 'Operator'
120 less_than: 'Less than...'
121 strictly_less_than: 'Strictly less than...'
122 greater_than: 'Greater than...'
123 strictly_greater_than: 'Strictly greater than...'
124 equal_to: 'Equal to...'
125 not_equal_to: 'Not equal to...'
126 or: 'One rule OR another'
127 and: 'One rule AND another'
128 matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
129 form_new_user:
130 username_label: 'Username'
131 password_label: 'Password'
132 repeat_new_password_label: 'Repeat new password'
133 plain_password_label: '????'
134 email_label: 'Email'
135
136entry:
137 page_titles:
138 unread: 'Unread entries'
139 starred: 'Starred entries'
140 archived: 'Archived entries'
141 filtered: 'Filtered entries'
142 list:
143 number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'estimated reading time'
145 reading_time_minutes: 'estimated reading time: %readingTime% min'
146 reading_time_less_one_minute: 'estimated reading time: <small class="inferieur">&lt;</small> 1 min'
147 original_article: 'original'
148 toogle_as_read: 'Toggle mark as read'
149 toogle_as_star: 'Toggle favorite'
150 delete: 'Delete'
151 export_title: 'Export'
152 filters:
153 title: 'Filters'
154 status_label: 'Status'
155 archived_label: 'Archived'
156 starred_label: 'Starred'
157 preview_picture_label: 'Has a preview picture'
158 preview_picture_help: 'Preview picture'
159 language_label: 'Language'
160 reading_time:
161 label: 'Reading time in minutes'
162 from: 'from'
163 to: 'to'
164 domain_label: 'Domain name'
165 created_at:
166 label: 'Creation date'
167 from: 'from'
168 to: 'to'
169 action:
170 clear: 'Clear'
171 filter: 'Filter'
172 view:
173 left_menu:
174 back_to_top: 'Back to top'
175 back_to_homepage: 'Back'
176 set_as_read: 'Mark as read'
177 set_as_unread: 'Mark as unread'
178 set_as_favorite: 'Favorite'
179 view_original_article: 'Orignal article'
180 re_fetch_content: 'Re-fetch content'
181 delete: 'Delete'
182 add_a_tag: 'Add a tag'
183 share_content: 'Share'
184 share_email_label: 'Email'
185 download: 'Download'
186 print: 'Print'
187 problem:
188 label: 'Problems?'
189 description: 'Does this article appear wrong?'
190 edit_title: 'Edit title'
191 original_article: 'original'
192 annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
193 new:
194 page_title: 'Save new entry'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 page_title: 'Edit an entry'
200 title_label: 'Title'
201 url_label: 'Url'
202 is_public_label: 'Public'
203 save_label: 'Save'
204
205about:
206 page_title: 'About'
207 top_menu:
208 who_behind_wallabag: 'Who is behind wallabag'
209 getting_help: 'Getting help'
210 helping: 'Helping wallabag'
211 contributors: 'Contributors'
212 third_party: 'Third-party libraries'
213 who_behind_wallabag:
214 developped_by: 'Developed by'
215 website: 'website'
216 many_contributors: 'And many others contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">on Github</a>'
217 project_website: 'Project website'
218 license: 'License'
219 version: 'Version'
220 getting_help:
221 documentation: 'Documentation'
222 bug_reports: 'Bug reports'
223 support: '<a href="https://support.wallabag.org">On our support website</a> or <a href="https://github.com/wallabag/wallabag/issues">on GitHub</a>'
224 helping:
225 description: 'wallabag is free and opensource. You can help us:'
226 by_contributing: 'by contributing to the project:'
227 by_contributing_2: 'an issue lists all our needs'
228 by_paypal: 'via Paypal'
229 contributors:
230 description: 'Thank you to contributors on wallabag web application'
231 third_party:
232 description: 'Here are the list of third-party libraries used in wallabag (with their licenses):'
233 package: 'Package'
234 license: 'License'
235
236howto:
237 page_title: 'How to'
238 page_description: 'There are several ways to save an article:'
239 top_menu:
240 browser_addons: 'Browser addons'
241 mobile_apps: 'Mobile apps'
242 bookmarklet: 'Bookmarklet'
243 form:
244 description: 'Thanks to this form'
245 browser_addons:
246 firefox: 'Standard Firefox Add-On'
247 chrome: 'Chrome Extension'
248 mobile_apps:
249 android:
250 via_f_droid: 'via F-Droid'
251 via_google_play: 'via Google Play'
252 ios: 'on the iTunes Store'
253 windows: 'on the Microsoft Store'
254 bookmarklet:
255 description: 'Drag & drop this link to your bookmarks bar:'
256
257quickstart:
258 page_title: 'Quickstart'
259 intro:
260 title: 'Welcome to wallabag!'
261 paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
262 paragraph_2: 'Follow us!'
263 configure:
264 title: 'Configure the application'
265 language: 'Change language and design'
266 rss: 'Enable RSS feeds'
267 tagging_rules: 'Write rules to automatically tag your articles'
268 admin:
269 title: 'Administration'
270 description: 'As an administrator, you have privileges on wallabag. You can:'
271 new_user: 'Create a new user'
272 analytics: 'Configure analytics'
273 sharing: 'Enable some parameters about article sharing'
274 export: 'Configure export'
275 import: 'Configure import'
276 first_steps:
277 title: 'First steps'
278 new_article: 'Save your first article'
279 unread_articles: 'And classify it!'
280 migrate:
281 title: 'Migrate from an existing service'
282 description: "Are you using another service? We'll help you to retrieve your data on wallabag."
283 pocket: 'Migrate from Pocket'
284 wallabag_v1: 'Migrate from wallabag v1'
285 wallabag_v2: 'Migrate from wallabag v2'
286 developer:
287 title: 'Developers'
288 create_application: 'Create your third application'
289 docs:
290 title: 'Full documentation'
291 annotate: 'Annotate your article'
292 export: 'Convert your articles into ePUB or PDF'
293 search_filters: 'See how you can look for an article by using search engine and filters'
294 fetching_errors: 'What can I do if an article encounters errors during fetching?'
295 all_docs: 'And so many other articles!'
296 support:
297 title: 'Support'
298 description: 'If you need some help, we are here for you.'
299 github: 'On GitHub'
300 email: 'By email'
301 gitter: 'On Gitter'
302
303tag:
304 page_title: 'Tags'
305 list:
306 number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
307
308import:
309 page_title: 'Import'
310 page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.'
311 action:
312 import_contents: 'Import contents'
313 form:
314 mark_as_read_title: 'Mark all as read?'
315 mark_as_read_label: 'Mark all imported entries as read'
316 file_label: 'File'
317 save_label: 'Upload file'
318 pocket:
319 page_title: 'Import > Pocket'
320 description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag."
321 config_missing:
322 description: "Pocket import isn't configured."
323 admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
324 user_message: 'Your server admin needs to define an API Key for Pocket.'
325 authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.'
326 connect_to_pocket: 'Connect to Pocket and import data'
327 wallabag_v1:
328 page_title: 'Import > Wallabag v1'
329 description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.'
330 how_to: 'Please select your wallabag export and click on the below button to upload and import it.'
331 wallabag_v2:
332 page_title: 'Import > Wallabag v2'
333 description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
334
335developer:
336 page_title: 'Developer'
337 welcome_message: 'Welcome to the wallabag API'
338 documentation: 'Documentation'
339 how_to_first_app: 'How to create my first application'
340 full_documentation: 'View full API documentation'
341 list_methods: 'List API methods'
342 clients:
343 title: 'Clients'
344 create_new: 'Create a new client'
345 existing_clients:
346 title: 'Existing clients'
347 field_id: 'Client ID'
348 field_secret: 'Client secret'
349 field_uris: 'Redirect URIs'
350 field_grant_types: 'Grant type allowed'
351 no_client: 'No client yet.'
352 remove:
353 warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !'
354 warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
355 action: 'Remove this client'
356 client:
357 page_title: 'Developer > New client'
358 page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
359 form:
360 redirect_uris_label: 'Redirect URIs'
361 save_label: 'Create a new client'
362 action_back: 'Back'
363 client_parameter:
364 page_title: 'Developer > Client parameters'
365 page_description: 'Here are your client parameters.'
366 field_id: 'Client ID'
367 field_secret: 'Client secret'
368 back: 'Back'
369 read_howto: 'Read the howto "Create my first application"'
370 howto:
371 page_title: 'Developer > How to create my first application'
372 description:
373 paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.'
374 paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.'
375 paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.'
376 paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):'
377 paragraph_5: 'The API will return a response like this:'
378 paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:'
379 paragraph_7: 'This call will return all the entries for your user.'
380 paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
381 back: 'Back'
382
383validator:
384 password_must_match: 'The password fields must match.'
385 password_too_short: 'Password should by at least 8 chars long'
386 password_wrong_value: 'Wrong value for your current password'
387 item_per_page_too_high: 'This will certainly kill the app'
388 rss_limit_too_hight: 'This will certainly kill the app'
389
390flashes:
391 config:
392 notice:
393 config_saved: 'Config saved. Some parameters will be considered after disconnection.'
394 password_updated: 'Password updated'
395 password_not_updated_demo: "In demonstration mode, you can't change password for this user."
396 user_updated: 'Information updated'
397 rss_updated: 'RSS information updated'
398 tagging_rules_updated: 'Tagging rules updated'
399 tagging_rules_deleted: 'Tagging rule deleted'
400 user_added: 'User "%username%" added'
401 rss_token_updated: 'RSS token updated'
402 entry:
403 notice:
404 entry_already_saved: 'Entry already saved on %date%'
405 entry_saved: 'Entry saved'
406 entry_updated: 'Entry updated'
407 entry_reloaded: 'Entry reloaded'
408 entry_reload_failed: 'Failed to reload entry'
409 entry_archived: 'Entry archived'
410 entry_unarchived: 'Entry unarchived'
411 entry_starred: 'Entry starred'
412 entry_unstarred: 'Entry unstarred'
413 entry_deleted: 'Entry deleted'
414 tag:
415 notice:
416 tag_added: 'Tag added'
417 import:
418 notice:
419 failed: 'Import failed, please try again.'
420 failed_on_file: 'Error while processing import. Please verify your import file.'
421 summary: 'Import summary: %imported% imported, %skipped% already saved.'
422 developer:
423 notice:
424 client_created: 'New client created.'
425 client_deleted: 'Client deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
index b666f2df..a8fcbcf6 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml
@@ -1,242 +1,425 @@
1#Login 1security:
2Keep me logged in: 'Mantenme conectado' 2 login:
3Forgot your password?: '¿Ha olvidado su contraseña?' 3 page_title: '¡Bienvenido a wallabag !'
4Login: 'Conectarse' 4 keep_logged_in: 'Manténgame conectado'
5Back to login: 'Revenir au formulaire de connexion' 5 forgot_password: '¿Se ha olvidado de su contraseña?'
6Send: 'Envíar' 6 submit: 'Conectarse'
7"Enter your email address below and we'll send you password reset instructions.": "Introduce tu dirección de email y le enviaremos las instrucciones para resetear la contraseña" 7 register: 'Registrarse'
8Register: 'Registrarse' 8 username: 'Nombre de usuario'
9 password: 'Contraseña'
10 # cancel: 'Cancel'
11 resetting:
12 description: "Introduzca su dirección del correo electrónico y le enviaremos las instrucciones para reiniciar la contraseña"
13 register:
14 page_title: 'Crear una cuenta'
15 go_to_account: 'Acceder su cuenta'
9 16
10# Menu 17menu:
11unread: 'Sin leer' 18 left:
12starred: 'Favoritos' 19 unread: 'Sin leer'
13archive: 'Archivo' 20 starred: 'Favoritos'
14all: 'Todos los artículos' 21 archive: 'Archivo'
15tags: 'Tags' 22 all_articles: 'Todos los artículos'
16config: 'Configuración' 23 config: 'Configuración'
17internal settings: 'Configuración interna' 24 tags: 'Tags'
18import: 'Importar' 25 internal_settings: 'Configuración interna'
19howto: 'Ayuda' 26 import: 'Importar'
20logout: 'Desconectarse' 27 howto: 'Ayuda'
21Filtered: 'Articulos filtrados' 28 developer: 'Promotor'
22About: 'Acerca de' 29 logout: 'Desconectarse'
30 about: 'Acerca de'
31 search: 'Buscar'
32 save_link: 'Archivar un enlace'
33 back_to_unread: 'Volver a los artículos sin leer'
34 top:
35 add_new_entry: 'Añadir un nuevo artículo'
36 search: 'Buscar'
37 filter_entries: 'Filtrar los artículos'
38 export: 'Exportar'
39 search_form:
40 input_label: 'Introduzca su búsqueda aquí'
23 41
24# Header 42footer:
25Back to unread articles: 'Volver a los artículos sin leer' 43 wallabag:
26Add a new entry: 'Añadir un nuevo artículo' 44 elsewhere: 'Lleve wallabag consigo'
27Search: 'Buscar' 45 social: 'Social'
28Filter entries: 'Filtrar los artículos' 46 # powered_by: 'powered by'
29Enter your search here: 'Introduce tu búsqueda aquí' 47 about: 'Acerca de'
30Save new entry: 'Guardar un nuevo artículo'
31Export: 'Exportar'
32 48
33# Config screen 49config:
34Settings: 'Configuración' 50 page_title: 'Configuración'
35User information: 'Información de usuario' 51 tab_menu:
36Password: 'Contraseña' 52 settings: 'Configuración'
37RSS: 'RSS' 53 rss: 'RSS'
38Add a user: 'Añadir un usuario' 54 user_info: 'Información de usuario'
39Theme: 'Tema' 55 password: 'Contraseña'
40Items per page: "Número de artículos por página" 56 rules: 'Reglas de etiquetado automáticas'
41Language: 'Idioma' 57 new_user: 'Añadir un usuario'
42Save: 'Enregistrer' 58 form:
43RSS token: 'RSS token' 59 save: 'Guardar'
44RSS token updated: 'RSS token actualizado ' 60 form_settings:
45Name: 'Nombre' 61 theme_label: 'Tema'
46Email: 'Direccion e-mail' 62 items_per_page_label: 'Número de artículos por página'
47No token: 'Aucun jeton généré' 63 language_label: 'Idioma'
48Reset your token: 'Resetear token' 64 reading_speed:
49Create your token: 'Crear token' 65 # label: 'Reading speed'
50Rss limit: "Límite de artículos en feed RSS" 66 # help_message: 'You can use online tools to estimate your reading speed:'
51RSS links: 'URL de su feed RSS' 67 # 100_word: 'I read ~100 words per minute'
52"RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.": "Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero" 68 # 200_word: 'I read ~200 words per minute'
53Old password: 'Contraseña actual' 69 # 300_word: 'I read ~300 words per minute'
54New password: 'Nueva contraseña' 70 # 400_word: 'I read ~400 words per minute'
55Repeat new password: 'Confirmar la nueva contraseña' 71 form_rss:
56Username: "Nombre de usuario" 72 description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero'
57Two factor authentication: "Autentificación de dos factores" 73 token_label: 'RSS token'
58"Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion": "Con la autentificación de dos factores recibirá código mediante email en cada nueva conexión que no sea de confianza" 74 # no_token: 'No token'
75 token_create: 'Crear token'
76 token_reset: 'Resetear token'
77 rss_links: 'URL de su feed RSS'
78 rss_link:
79 unread: 'sin leer'
80 starred: 'favoritos'
81 archive: 'archivo'
82 rss_limit: 'Límite de artículos en feed RSS'
83 form_user:
84 two_factor_description: "Con la autentificación de dos factores recibirá código mediante email en cada nueva conexión que no sea de confianza"
85 name_label: 'Nombre'
86 email_label: 'Direccion e-mail'
87 twoFactorAuthentication_label: 'Autentificación de dos factores'
88 form_password:
89 old_password_label: 'Contraseña actual'
90 new_password_label: 'Nueva contraseña'
91 repeat_new_password_label: 'Confirmar la nueva contraseña'
92 form_rules:
93 # if_label: 'if'
94 # then_tag_as_label: 'then tag as'
95 # delete_rule_label: 'delete'
96 rule_label: 'Regla'
97 tags_label: 'Tags'
98 faq:
99 title: 'FAQ'
100 tagging_rules_definition_title: '¿Qué significa reglas de etiquetado autómaticas?'
101 tagging_rules_definition_description: 'Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cáda vez que un nuevo artículo es añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudandote a clasificar automáticamente los artículos.'
102 how_to_use_them_title: '¿Cómo se utilizan?'
103 # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
104 variables_available_title: '¿Qué variables y operadores se pueden utilizar para escribir las reglas?'
105 variables_available_description: 'Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:'
106 meaning: 'Significado'
107 variable_description:
108 label: 'Variable'
109 title: 'Titúlo del artículo'
110 url: 'URL del artículo'
111 isArchived: 'El artículo está guardado o no'
112 isStarred: 'Si el artículo es un favorito o no'
113 content: "El contenido del artículo"
114 language: "El idoma del artículo"
115 mimetype: "Tipo MIME del artículo"
116 readingTime: "El tiempo estimado de lectura del artículo, en minutos"
117 domainName: 'El dominio del artículo'
118 operator_description:
119 label: 'Operador'
120 less_than: 'Menos que…'
121 strictly_less_than: 'Estrictámente menos que…'
122 greater_than: 'Más que…'
123 strictly_greater_than: 'Estrictámente mas que…'
124 equal_to: 'Egual a…'
125 not_equal_to: 'Diferente de…'
126 or: 'Una regla O otra'
127 and: 'Una regla Y la otra'
128 matches: 'Prueba si un <i>sujeto</i> corresponde a una <i>busqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide "football"</code>'
129 form_new_user:
130 username_label: 'Nombre de usuario'
131 password_label: 'Contraseña'
132 repeat_new_password_label: 'Confirmar la nueva contraseña'
133 plain_password_label: '????'
134 email_label: 'Email'
59 135
60# Tagging rules 136entry:
61Tagging rules: "Reglas de etiquetado automáticas" 137 page_titles:
62What does « tagging rules » mean?: "¿Qué significa reglas de etiquetado autómaticas?" 138 # unread: 'Unread entries'
63"They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.": "Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cáda vez que un nuevo artículo es añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudandote a clasificar automáticamente los artículos." 139 # starred: 'Starred entries'
64How do I use them?: "¿Cómo se utilizan?" 140 # archived: 'Archived entries'
65"Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = \"github.com\"</i> » then tag as « <i>long reading, github </i> »": "Imaginons que voulez attribuer aux nouveaux articles le tag « <i>lecture courte</i> » lorsque le temps de lecture est inférieur à 3 minutes.<br />Dans ce cas, vous devriez mettre « readingTime &lt;= 3 » dans le champ <i>Règle</i> et « <i>lecture courte</i> » dans le champ <i>Tag</i>.<br />Plusieurs tags peuvent être ajoutés simultanément en les séparant par des virgules : « <i>lecture courte, à lire</i> »<br />Des règles complexes peuvent être créées en utilisant des opérateurs prédéfinis: si « <i>readingTime &gt;= 5 AND domainName = \"github.com\"</i> » alors attribuer les tags « <i>lecteur longue, github </i> »" 141 # filtered: 'Filtered entries'
66Which variables and operators can I use to write rules?: "¿Qué variables y operadores se pueden utilizar para escribir las reglas?" 142 list:
67The following variables and operators can be used to create tagging rules:: "Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:" 143 number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.'
68Variable: "Variable" 144 reading_time: 'tiempo estimado de lectura'
69Meaning: "Significado" 145 reading_time_minutes: 'tiempo estimado de lectura: %readingTime% min'
70Operator: "Operador" 146 reading_time_less_one_minute: 'tiempo estimado de lectura: <small class="inferieur">&lt;</small> 1 min'
71Title of the entry: "Titúlo del artículo" 147 original_article: 'original'
72Less than…: "Menos que…" 148 toogle_as_read: 'Marcar cómo leído/ no leído'
73URL of the entry: "URL del artículo" 149 toogle_as_star: 'Marcar cómo favorito/ no favorito'
74Strictly less than…: "Estrictámente menos que…" 150 delete: 'Suprimir'
75Whether the entry is archived or not: "El artículo está guardado o no" 151 export_title: 'Exportar'
76Greater than…: "Más que…" 152 filters:
77Whether the entry is starred or not: "Si el artículo es un favorito o no" 153 title: 'Filtros'
78Strictly greater than…: "Estrictámente mas que…" 154 status_label: 'Estatus'
79The entry's content: "El contenido del artículo" 155 archived_label: 'Archivado'
80Equal to…: "Egual a…" 156 starred_label: 'Favorito'
81The entry's language: "El idoma del artículo" 157 preview_picture_label: 'Hay una foto'
82Not equal to…: "Diferente de…" 158 preview_picture_help: 'Foto de preview'
83The entry's mime-type: "Tipo MIME del artículo" 159 language_label: 'Idioma'
84One rule or another: "Una regla o otra" 160 reading_time:
85The estimated entry's reading time, in minutes: "El tiempo estimado de lectura del artículo, en minutos" 161 label: 'Duración de lectura en minutos'
86One rule and another: "Una regla y la otra" 162 from: 'de'
87The domain name of the entry: "El dominio del artículo" 163 to: 'a'
88"Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches \"football\"</code>": "Prueba si un <i>sujeto</i> corresponde a una <i>busqueda</i> (insensible a mayusculas).<br />Ejemplo : <code>título coincide \"football\"</code>" 164 domain_label: 'Nombre de dominio'
89Rule: "Regla" 165 created_at:
90FAQ: "FAQ" 166 label: 'Fecha de creación'
167 from: 'de'
168 to: 'a'
169 action:
170 clear: 'Limpiar'
171 filter: 'Filtrar'
172 view:
173 left_menu:
174 # back_to_top: 'Back to top'
175 back_to_homepage: 'Volver'
176 set_as_read: 'Marcar como leído'
177 # set_as_unread: 'Mark as unread'
178 set_as_favorite: 'Marcar cómo favorito'
179 view_original_article: 'Artículo original'
180 re_fetch_content: 'Redescargar el contenido'
181 delete: 'Suprimir'
182 add_a_tag: 'Añadir una etiqueta'
183 share_content: 'Compartir'
184 share_email_label: 'Direccion e-mail'
185 download: 'Descargar'
186 # print: 'Print'
187 problem:
188 label: '¿Algún problema?'
189 description: '¿Este artículo no se muestra bien?'
190 edit_title: 'Modificar el título'
191 original_article: 'original'
192 annotations_on_the_entry: '{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones'
193 new:
194 page_title: 'Guardar un nuevo artículo'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 page_title: 'Editar una artículo'
200 title_label: 'Título'
201 url_label: 'Url'
202 is_public_label: 'Es Público'
203 save_label: 'Guardar'
91 204
92# Entries 205about:
93"estimated reading time: %readingTime% min": "tiempo estimado de lectura: %readingTime% min" 206 page_title: 'Acerca de'
94"estimated reading time: %inferior% 1 min": "tiempo estimado de lectura: %inferior% 1 min" 207 top_menu:
95original: "original" 208 who_behind_wallabag: 'Equipo de desarrollo de wallabag'
96Toggle mark as read: 'Marcar cómo leído/ no leído' 209 getting_help: 'Conseguir ayuda'
97Toggle favorite: 'Marcar cómo favorito/ no favorito' 210 helping: 'Ayudar a wallabag'
98Delete: 'Suprimir' 211 contributors: 'Contribuidores'
99"{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.": "{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos." 212 third_party: 'Librerías de terceeros'
100http://website: "http://website" 213 who_behind_wallabag:
101"{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations": "{0} Sin anotaciones|{1} Una anotación|]1,Inf[ %nbAnnotations% anotaciones" 214 developped_by: 'Desarrollado por'
215 website: 'Sitio web'
216 many_contributors: 'Y muchos otros contribuidores ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">en Github</a>'
217 project_website: 'Web del proyecto'
218 license: 'Licencia'
219 version: 'Version'
220 getting_help:
221 documentation: 'Documentación'
222 bug_reports: 'Reporte de errores'
223 support: '<a href="https://support.wallabag.org">En nuestra web de soporte website</a> o <a href="https://github.com/wallabag/wallabag/issues">en GitHub</a>'
224 helping:
225 description: 'wallabag es libre y gratuito. Usted puede ayudarnos :'
226 by_contributing: 'contribuyendo al proyecto :'
227 by_contributing_2: 'nuestras necesidades están en un ticket'
228 by_paypal: 'via Paypal'
229 contributors:
230 description: 'Gradias a los contribuidores de la aplicación web de wallabag'
231 third_party:
232 description: 'Aquí está la lista de las dependencias utilizadas por wallabag (con sus licencias) :'
233 package: 'Paquete'
234 license: 'Licencia'
102 235
103# Edit entry 236howto:
104Edit an entry: "Editar una artículo" 237 page_title: 'Ayuda'
105Title: "Título" 238 # page_description: 'There are several ways to save an article:'
106Is public: "Es Público" 239 top_menu:
240 browser_addons: 'Extensiones de navigador'
241 mobile_apps: 'Applicaciones para smartphone'
242 bookmarklet: 'Bookmarklet'
243 form:
244 description: 'Gracias a este formulario'
245 browser_addons:
246 firefox: 'Extensión Firefox'
247 chrome: 'Extensión Chrome'
248 mobile_apps:
249 android:
250 via_f_droid: 'via F-Droid'
251 via_google_play: 'via Google Play'
252 # ios: 'on the iTunes Store'
253 # windows: 'on the Microsoft Store'
254 bookmarklet:
255 description: 'Desplazar y soltar este link en la barra de marcadores :'
107 256
108# tag 257quickstart:
109Tags: Tags 258 page_title: 'Comienzo rápido'
110"{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.": "{0} No hay ningun tag.|{1} Hay un tag.|]1,Inf[ Hay %count% tags." 259 intro:
260 title: 'Bienvenido a wallabag !'
261 paragraph_1: "Le acompañaremos a su visita de wallabag y le mostraremos algunas características que le pueden interesar."
262 paragraph_2: '¡Siganos!'
263 configure:
264 title: 'Configure la aplicación'
265 language: 'Cambie el idoma y el diseño de la aplicación'
266 rss: 'Activar los feeds RSS'
267 # tagging_rules: 'Write rules to automatically tag your articles'
268 admin:
269 # title: 'Administration'
270 # description: 'As an administrator, you have privileges on wallabag. You can:'
271 # new_user: 'Create a new user'
272 # analytics: 'Configure analytics'
273 # sharing: 'Enable some parameters about article sharing'
274 # export: 'Configure export'
275 # import: 'Configure import'
276 first_steps:
277 title: 'Prieros pasos'
278 new_article: 'Guarde su primer artículo'
279 unread_articles: '¡Y clasifiquelo!'
280 migrate:
281 title: 'Migrar de un servicio existente'
282 description: "¿Está usando otro servicio? Le ayudaremos a migrar sus datos a wallabag."
283 pocket: 'Migrar desde Pocket'
284 wallabag_v1: 'Migrar desde wallabag v1'
285 wallabag_v2: 'Migrar desde wallabag v2'
286 developer:
287 # title: 'Developers'
288 # create_application: 'Create your third application'
289 docs:
290 title: 'Documentación completa'
291 # annotate: 'Annotate your article'
292 export: 'Convierta sus artículos a ePub o a PDF'
293 search_filters: 'Aprenda a utilizar el buscador y los filtros para encontrar el artículo que le interese'
294 # fetching_errors: 'What can I do if an article encounters errors during fetching?'
295 all_docs: '¡Y muchos más artículos!'
296 support:
297 title: 'Soporte'
298 description: 'Sí necesita ayuda, estamos disponibles para usted.'
299 github: 'En GitHub'
300 email: 'Por email'
301 gitter: 'En Gitter'
111 302
112# Filters 303tag:
113Filters: 'Filtros' 304 page_title: 'Tags'
114Status: 'Estatus' 305 list:
115Archived: 'Archivado' 306 number_on_the_page: '{0} No hay ningun tag.|{1} Hay un tag.|]1,Inf[ Hay %count% tags.'
116Starred: 'Favorito'
117Preview picture: 'Foto de preview'
118Has a preview picture: 'Hay una foto'
119Reading time in minutes: 'Duración de lectura en minutos'
120from: 'de'
121to: 'a'
122website.com: 'website.com'
123Domain name: 'Nombre de dominio'
124Creation date: 'Fecha de creación'
125dd/mm/yyyy: 'dd/mm/aaaa'
126Clear: 'Limpiar'
127Filter: 'Filtrar'
128website.com: "website.com"
129 307
130# About 308import:
131About: "Acerca de" 309 page_title: 'Importar'
132Who is behind wallabag: "Equipo de desarrollo de wallabag" 310 page_description: 'Bienvenido al útil de migración de wallabag. Seleccione el servicio previo del que usted quiera migrar.'
133Getting help: "Conseguir ayuda" 311 action:
134Helping wallabag: "Ayudar a wallabag" 312 import_contents: 'Importar los contenidos'
135Developed by: "Desarrollado por" 313 form:
136website: "Sitio web" 314 # mark_as_read_title: 'Mark all as read?'
137And many others contributors ♥: "Y muchos otros contribuidores ♥" 315 # mark_as_read_label: 'Mark all imported entries as read'
138on GitHub: "en GitHub" 316 file_label: 'Fichero'
139Project website: "Web del proyecto" 317 save_label: 'Importar el fichero'
140License: "Licencia" 318 pocket:
141Version: "Versión" 319 page_title: 'Importar > Pocket'
142Documentation: "Documentación" 320 description: "Va a importar sus datos de Pocket. Pocket no nos permite descargar el contenido de su servicio, así que el contenido de cada artículo será redescargado por wallabag."
143Bug reports: "Reporte de errores" 321 config_missing:
144On our support website: "En nuestra web de soporte" 322 description: "La importación de Pocket no está configurada."
145or: "o" 323 admin_message: 'Debe definir %keyurls%una clava del API Pocket%keyurle%.'
146"wallabag is free and opensource. You can help us:": "wallabag es libre y gratuito. Usted puede ayudarnos :" 324 user_message: 'El administrador de vuestro servidor debe definir una clave API Pocket.'
147"by contributing to the project:": "contribuyendo al proyecto :" 325 authorize_message: 'Puedes importar sus datos desde su cuenta de Pocket. Sólo tienes que pulsar en el botón para autrizar que wallabag se conecte a getpocket.com.'
148an issue lists all our needs: "nuestras necesidades están en un ticket" 326 connect_to_pocket: 'Conectese a Pocket para importar los datos'
149via Paypal: "via Paypal" 327 wallabag_v1:
150Take wallabag with you: "Llevate wallabag contigo" 328 page_title: 'Importar > Wallabag v1'
151Social: "Social" 329 description: 'Va a importar sus artículos de wallabag v1. En su configuración de wallabag v1, pulse sobre "Exportar JSON" dentro de la sección "Exportar sus datos de wallabag". Usted tendrá un fichero "wallabag-export-1-xxxx-xx-xx.json".'
152powered by: "propulsé par" 330 how_to: 'Seleccione el fichero de su exportación de wallabag v1 y puelse en el botón para subirla y importarla.'
153Contributors: "Contribuidores" 331 wallabag_v2:
154Thank you to contributors on wallabag web application: "Gradias a los contribuidores de la aplicación web de wallabag" 332 page_title: 'Importar > Wallabag v2'
155Third-party libraries: "Librerías de terceeros" 333 description: 'Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, clickee en "JSON". Usted tendrá un fichero "All articles.json"'
156"Here are the list of third-party libraries used in wallabag (with their licenses):": "Aquí está la lista de las dependencias utilizadas por wallabag (con sus licencias):"
157Package: Paquete
158License: Licencia
159 334
160# Howto 335developer:
161Form: "Formulario" 336 # page_title: 'Developer'
162Thanks to this form: "Gracias a este formulario" 337 # welcome_message: 'Welcome to the wallabag API'
163Browser addons: "Extensiones de navigador" 338 # documentation: 'Documentation'
164Mobile apps: "Applicaciones para smartphone" 339 # how_to_first_app: 'How to create my first application'
165Bookmarklet: "Bookmarklet" 340 # full_documentation: 'View full API documentation'
166Standard Firefox Add-On: "Extensión Firefox" 341 # list_methods: 'List API methods'
167Chrome Extension: "Extensión Chrome" 342 # clients:
168download the application: "descargar la aplicación" 343 # title: 'Clients'
169"Drag &amp; drop this link to your bookmarks bar:": "Desplazar y soltar este link en la barra de marcadores :" 344 # create_new: 'Create a new client'
345 # existing_clients:
346 # title: 'Existing clients'
347 # field_id: 'Client ID'
348 # field_secret: 'Client secret'
349 # field_uris: 'Redirect URIs'
350 # field_grant_types: 'Grant type allowed'
351 # no_client: 'No client yet.'
352 # remove:
353 # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !'
354 # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
355 # action: 'Remove this client'
356 # client:
357 # page_title: 'Developer > New client'
358 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
359 # form:
360 # redirect_uris_label: 'Redirect URIs'
361 # save_label: 'Create a new client'
362 # action_back: 'Back'
363 # client_parameter:
364 # page_title: 'Developer > Client parameters'
365 # page_description: 'Here are your client parameters.'
366 # field_id: 'Client ID'
367 # field_secret: 'Client secret'
368 # back: 'Back'
369 # read_howto: 'Read the howto "Create my first application"'
370 # howto:
371 # page_title: 'Developer > How to create my first application'
372 # description:
373 # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.'
374 # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.'
375 # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.'
376 # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):'
377 # paragraph_5: 'The API will return a response like this:'
378 # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:'
379 # paragraph_7: 'This call will return all the entries for your user.'
380 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
381 # back: 'Back'
170 382
171# Flash messages 383validator:
172Information updated: "Su información personal ha sido actualizada" 384 password_must_match: 'Las contraseñas no coinciden'
173"Config saved. Some parameters will be considered after disconnection.": "Configuración guardada. Algunos parámetros serán recargados cuando se vuelva a conectar." 385 password_too_short: 'La contraseña debe tener al menos 8 carácteres'
174RSS information updated: "La configuración de los feeds RSS ha sido actualizada" 386 # password_wrong_value: 'Wrong value for your current password'
175Password updated: "Contraseña actualizada" 387 # item_per_page_too_high: 'This will certainly kill the app'
176Entry starred: "Artículo guardado en los favoritos" 388 # rss_limit_too_hight: 'This will certainly kill the app'
177Entry unstarred: "Artículo retirado de los favoritos"
178Entry archived: "Artículo archivado"
179Entry unarchived: "Artículo desarchivado"
180Entry deleted: "Artículo suprimido"
181Tagging rule deleted: "Regla de etiquetado borrada"
182Tagging rules updated: "Regla de etiquetado actualizada"
183User "%username%" added: 'Usuario "%username%" añadido'
184In demonstration mode, you can't change password for this user.: 'En modo demo, no puedes cambiar la contraseña del usuario.'
185 389
186# Entry 390flashes:
187Mark as read: 'Marcar como leído' 391 config:
188Favorite: 'Marcar cómo favorito' 392 notice:
189back: 'Volver' 393 config_saved: 'Configuración guardada. Algunos parámetros serán recargados cuando se vuelva a conectar.'
190original article: 'Artículo original' 394 password_updated: 'Contraseña actualizada'
191Add a tag: 'Añadir una etiqueta' 395 password_not_updated_demo: "En modo demo, no puedes cambiar la contraseña del usuario."
192Share: 'Compartir' 396 user_updated: 'Su información personal ha sido actualizada'
193Download: 'Descargar' 397 rss_updated: 'La configuración de los feeds RSS ha sido actualizada'
194Does this article appear wrong?: "¿Este artículo no se muestra bien?" 398 tagging_rules_updated: 'Regla de etiquetado borrada'
195Problems?: '¿Algún problema?' 399 tagging_rules_deleted: 'Regla de etiquetado actualizada'
196Edit title: "Modificar el título" 400 user_added: 'Usuario "%username%" añadido'
197Re-fetch content: "Redescargar el contenido" 401 rss_token_updated: 'RSS token actualizado'
198Tag added: "Etiqueta añadida" 402 entry:
199 403 notice:
200# Import 404 # entry_already_saved: 'Entry already saved on %date%'
201Welcome to wallabag importer. Please select your previous service that you want to migrate.: "Bienvenido al útil de migración de wallabag. Seleccione el servicio previo del que usted quiera migrar." 405 # entry_saved: 'Entry saved'
202"This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.": "Va a importar sus datos de Pocket. Pocket no nos permite descargar el contenido de su servicio, así que el contenido de cada artículo será redescargado por wallabag." 406 # entry_updated: 'Entry updated'
203"This importer will import all your wallabag v1 articles. On your config page, click on \"JSON export\" in the \"Export your wallabag data\" section. You will have a \"wallabag-export-1-xxxx-xx-xx.json\" file.": "Va a importar sus artículos de wallabag v1. En su configuración de wallabag v1, pulse sobre \"Exportar JSON\" dentro de la sección \"Exportar sus datos de wallabag\". Usted tendrá un fichero \"wallabag-export-1-xxxx-xx-xx.json\"." 407 # entry_reloaded: 'Entry reloaded'
204"This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on \"JSON\". You will have a \"All articles.json\" file.": "Va a importar sus artículos de otra instancia de wallabag v2. Vaya a Todos los artículos, entonces, en la barra lateral, clickee en \"JSON\". Usted tendrá un fichero \"All articles.json\"" 408 # entry_reload_failed: 'Failed to reload entry'
205"You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.": "Puedes importar sus datos desde su cuenta de Pocket. Sólo tienes que pulsar en el botón para autrizar que wallabag se conecte a getpocket.com." 409 entry_archived: 'Artículo archivado'
206Import > Pocket: "Importar > Pocket" 410 entry_unarchived: 'Artículo desarchivado'
207Pocket import isn't configured.: "La importación de Pocket no está configurada." 411 entry_starred: 'Artículo guardado en los favoritos'
208You need to define %keyurls% a pocket_consumer_key %keyurle%.: "Debe definir %keyurls% una clava del API Pocket %keyurle%." 412 entry_unstarred: 'Artículo retirado de los favoritos'
209Your server admin needs to define an API Key for Pocket.: "El administrador de vuestro servidor debe definir una clave API Pocket." 413 entry_deleted: 'Artículo suprimido'
210Connect to Pocket and import data: "Conectese a Pocket para importar los datos" 414 tag:
211Please select your wallabag export and click on the below button to upload and import it.: "Seleccione el fichero de su exportación de wallabag v1 y puelse en el botón para subirla y importarla." 415 notice:
212File: "Fichero" 416 tag_added: 'Etiqueta añadida'
213Upload file: "Importar el fichero" 417 import:
214Import contents: "Importar los contenidos" 418 notice:
215Import: "Importar" 419 # failed: 'Import failed, please try again.'
216Import > Wallabag v1: "Importar > Wallabag v1" 420 # failed_on_file: 'Error while processing import. Please verify your import file.'
217Import > Wallabag v2: "Importar > Wallabag v2" 421 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
218 422 developer:
219# Quickstart 423 notice:
220Quickstart: Comienzo rápido 424 # client_created: 'New client created.'
221Welcome to wallabag!: "Bienvenido a wallabag !" 425 # client_deleted: 'Client deleted'
222We'll accompany you to visit wallabag and show you some features which can interess you.: "Le acompañaremos a su visita de wallabag y le mostraremos algunas características que le pueden interesar."
223Follow us!: "¡Siganos!"
224Configure the application: "Configure la aplicación"
225Change language and design: "Cambie el idoma y el diseño de la aplicación"
226Enable RSS feeds: "Activar los feeds RSS"
227First steps: "Prieros pasos"
228Save your first article: "Guarde su primer artículo"
229And classify it!: "¡Y clasifiquelo!"
230Migrate from an existing service: "Migrar de un servicio existente"
231You're using an other service? We'll help you to retrieve your data on wallabag.: "¿Está usando otro servicio? Le ayudaremos a migrar sus datos a wallabag."
232Migrate from Pocket: "Migrar desde Pocket"
233Migrate from wallabag v1: "Migrar desde wallabag v1"
234Full documentation: "Documentación completa"
235Convert your articles into ePUB or PDF: "Convierta sus artículos a ePub o a PDF"
236See how you can look for an article by using search engine and filters: "Aprenda a utilizar el buscador y los filtros para encontrar el artículo que le interese"
237And so many other articles!: "¡Y muchos más artículos!"
238Support: "Soporte"
239If you need some help, we are here for you.: "Sí necesita ayuda, estamos disponibles para usted."
240On GitHub: "En GitHub"
241By email: "Por email"
242On Gitter: "On Gitter"
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
index e0ef3102..6be7d22e 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml
@@ -1,129 +1,425 @@
1#Login 1security:
2Keep me logged in: 'مرا به خاطر بسپار' 2 login:
3Forgot your password?: ' رمزتان را گم کرده‌اید؟' 3 # page_title: 'Welcome to wallabag!'
4Login: 'ورود' 4 keep_logged_in: 'مرا به خاطر بسپار'
5Back to login: 'بازگشت به صفحهٔ ورود' 5 forgot_password: ' رمزتان را گم کرده‌اید؟'
6Send: 'بفرست' 6 submit: 'ورود'
7"Enter your email address below and we'll send you password reset instructions.": "نشانی ایمیل خود را بنویسید تا راهنمای تغییر رمز را برایتان بفرستیم." 7 # register: 'Register'
8 username: 'نام کاربری'
9 password: 'رمز'
10 # cancel: 'Cancel'
11 resetting:
12 description: "نشانی ایمیل خود را بنویسید تا راهنمای تغییر رمز را برایتان بفرستیم."
13 register:
14 # page_title: 'Create an account'
15 # go_to_account: 'Go to your account'
8 16
9# Menu 17menu:
10unread: 'خوانده‌نشده' 18 left:
11starred: 'برگزیده' 19 unread: 'خوانده‌نشده'
12archive: 'بایگانی' 20 starred: 'برگزیده'
13all: 'همه' 21 archive: 'بایگانی'
14tags: 'برچسب‌ها' 22 all_articles: 'همه'
15config: 'پیکربندی' 23 config: 'پیکربندی'
16howto: 'خودآموز' 24 tags: 'برچسب‌ها'
17logout: 'خروج' 25 # internal_settings: 'Internal Settings'
18Filtered: 'فیلترشده' 26 # import: 'Import'
19About: 'درباره' 27 howto: 'خودآموز'
28 # developer: 'Developer'
29 logout: 'خروج'
30 about: 'درباره'
31 search: 'جستجو'
32 # save_link: 'Save a link'
33 back_to_unread: 'بازگشت به خوانده‌نشده‌ها'
34 top:
35 add_new_entry: 'افزودن مقالهٔ تازه'
36 search: 'جستجو'
37 filter_entries: 'فیلترکردن مقاله‌ها'
38 # export: 'Export'
39 search_form:
40 input_label: 'جستجوی خود را این‌جا بنویسید:'
20 41
21# Header 42footer:
22Back to unread articles: 'بازگشت به خوانده‌نشده‌ها' 43 wallabag:
23Add a new entry: 'افزودن مقالهٔ تازه' 44 # elsewhere: 'Take wallabag with you'
24Search: 'جستجو' 45 # social: 'Social'
25Filter entries: 'فیلترکردن مقاله‌ها' 46 # powered_by: 'powered by'
26Enter your search here: 'جستجوی خود را این‌جا بنویسید:' 47 about: 'درباره'
27Save new entry: 'ذخیرهٔ مقالهٔ تازه'
28 48
29# Config screen 49config:
30Settings: 'تنظیمات' 50 page_title: 'پیکربندی'
31User information: 'اطلاعات کاربر' 51 tab_menu:
32Password: 'رمز' 52 settings: 'تنظیمات'
33RSS: 'آر-اس-اس' 53 rss: 'آر-اس-اس'
34Add a user: 'افزودن کاربر' 54 user_info: 'اطلاعات کاربر'
35Theme: 'پوسته' 55 password: 'رمز'
36Items per page: 'تعداد مقاله در هر صفحه' 56 # rules: 'Tagging rules'
37Language: 'زبان' 57 new_user: 'افزودن کاربر'
38Save: 'ذخیره' 58 form:
39RSS token: 'کد آر-اس-اس' 59 save: 'ذخیره'
40Name: 'نام' 60 form_settings:
41Email: 'نشانی ایمیل' 61 theme_label: 'پوسته'
42No token: 'بدون کد' 62 items_per_page_label: 'تعداد مقاله در هر صفحه'
43Reset your token: 'بازنشانی کد' 63 language_label: 'زبان'
44Create your token: 'کد خود را بسازید' 64 reading_speed:
45Rss limit: 'محدودیت آر-اس-اس' 65 # label: 'Reading speed'
46RSS links: 'پیوند آر-اس-اس' 66 # help_message: 'You can use online tools to estimate your reading speed:'
47'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'با خوراک آر-اس-اس که wallabag در اختیارتان می‌گذارد، می‌توانید مقاله‌های ذخیره‌شده را در نرم‌افزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.' 67 # 100_word: 'I read ~100 words per minute'
48Old password: 'رمز قدیمی' 68 # 200_word: 'I read ~200 words per minute'
49New password: 'رمز تازه' 69 # 300_word: 'I read ~300 words per minute'
50Repeat new password: 'رمز تازه را دوباره بنویسید' 70 # 400_word: 'I read ~400 words per minute'
51Username: 'نام کاربری' 71 form_rss:
72 description: 'با خوراک آر-اس-اس که wallabag در اختیارتان می‌گذارد، می‌توانید مقاله‌های ذخیره‌شده را در نرم‌افزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.'
73 token_label: 'کد آر-اس-اس'
74 no_token: 'بدون کد'
75 token_create: 'کد خود را بسازید'
76 token_reset: 'بازنشانی کد'
77 rss_links: 'پیوند آر-اس-اس'
78 rss_link:
79 unread: 'خوانده‌نشده'
80 starred: 'برگزیده'
81 archive: 'بایگانی'
82 rss_limit: 'محدودیت آر-اس-اس'
83 form_user:
84 # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion"
85 name_label: 'نام'
86 email_label: 'نشانی ایمیل'
87 # twoFactorAuthentication_label: 'Two factor authentication'
88 form_password:
89 old_password_label: 'رمز قدیمی'
90 new_password_label: 'رمز تازه'
91 repeat_new_password_label: 'رمز تازه را دوباره بنویسید'
92 form_rules:
93 # if_label: 'if'
94 # then_tag_as_label: 'then tag as'
95 # delete_rule_label: 'delete'
96 # rule_label: 'Rule'
97 # tags_label: 'Tags'
98 # faq:
99 # title: 'FAQ'
100 # tagging_rules_definition_title: 'What does « tagging rules » mean?'
101 # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.'
102 # how_to_use_them_title: 'How do I use them?'
103 # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
104 # variables_available_title: 'Which variables and operators can I use to write rules?'
105 # variables_available_description: 'The following variables and operators can be used to create tagging rules:'
106 # meaning: 'Meaning'
107 # variable_description:
108 # label: 'Variable'
109 # title: 'Title of the entry'
110 # url: 'URL of the entry'
111 # isArchived: 'Whether the entry is archived or not'
112 # isStarred: 'Whether the entry is starred or not'
113 # content: "The entry's content"
114 # language: "The entry's language"
115 # mimetype: "The entry's mime-type"
116 # readingTime: "The estimated entry's reading time, in minutes"
117 # domainName: 'The domain name of the entry'
118 # operator_description:
119 # label: 'Operator'
120 # less_than: 'Less than...'
121 # strictly_less_than: 'Strictly less than...'
122 # greater_than: 'Greater than...'
123 # strictly_greater_than: 'Strictly greater than...'
124 # equal_to: 'Equal to...'
125 # not_equal_to: 'Not equal to...'
126 # or: 'One rule OR another'
127 # and: 'One rule AND another'
128 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
129 form_new_user:
130 username_label: 'نام کاربری'
131 password_label: 'رمز'
132 repeat_new_password_label: 'رمز تازه را دوباره بنویسید'
133 plain_password_label: '????'
134 email_label: 'نشانی ایمیل'
52 135
53# Entries 136entry:
54'estimated reading time': 'زمان تخمینی برای خواندن' 137 page_titles:
55original: اصلی 138 # unread: 'Unread entries'
56Toggle mark as read: 'خوانده‌شده/خوانده‌نشده' 139 # starred: 'Starred entries'
57Toggle favorite: 'برگزیده/نابرگزیده' 140 # archived: 'Archived entries'
58Delete: 'پاک کردن' 141 # filtered: 'Filtered entries'
142 list:
143 # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'زمان تخمینی برای خواندن'
145 reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min'
146 reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur">&lt;</small> 1 min'
147 original_article: 'original'
148 toogle_as_read: 'خوانده‌شده/خوانده‌نشده'
149 toogle_as_star: 'برگزیده/نابرگزیده'
150 delete: 'پاک کردن'
151 # export_title: 'Export'
152 filters:
153 title: 'فیلتر'
154 status_label: 'وضعیت'
155 archived_label: 'بایگانی‌شده'
156 starred_label: 'برگزیده'
157 preview_picture_label: 'دارای عکس پیش‌نمایش'
158 preview_picture_help: 'پیش‌نمایش عکس'
159 language_label: 'زبان'
160 reading_time:
161 label: 'زمان خواندن به دقیقه'
162 from: 'از'
163 to: 'تا'
164 domain_label: 'نام دامنه'
165 created_at:
166 label: 'زمان ساخت'
167 from: 'از'
168 to: 'تا'
169 action:
170 clear: 'از نو'
171 filter: 'فیلتر'
172 view:
173 left_menu:
174 # back_to_top: 'Back to top'
175 back_to_homepage: 'بازگشت'
176 set_as_read: 'خوانده‌شده'
177 # set_as_unread: 'Mark as unread'
178 set_as_favorite: 'برگزیده'
179 view_original_article: 'مقالهٔ اصلی'
180 # re_fetch_content: 'Re-fetch content'
181 delete: 'پاک کردن'
182 add_a_tag: 'افزودن برچسب'
183 share_content: 'هم‌رسانی'
184 share_email_label: 'نشانی ایمیل'
185 download: 'بارگیری'
186 # print: 'Print'
187 problem:
188 label: 'مشکلات؟'
189 description: 'آیا مقاله نادرست نشان داده شده؟'
190 edit_title: 'ویرایش عنوان'
191 original_article: 'original'
192 # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
193 new:
194 page_title: 'ذخیرهٔ مقالهٔ تازه'
195 placeholder: 'http://website.com'
196 form_new:
197 # url_label: Url
198 edit:
199 # page_title: 'Edit an entry'
200 # title_label: 'Title'
201 # url_label: 'Url'
202 # is_public_label: 'Public'
203 save_label: 'ذخیره'
59 204
60# Filters 205about:
61Filters: 'فیلتر' 206 page_title: 'درباره'
62Status: 'وضعیت' 207 top_menu:
63Archived: 'بایگانی‌شده' 208 who_behind_wallabag: 'سازندگان wallabag'
64Starred: 'برگزیده' 209 getting_help: 'گرفتن کمک'
65Preview picture: 'پیش‌نمایش عکس' 210 helping: 'کمک‌کردن به wallabag'
66Has a preview picture: 'دارای عکس پیش‌نمایش' 211 # contributors: 'Contributors'
67Reading time in minutes: 'زمان خواندن به دقیقه' 212 # third_party: 'Third-party libraries'
68from: 'از' 213 who_behind_wallabag:
69to: 'تا' 214 developped_by: 'ساختهٔ'
70website.com: 'website.com' 215 website: 'وب‌گاه'
71Domain name: 'نام دامنه' 216 many_contributors: 'و بسیاری دیگر از مشارکت‌کنندگان ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">روی Github</a>'
72Creation date: 'زمان ساخت' 217 project_website: 'وب‌گاه پروژه'
73dd/mm/yyyy: 'dd.mm.yyyy' 218 license: 'پروانه'
74Clear: 'از نو' 219 version: 'نسخه'
75Filter: 'فیلتر' 220 getting_help:
221 documentation: 'راهنما'
222 bug_reports: 'گزارش اشکال‌ها'
223 support: '<a href="https://support.wallabag.org">در وب‌گاه پشتیبانی</a> یا <a href="https://github.com/wallabag/wallabag/issues">روی GitHub</a>'
224 helping:
225 description: 'wallabag رایگان، آزاد، و متن‌باز است. شما می‌توانید به ما کمک کنید:'
226 by_contributing: 'با مشارکت در پروژه:'
227 by_contributing_2: 'فهرست نیازمندی‌های ما در این صفحه است:'
228 by_paypal: 'از راه Paypal'
229 contributors:
230 # description: 'Thank you to contributors on wallabag web application'
231 third_party:
232 # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):'
233 # package: 'Package'
234 license: 'پروانه'
76 235
77# About 236howto:
78Who is behind wallabag: "سازندگان wallabag" 237 page_title: 'خودآموز'
79Getting help: "گرفتن کمک" 238 # page_description: 'There are several ways to save an article:'
80Helping wallabag: "کمک‌کردن به wallabag" 239 top_menu:
81Developed by: "ساختهٔ" 240 browser_addons: 'افزونه برای مرورگرها'
82website: "وب‌گاه" 241 mobile_apps: 'برنامه‌های موبایل'
83And many others contributors ♥: "و بسیاری دیگر از مشارکت‌کنندگان ♥" 242 bookmarklet: 'ابزار علامت‌گذاری صفحه‌ها'
84on GitHub: "روی GitHub" 243 form:
85Project website: "وب‌گاه پروژه" 244 description: 'به کمک این فرم'
86License: "پروانه" 245 browser_addons:
87Version: "نسخه" 246 firefox: 'افزونهٔ فایرفاکس'
88Documentation: "راهنما" 247 chrome: 'افزونهٔ کروم'
89Bug reports: "گزارش اشکال‌ها" 248 mobile_apps:
90On our support website: "در وب‌گاه پشتیبانی" 249 android:
91or: "یا" 250 via_f_droid: 'از راه F-Droid'
92"wallabag is free and opensource. You can help us:": "wallabag رایگان، آزاد، و متن‌باز است. شما می‌توانید به ما کمک کنید:" 251 via_google_play: 'از راه Google Play'
93"by contributing to the project:": "با مشارکت در پروژه:" 252 ios: 'از راه iTunes Store'
94an issue lists all our needs: "فهرست نیازمندی‌های ما در این صفحه است:" 253 windows: 'از راه Microsoft Store'
95via Paypal: "از راه PayPal" 254 bookmarklet:
255 description: 'این پیوند را به نوار بوک‌مارک مرورگرتان بکشید:'
96 256
97# Howto 257quickstart:
98Form: فرم 258 # page_title: 'Quickstart'
99Thanks to this form: "به کمک این فرم" 259 # intro:
100Browser addons: "افزونه برای مرورگرها" 260 # title: 'Welcome to wallabag!'
101Mobile apps: "برنامه‌های موبایل" 261 # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
102Bookmarklet: "ابزار علامت‌گذاری صفحه‌ها" 262 # paragraph_2: 'Follow us!'
103Standard Firefox Add-On: "افزونهٔ فایرفاکس" 263 # configure:
104Chrome Extension: "افزونهٔ کروم" 264 # title: 'Configure the application'
105download the application: "برنامه را باربگیرید" 265 # language: 'Change language and design'
106"Drag &amp; drop this link to your bookmarks bar:": "این پیوند را به نوار بوک‌مارک مرورگرتان بکشید:" 266 # rss: 'Enable RSS feeds'
267 # tagging_rules: 'Write rules to automatically tag your articles'
268 # admin:
269 # title: 'Administration'
270 # description: 'As an administrator, you have privileges on wallabag. You can:'
271 # new_user: 'Create a new user'
272 # analytics: 'Configure analytics'
273 # sharing: 'Enable some parameters about article sharing'
274 # export: 'Configure export'
275 # import: 'Configure import'
276 # first_steps:
277 # title: 'First steps'
278 # new_article: 'Save your first article'
279 # unread_articles: 'And classify it!'
280 # migrate:
281 # title: 'Migrate from an existing service'
282 # description: "Are you using another service? We'll help you to retrieve your data on wallabag."
283 # pocket: 'Migrate from Pocket'
284 # wallabag_v1: 'Migrate from wallabag v1'
285 # wallabag_v2: 'Migrate from wallabag v2'
286 # developer:
287 # title: 'Developers'
288 # create_application: 'Create your third application'
289 # docs:
290 # title: 'Full documentation'
291 # annotate: 'Annotate your article'
292 # export: 'Convert your articles into ePUB or PDF'
293 # search_filters: 'See how you can look for an article by using search engine and filters'
294 # fetching_errors: 'What can I do if an article encounters errors during fetching?'
295 # all_docs: 'And so many other articles!'
296 # support:
297 # title: 'Support'
298 # description: 'If you need some help, we are here for you.'
299 # github: 'On GitHub'
300 # email: 'By email'
301 # gitter: 'On Gitter'
107 302
108# Flash messages 303tag:
109Information updated: "اطلاعات به‌روز شد" 304 page_title: 'برچسب‌ها'
110"Config saved. Some parameters will be considered after disconnection.": "پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود." 305 list:
111RSS information updated: "اطلاعات آر-اس-اس به‌روز شد" 306 # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
112Password updated: "رمز به‌روز شد"
113Entry starred: "مقاله برگزیده شد"
114Entry unstarred: "مقاله نابرگزیده شد"
115Entry archived: "مقاله بایگانی شد"
116Entry unarchived: "مقاله از بایگانی درآمد"
117Entry deleted: "مقاله پاک شد"
118 307
119# Entry 308import:
120Mark as read: 'خوانده‌شده' 309 # page_title: 'Import'
121Favorite: 'برگزیده' 310 # page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.'
122back: 'بازگشت' 311 # action:
123original article: 'مقالهٔ اصلی' 312 # import_contents: 'Import contents'
124Add a tag: 'افزودن برچسب' 313 # form:
125Share: 'هم‌رسانی' 314 # mark_as_read_title: 'Mark all as read?'
126Download: 'بارگیری' 315 # mark_as_read_label: 'Mark all imported entries as read'
127Does this article appear wrong?: "آیا مقاله نادرست نشان داده شده؟" 316 # file_label: 'File'
128Problems?: 'مشکلات؟' 317 # save_label: 'Upload file'
129Edit title: "ویرایش عنوان" 318 # pocket:
319 # page_title: 'Import > Pocket'
320 # description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag."
321 # config_missing:
322 # description: "Pocket import isn't configured."
323 # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
324 # user_message: 'Your server admin needs to define an API Key for Pocket.'
325 # authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.'
326 # connect_to_pocket: 'Connect to Pocket and import data'
327 # wallabag_v1:
328 # page_title: 'Import > Wallabag v1'
329 # description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.'
330 # how_to: 'Please select your wallabag export and click on the below button to upload and import it.'
331 # wallabag_v2:
332 # page_title: 'Import > Wallabag v2'
333 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
334
335developer:
336 # page_title: 'Developer'
337 # welcome_message: 'Welcome to the wallabag API'
338 # documentation: 'Documentation'
339 # how_to_first_app: 'How to create my first application'
340 # full_documentation: 'View full API documentation'
341 # list_methods: 'List API methods'
342 # clients:
343 # title: 'Clients'
344 # create_new: 'Create a new client'
345 # existing_clients:
346 # title: 'Existing clients'
347 # field_id: 'Client ID'
348 # field_secret: 'Client secret'
349 # field_uris: 'Redirect URIs'
350 # field_grant_types: 'Grant type allowed'
351 # no_client: 'No client yet.'
352 # remove:
353 # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !'
354 # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
355 # action: 'Remove this client'
356 # client:
357 # page_title: 'Developer > New client'
358 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
359 # form:
360 # redirect_uris_label: 'Redirect URIs'
361 # save_label: 'Create a new client'
362 # action_back: 'بازگشت'
363 # client_parameter:
364 # page_title: 'Developer > Client parameters'
365 # page_description: 'Here are your client parameters.'
366 # field_id: 'Client ID'
367 # field_secret: 'Client secret'
368 # back: 'بازگشت'
369 # read_howto: 'Read the howto "Create my first application"'
370 # howto:
371 # page_title: 'Developer > How to create my first application'
372 # description:
373 # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.'
374 # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.'
375 # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.'
376 # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):'
377 # paragraph_5: 'The API will return a response like this:'
378 # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:'
379 # paragraph_7: 'This call will return all the entries for your user.'
380 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
381 # back: 'بازگشت'
382
383validator:
384 password_must_match: 'رمزها باید یکی باشند'
385 password_too_short: 'رمز شما باید ۸ حرف یا بیشتر باشد'
386 # password_wrong_value: 'Wrong value for your current password'
387 # item_per_page_too_high: 'This will certainly kill the app'
388 # rss_limit_too_hight: 'This will certainly kill the app'
389
390flashes:
391 config:
392 notice:
393 config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.'
394 password_updated: 'رمز به‌روز شد'
395 # password_not_updated_demo: "In demonstration mode, you can't change password for this user."
396 user_updated: 'اطلاعات به‌روز شد'
397 rss_updated: 'اطلاعات آر-اس-اس به‌روز شد'
398 # tagging_rules_updated: 'Tagging rules updated'
399 # tagging_rules_deleted: 'Tagging rule deleted'
400 # user_added: 'User "%username%" added'
401 # rss_token_updated: 'RSS token updated'
402 entry:
403 notice:
404 # entry_already_saved: 'Entry already saved on %date%'
405 # entry_saved: 'Entry saved'
406 # entry_updated: 'Entry updated'
407 # entry_reloaded: 'Entry reloaded'
408 # entry_reload_failed: 'Failed to reload entry'
409 entry_archived: 'مقاله بایگانی شد'
410 entry_unarchived: 'مقاله از بایگانی درآمد'
411 entry_starred: 'مقاله برگزیده شد'
412 entry_unstarred: 'مقاله نابرگزیده شد'
413 entry_deleted: 'مقاله پاک شد'
414 tag:
415 notice:
416 # tag_added: 'Tag added'
417 import:
418 notice:
419 # failed: 'Import failed, please try again.'
420 # failed_on_file: 'Error while processing import. Please verify your import file.'
421 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
422 developer:
423 notice:
424 # client_created: 'New client created.'
425 # client_deleted: 'Client deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
index 7c6ad07e..6ff1a3b1 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml
@@ -1,284 +1,425 @@
1#Login 1security:
2Keep me logged in: 'Rester connecté' 2 login:
3Forgot your password?: 'Mot de passe oublié ?' 3 page_title: 'Bienvenue sur wallabag !'
4Login: 'Se connecter' 4 keep_logged_in: 'Rester connecté'
5Back to login: 'Revenir au formulaire de connexion' 5 forgot_password: 'Mot de passe oublié ?'
6Send: 'Envoyer' 6 submit: 'Se connecter'
7"Enter your email address below and we'll send you password reset instructions.": "Saisissez votre adresse e-mail ci-dessous, nous vous enverrons les instructions pour réinitialiser votre mot de passe." 7 register: 'Créer un compte'
8Register: 'Créer un compte' 8 username: "Nom d'utilisateur"
9 password: 'Mot de passe'
10 cancel: 'Annuler'
11 resetting:
12 description: "Saisissez votre adresse e-mail ci-dessous, nous vous enverrons les instructions pour réinitialiser votre mot de passe."
13 register:
14 page_title: 'Se créer un compte'
15 go_to_account: 'Aller sur votre compte'
9 16
10# Menu 17menu:
11unread: 'Non lus' 18 left:
12starred: 'Favoris' 19 unread: 'Non lus'
13archive: 'Lus' 20 starred: 'Favoris'
14all: 'Tous les articles' 21 archive: 'Lus'
15tags: 'Tags' 22 all_articles: 'Tous les articles'
16config: 'Configuration' 23 config: 'Configuration'
17internal settings: 'Configuration interne' 24 tags: 'Tags'
18import: 'Importer' 25 internal_settings: 'Configuration interne'
19howto: 'Aide' 26 import: 'Importer'
20logout: 'Déconnexion' 27 howto: 'Aide'
21Filtered: 'Articles filtrés' 28 developer: 'Développeur'
22About: 'À propos' 29 logout: 'Déconnexion'
30 about: 'À propos'
31 search: 'Recherche'
32 save_link: 'Sauvegarder un nouvel article'
33 back_to_unread: 'Retour aux articles non lus'
34 top:
35 add_new_entry: 'Sauvegarder un nouvel article'
36 search: 'Rechercher'
37 filter_entries: 'Filtrer les articles'
38 export: 'Exporter'
39 search_form:
40 input_label: 'Saisissez votre terme de recherche'
23 41
24# Header 42footer:
25Back to unread articles: 'Retour aux articles non lus' 43 wallabag:
26Add a new entry: 'Sauvegarder un nouvel article' 44 elsewhere: 'Emportez wallabag avec vous'
27Search: 'Rechercher' 45 social: 'Social'
28Filter entries: 'Filtrer les articles' 46 powered_by: 'propulsé par'
29Enter your search here: 'Saisissez votre terme de recherche' 47 about: 'À propos'
30Save new entry: 'Sauvegarder un nouvel article' 48 page_title: 'Configuration'
31Export: Exporter
32 49
33# Config screen 50config:
34Settings: 'Paramètres' 51 tab_menu:
35User information: 'Mon compte' 52 settings: 'Paramètres'
36Password: 'Mot de passe' 53 rss: 'RSS'
37RSS: 'RSS' 54 user_info: 'Mon compte'
38Add a user: 'Créer un compte' 55 password: 'Mot de passe'
39Theme: 'Thème' 56 rules: 'Règles de tag automatiques'
40Items per page: "Nombre d'articles par page" 57 new_user: 'Créer un compte'
41Reading speed: "Vitesse de lecture" 58 form:
42Language: 'Langue' 59 save: 'Enregistrer'
43Save: 'Enregistrer' 60 form_settings:
44RSS token: 'Jeton RSS' 61 theme_label: 'Thème'
45RSS token updated: 'Jeton RSS mis à jour' 62 items_per_page_label: "Nombre d'articles par page"
46Name: 'Nom' 63 language_label: 'Langue'
47Email: 'Adresse e-mail' 64 reading_speed:
48No token: 'Aucun jeton généré' 65 label: 'Vitesse de lecture'
49Reset your token: 'Réinitialisez votre jeton' 66 help_message: 'Vous pouvez utiliser un outil en ligne pour estimer votre vitesse de lecture :'
50Create your token: 'Créez votre jeton' 67 100_word: 'Je lis environ 100 mots par minute'
51Rss limit: "Nombre d'articles dans un flux RSS" 68 200_word: 'Je lis environ 200 mots par minute'
52RSS links: 'URL de vos flux RSS' 69 300_word: 'Je lis environ 300 mots par minute'
53"RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.": "Les flux RSS fournis par wallabag vous permettent de lire vos articles sauvegardés dans votre lecteur de flux préféré. Pour pouvoir les utiliser, vous devez d'abord créer un jeton." 70 400_word: 'Je lis environ 400 mots par minute'
54Old password: 'Mot de passe actuel' 71 form_rss:
55New password: 'Nouveau mot de passe' 72 description: "Les flux RSS fournis par wallabag vous permettent de lire vos articles sauvegardés dans votre lecteur de flux préféré. Pour pouvoir les utiliser, vous devez d'abord créer un jeton."
56Repeat new password: 'Confirmez votre nouveau mot de passe' 73 token_label: 'Jeton RSS'
57Username: "Nom d'utilisateur" 74 no_token: 'Aucun jeton généré'
58Two factor authentication: "Double authentification" 75 token_create: 'Créez votre jeton'
59"Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion": "Activer l'authentification double-facteur veut dire que vous allez recevoir un code par email à chaque nouvelle connexion non approuvée." 76 token_reset: 'Réinitialisez votre jeton'
60"I read ~100 words per minute": "Je lis environ 100 mots par minute" 77 rss_links: 'URL de vos flux RSS'
61"I read ~200 words per minute": "Je lis environ 200 mots par minute" 78 rss_link:
62"I read ~300 words per minute": "Je lis environ 300 mots par minute" 79 unread: 'non lus'
63"I read ~400 words per minute": "Je lis environ 400 mots par minute" 80 starred: 'favoris'
64"You can use online tools to estimate your reading speed": "Vous pouvez utiliser un outil en ligne pour estimer votre vitesse de lecture" 81 archive: 'lus'
65"like this one": "comme celui-ci" 82 rss_limit: "Nombre d'articles dans le flux"
83 form_user:
84 two_factor_description: "Activer l'authentification double-facteur veut dire que vous allez recevoir un code par email à chaque nouvelle connexion non approuvée."
85 name_label: 'Nom'
86 email_label: 'Adresse e-mail'
87 twoFactorAuthentication_label: 'Double authentification'
88 form_password:
89 old_password_label: 'Mot de passe actuel'
90 new_password_label: 'Nouveau mot de passe'
91 repeat_new_password_label: 'Confirmez votre nouveau mot de passe'
92 form_rules:
93 if_label: 'si'
94 then_tag_as_label: 'alors attribuer les tags'
95 delete_rule_label: 'supprimer'
96 rule_label: 'Règle'
97 tags_label: 'Tags'
98 faq:
99 title: 'FAQ'
100 tagging_rules_definition_title: 'Que signifient les règles de tag automatiques ?'
101 tagging_rules_definition_description: "Ce sont des règles utilisées par wallabag pour classer automatiquement vos nouveaux articles.<br />À chaque fois qu'un nouvel article est ajouté, toutes les règles de tag automatiques seront utilisées afin d'ajouter les tags que vous avez configurés, vous épargnant ainsi l'effort de classifier vos articles manuellement."
102 how_to_use_them_title: 'Comment les utiliser ?'
103 how_to_use_them_description: 'Imaginons que voulez attribuer aux nouveaux articles le tag « <i>lecture courte</i> » lorsque le temps de lecture est inférieur à 3 minutes.<br />Dans ce cas, vous devriez mettre « readingTime &lt;= 3 » dans le champ <i>Règle</i> et « <i>lecture courte</i> » dans le champ <i>Tag</i>.<br />Plusieurs tags peuvent être ajoutés simultanément en les séparant par des virgules : « <i>lecture courte, à lire</i> »<br />Des règles complexes peuvent être créées en utilisant des opérateurs prédéfinis: si « <i>readingTime &gt;= 5 AND domainName = \"github.com\"</i> » alors attribuer les tags « <i>lecture longue, github </i> »'
104 variables_available_title: 'Quelles variables et opérateurs puis-je utiliser pour écrire des règles ?'
105 variables_available_description: 'Les variables et opérateurs suivants peuvent être utilisés pour écrire des règles de tag automatiques :'
106 meaning: 'Signification'
107 variable_description:
108 label: 'Variable'
109 title: "Titre de l'article"
110 url: "URL de l'article"
111 isArchived: "Si l'article est archivé ou non"
112 isStarred: "Si l'article est favori ou non"
113 content: "Le contenu de l'article"
114 language: "La langue de l'article"
115 mimetype: "Le type MIME de l'article"
116 readingTime: "Le temps de lecture estimé de l'article, en minutes"
117 domainName: "Le nom de domaine de l'article"
118 operator_description:
119 label: 'Opérateur'
120 less_than: 'Moins que…...'
121 strictly_less_than: 'Strictement moins que…'
122 greater_than: 'Plus que…'
123 strictly_greater_than: 'Strictement plus que…'
124 equal_to: 'Égal à…'
125 not_equal_to: 'Différent de…'
126 or: "Une règle OU l'autre"
127 and: "Une règle ET l'autre"
128 matches: 'Teste si un <i>sujet</i> correspond à une <i>recherche</i> (non sensible à la casse).<br />Exemple : <code>title matches "football"</code>'
129 form_new_user:
130 username_label: "Nom d'utilisateur"
131 password_label: 'Mot de passe'
132 repeat_new_password_label: 'Confirmez votre nouveau mot de passe'
133 plain_password_label: 'Mot de passe en clair'
134 email_label: 'Adresse e-mail'
66 135
67# Tagging rules 136entry:
68Tagging rules: "Règles de tag automatiques" 137 page_titles:
69What does « tagging rules » mean?: "Que signifient les règles de tag automatiques ?" 138 unread: 'Articles non lus'
70"They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.": "Ce sont des règles utilisées par wallabag pour classer automatiquement vos nouveaux articles.<br />À chaque fois qu'un nouvel article est ajouté, toutes les règles de tag automatiques seront utilisées afin d'ajouter les tags que vous avez configurés, vous épargnant ainsi l'effort de classifier vos articles manuellement." 139 starred: 'Articles favoris'
71How do I use them?: "Comment les utiliser ?" 140 archived: 'Articles lus'
72"Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = \"github.com\"</i> » then tag as « <i>long reading, github </i> »": "Imaginons que voulez attribuer aux nouveaux articles le tag « <i>lecture courte</i> » lorsque le temps de lecture est inférieur à 3 minutes.<br />Dans ce cas, vous devriez mettre « readingTime &lt;= 3 » dans le champ <i>Règle</i> et « <i>lecture courte</i> » dans le champ <i>Tag</i>.<br />Plusieurs tags peuvent être ajoutés simultanément en les séparant par des virgules : « <i>lecture courte, à lire</i> »<br />Des règles complexes peuvent être créées en utilisant des opérateurs prédéfinis: si « <i>readingTime &gt;= 5 AND domainName = \"github.com\"</i> » alors attribuer les tags « <i>lecteur longue, github </i> »" 141 filtered: 'Articles filtrés'
73Which variables and operators can I use to write rules?: "Quelles variables et opérateurs puis-je utiliser pour écrire des règles ?" 142 list:
74The following variables and operators can be used to create tagging rules:: "Les variables et opérateurs suivants peuvent être utilisés pour écrire des règles de tag automatiques :" 143 number_on_the_page: "{0} Il n'y a pas d'articles.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles."
75Variable: "Variable" 144 reading_time: 'durée de lecture'
76Meaning: "Signification" 145 reading_time_minutes: 'durée de lecture: %readingTime% min'
77Operator: "Opérateur" 146 reading_time_less_one_minute: 'durée de lecture: <small class="inferieur">&lt;</small> 1 min'
78Title of the entry: "Titre de l'article" 147 original_article: 'original'
79Less than…: "Moins que…" 148 toogle_as_read: 'Marquer comme lu/non lu'
80URL of the entry: "URL de l'article" 149 toogle_as_star: 'Marquer comme favori'
81Strictly less than…: "Strictement moins que…" 150 delete: 'Supprimer'
82Whether the entry is archived or not: "Si l'article est archivé ou non" 151 export_title: 'Exporter'
83Greater than…: "Plus que…" 152 filters:
84Whether the entry is starred or not: "Si l'article est favori ou non" 153 title: 'Filtres'
85Strictly greater than…: "Strictement plus que…" 154 status_label: 'Status'
86The entry's content: "Le contenu de l'article" 155 archived_label: 'Lus'
87Equal to…: "Égal à…" 156 starred_label: 'Favoris'
88The entry's language: "La langue de l'article" 157 preview_picture_label: 'A une photo'
89Not equal to…: "Différent de…" 158 preview_picture_help: 'Photo'
90The entry's mime-type: "Le Type MIME de l'article" 159 language_label: 'Langue'
91One rule or another: "Une règle ou l'autre" 160 reading_time:
92The estimated entry's reading time, in minutes: "Le temps de lecture estimé de l'article, en minutes" 161 label: 'Durée de lecture en minutes'
93One rule and another: "Une règle et l'autre" 162 from: 'de'
94The domain name of the entry: "Le nom de domaine de l'article" 163 to: 'à'
95"Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches \"football\"</code>": "Teste si un <i>sujet</i> correspond à une <i>recherche</i> (non sensible à la casse).<br />Exemple : <code>title matches \"football\"</code>" 164 domain_label: 'Nom de domaine'
96Rule: "Règle" 165 created_at:
97FAQ: "FAQ" 166 label: 'Date de création'
167 from: 'de'
168 to: 'à'
169 action:
170 clear: 'Effacer'
171 filter: 'Filtrer'
172 view:
173 left_menu:
174 back_to_top: 'Revenir en haut'
175 back_to_homepage: 'Retour'
176 set_as_read: 'Marquer comme lu'
177 set_as_unread: 'Marquer comme non lu'
178 set_as_favorite: 'Mettre en favori'
179 view_original_article: 'Article original'
180 re_fetch_content: 'Recharger le contenu'
181 delete: 'Supprimer'
182 add_a_tag: 'Ajouter un tag'
183 share_content: 'Partager'
184 share_email_label: 'Email'
185 download: 'Télécharger'
186 print: 'Imprimer'
187 problem:
188 label: 'Un problème ?'
189 description: "Est-ce que cet article s'affiche mal ?"
190 edit_title: 'Modifier le titre'
191 original_article: 'original'
192 annotations_on_the_entry: '{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations'
193 new:
194 page_title: 'Sauvegarder un nouvel article'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 page_title: 'Éditer un article'
200 title_label: 'Titre'
201 url_label: 'Url'
202 is_public_label: 'Public'
203 save_label: 'Enregistrer'
98 204
99# Entries 205about:
100"estimated reading time: %readingTime% min": "durée de lecture : %readingTime% min" 206 page_title: 'À propos'
101"estimated reading time: %inferior% 1 min": "durée de lecture : %inferior% 1 min" 207 top_menu:
102original: "original" 208 who_behind_wallabag: "L'équipe derrière wallabag"
103Toggle mark as read: 'Marquer comme lu/non lu' 209 getting_help: "Besoin d'aide"
104Toggle favorite: 'Marquer comme favori' 210 helping: 'Aider wallabag'
105Delete: 'Supprimer' 211 contributors: 'Contributeurs'
106"{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.": "{0} Il n'y a pas d'articles.|{1} Il y a un article.|]1,Inf[ Il y a %count% articles." 212 third_party: 'Librairies tierces'
107http://website: "http://siteweb" 213 who_behind_wallabag:
108"{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations": "{0} Aucune annotation|{1} Une annotation|]1,Inf[ %nbAnnotations% annotations" 214 developped_by: 'Développé par'
215 website: 'Site web'
216 many_contributors: 'Et plein de contributeurs ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>'
217 project_website: 'Site web du projet'
218 license: 'Licence'
219 version: 'Version'
220 getting_help:
221 documentation: 'Documentation'
222 bug_reports: 'Rapport de bugs'
223 support: '<a href="https://support.wallabag.org">Sur notre site de support</a> ou <a href="https://github.com/wallabag/wallabag/issues">sur GitHub</a>'
224 helping:
225 description: 'wallabag est gratuit et opensource. Vous pouvez nous aider :'
226 by_contributing: 'en contribuant au projet :'
227 by_contributing_2: 'un ticket recense tous nos besoins'
228 by_paypal: 'via Paypal'
229 contributors:
230 description: "Merci aux contributeurs de l'application web de wallabag"
231 third_party:
232 description: 'Voici la liste des dépendances utilisées dans wallabag (et leur license) :'
233 package: 'Dépendance'
234 license: 'Licence'
109 235
110# Edit entry 236howto:
111Edit an entry: "Éditer un article" 237 page_title: 'Aide'
112Title: "Titre" 238 page_description: "Il y a plusieurs façon d'enregistrer un article :"
113Is public: "Public" 239 top_menu:
240 browser_addons: 'Extensions de navigateur'
241 mobile_apps: 'Applications smartphone'
242 bookmarklet: 'Bookmarklet'
243 form:
244 description: 'Grâce à ce formulaire'
245 browser_addons:
246 firefox: 'Extension Firefox'
247 chrome: 'Extension Chrome'
248 mobile_apps:
249 android:
250 via_f_droid: 'via F-Droid'
251 via_google_play: 'via Google Play'
252 ios: 'sur iTunes Store'
253 windows: 'sur Microsoft Store'
254 bookmarklet:
255 description: 'Glissez et déposez ce lien dans votre barre de favoris :'
114 256
115# tag 257quickstart:
116Tags: Tags 258 page_title: 'Pour bien débuter'
117"{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.": "{0} Il n'y a pas de tag.|{1} Il y a un tag.|]1,Inf[ Il y a %count% tags." 259 intro:
260 title: 'Bienvenue sur wallabag !'
261 paragraph_1: "Nous allons vous accompagner pour vous faire faire le tour de la maison et vous présenter quelques fonctionnalités qui pourraient vous intéresser pour vous approprier cet outil."
262 paragraph_2: 'Suivez-nous !'
263 configure:
264 title: "Configurez l'application"
265 language: "Changez la langue et le design de l'application"
266 rss: 'Activez les flux RSS'
267 tagging_rules: 'Écrivez des règles pour classer automatiquement vos articles'
268 admin:
269 title: 'Administration'
270 description: "En tant qu'adminitrasteur sur wallabag, vous avez des privilèges qui vous permette de :"
271 new_user: 'Créer un nouvel utilisateur'
272 analytics: 'Configurer les statistiques'
273 sharing: 'Activer des paramètres de partages'
274 export: 'Configurer les export'
275 import: 'Configurer les import'
276 first_steps:
277 title: 'Premiers pas'
278 new_article: 'Ajoutez votre premier article'
279 unread_articles: 'Et rangez-le !'
280 migrate:
281 title: 'Migrer depuis un service existant'
282 description: "Vous êtes un ancien utilisateur d'un service existant ? Nous allons vous aider à récupérer vos données sur wallabag."
283 pocket: 'Migrer depuis Pocket'
284 wallabag_v1: 'Migrer depuis wallabag v1'
285 wallabag_v2: 'Migrer depuis wallabag v2'
286 developer:
287 title: 'Pour les développeurs'
288 create_application: 'Créer votre application tierce'
289 docs:
290 title: 'Documentation complète'
291 annotate: 'Annotater votre article'
292 export: 'Convertissez vos articles en ePub ou en PDF'
293 search_filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse"
294 fetching_errors: "Que faire si mon article n'est pas correctement récupéré ?"
295 all_docs: "Et encore plein d'autres choses !"
296 support:
297 title: 'Support'
298 description: 'Parce que vous avez peut-être besoin de nous poser une question, nous sommes disponibles pour vous.'
299 github: 'Sur GitHub'
300 email: 'Par e-mail'
301 gitter: 'Sur Gitter'
118 302
119# Filters 303tag:
120Filters: 'Filtres' 304 page_title: 'Tags'
121Status: 'Statut' 305 list:
122Archived: 'Lu' 306 number_on_the_page: "{0} Il n'y a pas de tag.|{1} Il y a un tag.|]1,Inf[ Il y a %count% tags."
123Starred: 'Favori'
124Preview picture: 'Photo'
125Has a preview picture: 'A une photo'
126Reading time in minutes: 'Durée de lecture en minutes'
127from: 'de'
128to: 'à'
129website.com: 'website.com'
130Domain name: 'Nom de domaine'
131Creation date: 'Date de création'
132dd/mm/yyyy: 'jj/mm/aaaa'
133Clear: 'Effacer'
134Filter: 'Filtrer'
135website.com: "siteweb.com"
136 307
137# About 308import:
138About: "À propos" 309 page_title: 'Importer'
139Who is behind wallabag: "L'équipe derrière wallabag" 310 page_description: "Bienvenue dans l'outil de migration de wallabag. Choisissez ci-dessous le service depuis lequel vous souhaitez migrer."
140Getting help: "Besoin d'aide" 311 action:
141Helping wallabag: "Aider wallabag" 312 import_contents: 'Importer les contenus'
142Developed by: "Développé par" 313 form:
143website: "Site web" 314 mark_as_read_title: 'Marquer tout comme lu ?'
144And many others contributors ♥: "Et plein de contributeurs ♥" 315 mark_as_read_label: 'Marquer tous les contenus importés comme lus'
145on GitHub: "sur GitHub" 316 file_label: 'Fichier'
146Project website: "Site web du projet" 317 save_label: 'Importer le fichier'
147License: "Licence" 318 pocket:
148Version: "Version" 319 page_title: 'Importer > Pocket'
149Documentation: "Documentation" 320 description: "Cet outil va importer toutes vos données de Pocket. Pocket ne nous autorise pas à récupérer le contenu depuis leur service, donc wallabag doit reparcourir chaque article pour récupérer son contenu."
150Bug reports: "Rapport de bugs" 321 config_missing:
151On our support website: "Sur notre site de support" 322 description: "L'import à partir de Pocket n'est pas configuré."
152or: "ou" 323 admin_message: "Vous devez définir %keyurls%une clé pour l'API Pocket%keyurle%."
153"wallabag is free and opensource. You can help us:": "wallabag est gratuit et opensource. Vous pouvez nous aider :" 324 user_message: "L'administrateur de votre serveur doit définir une clé pour l'API Pocket."
154"by contributing to the project:": "en contribuant au projet :" 325 authorize_message: "Vous pouvez importer vos données depuis votre compte Pocket. Vous n'avez qu'à cliquer sur le bouton ci-dessous et à autoriser wallabag à se connecter à getpocket.com."
155an issue lists all our needs: "un ticket recense tous nos besoins" 326 connect_to_pocket: 'Se connecter à Pocket et importer les données'
156via Paypal: "via Paypal" 327 wallabag_v1:
157Take wallabag with you: "Emportez wallabag avec vous" 328 page_title: 'Importer > Wallabag v1'
158Social: "Social" 329 description: 'Cet outil va importer toutes vos données de wallabag v1. Sur votre page de configuration de wallabag v1, cliquez sur "Export JSON" dans la section "Exporter vos données de wallabag". Vous allez récupérer un fichier "wallabag-export-1-xxxx-xx-xx.json".'
159powered by: "propulsé par" 330 how_to: "Choisissez le fichier de votre export wallabag v1 et cliquez sur le bouton ci-dessous pour l'importer."
160Contributors: "Contributeurs" 331 wallabag_v2:
161Thank you to contributors on wallabag web application: "Merci aux contributeurs de l'application web de wallabag" 332 page_title: 'Importer > Wallabag v2'
162Third-party libraries: Librairies tierces 333 description: "Cet outil va importer tous vos articles d'une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur \"JSON\". Vous allez récupérer un fichier \"All articles.json\""
163"Here are the list of third-party libraries used in wallabag (with their licenses):": "Voici la liste des dépendances utilisées dans wallabag (et leur license) :"
164Package: Dépendance
165License: Licence
166 334
167# Howto 335developer:
168Form: "Formulaire" 336 page_title: 'Développeur'
169Thanks to this form: "Grâce à ce formulaire" 337 welcome_message: "Bienvenue sur l'API de wallabag"
170Browser addons: "Extensions de navigateur" 338 documentation: 'Documentation'
171Mobile apps: "Applications smartphone" 339 how_to_first_app: 'Comment créer votre première application'
172Bookmarklet: "Bookmarklet" 340 full_documentation: "Voir la documentation complète de l'API"
173Standard Firefox Add-On: "Extension Firefox" 341 list_methods: "Lister toutes les méthodes de l'API"
174Chrome Extension: "Extension Chrome" 342 clients:
175download the application: "téléchargez l'application" 343 title: 'Clients'
176"Drag &amp; drop this link to your bookmarks bar:": "Glissez et déposez ce lien dans votre barre de favoris :" 344 create_new: 'Créer une nouveau client'
345 existing_clients:
346 title: 'Les clients existants'
347 field_id: 'ID Client'
348 field_secret: 'Clé secrète'
349 field_uris: 'URLs de redirection'
350 field_grant_types: 'Type de privilège accordé'
351 no_client: 'Aucun client pour le moment'
352 remove:
353 warn_message_1: 'Vous avez la possibilité de supprimer un client. Cette action est IRREVERSIBLE !'
354 warn_message_2: "Si vous supprimez un client, toutes les applications qui l'utilisaient ne fonctionneront plus avec votre compte wallabag."
355 action: 'Supprimer ce client'
356 client:
357 page_title: 'Développeur > Nouveau client'
358 page_description: "Vous allez créer un nouveau client. Merci de remplir l'url de redirection vers votre application."
359 form:
360 redirect_uris_label: 'URLs de redirection'
361 save_label: 'Créer un nouveau client'
362 action_back: 'Retour'
363 client_parameter:
364 page_title: 'Développeur > Les paramètres de votre client'
365 page_description: 'Voilà les paramètres de votre client'
366 field_id: 'ID Client'
367 field_secret: 'Clé secrète'
368 back: 'Retour'
369 read_howto: 'Lire "comment créer ma première application"'
370 howto:
371 page_title: 'Développeur > Comment créer votre première application'
372 description:
373 paragraph_1: "Les commandes suivantes utilisent la <a href=\"https://github.com/jkbrzt/httpie\">librarie HTTPie</a>. Assurez-vous qu'elle soit installée avant de l'utiliser."
374 paragraph_2: "Vous avez besoin d'un token pour échanger entre votre application et l'API de wallabag."
375 paragraph_3: 'Pour créer un token, vous devez <a href="%link%">créer un nouveau client</a>.'
376 paragraph_4: 'Maintenant créez votre token (remplacer client_id, client_secret, username et password avec les bonnes valeurs):'
377 paragraph_5: "L'API vous retournera une réponse comme ça :"
378 paragraph_6: "L'access_token doit être utilisé pour faire un appel à l'API. Par exemple :"
379 paragraph_7: "Cet appel va retourner tous les articles de l'utilisateur."
380 paragraph_8: "Si vous voulez toutes les méthodes de l'API, jetez un oeil <a href=\"%link%\">à la documentation de l'API</a>."
381 back: 'Retour'
177 382
178# Flash messages 383validator:
179Information updated: "Vos informations personnelles ont bien été mises à jour" 384 password_must_match: 'Les deux mots de passe doivent être les mêmes'
180"Config saved. Some parameters will be considered after disconnection.": "Les paramètres ont bien été mis à jour. Certains seront pris en compte après déconnexion." 385 password_too_short: 'Le mot de passe doit contenir au moins 8 caractères'
181RSS information updated: "La configuration des flux RSS a bien été mise à jour" 386 password_wrong_value: 'Votre mot de passe actuel est faux'
182Password updated: "Votre mot de passe a bien été mis à jour" 387 item_per_page_too_high: "Ca ne va pas plaire à l'application"
183Entry starred: "Article ajouté dans les favoris" 388 rss_limit_too_hight: "Ca ne va pas plaire à l'application"
184Entry unstarred: "Article retiré des favoris"
185Entry archived: "Article marqué comme lu"
186Entry unarchived: "Article marqué comme non lu"
187Entry deleted: "Article supprimé"
188Tagging rule deleted: "Règle supprimée"
189Tagging rules updated: "Règles mises à jour"
190User "%username%" added: 'Utilisateur "%username%" ajouté'
191In demonstration mode, you can't change password for this user.: 'En démo, vous ne pouvez pas changer le mot de passe de cet utilisateur.'
192 389
193# Entry 390flashes:
194Mark as read: 'Marquer comme lu' 391 config:
195Favorite: 'Mettre en favori' 392 notice:
196back: 'Retour' 393 config_saved: 'Les paramètres ont bien été mis à jour. Certains seront pris en compte après déconnexion.'
197original article: 'Article original' 394 password_updated: 'Votre mot de passe a bien été mis à jour'
198Add a tag: 'Ajouter un tag' 395 password_not_updated_demo: "En démo, vous ne pouvez pas changer le mot de passe de cet utilisateur."
199Share: 'Partager' 396 user_updated: 'Vos informations personnelles ont bien été mises à jour'
200Download: 'Télécharger' 397 rss_updated: 'La configuration des flux RSS a bien été mise à jour'
201Does this article appear wrong?: "Est-ce que cet article s'affiche mal ?" 398 tagging_rules_updated: 'Règles mises à jour'
202Problems?: 'Un problème ?' 399 tagging_rules_deleted: 'Règle supprimée'
203Edit title: "Modifier le titre" 400 user_added: 'Utilisateur "%username%" ajouté'
204Re-fetch content: "Recharger le contenu" 401 rss_token_updated: 'Jeton RSS mis à jour'
205Tag added: "Tag ajouté" 402 entry:
206 403 notice:
207# Import 404 entry_already_saved: 'Article déjà sauvergardé le %date%'
208Welcome to wallabag importer. Please select your previous service that you want to migrate.: "Bienvenue dans l'outil de migration de wallabag. Choisissez ci-dessous le service depuis lequel vous souhaitez migrer." 405 entry_saved: 'Article enregistré'
209"This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.": "Cet outil va importer toutes vos données de Pocket. Pocket ne nous autorise pas à récupérer le contenu depuis leur service, donc wallabag doit reparcourir chaque article pour récupérer son contenu." 406 entry_updated: 'Article mis à jour'
210"This importer will import all your wallabag v1 articles. On your config page, click on \"JSON export\" in the \"Export your wallabag data\" section. You will have a \"wallabag-export-1-xxxx-xx-xx.json\" file.": "Cet outil va importer toutes vos données de wallabag v1. Sur votre page de configuration de wallabag v1, cliquez sur \"Export JSON\" dans la section \"Exporter vos données de wallabag\". Vous allez récupérer un fichier \"wallabag-export-1-xxxx-xx-xx.json\"." 407 entry_reloaded: 'Article rechargé'
211"This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on \"JSON\". You will have a \"All articles.json\" file.": "Cet outil va importer tous vos articles d'une autre instance de wallabag v2. Allez dans tous vos articles, puis, sur la barre latérale, cliquez sur \"JSON\". Vous allez récupérer un fichier \"All articles.json\"" 408 entry_reload_failed: "Le rechargement de l'article a échoué"
212"You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.": "Vous pouvez importer vos données depuis votre compte Pocket. Vous n'avez qu'à cliquer sur le bouton ci-dessous et à autoriser wallabag à se connecter à getpocket.com." 409 entry_archived: 'Article marqué comme lu'
213Import > Pocket: "Import > Pocket" 410 entry_unarchived: 'Article marqué comme non lu'
214Pocket import isn't configured.: "L'import à partir de Pocket n'est pas configuré." 411 entry_starred: 'Article ajouté dans les favoris'
215You need to define %keyurls% a pocket_consumer_key %keyurle%.: "Vous devez définir %keyurls% une clé pour l'API Pocket %keyurle%." 412 entry_unstarred: 'Article retiré des favoris'
216Your server admin needs to define an API Key for Pocket.: L'administrateur de votre serveur doit définir une clé pour l'API Pocket." 413 entry_deleted: 'Article supprimé'
217Connect to Pocket and import data: "Se connecter à Pocket et importer les données" 414 tag:
218Please select your wallabag export and click on the below button to upload and import it.: "Choisissez le fichier de votre export wallabag v1 et cliquez sur le bouton ci-dessous pour l'importer." 415 notice:
219File: "Fichier" 416 tag_added: 'Tag ajouté'
220Upload file: "Importer le fichier" 417 import:
221Import contents: "Importer les contenus" 418 notice:
222Import: "Importer" 419 failed: "L'import a échoué, veuillez ré-essayer"
223Import > Wallabag v1: "Importer > Wallabag v1" 420 failed_on_file: "Erreur lors du traitement de l'import. Vérifier votre fichier."
224Import > Wallabag v2: "Importer > Wallabag v2" 421 summary: "Rapport d'import: %imported% importés, %skipped% déjà présent."
225Mark all as read ?: "Marquer tout comme lu ?" 422 developer:
226Mark all imported entries as read: "Marquer tous les contenus importés comme lus" 423 notice:
227 424 client_created: 'Nouveau client créé'
228# Quickstart 425 client_deleted: 'Client supprimé'
229Quickstart: Pour bien débuter
230Welcome to wallabag!: "Bienvenue sur wallabag !"
231We'll accompany you to visit wallabag and show you some features which can interess you.: "Nous allons vous accompagner pour vous faire faire le tour de la maison et vous présenter quelques fonctionnalités qui pourraient vous intéresser pour vous approprier cet outil."
232Follow us!: "Suivez-nous !"
233Configure the application: "Configurez l'application"
234Change language and design: "Changez la langue et le design de l'application"
235Enable RSS feeds: "Activez les flux RSS"
236First steps: "Premiers pas"
237Save your first article: "Ajoutez votre premier article"
238And classify it!: "Et rangez-le !"
239Migrate from an existing service: "Migrer depuis un service existant"
240You're using an other service? We'll help you to retrieve your data on wallabag.: "Vous êtes un ancien utilisateur d'un service existant ? Nous allons vous aider à récupérer vos données sur wallabag."
241Migrate from Pocket: "Migrer depuis Pocket"
242Migrate from wallabag v1: "Migrer depuis wallabag v1"
243Full documentation: "Documentation complète"
244Convert your articles into ePUB or PDF: "Convertissez vos articles en ePub ou en PDF"
245See how you can look for an article by using search engine and filters: "Apprenez à utiliser le moteur de recherche et les filtres pour retrouver l'article qui vous intéresse"
246And so many other articles!: "Et encore plein d'autres choses !"
247Support: "Support"
248If you need some help, we are here for you.: "Parce que vous avez peut-être besoin de nous poser une question, nous sommes disponibles pour vous."
249On GitHub: "Sur GitHub"
250By email: "Par email"
251On Gitter: "Sur Gitter"
252
253# developer
254Developer: Développeur
255Welcome to the wallabag API: "Bienvenue sur l'API de wallabag"
256How to create my first application: "Comment créer votre première application"
257View full API documentation: "Voir la documentation complète de l'API"
258Clients: "Clients"
259Create a new client: "Créer une nouveau client"
260Existing clients: "Les clients existants"
261Client ID: "ID Client"
262Client secret: "Clé secrète"
263Redirect URIs: "URLs de redirection"
264Grant type allowed: "Type de privilège accordé"
265You have the ability to remove this client. This action is IRREVERSIBLE !: "Vous avez la possibilité de supprimer un client. Cette action est IRREVERSIBLE !"
266If you remove it, every app configured with that client won't be able to auth on your wallabag.: "Si vous supprimez un client, toutes les applications qui l'utilisaient ne fonctionneront plus avec votre compte wallabag."
267Remove this client: "Supprimer ce client"
268New client: "Nouveau client"
269You are about to create a new client. Please fill the field below for the redirect URI of your application.: "Vous allez créer un nouveau client. Merci de remplir l'url de redirection vers votre application."
270Back: "Retour"
271Client parameters: "Les paramètres de votre client"
272New client created.: "Nouveau client créé."
273Here are your client parameters.: "Voilà les paramètres de votre client"
274Read the howto "Create my first application": "Lire \"comment créer ma première application\""
275Client deleted: "Client supprimé"
276No client yet.: "Aucun client pour le moment"
277"The following commands make use of the <a href=\"https://github.com/jkbrzt/httpie\">HTTPie library</a>. Make sure it is installed on your system before using it.": "Les commandes suivantes utilisent la <a href=\"https://github.com/jkbrzt/httpie\">librarie HTTPie</a>. Assurez-vous qu'elle soit installée avant de l'utiliser."
278You need a token to communicate between your 3rd application and wallabag API.: "Vous avez besoin d'un token pour échanger entre votre application et l'API de wallabag."
279"To create this token, you need <a href=\"%link%\">to create a new client</a>.": "Pour créer un token, vous devez <a href=\"%link%\">créer un nouveau client</a>."
280Now, create your token (replace client_id, client_secret, username and password with the good values):: "Maintenant créez votre token (remplacer client_id, client_secret, username et password avec les bonnes valeurs):"
281The API will return a response like this:: "L'API vous retournera une réponse comme ça:"
282The access_token is useful to do a call to the API endpoint. For example:: "L'access_token doit être utilisé pour faire un appel à l'API. Par exemple :"
283This call will return all the entries for your user.: "Cet appel va retourner tous les articles de l'utilisateur."
284"If you want to see all the API endpoints, you can have a look <a href=\"%link%\">to our API documentation</a>.": "Si vous voulez toutes les méthodes de l'API, jetez un oeil <a href=\"%link%\">à la documentation de l'API</a>."
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
new file mode 100644
index 00000000..bbd813e2
--- /dev/null
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml
@@ -0,0 +1,425 @@
1security:
2 login:
3 page_title: 'Benvenguda sus wallabag !'
4 keep_logged_in: 'Demorar connectat'
5 forgot_password: 'Senhal doblidat ?'
6 submit: 'Se connectar'
7 register: 'Crear un compte'
8 username: "Nom d'utilizaire"
9 password: 'Senhal'
10 cancel: 'Anullar'
11 resetting:
12 description: "Picatz vòstra adreça de corrièl çai-jos, vos mandarem las instruccions per reïnicializar vòstre senhal."
13 register:
14 page_title: 'Se crear un compte'
15 go_to_account: 'Anar sus vòstre compte'
16
17menu:
18 left:
19 unread: 'Pas legits'
20 starred: 'Favorits'
21 archive: 'Legits'
22 all_articles: 'Tots los articles'
23 config: 'Configuracion'
24 tags: 'Etiquetas'
25 internal_settings: 'Configuracion interna'
26 import: 'Importar'
27 howto: 'Ajuda'
28 developer: 'Desvolopador'
29 logout: 'Déconnexion'
30 about: 'A prepaus'
31 search: 'Cercar'
32 save_link: 'Enregistrar un novèl article'
33 back_to_unread: 'Tornar als articles pas legits'
34 top:
35 add_new_entry: 'Enregistrar un novèl article'
36 search: 'Cercar'
37 filter_entries: 'Filtrar los articles'
38 export: 'Exportar'
39 search_form:
40 input_label: 'Picatz vòstre mot-clau a cercar aquí'
41
42footer:
43 wallabag:
44 elsewhere: 'Emportatz wallabag amb vosaultres'
45 social: 'Social'
46 powered_by: 'propulsat per'
47 about: 'A prepaus'
48 page_title: 'Configuracion'
49
50config:
51 tab_menu:
52 settings: 'Paramètres'
53 rss: 'RSS'
54 user_info: 'Mon compte'
55 password: 'Senhal'
56 rules: "Règlas d'etiquetas automaticas"
57 new_user: 'Crear un compte'
58 form:
59 save: 'Enregistrar'
60 form_settings:
61 theme_label: 'Tèma'
62 items_per_page_label: "Nombre d'articles per pagina"
63 language_label: 'Lenga'
64 reading_speed:
65 label: 'Velocitat de lectura'
66 help_message: 'Podètz utilizar una aisina en linha per estimar vòstra velocitat de lectura :'
67 100_word: "Legissi a l'entorn de 100 mots per minuta"
68 200_word: "Legissi a l'entorn de 200 mots per minuta"
69 300_word: "Legissi a l'entorn de 300 mots per minuta"
70 400_word: "Legissi a l'entorn de 400 mots per minuta"
71 form_rss:
72 description: "Los fluxes RSS fornits per wallabag vos permeton de legir vòstres articles salvagardats dins vòstre lector de fluxes preferit. Per los poder emplegar, vos cal, d'en primièr crear un geton."
73 token_label: 'Geton RSS'
74 no_token: 'Aucun jeton généré'
75 token_create: 'Pas cap de geton generat'
76 token_reset: 'Reïnicializatz vòstre geton'
77 rss_links: 'URL de vòstres fluxes RSS'
78 rss_link:
79 unread: 'pas legits'
80 starred: 'favorits'
81 archive: 'legits'
82 rss_limit: "Nombre d'articles dins un flux RSS"
83 form_user:
84 two_factor_description: "Activar l'autentificacion doble-factor vòl dire que recebretz un còdi per corrièl per cada novèla connexion pas aprovada."
85 name_label: 'Nom'
86 email_label: 'Adreça de corrièl'
87 twoFactorAuthentication_label: 'Dobla autentificacion'
88 form_password:
89 old_password_label: 'Senhal actual'
90 new_password_label: 'Senhal novèl'
91 repeat_new_password_label: 'Confirmatz vòstre novèl senhal'
92 form_rules:
93 if_label: 'se'
94 then_tag_as_label: 'alara atribuir las etiquetas'
95 delete_rule_label: 'suprimir'
96 rule_label: 'Règla'
97 tags_label: 'Etiquetas'
98 faq:
99 title: 'FAQ'
100 tagging_rules_definition_title: "Qué significa las règlas d'etiquetas automaticas ?"
101 tagging_rules_definition_description: "Son de règlas utilizadas per wallabad per classar automaticament vòstres novèls articles.<br />Cada còp qu'un novèl article es apondut, totas las règlas d'etiquetas automaticas seràn utilizadas per ajustar d'etiquetas qu'avètz configuradas, en vos esparnhant l'esfòrç de classificar vòstres articles manualament."
102 how_to_use_them_title: 'Cossí las utilizar ?'
103 how_to_use_them_description: "Imaginem que volètz atribuir als novèls article l'etiqueta « <i>lectura corta</i> » quand lo temps per legir es inferior a 3 minutas.<br />Dins aquel cas, deuriatz metre « readingTime &lt;= 3 » dins lo camp <i>Règla</i> e « <i>lectura corta</i> » dins lo camp <i>Etiqueta</i>.<br />Mai d'una etiquetas pòdon èsser apondudas simultanèament ne las separant amb de virgulas : « <i>lectura corta, per ligir</i> »<br />De règlas complèxas pòdon èsser creadas en emplegant d'operators predefinits : se « <i>readingTime &gt;= 5 AND domainName = \"github.com\"</i> » alara atribuir las etiquetas « <i>lectura longa, github </i> »"
104 variables_available_title: 'Quinas variablas e operators pòdi utilizar per escriure de règlas ?'
105 variables_available_description: "Las variablas e operators seguents pòdon èsser utilizats per escriure de règlas d'etiquetas automaticas :"
106 meaning: 'Significacion'
107 variable_description:
108 label: 'Variabla'
109 title: "Títol de l'article"
110 url: "URL de l'article"
111 isArchived: "Se l'article es archivat o pas"
112 isStarred: "Se l'article es favorit o pas"
113 content: "Lo contengut de l'article"
114 language: "La lenga de l'article"
115 mimetype: "Lo tipe MIME de l'article"
116 readingTime: "Lo temps de lectura estimat de l'article, en minutas"
117 domainName: "Lo nom de domeni de l'article"
118 operator_description:
119 label: 'Operator'
120 less_than: 'Mens que…...'
121 strictly_less_than: 'Estrictament mens que…'
122 greater_than: 'Mai que…'
123 strictly_greater_than: 'Estrictament mai que…'
124 equal_to: 'Egal a…'
125 not_equal_to: 'Diferent de…'
126 or: "Una règla O l'autra"
127 and: "Una règla E l'autra"
128 matches: 'Teste se un <i>subjècte</i> correspond a una <i>recerca</i> (non sensibla a la cassa).<br />Exemple : <code>title matches \"football\"</code>'
129 form_new_user:
130 username_label: "Nom d'utilizaire"
131 password_label: 'Senhal'
132 repeat_new_password_label: 'Confirmatz vòstre novèl senhal'
133 plain_password_label: 'Senhal en clar'
134 email_label: 'Adreça de corrièl'
135
136entry:
137 page_titles:
138 unread: 'Articles pas legits'
139 starred: 'Articles favorits'
140 archived: 'Articles legits'
141 filtered: 'Articles filtrats'
142 list:
143 number_on_the_page: "{0} I a pas cap d'article.|{1} I a un article.|]1,Inf[ I a %count% articles."
144 reading_time: 'durada de lectura'
145 reading_time_minutes: 'durada de lectura : %readingTime% min'
146 reading_time_less_one_minute: 'durada de lectura : <small class="inferieur">&lt;</small> 1 min'
147 original_article: 'original'
148 toogle_as_read: 'Marcar coma legit/pas legit'
149 toogle_as_star: 'Marcar coma favorit'
150 delete: 'Suprimir'
151 export_title: 'Exportar'
152 filters:
153 title: 'Filtres'
154 status_label: 'Estatus'
155 archived_label: 'Legits'
156 starred_label: 'Favorits'
157 preview_picture_label: 'A una fotò'
158 preview_picture_help: 'Fotò'
159 language_label: 'Lenga'
160 reading_time:
161 label: 'Durada de lectura en minutas'
162 from: 'de'
163 to: 'per'
164 domain_label: 'Nom de domeni'
165 created_at:
166 label: 'Data de creacion'
167 from: 'de'
168 to: 'per'
169 action:
170 clear: 'Escafar'
171 filter: 'Filtrar'
172 view:
173 left_menu:
174 back_to_top: 'Tornar en naut'
175 back_to_homepage: 'Tornar'
176 set_as_read: 'Marcar coma legit'
177 set_as_unread: 'Marcar coma pas legit'
178 set_as_favorite: 'Metre en favori'
179 view_original_article: 'Article original'
180 re_fetch_content: 'Tornar cargar lo contengut'
181 delete: 'Suprimir'
182 add_a_tag: 'Ajustar una etiqueta'
183 share_content: 'Partatjar'
184 share_email_label: 'Corrièl'
185 download: 'Telecargar'
186 print: 'Imprimir'
187 problem:
188 label: 'Un problèma ?'
189 description: "Marca mal la presentacion d'aqueste article ?"
190 edit_title: 'Modificar lo títol'
191 original_article: 'original'
192 annotations_on_the_entry: "{0} Pas cap d'anotacion|{1} Una anotacion|]1,Inf[ %nbAnnotations% anotacions"
193 new:
194 page_title: 'Enregistrar un novèl article'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 page_title: 'Modificar un article'
200 title_label: 'Títol'
201 url_label: 'Url'
202 is_public_label: 'Public'
203 save_label: 'Enregistrar'
204
205about:
206 page_title: 'A prepaus'
207 top_menu:
208 who_behind_wallabag: "L'equipa darrèr wallabag"
209 getting_help: "Besonh d'ajuda"
210 helping: 'Ajudar wallabag'
211 contributors: 'Contributors'
212 third_party: 'Bibliotècas tèrças'
213 who_behind_wallabag:
214 developped_by: 'Desvolopat per'
215 website: 'Site web'
216 many_contributors: 'E un fum de contributors ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">sur Github</a>'
217 project_website: 'Site web del projète'
218 license: 'Licéncia'
219 version: 'Version'
220 getting_help:
221 documentation: 'Documentacion'
222 bug_reports: 'Rapòrt de bugs'
223 support: "<a href=\"https://support.wallabag.org\">Sus nòstre site d'assisténcia</a> ou <a href=\"https://github.com/wallabag/wallabag/issues\">sur GitHub</a>"
224 helping:
225 description: 'wallabag es a gratuit e opensource. Nos podètz ajudar :'
226 by_contributing: 'en ajudant lo projècte :'
227 by_contributing_2: 'un bilhet recensa totes nòstres besonhs'
228 by_paypal: 'via Paypal'
229 contributors:
230 description: "Mercés als contributors de l'aplicacion web de wallabag"
231 third_party:
232 description: 'Aquí la lista de las dependéncias utilizadas dins wallabag (e lor licéncia) :'
233 package: 'Dependéncia'
234 license: 'Licéncia'
235
236howto:
237 page_title: 'Ajuda'
238 page_description: "I a mai d'un biai d'enregistrar un article :"
239 top_menu:
240 browser_addons: 'Extensions de navigator'
241 mobile_apps: 'Aplicacions mobil'
242 bookmarklet: 'Bookmarklet'
243 form:
244 description: 'Gràcias a aqueste formulari'
245 browser_addons:
246 firefox: 'Extension Firefox'
247 chrome: 'Extension Chrome'
248 mobile_apps:
249 android:
250 via_f_droid: 'via F-Droid'
251 via_google_play: 'via Google Play'
252 ios: 'sus iTunes Store'
253 windows: 'sus Microsoft Store'
254 bookmarklet:
255 description: 'Lisatz-depausatz aqueste ligam dins vòstra barra de favorits :'
256
257quickstart:
258 page_title: 'Per ben començar'
259 intro:
260 title: 'Benvenguda sus wallabag !'
261 paragraph_1: "Anem vos guidar per far lo torn de la proprietat e vos presentar unas fonccionalitats que vos poirián interessar per vos apropriar aquesta aisina."
262 paragraph_2: 'Seguètz-nos '
263 configure:
264 title: "Configuratz l'aplicacio"
265 language: "Cambiatz la lenga e l'estil de l'aplicacion"
266 rss: 'Activatz los fluxes RSS'
267 tagging_rules: 'Escrivètz de règlas per classar automaticament vòstres articles'
268 admin:
269 title: 'Administracion'
270 description: "En qualitat d'adminitrastor sus wallabag, avètz de privilègis que vos permeton de :"
271 new_user: 'Crear un novèl utilizaire'
272 analytics: 'Configurar las estadisticas'
273 sharing: 'Activar de paramètres de partatge'
274 export: 'Configurar los expòrt'
275 import: 'Configurar los impòrt'
276 first_steps:
277 title: 'Primièrs passes'
278 new_article: 'Ajustatz vòstre primièr article'
279 unread_articles: 'E racaptatz-lo !'
280 migrate:
281 title: 'Migrar dempuèi un servici existent'
282 description: "Sètz un ancian utilizaire d'un servici existent ? Vos ajudarem a trapar vòstras donadas sus wallabag."
283 pocket: 'Migrar dempuèi Pocket'
284 wallabag_v1: 'Migrar dempuèi wallabag v1'
285 wallabag_v2: 'Migrar dempuèi wallabag v2'
286 developer:
287 title: 'Pels desvolopadors'
288 create_application: 'Crear vòstra aplicacion tèrça'
289 docs:
290 title: 'Documentacion complèta'
291 annotate: 'Anotatar vòstre article'
292 export: 'Convertissètz vòstres articles en ePub o en PDF'
293 search_filters: "Aprenètz a utilizar lo motor de recèrca e los filtres per retrobar l'article que vos interèssa"
294 fetching_errors: "Qué far se mon article es pas recuperat coma cal ?"
295 all_docs: "E encara plen de causas mai !"
296 support:
297 title: 'Assisténcia'
298 description: 'Perque avètz benlèu besonh de nos pausar una question, sèm disponibles per vosautres.'
299 github: 'Sus GitHub'
300 email: 'Per e-mail'
301 gitter: 'Sus Gitter'
302
303tag:
304 page_title: 'Etiquetas'
305 list:
306 number_on_the_page: "{0} I a pas cap d'etiquetas.|{1} I a una etiqueta.|]1,Inf[ I a %count% etiquetas."
307
308import:
309 page_title: 'Importar'
310 page_description: "Benvenguda sus l'aisina de migracion de wallabag. Causissètz çai-jos lo servici dempuèi lo qual volètz migrar."
311 action:
312 import_contents: 'Importar los contenguts'
313 form:
314 mark_as_read_title: 'Tot marcar coma legit ?'
315 mark_as_read_label: 'Marcar tot los contenguts importats coma legits'
316 file_label: 'Fichièr'
317 save_label: 'Importar lo fichièr'
318 pocket:
319 page_title: 'Importer > Pocket'
320 description: "Aquesta aisina importarà totas vòstras donadas de Pocket. Pocket nos permet pas de recuperar lo contengut dempuèi lor servidor, alara wallabag deu tornar fulhetar cada article per recuperar son contengut."
321 config_missing:
322 description: "L'importacion dempuèi Pocket es pas configurada."
323 admin_message: "Vos cal definir %keyurls% una clau per l'API Pocket %keyurle%."
324 user_message: "L'administrator de vòstre servidor deu definir una clau per l'API Pocket."
325 authorize_message: "Podètz importar vòstras donadas dempuèi vòstre compte Pocket. Vos cal pas que clicar sul boton çai-jos e autorizar wallabag a se connectar a getpocket.com."
326 connect_to_pocket: 'Se connectar a Pocket e importar las donadas'
327 wallabag_v1:
328 page_title: 'Importer > Wallabag v1'
329 description: 'Aquesta aisina importarà totas vòstras donadas de wallabag v1. Sus vòstre pagina de configuracion de wallabag v1, clicatz sus \"Export JSON\" dins la seccion \"Exportar vòstras donadas de wallabag\". Traparatz un fichièr \"wallabag-export-1-xxxx-xx-xx.json\".'
330 how_to: "Causissètz lo fichièr de vòstra exportacion wallabag v1 e clicatz sul boton çai-jos per l'importar."
331 wallabag_v2:
332 page_title: 'Importer > Wallabag v2'
333 description: "Aquesta aisina importarà totas vòstras donadas d'una instància mai de wallabag v2. Anatz dins totes vòstres articles, puèi, sus la barra laterala, clicatz sus \"JSON\". Traparatz un fichièr \"All articles.json\""
334
335developer:
336 page_title: 'Desvolopador'
337 welcome_message: "Benvenguda sus l'API de wallabag"
338 documentation: 'Documentacion'
339 how_to_first_app: 'Cossí crear vòstra primièra aplicacion'
340 full_documentation: "Veire la documentacion completa de l'API"
341 # list_methods: 'List API methods'
342 clients:
343 title: 'Clients'
344 create_new: 'Crear un novèl client'
345 existing_clients:
346 title: 'Los clients existents'
347 field_id: 'ID Client'
348 field_secret: 'Clé secreta'
349 field_uris: 'URLs de redireccion'
350 field_grant_types: 'Tipe de privilègi acordat'
351 no_client: 'Pas cap de client pel moment'
352 remove:
353 warn_message_1: 'Avètz la possibilitat de supriimr un client. Aquesta accion es IRREVERSIBLA !'
354 warn_message_2: "Se suprimissètz un client, totas las aplicacions que l'emplegan foncionaràn pas mai amb vòstre compte wallabag."
355 action: 'Suprimir aqueste client'
356 client:
357 page_title: 'Desvlopador > Novèl client'
358 page_description: "Anatz crear un novèl client. Mercés de cumplir l'url de redireccion cap a vòstra aplicacion."
359 form:
360 redirect_uris_label: 'URLs de redireccion'
361 save_label: 'Crear un novèl client'
362 action_back: 'Retorn'
363 client_parameter:
364 page_title: 'Desvolopador > Los paramètres de vòstre client'
365 page_description: 'Vaquí los paramètres de vòstre client'
366 field_id: 'ID Client'
367 field_secret: 'Clau secreta'
368 back: 'Retour'
369 read_howto: 'Legir \"cossí crear ma primièra aplicacion\"'
370 howto:
371 page_title: 'Desvolopador > Cossí crear ma primièra aplicacion'
372 description:
373 paragraph_1: "Las comandas seguentas utilizan la <a href=\"https://github.com/jkbrzt/httpie\">libraria HTTPie</a>. Asseguratz-vos que siasqueòu installadas abans de l'utilizar."
374 paragraph_2: "Vos cal un geton per escambiar entre vòstra aplicacion e l'API de wallabar."
375 paragraph_3: 'Per crear un geton, vos cal crear <a href=\"%link%\">crear un novèl client</a>.'
376 paragraph_4: 'Ara creatz un geton (remplaçar client_id, client_secret, username e password amb las bonas valors) :'
377 paragraph_5: "L'API vos tornarà una responsa coma aquò :"
378 paragraph_6: "L'access_token deu èsser emplegat per far una requèsta a l'API. Per exemple :"
379 paragraph_7: "Aquesta requèsta tornarà totes los articles de l'utilizaire."
380 paragraph_8: "Se volètz totas las adreças d'accès de l'API, donatz un còp d’uèlh <a href=\"%link%\">a la documentacion de l'API</a>."
381 back: 'Retorn'
382
383validator:
384 password_must_match: 'Cal que los dos senhals siasquen los meteisses'
385 password_too_short: 'Lo senhal deu aver almens 8 caractèrs'
386 password_wrong_value: 'Vòstre senhal actual es pas bon'
387 item_per_page_too_high: "Aquò li agradarà pas a l'aplicacion"
388 rss_limit_too_hight: "Aquò li agradarà pas a l'aplicacion"
389
390flashes:
391 config:
392 notice:
393 config_saved: 'Los paramètres son ben estats meses a jorn. Certans seràn aplicats aprèp desconnexion.'
394 password_updated: 'Vòstre senhal es ben estat mes a jorn'
395 password_not_updated_demo: "En demostration, podètz pas cambiar lo senhal d'aqueste utilizaire."
396 user_updated: 'Vòstres informacions personnelas son ben estadas mesas a jorn'
397 rss_updated: 'La configuracion dels fluxes RSS es ben estada mesa a jorn'
398 tagging_rules_updated: 'Règlas misa a jorn'
399 tagging_rules_deleted: 'Règla suprimida'
400 user_added: 'Utilizaire "%username%" apondut'
401 rss_token_updated: 'Geton RSS mes a jorn'
402 entry:
403 notice:
404 entry_already_saved: 'Article ja salvargardat lo %date%'
405 entry_saved: 'Article enregistrat'
406 entry_updated: 'Article mes a jorn'
407 entry_reloaded: 'Article recargat'
408 entry_reload_failed: "Fracàs de l'actualizacion de l'article"
409 entry_archived: 'Article marcat coma legit'
410 entry_unarchived: 'Article marcat coma pas legit'
411 entry_starred: 'Article apondut dins los favorits'
412 entry_unstarred: 'Article quitat dels favorits'
413 entry_deleted: 'Article suprimit'
414 tag:
415 notice:
416 tag_added: 'Etiqueta aponduda'
417 import:
418 notice:
419 failed: "L'importacion a fracassat, mercés de tornar ensajar"
420 failed_on_file: "Errorr pendent du tractament de l'import. Mercés de verificar vòstre fichièr."
421 summary: "Rapòrt d'import: %imported% importats, %skipped% ja presents."
422 developer:
423 notice:
424 client_created: 'Novèl client creat'
425 client_deleted: 'Client suprimit'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
index 61f05c89..fb26de89 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml
@@ -1,129 +1,425 @@
1#Login 1security:
2Keep me logged in: 'Zapamiętaj mnie' 2 login:
3Forgot your password?: 'Zapomniałeś hasła' 3 page_title: 'Witaj w wallabag!'
4Login: 'Loguj' 4 keep_logged_in: 'Zapamiętaj mnie'
5Back to login: 'Wróć do logowania' 5 forgot_password: 'Zapomniałeś hasła'
6Send: 'Wyślij' 6 submit: 'Loguj'
7"Enter your email address below and we'll send you password reset instructions.": 'Wpisz swój adres email poniżej. Wyślemy Ci instrukcję resetowania hasła' 7 register: 'Zarejestruj'
8 username: 'Nazwa użytkownika'
9 password: 'Hasło'
10 cancel: 'Anuluj'
11 resetting:
12 description: "Wpisz swój adres email poniżej. Wyślemy Ci instrukcję resetowania hasła"
13 register:
14 page_title: 'Utwórz konto'
15 go_to_account: 'Idź do konta'
8 16
9# Menu 17menu:
10unread: 'nieprzeczytane' 18 left:
11starred: 'oznaczone gwiazdką' 19 unread: 'Nieprzeczytane'
12archive: 'archiwum' 20 starred: 'Oznaczone gwiazdką'
13all: 'wszystkie' 21 archive: 'Archiwum'
14tags: 'tagi' 22 all_articles: 'Wszystkie'
15config: 'konfiguracja' 23 config: 'Konfiguracja'
16howto: 'howto' 24 tags: 'Tagi'
17logout: 'wyloguj' 25 internal_settings: 'Wewnętrzne ustawienia'
18Filtered: 'Filtrowane' 26 import: 'Importuj'
19About: 'O nas' 27 howto: 'Howto'
28 developer: 'Deweloper'
29 logout: 'Wyloguj'
30 about: 'O nas'
31 search: 'Szukaj'
32 save_link: 'Zapisz link'
33 back_to_unread: 'Powrót do nieprzeczytanych artykułów'
34 top:
35 add_new_entry: 'Dodaj nowy wpis'
36 search: 'Szukaj'
37 filter_entries: 'Filtruj wpisy'
38 export: 'Eksportuj'
39 search_form:
40 input_label: 'Wpisz swoje zapytanie tutaj'
20 41
21# Header 42footer:
22Back to unread articles: 'Powrót do nieprzeczytanych artykułów' 43 wallabag:
23Add a new entry: 'Dodaj nowy wpis' 44 elsewhere: 'Weż wallabag ze sobą'
24Search: 'Szukaj' 45 social: 'Społeczność'
25Filter entries: 'Filtruj wpisy' 46 powered_by: 'Kontrolowany przez'
26Enter your search here: 'Wpisz swoje zapytanie tutaj:' 47 about: 'O nas'
27Save new entry: 'Zapisz nowy wpis'
28 48
29# Config screen 49config:
30Settings: 'Ustawienia' 50 page_title: 'Konfiguracja'
31User information: 'Informacje o użytkowniku' 51 tab_menu:
32Password: 'Hasło' 52 settings: 'Ustawienia'
33RSS: 'Kanał RSS' 53 rss: 'Kanał RSS'
34Add a user: 'Dodaj użytkownika' 54 user_info: 'Informacje o użytkowniku'
35Theme: 'Temat' 55 password: 'Hasło'
36Items per page: 'Ilość elementóœ na stronie' 56 rules: 'Zasady tagowania'
37Language: 'Język' 57 new_user: 'Dodaj użytkownika'
38Save: 'Zapisz' 58 form:
39RSS token: 'Token RSS' 59 save: 'Zapisz'
40Name: 'Nazwa' 60 form_settings:
41Email: 'Adres email' 61 theme_label: 'Temat'
42No token: 'Brak tokena' 62 items_per_page_label: 'Ilość elementóœ na stronie'
43Reset your token: 'Zresetuj swojego tokena' 63 language_label: 'Język'
44Create your token: 'Stwórz tokena' 64 reading_speed:
45Rss limit: 'Limit RSS' 65 label: 'Prędkość czytania'
46RSS links: 'Link do RSS' 66 help_message: 'Możesz skorzystać z narzędzi online do określenia twojej prędkości czytania:'
47RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'Kanały RSS prowadzone przez wallabag pozwalają Ci na czytanie twoich zapisanych artykułów w twoium ulubionym czytniku RSS. Musisz najpierw wynegenerować tokena.‌' 67 100_word: 'Czytam ~100 słów na minutę'
48Old password: 'Stare hasło' 68 200_word: 'Czytam ~200 słów na minutę'
49New password: 'Nowe hasło' 69 300_word: 'Czytam ~300 słów na minutę'
50Repeat new password: 'Powtórz nowe hasło' 70 400_word: 'Czytam ~400 słów na minutę'
51Username: 'Nazwa użytkownika' 71 form_rss:
72 description: 'Kanały RSS prowadzone przez wallabag pozwalają Ci na czytanie twoich zapisanych artykułów w twoium ulubionym czytniku RSS. Musisz najpierw wynegenerować tokena.‌'
73 token_label: 'Token RSS'
74 no_token: 'Brak tokena'
75 token_create: 'Stwórz tokena'
76 token_reset: 'Zresetuj swojego tokena'
77 rss_links: 'RSS links'
78 rss_link:
79 unread: 'nieprzeczytane'
80 starred: 'oznaczone gwiazdką'
81 archive: 'archiwum'
82 rss_limit: 'Link do RSS'
83 form_user:
84 two_factor_description: "Włączenie autoryzacji dwuetapowej oznacza, że będziesz otrzymywał maile z kodem przy każdym nowym, niezaufanyum połączeniu"
85 name_label: 'Nazwa'
86 email_label: 'Adres email'
87 twoFactorAuthentication_label: 'Autoryzacja dwuetapowa'
88 form_password:
89 old_password_label: 'Stare hasło'
90 new_password_label: 'Nowe hasło'
91 repeat_new_password_label: 'Powtórz nowe hasło'
92 form_rules:
93 if_label: 'jeżeli'
94 then_tag_as_label: 'wtedy otaguj jako'
95 delete_rule_label: 'usuń'
96 rule_label: 'Reguła'
97 tags_label: 'Tagi'
98 faq:
99 title: 'FAQ'
100 tagging_rules_definition_title: 'Co oznaczają « reguły tagowania » ?'
101 tagging_rules_definition_description: 'Istnieją reguły używane przez wallabag służące do automatycznego tagowania nowych wpisów.<br />Za każdym razem kiedy dodasz nowi wpis, zostaną użyte wszystkie skonfigurowane przez ciebie regułu. Dzięki temu unikniesz konieczności ręcznego ich klasyfikowania.'
102 how_to_use_them_title: 'Jak ich użyć?'
103 how_to_use_them_description: 'Załóżmy, że chcesz otagować nowe wpisy jako « <i>do szybkiego przeczytania</i> » jeżeli czas czytania wynosi mniej niż 3 minuty.<br />W tym przypadku ponienieneś umieścić « czasCzytania &lt;= 3 » w polu <i>Reguła</i> i « <i><do szybkiego przeczytania/i> » w polu <i>Tagi</i>.<br />Wiele tagów może zostać dodanych jednocześnie rozdzielając je przecinkami: « <i>do szybkiego przeczytania, koniecznie przeczytać</i> »<br />Kompleksowe reguły mogą być napisane przy użyciu operatorów: jeżeli « <i>czasCzytania &gt;= 5 I nazwaDomeny = "github.com"</i> » wtedy otagój jako « <i>dłuższy tekst, github </i> »'
104 variables_available_title: 'Jakich zmiennych i operatorów mogę użyć przy pisaniu reguł?'
105 variables_available_description: 'Następujące zmienne i operatory mogą być użyte przy tworzeniu reguł tagowania:'
106 meaning: 'Znaczenie'
107 variable_description:
108 label: 'Zmienna'
109 title: 'Tytuł wpisu'
110 url: 'Adres URL wpisu'
111 isArchived: 'Czy wpis został zarchiwizowany czy nie'
112 isStarred: 'Czy wpis został oznaczony gwiazdką czy nie'
113 content: 'Zawartość wpisu'
114 language: 'Język wpisu'
115 mimetype: 'Mime-type wpisu'
116 readingTime: 'Szacunkowy czas czytania wpisu w minutach'
117 domainName: 'Nazwa domeny wpisu'
118 operator_description:
119 label: 'Operator'
120 less_than: 'Mniej niż...'
121 strictly_less_than: 'Wyłącznie mniej niż...'
122 greater_than: 'Więcej niż...'
123 strictly_greater_than: 'Wyłącznie więcej niż...'
124 equal_to: 'Równe...'
125 not_equal_to: 'Nierówny...'
126 or: 'Jedna reguła LUB inna'
127 and: 'Jedna reguła I inna'
128 matches: 'Sprawdź czy <i>temat</i> pasuje <i>szukaj</i> (duże lub małe litery).<br />Przykład: <code>tytuł zawiera "piłka nożna"</code>'
129 form_new_user:
130 username_label: 'Nazwa użytkownika'
131 password_label: 'Hasło'
132 repeat_new_password_label: 'Powtórz nowe hasło'
133 plain_password_label: 'Jawne hasło'
134 email_label: 'Adres email'
52 135
53# Entries 136entry:
54'estimated reading time': 'Szacunkowy czas czytania' 137 page_titles:
55original: 'oryginał' 138 unread: 'Nieprzeczytane wpisy'
56Toggle mark as read: 'Oznacz jako przeczytane' 139 starred: 'Wpisy oznaczone gwiazdką'
57Toggle favorite: 'Oznacz jako ulubione' 140 archived: 'Zarchiwizowane wpisy'
58Delete: 'Usuń' 141 filtered: 'Odfiltrowane wpisy'
142 list:
143 number_on_the_page: '{0} Nie ma wpisów.|{1} Jest jeden wpis.|]1,Inf[ Są %count% wpisy.'
144 reading_time: 'szacunkowy czas czytania'
145 reading_time_minutes: 'szacunkowy czas czytania: %readingTime% min'
146 reading_time_less_one_minute: 'szacunkowy czas czytania: <small class="inferieur">&lt;</small> 1 min'
147 original_article: 'oryginał'
148 toogle_as_read: 'Oznacz jako przeczytane'
149 toogle_as_star: 'Oznacz jako ulubione'
150 delete: 'Usuń'
151 export_title: 'Export'
152 filters:
153 title: 'Filtry'
154 status_label: 'Status'
155 archived_label: 'Zarchiwizowane'
156 starred_label: 'Oznaczone gwiazdką'
157 preview_picture_label: 'Posiada podgląd obrazu'
158 preview_picture_help: 'Podgląd obrazu'
159 language_label: 'Język'
160 reading_time:
161 label: 'Czas czytania w minutach'
162 from: 'od'
163 to: 'do'
164 domain_label: 'Nazwa domeny'
165 created_at:
166 label: 'Czas stworzenia'
167 from: 'od'
168 to: 'do'
169 action:
170 clear: 'Wyczyść'
171 filter: 'Filtruj'
172 view:
173 left_menu:
174 back_to_top: 'Wróć na górę'
175 back_to_homepage: 'Cofnij'
176 set_as_read: 'Oznacz jako przeczytane'
177 set_as_unread: 'Oznacz jako nieprzeczytane'
178 set_as_favorite: 'Ulubione'
179 view_original_article: 'Oryginalny artykuł'
180 re_fetch_content: 'Pobierz ponownie treść'
181 delete: 'Usuń'
182 add_a_tag: 'Dodaj tag'
183 share_content: 'Udostępnij'
184 share_email_label: 'Adres email'
185 download: 'Pobierz'
186 print: 'Drukuj'
187 problem:
188 label: 'Problemy'
189 description: 'Czy ten artykuł wygląda źle?'
190 edit_title: 'Edytuj tytuł'
191 original_article: 'oryginalny'
192 annotations_on_the_entry: '{0} Nie ma adnotacji |{1} Jedna adnotacja |]1,Inf[ %nbAnnotations% adnotacji'
193 new:
194 page_title: 'Zapisz nowy wpis'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 page_title: 'Edytuj wpis'
200 title_label: 'Tytuł'
201 url_label: 'Adres URL'
202 is_public_label: 'Publiczny'
203 save_label: 'Zapisz'
59 204
60# Filters 205about:
61Filters: 'Filtry' 206 page_title: 'O nas'
62Status: 'Status' 207 top_menu:
63Archived: 'Zarchiwizowane' 208 who_behind_wallabag: 'Kto stoi za wallabag'
64Starred: 'Oznaczone gwiazdką' 209 getting_help: 'Pomoc'
65Preview picture: 'Podgląd obrazu' 210 helping: 'Pomóż wallabag'
66Has a preview picture: 'Posiada podgląd obrazu' 211 contributors: 'Osoby, które pomogły przy projekcie'
67Reading time in minutes: 'Czas czytania w minutach' 212 third_party: 'Biblioteki Third-party'
68from: 'od' 213 who_behind_wallabag:
69to: 'do' 214 developped_by: 'Stworzony przez'
70website.com: 'website.com' 215 website: 'strona internetowa'
71Domain name: 'Nazwa domeny' 216 many_contributors: 'i wielu innych ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">na GitHubie</a>'
72Creation date: 'Czas stworzenia' 217 project_website: 'Stona projektu'
73dd/mm/yyyy: 'dd.mm.yyyy' 218 license: 'Licencja'
74Clear: 'Wyczyść' 219 version: 'Wersja'
75Filter: 'Filtruj' 220 getting_help:
221 documentation: 'Dokumentacja'
222 bug_reports: 'Raportuj błędy'
223 support: '<a href="https://support.wallabag.org">Na naszej stronie wsparcia technicznego</a> lub <a href="https://github.com/wallabag/wallabag/issues">na GitHubie</a>'
224 helping:
225 description: 'wallabag jest darmowy i otwartoźródłowy. Możesz nam pomóc:'
226 by_contributing: 'przez przyłączenie się do projektu:'
227 by_contributing_2: 'lista wszystkich naszych potrzeb'
228 by_paypal: 'przez Paypal'
229 contributors:
230 description: 'Podziękuj osobą, które przyczyniły się do projektu przez aplikację webową'
231 third_party:
232 description: 'Tutaj znajduje się lista Third-party bibliotek użytych w wallabag (z ich licencjami):'
233 package: 'Paczka'
234 license: 'Licencja'
76 235
77# About 236howto:
78Who is behind wallabag: 'Kto stoi za wallabag' 237 page_title: 'Howto'
79Getting help: 'Pomoc' 238 page_description: 'Sposoby zapisania artykułu:'
80Helping wallabag: 'Pomóż wallabag' 239 top_menu:
81Developed by: 'Stworzony przez' 240 browser_addons: 'Wtyczki dla przeglądarki'
82website: 'strona internetowa' 241 mobile_apps: 'Aplikacje mobilne'
83And many others contributors ♥: ' i wielu innych ♥' 242 bookmarklet: 'Bookmarklet'
84on GitHub: 'na GitHubie' 243 form:
85Project website: 'Stona projektu' 244 description: 'Podziękuj przez ten formularz'
86License: 'Licencja' 245 browser_addons:
87Version: 'Wersja' 246 firefox: 'Standardowe rozszerzenie dla Firefox'
88Documentation: 'Dokumentacja' 247 chrome: 'Rozszerzenie dla Chrome'
89Bug reports: 'Raportuj błędy' 248 mobile_apps:
90On our support website: 'Na naszeej stronie wsparcia technicznego' 249 android:
91or: 'lub' 250 via_f_droid: 'w F-Droid'
92'wallabag is free and opensource. You can help us:': 'wallabag jest darmowy i otwartoźródłowy. Możesz nam pomóc: ' 251 via_google_play: 'w Google Play'
93'by contributing to the project:': 'przez przyłączenie się do projektu:' 252 ios: 'w iTunes Store'
94an issue lists all our needs: 'lista wszystkich naszych potrzeb' 253 windows: 'w Microsoft Store'
95via Paypal: 'przez PayPal' 254 bookmarklet:
255 description: 'Przeciągnij i upuść ten link na swój pasek zakładek'
96 256
97# Howto 257quickstart:
98Form: 'Od' 258 page_title: 'Szybki start'
99Thanks to this form: 'Podziękuj przez ten formularz' 259 intro:
100Browser addons: 'Wtyczki dla przeglądarki' 260 title: 'Witaj w wallabag!'
101Mobile apps: 'Aplikacje mobilne' 261 paragraph_1: "Będziemy ci towarzyszyli w Twojej poznaniu wallabag i pokażemy możliwości, które mogą cię zainteresować."
102Bookmarklet: 'Bookmarklet' 262 paragraph_2: 'Śledź nas!'
103Standard Firefox Add-On: 'Standardowe rozszerzenia dla Firefox' 263 configure:
104Chrome Extension: 'Rozszerzenie dla Chrome' 264 title: 'Konfiguruj aplikację'
105download the application: 'Pobierz aplikację ' 265 language: 'Zmień język i wygląd'
106'Drag &amp; drop this link to your bookmarks bar:': 'Przeciągnij i upuść ten link na swój pasek zakładek' 266 rss: 'Włącz kanały RSS'
267 tagging_rules: 'Napisz reguły pozwalające na automatyczne otagowanie twoich artykułów'
268 admin:
269 title: 'Administracja'
270 description: 'Jako administrator wallabag, możesz:'
271 new_user: 'Tworzyć nowego użytkownika'
272 analytics: 'Configure analytics'
273 sharing: 'Włączyć pewne parametry dotyczące udostępniania artykułów'
274 export: 'Skonfigurować eksport'
275 import: 'Skonfigurować import'
276 first_steps:
277 title: 'Pierwsze kroki'
278 new_article: 'Zapisz swój pierwszy artukuł'
279 unread_articles: 'I sklasyfikuj go!'
280 migrate:
281 title: 'Migruj w istniejącej usługi'
282 description: "Używasz innej usługi? Pomożemy ci pobrać twoje dane do wallabag."
283 pocket: 'Migruj z Pocket'
284 wallabag_v1: 'Migruj z wallabag v1'
285 wallabag_v2: 'Migruj z wallabag v2'
286 developer:
287 title: 'Deweloperzy'
288 create_application: 'Stwórz swoją aplikację'
289 docs:
290 title: 'Pełna Dokumentacja'
291 annotate: 'Dadaj adnotację do swojego artykułu'
292 export: 'Konwertuj swoje artykuły do ePUB lub PDF'
293 search_filters: 'Zabacz jak możesz znaleźć artykuł dzięku użyciu silnika wyszukiwarki i filtrów'
294 fetching_errors: 'Co mogę zrobić jeżeli artukuł napotka błędy podczas pobierania?'
295 all_docs: 'I wiele innych artykułów!'
296 support:
297 title: 'Wsparcie'
298 description: 'Jeżeli potrzebujesz pomocy, jesteśmy tutaj dla ciebie.'
299 github: 'na GitHubie'
300 email: 'przez email'
301 gitter: 'na Gitterze'
107 302
108# Flash messages 303tag:
109Information updated: 'Informacje zaktualizowane' 304 page_title: 'Tagi'
110Config saved. Some parameters will be considered after disconnection.': 'Konfiguracja zapisana. Niektóre parametry zostaną uznane po rozłączeniu' 305 list:
111RSS information updated: 'Informacje RSS zaktualizowane' 306 number_on_the_page: '{0} Nie ma tagów.|{1} Jest jeden tag.|]1,Inf[ Są %count% tagi.'
112Password updated: 'Hasło zaktualizowane'
113Entry starred: 'Wpis oznaczony gwiazdką'
114Entry unstarred: 'Wpis odznaczony gwiazdką'
115Entry archived: 'Wpis dodany do archiwum'
116Entry unarchived: 'Wpis usunięty z archiwum'
117Entry deleted: 'Wpis usunięty'
118 307
119# Entry 308import:
120Mark as read: 'Oznacz jako przeczytane' 309 page_title: 'Import'
121Favorite: 'Ulubione' 310 page_description: 'Witaj w importerze Wallabag. Wybierz swoją poprzednią usługę, z której chcech migrować.'
122back: 'Cofnij' 311 action:
123original article: 'Oryginalny artykuł' 312 import_contents: 'Import zawartości'
124Add a tag: 'Dodaj tag' 313 form:
125Share: 'Udostępnij' 314 mark_as_read_title: 'Oznaczyć wszystkie jako przeczytane?'
126Download: 'Pobierz' 315 mark_as_read_label: 'Oznacz wszystkie zaimportowane wpisy jako przeczytane'
127Does this article appear wrong?: 'Czy ten artykuł wygląda źle?' 316 file_label: 'Plik'
128Problems?: 'Problemy' 317 save_label: 'Właduj plik'
129Edit title: 'Edytuj tytuł' 318 pocket:
319 page_title: 'Import > Pocket'
320 description: "Ten importer, zaimportuje dane z usługi Pocket. Pocket nie pozwala na nam na pobranie zawartości ze swojej usługi, więc kontent każdego arthykuł\u zostanie ponownie pobrany przez wallabag."
321 config_missing:
322 description: "Import z Pocket nie jest skonfigurowany."
323 admin_message: 'Musisz zdefiniować %keyurls%a pocket_consumer_key%keyurle%.'
324 user_message: 'Admin twojego servera musi zdefiniować API Key dla Pocket.'
325 authorize_message: 'Możesz zaimportować dane ze swojego konta Pocket. Kliknij poniższy przycisk i autoryzuj aplikacje aby połączyć się z getpocket.com.'
326 connect_to_pocket: 'Połącz z Pocket i importuj dane'
327 wallabag_v1:
328 page_title: 'Import > Wallabag v1'
329 description: 'Ten importer, zaimportuje wszystkie twoje artykułu z wallabag v1. Na swojej stronie konfiguracyjnej kliknij "JSON eksport" w sekcji "Eksportuj swoje dane wallabag". Otrzymasz plik "wallabag-export-1-xxxx-xx-xx.json".'
330 how_to: 'Wybierz swój plik eksportu z wallabag i kliknij poniższy przycisk, aby go załadować.'
331 wallabag_v2:
332 page_title: 'Import > Wallabag v2'
333 description: 'Ten importer, zaimportuje wszystkie twoje artykułu z wallabag v2. Idź do wszystkich artykułów, a następnie na panelu exportu kliknij na "JSON". Otrzymasz plik "All articles.json".'
334
335developer:
336 page_title: 'Deweloper'
337 welcome_message: 'Witaj w API wallabag'
338 documentation: 'Dokumentacja'
339 how_to_first_app: 'Jak stworzyć moją pierwszą aplikację'
340 full_documentation: 'Pokaż pełne API'
341 # list_methods: 'List API methods'
342 clients:
343 title: 'Klienci'
344 create_new: 'Utwórz nowego klienta'
345 existing_clients:
346 title: 'Istniejący klienci'
347 field_id: 'Client ID'
348 field_secret: 'Client secret'
349 field_uris: 'Przekieruj URIs'
350 field_grant_types: 'Przyznaj pozwolenie'
351 no_client: 'Nie ma jeszcze klienta.'
352 remove:
353 warn_message_1: 'Masz możliwość usunięcia tego klienta. Ta akcja jest NIEODWRACALNA !'
354 warn_message_2: "Jeżeli go usuniesz, aplikacje skonfigurowane z tym klientem nię będa w stanie autoryzować twojego wallabag."
355 action: 'Usuń tego klienta'
356 client:
357 page_title: 'Deweloper > Nowy klient'
358 page_description: 'Tworzysz nowego klienta. Wypełnij poniższe pole w celu przekierowania URI twojej aplikacji.'
359 form:
360 redirect_uris_label: 'Przekieruj adresy URI'
361 save_label: 'Stwórz nowego klienta'
362 action_back: 'Cofnij'
363 client_parameter:
364 page_title: 'Deweloper > Parametry klienta'
365 page_description: 'Tutaj znajdują się parametry klienta.'
366 field_id: 'Client ID'
367 field_secret: 'Client secret'
368 back: 'Cofnij'
369 read_howto: 'Przeczytaj jak "Stworzyć moją pierwszą aplikację"'
370 howto:
371 page_title: 'Deweloper > Jak stworzyć moją pierwszą aplikację'
372 description:
373 paragraph_1: 'Następujące komendy korzystają <a href="https://github.com/jkbrzt/httpie">Biblioteka HTTPie</a>. Upewnij się, czy zainstalowałeś ją w swoim systemie zanim z niej skorzystasz'
374 paragraph_2: 'Potrzebujesz tokena w celu nawiązania komunikacji między swoją aplikacją a API wallabag.'
375 paragraph_3: 'W celu stworzenia tokena musisz <a href="%link%">stwórz nowego klienta</a>.'
376 paragraph_4: 'Teraz, utwórz tokena (zmień client_id, client_secret, username i password z poprawnymi wartościami):'
377 paragraph_5: 'API powinno zwrócić taką informację:'
378 paragraph_6: 'access_token jest użyteczny do wywołania API endpoint. Na przykład:'
379 paragraph_7: 'To wywołanie zwróci wszystkie twoje wpisy.'
380 paragraph_8: 'Jeżeli chcesz wyświetlić wszystkie punkty końcowe API, zobacz <a href="%link%">Dokumentacja naszego API</a>.'
381 back: 'Cofnij'
382
383validator:
384 password_must_match: 'Hasło w polach musi być takie same'
385 password_too_short: 'Hasło powinno mieć minimum 8 znaków długości'
386 password_wrong_value: 'Twoje obecne hasło jest błędne'
387 item_per_page_too_high: 'To może spowodować problemy z aplikacją'
388 rss_limit_too_hight: 'To może spowodować problemy z aplikacją'
389
390flashes:
391 config:
392 notice:
393 config_saved: 'Konfiguracja zapisana. Niektóre parametry zostaną uznane po rozłączeniu'
394 password_updated: 'Hasło zaktualizowane'
395 password_not_updated_demo: "In demonstration mode, you can't change password for this user."
396 user_updated: 'Informacje zaktualizowane'
397 rss_updated: 'Informacje RSS zaktualizowane'
398 tagging_rules_updated: 'Reguły tagowania zaktualizowane'
399 tagging_rules_deleted: 'Reguła tagowania usunięta'
400 user_added: 'Użytkownik "%username%" dodany'
401 rss_token_updated: 'Token kanału RSS zaktualizowany'
402 entry:
403 notice:
404 entry_already_saved: 'Wpis już został dodany %date%'
405 entry_saved: 'Wpis zapisany'
406 entry_updated: 'Wpis zaktualizowany'
407 entry_reloaded: 'Wpis ponownie załadowany'
408 entry_reload_failed: 'Błąd ponownego załadowania'
409 entry_archived: 'Wpis dodany do archiwum'
410 entry_unarchived: 'Wpis usunięty z archiwum'
411 entry_starred: 'Wpis oznaczony gwiazdką'
412 entry_unstarred: 'Wpis odznaczony gwiazdką'
413 entry_deleted: 'Wpis usunięty'
414 tag:
415 notice:
416 tag_added: 'Tag dodany'
417 import:
418 notice:
419 failed: 'Nieudany import, prosimy spróbować ponownie.'
420 failed_on_file: 'Błąd podczas ptrzetwarzania pliku. Sprawdż swój importowany plik.'
421 summary: 'Podsumowanie importu: %imported% zaimportowane, %skipped% już zapisane.'
422 developer:
423 notice:
424 client_created: 'Nowy klient utworzony.'
425 client_deleted: 'Klient usunięty'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
index d779bcbd..bb817cb3 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml
@@ -1,129 +1,425 @@
1#Login 1security:
2Keep me logged in: 'Ține-mă logat' 2 login:
3Forgot your password?: 'Ți-ai uitat parola?' 3 # page_title: 'Welcome to wallabag!'
4Login: 'Logare' 4 keep_logged_in: 'Ține-mă logat'
5Back to login: 'Înapoi la logare' 5 forgot_password: 'Ți-ai uitat parola?'
6Send: 'Trimite' 6 submit: 'Logare'
7"Enter your email address below and we'll send you password reset instructions.": "Introduceți adresa de e-mail, iar noi vă vom trimite instrucțiunile pentru resetarea parolei." 7 # register: 'Register'
8 username: 'Nume de utilizator'
9 password: 'Parolă'
10 # cancel: 'Cancel'
11 resetting:
12 description: "Introduceți adresa de e-mail, iar noi vă vom trimite instrucțiunile pentru resetarea parolei."
13 register:
14 # page_title: 'Create an account'
15 # go_to_account: 'Go to your account'
8 16
9# Menu 17menu:
10unread: 'necitite' 18 left:
11starred: 'cu steluță' 19 unread: 'Necitite'
12archive: 'arhivă' 20 starred: 'Cu steluță'
13all: 'toate' 21 archive: 'Arhivă'
14tags: 'tag-uri' 22 all_articles: 'Toate'
15config: 'configurație' 23 config: 'Configurație'
16howto: 'cum să' 24 tags: 'Tag-uri'
17logout: 'delogare' 25 # internal_settings: 'Internal Settings'
18Filtered: 'Filtrate' 26 # import: 'Import'
19About: 'Despre' 27 howto: 'Cum să'
28 # developer: 'Developer'
29 logout: 'cum să'
30 about: 'Despre'
31 search: 'Căutare'
32 # save_link: 'Save a link'
33 back_to_unread: 'Înapoi la articolele necitite'
34 top:
35 add_new_entry: 'Introdu un nou articol'
36 search: 'Căutare'
37 filter_entries: 'Filtrează articolele'
38 # export: 'Export'
39 search_form:
40 input_label: 'Introdu căutarea ta'
20 41
21# Header 42footer:
22Back to unread articles: 'Înapoi la articolele necitite' 43 wallabag:
23Add a new entry: 'Introdu un nou articol' 44 # elsewhere: 'Take wallabag with you'
24Search: 'Căutare' 45 # social: 'Social'
25Filter entries: 'Filtrează articolele' 46 # powered_by: 'powered by'
26Enter your search here: 'Introdu căutarea ta' 47 about: 'Despre'
27Save new entry: 'Salvează un nou articol'
28 48
29# Config screen 49config:
30Settings: 'Setări' 50 page_title: 'Configurație'
31User information: 'Informații despre utilizator' 51 tab_menu:
32Password: 'Parolă' 52 settings: 'Setări'
33RSS: 'RSS' 53 rss: 'RSS'
34Add a user: 'Crează un utilizator' 54 user_info: 'Informații despre utilizator'
35Theme: 'Temă' 55 password: 'Parolă'
36Items per page: 'Articole pe pagină' 56 # rules: 'Tagging rules'
37Language: 'Limbă' 57 new_user: 'Crează un utilizator'
38Save: 'Salvează' 58 form:
39RSS token: 'RSS-Token' 59 save: 'Salvează'
40Name: 'Nume' 60 form_settings:
41Email: 'E-mail' 61 theme_label: 'Temă'
42No token: 'Fără token' 62 items_per_page_label: 'Articole pe pagină'
43Reset your token: 'Resetează-ți token-ul' 63 language_label: 'Limbă'
44Create your token: 'Crează-ți token' 64 reading_speed:
45Rss limit: 'Limită RSS' 65 # label: 'Reading speed'
46RSS links: 'Link-uri RSS' 66 # help_message: 'You can use online tools to estimate your reading speed:'
47'RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.': 'Feed-urile RSS oferite de wallabag îți permit să-ți citești articolele salvate în reader-ul tău preferat RSS.' 67 # 100_word: 'I read ~100 words per minute'
48Old password: 'Parola veche' 68 # 200_word: 'I read ~200 words per minute'
49New password: 'Parola nouă' 69 # 300_word: 'I read ~300 words per minute'
50Repeat new password: 'Repetă parola' 70 # 400_word: 'I read ~400 words per minute'
51Username: 'Nume de utilizator' 71 form_rss:
72 description: 'Feed-urile RSS oferite de wallabag îți permit să-ți citești articolele salvate în reader-ul tău preferat RSS.'
73 token_label: 'RSS-Token'
74 no_token: 'Fără token'
75 token_create: 'Crează-ți token'
76 token_reset: 'Resetează-ți token-ul'
77 rss_links: 'Link-uri RSS'
78 rss_link:
79 unread: 'unread'
80 starred: 'starred'
81 archive: 'archived'
82 rss_limit: 'Limită RSS'
83 form_user:
84 # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion"
85 name_label: 'Nume'
86 email_label: 'E-mail'
87 # twoFactorAuthentication_label: 'Two factor authentication'
88 form_password:
89 old_password_label: 'Parola veche'
90 new_password_label: 'Parola nouă'
91 repeat_new_password_label: 'Repeat new password'
92 form_rules:
93 # if_label: 'if'
94 # then_tag_as_label: 'then tag as'
95 # delete_rule_label: 'delete'
96 # rule_label: 'Rule'
97 # tags_label: 'Tags'
98 # faq:
99 # title: 'FAQ'
100 # tagging_rules_definition_title: 'What does « tagging rules » mean?'
101 # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.'
102 # how_to_use_them_title: 'How do I use them?'
103 # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
104 # variables_available_title: 'Which variables and operators can I use to write rules?'
105 # variables_available_description: 'The following variables and operators can be used to create tagging rules:'
106 # meaning: 'Meaning'
107 # variable_description:
108 # label: 'Variable'
109 # title: 'Title of the entry'
110 # url: 'URL of the entry'
111 # isArchived: 'Whether the entry is archived or not'
112 # isStarred: 'Whether the entry is starred or not'
113 # content: "The entry's content"
114 # language: "The entry's language"
115 # mimetype: "The entry's mime-type"
116 # readingTime: "The estimated entry's reading time, in minutes"
117 # domainName: 'The domain name of the entry'
118 # operator_description:
119 # label: 'Operator'
120 # less_than: 'Less than...'
121 # strictly_less_than: 'Strictly less than...'
122 # greater_than: 'Greater than...'
123 # strictly_greater_than: 'Strictly greater than...'
124 # equal_to: 'Equal to...'
125 # not_equal_to: 'Not equal to...'
126 # or: 'One rule OR another'
127 # and: 'One rule AND another'
128 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
129 form_new_user:
130 username_label: 'Nume de utilizator'
131 password_label: 'Parolă'
132 repeat_new_password_label: 'Repeat new password'
133 plain_password_label: '????'
134 email_label: 'E-mail'
52 135
53# Entries 136entry:
54'estimated reading time': 'timp estimat de citire' 137 page_titles:
55original: original 138 # unread: 'Unread entries'
56Toggle mark as read: 'Comută marcat ca citit' 139 # starred: 'Starred entries'
57Toggle favorite: 'Comută marcat ca favorit' 140 # archived: 'Archived entries'
58Delete: 'Șterge' 141 # filtered: 'Filtered entries'
142 list:
143 # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
144 reading_time: 'timp estimat de citire'
145 reading_time_minutes: 'timp estimat de citire: %readingTime% min'
146 reading_time_less_one_minute: 'timp estimat de citire: <small class="inferieur">&lt;</small> 1 min'
147 original_article: 'original'
148 toogle_as_read: 'Comută marcat ca citit'
149 toogle_as_star: 'Comută marcat ca favorit'
150 delete: 'Șterge'
151 # export_title: 'Export'
152 filters:
153 title: 'Filtre'
154 status_label: 'Status'
155 archived_label: 'Arhivat'
156 starred_label: 'Steluțe'
157 preview_picture_label: 'Are o imagine de previzualizare'
158 preview_picture_help: 'Previzualizare imagine'
159 language_label: 'Limbă'
160 reading_time:
161 label: 'Timp de citire în minute'
162 from: 'de la'
163 to: 'către'
164 domain_label: 'Nume domeniu'
165 created_at:
166 label: 'Data creării'
167 from: 'de la'
168 to: 'către'
169 action:
170 clear: 'Șterge'
171 filter: 'Filtru'
172 view:
173 left_menu:
174 # back_to_top: 'Back to top'
175 back_to_homepage: 'Înapoi'
176 set_as_read: 'Marchează ca citit'
177 # set_as_unread: 'Mark as unread'
178 set_as_favorite: 'Favorit'
179 view_original_article: 'Articol original'
180 # re_fetch_content: 'Re-fetch content'
181 delete: 'Șterge'
182 add_a_tag: 'Adaugă un tag'
183 share_content: 'Dă mai departe'
184 share_email_label: 'E-mail'
185 download: 'Descarcă'
186 # print: 'Print'
187 problem:
188 label: 'Probleme?'
189 description: 'Îți pare ciudat articolul?'
190 edit_title: 'Editează titlul'
191 original_article: 'original'
192 # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
193 new:
194 page_title: 'Salvează un nou articol'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 # page_title: 'Edit an entry'
200 # title_label: 'Title'
201 url_label: 'Url'
202 # is_public_label: 'Public'
203 save_label: 'Salvează'
59 204
60# Filters 205about:
61Filters: 'Filtre' 206 page_title: 'Despre'
62Status: 'Status' 207 top_menu:
63Archived: 'Arhivat' 208 who_behind_wallabag: 'Cine e în spatele wallabag'
64Starred: 'Steluțe' 209 getting_help: 'Ajutor'
65Preview picture: 'Previzualizare imagine' 210 helping: 'Cum să ajuți wallabag'
66Has a preview picture: 'Are o imagine de previzualizare' 211 # contributors: 'Contributors'
67Reading time in minutes: 'Timp de citire în minute' 212 # third_party: 'Third-party libraries'
68from: 'de la' 213 who_behind_wallabag:
69to: 'către' 214 developped_by: 'Dezvoltat de'
70website.com: 'website.com' 215 website: 'website'
71Domain name: 'Nume domeniu' 216 many_contributors: 'Și mulți alți contribuitori ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">pe Github</a>'
72Creation date: 'Data creării' 217 project_website: 'Website-ul proiectului'
73dd/mm/yyyy: 'zz/ll/aaaa' 218 license: 'Licență'
74Clear: 'Șterge' 219 version: 'Versiune'
75Filter: 'Filtru' 220 getting_help:
221 documentation: 'Documentație'
222 bug_reports: 'Bug-uri'
223 support: '<a href="https://support.wallabag.org">Pe site-ul nostru de suport</a> sau <a href="https://github.com/wallabag/wallabag/issues">pe GitHub</a>'
224 helping:
225 description: 'wallabag este gratis și Open-Source. Cum ne poți ajuta:'
226 by_contributing: 'contribuind la proiect:'
227 by_contributing_2: 'o problemă ne listează toate nevoile:'
228 by_paypal: 'prin Paypal'
229 contributors:
230 # description: 'Thank you to contributors on wallabag web application'
231 third_party:
232 # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):'
233 # package: 'Package'
234 license: 'Licență'
76 235
77# About 236howto:
78Who is behind wallabag: "Cine e în spatele wallabag" 237 page_title: 'Cum să'
79Getting help: "Ajutor" 238 # page_description: 'There are several ways to save an article:'
80Helping wallabag: "Cum să ajuți wallabag" 239 top_menu:
81Developed by: "Dezvoltat de" 240 browser_addons: 'Add-On-uri de Browser'
82website: "website" 241 mobile_apps: 'Aplicații mobile'
83And many others contributors ♥: "Și mulți alți contribuitori ♥" 242 bookmarklet: 'Bookmarklet'
84on GitHub: "pe GitHub" 243 form:
85Project website: "Website-ul proiectului" 244 description: 'Mulțumită acestui formular'
86License: "Licență" 245 browser_addons:
87Version: "Versiune" 246 firefox: 'Add-On standard de Firefox'
88Documentation: "Documentație" 247 chrome: 'Extensie Chrome'
89Bug reports: "Bug-uri" 248 mobile_apps:
90On our support website: "Pe site-ul nostru de suport" 249 android:
91or: "sau" 250 via_f_droid: 'prin F-Droid'
92"wallabag is free and opensource. You can help us:": "wallabag este gratis și Open-Source. Cum ne poți ajuta:" 251 via_google_play: 'prin Google Play'
93"by contributing to the project:": "contribuind la proiect:" 252 ios: 'prin iTunes Store'
94an issue lists all our needs: "o problemă ne listează toate nevoile:" 253 windows: 'prin Microsoft Store'
95via Paypal: "prin PayPal" 254 bookmarklet:
255 description: 'Drag &amp; drop acest link în bara de bookmark-uri:'
96 256
97# Howto 257quickstart:
98Form: Formular 258 # page_title: 'Quickstart'
99Thanks to this form: "Mulțumită acestui formular" 259 # intro:
100Browser addons: "Add-On-uri de Browser" 260 # title: 'Welcome to wallabag!'
101Mobile apps: "Aplicații mobile" 261 # paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you."
102Bookmarklet: "Bookmarklet" 262 # paragraph_2: 'Follow us!'
103Standard Firefox Add-On: "Add-On standard de Firefox" 263 # configure:
104Chrome Extension: "Extensie Chrome" 264 # title: 'Configure the application'
105download the application: "descarcă aplicația" 265 # language: 'Change language and design'
106"Drag &amp; drop this link to your bookmarks bar:": "Drag &amp; drop acest link în bara de bookmark-uri:" 266 # rss: 'Enable RSS feeds'
267 # tagging_rules: 'Write rules to automatically tag your articles'
268 # admin:
269 # title: 'Administration'
270 # description: 'As an administrator, you have privileges on wallabag. You can:'
271 # new_user: 'Create a new user'
272 # analytics: 'Configure analytics'
273 # sharing: 'Enable some parameters about article sharing'
274 # export: 'Configure export'
275 # import: 'Configure import'
276 # first_steps:
277 # title: 'First steps'
278 # new_article: 'Save your first article'
279 # unread_articles: 'And classify it!'
280 # migrate:
281 # title: 'Migrate from an existing service'
282 # description: "Are you using another service? We'll help you to retrieve your data on wallabag."
283 # pocket: 'Migrate from Pocket'
284 # wallabag_v1: 'Migrate from wallabag v1'
285 # wallabag_v2: 'Migrate from wallabag v2'
286 # developer:
287 # title: 'Developers'
288 # create_application: 'Create your third application'
289 # docs:
290 # title: 'Full documentation'
291 # annotate: 'Annotate your article'
292 # export: 'Convert your articles into ePUB or PDF'
293 # search_filters: 'See how you can look for an article by using search engine and filters'
294 # fetching_errors: 'What can I do if an article encounters errors during fetching?'
295 # all_docs: 'And so many other articles!'
296 # support:
297 # title: 'Support'
298 # description: 'If you need some help, we are here for you.'
299 # github: 'On GitHub'
300 # email: 'By email'
301 # gitter: 'On Gitter'
107 302
108# Flash messages 303tag:
109Information updated: "Informație actualizată" 304 page_title: 'Tag-uri'
110"Config saved. Some parameters will be considered after disconnection.": "configurație salvată. Unii parametrii vor fi considerați după deconectare." 305 list:
111RSS information updated: "Informație RSS actualizată" 306 # number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.'
112Password updated: "Parolă actualizată"
113Entry starred: "Articol adăugat la favorite"
114Entry unstarred: "Articol șters de la favorite"
115Entry archived: "Articol arhivat"
116Entry unarchived: "Articol dezarhivat"
117Entry deleted: "Articol șters"
118 307
119# Entry 308import:
120Mark as read: 'Marchează ca citit' 309 # page_title: 'Import'
121Favorite: 'Favorit' 310 # page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.'
122back: 'înapoi' 311 # action:
123original article: 'articol original' 312 # import_contents: 'Import contents'
124Add a tag: 'Adaugă un tag' 313 # form:
125Share: 'Dă mai departe' 314 # mark_as_read_title: 'Mark all as read?'
126Download: 'Descarcă' 315 # mark_as_read_label: 'Mark all imported entries as read'
127Does this article appear wrong?: "Îți pare ciudat articolul?" 316 # file_label: 'File'
128Problems?: 'Probleme?' 317 # save_label: 'Upload file'
129Edit title: "Editează titlul" 318 # pocket:
319 # page_title: 'Import > Pocket'
320 # description: "This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag."
321 # config_missing:
322 # description: "Pocket import isn't configured."
323 # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
324 # user_message: 'Your server admin needs to define an API Key for Pocket.'
325 # authorize_message: 'You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.'
326 # connect_to_pocket: 'Connect to Pocket and import data'
327 # wallabag_v1:
328 # page_title: 'Import > Wallabag v1'
329 # description: 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.'
330 # how_to: 'Please select your wallabag export and click on the below button to upload and import it.'
331 # wallabag_v2:
332 # page_title: 'Import > Wallabag v2'
333 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
334
335developer:
336 # page_title: 'Developer'
337 # welcome_message: 'Welcome to the wallabag API'
338 # documentation: 'Documentation'
339 # how_to_first_app: 'How to create my first application'
340 # full_documentation: 'View full API documentation'
341 # list_methods: 'List API methods'
342 # clients:
343 # title: 'Clients'
344 # create_new: 'Create a new client'
345 # existing_clients:
346 # title: 'Existing clients'
347 # field_id: 'Client ID'
348 # field_secret: 'Client secret'
349 # field_uris: 'Redirect URIs'
350 # field_grant_types: 'Grant type allowed'
351 # no_client: 'No client yet.'
352 # remove:
353 # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !'
354 # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
355 # action: 'Remove this client'
356 # client:
357 # page_title: 'Developer > New client'
358 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
359 # form:
360 # redirect_uris_label: 'Redirect URIs'
361 # save_label: 'Create a new client'
362 # action_back: 'Back'
363 # client_parameter:
364 # page_title: 'Developer > Client parameters'
365 # page_description: 'Here are your client parameters.'
366 # field_id: 'Client ID'
367 # field_secret: 'Client secret'
368 # back: 'Back'
369 # read_howto: 'Read the howto "Create my first application"'
370 # howto:
371 # page_title: 'Developer > How to create my first application'
372 # description:
373 # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.'
374 # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.'
375 # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.'
376 # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):'
377 # paragraph_5: 'The API will return a response like this:'
378 # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:'
379 # paragraph_7: 'This call will return all the entries for your user.'
380 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
381 # back: 'Back'
382
383validator:
384 password_must_match: 'Câmpurile destinate parolelor trebuie să se potrivească'
385 password_too_short: 'Parola ar trebui să conțină cel puțin 8 caractere'
386 # password_wrong_value: 'Wrong value for your current password'
387 # item_per_page_too_high: 'This will certainly kill the app'
388 # rss_limit_too_hight: 'This will certainly kill the app'
389
390flashes:
391 config:
392 notice:
393 config_saved: 'Configurație salvată. Unii parametrii vor fi considerați după deconectare.'
394 password_updated: 'Parolă actualizată'
395 password_not_updated_demo: "In demonstration mode, you can't change password for this user."
396 user_updated: 'Informație actualizată'
397 rss_updated: 'Informație RSS actualizată'
398 # tagging_rules_updated: 'Tagging rules updated'
399 # tagging_rules_deleted: 'Tagging rule deleted'
400 # user_added: 'User "%username%" added'
401 # rss_token_updated: 'RSS token updated'
402 entry:
403 notice:
404 # entry_already_saved: 'Entry already saved on %date%'
405 # entry_saved: 'Entry saved'
406 # entry_updated: 'Entry updated'
407 # entry_reloaded: 'Entry reloaded'
408 # entry_reload_failed: 'Failed to reload entry'
409 entry_archived: 'Articol arhivat'
410 entry_unarchived: 'Articol dezarhivat'
411 entry_starred: 'Articol adăugat la favorite'
412 entry_unstarred: 'Articol șters de la favorite'
413 entry_deleted: 'Articol șters'
414 tag:
415 notice:
416 # tag_added: 'Tag added'
417 import:
418 notice:
419 # failed: 'Import failed, please try again.'
420 # failed_on_file: 'Error while processing import. Please verify your import file.'
421 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
422 developer:
423 notice:
424 # client_created: 'New client created.'
425 # client_deleted: 'Client deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
index 6d9bf0db..897cc2f4 100644
--- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
+++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml
@@ -1,226 +1,425 @@
1# Login 1security:
2Keep me logged in: 'Oturumumu açık tut' 2 login:
3Forgot your password?: 'Şifrenizi mi unuttunuz?' 3 page_title: 'wallabag'
4Login: 'Giriş Yap' 4 keep_logged_in: 'Oturumumu açık tut'
5Back to login: 'Giriş yapma ekranına geri dön' 5 forgot_password: 'Şifrenizi mi unuttunuz?'
6Send: 'Gönder' 6 submit: 'Giriş Yap'
7Register: 'Kayıt Ol' 7 register: 'Kayıt Ol'
8 username: 'Kullanıcı adı'
9 password: 'Şifre'
10 # cancel: 'Cancel'
11 resetting:
12 # description: "Enter your email address below and we'll send you password reset instructions."
13 register:
14 # page_title: 'Create an account'
15 # go_to_account: 'Go to your account'
8 16
9# Menu 17menu:
10unread: 'Okunmayan' 18 left:
11starred: 'Favoriler' 19 unread: 'Okunmayan'
12archive: 'Arşiv' 20 starred: 'Favoriler'
13all: 'Hepsi' 21 archive: 'Arşiv'
14tags: 'Etiketler' 22 all_articles: 'Hepsi'
15config: 'Yapılandırma' 23 config: 'Yapılandırma'
16import: 'İçe Aktar' 24 tags: 'Etiketler'
17howto: 'Yardım' 25 # internal_settings: 'Internal Settings'
18logout: 'Çıkış Yap' 26 import: 'İçe Aktar'
19Filtered: 'Filtreli' 27 howto: 'Yardım'
20About: 'Hakkımızda' 28 # developer: 'Developer'
29 logout: 'Çıkış Yap'
30 about: 'Hakkımızda'
31 search: 'Ara'
32 # save_link: 'Save a link'
33 back_to_unread: 'Okunmayan makalelere geri dön'
34 top:
35 add_new_entry: 'Yeni bir makale ekle'
36 search: 'Ara'
37 filter_entries: 'Filtrele'
38 export: 'Dışa Aktar'
39 search_form:
40 input_label: 'Aramak istediğiniz herhangi bir şey yazın'
21 41
22# Header 42footer:
23Back to unread articles: 'Okunmayan makalelere geri dön' 43 wallabag:
24Add a new entry: 'Yeni bir makale ekle' 44 elsewhere: 'wallabag her an seninle'
25Search: 'Ara' 45 social: 'Sosyal'
26Filter entries: 'Filtrele' 46 powered_by: 'powered by'
27Enter your search here: 'Aramak istediğiniz herhangi bir şey yazın' 47 about: 'Hakkımızda'
28Save new entry: 'Yeni makaleyi kaydet'
29 48
30# Config screen 49config:
31Settings: 'Ayarlar' 50 page_title: 'Yapılandırma'
32User information: 'Kullanıcı bilgileri' 51 tab_menu:
33Tagging rules: "Etiketleme kuralları" 52 settings: 'Ayarlar'
34Password: 'Şifre' 53 rss: 'RSS'
35RSS: 'RSS' 54 user_info: 'Kullanıcı bilgileri'
36Add a user: 'Bir kullanıcı ekle' 55 password: 'Şifre'
37Theme: 'Tema' 56 rules: 'Etiketleme kuralları'
38Items per page: "Sayfa başına makale sayısı" 57 new_user: 'Bir kullanıcı ekle'
39Language: 'Dil' 58 form:
40Save: 'Kaydet' 59 save: 'Kaydet'
41RSS token: 'RSS belirteci (token)' 60 form_settings:
42Name: 'İsim' 61 theme_label: 'Tema'
43Email: 'E-posta' 62 items_per_page_label: 'Sayfa başına makale sayısı'
44No token: 'Belirteç (token) yok' 63 language_label: 'Dil'
45Reset your token: 'Belirteci (token) sıfırla' 64 reading_speed:
46Create your token: 'Yeni belirteç (token) oluştur' 65 # label: 'Reading speed'
47Rss limit: "RSS içeriğinden talep edilecek makale limiti" 66 # help_message: 'You can use online tools to estimate your reading speed:'
48RSS links: 'RSS akış bağlantıları' 67 # 100_word: 'I read ~100 words per minute'
49"RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.": "wallabag RSS akışı kaydetmiş olduğunuz makalelerini favori RSS okuyucunuzda görüntülemenizi sağlar. Bunu yapabilmek için öncelikle belirteç (token) oluşturmalısınız." 68 # 200_word: 'I read ~200 words per minute'
50Old password: 'Eski şifre' 69 # 300_word: 'I read ~300 words per minute'
51New password: 'Yeni şifre' 70 # 400_word: 'I read ~400 words per minute'
52Repeat new password: 'Yeni şifrenin tekrarı' 71 form_rss:
53Username: "Kullanıcı adı" 72 description: 'wallabag RSS akışı kaydetmiş olduğunuz makalelerini favori RSS okuyucunuzda görüntülemenizi sağlar. Bunu yapabilmek için öncelikle belirteç (token) oluşturmalısınız.'
54Two factor authentication: "İki adımlı doğrulama" 73 token_label: 'RSS belirteci (token)'
55"Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion": "İki adımlı doğrulamayı aktifleştirdiğinizde, her yeni güvenilmeyen bağlantılarda size e-posta ile bir kod alacaksınız." 74 no_token: 'Belirteç (token) yok'
56Baggy: "Baggy" 75 token_create: 'Yeni belirteç (token) oluştur'
57Material: "Material" 76 token_reset: 'Belirteci (token) sıfırla'
58English: "İngilizce" 77 rss_links: 'RSS akış bağlantıları'
59Français: "Fransızca" 78 rss_link:
60Deutsch: "Almanca" 79 unread: 'okunmayan'
61Türkçe: "Türkçe" 80 starred: 'favoriler'
81 archive: 'arşiv'
82 rss_limit: 'RSS içeriğinden talep edilecek makale limiti'
83 form_user:
84 two_factor_description: "İki adımlı doğrulamayı aktifleştirdiğinizde, her yeni güvenilmeyen bağlantılarda size e-posta ile bir kod alacaksınız."
85 name_label: 'İsim'
86 email_label: 'E-posta'
87 twoFactorAuthentication_label: 'İki adımlı doğrulama'
88 form_password:
89 old_password_label: 'Eski şifre'
90 new_password_label: 'Yeni şifre'
91 repeat_new_password_label: 'Yeni şifrenin tekrarı'
92 form_rules:
93 # if_label: 'if'
94 # then_tag_as_label: 'then tag as'
95 # delete_rule_label: 'delete'
96 rule_label: 'Kural'
97 tags_label: 'Etiketler'
98 faq:
99 title: 'S.S.S.'
100 tagging_rules_definition_title: '« etiketleme kuralları » ne anlama geliyor?'
101 # tagging_rules_definition_description: 'They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.'
102 how_to_use_them_title: 'Bunu nasıl kullanırım?'
103 # how_to_use_them_description: 'Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »'
104 variables_available_title: 'Kurallar içerisinde hangi değişken ve operatörleri kullanabilirim?'
105 variables_available_description: 'Etiket kuralı oluşturmak istediğinizde aşağıdaki değişken ve operatörleri kullanabilirsin:'
106 meaning: 'Anlamı'
107 variable_description:
108 label: 'Değişken'
109 title: 'Makalenin başlığı'
110 url: 'Makalenin bağlantısı'
111 isArchived: 'Makale arşivlendi mi? Arşivlenmedi mi?'
112 isStarred: 'Makale favorilere eklendi mi? Eklenmedi mi?'
113 content: "Makalenin içeriği"
114 language: "Makalenin dili"
115 mimetype: "Makalenin mime türü"
116 readingTime: "Makalenin dakika cinsinden tahmini okuma süresi"
117 domainName: 'Makalenin bulunduğu internet sitesinin alan adı'
118 operator_description:
119 label: 'Operatör'
120 less_than: 'Küçüktür ve eşittir…'
121 strictly_less_than: 'Küçüktür…'
122 greater_than: 'Büyüktür ve eşittir…'
123 strictly_greater_than: 'Büyüktür…'
124 equal_to: 'Eşittir…'
125 not_equal_to: 'Eşit değildir…'
126 or: 'Bir kural veya birbaşkası'
127 and: 'Bir kural ve diğeri'
128 # matches: 'Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>'
129 form_new_user:
130 username_label: 'Kullanıcı adı'
131 password_label: 'Şifre'
132 repeat_new_password_label: 'Yeni şifrenin tekrarı'
133 plain_password_label: '????'
134 email_label: 'E-posta'
62 135
63# Tagging rules 136entry:
64Rule: "Kural" 137 page_titles:
65Tags: "Etiketler" 138 # unread: 'Unread entries'
66FAQ: "S.S.S." 139 # starred: 'Starred entries'
67Variable: "Değişken" 140 # archived: 'Archived entries'
68Meaning: "Anlamı" 141 # filtered: 'Filtered entries'
69Operator: "Operatör" 142 list:
70"What does « tagging rules » mean?": "« etiketleme kuralları » ne anlama geliyor?" 143 number_on_the_page: '{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var.'
71"How do I use them?": "Bunu nasıl kullanırım?" 144 reading_time: 'tahmini okuma süresi'
72"Which variables and operators can I use to write rules?": "Kurallar içerisinde hangi değişken ve operatörleri kullanabilirim?" 145 reading_time_minutes: 'tahmini okuma süresi: %readingTime% min'
73"The following variables and operators can be used to create tagging rules:": "Etiket kuralı oluşturmak istediğinizde aşağıdaki değişken ve operatörleri kullanabilirsin:" 146 reading_time_less_one_minute: 'tahmini okuma süresi: <small class="inferieur">&lt;</small> 1 min'
74Title of the entry: "Makalenin başlığı" 147 original_article: 'orijinal'
75URL of the entry: "Makalenin bağlantısı" 148 toogle_as_read: 'Okundu/okunmadı olarak işaretle'
76The domain name of the entry: "Makalenin bulunduğu internet sitesinin alan adı" 149 toogle_as_star: 'Favorilere ekle/çıkar'
77"The entry's content": "Makalenin içeriği" 150 delete: 'Sil'
78"The entry's language": "Makalenin dili" 151 export_title: 'Dışa Aktar'
79"The entry's mime-type": "Makalenin mime türü" 152 filters:
80"The estimated entry's reading time, in minutes": "Makalenin dakika cinsinden tahmini okuma süresi" 153 title: 'Filtreler'
81"Whether the entry is archived or not": "Makale arşivlendi mi? Arşivlenmedi mi?" 154 status_label: 'Durum'
82"Whether the entry is starred or not": "Makale favorilere eklendi mi? Eklenmedi mi?" 155 archived_label: 'Arşiv'
83"Less than…": "Küçüktür ve eşittir…" 156 starred_label: 'Favori'
84"Strictly less than…": "Küçüktür…" 157 preview_picture_label: 'Resim önizlemesi varsa'
85"Greater than…": "Büyüktür ve eşittir…" 158 preview_picture_help: 'Resim önizlemesi'
86"Strictly greater than…": "Büyüktür…" 159 language_label: 'Dil'
87"Equal to…": "Eşittir…" 160 reading_time:
88"Not equal to…": "Eşit değildir…" 161 label: 'Dakika cinsinden okuma süresi'
89"One rule or another": "Bir kural veya birbaşkası" 162 from: 'başlangıç'
90"One rule and another": "Bir kural ve diğeri" 163 to: 'bitiş'
164 domain_label: 'Alan adı'
165 created_at:
166 label: 'Oluşturulma tarihi'
167 from: 'başlangıç'
168 to: 'bitiş'
169 action:
170 clear: 'Temizle'
171 filter: 'Filtrele'
172 view:
173 left_menu:
174 # back_to_top: 'Back to top'
175 back_to_homepage: 'Back'
176 set_as_read: 'Okundu olarak işaretle'
177 set_as_unread: 'Okunmadı olarak işaretle'
178 set_as_favorite: 'Favorilere ekle/çıkar'
179 view_original_article: 'Orijinal makale'
180 re_fetch_content: 'İçeriği yenile'
181 delete: 'Sil'
182 add_a_tag: 'Bir etiket ekle'
183 share_content: 'Paylaş'
184 share_email_label: 'E-posta'
185 download: 'İndir'
186 # print: 'Print'
187 problem:
188 label: 'Bir sorun mu var?'
189 description: 'Bu makalede herhangi bir yanlışlık mı var?'
190 edit_title: 'Başlığı düzenle'
191 original_article: 'orijinal'
192 # annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations'
193 new:
194 page_title: 'Yeni makaleyi kaydet'
195 placeholder: 'http://website.com'
196 form_new:
197 url_label: Url
198 edit:
199 page_title: 'Makaleyi düzenle'
200 title_label: 'Başlık'
201 url_label: 'Url'
202 is_public_label: 'Herkes tarafından erişime açık olsun mu?'
203 save_label: 'Kaydet'
91 204
92# Entries 205about:
93'estimated reading time': 'tahmini okuma süresi' 206 page_title: 'Hakkımızda'
94original: "orijinal" 207 top_menu:
95Toggle mark as read: 'Okundu/okunmadı olarak işaretle' 208 who_behind_wallabag: "wallabag'in arkasındakiler"
96Toggle favorite: 'Favorilere ekle/çıkar' 209 getting_help: 'Yardım'
97Delete: 'Sil' 210 helping: 'wallabag destek olun'
211 # contributors: 'Contributors'
212 # third_party: 'Third-party libraries'
213 who_behind_wallabag:
214 developped_by: 'Geliştiriciler'
215 website: 'i̇nternet sitesi'
216 many_contributors: 'Ve katkıda bulunanlar ♥ <a href="https://github.com/wallabag/wallabag/graphs/contributors">GitHub üzerinde</a>'
217 project_website: 'Proje internet sitesi'
218 license: 'Lisans'
219 version: 'Sürüm'
220 getting_help:
221 documentation: 'Dokümantasyon'
222 bug_reports: 'Sorun bildir'
223 support: '<a href="https://support.wallabag.org">Destek internet sitesinde</a> ya da <a href="https://github.com/wallabag/wallabag/issues">GitHub üzerinde</a>'
224 helping:
225 description: 'wallabag açık kaynak kodlu ve ücretsizdir. Bize destek ol :'
226 by_contributing: 'projemize katkıda bulunun :'
227 by_contributing_2: 'ihtiyacımız olanların listelendiği yapılacaklar listesi'
228 by_paypal: 'PayPal ile'
229 contributors:
230 # description: 'Thank you to contributors on wallabag web application'
231 third_party:
232 # description: 'Here are the list of third-party libraries used in wallabag (with their licenses):'
233 # package: 'Package'
234 license: 'Lisans'
98 235
99# Filters 236howto:
100Filters: 'Filtreler' 237 page_title: 'Yardım'
101Status: 'Durum' 238 # page_description: 'There are several ways to save an article:'
102Archived: 'Arşiv' 239 top_menu:
103Starred: 'Favori' 240 browser_addons: 'Tarayıcı eklentileri'
104Preview picture: 'Resim önizlemesi' 241 mobile_apps: 'Mobil uygulamalar'
105Has a preview picture: 'Resim önizlemesi varsa' 242 bookmarklet: 'Bookmarklet'
106Reading time in minutes: 'Dakika cinsinden okuma süresi' 243 form:
107from: 'başlangıç' 244 description: 'Yeni makale kaydet'
108to: 'bitiş' 245 browser_addons:
109website.com: 'internet-sitesi.com' 246 firefox: 'Standart Firefox Eklentisi'
110Domain name: 'Alan adı' 247 chrome: 'Chrome Eklentisi'
111Creation date: 'Oluşturulma tarihi' 248 mobile_apps:
112dd/mm/yyyy: 'dd/mm/aaaa' 249 android:
113Clear: 'Temizle' 250 # via_f_droid: 'via F-Droid'
114Filter: 'Filtrele' 251 # via_google_play: 'via Google Play'
252 # ios: 'on the iTunes Store'
253 # windows: 'on the Microsoft Store'
254 bookmarklet:
255 description: "Bu bağlantı ile yer imlerinizi sürükleyip bırakarak wallabag'e ekleyebilirsiniz:"
115 256
116# About 257quickstart:
117Who is behind wallabag: "wallabag'in arkasındakiler" 258 page_title: 'Hızlı başlangıç'
118Getting help: "Yardım" 259 intro:
119Helping wallabag: "wallabag destek olun" 260 title: 'wallabag'
120Developed by: "Geliştiriciler:" 261 paragraph_1: "wallabag kurduğunuz için teşekkür ederiz. Bu sayfada biz size eşlik edecek ve ilginizi çekecek birkaç özellik göstereceğim."
121website: "İnternet sitesi" 262 paragraph_2: 'Bizi takip edin!'
122And many others contributors ♥: "Ve katkıda bulunanlar ♥" 263 configure:
123on GitHub: "GitHub üzerinde" 264 title: 'Uygulamayı Yapılandırma'
124Project website: "Proje internet sitesi" 265 language: 'Dili ve tasarımı değiştirme'
125License: "Lisans" 266 rss: 'RSS akışını aktifleştirme'
126Version: "Sürüm" 267 # tagging_rules: 'Write rules to automatically tag your articles'
127Documentation: "Dokümantasyon" 268 admin:
128Bug reports: "Sorun bildir" 269 # title: 'Administration'
129On our support website: "Destek internet sitesinde" 270 # description: 'As an administrator, you have privileges on wallabag. You can:'
130or: "ya da" 271 # new_user: 'Create a new user'
131"wallabag is free and opensource. You can help us:": "wallabag açık kaynak kodlu ve ücretsizdir. Bize destek ol :" 272 # analytics: 'Configure analytics'
132"by contributing to the project:": "projemize katkıda bulunun :" 273 # sharing: 'Enable some parameters about article sharing'
133an issue lists all our needs: "ihtiyacımız olanların listelendiği yapılacaklar listesi" 274 # export: 'Configure export'
134via Paypal: "PayPal ile" 275 # import: 'Configure import'
276 first_steps:
277 title: 'İlk adım'
278 new_article: 'İlk makalenizi kaydedin'
279 unread_articles: 'Ve bunu sınıflandırın!'
280 migrate:
281 title: 'Varolan servislerden veri aktarma'
282 description: "Kullanmakta olduğunuz farklı bir hizmet mi var? Biz size yardımcı olacak ve verilerinizi wallabag'e aktarmanıza yardımcı olacağız."
283 pocket: "Pocket üzerindeki verilerinizi wallabag'e aktarın"
284 wallabag_v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın"
285 wallabag_v2: "wallabag v2 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın"
286 developer:
287 # title: 'Developers'
288 # create_application: 'Create your third application'
289 docs:
290 title: 'Dokümantasyon'
291 # annotate: 'Annotate your article'
292 export: 'Makalelerinizi ePUB ya da PDF formatına çevirme'
293 search_filters: 'Makaleleri görüntülemek için arama motorlarını ve filteri kullanma'
294 # fetching_errors: 'What can I do if an article encounters errors during fetching?'
295 all_docs: 'Ve daha fazlası!'
296 support:
297 title: 'Destek'
298 description: 'Eğer yardıma ihtiyacınız varsa, biz her daim senin için burada olacağız.'
299 github: 'GitHub'
300 email: 'E-posta'
301 gitter: 'Gitter'
135 302
136# Howto 303tag:
137Form: "Form" 304 page_title: 'Etiketler'
138Thanks to this form: "Yeni makale kaydet" 305 list:
139Browser addons: "Tarayıcı eklentileri" 306 number_on_the_page: '{0} Herhangi bir etiket yok.|{1} Burada bir adet etiket var.|]1,Inf[ Burada %count% adet etiket var.'
140Mobile apps: "Mobil uygulamalar"
141Bookmarklet: "Bookmarklet"
142Standard Firefox Add-On: "Standart Firefox Eklentisi"
143Chrome Extension: "Chrome Eklentisi"
144download the application: "uygulamayı indir"
145"Drag &amp; drop this link to your bookmarks bar:": "Bu bağlantı ile yer imlerinizi sürükleyip bırakarak wallabag'e ekleyebilirsiniz:"
146via F-Droid: "F-Droid"
147via Google Play: "Google Play"
148bag it!: "bag it!"
149 307
150# Flash messages 308import:
151Information updated: "Bilgiler güncellendi" 309 page_title: 'İçe Aktar'
152"Config saved. Some parameters will be considered after disconnection.": "Yapılandırma ayarları kaydedildi. Bazı yapılandırmalar tekrar giriş yaptığınızda aktif olacaktır." 310 page_description: 'wallabag içe aktarma aracına hoşgeldiniz. Lütfen içe aktarmak istediğiiz önceki servisinizi seçin.'
153RSS information updated: "RSS bilgiler güncellendi" 311 action:
154Password updated: "Şifre güncellendi" 312 import_contents: 'İçe Aktar contents'
155Entry starred: "Makale favorilere eklendi" 313 form:
156Entry unstarred: "Makale favorilerden çıkartıldı" 314 # mark_as_read_title: 'Mark all as read?'
157Entry archived: "Makale arşivlendi" 315 # mark_as_read_label: 'Mark all imported entries as read'
158Entry unarchived: "Makale arşivden çıkartıldı" 316 file_label: 'Dosya'
159Entry reloaded: "Makale içeriği yenilendi" 317 save_label: 'Dosyayı yükle'
160Entry deleted: "Makale silindi" 318 pocket:
161Entry saved: "Makale kaydedildi" 319 page_title: 'İçe Aktar > Pocket'
162Tag added: "Etiket eklendi" 320 description: "Bu araç tüm Pocket verinizi içe aktarır. Pocket içeriklerin getirilmesine izin vermez, okunabilen içerikler wallabag tarafından yeniden getirilir."
321 config_missing:
322 # description: "Pocket import isn't configured."
323 # admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.'
324 # user_message: 'Your server admin needs to define an API Key for Pocket.'
325 authorize_message: 'Pocket hesabınızda verilerinizi içe aktarabilmemiz için öncelikle aşağıdaki butona tıklayın. Daha sonra, getpocket.com üzerindeki uygulamamıza gereken izinleri verin. Hepsi bu kadar!'
326 connect_to_pocket: "Pocket'a bağlanın ve verilerinizi içe aktarın"
327 wallabag_v1:
328 page_title: 'İçe Aktar > Wallabag v1'
329 description: 'Bu araç wallabag v1 üzerindeki tüm makalelerinizi içe aktarır. Yapılandırma sayfasında, "Export your wallabag data" sekmesinden "JSON export" adımını izleyin. Bu adım size "wallabag-export-1-xxxx-xx-xx.json" isimli bir dosya verecektir.'
330 how_to: 'Aşağıdaki butona tıklayarak wallabag v1 tarafından dışa aktarılmış dosyanızı yükleyin.'
331 wallabag_v2:
332 page_title: 'İçe Aktar > Wallabag v2'
333 # description: 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'
163 334
164# Entry 335developer:
165Mark as read: 'Okundu olarak işaretle' 336 # page_title: 'Developer'
166Mark as unread: 'Okunmadı olarak işaretle' 337 # welcome_message: 'Welcome to the wallabag API'
167Favorite: 'Favorilere ekle/çıkar' 338 # documentation: 'Documentation'
168back: 'geri dön' 339 # how_to_first_app: 'How to create my first application'
169original article: 'Orijinal makale' 340 # full_documentation: 'View full API documentation'
170Add a tag: 'Bir etiket ekle' 341 # list_methods: 'List API methods'
171Share: 'Paylaş' 342 # clients:
172Download: 'İndir' 343 # title: 'Clients'
173Does this article appear wrong?: "Bu makalede herhangi bir yanlışlık mı var?" 344 # create_new: 'Create a new client'
174Problems?: 'Bir sorun mu var?' 345 # existing_clients:
175Edit title: "Başlığı düzenle" 346 # title: 'Existing clients'
176"{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.": "{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var." 347 # field_id: 'Client ID'
177"{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.": "{0} Herhangi bir etiket yok.|{1} Burada bir adet etiket var.|]1,Inf[ Burada %count% adet etiket var." 348 # field_secret: 'Client secret'
178Reload content: "İçeriği yenile" 349 # field_uris: 'Redirect URIs'
179Edit an entry: "Makaleyi düzenle" 350 # field_grant_types: 'Grant type allowed'
180Title: "Başlık" 351 # no_client: 'No client yet.'
181Is public: "Herkes tarafından erişime açık olsun mu?" 352 # remove:
353 # warn_message_1: 'You have the ability to remove this client. This action is IRREVERSIBLE !'
354 # warn_message_2: "If you remove it, every app configured with that client won't be able to auth on your wallabag."
355 # action: 'Remove this client'
356 # client:
357 # page_title: 'Developer > New client'
358 # page_description: 'You are about to create a new client. Please fill the field below for the redirect URI of your application.'
359 # form:
360 # redirect_uris_label: 'Redirect URIs'
361 # save_label: 'Create a new client'
362 # action_back: 'Back'
363 # client_parameter:
364 # page_title: 'Developer > Client parameters'
365 # page_description: 'Here are your client parameters.'
366 # field_id: 'Client ID'
367 # field_secret: 'Client secret'
368 # back: 'Back'
369 # read_howto: 'Read the howto "Create my first application"'
370 # howto:
371 # page_title: 'Developer > How to create my first application'
372 # description:
373 # paragraph_1: 'The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.'
374 # paragraph_2: 'You need a token to communicate between your 3rd application and wallabag API.'
375 # paragraph_3: 'To create this token, you need <a href="%link%">to create a new client</a>.'
376 # paragraph_4: 'Now, create your token (replace client_id, client_secret, username and password with the good values):'
377 # paragraph_5: 'The API will return a response like this:'
378 # paragraph_6: 'The access_token is useful to do a call to the API endpoint. For example:'
379 # paragraph_7: 'This call will return all the entries for your user.'
380 # paragraph_8: 'If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.'
381 # back: 'Back'
182 382
183# Import 383validator:
184Import: "İçe Aktar" 384 # password_must_match: 'The password fields must match.'
185"Import > Pocket": "İçe Aktar > Pocket" 385 # password_too_short: 'Password should by at least 8 chars long'
186"Import > Wallabag v1": "İçe Aktar > Wallabag v1" 386 # password_wrong_value: 'Wrong value for your current password'
187Welcome to wallabag importer. Please select your previous service that you want to migrate.: "wallabag içe aktarma aracına hoşgeldiniz. Lütfen içe aktarmak istediğiiz önceki servisinizi seçin." 387 # item_per_page_too_high: 'This will certainly kill the app'
188"This importer will import all your Pocket data. Pocket doesn't allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.": "Bu araç tüm Pocket verinizi içe aktarır. Pocket içeriklerin getirilmesine izin vermez, okunabilen içerikler wallabag tarafından yeniden getirilir." 388 # rss_limit_too_hight: 'This will certainly kill the app'
189"This importer will import all your wallabag v1 articles. On your config page, click on \"JSON export\" in the \"Export your wallabag data\" section. You will have a \"wallabag-export-1-xxxx-xx-xx.json\" file.": "Bu araç wallabag v1 üzerindeki tüm makalelerinizi içe aktarır. Yapılandırma sayfasında, \"Export your wallabag data\" sekmesinden \"JSON export\" adımını izleyin. Bu adım size \"wallabag-export-1-xxxx-xx-xx.json\" isimli bir dosya verecektir."
190"You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.": "Pocket hesabınızda verilerinizi içe aktarabilmemiz için öncelikle aşağıdaki butona tıklayın. Daha sonra, getpocket.com üzerindeki uygulamamıza gereken izinleri verin. Hepsi bu kadar!"
191Connect to Pocket and import data: "Pocket'a bağlanın ve verilerinizi içe aktarın"
192Please select your wallabag export and click on the below button to upload and import it.: "Aşağıdaki butona tıklayarak wallabag v1 tarafından dışa aktarılmış dosyanızı yükleyin."
193File: "Dosya"
194Upload file: "Dosyayı yükle"
195Import contents: "İçerikleri içe aktar"
196 389
197# Quickstart 390flashes:
198Welcome to wallabag!: "wallabag" 391 config:
199Quickstart: "Hızlı başlangıç" 392 notice:
200We'll accompany you to visit wallabag and show you some features which can interess you.: "wallabag kurduğunuz için teşekkür ederiz. Bu sayfada biz size eşlik edecek ve ilginizi çekecek birkaç özellik göstereceğim." 393 config_saved: 'Yapılandırma ayarları kaydedildi. Bazı yapılandırmalar tekrar giriş yaptığınızda aktif olacaktır.'
201Follow us!: "Bizi takip edin!" 394 password_updated: 'Şifre güncellendi'
202Configure the application: "Uygulamayı Yapılandırma" 395 password_not_updated_demo: "In demonstration mode, you can't change password for this user."
203Change language and design: "Dili ve tasarımı değiştirme" 396 user_updated: 'Bilgiler güncellendi'
204Enable RSS feeds: "RSS akışını aktifleştirme" 397 rss_updated: 'RSS bilgiler güncellendi'
205First steps: "İlk adım" 398 tagging_rules_updated: 'Tagging rules updated'
206Save your first article: "İlk makalenizi kaydedin" 399 tagging_rules_deleted: 'Tagging rule deleted'
207And classify it!: "Ve bunu sınıflandırın!" 400 user_added: 'User "%username%" added'
208Migrate from an existing service: "Varolan servislerden veri aktarma" 401 rss_token_updated: 'RSS token updated'
209You're using an other service? We'll help you to retrieve your data on wallabag.: "Kullanmakta olduğunuz farklı bir hizmet mi var? Biz size yardımcı olacak ve verilerinizi wallabag'e aktarmanıza yardımcı olacağız." 402 entry:
210Migrate from Pocket: "Pocket üzerindeki verilerinizi wallabag'e aktarın" 403 notice:
211Migrate from wallabag v1: "wallabag v1 üzerindeki verilerinizi wallabag'in yeni sürümüne aktarın" 404 entry_already_saved: 'Entry already saved on %date%'
212Full documentation: "Dokümantasyon" 405 entry_saved: 'Makale kaydedildi'
213Convert your articles into ePUB or PDF: "Makalelerinizi ePUB ya da PDF formatına çevirme" 406 # entry_updated: 'Entry updated'
214See how you can look for an article by using search engine and filters: "Makaleleri görüntülemek için arama motorlarını ve filteri kullanma" 407 entry_reloaded: 'Makale içeriği yenilendi'
215And so many other articles!: "Ve daha fazlası!" 408 # entry_reload_failed: 'Failed to reload entry'
216Support: "Destek" 409 entry_archived: 'Makale arşivlendi'
217Social: "Sosyal" 410 entry_unarchived: 'Makale arşivden çıkartıldı'
218If you need some help, we are here for you.: "Eğer yardıma ihtiyacınız varsa, biz her daim senin için burada olacağız." 411 entry_starred: 'Makale favorilere eklendi'
219On GitHub: "GitHub" 412 entry_unstarred: 'Makale favorilerden çıkartıldı'
220By email: "E-posta" 413 entry_deleted: 'Makale silindi'
221On Gitter: "Gitter" 414 tag:
222Export: "Dışa Aktar" 415 notice:
223"http://website": "http://internet-sitesi" 416 tag_added: 'Etiket eklendi'
224Take wallabag with you: "wallabag her an seninle" 417 import:
225about: "hakkımızda" 418 notice:
226powered by: "powered by" 419 # failed: 'Import failed, please try again.'
420 # failed_on_file: 'Error while processing import. Please verify your import file.'
421 # summary: 'Import summary: %imported% imported, %skipped% already saved.'
422 developer:
423 notice:
424 # client_created: 'New client created.'
425 # client_deleted: 'Client deleted'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml
deleted file mode 100644
index 196f1ade..00000000
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.da.yml
+++ /dev/null
@@ -1,3 +0,0 @@
1# Config screen
2The password fields must match: 'De indtastede adgangskoder skal være ens'
3Password should by at least 8 chars long: 'Adgangskoden skal være mindst 8 tegn'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.es.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.es.yml
deleted file mode 100644
index 5c0b6df3..00000000
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.es.yml
+++ /dev/null
@@ -1,3 +0,0 @@
1# Config screen
2The password fields must match: 'Las contraseñas no coinciden'
3Password should by at least 8 chars long: 'La contraseña debe tener al menos 8 carácteres'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.fa.yml
deleted file mode 100644
index fe63af76..00000000
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.fa.yml
+++ /dev/null
@@ -1,3 +0,0 @@
1# Config screen
2The password fields must match: 'رمزها باید یکی باشند'
3Password should by at least 8 chars long: 'رمز شما باید ۸ حرف یا بیشتر باشد'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.fr.yml
deleted file mode 100644
index 40513f2a..00000000
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.fr.yml
+++ /dev/null
@@ -1,3 +0,0 @@
1# Config screen
2The password fields must match: 'Les deux mots de passe doivent être les mêmes'
3Password should by at least 8 chars long: 'Le mot de passe doit contenir au moins 8 caractères'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.pl.yml
deleted file mode 100644
index f3cde461..00000000
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.pl.yml
+++ /dev/null
@@ -1,3 +0,0 @@
1# Config screen
2The password fields must match: 'Hasło w polach musi być takie same '
3Password should by at least 8 chars long: 'Hasło powinno mieć minimum 8 znaków długości'
diff --git a/src/Wallabag/CoreBundle/Resources/translations/validators.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/validators.ro.yml
deleted file mode 100644
index d6d4dfcc..00000000
--- a/src/Wallabag/CoreBundle/Resources/translations/validators.ro.yml
+++ /dev/null
@@ -1,3 +0,0 @@
1# Config screen
2The password fields must match: 'Câmpurile destinate parolelor trebuie să se potrivească'
3Password should by at least 8 chars long: 'Parola ar trebui să conțină cel puțin 8 caractere'
diff --git a/src/Wallabag/CoreBundle/Resources/views/base.html.twig b/src/Wallabag/CoreBundle/Resources/views/base.html.twig
index dacdb9ca..f024b633 100644
--- a/src/Wallabag/CoreBundle/Resources/views/base.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/base.html.twig
@@ -70,10 +70,6 @@
70 70
71 {% block footer %}{% endblock %} 71 {% block footer %}{% endblock %}
72 72
73 <div id="warning_message">
74 You're trying wallabag v2, which is in beta version. If you find a bug, please have a look to <a href="https://github.com/wallabag/wallabag/issues">our issues list</a> and <a href="https://github.com/wallabag/wallabag/issues/new">open a new one if necessary</a>.
75 </div>
76
77 {% if craue_setting('piwik_enabled') %} 73 {% if craue_setting('piwik_enabled') %}
78 {{ piwik(craue_setting('piwik_host'), craue_setting('piwik_site_id')) }} 74 {{ piwik(craue_setting('piwik_host'), craue_setting('piwik_site_id')) }}
79 {% endif %} 75 {% endif %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
index 54faa788..0798962c 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Config/index.html.twig
@@ -1,9 +1,9 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Config{% endtrans %}{% endblock %} 3{% block title %}{{ 'config.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 <h2>{% trans %}Wallabag configuration{% endtrans %}</h2> 6 <h2>{{ 'config.tab_menu.settings'|trans }}</h2>
7 7
8 {{ form_start(form.config) }} 8 {{ form_start(form.config) }}
9 {{ form_errors(form.config) }} 9 {{ form_errors(form.config) }}
@@ -29,7 +29,10 @@
29 {{ form_label(form.config.reading_speed) }} 29 {{ form_label(form.config.reading_speed) }}
30 {{ form_errors(form.config.reading_speed) }} 30 {{ form_errors(form.config.reading_speed) }}
31 {{ form_widget(form.config.reading_speed) }} 31 {{ form_widget(form.config.reading_speed) }}
32 <p>{% trans %}You can use online tools to estimate your reading speed{% endtrans %} (<a href="http://www.myreadspeed.com/calculate/">{% trans %}like this one{%endtrans%}</a>).</p> 32 <p>
33 {{ 'config.form_settings.reading_speed.help_message'|trans }}
34 <a href="http://www.myreadspeed.com/calculate/">myreadspeed</a>
35 </p>
33 </div> 36 </div>
34 </fieldset> 37 </fieldset>
35 38
@@ -44,13 +47,13 @@
44 {{ form_rest(form.config) }} 47 {{ form_rest(form.config) }}
45 </form> 48 </form>
46 49
47 <h2>{% trans %}RSS configuration{% endtrans %}</h2> 50 <h2>{{ 'config.tab_menu.rss'|trans }}</h2>
48 51
49 {{ form_start(form.rss) }} 52 {{ form_start(form.rss) }}
50 {{ form_errors(form.rss) }} 53 {{ form_errors(form.rss) }}
51 54
52 <div class="row"> 55 <div class="row">
53 {% trans %}RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader.{% endtrans %} 56 {{ 'config.form_rss.description'|trans }}
54 </div> 57 </div>
55 58
56 <fieldset class="w500p inline"> 59 <fieldset class="w500p inline">
@@ -59,27 +62,31 @@
59 {% if rss.token %} 62 {% if rss.token %}
60 {{ rss.token }} 63 {{ rss.token }}
61 {% else %} 64 {% else %}
62 <em>No token</em> 65 <em>{{ 'config.form_rss.no_token'|trans }}</em>
63 {% endif %} 66 {% endif %}
64 67
65 <a href="{{ path('generate_token') }}">Regenerate ?</a> 68 <a href="{{ path('generate_token') }}">
69 {% if rss.token %}
70 {{ 'config.form_rss.token_reset'|trans }}
71 {% else %}
72 {{ 'config.form_rss.token_create'|trans }}
73 {% endif %}
74 </a>
66 </div> 75 </div>
67 </fieldset> 76 </fieldset>
68 77
78 {% if rss.token %}
69 <fieldset class="w500p inline"> 79 <fieldset class="w500p inline">
70 <div class="row"> 80 <div class="row">
71 <label>Rss links:</label> 81 <label>{{ 'config.form_rss.rss_links'|trans }}</label>
72 {% if rss.token %} 82 <ul>
73 <ul> 83 <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">unread</a></li>
74 <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">unread</a></li> 84 <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">fav</a></li>
75 <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">fav</a></li> 85 <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">archives</a></li>
76 <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">archives</a></li> 86 </ul>
77 </ul>
78 {% else %}
79 <strong>You need to generate a token first.</strong>
80 {% endif %}
81 </div> 87 </div>
82 </fieldset> 88 </fieldset>
89 {% endif %}
83 90
84 <fieldset class="w500p inline"> 91 <fieldset class="w500p inline">
85 <div class="row"> 92 <div class="row">
@@ -92,7 +99,7 @@
92 {{ form_rest(form.rss) }} 99 {{ form_rest(form.rss) }}
93 </form> 100 </form>
94 101
95 <h2>{% trans %}User information{% endtrans %}</h2> 102 <h2>{{ 'config.tab_menu.user_info'|trans }}</h2>
96 103
97 {{ form_start(form.user) }} 104 {{ form_start(form.user) }}
98 {{ form_errors(form.user) }} 105 {{ form_errors(form.user) }}
@@ -115,7 +122,7 @@
115 122
116 {% if twofactor_auth %} 123 {% if twofactor_auth %}
117 <div class="row"> 124 <div class="row">
118 {% trans %}Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion{% endtrans %} 125 {{ 'config.form_user.two_factor_description'|trans }}
119 </div> 126 </div>
120 127
121 <fieldset class="w500p inline"> 128 <fieldset class="w500p inline">
@@ -130,7 +137,7 @@
130 {{ form_rest(form.user) }} 137 {{ form_rest(form.user) }}
131 </form> 138 </form>
132 139
133 <h2>{% trans %}Change your password{% endtrans %}</h2> 140 <h2>{{ 'config.tab_menu.password'|trans }}</h2>
134 141
135 {{ form_start(form.pwd) }} 142 {{ form_start(form.pwd) }}
136 {{ form_errors(form.pwd) }} 143 {{ form_errors(form.pwd) }}
@@ -162,18 +169,21 @@
162 {{ form_rest(form.pwd) }} 169 {{ form_rest(form.pwd) }}
163 </form> 170 </form>
164 171
165 <h2>{% trans %}Tagging rules{% endtrans %}</h2> 172 <h2>{{ 'config.tab_menu.rules'|trans }}</h2>
166 173
167 <ul> 174 <ul>
168 {% for tagging_rule in app.user.config.taggingRules %} 175 {% for tagging_rule in app.user.config.taggingRules %}
169 <li> 176 <li>
170 if « {{ tagging_rule.rule }} » then tag as « {{ tagging_rule.tags|join(', ') }} » 177 {{ 'config.form_rules.if_label'|trans }}
171 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{% trans %}Delete{% endtrans %}" class="tool delete icon-trash icon"></a> 178 « {{ tagging_rule.rule }} »
179 {{ 'config.form_rules.then_tag_as_label'|trans }}
180 « {{ tagging_rule.tags|join(', ') }} »
181 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}" class="tool delete icon-trash icon"></a>
172 </li> 182 </li>
173 {% endfor %} 183 {% endfor %}
174 </ul> 184 </ul>
175 185
176 {{ form_start(form.new_tagging_rule) }} 186 {{ form_start(form.new_tagging_rule) }}
177 {{ form_errors(form.new_tagging_rule) }} 187 {{ form_errors(form.new_tagging_rule) }}
178 188
179 <fieldset class="w500p inline"> 189 <fieldset class="w500p inline">
@@ -195,8 +205,93 @@
195 {{ form_rest(form.new_tagging_rule) }} 205 {{ form_rest(form.new_tagging_rule) }}
196 </form> 206 </form>
197 207
208 <div class="row">
209 <div class="input-field col s12">
210 <h3>{{ 'config.form_rules.faq.title'|trans }}</h3>
211
212 <h4>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h4>
213 <p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p>
214
215 <h4>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h4>
216 <p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p>
217
218 <h4>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h4>
219 <p class="help">
220 {{ 'config.form_rules.faq.variables_available_description'|trans }}
221 </p>
222
223 <table class="bordered">
224 <thead>
225 <tr>
226 <th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
227 <th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
228 <th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
229 <th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
230 </tr>
231 </thead>
232
233 <tbody>
234 <tr>
235 <td>title</td>
236 <td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
237 <td>&lt;=</td>
238 <td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
239 </tr>
240 <tr>
241 <td>url</td>
242 <td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
243 <td>&lt;</td>
244 <td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
245 </tr>
246 <tr>
247 <td>isArchived</td>
248 <td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
249 <td>=&gt;</td>
250 <td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
251 </tr>
252 <tr>
253 <td>isStarred</td>
254 <td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
255 <td>&gt;</td>
256 <td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
257 </tr>
258 <tr>
259 <td>content</td>
260 <td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
261 <td>=</td>
262 <td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
263 </tr>
264 <tr>
265 <td>language</td>
266 <td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
267 <td>!=</td>
268 <td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
269 </tr>
270 <tr>
271 <td>mimetype</td>
272 <td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
273 <td>OR</td>
274 <td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
275 </tr>
276 <tr>
277 <td>readingTime</td>
278 <td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
279 <td>AND</td>
280 <td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
281 </tr>
282 <tr>
283 <td>domainName</td>
284 <td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
285 <td>matches</td>
286 <td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
287 </tr>
288 </tbody>
289 </table>
290 </div>
291 </div>
292
198 {% if is_granted('ROLE_SUPER_ADMIN') %} 293 {% if is_granted('ROLE_SUPER_ADMIN') %}
199 <h2>{% trans %}Add a user{% endtrans %}</h2> 294 <h2>{{ 'config.tab_menu.new_user'|trans }}</h2>
200 295
201 {{ form_start(form.new_user) }} 296 {{ form_start(form.new_user) }}
202 {{ form_errors(form.new_user) }} 297 {{ form_errors(form.new_user) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig
index c9ce6d08..78a9dc04 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}New client{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.client.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6<div class="row"> 6<div class="row">
@@ -8,7 +8,7 @@
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 9
10 <div class="row"> 10 <div class="row">
11 <p>{% trans %}You are about to create a new client. Please fill the field below for the redirect URI of your application.{% endtrans %}</p> 11 <p>{{ 'developer.client.page_description'|trans }}</p>
12 {{ form_start(form) }} 12 {{ form_start(form) }}
13 {{ form_errors(form) }} 13 {{ form_errors(form) }}
14 14
@@ -18,7 +18,7 @@
18 {{ form_widget(form.redirect_uris) }} 18 {{ form_widget(form.redirect_uris) }}
19 </div> 19 </div>
20 20
21 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> 21 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client.action_back'|trans }}</a>
22 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} 22 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
23 23
24 {{ form_rest(form) }} 24 {{ form_rest(form) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig
index a214dfd0..b615fa3b 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/client_parameters.html.twig
@@ -1,20 +1,20 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Client parameters{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.client_parameter.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6<div class="row"> 6<div class="row">
7 <div class="col s12"> 7 <div class="col s12">
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 <div class="row"> 9 <div class="row">
10 <p>{% trans %}Here are your client parameters.{% endtrans %}</p> 10 <p>{{ 'developer.client_parameter.page_description'|trans }}</p>
11 <ul> 11 <ul>
12 <li>{% trans %}Client ID{% endtrans %}: <strong><pre>{{ client_id }}</pre></strong></li> 12 <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li>
13 <li>{% trans %}Client secret{% endtrans %}: <strong><pre>{{ client_secret }}</pre></strong></li> 13 <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li>
14 </ul> 14 </ul>
15 15
16 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> 16 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client_parameter.back'|trans }}</a>
17 <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{% trans %}Read the howto "Create my first application"{% endtrans %}</a> 17 <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{{ 'developer.client_parameter.read_howto'|trans }}</a>
18 </div> 18 </div>
19 </div> 19 </div>
20 </div> 20 </div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig
index 382e6311..acbc2c88 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/howto_app.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}How to create my first application{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.howto.page_title'|trans }}{% endblock %}
4 4
5{% block css %} 5{% block css %}
6 {{ parent() }} 6 {{ parent() }}
@@ -13,10 +13,10 @@
13 <div class="card-panel settings"> 13 <div class="card-panel settings">
14 14
15 <div class="row"> 15 <div class="row">
16 <p>{% trans %}The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.{% endtrans %}</p> 16 <p>{{ 'developer.howto.description.paragraph_1'|trans|raw }}</p>
17 <p>{% trans %}You need a token to communicate between your 3rd application and wallabag API.{% endtrans %}</p> 17 <p>{{ 'developer.howto.description.paragraph_2'|trans }}</p>
18 <p>{% trans with {'%link%': path('developer_create_client')} %}To create this token, you need <a href="%link%">to create a new client</a>.{% endtrans %}</p> 18 <p>{{ 'developer.howto.description.paragraph_3'|trans({'%link%': path('developer_create_client')})|raw }}</p>
19 <p>{% trans %}Now, create your token (replace client_id, client_secret, username and password with the good values):{% endtrans %}</p> 19 <p>{{ 'developer.howto.description.paragraph_4'|trans }}</p>
20 <p> 20 <p>
21 <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \ 21 <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \
22 grant_type=password \ 22 grant_type=password \
@@ -25,7 +25,7 @@
25 username=yourUsername \ 25 username=yourUsername \
26 password=yourPassw0rd</code></pre> 26 password=yourPassw0rd</code></pre>
27 </p> 27 </p>
28 <p>{% trans %}The API will return a response like this:{% endtrans %}</p> 28 <p>{{ 'developer.howto.description.paragraph_5'|trans }}</p>
29 <p> 29 <p>
30 <pre><code class="language-bash">HTTP/1.1 200 OK 30 <pre><code class="language-bash">HTTP/1.1 200 OK
31Cache-Control: no-store, private 31Cache-Control: no-store, private
@@ -45,14 +45,14 @@ X-Powered-By: PHP/5.5.9-1ubuntu4.13
45 "token_type": "bearer" 45 "token_type": "bearer"
46}</code></pre> 46}</code></pre>
47 </p> 47 </p>
48 <p>{% trans %}The access_token is useful to do a call to the API endpoint. For example:{% endtrans %}</p> 48 <p>{{ 'developer.howto.description.paragraph_6'|trans }}</p>
49 <p> 49 <p>
50 <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \ 50 <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \
51 "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre> 51 "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre>
52 </p> 52 </p>
53 <p>{% trans %}This call will return all the entries for your user.{% endtrans %}</p> 53 <p>{{ 'developer.howto.description.paragraph_7'|trans }}</p>
54 <p>{% trans with {'%link%': path('nelmio_api_doc_index')} %}If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.{% endtrans %}</p> 54 <p>{{ 'developer.howto.description.paragraph_8'|trans({'%link%': path('nelmio_api_doc_index')})|raw }}</p>
55 <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a></p> 55 <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.howto.back'|trans }}</a></p>
56 </div> 56 </div>
57 57
58 </div> 58 </div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig
index 2e7dbcab..7ff64ca6 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Developer/index.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Developer{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6<div class="row"> 6<div class="row">
@@ -8,21 +8,22 @@
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 9
10 <div class="row"> 10 <div class="row">
11 <h3>{% trans %}Welcome to the wallabag API{% endtrans %}</h3> 11 <h3>{{ 'developer.welcome_message'|trans }}</h3>
12 12
13 <h4>{% trans %}Documentation{% endtrans %}</h4> 13 <h4>{{ 'developer.documentation'|trans }}</h4>
14 14
15 <ul> 15 <ul>
16 <li><a href="{{ path('developer_howto_firstapp') }}">{% trans %}How to create my first application{% endtrans %}</a></li> 16 <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
17 <li><a href="{{ path('nelmio_api_doc_index') }}">{% trans %}View full API documentation{% endtrans %}</a></li> 17 <li><a href="http://doc.wallabag.org/en/v2-documentation-api/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
18 <li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
18 </ul> 19 </ul>
19 20
20 <h4>{% trans %}Clients{% endtrans %}</h4> 21 <h4>{{ 'developer.clients.title'|trans }}</h4>
21 <ul> 22 <ul>
22 <li><a href="{{ path('developer_create_client') }}">{% trans %}Create a new client{% endtrans %}</a></li> 23 <li><a href="{{ path('developer_create_client') }}">{{ 'developer.clients.create_new'|trans }}</a></li>
23 </ul> 24 </ul>
24 25
25 <h4>{% trans %}Existing clients{% endtrans %}</h4> 26 <h4>{{ 'developer.existing_clients.title'|trans }}</h4>
26 {% if clients %} 27 {% if clients %}
27 <ul class="collapsible" data-collapsible="expandable"> 28 <ul class="collapsible" data-collapsible="expandable">
28 {% for client in clients %} 29 {% for client in clients %}
@@ -31,33 +32,33 @@
31 <div class="collapsible-body"> 32 <div class="collapsible-body">
32 <table class="striped"> 33 <table class="striped">
33 <tr> 34 <tr>
34 <td>{% trans %}Client ID{% endtrans %}</td> 35 <td>{{ 'developer.existing_clients.field_id'|trans }}</td>
35 <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td> 36 <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td>
36 </tr> 37 </tr>
37 <tr> 38 <tr>
38 <td>{% trans %}Client secret{% endtrans %}</td> 39 <td>{{ 'developer.existing_clients.field_secret'|trans }}</td>
39 <td><strong><code>{{ client.secret }}</code></strong></td> 40 <td><strong><code>{{ client.secret }}</code></strong></td>
40 </tr> 41 </tr>
41 <tr> 42 <tr>
42 <td>{% trans %}Redirect URIs{% endtrans %}</td> 43 <td>{{ 'developer.existing_clients.field_uris'|trans }}</td>
43 <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td> 44 <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td>
44 </tr> 45 </tr>
45 <tr> 46 <tr>
46 <td>{% trans %}Grant type allowed{% endtrans %}</td> 47 <td>{{ 'developer.existing_clients.field_grant_types'|trans }}</td>
47 <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td> 48 <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td>
48 </tr> 49 </tr>
49 </table> 50 </table>
50 <p> 51 <p>
51 {% trans %}You have the ability to remove this client. This action is IRREVERSIBLE !{% endtrans %}<br/> 52 {{ 'developer.remove.warn_message_1'|trans }}<br/>
52 {% trans %}If you remove it, every app configured with that client won't be able to auth on your wallabag.{% endtrans %}<br/> 53 {{ 'developer.remove.warn_message_2'|trans }}<br/>
53 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{% trans %}Remove this client{% endtrans %}</a> 54 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans }}</a>
54 </p> 55 </p>
55 </div> 56 </div>
56 </li> 57 </li>
57 {% endfor %} 58 {% endfor %}
58 </ul> 59 </ul>
59 {% else %} 60 {% else %}
60 {% trans %}No client yet.{% endtrans %} 61 {{ 'developer.existing_clients.no_client'|trans }}
61 {% endif %} 62 {% endif %}
62 </div> 63 </div>
63 64
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig
index 0d4d5ad2..e974fc69 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/edit.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Edit an entry{% endtrans %}{% endblock %} 3{% block title %}{{ 'entry.edit.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 {{ form(form) }} 6 {{ form(form) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
index 7271bdaa..22f456da 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.html.twig
@@ -1,13 +1,13 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title "Unread" %} 3{% block title %}{{ 'entry.page_titles.unread'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 {% block pager %} 6 {% block pager %}
7 <div class="results"> 7 <div class="results">
8 <div class="nb-results">{{ entries.count }} {% trans %}entries{% endtrans %}</div> 8 <div class="nb-results">{{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}</div>
9 <div class="pagination"> 9 <div class="pagination">
10 <a href="#" id="filter">{% trans %}Filter{% endtrans %}</a> 10 <a href="#" id="filter">{{ 'entry.filters.title'|trans }}</a>
11 {% if entries is not empty %} 11 {% if entries is not empty %}
12 12
13 {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %} 13 {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %}
@@ -20,68 +20,62 @@
20 </div> 20 </div>
21 {% endblock %} 21 {% endblock %}
22 22
23 {% if entries is empty %} 23 {% for entry in entries %}
24 <div class="messages warning"><p>{% trans %}No articles found.{% endtrans %}</p></div> 24 <div id="entry-{{ entry.id|e }}" class="entry">
25 {% else %} 25 <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2>
26 {% for entry in entries %} 26
27 <div id="entry-{{ entry.id|e }}" class="entry"> 27 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
28 <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2> 28 <div class="estimatedTime">
29 {% if entry.readingTime > 0 %} 29 <span class="tool reading-time">
30 <div class="estimatedTime"> 30 {% if readingTime > 0 %}
31 <span class="tool reading-time"> 31 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}
32 {% trans with {'%readingTime%': entry.readingTime } %}estimated reading time: %readingTime% min{% endtrans %} 32 {% else %}
33 </span> 33 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
34 </div> 34 {% endif %}
35 {% else %} 35 </span>
36 <div class="estimatedTime">
37 <span class="tool reading-time">
38 {% trans with {'%inferior%': '<small class="inferieur">&lt;</small>'} %}estimated reading time: %inferior% 1 min{% endtrans %}
39 </span>
40 </div>
41 {% endif %}
42
43 <ul class="tools links">
44 <li><a title="{% trans %}Toggle mark as read{% endtrans %}" class="tool icon-check icon {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% trans %}Toggle mark as read{% endtrans %}</span></a></li>
45 <li><a title="{% trans %}toggle favorite{% endtrans %}" class="tool icon-star icon {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{% trans %}toggle favorite{% endtrans %}</span></a></li>
46 <li><a title="{% trans %}delete{% endtrans %}" class="tool delete icon-trash icon" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{% trans %}delete{% endtrans %}</span></a></li>
47 <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %} : {{ entry.title|e }}" class="tool link icon-link icon"><span>{{ entry.domainName|removeWww }}</span></a></li>
48 </ul>
49 {% if entry.previewPicture is null %}
50 <p>{{ entry.content|striptags|slice(0, 300) }}&hellip;</p>
51 {% else %}
52 <img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" />
53 {% endif %}
54 </div> 36 </div>
55 {% endfor %} 37
56 {% endif %} 38 <ul class="tools links">
39 <li><a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool icon-check icon {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.toogle_as_read'|trans }}</span></a></li>
40 <li><a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool icon-star icon {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.toogle_as_star'|trans }}</span></a></li>
41 <li><a title="{{ 'entry.list.delete'|trans }}" class="tool delete icon-trash icon" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.list.delete'|trans }}</span></a></li>
42 <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon-link icon"><span>{{ entry.domainName|removeWww }}</span></a></li>
43 </ul>
44 {% if entry.previewPicture is null %}
45 <p>{{ entry.content|striptags|slice(0, 300) }}&hellip;</p>
46 {% else %}
47 <img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" />
48 {% endif %}
49 </div>
50 {% endfor %}
57 51
58 <aside id="filter-form" class=""> 52 <aside id="filter-form" class="">
59 <form method="get" action="{{ path('all') }}"> 53 <form method="get" action="{{ path('all') }}">
60 <h2>{% trans %}Filters{% endtrans %}</h2> 54 <h2>{{ 'entry.filters.title'|trans }}</h2>
61 <a href="javascript: void(null);" id="filter-form-close" class="close-button--popup close-button">&times;</a> 55 <a href="javascript: void(null);" id="filter-form-close" class="close-button--popup close-button">&times;</a>
62 56
63 <div id="filter-status" class="filter-group"> 57 <div id="filter-status" class="filter-group">
64 <div class=""> 58 <div class="">
65 <label>{% trans %}Status{% endtrans %}</label> 59 <label>{{ 'entry.filters.status_label'|trans }}</label>
66 </div> 60 </div>
67 <div class="input-field"> 61 <div class="input-field">
68 {{ form_widget(form.isArchived) }} 62 {{ form_widget(form.isArchived) }}
69 <label for="entry_filter_isArchived">{% trans %}Archived{% endtrans %}</label> 63 {{ form_label(form.isArchived) }}
70 </div> 64 </div>
71 65
72 <div class="input-field"> 66 <div class="input-field">
73 {{ form_widget(form.isStarred) }} 67 {{ form_widget(form.isStarred) }}
74 <label for="entry_filter_isStarred">{% trans %}Starred{% endtrans %}</label> 68 {{ form_label(form.isStarred) }}
75 </div> 69 </div>
76 70
77 <div class="input-field"> 71 <div class="input-field">
78 {{ form_widget(form.previewPicture) }} 72 {{ form_widget(form.previewPicture) }}
79 <label for="entry_filter_previewPicture">{% trans %}Has a preview picture{% endtrans %}</label> 73 {{ form_label(form.previewPicture) }}
80 </div> 74 </div>
81 </div> 75 </div>
82 76
83 <div id="filter-language" class="filter-group"> 77 <div id="filter-language" class="filter-group">
84 <label for="entry_filter_language">{% trans %}Language{% endtrans %}</label> 78 {{ form_label(form.language) }}
85 <div class="input-field "> 79 <div class="input-field ">
86 {{ form_widget(form.language) }} 80 {{ form_widget(form.language) }}
87 </div> 81 </div>
@@ -89,20 +83,20 @@
89 83
90 <div id="filter-reading-time" class="filter-group"> 84 <div id="filter-reading-time" class="filter-group">
91 <div class=""> 85 <div class="">
92 <label>{% trans %}Reading time in minutes{% endtrans %}</label> 86 {{ form_label(form.readingTime) }}
93 </div> 87 </div>
94 <div class="input-field "> 88 <div class="input-field ">
95 <label for="entry_filter_readingTime_left_number">{% trans %}from{% endtrans %}</label> 89 <label for="entry_filter_readingTime_left_number">{{ 'entry.filters.reading_time.from'|trans }}</label>
96 {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }} 90 {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }}
97 </div> 91 </div>
98 <div class="input-field "> 92 <div class="input-field ">
99 <label for="entry_filter_readingTime_right_number">{% trans %}to{% endtrans %}</label> 93 <label for="entry_filter_readingTime_right_number">{{ 'entry.filters.reading_time.to'|trans }}</label>
100 {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }} 94 {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }}
101 </div> 95 </div>
102 </div> 96 </div>
103 97
104 <div id="filter-domain-name" class="filter-group"> 98 <div id="filter-domain-name" class="filter-group">
105 <label for="entry_filter_domainName">{% trans %}Domain name{% endtrans %}</label> 99 {{ form_label(form.domainName) }}
106 <div class="input-field "> 100 <div class="input-field ">
107 {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com'} }) }} 101 {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com'} }) }}
108 </div> 102 </div>
@@ -110,26 +104,25 @@
110 104
111 <div id="filter-creation-date" class="filter-group"> 105 <div id="filter-creation-date" class="filter-group">
112 <div class=""> 106 <div class="">
113 <label>{% trans %}Creation date{% endtrans %}</label> 107 {{ form_label(form.createdAt) }}
114 </div> 108 </div>
115 <div class="input-field "> 109 <div class="input-field ">
116 <label for="entry_filter_createdAt_left_date" class="active">{% trans %}from{% endtrans %}</label> 110 <label for="entry_filter_createdAt_left_date" class="active">{{ 'entry.filters.created_at.from'|trans }}</label>
117 {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }} 111 {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }}
118 </div> 112 </div>
119 <div class="input-field "> 113 <div class="input-field ">
120 <label for="entry_filter_createdAt_right_date" class="active">{% trans %}to{% endtrans %}</label> 114 <label for="entry_filter_createdAt_right_date" class="active">{{ 'entry.filters.created_at.to'|trans }}</label>
121 {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }} 115 {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }}
122 </div> 116 </div>
123 </div> 117 </div>
124 <div id="filter-buttons" class="filter-group">
125 118
119 <div id="filter-buttons" class="filter-group">
126 <div class=""> 120 <div class="">
127 <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{% trans %}Clear{% endtrans %}</a> 121 <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{{ 'entry.filters.action.clear'|trans }}</a>
128 </div> 122 </div>
129 123
130 <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{% trans %}Filters{% endtrans %}</button> 124 <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{{ 'entry.filters.action.filter'|trans }}</button>
131 125 </div>
132 </div>
133 </form> 126 </form>
134 </aside> 127 </aside>
135 128
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig
index a39a8dc3..98f7194c 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entries.xml.twig
@@ -18,9 +18,9 @@
18 <description> 18 <description>
19 <![CDATA[ 19 <![CDATA[
20 {%- if entry.readingTime > 0 -%} 20 {%- if entry.readingTime > 0 -%}
21 {% trans %}estimated reading time :{% endtrans %} {{ entry.readingTime }} min 21 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }}
22 {%- else -%} 22 {%- else -%}
23 {% trans %}estimated reading time :{% endtrans %} &lt; 1 min 23 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
24 {%- endif %} 24 {%- endif %}
25 25
26 {{ entry.content|raw -}} 26 {{ entry.content|raw -}}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
index 9323e787..3cda3949 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/entry.html.twig
@@ -5,32 +5,32 @@
5{% block content %} 5{% block content %}
6 <div id="article"> 6 <div id="article">
7 <header class="mbm"> 7 <header class="mbm">
8 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{% trans %}Edit title{% endtrans %}">✎</a></h1> 8 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
9 </header> 9 </header>
10 10
11 <div id="article_toolbar"> 11 <div id="article_toolbar">
12 <ul class="links"> 12 <ul class="links">
13 <li class="topPosF"><a href="#top" title="{% trans %}Back to top{% endtrans %}" class="tool top icon icon-arrow-up-thick"><span>{% trans %}Back to top{% endtrans %}</span></a></li> 13 <li class="topPosF"><a href="#top" title="{{ 'entry.view.left_menu.back_to_top'|trans }}" class="tool top icon icon-arrow-up-thick"><span>{{ 'entry.view.left_menu.set_as_read'|trans }}</span></a></li>
14 <li><a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li> 14 <li><a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link icon icon-link"><span>{{ entry.domainName|removeWww }}</span></a></li>
15 <li><a title="{% trans %}Re-fetch content{% endtrans %}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{% trans %}Re-fetch content{% endtrans %}</span></a></li> 15 <li><a title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" class="tool icon icon-reload" href="{{ path('reload_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>
16 <li><a title="{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}</span></a></li> 16 <li><a title="{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}" class="tool icon icon-check {% if entry.isArchived == 0 %}archive-off{% else %}archive{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"><span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span></a></li>
17 <li><a title="{% trans %}Favorite{% endtrans %}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{% trans %}Toggle favorite{% endtrans %}</span></a></li> 17 <li><a title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" class="tool icon icon-star {% if entry.isStarred == 0 %}fav-off{% else %}fav{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span></a></li>
18 <li><a id="nav-btn-add-tag" title="{% trans %}Add a tag{% endtrans %}"><span>{% trans %}Tag{% endtrans %}</span></a></li> 18 <li><a id="nav-btn-add-tag" title="{{ 'entry.view.left_menu.add_a_tag'|trans }}"><span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span></a></li>
19 <li><a title="{% trans %}Delete{% endtrans %}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{% trans %}Delete{% endtrans %}</span></a></li> 19 <li><a title="{{ 'entry.view.left_menu.delete'|trans }}" class="tool delete icon icon-trash" href="{{ path('delete_entry', { 'id': entry.id }) }}"><span>{{ 'entry.view.left_menu.delete'|trans }}</span></a></li>
20 {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="{% trans %}Tweet{% endtrans %}"><span>{% trans %}Tweet{% endtrans %}</span></a></li>{% endif %} 20 {% if craue_setting('share_twitter') %}<li><a href="https://twitter.com/home?status={{entry.title|url_encode}}%20{{ entry.url|url_encode }}%20via%20@wallabagapp" target="_blank" class="tool twitter icon icon-twitter" title="Tweet"><span>Tweet</span></a></li>{% endif %}
21 {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"><span>{% trans %}Email{% endtrans %}</span></a></li>{% endif %} 21 {% if craue_setting('share_mail') %}<li><a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="Email"><span>Email</span></a></li>{% endif %}
22 {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="{% trans %}shaarli{% endtrans %}"><span>{% trans %}shaarli{% endtrans %}</span></a></li>{% endif %} 22 {% if craue_setting('share_shaarli') %}<li><a href="{{ craue_setting('shaarli_url') }}/index.php?post={{ entry.url|url_encode }}&amp;title={{ entry.title|url_encode }}" target="_blank" class="tool shaarli" title="shaarli"><span>shaarli</span></a></li>{% endif %}
23 {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="{% trans %}diaspora{% endtrans %}"><span>{% trans %}diaspora{% endtrans %}</span></a></li>{% endif %} 23 {% if craue_setting('share_diaspora') %}<li><a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora"><span>diaspora</span></a></li>{% endif %}
24 {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="{% trans %}carrot{% endtrans %}"><span>Carrot</span></a></li>{% endif %} 24 {% if craue_setting('carrot') %}<li><a href="https://secure.carrot.org/GiveAndGetBack.do?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}" class="tool carrot icon-image icon-image--carrot" target="_blank" title="carrot"><span>Carrot</span></a></li>{% endif %}
25 {% if craue_setting('show_printlink') %}<li><a title="{% trans %}Print{% endtrans %}" class="tool icon icon-print" href="javascript: window.print();"><span>{% trans %}Print{% endtrans %}</span></a></li>{% endif %} 25 {% if craue_setting('show_printlink') %}<li><a title="{{ 'entry.view.left_menu.print'|trans }}" class="tool icon icon-print" href="javascript: window.print();"><span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span></a></li>{% endif %}
26 {% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %} 26 {% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
27 {% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %} 27 {% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
28 {% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %} 28 {% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}
29 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans %}Does this article appear wrong?{% endtrans %}" class="tool bad-display icon icon-delete"><span>{% trans %}Does this article appear wrong?{% endtrans %}</span></a></li> 29 <li><a href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.label'|trans }}" class="tool bad-display icon icon-delete"><span>{{ 'entry.view.left_menu.problem.label'|trans }}</span></a></li>
30 </ul> 30 </ul>
31 </div> 31 </div>
32 {% set nbAnnotations = entry.annotations | length %} 32 {% set nbAnnotations = entry.annotations | length %}
33 <span class="tool link mdi-communication-comment"> {% transchoice nbAnnotations %}{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations{% endtranschoice %}</span> 33 <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
34 <aside class="tags"> 34 <aside class="tags">
35 {% for tag in entry.tags %} 35 {% for tag in entry.tags %}
36 <span class="mdi-action-label-outline">{{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i>✘</i></a> 36 <span class="mdi-action-label-outline">{{ tag.label }}</span> <a href="{{ path('remove_tag', { 'entry': entry.id, 'tag': tag.id }) }}"><i>✘</i></a>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig
index 95ed0785..03768a3d 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Save new entry{% endtrans %}{% endblock %} 3{% block title %}{{ 'entry.new.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} 6 {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig
index fa0a9f53..8c129068 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Entry/new_form.html.twig
@@ -8,7 +8,7 @@
8 {% endif %} 8 {% endif %}
9 9
10 {{ form_label(form.url) }} 10 {{ form_label(form.url) }}
11 {{ form_widget(form.url) }} 11 {{ form_widget(form.url, { 'attr': {'autocomplete': 'off', 'placeholder': 'entry.new.placeholder'} }) }}
12 12
13 <div class="hidden">{{ form_rest(form) }}</div> 13 {{ form_rest(form) }}
14</form> 14</form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig
index fdd12cf7..5687e48c 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/about.html.twig
@@ -1,57 +1,56 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}About{% endtrans %}{% endblock %} 3{% block title %}{{ 'about.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 <h2>{% trans %}Who is behind wallabag{% endtrans %}</h2> 6 <h2>{{ 'about.top_menu.who_behind_wallabag'|trans }}</h2>
7 7
8 <dl> 8 <dl>
9 <dt>{% trans %}Developed by{% endtrans %}</dt> 9 <dt>{{ 'about.who_behind_wallabag.developped_by'|trans }}</dt>
10 <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://cdetc.fr">{% trans %}website{% endtrans %}</a></dd> 10 <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://www.loeuillet.org">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
11 <dd>Thomas Citharel — <a href="https://tcit.fr">{% trans %}website{% endtrans %}</a></dd> 11 <dd>Thomas Citharel — <a href="https://tcit.fr">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
12 <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{% trans %}website{% endtrans %}</a></dd> 12 <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
13 13
14 <dt>{% trans %}And many others contributors ♥{% endtrans %} <a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}on Github{% endtrans %}</a></dt> 14 <dt>{{ 'about.who_behind_wallabag.many_contributors'|trans|raw }}</dt>
15 15
16 <dt>{% trans %}Project website{% endtrans %}</dt> 16 <dt>{{ 'about.who_behind_wallabag.project_website'|trans }}</dt>
17 <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd> 17 <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd>
18 18
19 <dt>{% trans %}License{% endtrans %}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt> 19 <dt>{{ 'about.who_behind_wallabag.license'|trans }}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt>
20 20
21 <dt>{% trans %}Version{% endtrans %}: {{ version }}</dt> 21 <dt>{{ 'about.who_behind_wallabag.version'|trans }}: {{ version }}</dt>
22 </dl> 22 </dl>
23 23
24 <h2>{% trans %}Getting help{% endtrans %}</h2> 24 <h2>{{ 'about.top_menu.getting_help'|trans }}</h2>
25 25
26 <dl> 26 <dl>
27 <dt>{% trans %}Documentation{% endtrans %}</dt> 27 <dt>{{ 'about.getting_help.documentation'|trans }}</dt>
28 <dd><a href="https://doc.wallabag.org/en">english</a></dd> 28 <dd><a href="http://doc.wallabag.org/en/v2/">english</a></dd>
29 <dd><a href="https://doc.wallabag.org/fr">français</a></dd> 29 <dd><a href="http://doc.wallabag.org/fr/v2/">français</a></dd>
30 <dd><a href="https://doc.wallabag.org/de">deutsch</a></dd>
31 30
32 <dt>{% trans %}Bug reports{% endtrans %}</dt> 31 <dt>{{ 'about.getting_help.bug_reports'|trans }}</dt>
33 <dd><a href="https://support.wallabag.org">{% trans %}On our support website{% endtrans %}</a> {% trans %}or{% endtrans %} <a href="https://github.com/wallabag/wallabag/issues">{% trans %}on Github{% endtrans %}</a></dd> 32 <dd>{{ 'about.getting_help.support'|trans|raw }}</dd>
34 </dl> 33 </dl>
35 34
36 <h2>{% trans %}Helping wallabag{% endtrans %}</h2> 35 <h2>{{ 'about.top_menu.helping'|trans }}</h2>
37 36
38 <p>{% trans %}wallabag is free and opensource. You can help us:{% endtrans %}</p> 37 <p>{{ 'about.helping.description'|trans }}</p>
39 38
40 <dl> 39 <dl>
41 <dt>{% trans %}wallabag is free and opensource. You can help us:{% endtrans %}</dt> 40 <dt>{{ 'about.helping.description'|trans }}</dt>
42 <dd>by contributing to the project: <a href="https://github.com/wallabag/wallabag/issues/1254">an issue lists all our needs</a></dd> 41 <dd>{{ 'about.helping.by_contributing_2'|trans }} <a href="https://github.com/wallabag/wallabag/issues/1254">{{ 'about.helping.by_contributing'|trans }}</a></dd>
43 <dd><a href="{{ paypal_url }}">{% trans %}via Paypal{% endtrans %}</a></dd> 42 <dd><a href="{{ paypal_url }}">{{ 'about.helping.by_paypal'|trans }}</a></dd>
44 </dl> 43 </dl>
45 44
46 <h2>{% trans %}Contributors{% endtrans %}</h2> 45 <h2>{{ 'about.top_menu.contributors'|trans }}</h2>
47 <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}Thank you to contributors on wallabag web application{% endtrans %}</a></p> 46 <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{{ 'about.contributors.description'|trans }}</a></p>
48 47
49 <h2>{% trans %}Third-party libraries{% endtrans %}</h2> 48 <h2>{{ 'about.top_menu.third_party'|trans }}</h2>
50 <p>{% trans %}Here are the list of third-party libraries used in wallabag (with their licenses):{% endtrans %}</p> 49 <p>{{ 'about.third_party.description'|trans }}</p>
51 <table> 50 <table class="striped">
52 <tr> 51 <tr>
53 <th>{% trans %}Package{% endtrans %}</th> 52 <th>{{ 'about.third_party.package'|trans }}</th>
54 <th>{% trans %}License{% endtrans %}</th> 53 <th>{{ 'about.third_party.license'|trans }}</th>
55 </tr> 54 </tr>
56 <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr> 55 <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr>
57 <tr><td>CraueConfigBundle</td><td>MIT</td></tr> 56 <tr><td>CraueConfigBundle</td><td>MIT</td></tr>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig
index e32264f3..eab092c7 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/howto.html.twig
@@ -1,28 +1,28 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Howto{% endtrans %}{% endblock %} 3{% block title %}{{ 'howto.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 <h2>{% trans %}Howto{% endtrans %}</h2> 6 <h2>{{ 'howto.page_title'|trans }}</h2>
7 7
8 <p>{% trans %}There are several ways to save an article:{% endtrans %}</p> 8 <p>{{ 'howto.page_description'|trans }}</p>
9 <ul> 9 <ul>
10 <li><a href="{{ path('new') }}">{% trans %}Thanks to this form{% endtrans %}</a></li> 10 <li><a href="{{ path('new') }}">{{ 'howto.form.description'|trans }}</a></li>
11 </ul> 11 </ul>
12 <h3>{% trans %}Browser Addons{% endtrans %}</h3> 12 <h3>{{ 'howto.top_menu.browser_addons'|trans }}</h3>
13 <ul> 13 <ul>
14 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans %}Standard Firefox Add-On{% endtrans %}</a></li> 14 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
15 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans %}Chrome Extension{% endtrans %}</a></li> 15 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
16 </ul> 16 </ul>
17 <h3>{% trans %}Mobile Apps{% endtrans %}</h3> 17 <h3>{{ 'howto.top_menu.mobile_apps'|trans }}</h3>
18 <ul> 18 <ul>
19 <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">via F-Droid</a> {% trans %} or {% endtrans %} <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">via Google Play</a></li> 19 <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li>
20 <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{% trans %}download the application{% endtrans %}</a></li> 20 <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
21 <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{% trans %}download the application{% endtrans %}</a></li> 21 <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li>
22 </ul> 22 </ul>
23 <h3>{% trans %}Bookmarklet{% endtrans %}</h3> 23 <h3>{{ 'howto.top_menu.bookmarklet'|trans }}</h3>
24 <p> 24 <p>
25 {% trans %}Drag &amp; drop this link to your bookmarks bar:{% endtrans %} 25 {{ 'howto.bookmarklet.description'|trans }}
26 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} 26 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %}
27 27
28{% endblock %} 28{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig
index 6b008fca..5f65ce15 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Static/quickstart.html.twig
@@ -1,55 +1,66 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Quickstart{% endtrans %}{% endblock %} 3{% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 6
7 <h3>{% trans %}Welcome to wallabag!{% endtrans %}</h3> 7 <h3>{{ 'quickstart.intro.title'|trans }}</h3>
8 <p>{% trans %}We'll accompany you to visit wallabag and show you some features which can interess you.{% endtrans %}</p> 8 <p>{{ 'quickstart.intro.paragraph_1'|trans }}</p>
9 <p>{% trans %}Follow us!{% endtrans %}</p> 9 <p>{{ 'quickstart.intro.paragraph_2'|trans }}</p>
10 <h4>{% trans %}Configure the application{% endtrans %}</h4> 10
11 <h4>{{ 'quickstart.configure.title'|trans }}</h4>
11 <ul> 12 <ul>
12 <li><a href="{{ path('config') }}">{% trans %}Change language and design{% endtrans %}</a></li> 13 <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li>
13 <li><a href="{{ path('config') }}#set2">{% trans %}Enable RSS feeds{% endtrans %}</a></li> 14 <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li>
14 <li><a href="{{ path('config') }}#set5">{% trans %}Write rules to automatically tag your articles{% endtrans %}</a></li> 15 <li><a href="{{ path('config') }}#set5">{{ 'quickstart.configure.tagging_rules'|trans }}</a></li>
15 </ul> 16 </ul>
17
16 {% if is_granted('ROLE_SUPER_ADMIN') %} 18 {% if is_granted('ROLE_SUPER_ADMIN') %}
17 <h4>{% trans %}Administration{% endtrans %}</h4> 19 <h4>{{ 'quickstart.admin.title'|trans }}</h4>
18 <p>{% trans %}As a administrator, you have privileges on wallabag. You can:{% endtrans %}</p> 20 <p>{{ 'quickstart.admin.description'|trans }}</p>
19 <ul> 21 <ul>
20 <li><a href="{{ path('config') }}#set6">{% trans %}Create a new user{% endtrans %}</a></li> 22 <li><a href="{{ path('config') }}#set6">{{ 'quickstart.admin.new_user'|trans }}</a></li>
21 <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{% trans %}Configure analytics{% endtrans %}</a></li> 23 <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{{ 'quickstart.admin.analytics'|trans }}</a></li>
22 <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{% trans %}Enable some parameters about article sharing{% endtrans %}</a></li> 24 <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{{ 'quickstart.admin.sharing'|trans }}</a></li>
23 <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{% trans %}Configure export{% endtrans %}</a></li> 25 <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{{ 'quickstart.admin.export'|trans }}</a></li>
24 <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{% trans %}Configure import{% endtrans %}</a></li> 26 <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{{ 'quickstart.admin.import'|trans }}</a></li>
25 </ul> 27 </ul>
26 {% endif %} 28 {% endif %}
27 <h4>{% trans %}First steps{% endtrans %}</h4> 29
30 <h4>{{ 'quickstart.first_steps.title'|trans }}</h4>
28 <ul> 31 <ul>
29 <li><a href="{{ path('new') }}">{% trans %}Save your first article{% endtrans %}</a></li> 32 <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li>
30 <li><a href="{{ path('unread') }}">{% trans %}And classify it!{% endtrans %}</a></li> 33 <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li>
31 </ul> 34 </ul>
32 <h4>{% trans %}Migrate from an existing service{% endtrans %}</h4> 35
33 <p>{% trans %}You're using an other service? We'll help you to retrieve your data on wallabag.{% endtrans %}</p> 36 <h4>{{ 'quickstart.migrate.title'|trans }}</h4>
37 <p>{{ 'quickstart.migrate.description'|trans }}</p>
34 <ul> 38 <ul>
35 <li><a href="{{ path('import_pocket') }}">{% trans %}Migrate from Pocket{% endtrans %}</a></li> 39 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li>
36 <li><a href="{{ path('import_wallabag_v1') }}">{% trans %}Migrate from wallabag v1{% endtrans %}</a></li> 40 <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li>
37 <li><a href="{{ path('import_wallabag_v2') }}">{% trans %}Migrate from wallabag v2{% endtrans %}</a></li> 41 <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li>
38 </ul> 42 </ul>
39 <h4>{% trans %}Full documentation{% endtrans %}</h4> 43
44 <h4>{{ 'quickstart.developer.title'|trans }}</h4>
40 <ul> 45 <ul>
41 <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{% trans %}Annotate your article{% endtrans %}</a></li> 46 <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li>
42 <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{% trans %}Convert your articles into ePUB or PDF{% endtrans %}</a></li>
43 <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{% trans %}See how you can look for an article by using search engine and filters{% endtrans %}</a></li>
44 <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{% trans %}What can I do if an article encounters errors during fetching?{% endtrans %}</a></li>
45 <li><a href="http://doc.wallabag.org/">{% trans %}And so many other articles!{% endtrans %}</a></li>
46 </ul> 47 </ul>
47 <h4>{% trans %}Support{% endtrans %}</h4> 48
48 <p>{% trans %}If you need some help, we are here for you.{% endtrans %}</p> 49 <h4>{{ 'quickstart.docs.title'|trans }}</h4>
50 <ul>
51 <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li>
52 <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li>
53 <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{{ 'quickstart.docs.search_filters'|trans }}</a></li>
54 <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{{ 'quickstart.docs.fetching_errors'|trans }}</a></li>
55 <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li>
56 </ul>
57
58 <h4>{{ 'quickstart.support.title'|trans }}</h4>
59 <p>{{ 'quickstart.support.description'|trans }}</p>
49 <ul> 60 <ul>
50 <li><a href="https://github.com/wallabag/wallabag/issues/">{% trans %}On GitHub{% endtrans %}</a></li> 61 <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li>
51 <li><a href="mailto:hello@wallabag.org">{% trans %}By email{% endtrans %}</a></li> 62 <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li>
52 <li><a href="https://gitter.im/wallabag/wallabag">{% trans %}On Gitter{% endtrans %}</a></li> 63 <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li>
53 </ul> 64 </ul>
54 65
55{% endblock %} 66{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig
index ade7f56d..6e552560 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/new_form.html.twig
@@ -8,7 +8,6 @@
8 {% endif %} 8 {% endif %}
9 9
10 {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }} 10 {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }}
11 {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'}, 'label': 'add tag' }) }}
12 11
13 <div class="hidden">{{ form_rest(form) }}</div> 12 {{ form_rest(form) }}
14</form> 13</form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
index c2a461b8..dfc61751 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/Tag/tags.html.twig
@@ -1,13 +1,15 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title "Tags" %} 3{% block title %}{{ 'tag.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 {% if tags is empty %} 6 <div class="results">
7 <div class="messages warning"><p>{% trans %}No tags found.{% endtrans %}</p></div> 7 <div class="nb-results">{{ 'tag.list.number_on_the_page'|transchoice(tags.count) }}</div>
8 {% else %} 8 </div>
9 {% for tag in tags %} 9
10 {{tag.label}} 10 <ul>
11 {% endfor %} 11 {% for tag in tags %}
12 {% endif %} 12 <li id="tag-{{ tag.id|e }}">{{tag.label}} ({{ tag.entries.getValues | length }})</li>
13 {% endfor %}
14 </ul>
13{% endblock %} 15{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
index 7f098066..2c15ad95 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/baggy/layout.html.twig
@@ -33,32 +33,32 @@
33{% block menu %} 33{% block menu %}
34 <button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button> 34 <button id="menu" class="icon icon-menu desktopHide"><span>Menu</span></button>
35 <ul id="links" class="links"> 35 <ul id="links" class="links">
36 <li><a href="{{ path('unread') }}">{% trans %}unread{% endtrans %}</a></li> 36 <li><a href="{{ path('unread') }}">{{ 'menu.left.unread'|trans }}</a></li>
37 <li><a href="{{ path('starred') }}">{% trans %}favorites{% endtrans %}</a></li> 37 <li><a href="{{ path('starred') }}">{{ 'menu.left.starred'|trans }}</a></li>
38 <li><a href="{{ path('archive') }}">{% trans %}archive{% endtrans %}</a></li> 38 <li><a href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }}</a></li>
39 <li><a href="{{ path('all') }}">{% trans %}all{% endtrans %}</a></li> 39 <li><a href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }}</a></li>
40 <li><a href="{{ path('tag') }}">{% trans %}tags{% endtrans %}</a></li> 40 <li><a href="{{ path('tag') }}">{{ 'menu.left.tags'|trans }}</a></li>
41 <li><a href="{{ path('new') }}">{% trans %}save a link{% endtrans %}</a></li> 41 <li><a href="{{ path('new') }}">{{ 'menu.left.save_link'|trans }}</a></li>
42 <li style="position: relative;"><a href="javascript: void(null);" id="search">{% trans %}search{% endtrans %}</a> 42 <!--<li style="position: relative;"><a href="javascript: void(null);" id="search">{{ 'menu.left.search'|trans }}</a>
43 <div id="search-form" class="messages info popup-form"> 43 <div id="search-form" class="messages info popup-form">
44 <form method="get" action="index.php"> 44 <form method="get" action="index.php">
45 <h2>{% trans %}Search{% endtrans %}</h2> 45 <h2>{{ 'menu.left.search'|trans }}</h2>
46 <a href="javascript: void(null);" id="search-form-close" class="close-button--popup close-button">&times;</a> 46 <a href="javascript: void(null);" id="search-form-close" class="close-button--popup close-button">&times;</a>
47 <input type="hidden" name="view" value="search"> 47 <input type="hidden" name="view" value="search">
48 <input required placeholder="{% trans %}Enter your search here{% endtrans %}" type="text" name="search" id="searchfield"><br> 48 <input required placeholder="{{ 'menu.search_form.input_label'|trans }}" type="text" name="search" id="searchfield"><br>
49 <input id="submit-search" type="submit" value="{% trans %}Search{% endtrans %}"> 49 <input id="submit-search" type="submit" value="{{ 'menu.left.search'|trans }}">
50 </form> 50 </form>
51 </div> 51 </div>
52 </li> 52 </li>-->
53 <li><a href="{{ path('config') }}">{% trans %}config{% endtrans %}</a></li> 53 <li><a href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a></li>
54 {% if is_granted('ROLE_SUPER_ADMIN') %} 54 {% if is_granted('ROLE_SUPER_ADMIN') %}
55 <li><a href="{{ path('craue_config_settings_modify') }}">{% trans %}internal settings{% endtrans %}</a></li> 55 <li><a href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a></li>
56 {% endif %} 56 {% endif %}
57 <li><a href="{{ path('import') }}">{% trans %}import{% endtrans %}</a></li> 57 <li><a href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a></li>
58 <li><a href="{{ path('howto') }}">{% trans %}howto{% endtrans %}</a></li> 58 <li><a href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a></li>
59 <li><a href="{{ path('developer') }}">{% trans %}Developer{% endtrans %}</a></li> 59 <li><a href="{{ path('developer') }}">{{ 'menu.left.developer'|trans }}</a></li>
60 <li><a href="{{ path('about') }}">{% trans %}about{% endtrans %}</a></li> 60 <li><a href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a></li>
61 <li><a class="icon icon-power" href="{{ path('fos_user_security_logout') }}" title="{% trans %}logout{% endtrans %}">{% trans %}logout{% endtrans %}</a></li> 61 <li><a class="icon icon-power" href="{{ path('fos_user_security_logout') }}">{{ 'menu.left.logout'|trans }}</a></li>
62 </ul> 62 </ul>
63{% endblock %} 63{% endblock %}
64 64
@@ -66,13 +66,13 @@
66 {% for flashMessage in app.session.flashbag.get('notice') %} 66 {% for flashMessage in app.session.flashbag.get('notice') %}
67 <div class="messages success"> 67 <div class="messages success">
68 <a href="#" class="closeMessage">×</a> 68 <a href="#" class="closeMessage">×</a>
69 <p>{{ flashMessage }}</p> 69 <p>{{ flashMessage|trans }}</p>
70 </div> 70 </div>
71 {% endfor %} 71 {% endfor %}
72{% endblock %} 72{% endblock %}
73 73
74{% block footer %} 74{% block footer %}
75 <footer class="w600p center mt3 mb3 smaller txtright"> 75 <footer class="w600p center mt3 mb3 smaller txtright">
76 <p>{% trans %}powered by{% endtrans %} <a href="http://wallabag.org">wallabag</a></p> 76 <p>{{ 'footer.wallabag.powered_by'|trans }} <a href="http://wallabag.org">wallabag</a></p>
77 </footer> 77 </footer>
78{% endblock %} 78{% endblock %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
index 2b0b0828..5b94f01c 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Config/index.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}config{% endtrans %}{% endblock %} 3{% block title %}{{ 'config.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 6
@@ -11,13 +11,13 @@
11 <div class="row"> 11 <div class="row">
12 <div class="div_tabs col s12"> 12 <div class="div_tabs col s12">
13 <ul class="tabs"> 13 <ul class="tabs">
14 <li class="tab col s3"><a class="active" href="#set1">{% trans %}Settings{% endtrans %}</a></li> 14 <li class="tab col s3"><a class="active" href="#set1">{{ 'config.tab_menu.settings'|trans }}</a></li>
15 <li class="tab col s3"><a href="#set2">{% trans %}RSS{% endtrans %}</a></li> 15 <li class="tab col s3"><a href="#set2">{{ 'config.tab_menu.rss'|trans }}</a></li>
16 <li class="tab col s3"><a href="#set3">{% trans %}User information{% endtrans %}</a></li> 16 <li class="tab col s3"><a href="#set3">{{ 'config.tab_menu.user_info'|trans }}</a></li>
17 <li class="tab col s3"><a href="#set4">{% trans %}Password{% endtrans %}</a></li> 17 <li class="tab col s3"><a href="#set4">{{ 'config.tab_menu.password'|trans }}</a></li>
18 <li class="tab col s3"><a href="#set5">{% trans %}Tagging rules{% endtrans %}</a></li> 18 <li class="tab col s3"><a href="#set5">{{ 'config.tab_menu.rules'|trans }}</a></li>
19 {% if is_granted('ROLE_SUPER_ADMIN') %} 19 {% if is_granted('ROLE_SUPER_ADMIN') %}
20 <li class="tab col s3"><a href="#set6">{% trans %}Add a user{% endtrans %}</a></li> 20 <li class="tab col s3"><a href="#set6">{{ 'config.tab_menu.new_user'|trans }}</a></li>
21 {% endif %} 21 {% endif %}
22 </ul> 22 </ul>
23 </div> 23 </div>
@@ -28,9 +28,9 @@
28 28
29 <div class="row"> 29 <div class="row">
30 <div class="input-field col s12"> 30 <div class="input-field col s12">
31 {{ form_label(form.config.theme) }}
31 {{ form_errors(form.config.theme) }} 32 {{ form_errors(form.config.theme) }}
32 {{ form_widget(form.config.theme) }} 33 {{ form_widget(form.config.theme) }}
33 <label class="required">{% trans %}Theme{% endtrans %}</label>
34 </div> 34 </div>
35 </div> 35 </div>
36 36
@@ -47,7 +47,10 @@
47 {{ form_label(form.config.reading_speed) }} 47 {{ form_label(form.config.reading_speed) }}
48 {{ form_errors(form.config.reading_speed) }} 48 {{ form_errors(form.config.reading_speed) }}
49 {{ form_widget(form.config.reading_speed) }} 49 {{ form_widget(form.config.reading_speed) }}
50 <p>{% trans %}You can use online tools to estimate your reading speed{% endtrans %} (<a href="http://www.myreadspeed.com/calculate/">{% trans %}like this one{%endtrans%}</a>).</p> 50 <p>
51 {{ 'config.form_settings.reading_speed.help_message'|trans }}
52 <a href="http://www.myreadspeed.com/calculate/">myreadspeed</a>
53 </p>
51 </div> 54 </div>
52 </div> 55 </div>
53 56
@@ -59,10 +62,8 @@
59 </div> 62 </div>
60 </div> 63 </div>
61 64
62 <div class="hidden">{{ form_rest(form.config) }}</div> 65 {{ form_widget(form.config.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
63 <button class="btn waves-effect waves-light" type="submit" name="action"> 66 {{ form_rest(form.config) }}
64 {% trans %}Save{% endtrans %}
65 </button>
66 </form> 67 </form>
67 </div> 68 </div>
68 69
@@ -72,33 +73,37 @@
72 73
73 <div class="row"> 74 <div class="row">
74 <div class="input-field col s12"> 75 <div class="input-field col s12">
75 {% trans %}RSS feeds provided by wallabag allow you to read your saved articles with your favourite RSS reader. You need to generate a token first.{% endtrans %} 76 {{ 'config.form_rss.description'|trans }}
76 </div> 77 </div>
77 </div> 78 </div>
78 79
79 <div class="row"> 80 <div class="row">
80 <div class="input-field col s12"> 81 <div class="input-field col s12">
81 <label>{% trans %}RSS token{% endtrans %}</label> 82 <label>{{ 'config.form_rss.token_label'|trans }}</label>
82 <div> 83 <div>
83 {% if rss.token %} 84 {% if rss.token %}
84 {{ rss.token }} 85 {{ rss.token }}
85 {% else %} 86 {% else %}
86 <em>{% trans %}No token{% endtrans %}</em> 87 <em>{{ 'config.form_rss.no_token'|trans }}</em>
87 {% endif %} 88 {% endif %}
88 – <a href="{{ path('generate_token') }}">{% if rss.token %}{% trans %}Reset your token{% endtrans %}{% else %}{% trans %}Create your token{% endtrans %}{% endif %}</a> 89 – <a href="{{ path('generate_token') }}">
90 {% if rss.token %}
91 {{ 'config.form_rss.token_reset'|trans }}
92 {% else %}
93 {{ 'config.form_rss.token_create'|trans }}
94 {% endif %}</a>
89 </div> 95 </div>
90 </div> 96 </div>
91 </div> 97 </div>
92 {% if rss.token %} 98 {% if rss.token %}
93 <div class="row"> 99 <div class="row">
94 <div class="input-field col s12"> 100 <div class="input-field col s12">
95 <label>{% trans %}RSS links{% endtrans %}</label> 101 <label>{{ 'config.form_rss.rss_links'|trans }}</label>
96 <ul> 102 <ul>
97 <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}unread{% endtrans %}</a></li> 103 <li><a href="{{ path('unread_rss', {'username': rss.username, 'token': rss.token}) }}">{{ 'config.form_rss.rss_link.unread'|trans }}</a></li>
98 <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}starred{% endtrans %}</a></li> 104 <li><a href="{{ path('starred_rss', {'username': rss.username, 'token': rss.token}) }}">{{ 'config.form_rss.rss_link.starred'|trans }}</a></li>
99 <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">{% trans %}archive{% endtrans %}</a></li> 105 <li><a href="{{ path('archive_rss', {'username': rss.username, 'token': rss.token}) }}">{{ 'config.form_rss.rss_link.archive'|trans }}</a></li>
100 </ul> 106 </ul>
101
102 </div> 107 </div>
103 </div> 108 </div>
104 {% endif %} 109 {% endif %}
@@ -111,11 +116,8 @@
111 </div> 116 </div>
112 </div> 117 </div>
113 118
114 <div class="hidden">{{ form_rest(form.rss) }}</div> 119 {{ form_widget(form.rss.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
115 <button class="btn waves-effect waves-light" type="submit" name="action"> 120 {{ form_rest(form.rss) }}
116 {% trans %}Save{% endtrans %}
117 </button>
118
119 </form> 121 </form>
120 </div> 122 </div>
121 123
@@ -142,7 +144,7 @@
142 {% if twofactor_auth %} 144 {% if twofactor_auth %}
143 <div class="row"> 145 <div class="row">
144 <div class="input-field col s12"> 146 <div class="input-field col s12">
145 {% trans %}Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion{% endtrans %} 147 {{ 'config.form_user.two_factor_description'|trans }}
146 </div> 148 </div>
147 </div> 149 </div>
148 150
@@ -155,11 +157,8 @@
155 </div> 157 </div>
156 {% endif %} 158 {% endif %}
157 159
158 <div class="hidden">{{ form_rest(form.user) }}</div> 160 {{ form_widget(form.user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
159 <button class="btn waves-effect waves-light" type="submit" name="action"> 161 {{ form_rest(form.user) }}
160 {% trans %}Save{% endtrans %}
161 </button>
162
163 </form> 162 </form>
164 </div> 163 </div>
165 164
@@ -191,11 +190,8 @@
191 </div> 190 </div>
192 </div> 191 </div>
193 192
194 <div class="hidden">{{ form_rest(form.pwd) }}</div> 193 {{ form_widget(form.pwd.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
195 <button class="btn waves-effect waves-light" type="submit" name="action"> 194 {{ form_rest(form.pwd) }}
196 {% trans %}Save{% endtrans %}
197 </button>
198
199 </form> 195 </form>
200 </div> 196 </div>
201 197
@@ -205,8 +201,11 @@
205 <ul> 201 <ul>
206 {% for tagging_rule in app.user.config.taggingRules %} 202 {% for tagging_rule in app.user.config.taggingRules %}
207 <li> 203 <li>
208 if « {{ tagging_rule.rule }} » then tag as « {{ tagging_rule.tags|join(', ') }} » 204 {{ 'config.form_rules.if_label'|trans }}
209 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{% trans %}Delete{% endtrans %}"> 205 « {{ tagging_rule.rule }} »
206 {{ 'config.form_rules.then_tag_as_label'|trans }}
207 « {{ tagging_rule.tags|join(', ') }} »
208 <a href="{{ path('delete_tagging_rule', {id: tagging_rule.id}) }}" title="{{ 'config.form_rules.delete_rule_label'|trans }}">
210 <i class="tool grey-text delete mdi-action-delete"></i> 209 <i class="tool grey-text delete mdi-action-delete"></i>
211 </a> 210 </a>
212 </li> 211 </li>
@@ -234,106 +233,92 @@
234 </div> 233 </div>
235 </div> 234 </div>
236 235
237 <div class="hidden">{{ form_rest(form.new_tagging_rule) }}</div> 236 {{ form_widget(form.new_tagging_rule.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
238 <button class="btn waves-effect waves-light" type="submit" name="action"> 237 {{ form_rest(form.new_tagging_rule) }}
239 {% trans %}Save{% endtrans %}
240 </button>
241 </form> 238 </form>
242 239
243 <div class="row"> 240 <div class="row">
244 <div class="input-field col s12"> 241 <div class="input-field col s12">
245 <h4>{% trans %}FAQ{% endtrans %}</h4> 242 <h4>{{ 'config.form_rules.faq.title'|trans }}</h4>
246 243
247 <h5>{% trans %}What does « tagging rules » mean?{% endtrans %}</h5> 244 <h5>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h5>
248 <p class="help"> 245 <p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p>
249 {% trans %}
250 They are rules used by Wallabag to automatically tag new entries.<br />Each time a new entry is added, all the tagging rules will be used to add the tags you configured, thus saving you the trouble to manually classify your entries.
251 {% endtrans %}
252 </p>
253 246
254 <h5>{% trans %}How do I use them?{% endtrans %}</h5> 247 <h5>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h5>
255 <p class="help"> 248 <p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p>
256 {% trans %}
257 Let assume you want to tag new entries as « <i>short reading</i> » when the reading time is inferior to 3 minutes.<br />In that case, you should put « readingTime &lt;= 3 » in the <i>Rule</i> field and « <i>short reading</i> » in the <i>Tags</i> field.<br />Several tags can added simultaneously by separating them by a comma: « <i>short reading, must read</i> »<br />Complex rules can be written by using predefined operators: if « <i>readingTime &gt;= 5 AND domainName = "github.com"</i> » then tag as « <i>long reading, github </i> »
258 {% endtrans %}
259 </p>
260 249
261 <h5>{% trans %}Which variables and operators can I use to write rules?{% endtrans %}</h5> 250 <h5>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h5>
262 <p class="help"> 251 <p class="help">
263 {% trans %}The following variables and operators can be used to create tagging rules:{% endtrans %} 252 {{ 'config.form_rules.faq.variables_available_description'|trans }}
264
265 <table>
266 <thead>
267 <tr>
268 <th>{% trans %}Variable{% endtrans %}</th>
269 <th>{% trans %}Meaning{% endtrans %}</th>
270 <th>{% trans %}Operator{% endtrans %}</th>
271 <th>{% trans %}Meaning{% endtrans %}</th>
272 </tr>
273 </thead>
274
275 <tbody>
276 <tr>
277 <td>title</td>
278 <td>{% trans %}Title of the entry{% endtrans %}</td>
279 <td>&lt;=</td>
280 <td>{% trans %}Less than…{% endtrans %}</td>
281 </tr>
282 <tr>
283 <td>url</td>
284 <td>{% trans %}URL of the entry{% endtrans %}</td>
285 <td>&lt;</td>
286 <td>{% trans %}Strictly less than…{% endtrans %}</td>
287 </tr>
288 <tr>
289 <td>isArchived</td>
290 <td>{% trans %}Whether the entry is archived or not{% endtrans %}</td>
291 <td>=&gt;</td>
292 <td>{% trans %}Greater than…{% endtrans %}</td>
293 </tr>
294 <tr>
295 <td>isStarred</td>
296 <td>{% trans %}Whether the entry is starred or not{% endtrans %}</td>
297 <td>&gt;</td>
298 <td>{% trans %}Strictly greater than…{% endtrans %}</td>
299 </tr>
300 <tr>
301 <td>content</td>
302 <td>{% trans %}The entry's content{% endtrans %}</td>
303 <td>=</td>
304 <td>{% trans %}Equal to…{% endtrans %}</td>
305 </tr>
306 <tr>
307 <td>language</td>
308 <td>{% trans %}The entry's language{% endtrans %}</td>
309 <td>!=</td>
310 <td>{% trans %}Not equal to…{% endtrans %}</td>
311 </tr>
312 <tr>
313 <td>mimetype</td>
314 <td>{% trans %}The entry's mime-type{% endtrans %}</td>
315 <td>OR</td>
316 <td>{% trans %}One rule or another{% endtrans %}</td>
317 </tr>
318 <tr>
319 <td>readingTime</td>
320 <td>{% trans %}The estimated entry's reading time, in minutes{% endtrans %}</td>
321 <td>AND</td>
322 <td>{% trans %}One rule and another{% endtrans %}</td>
323 </tr>
324 <tr>
325 <td>domainName</td>
326 <td>{% trans %}The domain name of the entry{% endtrans %}</td>
327 <td>matches</td>
328 <td>
329 {% trans %}
330 Tests that a <i>subject</i> is matches a <i>search</i> (case-insensitive).<br />Example: <code>title matches "football"</code>
331 {% endtrans %}
332 </td>
333 </tr>
334 </tbody>
335 </table>
336 </p> 253 </p>
254
255 <table class="bordered">
256 <thead>
257 <tr>
258 <th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
259 <th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
260 <th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
261 <th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
262 </tr>
263 </thead>
264
265 <tbody>
266 <tr>
267 <td>title</td>
268 <td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
269 <td>&lt;=</td>
270 <td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
271 </tr>
272 <tr>
273 <td>url</td>
274 <td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
275 <td>&lt;</td>
276 <td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
277 </tr>
278 <tr>
279 <td>isArchived</td>
280 <td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
281 <td>=&gt;</td>
282 <td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
283 </tr>
284 <tr>
285 <td>isStarred</td>
286 <td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
287 <td>&gt;</td>
288 <td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
289 </tr>
290 <tr>
291 <td>content</td>
292 <td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
293 <td>=</td>
294 <td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
295 </tr>
296 <tr>
297 <td>language</td>
298 <td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
299 <td>!=</td>
300 <td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
301 </tr>
302 <tr>
303 <td>mimetype</td>
304 <td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
305 <td>OR</td>
306 <td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
307 </tr>
308 <tr>
309 <td>readingTime</td>
310 <td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
311 <td>AND</td>
312 <td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
313 </tr>
314 <tr>
315 <td>domainName</td>
316 <td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
317 <td>matches</td>
318 <td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
319 </tr>
320 </tbody>
321 </table>
337 </div> 322 </div>
338 </div> 323 </div>
339 </div> 324 </div>
@@ -375,11 +360,8 @@
375 </div> 360 </div>
376 </div> 361 </div>
377 362
378 <div class="hidden">{{ form_rest(form.new_user) }}</div> 363 {{ form_widget(form.new_user.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
379 <button class="btn waves-effect waves-light" type="submit" name="action"> 364 {{ form_rest(form.new_user) }}
380 {% trans %}Add a user{% endtrans %}
381 </button>
382
383 </form> 365 </form>
384 </div> 366 </div>
385 {% endif %} 367 {% endif %}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig
index c9ce6d08..78a9dc04 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}New client{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.client.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6<div class="row"> 6<div class="row">
@@ -8,7 +8,7 @@
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 9
10 <div class="row"> 10 <div class="row">
11 <p>{% trans %}You are about to create a new client. Please fill the field below for the redirect URI of your application.{% endtrans %}</p> 11 <p>{{ 'developer.client.page_description'|trans }}</p>
12 {{ form_start(form) }} 12 {{ form_start(form) }}
13 {{ form_errors(form) }} 13 {{ form_errors(form) }}
14 14
@@ -18,7 +18,7 @@
18 {{ form_widget(form.redirect_uris) }} 18 {{ form_widget(form.redirect_uris) }}
19 </div> 19 </div>
20 20
21 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> 21 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client.action_back'|trans }}</a>
22 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} 22 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
23 23
24 {{ form_rest(form) }} 24 {{ form_rest(form) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig
index a214dfd0..b615fa3b 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/client_parameters.html.twig
@@ -1,20 +1,20 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Client parameters{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.client_parameter.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6<div class="row"> 6<div class="row">
7 <div class="col s12"> 7 <div class="col s12">
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 <div class="row"> 9 <div class="row">
10 <p>{% trans %}Here are your client parameters.{% endtrans %}</p> 10 <p>{{ 'developer.client_parameter.page_description'|trans }}</p>
11 <ul> 11 <ul>
12 <li>{% trans %}Client ID{% endtrans %}: <strong><pre>{{ client_id }}</pre></strong></li> 12 <li>{{ 'developer.client_parameter.field_id'|trans }}: <strong><pre>{{ client_id }}</pre></strong></li>
13 <li>{% trans %}Client secret{% endtrans %}: <strong><pre>{{ client_secret }}</pre></strong></li> 13 <li>{{ 'developer.client_parameter.field_secret'|trans }}: <strong><pre>{{ client_secret }}</pre></strong></li>
14 </ul> 14 </ul>
15 15
16 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a> 16 <a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.client_parameter.back'|trans }}</a>
17 <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{% trans %}Read the howto "Create my first application"{% endtrans %}</a> 17 <a href="{{ path('developer_howto_firstapp') }}" class="btn waves-effect waves-light">{{ 'developer.client_parameter.read_howto'|trans }}</a>
18 </div> 18 </div>
19 </div> 19 </div>
20 </div> 20 </div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig
index 382e6311..acbc2c88 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/howto_app.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}How to create my first application{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.howto.page_title'|trans }}{% endblock %}
4 4
5{% block css %} 5{% block css %}
6 {{ parent() }} 6 {{ parent() }}
@@ -13,10 +13,10 @@
13 <div class="card-panel settings"> 13 <div class="card-panel settings">
14 14
15 <div class="row"> 15 <div class="row">
16 <p>{% trans %}The following commands make use of the <a href="https://github.com/jkbrzt/httpie">HTTPie library</a>. Make sure it is installed on your system before using it.{% endtrans %}</p> 16 <p>{{ 'developer.howto.description.paragraph_1'|trans|raw }}</p>
17 <p>{% trans %}You need a token to communicate between your 3rd application and wallabag API.{% endtrans %}</p> 17 <p>{{ 'developer.howto.description.paragraph_2'|trans }}</p>
18 <p>{% trans with {'%link%': path('developer_create_client')} %}To create this token, you need <a href="%link%">to create a new client</a>.{% endtrans %}</p> 18 <p>{{ 'developer.howto.description.paragraph_3'|trans({'%link%': path('developer_create_client')})|raw }}</p>
19 <p>{% trans %}Now, create your token (replace client_id, client_secret, username and password with the good values):{% endtrans %}</p> 19 <p>{{ 'developer.howto.description.paragraph_4'|trans }}</p>
20 <p> 20 <p>
21 <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \ 21 <pre><code class="language-bash">http POST http://v2.wallabag.org/oauth/v2/token \
22 grant_type=password \ 22 grant_type=password \
@@ -25,7 +25,7 @@
25 username=yourUsername \ 25 username=yourUsername \
26 password=yourPassw0rd</code></pre> 26 password=yourPassw0rd</code></pre>
27 </p> 27 </p>
28 <p>{% trans %}The API will return a response like this:{% endtrans %}</p> 28 <p>{{ 'developer.howto.description.paragraph_5'|trans }}</p>
29 <p> 29 <p>
30 <pre><code class="language-bash">HTTP/1.1 200 OK 30 <pre><code class="language-bash">HTTP/1.1 200 OK
31Cache-Control: no-store, private 31Cache-Control: no-store, private
@@ -45,14 +45,14 @@ X-Powered-By: PHP/5.5.9-1ubuntu4.13
45 "token_type": "bearer" 45 "token_type": "bearer"
46}</code></pre> 46}</code></pre>
47 </p> 47 </p>
48 <p>{% trans %}The access_token is useful to do a call to the API endpoint. For example:{% endtrans %}</p> 48 <p>{{ 'developer.howto.description.paragraph_6'|trans }}</p>
49 <p> 49 <p>
50 <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \ 50 <pre><code class="language-bash">http GET http://v2.wallabag.org/api/entries.json \
51 "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre> 51 "Authorization:Bearer ZWFjNjA3ZWMwYWVmYzRkYTBlMmQ3NTllYmVhOGJiZDE0ZTg1NjE4MjczOTVlNzM0ZTRlMWQ0MmRlMmYwNTk5Mw"</code></pre>
52 </p> 52 </p>
53 <p>{% trans %}This call will return all the entries for your user.{% endtrans %}</p> 53 <p>{{ 'developer.howto.description.paragraph_7'|trans }}</p>
54 <p>{% trans with {'%link%': path('nelmio_api_doc_index')} %}If you want to see all the API endpoints, you can have a look <a href="%link%">to our API documentation</a>.{% endtrans %}</p> 54 <p>{{ 'developer.howto.description.paragraph_8'|trans({'%link%': path('nelmio_api_doc_index')})|raw }}</p>
55 <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{% trans %}Back{% endtrans %}</a></p> 55 <p><a href="{{ path('developer') }}" class="waves-effect waves-light grey btn">{{ 'developer.howto.back'|trans }}</a></p>
56 </div> 56 </div>
57 57
58 </div> 58 </div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig
index 2e7dbcab..7ff64ca6 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Developer/index.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Developer{% endtrans %}{% endblock %} 3{% block title %}{{ 'developer.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6<div class="row"> 6<div class="row">
@@ -8,21 +8,22 @@
8 <div class="card-panel settings"> 8 <div class="card-panel settings">
9 9
10 <div class="row"> 10 <div class="row">
11 <h3>{% trans %}Welcome to the wallabag API{% endtrans %}</h3> 11 <h3>{{ 'developer.welcome_message'|trans }}</h3>
12 12
13 <h4>{% trans %}Documentation{% endtrans %}</h4> 13 <h4>{{ 'developer.documentation'|trans }}</h4>
14 14
15 <ul> 15 <ul>
16 <li><a href="{{ path('developer_howto_firstapp') }}">{% trans %}How to create my first application{% endtrans %}</a></li> 16 <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
17 <li><a href="{{ path('nelmio_api_doc_index') }}">{% trans %}View full API documentation{% endtrans %}</a></li> 17 <li><a href="http://doc.wallabag.org/en/v2-documentation-api/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
18 <li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
18 </ul> 19 </ul>
19 20
20 <h4>{% trans %}Clients{% endtrans %}</h4> 21 <h4>{{ 'developer.clients.title'|trans }}</h4>
21 <ul> 22 <ul>
22 <li><a href="{{ path('developer_create_client') }}">{% trans %}Create a new client{% endtrans %}</a></li> 23 <li><a href="{{ path('developer_create_client') }}">{{ 'developer.clients.create_new'|trans }}</a></li>
23 </ul> 24 </ul>
24 25
25 <h4>{% trans %}Existing clients{% endtrans %}</h4> 26 <h4>{{ 'developer.existing_clients.title'|trans }}</h4>
26 {% if clients %} 27 {% if clients %}
27 <ul class="collapsible" data-collapsible="expandable"> 28 <ul class="collapsible" data-collapsible="expandable">
28 {% for client in clients %} 29 {% for client in clients %}
@@ -31,33 +32,33 @@
31 <div class="collapsible-body"> 32 <div class="collapsible-body">
32 <table class="striped"> 33 <table class="striped">
33 <tr> 34 <tr>
34 <td>{% trans %}Client ID{% endtrans %}</td> 35 <td>{{ 'developer.existing_clients.field_id'|trans }}</td>
35 <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td> 36 <td><strong><code>{{ client.id }}_{{ client.randomId }}</code></strong></td>
36 </tr> 37 </tr>
37 <tr> 38 <tr>
38 <td>{% trans %}Client secret{% endtrans %}</td> 39 <td>{{ 'developer.existing_clients.field_secret'|trans }}</td>
39 <td><strong><code>{{ client.secret }}</code></strong></td> 40 <td><strong><code>{{ client.secret }}</code></strong></td>
40 </tr> 41 </tr>
41 <tr> 42 <tr>
42 <td>{% trans %}Redirect URIs{% endtrans %}</td> 43 <td>{{ 'developer.existing_clients.field_uris'|trans }}</td>
43 <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td> 44 <td><strong><code>{{ client.redirectUris|json_encode() }}</code></strong></td>
44 </tr> 45 </tr>
45 <tr> 46 <tr>
46 <td>{% trans %}Grant type allowed{% endtrans %}</td> 47 <td>{{ 'developer.existing_clients.field_grant_types'|trans }}</td>
47 <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td> 48 <td><strong><code>{{ client.allowedGrantTypes|json_encode() }}</code></strong></td>
48 </tr> 49 </tr>
49 </table> 50 </table>
50 <p> 51 <p>
51 {% trans %}You have the ability to remove this client. This action is IRREVERSIBLE !{% endtrans %}<br/> 52 {{ 'developer.remove.warn_message_1'|trans }}<br/>
52 {% trans %}If you remove it, every app configured with that client won't be able to auth on your wallabag.{% endtrans %}<br/> 53 {{ 'developer.remove.warn_message_2'|trans }}<br/>
53 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{% trans %}Remove this client{% endtrans %}</a> 54 <a class="waves-effect waves-light red btn" href="{{ path('developer_delete_client', {'id': client.id}) }}">{{ 'developer.remove.action'|trans }}</a>
54 </p> 55 </p>
55 </div> 56 </div>
56 </li> 57 </li>
57 {% endfor %} 58 {% endfor %}
58 </ul> 59 </ul>
59 {% else %} 60 {% else %}
60 {% trans %}No client yet.{% endtrans %} 61 {{ 'developer.existing_clients.no_client'|trans }}
61 {% endif %} 62 {% endif %}
62 </div> 63 </div>
63 64
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig
index c002c4c3..1c5e2aab 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/edit.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Edit an entry{% endtrans %}{% endblock %} 3{% block title %}{{ 'entry.edit.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 6
@@ -10,7 +10,6 @@
10 10
11 <form name="entry" method="post" action=""> 11 <form name="entry" method="post" action="">
12 <div class="card-content"> 12 <div class="card-content">
13
14 {% if form_errors(form) %} 13 {% if form_errors(form) %}
15 <span class="black-text">{{ form_errors(form) }}</span> 14 <span class="black-text">{{ form_errors(form) }}</span>
16 {% endif %} 15 {% endif %}
@@ -25,16 +24,19 @@
25 </div> 24 </div>
26 25
27 <div class="input-field s12"> 26 <div class="input-field s12">
27 {{ form_label(form.url) }}
28 {{ form_widget(form.url) }}
29 </div>
30
31 <div class="input-field s12">
28 {{ form_widget(form.is_public) }} 32 {{ form_widget(form.is_public) }}
29 {{ form_label(form.is_public) }} 33 {{ form_label(form.is_public) }}
30 </div> 34 </div>
31 <br> 35 <br>
32 <button class="btn waves-effect waves-light" type="submit" name="entry[save]"> 36
33 {% trans %}Save{% endtrans %} 37 {{ form_widget(form.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }}
34 <i class="mdi-content-send right"></i>
35 </button>
36 </div> 38 </div>
37 <div class="hidden">{{ form_rest(form) }}</div> 39 {{ form_rest(form) }}
38 </form> 40 </form>
39 41
40 </div> 42 </div>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
index 371992df..8782d639 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.html.twig
@@ -4,13 +4,13 @@
4 {% set currentRoute = app.request.attributes.get('_route') %} 4 {% set currentRoute = app.request.attributes.get('_route') %}
5 5
6 {% if currentRoute == 'starred' %} 6 {% if currentRoute == 'starred' %}
7 {% trans %}starred{% endtrans %} 7 {{ 'entry.page_titles.starred'|trans }}
8 {% elseif currentRoute == 'archive' %} 8 {% elseif currentRoute == 'archive' %}
9 {% trans %}archive{% endtrans %} 9 {{ 'entry.page_titles.archived'|trans }}
10 {% elseif currentRoute == 'all' %} 10 {% elseif currentRoute == 'all' %}
11 {% trans %}Filtered{% endtrans %} 11 {{ 'entry.page_titles.filtered'|trans }}
12 {% else %} 12 {% else %}
13 {% trans %}unread{% endtrans %} 13 {{ 'entry.page_titles.unread'|trans }}
14 {% endif %} 14 {% endif %}
15 15
16{% endblock %} 16{% endblock %}
@@ -18,7 +18,9 @@
18{% block content %} 18{% block content %}
19 {% block pager %} 19 {% block pager %}
20 <div class="results clearfix"> 20 <div class="results clearfix">
21 <div class="nb-results left">{% transchoice entries.count %}{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.{% endtranschoice %}</div> 21 <div class="nb-results left">
22 {{ 'entry.list.number_on_the_page'|transchoice(entries.count) }}
23 </div>
22 <ul class="pagination right"> 24 <ul class="pagination right">
23 {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %} 25 {% for p in range(1, entries.nbPages) if entries.nbPages > 1 %}
24 <li class="{{ currentPage == p ? 'active':'waves-effect'}}"> 26 <li class="{{ currentPage == p ? 'active':'waves-effect'}}">
@@ -52,9 +54,9 @@
52 <span class="tool reading-time"> 54 <span class="tool reading-time">
53 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %} 55 {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
54 {% if readingTime > 0 %} 56 {% if readingTime > 0 %}
55 {% trans with {'%readingTime%': readingTime } %}estimated reading time: %readingTime% min{% endtrans %} 57 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}
56 {% else %} 58 {% else %}
57 {% trans with {'%inferior%': '<small class="inferieur">&lt;</small>'} %}estimated reading time: %inferior% 1 min{% endtrans %} 59 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
58 {% endif %} 60 {% endif %}
59 </span> 61 </span>
60 </div> 62 </div>
@@ -72,7 +74,7 @@
72 74
73 <div class="estimatedTime grey-text"> 75 <div class="estimatedTime grey-text">
74 <span class="tool reading-time"> 76 <span class="tool reading-time">
75 {% trans %}estimated reading time{% endtrans %}: 77 {{ 'entry.list.reading_time'|trans }}
76 {% if entry.readingTime > 0 %}{{ entry.readingTime }}{% else %}<small class="inferieur">&lt;</small> 1{% endif %} min 78 {% if entry.readingTime > 0 %}{{ entry.readingTime }}{% else %}<small class="inferieur">&lt;</small> 1{% endif %} min
77 </span> 79 </span>
78 </div> 80 </div>
@@ -82,13 +84,15 @@
82 {% endif %} 84 {% endif %}
83 85
84 <div class="card-action"> 86 <div class="card-action">
85 <span class="bold"><a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a></bold> 87 <span class="bold">
88 <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.list.original_article'|trans }}: {{ entry.title|e }} - {{ entry.domainName|removeWww }}" class="tool original grey-text"><span>{{ entry.domainName|removeWww|truncate(18) }}</span></a>
89 </bold>
86 90
87 <ul class="tools links right"> 91 <ul class="tools links right">
88 <li> 92 <li>
89 <a title="{% trans %}Toggle mark as read{% endtrans %}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a> 93 <a title="{{ 'entry.list.toogle_as_read'|trans }}" class="tool grey-text {% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %}" href="{{ path('archive_entry', { 'id': entry.id }) }}"></a>
90 <a title="{% trans %}Toggle favorite{% endtrans %}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a> 94 <a title="{{ 'entry.list.toogle_as_star'|trans }}" class="tool grey-text {% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %}" href="{{ path('star_entry', { 'id': entry.id }) }}"></a>
91 <a title="{% trans %}Delete{% endtrans %}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a> 95 <a title="{{ 'entry.list.delete'|trans }}" class="tool grey-text delete mdi-action-delete " href="{{ path('delete_entry', { 'id': entry.id }) }}"></a>
92 </li> 96 </li>
93 </ul> 97 </ul>
94 </div> 98 </div>
@@ -103,7 +107,7 @@
103 {% if currentRoute == 'homepage' %} 107 {% if currentRoute == 'homepage' %}
104 {% set currentRoute = 'unread' %} 108 {% set currentRoute = 'unread' %}
105 {% endif %} 109 {% endif %}
106 <h4 class="center">{% trans %}Export{% endtrans %}</h4> 110 <h4 class="center">{{ 'entry.list.export_title'|trans }}</h4>
107 <ul> 111 <ul>
108 {% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">EPUB</a></li>{% endif %} 112 {% if craue_setting('export_epub') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'epub' }) }}">EPUB</a></li>{% endif %}
109 {% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">MOBI</a></li>{% endif %} 113 {% if craue_setting('export_mobi') %}<li class="bold"><a class="waves-effect" href="{{ path('export_entries', { 'category': currentRoute, 'format': 'mobi' }) }}">MOBI</a></li>{% endif %}
@@ -119,34 +123,34 @@
119 <div id="filters" class="side-nav fixed right-aligned"> 123 <div id="filters" class="side-nav fixed right-aligned">
120 <form action="{{ path('all') }}"> 124 <form action="{{ path('all') }}">
121 125
122 <h4 class="center">{% trans %}Filters{% endtrans %}</h4> 126 <h4 class="center">{{ 'entry.filters.title'|trans }}</h4>
123 127
124 <div class="row"> 128 <div class="row">
125 <div class="col s12"> 129 <div class="col s12">
126 <label>{% trans %}Status{% endtrans %}</label> 130 <label>{{ 'entry.filters.status_label'|trans }}</label>
127 </div> 131 </div>
128 132
129 <div class="input-field col s6 with-checkbox"> 133 <div class="input-field col s6 with-checkbox">
130 {{ form_widget(form.isArchived) }} 134 {{ form_widget(form.isArchived) }}
131 <label for="entry_filter_isArchived">{% trans %}Archived{% endtrans %}</label> 135 {{ form_label(form.isArchived) }}
132 </div> 136 </div>
133 137
134 <div class="input-field col s6 with-checkbox"> 138 <div class="input-field col s6 with-checkbox">
135 {{ form_widget(form.isStarred) }} 139 {{ form_widget(form.isStarred) }}
136 <label for="entry_filter_isStarred">{% trans %}Starred{% endtrans %}</label> 140 {{ form_label(form.isStarred) }}
137 </div> 141 </div>
138 142
139 <div class="col s12"> 143 <div class="col s12">
140 <label>{% trans %}Preview picture{% endtrans %}</label> 144 <label>{{ 'entry.filters.preview_picture_help'|trans }}</label>
141 </div> 145 </div>
142 146
143 <div class="input-field col s12 with-checkbox"> 147 <div class="input-field col s12 with-checkbox">
144 {{ form_widget(form.previewPicture) }} 148 {{ form_widget(form.previewPicture) }}
145 <label for="entry_filter_previewPicture">{% trans %}Has a preview picture{% endtrans %}</label> 149 {{ form_label(form.previewPicture) }}
146 </div> 150 </div>
147 151
148 <div class="col s12"> 152 <div class="col s12">
149 <label>{% trans %}Language{% endtrans %}</label> 153 {{ form_label(form.language) }}
150 </div> 154 </div>
151 155
152 <div class="input-field col s12"> 156 <div class="input-field col s12">
@@ -154,43 +158,42 @@
154 </div> 158 </div>
155 159
156 <div class="col s12"> 160 <div class="col s12">
157 <label>{% trans %}Reading time in minutes{% endtrans %}</label> 161 {{ form_label(form.readingTime) }}
158 </div> 162 </div>
159 <div class="input-field col s6"> 163 <div class="input-field col s6">
160 {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }} 164 {{ form_widget(form.readingTime.left_number, {'type': 'number'}) }}
161 <label for="entry_filter_readingTime_left_number">{% trans %}from{% endtrans %}</label> 165 <label for="entry_filter_readingTime_left_number">{{ 'entry.filters.reading_time.from'|trans }}</label>
162 </div> 166 </div>
163 <div class="input-field col s6"> 167 <div class="input-field col s6">
164 {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }} 168 {{ form_widget(form.readingTime.right_number, {'type': 'number'}) }}
165 <label for="entry_filter_readingTime_right_number">{% trans %}to{% endtrans %}</label> 169 <label for="entry_filter_readingTime_right_number">{{ 'entry.filters.reading_time.to'|trans }}</label>
166 </div> 170 </div>
167 171
168 <div class="input-field col s12"> 172 <div class="input-field col s12">
169 {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com' | trans} }) }} 173 {{ form_widget(form.domainName, {'type': 'text', 'attr' : {'placeholder': 'website.com'} }) }}
170 <label for="entry_filter_domainName">{% trans %}Domain name{% endtrans %}</label> 174 {{ form_label(form.domainName) }}
171 </div> 175 </div>
172 176
173 <div class="col s12"> 177 <div class="col s12">
174 <label>{% trans %}Creation date{% endtrans %}</label> 178 {{ form_label(form.createdAt) }}
175 </div> 179 </div>
176 180
177 <div class="input-field col s6"> 181 <div class="input-field col s6">
178 {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }} 182 {{ form_widget(form.createdAt.left_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.left_date.vars.value} }) }}
179 <label for="entry_filter_createdAt_left_date" class="active">{% trans %}from{% endtrans %}</label> 183 <label for="entry_filter_createdAt_left_date" class="active">{{ 'entry.filters.created_at.from'|trans }}</label>
180 </div> 184 </div>
181 <div class="input-field col s6"> 185 <div class="input-field col s6">
182 {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }} 186 {{ form_widget(form.createdAt.right_date, {'type': 'date', 'attr': {'class': 'datepicker', 'data-value': form.createdAt.right_date.vars.value} }) }}
183 <label for="entry_filter_createdAt_right_date" class="active">{% trans %}to{% endtrans %}</label> 187 <label for="entry_filter_createdAt_right_date" class="active">{{ 'entry.filters.created_at.to'|trans }}</label>
184 </div> 188 </div>
185 189
186 <div class="col s6"> 190 <div class="col s6">
187 <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{% trans %}Clear{% endtrans %}</a> 191 <a href="#!" class="center waves-effect waves-green btn-flat" id="clear_form_filters">{{ 'entry.filters.action.clear'|trans }}</a>
188 </div> 192 </div>
189 193
190 <div class="col s6"> 194 <div class="col s6">
191 <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{% trans %}Filter{% endtrans %}</button> 195 <button class="btn waves-effect waves-light" type="submit" id="submit-filter" value="filter">{{ 'entry.filters.action.filter'|trans }}</button>
192 </div> 196 </div>
193
194 </div> 197 </div>
195 198
196 </form> 199 </form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig
index a39a8dc3..98f7194c 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entries.xml.twig
@@ -18,9 +18,9 @@
18 <description> 18 <description>
19 <![CDATA[ 19 <![CDATA[
20 {%- if entry.readingTime > 0 -%} 20 {%- if entry.readingTime > 0 -%}
21 {% trans %}estimated reading time :{% endtrans %} {{ entry.readingTime }} min 21 {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }}
22 {%- else -%} 22 {%- else -%}
23 {% trans %}estimated reading time :{% endtrans %} &lt; 1 min 23 {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
24 {%- endif %} 24 {%- endif %}
25 25
26 {{ entry.content|raw -}} 26 {{ entry.content|raw -}}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
index 6f33da23..032d2d9b 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/entry.html.twig
@@ -2,6 +2,8 @@
2 2
3{% block title %}{{ entry.title|raw }} ({{ entry.domainName|removeWww }}){% endblock %} 3{% block title %}{{ entry.title|raw }} ({{ entry.domainName|removeWww }}){% endblock %}
4 4
5{% block body_class %}entry{% endblock %}
6
5{% block menu %} 7{% block menu %}
6 <div class="progress"> 8 <div class="progress">
7 <div class="determinate"></div> 9 <div class="determinate"></div>
@@ -17,12 +19,12 @@
17 </ul> 19 </ul>
18 <ul class="right"> 20 <ul class="right">
19 <li> 21 <li>
20 <a class="waves-effect" title="{% trans %}Mark as read{% endtrans %}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> 22 <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead">
21 <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> 23 <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i>
22 </a> 24 </a>
23 </li> 25 </li>
24 <li> 26 <li>
25 <a class="waves-effect" title="{% trans %}Favorite{% endtrans %}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> 27 <a class="waves-effect" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
26 <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> 28 <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i>
27 </a> 29 </a>
28 </li> 30 </li>
@@ -38,7 +40,7 @@
38 <li class="bold border-bottom hide-on-med-and-down"> 40 <li class="bold border-bottom hide-on-med-and-down">
39 <a class="waves-effect collapsible-header" href="{{ path('homepage') }}"> 41 <a class="waves-effect collapsible-header" href="{{ path('homepage') }}">
40 <i class="mdi-action-exit-to-app small"></i> 42 <i class="mdi-action-exit-to-app small"></i>
41 <span>{% trans %}back{% endtrans %}</span> 43 <span>{{ 'entry.view.left_menu.back_to_homepage'|trans }}</span>
42 </a> 44 </a>
43 <div class="collapsible-body"></div> 45 <div class="collapsible-body"></div>
44 </li> 46 </li>
@@ -46,38 +48,38 @@
46 <li class="bold border-bottom hide-on-med-and-down"> 48 <li class="bold border-bottom hide-on-med-and-down">
47 <a class="waves-effect collapsible-header" href="{{ entry.url|e }}"> 49 <a class="waves-effect collapsible-header" href="{{ entry.url|e }}">
48 <i class="mdi-content-link small"></i> 50 <i class="mdi-content-link small"></i>
49 <span>{% trans %}original article{% endtrans %}</span> 51 <span>{{ 'entry.view.left_menu.view_original_article'|trans }}</span>
50 </a> 52 </a>
51 <div class="collapsible-body"></div> 53 <div class="collapsible-body"></div>
52 </li> 54 </li>
53 55
54 <li class="bold hide-on-med-and-down"> 56 <li class="bold hide-on-med-and-down">
55 <a class="waves-effect collapsible-header" title="{% trans %}Re-fetch content{% endtrans %}" href="{{ path('reload_entry', { 'id': entry.id }) }}" id="reload"> 57 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.re_fetch_content'|trans }}" href="{{ path('reload_entry', { 'id': entry.id }) }}" id="reload">
56 <i class="mdi-action-autorenew small"></i> 58 <i class="mdi-action-autorenew small"></i>
57 <span>{% trans %}Re-fetch content{% endtrans %}</span> 59 <span>{{ 'entry.view.left_menu.re_fetch_content'|trans }}</span>
58 </a> 60 </a>
59 <div class="collapsible-body"></div> 61 <div class="collapsible-body"></div>
60 </li> 62 </li>
61 63
62 <li class="bold hide-on-med-and-down"> 64 <li class="bold hide-on-med-and-down">
63 <a class="waves-effect collapsible-header" title="{% trans %}Mark as read{% endtrans %}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead"> 65 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_read'|trans }}" href="{{ path('archive_entry', { 'id': entry.id }) }}" id="markAsRead">
64 <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i> 66 <i class="{% if entry.isArchived == 0 %}mdi-action-done{% else %}mdi-content-redo{% endif %} small"></i>
65 <span>{% if entry.isArchived == 0 %}{% trans %}Mark as read{% endtrans %}{% else %}{% trans %}Mark as unread{% endtrans %}{% endif %}</span> 67 <span>{% if entry.isArchived == 0 %}{{ 'entry.view.left_menu.set_as_read'|trans }}{% else %}{{ 'entry.view.left_menu.set_as_unread'|trans }}{% endif %}</span>
66 </a> 68 </a>
67 <div class="collapsible-body"></div> 69 <div class="collapsible-body"></div>
68 </li> 70 </li>
69 71
70 <li class="bold hide-on-med-and-down"> 72 <li class="bold hide-on-med-and-down">
71 <a class="waves-effect collapsible-header" title="{% trans %}Favorite{% endtrans %}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav"> 73 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.set_as_favorite'|trans }}" href="{{ path('star_entry', { 'id': entry.id }) }}" id="setFav">
72 <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i> 74 <i class="{% if entry.isStarred == 0 %}mdi-action-favorite-outline{% else %}mdi-action-favorite{% endif %} small"></i>
73 <span>{% trans %}Favorite{% endtrans %}</span> 75 <span>{{ 'entry.view.left_menu.set_as_favorite'|trans }}</span>
74 </a> 76 </a>
75 <div class="collapsible-body"></div> 77 <div class="collapsible-body"></div>
76 </li> 78 </li>
77 <li class="bold border-bottom hide-on-med-and-down"> 79 <li class="bold border-bottom hide-on-med-and-down">
78 <a class="waves-effect collapsible-header" title="{% trans %}Delete{% endtrans %}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> 80 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}">
79 <i class="mdi-action-delete small"></i> 81 <i class="mdi-action-delete small"></i>
80 <span>{% trans %}Delete{% endtrans %}</span> 82 <span>{{ 'entry.view.left_menu.delete'|trans }}</span>
81 </a> 83 </a>
82 <div class="collapsible-body"></div> 84 <div class="collapsible-body"></div>
83 </li> 85 </li>
@@ -85,7 +87,7 @@
85 <li class="bold border-bottom hide-on-med-and-down"> 87 <li class="bold border-bottom hide-on-med-and-down">
86 <a class="waves-effect collapsible-header" id="nav-btn-add-tag"> 88 <a class="waves-effect collapsible-header" id="nav-btn-add-tag">
87 <i class="mdi-action-label-outline small"></i> 89 <i class="mdi-action-label-outline small"></i>
88 <span>{% trans %}Add a tag{% endtrans %}</span> 90 <span>{{ 'entry.view.left_menu.add_a_tag'|trans }}</span>
89 </a> 91 </a>
90 <div class="collapsible-body"></div> 92 <div class="collapsible-body"></div>
91 </li> 93 </li>
@@ -93,7 +95,7 @@
93 <li class="bold"> 95 <li class="bold">
94 <a class="waves-effect collapsible-header"> 96 <a class="waves-effect collapsible-header">
95 <i class="mdi-social-share small"></i> 97 <i class="mdi-social-share small"></i>
96 <span>{% trans %}Share{% endtrans %}</span> 98 <span>{{ 'entry.view.left_menu.share_content'|trans }}</span>
97 </a> 99 </a>
98 <div class="collapsible-body"> 100 <div class="collapsible-body">
99 <ul> 101 <ul>
@@ -114,7 +116,7 @@
114 {% if craue_setting('share_diaspora') %} 116 {% if craue_setting('share_diaspora') %}
115 <li> 117 <li>
116 <a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora}"> 118 <a href="{{ craue_setting('diaspora_url') }}/bookmarklet?url={{ entry.url|url_encode }}&title={{ entry.title|url_encode }}&notes=&v=1&noui=1&jump=doclose" target="_blank" class="tool diaspora icon-image icon-image--diaspora" title="diaspora}">
117 <span>diaspora}</span> 119 <span>diaspora*</span>
118 </a> 120 </a>
119 </li> 121 </li>
120 {% endif %} 122 {% endif %}
@@ -127,8 +129,8 @@
127 {% endif %} 129 {% endif %}
128 {% if craue_setting('share_mail') %} 130 {% if craue_setting('share_mail') %}
129 <li> 131 <li>
130 <a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{% trans %}Email{% endtrans %}"> 132 <a href="mailto:?subject={{ entry.title|url_encode }}&amp;body={{ entry.url|url_encode }}%20via%20@wallabagapp" class="tool email icon icon-mail" title="{{ 'entry.view.left_menu.share_email_label'|trans }}">
131 <span>{% trans %}Email{% endtrans %}</span> 133 <span>{{ 'entry.view.left_menu.share_email_label'|trans }}</span>
132 </a> 134 </a>
133 </li> 135 </li>
134 {% endif %} 136 {% endif %}
@@ -139,7 +141,7 @@
139 <li class="bold"> 141 <li class="bold">
140 <a class="waves-effect collapsible-header"> 142 <a class="waves-effect collapsible-header">
141 <i class="mdi-file-file-download small"></i> 143 <i class="mdi-file-file-download small"></i>
142 <span>{% trans %}Download{% endtrans %}</span> 144 <span>{{ 'entry.view.left_menu.download'|trans }}</span>
143 </a> 145 </a>
144 <div class="collapsible-body"> 146 <div class="collapsible-body">
145 <ul> 147 <ul>
@@ -155,40 +157,33 @@
155 </li> 157 </li>
156 158
157 <li class="bold hide-on-large-only"> 159 <li class="bold hide-on-large-only">
158 <a class="waves-effect collapsible-header" title="{% trans %}Delete{% endtrans %}" href="{{ path('delete_entry', { 'id': entry.id }) }}"> 160 <a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.delete'|trans }}" href="{{ path('delete_entry', { 'id': entry.id }) }}">
159 <i class="mdi-action-delete small"></i> 161 <i class="mdi-action-delete small"></i>
160 <span>{% trans %}Delete{% endtrans %}</span> 162 <span>{{ 'entry.view.left_menu.delete'|trans }}</span>
161 </a> 163 </a>
162 <div class="collapsible-body"></div> 164 <div class="collapsible-body"></div>
163 </li> 165 </li>
164 166
165 <li class="bold"> 167 <li class="bold">
166 <a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{% trans %}Does this article appear wrong?{% endtrans %}"> 168 <a class="waves-effect collapsible-header" href="mailto:hello@wallabag.org?subject=Wrong%20display%20in%20wallabag&amp;body={{ entry.url|url_encode }}" title="{{ 'entry.view.left_menu.problem.description'|trans }}">
167 <i class="mdi-alert-error small"></i> 169 <i class="mdi-alert-error small"></i>
168 <span>{% trans %}Problems?{% endtrans %}</span> 170 <span>{{ 'entry.view.left_menu.problem.label'|trans }}</span>
169 </a> 171 </a>
170 <div class="collapsible-body"></div> 172 <div class="collapsible-body"></div>
171 </li> 173 </li>
172 174
173 </ul> 175 </ul>
174 176
175<style>
176main {
177 padding: 0;
178}
179</style>
180
181{% endblock %} 177{% endblock %}
182 178
183{% block content %} 179{% block content %}
184 <div id="article"> 180 <div id="article">
185 <header class="mbm"> 181 <header class="mbm">
186 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{% trans %}Edit title{% endtrans %}">✎</a></h1> 182 <h1>{{ entry.title|raw }} <a href="{{ path('edit', { 'id': entry.id }) }}" title="{{ 'entry.view.edit_title'|trans }}">✎</a></h1>
187 </header> 183 </header>
188 <aside> 184 <aside>
189 <a href="{{ entry.url|e }}" target="_blank" title="{% trans %}original{% endtrans %} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a> 185 <a href="{{ entry.url|e }}" target="_blank" title="{{ 'entry.view.original_article'|trans }} : {{ entry.title|e }}" class="tool link mdi-content-link"> <span>{{ entry.domainName|removeWww }}</span></a>
190 {% set nbAnnotations = entry.annotations | length %} 186 <span class="tool link mdi-communication-comment"> {{ 'entry.view.annotations_on_the_entry'|transchoice(entry.annotations | length) }}</span>
191 <span class="tool link mdi-communication-comment"> {% transchoice nbAnnotations %}{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations{% endtranschoice %}</span>
192 <div id="list"> 187 <div id="list">
193 {% for tag in entry.tags %} 188 {% for tag in entry.tags %}
194 <div class="chip"> 189 <div class="chip">
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig
index 95ed0785..03768a3d 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Save new entry{% endtrans %}{% endblock %} 3{% block title %}{{ 'entry.new.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} 6 {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }}
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig
index f1e56412..0cf4fb74 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Entry/new_form.html.twig
@@ -7,7 +7,7 @@
7 <span class="black-text">{{ form_errors(form.url) }}</span> 7 <span class="black-text">{{ form_errors(form.url) }}</span>
8 {% endif %} 8 {% endif %}
9 9
10 {{ form_widget(form.url, { 'attr': {'autocomplete': 'off', 'placeholder': 'http://website'} }) }} 10 {{ form_widget(form.url, { 'attr': {'autocomplete': 'off', 'placeholder': 'entry.new.placeholder'} }) }}
11 11
12 <div class="hidden">{{ form_rest(form) }}</div> 12 {{ form_rest(form) }}
13</form> 13</form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig
index 1368bb09..4b1fdcce 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/about.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}About{% endtrans %}{% endblock %} 3{% block title %}{{ 'about.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 6
@@ -11,56 +11,55 @@
11 <div class="row"> 11 <div class="row">
12 <div class="div_tabs col s12"> 12 <div class="div_tabs col s12">
13 <ul class="tabs"> 13 <ul class="tabs">
14 <li class="tab col s3"><a class="active" href="#set1">{% trans %}Who is behind wallabag{% endtrans %}</a></li> 14 <li class="tab col s3"><a class="active" href="#set1">{{ 'about.top_menu.who_behind_wallabag'|trans }}</a></li>
15 <li class="tab col s3"><a href="#set2">{% trans %}Getting help{% endtrans %}</a></li> 15 <li class="tab col s3"><a href="#set2">{{ 'about.top_menu.getting_help'|trans }}</a></li>
16 <li class="tab col s3"><a href="#set3">{% trans %}Helping wallabag{% endtrans %}</a></li> 16 <li class="tab col s3"><a href="#set3">{{ 'about.top_menu.helping'|trans }}</a></li>
17 <li class="tab col s3"><a href="#set4">{% trans %}Contributors{% endtrans %}</a></li> 17 <li class="tab col s3"><a href="#set4">{{ 'about.top_menu.contributors'|trans }}</a></li>
18 <li class="tab col s3"><a href="#set5">{% trans %}Third-party libraries{% endtrans %}</a></li> 18 <li class="tab col s3"><a href="#set5">{{ 'about.top_menu.third_party'|trans }}</a></li>
19 </ul> 19 </ul>
20 </div> 20 </div>
21 21
22 <div id="set1" class="col s12"> 22 <div id="set1" class="col s12">
23 <dt>{% trans %}Developed by{% endtrans %}</dt> 23 <dt>{{ 'about.who_behind_wallabag.developped_by'|trans }}</dt>
24 <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://cdetc.fr">{% trans %}website{% endtrans %}</a></dd> 24 <dd><a href="mailto:nicolas@loeuillet.org">Nicolas Lœuillet</a> — <a href="http://www.loeuillet.org">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
25 <dd>Thomas Citharel — <a href="https://tcit.fr">{% trans %}website{% endtrans %}</a></dd> 25 <dd>Thomas Citharel — <a href="https://tcit.fr">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
26 <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{% trans %}website{% endtrans %}</a></dd> 26 <dd>Jérémy Benoist — <a href="http://www.j0k3r.net">{{ 'about.who_behind_wallabag.website'|trans }}</a></dd>
27 <dt>{% trans %}And many others contributors ♥{% endtrans %} <a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}on GitHub{% endtrans %}</a></dt> 27 <dt>{{ 'about.who_behind_wallabag.many_contributors'|trans|raw }}</dt>
28 <dt>{% trans %}Project website{% endtrans %}</dt> 28 <dt>{{ 'about.who_behind_wallabag.project_website'|trans }}</dt>
29 <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd> 29 <dd><a href="https://www.wallabag.org">https://www.wallabag.org</a></dd>
30 <dt>{% trans %}License{% endtrans %}: <a href="http://en.wikipedia.org/wiki/MIT_License">MIT</a></dt> 30 <dt>{{ 'about.who_behind_wallabag.license'|trans }}: <a href="https://en.wikipedia.org/wiki/MIT_License">MIT</a></dt>
31 <dt>{% trans %}Version{% endtrans %}: {{ version }}</dt> 31 <dt>{{ 'about.who_behind_wallabag.version'|trans }}: {{ version }}</dt>
32 </div> 32 </div>
33 33
34 <div id="set2" class="col s12"> 34 <div id="set2" class="col s12">
35 <dl> 35 <dl>
36 <dt>{% trans %}Documentation{% endtrans %}</dt> 36 <dt>{{ 'about.getting_help.documentation'|trans }}</dt>
37 <dd><a href="https://doc.wallabag.org/en">english</a></dd> 37 <dd><a href="http://doc.wallabag.org/en/v2/">english</a></dd>
38 <dd><a href="https://doc.wallabag.org/fr">français</a></dd> 38 <dd><a href="http://doc.wallabag.org/fr/v2/">français</a></dd>
39 <dd><a href="https://doc.wallabag.org/de">deutsch</a></dd>
40 39
41 <dt>{% trans %}Bug reports{% endtrans %}</dt> 40 <dt>{{ 'about.getting_help.bug_reports'|trans }}</dt>
42 <dd><a href="https://support.wallabag.org">{% trans %}On our support website{% endtrans %}</a> {% trans %}or{% endtrans %} <a href="https://github.com/wallabag/wallabag/issues">{% trans %}on GitHub{% endtrans %}</a></dd> 41 <dd>{{ 'about.getting_help.support'|trans|raw }}</dd>
43 </dl> 42 </dl>
44 </div> 43 </div>
45 44
46 <div id="set3" class="col s12"> 45 <div id="set3" class="col s12">
47 <dl> 46 <dl>
48 <dt>{% trans %}wallabag is free and opensource. You can help us:{% endtrans %}</dt> 47 <dt>{{ 'about.helping.description'|trans }}</dt>
49 <dd>{% trans %}by contributing to the project:{% endtrans %} <a href="https://github.com/wallabag/wallabag/issues/1254">{% trans %}an issue lists all our needs{% endtrans %}</a></dd> 48 <dd>{{ 'about.helping.by_contributing_2'|trans }} <a href="https://github.com/wallabag/wallabag/issues/1254">{{ 'about.helping.by_contributing'|trans }}</a></dd>
50 <dd><a href="{{ paypal_url }}">{% trans %}via Paypal{% endtrans %}</a></dd> 49 <dd><a href="{{ paypal_url }}">{{ 'about.helping.by_paypal'|trans }}</a></dd>
51 </dl> 50 </dl>
52 </div> 51 </div>
53 52
54 <div id="set4" class="col s12"> 53 <div id="set4" class="col s12">
55 <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{% trans %}Thank you to contributors on wallabag web application{% endtrans %}</a></p> 54 <p><a href="https://github.com/wallabag/wallabag/graphs/contributors">{{ 'about.contributors.description'|trans }}</a></p>
56 </div> 55 </div>
57 56
58 <div id="set5" class="col s12"> 57 <div id="set5" class="col s12">
59 <p>{% trans %}Here are the list of third-party libraries used in wallabag (with their licenses):{% endtrans %}</p> 58 <p>{{ 'about.third_party.description'|trans }}</p>
60 <table> 59 <table class="striped">
61 <tr> 60 <tr>
62 <th>{% trans %}Package{% endtrans %}</th> 61 <th>{{ 'about.third_party.package'|trans }}</th>
63 <th>{% trans %}License{% endtrans %}</th> 62 <th>{{ 'about.third_party.license'|trans }}</th>
64 </tr> 63 </tr>
65 <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr> 64 <tr><td>behat/transliterator</td><td>Artistic 1.0</td></tr>
66 <tr><td>CraueConfigBundle</td><td>MIT</td></tr> 65 <tr><td>CraueConfigBundle</td><td>MIT</td></tr>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig
index e2795409..4354a6b7 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/howto.html.twig
@@ -1,44 +1,40 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}howto{% endtrans %}{% endblock %} 3{% block title %}{{ 'howto.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 6
7 <div class="row"> 7 <div class="row">
8 <div class="col s12"> 8 <div class="col s12">
9 <div class="card-panel settings"> 9 <div class="card-panel settings">
10 <p>{{ 'howto.page_description'|trans }}</p>
10 11
11 <div class="row"> 12 <div class="row">
12 <div class="div_tabs col s12">
13 <ul class="tabs">
14 <li class="tab col s3"><a class="active" href="#set1">{% trans %}Form{% endtrans %}</a></li>
15 <li class="tab col s3"><a href="#set2">{% trans %}Browser addons{% endtrans %}</a></li>
16 <li class="tab col s3"><a href="#set3">{% trans %}Mobile apps{% endtrans %}</a></li>
17 <li class="tab col s3"><a href="#set4">{% trans %}Bookmarklet{% endtrans %}</a></li>
18 </ul>
19 </div>
20 13
21 <div id="set1" class="col s12"> 14 <div class="col s12">
22 <a href="{{ path('new') }}">{% trans %}Thanks to this form{% endtrans %}</a> 15 <a href="{{ path('new') }}">{{ 'howto.form.description'|trans }}</a>
23 </div> 16 </div>
24 17
25 <div id="set2" class="col s12"> 18 <div class="col s12">
19 <h5>{{ 'howto.top_menu.browser_addons'|trans }}</h5>
26 <ul> 20 <ul>
27 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag/" target="_blank">{% trans %}Standard Firefox Add-On{% endtrans %}</a></li> 21 <li><a href="https://addons.mozilla.org/firefox/addon/wallabag-v2/" target="_blank">{{ 'howto.browser_addons.firefox'|trans }}</a></li>
28 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{% trans %}Chrome Extension{% endtrans %}</a></li> 22 <li><a href="https://chrome.google.com/webstore/detail/wallabag/bepdcjnnkglfjehplaogpoonpffbdcdj" target="_blank">{{ 'howto.browser_addons.chrome'|trans }}</a></li>
29 </ul> 23 </ul>
30 </div> 24 </div>
31 25
32 <div id="set3" class="col s12"> 26 <div class="col s12">
27 <h5>{{ 'howto.top_menu.mobile_apps'|trans }}</h5>
33 <ul> 28 <ul>
34 <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">via F-Droid</a> {% trans %} or {% endtrans %} <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">via Google Play</a></li> 29 <li>Android: <a href="https://f-droid.org/app/fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_f_droid'|trans }}</a> / <a href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" target="_blank">{{ 'howto.mobile_apps.android.via_google_play'|trans }}</a></li>
35 <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{% trans %}download the application{% endtrans %}</a></li> 30 <li>iOS: <a href="https://itunes.apple.com/app/wallabag/id828331015?mt=8" target="_blank">{{ 'howto.mobile_apps.ios'|trans }}</a></li>
36 <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{% trans %}download the application{% endtrans %}</a></li> 31 <li>Windows Phone: <a href="http://www.windowsphone.com/en-US/store/app/wallabag/d5226cf1-f422-4e00-996c-88e9c5233332" target="_blank">{{ 'howto.mobile_apps.windows'|trans }}</a></li>
37 </ul> 32 </ul>
38 </div> 33 </div>
39 34
40 <div id="set4" class="col s12"> 35 <div class="col s12">
41 {% trans %}Drag &amp; drop this link to your bookmarks bar:{% endtrans %} 36 <h5>{{ 'howto.top_menu.bookmarklet'|trans }}</h5>
37 {{ 'howto.bookmarklet.description'|trans }}
42 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %} 38 {% include 'WallabagCoreBundle::_bookmarklet.html.twig' %}
43 </div> 39 </div>
44 40
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig
index 03754d38..706c4a79 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Static/quickstart.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Quickstart{% endtrans %}{% endblock %} 3{% block title %}{{ 'quickstart.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 6
@@ -9,56 +9,63 @@
9 <div class="card-panel settings"> 9 <div class="card-panel settings">
10 10
11 <div class="row"> 11 <div class="row">
12 <h3>{% trans %}Welcome to wallabag!{% endtrans %}</h3> 12 <h3>{{ 'quickstart.intro.title'|trans }}</h3>
13 <p>{% trans %}We'll accompany you to visit wallabag and show you some features which can interess you.{% endtrans %}</p> 13 <p>{{ 'quickstart.intro.paragraph_1'|trans }}</p>
14 <p>{% trans %}Follow us!{% endtrans %}</p> 14 <p>{{ 'quickstart.intro.paragraph_2'|trans }}</p>
15 <h4>{% trans %}Configure the application{% endtrans %}</h4> 15
16 <h4>{{ 'quickstart.configure.title'|trans }}</h4>
16 <ul> 17 <ul>
17 <li><a href="{{ path('config') }}">{% trans %}Change language and design{% endtrans %}</a></li> 18 <li><a href="{{ path('config') }}">{{ 'quickstart.configure.language'|trans }}</a></li>
18 <li><a href="{{ path('config') }}#set2">{% trans %}Enable RSS feeds{% endtrans %}</a></li> 19 <li><a href="{{ path('config') }}#set2">{{ 'quickstart.configure.rss'|trans }}</a></li>
19 <li><a href="{{ path('config') }}#set5">{% trans %}Write rules to automatically tag your articles{% endtrans %}</a></li> 20 <li><a href="{{ path('config') }}#set5">{{ 'quickstart.configure.tagging_rules'|trans }}</a></li>
20 </ul> 21 </ul>
22
21 {% if is_granted('ROLE_SUPER_ADMIN') %} 23 {% if is_granted('ROLE_SUPER_ADMIN') %}
22 <h4>{% trans %}Administration{% endtrans %}</h4> 24 <h4>{{ 'quickstart.admin.title'|trans }}</h4>
23 <p>{% trans %}As a administrator, you have privileges on wallabag. You can:{% endtrans %}</p> 25 <p>{{ 'quickstart.admin.description'|trans }}</p>
24 <ul> 26 <ul>
25 <li><a href="{{ path('config') }}#set6">{% trans %}Create a new user{% endtrans %}</a></li> 27 <li><a href="{{ path('config') }}#set6">{{ 'quickstart.admin.new_user'|trans }}</a></li>
26 <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{% trans %}Configure analytics{% endtrans %}</a></li> 28 <li><a href="{{ path('craue_config_settings_modify') }}#set-analytics">{{ 'quickstart.admin.analytics'|trans }}</a></li>
27 <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{% trans %}Enable some parameters about article sharing{% endtrans %}</a></li> 29 <li><a href="{{ path('craue_config_settings_modify') }}#set-entry">{{ 'quickstart.admin.sharing'|trans }}</a></li>
28 <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{% trans %}Configure export{% endtrans %}</a></li> 30 <li><a href="{{ path('craue_config_settings_modify') }}#set-export">{{ 'quickstart.admin.export'|trans }}</a></li>
29 <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{% trans %}Configure import{% endtrans %}</a></li> 31 <li><a href="{{ path('craue_config_settings_modify') }}#set-import">{{ 'quickstart.admin.import'|trans }}</a></li>
30 </ul> 32 </ul>
31 {% endif %} 33 {% endif %}
32 <h4>{% trans %}First steps{% endtrans %}</h4> 34
35 <h4>{{ 'quickstart.first_steps.title'|trans }}</h4>
33 <ul> 36 <ul>
34 <li><a href="{{ path('new') }}">{% trans %}Save your first article{% endtrans %}</a></li> 37 <li><a href="{{ path('new') }}">{{ 'quickstart.first_steps.new_article'|trans }}</a></li>
35 <li><a href="{{ path('unread') }}">{% trans %}And classify it!{% endtrans %}</a></li> 38 <li><a href="{{ path('unread') }}">{{ 'quickstart.first_steps.unread_articles'|trans }}</a></li>
36 </ul> 39 </ul>
37 <h4>{% trans %}Migrate from an existing service{% endtrans %}</h4> 40
38 <p>{% trans %}You're using an other service? We'll help you to retrieve your data on wallabag.{% endtrans %}</p> 41 <h4>{{ 'quickstart.migrate.title'|trans }}</h4>
42 <p>{{ 'quickstart.migrate.description'|trans }}</p>
39 <ul> 43 <ul>
40 <li><a href="{{ path('import_pocket') }}">{% trans %}Migrate from Pocket{% endtrans %}</a></li> 44 <li><a href="{{ path('import_pocket') }}">{{ 'quickstart.migrate.pocket'|trans }}</a></li>
41 <li><a href="{{ path('import_wallabag_v1') }}">{% trans %}Migrate from wallabag v1{% endtrans %}</a></li> 45 <li><a href="{{ path('import_wallabag_v1') }}">{{ 'quickstart.migrate.wallabag_v1'|trans }}</a></li>
42 <li><a href="{{ path('import_wallabag_v2') }}">{% trans %}Migrate from wallabag v2{% endtrans %}</a></li> 46 <li><a href="{{ path('import_wallabag_v2') }}">{{ 'quickstart.migrate.wallabag_v2'|trans }}</a></li>
43 </ul> 47 </ul>
44 <h4>{% trans %}Developers{% endtrans %}</h4> 48
49 <h4>{{ 'quickstart.developer.title'|trans }}</h4>
45 <ul> 50 <ul>
46 <li><a href="{{ path('developer') }}">{% trans %}Create your third application{% endtrans %}</a></li> 51 <li><a href="{{ path('developer') }}">{{ 'quickstart.developer.create_application'|trans }}</a></li>
47 </ul> 52 </ul>
48 <h4>{% trans %}Full documentation{% endtrans %}</h4> 53
54 <h4>{{ 'quickstart.docs.title'|trans }}</h4>
49 <ul> 55 <ul>
50 <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{% trans %}Annotate your article{% endtrans %}</a></li> 56 <li><a href="http://doc.wallabag.org/en/v2/user/annotations.html">{{ 'quickstart.docs.annotate'|trans }}</a></li>
51 <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{% trans %}Convert your articles into ePUB or PDF{% endtrans %}</a></li> 57 <li><a href="http://doc.wallabag.org/en/v2/user/download_articles.html">{{ 'quickstart.docs.export'|trans }}</a></li>
52 <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{% trans %}See how you can look for an article by using search engine and filters{% endtrans %}</a></li> 58 <li><a href="http://doc.wallabag.org/en/v2/user/filters.html">{{ 'quickstart.docs.search_filters'|trans }}</a></li>
53 <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{% trans %}What can I do if an article encounters errors during fetching?{% endtrans %}</a></li> 59 <li><a href="http://doc.wallabag.org/en/v2/user/errors_during_fetching.html">{{ 'quickstart.docs.fetching_errors'|trans }}</a></li>
54 <li><a href="http://doc.wallabag.org/">{% trans %}And so many other articles!{% endtrans %}</a></li> 60 <li><a href="http://doc.wallabag.org/">{{ 'quickstart.docs.all_docs'|trans }}</a></li>
55 </ul> 61 </ul>
56 <h4>{% trans %}Support{% endtrans %}</h4> 62
57 <p>{% trans %}If you need some help, we are here for you.{% endtrans %}</p> 63 <h4>{{ 'quickstart.support.title'|trans }}</h4>
64 <p>{{ 'quickstart.support.description'|trans }}</p>
58 <ul> 65 <ul>
59 <li><a href="https://github.com/wallabag/wallabag/issues/">{% trans %}On GitHub{% endtrans %}</a></li> 66 <li><a href="https://github.com/wallabag/wallabag/issues/">{{ 'quickstart.support.github'|trans }}</a></li>
60 <li><a href="mailto:hello@wallabag.org">{% trans %}By email{% endtrans %}</a></li> 67 <li><a href="mailto:hello@wallabag.org">{{ 'quickstart.support.email'|trans }}</a></li>
61 <li><a href="https://gitter.im/wallabag/wallabag">{% trans %}On Gitter{% endtrans %}</a></li> 68 <li><a href="https://gitter.im/wallabag/wallabag">{{ 'quickstart.support.gitter'|trans }}</a></li>
62 </ul> 69 </ul>
63 </div> 70 </div>
64 71
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig
index 79310307..6e552560 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/new_form.html.twig
@@ -9,5 +9,5 @@
9 9
10 {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }} 10 {{ form_widget(form.label, { 'attr': {'autocomplete': 'off'} }) }}
11 11
12 <div class="hidden">{{ form_rest(form) }}</div> 12 {{ form_rest(form) }}
13</form> 13</form>
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig
index 19754d41..6b583689 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/Tag/tags.html.twig
@@ -1,10 +1,10 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title "Tags" %} 3{% block title %}{{ 'tag.page_title'|trans }}{% endblock %}
4 4
5{% block content %} 5{% block content %}
6 <div class="results clearfix"> 6 <div class="results clearfix">
7 <div class="nb-results left">{% transchoice tags.count %}{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.{% endtranschoice %}</div> 7 <div class="nb-results left">{{ 'tag.list.number_on_the_page'|transchoice(tags.count) }}</div>
8 </div> 8 </div>
9 <br /> 9 <br />
10 <ul class="row data"> 10 <ul class="row data">
diff --git a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
index f5d03084..75170f91 100644
--- a/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
+++ b/src/Wallabag/CoreBundle/Resources/views/themes/material/layout.html.twig
@@ -31,7 +31,7 @@
31 <ul id="slide-out" class="side-nav fixed"> 31 <ul id="slide-out" class="side-nav fixed">
32 {% block logo %} 32 {% block logo %}
33 <li class="logo border-bottom"> 33 <li class="logo border-bottom">
34 <a title="{% trans %}Back to unread articles{% endtrans %}" href="{{ path('unread') }}"> 34 <a title="{{ 'menu.left.back_to_unread'|trans }}" href="{{ path('unread') }}">
35 <img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-square.png') }}" alt="wallabag logo" /> 35 <img src="{{ asset('bundles/wallabagcore/themes/material/img/logo-square.png') }}" alt="wallabag logo" />
36 </a> 36 </a>
37 </li> 37 </li>
@@ -39,19 +39,41 @@
39 39
40 {% set currentRoute = app.request.attributes.get('_route') %} 40 {% set currentRoute = app.request.attributes.get('_route') %}
41 41
42 <li class="bold {% if currentRoute == 'unread' or currentRoute == 'homepage' %}active{% endif %}"><a class="waves-effect" href="{{ path('unread') }}">{% trans %}unread{% endtrans %}</a></li> 42 <li class="bold {% if currentRoute == 'unread' or currentRoute == 'homepage' %}active{% endif %}">
43 <li class="bold {% if currentRoute == 'starred' %}active{% endif %}"><a class="waves-effect" href="{{ path('starred') }}">{% trans %}starred{% endtrans %}</a></li> 43 <a class="waves-effect" href="{{ path('unread') }}">{{ 'menu.left.unread'|trans }}</a>
44 <li class="bold {% if currentRoute == 'archive' %}active{% endif %}"><a class="waves-effect" href="{{ path('archive') }}">{% trans %}archive{% endtrans %}</a></li> 44 </li>
45 <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}"><a class="waves-effect" href="{{ path('all') }}">{% trans %}all{% endtrans %}</a></li> 45 <li class="bold {% if currentRoute == 'starred' %}active{% endif %}">
46 <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}"><a class="waves-effect" href="{{ path('tag') }}">{% trans %}tags{% endtrans %}</a></li> 46 <a class="waves-effect" href="{{ path('starred') }}">{{ 'menu.left.starred'|trans }}</a>
47 <li class="bold {% if currentRoute == 'config' %}active{% endif %}"><a class="waves-effect" href="{{ path('config') }}">{% trans %}config{% endtrans %}</a></li> 47 </li>
48 <li class="bold {% if currentRoute == 'archive' %}active{% endif %}">
49 <a class="waves-effect" href="{{ path('archive') }}">{{ 'menu.left.archive'|trans }}</a>
50 </li>
51 <li class="bold border-bottom {% if currentRoute == 'all' %}active{% endif %}">
52 <a class="waves-effect" href="{{ path('all') }}">{{ 'menu.left.all_articles'|trans }}</a>
53 </li>
54 <li class="bold border-bottom {% if currentRoute == 'tags' %}active{% endif %}">
55 <a class="waves-effect" href="{{ path('tag') }}">{{ 'menu.left.tags'|trans }}</a>
56 </li>
57 <li class="bold {% if currentRoute == 'config' %}active{% endif %}">
58 <a class="waves-effect" href="{{ path('config') }}">{{ 'menu.left.config'|trans }}</a>
59 </li>
48 {% if is_granted('ROLE_SUPER_ADMIN') %} 60 {% if is_granted('ROLE_SUPER_ADMIN') %}
49 <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}"><a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{% trans %}internal settings{% endtrans %}</a></li> 61 <li class="bold border-bottom {% if currentRoute == 'craue_config_settings_modify' %}active{% endif %}">
62 <a class="waves-effect" href="{{ path('craue_config_settings_modify') }}">{{ 'menu.left.internal_settings'|trans }}</a>
63 </li>
50 {% endif %} 64 {% endif %}
51 <li class="bold {% if currentRoute == 'import' %}active{% endif %}"><a class="waves-effect" href="{{ path('import') }}">{% trans %}import{% endtrans %}</a></li> 65 <li class="bold {% if currentRoute == 'import' %}active{% endif %}">
52 <li class="bold {% if currentRoute == 'howto' %}active{% endif %}"><a class="waves-effect" href="{{ path('howto') }}">{% trans %}howto{% endtrans %}</a></li> 66 <a class="waves-effect" href="{{ path('import') }}">{{ 'menu.left.import'|trans }}</a>
53 <li class="bold {% if currentRoute == 'developer' %}active{% endif %}"><a class="waves-effect" href="{{ path('developer') }}">{% trans %}Developer{% endtrans %}</a></li> 67 </li>
54 <li class="bold"><a class="waves-effect" class="icon icon-power" href="{{ path('fos_user_security_logout') }}" title="{% trans %}logout{% endtrans %}">{% trans %}logout{% endtrans %}</a></li> 68 <li class="bold {% if currentRoute == 'developer' %}active{% endif %}">
69 <a class="waves-effect" href="{{ path('developer') }}">{{ 'menu.left.developer'|trans }}</a>
70 </li>
71 <li class="bold {% if currentRoute == 'howto' %}active{% endif %}">
72 <a class="waves-effect" href="{{ path('howto') }}">{{ 'menu.left.howto'|trans }}</a>
73 </li>
74 <li class="bold">
75 <a class="waves-effect" class="icon icon-power" href="{{ path('fos_user_security_logout') }}">{{ 'menu.left.logout'|trans }}</a>
76 </li>
55 </ul> 77 </ul>
56 <div class="nav-wrapper nav-panels"> 78 <div class="nav-wrapper nav-panels">
57 <a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="mdi-navigation-menu"></i></a> 79 <a href="#" data-activates="slide-out" class="nav-panel-menu button-collapse"><i class="mdi-navigation-menu"></i></a>
@@ -61,21 +83,37 @@
61 </div> 83 </div>
62 <div class="input-field nav-panel-buttom"> 84 <div class="input-field nav-panel-buttom">
63 <ul> 85 <ul>
64 <li class="bold"><a title="{% trans %}Add a new entry{% endtrans %}" class="waves-effect" href="{{ path('new') }}" id="nav-btn-add"><i class="mdi-content-add"></i></a></li> 86 <li class="bold">
65 <li><a title="{% trans %}Search{% endtrans %}" class="waves-effect" href="javascript: void(null);" id="nav-btn-search"><i class="mdi-action-search"></i></a> 87 <a title="{{ 'menu.top.add_new_entry'|trans }}" class="waves-effect" href="{{ path('new') }}" id="nav-btn-add">
66 <li id="button_filters"><a title="{% trans %}Filter entries{% endtrans %}" href="#" data-activates="filters" class="nav-panel-menu button-collapse-right"><i class="mdi-content-filter-list"></i></a></li> 88 <i class="mdi-content-add"></i>
67 <li id="button_export"><a title="{% trans %}Export{% endtrans %}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export" class="nav-panel-menu button-collapse-right"><i class="mdi-file-file-download"></i></a></li> 89 </a>
90 </li>
91 <!--<li>
92 <a title="{{ 'menu.top.search'|trans }}" class="waves-effect" href="javascript: void(null);" id="nav-btn-search">
93 <i class="mdi-action-search"></i>
94 </a>
95 </li>-->
96 <li id="button_filters">
97 <a title="{{ 'menu.top.filter_entries'|trans }}" href="#" data-activates="filters" class="nav-panel-menu button-collapse-right">
98 <i class="mdi-content-filter-list"></i>
99 </a>
100 </li>
101 <li id="button_export">
102 <a title="{{ 'menu.top.export'|trans }}" class="nav-panel-menu button-collapse-right" href="#" data-activates="export" class="nav-panel-menu button-collapse-right">
103 <i class="mdi-file-file-download"></i>
104 </a>
105 </li>
68 </ul> 106 </ul>
69 </div> 107 </div>
70 <form method="get" action="index.php"> 108 <form method="get" action="index.php">
71 <div class="input-field nav-panel-search" style="display: none"> 109 <div class="input-field nav-panel-search" style="display: none">
72 <input name="search" id="searchfield" type="search" required placeholder="{% trans %}Enter your search here{% endtrans %}"> 110 <input name="search" id="searchfield" type="search" required placeholder="{{ 'menu.search_form.input_label'|trans }}">
73 <label for="search"><i class="mdi-action-search"></i></label> 111 <label for="search"><i class="mdi-action-search"></i></label>
74 <i class="mdi-navigation-close"></i> 112 <i class="mdi-navigation-close"></i>
75 </div> 113 </div>
76 </form> 114 </form>
77 <div class="input-field nav-panel-add" style="display: none"> 115 <div class="input-field nav-panel-add" style="display: none">
78 {{ render(controller( "WallabagCoreBundle:Entry:addEntryForm" )) }} 116 {{ render(controller("WallabagCoreBundle:Entry:addEntryForm")) }}
79 <label for="add" class="active"><i class="mdi-content-add"></i></label> 117 <label for="add" class="active"><i class="mdi-content-add"></i></label>
80 <i class="mdi-navigation-close"></i> 118 <i class="mdi-navigation-close"></i>
81 </div> 119 </div>
@@ -88,35 +126,40 @@
88 <div class="container"> 126 <div class="container">
89 <div class="row"> 127 <div class="row">
90 <div class="col l6 s12"> 128 <div class="col l6 s12">
91 <h5 class="white-text">{% trans %}Take wallabag with you{% endtrans %}</h5> 129 <h5 class="white-text">{{ 'footer.wallabag.elsewhere'|trans }}</h5>
92 <p class="grey-text text-lighten-4"> 130 <p class="grey-text text-lighten-4">
93 131 <a target="_blank" class="grey-text text-lighten-3" href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" title="Android">
94 <a target="_blank" class="grey-text text-lighten-3" href="https://play.google.com/store/apps/details?id=fr.gaulupeau.apps.InThePoche" title="android"><span class="icon-android"></span></a> 132 <span class="icon-android"></span>
95 133 </a>
96 <a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS"><span class="icon-apple"></a> 134 <a target="_blank" class="grey-text text-lighten-3" href="https://itunes.apple.com/app/id828331015" title="iOS">
97 135 <span class="icon-apple"></span>
98 <a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/ru/firefox/addon/wallabag/" title="Firefox"><span class="icon-firefox"></span></a> 136 </a>
99 137 <a target="_blank" class="grey-text text-lighten-3" href="https://addons.mozilla.org/ru/firefox/addon/wallabag/" title="Firefox">
100 <a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome"><span class="icon-chrome"></a> 138 <span class="icon-firefox"></span>
101 139 </a>
140 <a target="_blank" class="grey-text text-lighten-3" href="https://chrome.google.com/webstore/detail/wallabagit/peehlcgckcnclnjlndmoddifcicdnabm" title="Chrome">
141 <span class="icon-chrome"></span>
142 </a>
102 </p> 143 </p>
103 </div> 144 </div>
104 <div class="col l4 offset-l2 s12"> 145 <div class="col l4 offset-l2 s12">
105 <h5 class="white-text">{% trans %}Social{% endtrans %}</h5> 146 <h5 class="white-text">{{ 'footer.wallabag.social'|trans }}</h5>
106 147 <a target="_blank" class="grey-text text-lighten-3" href="https://twitter.com/wallabagapp" title="Twitter">
107 <a target="_blank" class="grey-text text-lighten-3" href="https://twitter.com/wallabagapp" title="Twitter"><span class="icon-twitter"></span></a> 148 <span class="icon-twitter"></span>
108 149 </a>
109 <a target="_blank" class="grey-text text-lighten-3" href="https://plus.google.com/+WallabagOrg/posts" title="Google+"><span class="icon-google-plus2"></span></a> 150 <a target="_blank" class="grey-text text-lighten-3" href="https://plus.google.com/+WallabagOrg/posts" title="Google+">
110 151 <span class="icon-google-plus2"></span>
111 <a target="_blank" class="grey-text text-lighten-3" href="https://facebook.com/Wallabag" title="Facebook"><span class="icon-facebook2"></span></a> 152 </a>
112 153 <a target="_blank" class="grey-text text-lighten-3" href="https://facebook.com/Wallabag" title="Facebook">
154 <span class="icon-facebook2"></span>
155 </a>
113 </div> 156 </div>
114 </div> 157 </div>
115 </div> 158 </div>
116 <div class="footer-copyright"> 159 <div class="footer-copyright">
117 <div class="container"> 160 <div class="container">
118 <p>{% trans %}powered by{% endtrans %} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p> 161 <p>{{ 'footer.wallabag.powered_by'|trans }} <a target="_blank" href="https://wallabag.org" class="grey-text text-lighten-4">wallabag</a></p>
119 <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{% trans %}About{% endtrans %}</a> 162 <a class="grey-text text-lighten-4 right" href="{{ path('about') }}">{{ 'footer.wallabag.about'|trans }}</a>
120 </div> 163 </div>
121 </div> 164 </div>
122 </footer> 165 </footer>
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php
index 51425fe1..f2d26750 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/ConfigControllerTest.php
@@ -57,7 +57,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
57 $crawler = $client->followRedirect(); 57 $crawler = $client->followRedirect();
58 58
59 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 59 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
60 $this->assertContains('Config saved', $alert[0]); 60 $this->assertContains('flashes.config.notice.config_saved', $alert[0]);
61 } 61 }
62 62
63 public function dataForUpdateFailed() 63 public function dataForUpdateFailed()
@@ -102,7 +102,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
102 'change_passwd[new_password][first]' => '', 102 'change_passwd[new_password][first]' => '',
103 'change_passwd[new_password][second]' => '', 103 'change_passwd[new_password][second]' => '',
104 ), 104 ),
105 'Wrong value for your current password', 105 'validator.password_wrong_value',
106 ), 106 ),
107 array( 107 array(
108 array( 108 array(
@@ -118,7 +118,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
118 'change_passwd[new_password][first]' => 'hop', 118 'change_passwd[new_password][first]' => 'hop',
119 'change_passwd[new_password][second]' => '', 119 'change_passwd[new_password][second]' => '',
120 ), 120 ),
121 'The password fields must match', 121 'validator.password_must_match',
122 ), 122 ),
123 array( 123 array(
124 array( 124 array(
@@ -126,7 +126,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
126 'change_passwd[new_password][first]' => 'hop', 126 'change_passwd[new_password][first]' => 'hop',
127 'change_passwd[new_password][second]' => 'hop', 127 'change_passwd[new_password][second]' => 'hop',
128 ), 128 ),
129 'Password should by at least', 129 'validator.password_too_short',
130 ), 130 ),
131 ); 131 );
132 } 132 }
@@ -177,7 +177,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
177 $crawler = $client->followRedirect(); 177 $crawler = $client->followRedirect();
178 178
179 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 179 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
180 $this->assertContains('Password updated', $alert[0]); 180 $this->assertContains('flashes.config.notice.password_updated', $alert[0]);
181 } 181 }
182 182
183 public function dataForUserFailed() 183 public function dataForUserFailed()
@@ -188,14 +188,14 @@ class ConfigControllerTest extends WallabagCoreTestCase
188 'update_user[name]' => '', 188 'update_user[name]' => '',
189 'update_user[email]' => '', 189 'update_user[email]' => '',
190 ), 190 ),
191 'Please enter an email', 191 'fos_user.email.blank',
192 ), 192 ),
193 array( 193 array(
194 array( 194 array(
195 'update_user[name]' => '', 195 'update_user[name]' => '',
196 'update_user[email]' => 'test', 196 'update_user[email]' => 'test',
197 ), 197 ),
198 'The email is not valid', 198 'fos_user.email.invalid',
199 ), 199 ),
200 ); 200 );
201 } 201 }
@@ -244,8 +244,8 @@ class ConfigControllerTest extends WallabagCoreTestCase
244 244
245 $crawler = $client->followRedirect(); 245 $crawler = $client->followRedirect();
246 246
247 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 247 $this->assertGreaterThan(1, $alert = $crawler->filter('body')->extract(array('_text')));
248 $this->assertContains('Information updated', $alert[0]); 248 $this->assertContains('flashes.config.notice.user_updated', $alert[0]);
249 } 249 }
250 250
251 public function dataForNewUserFailed() 251 public function dataForNewUserFailed()
@@ -258,7 +258,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
258 'new_user[plainPassword][second]' => '', 258 'new_user[plainPassword][second]' => '',
259 'new_user[email]' => '', 259 'new_user[email]' => '',
260 ), 260 ),
261 'Please enter a username', 261 'fos_user.username.blank',
262 ), 262 ),
263 array( 263 array(
264 array( 264 array(
@@ -267,7 +267,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
267 'new_user[plainPassword][second]' => 'mypassword', 267 'new_user[plainPassword][second]' => 'mypassword',
268 'new_user[email]' => '', 268 'new_user[email]' => '',
269 ), 269 ),
270 'The username is too short', 270 'fos_user.username.short',
271 ), 271 ),
272 array( 272 array(
273 array( 273 array(
@@ -276,7 +276,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
276 'new_user[plainPassword][second]' => 'mypassword', 276 'new_user[plainPassword][second]' => 'mypassword',
277 'new_user[email]' => 'test', 277 'new_user[email]' => 'test',
278 ), 278 ),
279 'The email is not valid', 279 'fos_user.email.invalid',
280 ), 280 ),
281 array( 281 array(
282 array( 282 array(
@@ -285,7 +285,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
285 'new_user[plainPassword][second]' => 'wallacewallace', 285 'new_user[plainPassword][second]' => 'wallacewallace',
286 'new_user[email]' => 'wallace@wallace.me', 286 'new_user[email]' => 'wallace@wallace.me',
287 ), 287 ),
288 'The username is already used', 288 'fos_user.username.already_used',
289 ), 289 ),
290 array( 290 array(
291 array( 291 array(
@@ -294,7 +294,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
294 'new_user[plainPassword][second]' => 'mypassword2', 294 'new_user[plainPassword][second]' => 'mypassword2',
295 'new_user[email]' => 'wallace@wallace.me', 295 'new_user[email]' => 'wallace@wallace.me',
296 ), 296 ),
297 'The password fields must match', 297 'validator.password_must_match',
298 ), 298 ),
299 ); 299 );
300 } 300 }
@@ -346,7 +346,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
346 $crawler = $client->followRedirect(); 346 $crawler = $client->followRedirect();
347 347
348 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 348 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
349 $this->assertContains('User "wallace" added', $alert[0]); 349 $this->assertContains('flashes.config.notice.user_added', $alert[0]);
350 350
351 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 351 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
352 $user = $em 352 $user = $em
@@ -382,7 +382,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
382 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 382 $this->assertEquals(200, $client->getResponse()->getStatusCode());
383 383
384 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); 384 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
385 $this->assertContains('You need to generate a token first.', $body[0]); 385 $this->assertContains('config.form_rss.no_token', $body[0]);
386 386
387 $client->request('GET', '/generate-token'); 387 $client->request('GET', '/generate-token');
388 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 388 $this->assertEquals(302, $client->getResponse()->getStatusCode());
@@ -390,7 +390,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
390 $crawler = $client->followRedirect(); 390 $crawler = $client->followRedirect();
391 391
392 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text'))); 392 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
393 $this->assertNotContains('You need to generate a token first.', $body[0]); 393 $this->assertNotContains('config.form_rss.no_token', $body[0]);
394 } 394 }
395 395
396 public function testGenerateTokenAjax() 396 public function testGenerateTokenAjax()
@@ -418,11 +418,6 @@ class ConfigControllerTest extends WallabagCoreTestCase
418 418
419 $crawler = $client->request('GET', '/config'); 419 $crawler = $client->request('GET', '/config');
420 420
421 if (500 == $client->getResponse()->getStatusCode()) {
422 var_export($client->getResponse()->getContent());
423 die();
424 }
425
426 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 421 $this->assertEquals(200, $client->getResponse()->getStatusCode());
427 422
428 $form = $crawler->filter('button[id=rss_config_save]')->form(); 423 $form = $crawler->filter('button[id=rss_config_save]')->form();
@@ -438,7 +433,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
438 $crawler = $client->followRedirect(); 433 $crawler = $client->followRedirect();
439 434
440 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 435 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
441 $this->assertContains('RSS information updated', $alert[0]); 436 $this->assertContains('flashes.config.notice.rss_updated', $alert[0]);
442 } 437 }
443 438
444 public function dataForRssFailed() 439 public function dataForRssFailed()
@@ -454,7 +449,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
454 array( 449 array(
455 'rss_config[rss_limit]' => 1000000000000, 450 'rss_config[rss_limit]' => 1000000000000,
456 ), 451 ),
457 'This will certainly kill the app', 452 'validator.rss_limit_too_hight',
458 ), 453 ),
459 ); 454 );
460 } 455 }
@@ -504,7 +499,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
504 $crawler = $client->followRedirect(); 499 $crawler = $client->followRedirect();
505 500
506 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 501 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
507 $this->assertContains('Tagging rules updated', $alert[0]); 502 $this->assertContains('flashes.config.notice.tagging_rules_updated', $alert[0]);
508 503
509 $deleteLink = $crawler->filter('.delete')->last()->link(); 504 $deleteLink = $crawler->filter('.delete')->last()->link();
510 505
@@ -513,7 +508,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
513 508
514 $crawler = $client->followRedirect(); 509 $crawler = $client->followRedirect();
515 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 510 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text')));
516 $this->assertContains('Tagging rule deleted', $alert[0]); 511 $this->assertContains('flashes.config.notice.tagging_rules_deleted', $alert[0]);
517 } 512 }
518 513
519 public function dataForTaggingRuleFailed() 514 public function dataForTaggingRuleFailed()
@@ -556,12 +551,14 @@ class ConfigControllerTest extends WallabagCoreTestCase
556 551
557 $form = $crawler->filter('button[id=tagging_rule_save]')->form(); 552 $form = $crawler->filter('button[id=tagging_rule_save]')->form();
558 553
559 $client->submit($form, $data); 554 $crawler = $client->submit($form, $data);
560 555
561 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 556 $this->assertEquals(200, $client->getResponse()->getStatusCode());
562 557
558 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
559
563 foreach ($messages as $message) { 560 foreach ($messages as $message) {
564 $this->assertContains($message, $client->getResponse()->getContent()); 561 $this->assertContains($message, $body[0]);
565 } 562 }
566 } 563 }
567 564
@@ -574,9 +571,11 @@ class ConfigControllerTest extends WallabagCoreTestCase
574 ->getRepository('WallabagCoreBundle:TaggingRule') 571 ->getRepository('WallabagCoreBundle:TaggingRule')
575 ->findAll()[0]; 572 ->findAll()[0];
576 573
577 $client->request('GET', '/tagging-rule/delete/'.$rule->getId()); 574 $crawler = $client->request('GET', '/tagging-rule/delete/'.$rule->getId());
575
578 $this->assertEquals(403, $client->getResponse()->getStatusCode()); 576 $this->assertEquals(403, $client->getResponse()->getStatusCode());
579 $this->assertContains('You can not access this tagging ryle', $client->getResponse()->getContent()); 577 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
578 $this->assertContains('You can not access this tagging rule', $body[0]);
580 } 579 }
581 580
582 public function testDemoMode() 581 public function testDemoMode()
@@ -603,7 +602,7 @@ class ConfigControllerTest extends WallabagCoreTestCase
603 $client->submit($form, $data); 602 $client->submit($form, $data);
604 603
605 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 604 $this->assertEquals(302, $client->getResponse()->getStatusCode());
606 $this->assertContains('In demonstration mode, you can\'t change password for this user.', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]); 605 $this->assertContains('flashes.config.notice.password_not_updated_demo', $client->getContainer()->get('session')->getFlashBag()->get('notice')[0]);
607 606
608 $config->set('demo_mode_enabled', 0); 607 $config->set('demo_mode_enabled', 0);
609 $config->set('demo_mode_username', 'wallabag'); 608 $config->set('demo_mode_username', 'wallabag');
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
index 5512d6e1..46fbaf91 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/EntryControllerTest.php
@@ -25,17 +25,18 @@ class EntryControllerTest extends WallabagCoreTestCase
25 $client = $this->getClient(); 25 $client = $this->getClient();
26 26
27 $client->request('GET', '/unread/list'); 27 $client->request('GET', '/unread/list');
28 $client->followRedirect(); 28 $crawler = $client->followRedirect();
29 29
30 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 30 $this->assertEquals(200, $client->getResponse()->getStatusCode());
31 $this->assertContains('We\'ll accompany you to visit wallabag', $client->getResponse()->getContent()); 31 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
32 $this->assertContains('quickstart.intro.paragraph_1', $body[0]);
32 33
33 // Test if quickstart is disabled when user has 1 entry 34 // Test if quickstart is disabled when user has 1 entry
34 $crawler = $client->request('GET', '/new'); 35 $crawler = $client->request('GET', '/new');
35 36
36 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 37 $this->assertEquals(200, $client->getResponse()->getStatusCode());
37 38
38 $form = $crawler->filter('button[type=submit]')->form(); 39 $form = $crawler->filter('form[name=entry]')->form();
39 40
40 $data = array( 41 $data = array(
41 'entry[url]' => $this->url, 42 'entry[url]' => $this->url,
@@ -45,8 +46,9 @@ class EntryControllerTest extends WallabagCoreTestCase
45 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 46 $this->assertEquals(302, $client->getResponse()->getStatusCode());
46 $client->followRedirect(); 47 $client->followRedirect();
47 48
48 $client->request('GET', '/unread/list'); 49 $crawler = $client->request('GET', '/unread/list');
49 $this->assertContains('There is one entry.', $client->getResponse()->getContent()); 50 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
51 $this->assertContains('entry.list.number_on_the_page', $body[0]);
50 } 52 }
51 53
52 public function testGetNew() 54 public function testGetNew()
@@ -59,7 +61,7 @@ class EntryControllerTest extends WallabagCoreTestCase
59 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 61 $this->assertEquals(200, $client->getResponse()->getStatusCode());
60 62
61 $this->assertCount(1, $crawler->filter('input[type=url]')); 63 $this->assertCount(1, $crawler->filter('input[type=url]'));
62 $this->assertCount(1, $crawler->filter('button[type=submit]')); 64 $this->assertCount(1, $crawler->filter('form[name=entry]'));
63 } 65 }
64 66
65 public function testPostNewViaBookmarklet() 67 public function testPostNewViaBookmarklet()
@@ -96,7 +98,7 @@ class EntryControllerTest extends WallabagCoreTestCase
96 98
97 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 99 $this->assertEquals(200, $client->getResponse()->getStatusCode());
98 100
99 $form = $crawler->filter('button[type=submit]')->form(); 101 $form = $crawler->filter('form[name=entry]')->form();
100 102
101 $crawler = $client->submit($form); 103 $crawler = $client->submit($form);
102 104
@@ -117,7 +119,7 @@ class EntryControllerTest extends WallabagCoreTestCase
117 119
118 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 120 $this->assertEquals(200, $client->getResponse()->getStatusCode());
119 121
120 $form = $crawler->filter('button[type=submit]')->form(); 122 $form = $crawler->filter('form[name=entry]')->form();
121 123
122 $data = array( 124 $data = array(
123 'entry[url]' => $this->url, 125 'entry[url]' => $this->url,
@@ -146,7 +148,7 @@ class EntryControllerTest extends WallabagCoreTestCase
146 148
147 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 149 $this->assertEquals(200, $client->getResponse()->getStatusCode());
148 150
149 $form = $crawler->filter('button[type=submit]')->form(); 151 $form = $crawler->filter('form[name=entry]')->form();
150 152
151 $data = array( 153 $data = array(
152 'entry[url]' => $this->url, 154 'entry[url]' => $this->url,
@@ -170,7 +172,7 @@ class EntryControllerTest extends WallabagCoreTestCase
170 172
171 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 173 $this->assertEquals(200, $client->getResponse()->getStatusCode());
172 174
173 $form = $crawler->filter('button[type=submit]')->form(); 175 $form = $crawler->filter('form[name=entry]')->form();
174 176
175 $data = array( 177 $data = array(
176 'entry[url]' => $url = 'https://github.com/wallabag/wallabag', 178 'entry[url]' => $url = 'https://github.com/wallabag/wallabag',
@@ -240,10 +242,11 @@ class EntryControllerTest extends WallabagCoreTestCase
240 ->getRepository('WallabagCoreBundle:Entry') 242 ->getRepository('WallabagCoreBundle:Entry')
241 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId()); 243 ->findByUrlAndUserId($this->url, $this->getLoggedInUserId());
242 244
243 $client->request('GET', '/view/'.$content->getId()); 245 $crawler = $client->request('GET', '/view/'.$content->getId());
244 246
245 $this->assertEquals(200, $client->getResponse()->getStatusCode()); 247 $this->assertEquals(200, $client->getResponse()->getStatusCode());
246 $this->assertContains($content->getTitle(), $client->getResponse()->getContent()); 248 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
249 $this->assertContains($content->getTitle(), $body[0]);
247 } 250 }
248 251
249 /** 252 /**
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php
index b9f5d835..ed292633 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/SecurityControllerTest.php
@@ -12,53 +12,61 @@ class SecurityControllerTest extends WallabagCoreTestCase
12 $client = $this->getClient(); 12 $client = $this->getClient();
13 $client->followRedirects(); 13 $client->followRedirects();
14 14
15 $client->request('GET', '/config'); 15 $crawler = $client->request('GET', '/config');
16 $this->assertContains('RSS', $client->getResponse()->getContent()); 16 $this->assertContains('config.form_rss.description', $crawler->filter('body')->extract(array('_text'))[0]);
17 } 17 }
18 18
19 public function testLoginWith2Factor() 19 public function testLoginWith2Factor()
20 { 20 {
21 $client = $this->getClient(); 21 $client = $this->getClient();
22 22
23 if ($client->getContainer()->getParameter('twofactor_auth')) { 23 if (!$client->getContainer()->getParameter('twofactor_auth')) {
24 $client->followRedirects(); 24 $this->markTestSkipped('twofactor_auth is not enabled.');
25 25
26 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 26 return;
27 $user = $em
28 ->getRepository('WallabagUserBundle:User')
29 ->findOneByUsername('admin');
30 $user->setTwoFactorAuthentication(true);
31 $em->persist($user);
32 $em->flush();
33
34 $this->logInAs('admin');
35 $client->request('GET', '/config');
36 $this->assertContains('trusted computer', $client->getResponse()->getContent());
37
38 // restore user
39 $user = $em
40 ->getRepository('WallabagUserBundle:User')
41 ->findOneByUsername('admin');
42 $user->setTwoFactorAuthentication(false);
43 $em->persist($user);
44 $em->flush();
45 } 27 }
28
29 $client->followRedirects();
30
31 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
32 $user = $em
33 ->getRepository('WallabagUserBundle:User')
34 ->findOneByUsername('admin');
35 $user->setTwoFactorAuthentication(true);
36 $em->persist($user);
37 $em->flush();
38
39 $this->logInAs('admin');
40 $crawler = $client->request('GET', '/config');
41 $this->assertContains('scheb_two_factor.trusted', $crawler->filter('body')->extract(array('_text'))[0]);
42
43 // restore user
44 $user = $em
45 ->getRepository('WallabagUserBundle:User')
46 ->findOneByUsername('admin');
47 $user->setTwoFactorAuthentication(false);
48 $em->persist($user);
49 $em->flush();
46 } 50 }
47 51
48 public function testTrustedComputer() 52 public function testTrustedComputer()
49 { 53 {
50 $client = $this->getClient(); 54 $client = $this->getClient();
51 55
52 if ($client->getContainer()->getParameter('twofactor_auth')) { 56 if (!$client->getContainer()->getParameter('twofactor_auth')) {
53 $em = $client->getContainer()->get('doctrine.orm.entity_manager'); 57 $this->markTestSkipped('twofactor_auth is not enabled.');
54 $user = $em
55 ->getRepository('WallabagUserBundle:User')
56 ->findOneByUsername('admin');
57 58
58 $date = new \DateTime(); 59 return;
59 $user->addTrustedComputer('ABCDEF', $date->add(new \DateInterval('P1M')));
60 $this->assertTrue($user->isTrustedComputer('ABCDEF'));
61 $this->assertFalse($user->isTrustedComputer('FEDCBA'));
62 } 60 }
61
62 $em = $client->getContainer()->get('doctrine.orm.entity_manager');
63 $user = $em
64 ->getRepository('WallabagUserBundle:User')
65 ->findOneByUsername('admin');
66
67 $date = new \DateTime();
68 $user->addTrustedComputer('ABCDEF', $date->add(new \DateInterval('P1M')));
69 $this->assertTrue($user->isTrustedComputer('ABCDEF'));
70 $this->assertFalse($user->isTrustedComputer('FEDCBA'));
63 } 71 }
64} 72}
diff --git a/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php b/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php
index d6391282..1457c807 100644
--- a/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Controller/TagControllerTest.php
@@ -30,7 +30,7 @@ class TagControllerTest extends WallabagCoreTestCase
30 30
31 $crawler = $client->request('GET', '/view/'.$entry->getId()); 31 $crawler = $client->request('GET', '/view/'.$entry->getId());
32 32
33 $form = $crawler->filter('button[id=tag_save]')->form(); 33 $form = $crawler->filter('form[name=tag]')->form();
34 34
35 $data = array( 35 $data = array(
36 'tag[label]' => $this->tagName, 36 'tag[label]' => $this->tagName,
@@ -68,6 +68,38 @@ class TagControllerTest extends WallabagCoreTestCase
68 $this->assertEquals(2, count($newEntry->getTags())); 68 $this->assertEquals(2, count($newEntry->getTags()));
69 } 69 }
70 70
71 public function testAddMultipleTagToEntry()
72 {
73 $this->logInAs('admin');
74 $client = $this->getClient();
75
76 $entry = $client->getContainer()
77 ->get('doctrine.orm.entity_manager')
78 ->getRepository('WallabagCoreBundle:Entry')
79 ->findOneByUsernameAndNotArchived('admin');
80
81 $crawler = $client->request('GET', '/view/'.$entry->getId());
82
83 $form = $crawler->filter('form[name=tag]')->form();
84
85 $data = array(
86 'tag[label]' => 'foo2, bar2',
87 );
88
89 $client->submit($form, $data);
90 $this->assertEquals(302, $client->getResponse()->getStatusCode());
91
92 $newEntry = $client->getContainer()
93 ->get('doctrine.orm.entity_manager')
94 ->getRepository('WallabagCoreBundle:Entry')
95 ->find($entry->getId());
96
97 $tags = $newEntry->getTags()->toArray();
98 $this->assertGreaterThanOrEqual(2, count($tags));
99 $this->assertNotEquals(false, array_search('foo2', $tags), 'Tag foo2 is assigned to the entry');
100 $this->assertNotEquals(false, array_search('bar2', $tags), 'Tag bar2 is assigned to the entry');
101 }
102
71 public function testRemoveTagFromEntry() 103 public function testRemoveTagFromEntry()
72 { 104 {
73 $this->logInAs('admin'); 105 $this->logInAs('admin');
diff --git a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php b/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php
index f58b5828..74bfb054 100644
--- a/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php
+++ b/src/Wallabag/CoreBundle/Tests/Helper/ContentProxyTest.php
@@ -10,6 +10,40 @@ use Wallabag\UserBundle\Entity\User;
10 10
11class ContentProxyTest extends \PHPUnit_Framework_TestCase 11class ContentProxyTest extends \PHPUnit_Framework_TestCase
12{ 12{
13 public function testWithBadUrl()
14 {
15 $tagger = $this->getTaggerMock();
16 $tagger->expects($this->once())
17 ->method('tag');
18
19 $graby = $this->getMockBuilder('Graby\Graby')
20 ->setMethods(array('fetchContent'))
21 ->disableOriginalConstructor()
22 ->getMock();
23
24 $graby->expects($this->any())
25 ->method('fetchContent')
26 ->willReturn(array(
27 'html' => false,
28 'title' => '',
29 'url' => '',
30 'content_type' => '',
31 'language' => '',
32 ));
33
34 $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
35 $entry = $proxy->updateEntry(new Entry(new User()), 'http://user@:80');
36
37 $this->assertEquals('http://user@:80', $entry->getUrl());
38 $this->assertEmpty($entry->getTitle());
39 $this->assertEquals('<p>Unable to retrieve readable content.</p>', $entry->getContent());
40 $this->assertEmpty($entry->getPreviewPicture());
41 $this->assertEmpty($entry->getMimetype());
42 $this->assertEmpty($entry->getLanguage());
43 $this->assertEquals(0.0, $entry->getReadingTime());
44 $this->assertEquals(false, $entry->getDomainName());
45 }
46
13 public function testWithEmptyContent() 47 public function testWithEmptyContent()
14 { 48 {
15 $tagger = $this->getTaggerMock(); 49 $tagger = $this->getTaggerMock();
@@ -121,6 +155,57 @@ class ContentProxyTest extends \PHPUnit_Framework_TestCase
121 $this->assertEquals('1.1.1.1', $entry->getDomainName()); 155 $this->assertEquals('1.1.1.1', $entry->getDomainName());
122 } 156 }
123 157
158 public function testWithForcedContent()
159 {
160 $tagger = $this->getTaggerMock();
161 $tagger->expects($this->once())
162 ->method('tag');
163
164 $graby = $this->getMockBuilder('Graby\Graby')->getMock();
165
166 $proxy = new ContentProxy($graby, $tagger, $this->getTagRepositoryMock(), $this->getLogger());
167 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
168 'html' => str_repeat('this is my content', 325),
169 'title' => 'this is my title',
170 'url' => 'http://1.1.1.1',
171 'content_type' => 'text/html',
172 'language' => 'fr',
173 ]);
174
175 $this->assertEquals('http://1.1.1.1', $entry->getUrl());
176 $this->assertEquals('this is my title', $entry->getTitle());
177 $this->assertContains('this is my content', $entry->getContent());
178 $this->assertEquals('text/html', $entry->getMimetype());
179 $this->assertEquals('fr', $entry->getLanguage());
180 $this->assertEquals(4.0, $entry->getReadingTime());
181 $this->assertEquals('1.1.1.1', $entry->getDomainName());
182 }
183
184 public function testTaggerThrowException()
185 {
186 $graby = $this->getMockBuilder('Graby\Graby')
187 ->disableOriginalConstructor()
188 ->getMock();
189
190 $tagger = $this->getTaggerMock();
191 $tagger->expects($this->once())
192 ->method('tag')
193 ->will($this->throwException(new \Exception()));
194
195 $tagRepo = $this->getTagRepositoryMock();
196 $proxy = new ContentProxy($graby, $tagger, $tagRepo, $this->getLogger());
197
198 $entry = $proxy->updateEntry(new Entry(new User()), 'http://0.0.0.0', [
199 'html' => str_repeat('this is my content', 325),
200 'title' => 'this is my title',
201 'url' => 'http://1.1.1.1',
202 'content_type' => 'text/html',
203 'language' => 'fr',
204 ]);
205
206 $this->assertCount(0, $entry->getTags());
207 }
208
124 public function testAssignTagsWithArrayAndExtraSpaces() 209 public function testAssignTagsWithArrayAndExtraSpaces()
125 { 210 {
126 $graby = $this->getMockBuilder('Graby\Graby') 211 $graby = $this->getMockBuilder('Graby\Graby')
diff --git a/src/Wallabag/ImportBundle/Controller/PocketController.php b/src/Wallabag/ImportBundle/Controller/PocketController.php
index c88e115e..11ce649d 100644
--- a/src/Wallabag/ImportBundle/Controller/PocketController.php
+++ b/src/Wallabag/ImportBundle/Controller/PocketController.php
@@ -17,8 +17,8 @@ class PocketController extends Controller
17 { 17 {
18 $pocket = $this->get('wallabag_import.pocket.import'); 18 $pocket = $this->get('wallabag_import.pocket.import');
19 $form = $this->createFormBuilder($pocket) 19 $form = $this->createFormBuilder($pocket)
20 ->add('read', CheckboxType::class, array( 20 ->add('mark_as_read', CheckboxType::class, array(
21 'label' => 'Mark all as read', 21 'label' => 'import.form.mark_as_read_label',
22 'required' => false, 22 'required' => false,
23 )) 23 ))
24 ->getForm(); 24 ->getForm();
@@ -38,8 +38,17 @@ class PocketController extends Controller
38 $requestToken = $this->get('wallabag_import.pocket.import') 38 $requestToken = $this->get('wallabag_import.pocket.import')
39 ->getRequestToken($this->generateUrl('import', array(), UrlGeneratorInterface::ABSOLUTE_URL)); 39 ->getRequestToken($this->generateUrl('import', array(), UrlGeneratorInterface::ABSOLUTE_URL));
40 40
41 if (false === $requestToken) {
42 $this->get('session')->getFlashBag()->add(
43 'notice',
44 'flashes.import.notice.failed'
45 );
46
47 return $this->redirect($this->generateUrl('import_pocket'));
48 }
49
41 $this->get('session')->set('import.pocket.code', $requestToken); 50 $this->get('session')->set('import.pocket.code', $requestToken);
42 $this->get('session')->set('read', $request->request->get('form')['read']); 51 $this->get('session')->set('mark_as_read', $request->request->get('form')['mark_as_read']);
43 52
44 return $this->redirect( 53 return $this->redirect(
45 'https://getpocket.com/auth/authorize?request_token='.$requestToken.'&redirect_uri='.$this->generateUrl('import_pocket_callback', array(), UrlGeneratorInterface::ABSOLUTE_URL), 54 'https://getpocket.com/auth/authorize?request_token='.$requestToken.'&redirect_uri='.$this->generateUrl('import_pocket_callback', array(), UrlGeneratorInterface::ABSOLUTE_URL),
@@ -52,10 +61,11 @@ class PocketController extends Controller
52 */ 61 */
53 public function callbackAction() 62 public function callbackAction()
54 { 63 {
55 $message = 'Import failed, please try again.'; 64 $message = 'flashes.import.notice.failed';
56 $pocket = $this->get('wallabag_import.pocket.import'); 65 $pocket = $this->get('wallabag_import.pocket.import');
57 $markAsRead = $this->get('session')->get('read'); 66
58 $this->get('session')->remove('read'); 67 $markAsRead = $this->get('session')->get('mark_as_read');
68 $this->get('session')->remove('mark_as_read');
59 69
60 // something bad happend on pocket side 70 // something bad happend on pocket side
61 if (false === $pocket->authorize($this->get('session')->get('import.pocket.code'))) { 71 if (false === $pocket->authorize($this->get('session')->get('import.pocket.code'))) {
@@ -69,7 +79,10 @@ class PocketController extends Controller
69 79
70 if (true === $pocket->setMarkAsRead($markAsRead)->import()) { 80 if (true === $pocket->setMarkAsRead($markAsRead)->import()) {
71 $summary = $pocket->getSummary(); 81 $summary = $pocket->getSummary();
72 $message = 'Import summary: '.$summary['imported'].' imported, '.$summary['skipped'].' already saved.'; 82 $message = $this->get('translator')->trans('flashes.import.notice.summary', array(
83 '%imported%' => $summary['imported'],
84 '%skipped%' => $summary['skipped'],
85 ));
73 } 86 }
74 87
75 $this->get('session')->getFlashBag()->add( 88 $this->get('session')->getFlashBag()->add(
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagController.php b/src/Wallabag/ImportBundle/Controller/WallabagController.php
new file mode 100644
index 00000000..01883d4a
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Controller/WallabagController.php
@@ -0,0 +1,85 @@
1<?php
2
3namespace Wallabag\ImportBundle\Controller;
4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Symfony\Component\HttpFoundation\Request;
7use Wallabag\ImportBundle\Form\Type\UploadImportType;
8
9/**
10 * Define Wallabag import for v1 and v2, since there are very similar.
11 */
12abstract class WallabagController extends Controller
13{
14 /**
15 * Return the service to handle the import.
16 *
17 * @return \Wallabag\ImportBundle\Import\ImportInterface
18 */
19 abstract protected function getImportService();
20
21 /**
22 * Return the template used for the form.
23 *
24 * @return string
25 */
26 abstract protected function getImportTemplate();
27
28 /**
29 * Handle import request.
30 *
31 * @param Request $request
32 *
33 * @return Response|RedirectResponse
34 */
35 public function indexAction(Request $request)
36 {
37 $form = $this->createForm(UploadImportType::class);
38 $form->handleRequest($request);
39
40 $wallabag = $this->getImportService();
41
42 if ($form->isValid()) {
43 $file = $form->get('file')->getData();
44 $markAsRead = $form->get('mark_as_read')->getData();
45 $name = $this->getUser()->getId().'.json';
46
47 if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
48 $res = $wallabag
49 ->setUser($this->getUser())
50 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
51 ->setMarkAsRead($markAsRead)
52 ->import();
53
54 $message = 'flashes.import.notice.failed';
55
56 if (true === $res) {
57 $summary = $wallabag->getSummary();
58 $message = $this->get('translator')->trans('flashes.import.notice.summary', array(
59 '%imported%' => $summary['imported'],
60 '%skipped%' => $summary['skipped'],
61 ));
62
63 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
64 }
65
66 $this->get('session')->getFlashBag()->add(
67 'notice',
68 $message
69 );
70
71 return $this->redirect($this->generateUrl('homepage'));
72 } else {
73 $this->get('session')->getFlashBag()->add(
74 'notice',
75 'flashes.import.notice.failed_on_file'
76 );
77 }
78 }
79
80 return $this->render($this->getImportTemplate(), [
81 'form' => $form->createView(),
82 'import' => $wallabag,
83 ]);
84 }
85}
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php
index 154a0769..3e748d57 100644
--- a/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php
+++ b/src/Wallabag/ImportBundle/Controller/WallabagV1Controller.php
@@ -2,61 +2,32 @@
2 2
3namespace Wallabag\ImportBundle\Controller; 3namespace Wallabag\ImportBundle\Controller;
4 4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
7use Symfony\Component\HttpFoundation\Request; 6use Symfony\Component\HttpFoundation\Request;
8use Wallabag\ImportBundle\Form\Type\UploadImportType;
9 7
10class WallabagV1Controller extends Controller 8class WallabagV1Controller extends WallabagController
11{ 9{
12 /** 10 /**
13 * @Route("/wallabag-v1", name="import_wallabag_v1") 11 * {@inheritdoc}
14 */ 12 */
15 public function indexAction(Request $request) 13 protected function getImportService()
16 { 14 {
17 $form = $this->createForm(UploadImportType::class); 15 return $this->get('wallabag_import.wallabag_v1.import');
18 $form->handleRequest($request); 16 }
19
20 $wallabag = $this->get('wallabag_import.wallabag_v1.import');
21
22 if ($form->isValid()) {
23 $file = $form->get('file')->getData();
24 $markAsRead = $form->get('mark_as_read')->getData();
25 $name = $this->getUser()->getId().'.json';
26
27 if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
28 $res = $wallabag
29 ->setUser($this->getUser())
30 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
31 ->setMarkAsRead($markAsRead)
32 ->import();
33
34 $message = 'Import failed, please try again.';
35
36 if (true === $res) {
37 $summary = $wallabag->getSummary();
38 $message = 'Import summary: '.$summary['imported'].' imported, '.$summary['skipped'].' already saved.';
39
40 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
41 }
42
43 $this->get('session')->getFlashBag()->add(
44 'notice',
45 $message
46 );
47 17
48 return $this->redirect($this->generateUrl('homepage')); 18 /**
49 } else { 19 * {@inheritdoc}
50 $this->get('session')->getFlashBag()->add( 20 */
51 'notice', 21 protected function getImportTemplate()
52 'Error while processing import. Please verify your import file.' 22 {
53 ); 23 return 'WallabagImportBundle:WallabagV1:index.html.twig';
54 } 24 }
55 }
56 25
57 return $this->render('WallabagImportBundle:WallabagV1:index.html.twig', [ 26 /**
58 'form' => $form->createView(), 27 * @Route("/wallabag-v1", name="import_wallabag_v1")
59 'import' => $wallabag, 28 */
60 ]); 29 public function indexAction(Request $request)
30 {
31 return parent::indexAction($request);
61 } 32 }
62} 33}
diff --git a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php
index 6dcd204a..c2a42165 100644
--- a/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php
+++ b/src/Wallabag/ImportBundle/Controller/WallabagV2Controller.php
@@ -2,61 +2,32 @@
2 2
3namespace Wallabag\ImportBundle\Controller; 3namespace Wallabag\ImportBundle\Controller;
4 4
5use Symfony\Bundle\FrameworkBundle\Controller\Controller;
6use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route; 5use Sensio\Bundle\FrameworkExtraBundle\Configuration\Route;
7use Symfony\Component\HttpFoundation\Request; 6use Symfony\Component\HttpFoundation\Request;
8use Wallabag\ImportBundle\Form\Type\UploadImportType;
9 7
10class WallabagV2Controller extends Controller 8class WallabagV2Controller extends WallabagController
11{ 9{
12 /** 10 /**
13 * @Route("/wallabag-v2", name="import_wallabag_v2") 11 * {@inheritdoc}
14 */ 12 */
15 public function indexAction(Request $request) 13 protected function getImportService()
16 { 14 {
17 $form = $this->createForm(UploadImportType::class); 15 return $this->get('wallabag_import.wallabag_v2.import');
18 $form->handleRequest($request); 16 }
19
20 $wallabag = $this->get('wallabag_import.wallabag_v2.import');
21
22 if ($form->isValid()) {
23 $file = $form->get('file')->getData();
24 $markAsRead = $form->get('mark_as_read')->getData();
25 $name = $this->getUser()->getId().'.json';
26
27 if (in_array($file->getClientMimeType(), $this->getParameter('wallabag_import.allow_mimetypes')) && $file->move($this->getParameter('wallabag_import.resource_dir'), $name)) {
28 $res = $wallabag
29 ->setUser($this->getUser())
30 ->setFilepath($this->getParameter('wallabag_import.resource_dir').'/'.$name)
31 ->setMarkAsRead($markAsRead)
32 ->import();
33
34 $message = 'Import failed, please try again.';
35
36 if (true === $res) {
37 $summary = $wallabag->getSummary();
38 $message = 'Import summary: '.$summary['imported'].' imported, '.$summary['skipped'].' already saved.';
39
40 unlink($this->getParameter('wallabag_import.resource_dir').'/'.$name);
41 }
42
43 $this->get('session')->getFlashBag()->add(
44 'notice',
45 $message
46 );
47 17
48 return $this->redirect($this->generateUrl('homepage')); 18 /**
49 } else { 19 * {@inheritdoc}
50 $this->get('session')->getFlashBag()->add( 20 */
51 'notice', 21 protected function getImportTemplate()
52 'Error while processing import. Please verify your import file.' 22 {
53 ); 23 return 'WallabagImportBundle:WallabagV2:index.html.twig';
54 } 24 }
55 }
56 25
57 return $this->render('WallabagImportBundle:WallabagV2:index.html.twig', [ 26 /**
58 'form' => $form->createView(), 27 * @Route("/wallabag-v2", name="import_wallabag_v2")
59 'import' => $wallabag, 28 */
60 ]); 29 public function indexAction(Request $request)
30 {
31 return parent::indexAction($request);
61 } 32 }
62} 33}
diff --git a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php
index 38670379..e0a44c36 100644
--- a/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php
+++ b/src/Wallabag/ImportBundle/Form/Type/UploadImportType.php
@@ -13,12 +13,16 @@ class UploadImportType extends AbstractType
13 public function buildForm(FormBuilderInterface $builder, array $options) 13 public function buildForm(FormBuilderInterface $builder, array $options)
14 { 14 {
15 $builder 15 $builder
16 ->add('file', FileType::class) 16 ->add('file', FileType::class, array(
17 'label' => 'import.form.file_label',
18 ))
17 ->add('mark_as_read', CheckboxType::class, array( 19 ->add('mark_as_read', CheckboxType::class, array(
18 'label' => 'Mark all as read', 20 'label' => 'import.form.mark_as_read_label',
19 'required' => false, 21 'required' => false,
20 )) 22 ))
21 ->add('save', SubmitType::class) 23 ->add('save', SubmitType::class, array(
24 'label' => 'import.form.save_label',
25 ))
22 ; 26 ;
23 } 27 }
24 28
diff --git a/src/Wallabag/ImportBundle/Import/PocketImport.php b/src/Wallabag/ImportBundle/Import/PocketImport.php
index 238ddbd1..f598e611 100644
--- a/src/Wallabag/ImportBundle/Import/PocketImport.php
+++ b/src/Wallabag/ImportBundle/Import/PocketImport.php
@@ -60,7 +60,7 @@ class PocketImport implements ImportInterface
60 */ 60 */
61 public function getDescription() 61 public function getDescription()
62 { 62 {
63 return 'This importer will import all your Pocket data. Pocket doesn\'t allow us to retrieve content from their service, so the readable content of each article will be re-fetched by wallabag.'; 63 return 'import.pocket.description';
64 } 64 }
65 65
66 /** 66 /**
@@ -68,7 +68,7 @@ class PocketImport implements ImportInterface
68 * 68 *
69 * @param string $redirectUri Redirect url in case of error 69 * @param string $redirectUri Redirect url in case of error
70 * 70 *
71 * @return string request_token for callback method 71 * @return string|false request_token for callback method
72 */ 72 */
73 public function getRequestToken($redirectUri) 73 public function getRequestToken($redirectUri)
74 { 74 {
@@ -139,7 +139,7 @@ class PocketImport implements ImportInterface
139 /** 139 /**
140 * Get whether articles must be all marked as read. 140 * Get whether articles must be all marked as read.
141 */ 141 */
142 public function getRead() 142 public function getMarkAsRead()
143 { 143 {
144 return $this->markAsRead; 144 return $this->markAsRead;
145 } 145 }
diff --git a/src/Wallabag/ImportBundle/Import/WallabagImport.php b/src/Wallabag/ImportBundle/Import/WallabagImport.php
new file mode 100644
index 00000000..d65bc530
--- /dev/null
+++ b/src/Wallabag/ImportBundle/Import/WallabagImport.php
@@ -0,0 +1,204 @@
1<?php
2
3namespace Wallabag\ImportBundle\Import;
4
5use Psr\Log\LoggerInterface;
6use Psr\Log\NullLogger;
7use Doctrine\ORM\EntityManager;
8use Wallabag\CoreBundle\Entity\Entry;
9use Wallabag\UserBundle\Entity\User;
10use Wallabag\CoreBundle\Helper\ContentProxy;
11
12abstract class WallabagImport implements ImportInterface
13{
14 protected $user;
15 protected $em;
16 protected $logger;
17 protected $contentProxy;
18 protected $skippedEntries = 0;
19 protected $importedEntries = 0;
20 protected $filepath;
21 protected $markAsRead;
22 // untitled in all languages from v1
23 protected $untitled = [
24 'Untitled',
25 'Sans titre',
26 'podle nadpisu',
27 'Sin título',
28 'با عنوان',
29 'per titolo',
30 'Sem título',
31 'Без названия',
32 'po naslovu',
33 'Без назви',
34 'No title found',
35 '',
36 ];
37
38 public function __construct(EntityManager $em, ContentProxy $contentProxy)
39 {
40 $this->em = $em;
41 $this->logger = new NullLogger();
42 $this->contentProxy = $contentProxy;
43 }
44
45 public function setLogger(LoggerInterface $logger)
46 {
47 $this->logger = $logger;
48 }
49
50 /**
51 * We define the user in a custom call because on the import command there is no logged in user.
52 * So we can't retrieve user from the `security.token_storage` service.
53 *
54 * @param User $user
55 */
56 public function setUser(User $user)
57 {
58 $this->user = $user;
59
60 return $this;
61 }
62
63 /**
64 * {@inheritdoc}
65 */
66 abstract public function getName();
67
68 /**
69 * {@inheritdoc}
70 */
71 abstract public function getUrl();
72
73 /**
74 * {@inheritdoc}
75 */
76 abstract public function getDescription();
77
78 /**
79 * {@inheritdoc}
80 */
81 public function import()
82 {
83 if (!$this->user) {
84 $this->logger->error('WallabagImport: user is not defined');
85
86 return false;
87 }
88
89 if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
90 $this->logger->error('WallabagImport: unable to read file', ['filepath' => $this->filepath]);
91
92 return false;
93 }
94
95 $data = json_decode(file_get_contents($this->filepath), true);
96
97 if (empty($data)) {
98 return false;
99 }
100
101 $this->parseEntries($data);
102
103 return true;
104 }
105
106 /**
107 * {@inheritdoc}
108 */
109 public function getSummary()
110 {
111 return [
112 'skipped' => $this->skippedEntries,
113 'imported' => $this->importedEntries,
114 ];
115 }
116
117 /**
118 * Set file path to the json file.
119 *
120 * @param string $filepath
121 */
122 public function setFilepath($filepath)
123 {
124 $this->filepath = $filepath;
125
126 return $this;
127 }
128
129 /**
130 * Set whether articles must be all marked as read.
131 *
132 * @param bool $markAsRead
133 */
134 public function setMarkAsRead($markAsRead)
135 {
136 $this->markAsRead = $markAsRead;
137
138 return $this;
139 }
140
141 /**
142 * Parse and insert all given entries.
143 *
144 * @param $entries
145 */
146 protected function parseEntries($entries)
147 {
148 $i = 1;
149
150 foreach ($entries as $importedEntry) {
151 $existingEntry = $this->em
152 ->getRepository('WallabagCoreBundle:Entry')
153 ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
154
155 if (false !== $existingEntry) {
156 ++$this->skippedEntries;
157 continue;
158 }
159
160 $data = $this->prepareEntry($importedEntry, $this->markAsRead);
161
162 $entry = $this->contentProxy->updateEntry(
163 new Entry($this->user),
164 $importedEntry['url'],
165 $data
166 );
167
168 if (array_key_exists('tags', $data)) {
169 $this->contentProxy->assignTagsToEntry(
170 $entry,
171 $data['tags']
172 );
173 }
174
175 if (isset($importedEntry['preview_picture'])) {
176 $entry->setPreviewPicture($importedEntry['preview_picture']);
177 }
178
179 $entry->setArchived($data['is_archived']);
180 $entry->setStarred($data['is_starred']);
181
182 $this->em->persist($entry);
183 ++$this->importedEntries;
184
185 // flush every 20 entries
186 if (($i % 20) === 0) {
187 $this->em->flush();
188 }
189 ++$i;
190 }
191
192 $this->em->flush();
193 }
194
195 /**
196 * This should return a cleaned array for a given entry to be given to `updateEntry`.
197 *
198 * @param array $entry Data from the imported file
199 * @param bool $markAsRead Should we mark as read content?
200 *
201 * @return array
202 */
203 abstract protected function prepareEntry($entry = [], $markAsRead = false);
204}
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php
index 1d773d3b..6cf3467a 100644
--- a/src/Wallabag/ImportBundle/Import/WallabagV1Import.php
+++ b/src/Wallabag/ImportBundle/Import/WallabagV1Import.php
@@ -2,50 +2,8 @@
2 2
3namespace Wallabag\ImportBundle\Import; 3namespace Wallabag\ImportBundle\Import;
4 4
5use Psr\Log\LoggerInterface; 5class WallabagV1Import extends WallabagImport
6use Psr\Log\NullLogger;
7use Doctrine\ORM\EntityManager;
8use Wallabag\CoreBundle\Entity\Entry;
9use Wallabag\UserBundle\Entity\User;
10use Wallabag\CoreBundle\Tools\Utils;
11use Wallabag\CoreBundle\Helper\ContentProxy;
12
13class WallabagV1Import implements ImportInterface
14{ 6{
15 protected $user;
16 protected $em;
17 protected $logger;
18 protected $contentProxy;
19 protected $skippedEntries = 0;
20 protected $importedEntries = 0;
21 protected $filepath;
22 protected $markAsRead;
23
24 public function __construct(EntityManager $em, ContentProxy $contentProxy)
25 {
26 $this->em = $em;
27 $this->logger = new NullLogger();
28 $this->contentProxy = $contentProxy;
29 }
30
31 public function setLogger(LoggerInterface $logger)
32 {
33 $this->logger = $logger;
34 }
35
36 /**
37 * We define the user in a custom call because on the import command there is no logged in user.
38 * So we can't retrieve user from the `security.token_storage` service.
39 *
40 * @param User $user
41 */
42 public function setUser(User $user)
43 {
44 $this->user = $user;
45
46 return $this;
47 }
48
49 /** 7 /**
50 * {@inheritdoc} 8 * {@inheritdoc}
51 */ 9 */
@@ -67,125 +25,35 @@ class WallabagV1Import implements ImportInterface
67 */ 25 */
68 public function getDescription() 26 public function getDescription()
69 { 27 {
70 return 'This importer will import all your wallabag v1 articles. On your config page, click on "JSON export" in the "Export your wallabag data" section. You will have a "wallabag-export-1-xxxx-xx-xx.json" file.'; 28 return 'import.wallabag_v1.description';
71 }
72
73 /**
74 * {@inheritdoc}
75 */
76 public function import()
77 {
78 if (!$this->user) {
79 $this->logger->error('WallabagImport: user is not defined');
80
81 return false;
82 }
83
84 if (!file_exists($this->filepath) || !is_readable($this->filepath)) {
85 $this->logger->error('WallabagImport: unable to read file', array('filepath' => $this->filepath));
86
87 return false;
88 }
89
90 $data = json_decode(file_get_contents($this->filepath), true);
91
92 if (empty($data)) {
93 return false;
94 }
95
96 $this->parseEntries($data);
97
98 return true;
99 } 29 }
100 30
101 /** 31 /**
102 * {@inheritdoc} 32 * {@inheritdoc}
103 */ 33 */
104 public function getSummary() 34 protected function prepareEntry($entry = [], $markAsRead = false)
105 { 35 {
106 return [ 36 $data = [
107 'skipped' => $this->skippedEntries, 37 'title' => $entry['title'],
108 'imported' => $this->importedEntries, 38 'html' => $entry['content'],
39 'url' => $entry['url'],
40 'content_type' => '',
41 'language' => '',
42 'is_archived' => $entry['is_read'] || $markAsRead,
43 'is_starred' => $entry['is_fav'],
44 'tags' => '',
109 ]; 45 ];
110 }
111
112 /**
113 * Set file path to the json file.
114 *
115 * @param string $filepath
116 */
117 public function setFilepath($filepath)
118 {
119 $this->filepath = $filepath;
120
121 return $this;
122 }
123
124 /**
125 * Set whether articles must be all marked as read.
126 *
127 * @param bool $markAsRead
128 */
129 public function setMarkAsRead($markAsRead)
130 {
131 $this->markAsRead = $markAsRead;
132 46
133 return $this; 47 // force content to be refreshed in case on bad fetch in the v1 installation
134 } 48 if (in_array($entry['title'], $this->untitled)) {
135 49 $data['title'] = '';
136 /** 50 $data['html'] = '';
137 * @param $entries 51 }
138 */
139 protected function parseEntries($entries)
140 {
141 $i = 1;
142
143 //Untitled in all languages from v1. This should never have been translated
144 $untitled = array('Untitled', 'Sans titre', 'podle nadpisu', 'Sin título', 'با عنوان', 'per titolo', 'Sem título', 'Без названия', 'po naslovu', 'Без назви', 'No title found', '');
145
146 foreach ($entries as $importedEntry) {
147 $existingEntry = $this->em
148 ->getRepository('WallabagCoreBundle:Entry')
149 ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
150
151 if (false !== $existingEntry) {
152 ++$this->skippedEntries;
153 continue;
154 }
155
156 // @see ContentProxy->updateEntry
157 $entry = new Entry($this->user);
158 $entry->setUrl($importedEntry['url']);
159
160 if (in_array($importedEntry['title'], $untitled)) {
161 $entry = $this->contentProxy->updateEntry($entry, $importedEntry['url']);
162 } else {
163 $entry->setContent($importedEntry['content']);
164 $entry->setTitle($importedEntry['title']);
165 $entry->setReadingTime(Utils::getReadingTime($importedEntry['content']));
166 $entry->setDomainName(parse_url($importedEntry['url'], PHP_URL_HOST));
167 }
168
169 if (array_key_exists('tags', $importedEntry) && $importedEntry['tags'] != '') {
170 $this->contentProxy->assignTagsToEntry(
171 $entry,
172 $importedEntry['tags']
173 );
174 }
175
176 $entry->setArchived($importedEntry['is_read'] || $this->markAsRead);
177 $entry->setStarred($importedEntry['is_fav']);
178
179 $this->em->persist($entry);
180 ++$this->importedEntries;
181 52
182 // flush every 20 entries 53 if (array_key_exists('tags', $entry) && $entry['tags'] != '') {
183 if (($i % 20) === 0) { 54 $data['tags'] = $entry['tags'];
184 $this->em->flush();
185 }
186 ++$i;
187 } 55 }
188 56
189 $this->em->flush(); 57 return $data;
190 } 58 }
191} 59}
diff --git a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php
index c4bac561..d0035b63 100644
--- a/src/Wallabag/ImportBundle/Import/WallabagV2Import.php
+++ b/src/Wallabag/ImportBundle/Import/WallabagV2Import.php
@@ -2,9 +2,7 @@
2 2
3namespace Wallabag\ImportBundle\Import; 3namespace Wallabag\ImportBundle\Import;
4 4
5use Wallabag\CoreBundle\Entity\Entry; 5class WallabagV2Import extends WallabagImport
6
7class WallabagV2Import extends WallabagV1Import implements ImportInterface
8{ 6{
9 /** 7 /**
10 * {@inheritdoc} 8 * {@inheritdoc}
@@ -27,55 +25,18 @@ class WallabagV2Import extends WallabagV1Import implements ImportInterface
27 */ 25 */
28 public function getDescription() 26 public function getDescription()
29 { 27 {
30 return 'This importer will import all your wallabag v2 articles. Go to All articles, then, on the export sidebar, click on "JSON". You will have a "All articles.json" file.'; 28 return 'import.wallabag_v2.description';
31 } 29 }
32 30
33 /** 31 /**
34 * @param $entries 32 * {@inheritdoc}
35 */ 33 */
36 protected function parseEntries($entries) 34 protected function prepareEntry($entry = [], $markAsRead = false)
37 { 35 {
38 $i = 1; 36 return [
39 37 'html' => $entry['content'],
40 foreach ($entries as $importedEntry) { 38 'content_type' => $entry['mimetype'],
41 $existingEntry = $this->em 39 'is_archived' => ($entry['is_archived'] || $markAsRead),
42 ->getRepository('WallabagCoreBundle:Entry') 40 ] + $entry;
43 ->findByUrlAndUserId($importedEntry['url'], $this->user->getId());
44
45 if (false !== $existingEntry) {
46 ++$this->skippedEntries;
47 continue;
48 }
49
50 // @see ContentProxy->updateEntry
51 $entry = new Entry($this->user);
52 $entry->setUrl($importedEntry['url']);
53 $entry->setTitle($importedEntry['title']);
54 $entry->setArchived($importedEntry['is_archived'] || $this->markAsRead);
55 $entry->setStarred($importedEntry['is_starred']);
56 $entry->setContent($importedEntry['content']);
57 $entry->setReadingTime($importedEntry['reading_time']);
58 $entry->setDomainName($importedEntry['domain_name']);
59 if (isset($importedEntry['mimetype'])) {
60 $entry->setMimetype($importedEntry['mimetype']);
61 }
62 if (isset($importedEntry['language'])) {
63 $entry->setLanguage($importedEntry['language']);
64 }
65 if (isset($importedEntry['preview_picture'])) {
66 $entry->setPreviewPicture($importedEntry['preview_picture']);
67 }
68
69 $this->em->persist($entry);
70 ++$this->importedEntries;
71
72 // flush every 20 entries
73 if (($i % 20) === 0) {
74 $this->em->flush();
75 }
76 ++$i;
77 }
78
79 $this->em->flush();
80 } 41 }
81} 42}
diff --git a/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig
index 8c300624..aebbfa20 100644
--- a/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig
+++ b/src/Wallabag/ImportBundle/Resources/views/Import/index.html.twig
@@ -1,17 +1,18 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2{% block title %}{% trans %}Import{% endtrans %}{% endblock %} 2
3{% block title %}{{ 'import.page_title'|trans }}{% endblock %}
3 4
4{% block content %} 5{% block content %}
5<div class="row"> 6<div class="row">
6 <div class="col s12"> 7 <div class="col s12">
7 <div class="card-panel settings"> 8 <div class="card-panel settings">
8 {% trans %}Welcome to wallabag importer. Please select your previous service that you want to migrate.{% endtrans %} 9 {{ 'import.page_description'|trans }}
9 <ul> 10 <ul>
10 {% for import in imports %} 11 {% for import in imports %}
11 <li> 12 <li>
12 <h5>{{ import.name }}</h5> 13 <h5>{{ import.name }}</h5>
13 <blockquote>{{ import.description|trans }}</blockquote> 14 <blockquote>{{ import.description|trans }}</blockquote>
14 <p><a class="waves-effect waves-light btn" href="{{ path(import.url) }}">{% trans %}Import contents{% endtrans %}</a></p> 15 <p><a class="waves-effect waves-light btn" href="{{ path(import.url) }}">{{ 'import.action.import_contents'|trans }}</a></p>
15 </li> 16 </li>
16 {% endfor %} 17 {% endfor %}
17 </ul> 18 </ul>
diff --git a/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig
index 3365fc6a..401dbd33 100644
--- a/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig
+++ b/src/Wallabag/ImportBundle/Resources/views/Pocket/index.html.twig
@@ -1,5 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2{% block title %}{% trans %}Import > Pocket{% endtrans %}{% endblock %} 2
3{% block title %}{{ 'import.pocket.page_title'|trans }}{% endblock %}
3 4
4{% block content %} 5{% block content %}
5<div class="row"> 6<div class="row">
@@ -7,27 +8,29 @@
7 <div class="card-panel settings"> 8 <div class="card-panel settings">
8 {% if not has_consumer_key %} 9 {% if not has_consumer_key %}
9 <div class="card-panel red darken-1"> 10 <div class="card-panel red darken-1">
10 {% trans %}Pocket import isn't configured.{% endtrans %} 11 {{ 'import.pocket.config_missing.description'|trans }}
12
11 {% if is_granted('ROLE_SUPER_ADMIN') %} 13 {% if is_granted('ROLE_SUPER_ADMIN') %}
12 {% trans with {'%keyurls%': '<a href="' ~ path('craue_config_settings_modify') ~ '#set-import">', '%keyurle%':'</a>'} %}You need to define %keyurls% a pocket_consumer_key %keyurle%.{% endtrans %} 14 {{ 'import.pocket.config_missing.admin_message'|trans({'%keyurls%': '<a href="' ~ path('craue_config_settings_modify') ~ '#set-import">', '%keyurle%':'</a>'})|raw }}
13 {% else %} 15 {% else %}
14 {% trans %}Your server admin needs to define an API Key for Pocket.{% endtrans %} 16 {{ 'import.pocket.config_missing.user_message'|trans }}
15 {% endif %} 17 {% endif %}
16 </div> 18 </div>
17 {% endif %} 19 {% endif %}
18 20
19 <blockquote>{{ import.description|trans }}</blockquote> 21 <blockquote>{{ import.description|trans }}</blockquote>
20 <p>{% trans %}You can import your data from your Pocket account. You just have to click on the below button and authorize the application to connect to getpocket.com.{% endtrans %}</p> 22 <p>{{ 'import.pocket.authorize_message'|trans }}</p>
23
21 <form method="post" action="{{ path('import_pocket_auth') }}"> 24 <form method="post" action="{{ path('import_pocket_auth') }}">
22 <div class="row"> 25 <div class="row">
23 <div class="input-field col s6 with-checkbox"> 26 <div class="input-field col s6 with-checkbox">
24 <h6>{% trans %}Mark all as read ?{% endtrans %}</h6> 27 <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6>
25 {{ form_widget(form.read) }} 28 {{ form_widget(form.mark_as_read) }}
26 <label for="form_read">{% trans %}Mark all imported entries as read{% endtrans %}</label> 29 {{ form_label(form.mark_as_read) }}
30 </div>
27 </div> 31 </div>
28 </div>
29 <button class="btn waves-effect waves-light" type="submit" name="action"> 32 <button class="btn waves-effect waves-light" type="submit" name="action">
30 {% trans %}Connect to Pocket and import data{% endtrans %} 33 {{ 'import.pocket.connect_to_pocket'|trans }}
31 </button> 34 </button>
32 </form> 35 </form>
33 </div> 36 </div>
diff --git a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig
index a418ed1c..13e24c8c 100644
--- a/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig
+++ b/src/Wallabag/ImportBundle/Resources/views/WallabagV1/index.html.twig
@@ -1,5 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2{% block title %}{% trans %}Import > Wallabag v1{% endtrans %}{% endblock %} 2
3{% block title %}{{ 'import.wallabag_v1.page_title'|trans }}{% endblock %}
3 4
4{% block content %} 5{% block content %}
5<div class="row"> 6<div class="row">
@@ -7,7 +8,8 @@
7 <div class="card-panel settings"> 8 <div class="card-panel settings">
8 <div class="row"> 9 <div class="row">
9 <blockquote>{{ import.description|trans }}</blockquote> 10 <blockquote>{{ import.description|trans }}</blockquote>
10 <p>{% trans %}Please select your wallabag export and click on the below button to upload and import it.{% endtrans %}</p> 11 <p>{{ 'import.wallabag_v1.how_to'|trans }}</p>
12
11 <div class="col s12"> 13 <div class="col s12">
12 {{ form_start(form, {'method': 'POST'}) }} 14 {{ form_start(form, {'method': 'POST'}) }}
13 {{ form_errors(form) }} 15 {{ form_errors(form) }}
@@ -15,7 +17,7 @@
15 <div class="file-field input-field col s12"> 17 <div class="file-field input-field col s12">
16 {{ form_errors(form.file) }} 18 {{ form_errors(form.file) }}
17 <div class="btn"> 19 <div class="btn">
18 <span>{% trans %}File{% endtrans %}</span> 20 <span>{{ form.file.vars.label|trans }}</span>
19 {{ form_widget(form.file) }} 21 {{ form_widget(form.file) }}
20 </div> 22 </div>
21 <div class="file-path-wrapper"> 23 <div class="file-path-wrapper">
@@ -23,15 +25,15 @@
23 </div> 25 </div>
24 </div> 26 </div>
25 <div class="input-field col s6 with-checkbox"> 27 <div class="input-field col s6 with-checkbox">
26 <h6>{% trans %}Mark all as read ?{% endtrans %}</h6> 28 <h6>{{ 'import.form.mark_as_read_title'|trans }}</h6>
27 {{ form_widget(form.mark_as_read) }} 29 {{ form_widget(form.mark_as_read) }}
28 <label for="upload_import_file_mark_as_read">{% trans %}Mark all imported entries as read{% endtrans %}</label> 30 {{ form_label(form.mark_as_read) }}
29 </div> 31 </div>
30 </div> 32 </div>
31 <div class="hidden">{{ form_rest(form) }}</div> 33
32 <button class="btn waves-effect waves-light" type="submit" name="action"> 34 {{ form_widget(form.save, { 'attr': {'class': 'btn waves-effect waves-light'} }) }}
33 {% trans %}Upload file{% endtrans %} 35
34 </button> 36 {{ form_rest(form) }}
35 </form> 37 </form>
36 </div> 38 </div>
37 </div> 39 </div>
diff --git a/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig b/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig
index 78fe67e4..c2905fc6 100644
--- a/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig
+++ b/src/Wallabag/ImportBundle/Resources/views/WallabagV2/index.html.twig
@@ -1,2 +1,3 @@
1{% extends "WallabagImportBundle:WallabagV1:index.html.twig" %} 1{% extends "WallabagImportBundle:WallabagV1:index.html.twig" %}
2{% block title %}{% trans %}Import > Wallabag v2{% endtrans %}{% endblock %} 2
3{% block title %}{{ 'import.wallabag_v2.page_title'|trans }}{% endblock %}
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php
index c2acd68c..403fe9b0 100644
--- a/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php
+++ b/src/Wallabag/ImportBundle/Tests/Controller/PocketControllerTest.php
@@ -17,11 +17,34 @@ class PocketControllerTest extends WallabagCoreTestCase
17 $this->assertEquals(1, $crawler->filter('button[type=submit]')->count()); 17 $this->assertEquals(1, $crawler->filter('button[type=submit]')->count());
18 } 18 }
19 19
20 public function testImportPocketAuthBadToken()
21 {
22 $this->logInAs('admin');
23 $client = $this->getClient();
24
25 $crawler = $client->request('GET', '/import/pocket/auth');
26
27 $this->assertEquals(302, $client->getResponse()->getStatusCode());
28 }
29
20 public function testImportPocketAuth() 30 public function testImportPocketAuth()
21 { 31 {
32 $this->markTestSkipped('PocketImport: Find a way to properly mock a service.');
33
22 $this->logInAs('admin'); 34 $this->logInAs('admin');
23 $client = $this->getClient(); 35 $client = $this->getClient();
24 36
37 $pocketImport = $this->getMockBuilder('Wallabag\ImportBundle\Import\PocketImport')
38 ->disableOriginalConstructor()
39 ->getMock();
40
41 $pocketImport
42 ->expects($this->once())
43 ->method('getRequestToken')
44 ->willReturn('token');
45
46 $client->getContainer()->set('wallabag_import.pocket.import', $pocketImport);
47
25 $crawler = $client->request('GET', '/import/pocket/auth'); 48 $crawler = $client->request('GET', '/import/pocket/auth');
26 49
27 $this->assertEquals(301, $client->getResponse()->getStatusCode()); 50 $this->assertEquals(301, $client->getResponse()->getStatusCode());
@@ -37,6 +60,6 @@ class PocketControllerTest extends WallabagCoreTestCase
37 60
38 $this->assertEquals(302, $client->getResponse()->getStatusCode()); 61 $this->assertEquals(302, $client->getResponse()->getStatusCode());
39 $this->assertContains('import/pocket', $client->getResponse()->headers->get('location')); 62 $this->assertContains('import/pocket', $client->getResponse()->headers->get('location'));
40 $this->assertEquals('Import failed, please try again.', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]); 63 $this->assertEquals('flashes.import.notice.failed', $client->getContainer()->get('session')->getFlashBag()->peek('notice')[0]);
41 } 64 }
42} 65}
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php
index 7f97b0f5..8d353a71 100644
--- a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php
+++ b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV1ControllerTest.php
@@ -54,8 +54,8 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
54 54
55 $this->assertTrue($content->getTags()->contains($tag)); 55 $this->assertTrue($content->getTags()->contains($tag));
56 56
57 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 57 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
58 $this->assertContains('Import summary', $alert[0]); 58 $this->assertContains('flashes.import.notice.summary', $body[0]);
59 } 59 }
60 60
61 public function testImportWallabagWithFileAndMarkAllAsRead() 61 public function testImportWallabagWithFileAndMarkAllAsRead()
@@ -99,7 +99,8 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
99 99
100 $this->assertTrue($content2->isArchived()); 100 $this->assertTrue($content2->isArchived());
101 101
102 $this->assertContains('Import summary', $client->getResponse()->getContent()); 102 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
103 $this->assertContains('flashes.import.notice.summary', $body[0]);
103 } 104 }
104 105
105 public function testImportWallabagWithEmptyFile() 106 public function testImportWallabagWithEmptyFile()
@@ -122,7 +123,7 @@ class WallabagV1ControllerTest extends WallabagCoreTestCase
122 123
123 $crawler = $client->followRedirect(); 124 $crawler = $client->followRedirect();
124 125
125 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 126 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
126 $this->assertContains('Import failed, please try again', $alert[0]); 127 $this->assertContains('flashes.import.notice.failed', $body[0]);
127 } 128 }
128} 129}
diff --git a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php
index 617c0517..490f9ede 100644
--- a/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php
+++ b/src/Wallabag/ImportBundle/Tests/Controller/WallabagV2ControllerTest.php
@@ -39,8 +39,8 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
39 39
40 $crawler = $client->followRedirect(); 40 $crawler = $client->followRedirect();
41 41
42 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 42 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
43 $this->assertContains('Import summary', $alert[0]); 43 $this->assertContains('flashes.import.notice.summary', $body[0]);
44 44
45 $content = $client->getContainer() 45 $content = $client->getContainer()
46 ->get('doctrine.orm.entity_manager') 46 ->get('doctrine.orm.entity_manager')
@@ -53,6 +53,7 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
53 $this->assertEmpty($content->getMimetype()); 53 $this->assertEmpty($content->getMimetype());
54 $this->assertEmpty($content->getPreviewPicture()); 54 $this->assertEmpty($content->getPreviewPicture());
55 $this->assertEmpty($content->getLanguage()); 55 $this->assertEmpty($content->getLanguage());
56 $this->assertEquals(0, count($content->getTags()));
56 57
57 $content = $client->getContainer() 58 $content = $client->getContainer()
58 ->get('doctrine.orm.entity_manager') 59 ->get('doctrine.orm.entity_manager')
@@ -65,6 +66,7 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
65 $this->assertNotEmpty($content->getMimetype()); 66 $this->assertNotEmpty($content->getMimetype());
66 $this->assertNotEmpty($content->getPreviewPicture()); 67 $this->assertNotEmpty($content->getPreviewPicture());
67 $this->assertNotEmpty($content->getLanguage()); 68 $this->assertNotEmpty($content->getLanguage());
69 $this->assertEquals(2, count($content->getTags()));
68 } 70 }
69 71
70 public function testImportWallabagWithEmptyFile() 72 public function testImportWallabagWithEmptyFile()
@@ -87,7 +89,7 @@ class WallabagV2ControllerTest extends WallabagCoreTestCase
87 89
88 $crawler = $client->followRedirect(); 90 $crawler = $client->followRedirect();
89 91
90 $this->assertGreaterThan(1, $alert = $crawler->filter('div.messages.success')->extract(array('_text'))); 92 $this->assertGreaterThan(1, $body = $crawler->filter('body')->extract(array('_text')));
91 $this->assertContains('Import failed, please try again', $alert[0]); 93 $this->assertContains('flashes.import.notice.failed', $body[0]);
92 } 94 }
93} 95}
diff --git a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php
index 450cdc95..43b60ec3 100644
--- a/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php
+++ b/src/Wallabag/ImportBundle/Tests/Import/PocketImportTest.php
@@ -85,7 +85,7 @@ class PocketImportTest extends \PHPUnit_Framework_TestCase
85 85
86 $this->assertEquals('Pocket', $pocketImport->getName()); 86 $this->assertEquals('Pocket', $pocketImport->getName());
87 $this->assertNotEmpty($pocketImport->getUrl()); 87 $this->assertNotEmpty($pocketImport->getUrl());
88 $this->assertContains('This importer will import all your Pocket data.', $pocketImport->getDescription()); 88 $this->assertEquals('import.pocket.description', $pocketImport->getDescription());
89 } 89 }
90 90
91 public function testOAuthRequest() 91 public function testOAuthRequest()
diff --git a/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php
index 8ab7e830..3ef852e5 100644
--- a/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php
+++ b/src/Wallabag/ImportBundle/Tests/Import/WallabagV1ImportTest.php
@@ -2,8 +2,9 @@
2 2
3namespace Wallabag\ImportBundle\Tests\Import; 3namespace Wallabag\ImportBundle\Tests\Import;
4 4
5use Wallabag\UserBundle\Entity\User;
6use Wallabag\ImportBundle\Import\WallabagV1Import; 5use Wallabag\ImportBundle\Import\WallabagV1Import;
6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry;
7use Monolog\Logger; 8use Monolog\Logger;
8use Monolog\Handler\TestHandler; 9use Monolog\Handler\TestHandler;
9 10
@@ -45,7 +46,7 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
45 46
46 $this->assertEquals('wallabag v1', $wallabagV1Import->getName()); 47 $this->assertEquals('wallabag v1', $wallabagV1Import->getName());
47 $this->assertNotEmpty($wallabagV1Import->getUrl()); 48 $this->assertNotEmpty($wallabagV1Import->getUrl());
48 $this->assertContains('This importer will import all your wallabag v1 articles.', $wallabagV1Import->getDescription()); 49 $this->assertEquals('import.wallabag_v1.description', $wallabagV1Import->getDescription());
49 } 50 }
50 51
51 public function testImport() 52 public function testImport()
@@ -71,7 +72,7 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
71 ->getMock(); 72 ->getMock();
72 73
73 $this->contentProxy 74 $this->contentProxy
74 ->expects($this->once()) 75 ->expects($this->exactly(3))
75 ->method('updateEntry') 76 ->method('updateEntry')
76 ->willReturn($entry); 77 ->willReturn($entry);
77 78
@@ -99,6 +100,11 @@ class WallabagV1ImportTest extends \PHPUnit_Framework_TestCase
99 ->method('getRepository') 100 ->method('getRepository')
100 ->willReturn($entryRepo); 101 ->willReturn($entryRepo);
101 102
103 $this->contentProxy
104 ->expects($this->exactly(3))
105 ->method('updateEntry')
106 ->willReturn(new Entry($this->user));
107
102 // check that every entry persisted are archived 108 // check that every entry persisted are archived
103 $this->em 109 $this->em
104 ->expects($this->any()) 110 ->expects($this->any())
diff --git a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php b/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php
index 2b642d27..dbefdee3 100644
--- a/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php
+++ b/src/Wallabag/ImportBundle/Tests/Import/WallabagV2ImportTest.php
@@ -4,6 +4,7 @@ namespace Wallabag\ImportBundle\Tests\Import;
4 4
5use Wallabag\ImportBundle\Import\WallabagV2Import; 5use Wallabag\ImportBundle\Import\WallabagV2Import;
6use Wallabag\UserBundle\Entity\User; 6use Wallabag\UserBundle\Entity\User;
7use Wallabag\CoreBundle\Entity\Entry;
7use Monolog\Logger; 8use Monolog\Logger;
8use Monolog\Handler\TestHandler; 9use Monolog\Handler\TestHandler;
9 10
@@ -45,7 +46,7 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
45 46
46 $this->assertEquals('wallabag v2', $wallabagV2Import->getName()); 47 $this->assertEquals('wallabag v2', $wallabagV2Import->getName());
47 $this->assertNotEmpty($wallabagV2Import->getUrl()); 48 $this->assertNotEmpty($wallabagV2Import->getUrl());
48 $this->assertContains('This importer will import all your wallabag v2 articles.', $wallabagV2Import->getDescription()); 49 $this->assertEquals('import.wallabag_v2.description', $wallabagV2Import->getDescription());
49 } 50 }
50 51
51 public function testImport() 52 public function testImport()
@@ -66,6 +67,11 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
66 ->method('getRepository') 67 ->method('getRepository')
67 ->willReturn($entryRepo); 68 ->willReturn($entryRepo);
68 69
70 $this->contentProxy
71 ->expects($this->exactly(2))
72 ->method('updateEntry')
73 ->willReturn(new Entry($this->user));
74
69 $res = $wallabagV2Import->import(); 75 $res = $wallabagV2Import->import();
70 76
71 $this->assertTrue($res); 77 $this->assertTrue($res);
@@ -90,6 +96,11 @@ class WallabagV2ImportTest extends \PHPUnit_Framework_TestCase
90 ->method('getRepository') 96 ->method('getRepository')
91 ->willReturn($entryRepo); 97 ->willReturn($entryRepo);
92 98
99 $this->contentProxy
100 ->expects($this->exactly(2))
101 ->method('updateEntry')
102 ->willReturn(new Entry($this->user));
103
93 // check that every entry persisted are archived 104 // check that every entry persisted are archived
94 $this->em 105 $this->em
95 ->expects($this->any()) 106 ->expects($this->any())
diff --git a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json b/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json
index 37d2d0ae..618ce546 100644
--- a/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json
+++ b/src/Wallabag/ImportBundle/Tests/fixtures/wallabag-v2.json
@@ -1,31 +1,34 @@
1[ 1[
2 { 2 {
3 "id": "23", 3 "id": "23",
4 "title": "Site d'information fran\u00e7ais d'actualit\u00e9s ind\u00e9pendant et participatif en ligne | Mediapart", 4 "title": "Site d'information français d'actualités indépendant et participatif en ligne | Mediapart",
5 "url": "https:\/\/www.mediapart.fr\/", 5 "url": "https://www.mediapart.fr/",
6 "is_archived": false, 6 "is_archived": false,
7 "is_starred": false, 7 "is_starred": false,
8 "content": "<div alt=\"li\">\u00c9dition <a href=\"https:\/\/blogs.mediapart.fr\/edition\/camedia-0\">CAM\u00e9dia<\/a>\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/edition\/camedia\/article\/180116\/deux-nouvelles-editions-pour-debattre-dans-le-club-sur-la-laicite-et-sur-la-democratie\">Deux nouvelles \u00e9ditions pour d\u00e9battre dans le club sur la la\u00efcit\u00e9 et sur la d\u00e9mocratie<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>CAM\u00e9dia apr\u00e8s un \u00e9change sur \u00ab\u00a0l'\u00e9thique du d\u00e9bat\u00a0\u00bb a lanc\u00e9 deux discussions , l'une sur le th\u00e8me de la la\u00efcit\u00e9, l'autre ( encore en cours) sur celui de la d\u00e9mocratie. Nous sommes heureux de pouvoir signaler la cr\u00e9ation de deux nouvelles \u00e9ditions participatives sur ces th\u00e8mes. Nous vous invitons \u00e0 les lire et \u00e0 participer \u00e0 leurs d\u00e9bats.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/lucile-longre\/blog\/170116\/de-limportance-de-rever-eloge-du-merveilleux\">De l'importance de r\u00eaver, \u00e9loge du merveilleux<\/a><\/h3>\n<p>17 janv. 2016 | Par <\/p>\n<p>Je parlerai ici des r\u00eaves comme moteur de vie, de ces r\u00eaves qui vous rattachent et vous font esp\u00e9rer \u00e0 ce qu\u2019il y a de plus humain dans l\u2019homme, m\u00eame au milieu de la plus noire des d\u00e9tresses.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/barbara-romagnan\/blog\/180116\/fins-dune-toute-puissance\">Fin(s) d'une toute-puissance<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>En ce d\u00e9but d\u2019ann\u00e9e, je recommande la lecture du dernier ouvrage de Guillaume Duval, La France ne sera jamais plus une grande puissance ? Tant mieux !<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/jean-pierre-thibaudat\/blog\/170116\/l-allier-departement-de-destruction-massive-du-tissu-culturel\">L\u2019Allier, d\u00e9partement de destruction massive du tissu culturel<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>Les temps sont durs pour les petites structures, les associations culturelles qui, de bourgades en villages, travaillent au c\u0153ur des r\u00e9gions. Leurs subventions sont souvent revues \u00e0 la baisse. Le d\u00e9partement de l\u2019Allier les a carr\u00e9ment supprim\u00e9es. Pour favoriser \u00ab l\u2019\u00e9v\u00e9nementiel \u00bb.<\/p>\n<\/div><div alt=\"li\">\u00c9dition <a href=\"https:\/\/blogs.mediapart.fr\/edition\/les-invites-de-mediapart\">Les invit\u00e9s de Mediapart<\/a>\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/edition\/les-invites-de-mediapart\/article\/180116\/la-democratie-deja-attaquee-par-la-cooperation-reglementaire-transatlantiqu\">La d\u00e9mocratie d\u00e9j\u00e0 attaqu\u00e9e par la coop\u00e9ration r\u00e9glementaire transatlantique<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>Lora Verheecke et David Lundy travaillent pour Corporate Europe Observatory, une ONG bas\u00e9e \u00e0 Bruxelles qui enqu\u00eate sur le pouvoir des lobbies des grandes entreprises sur la politique de l\u2019Union europ\u00e9enne. Ils r\u00e9v\u00e8lent que depuis 25 ans le projet de \u00ab coop\u00e9ration r\u00e9glementaire \u00bb men\u00e9 par l\u2019Union europ\u00e9enne et les \u00c9tats-Unis a \u00e9t\u00e9 domin\u00e9 par les grandes entreprises. ET que le TTIP cherche \u00e0 ent\u00e9riner ce projet.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/jacqueline-derens\/blog\/180116\/2016-une-annee-test-pour-jacob-zuma-et-son-gouvernement\">2016, une ann\u00e9e test pour Jacob Zuma et son gouvernement<\/a><\/h3>\n<p>18 janv. 2016 | Par <\/p>\n<p>Les turbulences de l\u2019an pass\u00e9 ont toutes les chances de continuer \u00e0 troubler le climat politique et social de l\u2019Afrique du Sud en 2016. La situation exige des changements profonds dans la conduite des affaires du pays. Jacob Zuma tout en admettant la n\u00e9cessit\u00e9 de ces changements, est-il l\u2019homme de la situation ? Son gouvernement r\u00e9pondra-t-il aux attentes des citoyens sud-africains ?<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/marie-cosnay\/blog\/140116\/un-mal-fou-janvier-2016\">Un mal fou (janvier 2016)<\/a><\/h3>\n<p>14 janv. 2016 | Par <\/p>\n<p>J\u2019ai une fringale d\u2019aventure, d\u2019aventures \u00e0 venir. J\u2019ai la fringale de la fringale des aventures et soudain, rupture. Je n\u2019y arrive plus, tout est bloqu\u00e9, tout emp\u00each\u00e9. Faut dire que depuis un an environ, tout est devenu plus compliqu\u00e9. Ecrire va de moins en moins de soi.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/jean-pierre-veran\/blog\/170116\/redoublement-le-changement-bas-bruit\">Redoublement : le changement \u00e0 bas bruit ?<\/a><\/h3>\n<p>17 janv. 2016 | Par <\/p>\n<p>S\u2019il est une caract\u00e9ristique de la forme scolaire fran\u00e7aise bien \u00e9tablie dans la culture des personnels, des \u00e9l\u00e8ves et des parents, c\u2019est bien le redoublement, cens\u00e9 sanctionner des r\u00e9sultats insuffisants pour envisager le passage dans la classe sup\u00e9rieure. Or, en ce domaine, l\u2019\u00e9volution est nette.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/michel-de-pracontal\/blog\/160116\/samedi-sciences-196-des-chasseurs-de-mammouths-en-arctique-il-y-45-000-ans\">Samedi-sciences (196): des chasseurs de mammouths en Arctique il y a 45 000 ans<\/a><\/h3>\n<p>16 janv. 2016 | Par <a href=\"https:\/\/blogs.mediapart.fr\/michel-de-pracontal\" class=\"journalist\">Michel de Pracontal<\/a><\/p>\n<p>Les restes d\u2019un mammouth retrouv\u00e9s en Arctique sib\u00e9rien, dat\u00e9s de 45 000 ans, portent les traces de blessures inflig\u00e9es par des chasseurs humains. Les scientifiques pensaient jusqu\u2019ici que notre esp\u00e8ce ne s\u2019\u00e9tait pas aventur\u00e9e dans cette r\u00e9gion glaciale il y a plus de 30 000 ou 35 0000 ans. En r\u00e9alit\u00e9, des hommes ont r\u00e9ussi \u00e0 survivre en Arctique au moins 10 000 ans plus t\u00f4t que l\u2019on croyait.<\/p>\n<\/div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https:\/\/blogs.mediapart.fr\/alain-zolty\/blog\/140116\/de-la-democratie-du-citoyen-et-de-lethique\">De la d\u00e9mocratie, du citoyen et de l'\u00e9thique<\/a><\/h3>\n<p>14 janv. 2016 | Par <\/p>\n<p>Trois ouvrages sont parus au Seuil, qui font \u00e9tat de la n\u00e9cessit\u00e9 d\u2019int\u00e9grer le citoyen dans la gouvernance de la nation. Non pas \u00e0 titre consultatif mais dot\u00e9 d\u2019un pouvoir d\u00e9lib\u00e9ratif pour constituer une contre-force face aux clans politico-financiers qui dominent la vie publique.<\/p>\n<\/div>", 8 "content": "<div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/camedia-0\">CAMédia</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/camedia/article/180116/deux-nouvelles-editions-pour-debattre-dans-le-club-sur-la-laicite-et-sur-la-democratie\">Deux nouvelles éditions pour débattre dans le club sur la laïcité et sur la démocratie</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>CAMédia après un échange sur « l'éthique du débat » a lancé deux discussions , l'une sur le thème de la laïcité, l'autre ( encore en cours) sur celui de la démocratie. Nous sommes heureux de pouvoir signaler la création de deux nouvelles éditions participatives sur ces thèmes. Nous vous invitons à les lire et à participer à leurs débats.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/lucile-longre/blog/170116/de-limportance-de-rever-eloge-du-merveilleux\">De l'importance de rêver, éloge du merveilleux</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>Je parlerai ici des rêves comme moteur de vie, de ces rêves qui vous rattachent et vous font espérer à ce qu’il y a de plus humain dans l’homme, même au milieu de la plus noire des détresses.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/barbara-romagnan/blog/180116/fins-dune-toute-puissance\">Fin(s) d'une toute-puissance</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>En ce début d’année, je recommande la lecture du dernier ouvrage de Guillaume Duval, La France ne sera jamais plus une grande puissance ? Tant mieux !</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-thibaudat/blog/170116/l-allier-departement-de-destruction-massive-du-tissu-culturel\">L’Allier, département de destruction massive du tissu culturel</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les temps sont durs pour les petites structures, les associations culturelles qui, de bourgades en villages, travaillent au cœur des régions. Leurs subventions sont souvent revues à la baisse. Le département de l’Allier les a carrément supprimées. Pour favoriser « l’événementiel ».</p>\n</div><div alt=\"li\">Édition <a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart\">Les invités de Mediapart</a>\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/edition/les-invites-de-mediapart/article/180116/la-democratie-deja-attaquee-par-la-cooperation-reglementaire-transatlantiqu\">La démocratie déjà attaquée par la coopération réglementaire transatlantique</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Lora Verheecke et David Lundy travaillent pour Corporate Europe Observatory, une ONG basée à Bruxelles qui enquête sur le pouvoir des lobbies des grandes entreprises sur la politique de l’Union européenne. Ils révèlent que depuis 25 ans le projet de « coopération réglementaire » mené par l’Union européenne et les États-Unis a été dominé par les grandes entreprises. ET que le TTIP cherche à entériner ce projet.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jacqueline-derens/blog/180116/2016-une-annee-test-pour-jacob-zuma-et-son-gouvernement\">2016, une année test pour Jacob Zuma et son gouvernement</a></h3>\n<p>18 janv. 2016 | Par </p>\n<p>Les turbulences de l’an passé ont toutes les chances de continuer à troubler le climat politique et social de l’Afrique du Sud en 2016. La situation exige des changements profonds dans la conduite des affaires du pays. Jacob Zuma tout en admettant la nécessité de ces changements, est-il l’homme de la situation ? Son gouvernement répondra-t-il aux attentes des citoyens sud-africains ?</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/marie-cosnay/blog/140116/un-mal-fou-janvier-2016\">Un mal fou (janvier 2016)</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>J’ai une fringale d’aventure, d’aventures à venir. J’ai la fringale de la fringale des aventures et soudain, rupture. Je n’y arrive plus, tout est bloqué, tout empêché. Faut dire que depuis un an environ, tout est devenu plus compliqué. Ecrire va de moins en moins de soi.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/jean-pierre-veran/blog/170116/redoublement-le-changement-bas-bruit\">Redoublement : le changement à bas bruit ?</a></h3>\n<p>17 janv. 2016 | Par </p>\n<p>S’il est une caractéristique de la forme scolaire française bien établie dans la culture des personnels, des élèves et des parents, c’est bien le redoublement, censé sanctionner des résultats insuffisants pour envisager le passage dans la classe supérieure. Or, en ce domaine, l’évolution est nette.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/michel-de-pracontal/blog/160116/samedi-sciences-196-des-chasseurs-de-mammouths-en-arctique-il-y-45-000-ans\">Samedi-sciences (196): des chasseurs de mammouths en Arctique il y a 45 000 ans</a></h3>\n<p>16 janv. 2016 | Par <a href=\"https://blogs.mediapart.fr/michel-de-pracontal\" class=\"journalist\">Michel de Pracontal</a></p>\n<p>Les restes d’un mammouth retrouvés en Arctique sibérien, datés de 45 000 ans, portent les traces de blessures infligées par des chasseurs humains. Les scientifiques pensaient jusqu’ici que notre espèce ne s’était pas aventurée dans cette région glaciale il y a plus de 30 000 ou 35 0000 ans. En réalité, des hommes ont réussi à survivre en Arctique au moins 10 000 ans plus tôt que l’on croyait.</p>\n</div><div alt=\"li\">\n<h3 class=\"title\"><a href=\"https://blogs.mediapart.fr/alain-zolty/blog/140116/de-la-democratie-du-citoyen-et-de-lethique\">De la démocratie, du citoyen et de l'éthique</a></h3>\n<p>14 janv. 2016 | Par </p>\n<p>Trois ouvrages sont parus au Seuil, qui font état de la nécessité d’intégrer le citoyen dans la gouvernance de la nation. Non pas à titre consultatif mais doté d’un pouvoir délibératif pour constituer une contre-force face aux clans politico-financiers qui dominent la vie publique.</p>\n</div>",
9 "mimetype": "text\/html", 9 "mimetype": "text/html",
10 "language": "fr", 10 "language": "fr",
11 "reading_time": 3, 11 "reading_time": 3,
12 "domain_name": "www.mediapart.fr", 12 "domain_name": "www.mediapart.fr",
13 "preview_picture": "https:\/\/www.mediapart.fr\/images\/social\/800\/mediapart.png", 13 "preview_picture": "https://www.mediapart.fr/images/social/800/mediapart.png",
14 "tags": [] 14 "tags": [
15 } 15 "mediapart",
16 , 16 "blog"
17 ]
18 },
17 { 19 {
18 "id": 22, 20 "id": 22,
19 "title": "R\u00e9fugi\u00e9s: l'UE va cr\u00e9er 100\u00a0000\u00a0places d'accueil dans les Balkans", 21 "title": "Réfugiés: l'UE va créer 100 000 places d'accueil dans les Balkans",
20 "url": "http:\/\/www.liberation.fr\/planete\/2015\/10\/26\/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867", 22 "url": "http://www.liberation.fr/planete/2015/10/26/refugies-l-ue-va-creer-100-000-places-d-accueil-dans-les-balkans_1408867",
21 "is_archived": false, 23 "is_archived": false,
22 "is_starred": false, 24 "is_starred": false,
23 "content": "<p>Pour un sommet sur les r\u00e9fugi\u00e9s qui devait se concentrer sur des <em>\u00abmesures op\u00e9rationnelles imm\u00e9diates\u00bb<\/em> dans les Balkans, la r\u00e9union, dimanche \u00e0 Bruxelles, de 11\u00a0chefs d\u2019Etat et de gouvernement, dont 8 Europ\u00e9ens, a \u00e9t\u00e9 agit\u00e9e. D\u00e8s leur arriv\u00e9e, Viktor\u00a0Orb\u00e1n (Hongrie) et\u00a0Al\u00e9xis Ts\u00edpras (Gr\u00e8ce) se sont jet\u00e9 des anath\u00e8mes. Le Premier ministre grec a d\u00e9nonc\u00e9 l\u2019attitude <em>\u00abnot in my backyard\u00bb<\/em> (pas de \u00e7a chez moi) de certains Etats europ\u00e9ens, alors que son pays est montr\u00e9 du doigt par d\u2019autres dirigeants, dont\u00a0Orb\u00e1n\u00a0: ils reprochent \u00e0 la Gr\u00e8ce de ne pas suffisamment contr\u00f4ler ses fronti\u00e8res avec la Turquie et ne pas montrer assez de z\u00e8le dans l\u2019enregistrement des demandeurs d\u2019asile.<\/p>\n<p>Le sommet, convoqu\u00e9 par la Commission europ\u00e9enne, sur suggestion de l\u2019Allemagne, aura au moins permis \u00e0 ces 11\u00a0Etats \u2013\u00a0Autriche, Bulgarie, Croatie, Allemagne, Gr\u00e8ce, Hongrie, Roumanie, Slov\u00e9nie c\u00f4t\u00e9 europ\u00e9en, et 3 pays \u00abnon UE\u00bb, Albanie, Mac\u00e9doine et Serbie\u00a0\u2013 de discuter ensemble.<\/p>\n<h3>400\u00a0policiers europ\u00e9ens en Slov\u00e9nie<\/h3>\n<p>L\u2019objectif, rappel\u00e9 par Angela Merkel, \u00e9tait de trouver une <em>\u00abr\u00e9ponse coordonn\u00e9e\u00bb<\/em> \u00e0 la crise des r\u00e9fugi\u00e9s. Quelques mesures ont \u00e9t\u00e9 annonc\u00e9es\u00a0: 100\u00a0000\u00a0places d\u2019accueil seront cr\u00e9\u00e9es, dont 50\u00a0000 en Gr\u00e8ce, et le reste le long de la route des Balkans.\u00a0400\u00a0officiers de police de pays europ\u00e9ens partiront en Slov\u00e9nie, actuellement submerg\u00e9e, pour aider au contr\u00f4le des fronti\u00e8res. Frontex, l\u2019agence europ\u00e9enne de surveillance des fronti\u00e8res, s\u2019impliquera aux fronti\u00e8res gr\u00e9co-mac\u00e9donienne et gr\u00e9co-albanaise pour des contr\u00f4les et identifications.<\/p>\n<p>Ce sommet est intervenu dans un contexte de fortes tensions, marqu\u00e9 par des fermetures de fronti\u00e8res bloquant les r\u00e9fugi\u00e9s dans des zones tampon. Ces obstacles ont \u00e9t\u00e9 partiellement lev\u00e9s ces derniers jours, les autorit\u00e9s tentant d\u2019organiser un \u00abcorridor\u00bb informel vers l\u2019Allemagne, qui pourtant durcit sa politique d\u2019accueil et souhaite d\u00e9sormais ralentir le flux. Mais la situation des r\u00e9fugi\u00e9s est catastrophique. L\u2019ONG Human Rights Watch craint que des r\u00e9fugi\u00e9s ne meurent dans les Balkans. Des groupes de centaines, voire de milliers de personnes, bloqu\u00e9s pr\u00e8s des postes-fronti\u00e8res, se retrouvent dans des conditions humanitaires intenables.<\/p>\n<p>Depuis mi-septembre, 250\u00a0000\u00a0personnes ont travers\u00e9 les Balkans. En une semaine, la Slov\u00e9nie a vu 60\u00a0000\u00a0r\u00e9fugi\u00e9s fouler le sol de son territoire. Dimanche, 15\u00a0000\u00a0personnes ont transit\u00e9 en Slov\u00e9nie.<\/p>\n<h3>Des zones tampon<\/h3>\n<p>L\u2019enjeu principal du sommet, aux yeux de nombreux Etats de l\u2019Union europ\u00e9enne, \u00e9tait aussi que les pays des Balkans <em>\u00abprennent leur part\u00bb<\/em> face \u00e0 la crise\u00a0: qu\u2019ils accueillent et enregistrent davantage de r\u00e9fugi\u00e9s. Ces Etats craignent que l\u2019Autriche ou l\u2019Allemagne ne ferment leurs fronti\u00e8res et fassent de leurs pays des <em>\u00abzones tampon\u00bb<\/em>, comme s\u2019en inqui\u00e9tait Boyko Borissov, Premier ministre bulgare.<\/p>\n<p><em>\u00ab\u00a0Aujourd\u2019hui, plusieurs Etats du nord de l\u2019Europe veulent que l\u2019on enregistre les migrants puis que l\u2019on d\u00e9termine leur \u00e9ligibilit\u00e9 au statut de r\u00e9fugi\u00e9,<\/em> explique Marc Pierini, du think tank Carnegie Europe. <em>La difficult\u00e9, c\u2019est que les gens sont en mouvement. Pour le faire, il faut se poser quelque part. La crainte des pays interm\u00e9diaires, donc ceux des Balkans, est qu\u2019on enregistre ces personnes sur leur territoire et qu\u2019ils soient contraints de rester sur leur sol. Donc les pays des Balkans ne sont pas d\u00e9sireux d\u2019accueillir ces r\u00e9fugi\u00e9s et ces derniers veulent avancer.\u00bb<\/em><\/p>\n<p>Le sommet a \u00e9labor\u00e9 quelques principes. L\u2019id\u00e9e g\u00e9n\u00e9rale est de rendre effective la \u00ablogique de hotspot\u00bb\u00a0: un enregistrement des demandeurs d\u2019asile \u00e0 leur point d\u2019entr\u00e9e dans l\u2019Union europ\u00e9enne, suivi de l\u2019expulsion de ceux qui ne correspondraient pas aux crit\u00e8res de la Convention de Gen\u00e8ve, et la r\u00e9partition des autres, via le m\u00e9canisme de relocalisation.<\/p>\n<p>Dans ce cadre, l\u2019enregistrement des demandeurs d\u2019asile est un \u00e9l\u00e9ment cl\u00e9. <em>\u00abPas d\u2019enregistrement, pas de droit\u00bb<\/em>, a pr\u00e9venu le pr\u00e9sident de la Commission europ\u00e9enne, Jean-Claude Juncker, dimanche soir. Les Etats ont tenu \u00e0 rappeler que les migrants qui refusent de demander l\u2019asile \u00e0 la fronti\u00e8re peuvent se voir refuser l\u2019entr\u00e9e dans un pays.<\/p>\n<p>Et les Etats <em>\u00abd\u00e9courageront les mouvements de r\u00e9fugi\u00e9s\u00bb<\/em> de fronti\u00e8re en fronti\u00e8re. La politique consistant \u00e0 laisser passer les migrants vers un autre pays est officiellement jug\u00e9e <em>\u00abinacceptable\u00bb<\/em>.<\/p>\n<h3>Se jeter dans la gueule du loup<\/h3>\n<p>Voil\u00e0 pour la th\u00e9orie. En pratique, la relocalisation ne devrait concerner que 160\u00a0000\u00a0r\u00e9fugi\u00e9s en deux\u00a0ans, alors que pr\u00e8s de 700\u00a0000\u00a0personnes sont arriv\u00e9es en Europe depuis le d\u00e9but de l\u2019ann\u00e9e. De plus, les Etats ne jouent pas le jeu. La semaine pass\u00e9e, seules 854\u00a0places de relocalisation avaient \u00e9t\u00e9 propos\u00e9es.<\/p>\n<p>Dans ce contexte, il est probable que les Etats des Balkans ne s\u2019impliqueront pas outre mesure dans les solutions propos\u00e9es, craignant de devoir \u00abgarder\u00bb les r\u00e9fugi\u00e9s alors que l\u2019Union europ\u00e9enne tarde \u00e0 mettre en \u0153uvre leur r\u00e9partition.<\/p>\n<p>Quant aux r\u00e9fugi\u00e9s, ils pr\u00e9f\u00e8rent traverser les fronti\u00e8res par eux-m\u00eames, plut\u00f4t que de se jeter dans ces \u00abhotspots\u00bb, consid\u00e9r\u00e9s comme la gueule du loup.<\/p>\n<a itemprop=\"name\" href=\"http:\/\/www.liberation.fr\/auteur\/15743-cedric-vallet\">C\u00e9dric Vallet<\/a>", 25 "content": "<p>Pour un sommet sur les réfugiés qui devait se concentrer sur des <em>«mesures opérationnelles immédiates»</em> dans les Balkans, la réunion, dimanche à Bruxelles, de 11 chefs d’Etat et de gouvernement, dont 8 Européens, a été agitée. Dès leur arrivée, Viktor Orbán (Hongrie) et Aléxis Tsípras (Grèce) se sont jeté des anathèmes. Le Premier ministre grec a dénoncé l’attitude <em>«not in my backyard»</em> (pas de ça chez moi) de certains Etats européens, alors que son pays est montré du doigt par d’autres dirigeants, dont Orbán : ils reprochent à la Grèce de ne pas suffisamment contrôler ses frontières avec la Turquie et ne pas montrer assez de zèle dans l’enregistrement des demandeurs d’asile.</p>\n<p>Le sommet, convoqué par la Commission européenne, sur suggestion de l’Allemagne, aura au moins permis à ces 11 Etats – Autriche, Bulgarie, Croatie, Allemagne, Grèce, Hongrie, Roumanie, Slovénie côté européen, et 3 pays «non UE», Albanie, Macédoine et Serbie – de discuter ensemble.</p>\n<h3>400 policiers européens en Slovénie</h3>\n<p>L’objectif, rappelé par Angela Merkel, était de trouver une <em>«réponse coordonnée»</em> à la crise des réfugiés. Quelques mesures ont été annoncées : 100 000 places d’accueil seront créées, dont 50 000 en Grèce, et le reste le long de la route des Balkans. 400 officiers de police de pays européens partiront en Slovénie, actuellement submergée, pour aider au contrôle des frontières. Frontex, l’agence européenne de surveillance des frontières, s’impliquera aux frontières gréco-macédonienne et gréco-albanaise pour des contrôles et identifications.</p>\n<p>Ce sommet est intervenu dans un contexte de fortes tensions, marqué par des fermetures de frontières bloquant les réfugiés dans des zones tampon. Ces obstacles ont été partiellement levés ces derniers jours, les autorités tentant d’organiser un «corridor» informel vers l’Allemagne, qui pourtant durcit sa politique d’accueil et souhaite désormais ralentir le flux. Mais la situation des réfugiés est catastrophique. L’ONG Human Rights Watch craint que des réfugiés ne meurent dans les Balkans. Des groupes de centaines, voire de milliers de personnes, bloqués près des postes-frontières, se retrouvent dans des conditions humanitaires intenables.</p>\n<p>Depuis mi-septembre, 250 000 personnes ont traversé les Balkans. En une semaine, la Slovénie a vu 60 000 réfugiés fouler le sol de son territoire. Dimanche, 15 000 personnes ont transité en Slovénie.</p>\n<h3>Des zones tampon</h3>\n<p>L’enjeu principal du sommet, aux yeux de nombreux Etats de l’Union européenne, était aussi que les pays des Balkans <em>«prennent leur part»</em> face à la crise : qu’ils accueillent et enregistrent davantage de réfugiés. Ces Etats craignent que l’Autriche ou l’Allemagne ne ferment leurs frontières et fassent de leurs pays des <em>«zones tampon»</em>, comme s’en inquiétait Boyko Borissov, Premier ministre bulgare.</p>\n<p><em>« Aujourd’hui, plusieurs Etats du nord de l’Europe veulent que l’on enregistre les migrants puis que l’on détermine leur éligibilité au statut de réfugié,</em> explique Marc Pierini, du think tank Carnegie Europe. <em>La difficulté, c’est que les gens sont en mouvement. Pour le faire, il faut se poser quelque part. La crainte des pays intermédiaires, donc ceux des Balkans, est qu’on enregistre ces personnes sur leur territoire et qu’ils soient contraints de rester sur leur sol. Donc les pays des Balkans ne sont pas désireux d’accueillir ces réfugiés et ces derniers veulent avancer.»</em></p>\n<p>Le sommet a élaboré quelques principes. L’idée générale est de rendre effective la «logique de hotspot» : un enregistrement des demandeurs d’asile à leur point d’entrée dans l’Union européenne, suivi de l’expulsion de ceux qui ne correspondraient pas aux critères de la Convention de Genève, et la répartition des autres, via le mécanisme de relocalisation.</p>\n<p>Dans ce cadre, l’enregistrement des demandeurs d’asile est un élément clé. <em>«Pas d’enregistrement, pas de droit»</em>, a prévenu le président de la Commission européenne, Jean-Claude Juncker, dimanche soir. Les Etats ont tenu à rappeler que les migrants qui refusent de demander l’asile à la frontière peuvent se voir refuser l’entrée dans un pays.</p>\n<p>Et les Etats <em>«décourageront les mouvements de réfugiés»</em> de frontière en frontière. La politique consistant à laisser passer les migrants vers un autre pays est officiellement jugée <em>«inacceptable»</em>.</p>\n<h3>Se jeter dans la gueule du loup</h3>\n<p>Voilà pour la théorie. En pratique, la relocalisation ne devrait concerner que 160 000 réfugiés en deux ans, alors que près de 700 000 personnes sont arrivées en Europe depuis le début de l’année. De plus, les Etats ne jouent pas le jeu. La semaine passée, seules 854 places de relocalisation avaient été proposées.</p>\n<p>Dans ce contexte, il est probable que les Etats des Balkans ne s’impliqueront pas outre mesure dans les solutions proposées, craignant de devoir «garder» les réfugiés alors que l’Union européenne tarde à mettre en œuvre leur répartition.</p>\n<p>Quant aux réfugiés, ils préfèrent traverser les frontières par eux-mêmes, plutôt que de se jeter dans ces «hotspots», considérés comme la gueule du loup.</p>\n<a itemprop=\"name\" href=\"http://www.liberation.fr/auteur/15743-cedric-vallet\">Cédric Vallet</a>",
26 "mimetype": "",
27 "language": "",
24 "reading_time": 4, 28 "reading_time": 4,
25 "domain_name": "www.liberation.fr", 29 "domain_name": "www.liberation.fr",
26 "tags": [] 30 "tags": []
27 } 31 },
28 ,
29 { 32 {
30 "id": "21", 33 "id": "21",
31 "title": "No title found", 34 "title": "No title found",
@@ -33,6 +36,8 @@
33 "is_archived": false, 36 "is_archived": false,
34 "is_starred": true, 37 "is_starred": true,
35 "content": "Oh, what a shame, no content", 38 "content": "Oh, what a shame, no content",
39 "mimetype": "",
40 "language": "",
36 "reading_time": 4, 41 "reading_time": 4,
37 "domain_name": "news.nationalgeographic.com", 42 "domain_name": "news.nationalgeographic.com",
38 "tags": [] 43 "tags": []
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml
index 4da6075f..85f2ea9c 100644
--- a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml
+++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.en.yml
@@ -1,7 +1,11 @@
1# Two factor mail 1# Two factor mail
2auth_code.mailer.subject: 'Wallabag authentication Code' 2auth_code:
3auth_code.mailer.body.hello: "Hi %user%," 3 on: 'on'
4auth_code.mailer.body.first_para: "Since you enable two factor authentication on your wallabag account and you just logged in from a new device (computer, phone, etc.), we send you a code to validate your connection." 4 mailer:
5auth_code.mailer.body.second_para: "Here is the code:" 5 subject: 'Wallabag authentication Code'
6auth_code.mailer.body.support: "Please don't hesitate to contact us if you have any problems:" 6 body:
7auth_code.mailer.body.signature: "The wallabag team" 7 hello: "Hi %user%,"
8 first_para: "Since you enable two factor authentication on your wallabag account and you just logged in from a new device (computer, phone, etc.), we send you a code to validate your connection."
9 second_para: "Here is the code:"
10 support: "Please don't hesitate to contact us if you have any problems:"
11 signature: "The wallabag team"
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml
index b4448d3a..30ab5dd9 100644
--- a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml
+++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.fr.yml
@@ -1,7 +1,11 @@
1# Two factor mail 1# Two factor mail
2auth_code.mailer.subject: "Code d'authentification wallabag" 2auth_code:
3auth_code.mailer.body.hello: "Bonjour %user%," 3 on: 'sur'
4auth_code.mailer.body.first_para: "Comme vous avez activé la double authentification sur votre compte wallabag et que vous venez de vous connecter depuis un nouvel appareil (ordinateur, téléphone, etc.), nous vous envoyons un code pour valider votre connexion." 4 mailer:
5auth_code.mailer.body.second_para: "Voici le code à renseigner :" 5 subject: "Code d'authentification wallabag"
6auth_code.mailer.body.support: "Si vous avez un problème de connexion, n'hésitez pas à contacter le support :" 6 body:
7auth_code.mailer.body.signature: "L'équipe wallabag" 7 hello: "Bonjour %user%,"
8 first_para: "Comme vous avez activé la double authentification sur votre compte wallabag et que vous venez de vous connecter depuis un nouvel appareil (ordinateur, téléphone, etc.), nous vous envoyons un code pour valider votre connexion."
9 second_para: "Voici le code à renseigner :"
10 support: "Si vous avez un problème de connexion, n'hésitez pas à contacter le support :"
11 signature: "L'équipe wallabag"
diff --git a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml
index d1fcb0e0..70646355 100644
--- a/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml
+++ b/src/Wallabag/UserBundle/Resources/translations/wallabag_user.tr.yml
@@ -1,7 +1,11 @@
1# Two factor mail 1# Two factor mail
2auth_code.mailer.subject: 'Wallabag Doğrulama Kodu' 2auth_code:
3auth_code.mailer.body.hello: "Merhaba %user%," 3 on: 'on'
4auth_code.mailer.body.first_para: "wallabag hesabınızda iki adımlı doğrulamayı etkinleştirdiğinizde ve bu yeni cihaz olduğunda (bilgisayar, telefon, vs.), biz size bu işlemi doğrulamak için bir kod göndeririz." 4 mailer:
5auth_code.mailer.body.second_para: "Bu işlem için doğrulama kodunuz:" 5 subject: 'Wallabag Doğrulama Kodu'
6auth_code.mailer.body.support: "Eğer herhangi bir soru/sorununuz varsa, bizimle iletişime geçmekten çekinmeyin:" 6 body:
7auth_code.mailer.body.signature: "wallabag ekibi" 7 hello: "Merhaba %user%,"
8 first_para: "wallabag hesabınızda iki adımlı doğrulamayı etkinleştirdiğinizde ve bu yeni cihaz olduğunda (bilgisayar, telefon, vs.), biz size bu işlemi doğrulamak için bir kod göndeririz."
9 second_para: "Bu işlem için doğrulama kodunuz:"
10 support: "Eğer herhangi bir soru/sorununuz varsa, bizimle iletişime geçmekten çekinmeyin:"
11 signature: "wallabag ekibi"
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Authentication/form.html.twig b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig
index fa0e3dc1..acf69196 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Authentication/form.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Authentication/form.html.twig
@@ -23,7 +23,7 @@
23 </div> 23 </div>
24 </div> 24 </div>
25 <div class="card-action center"> 25 <div class="card-action center">
26 <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Cancel{% endtrans %}</a> 26 <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.cancel'|trans }}</a>
27 <button class="btn waves-effect waves-light" type="submit" name="send"> 27 <button class="btn waves-effect waves-light" type="submit" name="send">
28 {{ "scheb_two_factor.login"|trans }} 28 {{ "scheb_two_factor.login"|trans }}
29 <i class="mdi-content-send right"></i> 29 <i class="mdi-content-send right"></i>
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/ChangePassword/changePassword_content.html.twig b/src/Wallabag/UserBundle/Resources/views/ChangePassword/changePassword_content.html.twig
index abb68421..abb68421 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/ChangePassword/changePassword_content.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/ChangePassword/changePassword_content.html.twig
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig
index 50937276..50937276 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/checkEmail.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Registration/checkEmail.html.twig
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/confirmed.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig
index c6d4d3d2..674eb217 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/confirmed.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Registration/confirmed.html.twig
@@ -11,7 +11,7 @@
11 {% endif %} 11 {% endif %}
12 </div> 12 </div>
13 <div class="card-action center"> 13 <div class="card-action center">
14 <a href="{{ path('homepage') }}" class="waves-effect waves-light btn"><i class="material-icons left"></i> {% trans %}Go to your account{% endtrans %}</a> 14 <a href="{{ path('homepage') }}" class="waves-effect waves-light btn"><i class="material-icons left"></i> {{ 'security.register.go_to_account'|trans }}</a>
15 </div> 15 </div>
16</div> 16</div>
17{% endblock fos_user_content %} 17{% endblock fos_user_content %}
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/register_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig
index e92b515e..7d2b45d4 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Registration/register_content.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Registration/register_content.html.twig
@@ -36,7 +36,7 @@
36 </div> 36 </div>
37 </div> 37 </div>
38 <div class="card-action center"> 38 <div class="card-action center">
39 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Login{% endtrans %}</a> 39 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.submit'|trans }}</a>
40 <button class="btn waves-effect waves-light" type="submit" name="send"> 40 <button class="btn waves-effect waves-light" type="submit" name="send">
41 {{ 'registration.submit'|trans({}, 'FOSUserBundle') }} 41 {{ 'registration.submit'|trans({}, 'FOSUserBundle') }}
42 <i class="mdi-content-send right"></i> 42 <i class="mdi-content-send right"></i>
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/checkEmail.html.twig
index 66cbdc28..66cbdc28 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/checkEmail.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Resetting/checkEmail.html.twig
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/passwordAlreadyRequested.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/passwordAlreadyRequested.html.twig
index 1e245372..1e245372 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/passwordAlreadyRequested.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Resetting/passwordAlreadyRequested.html.twig
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/request_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig
index e871d7be..7a5ac838 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/request_content.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Resetting/request_content.html.twig
@@ -1,8 +1,10 @@
1{% trans_default_domain 'FOSUserBundle' %} 1{% trans_default_domain 'FOSUserBundle' %}
2
2<form action="{{ path('fos_user_resetting_send_email') }}" method="POST" class="fos_user_resetting_request"> 3<form action="{{ path('fos_user_resetting_send_email') }}" method="POST" class="fos_user_resetting_request">
3 <div class="card-content"> 4 <div class="card-content">
4 <div class="row"> 5 <div class="row">
5 <p>{% trans %}Enter your email address below and we'll send you password reset instructions.{% endtrans %}</p> 6 <p>{{ 'security.resetting.description'|trans({}, "messages") }}</p>
7
6 {% for flashMessage in app.session.flashbag.get('notice') %} 8 {% for flashMessage in app.session.flashbag.get('notice') %}
7 <span class="black-text"><p>{{ flashMessage }}</p></span> 9 <span class="black-text"><p>{{ flashMessage }}</p></span>
8 {% endfor %} 10 {% endfor %}
@@ -18,7 +20,9 @@
18 </div> 20 </div>
19 </div> 21 </div>
20 <div class="card-action center"> 22 <div class="card-action center">
21 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Login{% endtrans %}</a> 23 <a href="{{ path('fos_user_security_login') }}" class="waves-effect waves-light grey btn">
24 <i class="material-icons left"></i> {{ 'security.login.submit'|trans({}, "messages") }}
25 </a>
22 <button class="btn waves-effect waves-light" type="submit" name="send"> 26 <button class="btn waves-effect waves-light" type="submit" name="send">
23 {{ 'resetting.request.submit'|trans }} 27 {{ 'resetting.request.submit'|trans }}
24 </button> 28 </button>
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/reset_content.html.twig b/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig
index 9d0a061c..9d0a061c 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Resetting/reset_content.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Resetting/reset_content.html.twig
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/Security/login.html.twig b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig
index 6bf99bf8..982a33b2 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/Security/login.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/Security/login.html.twig
@@ -15,32 +15,32 @@
15 <div class="row"> 15 <div class="row">
16 16
17 <div class="input-field col s12"> 17 <div class="input-field col s12">
18 <label for="username">{% trans %}Username{% endtrans %}</label> 18 <label for="username">{{ 'security.login.username'|trans }}</label>
19 <input type="text" id="username" name="_username" value="{{ last_username }}" /> 19 <input type="text" id="username" name="_username" value="{{ last_username }}" />
20 </div> 20 </div>
21 21
22 <div class="input-field col s12"> 22 <div class="input-field col s12">
23 <label for="password">{% trans %}Password{% endtrans %}</label> 23 <label for="password">{{ 'security.login.password'|trans }}</label>
24 <input type="password" id="password" name="_password" /> 24 <input type="password" id="password" name="_password" />
25 </div> 25 </div>
26 26
27 <div class="input-field col s12"> 27 <div class="input-field col s12">
28 <input type="checkbox" id="remember_me" name="_remember_me" checked /> 28 <input type="checkbox" id="remember_me" name="_remember_me" checked />
29 <label for="remember_me">{% trans %}Keep me logged in{% endtrans %}</label> 29 <label for="remember_me">{{ 'security.login.keep_logged_in'|trans }}</label>
30 </div> 30 </div>
31 31
32 </div> 32 </div>
33 </div> 33 </div>
34 <div class="card-action center"> 34 <div class="card-action center">
35 <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" /> 35 <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" />
36 <a href="{{ path('fos_user_registration_register') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Register{% endtrans %}</a> 36 <a href="{{ path('fos_user_registration_register') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {{ 'security.login.register'|trans }}</a>
37 <button class="btn waves-effect waves-light" type="submit" name="send"> 37 <button class="btn waves-effect waves-light" type="submit" name="send">
38 {% trans %}Login{% endtrans %} 38 {{ 'security.login.submit'|trans }}
39 <i class="mdi-content-send right"></i> 39 <i class="mdi-content-send right"></i>
40 </button> 40 </button>
41 </div> 41 </div>
42 <div class="center"> 42 <div class="center">
43 <a href="{{ path('fos_user_resetting_request') }}">{% trans %}Forgot your password?{% endtrans %}</a> 43 <a href="{{ path('fos_user_resetting_request') }}">{{ 'security.login.forgot_password'|trans }}</a>
44 </div> 44 </div>
45</form> 45</form>
46{% endblock fos_user_content %} 46{% endblock fos_user_content %}
diff --git a/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig b/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig
index 69d23160..c44fcfb7 100644
--- a/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/TwoFactor/email_auth_code.html.twig
@@ -77,7 +77,7 @@
77 <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ wallabag_url }}/themes/material/img/logo-other_themes.png" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td> 77 <td style="padding: 20px;" width="96px" valign="top"><img class="image_fix" src="{{ wallabag_url }}/themes/material/img/logo-other_themes.png" alt="logo" title="{{ wallabag_url }}" style="width: 96px; height: 96px;" /></td>
78 <td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc"> 78 <td style="padding: 20px; padding-left: 0;" valign="top" id="cell_desc">
79 <h1>wallabag</h1> 79 <h1>wallabag</h1>
80 <h5>{% trans %}on{% endtrans %} {{ wallabag_url }}</h5> 80 <h5>{{ "auth_code.on"|trans({}, 'wallabag_user') }} {{ wallabag_url }}</h5>
81 </td> 81 </td>
82 </tr> 82 </tr>
83 <tr><td colspan="2" style="padding: 0;"><div style="height: 0; border-top: 1px solid #c5c5c5;">&nbsp;</div></td></tr> 83 <tr><td colspan="2" style="padding: 0;"><div style="height: 0; border-top: 1px solid #c5c5c5;">&nbsp;</div></td></tr>
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/material/layout.html.twig b/src/Wallabag/UserBundle/Resources/views/layout.html.twig
index cbdc1da2..1d0189ca 100644
--- a/src/Wallabag/UserBundle/Resources/views/themes/material/layout.html.twig
+++ b/src/Wallabag/UserBundle/Resources/views/layout.html.twig
@@ -1,6 +1,6 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %} 1{% extends "WallabagCoreBundle::layout.html.twig" %}
2 2
3{% block title %}{% trans %}Welcome to wallabag!{% endtrans %}{% endblock %} 3{% block title %}{{ 'security.login.page_title'|trans }}{% endblock %}
4 4
5{% block body_class %}login{% endblock %} 5{% block body_class %}login{% endblock %}
6 6
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Authentication/form.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Authentication/form.html.twig
deleted file mode 100644
index 5bb91081..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Authentication/form.html.twig
+++ /dev/null
@@ -1,32 +0,0 @@
1{% extends "WallabagUserBundle::layout.html.twig" %}
2
3{% block fos_user_content %}
4<form class="form" action="" method="post">
5 <fieldset class="w500p center">
6 {% for flashMessage in app.session.flashbag.get("two_factor") %}
7 <p class="error">{{ flashMessage|trans }}</p>
8 {% endfor %}
9
10 <div class="row">
11 <label for="_auth_code">{{ "scheb_two_factor.auth_code"|trans }}</label>
12 <input id="_auth_code" type="text" autocomplete="off" name="_auth_code" />
13 </div>
14
15 {% if useTrustedOption %}
16 <div class="row">
17 <input id="_trusted" type="checkbox" name="_trusted" />
18 <label for="_trusted">{{ "scheb_two_factor.trusted"|trans }}</label>
19 </div>
20 {% endif %}
21
22 <div class="row mts txtcenter">
23 <a href="{{ path('fos_user_security_logout') }}" class="waves-effect waves-light grey btn"><i class="material-icons left"></i> {% trans %}Cancel{% endtrans %}</a>
24 <button type="submit" name="send">
25 {{ "scheb_two_factor.login"|trans }}
26 <i class="mdi-content-send right"></i>
27 </button>
28 </div>
29 </fieldset>
30
31</form>
32{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register.html.twig
deleted file mode 100644
index 2713bf45..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register.html.twig
+++ /dev/null
@@ -1,20 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{% trans %}create an account{% endtrans %}{% endblock %}
4
5{% block body_class %}login{% endblock %}
6
7{% block menu %}{% endblock %}
8{% block messages %}{% endblock %}
9
10{% block content %}
11 {{ form_start(form) }}
12 <fieldset class="w500p center">
13 <h2 class="mbs txtcenter">{% trans %}create an account{% endtrans %}</h2>
14 {% include "FOSUserBundle:Registration:register_content.html.twig" %}
15 </fieldset>
16 </form>
17{% endblock %}
18
19{% block footer %}
20{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register_content.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register_content.html.twig
deleted file mode 100644
index 41f94006..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Registration/register_content.html.twig
+++ /dev/null
@@ -1,37 +0,0 @@
1{% trans_default_domain 'FOSUserBundle' %}
2
3{{ form_widget(form._token) }}
4
5{% for flashMessage in app.session.flashbag.get('notice') %}
6 <span><p>{{ flashMessage }}</p></span>
7{% endfor %}
8
9<div class="row">
10 {{ form_errors(form.email) }}
11 {{ form_label(form.email) }}
12 {{ form_widget(form.email) }}
13</div>
14
15<div class="row">
16 {{ form_errors(form.username) }}
17 {{ form_label(form.username) }}
18 {{ form_widget(form.username) }}
19</div>
20
21<div class="row">
22 {{ form_errors(form.plainPassword.first) }}
23 {{ form_label(form.plainPassword.first) }}
24 {{ form_widget(form.plainPassword.first) }}
25</div>
26
27<div class="row">
28 {{ form_errors(form.plainPassword.second) }}
29 {{ form_label(form.plainPassword.second) }}
30 {{ form_widget(form.plainPassword.second) }}
31</div>
32
33
34<div class="row mts txtcenter">
35 <button type="submit">{{ 'registration.submit'|trans({}, 'FOSUserBundle') }}</button>
36 <a href="{{ path('fos_user_security_login') }}" class="button">{% trans %}Login{% endtrans %}</a>
37</div>
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/checkEmail.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/checkEmail.html.twig
deleted file mode 100644
index 056d65b5..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/checkEmail.html.twig
+++ /dev/null
@@ -1,17 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{% trans %}Forgot password{% endtrans %}{% endblock %}
4
5{% block body_class %}login{% endblock %}
6
7{% block menu %}{% endblock %}
8
9{% block content %}
10 <form>
11 <fieldset class="w500p center">
12 <h2 class="mbs txtcenter">{% trans %}Forgot password{% endtrans %}</h2>
13
14 <p>{{ 'An email has been sent to %email%. It contains a link you must click to reset your password.'|trans({'%email%': email}) }}</p>
15 </fieldset>
16 </form>
17{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request.html.twig
deleted file mode 100644
index 10094e83..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request.html.twig
+++ /dev/null
@@ -1,20 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{% trans %}Forgot password{% endtrans %}{% endblock %}
4
5{% block body_class %}login{% endblock %}
6
7{% block menu %}{% endblock %}
8{% block messages %}{% endblock %}
9
10{% block content %}
11 <form action="{{ path('fos_user_resetting_send_email') }}" method="post" name="forgotPasswordform">
12 <fieldset class="w500p center">
13 <h2 class="mbs txtcenter">{% trans %}Forgot password{% endtrans %}</h2>
14 {% include "FOSUserBundle:Resetting:request_content.html.twig" %}
15 </fieldset>
16 </form>
17{% endblock %}
18
19{% block footer %}
20{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request_content.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request_content.html.twig
deleted file mode 100644
index 1f8da8d7..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Resetting/request_content.html.twig
+++ /dev/null
@@ -1,17 +0,0 @@
1{% trans_default_domain 'FOSUserBundle' %}
2
3{% trans %}Enter your email address below and we'll send you password reset instructions.{% endtrans %}
4
5{% if invalid_username is defined %}
6 <p>{{ 'resetting.request.invalid_username'|trans({'%username%': invalid_username}) }}</p>
7{% endif %}
8
9<div class="row">
10 <label for="username">{{ 'resetting.request.username'|trans }}</label>
11 <input type="text" id="username" name="username" required="required" />
12</div>
13
14<div class="row mts txtcenter">
15 <button type="submit">{{ 'resetting.request.submit'|trans }}</button>
16 <a href="{{ path('fos_user_security_login') }}" class="button">{% trans %}Login{% endtrans %}</a>
17</div>
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Security/login.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/Security/login.html.twig
deleted file mode 100644
index d52c3662..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/Security/login.html.twig
+++ /dev/null
@@ -1,33 +0,0 @@
1{% extends "FOSUserBundle::layout.html.twig" %}
2
3{% block fos_user_content %}
4 <form action="{{ path('fos_user_security_check') }}" method="post" name="loginform">
5 <fieldset class="w500p center">
6 <h2 class="mbs txtcenter">{% trans %}Login to wallabag{% endtrans %}</h2>
7 {% if error %}
8 <div>{{ error.message }}</div>
9 {% endif %}
10
11 {% for flashMessage in app.session.flashbag.get('notice') %}
12 <p>{{ flashMessage }}</p>
13 {% endfor %}
14
15 <div class="row">
16 <label class="col w150p" for="username">{% trans %}Username{% endtrans %}</label>
17 <input type="text" id="username" name="_username" value="{{ last_username }}" />
18 </div>
19
20 <div class="row">
21 <label class="col w150p" for="password">{% trans %}Password{% endtrans %}</label>
22 <input type="password" id="password" name="_password" />
23 </div>
24
25 <div class="row mts txtcenter">
26 <input type="hidden" name="_csrf_token" value="{{ csrf_token('authenticate') }}" />
27 <button type="submit">Login</button>
28 <a href="{{ path('fos_user_registration_register') }}" class="button">{% trans %}Register{% endtrans %}</a>
29 <a href="{{ path('fos_user_resetting_request') }}" class="small">Forgot your password?</a>
30 </div>
31 </fieldset>
32 </form>
33{% endblock %}
diff --git a/src/Wallabag/UserBundle/Resources/views/themes/baggy/layout.html.twig b/src/Wallabag/UserBundle/Resources/views/themes/baggy/layout.html.twig
deleted file mode 100644
index 60b321bf..00000000
--- a/src/Wallabag/UserBundle/Resources/views/themes/baggy/layout.html.twig
+++ /dev/null
@@ -1,16 +0,0 @@
1{% extends "WallabagCoreBundle::layout.html.twig" %}
2
3{% block title %}{% trans %}Welcome to wallabag!{% endtrans %}{% endblock %}
4
5{% block body_class %}login{% endblock %}
6
7{% block menu %}{% endblock %}
8{% block messages %}{% endblock %}
9
10{% block content %}
11 {% block fos_user_content %}
12 {% endblock fos_user_content %}
13{% endblock %}
14
15{% block footer %}
16{% endblock %}