diff options
author | Jeremy Benoist <jeremy.benoist@gmail.com> | 2019-06-26 22:31:47 +0200 |
---|---|---|
committer | Jeremy Benoist <jeremy.benoist@gmail.com> | 2019-07-08 09:38:32 +0200 |
commit | 34be2d5de44ade2a78be73decc0b90a2c1bca720 (patch) | |
tree | d635438784c4b02e1d182cfbc3d47b62e5032f1d | |
parent | 92cd51aa2c29e23f137cde9b9732ced33ff38e59 (diff) | |
download | wallabag-34be2d5de44ade2a78be73decc0b90a2c1bca720.tar.gz wallabag-34be2d5de44ade2a78be73decc0b90a2c1bca720.tar.zst wallabag-34be2d5de44ade2a78be73decc0b90a2c1bca720.zip |
Add ability to import/export tagging rules
- Add missing translations
- Add some tests
- Add `/api/taggingrule/export` API endpoint
- Add baggy theme
- Add error message when importing tagging rules failed
- Also fix all translations (I think we are good now)
25 files changed, 586 insertions, 33 deletions
@@ -32,6 +32,7 @@ web/uploads/ | |||
32 | # Build | 32 | # Build |
33 | /app/build | 33 | /app/build |
34 | /build | 34 | /build |
35 | /coverage | ||
35 | 36 | ||
36 | # Composer PHAR | 37 | # Composer PHAR |
37 | /composer.phar | 38 | /composer.phar |
diff --git a/src/Wallabag/ApiBundle/Controller/TaggingRuleRestController.php b/src/Wallabag/ApiBundle/Controller/TaggingRuleRestController.php new file mode 100644 index 00000000..2496298a --- /dev/null +++ b/src/Wallabag/ApiBundle/Controller/TaggingRuleRestController.php | |||
@@ -0,0 +1,39 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\ApiBundle\Controller; | ||
4 | |||
5 | use JMS\Serializer\SerializationContext; | ||
6 | use JMS\Serializer\SerializerBuilder; | ||
7 | use Nelmio\ApiDocBundle\Annotation\ApiDoc; | ||
8 | use Symfony\Component\HttpFoundation\Response; | ||
9 | |||
10 | class TaggingRuleRestController extends WallabagRestController | ||
11 | { | ||
12 | /** | ||
13 | * Export all tagging rules as a json file. | ||
14 | * | ||
15 | * @ApiDoc() | ||
16 | * | ||
17 | * @return Response | ||
18 | */ | ||
19 | public function getTaggingruleExportAction() | ||
20 | { | ||
21 | $this->validateAuthentication(); | ||
22 | |||
23 | $data = SerializerBuilder::create()->build()->serialize( | ||
24 | $this->getUser()->getConfig()->getTaggingRules(), | ||
25 | 'json', | ||
26 | SerializationContext::create()->setGroups(['export_tagging_rule']) | ||
27 | ); | ||
28 | |||
29 | return Response::create( | ||
30 | $data, | ||
31 | 200, | ||
32 | [ | ||
33 | 'Content-type' => 'application/json', | ||
34 | 'Content-Disposition' => 'attachment; filename="tagging_rules_' . $this->getUser()->getUsername() . '.json"', | ||
35 | 'Content-Transfer-Encoding' => 'UTF-8', | ||
36 | ] | ||
37 | ); | ||
38 | } | ||
39 | } | ||
diff --git a/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml b/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml index 06e62c37..98efeeb1 100644 --- a/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml +++ b/src/Wallabag/ApiBundle/Resources/config/routing_rest.yml | |||
@@ -13,6 +13,11 @@ tag: | |||
13 | resource: "WallabagApiBundle:TagRest" | 13 | resource: "WallabagApiBundle:TagRest" |
14 | name_prefix: api_ | 14 | name_prefix: api_ |
15 | 15 | ||
16 | tagging_rule: | ||
17 | type: rest | ||
18 | resource: "WallabagApiBundle:TaggingRuleRest" | ||
19 | name_prefix: api_ | ||
20 | |||
16 | annotation: | 21 | annotation: |
17 | type: rest | 22 | type: rest |
18 | resource: "WallabagApiBundle:AnnotationRest" | 23 | resource: "WallabagApiBundle:AnnotationRest" |
diff --git a/src/Wallabag/CoreBundle/Controller/ConfigController.php b/src/Wallabag/CoreBundle/Controller/ConfigController.php index cea41303..0db90ba4 100644 --- a/src/Wallabag/CoreBundle/Controller/ConfigController.php +++ b/src/Wallabag/CoreBundle/Controller/ConfigController.php | |||
@@ -2,11 +2,14 @@ | |||
2 | 2 | ||
3 | namespace Wallabag\CoreBundle\Controller; | 3 | namespace Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use JMS\Serializer\SerializationContext; | ||
6 | use JMS\Serializer\SerializerBuilder; | ||
5 | use PragmaRX\Recovery\Recovery as BackupCodes; | 7 | use PragmaRX\Recovery\Recovery as BackupCodes; |
6 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; | 8 | use Symfony\Bundle\FrameworkBundle\Controller\Controller; |
7 | use Symfony\Component\HttpFoundation\JsonResponse; | 9 | use Symfony\Component\HttpFoundation\JsonResponse; |
8 | use Symfony\Component\HttpFoundation\RedirectResponse; | 10 | use Symfony\Component\HttpFoundation\RedirectResponse; |
9 | use Symfony\Component\HttpFoundation\Request; | 11 | use Symfony\Component\HttpFoundation\Request; |
12 | use Symfony\Component\HttpFoundation\Response; | ||
10 | use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; | 13 | use Symfony\Component\HttpKernel\Exception\AccessDeniedHttpException; |
11 | use Symfony\Component\Routing\Annotation\Route; | 14 | use Symfony\Component\Routing\Annotation\Route; |
12 | use Symfony\Component\Validator\Constraints\Locale as LocaleConstraint; | 15 | use Symfony\Component\Validator\Constraints\Locale as LocaleConstraint; |
@@ -15,6 +18,7 @@ use Wallabag\CoreBundle\Entity\TaggingRule; | |||
15 | use Wallabag\CoreBundle\Form\Type\ChangePasswordType; | 18 | use Wallabag\CoreBundle\Form\Type\ChangePasswordType; |
16 | use Wallabag\CoreBundle\Form\Type\ConfigType; | 19 | use Wallabag\CoreBundle\Form\Type\ConfigType; |
17 | use Wallabag\CoreBundle\Form\Type\FeedType; | 20 | use Wallabag\CoreBundle\Form\Type\FeedType; |
21 | use Wallabag\CoreBundle\Form\Type\TaggingRuleImportType; | ||
18 | use Wallabag\CoreBundle\Form\Type\TaggingRuleType; | 22 | use Wallabag\CoreBundle\Form\Type\TaggingRuleType; |
19 | use Wallabag\CoreBundle\Form\Type\UserInformationType; | 23 | use Wallabag\CoreBundle\Form\Type\UserInformationType; |
20 | use Wallabag\CoreBundle\Tools\Utils; | 24 | use Wallabag\CoreBundle\Tools\Utils; |
@@ -140,6 +144,37 @@ class ConfigController extends Controller | |||
140 | return $this->redirect($this->generateUrl('config') . '#set5'); | 144 | return $this->redirect($this->generateUrl('config') . '#set5'); |
141 | } | 145 | } |
142 | 146 | ||
147 | // handle tagging rules import | ||
148 | $taggingRulesImportform = $this->createForm(TaggingRuleImportType::class); | ||
149 | $taggingRulesImportform->handleRequest($request); | ||
150 | |||
151 | if ($taggingRulesImportform->isSubmitted() && $taggingRulesImportform->isValid()) { | ||
152 | $message = 'flashes.config.notice.tagging_rules_not_imported'; | ||
153 | $file = $taggingRulesImportform->get('file')->getData(); | ||
154 | |||
155 | if (null !== $file && $file->isValid() && \in_array($file->getClientMimeType(), ['application/json', 'application/octet-stream'], true)) { | ||
156 | $content = json_decode(file_get_contents($file->getPathname()), true); | ||
157 | |||
158 | if (\is_array($content)) { | ||
159 | foreach ($content as $rule) { | ||
160 | $taggingRule = new TaggingRule(); | ||
161 | $taggingRule->setRule($rule['rule']); | ||
162 | $taggingRule->setTags($rule['tags']); | ||
163 | $taggingRule->setConfig($config); | ||
164 | $em->persist($taggingRule); | ||
165 | } | ||
166 | |||
167 | $em->flush(); | ||
168 | |||
169 | $message = 'flashes.config.notice.tagging_rules_imported'; | ||
170 | } | ||
171 | } | ||
172 | |||
173 | $this->addFlash('notice', $message); | ||
174 | |||
175 | return $this->redirect($this->generateUrl('config') . '#set5'); | ||
176 | } | ||
177 | |||
143 | return $this->render('WallabagCoreBundle:Config:index.html.twig', [ | 178 | return $this->render('WallabagCoreBundle:Config:index.html.twig', [ |
144 | 'form' => [ | 179 | 'form' => [ |
145 | 'config' => $configForm->createView(), | 180 | 'config' => $configForm->createView(), |
@@ -147,6 +182,7 @@ class ConfigController extends Controller | |||
147 | 'pwd' => $pwdForm->createView(), | 182 | 'pwd' => $pwdForm->createView(), |
148 | 'user' => $userForm->createView(), | 183 | 'user' => $userForm->createView(), |
149 | 'new_tagging_rule' => $newTaggingRule->createView(), | 184 | 'new_tagging_rule' => $newTaggingRule->createView(), |
185 | 'import_tagging_rule' => $taggingRulesImportform->createView(), | ||
150 | ], | 186 | ], |
151 | 'feed' => [ | 187 | 'feed' => [ |
152 | 'username' => $user->getUsername(), | 188 | 'username' => $user->getUsername(), |
@@ -493,6 +529,32 @@ class ConfigController extends Controller | |||
493 | } | 529 | } |
494 | 530 | ||
495 | /** | 531 | /** |
532 | * Export tagging rules for the logged in user. | ||
533 | * | ||
534 | * @Route("/tagging-rule/export", name="export_tagging_rule") | ||
535 | * | ||
536 | * @return Response | ||
537 | */ | ||
538 | public function exportTaggingRulesAction() | ||
539 | { | ||
540 | $data = SerializerBuilder::create()->build()->serialize( | ||
541 | $this->getUser()->getConfig()->getTaggingRules(), | ||
542 | 'json', | ||
543 | SerializationContext::create()->setGroups(['export_tagging_rule']) | ||
544 | ); | ||
545 | |||
546 | return Response::create( | ||
547 | $data, | ||
548 | 200, | ||
549 | [ | ||
550 | 'Content-type' => 'application/json', | ||
551 | 'Content-Disposition' => 'attachment; filename="tagging_rules_' . $this->getUser()->getUsername() . '.json"', | ||
552 | 'Content-Transfer-Encoding' => 'UTF-8', | ||
553 | ] | ||
554 | ); | ||
555 | } | ||
556 | |||
557 | /** | ||
496 | * Remove all tags for given tags and a given user and cleanup orphan tags. | 558 | * Remove all tags for given tags and a given user and cleanup orphan tags. |
497 | * | 559 | * |
498 | * @param array $tags | 560 | * @param array $tags |
diff --git a/src/Wallabag/CoreBundle/Entity/TaggingRule.php b/src/Wallabag/CoreBundle/Entity/TaggingRule.php index c1be3165..eac53fa3 100644 --- a/src/Wallabag/CoreBundle/Entity/TaggingRule.php +++ b/src/Wallabag/CoreBundle/Entity/TaggingRule.php | |||
@@ -3,12 +3,16 @@ | |||
3 | namespace Wallabag\CoreBundle\Entity; | 3 | namespace Wallabag\CoreBundle\Entity; |
4 | 4 | ||
5 | use Doctrine\ORM\Mapping as ORM; | 5 | use Doctrine\ORM\Mapping as ORM; |
6 | use JMS\Serializer\Annotation\Exclude; | ||
7 | use JMS\Serializer\Annotation\Groups; | ||
8 | use JMS\Serializer\Annotation\XmlRoot; | ||
6 | use Symfony\Bridge\RulerZ\Validator\Constraints as RulerZAssert; | 9 | use Symfony\Bridge\RulerZ\Validator\Constraints as RulerZAssert; |
7 | use Symfony\Component\Validator\Constraints as Assert; | 10 | use Symfony\Component\Validator\Constraints as Assert; |
8 | 11 | ||
9 | /** | 12 | /** |
10 | * Tagging rule. | 13 | * Tagging rule. |
11 | * | 14 | * |
15 | * @XmlRoot("tagging_rule") | ||
12 | * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TaggingRuleRepository") | 16 | * @ORM\Entity(repositoryClass="Wallabag\CoreBundle\Repository\TaggingRuleRepository") |
13 | * @ORM\Table(name="`tagging_rule`") | 17 | * @ORM\Table(name="`tagging_rule`") |
14 | * @ORM\Entity | 18 | * @ORM\Entity |
@@ -34,6 +38,8 @@ class TaggingRule | |||
34 | * allowed_operators={">", "<", ">=", "<=", "=", "is", "!=", "and", "not", "or", "matches", "notmatches"} | 38 | * allowed_operators={">", "<", ">=", "<=", "=", "is", "!=", "and", "not", "or", "matches", "notmatches"} |
35 | * ) | 39 | * ) |
36 | * @ORM\Column(name="rule", type="string", nullable=false) | 40 | * @ORM\Column(name="rule", type="string", nullable=false) |
41 | * | ||
42 | * @Groups({"export_tagging_rule"}) | ||
37 | */ | 43 | */ |
38 | private $rule; | 44 | private $rule; |
39 | 45 | ||
@@ -42,10 +48,14 @@ class TaggingRule | |||
42 | * | 48 | * |
43 | * @Assert\NotBlank() | 49 | * @Assert\NotBlank() |
44 | * @ORM\Column(name="tags", type="simple_array", nullable=false) | 50 | * @ORM\Column(name="tags", type="simple_array", nullable=false) |
51 | * | ||
52 | * @Groups({"export_tagging_rule"}) | ||
45 | */ | 53 | */ |
46 | private $tags = []; | 54 | private $tags = []; |
47 | 55 | ||
48 | /** | 56 | /** |
57 | * @Exclude | ||
58 | * | ||
49 | * @ORM\ManyToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", inversedBy="taggingRules") | 59 | * @ORM\ManyToOne(targetEntity="Wallabag\CoreBundle\Entity\Config", inversedBy="taggingRules") |
50 | */ | 60 | */ |
51 | private $config; | 61 | private $config; |
diff --git a/src/Wallabag/CoreBundle/Form/Type/TaggingRuleImportType.php b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleImportType.php new file mode 100644 index 00000000..c6a8c0b8 --- /dev/null +++ b/src/Wallabag/CoreBundle/Form/Type/TaggingRuleImportType.php | |||
@@ -0,0 +1,29 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Wallabag\CoreBundle\Form\Type; | ||
4 | |||
5 | use Symfony\Component\Form\AbstractType; | ||
6 | use Symfony\Component\Form\Extension\Core\Type\FileType; | ||
7 | use Symfony\Component\Form\Extension\Core\Type\SubmitType; | ||
8 | use Symfony\Component\Form\FormBuilderInterface; | ||
9 | |||
10 | class TaggingRuleImportType extends AbstractType | ||
11 | { | ||
12 | public function buildForm(FormBuilderInterface $builder, array $options) | ||
13 | { | ||
14 | $builder | ||
15 | ->add('file', FileType::class, [ | ||
16 | 'label' => 'config.form_rules.file_label', | ||
17 | 'required' => true, | ||
18 | ]) | ||
19 | ->add('import', SubmitType::class, [ | ||
20 | 'label' => 'config.form_rules.import_submit', | ||
21 | ]) | ||
22 | ; | ||
23 | } | ||
24 | |||
25 | public function getBlockPrefix() | ||
26 | { | ||
27 | return 'upload_tagging_rule_file'; | ||
28 | } | ||
29 | } | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml index 5c4ca29c..fab05835 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.da.yml | |||
@@ -140,6 +140,15 @@ config: | |||
140 | # edit_rule_label: 'edit' | 140 | # edit_rule_label: 'edit' |
141 | # rule_label: 'Rule' | 141 | # rule_label: 'Rule' |
142 | # tags_label: 'Tags' | 142 | # tags_label: 'Tags' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
143 | # faq: | 152 | # faq: |
144 | # title: 'FAQ' | 153 | # title: 'FAQ' |
145 | # tagging_rules_definition_title: 'What does « tagging rules » mean?' | 154 | # tagging_rules_definition_title: 'What does « tagging rules » mean?' |
@@ -602,6 +611,9 @@ flashes: | |||
602 | # tags_reset: Tags reset | 611 | # tags_reset: Tags reset |
603 | # entries_reset: Entries reset | 612 | # entries_reset: Entries reset |
604 | # archived_reset: Archived entries deleted | 613 | # archived_reset: Archived entries deleted |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
605 | entry: | 617 | entry: |
606 | notice: | 618 | notice: |
607 | # entry_already_saved: 'Entry already saved on %date%' | 619 | # entry_already_saved: 'Entry already saved on %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml index a21bd0f1..6ba464d0 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.de.yml | |||
@@ -140,6 +140,15 @@ config: | |||
140 | edit_rule_label: 'bearbeiten' | 140 | edit_rule_label: 'bearbeiten' |
141 | rule_label: 'Regel' | 141 | rule_label: 'Regel' |
142 | tags_label: 'Tags' | 142 | tags_label: 'Tags' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
143 | faq: | 152 | faq: |
144 | title: 'FAQ' | 153 | title: 'FAQ' |
145 | tagging_rules_definition_title: 'Was bedeuten die "Tagging-Regeln"?' | 154 | tagging_rules_definition_title: 'Was bedeuten die "Tagging-Regeln"?' |
@@ -172,6 +181,15 @@ config: | |||
172 | and: 'Eine Regel UND eine andere' | 181 | and: 'Eine Regel UND eine andere' |
173 | matches: 'Testet, 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>' | 182 | matches: 'Testet, 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>' |
174 | notmatches: 'Testet, ob ein <i>Titel</i> nicht auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title notmatches "Fußball"</code>' | 183 | notmatches: 'Testet, ob ein <i>Titel</i> nicht auf eine <i>Suche</i> zutrifft (Groß- und Kleinschreibung wird nicht berücksichtigt).<br />Beispiel: <code>title notmatches "Fußball"</code>' |
184 | otp: | ||
185 | # page_title: Two-factor authentication | ||
186 | # app: | ||
187 | # two_factor_code_description_1: You just enabled the OTP two factor authentication, open your OTP app and use that code to get a one time password. It'll disapear after a page reload. | ||
188 | # two_factor_code_description_2: 'You can scan that QR Code with your app:' | ||
189 | # two_factor_code_description_3: 'Also, save these backup codes in a safe place, you can use them in case you lose access to your OTP app:' | ||
190 | # two_factor_code_description_4: 'Test an OTP code from your configured app:' | ||
191 | # cancel: Cancel | ||
192 | # enable: Enable | ||
175 | 193 | ||
176 | entry: | 194 | entry: |
177 | default_title: 'Titel des Eintrags' | 195 | default_title: 'Titel des Eintrags' |
@@ -593,6 +611,9 @@ flashes: | |||
593 | tags_reset: Tags zurücksetzen | 611 | tags_reset: Tags zurücksetzen |
594 | entries_reset: Einträge zurücksetzen | 612 | entries_reset: Einträge zurücksetzen |
595 | archived_reset: Archiverte Einträge zurücksetzen | 613 | archived_reset: Archiverte Einträge zurücksetzen |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
596 | entry: | 617 | entry: |
597 | notice: | 618 | notice: |
598 | entry_already_saved: 'Eintrag bereits am %date% gespeichert' | 619 | entry_already_saved: 'Eintrag bereits am %date% gespeichert' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml index 2f310246..a7c32f11 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.en.yml | |||
@@ -140,6 +140,15 @@ config: | |||
140 | edit_rule_label: 'edit' | 140 | edit_rule_label: 'edit' |
141 | rule_label: 'Rule' | 141 | rule_label: 'Rule' |
142 | tags_label: 'Tags' | 142 | tags_label: 'Tags' |
143 | card: | ||
144 | new_tagging_rule: Create a tagging rule | ||
145 | import_tagging_rules: Import tagging rules | ||
146 | import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | export_tagging_rules: Export tagging rules | ||
148 | export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | file_label: JSON file | ||
150 | import_submit: Import | ||
151 | export: Export | ||
143 | faq: | 152 | faq: |
144 | title: 'FAQ' | 153 | title: 'FAQ' |
145 | tagging_rules_definition_title: 'What does « tagging rules » mean?' | 154 | tagging_rules_definition_title: 'What does « tagging rules » mean?' |
@@ -603,6 +612,8 @@ flashes: | |||
603 | entries_reset: Entries reset | 612 | entries_reset: Entries reset |
604 | archived_reset: Archived entries deleted | 613 | archived_reset: Archived entries deleted |
605 | otp_enabled: Two-factor authentication enabled | 614 | otp_enabled: Two-factor authentication enabled |
615 | tagging_rules_imported: Tagging rules imported | ||
616 | tagging_rules_not_imported: Error while importing tagging rules | ||
606 | entry: | 617 | entry: |
607 | notice: | 618 | notice: |
608 | entry_already_saved: 'Entry already saved on %date%' | 619 | entry_already_saved: 'Entry already saved on %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml index c194041a..093c5857 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.es.yml | |||
@@ -140,6 +140,15 @@ config: | |||
140 | edit_rule_label: 'editar' | 140 | edit_rule_label: 'editar' |
141 | rule_label: 'Regla' | 141 | rule_label: 'Regla' |
142 | tags_label: 'Etiquetas' | 142 | tags_label: 'Etiquetas' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
143 | faq: | 152 | faq: |
144 | title: 'Preguntas frecuentes' | 153 | title: 'Preguntas frecuentes' |
145 | tagging_rules_definition_title: '¿Qué significa « reglas de etiquetado automático »?' | 154 | tagging_rules_definition_title: '¿Qué significa « reglas de etiquetado automático »?' |
@@ -602,6 +611,9 @@ flashes: | |||
602 | tags_reset: Etiquetas reiniciadas | 611 | tags_reset: Etiquetas reiniciadas |
603 | entries_reset: Artículos reiniciados | 612 | entries_reset: Artículos reiniciados |
604 | # archived_reset: Archived entries deleted | 613 | # archived_reset: Archived entries deleted |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
605 | entry: | 617 | entry: |
606 | notice: | 618 | notice: |
607 | entry_already_saved: 'Artículo ya guardado el %fecha%' | 619 | entry_already_saved: 'Artículo ya guardado el %fecha%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml index 9aef7dde..00caa0ac 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fa.yml | |||
@@ -140,6 +140,15 @@ config: | |||
140 | # edit_rule_label: 'edit' | 140 | # edit_rule_label: 'edit' |
141 | rule_label: 'قانون' | 141 | rule_label: 'قانون' |
142 | tags_label: 'برچسبها' | 142 | tags_label: 'برچسبها' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
143 | faq: | 152 | faq: |
144 | title: 'پرسشهای متداول' | 153 | title: 'پرسشهای متداول' |
145 | tagging_rules_definition_title: 'برچسبگذاری خودکار یعنی چه؟' | 154 | tagging_rules_definition_title: 'برچسبگذاری خودکار یعنی چه؟' |
@@ -602,6 +611,9 @@ flashes: | |||
602 | # tags_reset: Tags reset | 611 | # tags_reset: Tags reset |
603 | # entries_reset: Entries reset | 612 | # entries_reset: Entries reset |
604 | # archived_reset: Archived entries deleted | 613 | # archived_reset: Archived entries deleted |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
605 | entry: | 617 | entry: |
606 | notice: | 618 | notice: |
607 | entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود' | 619 | entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml index 9848ed9a..ca66acde 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.fr.yml | |||
@@ -140,6 +140,15 @@ config: | |||
140 | edit_rule_label: "éditer" | 140 | edit_rule_label: "éditer" |
141 | rule_label: "Règle" | 141 | rule_label: "Règle" |
142 | tags_label: "Tags" | 142 | tags_label: "Tags" |
143 | card: | ||
144 | new_tagging_rule: Créer une règle | ||
145 | import_tagging_rules: Importer des règles | ||
146 | import_tagging_rules_detail: Vous devez sélectionné un fichier JSON que vous avez précédemment exporté. | ||
147 | export_tagging_rules: Exporter les règles | ||
148 | export_tagging_rules_detail: Un fichier JSON sera téléchargé et vous pourrez l'utiliser pour ré-importer les règles ou comme sauvegarde. | ||
149 | file_label: Fichier JSON | ||
150 | import_submit: Importer | ||
151 | export: Export | ||
143 | faq: | 152 | faq: |
144 | title: "FAQ" | 153 | title: "FAQ" |
145 | tagging_rules_definition_title: "Que signifient les règles de tag automatiques ?" | 154 | tagging_rules_definition_title: "Que signifient les règles de tag automatiques ?" |
@@ -604,6 +613,8 @@ flashes: | |||
604 | entries_reset: "Articles supprimés" | 613 | entries_reset: "Articles supprimés" |
605 | archived_reset: "Articles archivés supprimés" | 614 | archived_reset: "Articles archivés supprimés" |
606 | otp_enabled: "Authentification à double-facteur activée" | 615 | otp_enabled: "Authentification à double-facteur activée" |
616 | tagging_rules_imported: Règles bien importées | ||
617 | tagging_rules_not_imported: Impossible d'importer les règles | ||
607 | entry: | 618 | entry: |
608 | notice: | 619 | notice: |
609 | entry_already_saved: "Article déjà sauvegardé le %date%" | 620 | entry_already_saved: "Article déjà sauvegardé le %date%" |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml index efbf062b..85720ef8 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.it.yml | |||
@@ -105,6 +105,7 @@ config: | |||
105 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
106 | name_label: 'Nome' | 106 | name_label: 'Nome' |
107 | email_label: 'E-mail' | 107 | email_label: 'E-mail' |
108 | two_factor: | ||
108 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
109 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
110 | # table_method: Method | 111 | # table_method: Method |
@@ -139,6 +140,15 @@ config: | |||
139 | edit_rule_label: 'modifica' | 140 | edit_rule_label: 'modifica' |
140 | rule_label: 'Regola' | 141 | rule_label: 'Regola' |
141 | tags_label: 'Etichetta' | 142 | tags_label: 'Etichetta' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
142 | faq: | 152 | faq: |
143 | title: 'FAQ' | 153 | title: 'FAQ' |
144 | tagging_rules_definition_title: 'Cosa significa « regole di etichettatura » ?' | 154 | tagging_rules_definition_title: 'Cosa significa « regole di etichettatura » ?' |
@@ -601,6 +611,9 @@ flashes: | |||
601 | tags_reset: Reset etichette | 611 | tags_reset: Reset etichette |
602 | entries_reset: Reset articoli | 612 | entries_reset: Reset articoli |
603 | # archived_reset: Archived entries deleted | 613 | # archived_reset: Archived entries deleted |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
604 | entry: | 617 | entry: |
605 | notice: | 618 | notice: |
606 | entry_already_saved: 'Contenuto già salvato in data %date%' | 619 | entry_already_saved: 'Contenuto già salvato in data %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml index 86ce4644..18d1173b 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.oc.yml | |||
@@ -105,6 +105,7 @@ config: | |||
105 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
106 | name_label: 'Nom' | 106 | name_label: 'Nom' |
107 | email_label: 'Adreça de corrièl' | 107 | email_label: 'Adreça de corrièl' |
108 | two_factor: | ||
108 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
109 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
110 | # table_method: Method | 111 | # table_method: Method |
@@ -139,6 +140,15 @@ config: | |||
139 | edit_rule_label: 'modificar' | 140 | edit_rule_label: 'modificar' |
140 | rule_label: 'Règla' | 141 | rule_label: 'Règla' |
141 | tags_label: 'Etiquetas' | 142 | tags_label: 'Etiquetas' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
142 | faq: | 152 | faq: |
143 | title: 'FAQ' | 153 | title: 'FAQ' |
144 | tagging_rules_definition_title: "Qué significa las règlas d'etiquetas automaticas ?" | 154 | tagging_rules_definition_title: "Qué significa las règlas d'etiquetas automaticas ?" |
@@ -601,6 +611,9 @@ flashes: | |||
601 | tags_reset: Etiquetas levadas | 611 | tags_reset: Etiquetas levadas |
602 | entries_reset: Articles levats | 612 | entries_reset: Articles levats |
603 | archived_reset: Articles archivat suprimits | 613 | archived_reset: Articles archivat suprimits |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
604 | entry: | 617 | entry: |
605 | notice: | 618 | notice: |
606 | entry_already_saved: 'Article ja salvagardat lo %date%' | 619 | entry_already_saved: 'Article ja salvagardat lo %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml index 9ebe0236..6528a562 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pl.yml | |||
@@ -105,6 +105,7 @@ config: | |||
105 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
106 | name_label: 'Nazwa' | 106 | name_label: 'Nazwa' |
107 | email_label: 'Adres email' | 107 | email_label: 'Adres email' |
108 | two_factor: | ||
108 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
109 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
110 | # table_method: Method | 111 | # table_method: Method |
@@ -139,6 +140,15 @@ config: | |||
139 | edit_rule_label: 'edytuj' | 140 | edit_rule_label: 'edytuj' |
140 | rule_label: 'Reguła' | 141 | rule_label: 'Reguła' |
141 | tags_label: 'Tagi' | 142 | tags_label: 'Tagi' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
142 | faq: | 152 | faq: |
143 | title: 'FAQ' | 153 | title: 'FAQ' |
144 | tagging_rules_definition_title: 'Co oznaczają « reguły tagowania » ?' | 154 | tagging_rules_definition_title: 'Co oznaczają « reguły tagowania » ?' |
@@ -601,6 +611,9 @@ flashes: | |||
601 | tags_reset: Zresetuj tagi | 611 | tags_reset: Zresetuj tagi |
602 | entries_reset: Zresetuj wpisy | 612 | entries_reset: Zresetuj wpisy |
603 | archived_reset: Zarchiwizowane wpisy usunięte | 613 | archived_reset: Zarchiwizowane wpisy usunięte |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
604 | entry: | 617 | entry: |
605 | notice: | 618 | notice: |
606 | entry_already_saved: 'Wpis już został dodany %date%' | 619 | entry_already_saved: 'Wpis już został dodany %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml index d310e016..3f1c7a68 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.pt.yml | |||
@@ -105,6 +105,7 @@ config: | |||
105 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
106 | name_label: 'Nome' | 106 | name_label: 'Nome' |
107 | email_label: 'E-mail' | 107 | email_label: 'E-mail' |
108 | two_factor: | ||
108 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
109 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
110 | # table_method: Method | 111 | # table_method: Method |
@@ -139,6 +140,15 @@ config: | |||
139 | edit_rule_label: 'editar' | 140 | edit_rule_label: 'editar' |
140 | rule_label: 'Regras' | 141 | rule_label: 'Regras' |
141 | tags_label: 'Tags' | 142 | tags_label: 'Tags' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
142 | faq: | 152 | faq: |
143 | title: 'FAQ' | 153 | title: 'FAQ' |
144 | tagging_rules_definition_title: 'O que as « regras de tags » significam?' | 154 | tagging_rules_definition_title: 'O que as « regras de tags » significam?' |
@@ -601,6 +611,9 @@ flashes: | |||
601 | # tags_reset: Tags reset | 611 | # tags_reset: Tags reset |
602 | # entries_reset: Entries reset | 612 | # entries_reset: Entries reset |
603 | # archived_reset: Archived entries deleted | 613 | # archived_reset: Archived entries deleted |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
604 | entry: | 617 | entry: |
605 | notice: | 618 | notice: |
606 | entry_already_saved: 'Entrada já foi salva em %date%' | 619 | entry_already_saved: 'Entrada já foi salva em %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml index c11ff0b8..d82e9377 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ro.yml | |||
@@ -105,6 +105,7 @@ config: | |||
105 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
106 | name_label: 'Nume' | 106 | name_label: 'Nume' |
107 | email_label: 'E-mail' | 107 | email_label: 'E-mail' |
108 | two_factor: | ||
108 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
109 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
110 | # table_method: Method | 111 | # table_method: Method |
@@ -139,6 +140,15 @@ config: | |||
139 | # edit_rule_label: 'edit' | 140 | # edit_rule_label: 'edit' |
140 | # rule_label: 'Rule' | 141 | # rule_label: 'Rule' |
141 | # tags_label: 'Tags' | 142 | # tags_label: 'Tags' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
142 | # faq: | 152 | # faq: |
143 | # title: 'FAQ' | 153 | # title: 'FAQ' |
144 | # tagging_rules_definition_title: 'What does « tagging rules » mean?' | 154 | # tagging_rules_definition_title: 'What does « tagging rules » mean?' |
@@ -429,9 +439,9 @@ tag: | |||
429 | rename: | 439 | rename: |
430 | # placeholder: 'You can update tag name.' | 440 | # placeholder: 'You can update tag name.' |
431 | 441 | ||
432 | # export: | 442 | export: |
433 | # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' | 443 | # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' |
434 | # unknown: 'Unknown' | 444 | # unknown: 'Unknown' |
435 | 445 | ||
436 | import: | 446 | import: |
437 | # page_title: 'Import' | 447 | # page_title: 'Import' |
@@ -601,6 +611,9 @@ flashes: | |||
601 | # tags_reset: Tags reset | 611 | # tags_reset: Tags reset |
602 | # entries_reset: Entries reset | 612 | # entries_reset: Entries reset |
603 | # archived_reset: Archived entries deleted | 613 | # archived_reset: Archived entries deleted |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
604 | entry: | 617 | entry: |
605 | notice: | 618 | notice: |
606 | # entry_already_saved: 'Entry already saved on %date%' | 619 | # entry_already_saved: 'Entry already saved on %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml index 9fe75369..23d31333 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.ru.yml | |||
@@ -80,6 +80,7 @@ config: | |||
80 | redirect_current_page: 'На текущую страницу' | 80 | redirect_current_page: 'На текущую страницу' |
81 | pocket_consumer_key_label: "Ключ от Pocket для импорта контента" | 81 | pocket_consumer_key_label: "Ключ от Pocket для импорта контента" |
82 | android_configuration: "Настройте Ваше Android приложение" | 82 | android_configuration: "Настройте Ваше Android приложение" |
83 | # android_instruction: "Touch here to prefill your Android application" | ||
83 | help_theme: "wallabag настраиваемый, здесь Вы можете выбрать тему." | 84 | help_theme: "wallabag настраиваемый, здесь Вы можете выбрать тему." |
84 | help_items_per_page: "Вы можете выбрать количество отображаемых записей на странице." | 85 | help_items_per_page: "Вы можете выбрать количество отображаемых записей на странице." |
85 | help_reading_speed: "wallabag посчитает сколько времени занимает чтение каждой записи. Вы можете определить здесь, как быстро вы читаете. wallabag пересчитает время чтения для каждой записи." | 86 | help_reading_speed: "wallabag посчитает сколько времени занимает чтение каждой записи. Вы можете определить здесь, как быстро вы читаете. wallabag пересчитает время чтения для каждой записи." |
@@ -97,12 +98,14 @@ config: | |||
97 | unread: 'непрочитанные' | 98 | unread: 'непрочитанные' |
98 | starred: 'помеченные' | 99 | starred: 'помеченные' |
99 | archive: 'архивные' | 100 | archive: 'архивные' |
101 | # all: 'All' | ||
100 | feed_limit: 'Количество записей в фиде' | 102 | feed_limit: 'Количество записей в фиде' |
101 | form_user: | 103 | form_user: |
102 | # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code OR need to use an OTP app (like Google Authenticator, Authy or FreeOTP) to get a one time code on every new untrusted connection. You can't choose both option." | 104 | # two_factor_description: "Enabling two factor authentication means you'll receive an email with a code OR need to use an OTP app (like Google Authenticator, Authy or FreeOTP) to get a one time code on every new untrusted connection. You can't choose both option." |
103 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
104 | name_label: 'Имя' | 106 | name_label: 'Имя' |
105 | email_label: 'Email' | 107 | email_label: 'Email' |
108 | two_factor: | ||
106 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
107 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
108 | # table_method: Method | 111 | # table_method: Method |
@@ -123,6 +126,7 @@ config: | |||
123 | annotations: "Удалить все аннотации" | 126 | annotations: "Удалить все аннотации" |
124 | tags: "Удалить все теги" | 127 | tags: "Удалить все теги" |
125 | entries: "Удалить все записи" | 128 | entries: "Удалить все записи" |
129 | # archived: Remove ALL archived entries | ||
126 | confirm: "Вы уверены? (Данные будут БЕЗВОЗВРАТНО удалены, эти действия необратимы)" | 130 | confirm: "Вы уверены? (Данные будут БЕЗВОЗВРАТНО удалены, эти действия необратимы)" |
127 | form_password: | 131 | form_password: |
128 | description: "Здесь Вы можете поменять своя пароль. Ваш пароль должен быть длиннее 8 символов." | 132 | description: "Здесь Вы можете поменять своя пароль. Ваш пароль должен быть длиннее 8 символов." |
@@ -136,6 +140,15 @@ config: | |||
136 | edit_rule_label: 'изменить' | 140 | edit_rule_label: 'изменить' |
137 | rule_label: 'Правило' | 141 | rule_label: 'Правило' |
138 | tags_label: 'теги' | 142 | tags_label: 'теги' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
139 | faq: | 152 | faq: |
140 | title: 'FAQ' | 153 | title: 'FAQ' |
141 | tagging_rules_definition_title: 'Что значит "правило тегирования"?' | 154 | tagging_rules_definition_title: 'Что значит "правило тегирования"?' |
@@ -167,6 +180,7 @@ config: | |||
167 | or: 'Одно правило ИЛИ другое' | 180 | or: 'Одно правило ИЛИ другое' |
168 | and: 'Одно правило И другое' | 181 | and: 'Одно правило И другое' |
169 | matches: 'Тесты, в которых <i> тема </i> соответствует <i> поиску </i> (без учета регистра). Пример: <code> title matches "футбол" </code>' | 182 | matches: 'Тесты, в которых <i> тема </i> соответствует <i> поиску </i> (без учета регистра). Пример: <code> title matches "футбол" </code>' |
183 | # notmatches: 'Tests that a <i>subject</i> doesn''t match match a <i>search</i> (case-insensitive).<br />Example: <code>title notmatches "football"</code>' | ||
170 | otp: | 184 | otp: |
171 | # page_title: Two-factor authentication | 185 | # page_title: Two-factor authentication |
172 | # app: | 186 | # app: |
@@ -187,6 +201,7 @@ entry: | |||
187 | filtered_tags: 'Отфильтрованные по тегу:' | 201 | filtered_tags: 'Отфильтрованные по тегу:' |
188 | filtered_search: 'Отфильтрованные по поиску:' | 202 | filtered_search: 'Отфильтрованные по поиску:' |
189 | untagged: 'Записи без тегов' | 203 | untagged: 'Записи без тегов' |
204 | # all: 'All entries' | ||
190 | list: | 205 | list: |
191 | number_on_the_page: '{0} Записей не обнаружено.|{1} Одна запись.|]1,Inf[ Найдено %count% записей.' | 206 | number_on_the_page: '{0} Записей не обнаружено.|{1} Одна запись.|]1,Inf[ Найдено %count% записей.' |
192 | reading_time: 'расчетное время чтения' | 207 | reading_time: 'расчетное время чтения' |
@@ -208,6 +223,8 @@ entry: | |||
208 | unread_label: 'Непрочитанная' | 223 | unread_label: 'Непрочитанная' |
209 | preview_picture_label: 'Есть картинка предварительного просмотра' | 224 | preview_picture_label: 'Есть картинка предварительного просмотра' |
210 | preview_picture_help: 'Картинка предварительного просмотра' | 225 | preview_picture_help: 'Картинка предварительного просмотра' |
226 | # is_public_label: 'Has a public link' | ||
227 | # is_public_help: 'Public link' | ||
211 | language_label: 'Язык' | 228 | language_label: 'Язык' |
212 | http_status_label: 'статус HTTP' | 229 | http_status_label: 'статус HTTP' |
213 | reading_time: | 230 | reading_time: |
@@ -246,6 +263,8 @@ entry: | |||
246 | original_article: 'оригинал' | 263 | original_article: 'оригинал' |
247 | annotations_on_the_entry: '{0} Нет аннотации|{1} Одна аннотация|]1,Inf[ %count% аннотаций' | 264 | annotations_on_the_entry: '{0} Нет аннотации|{1} Одна аннотация|]1,Inf[ %count% аннотаций' |
248 | created_at: 'Дата создания' | 265 | created_at: 'Дата создания' |
266 | # published_at: 'Publication date' | ||
267 | # published_by: 'Published by' | ||
249 | # provided_by: 'Provided by' | 268 | # provided_by: 'Provided by' |
250 | new: | 269 | new: |
251 | page_title: 'Сохранить новую запись' | 270 | page_title: 'Сохранить новую запись' |
@@ -259,10 +278,12 @@ entry: | |||
259 | title_label: 'Название' | 278 | title_label: 'Название' |
260 | url_label: 'Ссылка' | 279 | url_label: 'Ссылка' |
261 | # origin_url_label: 'Origin url (from where you found that entry)' | 280 | # origin_url_label: 'Origin url (from where you found that entry)' |
262 | is_public_label: 'Публичная' | ||
263 | save_label: 'Сохранить' | 281 | save_label: 'Сохранить' |
264 | public: | 282 | public: |
265 | shared_by_wallabag: "Запись была опубликована <a href='%wallabag_instance%'>wallabag</a>" | 283 | shared_by_wallabag: "Запись была опубликована <a href='%wallabag_instance%'>wallabag</a>" |
284 | confirm: | ||
285 | # delete: "Are you sure you want to remove that article?" | ||
286 | # delete_tag: "Are you sure you want to remove that tag from that article?" | ||
266 | metadata: | 287 | metadata: |
267 | # reading_time: "Estimated reading time" | 288 | # reading_time: "Estimated reading time" |
268 | # reading_time_minutes_short: "%readingTime% min" | 289 | # reading_time_minutes_short: "%readingTime% min" |
@@ -418,9 +439,9 @@ tag: | |||
418 | rename: | 439 | rename: |
419 | # placeholder: 'You can update tag name.' | 440 | # placeholder: 'You can update tag name.' |
420 | 441 | ||
421 | # export: | 442 | export: |
422 | # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' | 443 | # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' |
423 | # unknown: 'Unknown' | 444 | # unknown: 'Unknown' |
424 | 445 | ||
425 | import: | 446 | import: |
426 | page_title: 'Импорт' | 447 | page_title: 'Импорт' |
@@ -548,6 +569,28 @@ user: | |||
548 | delete: "Удалить" | 569 | delete: "Удалить" |
549 | delete_confirm: "Вы уверены?" | 570 | delete_confirm: "Вы уверены?" |
550 | back_to_list: "Назад к списку" | 571 | back_to_list: "Назад к списку" |
572 | search: | ||
573 | # placeholder: Filter by login or email | ||
574 | |||
575 | site_credential: | ||
576 | # page_title: Site credentials management | ||
577 | # new_site_credential: Create a credential | ||
578 | # edit_site_credential: Edit an existing credential | ||
579 | # description: "Here you can manage all credentials for sites which required them (create, edit and delete), like a paywall, an authentication, etc." | ||
580 | # list: | ||
581 | # actions: Actions | ||
582 | # edit_action: Edit | ||
583 | # yes: Yes | ||
584 | # no: No | ||
585 | # create_new_one: Create a new credential | ||
586 | # form: | ||
587 | # username_label: 'Login' | ||
588 | # host_label: 'Host (subdomain.example.org, .example.org, etc.)' | ||
589 | # password_label: 'Password' | ||
590 | # save: Save | ||
591 | # delete: Delete | ||
592 | # delete_confirm: Are you sure? | ||
593 | # back_to_list: Back to list | ||
551 | 594 | ||
552 | error: | 595 | error: |
553 | page_title: "Произошла ошибка" | 596 | page_title: "Произошла ошибка" |
@@ -567,6 +610,10 @@ flashes: | |||
567 | annotations_reset: "Аннотации сброшены" | 610 | annotations_reset: "Аннотации сброшены" |
568 | tags_reset: "Теги сброшены" | 611 | tags_reset: "Теги сброшены" |
569 | entries_reset: "Записи сброшены" | 612 | entries_reset: "Записи сброшены" |
613 | # archived_reset: Archived entries deleted | ||
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
570 | entry: | 617 | entry: |
571 | notice: | 618 | notice: |
572 | entry_already_saved: 'Запись была сохранена ранее %date%' | 619 | entry_already_saved: 'Запись была сохранена ранее %date%' |
@@ -603,3 +650,8 @@ flashes: | |||
603 | added: 'Пользователь "%username%" добавлен' | 650 | added: 'Пользователь "%username%" добавлен' |
604 | updated: 'Пользователь "%username%" обновлен' | 651 | updated: 'Пользователь "%username%" обновлен' |
605 | deleted: 'Пользователь "%username%" удален' | 652 | deleted: 'Пользователь "%username%" удален' |
653 | site_credential: | ||
654 | notice: | ||
655 | # added: 'Site credential for "%host%" added' | ||
656 | # updated: 'Site credential for "%host%" updated' | ||
657 | # deleted: 'Site credential for "%host%" deleted' | ||
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml index 672dcbf0..d7f47904 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.th.yml | |||
@@ -105,6 +105,7 @@ config: | |||
105 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
106 | name_label: 'ชื่อ' | 106 | name_label: 'ชื่อ' |
107 | email_label: 'อีเมล' | 107 | email_label: 'อีเมล' |
108 | two_factor: | ||
108 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
109 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
110 | # table_method: Method | 111 | # table_method: Method |
@@ -139,6 +140,15 @@ config: | |||
139 | edit_rule_label: 'ปรับแก้' | 140 | edit_rule_label: 'ปรับแก้' |
140 | rule_label: 'ข้อบังคับ' | 141 | rule_label: 'ข้อบังคับ' |
141 | tags_label: 'แท็ก' | 142 | tags_label: 'แท็ก' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
142 | faq: | 152 | faq: |
143 | title: 'FAQ' | 153 | title: 'FAQ' |
144 | tagging_rules_definition_title: 'ข้อบังคับการแท็กคืออะไร?' | 154 | tagging_rules_definition_title: 'ข้อบังคับการแท็กคืออะไร?' |
@@ -255,6 +265,7 @@ entry: | |||
255 | created_at: 'วันที่สร้าง' | 265 | created_at: 'วันที่สร้าง' |
256 | published_at: 'วันที่ประกาศ' | 266 | published_at: 'วันที่ประกาศ' |
257 | published_by: 'ประกาศโดย' | 267 | published_by: 'ประกาศโดย' |
268 | # provided_by: 'Provided by' | ||
258 | new: | 269 | new: |
259 | page_title: 'บันทึกรายการใหม่' | 270 | page_title: 'บันทึกรายการใหม่' |
260 | placeholder: 'http://website.com' | 271 | placeholder: 'http://website.com' |
@@ -266,6 +277,7 @@ entry: | |||
266 | page_title: 'แก้ไขรายการ' | 277 | page_title: 'แก้ไขรายการ' |
267 | title_label: 'หัวข้อ' | 278 | title_label: 'หัวข้อ' |
268 | url_label: 'Url' | 279 | url_label: 'Url' |
280 | # origin_url_label: 'Origin url (from where you found that entry)' | ||
269 | save_label: 'บันทึก' | 281 | save_label: 'บันทึก' |
270 | public: | 282 | public: |
271 | shared_by_wallabag: "บทความนี้จะมีการแชร์โดย %username% กับ <a href='%wallabag_instance%'>wallabag</a>" | 283 | shared_by_wallabag: "บทความนี้จะมีการแชร์โดย %username% กับ <a href='%wallabag_instance%'>wallabag</a>" |
@@ -599,6 +611,9 @@ flashes: | |||
599 | tags_reset: รีเซ็ตแท็ก | 611 | tags_reset: รีเซ็ตแท็ก |
600 | entries_reset: รีเซ็ตรายการ | 612 | entries_reset: รีเซ็ตรายการ |
601 | archived_reset: การลบเอกสารของรายการ | 613 | archived_reset: การลบเอกสารของรายการ |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
602 | entry: | 617 | entry: |
603 | notice: | 618 | notice: |
604 | entry_already_saved: 'รายการพร้อมบันทึกที่ %date%' | 619 | entry_already_saved: 'รายการพร้อมบันทึกที่ %date%' |
diff --git a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml index c2ad854d..a444cadb 100644 --- a/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml +++ b/src/Wallabag/CoreBundle/Resources/translations/messages.tr.yml | |||
@@ -105,6 +105,7 @@ config: | |||
105 | # login_label: 'Login (can not be changed)' | 105 | # login_label: 'Login (can not be changed)' |
106 | name_label: 'İsim' | 106 | name_label: 'İsim' |
107 | email_label: 'E-posta' | 107 | email_label: 'E-posta' |
108 | two_factor: | ||
108 | # emailTwoFactor_label: 'Using email (receive a code by email)' | 109 | # emailTwoFactor_label: 'Using email (receive a code by email)' |
109 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' | 110 | # googleTwoFactor_label: 'Using an OTP app (open the app, like Google Authenticator, Authy or FreeOTP, to get a one time code)' |
110 | # table_method: Method | 111 | # table_method: Method |
@@ -139,6 +140,15 @@ config: | |||
139 | # edit_rule_label: 'edit' | 140 | # edit_rule_label: 'edit' |
140 | rule_label: 'Kural' | 141 | rule_label: 'Kural' |
141 | tags_label: 'Etiketler' | 142 | tags_label: 'Etiketler' |
143 | # card: | ||
144 | # new_tagging_rule: Create a tagging rule | ||
145 | # import_tagging_rules: Import tagging rules | ||
146 | # import_tagging_rules_detail: You have to select the JSON file you previously exported. | ||
147 | # export_tagging_rules: Export tagging rules | ||
148 | # export_tagging_rules_detail: This will download a JSON file that you can use to import tagging rules elsewhere or to backup them. | ||
149 | # file_label: JSON file | ||
150 | # import_submit: Import | ||
151 | # export: Export | ||
142 | faq: | 152 | faq: |
143 | title: 'S.S.S.' | 153 | title: 'S.S.S.' |
144 | tagging_rules_definition_title: '« etiketleme kuralları » ne anlama geliyor?' | 154 | tagging_rules_definition_title: '« etiketleme kuralları » ne anlama geliyor?' |
@@ -213,6 +223,8 @@ entry: | |||
213 | unread_label: 'Okunmayan' | 223 | unread_label: 'Okunmayan' |
214 | preview_picture_label: 'Resim önizlemesi varsa' | 224 | preview_picture_label: 'Resim önizlemesi varsa' |
215 | preview_picture_help: 'Resim önizlemesi' | 225 | preview_picture_help: 'Resim önizlemesi' |
226 | # is_public_label: 'Has a public link' | ||
227 | # is_public_help: 'Public link' | ||
216 | language_label: 'Dil' | 228 | language_label: 'Dil' |
217 | # http_status_label: 'HTTP status' | 229 | # http_status_label: 'HTTP status' |
218 | reading_time: | 230 | reading_time: |
@@ -427,9 +439,9 @@ tag: | |||
427 | rename: | 439 | rename: |
428 | # placeholder: 'You can update tag name.' | 440 | # placeholder: 'You can update tag name.' |
429 | 441 | ||
430 | # export: | 442 | export: |
431 | # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' | 443 | # footer_template: '<div style="text-align:center;"><p>Produced by wallabag with %method%</p><p>Please open <a href="https://github.com/wallabag/wallabag/issues">an issue</a> if you have trouble with the display of this E-Book on your device.</p></div>' |
432 | # unknown: 'Unknown' | 444 | # unknown: 'Unknown' |
433 | 445 | ||
434 | import: | 446 | import: |
435 | page_title: 'İçe Aktar' | 447 | page_title: 'İçe Aktar' |
@@ -560,6 +572,26 @@ user: | |||
560 | search: | 572 | search: |
561 | # placeholder: Filter by username or email | 573 | # placeholder: Filter by username or email |
562 | 574 | ||
575 | site_credential: | ||
576 | # page_title: Site credentials management | ||
577 | # new_site_credential: Create a credential | ||
578 | # edit_site_credential: Edit an existing credential | ||
579 | # description: "Here you can manage all credentials for sites which required them (create, edit and delete), like a paywall, an authentication, etc." | ||
580 | # list: | ||
581 | # actions: Actions | ||
582 | # edit_action: Edit | ||
583 | # yes: Yes | ||
584 | # no: No | ||
585 | # create_new_one: Create a new credential | ||
586 | # form: | ||
587 | # username_label: 'Login' | ||
588 | # host_label: 'Host (subdomain.example.org, .example.org, etc.)' | ||
589 | # password_label: 'Password' | ||
590 | # save: Save | ||
591 | # delete: Delete | ||
592 | # delete_confirm: Are you sure? | ||
593 | # back_to_list: Back to list | ||
594 | |||
563 | error: | 595 | error: |
564 | # page_title: An error occurred | 596 | # page_title: An error occurred |
565 | 597 | ||
@@ -571,13 +603,17 @@ flashes: | |||
571 | password_not_updated_demo: "In demonstration mode, you can't change password for this user." | 603 | password_not_updated_demo: "In demonstration mode, you can't change password for this user." |
572 | user_updated: 'Bilgiler güncellendi' | 604 | user_updated: 'Bilgiler güncellendi' |
573 | feed_updated: 'RSS bilgiler güncellendi' | 605 | feed_updated: 'RSS bilgiler güncellendi' |
574 | tagging_rules_updated: 'Tagging rules updated' | 606 | # tagging_rules_updated: 'Tagging rules updated' |
575 | tagging_rules_deleted: 'Tagging rule deleted' | 607 | # tagging_rules_deleted: 'Tagging rule deleted' |
576 | feed_token_updated: 'RSS token updated' | 608 | # feed_token_updated: 'RSS token updated' |
609 | # feed_token_revoked: 'RSS token revoked' | ||
577 | # annotations_reset: Annotations reset | 610 | # annotations_reset: Annotations reset |
578 | # tags_reset: Tags reset | 611 | # tags_reset: Tags reset |
579 | # entries_reset: Entries reset | 612 | # entries_reset: Entries reset |
580 | # archived_reset: Archived entries deleted | 613 | # archived_reset: Archived entries deleted |
614 | # otp_enabled: Two-factor authentication enabled | ||
615 | # tagging_rules_imported: Tagging rules imported | ||
616 | # tagging_rules_not_imported: Error while importing tagging rules | ||
581 | entry: | 617 | entry: |
582 | notice: | 618 | notice: |
583 | entry_already_saved: 'Entry already saved on %date%' | 619 | entry_already_saved: 'Entry already saved on %date%' |
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 eba4539f..f719bea2 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 | |||
@@ -291,6 +291,34 @@ | |||
291 | 291 | ||
292 | {{ form_rest(form.new_tagging_rule) }} | 292 | {{ form_rest(form.new_tagging_rule) }} |
293 | </form> | 293 | </form> |
294 | |||
295 | <div class="row"> | ||
296 | <h3>{{ 'config.form_rules.card.import_tagging_rules'|trans }}</h3> | ||
297 | <p>{{ 'config.form_rules.card.import_tagging_rules_detail'|trans }}</p> | ||
298 | </div> | ||
299 | |||
300 | {{ form_start(form.import_tagging_rule) }} | ||
301 | {{ form_errors(form.import_tagging_rule) }} | ||
302 | |||
303 | <fieldset class="w500p inline"> | ||
304 | <div class="row"> | ||
305 | {{ form_label(form.import_tagging_rule.file) }} | ||
306 | {{ form_errors(form.import_tagging_rule.file) }} | ||
307 | {{ form_widget(form.import_tagging_rule.file) }} | ||
308 | </div> | ||
309 | </fieldset> | ||
310 | |||
311 | {{ form_rest(form.import_tagging_rule) }} | ||
312 | </form> | ||
313 | |||
314 | {% if app.user.config.taggingRules is not empty %} | ||
315 | <div class="row"> | ||
316 | <h3>{{ 'config.form_rules.card.export_tagging_rules'|trans }}</h3> | ||
317 | <p>{{ 'config.form_rules.card.export_tagging_rules_detail'|trans }}</p> | ||
318 | <p><a href="{{ path('export_tagging_rule') }}" class="waves-effect waves-light btn">{{ 'config.form_rules.export'|trans }}</a></p> | ||
319 | </div> | ||
320 | {% endif %} | ||
321 | |||
294 | <div class="row"> | 322 | <div class="row"> |
295 | <div class="input-field col s12"> | 323 | <div class="input-field col s12"> |
296 | <h3>{{ 'config.form_rules.faq.title'|trans }}</h3> | 324 | <h3>{{ 'config.form_rules.faq.title'|trans }}</h3> |
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 990546e8..d8e9694d 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 | |||
@@ -307,28 +307,77 @@ | |||
307 | </div> | 307 | </div> |
308 | {% endif %} | 308 | {% endif %} |
309 | 309 | ||
310 | {{ form_start(form.new_tagging_rule) }} | 310 | <ul class="row"> |
311 | {{ form_errors(form.new_tagging_rule) }} | 311 | <li class="col l6 m6 s12"> |
312 | 312 | <div class="card"> | |
313 | <div class="row"> | 313 | <div class="card-content"> |
314 | <div class="input-field col s12"> | 314 | <span class="card-title">{{ 'config.form_rules.card.new_tagging_rule'|trans }}</span> |
315 | {{ form_label(form.new_tagging_rule.rule) }} | 315 | |
316 | {{ form_errors(form.new_tagging_rule.rule) }} | 316 | {{ form_start(form.new_tagging_rule) }} |
317 | {{ form_widget(form.new_tagging_rule.rule) }} | 317 | {{ form_errors(form.new_tagging_rule) }} |
318 | |||
319 | <div class="row"> | ||
320 | <div class="input-field col s12"> | ||
321 | {{ form_label(form.new_tagging_rule.rule) }} | ||
322 | {{ form_errors(form.new_tagging_rule.rule) }} | ||
323 | {{ form_widget(form.new_tagging_rule.rule) }} | ||
324 | </div> | ||
325 | </div> | ||
326 | |||
327 | <div class="row"> | ||
328 | <div class="input-field col s12"> | ||
329 | {{ form_label(form.new_tagging_rule.tags) }} | ||
330 | {{ form_errors(form.new_tagging_rule.tags) }} | ||
331 | {{ form_widget(form.new_tagging_rule.tags) }} | ||
332 | </div> | ||
333 | </div> | ||
334 | |||
335 | {{ form_widget(form.new_tagging_rule.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} | ||
336 | {{ form_rest(form.new_tagging_rule) }} | ||
337 | </form> | ||
338 | </div> | ||
318 | </div> | 339 | </div> |
319 | </div> | 340 | </li> |
320 | 341 | <li class="col l6 m6 s12"> | |
321 | <div class="row"> | 342 | <div class="card z-depth-1"> |
322 | <div class="input-field col s12"> | 343 | <div class="card-content"> |
323 | {{ form_label(form.new_tagging_rule.tags) }} | 344 | <span class="card-title">{{ 'config.form_rules.card.import_tagging_rules'|trans }}</span> |
324 | {{ form_errors(form.new_tagging_rule.tags) }} | 345 | <p>{{ 'config.form_rules.card.import_tagging_rules_detail'|trans }}</p> |
325 | {{ form_widget(form.new_tagging_rule.tags) }} | 346 | {{ form_start(form.import_tagging_rule) }} |
347 | {{ form_errors(form.import_tagging_rule) }} | ||
348 | <div class="row"> | ||
349 | <div class="file-field input-field col s12"> | ||
350 | {{ form_errors(form.import_tagging_rule.file) }} | ||
351 | <div class="btn"> | ||
352 | <span>{{ form.import_tagging_rule.file.vars.label|trans }}</span> | ||
353 | {{ form_widget(form.import_tagging_rule.file) }} | ||
354 | </div> | ||
355 | <div class="file-path-wrapper"> | ||
356 | <input class="file-path validate" type="text"> | ||
357 | </div> | ||
358 | </div> | ||
359 | </div> | ||
360 | |||
361 | {{ form_widget(form.import_tagging_rule.import, { 'attr': {'class': 'btn waves-effect waves-light'} }) }} | ||
362 | |||
363 | {{ form_rest(form.import_tagging_rule) }} | ||
364 | </form> | ||
365 | </div> | ||
326 | </div> | 366 | </div> |
327 | </div> | 367 | </li> |
328 | 368 | {% if app.user.config.taggingRules is not empty %} | |
329 | {{ form_widget(form.new_tagging_rule.save, {'attr': {'class': 'btn waves-effect waves-light'}}) }} | 369 | <li class="col l6 m6 s12"> |
330 | {{ form_rest(form.new_tagging_rule) }} | 370 | <div class="card z-depth-1"> |
331 | </form> | 371 | <div class="card-content"> |
372 | <span class="card-title">{{ 'config.form_rules.card.export_tagging_rules'|trans }}</span> | ||
373 | <p>{{ 'config.form_rules.card.export_tagging_rules_detail'|trans }}</p> | ||
374 | <br/> | ||
375 | <p><a href="{{ path('export_tagging_rule') }}" class="waves-effect waves-light btn">{{ 'config.form_rules.export'|trans }}</a></p> | ||
376 | </div> | ||
377 | </div> | ||
378 | </li> | ||
379 | {% endif %} | ||
380 | </ul> | ||
332 | 381 | ||
333 | <div class="row"> | 382 | <div class="row"> |
334 | <div class="input-field col s12"> | 383 | <div class="input-field col s12"> |
diff --git a/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php b/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php new file mode 100644 index 00000000..b6477256 --- /dev/null +++ b/tests/Wallabag/ApiBundle/Controller/TaggingRuleRestControllerTest.php | |||
@@ -0,0 +1,15 @@ | |||
1 | <?php | ||
2 | |||
3 | namespace Tests\Wallabag\ApiBundle\Controller; | ||
4 | |||
5 | use Tests\Wallabag\ApiBundle\WallabagApiTestCase; | ||
6 | |||
7 | class TaggingRuleRestControllerTest extends WallabagApiTestCase | ||
8 | { | ||
9 | public function testExportEntry() | ||
10 | { | ||
11 | $this->client->request('GET', '/api/taggingrule/export'); | ||
12 | $this->assertSame(200, $this->client->getResponse()->getStatusCode()); | ||
13 | $this->assertSame('application/json', $this->client->getResponse()->headers->get('Content-Type')); | ||
14 | } | ||
15 | } | ||
diff --git a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php index b9e0bed2..d8b5f383 100644 --- a/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php +++ b/tests/Wallabag/CoreBundle/Controller/ConfigControllerTest.php | |||
@@ -2,6 +2,7 @@ | |||
2 | 2 | ||
3 | namespace Tests\Wallabag\CoreBundle\Controller; | 3 | namespace Tests\Wallabag\CoreBundle\Controller; |
4 | 4 | ||
5 | use Symfony\Component\HttpFoundation\File\UploadedFile; | ||
5 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; | 6 | use Tests\Wallabag\CoreBundle\WallabagCoreTestCase; |
6 | use Wallabag\AnnotationBundle\Entity\Annotation; | 7 | use Wallabag\AnnotationBundle\Entity\Annotation; |
7 | use Wallabag\CoreBundle\Entity\Config; | 8 | use Wallabag\CoreBundle\Entity\Config; |
@@ -1097,4 +1098,67 @@ class ConfigControllerTest extends WallabagCoreTestCase | |||
1097 | $this->assertFalse($user->isGoogleTwoFactor()); | 1098 | $this->assertFalse($user->isGoogleTwoFactor()); |
1098 | $this->assertEmpty($user->getBackupCodes()); | 1099 | $this->assertEmpty($user->getBackupCodes()); |
1099 | } | 1100 | } |
1101 | |||
1102 | public function testExportTaggingRule() | ||
1103 | { | ||
1104 | $this->logInAs('admin'); | ||
1105 | $client = $this->getClient(); | ||
1106 | |||
1107 | ob_start(); | ||
1108 | $crawler = $client->request('GET', '/tagging-rule/export'); | ||
1109 | ob_end_clean(); | ||
1110 | |||
1111 | $this->assertSame(200, $client->getResponse()->getStatusCode()); | ||
1112 | |||
1113 | $headers = $client->getResponse()->headers; | ||
1114 | $this->assertSame('application/json', $headers->get('content-type')); | ||
1115 | $this->assertSame('attachment; filename="tagging_rules_admin.json"', $headers->get('content-disposition')); | ||
1116 | $this->assertSame('UTF-8', $headers->get('content-transfer-encoding')); | ||
1117 | |||
1118 | $content = json_decode($client->getResponse()->getContent(), true); | ||
1119 | |||
1120 | $this->assertCount(4, $content); | ||
1121 | $this->assertSame('content matches "spurs"', $content[0]['rule']); | ||
1122 | $this->assertSame('sport', $content[0]['tags'][0]); | ||
1123 | } | ||
1124 | |||
1125 | public function testImportTagginfRuleBadFile() | ||
1126 | { | ||
1127 | $this->logInAs('admin'); | ||
1128 | $client = $this->getClient(); | ||
1129 | |||
1130 | $crawler = $client->request('GET', '/config'); | ||
1131 | $form = $crawler->filter('form[name=upload_tagging_rule_file] > button[type=submit]')->form(); | ||
1132 | |||
1133 | $data = [ | ||
1134 | 'upload_tagging_rule_file[file]' => '', | ||
1135 | ]; | ||
1136 | |||
1137 | $client->submit($form, $data); | ||
1138 | |||
1139 | $this->assertSame(302, $client->getResponse()->getStatusCode()); | ||
1140 | } | ||
1141 | |||
1142 | public function testImportTagginfRuleFile() | ||
1143 | { | ||
1144 | $this->logInAs('admin'); | ||
1145 | $client = $this->getClient(); | ||
1146 | |||
1147 | $crawler = $client->request('GET', '/config'); | ||
1148 | $form = $crawler->filter('form[name=upload_tagging_rule_file] > button[type=submit]')->form(); | ||
1149 | |||
1150 | $file = new UploadedFile(__DIR__ . '/../fixtures/tagging_rules_admin.json', 'tagging_rules_admin.json'); | ||
1151 | |||
1152 | $data = [ | ||
1153 | 'upload_tagging_rule_file[file]' => $file, | ||
1154 | ]; | ||
1155 | |||
1156 | $client->submit($form, $data); | ||
1157 | $this->assertSame(302, $client->getResponse()->getStatusCode()); | ||
1158 | |||
1159 | $user = $client->getContainer()->get('fos_user.user_manager.test')->findUserBy(['username' => 'admin']); | ||
1160 | $taggingRules = $user->getConfig()->getTaggingRules()->toArray(); | ||
1161 | $this->assertCount(5, $taggingRules); | ||
1162 | $this->assertSame('title matches "football"', $taggingRules[4]->getRule()); | ||
1163 | } | ||
1100 | } | 1164 | } |
diff --git a/tests/Wallabag/CoreBundle/fixtures/tagging_rules_admin.json b/tests/Wallabag/CoreBundle/fixtures/tagging_rules_admin.json new file mode 100644 index 00000000..a54824e2 --- /dev/null +++ b/tests/Wallabag/CoreBundle/fixtures/tagging_rules_admin.json | |||
@@ -0,0 +1,4 @@ | |||
1 | [{ | ||
2 | "rule": "title matches \"football\"", | ||
3 | "tags": ["football"] | ||
4 | }] | ||