84 Commits

Author SHA1 Message Date
Luc Didry
c030e371ae Fix stats graph if no upload happens in the time range 2018-07-31 12:55:15 +02:00
Luc Didry
85d0aabef8 Add upload_enabled info to server infos endpoint 2018-07-30 13:45:48 +02:00
Luc Didry
da8a0642ec Fix year_disabled_in_month_pct stat 2018-07-30 13:36:24 +02:00
Luc Didry
9696da7c01 Bump version (0.11) 2018-07-29 22:19:43 +02:00
Luc Didry
4585b7af8f [i18n] Update translations 2018-07-29 22:18:40 +02:00
Luc Didry
3feeeac39d Merge branch 'development' into 'master'
Time for a new release

Closes #82, #61, #84, #67, #70, #5, #76, #79, #56, #77, #78, #48, #80, #83 et #81

See merge request luc/lutim!51
2018-07-29 22:06:42 +02:00
Luc Didry
f7b81e701f Remove Bitcoin support 2018-07-29 22:01:50 +02:00
Luc Didry
8c7a2a75a1 [i18n] Update translations 2018-07-29 21:59:02 +02:00
Luc Didry
e1533a8804 Add /about/image forgotten endpoint 2018-07-29 21:33:41 +02:00
Luc Didry
f8b28525f6 Merge branch 'fix-82' into 'development'
Fix #82 - Add optional authentication

See merge request luc/lutim!50
2018-07-29 20:19:43 +02:00
Luc Didry
182f4ccf4e Fix #82 - Add optional authentication 2018-07-29 20:15:01 +02:00
Quentin
07344aa0c9 Update oc.po 2018-07-29 18:49:19 +02:00
Quentin
b8d74beea3 Update oc.po 2018-07-29 18:48:48 +02:00
Luc Didry
985a781a5f Merge branch 'fix-61' into 'development'
Fix #61 - Add modal to modify expiration delay from "myfiles" page

See merge request luc/lutim!49
2018-07-29 17:48:15 +02:00
Luc Didry
ee936c1f79 Fix #61 - Add modal to modify expiration delay from "myfiles" page 2018-07-29 17:43:32 +02:00
Luc Didry
9ea2234f7d [i18n] Update translations 2018-07-29 15:58:11 +02:00
Luc Didry
7c199a5c87 Fix gallery/zip/random link generator on myfiles page 2018-07-29 15:48:50 +02:00
Luc Didry
4d5fed4d02 Merge branch 'fix-84' into 'development'
Fix #84 - Add link to generate random file in collection

See merge request luc/lutim!48
2018-07-29 15:48:49 +02:00
Luc Didry
b088db9c5e [i18n] Update translations 2018-07-29 15:48:49 +02:00
Luc Didry
ea358d4a4c Fix #84 - Add link to generate random file in collection 2018-07-29 15:48:49 +02:00
Luc Didry
47b38daad5 Merge branch 'fix-67' into 'development'
Fix #67 - Add localStorage export and import feature

See merge request luc/lutim!47
2018-07-29 15:48:49 +02:00
Luc Didry
46dcb0256f Add fix #70 item in CHANGELOG 2018-07-29 15:48:49 +02:00
Luc Didry
8fe738adc4 Fix #67 - Add localStorage export and import feature 2018-07-29 15:48:49 +02:00
Luc Didry
9b90119061 Merge branch 'fix-5' into 'development'
Fix #5 - Allow to use a fixed domain

See merge request luc/lutim!46
2018-07-29 15:48:49 +02:00
Luc Didry
78bb3f37c7 Merge branch 'fix-70' into 'development'
Fix #70 - Fix stats files generation with non-default theme

See merge request luc/lutim!45
2018-07-29 15:48:48 +02:00
Luc Didry
f2f785e6d4 Fix #5 - Allow to use a fixed domain 2018-07-29 15:48:48 +02:00
Luc Didry
15e587464d Merge branch 'fix-76' into 'development'
Fix #76 Add .zip file check in the tests

See merge request luc/lutim!44
2018-07-29 15:48:48 +02:00
Luc Didry
4ef5e67f4b Fix #70 - Fix stats files generation with non-default theme 2018-07-29 15:48:48 +02:00
Luc Didry
ef090954c3 Merge branch 'fix-79' into 'development'
Fix #79 Add CLI command

See merge request luc/lutim!43
2018-07-29 15:48:48 +02:00
Luc Didry
b42bf08363 Fix #76 Add .zip file check in the tests
This commit is dedicated to Nartagnan, who is supporting me with Ğ1.
Many thanks :-)
2018-07-29 15:48:48 +02:00
Luc Didry
b5ea181bea Improve image CLI command
- Add CLI command to remove images
- Add CLI command to search images based on the uploader's IP address

This commit is dedicated to Schoumi, who is supporting me on Tipeee.
Many thanks :-)
2018-07-29 15:48:48 +02:00
Luc Didry
b84420e6dc [i18n] Update oc translation 2018-07-29 15:48:47 +02:00
Luc Didry
701a78ac94 Add CLI command to print informations about images
This commit is dedicated to JCB, who is supporting me with Ğ1.
Many thanks :-)
2018-07-29 15:48:47 +02:00
Luc Didry
0d1ca8aa98 [i18n] Use ISO::639_1
This commit is dedicated to Schoumi, who is supporting me on Tipeee.
Many thanks :-)
2018-07-29 15:48:47 +02:00
Luc Didry
fbe3c3bc13 [zanata] update Makefile to push or pull only on master and dev branch 2018-07-29 15:48:47 +02:00
Luc Didry
a7f2fd051d [i18n] update locales 2018-07-29 15:48:47 +02:00
Luc Didry
c18e6c84af [zanata] update CI 2018-07-29 15:48:47 +02:00
Luc Didry
10eafcfdc3 Merge branch 'fix-56' into 'development'
Fix #56 Add a message saying how many images there is in the gallery

See merge request luc/lutim!42
2018-07-29 15:48:47 +02:00
Luc Didry
033ff3c54f [zanata] update CI 2018-07-29 15:48:46 +02:00
Luc Didry
9645c8a2f3 Fix #56 Add a message saying how many images there is in the gallery 2018-07-29 15:48:46 +02:00
Luc Didry
4193f03d7a Remove @framasky as default tweet_card_via setting 2018-07-29 15:48:46 +02:00
Luc Didry
8a92ef9567 Merge branch 'fix-77' into 'development'
Fix #77 Add X-Content-Type-Options, X-XSS-Protection, X-Frame-Options headers

See merge request luc/lutim!41
2018-07-29 15:48:46 +02:00
Luc Didry
ed47431415 Merge branch 'fix-78' into 'development'
Fix #78 Add CSP Header

See merge request luc/lutim!40
2018-07-29 15:48:46 +02:00
Luc Didry
247cb41cc5 Fix #77 Add X-Content-Type-Options, X-XSS-Protection, X-Frame-Options headers 2018-07-29 15:48:46 +02:00
Luc Didry
acf0ec75e7 [i18n] Update translations 2018-07-29 15:48:45 +02:00
Luc Didry
83a8fbeeeb Fix #78 Add CSP Header
+ update morris and raphael graph libraries
+ some changes in "myfiles" table
2018-07-29 15:48:45 +02:00
Luc Didry
707e434d2c [zanata] Fix Makefile for CI 2018-07-29 15:48:45 +02:00
Luc Didry
8a412a33c3 Update Changelog 2018-07-29 15:48:45 +02:00
Luc Didry
3eb8db123e Fix #48 No more scroll to top on click + add notifications to actions 2018-07-29 15:48:45 +02:00
Luc Didry
dd9dc7bd7d Fix #80 Gzip static assets with Mojolicious::Plugin::GzipStatic 2018-07-29 15:48:45 +02:00
Luc Didry
c91d46bc68 Fix #83 Use Mojolicious::Plugin::Chi + Add memcached ability 2018-07-29 15:48:45 +02:00
Luc Didry
8dd2ab87f9 Add code coverage in CI 2018-07-29 15:48:44 +02:00
Luc Didry
b3ec85daf3 Better .gitlab-ci.yml
- change order
- use postgresql service
- install only needed deps

This commit is dedicated to Schoumi, who is supporting me on Tipeee.
Many thanks :-)
2018-07-29 15:48:44 +02:00
Luc Didry
dc2b17c7af Fix #81 Allow to install only needed deps
This commit is dedicated to Agnès Maillard, who is supporting me with Ğ1.
Many thanks :-)
2018-07-29 15:48:44 +02:00
Luc Didry
4c53669caa [zanata] Use new Zanata URL 2018-07-29 15:47:58 +02:00
Luc Didry
b5e73e09bf Change internationalization link 2018-07-19 17:05:20 +02:00
Luc Didry
e62cb50ab1 Fix bug in cache system 2018-05-07 18:27:07 +02:00
Luc Didry
cf9504bb30 Fix another bug on zip file creation (missing IV on decryption) 2018-04-26 21:10:02 +02:00
Luc Didry
36a007d2f7 Bump version (0.10.2) 2018-04-24 18:39:28 +02:00
Luc Didry
f013359314 Fix Zip files creation 2018-04-24 18:37:51 +02:00
Luc Didry
1fda560056 Fix #73 bug on theme creation 2018-04-15 13:39:33 +02:00
Luc Didry
adc2d00552 Merge branch 'development' 2018-04-07 12:19:41 +02:00
Luc Didry
95f4c372e3 Bump version 2018-04-07 12:18:43 +02:00
Luc Didry
4f39a86b0a Add partial index on SQLite 2018-04-07 12:11:27 +02:00
Luc Didry
09f1492486 Create merge conflict on zanata.xml 2018-04-07 12:07:43 +02:00
Luc Didry
163a1e2a66 Disable images' counter option 2018-04-07 11:53:51 +02:00
Luc Didry
f26e7ba5ff Add option to disable logs 2018-04-07 11:44:34 +02:00
Luc Didry
7d29e3d3dd [i18n] Correctly handle regionalized languages 2018-04-03 12:03:35 +02:00
Luc Didry
a7bb73b158 Merge branch 'development' into 'development'
suite de luc/lutim!26

See merge request luc/lutim!33
2018-03-19 10:42:47 +01:00
brunob
dc371daf15 suite de luc/lutim!26
ref #63 ; my bad...
2018-03-19 10:36:39 +01:00
Luc Didry
bb097294e2 Built-in image cache system 2018-03-17 15:55:34 +01:00
Luc Didry
cfab86c4b4 Move some tasks to recurring instead of being in after_dispatch hook 2018-03-17 10:30:09 +01:00
Luc Didry
fb562dd9b8 [postgresql] Add partial index to speed up some queries 2018-03-17 10:24:47 +01:00
Luc Didry
0e63bf766e Merge remote-tracking branch 'origin/master' into development 2018-03-12 10:09:01 +01:00
Luc Didry
8ab966f83c Update translations 2018-03-12 10:05:24 +01:00
Luc Didry
86b3652471 Bump version 2018-03-11 23:07:22 +01:00
Luc Didry
c29acb8944 Update translations 2018-03-11 23:06:55 +01:00
Alexander Sapozhnikov
564a0ef69d Russian translation added 2018-03-11 23:06:50 +01:00
Luc Didry
781d1bc721 Update translations 2018-03-11 22:44:08 +01:00
Luc Didry
7cf9f8b6ec Merge branch 'shoorick/lutim-master' into development 2018-03-11 21:44:51 +01:00
Alexander Sapozhnikov
1405b078c0 Russian translation added 2018-03-12 00:58:34 +05:00
Luc Didry
95db024ab8 Merge remote-tracking branch 'origin/master' into development 2018-03-11 14:34:27 +01:00
Luc Didry
a59b728aa6 Merge remote-tracking branch 'origin/master' into development 2018-03-11 10:29:15 +01:00
Luc Didry
85c025f2c3 Zanata.xml -> development branch 2018-03-11 10:25:28 +01:00
88 changed files with 7430 additions and 1620 deletions

3
.gitignore vendored
View File

