Compare commits

..

61 Commits
2.0.0 ... 2.0.1

Author SHA1 Message Date
7189067d38 Change Travis configuration 2016-04-11 20:23:11 +02:00
de286dc3cd Release wallabag 2.0.1 2016-04-11 20:23:11 +02:00
41e79f9792 Merge pull request #1912 from wallabag/install-config
Move setup config outside setupAdmin
2016-04-11 20:16:49 +02:00
637dc4bb21 Move setup config outside setupAdmin
If user doesn't want to create a new admin (even if it's recommended) the internal config weren't created resulting in error when using the interface.
2016-04-11 19:37:29 +02:00
a83fbf4504 Merge pull request #1909 from wallabag/prepare-release-2.0.1
Prepare release 2.0.1
2016-04-11 14:14:25 +02:00
d098cb04a8 Prepare release 2.0.1 2016-04-11 11:13:02 +02:00
574d101561 Merge pull request #1902 from wallabag/v2-changelog
Add changelog
2016-04-10 23:13:21 +02:00
386d1120c3 Update changelog 2016-04-10 20:24:20 +02:00
15e9483323 Merge pull request #1823 from wallabag/translation-fa
Translation fa
2016-04-10 20:00:03 +02:00
c5dede8445 Merge pull request #1903 from wallabag/force-server-version
Force server version to avoid connexion error
2016-04-10 19:57:45 +02:00
e9497f6fc0 Merge pull request #1901 from wallabag/spanish
Update Spanish translation
2016-04-10 15:43:40 +02:00
c71d83b60c Merge pull request #1887 from wallabag/v2-duplicate-bookmarklet
Fix duplicate article when added via the bookmarklet
2016-04-10 15:37:33 +02:00
f642863ff2 Merge pull request #1895 from wallabag/v2-fix-entries-api
All the entries are fetched via GET /api/entries
2016-04-10 15:37:05 +02:00
69c21157ba Force server version to avoid connexion error
When installing a new project with MySQL, if the database doesn't exist before installation will fail because DBAL will try to get the server version by querying it.
And since this query is done using the default database connexion and since the database doesn't exist, DBAL can't connect to the server.
2016-04-10 15:34:32 +02:00
9b2fe57eb6 Add changelog 2016-04-10 15:12:54 +02:00
b351d0494b Fix FA translations indentation 2016-04-10 14:33:11 +02:00
6d0db75328 Update messages.fa.yml 2016-04-10 14:33:11 +02:00
615fc1d237 Merge pull request #1900 from wallabag/v2-remove-pt-empty-doc
Remove empty portugese documentation
2016-04-10 14:25:01 +02:00
61fcbe9f57 Fix typo in french documentation 2016-04-10 14:23:43 +02:00
eaec84fcd3 Uncommented translated ES lines
Also, turn yaml lint into a more versbose check
2016-04-10 14:21:42 +02:00
834efe84ac Change visibility of checkIfEntryAlreadyExists method to private 2016-04-10 14:20:39 +02:00
466c0c6684 Remove empty portugese documentation 2016-04-10 14:18:03 +02:00
661d5ae0cf Update messages.es.yml
On line 103, I'm not sure what symbol that is that looks like this (<<) but it looks smaller? Where is that? Should I just copy and paste it? And just to clarity, please look at line 101 too cause I'm not too sure if/how I change the stuff within <...> I stopped mid line in 103 just until I get clarification on this. Thanks.
2016-04-10 14:18:03 +02:00
dd4997d705 Update messages.es.yml 2016-04-10 14:17:35 +02:00
c29747357a Merge pull request #1899 from wallabag/v2-nginx-doc
Add documentation about importing large file into nginx
2016-04-10 14:15:38 +02:00
0135c98b24 Remove int cast 2016-04-10 14:15:21 +02:00
cea846d407 Add documentation about importing large file into nginx
Fix #1849: configuration to avoid 413 Request Entity Too Large.
2016-04-10 14:12:25 +02:00
54ecbb41d6 Merge pull request #1898 from wallabag/v2-fix-readingtime-display-material
Fix estimated reading time in material view
2016-04-10 14:12:13 +02:00
19a7ea2a44 Merge pull request #1896 from wallabag/v2-fix-internal-settings
Fix internal settings
2016-04-10 09:49:10 +02:00
2504fe46ed Merge pull request #1894 from wallabag/v2-fix-doc-link
Fix documentation link in developer page
2016-04-10 09:44:48 +02:00
82dbd47391 Merge pull request #1891 from wallabag/v2-fix-rules-typo
Fix typo on configuration page
2016-04-10 09:37:49 +02:00
7ead8a0d9d Fix estimated reading time in material view
Fix #1893
2016-04-10 08:48:53 +02:00
cb48a569e0 Fix internal settings
Fix #1867: remove download_picture setting and manage show_printlink in material theme
2016-04-09 21:34:50 +02:00
5c3ca4fe9e All the entries are fetched via GET /api/entries
Fix #1863: only the unread entries were fetched with GET /api/entries entrypoint. Now, all the entries are fetched
2016-04-09 21:13:56 +02:00
808f541ea9 Fix documentation link in developer page 2016-04-09 20:43:22 +02:00
7a2157b8d7 Fix typo on configuration page 2016-04-09 14:04:43 +02:00
b00a89e08f Refactor EntryController 2016-04-09 13:44:54 +02:00
015e4284f0 Merge pull request #1824 from wallabag/v2-alternative-env
Remove SMTP configuration environment overrides
2016-04-08 21:03:17 +02:00
f652f41dab Fix duplicate article when added via the bookmarklet 2016-04-08 15:41:05 +02:00
7704ef5d3f Add documentation 2016-04-08 14:09:31 +02:00
e969c2a7ef Merge pull request #1879 from wallabag/v2-tag-field-position
Move tag form in Material theme
2016-04-08 13:51:20 +02:00
5b732257db Merge pull request #1884 from wallabag/nicosomb-patch-1
Change the installation method in issue template
2016-04-08 13:50:22 +02:00
0c608f1183 Change the installation method in issue template 2016-04-08 13:14:47 +02:00
77b9db87b8 Merge pull request #1804 from wallabag/j0k3r-patch-1
Force user-agent for iansommerville.com
2016-04-08 11:18:44 +02:00
6a986910b6 Merge pull request #1868 from wallabag/v2-tagrule-baggy
Remove keyboard shortcut and add tagging rule panel in baggy
2016-04-07 14:10:08 +02:00
c6cbe75b2e Move tag form in Material theme 2016-04-07 13:47:35 +02:00
9479ae834c Lock ocramius/proxy-manager
To avoid problem with PHP < 7.0
2016-04-06 11:37:03 +02:00
c802181126 Documentation about wallabag API 2016-04-06 11:30:41 +02:00
8687bcd0c9 Remove keybaord shortcut and add tagging rule panel in baggy 2016-04-05 22:29:47 +02:00
4b0b77e4d7 Merge pull request #1862 from wallabag/v2-doc-import-wllbg1-cli
Add production environment for CLI import
2016-04-05 16:57:43 +02:00
e543d03fd7 Merge pull request #1861 from wallabag/v2-round-estimated-time
Round estimated time and add reading speed for Baggy
2016-04-05 16:18:26 +02:00
6d3a3cfcda Add production environment for CLI import 2016-04-05 15:45:59 +02:00
4a749cad8d Round estimated time and add reading speed for Baggy 2016-04-05 15:35:01 +02:00
3a7df76013 Merge pull request #1856 from wallabag/v2-doc-import-wllbg1-cli
Documentation about wallabag v1 CLI import
2016-04-05 13:49:40 +02:00
af47742dd0 Documentation about wallabag v1 CLI import 2016-04-05 13:46:59 +02:00
52d806ea6b Add migrate link in french documentation 2016-04-05 08:48:53 +02:00
48bb9675c1 Add migrate link in english documentation 2016-04-05 08:48:29 +02:00
6b82630838 Merge pull request #1840 from wallabag/v2-fix-archive-page-title
Fix Archive page title translation
2016-04-04 09:20:04 +02:00
b5cf84bdf6 Fix Archive page title translation 2016-04-04 08:00:31 +02:00
0bb5669cf6 Remove SMTP configuration environment overrides
SMTP configuration has been added in #1518 to use ParameterHandle's
env-map. But Symfony actually has a native way of allowing parameters to
be overriden from environment so rather than having to define a mapping
for each possible parameter, users can define any override in
parameters.yml:

> parameters:
>     database_host: %WALLABAG_DB_HOST%

and define an environment variable SYMFONY__WALLABAG_DB_HOST.

Links:
env-map: https://github.com/Incenteev/ParameterHandler#using-environment-variables-to-set-the-parameters
Symfony external parameters: http://symfony.com/doc/current/cookbook/configuration/external_parameters.html
2016-03-29 13:44:12 +02:00
e71c376db9 Force user-agent for iansommerville.com
When using the default User Agent, the website returns a 403. By forcing the User Agent for this domain, we got the proper behavior: a 200

Since we can't _append_ new user agent to the default graby configuration, we need to rewrite all the default config + the new one.

Fix #1801
2016-03-18 20:55:54 +01:00
43 changed files with 7114 additions and 439 deletions

View File

@ -6,7 +6,7 @@ Remember, this is _not_ a place to ask questions. For that, go to http://gitter.
### Environment ### Environment
* wallabag version (or git revision) that exhibits the issue: * wallabag version (or git revision) that exhibits the issue:
* How did you install wallabag? Via `composer create-project` or by downloading the package? * How did you install wallabag? Via `git clone` or by downloading the package?
* Last wallabag version that did not exhibit the issue (if applicable): * Last wallabag version that did not exhibit the issue (if applicable):
* php version: * php version:
* OS: * OS:

View File

@ -54,8 +54,8 @@ before_install:
- if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi; - if [[ $TRAVIS_REPO_SLUG = wallabag/wallabag ]]; then cp .composer-auth.json ~/.composer/auth.json; fi;
script: script:
- travis_wait composer install --no-interaction --no-progress --prefer-dist -o - travis_wait composer update --no-interaction --no-progress
- ant prepare-$DB - ant prepare-$DB
- bin/phpunit -v - bin/phpunit -v
- if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi; - if [ "$CS_FIXER" = "run" ]; then php bin/php-cs-fixer fix src/ --verbose --dry-run ; fi;
- if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations ; fi; - if [ "$VALIDATE_TRANSLATION_FILE" = "run" ]; then php bin/console lint:yaml src/Wallabag/CoreBundle/Resources/translations -v ; fi;

64
CHANGELOG.md Normal file
View File