@@ -13,5 +13,8 @@ themes/*
themes/default/templates/data.html.ep
themes/default/templates/raw.html.ep
themes/default/templates/stats.json.ep
themes/default/templates/partial/raw.js.ep
tmp/*
.zanata-cache/*
cover_db/*
*.passwd

View File

@@ -1,33 +1,98 @@
image: hatsoftwares/test-ci:latest
image: hatsoftwares/lutim-test-ci:latest
stages:
- sqlite
- postgresql
- podcheck
- carton
- carton_bdd
- tests
- cover
before_script:
- carton install
- rm -f *db
sqlite1:
stage: sqlite
cache:
key: "$CI_BUILD_REF_NAME"
untracked: true
- rm -f *.db
variables:
POSTGRES_DB: lutim_db
POSTGRES_USER: lutim
POSTGRES_PASSWORD: lutim_pwd
### Jobs templates
##
#
.carton_bdd_template: &carton_bdd_definition
stage: carton_bdd
retry: 2
artifacts:
paths:
- local
- local/
dependencies:
- carton
.sqlite_template: &sqlite_definition
stage: tests
retry: 2
artifacts:
paths:
- cover_db/
dependencies:
- carton_sqlite
.pg_template: &pg_definition
stage: tests
retry: 2
artifacts:
paths:
- cover_db/
dependencies:
- carton_postgresql
services:
- name: postgres:9.6
alias: postgres
### Podcheck
##
#
podcheck:
stage: podcheck
script:
- make podcheck
### Install common dependencies
##
#
carton:
stage: carton
artifacts:
paths:
- local/
dependencies: []
script:
- carton install --deployment --without=sqlite --without=postgresql --without=minion --without=cache --without=memcached
when: always
retry: 2
### Install DB related dependencies
##
#
carton_sqlite:
<<: *carton_bdd_definition
script:
- carton install --deployment --without=postgresql --without=minion --without=cache --without=memcached
carton_postgresql:
<<: *carton_bdd_definition
script:
- carton install --deployment --without=sqlite --without=minion --without=cache --without=memcached
### SQLite tests
##
#
sqlite1:
<<: *sqlite_definition
script:
- carton install --deployment --without=postgresql --without=minion --without=cache --without=memcached
- MOJO_CONFIG=t/sqlite1.conf make test-sqlite
- MOJO_CONFIG=t/sqlite1.conf make watch
- MOJO_CONFIG=t/sqlite1.conf make cleanbdd
- MOJO_CONFIG=t/sqlite1.conf make cleanfiles
- MOJO_CONFIG=t/sqlite1.conf make stats
sqlite2:
stage: sqlite
cache:
key: "$CI_BUILD_REF_NAME"
untracked: true
paths:
- local
<<: *sqlite_definition
script:
- make podcheck
- carton install --deployment --without=postgresql --without=cache --without=memcached
- MOJO_CONFIG=t/sqlite2.conf make minion &
- sleep 3
- MOJO_CONFIG=t/sqlite2.conf make test-sqlite
@@ -36,18 +101,13 @@ sqlite2:
- MOJO_CONFIG=t/sqlite2.conf make cleanfiles
- MOJO_CONFIG=t/sqlite2.conf make stats
sqlite3:
stage: sqlite
cache:
key: "$CI_BUILD_REF_NAME"
untracked: true
paths:
- local
<<: *sqlite_definition
services:
- name: postgres:9.6
alias: postgres
script:
- make podcheck
- service postgresql restart
- sleep 10
- service postgresql status
- make create-pg-test-db
- carton install --deployment --without=cache --without=memcached
- export PGPASSWORD=lutim_pwd; echo 'CREATE DATABASE lutim_minion WITH OWNER lutim;' | psql -h postgres -U lutim lutim_db
- MOJO_CONFIG=t/sqlite3.conf make minion &
- sleep 3
- MOJO_CONFIG=t/sqlite3.conf make test-sqlite
@@ -55,40 +115,23 @@ sqlite3:
- MOJO_CONFIG=t/sqlite3.conf make cleanbdd
- MOJO_CONFIG=t/sqlite3.conf make cleanfiles
- MOJO_CONFIG=t/sqlite3.conf make stats
tags:
- Debian
- Jessie
### PostgreSQL tests
##
#
postgresql1:
stage: postgresql
cache:
key: "$CI_BUILD_REF_NAME"
untracked: true
paths:
- local
<<: *pg_definition
script:
- make podcheck
- service postgresql restart
- sleep 10
- service postgresql status
- make create-pg-test-db
- carton install --deployment --without=sqlite --without=minion --without=cache --without=memcached
- MOJO_CONFIG=t/postgresql1.conf make test-pg
- MOJO_CONFIG=t/postgresql1.conf make watch
- MOJO_CONFIG=t/postgresql1.conf make cleanbdd
- MOJO_CONFIG=t/postgresql1.conf make cleanfiles
- MOJO_CONFIG=t/postgresql1.conf make stats
postgresql2:
stage: postgresql
cache:
key: "$CI_BUILD_REF_NAME"
untracked: true
paths:
- local
<<: *pg_definition
script:
- make podcheck
- service postgresql restart
- sleep 10
- service postgresql status
- make create-pg-test-db
- carton install --deployment --without=cache --without=memcached
- MOJO_CONFIG=t/postgresql2.conf make minion &
- sleep 3
- MOJO_CONFIG=t/postgresql2.conf make test-pg
@@ -97,18 +140,10 @@ postgresql2:
- MOJO_CONFIG=t/postgresql2.conf make cleanfiles
- MOJO_CONFIG=t/postgresql2.conf make stats
postgresql3:
stage: postgresql
cache:
key: "$CI_BUILD_REF_NAME"
untracked: true
paths:
- local
<<: *pg_definition
script:
- make podcheck
- service postgresql restart
- sleep 10
- service postgresql status
- make create-pg-test-db
- carton install --deployment --without=sqlite --without=cache --without=memcached
- export PGPASSWORD=lutim_pwd; echo 'CREATE DATABASE lutim_minion WITH OWNER lutim;' | psql -h postgres -U lutim lutim_db
- MOJO_CONFIG=t/postgresql3.conf make minion &
- sleep 3
- MOJO_CONFIG=t/postgresql3.conf make test-pg
@@ -116,6 +151,27 @@ postgresql3:
- MOJO_CONFIG=t/postgresql3.conf make cleanbdd
- MOJO_CONFIG=t/postgresql3.conf make cleanfiles
- MOJO_CONFIG=t/postgresql3.conf make stats
tags:
- Debian
- Jessie
### Code coverage
##
#
cover:
stage: cover
script:
- make cover
coverage: '/Total .*\d+\.\d+$/'
### Push new translations strings to https://trad.framasoft.org
##
#
trads:
stage: cover
image: framasoft/push-trad:latest
dependencies: []
script:
- sed -e "s@<project-version>.*</project-version>@<project-version>$CI_COMMIT_REF_SLUG</project-version>@" -i zanata.xml
- if [ ! -z ${ZANATA_CONFIG+x} ]; then mkdir -p ${HOME}/.config; echo -e "${ZANATA_CONFIG}" > ${HOME}/.config/zanata.ini; fi
- if [ ! -z ${ZANATA_CONFIG+x} ]; then make push-locales; fi
only:
- development
- master

View File

@@ -16,3 +16,4 @@
* Quentin Pagès, occitan translation
* Alexis Clairet (<https://github.com/Turboconnard>), paste image to upload ability
* ButterflyOfFire (<https://mastodon.tetaneutral.net/@BoF>), arabic translation
* Alexander Sapozhnikov (<http://shoorick.ru>), russian translation

View File

@@ -1,5 +1,60 @@
Revision history for Lutim
0.11.2 2018-07-31
- Fix stats graph if no upload happens in the time range
0.11.1 2018-07-30
- Add upload_enabled info to server infos endpoint
- Add log message when failing to render an image
0.11.0 2018-07-29
- Allow to install only needed deps
- Notification when copying to clipboard or deleting images
- Allow to use memcached as cache system
- Use Mojolicious::Plugin::Chi
- Gzip static assets with Mojolicious::Plugin::GzipStatic
- Fix scroll-to-top when clicking on delete image
- Add CSP header
- Add X-Content-Type-Options, X-XSS-Protection, X-Frame-Options headers
- Remove @framasky as default tweet_card_via setting
- Add a message saying how many images there is in the gallery
- Use ISO::639_1 for languages' native names
- Add CLI command to print informations about images
- Add CLI command to remove images
- Add CLI command to search images based on the uploader's IP address
- Add .zip file check in the tests
- Fix stats files place when using non-default theme
- Allow to use a fixed domain
- Add localStorage export and import feature
- Add link to generate random file in collection
- Add modal to modify expiration delay from "myfiles" page
- Add optional authentication (LDAP or htpasswd file)
0.10.4 2018-05-07
- Fix bug in cache system that would allow someone to view an image with an incorrect decryption key
0.10.3 2018-04-26
- Fix another bug on zip file creation
0.10.2 2018-04-24
- Fix bug on zip file creation
0.10.1 2018-04-15
- Fix bug on theme creation (#73)
0.10.0 2018-04-07
- PostgreSQL performance improvments
- Move some tasks to recurring instead of being in after_dispatch hook
- Built-in image cache system \o/
- Disable logs option
- Disable images' counter option
0.9.6 2018-03-12
- Update translations
0.9.5 2018-03-11
- Add russian translation, thanks to Alexander Sapozhnikov
0.9.4 2018-03-11
- Replace Twitter account URL with Mastodon one

View File

@@ -4,15 +4,29 @@ XGETTEXT=carton exec local/bin/xgettext.pl -u
CARTON=carton exec
LUTIM=script/lutim
REAL_LUTIM=script/application
HEAD := $(shell git rev-parse --abbrev-ref HEAD)
minify:
@echo "CSS concatenation"
@cd ./themes/default/public/css/ && cat bootstrap.min.css fontello.css hennypenny.css lutim.css toastify.css | csso > common.min.css
@cd ./themes/default/public/css/ && cat animation.css uploader.css markdown.css | csso > not_stats.min.css
@cd ./themes/default/public/css/ && cat photoswipe.css default-skin/default-skin.css | csso > gallery.min.css
@cd ./themes/default/public/css/ && cat twitter.css | csso > twitter.min.css
locales:
$(XGETTEXT) $(EXTRACTDIR) -o $(POT) 2>/dev/null
push-locales: locales
zanata-cli -q -B push
push-locales:
ifeq ($(HEAD),$(filter $(HEAD),master development))
sed -e 's@<project-version>.*</project-version>@<project-version>$(HEAD)</project-version>@' -i zanata.xml && \
zanata-cli -q -B push
endif
pull-locales:
zanata-cli -q -B pull
ifeq ($(HEAD),$(filter $(HEAD),master development))
sed -e 's@<project-version>.*</project-version>@<project-version>$(HEAD)</project-version>@' -i zanata.xml && \
zanata-cli -q -B pull
endif
stats-locales:
zanata-cli -q stats
@@ -20,18 +34,21 @@ stats-locales:
podcheck:
podchecker lib/Lutim/DB/Image.pm
cover:
PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) cover --ignore_re '^local'
test-sqlite:
$(CARTON) $(REAL_LUTIM) test
@PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) $(REAL_LUTIM) test
test-pg:
$(CARTON) $(REAL_LUTIM) test
@PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) $(REAL_LUTIM) test
test: podcheck test-sqlite test-pg
clean:
rm -rf lutim.db files/
dev:
dev: minify
$(CARTON) morbo $(LUTIM) --listen http://0.0.0.0:3000 --watch lib/ --watch script/ --watch themes/ --watch lutim.conf
devlog:

View File

@@ -43,7 +43,7 @@ See [AUTHORS.md](AUTHORS.md) file.
## Contribute!
Please consider contributing, either by [reporting issues](https://framagit.org/luc/lutim/issues) or by helping the [internationalization](https://pootle.framasoft.org/projects/lutim/). And of course, code contribution are welcome!
Please consider contributing, either by [reporting issues](https://framagit.org/luc/lutim/issues) or by helping the [internationalization](https://trad.framasoft.org/project/view/lutim). And of course, code contribution are welcome!
The details on how to contribute are on the [wiki](https://framagit.org/luc/lutim/wikis/contribute).

View File

@@ -3,20 +3,16 @@ requires 'EV';
requires 'IO::Socket::SSL';
requires 'Net::SSLeay', '>= 1.81';
requires 'Data::Validate::URI';
requires 'Net::Domain::TLD', '>= 1.73'; # Must have the last version to handle (at least) .xyz and .link
requires 'Mojo::Pg';
requires 'Mojo::SQLite';
requires 'Net::Domain::TLD', '>= 1.75'; # Must have the last version to handle (at least) .xyz and .link
requires 'Mojolicious::Plugin::I18N';
requires 'Mojolicious::Plugin::DebugDumperHelper';
requires 'Mojolicious::Plugin::PgURLHelper';
requires 'Mojolicious::Plugin::StaticCache';
requires "Minion", "== 4.06";
requires 'Minion::Backend::SQLite', "== 0.009";
requires 'Mojolicious::Plugin::GzipStatic';
requires 'Mojolicious::Plugin::CSPHeader';
requires 'Text::Unidecode';
requires 'DateTime';
requires 'Filesys::DiskUsage';
requires 'Switch';
requires 'Data::Validate::URI';
requires 'Crypt::CBC';
requires 'Crypt::Blowfish';
requires 'Locale::Maketext';
@@ -27,3 +23,36 @@ requires 'Image::ExifTool';
requires 'Data::Entropy';
requires 'List::MoreUtils', '> 0.33';
requires 'Archive::Zip';
requires 'ISO::639_1';
feature 'postgresql', 'PostgreSQL support' => sub {
requires 'Mojo::Pg';
requires 'Mojolicious::Plugin::PgURLHelper';
};
feature 'sqlite', 'SQLite support' => sub {
requires 'Mojo::SQLite', '>= 3.000';
requires 'Minion::Backend::SQLite', '>= 4.001';
};
feature 'minion', 'Minion support' => sub {
requires 'Minion';
};
feature 'cache', 'Cache system' => sub {
requires 'Mojolicious::Plugin::CHI';
requires 'Data::Serializer';
};
feature 'memcached', 'Cache system using Memcached' => sub {
requires 'Mojolicious::Plugin::CHI';
requires 'CHI::Driver::Memcached';
requires 'Cache::Memcached';
};
feature 'ldap', 'LDAP authentication support' => sub {
requires 'Net::LDAP';
requires 'Mojolicious::Plugin::Authentication';
};
feature 'htpasswd', 'Htpasswd authentication support' => sub {
requires 'Apache::Htpasswd';
requires 'Mojolicious::Plugin::Authentication';
};
feature 'test' => sub {
requires 'Devel::Cover';
};

File diff suppressed because it is too large Load Diff

View File

@@ -1,6 +1,7 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lutim;
use Mojo::Base 'Mojolicious';
use Mojo::IOLoop;
use Lutim::DB::Image;
use vars qw($im_loaded);
@@ -22,38 +23,68 @@ sub startup {
$self->{wait_for_it} = {};
push @{$self->commands->namespaces}, 'Lutim::Command';
$self->plugin('DebugDumperHelper');
$self->plugin('PgURLHelper');
my $config = $self->plugin('Config', {
default => {
provisioning => 100,
provis_step => 5,
length => 8,
always_encrypt => 0,
anti_flood_delay => 5,
tweet_card_via => '@framasky',
max_file_size => 10*1024*1024,
https => 0,
proposed_delays => '0,1,7,30,365',
default_delay => 0,
max_delay => 0,
token_length => 24,
crypto_key_length => 8,
thumbnail_size => 100,
theme => 'default',
dbtype => 'sqlite',
db_path => 'lutim.db',
max_files_in_zip => 15,
prefix => '/',
minion => {
provisioning => 100,
provis_step => 5,
length => 8,
always_encrypt => 0,
anti_flood_delay => 5,
max_file_size => 10*1024*1024,
https => 0,
proposed_delays => '0,1,7,30,365',
default_delay => 0,
max_delay => 0,
token_length => 24,
crypto_key_length => 8,
thumbnail_size => 100,
theme => 'default',
dbtype => 'sqlite',
db_path => 'lutim.db',
max_files_in_zip => 15,
prefix => '/',
minion => {
enabled => 0,
dbtype => 'sqlite',
db_path => 'minion.db'
},
session_duration => 3600,
cache_max_size => 0,
memcached_servers => [],
quiet_logs => 0,
disable_img_stats => 0,
x_frame_options => 'DENY',
x_content_type_options => 'nosniff',
x_xss_protection => '1; mode=block',
}
});
if (scalar(@{$config->{memcached_servers}})) {
$self->plugin(CHI => {
lutim_images_cache => {
driver => 'Memcached',
servers => $config->{memcached_servers},
expires_in => '1 day',
expires_on_backend => 1,
}
});
} elsif ($config->{cache_max_size} != 0) {
my $cache_max_size = 8 * 1024 * 1024 * $config->{cache_max_size};
$self->plugin(CHI => {
lutim_images_cache => {
driver => 'Memory',
global => 1,
is_size_aware => 1,
max_size => $cache_max_size,
expires_in => '1 day'
}
});
}
die "You need to provide a contact information in lutim.conf !" unless (defined($config->{contact}));
$ENV{MOJO_MAX_MESSAGE_SIZE} = $config->{max_file_size};
@@ -76,8 +107,11 @@ sub startup {
eval qq(use lib "$lib");
$self->plugin('I18N');
# Cache static files
$self->plugin('StaticCache');
# Static assets gzipping
$self->plugin('GzipStatic');
# Headers
$self->plugin('Lutim::Plugin::Headers');
# Helpers
$self->plugin('Lutim::Plugin::Helpers');
@@ -90,6 +124,7 @@ sub startup {
$self->config('minion')->{db_path} = 'minion.db' unless defined $config->{minion}->{db_path};
$self->plugin('Minion' => { SQLite => 'sqlite:'.$config->{minion}->{db_path} });
} elsif ($config->{minion}->{dbtype} eq 'postgresql') {
$self->plugin('PgURLHelper');
$self->plugin('Minion' => { Pg => $self->pg_url($config->{minion}->{'pgdb'}) });
}
$self->app->minion->add_task(
@@ -131,16 +166,116 @@ sub startup {
}
);
$self->hook(
after_dispatch => sub {
my $c = shift;
$c->provisioning();
# Recurrent tasks
Mojo::IOLoop->recurring(5 => sub {
my $loop = shift;
# Purge expired anti-flood protection
my $wait_for_it = $c->app->{wait_for_it};
delete @{$wait_for_it}{grep { time - $wait_for_it->{$_} > $c->config->{anti_flood_delay} } keys %{$wait_for_it}} if (defined($wait_for_it));
$self->provisioning();
# Purge expired anti-flood protection
my $wait_for_it = $self->{wait_for_it};
delete @{$wait_for_it}{grep { time - $wait_for_it->{$_} > $self->config->{anti_flood_delay} } keys %{$wait_for_it}} if (defined($wait_for_it));
});
# Authentication (if configured)
if (defined($self->config('ldap')) || defined($self->config('htpasswd'))) {
if (defined($self->config('ldap'))) {
require Net::LDAP;
}
);
if (defined($self->config('htpasswd'))) {
require Apache::Htpasswd;
}
die 'Unable to read '.$self->config('htpasswd') if (defined($self->config('htpasswd')) && !-r $self->config('htpasswd'));
$self->plugin('Authentication' =>
{
autoload_user => 1,
session_key => 'Lutim',
load_user => sub {
my ($c, $username) = @_;
return $username;
},
validate_user => sub {
my ($c, $username, $password, $extradata) = @_;
if (defined($c->config('ldap'))) {
my $ldap = Net::LDAP->new($c->config->{ldap}->{uri});
my $mesg;
if (defined($c->config->{ldap}->{bind_dn}) && defined($c->config->{ldap}->{bind_pwd})) {
# connect to the ldap server using the bind credentials
$mesg = $ldap->bind(
$c->config->{ldap}->{bind_dn},
password => $c->config->{ldap}->{bind_pwd}
);
} else {
# anonymous bind
$mesg = $ldap->bind
}
if ($mesg->code) {
$c->app->log->info('[LDAP INFO] Authenticated bind failed - Login: '.$c->config->{ldap}->{bind_dn}) if defined($c->config->{ldap}->{bind_dn});
$c->app->log->error('[LDAP ERROR] Error on bind: '.$mesg->error);
return undef;
}
my $ldap_user_attr = $c->config->{ldap}->{user_attr};
my $ldap_user_filter = $c->config->{ldap}->{user_filter};
# search the ldap database for the user who is trying to login
$mesg = $ldap->search(
base => $c->config->{ldap}->{user_tree},
filter => "(&($ldap_user_attr=$username)$ldap_user_filter)"
);
if ($mesg->code) {
$c->app->log->error('[LDAP ERROR] Error on search: '.$mesg->error);
return undef;
}
# check to make sure that the ldap search returned at least one entry
my @entries = $mesg->entries;
my $entry = $entries[0];
unless (defined $entry) {
$c->app->log->info("[LDAP INFO] Authentication failed - User $username filtered out, IP: ".$c->ip);
return undef;
}
# retrieve the first user returned by the search
$c->app->log->debug("[LDAP DEBUG] Found user dn: ".$entry->dn);
# Now we know that the user exists
$mesg = $ldap->bind($entry->dn,
password => $password
);
if ($mesg->code) {
$c->app->log->info("[LDAP INFO] Authentication failed - Login: $username, IP: ".$c->ip);
$c->app->log->error('[LDAP ERROR] Authentication failed '.$mesg->error);
return undef;
}
$c->app->log->info("[LDAP INFO] Authentication successful - Login: $username, IP: ".$c->ip);
} elsif (defined($c->config('htpasswd'))) {
my $htpasswd = new Apache::Htpasswd(
{
passwdFile => $c->config('htpasswd'),
ReadOnly => 1
}
);
if (!$htpasswd->htCheckPassword($username, $password)) {
return undef;
}
$c->app->log->info("[Simple authentication successful] login: $username, IP: ".$c->ip);
}
return $username;
}
}
);
$self->app->sessions->default_expiration($self->config('session_duration'));
}
$self->defaults(layout => 'default');
@@ -149,6 +284,14 @@ sub startup {
# Router
my $r = $self->routes;
$r->add_condition(authorized => sub {
my ($r, $c, $captures) = @_;
return 1 unless (defined($self->config('ldap')) || defined($self->config('htpasswd')));
return $c->is_user_authenticated;
});
$r->options(sub {
my $c = shift;
$c->res->headers->allow('POST') if (defined($c->config->{allowed_domains}));
@@ -156,23 +299,43 @@ sub startup {
});
$r->get('/')->
to('Controller#home')->
over('authorized')->
to('Image#home')->
name('index');
$r->get('/')->
to('Authent#index');
if (defined $self->config('ldap') || defined $self->config('htpasswd')) {
# Login page
$r->get('/login')
->to('Authent#index')
->name('login');
# Authentication
$r->post('/login')
->to('Authent#login');
# Logout page
$r->get('/logout')
->to('Authent#log_out')
->name('logout');
}
$r->get('/about')->
to('Controller#about')->
to('Image#about')->
name('about');
$r->get('/infos')->
to('Controller#infos')->
to('Image#infos')->
name('infos');
$r->get('/stats')->
to('Controller#stats')->
to('Image#stats')->
name('stats');
$r->get('/lang/:l')->
to('Controller#change_lang')->
to('Image#change_lang')->
name('lang');
$r->get('/partial/:file' => sub {
@@ -195,56 +358,76 @@ sub startup {
);
})->name('gallery');
$r->get('/myfiles' => sub {
shift->render(
template => 'myfiles'
);
})->name('myfiles');
$r->get('/myfiles')->
over('authorized')->
name('myfiles');
$r->get('/myfiles')->
to('Authent#index');
$r->get('/manifest.webapp')->
to('Controller#webapp')->
to('Image#webapp')->
name('manifest.webapp');
$r->get('/zip')
->to('Controller#zip')
->to('Image#zip')
->name('zip');
$r->get('/random')
->to('Image#random')
->name('random');
$r->post('/')->
to('Controller#add')->
over('authorized')->
to('Image#add')->
name('add');
$r->post('/')->
to('Authent#index');
$r->get('/d/:short/:token')->
to('Controller#delete')->
over('authorized')->
to('Image#delete')->
name('delete');
$r->get('/d/:short/:token')->
to('Authent#index');
$r->post('/m/:short/:token')->
to('Controller#modify')->
over('authorized')->
to('Image#modify')->
name('modify');
$r->post('/m/:short/:token')->
to('Authent#index');
$r->post('/c')->
to('Controller#get_counter')->
over('authorized')->
to('Image#get_counter')->
name('counter');
$r->post('/c')->
to('Authent#index');
$r->get('/about/(:short).(:f)')->
to('Controller#about_img')->
$r->get('/about/<:short>')->
to('Image#about_img')->
name('about_img');
$r->get('/about/:short/(:key).(:f)')->
to('Controller#about_img')->
$r->get('/about/<:short>.<:f>')->
to('Image#about_img')->
name('about_img');
$r->get('/(:short).(:f)')->
to('Controller#short')->
$r->get('/about/:short/<:key>.<:f>')->
to('Image#about_img')->
name('about_img');
$r->get('/<:short>.<:f>')->
to('Image#short')->
name('short');
$r->get('/:short')->
to('Controller#short');
to('Image#short');
$r->get('/:short/(:key).(:f)')->
to('Controller#short');
$r->get('/:short/<:key>.<:f>')->
to('Image#short');
$r->get('/:short/:key')->
to('Controller#short');
to('Image#short');
}
1;

View File

@@ -35,8 +35,7 @@ sub run {
my $template = 'themes/'.$config->{theme}.'/templates/data.html.ep.template';
unless (-e $template) {
$config->{theme} = 'default';
$template = 'themes/'.$config->{theme}.'/templates/data.html.ep.template';
$template = 'themes/default/templates/data.html.ep.template';
}
my $stats = {};
@@ -72,15 +71,27 @@ sub run {
);
my $total = $img->count_created_before($separation);
for my $year (sort {$a <=> $b} keys %data) {
for my $month (sort {$a <=> $b} keys %{$data{$year}}) {
for my $day (sort {$a <=> $b} keys %{$data{$year}->{$month}}) {
$thead_tr->append_content('<th>'."$day/$month/$year".'</th>'."\n");
$tbody_tr->append_content('<td>'.$data{$year}->{$month}->{$day}.'</td>'."\n");
$total += $data{$year}->{$month}->{$day};
$tbody_t2->append_content('<td>'.$total.'</td>'."\n");
if (scalar(keys %data)) {
for my $year (sort {$a <=> $b} keys %data) {
for my $month (sort {$a <=> $b} keys %{$data{$year}}) {
for my $day (sort {$a <=> $b} keys %{$data{$year}->{$month}}) {
$thead_tr->append_content(sprintf("<th>%#.2d/%#.2d/%d</th>\n", $day, $month, $year));
$tbody_tr->append_content(sprintf("<td>%d</td>\n", $data{$year}->{$month}->{$day}));
$total += $data{$year}->{$month}->{$day};
$tbody_t2->append_content(sprintf("<td>%d</td>\n", $total));
}
}
}
} else {
my $dt = DateTime->from_epoch(epoch => $separation);
$thead_tr->append_content(sprintf("<th>%#.2d/%#.2d/%d</th>\n", $dt->day(), $dt->month(), $dt->year()));
$tbody_tr->append_content("<td>0</td>\n");
$tbody_t2->append_content(sprintf("<td>%d</td>\n", $total));
$dt = DateTime->now();
$thead_tr->append_content(sprintf("<th>%#.2d/%#.2d/%d</th>\n", $dt->day(), $dt->month(), $dt->year()));
$tbody_tr->append_content("<td>0</td>\n");
$tbody_t2->append_content(sprintf("<td>%d</td>\n", $total));
}
my $moy = $total / $config->{stats_day_num};
@@ -88,8 +99,7 @@ sub run {
# Raw datas
my $template2 = 'themes/'.$config->{theme}.'/templates/raw.html.ep.template';
unless (-e $template2) {
$config->{theme} = 'default';
$template = 'themes/'.$config->{theme}.'/templates/raw.html.ep.template';
$template2 = 'themes/default/templates/raw.html.ep.template';
}
my $text2 = Mojo::File->new($template2)->slurp;
my $dom2 = Mojo::DOM->new($text2);
@@ -128,7 +138,7 @@ sub run {
disabled => $year_disabled
};
my $year_disabled_in_month_pct = ($year_enabled != 0) ? " (".sprintf('%.2f', $year_disabled_in_month/$year_enabled)."%)" : '';
my $year_disabled_in_month_pct = ($year_enabled != 0) ? " (".sprintf('%.2f', 100*$year_disabled_in_month/$year_enabled)."%)" : '';
$raw->append_content("\n<tr><td><%= \$raw[4] %></td><td>".$unlimited_enabled."</td><td>".$unlimited_disabled."</td><td>ø</td></tr>\n");
$raw->append_content("<tr><td><%= \$raw[5] %></td><td>".$day_enabled."</td><td>".$day_disabled."</td><td>".$day_enabled." (100%)</td></tr>\n");
@@ -151,7 +161,10 @@ sub run {
% l('1 year'),
% l('Total')
% );
<script>
$dom2
EOF
my $js = <<EOF;
var enabled_donut = {
element: 'raw-enabled-holder',
data: [
@@ -186,13 +199,13 @@ var disabled_donut = {
'#455ac3',
]
};
</script>
$dom2
EOF
Mojo::File->new('themes/'.$config->{theme}.'/templates/stats.json.ep')->spurt(encode_json($stats));
Mojo::File->new('themes/'.$config->{theme}.'/templates/data.html.ep')->spurt($dom);
Mojo::File->new('themes/'.$config->{theme}.'/templates/raw.html.ep')->spurt(encode('UTF-8', $dom2));
mkdir 'themes/'.$config->{theme}.'/templates/partial/' unless -d 'themes/'.$config->{theme}.'/templates/partial/';
Mojo::File->new('themes/'.$config->{theme}.'/templates/partial/raw.js.ep')->spurt(encode('UTF-8', $js));
}
=encoding utf8

228
lib/Lutim/Command/image.pm Normal file
View File

@@ -0,0 +1,228 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lutim::Command::image;
use Mojo::Base 'Mojolicious::Command';
use Mojo::Util qw(getopt);
use Mojo::Collection 'c';
use Lutim::DB::Image;
use FindBin qw($Bin);
use File::Spec qw(catfile);
has description => 'Manage stored images';
has usage => sub { shift->extract_usage };
my $csv_header = 0;
sub run {
my $c = shift;
my @args = @_;
my $cfile = Mojo::File->new($Bin, '..' , 'lutim.conf');
if (defined $ENV{MOJO_CONFIG}) {
$cfile = Mojo::File->new($ENV{MOJO_CONFIG});
unless (-e $cfile->to_abs) {
$cfile = Mojo::File->new($Bin, '..', $ENV{MOJO_CONFIG});
}
}
my $config = $c->app->plugin('Config', {
file => $cfile,
default => {
provisioning => 100,
provis_step => 5,
length => 8,
always_encrypt => 0,
anti_flood_delay => 5,
max_file_size => 10*1024*1024,
https => 0,
proposed_delays => '0,1,7,30,365',
default_delay => 0,
max_delay => 0,
token_length => 24,
crypto_key_length => 8,
thumbnail_size => 100,
theme => 'default',
dbtype => 'sqlite',
db_path => 'lutim.db',
max_files_in_zip => 15,
prefix => '/',
minion => {
enabled => 0,
dbtype => 'sqlite',
db_path => 'minion.db'
},
cache_max_size => 0,
memcached_servers => [],
quiet_logs => 0,
disable_img_stats => 0,
x_frame_options => 'DENY',
x_content_type_options => 'nosniff',
x_xss_protection => '1; mode=block',
}
});
if (scalar(@{$config->{memcached_servers}})) {
$c->app->plugin(CHI => {
lutim_images_cache => {
driver => 'Memcached',
servers => $config->{memcached_servers},
expires_in => '1 day',
expires_on_backend => 1,
}
});
}
getopt \@args,
'i|info=s{1,}' => \my @info,
'c|csv' => \my $csv,
'r|remove=s{1,}' => \my @remove,
'y|yes' => \my $yes,
'q|quiet' => \my $quiet,
's|search=s' => \my $ip
;
if (scalar @info) {
c(@info)->each(
sub {
my ($e, $num) = @_;
my $i = get_short($c, $e);
print_infos($i, $csv) if $i;
}
);
}
if (scalar @remove) {
c(@remove)->each(
sub {
my ($e, $num) = @_;
my $i = get_short($c, $e);
if ($i) {
if ($i->enabled) {
print_infos($i, 0) unless $quiet;
delete_short($c, $i, $yes);
} else {
say sprintf('The image %s is already disabled', $e);
}
}
}
);
if ($config->{cache_max_size} && !scalar(@{$config->{memcached_servers}})) {
say "\nPlease reload Lutim to be sure that the deleted images are not in the cache anymore.";
}
}
if ($ip) {
my $u = Lutim::DB::Image->new(app => $c->app)->search_created_by($ip);
my @shorts;
$u->each(sub {
my ($e, $num) = @_;
push @shorts, $e->short;
print_infos($e, $csv);
});
say sprintf('%d matching URLs', $u->size);
say sprintf("If you want to delete those images, please do:\n carton exec script/lutim image --remove %s", join(' ', @shorts)) if @shorts;
}
}
sub get_short {
my $c = shift;
my $short = shift;
my $i = Lutim::DB::Image->new(app => $c->app, short => $short);
if ($i->path) {
return $i;
} else {
say sprintf('Sorry, unable to find an image with short = %s', $short);
return undef;
}
}
sub print_infos {
my $i = shift;
my $csv = shift;
my $msg;
if ($i) {
if ($csv) {
if (!$csv_header) {
say 'short,path,footprint,enabled,mediatype,filename,counter,delete_at_first_view,delete_at_day,created_at,created_by,last_access_at,width,height';
$csv_header = 1;
}
$msg = '"%s","%s","%s",%d,"%s","%s",%d,"%s",%d,"%s","%s","%s",%d,%d';
} else {
$msg = <<EOF;
%s
path : %s
footprint : %s
enabled : %d
mediatype : %s
filename : %s
counter : %d
delete_at_first_view : %d
delete_at_day : %d
created_at : %s
created_by : %s
last_access_at : %s
width : %d
height : %d
EOF
}
my ($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($i->created_at);
my $created_at = sprintf('%d-%d-%d %d:%d:%d GMT', $year + 1900, ++$mon, $mday, $hour, $min, $sec);
my $last_access_at = '';
if ($i->last_access_at) {
($sec,$min,$hour,$mday,$mon,$year,$wday,$yday,$isdst) = gmtime($i->last_access_at);
$last_access_at = sprintf('%d-%d-%d %d:%d:%d GMT', $year + 1900, ++$mon, $mday, $hour, $min, $sec);
}
say sprintf($msg,
$i->short,
$i->path,
$i->footprint,
$i->enabled,
$i->mediatype,
$i->filename,
$i->counter,
$i->delete_at_first_view,
$i->delete_at_day,
$created_at,
$i->created_by,
$last_access_at,
$i->width,
$i->height
);
}
}
sub delete_short {
my $c = shift;
my $i = shift;
my $y = shift;
my $confirm = ($y) ? 'yes' : undef;
unless (defined $confirm) {
printf('Are you sure you want to remove this image (%s) ? [N/y] ', $i->short);
$confirm = <STDIN>;
chomp $confirm;
}
if ($confirm =~ m/^y(es)?$/i) {
$c->app->delete_image($i);
} else {
say 'Answer was not "y" or "yes". Aborting deletion.';
}
}
=encoding utf8
=head1 NAME
Lutim::Command::image - Manage URL in Lutim's database
=head1 SYNOPSIS
Usage:
carton exec script/lutim image --info <short> <short> [--csv] Print infos about the space-separated images (--csv creates a CSV output)
carton exec script/lutim image --remove <short> <short> [--yes] [--quiet] Delete the space-separated images (--yes disables confirmation, --quiet disables informations printing)
carton exec script/lutim image --search <ip> Print infos about the images uploaded by this IP (database LIKE, may include images uploaded by other IPs)
=cut
1;

View File

@@ -41,14 +41,14 @@ use Locale::Maketext::Lexicon {
_style => 'gettext',
'*' => [
Gettext => dirname(__FILE__) . '/I18N/*.po',
Gettext => $app_dir . 'themes/default/lib/Lutim/I18N/*.po',
Gettext => \$app_dir . 'themes/default/lib/Lutim/I18N/*.po',
]
};
use vars qw($app_dir);
use vars qw(\$app_dir);
BEGIN {
use Cwd;
my $app_dir = getcwd;
my \$app_dir = getcwd;
}
1;

View File

@@ -0,0 +1,76 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lutim::Controller::Authent;
use Mojo::Base 'Mojolicious::Controller';
sub index {
my $c = shift;
if ($c->is_user_authenticated) {
$c->redirect_to('index');
} else {
$c->render(template => 'login');
}
}
sub login {
my $c = shift;
my $login = $c->param('login');
my $pwd = $c->param('password');
my $ref = $c->req->headers->referrer;
if($c->authenticate($login, $pwd)) {
$c->respond_to(
json => sub {
my $c = shift;
$c->render(
json => {
success => Mojo::JSON->true,
msg => $c->l('You have been successfully logged in.')
}
);
},
any => sub {
$c->redirect_to($ref);
}
);
} else {
my $msg = $c->l('Please, check your credentials: unable to authenticate.');
$c->respond_to(
json => sub {
my $c = shift;
$c->render(
json => {
success => Mojo::JSON->false,
msg => $msg
}
);
},
any => sub {
$c->stash(msg => $msg);
$c->render(template => 'login')
}
);
}
}
sub log_out {
my $c = shift;
if ($c->is_user_authenticated) {
$c->logout;
}
$c->respond_to(
json => sub {
my $c = shift;
$c->render(
json => {
success => Mojo::JSON->true,
msg => $c->l('You have been successfully logged out.')
}
);
},
any => sub {
$c->render(template => 'logout');
}
);
}
1;

View File

@@ -1,5 +1,5 @@
# vim:set sw=4 ts=4 sts=4 expandtab:
package Lutim::Controller;
package Lutim::Controller::Image;
use Mojo::Base 'Mojolicious::Controller';
use Mojo::Util qw(url_escape url_unescape b64_encode encode);
use Mojo::Asset::Memory;
@@ -13,6 +13,7 @@ use File::MimeInfo::Magic qw(mimetype extensions);
use IO::Scalar;
use Image::ExifTool;
use Archive::Zip qw( :ERROR_CODES :CONSTANTS );
use Data::Entropy qw(entropy_source);
use vars qw($im_loaded);
BEGIN {
@@ -36,7 +37,7 @@ sub home {
$c->on(finish => sub {
my $c = shift;
$c->app->log->info('[HIT] someone visited site index');
$c->app->log->info('[HIT] someone visited site index') unless $c->config('quiet_logs');
}
);
}
@@ -80,6 +81,7 @@ sub infos {
default_delay => $c->config('default_delay'),
max_delay => $c->config('max_delay'),
always_encrypt => ($c->config('always_encrypt')) ? true : false,
upload_enabled => ($c->app->stop_upload()) ? false : true,
}
);
}
@@ -157,7 +159,7 @@ sub modify {
if ($image->mod_token ne $token || $token eq '') {
$msg = $c->l('The delete token is invalid.');
} else {
$c->app->log->info('[MODIFICATION] someone modify '.$image->filename.' with token method (path: '.$image->path.')');
$c->app->log->info('[MODIFICATION] someone modify '.$image->filename.' with token method (path: '.$image->path.')') unless $c->config('quiet_logs');
$image->delete_at_day(($c->param('delete-day') && ($c->param('delete-day') <= $c->max_delay || $c->max_delay == 0)) ? $c->param('delete-day') : $c->max_delay);
$image->delete_at_first_view(($c->param('first-view')) ? 1 : 0);
@@ -194,7 +196,7 @@ sub modify {
return $c->redirect_to('/');
}
} else {
$c->app->log->info('[UNSUCCESSFUL] someone tried to modify '.$short.' but it does\'nt exist.');
$c->app->log->info('[UNSUCCESSFUL] someone tried to modify '.$short.' but it does\'nt exist.') unless $c->config('quiet_logs');
# Image never existed
my $msg = $c->l('Unable to find the image %1.', $short);
@@ -227,7 +229,7 @@ sub delete {
} elsif ($image->enabled() == 0) {
$msg = $c->l('The image %1 has already been deleted.', $image->filename);
} else {
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed with token method (path: '.$image->path.')');
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed with token method (path: '.$image->path.')') unless $c->config('quiet_logs');
$c->delete_image($image);
return $c->respond_to(
@@ -261,7 +263,7 @@ sub delete {
}
);
} else {
$c->app->log->info('[UNSUCCESSFUL] someone tried to delete '.$short.' but it does\'nt exist.');
$c->app->log->info('[UNSUCCESSFUL] someone tried to delete '.$short.' but it does\'nt exist.') unless $c->config('quiet_logs');
# Image never existed
return $c->respond_to(
@@ -465,7 +467,7 @@ sub add {
->write;
# Log image creation
$c->app->log->info('[CREATION] '.$ip.' pushed '.$filename.' (path: '.$path.')');
$c->app->log->info('[CREATION] '.$ip.' pushed '.$filename.' (path: '.$path.')') unless $c->config('quiet_logs');
# Give url to user
$short = $record->short;
@@ -562,7 +564,7 @@ sub short {
if ($image->enabled && $image->path) {
if($image->delete_at_day && $image->created_at + $image->delete_at_day * 86400 <= time()) {
# Log deletion
$c->app->log->info('[DELETION] someone tried to view '.$image->filename.' but it has been removed by expiration (path: '.$image->path.')');
$c->app->log->info('[DELETION] someone tried to view '.$image->filename.' but it has been removed by expiration (path: '.$image->path.')') unless $c->config('quiet_logs');
# Delete image
$c->delete_image($image);
@@ -584,7 +586,7 @@ sub short {
if (defined($image->width) && defined($image->height)) {
($width, $height) = ($image->width, $image->height);
} elsif ($im_loaded) {
my $upload = $c->decrypt($key, $image->path);
my $upload = $c->decrypt($key, $image->path, $image->iv);
my $im = Image::Magick->new;
$im->BlobToImage($upload->slurp);
$width = $im->Get('width');
@@ -608,7 +610,7 @@ sub short {
# Delete image if needed
if ($image->delete_at_first_view && $image->counter >= 1) {
# Log deletion
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed (path: '.$image->path.')');
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed (path: '.$image->path.')') unless $c->config('quiet_logs');
# Delete image
$c->delete_image($image);
@@ -626,28 +628,32 @@ sub short {
# Update counter
$c->on(finish => sub {
# Log access
$c->app->log->info('[VIEW] someone viewed '.$image->filename.' (path: '.$image->path.')');
$c->app->log->info('[VIEW] someone viewed '.$image->filename.' (path: '.$image->path.')') unless $c->config('quiet_logs');
# Update record
if ($c->config('minion')->{enabled}) {
$c->app->minion->enqueue(accessed => [$image->short, time]);
} else {
$image->accessed(time);
unless ($c->config('disable_img_stats')) {
if ($c->config('minion')->{enabled}) {
$c->app->minion->enqueue(accessed => [$image->short, time]);
} else {
$image->accessed(time);
}
}
# Delete image if needed
if ($image->delete_at_first_view) {
# Log deletion
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed (path: '.$image->path.')');
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed (path: '.$image->path.')') unless $c->config('quiet_logs');
# Delete image
$c->delete_image($image);
}
});
} else {
$c->app->log->error('[ERROR] Can\'t render '.$image->short);
}
} elsif ($image->path && !$image->enabled) {
# Log access try
$c->app->log->info('[NOT FOUND] someone tried to view '.$short.' but it does\'nt exist anymore.');
$c->app->log->info('[NOT FOUND] someone tried to view '.$short.' but it does\'nt exist anymore.') unless $c->config('quiet_logs');
# Warn user
$c->flash(
@@ -688,7 +694,7 @@ sub zip {
my $filename = $image->filename;
if($image->delete_at_day && $image->created_at + $image->delete_at_day * 86400 <= time()) {
# Log deletion
$c->app->log->info('[DELETION] someone tried to view '.$image->filename.' but it has been removed by expiration (path: '.$image->path.')');
$c->app->log->info('[DELETION] someone tried to view '.$image->filename.' but it has been removed by expiration (path: '.$image->path.')') unless $c->config('quiet_logs');
# Delete image
$c->delete_image($image);
@@ -701,7 +707,7 @@ sub zip {
# Delete image if needed
if ($image->delete_at_first_view && $image->counter >= 1) {
# Log deletion
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed (path: '.$image->path.')');
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed (path: '.$image->path.')') unless $c->config('quiet_logs');
# Delete image
$c->delete_image($image);
@@ -722,24 +728,26 @@ sub zip {
}
if ($key) {
$zip->addString($c->decrypt($key, $path)->slurp, "images/$filename");
$zip->addString($c->decrypt($key, $path, $image->iv), "images/$filename");
} else {
$zip->addFile($path, "images/$filename");
}
# Log access
$c->app->log->info('[VIEW] someone viewed '.$image->filename.' (path: '.$image->path.')');
$c->app->log->info('[VIEW] someone viewed '.$image->filename.' (path: '.$image->path.')') unless $c->config('quiet_logs');
# Update counter and record
if ($c->config('minion')->{enabled}) {
$c->app->minion->enqueue(accessed => [$image->short, time]);
} else {
$image->accessed(time);
unless ($c->config('disable_img_stats')) {
if ($c->config('minion')->{enabled}) {
$c->app->minion->enqueue(accessed => [$image->short, time]);
} else {
$image->accessed(time);
}
}
}
} elsif ($image->path && !$image->enabled) {
# Log access try
$c->app->log->info('[NOT FOUND] someone tried to view '.$short.' but it does\'nt exist anymore.');
$c->app->log->info('[NOT FOUND] someone tried to view '.$short.' but it does\'nt exist anymore.') unless $c->config('quiet_logs');
# Warn user
$zip->addString(encode('UTF-8', $c->l('Unable to find the image: it has been deleted.')), 'images/'.$image->filename.'.txt');
@@ -782,4 +790,16 @@ sub zip {
}
}
sub random {
my $c = shift;
my $imgs = $c->every_param('i');
my $img_nb = scalar(@{$imgs});
if ($img_nb) {
$c->redirect_to($c->prefix.$imgs->[entropy_source->get_int($img_nb)]);
} else {
$c->render_not_found;
}
}
1;

View File

@@ -331,6 +331,20 @@ sub to_hash {
=back
=head2 search_created_by
=over 1
=item B<Usage> : C<$c-E<gt>search_created_by($ip)>
=item B<Arguments> : an IP address
=item B<Purpose> : get enabled images that have been uploaded by this IP address (database query: LIKE '$ip%', results may include images uploaded by similar IP addresses)
=item B<Returns> : a Mojo::Collection object containing the matching images as Lutim::DB::Image objects
=back
=cut
1;

View File

@@ -189,6 +189,27 @@ sub disable {
return $c;
}
sub search_created_by {
my $c = shift;
my $ip = shift;
my @images;
my $records = $c->app->pg->db->select('lutim', undef, { enabled => 1, created_by => { -like => $ip.'%' } })->hashes;
$records->each(
sub {
my ($e, $num) = @_;
my $i = Lutim::DB::Image->new(app => $c->app);
$i->_slurp($e);
push @images, $i;
}
);
return c(@images);
}
sub _slurp {
my $c = shift;
my $r = shift;

View File

@@ -190,6 +190,27 @@ sub disable {
return $c;
}
sub search_created_by {
my $c = shift;
my $ip = shift;
my @images;
my $records = $c->app->sqlite->db->select('lutim', undef, { enabled => 1, created_by => { -like => $ip.'%' } })->hashes;
$records->each(
sub {
my ($e, $num) = @_;
my $i = Lutim::DB::Image->new(app => $c->app);
$i->_slurp($e);
push @images, $i;
}
);
return c(@images);
}
sub _slurp {
my $c = shift;
my $r = shift;

View File

@@ -0,0 +1,50 @@
package Lutim::Plugin::Headers;
use Mojo::Base 'Mojolicious::Plugin';
sub register {
my ($self, $app) = @_;
# Assets Cache headers
$app->plugin('StaticCache' => { even_in_dev => 1 });
# Add CSP Header
if (!defined($app->config('csp')) || (defined($app->config('csp')) && $app->config('csp') ne '')) {
my $directives = {
'default-src' => "'none'",
'script-src' => "'self' 'unsafe-eval'",
'style-src' => "'self' 'unsafe-inline'",
'connect-src' => "'self'",
'img-src' => "'self' data:",
'font-src' => "'self'",
'form-action' => "'self'",
'base-uri' => "'self'",
};
my $frame_ancestors = '';
$frame_ancestors = "'none'" if $app->config('x_frame_options') eq 'DENY';
$frame_ancestors = "'self'" if $app->config('x_frame_options') eq 'SAMEORIGIN';
if ($app->config('x_frame_options') =~ m#^ALLOW-FROM#) {
$frame_ancestors = $app->config('x_frame_options');
$frame_ancestors =~ s#ALLOW-FROM +##;
}
$directives->{'frame-ancestors'} = $frame_ancestors if $frame_ancestors;
$app->plugin('CSPHeader',
csp => $app->config('csp'),
directives => $directives
);
}
# Add other headers
$app->hook(
before_dispatch => sub {
my $c = shift;
$c->res->headers->header('X-Frame-Options' => $app->config('x_frame_options')) if $app->config('x_frame_options');
$c->res->headers->header('X-Content-Type-Options' => $app->config('x_content_type_options')) if $app->config('x_content_type_options');
$c->res->headers->header('X-XSS-Protection' => $app->config('x_xss_protection')) if $app->config('x_xss_protection');
}
);
}
1;

View File

@@ -2,29 +2,32 @@
package Lutim::Plugin::Helpers;
use Mojo::Base 'Mojolicious::Plugin';
use Mojo::Util qw(quote);
use Mojo::File;
use Crypt::CBC;
use Data::Entropy qw(entropy_source);
use DateTime;
use Mojo::Util qw(decode);
use ISO::639_1;
sub register {
my ($self, $app) = @_;
$app->plugin('PgURLHelper');
if ($app->config('dbtype') eq 'postgresql') {
use Mojo::Pg;
require Mojo::Pg;
$app->plugin('PgURLHelper');
$app->helper(pg => \&_pg);
# Database migration
my $migrations = Mojo::Pg::Migrations->new(pg => $app->pg);
if ($app->mode eq 'development' && $ENV{LUTIM_DEBUG}) {
$migrations->from_file('utilities/migrations/postgresql.sql')->migrate(0)->migrate(2);
$migrations->from_file('utilities/migrations/postgresql.sql')->migrate(0)->migrate(3);
} else {
$migrations->from_file('utilities/migrations/postgresql.sql')->migrate(2);
$migrations->from_file('utilities/migrations/postgresql.sql')->migrate(3);
}
} elsif ($app->config('dbtype') eq 'sqlite') {
# SQLite database migration if needed
use Mojo::SQLite;
require Mojo::SQLite;
$app->helper(sqlite => \&_sqlite);
my $sql = Mojo::SQLite->new('sqlite:'.$app->config('db_path'));
@@ -36,17 +39,19 @@ sub register {
}
}
$app->helper(render_file => \&_render_file);
$app->helper(ip => \&_ip);
$app->helper(provisioning => \&_provisioning);
$app->helper(shortener => \&_shortener);
$app->helper(stop_upload => \&_stop_upload);
$app->helper(max_delay => \&_max_delay);
$app->helper(default_delay => \&_default_delay);
$app->helper(is_selected => \&_is_selected);
$app->helper(crypt => \&_crypt);
$app->helper(decrypt => \&_decrypt);
$app->helper(delete_image => \&_delete_image);
$app->helper(render_file => \&_render_file);
$app->helper(ip => \&_ip);
$app->helper(provisioning => \&_provisioning);
$app->helper(shortener => \&_shortener);
$app->helper(stop_upload => \&_stop_upload);
$app->helper(max_delay => \&_max_delay);
$app->helper(default_delay => \&_default_delay);
$app->helper(is_selected => \&_is_selected);
$app->helper(crypt => \&_crypt);
$app->helper(decrypt => \&_decrypt);
$app->helper(delete_image => \&_delete_image);
$app->helper(iso639_native_name => \&_iso639_native_name);
$app->helper(prefix => \&_prefix);
}
sub _pg {
@@ -77,7 +82,6 @@ sub _render_file {
$dl = 'attachment' if ($mediatype =~ m/svg/);
$filename = quote($filename);
my $asset;
unless (-f $path && -r $path) {
$c->app->log->error("Cannot read file [$path]. error [$!]");
$c->flash(
@@ -98,11 +102,45 @@ sub _render_file {
$headers->add('Content-Disposition' => $dl.';filename='.$filename);
$c->res->content->headers($headers);
if ($key) {
$asset = $c->decrypt($key, $path, $iv);
my $cache;
if ($c->config('cache_max_size') != 0 || scalar(@{$c->config('memcached_servers')})) {
$cache = $c->chi('lutim_images_cache')->compute($img->short, undef, sub {
if ($key) {
return {
asset => $c->decrypt($key, $path, $iv),
key => $key
};
} else {
return {
asset => Mojo::File->new($path)->slurp,
};
}
});
if ($key && $key ne $cache->{key}) {
my $tmp = $c->decrypt($key, $path, $iv);
$cache->{asset} = $tmp;
$c->chi('lutim_images_cache')->replace(
$img->short,
{
asset => $tmp,
key => $key
},
);
}
} else {
$asset = Mojo::Asset::File->new(path => $path);
if ($key) {
$cache = {
asset => $c->decrypt($key, $path, $iv),
};
} else {
$cache = {
asset => Mojo::File->new($path)->slurp,
};
}
}
# Extend expiration time
my $asset = Mojo::Asset::Memory->new;
$asset->add_chunk($cache->{asset});
if (defined $thumb && $im_loaded && $mediatype ne 'image/svg+xml' && $mediatype !~ m#image/(x-)?xcf# && $mediatype ne 'image/webp') { # ImageMagick don't work in Debian with svg (for now?)
my $im = Image::Magick->new;
@@ -261,19 +299,38 @@ sub _decrypt {
open(my $f, "<",$file) or die "Unable to read encrypted file: $!";
binmode $f;
while (read($f, my $buffer,1024)) {
while (read($f, my $buffer, 1024)) {
$decrypt_asset->add_chunk($cipher->crypt($buffer));
}
$decrypt_asset->add_chunk($cipher->finish) ;
return $decrypt_asset;
return $decrypt_asset->slurp;
}
sub _delete_image {
my $c = shift;
my $img = shift;
if ($c->config('cache_max_size') != 0 || scalar(@{$c->config('memcached_servers')})) {
$c->chi('lutim_images_cache')->remove($img->short);
}
unlink $img->path or warn "Could not unlink ".$img->path.": $!";
$img->disable();
}
sub _iso639_native_name {
my $c = shift;
return ucfirst(decode 'UTF-8', get_iso639_1(shift)->{nativeName});
}
sub _prefix {
my $c = shift;
my $prefix = $c->url_for('/')->to_abs;
# Forced domain
$prefix->host($c->config('fixed_domain')) if (defined($c->config('fixed_domain')) && $c->config('fixed_domain') ne '');
# Hack for prefix (subdir) handling
$prefix .= '/' unless ($prefix =~ m#/$#);
return $prefix;
}
1;

View File

@@ -22,30 +22,36 @@ sub startup {
{
file => $cfile,
default => {
provisioning => 100,
provis_step => 5,
length => 8,
always_encrypt => 0,
anti_flood_delay => 5,
tweet_card_via => '@framasky',
max_file_size => 10*1024*1024,
https => 0,
proposed_delays => '0,1,7,30,365',
default_delay => 0,
max_delay => 0,
token_length => 24,
crypto_key_length => 8,
thumbnail_size => 100,
theme => 'default',
dbtype => 'sqlite',
db_path => 'lutim.db',
max_files_in_zip => 15,
prefix => '/',
minion => {
provisioning => 100,
provis_step => 5,
length => 8,
always_encrypt => 0,
anti_flood_delay => 5,
max_file_size => 10*1024*1024,
https => 0,
proposed_delays => '0,1,7,30,365',
default_delay => 0,
max_delay => 0,
token_length => 24,
crypto_key_length => 8,
thumbnail_size => 100,
theme => 'default',
dbtype => 'sqlite',
db_path => 'lutim.db',
max_files_in_zip => 15,
prefix => '/',
minion => {
enabled => 0,
dbtype => 'sqlite',
db_path => 'minion.db'
},
cache_max_size => 0,
memcached_servers => [],
quiet_logs => 0,
disable_img_stats => 0,
x_frame_options => 'DENY',
x_content_type_options => 'nosniff',
x_xss_protection => '1; mode=block',
}
}
);
@@ -62,8 +68,11 @@ sub startup {
}
push @{$self->static->paths}, $self->home->rel_file('themes/default/public');
# Cache static files
$self->plugin('StaticCache');
# Static assets gzipping
$self->plugin('GzipStatic');
# Headers
$self->plugin('Lutim::Plugin::Headers');
# Helpers
$self->plugin('Lutim::Plugin::Helpers');

View File

@@ -51,8 +51,8 @@
# twitter account which will appear on twitter cards
# see https://dev.twitter.com/docs/cards/validation/validator to register your Lutim instance on twitter
# optional, default is @framasky
#tweet_card_via => '@framasky',
# optional, no default
#tweet_card_via => '@foo',
# max image size, in octets
# you can write it 10*1024*1024
@@ -92,7 +92,7 @@
# comma-separated values proposed for delays
# optional, default is '0,1,7,30,365'
#proposed_delays => '0,1,7,30,365',
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
@@ -159,6 +159,34 @@
# }
#},
# set `ldap` if you want that only authenticated users can shorten URLs
# please note that everybody can still use shortend URLs
# optional, no default
#ldap => {
# uri => 'ldaps://ldap.example.org', # server URI
# user_tree => 'ou=users,dc=example,dc=org', # search base DN
# bind_dn => 'uid=ldap_user,ou=users,dc=example,dc=org', # search bind DN
# bind_pwd => 'secr3t', # search bind password
# user_attr => 'uid', # user attribute (uid, mail, sAMAccountName, etc.)
# user_filter => '(!(uid=ldap_user))', # user filter (to exclude some users, etc.)
#},
# set `htpasswd` if you want to use an htpasswd file instead of ldap
# create the file with `htpasswd -c lutim.passwd user`, update it with `htpasswd lutim.passwd user2`
# make sure that lutim can read the file!
# optional, no default
#htpasswd => 'lutim.passwd',
# if you've set ldap or htpasswd above, the session will last `session_duration` seconds before
# the user needs to reauthenticate
# optional, default is 3600
#session_duration => 3600,
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
#disable_img_stats => 0,
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
@@ -175,6 +203,66 @@
# optional, default is 15
#max_files_in_zip => 15,
# maximum size (in MB) of memory allowed for the image cache
# Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images.
# This setting makes the cache remove oldest viewed image if the cache size is over it.
# WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of
# CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details
# So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for
# cache is 400MB.
# If set to 0, the cache is disabled
# optional, default is 0
#cache_max_size => 0,
# array of memcached servers to cache URL in order to accelerate responses to often-viewed URL.
# If set to [], the use of memcached is disabled.
# If you use memcached, the internal cache (see cache_max_size option above) will not be used.
# Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached
# servers.
# exemple of valid value: ['127.0.0.1:11211']
# optional, default is []
#memcached_servers => [],
# enable or disable Lutim built-in logs
# set to 1 to disable logs
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
# optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# NB: unsafe-inline for script-src and style-src are here only because morris,
# the graph library used in the stats page requires it
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
# Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly
# to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
# if set, the uploaded images will use this domain
# optional
#fixed_domain => 'example.org',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -89,6 +89,10 @@
# optional, default is 0 (no limit)
default_delay => 30,
# comma-separated values proposed for delays
# optional, default is '0,1,7,30,365'
#proposed_delays => '0,1,7,30,365',
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
@@ -124,10 +128,10 @@
# these are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype
pgdb => {
database => 'lutimtest',
host => 'localhost',
database => 'lutim_db',
host => 'postgres',
user => 'lutim',
pwd => 'lutim'
pwd => 'lutim_pwd'
},
# use Minion instead of directly increase counters
@@ -155,6 +159,11 @@
# }
#},
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
#disable_img_stats => 0,
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
@@ -171,6 +180,62 @@
# optional, default is 15
#max_files_in_zip => 15,
# maximum size (in MB) of memory allowed for the image cache
# Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images.
# This setting makes the cache remove oldest viewed image if the cache size is over it.
# WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of
# CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details
# So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for
# cache is 400MB.
# If set to 0, the cache is disabled
# optional, default is 0
#cache_max_size => 0,
# array of memcached servers to cache URL in order to accelerate responses to often-viewed URL.
# If set to [], the use of memcached is disabled.
# If you use memcached, the internal cache (see cache_max_size option above) will not be used.
# Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached
# servers.
# exemple of valid value: ['127.0.0.1:11211']
# optional, default is []
#memcached_servers => [],
# enable or disable Lutim built-in logs
# set to 1 to disable logs
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
# optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# NB: unsafe-inline for script-src and style-src are here only because morris,
# the graph library used in the stats page requires it
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
# Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly
# to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -89,6 +89,10 @@
# optional, default is 0 (no limit)
default_delay => 30,
# comma-separated values proposed for delays
# optional, default is '0,1,7,30,365'
#proposed_delays => '0,1,7,30,365',
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
@@ -124,10 +128,10 @@
# these are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype
pgdb => {
database => 'lutimtest',
host => 'localhost',
database => 'lutim_db',
host => 'postgres',
user => 'lutim',
pwd => 'lutim'
pwd => 'lutim_pwd'
},
# use Minion instead of directly increase counters
@@ -155,6 +159,11 @@
# }
},
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
#disable_img_stats => 0,
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
@@ -171,6 +180,62 @@
# optional, default is 15
#max_files_in_zip => 15,
# maximum size (in MB) of memory allowed for the image cache
# Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images.
# This setting makes the cache remove oldest viewed image if the cache size is over it.
# WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of
# CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details
# So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for
# cache is 400MB.
# If set to 0, the cache is disabled
# optional, default is 0
#cache_max_size => 0,
# array of memcached servers to cache URL in order to accelerate responses to often-viewed URL.
# If set to [], the use of memcached is disabled.
# If you use memcached, the internal cache (see cache_max_size option above) will not be used.
# Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached
# servers.
# exemple of valid value: ['127.0.0.1:11211']
# optional, default is []
#memcached_servers => [],
# enable or disable Lutim built-in logs
# set to 1 to disable logs
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
# optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# NB: unsafe-inline for script-src and style-src are here only because morris,
# the graph library used in the stats page requires it
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
# Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly
# to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -89,6 +89,10 @@
# optional, default is 0 (no limit)
default_delay => 30,
# comma-separated values proposed for delays
# optional, default is '0,1,7,30,365'
#proposed_delays => '0,1,7,30,365',
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
@@ -124,10 +128,10 @@
# these are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype
pgdb => {
database => 'lutimtest',
host => 'localhost',
database => 'lutim_db',
host => 'postgres',
user => 'lutim',
pwd => 'lutim'
pwd => 'lutim_pwd'
},
# use Minion instead of directly increase counters
@@ -148,13 +152,18 @@
# these are the credentials to access the Minion's PostgreSQL database
# mandatory if you choosed postgresql as Minion backend, no default
pgdb => {
database => 'lutim_miniontest',
host => 'localhost',
database => 'lutim_minion',
host => 'postgres',
user => 'lutim',
pwd => 'lutim'
pwd => 'lutim_pwd'
}
},
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
#disable_img_stats => 0,
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
@@ -171,6 +180,62 @@
# optional, default is 15
#max_files_in_zip => 15,
# maximum size (in MB) of memory allowed for the image cache
# Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images.
# This setting makes the cache remove oldest viewed image if the cache size is over it.
# WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of
# CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details
# So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for
# cache is 400MB.
# If set to 0, the cache is disabled
# optional, default is 0
#cache_max_size => 0,
# array of memcached servers to cache URL in order to accelerate responses to often-viewed URL.
# If set to [], the use of memcached is disabled.
# If you use memcached, the internal cache (see cache_max_size option above) will not be used.
# Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached
# servers.
# exemple of valid value: ['127.0.0.1:11211']
# optional, default is []
#memcached_servers => [],
# enable or disable Lutim built-in logs
# set to 1 to disable logs
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
# optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# NB: unsafe-inline for script-src and style-src are here only because morris,
# the graph library used in the stats page requires it
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
# Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly
# to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -89,6 +89,10 @@
# optional, default is 0 (no limit)
default_delay => 30,
# comma-separated values proposed for delays
# optional, default is '0,1,7,30,365'
#proposed_delays => '0,1,7,30,365',
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
@@ -155,6 +159,11 @@
# }
#},
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
#disable_img_stats => 0,
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
@@ -171,6 +180,62 @@
# optional, default is 15
#max_files_in_zip => 15,
# maximum size (in MB) of memory allowed for the image cache
# Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images.
# This setting makes the cache remove oldest viewed image if the cache size is over it.
# WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of
# CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details
# So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for
# cache is 400MB.
# If set to 0, the cache is disabled
# optional, default is 0
#cache_max_size => 0,
# array of memcached servers to cache URL in order to accelerate responses to often-viewed URL.
# If set to [], the use of memcached is disabled.
# If you use memcached, the internal cache (see cache_max_size option above) will not be used.
# Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached
# servers.
# exemple of valid value: ['127.0.0.1:11211']
# optional, default is []
#memcached_servers => [],
# enable or disable Lutim built-in logs
# set to 1 to disable logs
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
# optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# NB: unsafe-inline for script-src and style-src are here only because morris,
# the graph library used in the stats page requires it
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
# Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly
# to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -89,6 +89,10 @@
# optional, default is 0 (no limit)
default_delay => 30,
# comma-separated values proposed for delays
# optional, default is '0,1,7,30,365'
#proposed_delays => '0,1,7,30,365',
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
@@ -155,6 +159,11 @@
# }
},
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
#disable_img_stats => 0,
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
@@ -171,6 +180,62 @@
# optional, default is 15
#max_files_in_zip => 15,
# maximum size (in MB) of memory allowed for the image cache
# Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images.
# This setting makes the cache remove oldest viewed image if the cache size is over it.
# WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of
# CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details
# So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for
# cache is 400MB.
# If set to 0, the cache is disabled
# optional, default is 0
#cache_max_size => 0,
# array of memcached servers to cache URL in order to accelerate responses to often-viewed URL.
# If set to [], the use of memcached is disabled.
# If you use memcached, the internal cache (see cache_max_size option above) will not be used.
# Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached
# servers.
# exemple of valid value: ['127.0.0.1:11211']
# optional, default is []
#memcached_servers => [],
# enable or disable Lutim built-in logs
# set to 1 to disable logs
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
# optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# NB: unsafe-inline for script-src and style-src are here only because morris,
# the graph library used in the stats page requires it
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
# Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly
# to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -89,6 +89,10 @@
# optional, default is 0 (no limit)
default_delay => 30,
# comma-separated values proposed for delays
# optional, default is '0,1,7,30,365'
#proposed_delays => '0,1,7,30,365',
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay)
# a warning message will be displayed on homepage
# optional, default is 0 (no limit)
@@ -148,13 +152,18 @@
# these are the credentials to access the Minion's PostgreSQL database
# mandatory if you choosed postgresql as Minion backend, no default
pgdb => {
database => 'lutim_miniontest',
host => 'localhost',
database => 'lutim_minion',
host => 'postgres',
user => 'lutim',
pwd => 'lutim'
pwd => 'lutim_pwd'
}
},
# disable counters of images
# set to 1 to disable counters
# optional, counters are enabled by default
#disable_img_stats => 0,
# define the height of the thumbnails generated at users' will
# this is not the height of the thumbnails send after upload,
# we're talking about thumbnails generated when someone asked for
@@ -171,6 +180,62 @@
# optional, default is 15
#max_files_in_zip => 15,
# maximum size (in MB) of memory allowed for the image cache
# Lutim has a built-in memory-based image cache to accelerate responses to often-viewed images.
# This setting makes the cache remove oldest viewed image if the cache size is over it.
# WARNING: a cache is created for each hypnotoad worker, which by default is twice the number of
# CPUs you have. See http://mojolicious.org/perldoc/Mojo/Server/Hypnotoad#workers for details
# So, if you have 4 workers and set cache_max_size to 100, the real maximum size of RAM used for
# cache is 400MB.
# If set to 0, the cache is disabled
# optional, default is 0
#cache_max_size => 0,
# array of memcached servers to cache URL in order to accelerate responses to often-viewed URL.
# If set to [], the use of memcached is disabled.
# If you use memcached, the internal cache (see cache_max_size option above) will not be used.
# Please see https://framagit.org/luc/lutim/wikis/memcached to know how to configure your memcached
# servers.
# exemple of valid value: ['127.0.0.1:11211']
# optional, default is []
#memcached_servers => [],
# enable or disable Lutim built-in logs
# set to 1 to disable logs
# optional, default is 0
#quiet_logs => 0,
# Content-Security-Policy header that will be sent by Lstu
# Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP.
# https://report-uri.com/home/generate provides a tool to generate a CSP header.
# optional, default is "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# NB: unsafe-inline for script-src and style-src are here only because morris,
# the graph library used in the stats page requires it
# the default value is good for `default` theme
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'",
# X-Frame-Options header that will be sent by Lstu
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
# Set to '' to disable X-Frame-Options header
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Frame-Options
# Please note that this will add a "frame-ancestors" directive to the CSP header (see above) accordingly
# to the chosen setting (See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/Content-Security-Policy/frame-ancestors)
# optional, default is 'DENY'
#x_frame_options => 'DENY',
# X-Content-Type-Options that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-Content-Type-Options
# Set to '' to disable X-Content-Type-Options header
# optional, default is 'nosniff'
#x_content_type_options => 'nosniff',
# X-XSS-Protection that will be sent by Lstu
# See https://developer.mozilla.org/en-US/docs/Web/HTTP/Headers/X-XSS-Protection
# Set to '' to disable X-XSS-Protection header
# optional, default is '1; mode=block'
#x_xss_protection => '1; mode=block',
##########################
# Lutim cron jobs settings
##########################

View File

@@ -9,6 +9,7 @@ use Test::Mojo;
use FindBin qw($Bin);
use Digest::file qw(digest_file_hex);
use IO::Uncompress::Unzip qw($UnzipError);
my ($m, $cfile);
@@ -26,19 +27,56 @@ BEGIN {
{
file => $cfile->to_abs->to_string,
default => {
dbtype => 'sqlite'
provisioning => 100,
provis_step => 5,
length => 8,
always_encrypt => 0,
anti_flood_delay => 5,
max_file_size => 10*1024*1024,
https => 0,
proposed_delays => '0,1,7,30,365',
default_delay => 0,
max_delay => 0,
token_length => 24,
crypto_key_length => 8,
thumbnail_size => 100,
theme => 'default',
dbtype => 'sqlite',
db_path => 'lutim.db',
max_files_in_zip => 15,
prefix => '/',
minion => {
enabled => 0,
dbtype => 'sqlite',
db_path => 'minion.db'
},
cache_max_size => 0,
memcached_servers => [],
quiet_logs => 0,
disable_img_stats => 0,
x_frame_options => 'DENY',
x_content_type_options => 'nosniff',
x_xss_protection => '1; mode=block',
}
}
);
$m->plugin('Lutim::Plugin::Helpers');
$m->plugin('DebugDumperHelper');
}
# Home page
my $t = Test::Mojo->new('Lutim');
$t->get_ok('/')
->status_is(200)
->content_like(qr/Let's Upload That IMage/i);
->content_like(qr/Let's Upload That IMage/i)
->header_is('Content-Security-Policy' => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' data:; script-src 'self' 'unsafe-eval'; style-src 'self' 'unsafe-inline'")
->header_is('X-Frame-Options' => 'DENY')
->header_is('X-XSS-Protection' => '1; mode=block')
->header_is('X-Content-Type-Options' => 'nosniff');
# Gzip static assets
$t->get_ok('/css/lutim.css')
->status_is(200)
->header_is(Vary => 'Accept-Encoding');
# Instance settings informations
$t->get_ok('/infos')
@@ -50,7 +88,8 @@ $t->get_ok('/infos')
'/contact' => 'John Doe, admin[at]example.com',
'/default_delay' => 30,
'/max_delay' => 200,
'/max_file_size' => 1048576
'/max_file_size' => 1048576,
'/upload_enabled' => true
);
# Post image
@@ -71,6 +110,26 @@ $t->get_ok('/'.$short)
$t->get_ok('/'.$short)
->status_is(302);
# Get zip file and test it
$t->get_ok('/zip?i='.$short)
->status_is(200)
->header_is('Content-Disposition' => 'attachment;filename=images.zip');
my $zip = $t->ua->get('/zip?i='.$short)->res->body;
my $u = new IO::Uncompress::Unzip \$zip
or die "Cannot open zip file: $UnzipError";
my $status;
my @files = qw(hosted_with_lutim.png images/ images/Lutim.png.txt);
for ($status = 1; $status > 0; $status = $u->nextStream()) {
my $name = $u->getHeaderInfo()->{Name};
is($name, shift(@files));
my $buff;
while (($status = $u->read($buff)) > 0) {
}
last if $status < 0;
}
# Delete image with token
$raw = $t->ua->post('/' => form => { file => { file => $image }, format => 'json' })->res;
my $rshort = $raw->json('/msg/real_short');

View File

@@ -4,6 +4,7 @@
#
# Translators:
# ButterflyOfFire <butterflyoffire@protonmail.com>, ٢٠١٨, 2018.
# ButterflyOfFire <butterflyoffire@protonmail.com>, 2018. #zanata
# Luc Didry <luc@framasoft.org>, 2018. #zanata
msgid ""
msgstr ""
@@ -12,20 +13,20 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-01-30 01:11+0000\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Arabic <butterflyoffire+lutim@protonmail.com>\n"
"Language: ar\n"
"Plural-Forms: nplurals=6; plural=(n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 "
"&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5);\n"
"n%100<=10 ? 3: n%100>=11 ? 4 : 5);\n"
"X-Generator: Zanata 4.3.3\n"
"X-Generator: Zanata 4.5.0\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 أيام"
@@ -34,31 +35,31 @@ msgstr "%1 أيام"
msgid "%1 sent images on this instance from beginning."
msgstr "تم إرسال %1 صورة على مثيل الخادوم هذا منذ البداية."
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-أو-"
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "سنة واحدة"
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 ساعة"
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr ": طرأ هناك خطأ أثناء محاولة إستعادة العداد."
#: themes/default/templates/partial/navbar.html.ep:75
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr "عن البرنامج"
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr "الصور النشطة"
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "طرأ هناك خطأ أثناء عملية تنزيل الصورة."
@@ -66,31 +67,39 @@ msgstr "طرأ هناك خطأ أثناء عملية تنزيل الصورة."
msgid "Archives download"
msgstr "تنزيل الأرشيف"
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "العودة إلى الصفحة الرئيسية"
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "إضغط لفتح مدير الملفات"
#: themes/default/templates/gallery.html.ep:26
msgid "Close (Esc)"
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr ""
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr "إغلاق (Esc)"
#: themes/default/templates/about.html.ep:30
msgid "Contributors"
msgstr "المساهمون"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:269 themes/default/templates/partial/lutim.js.ep:347
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "أنسخ كافة روابط العرض إلى الحافظة"
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:105 themes/default/templates/partial/lutim.js.ep:120 themes/default/templates/partial/lutim.js.ep:79 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "أنسخ إلى الحافظة"
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "العداد"
@@ -102,35 +111,35 @@ msgstr ""
msgid "Delay repartition chart for enabled images"
msgstr ""
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:160
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "هل تود حذف الصورة مباشرة بعد أول عرض ؟"
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "الصور المحذوفة"
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr "الصور المحذوفة منذ 30 يوما"
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "رابط الحذف"
#: themes/default/templates/gallery.html.ep:6
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "تنزيل كافة الصور"
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:101 themes/default/templates/partial/lutim.js.ep:97
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "رابط التنزيل"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "رابط التنزيل كحزمة مضغوطة"
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "إسحب ثم القي الصور هنا"
@@ -146,11 +155,11 @@ msgstr ""
"آخر لتنزيل الصورة مباشرة و آخر يمكنكم إستخدامه على شبكات التواصل الإجتماعي و "
"أخيرا رابط آخر يمكّنكم من حذف الصورة إن شئتم."
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "قم بتعمية و تشفير الصورة (لوتان Lutim لا يحتفظ بالمفتاح)."
#: themes/default/templates/partial/lutim.js.ep:44
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "طرأ هناك خطأ أثناء عملية تعديل الصورة."
@@ -158,11 +167,15 @@ msgstr "طرأ هناك خطأ أثناء عملية تعديل الصورة."
msgid "Evolution of total files"
msgstr "تطور العدد الإجمالي للملفات"
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "تنتهي مدة صلاحيتها في"
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr ""
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "إسم الملف"
@@ -174,19 +187,19 @@ msgstr ""
"للمزيد من التفاصيل، قم بزيارة <a href=\"https://framagit.org/luc/"
"lutim\">الصفحة الرئيسة للمشروع</a>."
#: themes/default/templates/partial/navbar.html.ep:78
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "قم بتشعيبي !"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "رابط المعرض"
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "إضغط على CTRL+C ثم على مفتاح الإدخال للقيام بنسخ الرابط القصير"
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "الصفحة الرئيسية"
@@ -210,27 +223,35 @@ msgstr ""
"إذا تم حذف الملفات و إن قمت بطلب ذلك أثناء الإرسال سوف نقوم بالإحتفاظ ببصمات "
"SHA512 الخاصة بالصور."
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "رابط الصورة"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr "تأجيل الصورة"
#: lib/Lutim/Controller.pm:752
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr ""
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "الصورة غير موجودة."
#: themes/default/templates/partial/navbar.html.ep:67
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "معلومات"
#: themes/default/templates/partial/navbar.html.ep:31
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "نتصيب برنامج الويب"
#: themes/default/templates/partial/navbar.html.ep:27
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr "إحصائيات مثيل الخادوم"
@@ -250,26 +271,34 @@ msgstr ""
"يُنطق مِثل الكلمة الفرنسية <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "الإبقاء على بيانات EXIF"
#: themes/default/templates/partial/navbar.html.ep:38
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr ""
msgstr "اللغة"
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:164
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "هيا بنا !"
#: themes/default/templates/partial/navbar.html.ep:72
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "الرخصة :"
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:111 themes/default/templates/partial/lutim.js.ep:115
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "رابط للمشاركة على شبكات التواصل الإجتماعي"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr ""
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
@@ -287,29 +316,33 @@ msgstr ""
#: themes/default/templates/about.html.ep:25
msgid "Main developers"
msgstr ""
msgstr "المطورون الرئيسيون"
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:85 themes/default/templates/partial/lutim.js.ep:88
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr ""
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:24
msgid "My images"
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr ""
#: themes/default/templates/gallery.html.ep:42
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "صوري"
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr ""
msgstr "غير محدود"
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr ""
msgstr "لا يُسمح إلّا بإستضافة الصور"
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
@@ -322,6 +355,10 @@ msgid ""
"before the upload)"
msgstr ""
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr ""
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
@@ -329,50 +366,58 @@ msgstr ""
#. (config('contact')
#: themes/default/templates/about.html.ep:19
msgid "Please contact the administrator: %1"
msgstr "يرجى الإتصال بالمدير : %1"
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr ""
#: themes/default/templates/gallery.html.ep:40
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr ""
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr ""
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr "الإحصائيات الخامة"
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr ""
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "إرسال صورة"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:20
msgid "Share it!"
msgstr ""
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/lutim.js.ep:175
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr ""
msgstr "طرأ هناك خلل"
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:759
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:50
msgid "Support the author"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:58
msgid "Support the author on Liberapay"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author on Tipeee"
msgstr ""
msgid "Support the author"
msgstr "ساند مؤلف البرنامج"
#: themes/default/templates/partial/navbar.html.ep:61
msgid "Support the author with bitcoins"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr "ساند المؤلف عبر ليبراباي"
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr "ساند المؤلف عبر تيبي"
#: themes/default/templates/about.html.ep:13
msgid ""
@@ -389,7 +434,7 @@ msgid ""
"licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
msgstr ""
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr ""
@@ -399,19 +444,23 @@ msgid ""
" You need to allow popups for Lutim."
msgstr ""
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr ""
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr ""
#. ($upload->filename)
#: lib/Lutim/Controller.pm:485
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr ""
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:241
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr ""
@@ -420,20 +469,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr ""
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr ""
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr ""
@@ -443,39 +492,47 @@ msgid ""
"first view or after a delay selected from those proposed."
msgstr ""
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:482
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:14
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr ""
msgstr "العدد الإجمالي"
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:14
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "غرِّد الرابط"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr ""
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr ""
msgstr "تعذر العثور على الصورة %1."
#: lib/Lutim/Controller.pm:571 lib/Lutim/Controller.pm:616 lib/Lutim/Controller.pm:658 lib/Lutim/Controller.pm:701 lib/Lutim/Controller.pm:713 lib/Lutim/Controller.pm:724 lib/Lutim/Controller.pm:749 lib/Lutim/Plugin/Helpers.pm:57
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr ""
msgstr "تعذر العثور على الصورة : لقد تم حذفها."
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr ""
msgstr "تعذر جلب التعداد"
#: themes/default/templates/about.html.ep:17
msgid ""
@@ -483,28 +540,28 @@ msgid ""
"images."
msgstr ""
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr ""
msgstr "القيام برفع صورة بواسطة رابطها"
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr ""
msgstr "تم رفعها على"
#: themes/default/templates/stats.html.ep:6
msgid "Uploaded files by days"
msgstr ""
msgstr "الملفات المستضافة بحسب الأيام"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:156
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
msgstr ""
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:71 themes/default/templates/partial/lutim.js.ep:75
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr ""
msgstr "عرض الرابط"
#: themes/default/templates/about.html.ep:22
msgid "What about the software which provides the service?"
@@ -512,11 +569,11 @@ msgstr ""
#: themes/default/templates/about.html.ep:3
msgid "What is Lutim?"
msgstr ""
msgstr "ماذا نقصد بـ Lutim ؟"
#: themes/default/templates/about.html.ep:15
msgid "Who owns rights on images uploaded on Lutim?"
msgstr ""
msgstr "من يمتلك حق ملكية الصور المستضافة على Lutim ؟"
#: themes/default/templates/about.html.ep:12
msgid ""
@@ -542,29 +599,37 @@ msgid ""
"at first view (or download) or after the delay selected from those proposed."
msgstr ""
#: themes/default/templates/gallery.html.ep:28
msgid "Zoom in/out"
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr ""
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr ""
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr "تكبير/تصغير"
#: themes/default/templates/about.html.ep:27
msgid "and on"
msgstr ""
#: themes/default/templates/about.html.ep:40
msgid "arabic translation"
msgstr ""
msgstr "الترجمة إلى العربية"
#: themes/default/templates/about.html.ep:27
msgid "core developer"
msgstr ""
msgstr "المطور الرئيسي"
#: lib/Lutim.pm:184 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr ""
#: themes/default/templates/about.html.ep:38
msgid "occitan translation"
msgstr ""
msgstr "الترجمة إلى الأوكستانية"
#: themes/default/templates/about.html.ep:27
msgid "on"
@@ -574,10 +639,14 @@ msgstr ""
msgid "paste image to upload ability"
msgstr ""
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr "الترجمة إلى الروسية"
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr ""
msgstr "الترجمة إلى الإسبانية"
#: themes/default/templates/about.html.ep:28
msgid "webapp developer"
msgstr ""
msgstr "مطور تطبيق الويب"

View File

@@ -13,18 +13,18 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-03-03 05:32+0000\n"
"Last-Translator: Luc Didry <luc@framasoft.org>\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: German (http://www.transifex.com/fiat-tux/lutim/language/de/)\n"
"Language: de\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.3.3\n"
"X-Generator: Zanata 4.5.0\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 Tage"
@@ -33,31 +33,31 @@ msgstr "%1 Tage"
msgid "%1 sent images on this instance from beginning."
msgstr "%1 Bilder wurden bisher über diese Instanz versendet."
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-oder-"
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 Jahr"
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 Stunden"
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr ":Fehler beim Abrufen des Zählers."
#: themes/default/templates/partial/navbar.html.ep:75
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr ""
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "Beim Herunterladen des Bildes ist ein Fehler aufgetreten."
@@ -65,31 +65,39 @@ msgstr "Beim Herunterladen des Bildes ist ein Fehler aufgetreten."
msgid "Archives download"
msgstr ""
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Zurück zur Hauptseite"
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Klicken um den Dateibrowser zu öffnen"
#: themes/default/templates/gallery.html.ep:26
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr "Schließen"
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr ""
msgstr "Schließen (Esc)"
#: themes/default/templates/about.html.ep:30
msgid "Contributors"
msgstr "Mitwirkende"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:269 themes/default/templates/partial/lutim.js.ep:347
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Alle Links zum Anschauen in die Zwischenablage kopieren"
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:105 themes/default/templates/partial/lutim.js.ep:120 themes/default/templates/partial/lutim.js.ep:79 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "In die Zwischenablage kopieren"
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Zähler"
@@ -101,35 +109,35 @@ msgstr ""
msgid "Delay repartition chart for enabled images"
msgstr ""
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:160
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "Nach erstem Aufruf löschen?"
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr ""
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Link zum Löschen"
#: themes/default/templates/gallery.html.ep:6
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Laden Sie alle Bilder"
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:101 themes/default/templates/partial/lutim.js.ep:97
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Link zum Herunterladen"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Link zum Archivbilder"
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Bilder hierher ziehen"
@@ -144,11 +152,11 @@ msgstr ""
"generieren. Eine zum Anschauen, eine zum direkten Herunterladen, eine zum "
"Nutzen in sozialen Netzwerken und eine letzte um das Bild zu löschen."
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Verschlüssle das Bild (Lutim behält den Key nicht)"
#: themes/default/templates/partial/lutim.js.ep:44
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Beim bearbeiten des Bildes ist ein Fehler aufgetreten."
@@ -156,11 +164,15 @@ msgstr "Beim bearbeiten des Bildes ist ein Fehler aufgetreten."
msgid "Evolution of total files"
msgstr "Entwicklung der Anzahl an Dateien"
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "Läuft ab am"
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr ""
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "Dateiname"
@@ -172,19 +184,19 @@ msgstr ""
"Besuche für mehr Details die <a href=\"https://framagit.org/luc/"
"lutim\">Homepage des Projekts</a>."
#: themes/default/templates/partial/navbar.html.ep:78
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "Fork me!"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Link zur Galerie"
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Drücke STRG+C und dann Enter um den Kurz-Link zu kopieren."
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Webseite"
@@ -208,27 +220,35 @@ msgstr ""
"Wenn du versuchst, ein Bild während dem Hochladen zu löschen, wird die "
"SHA512-Summe des Bildes behalten."
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "Bild-URL"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr ""
#: lib/Lutim/Controller.pm:752
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr ""
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "Bild nicht gefunden"
#: themes/default/templates/partial/navbar.html.ep:67
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Informationen"
#: themes/default/templates/partial/navbar.html.ep:31
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Installiere die Webapp"
#: themes/default/templates/partial/navbar.html.ep:27
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr ""
@@ -248,26 +268,34 @@ msgstr ""
"Genauso wie das französische Wort <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "Behalte EXIF-Daten"
#: themes/default/templates/partial/navbar.html.ep:38
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr ""
msgstr "Sprache"
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:164
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "Los gehts!"
#: themes/default/templates/partial/navbar.html.ep:72
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "Lizenz:"
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:111 themes/default/templates/partial/lutim.js.ep:115
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Links zum teilen auf sozialen Netzwerken"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr "Login"
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr "Ausloggen"
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
@@ -287,27 +315,31 @@ msgstr ""
msgid "Main developers"
msgstr "Haupt-Entwickler"
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:85 themes/default/templates/partial/lutim.js.ep:88
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Markdown Syntax"
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:24
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr ""
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "Meine Bilder"
#: themes/default/templates/gallery.html.ep:42
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "Keine Begrenzung"
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Es sind nur Bilder erlaubt"
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
@@ -325,6 +357,10 @@ msgstr ""
"Nur der Hochladende (natürlich nur, wenn er vorher auch Rechteinhaber des "
"Bildes war)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr "Passwort"
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
@@ -334,28 +370,40 @@ msgstr ""
msgid "Please contact the administrator: %1"
msgstr "Kontaktiere den Administrator: %1"
#: themes/default/templates/gallery.html.ep:40
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr ""
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr ""
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr ""
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr ""
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr ""
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Sende ein Bild"
#: themes/default/templates/partial/lutim.js.ep:20
msgid "Share it!"
msgstr "Teile es!"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr "Einloggen"
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/lutim.js.ep:175
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Es ist ein Fehler aufgetreten"
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:759
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
@@ -363,22 +411,18 @@ msgstr ""
"Es ist ein Fehler aufgetreten. Versuche es erneut oder kontaktiere den "
"Administrator (%1)."
#: themes/default/templates/partial/navbar.html.ep:50
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:58
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:55
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:61
msgid "Support the author with bitcoins"
msgstr ""
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
@@ -401,7 +445,7 @@ msgstr ""
"Server zu installieren. Schau dir die <a href=\"https://www.gnu.org/licenses/"
"agpl-3.0.html\">AGPL</a> an um deine Recht zu sehen."
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "Die URL ist nicht gültig."
@@ -411,19 +455,23 @@ msgid ""
" You need to allow popups for Lutim."
msgstr ""
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr ""
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "Das Token zum Löschen ist ungültig."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:485
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "Die Datei %1 ist kein Bild."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:241
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "Die Datei überschreitet die Größenbeschränkung (%1)"
@@ -432,20 +480,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr "Die Daten des Graphs werden nicht in Echtzeit aktualisiert."
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "Das Bild %1 wurde schon gelöscht."
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "Das Bild %1 wurde erfolgreich gelöscht."
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr "Die Zeit bis zum Löschen des Bildes wurde erfolgreich geändert."
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr ""
"Die Bilder werden auf dem Server verschlüsselt (Lutim behält den Key nicht)"
@@ -458,39 +506,47 @@ msgstr ""
"Die Bilder, die du auf Lutim hochlädst, können entweder nie, nach dem ersten "
"Aufruf oder nach einer bestimmten Zeit gelöscht werden."
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:482
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
"Es sind keine URLs mehr verfügbar. Versuche es erneut oder kontaktiere den "
"Administrator. %1"
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:14
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr ""
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:14
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "Twittere es!"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr ""
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr "Konnte das Bild %1 nicht finden."
#: lib/Lutim/Controller.pm:571 lib/Lutim/Controller.pm:616 lib/Lutim/Controller.pm:658 lib/Lutim/Controller.pm:701 lib/Lutim/Controller.pm:713 lib/Lutim/Controller.pm:724 lib/Lutim/Controller.pm:749 lib/Lutim/Plugin/Helpers.pm:57
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr "Dieses Bild wurde gelöscht."
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr "Konnte den Zähler nicht abrufen"
@@ -502,11 +558,11 @@ msgstr ""
"Im Gegensatz zu anderen Bild-Hosting-Diensten, überträgst du uns nicht die "
"Rechte an hochgeladenen Bildern."
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr "Lade ein Bild über seine URL hoch"
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr "Hochgeladen am"
@@ -515,7 +571,7 @@ msgid "Uploaded files by days"
msgstr "Hochgeladene Bilder pro Tag"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:156
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
@@ -523,7 +579,7 @@ msgstr ""
"Hochladen ist momentan deaktiviert. Versuche es später erneut oder "
"kontaktiere den Administrator (%1)."
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:71 themes/default/templates/partial/lutim.js.ep:75
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr "Link ansehen"
@@ -572,7 +628,15 @@ msgstr ""
"Ansehen (oder Herunterladen) oder nach einem der vorgeschlagenen Zeiten "
"löschen lassen."
#: themes/default/templates/gallery.html.ep:28
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr ""
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr ""
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr ""
@@ -588,7 +652,7 @@ msgstr ""
msgid "core developer"
msgstr "Haupt-Entwickler"
#: lib/Lutim.pm:184 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "keine Zeit-Begrenzung"
@@ -604,6 +668,10 @@ msgstr "auf"
msgid "paste image to upload ability"
msgstr ""
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr "russische Übersetzung"
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr "spanische Übersetzung"

View File

@@ -6,18 +6,18 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-03-03 05:32+0000\n"
"Last-Translator: Luc Didry <luc@framasoft.org>\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: English\n"
"Language: en\n"
"X-Generator: Zanata 4.3.3\n"
"X-Generator: Zanata 4.5.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 days"
@@ -26,31 +26,31 @@ msgstr "%1 days"
msgid "%1 sent images on this instance from beginning."
msgstr "%1 sent images on this instance from beginning."
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-or-"
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 year"
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 hours"
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr ": Error while trying to get the counter."
#: themes/default/templates/partial/navbar.html.ep:75
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr "About"
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr "Active images"
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "An error occured while downloading the image."
@@ -58,15 +58,19 @@ msgstr "An error occured while downloading the image."
msgid "Archives download"
msgstr "Archives download"
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Back to homepage"
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Click to open the file browser"
#: themes/default/templates/gallery.html.ep:26
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr "Close"
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr "Close (Esc)"
@@ -74,15 +78,19 @@ msgstr "Close (Esc)"
msgid "Contributors"
msgstr "Contributors"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:269 themes/default/templates/partial/lutim.js.ep:347
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr "Copied to clipboard"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Copy all view links to clipboard"
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:105 themes/default/templates/partial/lutim.js.ep:120 themes/default/templates/partial/lutim.js.ep:79 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "Copy to clipboard"
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Counter"
@@ -94,35 +102,35 @@ msgstr "Delay repartition chart for disabled images"
msgid "Delay repartition chart for enabled images"
msgstr "Delay repartition chart for enabled images"
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:160
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "Delete at first view?"
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "Deleted images"
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr "Deleted images in 30 days"
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Deletion link"
#: themes/default/templates/gallery.html.ep:6
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Download all images"
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:101 themes/default/templates/partial/lutim.js.ep:97
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Download link"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Download zip link"
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Drag & drop images here"
@@ -138,11 +146,11 @@ msgstr ""
"other to directly download it, one you can use on social networks and a last "
"to delete the image when you want."
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Encrypt the image (Lutim does not keep the key)."
#: themes/default/templates/partial/lutim.js.ep:44
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Error while trying to modify the image."
@@ -150,11 +158,15 @@ msgstr "Error while trying to modify the image."
msgid "Evolution of total files"
msgstr "Evolution of total files"
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "Expires at"
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr "Export localStorage data"
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "File name"
@@ -166,19 +178,19 @@ msgstr ""
"For more details, see the <a href=\"https://framagit.org/luc/"
"lutim\">homepage of the project</a>."
#: themes/default/templates/partial/navbar.html.ep:78
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "Fork me!"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Gallery link"
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Hit Ctrl+C, then Enter to copy the short link"
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Homepage"
@@ -202,27 +214,35 @@ msgstr ""
"If the files are deleted if you ask it while posting it, their SHA512 "
"footprint are retained."
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "Image URL"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr "Image delay"
#: lib/Lutim/Controller.pm:752
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr "Image deleted"
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "Image not found."
#: themes/default/templates/partial/navbar.html.ep:67
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr "Import localStorage data"
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Informations"
#: themes/default/templates/partial/navbar.html.ep:31
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Install webapp"
#: themes/default/templates/partial/navbar.html.ep:27
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr "Instance's statistics"
@@ -242,26 +262,34 @@ msgstr ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "Keep EXIF tags"
#: themes/default/templates/partial/navbar.html.ep:38
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr "Language"
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:164
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "Let's go!"
#: themes/default/templates/partial/navbar.html.ep:72
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "License:"
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:111 themes/default/templates/partial/lutim.js.ep:115
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Link for share on social networks"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr "Login"
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr "Logout"
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
@@ -284,27 +312,31 @@ msgstr ""
msgid "Main developers"
msgstr "Main developers"
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:85 themes/default/templates/partial/lutim.js.ep:88
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Markdown syntax"
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:24
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr "Modify expiration delay"
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "My images"
#: themes/default/templates/gallery.html.ep:42
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr "Next (arrow right)"
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "No limit"
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Only images are allowed"
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
@@ -322,6 +354,10 @@ msgstr ""
"Only the uploader! (well, only if he's the only owner of the images' rights "
"before the upload)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr "Password"
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr "Please click on each URL to download the different zip files."
@@ -331,28 +367,40 @@ msgstr "Please click on each URL to download the different zip files."
msgid "Please contact the administrator: %1"
msgstr "Please contact the administrator: %1"
#: themes/default/templates/gallery.html.ep:40
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr "Please, check your credentials: unable to authenticate."
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr "Previous (arrow left)"
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr "Random image link"
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr "Raw stats"
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr "Save changes"
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Send an image"
#: themes/default/templates/partial/lutim.js.ep:20
msgid "Share it!"
msgstr "Share it!"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr "Signin"
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/lutim.js.ep:175
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Something bad happened"
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:759
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
@@ -360,22 +408,18 @@ msgstr ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
#: themes/default/templates/partial/navbar.html.ep:50
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr "Support the author"
#: themes/default/templates/partial/navbar.html.ep:58
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr "Support the author on Liberapay"
#: themes/default/templates/partial/navbar.html.ep:55
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr "Support the author on Tipeee"
#: themes/default/templates/partial/navbar.html.ep:61
msgid "Support the author with bitcoins"
msgstr "Support the author with bitcoins"
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
@@ -398,7 +442,7 @@ msgstr ""
"it on you own server. Have a look at the <a href=\"https://www.gnu.org/"
"licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "The URL is not valid."
@@ -410,19 +454,23 @@ msgstr ""
"The automatic download process will open a tab in your browser for each link."
" You need to allow popups for Lutim."
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr "The data has been successfully imported."
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "The delete token is invalid."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:485
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "The file %1 is not an image."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:241
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "The file exceed the size limit (%1)"
@@ -431,20 +479,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr "The graph's datas are not updated in real-time."
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "The image %1 has already been deleted."
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "The image %1 has been successfully deleted"
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr "The image's delay has been successfully modified"
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr "The images are encrypted on the server (Lutim does not keep the key)."
@@ -456,38 +504,46 @@ msgstr ""
"The images you post on Lutim can be stored indefinitely or be deleted at "
"first view or after a delay selected from those proposed."
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr "There is XXXX image(s) in the gallery"
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:482
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
"There is no more available URL. Retry or contact the administrator. %1"
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr "Toggle fullscreen"
#: themes/default/templates/partial/navbar.html.ep:14
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr "Toggle navigation"
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr "Total"
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:14
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "Tweet it!"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr "Unable to copy to clipboard"
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr "Unable to find the image %1."
#: lib/Lutim/Controller.pm:571 lib/Lutim/Controller.pm:616 lib/Lutim/Controller.pm:658 lib/Lutim/Controller.pm:701 lib/Lutim/Controller.pm:713 lib/Lutim/Controller.pm:724 lib/Lutim/Controller.pm:749 lib/Lutim/Plugin/Helpers.pm:57
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr "Unable to find the image: it has been deleted."
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr "Unable to get counter"
@@ -499,11 +555,11 @@ msgstr ""
"Unlike many image sharing services, you don't give us rights on uploaded "
"images."
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr "Upload an image with its URL"
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr "Uploaded at"
@@ -512,7 +568,7 @@ msgid "Uploaded files by days"
msgstr "Uploaded files by days"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:156
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
@@ -520,7 +576,7 @@ msgstr ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:71 themes/default/templates/partial/lutim.js.ep:75
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr "View link"
@@ -568,7 +624,15 @@ msgstr ""
"You can, optionally, request that the image(s) posted on Lutim to be deleted "
"at first view (or download) or after the delay selected from those proposed."
#: themes/default/templates/gallery.html.ep:28
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr "You have been successfully logged in."
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr "You have been successfully logged out."
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr "Zoom in/out"
@@ -584,7 +648,7 @@ msgstr "arabic translation"
msgid "core developer"
msgstr "core developer"
#: lib/Lutim.pm:184 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "no time limit"
@@ -600,6 +664,10 @@ msgstr "on"
msgid "paste image to upload ability"
msgstr "paste image to upload ability"
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr "russian translation"
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr "spanish translation"

View File

@@ -13,19 +13,19 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-03-03 05:33+0000\n"
"Last-Translator: Luc Didry <luc@framasoft.org>\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Spanish (http://www.transifex.com/fiat-tux/lutim/language/es/"
")\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.3.3\n"
"X-Generator: Zanata 4.5.0\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 días"
@@ -34,31 +34,31 @@ msgstr "%1 días"
msgid "%1 sent images on this instance from beginning."
msgstr "%1 imágenes enviadas a esta instancia desde el inicio."
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-o-"
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 año"
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 horas"
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr ": Error al intentar obtener el contador."
#: themes/default/templates/partial/navbar.html.ep:75
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr ""
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "Error al intentar modificar la imagen."
@@ -66,31 +66,39 @@ msgstr "Error al intentar modificar la imagen."
msgid "Archives download"
msgstr ""
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Volver a la página inicial"
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Clic para abrir el explorador de archivos"
#: themes/default/templates/gallery.html.ep:26
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr "Cerrar"
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr ""
msgstr "Cerrar (Esc)"
#: themes/default/templates/about.html.ep:30
msgid "Contributors"
msgstr "Contribuidores"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:269 themes/default/templates/partial/lutim.js.ep:347
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Copiar todos los enlaces de visualización al portapapeles"
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:105 themes/default/templates/partial/lutim.js.ep:120 themes/default/templates/partial/lutim.js.ep:79 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "Copiar al portapapeles"
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Contador"
@@ -102,35 +110,35 @@ msgstr ""
msgid "Delay repartition chart for enabled images"
msgstr ""
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:160
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "¿Borrar en la primera vista?"
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr ""
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Enlace para borrar"
#: themes/default/templates/gallery.html.ep:6
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Descargar todas las imágenes"
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:101 themes/default/templates/partial/lutim.js.ep:97
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Enlace de descarga"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Enlace de descarga del archivo de las imágenes"
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Arrastre y suelte imágenes aquí"
@@ -146,11 +154,11 @@ msgstr ""
"para ver la imagen, otra para descargarla directamente, una que upede usar "
"en redes sociales, y una última para borrar la imagen cuando lo desee."
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Las imágenes se cifran en el servidor (Lutim no guarda la clave)."
#: themes/default/templates/partial/lutim.js.ep:44
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Error al intentar modificar la imagen."
@@ -158,11 +166,15 @@ msgstr "Error al intentar modificar la imagen."
msgid "Evolution of total files"
msgstr "Evolución de archivos en total"
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "Expira"
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr ""
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "Nombre de archivo"
@@ -174,19 +186,19 @@ msgstr ""
"Para más detalles, vea la <a href=\"https://framagit.org/luc/lutim\">página "
"del proyecto</a>."
#: themes/default/templates/partial/navbar.html.ep:78
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "¡Clóname!"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Enlace a la galería"
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Presione Ctrl + C, entonces Ingresar para copiar el enlace"
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Página inicial"
@@ -210,27 +222,35 @@ msgstr ""
"Si los ficheros se borran por haberlo solicitado al enviarlos, se retiene su "
"huella digital SHA512."
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "URL de la imagen"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr ""
#: lib/Lutim/Controller.pm:752
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr ""
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "Imagen no encontrada."
#: themes/default/templates/partial/navbar.html.ep:67
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Informaciones"
#: themes/default/templates/partial/navbar.html.ep:31
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Instalar webapp"
#: themes/default/templates/partial/navbar.html.ep:27
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr ""
@@ -250,26 +270,34 @@ msgstr ""
"Tal y como se pronuncia la palabra francesa <a href=\"https://fr.wikipedia."
"org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "Mantener las etiquetas EXIF"
#: themes/default/templates/partial/navbar.html.ep:38
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr ""
msgstr "Lengua"
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:164
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "¡Vamos allá!"
#: themes/default/templates/partial/navbar.html.ep:72
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "Licencia:"
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:111 themes/default/templates/partial/lutim.js.ep:115
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Enlace para compartir en redes sociales"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr "Login"
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr "Salir"
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
@@ -289,27 +317,31 @@ msgstr ""
msgid "Main developers"
msgstr "Desarrolladores principales"
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:85 themes/default/templates/partial/lutim.js.ep:88
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Sintaxis de Markdown"
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:24
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr ""
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "Mis Imágenes"
#: themes/default/templates/gallery.html.ep:42
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "Sin fecha de caducidad"
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Sólo se admiten imágenes"
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
@@ -327,6 +359,10 @@ msgstr ""
"¡Sólo el usuario! (bueno, sólo si él/ela es el único titular de los derechos "
"de las imágenes antes de subirlas)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr "Contraseña"
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
@@ -336,28 +372,40 @@ msgstr ""
msgid "Please contact the administrator: %1"
msgstr "Por favor, contacte con el administrador: %1"
#: themes/default/templates/gallery.html.ep:40
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr ""
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr ""
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr ""
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr ""
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr "Guardar los cambios"
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Enviar una imagen"
#: themes/default/templates/partial/lutim.js.ep:20
msgid "Share it!"
msgstr "¡Compártelo!"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr ""
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/lutim.js.ep:175
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Algo malo ha pasado"
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:759
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
@@ -365,22 +413,18 @@ msgstr ""
"Algo malo ha pasado. Inténtelo de nuevo más tarde o contacte con el "
"administrador (%1)."
#: themes/default/templates/partial/navbar.html.ep:50
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:58
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:55
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:61
msgid "Support the author with bitcoins"
msgstr ""
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
@@ -404,7 +448,7 @@ msgstr ""
"\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> para ver qué puede "
"hacer."
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "La URL no es válida."
@@ -414,19 +458,23 @@ msgid ""
" You need to allow popups for Lutim."
msgstr ""
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr ""
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "El código de borrado no es válido."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:485
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "El archivo %1 no es una imagen."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:241
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "El archivo supera el límite de tamaño (%1)"
@@ -435,20 +483,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr "Los datos del gráfico no se actualizan en tiempo real."
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "La imagen %1 ya se ha borrado."
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "La imagen %1 se ha borrado correctamente"
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr "Se ha modificado correctamente el tiempo de la imagen"
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr "Las imágenes se cifran en el servidor (Lutim no guarda la clave)."
@@ -461,39 +509,47 @@ msgstr ""
"con la primera vista (o descarga) o tras un tiempo seleccionado de entre "
"varios propuestos."
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:482
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
"No más URL disponibles. Inténtelo de nuevo o contacte con el administrador. "
"%1"
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:14
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr ""
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:14
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "¡Tuitéalo!"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr ""
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr "No se ha podido encontrar la imagen %1."
#: lib/Lutim/Controller.pm:571 lib/Lutim/Controller.pm:616 lib/Lutim/Controller.pm:658 lib/Lutim/Controller.pm:701 lib/Lutim/Controller.pm:713 lib/Lutim/Controller.pm:724 lib/Lutim/Controller.pm:749 lib/Lutim/Plugin/Helpers.pm:57
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr "No se ha podido encontrar la imagen: ha sido borrada."
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr "Imposible recuperar el contador"
@@ -505,11 +561,11 @@ msgstr ""
"A diferencia de muchos servicios de compartición de imágenes, usted no cede "
"los derechos de las imágenes que sube."
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr "Subir una imagen con la URL"
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr "Enviado el"
@@ -518,7 +574,7 @@ msgid "Uploaded files by days"
msgstr "Archivos enviados por día"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:156
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
@@ -526,7 +582,7 @@ msgstr ""
"La carga está deshabilitada en estos momentos, por favor inténtelo más tarde "
"o contacte con el administrador (%1)."
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:71 themes/default/templates/partial/lutim.js.ep:75
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr "Enlace de visualización"
@@ -575,7 +631,15 @@ msgstr ""
"con la primera vista (o descarga) o tras un tiempo seleccionado de entre "
"varios propuestos."
#: themes/default/templates/gallery.html.ep:28
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr ""
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr ""
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr ""
@@ -591,7 +655,7 @@ msgstr ""
msgid "core developer"
msgstr "desarrollador principal"
#: lib/Lutim.pm:184 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "Sin tiempo límite"
@@ -607,6 +671,10 @@ msgstr "en"
msgid "paste image to upload ability"
msgstr ""
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr ""
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr "traducción al español"

View File

@@ -13,18 +13,18 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-03-03 05:33+0000\n"
"Last-Translator: Luc Didry <luc@framasoft.org>\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: French (http://www.transifex.com/fiat-tux/lutim/language/fr/)\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 4.3.3\n"
"X-Generator: Zanata 4.5.0\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 jours"
@@ -33,31 +33,31 @@ msgstr "%1 jours"
msgid "%1 sent images on this instance from beginning."
msgstr "%1 images envoyées sur cette instance depuis le début."
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-ou-"
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 an"
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 heures"
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr " : Erreur en essayant de récupérer le compteur."
#: themes/default/templates/partial/navbar.html.ep:75
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr "À propos"
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr "Images actives"
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "Une erreur est survenue lors du téléchargement de limage."
@@ -65,15 +65,19 @@ msgstr "Une erreur est survenue lors du téléchargement de limage."
msgid "Archives download"
msgstr "Téléchargement darchives"
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Retour à la page daccueil"
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Cliquez pour utiliser le navigateur de fichier"
#: themes/default/templates/gallery.html.ep:26
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr "Fermer"
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr "Fermer (Esc)"
@@ -81,15 +85,19 @@ msgstr "Fermer (Esc)"
msgid "Contributors"
msgstr "Contributeurs"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:269 themes/default/templates/partial/lutim.js.ep:347
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr "Copié dans le presse-papier"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Copier tous les liens de visualisation dans le presse-papier"
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:105 themes/default/templates/partial/lutim.js.ep:120 themes/default/templates/partial/lutim.js.ep:79 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier"
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Compteur"
@@ -101,35 +109,35 @@ msgstr "Graphe de répartition des délais pour les images supprimées"
msgid "Delay repartition chart for enabled images"
msgstr "Graphe de répartition des délais pour les images actives"
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:160
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "Supprimer au premier accès ?"
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "Images supprimées"
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr "Images supprimées dans 30 jours"
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Lien de suppression"
#: themes/default/templates/gallery.html.ep:6
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Télécharger toutes les images"
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:101 themes/default/templates/partial/lutim.js.ep:97
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Lien de téléchargement"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Lien de téléchargement de larchive des images"
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Déposez vos images ici"
@@ -146,11 +154,11 @@ msgstr ""
"lutiliser sur les réseaux sociaux et une dernière pour supprimer votre "
"image quand vous le souhaitez"
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Chiffrer limage (Lutim ne stocke pas la clé)."
#: themes/default/templates/partial/lutim.js.ep:44
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Une erreur est survenue en essayant de modifier limage."
@@ -158,11 +166,15 @@ msgstr "Une erreur est survenue en essayant de modifier limage."
msgid "Evolution of total files"
msgstr "Évolution du nombre total de fichiers"
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "Expire le"
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr "Exporter les données localStorage"
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "Nom du fichier"
@@ -174,19 +186,19 @@ msgstr ""
"Pour plus de détails, consultez la page <a href=\"https://framagit.org/luc/"
"lutim\">Github</a> du projet."
#: themes/default/templates/partial/navbar.html.ep:78
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "Créez un fork !"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Lien vers la galerie"
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Faites Ctrl+C puis appuyez sur la touche Entrée pour copier le lien"
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Accueil"
@@ -210,27 +222,35 @@ msgstr ""
"Si les fichiers sont bien supprimés si vous en avez exprimé le choix, leur "
"empreinte SHA512 est toutefois conservée."
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "URL de limage"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr "Durée de rétention de limage"
#: lib/Lutim/Controller.pm:752
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr "Image supprimée"
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "Image non trouvée."
#: themes/default/templates/partial/navbar.html.ep:67
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr "Importer des données localStorage"
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Informations"
#: themes/default/templates/partial/navbar.html.ep:31
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Installer la webapp"
#: themes/default/templates/partial/navbar.html.ep:27
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr "Statistiques de linstance"
@@ -250,26 +270,34 @@ msgstr ""
"Comme on prononce <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> "
"(/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "Conserver les données EXIF"
#: themes/default/templates/partial/navbar.html.ep:38
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr "Langue"
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:164
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "Allons-y !"
#: themes/default/templates/partial/navbar.html.ep:72
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "Licence :"
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:111 themes/default/templates/partial/lutim.js.ep:115
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Lien pour partager sur les réseaux sociaux"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr "Connexion"
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr "Déconnexion"
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
@@ -291,27 +319,31 @@ msgstr ""
msgid "Main developers"
msgstr "Développeurs de lapplication"
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:85 themes/default/templates/partial/lutim.js.ep:88
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Syntaxe Markdown"
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:24
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr "Modifier le délai dexpiration"
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "Mes images"
#: themes/default/templates/gallery.html.ep:42
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr "Suivant (flêche droite)"
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "Pas de date dexpiration"
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Seules les images sont acceptées"
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
@@ -329,6 +361,10 @@ msgstr ""
"Seulement lenvoyeur ! (enfin, seulement sil possède des droits exclusifs "
"sur les images avant de les envoyer)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr "Mot de passe"
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
@@ -340,28 +376,40 @@ msgstr ""
msgid "Please contact the administrator: %1"
msgstr "Veuillez contacter ladministrateur : %1"
#: themes/default/templates/gallery.html.ep:40
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr "Veuillez vérifier vos identifiants : impossible de vous authentifier."
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr "Précédent (flêche gauche)"
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr "Lien vers une image aléatoire"
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr "Statistiques brutes"
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr "Enregistrer les modifications"
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Envoyer une image"
#: themes/default/templates/partial/lutim.js.ep:20
msgid "Share it!"
msgstr "Partagez !"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr "Connexion"
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/lutim.js.ep:175
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Un problème est survenu"
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:759
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
@@ -369,22 +417,18 @@ msgstr ""
"Quelque chose sest mal passé lors de la création de larchive. Veuillez "
"réessayer plus tard ou contactez ladministrateur (%1)."
#: themes/default/templates/partial/navbar.html.ep:50
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr "Supportez lauteur"
#: themes/default/templates/partial/navbar.html.ep:58
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr "Supporter lauteur sur Liberapay"
#: themes/default/templates/partial/navbar.html.ep:55
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr "Supporter lauteur sur Tipeee"
#: themes/default/templates/partial/navbar.html.ep:61
msgid "Support the author with bitcoins"
msgstr "Supporter lauteur avec des bitcoins"
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
@@ -409,7 +453,7 @@ msgstr ""
"\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> pour voir quels sont "
"vos droits"
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "LURL nest pas valide."
@@ -422,19 +466,23 @@ msgstr ""
"navigateur pour chaque lien. Vous devez autoriser les fenêtres popup pour "
"Lutim."
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr "Les données ont été importées avec succès."
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "Le jeton de suppression est invalide."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:485
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "Le fichier %1 nest pas une image."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:241
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "Le fichier dépasse la limite de taille (%1)"
@@ -443,20 +491,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr "Les données du graphique ne sont pas mises à jour en temps réél."
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "Limage %1 a déjà été supprimée."
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "Limage %1 a été supprimée avec succès."
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr "Le délai de limage a été modifié avec succès."
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr ""
"Les images sont chiffrées sur le serveur (Lutim ne stocke pas la clé)."
@@ -470,39 +518,47 @@ msgstr ""
"seffacer dès le premier affichage ou au bout du délai choisi parmi ceux "
"proposés."
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr "Il y a XXXX image(s) dans la galerie"
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:482
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
"Il ny a plus dURL disponible. Veuillez réessayer ou contacter "
"ladministrateur. %1."
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr "Basculler le plein écran"
#: themes/default/templates/partial/navbar.html.ep:14
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr "Étendre la barre de navigation"
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr "Total"
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:14
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "Tweetez !"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr "Impossible de copier dans le presse-papier"
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr "Impossible de trouver limage %1."
#: lib/Lutim/Controller.pm:571 lib/Lutim/Controller.pm:616 lib/Lutim/Controller.pm:658 lib/Lutim/Controller.pm:701 lib/Lutim/Controller.pm:713 lib/Lutim/Controller.pm:724 lib/Lutim/Controller.pm:749 lib/Lutim/Plugin/Helpers.pm:57
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr "Impossible de trouver limage : elle a été supprimée."
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr "Impossible de récupérer le compteur"
@@ -514,11 +570,11 @@ msgstr ""
"Au contraire de la majorité des services de partages dimage, vous ne nous "
"cédez aucun droit sur les images envoyées."
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr "Déposer une image par son URL"
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr "Envoyé le"
@@ -527,7 +583,7 @@ msgid "Uploaded files by days"
msgstr "Fichiers envoyés, par jour"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:156
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
@@ -535,7 +591,7 @@ msgstr ""
"Lenvoi dimages est actuellement désactivé, veuillez réessayer plus tard ou "
"contacter ladministrateur (%1)."
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:71 themes/default/templates/partial/lutim.js.ep:75
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr "Lien daffichage"
@@ -587,7 +643,15 @@ msgstr ""
"déposées sur Lutim soient supprimées après leur premier affichage (ou "
"téléchargement) ou au bout dun délai choisi parmi ceux proposés."
#: themes/default/templates/gallery.html.ep:28
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr "Vous avez été connecté·e avec succès."
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr "Vous avez été déconnecté·e avec succès."
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr "Zoomer / dézoomer"
@@ -603,7 +667,7 @@ msgstr "traduction en arabe"
msgid "core developer"
msgstr "développeur principal"
#: lib/Lutim.pm:184 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "Pas de limitation de durée"
@@ -619,6 +683,10 @@ msgstr "sur"
msgid "paste image to upload ability"
msgstr "possibilité de coller une image pour lenvoyer"
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr "traduction russe"
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr "traduction espagnole"

View File

@@ -13,18 +13,18 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-03-03 05:34+0000\n"
"Last-Translator: Luc Didry <luc@framasoft.org>\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: French (http://www.transifex.com/fiat-tux/lutim/language/fr/)\n"
"Language: fr_FR\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 4.3.3\n"
"X-Generator: Zanata 4.5.0\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 jours"
@@ -33,31 +33,31 @@ msgstr "%1 jours"
msgid "%1 sent images on this instance from beginning."
msgstr "%1 images envoyées sur cette instance depuis le début."
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-ou-"
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 an"
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 heures"
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr " : Erreur en essayant de récupérer le compteur."
#: themes/default/templates/partial/navbar.html.ep:75
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr "À propos"
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr "Images actives"
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "Une erreur est survenue lors du téléchargement de limage."
@@ -65,15 +65,19 @@ msgstr "Une erreur est survenue lors du téléchargement de limage."
msgid "Archives download"
msgstr "Téléchargement darchives"
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Retour à la page daccueil"
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Cliquez pour utiliser le navigateur de fichier"
#: themes/default/templates/gallery.html.ep:26
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr "Fermer"
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr "Fermer (Esc)"
@@ -81,15 +85,19 @@ msgstr "Fermer (Esc)"
msgid "Contributors"
msgstr "Contributeurs"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:269 themes/default/templates/partial/lutim.js.ep:347
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr "Copié dans le presse-papier"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Copier tous les liens de visualisation dans le presse-papier"
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:105 themes/default/templates/partial/lutim.js.ep:120 themes/default/templates/partial/lutim.js.ep:79 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier"
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Compteur"
@@ -101,35 +109,35 @@ msgstr "Graphe de répartition des délais pour les images supprimées"
msgid "Delay repartition chart for enabled images"
msgstr "Graphe de répartition des délais pour les images actives"
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:160
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "Supprimer au premier accès ?"
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "Images supprimées"
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr "Images supprimées dans 30 jours"
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Lien de suppression"
#: themes/default/templates/gallery.html.ep:6
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Télécharger toutes les images"
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:101 themes/default/templates/partial/lutim.js.ep:97
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Lien de téléchargement"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Lien de téléchargement de larchive des images"
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Déposez vos images ici"
@@ -146,11 +154,11 @@ msgstr ""
"lutiliser sur les réseaux sociaux et une dernière pour supprimer votre "
"image quand vous le souhaitez"
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Chiffrer limage (Lutim ne stocke pas la clé)."
#: themes/default/templates/partial/lutim.js.ep:44
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Une erreur est survenue en essayant de modifier limage."
@@ -158,11 +166,15 @@ msgstr "Une erreur est survenue en essayant de modifier limage."
msgid "Evolution of total files"
msgstr "Évolution du nombre total de fichiers"
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "Expire le"
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr "Exporter les données localStorage"
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "Nom du fichier"
@@ -174,19 +186,19 @@ msgstr ""
"Pour plus de détails, consultez la page <a href=\"https://framagit.org/luc/"
"lutim\">Github</a> du projet."
#: themes/default/templates/partial/navbar.html.ep:78
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "Créez un fork !"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Lien vers la galerie"
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Faites Ctrl+C puis appuyez sur la touche Entrée pour copier le lien"
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Accueil"
@@ -210,27 +222,35 @@ msgstr ""
"Si les fichiers sont bien supprimés si vous en avez exprimé le choix, leur "
"empreinte SHA512 est toutefois conservée."
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "URL de limage"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr "Durée de rétention de limage"
#: lib/Lutim/Controller.pm:752
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr "Image supprimée"
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "Image non trouvée."
#: themes/default/templates/partial/navbar.html.ep:67
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr "Importer des données localStorage"
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Informations"
#: themes/default/templates/partial/navbar.html.ep:31
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Installer la webapp"
#: themes/default/templates/partial/navbar.html.ep:27
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr "Statistiques de linstance"
@@ -250,26 +270,34 @@ msgstr ""
"Comme on prononce <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> "
"(/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "Conserver les données EXIF"
#: themes/default/templates/partial/navbar.html.ep:38
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr "Langue"
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:164
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "Allons-y !"
#: themes/default/templates/partial/navbar.html.ep:72
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "Licence :"
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:111 themes/default/templates/partial/lutim.js.ep:115
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Lien pour partager sur les réseaux sociaux"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr "Connexion"
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr "Déconnexion"
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
@@ -291,27 +319,31 @@ msgstr ""
msgid "Main developers"
msgstr "Développeurs de lapplication"
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:85 themes/default/templates/partial/lutim.js.ep:88
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Syntaxe Markdown"
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:24
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr "Modifier le délai dexpiration"
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "Mes images"
#: themes/default/templates/gallery.html.ep:42
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr "Suivant (flêche droite)"
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "Pas de date dexpiration"
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Seules les images sont acceptées"
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
@@ -329,6 +361,10 @@ msgstr ""
"Seulement lenvoyeur ! (enfin, seulement sil possède des droits exclusifs "
"sur les images avant de les envoyer)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr "Mot de passe"
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
@@ -340,28 +376,40 @@ msgstr ""
msgid "Please contact the administrator: %1"
msgstr "Veuillez contacter ladministrateur : %1"
#: themes/default/templates/gallery.html.ep:40
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr "Veuillez vérifier vos identifiants : impossible de vous authentifier."
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr "Précédent (flêche gauche)"
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr "Lien vers une image aléatoire"
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr "Statistiques brutes"
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr "Enregistrer les modifications"
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Envoyer une image"
#: themes/default/templates/partial/lutim.js.ep:20
msgid "Share it!"
msgstr "Partagez !"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr "Connexion"
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/lutim.js.ep:175
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Un problème est survenu"
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:759
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
@@ -369,22 +417,18 @@ msgstr ""
"Quelque chose sest mal passé lors de la création de larchive. Veuillez "
"réessayer plus tard ou contactez ladministrateur (%1)."
#: themes/default/templates/partial/navbar.html.ep:50
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr "Supportez lauteur"
#: themes/default/templates/partial/navbar.html.ep:58
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr "Supporter lauteur sur Liberapay"
#: themes/default/templates/partial/navbar.html.ep:55
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr "Supporter lauteur sur Tipeee"
#: themes/default/templates/partial/navbar.html.ep:61
msgid "Support the author with bitcoins"
msgstr "Supporter lauteur avec des bitcoins"
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
@@ -409,7 +453,7 @@ msgstr ""
"\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> pour voir quels sont "
"vos droits"
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "LURL nest pas valide."
@@ -422,19 +466,23 @@ msgstr ""
"navigateur pour chaque lien. Vous devez autoriser les fenêtres popup pour "
"Lutim."
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr "Les données ont été importées avec succès."
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "Le jeton de suppression est invalide."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:485
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "Le fichier %1 nest pas une image."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:241
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "Le fichier dépasse la limite de taille (%1)"
@@ -443,20 +491,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr "Les données du graphique ne sont pas mises à jour en temps réél."
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "Limage %1 a déjà été supprimée."
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "Limage %1 a été supprimée avec succès."
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr "Le délai de limage a été modifié avec succès."
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr ""
"Les images sont chiffrées sur le serveur (Lutim ne stocke pas la clé)."
@@ -470,39 +518,47 @@ msgstr ""
"seffacer dès le premier affichage ou au bout du délai choisi parmi ceux "
"proposés."
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr "Il y a XXXX image(s) dans la galerie"
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:482
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
"Il ny a plus dURL disponible. Veuillez réessayer ou contacter "
"ladministrateur. %1."
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr "Basculler le plein écran"
#: themes/default/templates/partial/navbar.html.ep:14
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr "Étendre la barre de navigation"
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr "Total"
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:14
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "Tweetez !"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr "Impossible de copier dans le presse-papier"
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr "Impossible de trouver limage %1."
#: lib/Lutim/Controller.pm:571 lib/Lutim/Controller.pm:616 lib/Lutim/Controller.pm:658 lib/Lutim/Controller.pm:701 lib/Lutim/Controller.pm:713 lib/Lutim/Controller.pm:724 lib/Lutim/Controller.pm:749 lib/Lutim/Plugin/Helpers.pm:57
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr "Impossible de trouver limage : elle a été supprimée."
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr "Impossible de récupérer le compteur"
@@ -514,11 +570,11 @@ msgstr ""
"Au contraire de la majorité des services de partages dimage, vous ne nous "
"cédez aucun droit sur les images envoyées."
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr "Déposer une image par son URL"
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr "Envoyé le"
@@ -527,7 +583,7 @@ msgid "Uploaded files by days"
msgstr "Fichiers envoyés, par jour"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:156
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
@@ -535,7 +591,7 @@ msgstr ""
"Lenvoi dimages est actuellement désactivé, veuillez réessayer plus tard ou "
"contacter ladministrateur (%1)."
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:71 themes/default/templates/partial/lutim.js.ep:75
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr "Lien daffichage"
@@ -587,7 +643,15 @@ msgstr ""
"déposées sur Lutim soient supprimées après leur premier affichage (ou "
"téléchargement) ou au bout dun délai choisi parmi ceux proposés."
#: themes/default/templates/gallery.html.ep:28
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr "Vous avez été connecté·e avec succès."
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr "Vous avez été déconnecté·e avec succès."
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr "Zoomer / dézoomer"
@@ -603,7 +667,7 @@ msgstr "traduction en arabe"
msgid "core developer"
msgstr "développeur principal"
#: lib/Lutim.pm:184 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "Pas de limitation de durée"
@@ -619,6 +683,10 @@ msgstr "sur"
msgid "paste image to upload ability"
msgstr "possibilité de coller une image pour lenvoyer"
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr "traduction russe"
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr "traduction espagnole"

View File

@@ -0,0 +1,641 @@
# Meskó Balázs <mesko.balazs@fsf.hu>, 2018. #zanata
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-06-01 09:17+0000\n"
"Last-Translator: Meskó Balázs <mesko.balazs@fsf.hu>\n"
"Language-Team: Hungarian\n"
"Language: hu\n"
"X-Generator: Zanata 4.5.0\n"
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 nap"
#. ($total)
#: themes/default/templates/stats.html.ep:2
msgid "%1 sent images on this instance from beginning."
msgstr ""
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr ""
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 év"
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 óra"
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr "Névjegy"
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr "Aktív képek"
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "Hiba történt a kép letöltése közben"
#: themes/default/templates/zip.html.ep:2
msgid "Archives download"
msgstr "Archívum letöltése"
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Vissza a kezdőoldalra"
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Kattints a fájlböngésző megnyitásához"
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr ""
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr "Bezárás (Esc)"
#: themes/default/templates/about.html.ep:30
msgid "Contributors"
msgstr "Közreműködők"
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Összes megtekintési hivatkozás másolása a vágólapra"
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "Másolás a vágólapra"
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Számláló"
#: themes/default/templates/stats.html.ep:18
msgid "Delay repartition chart for disabled images"
msgstr ""
#: themes/default/templates/stats.html.ep:15
msgid "Delay repartition chart for enabled images"
msgstr ""
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "Törlés az első megtekintés után?"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "Törölt képek"
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr "Törölt képek 30 napban"
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Törlési hivatkozás"
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Összes kép letöltése"
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Letöltési hivatkozás"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Zip letöltési hivatkozás"
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Húzd és ejtsd ide a képeket"
#: themes/default/templates/about.html.ep:7
msgid ""
"Drag and drop an image in the appropriate area or use the traditional way to "
"send files and Lutim will provide you four URLs. One to view the image, an "
"other to directly download it, one you can use on social networks and a last "
"to delete the image when you want."
msgstr ""
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Kép titkosítása (A Lutim nem tartja meg a kulcsot)."
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Hiba történt a kép módosításakor."
#: themes/default/templates/stats.html.ep:10
msgid "Evolution of total files"
msgstr "Az összes fájl evolúciója"
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "Lejárat:"
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr ""
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "Fájlnév"
#: themes/default/templates/about.html.ep:24
msgid ""
"For more details, see the <a href=\"https://framagit.org/luc/"
"lutim\">homepage of the project</a>."
msgstr ""
"További részletekért lásd a <a href=\"https://framagit.org/luc/"
"lutim\">projekt weboldalát</a>."
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "Forkolj le!"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Galéria hivatkozás"
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Kezdőlap"
#: themes/default/templates/about.html.ep:20
msgid "How do you pronounce Lutim?"
msgstr "Hogyan ejtem ki, hogy Lutim?"
#: themes/default/templates/about.html.ep:6
msgid "How does it work?"
msgstr "Hogyan működik?"
#: themes/default/templates/about.html.ep:18
msgid "How to report an image?"
msgstr "Hogyan jelentsek egy képet?"
#: themes/default/templates/about.html.ep:14
msgid ""
"If the files are deleted if you ask it while posting it, their SHA512 "
"footprint are retained."
msgstr ""
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "Kép URL"
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr ""
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr ""
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "A kép nem található."
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Információk"
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Webalkalmazás telepítése"
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr "Példány statisztikái"
#: themes/default/templates/about.html.ep:11
msgid "Is it really anonymous?"
msgstr "Tényleg anonim?"
#: themes/default/templates/about.html.ep:9
msgid "Is it really free (as in free beer)?"
msgstr "Tényleg ingyenes?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Pont úgy, ahogy a francia <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> szót (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "EXIF címkék megtartása"
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr "Nyelv"
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "Gyerünk!"
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "Licenc:"
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Közösségi média megosztási hivatkozások"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr ""
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
"multiple URLs."
msgstr ""
#: themes/default/templates/about.html.ep:4
msgid ""
"Lutim is a free (as in free beer) and anonymous image hosting service. It's "
"also the name of the free (as in free speech) software which provides this "
"service."
msgstr ""
#: themes/default/templates/about.html.ep:25
msgid "Main developers"
msgstr "Fő fejlesztők"
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Markdown szintaxis"
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr ""
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "Saját képek"
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr "Következő (jobbra nyíl)"
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "Nincs korlát"
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Csak képek engedélyezettek"
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
"these details."
msgstr ""
#: themes/default/templates/about.html.ep:16
msgid ""
"Only the uploader! (well, only if he's the only owner of the images' rights "
"before the upload)"
msgstr ""
"Csak a feltöltő! (persze csak akkor, ha az övé a két összes joga a "
"feltöltéskor)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr ""
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
#. (config('contact')
#: themes/default/templates/about.html.ep:19
msgid "Please contact the administrator: %1"
msgstr "Vedd fel a kapcsolatot az adminisztrátorral: %1"
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr ""
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr "Előző (balra nyíl)"
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr ""
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr "Nyers statisztikák"
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr ""
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Kép küldése"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr ""
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Valami rossz történt"
#. ($c->config('contact')
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr "A szerző támogatása"
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr "A szerző támogatása a Liberapayen"
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr "A szerző támogatása a Tipeee-n"
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
"of the administrator's choice (for the official instance, which is located "
"in France, it's one year)."
msgstr ""
#: themes/default/templates/about.html.ep:23
msgid ""
"The Lutim software is a <a href=\"http://en.wikipedia.org/wiki/"
"Free_software\">free software</a>, which allows you to download and install "
"it on you own server. Have a look at the <a href=\"https://www.gnu.org/"
"licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
msgstr ""
"A Lutim szoftver <a href=\"http://en.wikipedia.org/wiki/"
"Free_software\">szabad szoftver</a>, így letöltheted és telepítheted a saját "
"kiszolgálódra. Nézd meg az <a href=\"https://www.gnu.org/licenses/agpl-3.0."
"html\">AGPL-t</a>, hogy megtudd mit tehetsz."
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "Az URL érvénytelen."
#: themes/default/templates/zip.html.ep:16
msgid ""
"The automatic download process will open a tab in your browser for each link."
" You need to allow popups for Lutim."
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr ""
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "A törlési token érvénytelen."
#. ($upload->filename)
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "A(z) %1 fájl nem kép."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "A fájl meghaladja a méretkorlátot (%1)"
#: themes/default/templates/stats.html.ep:12
msgid "The graph's datas are not updated in real-time."
msgstr "A grafikon adatai nem frissülnek valós időben."
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "A(z) %1 kép már törölve lett."
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "A(z) %1 kép sikeresen törölve lett"
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr ""
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr ""
#: themes/default/templates/about.html.ep:5
msgid ""
"The images you post on Lutim can be stored indefinitely or be deleted at "
"first view or after a delay selected from those proposed."
msgstr ""
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr ""
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr ""
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr ""
#. ($short)
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr ""
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr ""
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr ""
#: themes/default/templates/about.html.ep:17
msgid ""
"Unlike many image sharing services, you don't give us rights on uploaded "
"images."
msgstr ""
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr ""
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr ""
#: themes/default/templates/stats.html.ep:6
msgid "Uploaded files by days"
msgstr ""
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
msgstr ""
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr ""
#: themes/default/templates/about.html.ep:22
msgid "What about the software which provides the service?"
msgstr ""
#: themes/default/templates/about.html.ep:3
msgid "What is Lutim?"
msgstr ""
#: themes/default/templates/about.html.ep:15
msgid "Who owns rights on images uploaded on Lutim?"
msgstr ""
#: themes/default/templates/about.html.ep:12
msgid ""
"Yes, it is! On the other side, for legal reasons, your IP address will be "
"stored when you send an image. Don't panic, it is normally the case of all "
"sites on which you send files!"
msgstr ""
#: themes/default/templates/about.html.ep:10
msgid ""
"Yes, it is! On the other side, if you want to support the developer, you can "
"do it via <a href=\"https://www.tipeee.com/fiat-tux\">Tipeee</a> or via <a "
"href=\"https://liberapay.com/sky/\">Liberapay</a>."
msgstr ""
#: themes/default/templates/zip.html.ep:6
msgid "You asked to download a zip archive for too much files."
msgstr ""
#: themes/default/templates/about.html.ep:8
msgid ""
"You can, optionally, request that the image(s) posted on Lutim to be deleted "
"at first view (or download) or after the delay selected from those proposed."
msgstr ""
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr ""
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr ""
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr ""
#: themes/default/templates/about.html.ep:27
msgid "and on"
msgstr ""
#: themes/default/templates/about.html.ep:40
msgid "arabic translation"
msgstr ""
#: themes/default/templates/about.html.ep:27
msgid "core developer"
msgstr ""
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr ""
#: themes/default/templates/about.html.ep:38
msgid "occitan translation"
msgstr ""
#: themes/default/templates/about.html.ep:27
msgid "on"
msgstr ""
#: themes/default/templates/about.html.ep:39
msgid "paste image to upload ability"
msgstr ""
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr ""
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr ""
#: themes/default/templates/about.html.ep:28
msgid "webapp developer"
msgstr ""

View File

@@ -19,7 +19,7 @@ msgstr ""
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:142 themes/default/templates/partial/lutim.js.ep:151 themes/default/templates/partial/lutim.js.ep:152 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:173 lib/Lutim/Command/cron/stats.pm:174 lib/Lutim/Command/cron/stats.pm:190 lib/Lutim/Command/cron/stats.pm:191 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr ""
@@ -28,31 +28,31 @@ msgstr ""
msgid "%1 sent images on this instance from beginning."
msgstr ""
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr ""
#: lib/Lutim.pm:187 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:175 lib/Lutim/Command/cron/stats.pm:192 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr ""
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:151 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:172 lib/Lutim/Command/cron/stats.pm:189 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:76
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:154 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr ""
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:328
msgid "An error occured while downloading the image."
msgstr ""
@@ -60,15 +60,19 @@ msgstr ""
msgid "Archives download"
msgstr ""
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr ""
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr ""
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr ""
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr ""
@@ -76,15 +80,19 @@ msgstr ""
msgid "Contributors"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:218 themes/default/templates/partial/lutim.js.ep:272 themes/default/templates/partial/lutim.js.ep:350
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr ""
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:108 themes/default/templates/partial/lutim.js.ep:123 themes/default/templates/partial/lutim.js.ep:82 themes/default/templates/partial/lutim.js.ep:94
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr ""
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr ""
@@ -96,35 +104,35 @@ msgstr ""
msgid "Delay repartition chart for enabled images"
msgstr ""
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:163
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:155 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:156 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr ""
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr ""
#: themes/default/templates/gallery.html.ep:8
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr ""
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:100 themes/default/templates/partial/lutim.js.ep:104
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr ""
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr ""
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr ""
@@ -132,11 +140,11 @@ msgstr ""
msgid "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want."
msgstr ""
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:47
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr ""
@@ -144,11 +152,15 @@ msgstr ""
msgid "Evolution of total files"
msgstr ""
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr ""
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr ""
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr ""
@@ -156,19 +168,19 @@ msgstr ""
msgid "For more details, see the <a href=\"https://framagit.org/luc/lutim\">homepage of the project</a>."
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:79
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr ""
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr ""
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr ""
@@ -188,27 +200,35 @@ msgstr ""
msgid "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained."
msgstr ""
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:153 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr ""
#: lib/Lutim/Controller.pm:748
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr ""
#: lib/Lutim/Controller/Image.pm:756
msgid "Image not found."
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:68
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:32
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:28
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr ""
@@ -224,26 +244,34 @@ msgstr ""
msgid "Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:39
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr ""
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:167
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:73
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr ""
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:114 themes/default/templates/partial/lutim.js.ep:118
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr ""
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr ""
#: themes/default/templates/zip.html.ep:7
msgid "Lutim can't zip so many images at once, so it splitted your demand in multiple URLs."
msgstr ""
@@ -256,27 +284,31 @@ msgstr ""
msgid "Main developers"
msgstr ""
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:88 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr ""
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:25
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr ""
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr ""
#: themes/default/templates/gallery.html.ep:43
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr ""
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr ""
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr ""
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid "Only the images sent with this browser will be listed here. The details are stored in localStorage: if you delete your localStorage data, you'll loose these details."
msgstr ""
@@ -284,6 +316,10 @@ msgstr ""
msgid "Only the uploader! (well, only if he's the only owner of the images' rights before the upload)"
msgstr ""
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr ""
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
@@ -293,47 +329,55 @@ msgstr ""
msgid "Please contact the administrator: %1"
msgstr ""
#: themes/default/templates/gallery.html.ep:41
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr ""
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr ""
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr ""
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr ""
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr ""
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:23
msgid "Share it!"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr ""
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:178
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr ""
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:755
#: lib/Lutim/Controller/Image.pm:763
msgid "Something went wrong when creating the zip file. Try again later or contact the administrator (%1)."
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:51
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:59
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:56
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:62
msgid "Support the author with bitcoins"
msgstr ""
#: themes/default/templates/about.html.ep:13
msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)."
msgstr ""
@@ -342,7 +386,7 @@ msgstr ""
msgid "The Lutim software is a <a href=\"http://en.wikipedia.org/wiki/Free_software\">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
msgstr ""
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:347
msgid "The URL is not valid."
msgstr ""
@@ -350,19 +394,23 @@ msgstr ""
msgid "The automatic download process will open a tab in your browser for each link. You need to allow popups for Lutim."
msgstr ""
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr ""
#: lib/Lutim/Controller/Image.pm:160 lib/Lutim/Controller/Image.pm:228
msgid "The delete token is invalid."
msgstr ""
#. ($upload->filename)
#: lib/Lutim/Controller.pm:486
#: lib/Lutim/Controller/Image.pm:488
msgid "The file %1 is not an image."
msgstr ""
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:244
#: lib/Lutim/Controller/Image.pm:311 lib/Lutim/Controller/Image.pm:380 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr ""
@@ -371,20 +419,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:230
msgid "The image %1 has already been deleted."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:239 lib/Lutim/Controller/Image.pm:244
msgid "The image %1 has been successfully deleted"
msgstr ""
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:168
msgid "The image's delay has been successfully modified"
msgstr ""
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr ""
@@ -392,37 +440,45 @@ msgstr ""
msgid "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed."
msgstr ""
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:483
#: lib/Lutim/Controller/Image.pm:485
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
#: themes/default/templates/gallery.html.ep:28
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:15
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr ""
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:162 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr ""
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:17
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr ""
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr ""
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:108 lib/Lutim/Controller/Image.pm:202 lib/Lutim/Controller/Image.pm:273
msgid "Unable to find the image %1."
msgstr ""
#: lib/Lutim/Controller.pm:572 lib/Lutim/Controller.pm:617 lib/Lutim/Controller.pm:654 lib/Lutim/Controller.pm:697 lib/Lutim/Controller.pm:709 lib/Lutim/Controller.pm:720 lib/Lutim/Controller.pm:745 lib/Lutim/Plugin/Helpers.pm:84
#: lib/Lutim/Controller/Image.pm:574 lib/Lutim/Controller/Image.pm:619 lib/Lutim/Controller/Image.pm:660 lib/Lutim/Controller/Image.pm:703 lib/Lutim/Controller/Image.pm:715 lib/Lutim/Controller/Image.pm:726 lib/Lutim/Controller/Image.pm:753 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr ""
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:145
msgid "Unable to get counter"
msgstr ""
@@ -430,11 +486,11 @@ msgstr ""
msgid "Unlike many image sharing services, you don't give us rights on uploaded images."
msgstr ""
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr ""
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr ""
@@ -443,11 +499,11 @@ msgid "Uploaded files by days"
msgstr ""
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:183
#: lib/Lutim/Plugin/Helpers.pm:221
msgid "Uploading is currently disabled, please try later or contact the administrator (%1)."
msgstr ""
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:74 themes/default/templates/partial/lutim.js.ep:78
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr ""
@@ -479,7 +535,15 @@ msgstr ""
msgid "You can, optionally, request that the image(s) posted on Lutim to be deleted at first view (or download) or after the delay selected from those proposed."
msgstr ""
#: themes/default/templates/gallery.html.ep:29
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr ""
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr ""
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr ""
@@ -495,7 +559,7 @@ msgstr ""
msgid "core developer"
msgstr ""
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:157 lib/Lutim/Command/cron/stats.pm:171 lib/Lutim/Command/cron/stats.pm:188 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr ""
@@ -511,6 +575,10 @@ msgstr ""
msgid "paste image to upload ability"
msgstr ""
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr ""
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr ""

View File

@@ -3,6 +3,7 @@
# This file is distributed under the same license as the Lutim package.
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# Luc Didry <luc@framasoft.org>, 2018. #zanata
# Quentí, 2018. #zanata
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
@@ -10,19 +11,19 @@ msgstr ""
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-03-03 05:34+0000\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Language-Team: Occitan (http://www.transifex.com/fiat-tux/lutim/language/oc/"
")\n"
"Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
"X-Generator: Zanata 4.3.3\n"
"X-Generator: Zanata 4.5.0\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:150 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:177 lib/Lutim/Command/cron/stats.pm:178 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:139 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/raw.html.ep:19 themes/default/templates/raw.html.ep:20 themes/default/templates/raw.html.ep:36 themes/default/templates/raw.html.ep:37 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 jorns"
@@ -31,31 +32,31 @@ msgstr "%1 jorns"
msgid "%1 sent images on this instance from beginning."
msgstr "%1 imatges mandats sus aquesta instància dempuèi lo començament."
#: themes/default/templates/index.html.ep:190
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-o-"
#: lib/Lutim.pm:186 lib/Lutim/Command/cron/stats.pm:151 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/index.html.ep:5 themes/default/templates/raw.html.ep:10 themes/default/templates/raw.html.ep:21 themes/default/templates/raw.html.ep:38
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 an"
#: lib/Lutim.pm:185 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:148 themes/default/templates/raw.html.ep:18 themes/default/templates/raw.html.ep:35 themes/default/templates/raw.html.ep:7
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 oras"
#: themes/default/templates/partial/myfiles.js.ep:57
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr " : Error al moment de recuperar lo comptador."
#: themes/default/templates/partial/navbar.html.ep:75
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr "A prepaus"
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:3
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr "Imatges actius"
#: lib/Lutim/Controller.pm:326
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "Una error es apareguda pendent lo telecargament de l'imatge."
@@ -63,15 +64,19 @@ msgstr "Una error es apareguda pendent lo telecargament de l'imatge."
msgid "Archives download"
msgstr "Telecargar los archius"
#: themes/default/templates/about.html.ep:43 themes/default/templates/myfiles.html.ep:64 themes/default/templates/stats.html.ep:25
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Tornar a la pagina d'acuèlh"
#: themes/default/templates/index.html.ep:193 themes/default/templates/index.html.ep:194
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Clicatz per utilizar lo navigator de fichièr"
#: themes/default/templates/gallery.html.ep:26
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr "Tampar"
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr "Tampar (Esc)"
@@ -79,15 +84,19 @@ msgstr "Tampar (Esc)"
msgid "Contributors"
msgstr "Contributors"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:269 themes/default/templates/partial/lutim.js.ep:347
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr "Copiat al quichapapièrs"
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Copiar totes los ligams de visualizacion dins lo quichapapièrs"
#: themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:69 themes/default/templates/index.html.ep:77 themes/default/templates/index.html.ep:85 themes/default/templates/index.html.ep:93 themes/default/templates/myfiles.html.ep:20 themes/default/templates/myfiles.html.ep:38 themes/default/templates/partial/common.js.ep:150 themes/default/templates/partial/lutim.js.ep:105 themes/default/templates/partial/lutim.js.ep:120 themes/default/templates/partial/lutim.js.ep:79 themes/default/templates/partial/lutim.js.ep:91
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "Copiar dins lo quichapapièrs"
#: themes/default/templates/myfiles.html.ep:52
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Comptador"
@@ -99,35 +108,35 @@ msgstr "Grafic de despartiment dels delais pels imatges desactivats"
msgid "Delay repartition chart for enabled images"
msgstr "Grafic de despartiment dels delais pels imatges activats"
#: themes/default/templates/index.html.ep:115 themes/default/templates/index.html.ep:147 themes/default/templates/index.html.ep:178 themes/default/templates/myfiles.html.ep:53 themes/default/templates/partial/lutim.js.ep:160
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "Suprimir al primièr accès ?"
#: lib/Lutim/Command/cron/stats.pm:145 themes/default/templates/raw.html.ep:4
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "Imatges suprimits"
#: lib/Lutim/Command/cron/stats.pm:146 themes/default/templates/raw.html.ep:5
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr "Imatges per èsser suprimits dins 30 jorns"
#: themes/default/templates/index.html.ep:98 themes/default/templates/myfiles.html.ep:56 themes/default/templates/partial/common.js.ep:142 themes/default/templates/partial/common.js.ep:145
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Ligam de supression"
#: themes/default/templates/gallery.html.ep:6
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Telecargar totes los imatges"
#: themes/default/templates/index.html.ep:81 themes/default/templates/index.html.ep:83 themes/default/templates/partial/lutim.js.ep:101 themes/default/templates/partial/lutim.js.ep:97
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Ligam de telecargament"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:30 themes/default/templates/myfiles.html.ep:33
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Ligam de telecargament de l'archiu dels imatges"
#: themes/default/templates/index.html.ep:189
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Lisatz e depausatz vòstres imatges aquí"
@@ -144,11 +153,11 @@ msgstr ""
"suls malhums socials e una darrièra per suprimir vòstre imatge quand "
"volguèssetz."
#: themes/default/templates/index.html.ep:150 themes/default/templates/index.html.ep:181
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Chifrar l'imatge (Lutim garda pas la clau)."
#: themes/default/templates/partial/lutim.js.ep:44
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Una error es apareguda al moment de modificar l'imatge."
@@ -156,11 +165,15 @@ msgstr "Una error es apareguda al moment de modificar l'imatge."
msgid "Evolution of total files"
msgstr "Evolucion del nombre total de fichièrs"
#: themes/default/templates/myfiles.html.ep:55
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "S'acaba lo"
#: themes/default/templates/myfiles.html.ep:50
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr "Exportar las donadas localStorage"
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "Nom del fichièr"
@@ -172,19 +185,19 @@ msgstr ""
"Per mai de detalhs, consultatz la <a href=\"https://framagit.org/luc/"
"lutim\">pagina</a> del projècte."
#: themes/default/templates/partial/navbar.html.ep:78
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "Tustatz-me !"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:12 themes/default/templates/myfiles.html.ep:15
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Ligam cap a la galariá"
#: themes/default/templates/partial/common.js.ep:104 themes/default/templates/partial/common.js.ep:87
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Fasètz Ctrl+C puèi picatz Entrada per copiar lo ligam"
#: themes/default/templates/layouts/default.html.ep:54
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Acuèlh"
@@ -208,27 +221,35 @@ msgstr ""
"Se los fichièrs son ben estats suprimits se o avètz demandat, lors "
"signaturas SHA512 son gardadas."
#: themes/default/templates/index.html.ep:163 themes/default/templates/index.html.ep:203
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "URL de l'imatge"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:2
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr "Delai de l'imatge"
#: lib/Lutim/Controller.pm:752
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr "Imatge suprimit"
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "Imatge pas trobat."
#: themes/default/templates/partial/navbar.html.ep:67
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr "Importar las donadas localStorage"
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Informacions"
#: themes/default/templates/partial/navbar.html.ep:31
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Installar la webapp"
#: themes/default/templates/partial/navbar.html.ep:27
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr "Estatisticas de l'instància"
@@ -249,26 +270,34 @@ msgstr ""
"N, o coma la paraula francesa <a href=\"https://fr.wikipedia.org/wiki/"
"Lutin\">lutin</a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:153 themes/default/templates/index.html.ep:184
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "Conservar las donadas EXIF"
#: themes/default/templates/partial/navbar.html.ep:38
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr "Lenga"
#: themes/default/templates/index.html.ep:118 themes/default/templates/index.html.ep:166 themes/default/templates/index.html.ep:206 themes/default/templates/partial/lutim.js.ep:164
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "Zo !"
#: themes/default/templates/partial/navbar.html.ep:72
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "Licéncia :"
#: themes/default/templates/index.html.ep:89 themes/default/templates/index.html.ep:91 themes/default/templates/partial/lutim.js.ep:111 themes/default/templates/partial/lutim.js.ep:115
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Ligam per partejar suls malhums socials"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr "Connexion"
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr "Desconnexion"
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
@@ -290,27 +319,31 @@ msgstr ""
msgid "Main developers"
msgstr "Desvolopaires de l'aplicacion"
#: themes/default/templates/index.html.ep:73 themes/default/templates/index.html.ep:75 themes/default/templates/partial/lutim.js.ep:85 themes/default/templates/partial/lutim.js.ep:88
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Sintaxi Markdown"
#: themes/default/templates/myfiles.html.ep:2 themes/default/templates/partial/navbar.html.ep:24
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr "Modificar lo delai d'expiracion"
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "Mos imatges"
#: themes/default/templates/gallery.html.ep:42
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr "Seguent (sageta dreita)"
#: themes/default/templates/partial/myfiles.js.ep:19
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "Pas cap de data d'expiracion"
#: themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:198
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Solament son acceptats los imatges"
#: themes/default/templates/myfiles.html.ep:6
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
@@ -328,6 +361,10 @@ msgstr ""
"Solament lo qu'a mandat ! (ben, solament se ten los dreits exclusius dels "
"imatges abans de los mandar)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr "Senhal"
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
@@ -338,28 +375,41 @@ msgstr ""
msgid "Please contact the administrator: %1"
msgstr "Mercés de contactar l'administrator : %1"
#: themes/default/templates/gallery.html.ep:40
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr ""
"Mercés de verificar vòstres identificants:impossible de vos autentificar."
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr "Precedent (sageta esquèrra)"
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr "Ligam cap a un imatge aleatòri"
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr "Estatisticas brutas"
#: themes/default/templates/index.html.ep:158
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr "Enregistrar las causidas"
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Mandar un imatge"
#: themes/default/templates/partial/lutim.js.ep:20
msgid "Share it!"
msgstr "Partejatz-lo !"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr "Connexion"
#: themes/default/templates/index.html.ep:133 themes/default/templates/partial/lutim.js.ep:175
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Un problèma es aparegut"
#. ($c->config('contact')
#: lib/Lutim/Controller.pm:759
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
@@ -367,22 +417,18 @@ msgstr ""
"Quicòm a trucat pendent la creacion de l'archiu. Mercés de tornar ensajar "
"pus tard o de contactar l'administrator (%1)."
#: themes/default/templates/partial/navbar.html.ep:50
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr "Sostenir lautor"
#: themes/default/templates/partial/navbar.html.ep:58
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr "Sostenir l'autor sus Liberapay"
#: themes/default/templates/partial/navbar.html.ep:55
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr "Sostenir l'autor sus Tipeee"
#: themes/default/templates/partial/navbar.html.ep:61
msgid "Support the author with bitcoins"
msgstr "Sostenir lautor amb bitcoins"
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
@@ -405,7 +451,7 @@ msgstr ""
"linstallar sus vòstre pròpri servidor. Gaitatz l<a href=\"https://www.gnu."
"org/licenses/agpl-3.0.html\">AGPL</a> per veire que son vòstres dreits"
#: lib/Lutim/Controller.pm:345
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "L'URL n'es pas valida."
@@ -417,19 +463,23 @@ msgstr ""
"Lo processús automatic de telecargament obrirà un onglet dins lo navigato "
"per cada ligam. Vos cal autorizar las popups per Lutim."
#: lib/Lutim/Controller.pm:158 lib/Lutim/Controller.pm:226
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr "Las donadas son ben estadas importadas."
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "Lo geton de supression es invalid."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:485
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "Lo fichièr %1 es pas un imatge."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller.pm:309 lib/Lutim/Controller.pm:378 themes/default/templates/partial/lutim.js.ep:241
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "Lo fichièr depassa lo limit de talha (%1)"
@@ -438,20 +488,20 @@ msgid "The graph's datas are not updated in real-time."
msgstr "Las donadas del grafic son pas mesas a jorn en temps real."
#. ($image->filename)
#: lib/Lutim/Controller.pm:228
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "L'imatge %1 es ja estat suprimit."
#. ($image->filename)
#: lib/Lutim/Controller.pm:237 lib/Lutim/Controller.pm:242
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "L'imatge %1 es estat suprimit amb succès."
#: lib/Lutim/Controller.pm:166
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr "Lo delai de l'imatge es plan estat modificat."
#: themes/default/templates/index.html.ep:45
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr "Los imatges son chifrats sul servidor (Lutim garda pas la clau)."
@@ -463,39 +513,47 @@ msgstr ""
"Los imatges depausats sus Lutim pòdon èsser gardats sens fin, o sescafar "
"tre lo primièr afichatge o al cap d'un delai causit entre los prepausats."
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr "I a XXXX imatge(s) dins la galariá"
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:482
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
"I a pas mai d'URL disponiblas. Mercés de tornar ensajar o de contactar "
"l'administrator. %1."
#: themes/default/templates/gallery.html.ep:27
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr "Passar al plen ecran"
#: themes/default/templates/partial/navbar.html.ep:14
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr "Passar en navigacion"
#: lib/Lutim/Command/cron/stats.pm:152 themes/default/templates/raw.html.ep:11
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr "Total"
#: themes/default/templates/index.html.ep:60 themes/default/templates/partial/lutim.js.ep:14
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "Tweetejatz-lo !"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr "Fracàs de la còpia al quichapapièrs"
#. ($short)
#: lib/Lutim/Controller.pm:106 lib/Lutim/Controller.pm:200 lib/Lutim/Controller.pm:271
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr "Impossible de trobar l'imatge %1."
#: lib/Lutim/Controller.pm:571 lib/Lutim/Controller.pm:616 lib/Lutim/Controller.pm:658 lib/Lutim/Controller.pm:701 lib/Lutim/Controller.pm:713 lib/Lutim/Controller.pm:724 lib/Lutim/Controller.pm:749 lib/Lutim/Plugin/Helpers.pm:57
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr "Impossible de trobar l'imatge : es estat suprimit."
#: lib/Lutim/Controller.pm:143
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr "Impossible de recuperar lo comptador"
@@ -507,11 +565,11 @@ msgstr ""
"A l'invèrse de la màger part dels servicis de partiment d'imatge, daissatz "
"pas cap de dreit suls imatges que mandatz."
#: themes/default/templates/index.html.ep:162 themes/default/templates/index.html.ep:201
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr "Depausar un imatge per son URL"
#: themes/default/templates/myfiles.html.ep:54
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr "Mandat lo"
@@ -520,7 +578,7 @@ msgid "Uploaded files by days"
msgstr "Fichièrs mandats per jorn"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:156
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
@@ -528,7 +586,7 @@ msgstr ""
"La mesa en linha es desactivada pel moment, mercés de tornar ensajar mai "
"tard o de contactar l'administrator (%1)."
#: themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:67 themes/default/templates/myfiles.html.ep:51 themes/default/templates/partial/lutim.js.ep:71 themes/default/templates/partial/lutim.js.ep:75
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr "Ligam d'afichatge"
@@ -578,7 +636,15 @@ msgstr ""
"sus Lutim sián suprimits aprèp lor primièr afichatge (o telecargament) o al "
"cap d'un delai causit entre las prepausadas."
#: themes/default/templates/gallery.html.ep:28
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr "Sètz ben estat·ada connectat·ada."
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr "Sètz ben estat desconnectat."
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr "Agrandir/Reduire"
@@ -594,7 +660,7 @@ msgstr "traduccion en arabi"
msgid "core developer"
msgstr "desvolopaire màger"
#: lib/Lutim.pm:184 lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:158 lib/Lutim/Command/cron/stats.pm:175 themes/default/templates/index.html.ep:3 themes/default/templates/raw.html.ep:17 themes/default/templates/raw.html.ep:34 themes/default/templates/raw.html.ep:6
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "Pas cap de limitacion de durada"
@@ -610,6 +676,10 @@ msgstr "sus"
msgid "paste image to upload ability"
msgstr "possibilitat de pegar un imatge per lo mandar"
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr "traduccion en rus"
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr "traduccion en espanhòl"

View File

@@ -0,0 +1,682 @@
# Luc Didry <luc@framasoft.org>, 2018. #zanata
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-07-29 08:17+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n"
"Language-Team: Russian\n"
"Language: ru\n"
"X-Generator: Zanata 4.5.0\n"
"Plural-Forms: nplurals=3; plural=n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<="
"4 && (n%100<10 || n%100>=20) ? 1 : 2;\n"
#. (7)
#. (30)
#. ($delay)
#. (config('max_delay')
#: lib/Lutim/Command/cron/stats.pm:147 lib/Lutim/Command/cron/stats.pm:148 lib/Lutim/Command/cron/stats.pm:161 lib/Lutim/Command/cron/stats.pm:162 lib/Lutim/Command/cron/stats.pm:178 lib/Lutim/Command/cron/stats.pm:179 themes/default/templates/myfiles.html.ep:24 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:34 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/for_my_delay.html.ep:14 themes/default/templates/partial/for_my_delay.html.ep:4 themes/default/templates/partial/lutim.js.ep:140 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/lutim.js.ep:150 themes/default/templates/partial/raw.js.ep:23 themes/default/templates/partial/raw.js.ep:24 themes/default/templates/partial/raw.js.ep:6 themes/default/templates/partial/raw.js.ep:7 themes/default/templates/raw.html.ep:8 themes/default/templates/raw.html.ep:9
msgid "%1 days"
msgstr "%1 дней"
#. ($total)
#: themes/default/templates/stats.html.ep:2
msgid "%1 sent images on this instance from beginning."
msgstr "%1 изображений загружено в этот экземпляр с самого начала."
#: themes/default/templates/index.html.ep:208
msgid "-or-"
msgstr "-или-"
#: lib/Lutim.pm:350 lib/Lutim/Command/cron/stats.pm:149 lib/Lutim/Command/cron/stats.pm:163 lib/Lutim/Command/cron/stats.pm:180 themes/default/templates/index.html.ep:5 themes/default/templates/myfiles.html.ep:5 themes/default/templates/partial/raw.js.ep:25 themes/default/templates/partial/raw.js.ep:8 themes/default/templates/raw.html.ep:10
msgid "1 year"
msgstr "1 год"
#: lib/Lutim.pm:349 lib/Lutim/Command/cron/stats.pm:146 lib/Lutim/Command/cron/stats.pm:160 lib/Lutim/Command/cron/stats.pm:177 themes/default/templates/index.html.ep:4 themes/default/templates/myfiles.html.ep:33 themes/default/templates/myfiles.html.ep:4 themes/default/templates/partial/for_my_delay.html.ep:13 themes/default/templates/partial/lutim.js.ep:149 themes/default/templates/partial/raw.js.ep:22 themes/default/templates/partial/raw.js.ep:5 themes/default/templates/raw.html.ep:7
msgid "24 hours"
msgstr "24 часа"
#: themes/default/templates/partial/myfiles.js.ep:180
msgid ": Error while trying to get the counter."
msgstr ": Error while trying to get the counter."
#: themes/default/templates/partial/navbar.html.ep:77
msgid "About"
msgstr "О Lutim"
#: lib/Lutim/Command/cron/stats.pm:142 themes/default/templates/raw.html.ep:3
msgid "Active images"
msgstr "Активные изображения"
#: lib/Lutim/Controller/Image.pm:327
msgid "An error occured while downloading the image."
msgstr "Произошла ошибка при скачивании изображения."
#: themes/default/templates/zip.html.ep:2
msgid "Archives download"
msgstr "Archives download"
#: themes/default/templates/about.html.ep:44 themes/default/templates/myfiles.html.ep:135 themes/default/templates/stats.html.ep:25
msgid "Back to homepage"
msgstr "Вернуться на главную страницу"
#: themes/default/templates/index.html.ep:211 themes/default/templates/index.html.ep:212
msgid "Click to open the file browser"
msgstr "Щёлкните для выбора файлов"
#: themes/default/templates/myfiles.html.ep:51
msgid "Close"
msgstr "Закрыть"
#: themes/default/templates/gallery.html.ep:29
msgid "Close (Esc)"
msgstr "Закрыть (Esc)"
#: themes/default/templates/about.html.ep:30
msgid "Contributors"
msgstr "Участники"
#: themes/default/templates/partial/common.js.ep:113 themes/default/templates/partial/common.js.ep:93
msgid "Copied to clipboard"
msgstr ""
#: themes/default/templates/partial/lutim.js.ep:215 themes/default/templates/partial/lutim.js.ep:278 themes/default/templates/partial/lutim.js.ep:364
msgid "Copy all view links to clipboard"
msgstr "Скопировать в буфер все ссылки на просмотр"
#: themes/default/templates/index.html.ep:103 themes/default/templates/index.html.ep:111 themes/default/templates/index.html.ep:18 themes/default/templates/index.html.ep:36 themes/default/templates/index.html.ep:54 themes/default/templates/index.html.ep:87 themes/default/templates/index.html.ep:95 themes/default/templates/myfiles.html.ep:104 themes/default/templates/myfiles.html.ep:68 themes/default/templates/myfiles.html.ep:86 themes/default/templates/partial/common.js.ep:186 themes/default/templates/partial/lutim.js.ep:106 themes/default/templates/partial/lutim.js.ep:121 themes/default/templates/partial/lutim.js.ep:80 themes/default/templates/partial/lutim.js.ep:92 themes/default/templates/partial/myfiles.js.ep:142
msgid "Copy to clipboard"
msgstr "Скопировать в буфер"
#: themes/default/templates/myfiles.html.ep:123
msgid "Counter"
msgstr "Счётчик"
#: themes/default/templates/stats.html.ep:18
msgid "Delay repartition chart for disabled images"
msgstr "Распределение сроков хранения недоступных изображений"
#: themes/default/templates/stats.html.ep:15
msgid "Delay repartition chart for enabled images"
msgstr "Распределение сроков хранения доступных изображений"
#: themes/default/templates/index.html.ep:133 themes/default/templates/index.html.ep:165 themes/default/templates/index.html.ep:196 themes/default/templates/myfiles.html.ep:124 themes/default/templates/myfiles.html.ep:45 themes/default/templates/partial/lutim.js.ep:161
msgid "Delete at first view?"
msgstr "Удалить после первого просмотра?"
#: lib/Lutim/Command/cron/stats.pm:143 themes/default/templates/raw.html.ep:4
msgid "Deleted images"
msgstr "Удалённые изображения"
#: lib/Lutim/Command/cron/stats.pm:144 themes/default/templates/raw.html.ep:5
msgid "Deleted images in 30 days"
msgstr "Удалить изображения через 30 дней"
#: themes/default/templates/index.html.ep:116 themes/default/templates/myfiles.html.ep:127 themes/default/templates/partial/common.js.ep:178 themes/default/templates/partial/common.js.ep:181
msgid "Deletion link"
msgstr "Ссылка на удаление"
#: themes/default/templates/gallery.html.ep:10
msgid "Download all images"
msgstr "Скачать все изображения"
#: themes/default/templates/index.html.ep:101 themes/default/templates/index.html.ep:99 themes/default/templates/partial/lutim.js.ep:102 themes/default/templates/partial/lutim.js.ep:98
msgid "Download link"
msgstr "Ссылка на скачивание"
#: themes/default/templates/index.html.ep:28 themes/default/templates/index.html.ep:31 themes/default/templates/myfiles.html.ep:78 themes/default/templates/myfiles.html.ep:81
msgid "Download zip link"
msgstr "Ссылка на скачивание zip-архивом"
#: themes/default/templates/index.html.ep:207
msgid "Drag & drop images here"
msgstr "Перетащите и бросьте изображения сюда"
#: themes/default/templates/about.html.ep:7
msgid ""
"Drag and drop an image in the appropriate area or use the traditional way to "
"send files and Lutim will provide you four URLs. One to view the image, an "
"other to directly download it, one you can use on social networks and a last "
"to delete the image when you want."
msgstr ""
"Перетащите и бросьте изображение либо воспользуйтесь традиционным путём для "
"загрузки файлов, и Lutim предоставит вам четыре URL. Один для просмотра "
"изображения, другой — для скачивания, следующий вы можете использовать в "
"социальных сетях и последний — для удаления изображения, когда заходите."
#: themes/default/templates/index.html.ep:168 themes/default/templates/index.html.ep:199
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Зашифровать изображение (Lutim не хранит ключ)."
#: themes/default/templates/partial/lutim.js.ep:45 themes/default/templates/partial/myfiles.js.ep:113
msgid "Error while trying to modify the image."
msgstr "Ошибка при попытке модифицировать изображение."
#: themes/default/templates/stats.html.ep:10
msgid "Evolution of total files"
msgstr "Общее количество файлов"
#: themes/default/templates/myfiles.html.ep:126
msgid "Expires at"
msgstr "Истекает в"
#: themes/default/templates/myfiles.html.ep:112
msgid "Export localStorage data"
msgstr ""
#: themes/default/templates/myfiles.html.ep:121
msgid "File name"
msgstr "Имя файла"
#: themes/default/templates/about.html.ep:24
msgid ""
"For more details, see the <a href=\"https://framagit.org/luc/"
"lutim\">homepage of the project</a>."
msgstr ""
"Чтоб узнать больше, посетите <a href=\"https://framagit.org/luc/"
"lutim\">главную страницу проекта</a>."
#: themes/default/templates/partial/navbar.html.ep:80
msgid "Fork me!"
msgstr "Форкни меня!"
#: themes/default/templates/index.html.ep:10 themes/default/templates/index.html.ep:13 themes/default/templates/myfiles.html.ep:60 themes/default/templates/myfiles.html.ep:63
msgid "Gallery link"
msgstr "Ссылка на галерею"
#: themes/default/templates/partial/common.js.ep:116 themes/default/templates/partial/common.js.ep:134
msgid "Hit Ctrl+C, then Enter to copy the short link"
msgstr "Нажмите Ctrl+C, а затем Enter для копирования короткой ссылки"
#: themes/default/templates/layouts/default.html.ep:47
msgid "Homepage"
msgstr "Главная страница"
#: themes/default/templates/about.html.ep:20
msgid "How do you pronounce Lutim?"
msgstr "Как произносится Lutim?"
#: themes/default/templates/about.html.ep:6
msgid "How does it work?"
msgstr "Как это работает?"
#: themes/default/templates/about.html.ep:18
msgid "How to report an image?"
msgstr "Как пожаловаться на изображение?"
#: themes/default/templates/about.html.ep:14
msgid ""
"If the files are deleted if you ask it while posting it, their SHA512 "
"footprint are retained."
msgstr ""
"Если файлы были удалены, потому что вы указали это при их загрузке, их "
"контрольные суммы SHA512 сохранятся."
#: themes/default/templates/index.html.ep:181 themes/default/templates/index.html.ep:221
msgid "Image URL"
msgstr "URL изображения"
#: lib/Lutim/Command/cron/stats.pm:141 themes/default/templates/raw.html.ep:2
msgid "Image delay"
msgstr "Срок хранения"
#: themes/default/templates/partial/common.js.ep:157
msgid "Image deleted"
msgstr ""
#: lib/Lutim/Controller/Image.pm:753
msgid "Image not found."
msgstr "Изображение не найдено."
#: themes/default/templates/myfiles.html.ep:113
msgid "Import localStorage data"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:69
msgid "Informations"
msgstr "Информация"
#: themes/default/templates/partial/navbar.html.ep:25
msgid "Install webapp"
msgstr "Установить веб-приложение"
#: themes/default/templates/partial/navbar.html.ep:21
msgid "Instance's statistics"
msgstr "Статистика экземпляра"
#: themes/default/templates/about.html.ep:11
msgid "Is it really anonymous?"
msgstr "Это действительно анонимно?"
#: themes/default/templates/about.html.ep:9
msgid "Is it really free (as in free beer)?"
msgstr "Это действительно бесплатно (as in free beer)?"
#: themes/default/templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/"
"wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
"Как французское слово <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</"
"a> (/ly.tɛ̃/)."
#: themes/default/templates/index.html.ep:171 themes/default/templates/index.html.ep:202
msgid "Keep EXIF tags"
msgstr "Сохранить EXIF-теги"
#: themes/default/templates/partial/navbar.html.ep:43
msgid "Language"
msgstr "Язык"
#: themes/default/templates/index.html.ep:136 themes/default/templates/index.html.ep:184 themes/default/templates/index.html.ep:224 themes/default/templates/partial/lutim.js.ep:165
msgid "Let's go!"
msgstr "Вперёд!"
#: themes/default/templates/partial/navbar.html.ep:74
msgid "License:"
msgstr "Лицензия:"
#: themes/default/templates/index.html.ep:107 themes/default/templates/index.html.ep:109 themes/default/templates/partial/lutim.js.ep:112 themes/default/templates/partial/lutim.js.ep:116
msgid "Link for share on social networks"
msgstr "Ссылка для того, чтоб поделиться в социальных сетях"
#: themes/default/templates/login.html.ep:8
msgid "Login"
msgstr ""
#: themes/default/templates/partial/navbar.html.ep:33
msgid "Logout"
msgstr ""
#: themes/default/templates/zip.html.ep:7
msgid ""
"Lutim can't zip so many images at once, so it splitted your demand in "
"multiple URLs."
msgstr ""
"Lutim не может сархивировать так много картинок за раз, поэтому ваш запрос "
"разбит на несколько URL."
#: themes/default/templates/about.html.ep:4
msgid ""
"Lutim is a free (as in free beer) and anonymous image hosting service. It's "
"also the name of the free (as in free speech) software which provides this "
"service."
msgstr ""
"Lutim — это бесплатный (as in free beer) и анонимный сервис размещения "
"изображений. Также это название свободного (as in free speech) программного "
"обеспечения, предоставляющего этот сервис."
#: themes/default/templates/about.html.ep:25
msgid "Main developers"
msgstr "Главные разработчики"
#: themes/default/templates/index.html.ep:91 themes/default/templates/index.html.ep:93 themes/default/templates/partial/lutim.js.ep:86 themes/default/templates/partial/lutim.js.ep:89
msgid "Markdown syntax"
msgstr "Синтаксис Маркдауна"
#: themes/default/templates/partial/myfiles.js.ep:149
msgid "Modify expiration delay"
msgstr ""
#: themes/default/templates/myfiles.html.ep:7 themes/default/templates/partial/navbar.html.ep:18
msgid "My images"
msgstr "Мои изображения"
#: themes/default/templates/gallery.html.ep:45
msgid "Next (arrow right)"
msgstr "Следующий (стрелка вправо)"
#: themes/default/templates/partial/myfiles.js.ep:105 themes/default/templates/partial/myfiles.js.ep:132
msgid "No limit"
msgstr "Без ограничений"
#: themes/default/templates/index.html.ep:183 themes/default/templates/index.html.ep:216
msgid "Only images are allowed"
msgstr "Разрешены только изображения"
#: themes/default/templates/myfiles.html.ep:11
msgid ""
"Only the images sent with this browser will be listed here. The details are "
"stored in localStorage: if you delete your localStorage data, you'll loose "
"these details."
msgstr ""
"Здесь перечислены только изображения, загруженные через браузер. Статистика "
"хранится в localStorage: если вы удалите данные localStorage, вы потеряете "
"эту статистику."
#: themes/default/templates/about.html.ep:16
msgid ""
"Only the uploader! (well, only if he's the only owner of the images' rights "
"before the upload)"
msgstr ""
"Только тот, кто загрузил! (ну хорошо, только если он — единственный "
"правообладатель изображений до загрузки)"
#: themes/default/templates/login.html.ep:12
msgid "Password"
msgstr ""
#: themes/default/templates/zip.html.ep:12
msgid "Please click on each URL to download the different zip files."
msgstr ""
"Пожалуйста, щёлкните по каждому URL для скачивания отдельными zip-архивами."
#. (config('contact')
#: themes/default/templates/about.html.ep:19
msgid "Please contact the administrator: %1"
msgstr "Пожалуйста, свяжитесь с администратором: %1"
#: lib/Lutim/Controller/Authent.pm:36
msgid "Please, check your credentials: unable to authenticate."
msgstr ""
#: themes/default/templates/gallery.html.ep:43
msgid "Previous (arrow left)"
msgstr "Предыдущий (стрелка влево)"
#: themes/default/templates/index.html.ep:46 themes/default/templates/index.html.ep:49 themes/default/templates/myfiles.html.ep:96 themes/default/templates/myfiles.html.ep:99
msgid "Random image link"
msgstr ""
#: themes/default/templates/stats.html.ep:22
msgid "Raw stats"
msgstr "Сырые статистические данные"
#: themes/default/templates/myfiles.html.ep:52
msgid "Save changes"
msgstr ""
#: themes/default/templates/index.html.ep:176
msgid "Send an image"
msgstr "Послать изображение"
#: themes/default/templates/login.html.ep:16 themes/default/templates/logout.html.ep:5 themes/default/templates/partial/navbar.html.ep:37
msgid "Signin"
msgstr ""
#: themes/default/templates/index.html.ep:151 themes/default/templates/partial/gallery.js.ep:211 themes/default/templates/partial/lutim.js.ep:176
msgid "Something bad happened"
msgstr "Произошло что-то плохое"
#. ($c->config('contact')
#: lib/Lutim/Controller/Image.pm:760
msgid ""
"Something went wrong when creating the zip file. Try again later or contact "
"the administrator (%1)."
msgstr ""
"Что-то пошло не так при создании zip-архива. Попробуйте позже или свяжитесь "
"с администратором (%1)."
#: themes/default/templates/partial/navbar.html.ep:55
msgid "Support the author"
msgstr "Поддержать автора"
#: themes/default/templates/partial/navbar.html.ep:63
msgid "Support the author on Liberapay"
msgstr "Поддержать автора на Liberapay"
#: themes/default/templates/partial/navbar.html.ep:60
msgid "Support the author on Tipeee"
msgstr "Поддержать автора на Tipeee"
#: themes/default/templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
"of the administrator's choice (for the official instance, which is located "
"in France, it's one year)."
msgstr ""
"IP-адрес отправителя изображений сохраняется на время, зависящее от решения "
"администратора (официальное требование во Франции — один год)."
#: themes/default/templates/about.html.ep:23
msgid ""
"The Lutim software is a <a href=\"http://en.wikipedia.org/wiki/"
"Free_software\">free software</a>, which allows you to download and install "
"it on you own server. Have a look at the <a href=\"https://www.gnu.org/"
"licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
msgstr ""
"Lutim — это <a href=\"https://ru.wikipedia.org/wiki/"
"%D0%A1%D0%B2%D0%BE%D0%B1%D0%BE%D0%B4%D0%BD%D0%BE%D0%B5_%D0%BF%D1%80%D0%BE%D0%B3%D1%80%D0%B0%D0%BC%D0%BC%D0%BD%D0%BE%D0%B5_%D0%BE%D0%B1%D0%B5%D1%81%D0%BF%D0%B5%D1%87%D0%B5%D0%BD%D0%B8%D0%B5\">свободное "
"программное обеспечение</a>, которое вы можете скачать и установить на свой "
"сервер. Посмотрите <a href=\"https://www.gnu.org/licenses/agpl-3.0."
"html\">AGPL</a>, чтоб увидеть, что вы можете делать."
#: lib/Lutim/Controller/Image.pm:346
msgid "The URL is not valid."
msgstr "Недопустимый URL."
#: themes/default/templates/zip.html.ep:16
msgid ""
"The automatic download process will open a tab in your browser for each link."
" You need to allow popups for Lutim."
msgstr ""
"Процесс автоматического скачивания откроет вкладку в вашем браузере для "
"каждой ссылки. Вам надо разрешить всплывающие окна для Lutim."
#: themes/default/templates/partial/myfiles.js.ep:32
msgid "The data has been successfully imported."
msgstr ""
#: lib/Lutim/Controller/Image.pm:159 lib/Lutim/Controller/Image.pm:227
msgid "The delete token is invalid."
msgstr "Неправильный ключ для удаления."
#. ($upload->filename)
#: lib/Lutim/Controller/Image.pm:487
msgid "The file %1 is not an image."
msgstr "Файл %1 — не изображение."
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#. (config('max_file_size')
#: lib/Lutim/Controller/Image.pm:310 lib/Lutim/Controller/Image.pm:379 themes/default/templates/partial/lutim.js.ep:249
msgid "The file exceed the size limit (%1)"
msgstr "Размер файла превосходит ограничение (%1)"
#: themes/default/templates/stats.html.ep:12
msgid "The graph's datas are not updated in real-time."
msgstr "Данные графиков не обновляются в реальном времени."
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:229
msgid "The image %1 has already been deleted."
msgstr "Изображение %1 уже было удалено."
#. ($image->filename)
#: lib/Lutim/Controller/Image.pm:238 lib/Lutim/Controller/Image.pm:243
msgid "The image %1 has been successfully deleted"
msgstr "Изображение %1 успешно удалено"
#: lib/Lutim/Controller/Image.pm:167
msgid "The image's delay has been successfully modified"
msgstr "Срок хранения изображения успешно изменён"
#: themes/default/templates/index.html.ep:63
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr "Изображения зашифрованы на сервере (Lutim не хранит ключ)."
#: themes/default/templates/about.html.ep:5
msgid ""
"The images you post on Lutim can be stored indefinitely or be deleted at "
"first view or after a delay selected from those proposed."
msgstr ""
"Изображения, загружаемые в Lutim, могут храниться неопределённо долго либо "
"быть удалёнными после первого просмотра или по истечении определённого "
"промежутка времени."
#: themes/default/templates/partial/gallery.js.ep:257
msgid "There is XXXX image(s) in the gallery"
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller/Image.pm:484
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
"Больше нет доступных URL. Попробуйте снова или свяжитесь с администратором. "
"%1"
#: themes/default/templates/gallery.html.ep:30
msgid "Toggle fullscreen"
msgstr "Переключить полноэкранный режим"
#: themes/default/templates/partial/navbar.html.ep:8
msgid "Toggle navigation"
msgstr "Переключить навигацию"
#: lib/Lutim/Command/cron/stats.pm:150 themes/default/templates/raw.html.ep:11
msgid "Total"
msgstr "Итого"
#: themes/default/templates/index.html.ep:78 themes/default/templates/partial/lutim.js.ep:17
msgid "Tweet it!"
msgstr "Твитнуть!"
#: themes/default/templates/partial/common.js.ep:110 themes/default/templates/partial/common.js.ep:90
msgid "Unable to copy to clipboard"
msgstr ""
#. ($short)
#: lib/Lutim/Controller/Image.pm:107 lib/Lutim/Controller/Image.pm:201 lib/Lutim/Controller/Image.pm:272
msgid "Unable to find the image %1."
msgstr "Невозможно найти изображение %1."
#: lib/Lutim/Controller/Image.pm:573 lib/Lutim/Controller/Image.pm:618 lib/Lutim/Controller/Image.pm:657 lib/Lutim/Controller/Image.pm:700 lib/Lutim/Controller/Image.pm:712 lib/Lutim/Controller/Image.pm:723 lib/Lutim/Controller/Image.pm:750 lib/Lutim/Plugin/Helpers.pm:88
msgid "Unable to find the image: it has been deleted."
msgstr "Невозможно найти изображение: оно было удалено."
#: lib/Lutim/Controller/Image.pm:144
msgid "Unable to get counter"
msgstr "Невозможно получить счётчик"
#: themes/default/templates/about.html.ep:17
msgid ""
"Unlike many image sharing services, you don't give us rights on uploaded "
"images."
msgstr ""
"В отличие от многих сервисов публикации изображений, вы не даёте нам права "
"на переданные изображения."
#: themes/default/templates/index.html.ep:180 themes/default/templates/index.html.ep:219
msgid "Upload an image with its URL"
msgstr "Загрузить изображение с URL"
#: themes/default/templates/myfiles.html.ep:125
msgid "Uploaded at"
msgstr "Загружено в"
#: themes/default/templates/stats.html.ep:6
msgid "Uploaded files by days"
msgstr "Загружено файлов по дням"
#. ($c->app->config('contact')
#: lib/Lutim/Plugin/Helpers.pm:221
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
msgstr ""
"Загрузка сейчас отключена, пожалуйста, попробуйте позже или свяжитесь с "
"администратором (%1)."
#: themes/default/templates/index.html.ep:83 themes/default/templates/index.html.ep:85 themes/default/templates/myfiles.html.ep:122 themes/default/templates/partial/lutim.js.ep:72 themes/default/templates/partial/lutim.js.ep:76
msgid "View link"
msgstr "Ссылка на просмотр"
#: themes/default/templates/about.html.ep:22
msgid "What about the software which provides the service?"
msgstr "Что насчёт программного обеспечения, предоставляющего этот сервис?"
#: themes/default/templates/about.html.ep:3
msgid "What is Lutim?"
msgstr "Что такое Lutim?"
#: themes/default/templates/about.html.ep:15
msgid "Who owns rights on images uploaded on Lutim?"
msgstr "Кто обладает правами на изображения, загруженные на Lutim?"
#: themes/default/templates/about.html.ep:12
msgid ""
"Yes, it is! On the other side, for legal reasons, your IP address will be "
"stored when you send an image. Don't panic, it is normally the case of all "
"sites on which you send files!"
msgstr ""
"Да, это так! С другой стороны, согласно требованиям закона, ваш IP-адрес "
"будет сохранён при загрузке изображения. Без паники, это обычная практика на "
"всех сайтах, куда посылают файлы."
#: themes/default/templates/about.html.ep:10
msgid ""
"Yes, it is! On the other side, if you want to support the developer, you can "
"do it via <a href=\"https://www.tipeee.com/fiat-tux\">Tipeee</a> or via <a "
"href=\"https://liberapay.com/sky/\">Liberapay</a>."
msgstr ""
"Да, это так! С другой стороны, если вы хотите поддержать разработчика, вы "
"можете сделать это через <a href=\"https://www.tipeee.com/fiat-tux\">Tipeee</"
"a> или <a href=\"https://liberapay.com/sky/\">Liberapay</a>."
#: themes/default/templates/zip.html.ep:6
msgid "You asked to download a zip archive for too much files."
msgstr "Вы запросили скачивание zip-архива с очень большим числом файлов."
#: themes/default/templates/about.html.ep:8
msgid ""
"You can, optionally, request that the image(s) posted on Lutim to be deleted "
"at first view (or download) or after the delay selected from those proposed."
msgstr ""
"Вы можете, при желании, запросить, чтоб загруженные в Lutim изображения были "
"удалены после первого просмотра (либо скачивания) или по истечении "
"выбранного промежутка времени."
#: lib/Lutim/Controller/Authent.pm:27
msgid "You have been successfully logged in."
msgstr ""
#: lib/Lutim/Controller/Authent.pm:66 themes/default/templates/logout.html.ep:3
msgid "You have been successfully logged out."
msgstr ""
#: themes/default/templates/gallery.html.ep:31
msgid "Zoom in/out"
msgstr "Приблизить/отдалить"
#: themes/default/templates/about.html.ep:27
msgid "and on"
msgstr "и на"
#: themes/default/templates/about.html.ep:40
msgid "arabic translation"
msgstr "арабский перевод"
#: themes/default/templates/about.html.ep:27
msgid "core developer"
msgstr "разработчик ядра"
#: lib/Lutim.pm:348 lib/Lutim/Command/cron/stats.pm:145 lib/Lutim/Command/cron/stats.pm:159 lib/Lutim/Command/cron/stats.pm:176 themes/default/templates/index.html.ep:3 themes/default/templates/myfiles.html.ep:3 themes/default/templates/partial/raw.js.ep:21 themes/default/templates/partial/raw.js.ep:4 themes/default/templates/raw.html.ep:6
msgid "no time limit"
msgstr "без ограничения времени"
#: themes/default/templates/about.html.ep:38
msgid "occitan translation"
msgstr "окситанский перевод"
#: themes/default/templates/about.html.ep:27
msgid "on"
msgstr "в"
#: themes/default/templates/about.html.ep:39
msgid "paste image to upload ability"
msgstr "paste image to upload ability"
#: themes/default/templates/about.html.ep:41
msgid "russian translation"
msgstr "русский перевод"
#: themes/default/templates/about.html.ep:36
msgid "spanish translation"
msgstr "испанский перевод"
#: themes/default/templates/about.html.ep:28
msgid "webapp developer"
msgstr "разработчик веб-приложения"

View File

@@ -4029,6 +4029,129 @@ button.close {
border: 0;
-webkit-appearance: none;
}
.modal-open {
overflow: hidden;
}
.modal {
display: none;
overflow: hidden;
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1050;
-webkit-overflow-scrolling: touch;
outline: 0;
}
.modal.fade .modal-dialog {
-webkit-transform: translate(0, -25%);
-ms-transform: translate(0, -25%);
-o-transform: translate(0, -25%);
transform: translate(0, -25%);
-webkit-transition: -webkit-transform 0.3s ease-out;
-o-transition: -o-transform 0.3s ease-out;
transition: transform 0.3s ease-out;
}
.modal.in .modal-dialog {
-webkit-transform: translate(0, 0);
-ms-transform: translate(0, 0);
-o-transform: translate(0, 0);
transform: translate(0, 0);
}
.modal-open .modal {
overflow-x: hidden;
overflow-y: auto;
}
.modal-dialog {
position: relative;
width: auto;
margin: 10px;
}
.modal-content {
position: relative;
background-color: #ffffff;
border: 1px solid #999999;
border: 1px solid rgba(0, 0, 0, 0.2);
border-radius: 6px;
-webkit-box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
box-shadow: 0 3px 9px rgba(0, 0, 0, 0.5);
-webkit-background-clip: padding-box;
background-clip: padding-box;
outline: 0;
}
.modal-backdrop {
position: fixed;
top: 0;
right: 0;
bottom: 0;
left: 0;
z-index: 1040;
background-color: #000000;
}
.modal-backdrop.fade {
opacity: 0;
filter: alpha(opacity=0);
}
.modal-backdrop.in {
opacity: 0.5;
filter: alpha(opacity=50);
}
.modal-header {
padding: 15px;
border-bottom: 1px solid #e5e5e5;
}
.modal-header .close {
margin-top: -2px;
}
.modal-title {
margin: 0;
line-height: 1.42857143;
}
.modal-body {
position: relative;
padding: 20px;
}
.modal-footer {
padding: 20px;
text-align: right;
border-top: 1px solid #e5e5e5;
}
.modal-footer .btn + .btn {
margin-left: 5px;
margin-bottom: 0;
}
.modal-footer .btn-group .btn + .btn {
margin-left: -1px;
}
.modal-footer .btn-block + .btn-block {
margin-left: 0;
}
.modal-scrollbar-measure {
position: absolute;
top: -9999px;
width: 50px;
height: 50px;
overflow: scroll;
}
@media (min-width: 768px) {
.modal-dialog {
width: 600px;
margin: 30px auto;
}
.modal-content {
-webkit-box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
box-shadow: 0 5px 15px rgba(0, 0, 0, 0.5);
}
.modal-sm {
width: 300px;
}
}
@media (min-width: 992px) {
.modal-lg {
width: 900px;
}
}
.clearfix:before,
.clearfix:after,
.dl-horizontal dd:before,
@@ -4052,7 +4175,11 @@ button.close {
.navbar-header:before,
.navbar-header:after,
.navbar-collapse:before,
.navbar-collapse:after {
.navbar-collapse:after,
.modal-header:before,
.modal-header:after,
.modal-footer:before,
.modal-footer:after {
content: " ";
display: table;
}
@@ -4067,7 +4194,9 @@ button.close {
.nav:after,
.navbar:after,
.navbar-header:after,
.navbar-collapse:after {
.navbar-collapse:after,
.modal-header:after,
.modal-footer:after {
clear: both;
}
.center-block {

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -51,7 +51,7 @@
.pswp__button,
.pswp__button--arrow--left:before,
.pswp__button--arrow--right:before {
background: url(default-skin.png) 0 0 no-repeat;
background: url(default-skin/default-skin.png) 0 0 no-repeat;
background-size: 264px 88px;
width: 44px;
height: 44px; }

View File

@@ -9,8 +9,9 @@
.icon-twitter:before { content: '\e807'; } /* '' */
.icon-clipboard:before { content: '\e808'; } /* '' */
.icon-spinner:before { content: '\e809'; } /* '' */
.icon-flattr:before { content: '\e80a'; } /* '' */
.icon-shuffle:before { content: '\e80a'; } /* '' */
.icon-cancel:before { content: '\e80b'; } /* '' */
.icon-picture:before { content: '\e80c'; } /* '' */
.icon-file-archive:before { content: '\e80d'; } /* '' */
.icon-language:before { content: '\e80e'; } /* '' */
.icon-language:before { content: '\e80e'; } /* '' */
.icon-edit:before { content: '\e80f'; } /* '' */