@ -0,0 +1,64 @@
# Changelog
All notable changes to this project will be documented in this file. This project adheres to [Semantic Versioning](http://semver.org/).
## [2.0.1] - 2016-04-11
### Added
- [Documentation about importing large file](http://doc.wallabag.org/en/v2/user/installation.html#installing-on-nginx) into nginx. (Nicolas Lœuillet)
- [Documentation about wallabag API](http://doc.wallabag.org/en/v2/developer/api.html) (Nicolas Lœuillet)
- [#1861](https://github.com/wallabag/wallabag/pull/1861) Round estimated time and add reading speed for Baggy (Nicolas Lœuillet)
- [Documentation about wallabag v1 CLI import](http://doc.wallabag.org/en/v2/user/migration.html#import-via-command-line-interface-cli) (Nicolas Lœuillet)
- [Add migrate link](http://doc.wallabag.org/en/v2/user/migration.html) in documentation (Nicolas Lœuillet)
### Changed
- [#1823](https://github.com/wallabag/wallabag/pull/1823) Persian translation (Masoud Abkenar)
- [#1901](https://github.com/wallabag/wallabag/pull/1901) Spanish translation (Jeremy Benoist)
- [#1879](https://github.com/wallabag/wallabag/pull/1879) Move tag form in Material theme (Nicolas Lœuillet)
### Fixed
- [#1903](https://github.com/wallabag/wallabag/pull/1903) Force server version to avoid connection error (Jeremy Benoist)
- [#1887](https://github.com/wallabag/wallabag/pull/1887) Fix duplicate article when added via the bookmarklet (Nicolas Lœuillet)
- [#1895](https://github.com/wallabag/wallabag/pull/1895) API: All the entries are fetched via GET /api/entries (Nicolas Lœuillet)
- [#1898](https://github.com/wallabag/wallabag/pull/1898) Fix estimated reading time in material view #1893 (Nicolas Lœuillet)
- [#1896](https://github.com/wallabag/wallabag/pull/1896) remove download_picture setting and manage show_printlink in material theme #1867 (Nicolas Lœuillet)
- [#1894](https://github.com/wallabag/wallabag/pull/1894) Fix documentation link in developer page (Nicolas Lœuillet)
- [#1891](https://github.com/wallabag/wallabag/pull/1891) Fix typo on configuration page (Nicolas Lœuillet)
- [#1884](https://github.com/wallabag/wallabag/pull/1884) Change the installation method in issue template (Nicolas Lœuillet)
- [#1844](https://github.com/wallabag/wallabag/pull/1844) Lock ocramius/proxy-manager (Jeremy Benoist)
- [#1840](https://github.com/wallabag/wallabag/pull/1840) Fix Archive page title translation (Nicolas Lœuillet)
- [#1801](https://github.com/wallabag/wallabag/pull/1804) Force user-agent for iansommerville.com (Jeremy Benoist)
### Removed
- [#1900](https://github.com/wallabag/wallabag/pull/1900) Remove empty portugese documentation (Nicolas Lœuillet)
- [#1868](https://github.com/wallabag/wallabag/pull/1868) Remove keyboard shortcut and add tagging rule panel in baggy (Nicolas Lœuillet)
- [#1824](https://github.com/wallabag/wallabag/pull/1824) Remove SMTP configuration environment overrides (Mathieu Bruyen)
## [2.0.0] - 2016-04-03
### Added
* save an article, read it, favorite it, archive it. (Hopefully)
* annotations: In each article you read, you can write annotations. ([read the doc](http://doc.wallabag.org/en/v2/user/annotations.html))
* filter entries by reading time, domain name, creation date, status, etc.
* assign tags to entries
* edit article titles
* a REST API ([you can have a look to the documentation](http://v2.wallabag.org/api/doc))
* authorization via oAuth2
* a new default theme, called `material`
* RSS feeds (with ability to limit number of articles)
* create a new account from the config page (for super admin only)
* recover passwords from login page (you have to fill your email on config page)
* picture preview, if available, is displayed for each entry
* Public registration
* migration from wallabag v1/v2 (based on JSON export) ([read the doc](http://doc.wallabag.org/en/v2/user/import.html))
* migration from Pocket (it works, but we need to implement asynchronous import: if you have too many articles, it can fail) ([read the doc](http://doc.wallabag.org/en/v2/user/import.html))
* exports in many formats (PDF, JSON, EPUB, MOBI, XML, CSV and TXT).
* 2-Factor authentication via email ([read the doc](http://doc.wallabag.org/en/v2/user/configuration.html#two-factor-authentication))
* Tagging rule: create a rule to automatically assign tags to entries! ([read the doc](http://doc.wallabag.org/en/v2/user/configuration.html#tagging-rules))
* Occitan, German, French, Turkish, Persian, Romanian, Polish, Danish, Spanish and English translations
* Quickstart for beginners (when you don't have any entries)
* Internal settings for administrator (the account created during installation)
* For 3rd apps developers, a developer page is available to create API token

View File

@ -16,7 +16,7 @@ Then you can install wallabag by executing the following commands:
``` ```
git clone https://github.com/wallabag/wallabag.git git clone https://github.com/wallabag/wallabag.git
cd wallabag cd wallabag
git checkout 2.0.0 git checkout 2.0.1
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod php bin/console wallabag:install --env=prod
php bin/console server:run --env=prod php bin/console server:run --env=prod

View File

@ -28,7 +28,7 @@ framework:
assets: ~ assets: ~
wallabag_core: wallabag_core:
version: 2.0.0 version: 2.0.1
paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb" paypal_url: "https://www.paypal.com/cgi-bin/webscr?cmd=_s-xclick&hosted_button_id=9UBA65LG3FX9Y&lc=gb"
languages: languages:
en: 'English' en: 'English'
@ -82,6 +82,7 @@ doctrine:
password: "%database_password%" password: "%database_password%"
charset: UTF8 charset: UTF8
path: "%database_path%" path: "%database_path%"
server_version: 5.6
orm: orm:
auto_generate_proxy_classes: "%kernel.debug%" auto_generate_proxy_classes: "%kernel.debug%"

View File

@ -80,7 +80,8 @@
"paragonie/random_compat": "~1.0", "paragonie/random_compat": "~1.0",
"craue/config-bundle": "~1.4", "craue/config-bundle": "~1.4",
"mnapoli/piwik-twig-extension": "^1.0", "mnapoli/piwik-twig-extension": "^1.0",
"lexik/maintenance-bundle": "~2.1" "lexik/maintenance-bundle": "~2.1",
"ocramius/proxy-manager": "1.*"
}, },
"require-dev": { "require-dev": {
"doctrine/doctrine-fixtures-bundle": "~2.2", "doctrine/doctrine-fixtures-bundle": "~2.2",
@ -90,11 +91,8 @@
"fabpot/php-cs-fixer": "~1.9" "fabpot/php-cs-fixer": "~1.9"
}, },
"scripts": { "scripts": {
"build-parameters": [
"Incenteev\\ParameterHandler\\ScriptHandler::buildParameters"
],
"post-cmd": [ "post-cmd": [
"@build-parameters", "Incenteev\\ParameterHandler\\ScriptHandler::buildParameters",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::buildBootstrap",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::clearCache",
"Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets", "Sensio\\Bundle\\DistributionBundle\\Composer\\ScriptHandler::installAssets",
@ -116,13 +114,7 @@
"symfony-tests-dir": "tests", "symfony-tests-dir": "tests",
"symfony-assets-install": "relative", "symfony-assets-install": "relative",
"incenteev-parameters": { "incenteev-parameters": {
"file": "app/config/parameters.yml", "file": "app/config/parameters.yml"
"env-map": {
"mailer_host": "WALLABAG_MAILER_HOST",
"mailer_user": "WALLABAG_MAILER_USER",
"mailer_password": "WALLABAG_MAILER_PASSWORD",
"secret": "WALLABAG_SECRET"
}
} }
}, },
"autoload": { "autoload": {

6042
composer.lock generated Normal file

File diff suppressed because it is too large Load Diff

235
docs/en/developer/api.rst Normal file

File diff suppressed because one or more lines are too long

View File

@ -24,6 +24,7 @@ The main documentation for this application is organized into a couple sections:
:caption: User documentation :caption: User documentation
user/installation user/installation
user/migration
user/create_account user/create_account
user/login user/login
user/configuration user/configuration
@ -41,7 +42,7 @@ The main documentation for this application is organized into a couple sections:
:maxdepth: 2 :maxdepth: 2
:caption: Developer documentation :caption: Developer documentation
developer/api
developer/docker developer/docker
developer/translate developer/translate
developer/maintenance developer/maintenance
developer/releasing

View File

@ -50,7 +50,7 @@ To install wallabag itself, you must run these two commands:
git clone https://github.com/wallabag/wallabag.git git clone https://github.com/wallabag/wallabag.git
cd wallabag cd wallabag
git checkout 2.0.0 git checkout 2.0.1
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod php bin/console wallabag:install --env=prod
@ -62,6 +62,11 @@ To start php's build-in server and test if everything did install correctly, you
And access wallabag at http://yourserverip:8000 And access wallabag at http://yourserverip:8000
.. note::
To define parameters with environment variables, you have to set these variables with ``SYMFONY__`` prefix. For example, ``SYMFONY__DATABASE_DRIVER``. You can have a look to the `Symfony documentation
<http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__.
Installing on Apache Installing on Apache
-------------------- --------------------
@ -146,3 +151,7 @@ Assuming you install wallabag in the /var/www/wallabag folder, here's the recipe
} }
After reloading or restarting nginx, you should now be able to access wallabag at http://domain.tld. After reloading or restarting nginx, you should now be able to access wallabag at http://domain.tld.
.. note::
When you want to import large file into wallabag, you need to add this line in your nginx configuration ``client_max_body_size XM; # allows file uploads up to X megabytes``.

View File

@ -24,6 +24,28 @@ After creating an user account on your new wallabag v2 instance, you must head o
:alt: Import from wallabag v1 :alt: Import from wallabag v1
:align: center :align: center
Import via command-line interface (CLI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
If you have a CLI access on your web server, you can execute this command to import your wallabag v1 export:
::
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
Please replace values:
* ``1`` is the user identifier in database (The ID of the first user created on wallabag is 1)
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` is the path of your wallabag v1 export
You'll have this in return:
::
Start : 05-04-2016 11:36:07 ---
403 imported
0 already saved
End : 05-04-2016 11:36:09 ---
From wallabag 2.x From wallabag 2.x
----------------- -----------------

235
docs/fr/developer/api.rst Normal file

File diff suppressed because one or more lines are too long

View File

@ -25,6 +25,7 @@ La documentation principale de cette application est découpée en plusieurs sec
:caption: Documentation utilisateur :caption: Documentation utilisateur
user/installation user/installation
user/migration
user/create_account user/create_account
user/login user/login
user/configuration user/configuration
@ -42,6 +43,7 @@ La documentation principale de cette application est découpée en plusieurs sec
:maxdepth: 2 :maxdepth: 2
:caption: Documentation développeur :caption: Documentation développeur
developer/api
developer/docker developer/docker
developer/translate developer/translate
developer/maintenance developer/maintenance

View File

@ -48,7 +48,7 @@ Pour installer wallabag, vous devez exécuter ces deux commandes :
git clone https://github.com/wallabag/wallabag.git git clone https://github.com/wallabag/wallabag.git
cd wallabag cd wallabag
git checkout 2.0.0 git checkout 2.0.1
SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist SYMFONY_ENV=prod composer install --no-dev -o --prefer-dist
php bin/console wallabag:install --env=prod php bin/console wallabag:install --env=prod
@ -60,6 +60,11 @@ Pour démarrer le serveur interne à php et vérifier que tout s'est installé c
Et accéder wallabag à l'adresse http://lipdevotreserveur:8000 Et accéder wallabag à l'adresse http://lipdevotreserveur:8000
.. note::
Pour définir des paramètres via des variables d'environnement, vous pouvez les spécifier avec le préfixe ``SYMFONY__``. Par exemple, ``SYMFONY__DATABASE_DRIVER``. Vous pouvez lire `documentation Symfony
<http://symfony.com/doc/current/cookbook/configuration/external_parameters.html>`__ pour en savoir plus.
Installation avec Apache Installation avec Apache
------------------------ ------------------------
@ -144,3 +149,7 @@ En imaginant que vous vouliez installer wallabag dans le dossier /var/www/wallab
} }
Après que vous ayez rechargé/redémarré Nginx, vous devriez pouvoir avoir accès à wallabag à l'adresse http://domain.tld. Après que vous ayez rechargé/redémarré Nginx, vous devriez pouvoir avoir accès à wallabag à l'adresse http://domain.tld.
.. note::
Si vous voulez importer un fichier important dans wallabag, vous devez ajouter cette ligne dans votre configuration nginx ``client_max_body_size XM; # allows file uploads up to X megabytes``.

View File

@ -24,6 +24,28 @@ Une fois que vous avez créé un compte utilisateur sur votre nouvelle instance
:alt: Import depuis wallabag v1 :alt: Import depuis wallabag v1
:align: center :align: center
Import via via la ligne de commande (CLI)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Si vous avez accès à la ligne de commandes de votre serveur web, vous pouvez exécuter cette commande pour import votre fichier wallabag v1 :
::
bin/console wallabag:import-v1 1 ~/Downloads/wallabag-export-1-2016-04-05.json --env=prod
Remplacez les valeurs :
* ``1`` est l'identifiant de votre utilisateur en base (l'ID de votre premier utilisateur créé sur wallabag est 1)
* ``~/Downloads/wallabag-export-1-2016-04-05.json`` est le chemin de votre export wallabag v1
Vous obtiendrez :
::
Start : 05-04-2016 11:36:07 ---
403 imported
0 already saved
End : 05-04-2016 11:36:09 ---
Depuis wallabag 2.x Depuis wallabag 2.x
------------------- -------------------

View File

@ -1,55 +0,0 @@
# -*- coding: utf-8 -*-
#
# wallabag documentation build configuration file, created by
# sphinx-quickstart on Fri Oct 16 06:47:23 2015.
import sys
import os
extensions = []
templates_path = ['_templates']
source_suffix = '.rst'
master_doc = 'index'
project = u'wallabag-pt'
copyright = u'2013-2016, Nicolas Lœuillet - MIT Licence'
version = '2.0.0'
release = version
exclude_patterns = ['_build']
pygments_style = 'sphinx'
html_theme = 'default'
html_static_path = ['_static']
htmlhelp_basename = 'wallabagfrdoc'
latex_elements = {
}
latex_documents = [
('index', 'wallabag-pt.tex', u'wallabag Documentation',
u'Nicolas Lœuillet', 'manual'),
]
man_pages = [
('index', 'wallabagpt', u'wallabag Documentation',
[u'Nicolas Lœuillet'], 1)
]
texinfo_documents = [
('index', 'wallabag', u'wallabag Documentation',
u'Nicolas Lœuillet', 'wallabag', 'wallabag is an opensource read-it-later.',
'Miscellaneous'),
]
##### Guzzle sphinx theme
import guzzle_sphinx_theme
html_translator_class = 'guzzle_sphinx_theme.HTMLTranslator'
html_theme_path = guzzle_sphinx_theme.html_theme_path()
html_theme = 'guzzle_sphinx_theme'
# Custom sidebar templates, maps document names to template names.
html_sidebars = {
'**': ['logo-text.html', 'globaltoc.html', 'searchbox.html']
}
# Register the theme as an extension to generate a sitemap.xml
extensions.append("guzzle_sphinx_theme")

View File

@ -1,36 +0,0 @@
wallabag documentation
======================
.. image:: ../img/wallabag.png
:alt: wallabag logo
:align: center
**wallabag** É uma aplicação "leia mais tarde": Ele salva páginas da web mantendo apenas o conteúdo. Elementos como ícones de navegação ou propaganda são deletedos.
A documentação principal desta aplicação é organizada em duas seções:
* :ref:`doc-usuario`
* :ref:`doc-desenvolvedor`
.. _user-docs:
.. toctree::
:maxdepth: 2
:caption: Documentação do usuário
user/criar_conta
user/login
user/configuração
user/primeiro_artigo
user/importar
user/baixar_artigos
user/filtros
user/tags
.. _dev-docs:
.. toctree::
:maxdepth: 2
:caption: Documentação do desenvolvedor
developer/docker

View File

@ -1,2 +0,0 @@
Sphinx>=1.3.0,<1.4.0
guzzle_sphinx_theme>=0.7.0,<0.8.0

View File

@ -43,8 +43,8 @@ class WallabagRestController extends FOSRestController
{ {
$this->validateAuthentication(); $this->validateAuthentication();
$isArchived = (int) $request->query->get('archive'); $isArchived = (null === $request->query->get('archive')) ? null : (bool) $request->query->get('archive');
$isStarred = (int) $request->query->get('starred'); $isStarred = (null === $request->query->get('starred')) ? null : (bool) $request->query->get('starred');
$sort = $request->query->get('sort', 'created'); $sort = $request->query->get('sort', 'created');
$order = $request->query->get('order', 'desc'); $order = $request->query->get('order', 'desc');
$page = (int) $request->query->get('page', 1); $page = (int) $request->query->get('page', 1);
@ -52,7 +52,7 @@ class WallabagRestController extends FOSRestController
$pager = $this->getDoctrine() $pager = $this->getDoctrine()
->getRepository('WallabagCoreBundle:Entry') ->getRepository('WallabagCoreBundle:Entry')
->findEntries($this->getUser()->getId(), (bool) $isArchived, (bool) $isStarred, $sort, $order); ->findEntries($this->getUser()->getId(), $isArchived, $isStarred, $sort, $order);
$pager->setCurrentPage($page); $pager->setCurrentPage($page);
$pager->setMaxPerPage($perPage); $pager->setMaxPerPage($perPage);

View File

@ -60,6 +60,7 @@ class InstallCommand extends ContainerAwareCommand
->checkRequirements() ->checkRequirements()
->setupDatabase() ->setupDatabase()
->setupAdmin() ->setupAdmin()
->setupConfig()
->setupAsset() ->setupAsset()
; ;
@ -69,7 +70,7 @@ class InstallCommand extends ContainerAwareCommand
protected function checkRequirements() protected function checkRequirements()
{ {
$this->defaultOutput->writeln('<info><comment>Step 1 of 4.</comment> Checking system requirements.</info>'); $this->defaultOutput->writeln('<info><comment>Step 1 of 5.</comment> Checking system requirements.</info>');
$fulfilled = true; $fulfilled = true;
@ -119,7 +120,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupDatabase() protected function setupDatabase()
{ {
$this->defaultOutput->writeln('<info><comment>Step 2 of 4.</comment> Setting up database.</info>'); $this->defaultOutput->writeln('<info><comment>Step 2 of 5.</comment> Setting up database.</info>');
// user want to reset everything? Don't care about what is already here // user want to reset everything? Don't care about what is already here
if (true === $this->defaultInput->getOption('reset')) { if (true === $this->defaultInput->getOption('reset')) {
@ -190,7 +191,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupAdmin() protected function setupAdmin()
{ {
$this->defaultOutput->writeln('<info><comment>Step 3 of 4.</comment> Administration setup.</info>'); $this->defaultOutput->writeln('<info><comment>Step 3 of 5.</comment> Administration setup.</info>');
$questionHelper = $this->getHelperSet()->get('question'); $questionHelper = $this->getHelperSet()->get('question');
$question = new ConfirmationQuestion('Would you like to create a new admin user (recommended) ? (Y/n)', true); $question = new ConfirmationQuestion('Would you like to create a new admin user (recommended) ? (Y/n)', true);
@ -227,15 +228,20 @@ class InstallCommand extends ContainerAwareCommand
$em->persist($config); $em->persist($config);
$this->defaultOutput->writeln('');
return $this;
}
protected function setupConfig()
{
$this->defaultOutput->writeln('<info><comment>Step 4 of 5.</comment> Config setup.</info>');
$em = $this->getContainer()->get('doctrine.orm.entity_manager');
// cleanup before insert new stuff // cleanup before insert new stuff
$em->createQuery('DELETE FROM CraueConfigBundle:Setting')->execute(); $em->createQuery('DELETE FROM CraueConfigBundle:Setting')->execute();
$settings = [ $settings = [
[
'name' => 'download_pictures',
'value' => '1',
'section' => 'entry',
],
[ [
'name' => 'carrot', 'name' => 'carrot',
'value' => '1', 'value' => '1',
@ -370,7 +376,7 @@ class InstallCommand extends ContainerAwareCommand
protected function setupAsset() protected function setupAsset()
{ {
$this->defaultOutput->writeln('<info><comment>Step 4 of 4.</comment> Installing assets.</info>'); $this->defaultOutput->writeln('<info><comment>Step 5 of 5.</comment> Installing assets.</info>');
$this $this
->runCommand('assets:install') ->runCommand('assets:install')
@ -460,7 +466,13 @@ class InstallCommand extends ContainerAwareCommand
return false; return false;
} }
return in_array($databaseName, $schemaManager->listDatabases()); try {
return in_array($databaseName, $schemaManager->listDatabases());
} catch (\Doctrine\DBAL\Exception\ConnectionException $e) {
// it means we weren't able to get database list, assume the database doesn't exist
return false;
}
} }
/** /**

View File

@ -49,8 +49,7 @@ class EntryController extends Controller
$form->handleRequest($request); $form->handleRequest($request);
if ($form->isValid()) { if ($form->isValid()) {
// check for existing entry, if it exists, redirect to it with a message $existingEntry = $this->checkIfEntryAlreadyExists($entry);
$existingEntry = $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
if (false !== $existingEntry) { if (false !== $existingEntry) {
$this->get('session')->getFlashBag()->add( $this->get('session')->getFlashBag()->add(
@ -86,7 +85,10 @@ class EntryController extends Controller
{ {
$entry = new Entry($this->getUser()); $entry = new Entry($this->getUser());
$entry->setUrl($request->get('url')); $entry->setUrl($request->get('url'));
$this->updateEntry($entry);
if (false === $this->checkIfEntryAlreadyExists($entry)) {
$this->updateEntry($entry);
}
return $this->redirect($this->generateUrl('homepage')); return $this->redirect($this->generateUrl('homepage'));
} }
@ -420,4 +422,16 @@ class EntryController extends Controller
throw $this->createAccessDeniedException('You can not access this entry.'); throw $this->createAccessDeniedException('You can not access this entry.');
} }
} }
/**
* Check for existing entry, if it exists, redirect to it with a message.
*
* @param $entry
*
* @return array|bool
*/
private function checkIfEntryAlreadyExists($entry)
{
return $this->get('wallabag_core.entry_repository')->findByUrlAndUserId($entry->getUrl(), $this->getUser()->getId());
}
} }

View File

@ -15,11 +15,6 @@ class LoadSettingData extends AbstractFixture implements OrderedFixtureInterface
public function load(ObjectManager $manager) public function load(ObjectManager $manager)
{ {
$settings = [ $settings = [
[
'name' => 'download_pictures',
'value' => '1',
'section' => 'entry',
],
[ [
'name' => 'carrot', 'name' => 'carrot',
'value' => '1', 'value' => '1',

View File

@ -39,7 +39,22 @@ services:
wallabag_core.graby: wallabag_core.graby:
class: Graby\Graby class: Graby\Graby
arguments: arguments:
- { error_message: "wallabag can't retrieve contents for this article. Please report this issue to us." } -
error_message: "wallabag can't retrieve contents for this article. Please report this issue to us."
http_client:
user_agents:
'lifehacker.com': 'PHP/5.2'
'gawker.com': 'PHP/5.2'
'deadspin.com': 'PHP/5.2'
'kotaku.com': 'PHP/5.2'
'jezebel.com': 'PHP/5.2'
'io9.com': 'PHP/5.2'
'jalopnik.com': 'PHP/5.2'
'gizmodo.com': 'PHP/5.2'
'.wikipedia.org': 'Mozilla/5.2'
'.fok.nl': 'Googlebot/2.1'
'getpocket.com': 'PHP/5.2'
'iansommerville.com': 'PHP/5.2'
calls: calls:
- [ setLogger, [ "@logger" ] ] - [ setLogger, [ "@logger" ] ]
tags: tags:

View File

@ -78,19 +78,6 @@ $.fn.ready(function() {
event.preventDefault(); event.preventDefault();
}); });
/* ==========================================================================
Keyboard gestion
========================================================================== */
$(window).keydown(function(e){
if ( ( e.target.tagName.toLowerCase() !== 'input' && e.keyCode == 83 ) || (e.keyCode == 27 && $bagitForm.is(':visible') ) ) {
$bagit.removeClass("current");
$("#bagit-arrow").removeClass("arrow-down");
toggleSaveLinkForm();
return false;
}
});
/* ========================================================================== /* ==========================================================================
Process all links inside an article Process all links inside an article
========================================================================== */ ========================================================================== */

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
# unread: 'Unread entries' # unread: 'Unread entries'
# starred: 'Starred entries' # starred: 'Starred entries'
# archive: 'Archived entries' # archived: 'Archived entries'
# filtered: 'Filtered entries' # filtered: 'Filtered entries'
list: list:
# number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation' # documentation: 'Documentation'
# how_to_first_app: 'How to create my first application' # how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation' # full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients: # clients:
# title: 'Clients' # title: 'Clients'
# create_new: 'Create a new client' # create_new: 'Create a new client'

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
unread: 'Ungelesene Einträge' unread: 'Ungelesene Einträge'
starred: 'Favorisierte Einträge' starred: 'Favorisierte Einträge'
archive: 'Archivierte Einträge' archived: 'Archivierte Einträge'
filtered: 'Gefilterte Einträge' filtered: 'Gefilterte Einträge'
list: list:
number_on_the_page: '{0} Es gibt keine Einträge.|{1} Es gibt einen Eintrag.|]1,Inf[ Es gibt %count% Einträge.' number_on_the_page: '{0} Es gibt keine Einträge.|{1} Es gibt einen Eintrag.|]1,Inf[ Es gibt %count% Einträge.'
@ -338,6 +338,7 @@ developer:
documentation: 'Dokumentation' documentation: 'Dokumentation'
how_to_first_app: 'Wie erstelle ich meine erste Anwendung' how_to_first_app: 'Wie erstelle ich meine erste Anwendung'
full_documentation: 'Komplette API-Dokumentation einsehen' full_documentation: 'Komplette API-Dokumentation einsehen'
# list_methods: 'List API methods'
clients: clients:
title: 'Clients' title: 'Clients'
create_new: 'Neuen Client erstellen' create_new: 'Neuen Client erstellen'

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
unread: 'Unread entries' unread: 'Unread entries'
starred: 'Starred entries' starred: 'Starred entries'
archive: 'Archived entries' archived: 'Archived entries'
filtered: 'Filtered entries' filtered: 'Filtered entries'
list: list:
number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
@ -176,7 +176,7 @@ entry:
set_as_read: 'Mark as read' set_as_read: 'Mark as read'
set_as_unread: 'Mark as unread' set_as_unread: 'Mark as unread'
set_as_favorite: 'Favorite' set_as_favorite: 'Favorite'
view_original_article: 'Orignal article' view_original_article: 'Original article'
re_fetch_content: 'Re-fetch content' re_fetch_content: 'Re-fetch content'
delete: 'Delete' delete: 'Delete'
add_a_tag: 'Add a tag' add_a_tag: 'Add a tag'
@ -338,6 +338,7 @@ developer:
documentation: 'Documentation' documentation: 'Documentation'
how_to_first_app: 'How to create my first application' how_to_first_app: 'How to create my first application'
full_documentation: 'View full API documentation' full_documentation: 'View full API documentation'
list_methods: 'List API methods'
clients: clients:
title: 'Clients' title: 'Clients'
create_new: 'Create a new client' create_new: 'Create a new client'

View File

@ -19,9 +19,9 @@ menu:
unread: 'Sin leer' unread: 'Sin leer'
starred: 'Favoritos' starred: 'Favoritos'
archive: 'Archivo' archive: 'Archivo'
all_articles: 'Todos los artículos' all_articles: 'Todos artículos'
config: 'Configuración' config: 'Configuración'
tags: 'Tags' tags: 'Etiquetas'
internal_settings: 'Configuración interna' internal_settings: 'Configuración interna'
import: 'Importar' import: 'Importar'
howto: 'Ayuda' howto: 'Ayuda'
@ -62,18 +62,18 @@ config:
items_per_page_label: 'Número de artículos por página' items_per_page_label: 'Número de artículos por página'
language_label: 'Idioma' language_label: 'Idioma'
reading_speed: reading_speed:
# label: 'Reading speed' label: 'Velocidad de leer'
# help_message: 'You can use online tools to estimate your reading speed:' help_message: 'Se puede usar las técnicas para calcular su velocidad de leer:'
# 100_word: 'I read ~100 words per minute' 100_word: 'Leo ~100 palabras por minuto'
# 200_word: 'I read ~200 words per minute' 200_word: 'Leo ~200 palabras por minuto'
# 300_word: 'I read ~300 words per minute' 300_word: 'Leo ~300 palabras por minuto'
# 400_word: 'I read ~400 words per minute' 400_word: 'Leo ~400 palabras por minuto'
form_rss: form_rss:
description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero' description: 'Los feeds RSS de wallabag permiten leer los artículos guardados con su lector RSS favorito. Necesita generar un token primero'
token_label: 'RSS token' token_label: 'RSS token'
# no_token: 'No token' # no_token: 'No token'
token_create: 'Crear token' token_create: 'Crear token'
token_reset: 'Resetear token' token_reset: 'Reiniciar token'
rss_links: 'URL de su feed RSS' rss_links: 'URL de su feed RSS'
rss_link: rss_link:
unread: 'sin leer' unread: 'sin leer'
@ -90,17 +90,17 @@ config:
new_password_label: 'Nueva contraseña' new_password_label: 'Nueva contraseña'
repeat_new_password_label: 'Confirmar la nueva contraseña' repeat_new_password_label: 'Confirmar la nueva contraseña'
form_rules: form_rules:
# if_label: 'if' if_label: 'si'
# then_tag_as_label: 'then tag as' then_tag_as_label: 'Etiquete como'
# delete_rule_label: 'delete' delete_rule_label: 'Borre'
rule_label: 'Regla' rule_label: 'Regla'
tags_label: 'Tags' tags_label: 'Etiquetas'
faq: faq:
title: 'FAQ' title: 'FAQ'
tagging_rules_definition_title: '¿Qué significa reglas de etiquetado autómaticas?' tagging_rules_definition_title: '¿Qué significa reglas de etiquetado autómaticas?'
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.' tagging_rules_definition_description: 'Son las reglas usadas por Wallabag para etiquetar automáticamente los nuevos artículos.<br />Cada vez que un nuevo artículo sea añadido, todas las reglas de etiquetado automáticas serán usadas para etiquetarlo, ayudándole a clasificar automáticamente los artículos.'
how_to_use_them_title: '¿Cómo se utilizan?' how_to_use_them_title: '¿Cómo se utilizan?'
# 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> »' how_to_use_them_description: 'Supongamos que quiere etiquetar nuevos artículos como « <i>lectura corta</i> » cuando el tiempo de leer sea menos de 3 minutos. <br /> En este caso, debe poner 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> »'
variables_available_title: '¿Qué variables y operadores se pueden utilizar para escribir las reglas?' variables_available_title: '¿Qué variables y operadores se pueden utilizar para escribir las reglas?'
variables_available_description: 'Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:' variables_available_description: 'Las siguientes variables y operadores se pueden utilizar para crear las reglas de etiquetado automáticas:'
meaning: 'Significado' meaning: 'Significado'
@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
# unread: 'Unread entries' # unread: 'Unread entries'
# starred: 'Starred entries' # starred: 'Starred entries'
# archive: 'Archived entries' # archived: 'Archived entries'
# filtered: 'Filtered entries' # filtered: 'Filtered entries'
list: list:
number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.' number_on_the_page: '{0} No hay artículos.|{1} Hay un artículo.|]1,Inf[ Hay %count% artículos.'
@ -301,9 +301,9 @@ quickstart:
gitter: 'En Gitter' gitter: 'En Gitter'
tag: tag:
page_title: 'Tags' page_title: 'Etiquetas'
list: list:
number_on_the_page: '{0} No hay ningun tag.|{1} Hay un tag.|]1,Inf[ Hay %count% tags.' number_on_the_page: '{0} No hay ningun etiqueta.|{1} Hay un etiqueta.|]1,Inf[ Hay %count% etiquetas.'
import: import:
page_title: 'Importar' page_title: 'Importar'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation' # documentation: 'Documentation'
# how_to_first_app: 'How to create my first application' # how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation' # full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients: # clients:
# title: 'Clients' # title: 'Clients'
# create_new: 'Create a new client' # create_new: 'Create a new client'

View File

@ -1,18 +1,18 @@
security: security:
login: login:
# page_title: 'Welcome to wallabag!' page_title: 'به wallabag خوش آمدید!'
keep_logged_in: 'مرا به خاطر بسپار' keep_logged_in: 'مرا به خاطر بسپار'
forgot_password: ' رمزتان را گم کرده‌اید؟' forgot_password: ' رمزتان را گم کرده‌اید؟'
submit: 'ورود' submit: 'ورود'
# register: 'Register' register: 'نام‌نویسی'
username: 'نام کاربری' username: 'نام کاربری'
password: 'رمز' password: 'رمز'
# cancel: 'Cancel' cancel: 'لغو'
resetting: resetting:
description: "نشانی ایمیل خود را بنویسید تا راهنمای تغییر رمز را برایتان بفرستیم." description: "نشانی ایمیل خود را بنویسید تا راهنمای تغییر رمز را برایتان بفرستیم."
register: register:
# page_title: 'Create an account' page_title: 'حساب بسازید'
# go_to_account: 'Go to your account' go_to_account: 'حساب خود را ببینید'
menu: menu:
left: left:
@ -22,28 +22,28 @@ menu:
all_articles: 'همه' all_articles: 'همه'
config: 'پیکربندی' config: 'پیکربندی'
tags: 'برچسب‌ها' tags: 'برچسب‌ها'
# internal_settings: 'Internal Settings' internal_settings: 'تنظیمات درونی'
# import: 'Import' import: 'درون‌ریزی'
howto: 'خودآموز' howto: 'خودآموز'
# developer: 'Developer' developer: 'سازندگان'
logout: 'خروج' logout: 'خروج'
about: 'درباره' about: 'درباره'
search: 'جستجو' search: 'جستجو'
# save_link: 'Save a link' save_link: 'ذخیرهٔ یک پیوند'
back_to_unread: 'بازگشت به خوانده‌نشده‌ها' back_to_unread: 'بازگشت به خوانده‌نشده‌ها'
top: top:
add_new_entry: 'افزودن مقالهٔ تازه' add_new_entry: 'افزودن مقالهٔ تازه'
search: 'جستجو' search: 'جستجو'
filter_entries: 'فیلترکردن مقاله‌ها' filter_entries: 'فیلترکردن مقاله‌ها'
# export: 'Export' export: 'برون‌بری'
search_form: search_form:
input_label: 'جستجوی خود را این‌جا بنویسید:' input_label: 'جستجوی خود را این‌جا بنویسید:'
footer: footer:
wallabag: wallabag:
# elsewhere: 'Take wallabag with you' elsewhere: 'wallabag همراه شما'
# social: 'Social' social: 'شبکه‌های اجتماعی'
# powered_by: 'powered by' powered_by: 'توانمند با'
about: 'درباره' about: 'درباره'
config: config:
@ -53,7 +53,7 @@ config:
rss: 'آر-اس-اس' rss: 'آر-اس-اس'
user_info: 'اطلاعات کاربر' user_info: 'اطلاعات کاربر'
password: 'رمز' password: 'رمز'
# rules: 'Tagging rules' rules: 'برچسب‌گذاری خودکار'
new_user: 'افزودن کاربر' new_user: 'افزودن کاربر'
form: form:
save: 'ذخیره' save: 'ذخیره'
@ -62,12 +62,12 @@ config:
items_per_page_label: 'تعداد مقاله در هر صفحه' items_per_page_label: 'تعداد مقاله در هر صفحه'
language_label: 'زبان' language_label: 'زبان'
reading_speed: reading_speed:
# label: 'Reading speed' label: 'سرعت خواندن'
# help_message: 'You can use online tools to estimate your reading speed:' help_message: 'سرعت خواندن‌تان را با ابزارهای آنلاین تخمین بزنید:'
# 100_word: 'I read ~100 words per minute' 100_word: 'من تقریباً ۱۰۰ واژه را در دقیقه می‌خوانم'
# 200_word: 'I read ~200 words per minute' 200_word: 'من تقریباً ۲۰۰ واژه را در دقیقه می‌خوانم'
# 300_word: 'I read ~300 words per minute' 300_word: 'من تقریباً ۳۰۰ واژه را در دقیقه می‌خوانم'
# 400_word: 'I read ~400 words per minute' 400_word: 'من تقریباً ۴۰۰ واژه را در دقیقه می‌خوانم'
form_rss: form_rss:
description: 'با خوراک آر-اس-اس که wallabag در اختیارتان می‌گذارد، می‌توانید مقاله‌های ذخیره‌شده را در نرم‌افزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.' description: 'با خوراک آر-اس-اس که wallabag در اختیارتان می‌گذارد، می‌توانید مقاله‌های ذخیره‌شده را در نرم‌افزار آر-اس-اس دلخواه خود بخوانید. برای این کار نخست باید یک کد بسازید.'
token_label: 'کد آر-اس-اس' token_label: 'کد آر-اس-اس'
@ -81,23 +81,23 @@ config:
archive: 'بایگانی' archive: 'بایگانی'
rss_limit: 'محدودیت آر-اس-اس' rss_limit: 'محدودیت آر-اس-اس'
form_user: form_user:
# two_factor_description: "Enabling two factor authentication means you'll receive an email with a code on every new untrusted connexion" two_factor_description: "با فعال‌کردن تأیید ۲مرحله‌ای هر بار که اتصال تأییدنشده‌ای برقرار شد، به شما یک کد از راه ایمیل فرستاده می‌شود"
name_label: 'نام' name_label: 'نام'
email_label: 'نشانی ایمیل' email_label: 'نشانی ایمیل'
# twoFactorAuthentication_label: 'Two factor authentication' twoFactorAuthentication_label: 'تأیید ۲مرحله‌ای'
form_password: form_password:
old_password_label: 'رمز قدیمی' old_password_label: 'رمز قدیمی'
new_password_label: 'رمز تازه' new_password_label: 'رمز تازه'
repeat_new_password_label: 'رمز تازه را دوباره بنویسید' repeat_new_password_label: 'رمز تازه را دوباره بنویسید'
form_rules: form_rules:
# if_label: 'if' if_label: 'اگر'
# then_tag_as_label: 'then tag as' then_tag_as_label: 'این برچسب را بزن'
# delete_rule_label: 'delete' delete_rule_label: 'پاک کن'
# rule_label: 'Rule' rule_label: 'قانون'
# tags_label: 'Tags' tags_label: 'برچسب‌ها'
# faq: faq:
# title: 'FAQ' title: 'پرسش‌های متداول'
# tagging_rules_definition_title: 'What does « tagging rules » mean?' tagging_rules_definition_title: 'برچسب‌گذاری خودکار یعنی چه؟'
# 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.' # 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.'
# how_to_use_them_title: 'How do I use them?' # how_to_use_them_title: 'How do I use them?'
# 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> »' # 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> »'
@ -135,12 +135,12 @@ config:
entry: entry:
page_titles: page_titles:
# unread: 'Unread entries' unread: 'مقاله‌های خوانده‌نشده'
# starred: 'Starred entries' starred: 'مقاله‌های برگزیده'
# archive: 'Archived entries' archived: 'مقاله‌های بایگانی‌شده'
# filtered: 'Filtered entries' filtered: 'مقاله‌های فیلترشده'
list: list:
# number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' number_on_the_page: '{0} هیج مقاله‌ای نیست.|{1} یک مقاله هست.|]1,Inf[ %count% مقاله هست.'
reading_time: 'زمان تخمینی برای خواندن' reading_time: 'زمان تخمینی برای خواندن'
reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min' reading_time_minutes: 'زمان تخمینی برای خواندن: %readingTime% min'
reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur">&lt;</small> 1 min' reading_time_less_one_minute: 'زمان تخمینی برای خواندن: <small class="inferieur">&lt;</small> 1 min'
@ -148,7 +148,7 @@ entry:
toogle_as_read: 'خوانده‌شده/خوانده‌نشده' toogle_as_read: 'خوانده‌شده/خوانده‌نشده'
toogle_as_star: 'برگزیده/نابرگزیده' toogle_as_star: 'برگزیده/نابرگزیده'
delete: 'پاک کردن' delete: 'پاک کردن'
# export_title: 'Export' export_title: 'برون‌بری'
filters: filters:
title: 'فیلتر' title: 'فیلتر'
status_label: 'وضعیت' status_label: 'وضعیت'
@ -171,35 +171,35 @@ entry:
filter: 'فیلتر' filter: 'فیلتر'
view: view:
left_menu: left_menu:
# back_to_top: 'Back to top' back_to_top: 'بازگشت به بالای صفحه'
back_to_homepage: 'بازگشت' back_to_homepage: 'بازگشت'
set_as_read: 'خوانده‌شده' set_as_read: 'خوانده‌شده'
# set_as_unread: 'Mark as unread' set_as_unread: 'به عنوان خوانده‌نشده علامت بزن'
set_as_favorite: 'برگزیده' set_as_favorite: 'برگزیده'
view_original_article: 'مقالهٔ اصلی' view_original_article: 'مقالهٔ اصلی'
# re_fetch_content: 'Re-fetch content' re_fetch_content: 'مقاله‌ها را دوباره دریافت کن'
delete: 'پاک کردن' delete: 'پاک کردن'
add_a_tag: 'افزودن برچسب' add_a_tag: 'افزودن برچسب'
share_content: 'هم‌رسانی' share_content: 'هم‌رسانی'
share_email_label: 'نشانی ایمیل' share_email_label: 'نشانی ایمیل'
download: 'بارگیری' download: 'بارگیری'
# print: 'Print' print: 'چاپ'
problem: problem:
label: 'مشکلات؟' label: 'مشکلات؟'
description: 'آیا مقاله نادرست نشان داده شده؟' description: 'آیا مقاله نادرست نشان داده شده؟'
edit_title: 'ویرایش عنوان' edit_title: 'ویرایش عنوان'
original_article: 'original' original_article: 'اصلی'
# annotations_on_the_entry: '{0} No annotations|{1} One annotation|]1,Inf[ %nbAnnotations% annotations' annotations_on_the_entry: '{0} بدون حاشیه|{1} یک حاشیه|]1,Inf[ %nbحاشیه% annotations'
new: new:
page_title: 'ذخیرهٔ مقالهٔ تازه' page_title: 'ذخیرهٔ مقالهٔ تازه'
placeholder: 'http://website.com' placeholder: 'http://website.com'
form_new: form_new:
# url_label: Url url_label: نشانی
edit: edit:
# page_title: 'Edit an entry' page_title: 'ویرایش مقاله'
# title_label: 'Title' title_label: 'عنوان'
# url_label: 'Url' url_label: 'نشانی'
# is_public_label: 'Public' is_public_label: 'عمومی'
save_label: 'ذخیره' save_label: 'ذخیره'
about: about:
@ -208,8 +208,8 @@ about:
who_behind_wallabag: 'سازندگان wallabag' who_behind_wallabag: 'سازندگان wallabag'
getting_help: 'گرفتن کمک' getting_help: 'گرفتن کمک'
helping: 'کمک‌کردن به wallabag' helping: 'کمک‌کردن به wallabag'
# contributors: 'Contributors' contributors: 'مشارکت‌کنندگان'
# third_party: 'Third-party libraries' third_party: 'کتابخانه‌های نرم‌افزاری'
who_behind_wallabag: who_behind_wallabag:
developped_by: 'ساختهٔ' developped_by: 'ساختهٔ'
website: 'وب‌گاه' website: 'وب‌گاه'
@ -227,15 +227,15 @@ about:
by_contributing_2: 'فهرست نیازمندی‌های ما در این صفحه است:' by_contributing_2: 'فهرست نیازمندی‌های ما در این صفحه است:'
by_paypal: 'از راه Paypal' by_paypal: 'از راه Paypal'
contributors: contributors:
# description: 'Thank you to contributors on wallabag web application' description: 'از مشارکت شما در برنامهٔ وب wallabag ممنونیم.'
third_party: third_party:
# description: 'Here are the list of third-party libraries used in wallabag (with their licenses):' description: 'فهرست کتابخانه‌های نرم‌افزاری که در wallabag به کار رفته‌اند (به همراه پروانهٔ آن‌ها) :'
# package: 'Package' package: 'بسته'
license: 'پروانه' license: 'پروانه'
howto: howto:
page_title: 'خودآموز' page_title: 'خودآموز'
# page_description: 'There are several ways to save an article:' page_description: 'راه‌های زیادی برای ذخیرهٔ مقاله‌ها هست:'
top_menu: top_menu:
browser_addons: 'افزونه برای مرورگرها' browser_addons: 'افزونه برای مرورگرها'
mobile_apps: 'برنامه‌های موبایل' mobile_apps: 'برنامه‌های موبایل'
@ -255,82 +255,82 @@ howto:
description: 'این پیوند را به نوار بوک‌مارک مرورگرتان بکشید:' description: 'این پیوند را به نوار بوک‌مارک مرورگرتان بکشید:'
quickstart: quickstart:
# page_title: 'Quickstart' page_title: 'Quickstart'
# intro: intro:
# title: 'Welcome to wallabag!' title: 'به wallabag خوش آمدید!!'
# paragraph_1: "We'll accompany you to visit wallabag and show you some features which can interest you." paragraph_1: "به شما کمک خواهیم کرد تا wallabag را بشناسید و با برخی از ویژگی‌های جالبش آشنا شوید"
# paragraph_2: 'Follow us!' paragraph_2: 'ادامه دهید!'
# configure: configure:
# title: 'Configure the application' title: 'برنامه را تنظیم کنید'
# language: 'Change language and design' language: 'زبان و نمای برنامه را تغییر دهید'
# rss: 'Enable RSS feeds' rss: 'خوراک آر-اس-اس را فعال کنید'
# tagging_rules: 'Write rules to automatically tag your articles' tagging_rules: 'قانون‌های برچسب‌گذاری خودکار مقاله‌هایتان را تعریف کنید'
# admin: admin:
# title: 'Administration' title: 'مدیریت'
# description: 'As an administrator, you have privileges on wallabag. You can:' description: 'به عنوان مدیر، شما دسترسی‌های بیشتری به wallabag دارید. شما می‌توانید:'
# new_user: 'Create a new user' new_user: 'کاربر تازه‌ای بسازید'
# analytics: 'Configure analytics' analytics: 'تحلیل‌های آماری را تنظیم کنید'
# sharing: 'Enable some parameters about article sharing' sharing: 'گزینه‌های مربوط به هم‌رسانی مقاله‌ها را فعال کنید'
# export: 'Configure export' export: 'برون‌سپاری را تنظیم کنید'
# import: 'Configure import' import: 'درون‌ریزی را تنظیم کنید'
# first_steps: first_steps:
# title: 'First steps' title: 'گام نخست'
# new_article: 'Save your first article' new_article: 'نخستین مقالهٔ خود را ذخیره کنید'
# unread_articles: 'And classify it!' unread_articles: 'و آن را طبقه‌بندی کنید!'
# migrate: migrate:
# title: 'Migrate from an existing service' title: 'از سرویس قبلی خود به این‌جا مهاجرت کنید'
# description: "Are you using another service? We'll help you to retrieve your data on wallabag." description: "آیا سرویس دیگری را به‌کار می‌برید؟ داده‌هایتان را به wallabag بیاورید.."
# pocket: 'Migrate from Pocket' pocket: 'مهاجرت از Pocket'
# wallabag_v1: 'Migrate from wallabag v1' wallabag_v1: 'مهاجرت از نسخهٔ یکم wallabag'
# wallabag_v2: 'Migrate from wallabag v2' wallabag_v2: 'مهاجرت از نسخهٔ دوم wallabag'
# developer: developer:
# title: 'Developers' title: 'برنامه‌نویسان'
# create_application: 'Create your third application' create_application: 'برنامهٔ wallabag خود را بسازید'
# docs: docs:
# title: 'Full documentation' title: 'راهنمای کامل'
# annotate: 'Annotate your article' annotate: 'روی مقاله‌هایتان یادداشت بگذارید'
# export: 'Convert your articles into ePUB or PDF' export: 'مقاله‌هایتان را به قالب ePUB یا PDF دربیاورید'
# search_filters: 'See how you can look for an article by using search engine and filters' search_filters: 'به کمک موتور جستجو و فیلترها به دنبال مقاله‌هایتان بگردید'
# fetching_errors: 'What can I do if an article encounters errors during fetching?' fetching_errors: 'اگر مقاله‌ای هنگام ذخیره‌ شدن به مشکل برخورد چه کار کنید؟'
# all_docs: 'And so many other articles!' all_docs: 'و بسیاری از موضوعات دیگر'
# support: support:
# title: 'Support' title: 'پشتیبانی'
# description: 'If you need some help, we are here for you.' description: 'به کمک نیاز دارید؟ ما پشتیبان شما هستیم!'
# github: 'On GitHub' github: 'روی گیت‌هاب'
# email: 'By email' email: 'با ایمیل'
# gitter: 'On Gitter' gitter: 'روی گیتر'
tag: tag:
page_title: 'برچسب‌ها' page_title: 'برچسب‌ها'
list: list:
# number_on_the_page: '{0} There is no tag.|{1} There is one tag.|]1,Inf[ There are %count% tags.' number_on_the_page: '{0} هیچ برچسبی نیست.|{1} یک برچسب هست.|]1,Inf[ %count% برچسب هست.'
import: import:
# page_title: 'Import' page_title: 'درون‌ریزی'
# page_description: 'Welcome to wallabag importer. Please select your previous service that you want to migrate.' page_description: 'به درون‌ریز wallabag خوش آمدید. لطفاً سرویس قبلی خود را که می‌خواهید از آن مهاجرت کنید انتخاب کنید.'
# action: action:
# import_contents: 'Import contents' import_contents: 'درون‌ریزی مقاله‌ها'
# form: form:
# mark_as_read_title: 'Mark all as read?' mark_as_read_title: 'علامت‌زدن همه به عنوان خوانده‌شده؟'
# mark_as_read_label: 'Mark all imported entries as read' mark_as_read_label: 'همهٔ مقاله‌های درون‌ریزی شده را به عنوان خوانده‌شده علامت بزن'
# file_label: 'File' file_label: 'پرونده'
# save_label: 'Upload file' save_label: 'بارگذاری پرونده'
# pocket: pocket:
# page_title: 'Import > Pocket' page_title: 'درون‌ریزی > Pocket'
# 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." description: "این برنامه همهٔ داده‌های Pocket شما را درون‌ریزی می‌کند. سرویس Pocket اجازه نمی‌دهد که متن مقاله‌ها را درون‌ریزی کنیم، بنابراین wallabag متن مقاله‌ها را دوباره از اینترنت دریافت می‌کند."
# config_missing: config_missing:
# description: "Pocket import isn't configured." description: "درون‌ریزی از Pocket تنظیم نشده است."
# admin_message: 'You need to define %keyurls%a pocket_consumer_key%keyurle%.' admin_message: 'شما باید %keyurls%یک pocket_consumer_key%keyurle% تعریف کنید.'
# user_message: 'Your server admin needs to define an API Key for Pocket.' user_message: 'مدیر سرور شما باید یک API Key برای Pocket تعریف کند.'
# 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.' authorize_message: 'شما می‌توانید داده‌هایتان را از حساب Pocket خود درون‌ریزی کنید. روی دکمهٔ زیر کلیک کنید و به برنامه اجازه دهید تا به getpocket.com وصل شود.'
# connect_to_pocket: 'Connect to Pocket and import data' connect_to_pocket: 'به Pocket وصل شو و داده‌ها را دریافت کن'
# wallabag_v1: wallabag_v1:
# page_title: 'Import > Wallabag v1' page_title: 'درون‌ریزی > Wallabag v1'
# 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.' description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۱ wallabag درون‌ریزی می‌کند. در صفحهٔ تنظیمات، روی "JSON export" در بخش "Export your wallabag data" کلیک کنید. با این کار شما پرونده‌ای به شکل "wallabag-export-1-xxxx-xx-xx.json" دریافت خواهید کرد.'
# how_to: 'Please select your wallabag export and click on the below button to upload and import it.' how_to: 'لطفاً پرونده را انتخاب کنید و روی دکمهٔ زیر کلیک کنید تا بارگذاری و درون‌ریزی شود.'
# wallabag_v2: wallabag_v2:
# page_title: 'Import > Wallabag v2' page_title: 'درون‌ریزی > Wallabag v2'
# 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.' description: 'این برنامه همهٔ داده‌های شما را در نسخهٔ ۲ wallabag درون‌ریزی می‌کند. به بخش «همهٔ مقاله‌ها» بروید و در بخش «برون‌ریزی» روی "JSON" کلیک کنید. با این کار شما پرونده‌ای به شکل "All articles.json" دریافت خواهید کرد.'
developer: developer:
# page_title: 'Developer' # page_title: 'Developer'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation' # documentation: 'Documentation'
# how_to_first_app: 'How to create my first application' # how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation' # full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients: # clients:
# title: 'Clients' # title: 'Clients'
# create_new: 'Create a new client' # create_new: 'Create a new client'
@ -382,42 +383,42 @@ developer:
validator: validator:
password_must_match: 'رمزها باید یکی باشند' password_must_match: 'رمزها باید یکی باشند'
password_too_short: 'رمز شما باید ۸ حرف یا بیشتر باشد' password_too_short: 'رمز شما باید ۸ حرف یا بیشتر باشد'
# password_wrong_value: 'Wrong value for your current password' password_wrong_value: 'رمز فعلی را اشتباه وارد کرده‌اید'
# item_per_page_too_high: 'This will certainly kill the app' item_per_page_too_high: 'با این تعداد برنامه به فنا می‌رود'
# rss_limit_too_hight: 'This will certainly kill the app' rss_limit_too_hight: 'با این تعداد برنامه به فنا می‌رود'
flashes: flashes:
config: config:
notice: notice:
config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.' config_saved: 'پیکربندی ذخیره شد. برخی از تنظیمات پس از این که قطع شدید اعمال می‌شود.'
password_updated: 'رمز به‌روز شد' password_updated: 'رمز به‌روز شد'
# password_not_updated_demo: "In demonstration mode, you can't change password for this user." password_not_updated_demo: "در حالت نمایشی نمی‌توانید رمز کاربر را عوض کنید."
user_updated: 'اطلاعات به‌روز شد' user_updated: 'اطلاعات به‌روز شد'
rss_updated: 'اطلاعات آر-اس-اس به‌روز شد' rss_updated: 'اطلاعات آر-اس-اس به‌روز شد'
# tagging_rules_updated: 'Tagging rules updated' tagging_rules_updated: 'برچسب‌گذاری خودکار به‌روز شد'
# tagging_rules_deleted: 'Tagging rule deleted' tagging_rules_deleted: 'قانون برچسب‌گذاری پاک شد'
# user_added: 'User "%username%" added' user_added: 'کابر "%username%" افزوده شد'
# rss_token_updated: 'RSS token updated' rss_token_updated: 'کد آر-اس-اس به‌روز شد'
entry: entry:
notice: notice:
# entry_already_saved: 'Entry already saved on %date%' entry_already_saved: 'این مقاله در تاریخ %date% ذخیره شده بود'
# entry_saved: 'Entry saved' entry_saved: 'مقاله ذخیره شد'
# entry_updated: 'Entry updated' entry_updated: 'مقاله به‌روز شد'
# entry_reloaded: 'Entry reloaded' entry_reloaded: 'مقاله به‌روز شد'
# entry_reload_failed: 'Failed to reload entry' entry_reload_failed: 'به‌روزرسانی مقاله شکست خورد'
entry_archived: 'مقاله بایگانی شد' entry_archived: 'مقاله بایگانی شد'
entry_unarchived: 'مقاله از بایگانی درآمد' entry_unarchived: 'مقاله از بایگانی درآمد'
entry_starred: 'مقاله برگزیده شد' entry_starred: 'مقاله برگزیده شد'
entry_unstarred: 'مقاله نابرگزیده شد' entry_unstarred: 'مقاله نابرگزیده شد'
entry_deleted: 'مقاله پاک شد' entry_deleted: 'مقاله پاک شد'
tag: tag:
notice: notice:
# tag_added: 'Tag added' tag_added: 'برچسب افزوده شد'
import: import:
notice: notice:
# failed: 'Import failed, please try again.' failed: 'درون‌ریزی شکست خورد. لطفاً دوباره تلاش کنید.'
# failed_on_file: 'Error while processing import. Please verify your import file.' failed_on_file: 'خطا هنگام پردازش پروندهٔ ورودی. آیا پروندهٔ درون‌ریزی شده سالم است؟'
# summary: 'Import summary: %imported% imported, %skipped% already saved.' summary: 'گزارش درون‌ریزی: %imported% وارد شد, %skipped% از قبل ذخیره شده بود.'
developer: developer:
notice: notice:
# client_created: 'New client created.' # client_created: 'New client created.'

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
unread: 'Articles non lus' unread: 'Articles non lus'
starred: 'Articles favoris' starred: 'Articles favoris'
archive: 'Articles lus' archived: 'Articles lus'
filtered: 'Articles filtrés' filtered: 'Articles filtrés'
list: list:
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." 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."
@ -338,6 +338,7 @@ developer:
documentation: 'Documentation' documentation: 'Documentation'
how_to_first_app: 'Comment créer votre première application' how_to_first_app: 'Comment créer votre première application'
full_documentation: "Voir la documentation complète de l'API" full_documentation: "Voir la documentation complète de l'API"
list_methods: "Lister toutes les méthodes de l'API"
clients: clients:
title: 'Clients' title: 'Clients'
create_new: 'Créer une nouveau client' create_new: 'Créer une nouveau client'

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
unread: 'Articles pas legits' unread: 'Articles pas legits'
starred: 'Articles favorits' starred: 'Articles favorits'
archive: 'Articles legits' archived: 'Articles legits'
filtered: 'Articles filtrats' filtered: 'Articles filtrats'
list: list:
number_on_the_page: "{0} I a pas cap d'article.|{1} I a un article.|]1,Inf[ I a %count% articles." number_on_the_page: "{0} I a pas cap d'article.|{1} I a un article.|]1,Inf[ I a %count% articles."
@ -338,6 +338,7 @@ developer:
documentation: 'Documentacion' documentation: 'Documentacion'
how_to_first_app: 'Cossí crear vòstra primièra aplicacion' how_to_first_app: 'Cossí crear vòstra primièra aplicacion'
full_documentation: "Veire la documentacion completa de l'API" full_documentation: "Veire la documentacion completa de l'API"
# list_methods: 'List API methods'
clients: clients:
title: 'Clients' title: 'Clients'
create_new: 'Crear un novèl client' create_new: 'Crear un novèl client'

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
unread: 'Nieprzeczytane wpisy' unread: 'Nieprzeczytane wpisy'
starred: 'Wpisy oznaczone gwiazdką' starred: 'Wpisy oznaczone gwiazdką'
archive: 'Zarchiwizowane wpisy' archived: 'Zarchiwizowane wpisy'
filtered: 'Odfiltrowane wpisy' filtered: 'Odfiltrowane wpisy'
list: list:
number_on_the_page: '{0} Nie ma wpisów.|{1} Jest jeden wpis.|]1,Inf[ Są %count% wpisy.' number_on_the_page: '{0} Nie ma wpisów.|{1} Jest jeden wpis.|]1,Inf[ Są %count% wpisy.'
@ -338,6 +338,7 @@ developer:
documentation: 'Dokumentacja' documentation: 'Dokumentacja'
how_to_first_app: 'Jak stworzyć moją pierwszą aplikację' how_to_first_app: 'Jak stworzyć moją pierwszą aplikację'
full_documentation: 'Pokaż pełne API' full_documentation: 'Pokaż pełne API'
# list_methods: 'List API methods'
clients: clients:
title: 'Klienci' title: 'Klienci'
create_new: 'Utwórz nowego klienta' create_new: 'Utwórz nowego klienta'

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
# unread: 'Unread entries' # unread: 'Unread entries'
# starred: 'Starred entries' # starred: 'Starred entries'
# archive: 'Archived entries' # archived: 'Archived entries'
# filtered: 'Filtered entries' # filtered: 'Filtered entries'
list: list:
# number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.' # number_on_the_page: '{0} There is no entry.|{1} There is one entry.|]1,Inf[ There are %count% entries.'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation' # documentation: 'Documentation'
# how_to_first_app: 'How to create my first application' # how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation' # full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients: # clients:
# title: 'Clients' # title: 'Clients'
# create_new: 'Create a new client' # create_new: 'Create a new client'

View File

@ -137,7 +137,7 @@ entry:
page_titles: page_titles:
# unread: 'Unread entries' # unread: 'Unread entries'
# starred: 'Starred entries' # starred: 'Starred entries'
# archive: 'Archived entries' # archived: 'Archived entries'
# filtered: 'Filtered entries' # filtered: 'Filtered entries'
list: list:
number_on_the_page: '{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var.' number_on_the_page: '{0} Herhangi bir makale yok.|{1} Burada bir adet makale var.|]1,Inf[ Burada %count% adet makale var.'
@ -338,6 +338,7 @@ developer:
# documentation: 'Documentation' # documentation: 'Documentation'
# how_to_first_app: 'How to create my first application' # how_to_first_app: 'How to create my first application'
# full_documentation: 'View full API documentation' # full_documentation: 'View full API documentation'
# list_methods: 'List API methods'
# clients: # clients:
# title: 'Clients' # title: 'Clients'
# create_new: 'Create a new client' # create_new: 'Create a new client'

View File

@ -49,7 +49,7 @@
<h2>{{ 'config.tab_menu.rss'|trans }}</h2> <h2>{{ 'config.tab_menu.rss'|trans }}</h2>
{{ form_start(form.rss) }} {{ form_start(form.rss) }}
{{ form_errors(form.rss) }} {{ form_errors(form.rss) }}
<div class="row"> <div class="row">
@ -169,7 +169,7 @@
{{ form_rest(form.pwd) }} {{ form_rest(form.pwd) }}
</form> </form>
<h2>{{ 'config.tab_menu.rules'|trans }}}</h2> <h2>{{ 'config.tab_menu.rules'|trans }}</h2>
<ul> <ul>
{% for tagging_rule in app.user.config.taggingRules %} {% for tagging_rule in app.user.config.taggingRules %}
@ -183,7 +183,7 @@
{% endfor %} {% endfor %}
</ul> </ul>
{{ form_start(form.new_tagging_rule) }} {{ form_start(form.new_tagging_rule) }}
{{ form_errors(form.new_tagging_rule) }} {{ form_errors(form.new_tagging_rule) }}
<fieldset class="w500p inline"> <fieldset class="w500p inline">
@ -205,6 +205,91 @@
{{ form_rest(form.new_tagging_rule) }} {{ form_rest(form.new_tagging_rule) }}
</form> </form>
<div class="row">
<div class="input-field col s12">
<h3>{{ 'config.form_rules.faq.title'|trans }}</h3>
<h4>{{ 'config.form_rules.faq.tagging_rules_definition_title'|trans }}</h4>
<p class="help">{{ 'config.form_rules.faq.tagging_rules_definition_description'|trans|raw }}</p>
<h4>{{ 'config.form_rules.faq.how_to_use_them_title'|trans }}</h4>
<p class="help">{{ 'config.form_rules.faq.how_to_use_them_description'|trans|raw }}</p>
<h4>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h4>
<p class="help">
{{ 'config.form_rules.faq.variables_available_description'|trans }}
</p>
<table class="bordered">
<thead>
<tr>
<th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
<th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
<td>&lt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
<td>&lt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
</tr>
<tr>
<td>isArchived</td>
<td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
<td>&gt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
</tr>
<tr>
<td>isStarred</td>
<td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
<td>&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
</tr>
<tr>
<td>content</td>
<td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
<td>=</td>
<td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
</tr>
<tr>
<td>language</td>
<td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
<td>!=</td>
<td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
</tr>
<tr>
<td>mimetype</td>
<td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
<td>OR</td>
<td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
</tr>
<tr>
<td>readingTime</td>
<td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
<td>AND</td>
<td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
</tr>
<tr>
<td>domainName</td>
<td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
<td>matches</td>
<td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
</tr>
</tbody>
</table>
</div>
</div>
{% if is_granted('ROLE_SUPER_ADMIN') %} {% if is_granted('ROLE_SUPER_ADMIN') %}
<h2>{{ 'config.tab_menu.new_user'|trans }}</h2> <h2>{{ 'config.tab_menu.new_user'|trans }}</h2>

View File

@ -14,7 +14,8 @@
<ul> <ul>
<li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li> <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.full_documentation'|trans }}</a></li> <li><a href="http://doc.wallabag.org/en/v2/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
</ul> </ul>
<h4>{{ 'developer.clients.title'|trans }}</h4> <h4>{{ 'developer.clients.title'|trans }}</h4>

View File

@ -23,19 +23,17 @@
{% for entry in entries %} {% for entry in entries %}
<div id="entry-{{ entry.id|e }}" class="entry"> <div id="entry-{{ entry.id|e }}" class="entry">
<h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2> <h2><a href="{{ path('view', { 'id': entry.id }) }}">{{ entry.title|raw }}</a></h2>
{% if entry.readingTime > 0 %}
<div class="estimatedTime"> {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
<div class="estimatedTime">
<span class="tool reading-time"> <span class="tool reading-time">
{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': entry.readingTime}) }} {% if readingTime > 0 %}
</span> {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}
</div>
{% else %} {% else %}
<div class="estimatedTime"> {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
<span class="tool reading-time">
{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
</span>
</div>
{% endif %} {% endif %}
</span>
</div>
<ul class="tools links"> <ul class="tools links">
<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> <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>

View File

@ -22,7 +22,7 @@
{% 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 %} {% 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 %}
{% 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 %} {% 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 %}
{% 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 %} {% 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 %}
{% 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 %} {% 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.print'|trans }}</span></a></li>{% endif %}
{% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %} {% if craue_setting('export_epub') %}<li><a href="?epub&amp;method=id&amp;value={{ entry.id }}" title="Generate ePub file">EPUB</a></li>{% endif %}
{% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %} {% if craue_setting('export_mobi') %}<li><a href="?mobi&amp;method=id&amp;value={{ entry.id }}" title="Generate Mobi file">MOBI</a></li>{% endif %}
{% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %} {% if craue_setting('export_pdf') %}<li><a href="?pdf&amp;method=id&amp;value={{ entry.id }}" title="Generate PDF file">PDF</a></li>{% endif %}

View File

@ -250,75 +250,75 @@
<h5>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h5> <h5>{{ 'config.form_rules.faq.variables_available_title'|trans }}</h5>
<p class="help"> <p class="help">
{{ 'config.form_rules.faq.variables_available_description'|trans }} {{ 'config.form_rules.faq.variables_available_description'|trans }}
<table class="bordered">
<thead>
<tr>
<th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
<th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
<td>&lt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
<td>&lt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
</tr>
<tr>
<td>isArchived</td>
<td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
<td>=&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
</tr>
<tr>
<td>isStarred</td>
<td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
<td>&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
</tr>
<tr>
<td>content</td>
<td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
<td>=</td>
<td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
</tr>
<tr>
<td>language</td>
<td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
<td>!=</td>
<td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
</tr>
<tr>
<td>mimetype</td>
<td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
<td>OR</td>
<td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
</tr>
<tr>
<td>readingTime</td>
<td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
<td>AND</td>
<td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
</tr>
<tr>
<td>domainName</td>
<td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
<td>matches</td>
<td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
</tr>
</tbody>
</table>
</p> </p>
<table class="bordered">
<thead>
<tr>
<th>{{ 'config.form_rules.faq.variable_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
<th>{{ 'config.form_rules.faq.operator_description.label'|trans }}</th>
<th>{{ 'config.form_rules.faq.meaning'|trans }}</th>
</tr>
</thead>
<tbody>
<tr>
<td>title</td>
<td>{{ 'config.form_rules.faq.variable_description.title'|trans }}</td>
<td>&lt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.less_than'|trans }}</td>
</tr>
<tr>
<td>url</td>
<td>{{ 'config.form_rules.faq.variable_description.url'|trans }}</td>
<td>&lt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_less_than'|trans }}</td>
</tr>
<tr>
<td>isArchived</td>
<td>{{ 'config.form_rules.faq.variable_description.isArchived'|trans }}</td>
<td>&gt;=</td>
<td>{{ 'config.form_rules.faq.operator_description.greater_than'|trans }}</td>
</tr>
<tr>
<td>isStarred</td>
<td>{{ 'config.form_rules.faq.variable_description.isStarred'|trans }}</td>
<td>&gt;</td>
<td>{{ 'config.form_rules.faq.operator_description.strictly_greater_than'|trans }}</td>
</tr>
<tr>
<td>content</td>
<td>{{ 'config.form_rules.faq.variable_description.content'|trans }}</td>
<td>=</td>
<td>{{ 'config.form_rules.faq.operator_description.equal_to'|trans }}</td>
</tr>
<tr>
<td>language</td>
<td>{{ 'config.form_rules.faq.variable_description.language'|trans }}</td>
<td>!=</td>
<td>{{ 'config.form_rules.faq.operator_description.not_equal_to'|trans }}</td>
</tr>
<tr>
<td>mimetype</td>
<td>{{ 'config.form_rules.faq.variable_description.mimetype'|trans }}</td>
<td>OR</td>
<td>{{ 'config.form_rules.faq.operator_description.or'|trans }}</td>
</tr>
<tr>
<td>readingTime</td>
<td>{{ 'config.form_rules.faq.variable_description.readingTime'|trans }}</td>
<td>AND</td>
<td>{{ 'config.form_rules.faq.operator_description.and'|trans }}</td>
</tr>
<tr>
<td>domainName</td>
<td>{{ 'config.form_rules.faq.variable_description.domainName'|trans }}</td>
<td>matches</td>
<td>{{ 'config.form_rules.faq.operator_description.matches'|trans|raw }}</td>
</tr>
</tbody>
</table>
</div> </div>
</div> </div>
</div> </div>

View File

@ -14,7 +14,8 @@
<ul> <ul>
<li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li> <li><a href="{{ path('developer_howto_firstapp') }}">{{ 'developer.how_to_first_app'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.full_documentation'|trans }}</a></li> <li><a href="http://doc.wallabag.org/en/v2/developer/api.html">{{ 'developer.full_documentation'|trans }}</a></li>
<li><a href="{{ path('nelmio_api_doc_index') }}">{{ 'developer.list_methods'|trans }}</a></li>
</ul> </ul>
<h4>{{ 'developer.clients.title'|trans }}</h4> <h4>{{ 'developer.clients.title'|trans }}</h4>

View File

@ -54,7 +54,7 @@
<span class="tool reading-time"> <span class="tool reading-time">
{% set readingTime = entry.readingTime / app.user.config.readingSpeed %} {% set readingTime = entry.readingTime / app.user.config.readingSpeed %}
{% if readingTime > 0 %} {% if readingTime > 0 %}
{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime}) }} {{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}
{% else %} {% else %}
{{ 'entry.list.reading_time_less_one_minute'|trans|raw }} {{ 'entry.list.reading_time_less_one_minute'|trans|raw }}
{% endif %} {% endif %}
@ -74,8 +74,7 @@
<div class="estimatedTime grey-text"> <div class="estimatedTime grey-text">
<span class="tool reading-time"> <span class="tool reading-time">
{{ 'entry.list.reading_time'|trans }} {% if readingTime > 0 %}{{ 'entry.list.reading_time_minutes'|trans({'%readingTime%': readingTime|round}) }}{% else %}{{ 'entry.list.reading_time_less_one_minute'|trans|raw }}{% endif %}
{% if entry.readingTime > 0 %}{{ entry.readingTime }}{% else %}<small class="inferieur">&lt;</small> 1{% endif %} min
</span> </span>
</div> </div>

View File

@ -138,6 +138,17 @@
</div> </div>
</li> </li>
{% if craue_setting('show_printlink') %}
<li class="bold border-bottom hide-on-med-and-down">
<a class="waves-effect collapsible-header" title="{{ 'entry.view.left_menu.print'|trans }}" href="javascript: window.print();">
<i class="mdi-action-print small"></i>
<span>{{ 'entry.view.left_menu.print'|trans }}</span>
</a>
<div class="collapsible-body"></div>
</li>
{% endif %}
<li class="bold"> <li class="bold">
<a class="waves-effect collapsible-header"> <a class="waves-effect collapsible-header">
<i class="mdi-file-file-download small"></i> <i class="mdi-file-file-download small"></i>
@ -192,14 +203,14 @@
{% endfor %} {% endfor %}
</div> </div>
{% if entry.previewPicture is not null %}
<div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /></div>
{% endif %}
<div class="input-field nav-panel-add-tag" style="display: none"> <div class="input-field nav-panel-add-tag" style="display: none">
{{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }} {{ render(controller( "WallabagCoreBundle:Tag:addTagForm", { 'id': entry.id } )) }}
</div> </div>
{% if entry.previewPicture is not null %}
<div><img class="preview" src="{{ entry.previewPicture }}" alt="{{ entry.title|raw }}" /></div>
{% endif %}
</aside> </aside>
<article> <article>
{{ entry.content | raw }} {{ entry.content | raw }}

View File

@ -67,10 +67,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(), 'command' => $command->getName(),
)); ));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); $this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); $this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); $this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); $this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
} }
public function testRunInstallCommandWithReset() public function testRunInstallCommandWithReset()
@ -97,11 +98,12 @@ class InstallCommandTest extends WallabagCoreTestCase
'--reset' => true, '--reset' => true,
)); ));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); $this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); $this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); $this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); $this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
// we force to reset everything // we force to reset everything
$this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay()); $this->assertContains('Droping database, creating database and schema, clearing the cache', $tester->getDisplay());
@ -142,10 +144,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(), 'command' => $command->getName(),
)); ));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); $this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); $this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); $this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); $this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
// the current database doesn't already exist // the current database doesn't already exist
$this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay()); $this->assertContains('Creating database and schema, clearing the cache', $tester->getDisplay());
@ -179,10 +182,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(), 'command' => $command->getName(),
)); ));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); $this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); $this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); $this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); $this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
$this->assertContains('Droping schema and creating schema', $tester->getDisplay()); $this->assertContains('Droping schema and creating schema', $tester->getDisplay());
} }
@ -233,10 +237,11 @@ class InstallCommandTest extends WallabagCoreTestCase
'command' => $command->getName(), 'command' => $command->getName(),
)); ));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); $this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); $this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); $this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); $this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
$this->assertContains('Creating schema', $tester->getDisplay()); $this->assertContains('Creating schema', $tester->getDisplay());
} }
@ -265,9 +270,10 @@ class InstallCommandTest extends WallabagCoreTestCase
'--no-interaction' => true, '--no-interaction' => true,
)); ));
$this->assertContains('Step 1 of 4. Checking system requirements.', $tester->getDisplay()); $this->assertContains('Checking system requirements.', $tester->getDisplay());
$this->assertContains('Step 2 of 4. Setting up database.', $tester->getDisplay()); $this->assertContains('Setting up database.', $tester->getDisplay());
$this->assertContains('Step 3 of 4. Administration setup.', $tester->getDisplay()); $this->assertContains('Administration setup.', $tester->getDisplay());
$this->assertContains('Step 4 of 4. Installing assets.', $tester->getDisplay()); $this->assertContains('Config setup.', $tester->getDisplay());
$this->assertContains('Installing assets.', $tester->getDisplay());
} }
} }