File diff suppressed because one or more lines are too long

View File

@@ -9,8 +9,9 @@
.icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe807;&nbsp;'); }
.icon-clipboard { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe808;&nbsp;'); }
.icon-spinner { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe809;&nbsp;'); }
.icon-flattr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }
.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80b;&nbsp;'); }
.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80c;&nbsp;'); }
.icon-file-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80d;&nbsp;'); }
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80e;&nbsp;'); }
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80e;&nbsp;'); }
.icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80f;&nbsp;'); }

View File

@@ -20,8 +20,9 @@
.icon-twitter { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe807;&nbsp;'); }
.icon-clipboard { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe808;&nbsp;'); }
.icon-spinner { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe809;&nbsp;'); }
.icon-flattr { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }
.icon-shuffle { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80a;&nbsp;'); }
.icon-cancel { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80b;&nbsp;'); }
.icon-picture { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80c;&nbsp;'); }
.icon-file-archive { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80d;&nbsp;'); }
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80e;&nbsp;'); }
.icon-language { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80e;&nbsp;'); }
.icon-edit { *zoom: expression( this.runtimeStyle['zoom'] = '1', this.innerHTML = '&#xe80f;&nbsp;'); }

View File

@@ -1,11 +1,11 @@
@font-face {
font-family: 'fontello';
src: url('../font/fontello.eot?84200725');
src: url('../font/fontello.eot?84200725#iefix') format('embedded-opentype'),
url('../font/fontello.woff2?84200725') format('woff2'),
url('../font/fontello.woff?84200725') format('woff'),
url('../font/fontello.ttf?84200725') format('truetype'),
url('../font/fontello.svg?84200725#fontello') format('svg');
src: url('../font/fontello.eot?74275093');
src: url('../font/fontello.eot?74275093#iefix') format('embedded-opentype'),
url('../font/fontello.woff2?74275093') format('woff2'),
url('../font/fontello.woff?74275093') format('woff'),
url('../font/fontello.ttf?74275093') format('truetype'),
url('../font/fontello.svg?74275093#fontello') format('svg');
font-weight: normal;
font-style: normal;
}
@@ -15,7 +15,7 @@
@media screen and (-webkit-min-device-pixel-ratio:0) {
@font-face {
font-family: 'fontello';
src: url('../font/fontello.svg?84200725#fontello') format('svg');
src: url('../font/fontello.svg?74275093#fontello') format('svg');
}
}
*/
@@ -65,8 +65,9 @@
.icon-twitter:before { content: '\e807'; } /* '' */
.icon-clipboard:before { content: '\e808'; } /* '' */
.icon-spinner:before { content: '\e809'; } /* '' */
.icon-flattr:before { content: '\e80a'; } /* '' */
.icon-shuffle:before { content: '\e80a'; } /* '' */
.icon-cancel:before { content: '\e80b'; } /* '' */
.icon-picture:before { content: '\e80c'; } /* '' */
.icon-file-archive:before { content: '\e80d'; } /* '' */
.icon-language:before { content: '\e80e'; } /* '' */
.icon-language:before { content: '\e80e'; } /* '' */
.icon-edit:before { content: '\e80f'; } /* '' */

File diff suppressed because one or more lines are too long

View File

@@ -104,3 +104,33 @@ label.always-encrypt {
@media (max-width: 675px) {
.gallery { column-count: 1 }
}
.border-zero {
border: 0;
}
.copy-node {
width: 1px;
height: 1px;
position: 'fixed';
top: 5px;
}
.width-zero {
width: 0%;
}
.pdg-left-10 {
padding-left: 10px;
}
.spin {
font-size: 200%;
display: none;
}
#myfiles td.ellips {
max-width: 300px;
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}
h1.ellips {
white-space: nowrap;
overflow: hidden;
text-overflow: ellipsis;
}

View File

@@ -1,2 +0,0 @@
.morris-hover{position:absolute;z-index:1000;}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255, 255, 255, 0.8);border:solid 2px rgba(230, 230, 230, 0.8);font-family:sans-serif;font-size:12px;text-align:center;}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0;}
.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0;}

View File

@@ -0,0 +1,2 @@
.morris-hover{position:absolute;z-index:1000}.morris-hover.morris-default-style{border-radius:10px;padding:6px;color:#666;background:rgba(255,255,255,0.8);border:solid 2px rgba(230,230,230,0.8);font-family:sans-serif;font-size:12px;text-align:center}.morris-hover.morris-default-style .morris-hover-row-label{font-weight:bold;margin:0.25em 0}
.morris-hover.morris-default-style .morris-hover-point{white-space:nowrap;margin:0.1em 0}

View File

@@ -0,0 +1 @@
@-moz-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-webkit-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-o-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@-ms-keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}@keyframes spin{0%{-moz-transform:rotate(0deg);-o-transform:rotate(0deg);-webkit-transform:rotate(0deg);transform:rotate(0deg)}to{-moz-transform:rotate(359deg);-o-transform:rotate(359deg);-webkit-transform:rotate(359deg);transform:rotate(359deg)}}.animate-spin{-moz-animation:spin 2s infinite linear;-o-animation:spin 2s infinite linear;-webkit-animation:spin 2s infinite linear;animation:spin 2s infinite linear;display:inline-block}.uploader{border:2px dotted #a5a5c7;width:100%;color:#92aab0;text-align:center;vertical-align:middle;padding:30px 0;margin-bottom:10px;font-size:200%;cursor:default;-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.uploader div.or{font-size:50%;font-weight:700;color:silver;padding:10px}@media (max-width:768px){.uploader div.browser label{max-width:95%}}@media (min-width:768px){.uploader div.browser label{width:300px}}.uploader div.browser label{background-color:#5a7bc2;color:#fff;padding:6px 0;font-size:40%;font-weight:700;cursor:pointer;border-radius:2px;position:relative;overflow:hidden;display:block;margin:20px auto 0;box-shadow:2px 2px 2px #888}.uploader div.browser span{cursor:pointer}.uploader div.browser input{position:absolute;top:0;right:0;margin:0;border:solid transparent;border-width:0 0 100px 200px;opacity:0;filter:alpha(opacity= 0);-o-transform:translate(250px,-50px) scale(1);-moz-transform:translate(-300px,0) scale(4);direction:ltr;cursor:pointer}.uploader div.browser label:hover{background-color:#427fed}@font-face{font-family:'markdown';src:url(../../font/markdown.eot?-6fnbp5);src:url(../../font/markdown.eot?#iefix-6fnbp5) format('embedded-opentype'),url(../../font/markdown.woff?-6fnbp5) format('woff'),url(../../font/markdown.ttf?-6fnbp5) format('truetype'),url(../../font/markdown.svg?-6fnbp5#markdown) format('svg');font-weight:400;font-style:normal}[class*=" markdown-"],[class^=markdown-]{font-family:'markdown';speak:none;font-style:normal;font-weight:400;font-variant:normal;text-transform:none;line-height:1;-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale}.markdown-mark:before{content:"\e600"}.markdown-mark-solid:before{content:"\e601"}

View File

@@ -0,0 +1,60 @@
/*!
* Toastify js 1.2.0
* https://github.com/apvarun/toastify-js
* @license MIT licensed
*
* Copyright (C) 2018 Varun A P
*/
.toastify {
padding: 12px 20px;
color: #ffffff;
display: inline-block;
box-shadow: 0 3px 6px -1px rgba(0, 0, 0, 0.12), 0 10px 36px -4px rgba(77, 96, 232, 0.3);
background: -webkit-linear-gradient(315deg, #73a5ff, #5477f5);
background: linear-gradient(135deg, #73a5ff, #5477f5);
position: fixed;
opacity: 0;
transition: all 0.4s cubic-bezier(0.215, 0.61, 0.355, 1);
border-radius: 2px;
cursor: pointer;
text-decoration: none;
max-width: calc(50% - 20px);
}
.toastify.on {
opacity: 1;
}
.toast-close {
opacity: 0.4;
padding: 0 5px;
}
.right {
right: 15px;
}
.left {
left: 15px;
}
.top {
top: -150px;
}
.bottom {
bottom: -150px;
}
.rounded {
border-radius: 25px;
}
.avatar{
width: 1.5em;
height: 1.5em;
margin: 0 5px;
border-radius: 2px;
}
@media only screen and (max-width: 360px){
.right, .left{
margin-left: auto;
margin-right: auto;
left: 0;
right: 0;
max-width: fit-content;
}
}

View File

@@ -0,0 +1,11 @@
/* vim:set sw=4 ts=4 sts=4 ft=css expandtab: */
html {
max-height:100%;
}
.height-97 {
height: 97%;
}
.freezeframe {
max-width: 100%;
max-height:100%;
}

View File

@@ -0,0 +1 @@
html{max-height:100%}.height-97{height:97%}.freezeframe{max-width:100%;max-height:100%}

View File

@@ -26,7 +26,7 @@
<glyph glyph-name="spinner" unicode="&#xe809;" d="M469 614v204q129 0 237-61t169-170 62-237h-204q0 72-36 133t-95 96-133 35z" horiz-adv-x="937.5" />
<glyph glyph-name="flattr" unicode="&#xe80a;" d="M0-37l0 514q0 179 85 278t259 99l548 0q-5-5-52-53t-100-101-109-109-95-93-42-37q-15 0-15 16l0 156-48 0q-59 0-94-6t-63-26-39-57-12-96l0-262z m67-117q5 5 53 53t100 101 109 110 95 93 41 36q15 0 15-16l0-156 48 0q116 0 162 36t45 149l0 262 224 223 0-514q0-179-84-278t-260-99l-548 0z" horiz-adv-x="959" />
<glyph glyph-name="shuffle" unicode="&#xe80a;" d="M754 516q-54 0-105-32t-80-66-83-104q-48-62-75-94t-78-77-107-66-122-21l-104 0 0 140 104 0q54 0 106 32t81 66 83 104q62 82 101 126t116 88 163 44l36 0 0 120 210-180-210-180 0 100-36 0z m-484-88q-74 78-166 78l-104 0 0 140 104 0q140 0 254-108-14-16-37-45t-27-33q-8-12-24-32z m520-242l0 100 210-180-210-180 0 120-36 0q-140 0-260 116 46 58 72 92 0 2 6 9t8 11q84-88 174-88l36 0z" horiz-adv-x="1000" />
<glyph glyph-name="cancel" unicode="&#xe80b;" d="M0 71l279 279-279 279 221 221 279-279 279 279 221-221-279-279 279-279-221-221-279 279-279-279z" horiz-adv-x="1000" />
@@ -35,6 +35,8 @@
<glyph glyph-name="file-archive" unicode="&#xe80d;" d="M357 636v71h-71v-71h71z m72-72v72h-72v-72h72z m-72-71v71h-71v-71h71z m72-72v72h-72v-72h72z m390 217q16-16 27-42t11-50v-642q0-23-15-38t-38-16h-750q-23 0-38 16t-16 38v892q0 23 16 38t38 16h500q22 0 49-11t42-27z m-248 136v-210h210q-5 17-12 23l-175 175q-6 7-23 12z m215-853v572h-232q-23 0-38 16t-16 37v233h-71v-72h-72v72h-286v-858h715z m-350 403l60-195q4-15 4-29 0-46-40-77t-103-30-102 30-41 77q0 14 5 29 12 35 67 221v71h71v-71h44q13 0 22-7t13-19z m-79-260q30 0 51 11t21 25-21 25-51 11-50-11-21-25 21-25 50-11z" horiz-adv-x="857.1" />
<glyph glyph-name="language" unicode="&#xe80e;" d="M988 306q30-82-10-176t-134-160q-10 0-12 2t-16 19-16 19q-2 6 2 10 86 60 117 152t-11 148q-16-38-39-76t-59-80-86-65-106-15q-52 6-84 41t-32 93q0 84 60 148 50 50 114 66l-2 100q-140-24-146-24-6-2-10 4 0 2-5 29t-5 31q-2 2 1 4t7 2l156 28q0 110-2 114 0 8 8 8 46 0 52 2 10 0 10-8l0-104q158 22 164 22 8 4 10-6 0-2 4-23t4-25q4-10-4-12l-176-30 0-102 12 0q86 0 148-36t86-100z m-370-160q28-6 62 6l-4 214q-34-12-60-40-44-44-44-108 0-66 46-72z m122 28q28 24 58 68t45 79 7 41q-36 18-96 18-2 0-6-1t-6-1z m-448 382q10-28 53-165t83-261 40-126q0-4-4-4l-86 0q-6 0-6 4l-50 166-176 0q-48-164-50-166 0-4-6-4l-86 0q-4 0-4 4 10 18 176 552 2 8 10 8l96 0q10 0 10-8z m-130-316l144 0-72 264z" horiz-adv-x="1001" />
<glyph glyph-name="edit" unicode="&#xe80f;" d="M496 189l64 65-85 85-64-65v-31h53v-54h32z m245 402q-9 9-18 0l-196-196q-9-9 0-18t18 0l196 196q9 9 0 18z m45-331v-106q0-67-47-114t-114-47h-464q-67 0-114 47t-47 114v464q0 66 47 113t114 48h464q35 0 65-14 9-4 10-13 2-10-5-16l-27-28q-8-8-18-4-13 3-25 3h-464q-37 0-63-26t-27-63v-464q0-37 27-63t63-27h464q37 0 63 27t26 63v70q0 7 5 12l36 36q8 8 20 4t11-16z m-54 411l161-160-375-375h-161v160z m248-73l-51-52-161 161 51 52q16 15 38 15t38-15l85-85q16-16 16-38t-16-38z" horiz-adv-x="1000" />
</font>
</defs>
</svg>

Before

Width:  |  Height:  |  Size: 7.2 KiB

After

Width:  |  Height:  |  Size: 7.8 KiB

View File

@@ -280,6 +280,346 @@ if (typeof jQuery === 'undefined') {
}(jQuery);
/* ========================================================================
* Bootstrap: modal.js v3.3.7
* http://getbootstrap.com/javascript/#modals
* ========================================================================
* Copyright 2011-2016 Twitter, Inc.
* Licensed under MIT (https://github.com/twbs/bootstrap/blob/master/LICENSE)
* ======================================================================== */
+function ($) {
'use strict';
// MODAL CLASS DEFINITION
// ======================
var Modal = function (element, options) {
this.options = options
this.$body = $(document.body)
this.$element = $(element)
this.$dialog = this.$element.find('.modal-dialog')
this.$backdrop = null
this.isShown = null
this.originalBodyPad = null
this.scrollbarWidth = 0
this.ignoreBackdropClick = false
if (this.options.remote) {
this.$element
.find('.modal-content')
.load(this.options.remote, $.proxy(function () {
this.$element.trigger('loaded.bs.modal')
}, this))
}
}
Modal.VERSION = '3.3.7'
Modal.TRANSITION_DURATION = 300
Modal.BACKDROP_TRANSITION_DURATION = 150
Modal.DEFAULTS = {
backdrop: true,
keyboard: true,
show: true
}
Modal.prototype.toggle = function (_relatedTarget) {
return this.isShown ? this.hide() : this.show(_relatedTarget)
}
Modal.prototype.show = function (_relatedTarget) {
var that = this
var e = $.Event('show.bs.modal', { relatedTarget: _relatedTarget })
this.$element.trigger(e)
if (this.isShown || e.isDefaultPrevented()) return
this.isShown = true
this.checkScrollbar()
this.setScrollbar()
this.$body.addClass('modal-open')
this.escape()
this.resize()
this.$element.on('click.dismiss.bs.modal', '[data-dismiss="modal"]', $.proxy(this.hide, this))
this.$dialog.on('mousedown.dismiss.bs.modal', function () {
that.$element.one('mouseup.dismiss.bs.modal', function (e) {
if ($(e.target).is(that.$element)) that.ignoreBackdropClick = true
})
})
this.backdrop(function () {
var transition = $.support.transition && that.$element.hasClass('fade')
if (!that.$element.parent().length) {
that.$element.appendTo(that.$body) // don't move modals dom position
}
that.$element
.show()
.scrollTop(0)
that.adjustDialog()
if (transition) {
that.$element[0].offsetWidth // force reflow
}
that.$element.addClass('in')
that.enforceFocus()
var e = $.Event('shown.bs.modal', { relatedTarget: _relatedTarget })
transition ?
that.$dialog // wait for modal to slide in
.one('bsTransitionEnd', function () {
that.$element.trigger('focus').trigger(e)
})
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
that.$element.trigger('focus').trigger(e)
})
}
Modal.prototype.hide = function (e) {
if (e) e.preventDefault()
e = $.Event('hide.bs.modal')
this.$element.trigger(e)
if (!this.isShown || e.isDefaultPrevented()) return
this.isShown = false
this.escape()
this.resize()
$(document).off('focusin.bs.modal')
this.$element
.removeClass('in')
.off('click.dismiss.bs.modal')
.off('mouseup.dismiss.bs.modal')
this.$dialog.off('mousedown.dismiss.bs.modal')
$.support.transition && this.$element.hasClass('fade') ?
this.$element
.one('bsTransitionEnd', $.proxy(this.hideModal, this))
.emulateTransitionEnd(Modal.TRANSITION_DURATION) :
this.hideModal()
}
Modal.prototype.enforceFocus = function () {
$(document)
.off('focusin.bs.modal') // guard against infinite focus loop
.on('focusin.bs.modal', $.proxy(function (e) {
if (document !== e.target &&
this.$element[0] !== e.target &&
!this.$element.has(e.target).length) {
this.$element.trigger('focus')
}
}, this))
}
Modal.prototype.escape = function () {
if (this.isShown && this.options.keyboard) {
this.$element.on('keydown.dismiss.bs.modal', $.proxy(function (e) {
e.which == 27 && this.hide()
}, this))
} else if (!this.isShown) {
this.$element.off('keydown.dismiss.bs.modal')
}
}
Modal.prototype.resize = function () {
if (this.isShown) {
$(window).on('resize.bs.modal', $.proxy(this.handleUpdate, this))
} else {
$(window).off('resize.bs.modal')
}
}
Modal.prototype.hideModal = function () {
var that = this
this.$element.hide()
this.backdrop(function () {
that.$body.removeClass('modal-open')
that.resetAdjustments()
that.resetScrollbar()
that.$element.trigger('hidden.bs.modal')
})
}
Modal.prototype.removeBackdrop = function () {
this.$backdrop && this.$backdrop.remove()
this.$backdrop = null
}
Modal.prototype.backdrop = function (callback) {
var that = this
var animate = this.$element.hasClass('fade') ? 'fade' : ''
if (this.isShown && this.options.backdrop) {
var doAnimate = $.support.transition && animate
this.$backdrop = $(document.createElement('div'))
.addClass('modal-backdrop ' + animate)
.appendTo(this.$body)
this.$element.on('click.dismiss.bs.modal', $.proxy(function (e) {
if (this.ignoreBackdropClick) {
this.ignoreBackdropClick = false
return
}
if (e.target !== e.currentTarget) return
this.options.backdrop == 'static'
? this.$element[0].focus()
: this.hide()
}, this))
if (doAnimate) this.$backdrop[0].offsetWidth // force reflow
this.$backdrop.addClass('in')
if (!callback) return
doAnimate ?
this.$backdrop
.one('bsTransitionEnd', callback)
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
callback()
} else if (!this.isShown && this.$backdrop) {
this.$backdrop.removeClass('in')
var callbackRemove = function () {
that.removeBackdrop()
callback && callback()
}
$.support.transition && this.$element.hasClass('fade') ?
this.$backdrop
.one('bsTransitionEnd', callbackRemove)
.emulateTransitionEnd(Modal.BACKDROP_TRANSITION_DURATION) :
callbackRemove()
} else if (callback) {
callback()
}
}
// these following methods are used to handle overflowing modals
Modal.prototype.handleUpdate = function () {
this.adjustDialog()
}
Modal.prototype.adjustDialog = function () {
var modalIsOverflowing = this.$element[0].scrollHeight > document.documentElement.clientHeight
this.$element.css({
paddingLeft: !this.bodyIsOverflowing && modalIsOverflowing ? this.scrollbarWidth : '',
paddingRight: this.bodyIsOverflowing && !modalIsOverflowing ? this.scrollbarWidth : ''
})
}
Modal.prototype.resetAdjustments = function () {
this.$element.css({
paddingLeft: '',
paddingRight: ''
})
}
Modal.prototype.checkScrollbar = function () {
var fullWindowWidth = window.innerWidth
if (!fullWindowWidth) { // workaround for missing window.innerWidth in IE8
var documentElementRect = document.documentElement.getBoundingClientRect()
fullWindowWidth = documentElementRect.right - Math.abs(documentElementRect.left)
}
this.bodyIsOverflowing = document.body.clientWidth < fullWindowWidth
this.scrollbarWidth = this.measureScrollbar()
}
Modal.prototype.setScrollbar = function () {
var bodyPad = parseInt((this.$body.css('padding-right') || 0), 10)
this.originalBodyPad = document.body.style.paddingRight || ''
if (this.bodyIsOverflowing) this.$body.css('padding-right', bodyPad + this.scrollbarWidth)
}
Modal.prototype.resetScrollbar = function () {
this.$body.css('padding-right', this.originalBodyPad)
}
Modal.prototype.measureScrollbar = function () { // thx walsh
var scrollDiv = document.createElement('div')
scrollDiv.className = 'modal-scrollbar-measure'
this.$body.append(scrollDiv)
var scrollbarWidth = scrollDiv.offsetWidth - scrollDiv.clientWidth
this.$body[0].removeChild(scrollDiv)
return scrollbarWidth
}
// MODAL PLUGIN DEFINITION
// =======================
function Plugin(option, _relatedTarget) {
return this.each(function () {
var $this = $(this)
var data = $this.data('bs.modal')
var options = $.extend({}, Modal.DEFAULTS, $this.data(), typeof option == 'object' && option)
if (!data) $this.data('bs.modal', (data = new Modal(this, options)))
if (typeof option == 'string') data[option](_relatedTarget)
else if (options.show) data.show(_relatedTarget)
})
}
var old = $.fn.modal
$.fn.modal = Plugin
$.fn.modal.Constructor = Modal
// MODAL NO CONFLICT
// =================
$.fn.modal.noConflict = function () {
$.fn.modal = old
return this
}
// MODAL DATA-API
// ==============
$(document).on('click.bs.modal.data-api', '[data-toggle="modal"]', function (e) {
var $this = $(this)
var href = $this.attr('href')
var $target = $($this.attr('data-target') || (href && href.replace(/.*(?=#[^\s]+$)/, ''))) // strip for ie7
var option = $target.data('bs.modal') ? 'toggle' : $.extend({ remote: !/#/.test(href) && href }, $target.data(), $this.data())
if ($this.is('a')) e.preventDefault()
$target.one('show.bs.modal', function (showEvent) {
if (showEvent.isDefaultPrevented()) return // only register focus restorer if modal will actually get shown
$target.one('hidden.bs.modal', function () {
$this.is(':visible') && $this.trigger('focus')
})
})
Plugin.call($target, option, this)
})
}(jQuery);
/* ========================================================================
* Bootstrap: collapse.js v3.3.7
* http://getbootstrap.com/javascript/#collapse

File diff suppressed because one or more lines are too long

View File

@@ -40,17 +40,10 @@ function updateItem(short, limit, del_at_view) {
});
localStorage.setItem('images', JSON.stringify(files));
}
function share(url) {
new MozActivity({
name: 'share',
data: {
type: 'url',
number: 1,
url: url
}
});
}
function evaluateCopyAll() {
function evaluateCopyAll(e) {
if (e) {
e.preventDefault();
}
setTimeout(function() {
if ($('.view-link-input').length === 0) {
$('#copy-all').parent().remove();
@@ -112,5 +105,11 @@ $('document').ready(function() {
});
} else if ($('#myfiles').length !== 0) {
populateFilesTable();
$('#json-export').on('click', function() { exportStorage(); });
$('#json-import').on('click', function() { $('#import').click(); });
$('#import').on('change', function() { importStorage(this.files); })
$('#mod-delay').on('click', modifyDelay);
}
$('.copy-to-clipboard-link').on('click', clickOnCopyLink);
$('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);
});

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View File

@@ -0,0 +1,315 @@
/*!
* Toastify js 1.2.0
* https://github.com/apvarun/toastify-js
* @license MIT licensed
*
* Copyright (C) 2018 Varun A P
*/
;
(function (root, factory) {
if(typeof module === "object" && module.exports) {
require('./toastify.css');
module.exports = factory();
} else {
root.Toastify = factory();
}
}(this, function (global) {
// Object initialization
var Toastify = function (options) {
// Returning a new init object
return new Toastify.lib.init(options);
},
// Library version
version = "1.2.0";
// Defining the prototype of the object
Toastify.lib = Toastify.prototype = {
toastify: version,
constructor: Toastify,
// Initializing the object with required parameters
init: function (options) {
// Verifying and validating the input object
if (!options) {
options = {};
}
// Creating the options object
this.options = {};
// Validating the options
this.options.text = options.text || 'Hi there!'; // Display message
this.options.duration = options.duration || 3000; // Display duration
this.options.selector = options.selector; // Parent selector
this.options.callback = options.callback || function () { }; // Callback after display
this.options.destination = options.destination; // On-click destination
this.options.newWindow = options.newWindow || false; // Open destination in new window
this.options.close = options.close || false; // Show toast close icon
this.options.gravity = (options.gravity == "bottom") ? "bottom" : "top"; // toast position - top or bottom
this.options.positionLeft = options.positionLeft || false; // toast position - left or right
this.options.backgroundColor = options.backgroundColor || "linear-gradient(135deg, #73a5ff, #5477f5)"; // toast position - left or right
this.options.avatar = options.avatar || ""; // toast position - left or right
// Returning the current object for chaining functions
return this;
},
// Building the DOM element
buildToast: function () {
// Validating if the options are defined
if (!this.options) {
throw "Toastify is not initialized";
}
// Creating the DOM object
var divElement = document.createElement("div");
divElement.className = 'toastify on';
// Positioning toast to left or right
if (this.options.positionLeft === true) {
divElement.className += " left";
} else {
divElement.className += " right";
}
// Assigning gravity of element
divElement.className += " " + this.options.gravity;
divElement.style.background = this.options.backgroundColor;
// Adding the toast message
divElement.innerHTML = this.options.text;
if (this.options.avatar !== "") {
var avatarElement = document.createElement("img");
avatarElement.src = this.options.avatar;
avatarElement.className = "avatar";
if (this.options.positionLeft === true) {
// Adding close icon on the left of content
divElement.appendChild(avatarElement);
} else {
// Adding close icon on the right of content
divElement.insertAdjacentElement('beforeend', avatarElement);
}
}
// Adding a close icon to the toast
if (this.options.close === true) {
// Create a span for close element
var closeElement = document.createElement("span");
closeElement.innerHTML = "&#10006;";
closeElement.className = 'toast-close';
// Triggering the removal of toast from DOM on close click
closeElement.addEventListener('click', function (event) {
event.stopPropagation();
this.removeElement(event.target.parentElement);
window.clearTimeout(event.target.parentElement.timeOutValue);
}.bind(this));
//Calculating screen width
var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
// Adding the close icon to the toast element
// Display on the right if screen width is less than or equal to 360px
if (this.options.positionLeft === true && width > 360) {
// Adding close icon on the left of content
divElement.insertAdjacentElement('afterbegin', closeElement);
} else {
// Adding close icon on the right of content
divElement.appendChild(closeElement);
}
}
// Adding an on-click destination path
if (typeof this.options.destination !== 'undefined') {
divElement.addEventListener('click', function (event) {
event.stopPropagation();
if(this.options.newWindow === true){
window.open(this.options.destination, '_blank')
} else {
window.location = this.options.destination;
}
}.bind(this));
}
// Returning the generated element
return divElement;
},
// Displaying the toast
showToast: function () {
// Creating the DOM object for the toast
var toastElement = this.buildToast();
// Getting the root element to with the toast needs to be added
var rootElement;
if (typeof this.options.selector === "undefined") {
rootElement = document.body;
} else {
rootElement = document.getElementById(this.options.selector);
}
// Validating if root element is present in DOM
if (!rootElement) {
throw "Root element is not defined";
}
// Adding the DOM element
rootElement.insertBefore(toastElement, rootElement.firstChild);
// Repositioning the toasts in case multiple toasts are present
Toastify.reposition();
toastElement.timeOutValue = window.setTimeout(function () {
// Remove the toast from DOM
this.removeElement(toastElement);
}.bind(this), this.options.duration); // Binding `this` for function invocation
// Supporting function chaining
return this;
},
// Removing the element from the DOM
removeElement: function (toastElement) {
// Hiding the element
// toastElement.classList.remove("on");
toastElement.className = toastElement.className.replace(" on","");
// Removing the element from DOM after transition end
window.setTimeout(function () {
// Remove the elemenf from the DOM
toastElement.parentNode.removeChild(toastElement);
// Calling the callback function
this.options.callback.call(toastElement);
// Repositioning the toasts again
Toastify.reposition();
}.bind(this), 400); // Binding `this` for function invocation
}
}
// Positioning the toasts on the DOM
Toastify.reposition = function () {
// Top margins with gravity
var topLeftOffsetSize = {
top: 15,
bottom: 15
};
var topRightOffsetSize = {
top: 15,
bottom: 15
};
var offsetSize = {
top: 15,
bottom: 15
};
// Get all toast messages on the DOM
var allToasts = document.getElementsByClassName('toastify');
var classUsed;
// Modifying the position of each toast element
for (var i = 0; i < allToasts.length; i++) {
// Getting the applied gravity
if (containsClass(allToasts[i], 'top') === true) {
classUsed = "top";
} else {
classUsed = "bottom";
}
var height = allToasts[i].offsetHeight;
// Spacing between toasts
var offset = 15;
var width = (window.innerWidth > 0) ? window.innerWidth : screen.width;
// Show toast in center if screen with less than or qual to 360px
if (width <= 360) {
// Setting the position
allToasts[i].style[classUsed] = offsetSize[classUsed] + 'px';
offsetSize[classUsed] += height + offset;
} else {
if (containsClass(allToasts[i], 'left') === true) {
// Setting the position
allToasts[i].style[classUsed] = topLeftOffsetSize[classUsed] + 'px';
topLeftOffsetSize[classUsed] += height + offset;
} else {
// Setting the position
allToasts[i].style[classUsed] = topRightOffsetSize[classUsed] + 'px';
topRightOffsetSize[classUsed] += height + offset;
}
}
}
// Supporting function chaining
return this;
}
function containsClass(elem, yourClass) {
if(!elem || typeof yourClass !== 'string') {
return false;
} else if(elem.className && elem.className.trim().split(/\s+/gi).indexOf(yourClass) > -1) {
return true;
} else {
return false;
}
}
// Setting up the prototype for the init object
Toastify.lib.init.prototype = Toastify.lib;
// Returning the Toastify function to be assigned to the window object/module
return Toastify;
}));

View File

@@ -0,0 +1,4 @@
freezeframe_options = {
trigger_event: "click",
animation_play_duration: 60000
}

View File

@@ -38,6 +38,7 @@
<li>Quentin Pagès, <%= l('occitan translation') %></li>
<li>Alexis Clairet (<a href="https://github.com/Turboconnard">https://github.com/Turboconnard</a>), <%= l('paste image to upload ability') %></li>
<li>ButterflyOfFire, <%= l('arabic translation') %></li>
<li>Alexander Sapozhnikov (<a href="http://shoorick.ru">http://shoorick.ru</a>), <%= l('russian translation') %></li>
</ul>
<%= link_to url_for('/') => ( class => "btn btn-primary btn-lg" ) => begin %><%= l('Back to homepage') %><% end%>

View File

@@ -2,6 +2,8 @@
<div class="container">
<div class="row" id="infos-msg">
</div>
<div class="row text-center" id="img-nb">
</div>
<div class="row">
<p>
<a href="<%= url_for('/zip?i=') %>" id="download-all" class="btn btn-info col-sm-12">

View File

@@ -15,7 +15,7 @@
</a>
</div>
<input class="form-control" name="gallery-url-input" type="text" id="gallery-url-input" readonly></input>
<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>">
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">
<span class="icon icon-clipboard"></span>
</a>
</div>
@@ -33,7 +33,25 @@
</a>
</div>
<input class="form-control" name="zip-url-input" type="text" id="zip-url-input" readonly></input>
<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>">
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">
<span class="icon icon-clipboard"></span>
</a>
</div>
</div>
</form>
</div>
<div id="random-url" class="hidden row">
<form class="form col-sm-12">
<div class="form-group">
<label for="random-url-input"><%= l('Random image link') %></label>
<div class="input-group">
<div class="input-group-addon">
<a id="random-url-link" href="#" target="_blank" title="<%= l('Random image link') %>">
<span class="icon icon-shuffle"></span>
</a>
</div>
<input class="form-control" name="random-url-input" type="text" id="random-url-input" readonly></input>
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">
<span class="icon icon-clipboard"></span>
</a>
</div>
@@ -66,7 +84,7 @@
<div class="input-group col-sm-6">
<div class="input-group-addon"><a href="<%= $url.'.'.stash('ext') %>" target="_blank"><span class="icon icon-eye" title =" <%= l('View link') %>"></span></a></div>
<input type="text" class="form-control" id="view" value="<%= $url.'.'.stash('ext') %>" readonly>
<a href="#" onClick="copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
</div>
</div>
<div class="form-group">
@@ -74,7 +92,7 @@
<div class="input-group col-sm-6">
<div class="input-group-addon"><span class="markdown-mark-solid" title ="<%= l('Markdown syntax') %>"></span></div>
<input type="text" class="form-control" id="markdown" value="![](<%= $url %>)" readonly>
<a href="#" onClick="copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
</div>
</div>
<div class="form-group">
@@ -82,7 +100,7 @@
<div class="input-group col-sm-6">
<div class="input-group-addon"><a href="<%= $url %>?dl"><span class="icon icon-download" title ="<%= l('Download link') %>"></span></a></div>
<input type="text" class="form-control" id="download" value="<%= $url %>?dl" readonly>
<a href="#" onClick="copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
</div>
</div>
<div class="form-group">
@@ -90,7 +108,7 @@
<div class="input-group col-sm-6">
<div class="input-group-addon"><a href="<%= $url %>?t" target="_blank"><span class="icon icon-share" title ="<%= l('Link for share on social networks') %>"></span></a></div>
<input type="text" class="form-control" id="share" value="<%= $url %>?t" readonly>
<a href="#" onClick="copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>"><span class="icon icon-clipboard"></span></a>
</div>
</div>
<div class="form-group">
@@ -198,7 +216,7 @@
<p class="help-block"><%= l('Only images are allowed') %></p>
<form class="form-horizontal" method="POST" action="<%== url_for('add') %>">
<div class="form-group">
<span class="col-sm-3 col-xs-12"><span class="hidden-spin" style="font-size:200%; display:none;" > <span class="icon-spinner animate-spin pull-right"></span></span><label for="lutim-file-url" class="control-label pull-right"><%= l('Upload an image with its URL') %></label></span>
<span class="col-sm-3 col-xs-12"><span class="hidden-spin spin"> <span class="icon-spinner animate-spin pull-right"></span></span><label for="lutim-file-url" class="control-label pull-right"><%= l('Upload an image with its URL') %></label></span>
<div class="col-sm-9 col-xs-12">
<input type="url" name="lutim-file-url" class="form-control" id="lutim-file-url" placeholder="<%= l('Image URL') %>">
</div>

View File

@@ -21,22 +21,15 @@
<link rel="apple-touch-icon" sizes="120x120" href="<%= url_for('/img/lutim120.png') %>">
<link rel="apple-touch-icon" sizes="152x152" href="<%= url_for('/img/lutim152.png') %>">
<link rel="apple-touch-icon-precomposed" sizes="128x128" href="<%= url_for('/img/lutim128.png') %>">
%= stylesheet '/css/bootstrap.min.css'
%= stylesheet '/css/fontello-embedded.css'
%= stylesheet '/css/hennypenny.css'
%= stylesheet '/css/lutim.css'
%= stylesheet '/css/common.min.css'
% if (current_route 'stats') {
%= stylesheet '/css/morris-0.4.3.min.css'
%= stylesheet '/css/morris-0.5.1.min.css'
% } else {
%= stylesheet '/css/animation.css'
%= stylesheet '/css/uploader.css'
%= stylesheet '/css/markdown.css'
%= stylesheet '/css/not_stats.min.css'
% }
% if (current_route 'gallery') {
%= stylesheet '/css/photoswipe.css'
%= stylesheet '/css/default-skin/default-skin.css'
%= stylesheet '/css/gallery.min.css'
% }
%= javascript '/js/jquery-3.2.1.min.js'
</head>
<body>
%= include 'partial/navbar', twitter_url => $twitter_url
@@ -66,24 +59,25 @@
% }
<%= content %>
</div>
%= javascript begin
var manifestUrl = '<%== url_for('manifest.webapp')->to_abs() %>';
% end
% if (defined(config('piwik_img'))) {
<img src="<%== config('piwik_img') %>" style="border:0" alt="">
<img src="<%== config('piwik_img') %>" class="border-zero" alt="">
% }
%= javascript '/js/jquery-3.2.1.min.js'
%= javascript '/partial/manifest.js'
%= javascript '/js/toastify.js'
%= javascript '/js/bootstrap.min.js'
%= javascript '/partial/common.js'
% if (current_route 'stats') {
%= javascript '/js/lutim.js'
%= javascript '/js/raphael-min.js'
%= javascript '/js/morris-0.4.3.min.js'
%= javascript '/js/morris-0.5.1.min.js'
%= javascript '/js/stats.js'
%= javascript '/partial/raw.js'
% } elsif (!(current_route 'about')) {
%= javascript '/js/lutim.js'
%= javascript '/js/dmuploader.min.js'
% }
% if (current_route 'index') {
%= javascript '/partial/common.js'
%= javascript '/partial/lutim.js'
% }
% if (current_route 'gallery') {
@@ -95,7 +89,6 @@
%= javascript '/partial/lutim.js'
% }
% if (current_route 'myfiles') {
%= javascript '/partial/common.js'
%= javascript '/js/moment-with-locales.min.js'
%= javascript '/partial/myfiles.js'
% }

View File

@@ -0,0 +1,18 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% title 'Lutim login';
% if (defined stash('msg')) {
<%= stash('msg') %>
% }
<form method="post" action="<%= url_for('login') %>" class="form-inline">
<div class="form-group">
<label for="login"><%= l('Login') %></label>
<input id="login" type="text" class="form-control" name="login">
</div>
<div class="form-group">
<label for="password"><%= l('Password') %></label>
<input id="password" type="password" class="form-control" name="password">
</div>
<button class="btn btn-default" type="submit" name="action">
<%= l('Signin') %>
</button>
</form>

View File

@@ -0,0 +1,6 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% title 'Lutim logout';
<h1 class="h4"><%= l('You have been successfully logged out.') %></h1>
<p>
<a href="<%= url_for('login') %>" class="btn btn-default"><%= l('Signin') %></a>
</p

View File

@@ -1,11 +1,59 @@
% # vim:set sts=4 sw=4 ts=4 ft=html.epl expandtab:
% my %d = (
% delay_0 => l('no time limit'),
% delay_1 => l('24 hours'),
% delay_365 => l('1 year')
% );
<h4><%= l('My images') %></h4>
<hr>
<p>
<%= l('Only the images sent with this browser will be listed here. The details are stored in localStorage: if you delete your localStorage data, you\'ll loose these details.') %>
</p>
<div class="modal fade" id="modModal" tabindex="-1" role="dialog" aria-labelledby="modModalLabel">
<div class="modal-dialog" role="document">
<div class="modal-content">
<div class="modal-header">
<h1 id="mod-name" class="ellips"></h1>
</div>
<div class="modal-body">
<div class="form-group form-inline">
<select id="mod-delete-day" name="delete-day" class="form-control">
% my @delays = split(',', $self->config('proposed_delays'));
% for my $delay (@delays) {
% my $text = (defined($d{'delay_'.$delay})) ? $d{'delay_'.$delay} : l('%1 days', $delay);
% if (config('max_delay')) {
% if ($delay) {
% if ($delay < config('max_delay')) {
<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>
% } elsif ($delay == config('max_delay')) {
<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>
% last;
% } else {
% my $text = ($delay == 1) ? l('24 hours') : l('%1 days', $delay);
<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%= l('%1 days', config('max_delay')) %></option>
% last;
% }
% }
% } else {
<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>
% }
% }
</select>&nbsp;
<div class="checkbox">
<label>
<input id="mod-first-view" type="checkbox" name="first-view"> <%= l('Delete at first view?') %>
</label>
</div>&nbsp;
</div>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal"><%= l('Close') %></button>
<button type="button" class="btn btn-primary" id="mod-delay"><%= l('Save changes') %></button>
</div>
</div>
</div>
</div>
<div id="gallery-url" class="hidden row">
<form class="form col-sm-12">
<div class="form-group">
@@ -17,7 +65,7 @@
</a>
</div>
<input class="form-control" name="gallery-url-input" type="text" id="gallery-url-input" readonly></input>
<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>">
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">
<span class="icon icon-clipboard"></span>
</a>
</div>
@@ -35,13 +83,36 @@
</a>
</div>
<input class="form-control" name="zip-url-input" type="text" id="zip-url-input" readonly></input>
<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon jsonly" title="<%= l('Copy to clipboard') %>">
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">
<span class="icon icon-clipboard"></span>
</a>
</div>
</div>
</form>
</div>
<div id="random-url" class="hidden row">
<form class="form col-sm-12">
<div class="form-group">
<label for="random-url-input"><%= l('Random image link') %></label>
<div class="input-group">
<div class="input-group-addon">
<a id="random-url-link" href="#" target="_blank" title="<%= l('Random image link') %>">
<span class="icon icon-shuffle"></span>
</a>
</div>
<input class="form-control" name="random-url-input" type="text" id="random-url-input" readonly></input>
<a href="#" class="input-group-addon jsonly copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">
<span class="icon icon-clipboard"></span>
</a>
</div>
</div>
</form>
</div>
<div class="files-buttons">
<a href="#" id="json-export" class="btn btn-info"><%= l('Export localStorage data') %></a>
<a href="#" id="json-import" class="btn btn-info"><%= l('Import localStorage data') %></a>
<input type="file" class="hidden" id="import">
</div>
<div class="table-responsive">
<table class="table table-hover">
<thead>

View File

@@ -1,11 +1,12 @@
% # vim:set sw=4 ts=4 sts=4 ft=javascript expandtab:
window.gallery_url = '<%= url_for('gallery')->to_abs %>#';
window.zip_url = '<%= url_for('zip')->to_abs %>?i=';
window.gallery_url = '<%= prefix().'gallery' %>#';
window.zip_url = '<%= prefix().'zip' %>?i=';
window.random_url = '<%= prefix().'random' %>?i=';
window.short_hash = {};
window.zip_hash = {};
window.random_hash = {};
function addToShortHash(short) {
window.short_hash[short] = 1;
console.debug(window.short_hash);
if (Object.keys(window.short_hash).length > 0) {
$('#gallery-url').removeClass('hidden');
$('#gallery-url-input').val(window.gallery_url+Object.keys(window.short_hash).join(','));
@@ -36,13 +37,26 @@ function rmFromZipHash(short) {
$('#zip-url').addClass('hidden');
}
}
function addToRandomHash(short) {
window.random_hash[short] = 1;
if (Object.keys(window.random_hash).length > 0) {
$('#random-url').removeClass('hidden');
$('#random-url-input').val(window.random_url+Object.keys(window.random_hash).join('&i='));
$('#random-url-link').attr('href', window.random_url+Object.keys(window.random_hash).join('&i='));
}
}
function rmFromRandomHash(short) {
delete window.random_hash[short];
$('#random-url-input').val(window.random_url+Object.keys(window.random_hash).join('&i='));
$('#random-url-link').attr('href', window.random_url+Object.keys(window.random_hash).join('&i='));
if (Object.keys(window.random_hash).length === 0) {
$('#random-url').addClass('hidden');
}
}
/* Stolen from https://github.com/mozilla-services/push-dev-dashboard/blob/3ad4de737380d0842f40c82301d1f748c1b20f2b/push/static/js/validation.js */
function createNode(text) {
var node = document.createElement('pre');
node.style.width = '1px';
node.style.height = '1px';
node.style.position = 'fixed';
node.style.top = '5px';
node.classList.add('copy-node');
node.textContent = text;
return node;
}
@@ -67,6 +81,18 @@ function copyText(text) {
document.body.removeChild(node);
return success;
}
function copyLink(e) {
e.preventDefault();
var successful = copyText($(this).prop('href'));
var msg = successful ? 'successful' : 'unsuccessful';
console.debug('Copying text command was ' + msg);
if (!successful) {
badToast('<%= l('Unable to copy to clipboard') %>');
throw new Error('Copying text command was ' + msg);
} else {
goodToast('<%= l('Copied to clipboard') %>');
}
}
function copyInput(node) {
node.select();
@@ -81,13 +107,17 @@ function copyToClipboard(el) {
var msg = successful ? 'successful' : 'unsuccessful';
console.debug('Copying text command was ' + msg);
if (!successful) {
badToast('<%= l('Unable to copy to clipboard') %>');
throw new Error('Copying text command was ' + msg);
} else {
goodToast('<%= l('Copied to clipboard') %>');
}
} catch (err) {
prompt('<%= l('Hit Ctrl+C, then Enter to copy the short link') %>', el.val());
}
}
function copyAllToClipboard() {
function copyAllToClipboard(e) {
e.preventDefault;
var text = new Array();
$('.view-link-input').each(function(index) {
text.push($(this).val());
@@ -105,7 +135,12 @@ function copyAllToClipboard() {
}
}
function delImage() {
function clickOnCopyLink(e) {
e.preventDefault();
copyToClipboard($(this));
}
function delImage(e) {
e.preventDefault();
var short = $(this).attr('data-short');
var token = $(this).attr('data-token');
$.ajax({
@@ -119,8 +154,9 @@ function delImage() {
$('#alert-'+short).remove();
evaluateCopyAll();
delItem(short);
goodToast('<%= l('Image deleted') %>');
} else {
alert(data.msg);
badToast(data.msg);
}
},
error: function() {
@@ -147,7 +183,7 @@ function link(url, dl, token, modify, only_url) {
'</a>',
'</div>',
'<input type="text" class="form-control" id="link-del-', url, '" value="', link, '" readonly>',
'<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon" title="<%= l('Copy to clipboard') %>">',
'<a href="#" class="input-group-addon copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">',
'<span class="icon icon-clipboard"></span>',
'</a>',
'</div>'
@@ -155,5 +191,28 @@ function link(url, dl, token, modify, only_url) {
} else if (dl !== '') {
url = url+'?'+dl;
}
return '<%== url_for('/')->to_abs() %>'+url;
return '<%== prefix() %>'+url;
}
function badToast(msg) {
Toastify({
text: msg,
duration: 6000,
newWindow: true,
close: true,
gravity: 'bottom',
positionLeft: false,
backgroundColor: '#f26163'
}).showToast();
}
function goodToast(msg) {
Toastify({
text: msg,
duration: 3000,
newWindow: true,
close: true,
gravity: 'bottom',
positionLeft: false
}).showToast();
}

View File

@@ -1,7 +1,7 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% my @delays = split(',', $self->config('proposed_delays'));
% for my $delay (@delays) {
% my $text = ($delay == 7 || $delay == 30) ? l('%1 days', $delay) : $d->{'delay_'.$delay};
% my $text = (defined($d->{'delay_'.$delay})) ? $d->{'delay_'.$delay} : l('%1 days', $delay);
% if (config('max_delay')) {
% if ($delay) {
% if ($delay < config('max_delay')) {

View File

@@ -254,6 +254,7 @@ $(document).ready(function() {
i = key.indexOf('&'); if (i>-1) { key = key.substring(0,i); }
var keys = key.split(',');
$('#img-nb').append('<p><%= l('There is XXXX image(s) in the gallery') %></p>'.replace('XXXX', keys.length));
$('#download-all').attr('href', $('#download-all').attr('href')+keys.join('&i='));

View File

@@ -13,19 +13,17 @@ function cleanName(name, empty) {
}
}
function tw_url(url) {
var btn = [
return btn = [
'<a title="<%= l('Tweet it!') %>" target="_blank" href="https://twitter.com/share?url=<%== url_for('/')->to_abs() %>', url, '?t" class="btn btn-default">',
'<span class="icon icon-twitter"></span>',
'</a>'
].join('');
if (navigator.mozSetMessageHandler !== undefined) {
btn = btn+[
'<a title="<%= l('Share it!') %>" target="_blank" href="" onclick="share(\'<%== url_for('/')->to_abs() %>', url, '?t\');return false;">',
'<span class="icon icon-share"></span>',
'</a>'
].join('');
}
return btn
}
function modifyImage(e) {
e.preventDefault();
var url = $(this).data('modlink');
var short = $(this).data('modshort');
modify(url, short);
}
function modify(url, short) {
var limit = $('#day-'+short).val();
@@ -41,10 +39,10 @@ function modify(url, short) {
},
success: function(data) {
updateItem(short, limit, del_at_view);
alert(data.msg);
goodToast(data.msg);
},
error: function() {
alert('<%= l('Error while trying to modify the image.') %>');
badToast('<%= l('Error while trying to modify the image.') %>');
}
});
}
@@ -61,7 +59,7 @@ function buildMessage(success, msg) {
].join('') : ''
return [
'<div class="alert alert-success" id="alert-', msg.real_short, '">',
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true" onclick="rmFromShortHash(\'', msg.short, '.', msg.ext, '\');rmFromZipHash(\'', msg.short, '\');">&times;</button>',
'<button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button>',
'<div class="row">', thumb,
'<div class="col-sm-11">',
'<h4>',
@@ -79,7 +77,7 @@ function buildMessage(success, msg) {
'</a>',
'</div>',
'<input type="text" class="form-control view-link-input" id="view', msg.real_short, '" value="', s_url, '" readonly>',
'<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon" title="<%= l('Copy to clipboard') %>">',
'<a href="#" class="input-group-addon copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">',
'<span class="icon icon-clipboard"></span>',
'</a>',
'</div>',
@@ -91,7 +89,7 @@ function buildMessage(success, msg) {
'<span class="markdown-mark-solid" title="<%= l('Markdown syntax') %>"></span>',
'</div>',
'<input type="text" class="form-control" id="markdown', msg.real_short, '" value="![](', link(msg.short, ''), ')" readonly>',
'<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon" title="<%= l('Copy to clipboard') %>">',
'<a href="#" class="input-group-addon copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">',
'<span class="icon icon-clipboard"></span>',
'</a>',
'</div>',
@@ -105,7 +103,7 @@ function buildMessage(success, msg) {
'</a>',
'</div>',
'<input type="text" class="form-control" id="download', msg.real_short, '" value="', link(msg.short, 'dl'), '" readonly>',
'<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon" title="<%= l('Copy to clipboard') %>">',
'<a href="#" class="input-group-addon copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">',
'<span class="icon icon-clipboard"></span>',
'</a>',
'</div>',
@@ -120,7 +118,7 @@ function buildMessage(success, msg) {
tw_url(msg.short),
'</div>',
'<input type="text" class="form-control" id="share', msg.real_short, '" value="', link(msg.short, 't'), '" readonly>',
'<a href="#" onClick="event.preventDefault();copyToClipboard($(this));" class="input-group-addon" title="<%= l('Copy to clipboard') %>">',
'<a href="#" class="input-group-addon copy-to-clipboard-link" title="<%= l('Copy to clipboard') %>">',
'<span class="icon icon-clipboard"></span>',
'</a>',
'</div>',
@@ -139,7 +137,7 @@ function buildMessage(success, msg) {
'<select id="day-', msg.real_short, '" name="delete-day" class="form-control">',
% my @delays = split(',', $self->config('proposed_delays'));
% for my $delay (@delays) {
% my $text = ($delay == 7 || $delay == 30) ? l('%1 days', $delay) : $d->{'delay_'.$delay};
% my $text = (defined($d->{'delay_'.$delay})) ? $d->{'delay_'.$delay} : l('%1 days', $delay);
% if (config('max_delay')) {
% if ($delay) {
% if ($delay < config('max_delay')) {
@@ -163,7 +161,7 @@ function buildMessage(success, msg) {
'<input id="first-view-', msg.real_short, '" type="checkbox" name="first-view"> <%= l('Delete at first view?') %>',
'</label>',
'</div>&nbsp;',
'<a href="#" onclick="modify(\'', link(msg.real_short, '', msg.token, true), '\', \'', msg.real_short, '\');return false;" class="btn btn-sm btn-default btn-primary">',
'<a href="#" class="btn btn-sm btn-default btn-primary modify-image" data-modlink="', link(msg.real_short, '', msg.token, true),'" data-modshort="', msg.real_short,'">',
'<%= l('Let\'s go!') %>',
'</a>',
'</div>',
@@ -194,8 +192,8 @@ function bindddz(firstview, deleteday) {
'<div id="', id, '-div">',
cleanName(file.name), '<br>',
'<div class="progress">',
'<div id="', id, '"class="progress-bar progress-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">',
'<span id="', id, '-text" class="pull-left" style="padding-left: 10px;"> 0%</span>',
'<div id="', id, '"class="progress-bar progress-striped active width-zero" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">',
'<span id="', id, '-text" class="pull-left pdg-left-10"> 0%</span>',
'</div>',
'</div>',
'</div>'
@@ -204,36 +202,43 @@ function bindddz(firstview, deleteday) {
onUploadProgress: function(id, percent){
var percentStr = ' '+percent+'%';
$('#'+id).prop('aria-valuenow', percent);
$('#'+id).prop('style', 'width: '+percent+'%;');
$('#'+id).css('width', percent+'%');
$('#'+id+'-text').html(percentStr);
},
onUploadSuccess: function(id, data){
data.msg.filename = cleanName(data.msg.filename);
$('#'+id+'-div').remove();
if ($('#copy-all').length === 0 && data.success) {
$('.messages').prepend(
[
'<div class="col-xs-12 col-sm-11 col-sm-offset-1">',
'<a id="copy-all" href="#" class="btn btn-info" onClick="event.preventDefault();copyAllToClipboard();">',
'<%= l('Copy all view links to clipboard') %>',
'</a>',
'</div>'
].join('')
);
$('.messages').prepend([
'<div class="col-xs-12 col-sm-11 col-sm-offset-1">',
'<a id="copy-all" href="#" class="btn btn-info copy-all-to-clipboard-link">',
'<%= l('Copy all view links to clipboard') %>',
'</a>',
'</div>'
].join(''));
}
$('.messages').append(buildMessage(data.success, data.msg));
$('#del-'+data.msg.real_short).on('click', function() {
$('#del-'+data.msg.real_short).on('click', function(e) {
e.preventDefault();
rmFromShortHash(data.msg.short+'.'+data.msg.ext)
rmFromZipHash(data.msg.short);
rmFromRandomHash(data.msg.short);
});
$('#del-'+data.msg.real_short).on('click', delImage);
if (data.success) {
addToShortHash(data.msg.short+'.'+data.msg.ext);
addToZipHash(data.msg.short);
addToRandomHash(data.msg.short);
$('.close').unbind('click', evaluateCopyAll);
$('.close').on('click', evaluateCopyAll);
$('input[type=\'text\']').unbind("click", selectInput);
$('input[type=\'text\']').on("click", selectInput);
$('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard);
$('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);
$('.modify-image').unbind('click', modifyImage);
$('.modify-image').on('click', modifyImage);
$('.copy-to-clipboard-link').unbind('click', clickOnCopyLink);
$('.copy-to-clipboard-link').on('click', clickOnCopyLink);
addItem(data.msg);
}
},
@@ -246,7 +251,8 @@ function bindddz(firstview, deleteday) {
});
}
function upload_url() {
function upload_url(e) {
e.preventDefault();
var val = $('#lutim-file-url').val();
if (val !== undefined && val !== '') {
$('#lutim-file-url').prop('disabled', 'disabled');
@@ -268,7 +274,7 @@ function upload_url() {
if ($('#copy-all').length === 0) {
$('.messages').prepend([
'<div class="col-xs-12 col-sm-11 col-sm-offset-1">',
'<a id="copy-all" href="#" class="btn btn-info" onClick="event.preventDefault();copyAllToClipboard();">',
'<a id="copy-all" href="#" class="btn btn-info copy-all-to-clipboard-link">',
'<%= l('Copy all view links to clipboard') %>',
'</a>',
'</div>'
@@ -277,6 +283,8 @@ function upload_url() {
$('#lutim-file-url').val('');
addToShortHash(data.msg.short+'.'+data.msg.ext);
addToZipHash(data.msg.short);
addToRandomHash(data.msg.short);
$('#del-'+data.msg.real_short).on('click', delImage);
$('.close').unbind('click', evaluateCopyAll);
$('.close').on('click', evaluateCopyAll);
addItem(data.msg);
@@ -288,6 +296,12 @@ function upload_url() {
complete: function() {
$('#lutim-file-url').prop('disabled', '');
$('.hidden-spin').css('display', 'none');
$('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard);
$('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);
$('.modify-image').unbind('click', modifyImage);
$('.modify-image').on('click', modifyImage);
$('.copy-to-clipboard-link').unbind('click', clickOnCopyLink);
$('.copy-to-clipboard-link').on('click', clickOnCopyLink);
}
});
}
@@ -305,8 +319,8 @@ function fileUpload(file) {
$('.messages').append([
'<div id="1-div">', cleanName(file.name), '<br>',
'<div class="progress">',
'<div id="1"class="progress-bar progress-striped active" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100" style="width: 0%;">',
'<span id="1-text" class="pull-left" style="padding-left: 10px;"> 0%</span>',
'<div id="1" class="progress-bar progress-striped active width-zero" role="progressbar" aria-valuenow="0" aria-valuemin="0" aria-valuemax="100">',
'<span id="1-text" class="pull-left pdg-left-10"> 0%</span>',
'</div>',
'</div>',
'</div>'
@@ -334,7 +348,7 @@ function fileUpload(file) {
var percentStr = ' '+percent+'%';
$('#1').prop('aria-valuenow', percent);
$('#1').prop('style', 'width: '+percent+'%;');
$('#1').css('width', percent+'%');
$('#1-text').html(percentStr);
}, false);
}
@@ -346,7 +360,7 @@ function fileUpload(file) {
if ($('#copy-all').length === 0 && data.success) {
$('.messages').prepend([
'<div class="col-xs-12 col-sm-11 col-sm-offset-1">',
'<a id="copy-all" href="#" class="btn btn-info" onClick="event.preventDefault();copyAllToClipboard();">',
'<a id="copy-all" href="#" class="btn btn-info copy-all-to-clipboard-link">',
'<%= l('Copy all view links to clipboard') %>',
'</a>',
'</div>'
@@ -363,6 +377,14 @@ function fileUpload(file) {
error: function (xhr, status, errMsg){
$('.messages').append(buildMessage(false, ''));
},
complete: function () {
$('.copy-all-to-clipboard-link').unbind('click', copyAllToClipboard);
$('.copy-all-to-clipboard-link').on('click', copyAllToClipboard);
$('.modify-image').unbind('click', modifyImage);
$('.modify-image').on('click', modifyImage);
$('.copy-to-clipboard-link').unbind('click', clickOnCopyLink);
$('.copy-to-clipboard-link').on('click', clickOnCopyLink);
}
});
}

View File

@@ -0,0 +1,2 @@
% # vim:set sw=4 ts=4 sts=4 ft=javascript expandtab:
var manifestUrl = '<%== url_for('manifest.webapp')->to_abs() %>';

View File

@@ -1,38 +1,161 @@
% # vim:set sw=4 ts=4 sts=4 ft=javascript expandtab:
function onCheck(e, short, ext) {
if (e.is(':checked')) {
function exportStorage() {
var a = $('<a id="data-json">');
a.hide();
$('body').append(a);
var storageData = [localStorage.getItem('images')];
var exportFile = new Blob(storageData, {type : 'application/json'});
var url = window.URL.createObjectURL(exportFile);
a.attr('href', url);
a.attr('download', 'data.json');
$('#data-json')[0].click();
$('#data-json').remove();
}
function importStorage(f) {
var reader = new FileReader();
reader.addEventListener("loadend", function() {
try {
var newFiles = JSON.parse(String.fromCharCode.apply(null, new Uint8Array(reader.result)));
var i;
var hasImported = 0;
for (i = 0; i < newFiles.length; i++) {
var item = newFiles[i];
if (!itemExists(item.short)) {
addItem(item);
hasImported++;
}
}
populateFilesTable();
goodToast('<%= l('The data has been successfully imported.') %>');
} catch(err) {
alert(err);
}
});
reader.readAsArrayBuffer(f[0]);
}
function itemExists(name) {
var files = localStorage.getItem('images');
console.log(files);
if (files === null) {
return false;
} else {
files = JSON.parse(files);
var i;
for (i = 0; i < files.length; i++) {
if (files[i].short === name) {
return true;
}
}
return false;
}
}
function onCheck(e) {
e.preventDefault();
var short = $(this).data('short');
var ext = $(this).data('ext');
if ($(this).is(':checked')) {
addToShortHash(short+'.'+ext);
addToZipHash(short);
addToRandomHash(short);
} else {
rmFromShortHash(short+'.'+ext);
rmFromZipHash(short);
rmFromRandomHash(short);
}
}
function delView(del_at_view) {
return (del_at_view) ? '<span class="icon icon-ok"></span>' : '<span class="icon icon-cancel"></span>';
}
function editImage(e) {
e.preventDefault();
var url = $(this).data('modlink');
var short = $(this).data('modshort');
var name = $(this).data('modname');
var delay = $(this).data('moddelay');
var firstview = $(this).data('modfirstview');
var created_at = $(this).data('modcreated_at');
$('#mod-name').html(name);
$('#mod-delete-day').val(delay);
$('#mod-first-view').prop('checked', firstview);
$('#mod-delay').data('modlink', url),
$('#mod-delay').data('modshort', short);
$('#mod-delay').data('modcreated_at', created_at);
$('#modModal').modal('show');
}
function modifyDelay() {
var limit = $('#mod-delete-day').val();
var del_at_view = ($('#mod-first-view').prop('checked')) ? 1 : 0;
var short = $('#mod-delay').data('modshort');
var created_at = $('#mod-delay').data('modcreated_at');
$.ajax({
url : $('#mod-delay').data('modlink'),
type : 'POST',
data : {
'format' : 'json',
'delete-day' : limit,
'first-view' : del_at_view
},
success: function(data) {
updateItem(short, parseInt(limit), del_at_view);
var newLimit = (parseInt(limit, 10) === 0) ? '<%= l('No limit') %>' : moment.unix(limit * 86400 + created_at).locale(window.navigator.language).format('LLLL');
$('#limit-'+short).html(newLimit);
$('#del_at_view-'+short).html(delView(del_at_view));
$('#edit-'+short).data('moddelay', limit);
$('#edit-'+short).data('modfirstview', del_at_view);
goodToast(data.msg);
},
error: function() {
badToast('<%= l('Error while trying to modify the image.') %>');
},
complete: function() {
$('#modModal').modal('hide');
}
});
}
function populateFilesTable() {
var files = JSON.parse(localStorage.getItem('images'));
var localImages = localStorage.getItem('images');
if (localImages === null) {
return null;
}
var files = JSON.parse(localImages);
files.reverse();
$('#myfiles').empty();
files.forEach(function(element, index, array) {
var real_short = element.real_short;
var vlink = link(element.short+'.'+element.ext, '');
var del_view = (element.del_at_view) ? '<span class="icon icon-ok"></span>' : '<span class="icon icon-cancel"></span>';
var dlink = link(real_short, 'dl', element.token, false, true);
var limit = (element.limit === 0) ? '<%= l('No limit') %>' : moment.unix(element.limit * 86400 + element.created_at).locale(window.navigator.language).format('LLLL');
var created_at = moment.unix(element.created_at).locale(window.navigator.language).format('LLLL');
var name = element.filename.replace(/</g, '&lt;').replace(/>/g, '&gt;');
var tr = [
'<tr id="alert-',real_short,'">',
'<td><span class="checkbox"><label><input type="checkbox" onChange="onCheck($(this), \'', element.short, '\', \'', element.ext, '\');"><label></span></td>',
'<td>', element.filename.replace(/</g, '&lt;').replace(/>/g, '&gt;'), '</td>',
'<td><a href="',vlink,'">',vlink,'</a></td>',
'<td><span class="checkbox"><label><input type="checkbox" class="ckbx" data-short="', element.short, '" data-ext="', element.ext, '"><label></span></td>',
'<td class="ellips"><span title="', name,'">', name, '</span></td>',
'<td class="text-center">',
'<a href="',vlink,'" target="_blank"><i class="icon icon-eye"></i></a>',
'&nbsp;<a href="',vlink,'" class="copy-to-clipboard" title="<%= l('Copy to clipboard') %>"><i class="icon icon-clipboard"></i></a>',
'</td>',
'<td id="count-',real_short,'" class="text-center"></td>',
'<td class="text-center">', del_view, '</td>',
'<td id="del_at_view-', real_short, '" class="text-center">', delView(element.del_at_view), '</td>',
'<td>', created_at, '</td>',
'<td>', limit, '</td>',
'<td><a id="del-',real_short,'" data-short="',real_short,'" data-token="',element.token,'" href="#">',dlink,'</a></td>',
'<td>',
'<span id="limit-', element.real_short, '">', limit, '</span>',
'&nbsp;<a href="#" id="edit-', element.real_short, '" data-modlink="', link(element.real_short, '', element.token, true), '" data-modshort="', element.real_short, '" data-modfirstview="', element.del_at_view, '" data-moddelay="', element.limit, '" data-modcreated_at="', element.created_at, '" data-modname="', name, '" title="<%= l('Modify expiration delay') %>">',
'<i class="icon icon-edit"></i>',
'</a>',
'</td>',
'<td class="text-center"><a id="del-',real_short,'" data-short="',real_short,'" data-token="',element.token,'" href="#" class="remove-link"><i class="icon icon-trash"></i></a></td>',
'</tr>'
].join('');
$('#myfiles').append(tr);
$('#del-'+real_short).on('click', delImage);
$('#edit-'+real_short).on('click', editImage);
$.ajax({
url : '<%== url_for('counter') %>',
@@ -50,12 +173,14 @@ function populateFilesTable() {
$('#alert-'+real_short).remove();
}
} else {
alert(data.msg);
badToast(element.filename+' '+data.msg);
}
},
error: function() {
alert(element.filename+'<%= l(': Error while trying to get the counter.') %>');
badToast(element.filename+'<%= l(': Error while trying to get the counter.') %>');
}
});
});
$('input.ckbx[type="checkbox"]').on('change', onCheck);
$('.copy-to-clipboard').on('click', copyLink);
}

View File

@@ -1,13 +1,6 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% my $l = {
% ar => 'العربية',
% de => 'Deutsch',
% en => 'English',
% es => 'Español',
% fr => 'Français',
% fr_FR => 'Français (France)',
% oc => 'Occitan',
% };
% my $lang = $self->languages;
% $lang =~ s/-(.*)/_\U$1/;
<nav class="navbar navbar-default">
<div class="container">
<div class="navbar-header">
@@ -34,14 +27,25 @@
</li>
</ul>
<ul class="nav navbar-nav navbar-right">
% if (defined($self->config('ldap')) || defined($self->config('htpasswd'))) {
% if ($c->is_user_authenticated) {
<li>
<a href="<%= url_for('logout') %>"><%= l('Logout') %></a>
</li>
% } else {
<li>
<a href="<%= url_for('login') %>"><%= l('Signin') %></a>
</li>
% }
% }
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown" role="button" aria-expanded="false">
<span class="icon-language" aria-hidden="true" title="<%= l('Language') %>"></span><span class="caret"></span>
</a>
<ul class="dropdown-menu" role="menu">
% for my $i (@{$self->available_langs}) {
<li<%== ($i eq $self->languages) ? ' class="active"' : '' %>>
<a href="<%= url_for('lang', l => $i) %>" class="set-lang"><%= $l->{$i} %></a>
<li<%== ($i eq $lang) ? ' class="active"' : '' %>>
<a href="<%= url_for('lang', l => $i) %>" class="set-lang"><%= iso639_native_name($i) %></a>
</li>
% }
</ul>
@@ -58,9 +62,6 @@
<li>
<%= link_to 'https://liberapay.com/sky' => begin %><%= l('Support the author on Liberapay') %><% end %>
</li>
<li>
<%= link_to 'bitcoin:3MJBezS1S1jPZ1Jgn8MYURLLu78CcPfqew?label=lutim' => begin %><%= l('Support the author with bitcoins') %><% end %>
</li>
</ul>
</li>
<li class="dropdown">

View File

@@ -2,19 +2,22 @@
% my $g = ($mimetype eq 'image/gif') ? 1 : 0;
% my $abs = url_for('/'.$short)->to_abs();
<!DOCTYPE html>
<html style="max-height:100%;">
<html>
<head>
<title>Lutim</title>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta charset="utf-8" />
<link rel="icon" type="image/png" href="<%= url_for('/img/favicon.png')->to_abs() %>">
%= stylesheet '/css/twitter.min.css'
<meta property="og:title" content="Lutim" />
<meta property="og:type" content="website" />
<meta property="og:url" content="<%= $abs %>?t" />
<meta property="og:image" content="<%= $abs %>" />
<meta property="og:image:url" content="<%= $abs %>" />
<meta property="og:image:type" content="<%= $mimetype %>" />
% if (config('tweet_card_via')) {
<meta name="twitter:site" content="<%= config('tweet_card_via') %>">
% }
<meta name="twitter:image:src" content="<%= $abs %>">
% if ($g) {
<meta name="twitter:card" content="player">
@@ -25,18 +28,13 @@
<meta name="twitter:player:height" content="<%= $height %>">
%= javascript '/js/jquery-3.2.1.min.js'
%= javascript '/js/freezeframe.min.js'
%= javascript begin
freezeframe_options = {
trigger_event: "click",
animation_play_duration: 60000
}
% end
%= javascript '/js/twitter.js'
% } else {
<meta name="twitter:card" content="photo">
% }
</head>
<body<%== ($g) ? '' : ' style="height: 97%;"' %>>
<img<%= ' class="freezeframe"' if ($g) %> style="<%= 'max-' unless ($g) %>width:100%; max-height:100%;" src="<%= $abs %><%= '.gif' if ($g) %>" alt="<%= $filename %>">
<body<%== ($g) ? '' : ' class="height-97"' %>>
<img class="freezeframe" src="<%= $abs %><%= '.gif' if ($g) %>" alt="<%= $filename %>">
</body>
</html>

View File

@@ -397,11 +397,13 @@
"progress-bars.less",
"close.less",
"component-animations.less",
"dropdowns.less"
"dropdowns.less",
"modals.less"
],
"js": [
"alert.js",
"dropdown.js",
"modal.js",
"collapse.js",
"transition.js"
],

View File

@@ -66,12 +66,6 @@
"code": 59401,
"src": "mfglabs"
},
{
"uid": "c71d7db10ede1349b3a8ae0293b1dbf8",
"css": "flattr",
"code": 59402,
"src": "zocial"
},
{
"uid": "499b745a2e2485bdd059c3a53d048e5f",
"css": "cancel",
@@ -95,6 +89,18 @@
"css": "language",
"code": 59406,
"src": "entypo"
},
{
"uid": "3d349daaea304032a7669b4f24931b6c",
"css": "shuffle",
"code": 59402,
"src": "entypo"
},
{
"uid": "41087bc74d4b20b55059c60a33bf4008",
"css": "edit",
"code": 59407,
"src": "fontawesome"
}
]
}

View File

@@ -22,3 +22,7 @@ DROP TABLE lutim;
ALTER TABLE lutim ADD COLUMN iv text;
-- 2 down
ALTER TABLE lutim DROP COLUMN iv;
-- 3 up
CREATE INDEX IF NOT EXISTS empty_short_idx ON lutim (short) WHERE path IS NULL;
-- 3 down
DROP INDEX empty_short_idx;

View File

@@ -21,3 +21,7 @@ DROP TABLE lutim;
-- 2 up
ALTER TABLE lutim ADD COLUMN iv TEXT;
-- 2 down
-- 3 up
CREATE INDEX IF NOT EXISTS empty_short_idx ON lutim (short) WHERE path IS NULL;
-- 3 down
DROP INDEX empty_short_idx;

View File

@@ -1,10 +1,8 @@
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<config xmlns="http://zanata.org/namespace/config/">
<url>https://trad.framasoft.org/zanata/</url>
<project>lutim</project>
<url>https://trad.framasoft.org/</url>
<project-version>master</project-version>
<project>lutim</project>
<project-type>gettext</project-type>
<src-dir>themes/default/lib/Lutim/I18N/</src-dir>
<trans-dir>themes/default/lib/Lutim/I18N/</trans-dir>