Merge branch 'development' into 'master'

Development

Closes #130, #153 et #150

See merge request fiat-tux/hat-softwares/lufi!31
This commit is contained in:
Luc Didry 2019-08-04 20:04:10 +02:00
commit 9dc7b65a4e
58 changed files with 18154 additions and 1986 deletions

View File

@ -1,12 +1,10 @@
image: hatsoftwares/lufi-test-ci:latest image: hatsoftwares/lufi-test-ci:buster
stages: stages:
- publish_changelog - publish_changelog
- podcheck - pouet_it
- carton - carton
- carton_bdd - carton_bdd
- tests - tests
before_script:
- rm -f *db
variables: variables:
POSTGRES_DB: lufi_db POSTGRES_DB: lufi_db
POSTGRES_USER: lufi POSTGRES_USER: lufi
@ -19,95 +17,106 @@ variables:
### Jobs templates ### Jobs templates
## ##
# #
.carton_bdd_template: &carton_bdd_definition .retry: &retry
stage: carton_bdd
retry: 2 retry: 2
artifacts:
paths:
- local/
expire_in: 1 week
dependencies:
- carton
except: except:
- tags - tags
.sqlite_template: &sqlite_definition .carton_bdd_template: &carton_bdd_definition
<<: *retry
stage: carton_bdd
cache:
key: "$CI_COMMIT_REF_NAME"
paths:
- local/
policy: pull
artifacts:
paths:
- local.tar
expire_in: 3 hours
after_script:
- tar cf local.tar local/
.tests_template: &tests_template
<<: *retry
stage: tests stage: tests
retry: 2 coverage: '/Total.* (\d+\.\d+)$/'
before_script:
- tar xf local.tar && rm local.tar
- which mariadb_config && cd $(dirname $(which mariadb_config)) && ln -s mariadb_config mysql_config
- cd $CI_PROJECT_DIR
- pwd
script:
- MOJO_CONFIG="t/${CI_JOB_NAME}.conf" make test
- MOJO_CONFIG="t/${CI_JOB_NAME}.conf" make cover
.sqlite_template: &sqlite_definition
<<: *tests_template
dependencies: dependencies:
- carton_sqlite - carton_sqlite
services: services:
- name: rroemhild/test-openldap - name: rroemhild/test-openldap
alias: rroemhild-test-openldap alias: rroemhild-test-openldap
coverage: '/Total.* (\d+\.\d+)$/'
except:
- tags
.pg_template: &pg_definition .pg_template: &pg_definition
stage: tests <<: *tests_template
retry: 2
dependencies: dependencies:
- carton_postgresql - carton_postgresql
services: services:
- name: postgres:9.6 - name: postgres:11
alias: postgres alias: postgres
- name: rroemhild/test-openldap - name: rroemhild/test-openldap
alias: rroemhild-test-openldap alias: rroemhild-test-openldap
coverage: '/Total .*(\d+\.\d+)$/'
except:
- tags
.mysql_template: &mysql_definition .mysql_template: &mysql_definition
stage: tests <<: *tests_template
retry: 2
dependencies: dependencies:
- carton_mysql - carton_mysql
services: services:
- name: mariadb:10.1 - name: mariadb:10.3
alias: mariadb alias: mariadb
- name: rroemhild/test-openldap - name: rroemhild/test-openldap
alias: rroemhild-test-openldap alias: rroemhild-test-openldap
coverage: '/Total .*(\d+\.\d+)$/'
except:
- tags
### Publish tag changelog ### Publish tag changelog and create a toot
## ##
# #
publish_changelog: include:
stage: publish_changelog - 'https://framagit.org/fiat-tux/gitlabci-snippets/raw/master/publish_changelog.yml'
script: - 'https://framagit.org/fiat-tux/gitlabci-snippets/raw/master/pouet-it-from-ci.yml'
- export PROJECT_API_URL="https://framagit.org/api/v4/projects/${CI_PROJECT_ID}"
- export DESCRIPTION_URL="${PROJECT_API_URL}/repository/tags/${CI_COMMIT_TAG}/release"
- 'export HEADER="Private-Token: ${GITLAB_API_TOKEN}"'
- sed -n '/^'$CI_COMMIT_TAG'[[:space:]]/,/^[^\t]/p' CHANGELOG | sed -e 's/^[^\t].*//' -e 's/\t//g' | sed '/^[[:space:]]*$/d' > /tmp/text
- if [[ ! -z $GITLAB_API_TOKEN ]]; then curl -s --request POST --data-urlencode "description@/tmp/text" --header "${HEADER}" "${DESCRIPTION_URL}"; fi
only:
- tags
### Podcheck ### Podcheck
## ##
# #
podcheck: podcheck:
stage: podcheck stage: carton
script: script:
- make podcheck - make podcheck
except: except:
- tags - tags
### Cpanfile.snapshot
## Used to get a cpanfile.snapshot from a fresh server (not like my dev VM)
#
#cpanfile_snapshot:
# stage: carton
# script:
# - rm cpanfile.snapshot
# - which mariadb_config && cd $(dirname $(which mariadb_config)) && ln -s mariadb_config mysql_config
# - carton install
# - cat cpanfile.snapshot
# except:
# - tags
### Install common dependencies ### Install common dependencies
## ##
# #
carton: carton:
<<: *retry
stage: carton stage: carton
artifacts: cache:
key: "$CI_COMMIT_REF_NAME"
paths: paths:
- local/ - local/
expire_in: 1 week
dependencies: []
script: script:
- carton install --deployment --without=sqlite --without=postgresql --without=mysql - carton install --deployment --without=sqlite --without=postgresql --without=mysql
when: always
retry: 2
except:
- tags
### Install DB related dependencies ### Install DB related dependencies
## ##
@ -122,32 +131,18 @@ carton_postgresql:
- carton install --deployment --without=sqlite --without=mysql - carton install --deployment --without=sqlite --without=mysql
carton_mysql: carton_mysql:
<<: *carton_bdd_definition <<: *carton_bdd_definition
before_script:
- which mariadb_config && cd $(dirname $(which mariadb_config)) && ln -s mariadb_config mysql_config
- cd $CI_PROJECT_DIR
script: script:
- carton install --deployment --without=sqlite --without=postgresql - carton install --deployment --without=sqlite --without=postgresql
### SQLite tests ### Tests
## ##
# #
sqlite: sqlite:
<<: *sqlite_definition <<: *sqlite_definition
script:
- MOJO_CONFIG=t/sqlite.conf make test
- MOJO_CONFIG=t/sqlite.conf make cover
### PostgreSQL tests
##
#
postgresql: postgresql:
<<: *pg_definition <<: *pg_definition
script:
- MOJO_CONFIG=t/postgresql.conf make test
- MOJO_CONFIG=t/postgresql.conf make cover
### MySQL tests
##
#
mysql: mysql:
<<: *mysql_definition <<: *mysql_definition
script:
- MOJO_CONFIG=t/mysql.conf make test
- MOJO_CONFIG=t/mysql.conf make cover

View File

@ -1,27 +1,35 @@
# Lufi's authors # Lufi's authors
## Main developers ## Main developer 🤪
- Luc Didry, aka Sky (<https://www.fiat-tux.fr>), core developer, @framasky on [Twitter](https://twitter.com/framasky) and on [Diaspora*](https://framasphere.org/public/framasky) - Luc Didry, aka Sky (<https://fiat-tux.fr>), core developer, [@framasky@framapiaf.org](https://framapiaf.org/@framasky/) on Mastodon
## Contributors ## Contributors
### Translations 🌐
- Nikos Filopoulos (italian translation) - Nikos Filopoulos (italian translation)
- Framartin (fix french translation) - Framartin (fix french translation)
- Sébastien Duthil (fix english translation) - Sébastien Duthil (fix english translation)
- Armando Lüscher, https://noplanman.ch/ (fix css) - Armando Lüscher, https://noplanman.ch/ (german translation)
- Quentin Pagès (occitan translation) - Quentin Pagès (occitan translation)
- Yann Le Brech (htpasswd file support)
- Jéssica Da Cunha (portuguese translation) - Jéssica Da Cunha (portuguese translation)
- Ilker Kulgu (fix IE11 compatibility, Dutch translation) - Ilker Kulgu (dutch translation)
- Stéphane Baron (bugfix)
- Butterfly of Fire (arabic translation) - Butterfly of Fire (arabic translation)
- Frju365 (german translation) - Frju365 (german translation)
- pi2 (german translation) - pi2 (german translation)
- alexandre.LG, http://inios.fr/
- Mildis, (bugfix)
## Vulnerabilities / bug hunters ### Code ⌨️
- Armando Lüscher, https://noplanman.ch/ (fix css)
- Yann Le Brech (htpasswd file support)
- Ilker Kulgu (fix IE11 compatibility)
- Stéphane Baron (bugfix)
- alexandre.LG, http://inios.fr/
- Mildis (bugfix)
- TECH'advantage, https://www.tech-advantage.com/ (paid for LDAP invitations feature)
## Vulnerabilities / bug hunters 🐛
Lufi participated to a [Hackpéro](https://hackpero.com/) (sort of a bug bounty hackathon), thanks to [Bounty factory](https://hackpero.com/). Lufi participated to a [Hackpéro](https://hackpero.com/) (sort of a bug bounty hackathon), thanks to [Bounty factory](https://hackpero.com/).

View File

@ -1,5 +1,12 @@
Revision history for Lufi Revision history for Lufi
0.04.0 2019-??-??
- Allow to zip the files before upload
- Allow to see whats in zip file on download page
- Allow to individually download files from zip file (only if zip created by Lufi)
- Allow to invite people to send you files on Lufi when using LDAP auth (#150).
Feature paid for by TECHadvantage (https://www.tech-advantage.com/)
0.03.7 2019-08-01 0.03.7 2019-08-01
- Fix missing default values for some settings (mildis) - Fix missing default values for some settings (mildis)

View File

@ -32,6 +32,11 @@ clean:
dev: clean dev: clean
$(CARTON) morbo $(LUFI) --listen http://0.0.0.0:3000 --watch lib/ --watch script/ --watch themes/ --watch lufi.conf $(CARTON) morbo $(LUFI) --listen http://0.0.0.0:3000 --watch lib/ --watch script/ --watch themes/ --watch lufi.conf
ldap:
sudo docker run --privileged -d -p 389:389 rroemhild/test-openldap; exit 0
ldapdev: ldap dev
devlog: devlog:
multitail log/development.log multitail log/development.log

View File

@ -40,10 +40,10 @@ Because Lufi is quite similar to Luffy, like in "[Monkey D. Luffy](https://en.wi
## Wiki (work in progress) ## Wiki (work in progress)
The official wiki will contain all you need to know about Lufi (installation, configuration, etc.). Go to <https://framagit.org/luc/lufi/wikis/home> or clone it: The official wiki will contain all you need to know about Lufi (installation, configuration, etc.). Go to <https://framagit.org/fiat-tux/hat-softwares/lufi/wikis/home> or clone it:
``` ```
git clone https://framagit.org/luc/lufi.wiki.git git clone https://framagit.org/fiat-tux/hat-softwares/lufi.wiki.git
``` ```
## Encryption ## Encryption
@ -58,7 +58,9 @@ However please note that some metadata are sent unencrypted:
## Client ## Client
There is the web interface, but you can use a CLI client too! Have a look at <https://framagit.org/luc/lufi-cli> or install it directly with `sudo npm install -g lufi-cli`. There is the web interface, but you can use a CLI client too! Have a look at [lufi-cli](https://framagit.org/fiat-tux/hat-softwares/lufi-cli) or install it directly with `sudo npm install -g lufi-cli`.
There is another client in Python too: <https://framagit.org/setop/pylufic>.
## Internationalization ## Internationalization
@ -72,9 +74,9 @@ See [AUTHORS.md](AUTHORS.md) file.
## Contribute! ## Contribute!
Please consider contributing, either by [reporting issues](https://framagit.org/luc/lufi/issues) or by helping the internationalization. And of course, code contributions are welcome! Please consider contributing, either by [reporting issues](https://framagit.org/fiat-tux/hat-softwares/lufi/issues) or by helping the internationalization. And of course, code contributions are welcome!
The details on how to contribute are on the [wiki](https://framagit.org/luc/lufi/wikis/contribute). The details on how to contribute are on the [wiki](https://framagit.org/fiat-tux/hat-softwares/lufi/wikis/contribute).
This software uses [Fiat Tux Code of conduct](https://framagit.org/fiat-tux/code-of-conduct/blob/master/README.md). This software uses [Fiat Tux Code of conduct](https://framagit.org/fiat-tux/code-of-conduct/blob/master/README.md).

View File

@ -1,5 +1,4 @@
requires 'inc::Module::Install'; requires 'inc::Module::Install';
requires 'List::Util', '>= 1.50';
requires 'Mojolicious', '>= 8.05'; requires 'Mojolicious', '>= 8.05';
requires 'Mojolicious::Plugin::DebugDumperHelper'; requires 'Mojolicious::Plugin::DebugDumperHelper';
requires 'Mojolicious::Plugin::I18N'; requires 'Mojolicious::Plugin::I18N';
@ -8,7 +7,7 @@ requires 'Mojolicious::Plugin::GzipStatic';
requires 'Mojolicious::Plugin::StaticCache'; requires 'Mojolicious::Plugin::StaticCache';
requires 'Mojolicious::Plugin::CSPHeader', '>= 0.06'; requires 'Mojolicious::Plugin::CSPHeader', '>= 0.06';
requires 'Mojolicious::Plugin::FiatTux::Helpers', '== 0.08', url => 'https://framagit.org/fiat-tux/mojolicious/mojolicious-plugin-fiattux-helpers/-/archive/0.08/mojolicious-plugin-fiattux-helpers-0.08.tar.gz'; requires 'Mojolicious::Plugin::FiatTux::Helpers', '== 0.08', url => 'https://framagit.org/fiat-tux/mojolicious/mojolicious-plugin-fiattux-helpers/-/archive/0.08/mojolicious-plugin-fiattux-helpers-0.08.tar.gz';
requires 'Mojolicious::Plugin::FiatTux::GrantAccess', '== 0.05', url => 'https://framagit.org/fiat-tux/mojolicious/mojolicious-plugin-fiattux-grantaccess/-/archive/0.05/mojolicious-plugin-fiattux-grantaccess-0.05.tar.gz'; requires 'Mojolicious::Plugin::FiatTux::GrantAccess', '== 0.06', url => 'https://framagit.org/fiat-tux/mojolicious/mojolicious-plugin-fiattux-grantaccess/-/archive/0.06/mojolicious-plugin-fiattux-grantaccess-0.06.tar.gz';
requires 'Mojolicious::Plugin::FiatTux::Themes', '== 0.02', url => 'https://framagit.org/fiat-tux/mojolicious/mojolicious-plugin-fiattux-themes/-/archive/0.02/mojolicious-plugin-fiattux-themes-0.02.tar.gz'; requires 'Mojolicious::Plugin::FiatTux::Themes', '== 0.02', url => 'https://framagit.org/fiat-tux/mojolicious/mojolicious-plugin-fiattux-themes/-/archive/0.02/mojolicious-plugin-fiattux-themes-0.02.tar.gz';
requires 'Filesys::DiskUsage'; requires 'Filesys::DiskUsage';
requires 'Switch'; requires 'Switch';
@ -33,10 +32,12 @@ feature 'optional_deps' => sub {
feature 'test' => sub { feature 'test' => sub {
requires 'Devel::Cover'; requires 'Devel::Cover';
requires 'B::Debug';
}; };
feature 'ldap', 'LDAP authentication support' => sub { feature 'ldap', 'LDAP authentication support' => sub {
requires 'Net::LDAP'; requires 'Net::LDAP';
requires 'Mojolicious::Plugin::Authentication'; requires 'Mojolicious::Plugin::Authentication';
requires 'Date::Language';
}; };
feature 'htpasswd', 'Htpasswd authentication support' => sub { feature 'htpasswd', 'Htpasswd authentication support' => sub {
requires 'Apache::Htpasswd'; requires 'Apache::Htpasswd';

View File

@ -30,10 +30,19 @@ DISTRIBUTIONS
ExtUtils::MakeMaker 6.42 ExtUtils::MakeMaker 6.42
Test::More 0 Test::More 0
perl 5.005 perl 5.005
Canary-Stability-2012 B-Debug-1.26
pathname: M/ML/MLEHMANN/Canary-Stability-2012.tar.gz pathname: R/RU/RURBAN/B-Debug-1.26.tar.gz
provides: provides:
Canary::Stability 2012 B::Debug 1.26
requirements:
B 0
ExtUtils::MakeMaker 0
Test::More 0
deprecate 0.03
Canary-Stability-2013
pathname: M/ML/MLEHMANN/Canary-Stability-2013.tar.gz
provides:
Canary::Stability 2013
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Capture-Tiny-0.48 Capture-Tiny-0.48
@ -92,10 +101,10 @@ DISTRIBUTIONS
ExtUtils::MakeMaker 6.30 ExtUtils::MakeMaker 6.30
Math::BigInt 1.997 Math::BigInt 1.997
Test::More 0.90 Test::More 0.90
Cpanel-JSON-XS-4.06 Cpanel-JSON-XS-4.12
pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.06.tar.gz pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.12.tar.gz
provides: provides:
Cpanel::JSON::XS 4.06 Cpanel::JSON::XS 4.12
Cpanel::JSON::XS::Type undef Cpanel::JSON::XS::Type undef
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
@ -110,10 +119,10 @@ DISTRIBUTIONS
Test::More 0.94 Test::More 0.94
strict 0 strict 0
warnings 0 warnings 0
Crypt-Rijndael-1.13 Crypt-Rijndael-1.14
pathname: L/LE/LEONT/Crypt-Rijndael-1.13.tar.gz pathname: L/LE/LEONT/Crypt-Rijndael-1.14.tar.gz
provides: provides:
Crypt::Rijndael 1.13 Crypt::Rijndael 1.14
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
perl 5.006 perl 5.006
@ -126,24 +135,25 @@ DISTRIBUTIONS
ExtUtils::MakeMaker 6.30 ExtUtils::MakeMaker 6.30
Test::Fatal 0 Test::Fatal 0
Test::More 0 Test::More 0
DBD-Pg-3.7.4 DBD-Pg-3.8.1
pathname: T/TU/TURNSTEP/DBD-Pg-3.7.4.tar.gz pathname: T/TU/TURNSTEP/DBD-Pg-3.8.1.tar.gz
provides: provides:
Bundle::DBD::Pg v3.7.4 Bundle::DBD::Pg v3.8.1
DBD::Pg v3.7.4 DBD::Pg v3.8.1
requirements: requirements:
DBI 1.614 DBI 1.614
ExtUtils::MakeMaker 6.11 ExtUtils::MakeMaker 6.11
Test::More 0.88 Test::More 0.88
Time::HiRes 0 Time::HiRes 0
version 0 version 0
DBD-SQLite-1.58 DBD-SQLite-1.62
pathname: I/IS/ISHIGAKI/DBD-SQLite-1.58.tar.gz pathname: I/IS/ISHIGAKI/DBD-SQLite-1.62.tar.gz
provides: provides:
DBD::SQLite 1.58 DBD::SQLite 1.62
DBD::SQLite::Constants undef DBD::SQLite::Constants undef
DBD::SQLite::VirtualTable 1.58 DBD::SQLite::GetInfo undef
DBD::SQLite::VirtualTable::Cursor 1.58 DBD::SQLite::VirtualTable 1.62
DBD::SQLite::VirtualTable::Cursor 1.62
DBD::SQLite::VirtualTable::FileContent undef DBD::SQLite::VirtualTable::FileContent undef
DBD::SQLite::VirtualTable::FileContent::Cursor undef DBD::SQLite::VirtualTable::FileContent::Cursor undef
DBD::SQLite::VirtualTable::PerlData undef DBD::SQLite::VirtualTable::PerlData undef
@ -356,58 +366,58 @@ DISTRIBUTIONS
File::Spec 0 File::Spec 0
File::Temp 0.16 File::Temp 0.16
perl 5.00405 perl 5.00405
Devel-Cover-1.31 Devel-Cover-1.33
pathname: P/PJ/PJCJ/Devel-Cover-1.31.tar.gz pathname: P/PJ/PJCJ/Devel-Cover-1.33.tar.gz
provides: provides:
Devel::Cover 1.31 Devel::Cover 1.33
Devel::Cover::Annotation::Git 1.31 Devel::Cover::Annotation::Git 1.33
Devel::Cover::Annotation::Random 1.31 Devel::Cover::Annotation::Random 1.33
Devel::Cover::Annotation::Svk 1.31 Devel::Cover::Annotation::Svk 1.33
Devel::Cover::Branch 1.31 Devel::Cover::Branch 1.33
Devel::Cover::Collection 1.31 Devel::Cover::Collection 1.33
Devel::Cover::Collection::Template::Provider 1.31 Devel::Cover::Collection::Template::Provider 1.33
Devel::Cover::Condition 1.31 Devel::Cover::Condition 1.33
Devel::Cover::Condition_and_2 1.31 Devel::Cover::Condition_and_2 1.33
Devel::Cover::Condition_and_3 1.31 Devel::Cover::Condition_and_3 1.33
Devel::Cover::Condition_or_2 1.31 Devel::Cover::Condition_or_2 1.33
Devel::Cover::Condition_or_3 1.31 Devel::Cover::Condition_or_3 1.33
Devel::Cover::Condition_xor_4 1.31 Devel::Cover::Condition_xor_4 1.33
Devel::Cover::Criterion 1.31 Devel::Cover::Criterion 1.33
Devel::Cover::DB 1.31 Devel::Cover::DB 1.33
Devel::Cover::DB::Criterion 1.31 Devel::Cover::DB::Criterion 1.33
Devel::Cover::DB::Digests 1.31 Devel::Cover::DB::Digests 1.33
Devel::Cover::DB::File 1.31 Devel::Cover::DB::File 1.33
Devel::Cover::DB::IO 1.31 Devel::Cover::DB::IO 1.33
Devel::Cover::DB::IO::Base 1.31 Devel::Cover::DB::IO::Base 1.33
Devel::Cover::DB::IO::JSON 1.31 Devel::Cover::DB::IO::JSON 1.33
Devel::Cover::DB::IO::Sereal 1.31 Devel::Cover::DB::IO::Sereal 1.33
Devel::Cover::DB::IO::Storable 1.31 Devel::Cover::DB::IO::Storable 1.33
Devel::Cover::DB::Run 1.31 Devel::Cover::DB::Run 1.33
Devel::Cover::DB::Structure 1.31 Devel::Cover::DB::Structure 1.33
Devel::Cover::Html_Common 1.31 Devel::Cover::Html_Common 1.33
Devel::Cover::Op 1.31 Devel::Cover::Op 1.33
Devel::Cover::Pod 1.31 Devel::Cover::Pod 1.33
Devel::Cover::Report::Compilation 1.31 Devel::Cover::Report::Compilation 1.33
Devel::Cover::Report::Html 1.31 Devel::Cover::Report::Html 1.33
Devel::Cover::Report::Html_basic 1.31 Devel::Cover::Report::Html_basic 1.33
Devel::Cover::Report::Html_basic::Template::Provider 1.31 Devel::Cover::Report::Html_basic::Template::Provider 1.33
Devel::Cover::Report::Html_minimal 1.31 Devel::Cover::Report::Html_minimal 1.33
Devel::Cover::Report::Html_subtle 1.31 Devel::Cover::Report::Html_subtle 1.33
Devel::Cover::Report::Html_subtle::Template::Provider 1.31 Devel::Cover::Report::Html_subtle::Template::Provider 1.33
Devel::Cover::Report::Json 1.31 Devel::Cover::Report::Json 1.33
Devel::Cover::Report::Sort 1.31 Devel::Cover::Report::Sort 1.33
Devel::Cover::Report::Text 1.31 Devel::Cover::Report::Text 1.33
Devel::Cover::Report::Text2 1.31 Devel::Cover::Report::Text2 1.33
Devel::Cover::Report::Vim 1.31 Devel::Cover::Report::Vim 1.33
Devel::Cover::Report::Vim::Template::Provider 1.31 Devel::Cover::Report::Vim::Template::Provider 1.33
Devel::Cover::Statement 1.31 Devel::Cover::Statement 1.33
Devel::Cover::Subroutine 1.31 Devel::Cover::Subroutine 1.33
Devel::Cover::Test 1.31 Devel::Cover::Test 1.33
Devel::Cover::Time 1.31 Devel::Cover::Time 1.33
Devel::Cover::Truth_Table 1.31 Devel::Cover::Truth_Table 1.33
Devel::Cover::Truth_Table::Row 1.31 Devel::Cover::Truth_Table::Row 1.33
Devel::Cover::Util 1.31 Devel::Cover::Util 1.33
Devel::Cover::Web 1.31 Devel::Cover::Web 1.33
requirements: requirements:
B::Debug 0 B::Debug 0
Digest::MD5 0 Digest::MD5 0
@ -434,10 +444,10 @@ DISTRIBUTIONS
Digest::SHA 1 Digest::SHA 1
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
perl 5.004 perl 5.004
EV-4.22 EV-4.27
pathname: M/ML/MLEHMANN/EV-4.22.tar.gz pathname: M/ML/MLEHMANN/EV-4.27.tar.gz
provides: provides:
EV 4.22 EV 4.27
EV::MakeMaker undef EV::MakeMaker undef
requirements: requirements:
Canary::Stability 0 Canary::Stability 0
@ -547,10 +557,10 @@ DISTRIBUTIONS
Filesys::DfPortable 0.85 Filesys::DfPortable 0.85
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Filesys-DiskUsage-0.12 Filesys-DiskUsage-0.13
pathname: M/MA/MANWAR/Filesys-DiskUsage-0.12.tar.gz pathname: M/MA/MANWAR/Filesys-DiskUsage-0.13.tar.gz
provides: provides:
Filesys::DiskUsage 0.12 Filesys::DiskUsage 0.13
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
File::Basename 0 File::Basename 0
@ -597,21 +607,25 @@ DISTRIBUTIONS
perl 5.008001 perl 5.008001
strict 0 strict 0
vars 0 vars 0
HTTP-Daemon-6.01 HTTP-Daemon-6.05
pathname: G/GA/GAAS/HTTP-Daemon-6.01.tar.gz pathname: E/ET/ETHER/HTTP-Daemon-6.05.tar.gz
provides: provides:
HTTP::Daemon 6.01 HTTP::Daemon 6.05
HTTP::Daemon::ClientConn 6.01
requirements: requirements:
Carp 0
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
HTTP::Date 6 HTTP::Date 6
HTTP::Request 6 HTTP::Request 6
HTTP::Response 6 HTTP::Response 6
HTTP::Status 6 HTTP::Status 6
IO::Socket 0 IO::Socket::IP 0
LWP::MediaTypes 6 LWP::MediaTypes 6
Module::Build::Tiny 0.034
Socket 0
Sys::Hostname 0 Sys::Hostname 0
perl 5.008001 perl 5.006
strict 0
warnings 0
HTTP-Date-6.02 HTTP-Date-6.02
pathname: G/GA/GAAS/HTTP-Date-6.02.tar.gz pathname: G/GA/GAAS/HTTP-Date-6.02.tar.gz
provides: provides:
@ -695,17 +709,17 @@ DISTRIBUTIONS
Encode 2.10 Encode 2.10
Exporter 5.57 Exporter 5.57
ExtUtils::MakeMaker 6.30 ExtUtils::MakeMaker 6.30
IO-Socket-SSL-2.060 IO-Socket-SSL-2.066
pathname: S/SU/SULLR/IO-Socket-SSL-2.060.tar.gz pathname: S/SU/SULLR/IO-Socket-SSL-2.066.tar.gz
provides: provides:
IO::Socket::SSL 2.060 IO::Socket::SSL 2.066
IO::Socket::SSL::Intercept 2.056 IO::Socket::SSL::Intercept 2.056
IO::Socket::SSL::OCSP_Cache 2.060 IO::Socket::SSL::OCSP_Cache 2.066
IO::Socket::SSL::OCSP_Resolver 2.060 IO::Socket::SSL::OCSP_Resolver 2.066
IO::Socket::SSL::PublicSuffix undef IO::Socket::SSL::PublicSuffix undef
IO::Socket::SSL::SSL_Context 2.060 IO::Socket::SSL::SSL_Context 2.066
IO::Socket::SSL::SSL_HANDLE 2.060 IO::Socket::SSL::SSL_HANDLE 2.066
IO::Socket::SSL::Session_Cache 2.060 IO::Socket::SSL::Session_Cache 2.066
IO::Socket::SSL::Utils 2.014 IO::Socket::SSL::Utils 2.014
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
@ -726,28 +740,33 @@ DISTRIBUTIONS
Socket 1.94 Socket 1.94
Test::More 0.88 Test::More 0.88
constant 1.03 constant 1.03
ISO-639_1-0.02 ISO-639_1-0.03
pathname: L/LD/LDIDRY/ISO-639_1-0.02.tar.gz pathname: L/LD/LDIDRY/ISO-639_1-0.03.tar.gz
provides: provides:
ISO::639_1 0.02 ISO::639_1 0.03
requirements: requirements:
Module::Build::Tiny 0.035 Module::Build::Tiny 0.035
perl 5.008001 perl 5.008001
JSON-2.97001 JSON-4.02
pathname: I/IS/ISHIGAKI/JSON-2.97001.tar.gz pathname: I/IS/ISHIGAKI/JSON-4.02.tar.gz
provides: provides:
JSON 2.97001 JSON 4.02
JSON::Backend::PP 2.97001 JSON::Backend::PP 4.02
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Test::More 0 Test::More 0
LWP-MediaTypes-6.02 LWP-MediaTypes-6.04
pathname: G/GA/GAAS/LWP-MediaTypes-6.02.tar.gz pathname: O/OA/OALDERS/LWP-MediaTypes-6.04.tar.gz
provides: provides:
LWP::MediaTypes 6.02 LWP::MediaTypes 6.04
requirements: requirements:
Carp 0
Exporter 0
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
File::Basename 0
Scalar::Util 0
perl 5.006002 perl 5.006002
strict 0
Locale-Maketext-Lexicon-1.00 Locale-Maketext-Lexicon-1.00
pathname: D/DR/DRTECH/Locale-Maketext-Lexicon-1.00.tar.gz pathname: D/DR/DRTECH/Locale-Maketext-Lexicon-1.00.tar.gz
provides: provides:
@ -831,31 +850,31 @@ DISTRIBUTIONS
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
perl 5.006 perl 5.006
MailTools-2.20 MailTools-2.21
pathname: M/MA/MARKOV/MailTools-2.20.tar.gz pathname: M/MA/MARKOV/MailTools-2.21.tar.gz
provides: provides:
Mail::Address 2.20 Mail::Address 2.21
Mail::Cap 2.20 Mail::Cap 2.21
Mail::Field 2.20 Mail::Field 2.21
Mail::Field::AddrList 2.20 Mail::Field::AddrList 2.21
Mail::Field::Date 2.20 Mail::Field::Date 2.21
Mail::Field::Generic 2.20 Mail::Field::Generic 2.21
Mail::Filter 2.20 Mail::Filter 2.21
Mail::Header 2.20 Mail::Header 2.21
Mail::Internet 2.20 Mail::Internet 2.21
Mail::Mailer 2.20 Mail::Mailer 2.21
Mail::Mailer::qmail 2.20 Mail::Mailer::qmail 2.21
Mail::Mailer::rfc822 2.20 Mail::Mailer::rfc822 2.21
Mail::Mailer::sendmail 2.20 Mail::Mailer::sendmail 2.21
Mail::Mailer::smtp 2.20 Mail::Mailer::smtp 2.21
Mail::Mailer::smtp::pipe 2.20 Mail::Mailer::smtp::pipe 2.21
Mail::Mailer::smtps 2.20 Mail::Mailer::smtps 2.21
Mail::Mailer::smtps::pipe 2.20 Mail::Mailer::smtps::pipe 2.21
Mail::Mailer::testfile 2.20 Mail::Mailer::testfile 2.21
Mail::Mailer::testfile::pipe 2.20 Mail::Mailer::testfile::pipe 2.21
Mail::Send 2.20 Mail::Send 2.21
Mail::Util 2.20 Mail::Util 2.21
MailTools 2.20 MailTools 2.21
requirements: requirements:
Date::Format 0 Date::Format 0
Date::Parse 0 Date::Parse 0
@ -864,31 +883,30 @@ DISTRIBUTIONS
Net::Domain 1.05 Net::Domain 1.05
Net::SMTP 1.03 Net::SMTP 1.03
Test::More 0 Test::More 0
Module-Build-0.4224 Module-Build-0.4229
pathname: L/LE/LEONT/Module-Build-0.4224.tar.gz pathname: L/LE/LEONT/Module-Build-0.4229.tar.gz
provides: provides:
Module::Build 0.4224 Module::Build 0.4229
Module::Build::Base 0.4224 Module::Build::Base 0.4229
Module::Build::Compat 0.4224 Module::Build::Compat 0.4229
Module::Build::Config 0.4224 Module::Build::Config 0.4229
Module::Build::Cookbook 0.4224 Module::Build::Cookbook 0.4229
Module::Build::Dumper 0.4224 Module::Build::Dumper 0.4229
Module::Build::Notes 0.4224 Module::Build::Notes 0.4229
Module::Build::PPMMaker 0.4224 Module::Build::PPMMaker 0.4229
Module::Build::Platform::Default 0.4224 Module::Build::Platform::Default 0.4229
Module::Build::Platform::MacOS 0.4224 Module::Build::Platform::MacOS 0.4229
Module::Build::Platform::Unix 0.4224 Module::Build::Platform::Unix 0.4229
Module::Build::Platform::VMS 0.4224 Module::Build::Platform::VMS 0.4229
Module::Build::Platform::VOS 0.4224 Module::Build::Platform::VOS 0.4229
Module::Build::Platform::Windows 0.4224 Module::Build::Platform::Windows 0.4229
Module::Build::Platform::aix 0.4224 Module::Build::Platform::aix 0.4229
Module::Build::Platform::cygwin 0.4224 Module::Build::Platform::cygwin 0.4229
Module::Build::Platform::darwin 0.4224 Module::Build::Platform::darwin 0.4229
Module::Build::Platform::os2 0.4224 Module::Build::Platform::os2 0.4229
Module::Build::PodParser 0.4224 Module::Build::PodParser 0.4229
requirements: requirements:
CPAN::Meta 2.142060 CPAN::Meta 2.142060
CPAN::Meta::YAML 0.003
Cwd 0 Cwd 0
Data::Dumper 0 Data::Dumper 0
ExtUtils::CBuilder 0.27 ExtUtils::CBuilder 0.27
@ -902,14 +920,11 @@ DISTRIBUTIONS
File::Find 0 File::Find 0
File::Path 0 File::Path 0
File::Spec 0.82 File::Spec 0.82
File::Temp 0.15
Getopt::Long 0 Getopt::Long 0
Module::Metadata 1.000002 Module::Metadata 1.000002
Parse::CPAN::Meta 1.4401
Perl::OSType 1 Perl::OSType 1
Pod::Man 2.17 Pod::Man 2.17
TAP::Harness 3.29 TAP::Harness 3.29
Test::More 0.49
Text::Abbrev 0 Text::Abbrev 0
Text::ParseWords 0 Text::ParseWords 0
perl 5.006001 perl 5.006001
@ -1005,10 +1020,10 @@ DISTRIBUTIONS
perl 5.006 perl 5.006
strict 0 strict 0
warnings 0 warnings 0
Module-ScanDeps-1.25 Module-ScanDeps-1.27
pathname: R/RS/RSCHUPP/Module-ScanDeps-1.25.tar.gz pathname: R/RS/RSCHUPP/Module-ScanDeps-1.27.tar.gz
provides: provides:
Module::ScanDeps 1.25 Module::ScanDeps 1.27
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
File::Spec 0 File::Spec 0
@ -1018,10 +1033,10 @@ DISTRIBUTIONS
Text::ParseWords 0 Text::ParseWords 0
perl 5.008001 perl 5.008001
version 0 version 0
Mojo-Pg-4.11 Mojo-Pg-4.15
pathname: S/SR/SRI/Mojo-Pg-4.11.tar.gz pathname: S/SR/SRI/Mojo-Pg-4.15.tar.gz
provides: provides:
Mojo::Pg 4.11 Mojo::Pg 4.15
Mojo::Pg::Database undef Mojo::Pg::Database undef
Mojo::Pg::Migrations undef Mojo::Pg::Migrations undef
Mojo::Pg::PubSub undef Mojo::Pg::PubSub undef
@ -1034,15 +1049,15 @@ DISTRIBUTIONS
Mojolicious 8.03 Mojolicious 8.03
SQL::Abstract 1.86 SQL::Abstract 1.86
perl 5.010001 perl 5.010001
Mojo-SQLite-3.001 Mojo-SQLite-3.002
pathname: D/DB/DBOOK/Mojo-SQLite-3.001.tar.gz pathname: D/DB/DBOOK/Mojo-SQLite-3.002.tar.gz
provides: provides:
Mojo::SQLite 3.001 Mojo::SQLite 3.002
Mojo::SQLite::Database 3.001 Mojo::SQLite::Database 3.002
Mojo::SQLite::Migrations 3.001 Mojo::SQLite::Migrations 3.002
Mojo::SQLite::PubSub 3.001 Mojo::SQLite::PubSub 3.002
Mojo::SQLite::Results 3.001 Mojo::SQLite::Results 3.002
Mojo::SQLite::Transaction 3.001 Mojo::SQLite::Transaction 3.002
requirements: requirements:
Carp 0 Carp 0
DBD::SQLite 1.54 DBD::SQLite 1.54
@ -1057,25 +1072,27 @@ DISTRIBUTIONS
URI::db 0.15 URI::db 0.15
URI::file 4.21 URI::file 4.21
perl 5.010001 perl 5.010001
Mojo-mysql-1.07 Mojo-mysql-1.16
pathname: J/JH/JHTHORSEN/Mojo-mysql-1.07.tar.gz pathname: T/TE/TEKKI/Mojo-mysql-1.16.tar.gz
provides: provides:
Blog undef Blog undef
Blog::Controller::Posts undef Blog::Controller::Posts undef
Blog::Model::Posts undef Blog::Model::Posts undef
Mojo::mysql 1.07 Mojo::mysql 1.16
Mojo::mysql::Database undef Mojo::mysql::Database undef
Mojo::mysql::Migrations undef Mojo::mysql::Migrations undef
Mojo::mysql::PubSub undef Mojo::mysql::PubSub undef
Mojo::mysql::Results undef Mojo::mysql::Results undef
Mojo::mysql::Transaction undef Mojo::mysql::Transaction undef
SQL::Abstract::mysql undef
requirements: requirements:
DBD::mysql 4.042 DBD::mysql 4.042
DBI 1.627
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Mojolicious 7.55 Mojolicious 8.03
SQL::Abstract 1.81 SQL::Abstract 1.86
Mojolicious-8.05 Mojolicious-8.22
pathname: S/SR/SRI/Mojolicious-8.05.tar.gz pathname: S/SR/SRI/Mojolicious-8.22.tar.gz
provides: provides:
Mojo undef Mojo undef
Mojo::Asset undef Mojo::Asset undef
@ -1130,7 +1147,6 @@ DISTRIBUTIONS
Mojo::Server::Morbo::Backend undef Mojo::Server::Morbo::Backend undef
Mojo::Server::Morbo::Backend::Poll undef Mojo::Server::Morbo::Backend::Poll undef
Mojo::Server::PSGI undef Mojo::Server::PSGI undef
Mojo::Server::PSGI::_IO undef
Mojo::Server::Prefork undef Mojo::Server::Prefork undef
Mojo::Template undef Mojo::Template undef
Mojo::Transaction undef Mojo::Transaction undef
@ -1145,7 +1161,7 @@ DISTRIBUTIONS
Mojo::UserAgent::Transactor undef Mojo::UserAgent::Transactor undef
Mojo::Util undef Mojo::Util undef
Mojo::WebSocket undef Mojo::WebSocket undef
Mojolicious 8.05 Mojolicious 8.22
Mojolicious::Command undef Mojolicious::Command undef
Mojolicious::Command::Author::cpanify undef Mojolicious::Command::Author::cpanify undef
Mojolicious::Command::Author::generate undef Mojolicious::Command::Author::generate undef
@ -1173,7 +1189,6 @@ DISTRIBUTIONS
Mojolicious::Plugin::HeaderCondition undef Mojolicious::Plugin::HeaderCondition undef
Mojolicious::Plugin::JSONConfig undef Mojolicious::Plugin::JSONConfig undef
Mojolicious::Plugin::Mount undef Mojolicious::Plugin::Mount undef
Mojolicious::Plugin::PODRenderer undef
Mojolicious::Plugin::TagHelpers undef Mojolicious::Plugin::TagHelpers undef
Mojolicious::Plugins undef Mojolicious::Plugins undef
Mojolicious::Renderer undef Mojolicious::Renderer undef
@ -1300,11 +1315,11 @@ DISTRIBUTIONS
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Test 0 Test 0
perl 5.006 perl 5.006
Net-DNS-1.18 Net-DNS-1.20
pathname: N/NL/NLNETLABS/Net-DNS-1.18.tar.gz pathname: N/NL/NLNETLABS/Net-DNS-1.20.tar.gz
provides: provides:
Net::DNS 1.18 Net::DNS 1.20
Net::DNS::Domain 1698 Net::DNS::Domain 1726
Net::DNS::DomainName 1605 Net::DNS::DomainName 1605
Net::DNS::DomainName1035 1605 Net::DNS::DomainName1035 1605
Net::DNS::DomainName2535 1605 Net::DNS::DomainName2535 1605
@ -1314,9 +1329,9 @@ DISTRIBUTIONS
Net::DNS::Mailbox2535 1605 Net::DNS::Mailbox2535 1605
Net::DNS::Nameserver 1692 Net::DNS::Nameserver 1692
Net::DNS::Packet 1714 Net::DNS::Packet 1714
Net::DNS::Parameters 1714 Net::DNS::Parameters 1729
Net::DNS::Question 1714 Net::DNS::Question 1726
Net::DNS::RR 1714 Net::DNS::RR 1726
Net::DNS::RR::A 1597 Net::DNS::RR::A 1597
Net::DNS::RR::AAAA 1597 Net::DNS::RR::AAAA 1597
Net::DNS::RR::AFSDB 1597 Net::DNS::RR::AFSDB 1597
@ -1325,20 +1340,20 @@ DISTRIBUTIONS
Net::DNS::RR::CAA 1597 Net::DNS::RR::CAA 1597
Net::DNS::RR::CDNSKEY 1586 Net::DNS::RR::CDNSKEY 1586
Net::DNS::RR::CDS 1586 Net::DNS::RR::CDS 1586
Net::DNS::RR::CERT 1597 Net::DNS::RR::CERT 1729
Net::DNS::RR::CNAME 1597 Net::DNS::RR::CNAME 1597
Net::DNS::RR::CSYNC 1597 Net::DNS::RR::CSYNC 1597
Net::DNS::RR::DHCID 1597 Net::DNS::RR::DHCID 1597
Net::DNS::RR::DLV 1528 Net::DNS::RR::DLV 1528
Net::DNS::RR::DNAME 1597 Net::DNS::RR::DNAME 1597
Net::DNS::RR::DNSKEY 1597 Net::DNS::RR::DNSKEY 1729
Net::DNS::RR::DS 1597 Net::DNS::RR::DS 1729
Net::DNS::RR::EUI48 1597 Net::DNS::RR::EUI48 1597
Net::DNS::RR::EUI64 1597 Net::DNS::RR::EUI64 1597
Net::DNS::RR::GPOS 1528 Net::DNS::RR::GPOS 1528
Net::DNS::RR::HINFO 1597 Net::DNS::RR::HINFO 1597
Net::DNS::RR::HIP 1597 Net::DNS::RR::HIP 1597
Net::DNS::RR::IPSECKEY 1597 Net::DNS::RR::IPSECKEY 1718
Net::DNS::RR::ISDN 1597 Net::DNS::RR::ISDN 1597
Net::DNS::RR::KEY 1528 Net::DNS::RR::KEY 1528
Net::DNS::RR::KX 1597 Net::DNS::RR::KX 1597
@ -1355,27 +1370,27 @@ DISTRIBUTIONS
Net::DNS::RR::NID 1597 Net::DNS::RR::NID 1597
Net::DNS::RR::NS 1597 Net::DNS::RR::NS 1597
Net::DNS::RR::NSEC 1696 Net::DNS::RR::NSEC 1696
Net::DNS::RR::NSEC3 1694 Net::DNS::RR::NSEC3 1726
Net::DNS::RR::NSEC3PARAM 1597 Net::DNS::RR::NSEC3PARAM 1597
Net::DNS::RR::NULL 1528 Net::DNS::RR::NULL 1528
Net::DNS::RR::OPENPGPKEY 1597 Net::DNS::RR::OPENPGPKEY 1597
Net::DNS::RR::OPT 1605 Net::DNS::RR::OPT 1717
Net::DNS::RR::OPT::CHAIN 1605 Net::DNS::RR::OPT::CHAIN 1717
Net::DNS::RR::OPT::CLIENT_SUBNET 1605 Net::DNS::RR::OPT::CLIENT_SUBNET 1717
Net::DNS::RR::OPT::COOKIE 1605 Net::DNS::RR::OPT::COOKIE 1717
Net::DNS::RR::OPT::DAU 1605 Net::DNS::RR::OPT::DAU 1717
Net::DNS::RR::OPT::DHU 1605 Net::DNS::RR::OPT::DHU 1717
Net::DNS::RR::OPT::EXPIRE 1605 Net::DNS::RR::OPT::EXPIRE 1717
Net::DNS::RR::OPT::KEY_TAG 1605 Net::DNS::RR::OPT::KEY_TAG 1717
Net::DNS::RR::OPT::N3U 1605 Net::DNS::RR::OPT::N3U 1717
Net::DNS::RR::OPT::PADDING 1605 Net::DNS::RR::OPT::PADDING 1717
Net::DNS::RR::OPT::TCP_KEEPALIVE 1605 Net::DNS::RR::OPT::TCP_KEEPALIVE 1717
Net::DNS::RR::PTR 1597 Net::DNS::RR::PTR 1597
Net::DNS::RR::PX 1597 Net::DNS::RR::PX 1597
Net::DNS::RR::RP 1597 Net::DNS::RR::RP 1597
Net::DNS::RR::RRSIG 1709 Net::DNS::RR::RRSIG 1729
Net::DNS::RR::RT 1597 Net::DNS::RR::RT 1597
Net::DNS::RR::SIG 1709 Net::DNS::RR::SIG 1729
Net::DNS::RR::SMIMEA 1597 Net::DNS::RR::SMIMEA 1597
Net::DNS::RR::SOA 1597 Net::DNS::RR::SOA 1597
Net::DNS::RR::SPF 1593 Net::DNS::RR::SPF 1593
@ -1383,21 +1398,21 @@ DISTRIBUTIONS
Net::DNS::RR::SSHFP 1597 Net::DNS::RR::SSHFP 1597
Net::DNS::RR::TKEY 1528 Net::DNS::RR::TKEY 1528
Net::DNS::RR::TLSA 1597 Net::DNS::RR::TLSA 1597
Net::DNS::RR::TSIG 1597 Net::DNS::RR::TSIG 1726
Net::DNS::RR::TXT 1597 Net::DNS::RR::TXT 1597
Net::DNS::RR::URI 1597 Net::DNS::RR::URI 1597
Net::DNS::RR::X25 1597 Net::DNS::RR::X25 1597
Net::DNS::Resolver 1714 Net::DNS::Resolver 1726
Net::DNS::Resolver::Base 1709 Net::DNS::Resolver::Base 1727
Net::DNS::Resolver::MSWin32 1568 Net::DNS::Resolver::MSWin32 1568
Net::DNS::Resolver::Recurse 1709 Net::DNS::Resolver::Recurse 1737
Net::DNS::Resolver::UNIX 1573 Net::DNS::Resolver::UNIX 1573
Net::DNS::Resolver::android 1568 Net::DNS::Resolver::android 1568
Net::DNS::Resolver::cygwin 1568 Net::DNS::Resolver::cygwin 1719
Net::DNS::Resolver::os2 1568 Net::DNS::Resolver::os2 1568
Net::DNS::Resolver::os390 1579 Net::DNS::Resolver::os390 1719
Net::DNS::Text 1698 Net::DNS::Text 1726
Net::DNS::Update 1714 Net::DNS::Update 1726
Net::DNS::ZoneFile 1709 Net::DNS::ZoneFile 1709
Net::DNS::ZoneFile::Generator 1709 Net::DNS::ZoneFile::Generator 1709
Net::DNS::ZoneFile::Text 1709 Net::DNS::ZoneFile::Text 1709
@ -1410,7 +1425,7 @@ DISTRIBUTIONS
IO::File 1.08 IO::File 1.08
IO::Select 1.14 IO::Select 1.14
IO::Socket::IP 0.38 IO::Socket::IP 0.38
MIME::Base64 2.11 MIME::Base64 2.13
PerlIO 1.05 PerlIO 1.05
Scalar::Util 1.25 Scalar::Util 1.25
Test::More 0.52 Test::More 0.52
@ -1424,13 +1439,13 @@ DISTRIBUTIONS
Carp 0 Carp 0
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Storable 0 Storable 0
Net-HTTP-6.18 Net-HTTP-6.19
pathname: O/OA/OALDERS/Net-HTTP-6.18.tar.gz pathname: O/OA/OALDERS/Net-HTTP-6.19.tar.gz
provides: provides:
Net::HTTP 6.18 Net::HTTP 6.19
Net::HTTP::Methods 6.18 Net::HTTP::Methods 6.19
Net::HTTP::NB 6.18 Net::HTTP::NB 6.19
Net::HTTPS 6.18 Net::HTTPS 6.19
requirements: requirements:
Carp 0 Carp 0
Compress::Raw::Zlib 0 Compress::Raw::Zlib 0
@ -1443,16 +1458,15 @@ DISTRIBUTIONS
strict 0 strict 0
vars 0 vars 0
warnings 0 warnings 0
Net-SSLeay-1.85 Net-SSLeay-1.88
pathname: M/MI/MIKEM/Net-SSLeay-1.85.tar.gz pathname: C/CH/CHRISN/Net-SSLeay-1.88.tar.gz
provides: provides:
Net::SSLeay 1.85 Net::SSLeay 1.88
Net::SSLeay::Handle 0.61 Net::SSLeay::Handle 1.88
requirements: requirements:
ExtUtils::MakeMaker 6.36 ExtUtils::MakeMaker 0
MIME::Base64 0 MIME::Base64 0
Test::More 0.60_01 perl 5.008001
perl 5.005
NetAddr-IP-4.079 NetAddr-IP-4.079
pathname: M/MI/MIKER/NetAddr-IP-4.079.tar.gz pathname: M/MI/MIKER/NetAddr-IP-4.079.tar.gz
provides: provides:
@ -1519,11 +1533,11 @@ DISTRIBUTIONS
Sub::Exporter::Progressive 0.001013 Sub::Exporter::Progressive 0.001013
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Sub-Quote-2.005001 Sub-Quote-2.006003
pathname: H/HA/HAARG/Sub-Quote-2.005001.tar.gz pathname: H/HA/HAARG/Sub-Quote-2.006003.tar.gz
provides: provides:
Sub::Defer 2.005001 Sub::Defer 2.006003
Sub::Quote 2.005001 Sub::Quote 2.006003
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
Scalar::Util 0 Scalar::Util 0
@ -1567,10 +1581,10 @@ DISTRIBUTIONS
Test::More 0.80 Test::More 0.80
Test::Warnings 0 Test::Warnings 0
perl 5.006 perl 5.006
TermReadKey-2.37 TermReadKey-2.38
pathname: J/JS/JSTOWE/TermReadKey-2.37.tar.gz pathname: J/JS/JSTOWE/TermReadKey-2.38.tar.gz
provides: provides:
Term::ReadKey 2.37 Term::ReadKey 2.38
requirements: requirements:
ExtUtils::MakeMaker 6.58 ExtUtils::MakeMaker 6.58
Test-Exception-0.43 Test-Exception-0.43
@ -1687,52 +1701,52 @@ DISTRIBUTIONS
perl 5.006 perl 5.006
strict 0 strict 0
warnings 0 warnings 0
URI-1.74 URI-1.76
pathname: E/ET/ETHER/URI-1.74.tar.gz pathname: O/OA/OALDERS/URI-1.76.tar.gz
provides: provides:
URI 1.74 URI 1.76
URI::Escape 3.31 URI::Escape 3.31
URI::Heuristic 4.20 URI::Heuristic 4.20
URI::IRI 1.74 URI::IRI 1.76
URI::QueryParam 1.74 URI::QueryParam 1.76
URI::Split 1.74 URI::Split 1.76
URI::URL 5.04 URI::URL 5.04
URI::WithBase 2.20 URI::WithBase 2.20
URI::data 1.74 URI::data 1.76
URI::file 4.21 URI::file 4.21
URI::file::Base 1.74 URI::file::Base 1.76
URI::file::FAT 1.74 URI::file::FAT 1.76
URI::file::Mac 1.74 URI::file::Mac 1.76
URI::file::OS2 1.74 URI::file::OS2 1.76
URI::file::QNX 1.74 URI::file::QNX 1.76
URI::file::Unix 1.74 URI::file::Unix 1.76
URI::file::Win32 1.74 URI::file::Win32 1.76
URI::ftp 1.74 URI::ftp 1.76
URI::gopher 1.74 URI::gopher 1.76
URI::http 1.74 URI::http 1.76
URI::https 1.74 URI::https 1.76
URI::ldap 1.74 URI::ldap 1.76
URI::ldapi 1.74 URI::ldapi 1.76
URI::ldaps 1.74 URI::ldaps 1.76
URI::mailto 1.74 URI::mailto 1.76
URI::mms 1.74 URI::mms 1.76
URI::news 1.74 URI::news 1.76
URI::nntp 1.74 URI::nntp 1.76
URI::pop 1.74 URI::pop 1.76
URI::rlogin 1.74 URI::rlogin 1.76
URI::rsync 1.74 URI::rsync 1.76
URI::rtsp 1.74 URI::rtsp 1.76
URI::rtspu 1.74 URI::rtspu 1.76
URI::sftp 1.74 URI::sftp 1.76
URI::sip 1.74 URI::sip 1.76
URI::sips 1.74 URI::sips 1.76
URI::snews 1.74 URI::snews 1.76
URI::ssh 1.74 URI::ssh 1.76
URI::telnet 1.74 URI::telnet 1.76
URI::tn3270 1.74 URI::tn3270 1.76
URI::urn 1.74 URI::urn 1.76
URI::urn::isbn 1.74 URI::urn::isbn 1.76
URI::urn::oid 1.74 URI::urn::oid 1.76
requirements: requirements:
Carp 0 Carp 0
Cwd 0 Cwd 0
@ -1852,32 +1866,32 @@ DISTRIBUTIONS
common::sense 3.74 common::sense 3.74
requirements: requirements:
ExtUtils::MakeMaker 0 ExtUtils::MakeMaker 0
libwww-perl-6.36 libwww-perl-6.39
pathname: E/ET/ETHER/libwww-perl-6.36.tar.gz pathname: O/OA/OALDERS/libwww-perl-6.39.tar.gz
provides: provides:
LWP 6.36 LWP 6.39
LWP::Authen::Basic 6.36 LWP::Authen::Basic 6.39
LWP::Authen::Digest 6.36 LWP::Authen::Digest 6.39
LWP::Authen::Ntlm 6.36 LWP::Authen::Ntlm 6.39
LWP::ConnCache 6.36 LWP::ConnCache 6.39
LWP::Debug 6.36 LWP::Debug 6.39
LWP::Debug::TraceHTTP 6.36 LWP::Debug::TraceHTTP 6.39
LWP::DebugFile 6.36 LWP::DebugFile 6.39
LWP::MemberMixin 6.36 LWP::MemberMixin 6.39
LWP::Protocol 6.36 LWP::Protocol 6.39
LWP::Protocol::cpan 6.36 LWP::Protocol::cpan 6.39
LWP::Protocol::data 6.36 LWP::Protocol::data 6.39
LWP::Protocol::file 6.36 LWP::Protocol::file 6.39
LWP::Protocol::ftp 6.36 LWP::Protocol::ftp 6.39
LWP::Protocol::gopher 6.36 LWP::Protocol::gopher 6.39
LWP::Protocol::http 6.36 LWP::Protocol::http 6.39
LWP::Protocol::loopback 6.36 LWP::Protocol::loopback 6.39
LWP::Protocol::mailto 6.36 LWP::Protocol::mailto 6.39
LWP::Protocol::nntp 6.36 LWP::Protocol::nntp 6.39
LWP::Protocol::nogo 6.36 LWP::Protocol::nogo 6.39
LWP::RobotUA 6.36 LWP::RobotUA 6.39
LWP::Simple 6.36 LWP::Simple 6.39
LWP::UserAgent 6.36 LWP::UserAgent 6.39
libwww::perl undef libwww::perl undef
requirements: requirements:
CPAN::Meta::Requirements 2.120620 CPAN::Meta::Requirements 2.120620
@ -1904,7 +1918,7 @@ DISTRIBUTIONS
MIME::Base64 2.1 MIME::Base64 2.1
Module::Metadata 0 Module::Metadata 0
Net::FTP 2.58 Net::FTP 2.58
Net::HTTP 6.07 Net::HTTP 6.18
Scalar::Util 0 Scalar::Util 0
Try::Tiny 0 Try::Tiny 0
URI 1.10 URI 1.10
@ -1914,20 +1928,20 @@ DISTRIBUTIONS
perl 5.008001 perl 5.008001
strict 0 strict 0
warnings 0 warnings 0
perl-ldap-0.65 perl-ldap-0.66
pathname: M/MA/MARSCHAP/perl-ldap-0.65.tar.gz pathname: M/MA/MARSCHAP/perl-ldap-0.66.tar.gz
provides: provides:
Bundle::Net::LDAP 0.03 Bundle::Net::LDAP 0.03
LWP::Protocol::ldap 1.25 LWP::Protocol::ldap 1.25
LWP::Protocol::ldapi undef LWP::Protocol::ldapi undef
LWP::Protocol::ldaps undef LWP::Protocol::ldaps undef
Net::LDAP 0.65 Net::LDAP 0.66
Net::LDAP::ASN 0.12 Net::LDAP::ASN 0.12
Net::LDAP::Bind 1.05 Net::LDAP::Bind 1.05
Net::LDAP::Constant 0.23 Net::LDAP::Constant 0.23
Net::LDAP::Control 0.18 Net::LDAP::Control 0.18
Net::LDAP::Control::Assertion 0.02 Net::LDAP::Control::Assertion 0.02
Net::LDAP::Control::DontUseCopy 0.01 Net::LDAP::Control::DontUseCopy 0.02
Net::LDAP::Control::EntryChange 0.02 Net::LDAP::Control::EntryChange 0.02
Net::LDAP::Control::ManageDsaIT 0.04 Net::LDAP::Control::ManageDsaIT 0.04
Net::LDAP::Control::MatchedValues 0.02 Net::LDAP::Control::MatchedValues 0.02
@ -1943,19 +1957,19 @@ DISTRIBUTIONS
Net::LDAP::Control::SyncDone 0.03 Net::LDAP::Control::SyncDone 0.03
Net::LDAP::Control::SyncRequest 0.03 Net::LDAP::Control::SyncRequest 0.03
Net::LDAP::Control::SyncState 0.04 Net::LDAP::Control::SyncState 0.04
Net::LDAP::Control::VLV 0.06 Net::LDAP::Control::VLV 0.07
Net::LDAP::Control::VLVResponse 0.04 Net::LDAP::Control::VLVResponse 0.04
Net::LDAP::DSML 0.16 Net::LDAP::DSML 0.17
Net::LDAP::DSML::output 0.16 Net::LDAP::DSML::output 0.17
Net::LDAP::DSML::pp 0.16 Net::LDAP::DSML::pp 0.17
Net::LDAP::Entry 0.27 Net::LDAP::Entry 0.28
Net::LDAP::Extension 1.04 Net::LDAP::Extension 1.04
Net::LDAP::Extension::Cancel 0.02 Net::LDAP::Extension::Cancel 0.02
Net::LDAP::Extension::Refresh 0.03 Net::LDAP::Extension::Refresh 0.04
Net::LDAP::Extension::SetPassword 0.06 Net::LDAP::Extension::SetPassword 0.06
Net::LDAP::Extension::WhoAmI 0.02 Net::LDAP::Extension::WhoAmI 0.02
Net::LDAP::Extra 0.02 Net::LDAP::Extra 0.02
Net::LDAP::Extra::AD 0.04 Net::LDAP::Extra::AD 0.05
Net::LDAP::Extra::eDirectory 0.03 Net::LDAP::Extra::eDirectory 0.03
Net::LDAP::Filter 0.20 Net::LDAP::Filter 0.20
Net::LDAP::FilterList 0.02 Net::LDAP::FilterList 0.02
@ -1969,14 +1983,14 @@ DISTRIBUTIONS
Net::LDAP::RootDSE 0.02 Net::LDAP::RootDSE 0.02
Net::LDAP::Schema 0.9908 Net::LDAP::Schema 0.9908
Net::LDAP::Search 0.14 Net::LDAP::Search 0.14
Net::LDAP::Util 0.19 Net::LDAP::Util 0.20
Net::LDAPI 0.04 Net::LDAPI 0.04
Net::LDAPS 0.06 Net::LDAPS 0.06
requirements: requirements:
Authen::SASL 2.00 Authen::SASL 2.00
Convert::ASN1 0.2 Convert::ASN1 0.2
Digest::MD5 0 Digest::MD5 0
ExtUtils::MakeMaker 6.42 ExtUtils::MakeMaker 6.59
File::Basename 0 File::Basename 0
File::Compare 0 File::Compare 0
File::Path 0 File::Path 0

View File

@ -0,0 +1,36 @@
##
## Occitan tables, contributed by Quentn PAGÈS
##
package Date::Language::Occitan;
use Date::Language ();
use vars qw(@ISA @DoW @DoWs @MoY @MoYs @AMPM @Dsuf %MoY %DoW $VERSION);
@ISA = qw(Date::Language);
$VERSION = "1.04";
@DoW = qw(dimenge diluns dimars dimècres dijòus divendres dissabte);
@MoY = qw(genièr febrièr mars abrial mai junh
julhet agost octòbre novembre decembre);
@DoWs = map { substr($_,0,3) } @DoW;
@MoYs = map { substr($_,0,3) } @MoY;
$MoYs[6] = 'jul';
@AMPM = qw(AM PM);
@Dsuf = ((qw(er e e e e e e e e e)) x 3, 'er');
@MoY{@MoY} = (0 .. scalar(@MoY));
@MoY{@MoYs} = (0 .. scalar(@MoYs));
@DoW{@DoW} = (0 .. scalar(@DoW));
@DoW{@DoWs} = (0 .. scalar(@DoWs));
# Formatting routines
sub format_a { $DoWs[$_[0]->[6]] }
sub format_A { $DoW[$_[0]->[6]] }
sub format_b { $MoYs[$_[0]->[4]] }
sub format_B { $MoY[$_[0]->[4]] }
sub format_h { $MoYs[$_[0]->[4]] }
sub format_p { $_[0]->[2] >= 12 ? $AMPM[1] : $AMPM[0] }
1;

View File

@ -110,6 +110,47 @@ sub startup {
$r->post('/logout') $r->post('/logout')
->to('Auth#log_out') ->to('Auth#log_out')
->name('logout'); ->name('logout');
if (defined $self->config('ldap') && defined $self->config('invitations')) {
# Invitation creation page
$r->get('/invite')
->name('invite')
->to('Invitation#new_invite');
# Send invitation
$r->post('/invite')
->to('Invitation#send_invite');
# Get my invitations
$r->get('/invite/list')
->name('invite_list')
->to('Invitation#my_invitations');
# Delete invitations
$r->post('/invite/list/delete')
->name('invite_list_delete')
->to('Invitation#delete_invitations');
# Resend invitation mail
$r->post('/invite/list/resend')
->name('invite_list_resend')
->to('Invitation#resend_invitations');
# Toggle invitations visibility
$r->post('/invite/list/visibility')
->name('invite_list_visibility')
->to('Invitation#toggle_invitations_visibility');
# Im a guest
$r->get('/guest/:token')
->name('guest')
->to('Invitation#guest');
# Im a guest and I sent all my files
$r->post('/guest/:token/send_mail')
->name('guest_send_mail')
->to('Invitation#send_mail_to_ldap_user');
}
} }
# About page # About page

View File

@ -2,6 +2,7 @@ package Lufi::Command::sqliteToOtherDB;
use Mojo::Base 'Mojolicious::Command'; use Mojo::Base 'Mojolicious::Command';
use Lufi::DB::File; use Lufi::DB::File;
use Lufi::DB::Slice; use Lufi::DB::Slice;
use Lufi::DB::Invitation;
use Mojo::SQLite; use Mojo::SQLite;
use FindBin qw($Bin); use FindBin qw($Bin);
use Term::ProgressBar; use Term::ProgressBar;
@ -31,11 +32,12 @@ sub run {
exit 1; exit 1;
} }
my $sqlite = Mojo::SQLite->new('sqlite:'.$config->{db_path}); my $sqlite = Mojo::SQLite->new('sqlite:'.$config->{db_path});
my $files = $sqlite->db->select('files', undef)->hashes; my $files = $sqlite->db->select('files', undef)->hashes;
my $slices = $sqlite->db->select('slices', undef)->hashes; my $slices = $sqlite->db->select('slices', undef)->hashes;
my $invitations = $sqlite->db->select('invitations', undef)->hashes;
my $progress = Term::ProgressBar->new({count => $files->size + $slices->size}); my $progress = Term::ProgressBar->new({count => $files->size + $slices->size + $invitations->size});
$files->each(sub { $files->each(sub {
my ($file, $num) = @_; my ($file, $num) = @_;
@ -72,6 +74,24 @@ sub run {
$progress->update(); $progress->update();
}); });
$invitations->each(sub {
my ($invitation, $num) = @_;
Lufi::DB::Invitation->new(app => $c->app)
->token($invitation->{token})
->ldap_user($invitation->{ldap_user})
->ldap_user_mail($invitation->{ldap_user_mail})
->guest_mail($invitation->{guest_mail})
->created_at($invitation->{created_at})
->expire_at($invitation->{expire_at})
->files_sent_at($invitation->{files_sent_at})
->expend_expire_at($invitation->{expend_expire_at})
->files($invitation->{files})
->show_in_list($invitation->{show_in_list})
->deleted($invitation->{deleted})
->write();
$progress->update();
});
} }
=encoding utf8 =encoding utf8

View File

@ -4,26 +4,36 @@ use Mojo::Base 'Mojolicious::Controller';
sub login_page { sub login_page {
my $c = shift; my $c = shift;
my $redirect = $c->param('redirect') // 'index';
if ($c->is_user_authenticated) { if ($c->is_user_authenticated) {
$c->redirect_to('index'); $c->redirect_to('index');
} else { } else {
$c->render(template => 'login'); $c->render(
template => 'login',
redirect => $redirect
);
} }
} }
sub login { sub login {
my $c = shift; my $c = shift;
my $login = $c->param('login'); my $login = $c->param('login');
my $pwd = $c->param('password'); my $pwd = $c->param('password');
my $redirect = $c->param('redirect') // 'index';
if ($c->validation->csrf_protect->has_error('csrf_token')) { if ($c->validation->csrf_protect->has_error('csrf_token')) {
$c->stash(msg => $c->l('Bad CSRF token.')); $c->stash(msg => $c->l('Bad CSRF token.'));
$c->render(template => 'login'); $c->render(template => 'login');
} else { } else {
if($c->authenticate($login, $pwd)) { if($c->authenticate($login, $pwd)) {
$c->redirect_to('index'); if ($redirect eq 'invite') {
return $c->redirect_to('invite');
} elsif ($redirect eq 'my_invitations') {
return $c->redirect_to('invite_list');
}
return $c->redirect_to('index');
} else { } else {
$c->stash(msg => $c->l('Please, check your credentials or your right to access this service: unable to authenticate.')); $c->stash(msg => $c->l('Please, check your credentials or your right to access this service: unable to authenticate.'));
$c->render(template => 'login'); $c->render(template => 'login');

View File

@ -24,7 +24,10 @@ sub files {
sub upload { sub upload {
my $c = shift; my $c = shift;
if ((!defined($c->config('ldap')) && !defined($c->config('htpasswd'))) || $c->is_user_authenticated) { my $invitation;
my $token = $c->session->{guest_token};
$invitation = Lufi::DB::Invitation->new(app => $c->app)->from_token($token) if $token;
if ((!defined($c->config('ldap')) && !defined($c->config('htpasswd'))) || $c->is_user_authenticated || $invitation) {
$c->inactivity_timeout(30000000); $c->inactivity_timeout(30000000);
$c->app->log->debug('Client connected'); $c->app->log->debug('Client connected');
@ -33,6 +36,8 @@ sub upload {
message => sub { message => sub {
my ($ws, $text) = @_; my ($ws, $text) = @_;
my $invit = Lufi::DB::Invitation->new(app => $c->app)->from_token($token) if $token;
my $begin = time; my $begin = time;
my ($json) = split('XXMOJOXX', $text, 2); my ($json) = split('XXMOJOXX', $text, 2);
@ -42,12 +47,36 @@ sub upload {
$c->app->log->debug('Got message'); $c->app->log->debug('Got message');
if (defined($json->{cancel}) && $json->{cancel}) {
my $f = Lufi::DB::File->new(app => $c->app)->from_short($json->{id});
if ($f && $f->mod_token && $f->mod_token eq $json->{mod_token}) {
$f = $f->delete();
return $ws->send(to_json(
{
action => 'cancel',
success => $f->deleted ? true : false,
msg => $f->deleted ? 'Lufi::DB::File->delete() was successfull' : 'Lufi::DB::File->delete() failed',
i => $json->{i}
}
));
} else {
return $ws->send(to_json(
{
action => 'cancel',
success => false,
msg => 'Lufi::DB::File not found or invalid mod_token',
i => $json->{i}
}
));
}
}
my $stop = 0; my $stop = 0;
# Check if stop_upload file is present # Check if stop_upload file is present
if ($c->stop_upload) { if ($c->stop_upload) {
$stop = 1; $stop = 1;
$c->send(decode('UTF-8', encode_json( return $ws->send(decode('UTF-8', encode_json(
{ {
success => false, success => false,
msg => $c->l('Sorry, uploading is disabled.'), msg => $c->l('Sorry, uploading is disabled.'),
@ -57,10 +86,10 @@ sub upload {
))); )));
} }
# Check against max_size # Check against max_size
elsif (defined $c->config('max_file_size')) { if (defined $c->config('max_file_size')) {
if ($json->{size} > $c->config('max_file_size')) { if ($json->{size} > $c->config('max_file_size')) {
$stop = 1; $stop = 1;
$c->send(decode('UTF-8', encode_json( return $ws->send(decode('UTF-8', encode_json(
{ {
success => false, success => false,
msg => $c->l('Your file is too big: %1 (maximum size allowed: %2)', format_bytes($json->{size}), format_bytes($c->config('max_file_size'))), msg => $c->l('Your file is too big: %1 (maximum size allowed: %2)', format_bytes($json->{size}), format_bytes($c->config('max_file_size'))),
@ -71,9 +100,9 @@ sub upload {
} }
} }
# Check that we have enough space (multiplying by 2 since it's encrypted, it takes more place that the original file) # Check that we have enough space (multiplying by 2 since it's encrypted, it takes more place that the original file)
elsif ($json->{part} == 0 && ($json->{size} * 2) >= dfportable($c->config('upload_dir'))->{bavail}) { if ($json->{part} == 0 && ($json->{size} * 2) >= dfportable($c->config('upload_dir'))->{bavail}) {
$stop = 1; $stop = 1;
$c->send(decode('UTF-8', encode_json( return $ws->send(decode('UTF-8', encode_json(
{ {
success => false, success => false,
msg => $c->l('No enough space available on the server for this file (size: %1).', format_bytes($json->{size})), msg => $c->l('No enough space available on the server for this file (size: %1).', format_bytes($json->{size})),
@ -82,6 +111,18 @@ sub upload {
} }
))); )));
} }
# Check that the invitation is still valid, but only if it's the first chunk
# (i.e. a new file, we don't want to stop a current uploading)
if ($json->{part} == 0 && $invit && !$invit->is_valid()) {
$stop = 1;
$c->app->log->info(sprintf('Someone (%s) tried to use an expired or deleted invitation.', $invit->guest_mail));
$ws->send(decode('UTF-8', encode_json(
{
success => false,
msg => $c->l('Sorry, your invitation has expired or has been deleted. Please contact %1 to have another invitation.', $invit->ldap_user_mail),
}
)));
}
unless ($stop) { unless ($stop) {
my $f; my $f;
@ -118,9 +159,15 @@ sub upload {
} }
my $creator = $c->ip; my $creator = $c->ip;
if (defined($c->config('ldap')) || defined($c->config('htpasswd'))) { # Authenticated user logging
$creator = 'User: '.$c->current_user.', IP: '.$creator; if ((defined($c->config('ldap')) || defined($c->config('htpasswd'))) && !$invitation) {
$creator = sprintf('User: %s, IP: %s', $c->current_user->{username}, $creator);
} }
# Guest user logging
if ($invitation) {
$creator = sprintf('User: %s, IP: %s', $invitation->guest_mail, $creator);
}
my $delete_at_first_view = ($json->{del_at_first_view}) ? 1 : 0; my $delete_at_first_view = ($json->{del_at_first_view}) ? 1 : 0;
$delete_at_first_view = 1 if $c->app->config('force_burn_after_reading'); $delete_at_first_view = 1 if $c->app->config('force_burn_after_reading');
$f = Lufi::DB::File->new(app => $c->app)->get_empty() $f = Lufi::DB::File->new(app => $c->app)->get_empty()
@ -133,6 +180,7 @@ sub upload {
->nbslices($json->{total}) ->nbslices($json->{total})
->mod_token($c->shortener($c->config('token_length'))) ->mod_token($c->shortener($c->config('token_length')))
->passwd($salted_pwd) ->passwd($salted_pwd)
->zipped($json->{zipped})
->write; ->write;
} }
@ -165,23 +213,22 @@ sub upload {
} }
} }
$ws->send(to_json( my $result = {
{ success => true,
success => true, i => $json->{i},
i => $json->{i}, j => $json->{part},
j => $json->{part}, parts => $json->{total},
parts => $json->{total}, short => $f->short,
short => $f->short, name => $f->filename,
name => $f->filename, size => $f->filesize,
size => $f->filesize, del_at_first_view => (($f->delete_at_first_view) ? true : false),
del_at_first_view => (($f->delete_at_first_view) ? true : false), created_at => $f->created_at,
created_at => $f->created_at, delay => $f->delete_at_day,
delay => $f->delete_at_day, token => $f->mod_token,
token => $f->mod_token, sent_delay => $json->{delay},
sent_delay => $json->{delay}, duration => time - $begin
duration => time - $begin };
} $ws->send(to_json($result));
));
} else { } else {
$ws->send(decode('UTF-8', encode_json( $ws->send(decode('UTF-8', encode_json(
{ {

View File

@ -0,0 +1,289 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lufi::Controller::Invitation;
use Mojo::Base 'Mojolicious::Controller';
use Mojo::Collection 'c';
use Mojo::File;
use Mojo::JSON qw(true false decode_json encode_json);
use Mojo::URL;
use Email::Valid;
use Lufi::DB::File;
use Lufi::DB::Invitation;
use Date::Format;
sub new_invite {
my $c = shift;
# The `if (defined($c->config('ldap')))` is at the router level in lib/Lufi.pm
if ($c->is_user_authenticated) {
my $mail_attr = $c->config('invitations')->{'mail_attr'} // 'mail';
my $max_expire_at = $c->config('invitations')->{'max_invitation_expiration_delay'} // 30;
my $send_with_user_email = defined $c->config('invitations')->{'send_invitation_with_ldap_user_mail'};
$c->render(
template => 'invitations/invite',
max_expire_at => $max_expire_at,
send_with_user_email => $send_with_user_email,
user_mail => ($send_with_user_email) ? $c->current_user->{$mail_attr} : '',
fails => [],
success => []
);
} else {
$c->redirect_to($c->url_for('login')->query(redirect => 'invite'));
}
}
sub send_invite {
my $c = shift;
my $guest_mail = $c->param('guest_mail');
my $expire_at = $c->param('expire_at');
my $mail_attr = $c->config('invitations')->{'mail_attr'} // 'mail';
my $max_expire_at = $c->config('invitations')->{'max_invitation_expiration_delay'} // 30;
my $send_with_user_email = defined $c->config('invitations')->{'send_invitation_with_ldap_user_mail'};
# The `if (defined($c->config('ldap')))` is at the router level in lib/Lufi.pm
if ($c->is_user_authenticated) {
my @fails = ();
my @success = ();
unless (Email::Valid->address($guest_mail)) {
push @fails, $c->l('The guest email address (%1) is unvalid.', $guest_mail);
}
unless ($expire_at >= 1 && $expire_at <= $max_expire_at) {
push @fails, $c->l('The expiration delay (%1) is not between 1 and %2 days.', $expire_at, $max_expire_at);
}
unless (scalar(@fails)) {
my $invitation = Lufi::DB::Invitation->new(app => $c->app);
my $mail_attr = $c->config('invitations')->{'mail_attr'} // 'mail';
my $expend_expire_at = $c->config('invitations')->{'max_additional_period'} // 10;
my $token;
do {
$token = $c->create_invitation_token;
} while ($invitation->is_token_used($token));
$invitation = $invitation->from_token($token);
$invitation->ldap_user($c->current_user->{username});
$invitation->ldap_user_mail($c->current_user->{$mail_attr});
$invitation->created_at(time);
$invitation->guest_mail($guest_mail);
$invitation->expire_at($invitation->created_at + 86400 * $expire_at);
$invitation->expend_expire_at($expend_expire_at);
$invitation->show_in_list(1);
$invitation = $invitation->write;
my $from = ($c->config('invitations')->{'send_invitation_with_ldap_user_mail'}) ? $invitation->ldap_user_mail : $c->config('mail_sender');
my $url = $c->url_for('guest', token => $invitation->token)->to_abs;
$c->mail(
from => $from,
to => $invitation->guest_mail,
template => 'invitations/invite',
format => 'mail',
ldap_user => ucfirst($invitation->ldap_user),
url => $url,
invitation => $invitation,
expires => time2str($c->l('%A %d %B %Y at %T'), $invitation->expire_at)
);
push @success, $c->l('Invitation sent to %1.<br> URL: %2', $invitation->guest_mail, $url);
}
$c->render(
template => 'invitations/invite',
max_expire_at => $max_expire_at,
send_with_user_email => $send_with_user_email,
user_mail => ($send_with_user_email) ? $c->current_user->{$mail_attr} : '',
fails => \@fails,
success => \@success
);
} else {
$c->redirect_to('login');
}
}
sub my_invitations {
my $c = shift;
# The `if (defined($c->config('ldap')))` is at the router level in lib/Lufi.pm
if ($c->is_user_authenticated) {
my $invitations = Lufi::DB::Invitation->new(app => $c->app)
->from_user($c->current_user->{username});
$invitations = c() unless $invitations;
$c->render(
template => 'invitations/my_invitations',
invitations => $invitations
);
} else {
$c->redirect_to($c->url_for('login')->query(redirect => 'my_invitations'));
}
}
sub delete_invitations {
my $c = shift;
my @tokens = @{$c->every_param('tokens[]')};
my @result = ();
for my $token (@tokens) {
my $i = Lufi::DB::Invitation->new(app => $c->app)
->from_token($token)
->deleted(1)
->write;
push @result, { msg => $c->l('The invitation %1 has been deleted.', $i->token), token => $i->token, deleted => $i->deleted };
}
$c->render(json => {
success => true,
tokens => \@result
});
}
sub resend_invitations {
my $c = shift;
my @tokens = @{$c->every_param('tokens[]')};
my @success;
my @failures;
for my $token (@tokens) {
my $i = Lufi::DB::Invitation->new(app => $c->app)
->from_token($token);
if ($i->files_sent_at) {
push @failures, $c->l('The invitation %1 cant be resent: %2 has already sent files.<br>Please create a new invitation.', $i->token, $i->guest_mail);
} else {
if ($c->config('invitations')->{'extend_invitation_expiration_on_resend'}) {
$i->expire_at(time + $i->expire_at - $i->created_at)
->write;
}
my $from = ($c->config('invitations')->{'send_invitation_with_ldap_user_mail'}) ? $i->ldap_user_mail : $c->config('mail_sender');
my $url = $c->url_for('guest', token => $i->token)->to_abs;
my $expire = time2str($c->l('%A %d %B %Y at %T'), $i->expire_at);
$c->mail(
from => $from,
to => $i->guest_mail,
template => 'invitations/invite',
format => 'mail',
ldap_user => ucfirst($i->ldap_user),
url => $url,
invitation => $i,
expires => $expire
);
push @success, { msg => $c->l('Invitation resent to %1.<br> URL: %2', $i->guest_mail, $url), expires => $expire, token => $i->token };
}
}
$c->render(json => {
success => \@success,
failures => \@failures
});
}
sub toggle_invitations_visibility {
my $c = shift;
my @tokens = @{$c->every_param('tokens[]')};
my @result = ();
for my $token (@tokens) {
my $i = Lufi::DB::Invitation->new(app => $c->app)
->from_token($token)
->toggle_visibility;
push @result, { token => $i->token, show => ($i->show_in_list) ? true : false }
}
$c->render(json => {
success => true,
tokens => \@result
});
}
sub guest {
my $c = shift;
my $token = $c->param('token');
my $invitation = Lufi::DB::Invitation->new(app => $c->app)->from_token($token);
if ($invitation) {
if ($invitation->is_valid) {
$c->session->{guest_token} = $token;
$c->session(expires => $invitation->expire_at);
return $c->render(
template => 'index',
invitation => $invitation
);
} else {
$c->stash('expired_or_deleted_invitation' => 1);
}
} else {
$c->stash('invitation_not_found' => 1);
}
return $c->render(template => 'invitations/exception');
}
sub send_mail_to_ldap_user {
my $c = shift;
my $token = $c->param('token');
my $urls = c(@{$c->every_param('urls[]')});
my $invitation = Lufi::DB::Invitation->new(app => $c->app)->from_token($token);
if ($invitation) {
my @files = ();
if ($c->config('invitations')->{'save_files_url_in_db'} && $urls->size) {
my $guest_files = $invitation->files;
my %list_token;
if ($guest_files) {
$guest_files = decode_json($guest_files);
for my $file (@{$guest_files}) {
$list_token{$file->{token}} = 1;
}
} else {
$guest_files = [];
}
push @files, @{$guest_files};
$urls->each(sub {
my ($e, $num) = @_;
$e = decode_json($e);
if (!defined($list_token{$e->{token}})) {
push @{$guest_files}, $e;
push @files, $e;
}
});
$invitation->files(encode_json($guest_files));
$invitation->write;
} else {
$urls->each(sub {
push @files, decode_json(shift);
});
}
my $already_notified = 1;
unless ($invitation->files_sent_at) {
$invitation->files_sent_at(time);
$invitation->write;
$already_notified = 0;
}
$c->session(expires => $invitation->files_sent_at + 60 * $invitation->expend_expire_at);
$c->mail(
from => $c->config('mail_sender'),
to => $invitation->ldap_user_mail,
template => 'invitations/notification_files_sent',
format => 'mail',
files => c(@files),
invitation => $invitation,
already_notified => $already_notified
);
return $c->render(
json => {
success => true,
msg => $c->l('The URLs of your files have been sent by email to %1.', $invitation->ldap_user_mail)
}
);
} else {
return $c->render(
json => {
success => false,
msg => $c->l('Sorry, the invitation doesnt exist. Are you sure you are on the right URL?')
}
);
}
}
1;

View File

@ -49,14 +49,10 @@ sub fullstats {
my $c = shift; my $c = shift;
my $stats = Lufi::DB::File->new(app => $c->app)->get_stats; my $stats = Lufi::DB::File->new(app => $c->app)->get_stats;
$stats->{timestamp} = time;
return $c->render( return $c->render(
json => { json => $stats
files => $stats->{files},
deleted => $stats->{deleted},
empty => $stats->{empty},
timestamp => time,
}
); );
} }

View File

@ -26,6 +26,7 @@ has 'slices' => sub {
}; };
has 'passwd'; has 'passwd';
has 'abuse'; has 'abuse';
has 'zipped' => 0;
has 'record' => 0; has 'record' => 0;
has 'app'; has 'app';
@ -78,6 +79,8 @@ Have a look at Lufi::DB::File::SQLite's code: it's simple and may be more unders
=item B<abuse> : integer =item B<abuse> : integer
=item B<zipped> : boolean
=item B<app> : a Mojolicious object =item B<app> : a Mojolicious object
=back =back
@ -128,7 +131,7 @@ sub new {
=over 1 =over 1
=item B<Usage> : C<$c-E<gt>delet> =item B<Usage> : C<$c-E<gt>delete>
=item B<Arguments> : none =item B<Arguments> : none
@ -175,9 +178,9 @@ sub write {
my $c = shift; my $c = shift;
if ($c->record) { if ($c->record) {
$c->app->dbi->db->query('UPDATE files SET short = ?, deleted = ?, mediatype = ?, filename = ?, filesize = ?, counter = ?, delete_at_first_view = ?, delete_at_day = ?, created_at = ?, created_by = ?, last_access_at = ?, mod_token = ?, nbslices = ?, complete = ?, passwd = ?, abuse = ? WHERE short = ?', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse, $c->short); $c->app->dbi->db->query('UPDATE files SET short = ?, deleted = ?, mediatype = ?, filename = ?, filesize = ?, counter = ?, delete_at_first_view = ?, delete_at_day = ?, created_at = ?, created_by = ?, last_access_at = ?, mod_token = ?, nbslices = ?, complete = ?, passwd = ?, abuse = ?, zipped = ? WHERE short = ?', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse, $c->zipped, $c->short);
} else { } else {
$c->app->dbi->db->query('INSERT INTO files (short, deleted, mediatype, filename, filesize, counter, delete_at_first_view, delete_at_day, created_at, created_by, last_access_at, mod_token, nbslices, complete, passwd, abuse) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse); $c->app->dbi->db->query('INSERT INTO files (short, deleted, mediatype, filename, filesize, counter, delete_at_first_view, delete_at_day, created_at, created_by, last_access_at, mod_token, nbslices, complete, passwd, abuse, zipped) VALUES (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)', $c->short, $c->deleted, $c->mediatype, $c->filename, $c->filesize, $c->counter, $c->delete_at_first_view, $c->delete_at_day, $c->created_at, $c->created_by, $c->last_access_at, $c->mod_token, $c->nbslices, $c->complete, $c->passwd, $c->abuse, $c->zipped);
$c->record(1); $c->record(1);
} }
@ -272,11 +275,12 @@ sub get_empty {
sub get_stats { sub get_stats {
my $c = shift; my $c = shift;
my $files = $c->app->dbi->db->query('SELECT count(short) AS count FROM files WHERE created_at IS NOT null AND deleted = ?', 0)->hashes->first->{count}; my $files = $c->app->dbi->db->query('SELECT count(short) AS count FROM files WHERE created_at IS NOT null AND deleted = ?', 0)->hashes->first->{count};
my $deleted = $c->app->dbi->db->query('SELECT count(short) AS count FROM files WHERE created_at IS NOT null AND deleted = ?', 1)->hashes->first->{count}; my $deleted = $c->app->dbi->db->query('SELECT count(short) AS count FROM files WHERE created_at IS NOT null AND deleted = ?', 1)->hashes->first->{count};
my $empty = $c->app->dbi->db->query('SELECT count(short) AS count FROM files WHERE created_at IS null')->hashes->first->{count}; my $empty = $c->app->dbi->db->query('SELECT count(short) AS count FROM files WHERE created_at IS null')->hashes->first->{count};
my $downloads = $c->app->dbi->db->query('SELECT SUM(counter) AS sum FROM files')->hashes->first->{sum};
return { files => $files, deleted => $deleted, empty => $empty }; return { files => $files, deleted => $deleted, empty => $empty, downloads => $downloads };
} }
=head2 from_short =head2 from_short
@ -504,6 +508,7 @@ sub _slurp {
$c->complete($file->{complete}); $c->complete($file->{complete});
$c->passwd($file->{passwd}); $c->passwd($file->{passwd});
$c->abuse($file->{abuse}); $c->abuse($file->{abuse});
$c->zipped($file->{zipped});
$c->record(1) unless $c->record; $c->record(1) unless $c->record;
} }

426
lib/Lufi/DB/Invitation.pm Normal file
View File

@ -0,0 +1,426 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lufi::DB::Invitation;
use Mojo::Base -base;
use Mojo::File;
use Mojo::Collection 'c';
has 'token';
has 'ldap_user';
has 'ldap_user_mail';
has 'guest_mail';
has 'created_at';
has 'expire_at';
has 'files_sent_at';
has 'expend_expire_at';
has 'files';
has 'show_in_list' => 1;
has 'deleted' => 0;
has 'record' => 0;
has 'app';
=head1 NAME
Lufi::DB::Invitation - DB abstraction layer for Lufi invitations
=head1 Contributing
When creating a new database accessor, make sure that it provides the following subroutines.
After that, modify this file and modify the C<new> subroutine to allow to use your accessor.
Have a look at Lufi::DB::Invitation::SQLite's code: it's simple and may be more understandable that this doc.
=head1 Attributes
=over 1
=item B<token> : string, invitation token
=item B<ldap_user> : string, the user who created the invitation
=item B<ldap_user_mail> : string, the email of the user who created the invitation
=item B<guest_mail> : string, the email of the guest
=item B<created_at> : unix timestamp
=item B<expire_at> : unix timestamp
=item B<files_sent_at> : unix timestamp
=item B<expend_expire_at> : integer, "error" delay, in minutes
=item B<files> : string, optional, list of files sent by the guest
=item B<show_in_list> : boolean, if the ldap user want to see the invitation in his/her invitations list
=item B<deleted> : boolean
=item B<app> : a Mojolicious object
=back
=head1 Sub routines
=head2 new
=over 1
=item B<Usage> : C<$c = Lufi::DB::Invitation-E<gt>new(app =E<gt> $self);>
=item B<Arguments> : any of the attribute above
=item B<Purpose> : construct a new db accessor object. If the C<short> attribute is provided, it have to load the informations from the database.
=item B<Returns> : the db accessor object
=item B<Info> : the app argument is used by Lufi::DB::Invitation to choose which db accessor will be used, you don't need to use it in new(), but you can use it to access helpers or configuration settings in the other subroutines
=back
=cut
sub new {
my $c = shift;
$c = $c->SUPER::new(@_);
if (ref($c) eq 'Lufi::DB::Invitation') {
my $dbtype = $c->app->config('dbtype');
if ($dbtype eq 'sqlite') {
use Lufi::DB::Invitation::SQLite;
$c = Lufi::DB::Invitation::SQLite->new(@_);
} elsif ($dbtype eq 'postgresql') {
use Lufi::DB::Invitation::Pg;
$c = Lufi::DB::Invitation::Pg->new(@_);
} elsif ($dbtype eq 'mysql') {
use Lufi::DB::Invitation::Mysql;
$c = Lufi::DB::Invitation::Mysql->new(@_);
}
}
return $c;
}
sub to_hash {
my $c = shift;
return {
token => $c->token,
ldap_user => $c->ldap_user,
ldap_user_mail => $c->ldap_user_mail,
guest_mail => $c->guest_mail,
created_at => $c->created_at,
expire_at => $c->expire_at,
files_sent_at => $c->files_sent_at,
expend_expire_at => $c->expend_expire_at,
files => $c->files,
show_in_list => $c->show_in_list,
deleted => $c->deleted
};
}
=head2 delete
=over 1
=item B<Usage> : C<$c-E<gt>delete>
=item B<Arguments> : none
=item B<Purpose> : set the C<deleted> flag to true
=item B<Returns> : the db accessor object
=back
=cut
sub delete {
my $c = shift;
$c->deleted(1);
$c->write;
return $c;
}
=head2 hide
=over 1
=item B<Usage> : C<$c-E<gt>hide>
=item B<Arguments> : none
=item B<Purpose> : set the C<show_in_list> flag to false
=item B<Returns> : the db accessor object
=back
=cut
sub hide {
my $c = shift;
$c->show_in_list(0);
$c->write;
return $c;
}
=head2 show
=over 1
=item B<Usage> : C<$c-E<gt>show>
=item B<Arguments> : none
=item B<Purpose> : set the C<show_in_list> flag to true
=item B<Returns> : the db accessor object
=back
=cut
sub show {
my $c = shift;
$c->show_in_list(1);
$c->write;
return $c;
}
=head2 toggle_visibility
=over 1
=item B<Usage> : C<$c-E<gt>toggle_visibility>
=item B<Arguments> : none
=item B<Purpose> : toggle the C<show_in_list> flag
=item B<Returns> : the db accessor object
=back
=cut
sub toggle_visibility {
my $c = shift;
if ($c->show_in_list) {
return $c->hide;
} else {
return $c->show;
}
}
=head2 write
=over 1
=item B<Usage> : C<$c-E<gt>write>
=item B<Arguments> : none
=item B<Purpose> : create or update a record in the database, with the values of the object's attributes
=item B<Returns> : the db accessor object
=back
=cut
sub write {
my $c = shift;
if ($c->record) {
$c->app->dbi->db->update('invitations', $c->to_hash, { token => $c->token });
} else {
$c->app->dbi->db->insert('invitations', $c->to_hash);
$c->record(1);
}
return $c;
}
=head2 from_token
=over 1
=item B<Usage> : C<$c-E<gt>from_token($token)>
=item B<Arguments> : string
=item B<Purpose> : find an invitation in the database from its C<token> attribute
=item B<Returns> : a db accessor object
=back
=cut
sub from_token {
my $c = shift;
my $token = shift;
my $r = $c->app->dbi->db->select('invitations', undef, { token => $token })->hashes;
if ($r->size) {
return $c->_slurp($r->first)->record(1);
} else {
return undef;
}
}
=head2 from_user
=over 1
=item B<Usage> : C<$c-E<gt>from_user($mail)>
=item B<Arguments> : string
=item B<Purpose> : find invitations in the database from their C<ldap_user_mail> attribute
=item B<Returns> : a Mojo::Collection of Lufi::DB::Invitation objects, sorted by creation date
=back
=cut
sub from_user {
my $c = shift;
my $user = shift;
my $r = $c->app->dbi->db
->select('invitations', undef, { ldap_user => $user })
->hashes;
if ($r->size) {
my @invitations;
$r->each(sub {
my ($e, $num) = @_;
$e->{app} = $c->app;
$e->{record} = 1;
push @invitations, Lufi::DB::Invitation->new($e);
});
return c(@invitations);
} else {
return undef;
}
}
=head2 is_token_used
=over 1
=item B<Usage> : C<$c-E<gt>is_token_used($token)>
=item B<Arguments> : string
=item B<Purpose> : tells if a token is already used. If not, insert it in database to reserve it
=item B<Returns> : a boolean
=back
=cut
sub is_token_used {
my $c = shift;
my $token = shift;
my $r = $c->app->dbi->db->select('invitations', ['token'], { token => $token })->hashes;
if ($r->size) {
return 1;
} else {
$c->app->dbi->db->insert('invitations', { token => $token });
return 0;
}
}
=head2 is_valid
=over 1
=item B<Usage> : C<$c-E<gt>is_valid()>
=item B<Arguments> : none
=item B<Purpose> : tells if an invitation is still valid
=item B<Returns> : a boolean
=back
=cut
sub is_valid {
my $c = shift;
my $time = time;
# Active After creation date Before expiration date Before files send date plus extension delay
return (!$c->deleted && $time >= $c->created_at && $time < $c->expire_at && (!defined($c->files_sent_at) || $time < ($c->files_sent_at + $c->expend_expire_at * 60)));
}
=head2 _slurp
=over 1
=item B<Usage> : C<$c-E<gt>_slurp>
=item B<Arguments> : none
=item B<Purpose> : put a database record's columns into the Lufi::DB::Invitation object's attributes
=item B<Returns> : the Lufi::DB::Invitation object
=back
=cut
sub _slurp {
my $c = shift;
my $r = shift;
my $invitation;
if (defined $r) {
$invitation = $r;
} else {
my $invitations = $c->app->dbi->db->select('invitations', undef, { token => $c->token })->hashes;
if ($invitations->size) {
$invitation = $invitations->first;
}
}
if ($invitation) {
$c->token( $invitation->{token} );
$c->ldap_user( $invitation->{ldap_user} );
$c->ldap_user_mail( $invitation->{ldap_user_mail} );
$c->guest_mail( $invitation->{guest_mail} );
$c->created_at( $invitation->{created_at} );
$c->expire_at( $invitation->{expire_at} );
$c->files_sent_at( $invitation->{files_sent_at} );
$c->expend_expire_at($invitation->{expend_expire_at});
$c->files( $invitation->{files} );
$c->show_in_list( $invitation->{show_in_list} );
$c->deleted( $invitation->{deleted} );
$c->record(1) unless $c->record;
}
return $c;
}
1;

View File

@ -0,0 +1,13 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lufi::DB::Invitation::Mysql;
use Mojo::Base 'Lufi::DB::Invitation';
sub new {
my $c = shift;
$c = $c->SUPER::new(@_);
return $c;
}
1;

View File

@ -0,0 +1,13 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lufi::DB::Invitation::Pg;
use Mojo::Base 'Lufi::DB::Invitation';
sub new {
my $c = shift;
$c = $c->SUPER::new(@_);
return $c;
}
1;

View File

@ -0,0 +1,14 @@
# vim:set sw=4 ts=4 sts=4 ft=perl expandtab:
package Lufi::DB::Invitation::SQLite;
use Mojo::Base 'Lufi::DB::Invitation';
sub new {
my $c = shift;
$c = $c->SUPER::new(@_);
$c = $c->_slurp if defined $c->record;
return $c;
}
1;

View File

@ -2,6 +2,8 @@
package Lufi::Plugin::Helpers; package Lufi::Plugin::Helpers;
use Mojo::Base 'Mojolicious::Plugin'; use Mojo::Base 'Mojolicious::Plugin';
use Lufi::DB::File; use Lufi::DB::File;
use Lufi::DB::Invitation;
use Date::Language;
sub register { sub register {
my ($self, $app) = @_; my ($self, $app) = @_;
@ -11,7 +13,6 @@ sub register {
$app->plugin('PgURLHelper'); $app->plugin('PgURLHelper');
} }
if ($app->config('dbtype') eq 'postgresql') { if ($app->config('dbtype') eq 'postgresql') {
require Mojo::Pg; require Mojo::Pg;
$app->helper(dbi => \&_pg); $app->helper(dbi => \&_pg);
@ -19,9 +20,9 @@ sub register {
# Database migration # Database migration
my $migrations = Mojo::Pg::Migrations->new(pg => $app->dbi); my $migrations = Mojo::Pg::Migrations->new(pg => $app->dbi);
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) { if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
$migrations->from_file('utilities/migrations/pg.sql')->migrate(0)->migrate(2); $migrations->from_file('utilities/migrations/pg.sql')->migrate(0)->migrate($migrations->latest);
} else { } else {
$migrations->from_file('utilities/migrations/pg.sql')->migrate(2); $migrations->from_file('utilities/migrations/pg.sql')->migrate($migrations->latest);
} }
} elsif ($app->config('dbtype') eq 'mysql') { } elsif ($app->config('dbtype') eq 'mysql') {
require Mojo::mysql; require Mojo::mysql;
@ -30,9 +31,9 @@ sub register {
# Database migration # Database migration
my $migrations = Mojo::mysql::Migrations->new(mysql => $app->dbi); my $migrations = Mojo::mysql::Migrations->new(mysql => $app->dbi);
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) { if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
$migrations->from_file('utilities/migrations/mysql.sql')->migrate(0)->migrate(1); $migrations->from_file('utilities/migrations/mysql.sql')->migrate(0)->migrate($migrations->latest);
} else { } else {
$migrations->from_file('utilities/migrations/mysql.sql')->migrate(1); $migrations->from_file('utilities/migrations/mysql.sql')->migrate($migrations->latest);
} }
} elsif ($app->config('dbtype') eq 'sqlite') { } elsif ($app->config('dbtype') eq 'sqlite') {
require Mojo::SQLite; require Mojo::SQLite;
@ -43,9 +44,9 @@ sub register {
my $sql = $app->dbi; my $sql = $app->dbi;
my $migrations = $sql->migrations; my $migrations = $sql->migrations;
if ($app->mode eq 'development' && $ENV{LUFI_DEV}) { if ($app->mode eq 'development' && $ENV{LUFI_DEV}) {
$migrations->from_file('utilities/migrations/sqlite.sql')->migrate(0)->migrate(2); $migrations->from_file('utilities/migrations/sqlite.sql')->migrate(0)->migrate($migrations->latest);
} else { } else {
$migrations->from_file('utilities/migrations/sqlite.sql')->migrate(2); $migrations->from_file('utilities/migrations/sqlite.sql')->migrate($migrations->latest);
} }
# Check if passwd column is missing # Check if passwd column is missing
@ -58,13 +59,16 @@ sub register {
$app->dbi->db->query('ALTER TABLE files ADD COLUMN passwd TEXT') unless $pwd_col; $app->dbi->db->query('ALTER TABLE files ADD COLUMN passwd TEXT') unless $pwd_col;
} }
$app->helper(provisioning => \&_provisioning); $app->helper(provisioning => \&_provisioning);
$app->helper(get_empty => \&_get_empty); $app->helper(get_empty => \&_get_empty);
$app->helper(ip => \&_ip); $app->helper(ip => \&_ip);
$app->helper(default_delay => \&_default_delay); $app->helper(default_delay => \&_default_delay);
$app->helper(max_delay => \&_max_delay); $app->helper(max_delay => \&_max_delay);
$app->helper(is_selected => \&_is_selected); $app->helper(is_selected => \&_is_selected);
$app->helper(stop_upload => \&_stop_upload); $app->helper(stop_upload => \&_stop_upload);
$app->helper(create_invitation_token => \&_create_invitation_token);
$app->helper(is_guest => \&_is_guest);
$app->helper(get_date_lang => \&_get_date_lang);
} }
sub _pg { sub _pg {
@ -170,4 +174,61 @@ sub _stop_upload {
return 0; return 0;
} }
sub _create_invitation_token {
my $c = shift;
return $c->shortener(32);
}
sub _is_guest {
my $c = shift;
my $token = shift;
my $invitation = Lufi::DB::Invitation->new(app => $c->app)->from_token($token);
return $invitation if ($invitation && $invitation->is_valid);
return 0;
}
my %date_langs = (
aa => 'Afar',
am => 'Amharic',
pt => 'Brazilian',
bg => 'Bulgarian',
zh => 'Chinese',
cs => 'Czech',
da => 'Danish',
nl => 'Dutch',
fi => 'Finnish',
en => 'English',
fr => 'French',
de => 'German',
el => 'Greek',
hu => 'Hungarian',
is => 'Icelandic',
it => 'Italian',
nn => 'Norwegian',
om => 'Oromo',
oc => 'Occitan',
ro => 'Romanian',
ru => 'Russian',
so => 'Somali',
es => 'Spanish',
sv => 'Swedish',
ti => 'Tigrinya',
tk => 'Turkish',
);
sub _get_date_lang {
my $c = shift;
my $l = $c->languages();
return Date::Language->new($date_langs{$l}) if $date_langs{$l};
$l =~ s/^(..).*/$1/;
return Date::Language->new($date_langs{$l}) if $date_langs{$l};
return Date::Language->new('English');
}
1; 1;

View File

@ -18,67 +18,67 @@
clients => 1, clients => 1,
}, },
# put a way to contact you here and uncomment it # Put a way to contact you here and uncomment it
# you can put some HTML in it # You can put some HTML in it
# MANDATORY # MANDATORY
#contact => '<a href="https://contact.example.com">Contact page</a>', #contact => '<a href="https://contact.example.com">Contact page</a>',
# put an URL or an email address to receive file reports and uncomment it # Put an URL or an email address to receive file reports and uncomment it
# it's for make reporting illegal files easy for users # It's for make reporting illegal files easy for users
# MANDATORY # MANDATORY
#report => 'report@example.com', #report => 'report@example.com',
# array of random strings used to encrypt cookies # Array of random strings used to encrypt cookies
# optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT # optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT
#secrets => ['fdjsofjoihrei'], #secrets => ['fdjsofjoihrei'],
# choose a theme. See the available themes in `themes` directory # Choose a theme. See the available themes in `themes` directory
# optional, default is 'default' # Optional, default is 'default'
#theme => 'default', #theme => 'default',
# length of the random URL # Length of the random URL
# optional, default is 8 # optional, default is 8
#length => 8, #length => 8,
# how many URLs will be provisioned in a batch ? # How many URLs will be provisioned in a batch ?
# optional, default is 5 # optional, default is 5
#provis_step => 5, #provis_step => 5,
# max number of URLs to be provisioned # Max number of URLs to be provisioned
# optional, default is 100 # optional, default is 100
#provisioning => 100, #provisioning => 100,
# length of the modify/delete token # Length of the modify/delete token
# optional, default is 32 # optional, default is 32
#token_length => 32, #token_length => 32,
# max file size, in octets # Max file size, in octets
# you can write it 100*1024*1024 # You can write it 100*1024*1024
# optional, no default # optional, no default
#max_file_size => 104857600, #max_file_size => 104857600,
# if you want to have piwik statistics, provide a piwik image tracker # If you want to have piwik statistics, provide a piwik image tracker
# only the image tracker is allowed, no javascript # Only the image tracker is allowed, no javascript
# optional, no default # optional, no default
#piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1', #piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1',
# broadcast_message which will displayed on the index page # Broadcast_message which will displayed on the index page
# optional, no default # optional, no default
#broadcast_message => 'Maintenance', #broadcast_message => 'Maintenance',
# default time limit for files # Default time limit for files
# valid values are 0, 1, 7, 30 and 365 # Valid values are 0, 1, 7, 30 and 365
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#default_delay => 0, #default_delay => 0,
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay) # Number of days after which the files 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 # A warning message will be displayed on homepage
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#max_delay => 0, #max_delay => 0,
# size thresholds: if you want to define max delays for different sizes of file # Size thresholds: if you want to define max delays for different sizes of file
# the keys are size in Bytes, you can't have 10*1000*10000 as key # The keys are size in Bytes, you can't have 10*1000*10000 as key
# if a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above) # If a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above)
# optional, default is using max_delay (see above) for all sizes # optional, default is using max_delay (see above) for all sizes
#delay_for_size => { #delay_for_size => {
# 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above) # 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above)
@ -92,18 +92,50 @@
# optional, defaut is / # optional, defaut is /
#prefix => '/', #prefix => '/',
# array of authorized domains for API calls. # Array of authorized domains for API calls.
# if you want to authorize everyone to use the API: ['*'] # If you want to authorize everyone to use the API: ['*']
# optional, no domains allowed by default # optional, no domains allowed by default
#allowed_domains => ['http://1.example.com', 'http://2.example.com'], #allowed_domains => ['http://1.example.com', 'http://2.example.com'],
# if set, the shortened URLs will use this domain # If set, the shortened URLs will use this domain
# optional # optional
#fixed_domain => 'example.org', #fixed_domain => 'example.org',
# Define a path to the upload directory, where the uploaded files will be stored
# You can define it relative to lufi directory or set an absolute path
# Remember that it has to be in a directory writable by Lufi user
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# Allow to add a password on files, asked before allowing to download files
# optional, default is 0
#allow_pwd_on_files => 0,
# Force all files to be in "Burn after reading mode"
# optional, default is 0
#force_burn_after_reading => 0,
# If set, the files' URLs will always use this domain
# optional, no default
#fixed_domain => 'example.org',
# Abuse reasons
# Set an integer in the abuse field of a file in the database and it will not be downloadable anymore
# The reason will be displayed to the downloader, according to the reasons you will configure here.
# optional, no default
#abuse => {
# 0 => 'Copyright infringment',
# 1 => 'Illegal content',
#},
###############
# Mail settings
###############
# Mail configuration # Mail configuration
# See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES # See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES
# Optional, default to sendmail method with no arguments # optional, default to sendmail method with no arguments
#mail => { #mail => {
# # Valid values are 'sendmail' and 'smtp' # # Valid values are 'sendmail' and 'smtp'
# how => 'smtp', # how => 'smtp',
@ -111,23 +143,27 @@
#}, #},
# Email sender address # Email sender address
# Optional, default to no-reply@lufi.io # optional, default to no-reply@lufi.io
#mail_sender => 'no-reply@lufi.io', #mail_sender => 'no-reply@lufi.io',
# choose what database you want to use #############
# valid choices are sqlite, postgresql and mysql (all lowercase) # DB settings
#############
# Choose what database you want to use
# Valid choices are sqlite, postgresql and mysql (all lowercase)
# optional, default is sqlite # optional, default is sqlite
#dbtype => 'sqlite', #dbtype => 'sqlite',
# SQLite ONLY - only used if dbtype is set to sqlite # SQLite ONLY - only used if dbtype is set to sqlite
# define a path to the SQLite database # Define a path to the SQLite database
# you can define it relative to lufi directory or set an absolute path # You can define it relative to lufi directory or set an absolute path
# remember that it has to be in a directory writable by Lufi user # Remember that it has to be in a directory writable by Lufi user
# optional, default is lufi.db # optional, default is lufi.db
#db_path => 'lufi.db', #db_path => 'lufi.db',
# PostgreSQL ONLY - only used if dbtype is set to postgresql # PostgreSQL ONLY - only used if dbtype is set to postgresql
# these are the credentials to access the PostgreSQL database # These are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype # mandatory if you choosed postgresql as dbtype
#pgdb => { #pgdb => {
# database => 'lufi', # database => 'lufi',
@ -142,7 +178,7 @@
#}, #},
# MySQL ONLY - only used if dbtype is set to mysql # MySQL ONLY - only used if dbtype is set to mysql
# these are the credentials to access the MySQL database # These are the credentials to access the MySQL database
# mandatory if you choosed mysql as dbtype # mandatory if you choosed mysql as dbtype
#mysqldb => { #mysqldb => {
# database => 'lufi', # database => 'lufi',
@ -156,15 +192,12 @@
# #max_connections => 5, # #max_connections => 5,
#}, #},
# define a path to the upload directory, where the uploaded files will be stored #############################################
# you can define it relative to lufi directory or set an absolute path # LDAP settings (authentication and features)
# remember that it has to be in a directory writable by Lufi user #############################################
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# set `ldap` if you want that only authenticated users can upload files # Set `ldap` if you want that only authenticated users can upload files
# please note that everybody can still download files # Please note that everybody can still download files
# optional, no default # optional, no default
#ldap => { #ldap => {
# uri => 'ldaps://ldap.example.org', # server URI # uri => 'ldaps://ldap.example.org', # server URI
@ -181,36 +214,71 @@
# } # }
#}, #},
# set `htpasswd` if you want to use an htpasswd file instead of ldap # If you've set ldap above, the session will last `session_duration` seconds before
# see 'man htpasswd' to know how to create such file
#htpasswd => 'lufi.passwd',
# if you've set ldap above, the session will last `session_duration` seconds before
# the user needs to reauthenticate # the user needs to reauthenticate
# optional, default is 3600 # optional, default is 3600
#session_duration => 3600, #session_duration => 3600,
# allow to add a password on files, asked before allowing to download files # If you use `ldap` for authentication, you can map some attributes from LDAP to be able to access them in Lufi
# optional, default is 0 # Those attributes will be accessible with:
#allow_pwd_on_files => 0, # $c->current_user->{lufi_attribute_name} in Lufi backend files (all that is in `lib` directory)
# <%= $self->current_user->{lufi_attribute_name} %> in templates files (in `themes` directory)
# force all files to be in "Burn after reading mode" #
# optional, default is 0 # Define the attributes like this: `lufi_attribute_name => 'LDAP_attribute_name'`
#force_burn_after_reading => 0, # Note that you cant use `username` as a Lufi attribute name: this name is reserved and will contain the login of the user
# if set, the files' URLs will always use this domain
# optional, no default # optional, no default
#fixed_domain => 'example.org', #ldap_map_attr => {
# displayname => 'cn',
# abuse reasons # mail => 'mail'
# set an integer in the abuse field of a file in the database and it will not be downloadable anymore
# the reason will be displayed to the downloader, according to the reasons you will configure here.
# optional, no default
#abuse => {
# 0 => 'Copyright infringment',
# 1 => 'Illegal content',
#}, #},
# When using LDAP authentication, LDAP users can invite people (by mail) to use Lufi to send them files without
# being authenticated.
# This is where you configure the behavior of the invitations.
# You may need to fetch some attributes from LDAP to use some invitations settings. See `ldap_map_attr` above.
# optional, no default
#invitations => {
# # The name of the key set in `ldap_map_attr` (above) that corresponds to the mail of the LDAP user
# # optional, default is `mail`
# mail_attr => 'mail',
# # The `From` header of invitation mail can be the mail of the LDAP user
# # Be sure to have a mail system that will correctly send the mail from your users! (DKIM, SPF…)
# # To enable this feature, set it to 1
# # optional, disabled by default
# send_invitation_with_ldap_user_mail => 1,
# # The user is able to set an expiration delay for the invitation.
# # This expiration delay cant be more than this setting (in days).
# # optional, default is 30 days
# max_invitation_expiration_delay => 30,
# # Once the guest has submitted his files, he has an additional period of time to submit forgotten files.
# # You can set that additional period of time in minutes here.
# # To disable that feature, set it to 0 or less
# # optional, default is 10 minutes
# max_additional_period => 10,
# # Lufi follows privacy-by-design, so, by default, no files URLs (with the decode secret) are stored in database.
# # However, the concern is different for this case. Storing files URLs makes users able to retrieve the guests sent files
# # from their `invitations` page.
# # Set to 1 to store guests files URLs in database
# # optional, default is 0 (disabled)
# save_files_url_in_db => 0,
# # Users can resend the invitation to their guest. This does not extend the invitations expiration delay unless you
# # set this option to 1.
# # optional, default is 0 (disabled)
# extend_invitation_expiration_on_resend => 0,
#},
#########################
# Htpasswd authentication
#########################
# Set `htpasswd` if you want to use an htpasswd file instead of ldap
# See 'man htpasswd' to know how to create such file
#htpasswd => 'lufi.passwd',
#######################
# HTTP Headers settings
#######################
# Content-Security-Policy header that will be sent by Lufi # Content-Security-Policy header that will be sent by Lufi
# Set to '' to disable CSP header # Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP. # https://content-security-policy.com/ provides a good documentation about CSP.
@ -243,24 +311,24 @@
# Lufi cron jobs settings # Lufi cron jobs settings
######################### #########################
# number of days senders' IP addresses are kept in database # Number of days senders' IP addresses are kept in database
# after that delay, they will be deleted from database (used with script/lufi cron cleanbdd) # After that delay, they will be deleted from database (used with script/lufi cron cleanbdd)
# optional, default is 365 # optional, default is 365
#keep_ip_during => 365, #keep_ip_during => 365,
# max size of the files directory, in octets # Max size of the files directory, in octets
# used by script/lufi cron watch to trigger an action # Used by script/lufi cron watch to trigger an action
# optional, no default # optional, no default
#max_total_size => 10*1024*1024*1024, #max_total_size => 10*1024*1024*1024,
# default action when files directory is over max_total_size (used with script/lufi cron watch) # Default action when files directory is over max_total_size (used with script/lufi cron watch)
# valid values are 'warn', 'stop-upload' and 'delete' # Valid values are 'warn', 'stop-upload' and 'delete'
# please, see readme # Please, see README.md
# optional, default is 'warn' # optional, default is 'warn'
#policy_when_full => 'warn', #policy_when_full => 'warn',
# images which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task # Files which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task
# if delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted # If delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted
# optional, no default # optional, no default
#delete_no_longer_viewed_files => 90, #delete_no_longer_viewed_files => 90,
}; };

View File

@ -6,6 +6,7 @@
# see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings # see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings
hypnotoad => { hypnotoad => {
# array of IP addresses and ports you want to listen to # array of IP addresses and ports you want to listen to
# you can specify a unix socket too, like 'http+unix://%2Ftmp%2Flufi.sock'
listen => ['http://127.0.0.1:8081'], listen => ['http://127.0.0.1:8081'],
# if you use Lufi behind a reverse proxy like Nginx, you want to set proxy to 1 # if you use Lufi behind a reverse proxy like Nginx, you want to set proxy to 1
# if you use Lufi directly, let it commented # if you use Lufi directly, let it commented
@ -17,67 +18,67 @@
clients => 1, clients => 1,
}, },
# put a way to contact you here and uncomment it # Put a way to contact you here and uncomment it
# you can put some HTML in it # You can put some HTML in it
# MANDATORY # MANDATORY
contact => '<a href="https://contact.example.com">Contact page</a>', contact => '<a href="https://contact.example.com">Contact page</a>',
# put an URL or an email address to receive file reports and uncomment it # Put an URL or an email address to receive file reports and uncomment it
# it's for make reporting illegal files easy for users # It's for make reporting illegal files easy for users
# MANDATORY # MANDATORY
report => 'report@example.com', report => 'report@example.com',
# array of random strings used to encrypt cookies # Array of random strings used to encrypt cookies
# optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT # optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT
#secrets => ['fdjsofjoihrei'], #secrets => ['fdjsofjoihrei'],
# choose a theme. See the available themes in `themes` directory # Choose a theme. See the available themes in `themes` directory
# optional, default is 'default' # Optional, default is 'default'
#theme => 'default', #theme => 'default',
# length of the random URL # Length of the random URL
# optional, default is 8 # optional, default is 8
#length => 8, #length => 8,
# how many URLs will be provisioned in a batch ? # How many URLs will be provisioned in a batch ?
# optional, default is 5 # optional, default is 5
#provis_step => 5, #provis_step => 5,
# max number of URLs to be provisioned # Max number of URLs to be provisioned
# optional, default is 100 # optional, default is 100
#provisioning => 100, #provisioning => 100,
# length of the modify/delete token # Length of the modify/delete token
# optional, default is 32 # optional, default is 32
#token_length => 32, #token_length => 32,
# max file size, in octets # Max file size, in octets
# you can write it 100*1024*1024 # You can write it 100*1024*1024
# optional, no default # optional, no default
#max_file_size => 104857600, #max_file_size => 104857600,
# if you want to have piwik statistics, provide a piwik image tracker # If you want to have piwik statistics, provide a piwik image tracker
# only the image tracker is allowed, no javascript # Only the image tracker is allowed, no javascript
# optional, no default # optional, no default
#piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1', #piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1',
# broadcast_message which will displayed on the index page # Broadcast_message which will displayed on the index page
# optional, no default # optional, no default
#broadcast_message => 'Maintenance', #broadcast_message => 'Maintenance',
# default time limit for files # Default time limit for files
# valid values are 0, 1, 7, 30 and 365 # Valid values are 0, 1, 7, 30 and 365
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#default_delay => 0, #default_delay => 0,
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay) # 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 # A warning message will be displayed on homepage
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#max_delay => 0, #max_delay => 0,
# size thresholds: if you want to define max delays for different sizes of file # Size thresholds: if you want to define max delays for different sizes of file
# the keys are size in Bytes, you can't have 10*1000*10000 as key # The keys are size in Bytes, you can't have 10*1000*10000 as key
# if a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above) # If a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above)
# optional, default is using max_delay (see above) for all sizes # optional, default is using max_delay (see above) for all sizes
#delay_for_size => { #delay_for_size => {
# 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above) # 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above)
@ -91,18 +92,54 @@
# optional, defaut is / # optional, defaut is /
#prefix => '/', #prefix => '/',
# array of authorized domains for API calls. # Array of authorized domains for API calls.
# if you want to authorize everyone to use the API: ['*'] # If you want to authorize everyone to use the API: ['*']
# optional, no domains allowed by default # optional, no domains allowed by default
#allowed_domains => ['http://1.example.com', 'http://2.example.com'], #allowed_domains => ['http://1.example.com', 'http://2.example.com'],
# if set, the shortened URLs will use this domain # If set, the shortened URLs will use this domain
# optional # optional
#fixed_domain => 'example.org', #fixed_domain => 'example.org',
# Define a path to the upload directory, where the uploaded files will be stored
# You can define it relative to lufi directory or set an absolute path
# Remember that it has to be in a directory writable by Lufi user
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# Allow to add a password on files, asked before allowing to download files
# optional, default is 0
allow_pwd_on_files => 1,
# Force all files to be in "Burn after reading mode"
# optional, default is 0
#force_burn_after_reading => 0,
# If set, the files' URLs will always use this domain
# optional, no default
#fixed_domain => 'example.org',
# Abuse reasons
# Set an integer in the abuse field of a file in the database and it will not be downloadable anymore
# The reason will be displayed to the downloader, according to the reasons you will configure here.
# optional, no default
#abuse => {
# 0 => 'Copyright infringment',
# 1 => 'Illegal content',
#},
abuse => {
0 => 'Copyright infringment',
1 => 'Illegal content',
},
###############
# Mail settings
###############
# Mail configuration # Mail configuration
# See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES # See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES
# Optional, default to sendmail method with no arguments # optional, default to sendmail method with no arguments
#mail => { #mail => {
# # Valid values are 'sendmail' and 'smtp' # # Valid values are 'sendmail' and 'smtp'
# how => 'smtp', # how => 'smtp',
@ -110,23 +147,28 @@
#}, #},
# Email sender address # Email sender address
# Optional, default to no-reply@lufi.io # optional, default to no-reply@lufi.io
#mail_sender => 'no-reply@lufi.io', #mail_sender => 'no-reply@lufi.io',
# choose what database you want to use #############
# valid choices are sqlite, postgresql and mysql (all lowercase) # DB settings
#############
# Choose what database you want to use
# Valid choices are sqlite, postgresql and mysql (all lowercase)
# optional, default is sqlite # optional, default is sqlite
#dbtype => 'sqlite',
dbtype => 'mysql', dbtype => 'mysql',
# SQLite ONLY - only used if dbtype is set to sqlite # SQLite ONLY - only used if dbtype is set to sqlite
# define a path to the SQLite database # Define a path to the SQLite database
# you can define it relative to lufi directory or set an absolute path # You can define it relative to lufi directory or set an absolute path
# remember that it has to be in a directory writable by Lufi user # Remember that it has to be in a directory writable by Lufi user
# optional, default is lufi.db # optional, default is lufi.db
#db_path => 'lufi.db', #db_path => 'lufi.db',
# PostgreSQL ONLY - only used if dbtype is set to postgresql # PostgreSQL ONLY - only used if dbtype is set to postgresql
# these are the credentials to access the PostgreSQL database # These are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype # mandatory if you choosed postgresql as dbtype
#pgdb => { #pgdb => {
# database => 'lufi', # database => 'lufi',
@ -135,13 +177,25 @@
# #port => 5432, # #port => 5432,
# user => 'DBUSER', # user => 'DBUSER',
# pwd => 'DBPASSWORD', # pwd => 'DBPASSWORD',
# # https://mojolicious.org/perldoc/Mojo/Pg#max_connections
# # optional, default is 1 # # optional, default is 1
# #max_connections => 1, # #max_connections => 1,
#}, #},
# MySQL ONLY - only used if dbtype is set to mysql # MySQL ONLY - only used if dbtype is set to mysql
# these are the credentials to access the MySQL database # These are the credentials to access the MySQL database
# mandatory if you choosed mysql as dbtype # mandatory if you choosed mysql as dbtype
#mysqldb => {
# database => 'lufi',
# host => 'localhost',
# # optional, default is 3306
# #port => 3306,
# user => 'DBUSER',
# pwd => 'DBPASSWORD',
# # https://metacpan.org/pod/Mojo::mysql#max_connections
# # optional, default is 5 (set to 0 to disable persistent connections)
# #max_connections => 5,
#},
mysqldb => { mysqldb => {
database => 'lufi_db', database => 'lufi_db',
host => 'mariadb', host => 'mariadb',
@ -153,55 +207,50 @@
# #max_connections => 5, # #max_connections => 5,
}, },
# define a path to the upload directory, where the uploaded files will be stored #############################################
# you can define it relative to lufi directory or set an absolute path # LDAP settings (authentication and features)
# remember that it has to be in a directory writable by Lufi user #############################################
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# set `ldap` if you want that only authenticated users can upload files # Set `ldap` if you want that only authenticated users can upload files
# please note that everybody can still download files # Please note that everybody can still download files
# optional, no default # optional, no default
#ldap => { uri => 'ldap://rroemhild-test-openldap', user_tree => 'ou=people,dc=planetexpress,dc=com', bind_dn => 'cn=admin,dc=planetexpress,dc=com', bind_pwd => 'GoodNewsEveryone', user_attr => 'uid', user_filter => '' }, #ldap => { uri => 'ldap://rroemhild-test-openldap', user_tree => 'ou=people,dc=planetexpress,dc=com', bind_dn => 'cn=admin,dc=planetexpress,dc=com', bind_pwd => 'GoodNewsEveryone', user_attr => 'uid', user_filter => '' },
# set `htpasswd` if you want to use an htpasswd file instead of ldap # If you've set ldap above, the session will last `session_duration` seconds before
# see 'man htpasswd' to know how to create such file
#htpasswd => 't/lstu.passwd',
# if you've set ldap above, the session will last `session_duration` seconds before
# the user needs to reauthenticate # the user needs to reauthenticate
# optional, default is 3600 # optional, default is 3600
#session_duration => 3600, #session_duration => 3600,
# allow to add a password on files, asked before allowing to download files # If you use `ldap` for authentication, you can map some attributes from LDAP to be able to access them in Lufi
# optional, default is 0 # Those attributes will be accessible with:
allow_pwd_on_files => 1, # $c->current_user->{lufi_attribute_name} in Lufi backend files (all that is in `lib` directory)
# <%= $self->current_user->{lufi_attribute_name} %> in templates files (in `themes` directory)
#
# Define the attributes like this: `lufi_attribute_name => 'LDAP_attribute_name'`
# Note that you cant use `username` as a Lufi attribute name: this name is reserved and will contain the login of the user
#ldap_map_attr => {
# displayname => 'cn',
# mail => 'mail'
#},
# force all files to be in "Burn after reading mode" #########################
# optional, default is 0 # Htpasswd authentication
#force_burn_after_reading => 0, #########################
# if set, the files' URLs will always use this domain # Set `htpasswd` if you want to use an htpasswd file instead of ldap
# optional, no default # See 'man htpasswd' to know how to create such file
#fixed_domain => 'example.org', #htpasswd => 't/lstu.passwd',
# abuse reasons #######################
# set an integer in the abuse field of a file in the database and it will not be downloadable anymore # HTTP Headers settings
# the reason will be displayed to the downloader, according to the reasons you will configure here. #######################
# optional, no default
abuse => {
0 => 'Copyright infringment',
1 => 'Illegal content',
},
# Content-Security-Policy header that will be sent by Lufi # Content-Security-Policy header that will be sent by Lufi
# Set to '' to disable CSP header # Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP. # 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. # 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'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" # optional, default is "base-uri 'self'; connect-src 'self' ws://YOUR_HOST; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# the default value is good for `default` and `milligram` themes #csp => "",
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# X-Frame-Options header that will be sent by Lufi # X-Frame-Options header that will be sent by Lufi
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
@ -228,24 +277,24 @@
# Lufi cron jobs settings # Lufi cron jobs settings
######################### #########################
# number of days senders' IP addresses are kept in database # Number of days senders' IP addresses are kept in database
# after that delay, they will be deleted from database (used with script/lufi cron cleanbdd) # After that delay, they will be deleted from database (used with script/lufi cron cleanbdd)
# optional, default is 365 # optional, default is 365
#keep_ip_during => 365, #keep_ip_during => 365,
# max size of the files directory, in octets # Max size of the files directory, in octets
# used by script/lufi cron watch to trigger an action # Used by script/lufi cron watch to trigger an action
# optional, no default # optional, no default
#max_total_size => 10*1024*1024*1024, #max_total_size => 10*1024*1024*1024,
# default action when files directory is over max_total_size (used with script/lufi cron watch) # Default action when files directory is over max_total_size (used with script/lufi cron watch)
# valid values are 'warn', 'stop-upload' and 'delete' # Valid values are 'warn', 'stop-upload' and 'delete'
# please, see readme # Please, see README.md
# optional, default is 'warn' # optional, default is 'warn'
#policy_when_full => 'warn', #policy_when_full => 'warn',
# images which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task # Files which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task
# if delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted # If delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted
# optional, no default # optional, no default
#delete_no_longer_viewed_files => 90, #delete_no_longer_viewed_files => 90,
}; };

View File

@ -6,6 +6,7 @@
# see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings # see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings
hypnotoad => { hypnotoad => {
# array of IP addresses and ports you want to listen to # array of IP addresses and ports you want to listen to
# you can specify a unix socket too, like 'http+unix://%2Ftmp%2Flufi.sock'
listen => ['http://127.0.0.1:8081'], listen => ['http://127.0.0.1:8081'],
# if you use Lufi behind a reverse proxy like Nginx, you want to set proxy to 1 # if you use Lufi behind a reverse proxy like Nginx, you want to set proxy to 1
# if you use Lufi directly, let it commented # if you use Lufi directly, let it commented
@ -17,67 +18,67 @@
clients => 1, clients => 1,
}, },
# put a way to contact you here and uncomment it # Put a way to contact you here and uncomment it
# you can put some HTML in it # You can put some HTML in it
# MANDATORY # MANDATORY
contact => '<a href="https://contact.example.com">Contact page</a>', contact => '<a href="https://contact.example.com">Contact page</a>',
# put an URL or an email address to receive file reports and uncomment it # Put an URL or an email address to receive file reports and uncomment it
# it's for make reporting illegal files easy for users # It's for make reporting illegal files easy for users
# MANDATORY # MANDATORY
report => 'report@example.com', report => 'report@example.com',
# array of random strings used to encrypt cookies # Array of random strings used to encrypt cookies
# optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT # optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT
#secrets => ['fdjsofjoihrei'], #secrets => ['fdjsofjoihrei'],
# choose a theme. See the available themes in `themes` directory # Choose a theme. See the available themes in `themes` directory
# optional, default is 'default' # Optional, default is 'default'
#theme => 'default', #theme => 'default',
# length of the random URL # Length of the random URL
# optional, default is 8 # optional, default is 8
#length => 8, #length => 8,
# how many URLs will be provisioned in a batch ? # How many URLs will be provisioned in a batch ?
# optional, default is 5 # optional, default is 5
#provis_step => 5, #provis_step => 5,
# max number of URLs to be provisioned # Max number of URLs to be provisioned
# optional, default is 100 # optional, default is 100
#provisioning => 100, #provisioning => 100,
# length of the modify/delete token # Length of the modify/delete token
# optional, default is 32 # optional, default is 32
#token_length => 32, #token_length => 32,
# max file size, in octets # Max file size, in octets
# you can write it 100*1024*1024 # You can write it 100*1024*1024
# optional, no default # optional, no default
#max_file_size => 104857600, #max_file_size => 104857600,
# if you want to have piwik statistics, provide a piwik image tracker # If you want to have piwik statistics, provide a piwik image tracker
# only the image tracker is allowed, no javascript # Only the image tracker is allowed, no javascript
# optional, no default # optional, no default
#piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1', #piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1',
# broadcast_message which will displayed on the index page # Broadcast_message which will displayed on the index page
# optional, no default # optional, no default
#broadcast_message => 'Maintenance', #broadcast_message => 'Maintenance',
# default time limit for files # Default time limit for files
# valid values are 0, 1, 7, 30 and 365 # Valid values are 0, 1, 7, 30 and 365
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#default_delay => 0, #default_delay => 0,
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay) # 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 # A warning message will be displayed on homepage
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#max_delay => 0, #max_delay => 0,
# size thresholds: if you want to define max delays for different sizes of file # Size thresholds: if you want to define max delays for different sizes of file
# the keys are size in Bytes, you can't have 10*1000*10000 as key # The keys are size in Bytes, you can't have 10*1000*10000 as key
# if a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above) # If a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above)
# optional, default is using max_delay (see above) for all sizes # optional, default is using max_delay (see above) for all sizes
#delay_for_size => { #delay_for_size => {
# 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above) # 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above)
@ -91,18 +92,50 @@
# optional, defaut is / # optional, defaut is /
#prefix => '/', #prefix => '/',
# array of authorized domains for API calls. # Array of authorized domains for API calls.
# if you want to authorize everyone to use the API: ['*'] # If you want to authorize everyone to use the API: ['*']
# optional, no domains allowed by default # optional, no domains allowed by default
#allowed_domains => ['http://1.example.com', 'http://2.example.com'], #allowed_domains => ['http://1.example.com', 'http://2.example.com'],
# if set, the shortened URLs will use this domain # If set, the shortened URLs will use this domain
# optional # optional
#fixed_domain => 'example.org', #fixed_domain => 'example.org',
# Define a path to the upload directory, where the uploaded files will be stored
# You can define it relative to lufi directory or set an absolute path
# Remember that it has to be in a directory writable by Lufi user
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# Allow to add a password on files, asked before allowing to download files
# optional, default is 0
allow_pwd_on_files => 1,
# Force all files to be in "Burn after reading mode"
# optional, default is 0
#force_burn_after_reading => 0,
# If set, the files' URLs will always use this domain
# optional, no default
#fixed_domain => 'example.org',
# Abuse reasons
# Set an integer in the abuse field of a file in the database and it will not be downloadable anymore
# The reason will be displayed to the downloader, according to the reasons you will configure here.
# optional, no default
abuse => {
0 => 'Copyright infringment',
1 => 'Illegal content',
},
###############
# Mail settings
###############
# Mail configuration # Mail configuration
# See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES # See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES
# Optional, default to sendmail method with no arguments # optional, default to sendmail method with no arguments
#mail => { #mail => {
# # Valid values are 'sendmail' and 'smtp' # # Valid values are 'sendmail' and 'smtp'
# how => 'smtp', # how => 'smtp',
@ -110,23 +143,27 @@
#}, #},
# Email sender address # Email sender address
# Optional, default to no-reply@lufi.io # optional, default to no-reply@lufi.io
#mail_sender => 'no-reply@lufi.io', #mail_sender => 'no-reply@lufi.io',
# choose what database you want to use #############
# valid choices are sqlite, postgresql and mysql (all lowercase) # DB settings
#############
# Choose what database you want to use
# Valid choices are sqlite, postgresql and mysql (all lowercase)
# optional, default is sqlite # optional, default is sqlite
dbtype => 'postgresql', dbtype => 'postgresql',
# SQLite ONLY - only used if dbtype is set to sqlite # SQLite ONLY - only used if dbtype is set to sqlite
# define a path to the SQLite database # Define a path to the SQLite database
# you can define it relative to lufi directory or set an absolute path # You can define it relative to lufi directory or set an absolute path
# remember that it has to be in a directory writable by Lufi user # Remember that it has to be in a directory writable by Lufi user
# optional, default is lufi.db # optional, default is lufi.db
#db_path => 'lufi.db', #db_path => 'lufi.db',
# PostgreSQL ONLY - only used if dbtype is set to postgresql # PostgreSQL ONLY - only used if dbtype is set to postgresql
# these are the credentials to access the PostgreSQL database # These are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype # mandatory if you choosed postgresql as dbtype
pgdb => { pgdb => {
database => 'lufi_db', database => 'lufi_db',
@ -140,7 +177,7 @@
}, },
# MySQL ONLY - only used if dbtype is set to mysql # MySQL ONLY - only used if dbtype is set to mysql
# these are the credentials to access the MySQL database # These are the credentials to access the MySQL database
# mandatory if you choosed mysql as dbtype # mandatory if you choosed mysql as dbtype
#mysqldb => { #mysqldb => {
# database => 'lufi', # database => 'lufi',
@ -149,59 +186,55 @@
# #port => 3306, # #port => 3306,
# user => 'DBUSER', # user => 'DBUSER',
# pwd => 'DBPASSWORD', # pwd => 'DBPASSWORD',
# # https://metacpan.org/pod/Mojo::mysql#max_connections
# # optional, default is 5 (set to 0 to disable persistent connections) # # optional, default is 5 (set to 0 to disable persistent connections)
# #max_connections => 5, # #max_connections => 5,
#}, #},
# define a path to the upload directory, where the uploaded files will be stored #############################################
# you can define it relative to lufi directory or set an absolute path # LDAP settings (authentication and features)
# remember that it has to be in a directory writable by Lufi user #############################################
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# set `ldap` if you want that only authenticated users can upload files # Set `ldap` if you want that only authenticated users can upload files
# please note that everybody can still download files # Please note that everybody can still download files
# optional, no default # optional, no default
#ldap => { uri => 'ldap://rroemhild-test-openldap', user_tree => 'ou=people,dc=planetexpress,dc=com', bind_dn => 'cn=admin,dc=planetexpress,dc=com', bind_pwd => 'GoodNewsEveryone', user_attr => 'uid', user_filter => '' }, #ldap => { uri => 'ldap://rroemhild-test-openldap', user_tree => 'ou=people,dc=planetexpress,dc=com', bind_dn => 'cn=admin,dc=planetexpress,dc=com', bind_pwd => 'GoodNewsEveryone', user_attr => 'uid', user_filter => '' },
# set `htpasswd` if you want to use an htpasswd file instead of ldap # If you've set ldap above, the session will last `session_duration` seconds before
# see 'man htpasswd' to know how to create such file
#htpasswd => 't/lstu.passwd',
# if you've set ldap above, the session will last `session_duration` seconds before
# the user needs to reauthenticate # the user needs to reauthenticate
# optional, default is 3600 # optional, default is 3600
#session_duration => 3600, #session_duration => 3600,
# allow to add a password on files, asked before allowing to download files # If you use `ldap` for authentication, you can map some attributes from LDAP to be able to access them in Lufi
# optional, default is 0 # Those attributes will be accessible with:
allow_pwd_on_files => 1, # $c->current_user->{lufi_attribute_name} in Lufi backend files (all that is in `lib` directory)
# <%= $self->current_user->{lufi_attribute_name} %> in templates files (in `themes` directory)
#
# Define the attributes like this: `lufi_attribute_name => 'LDAP_attribute_name'`
# Note that you cant use `username` as a Lufi attribute name: this name is reserved and will contain the login of the user
#ldap_map_attr => {
# displayname => 'cn',
# mail => 'mail'
#},
# force all files to be in "Burn after reading mode" #########################
# optional, default is 0 # Htpasswd authentication
#force_burn_after_reading => 0, #########################
# if set, the files' URLs will always use this domain # Set `htpasswd` if you want to use an htpasswd file instead of ldap
# optional, no default # See 'man htpasswd' to know how to create such file
#fixed_domain => 'example.org', #htpasswd => 'lufi.passwd',
# abuse reasons #######################
# set an integer in the abuse field of a file in the database and it will not be downloadable anymore # HTTP Headers settings
# the reason will be displayed to the downloader, according to the reasons you will configure here. #######################
# optional, no default
abuse => {
0 => 'Copyright infringment',
1 => 'Illegal content',
},
# Content-Security-Policy header that will be sent by Lufi # Content-Security-Policy header that will be sent by Lufi
# Set to '' to disable CSP header # Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP. # 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. # 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'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" # optional, default is "base-uri 'self'; connect-src 'self' ws://YOUR_HOST; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# the default value is good for `default` and `milligram` themes #csp => "",
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# X-Frame-Options header that will be sent by Lufi # X-Frame-Options header that will be sent by Lufi
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
@ -228,24 +261,24 @@
# Lufi cron jobs settings # Lufi cron jobs settings
######################### #########################
# number of days senders' IP addresses are kept in database # Number of days senders' IP addresses are kept in database
# after that delay, they will be deleted from database (used with script/lufi cron cleanbdd) # After that delay, they will be deleted from database (used with script/lufi cron cleanbdd)
# optional, default is 365 # optional, default is 365
#keep_ip_during => 365, #keep_ip_during => 365,
# max size of the files directory, in octets # Max size of the files directory, in octets
# used by script/lufi cron watch to trigger an action # Used by script/lufi cron watch to trigger an action
# optional, no default # optional, no default
#max_total_size => 10*1024*1024*1024, #max_total_size => 10*1024*1024*1024,
# default action when files directory is over max_total_size (used with script/lufi cron watch) # Default action when files directory is over max_total_size (used with script/lufi cron watch)
# valid values are 'warn', 'stop-upload' and 'delete' # Valid values are 'warn', 'stop-upload' and 'delete'
# please, see readme # Please, see README.md
# optional, default is 'warn' # optional, default is 'warn'
#policy_when_full => 'warn', #policy_when_full => 'warn',
# images which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task # Files which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task
# if delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted # If delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted
# optional, no default # optional, no default
#delete_no_longer_viewed_files => 90, #delete_no_longer_viewed_files => 90,
}; };

View File

@ -6,6 +6,7 @@
# see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings # see http://mojolicio.us/perldoc/Mojo/Server/Hypnotoad for a full list of settings
hypnotoad => { hypnotoad => {
# array of IP addresses and ports you want to listen to # array of IP addresses and ports you want to listen to
# you can specify a unix socket too, like 'http+unix://%2Ftmp%2Flufi.sock'
listen => ['http://127.0.0.1:8081'], listen => ['http://127.0.0.1:8081'],
# if you use Lufi behind a reverse proxy like Nginx, you want to set proxy to 1 # if you use Lufi behind a reverse proxy like Nginx, you want to set proxy to 1
# if you use Lufi directly, let it commented # if you use Lufi directly, let it commented
@ -17,67 +18,67 @@
clients => 1, clients => 1,
}, },
# put a way to contact you here and uncomment it # Put a way to contact you here and uncomment it
# you can put some HTML in it # You can put some HTML in it
# MANDATORY # MANDATORY
contact => '<a href="https://contact.example.com">Contact page</a>', contact => '<a href="https://contact.example.com">Contact page</a>',
# put an URL or an email address to receive file reports and uncomment it # Put an URL or an email address to receive file reports and uncomment it
# it's for make reporting illegal files easy for users # It's for make reporting illegal files easy for users
# MANDATORY # MANDATORY
report => 'report@example.com', report => 'report@example.com',
# array of random strings used to encrypt cookies # Array of random strings used to encrypt cookies
# optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT # optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT
#secrets => ['fdjsofjoihrei'], #secrets => ['fdjsofjoihrei'],
# choose a theme. See the available themes in `themes` directory # Choose a theme. See the available themes in `themes` directory
# optional, default is 'default' # Optional, default is 'default'
#theme => 'default', #theme => 'default',
# length of the random URL # Length of the random URL
# optional, default is 8 # optional, default is 8
#length => 8, #length => 8,
# how many URLs will be provisioned in a batch ? # How many URLs will be provisioned in a batch ?
# optional, default is 5 # optional, default is 5
#provis_step => 5, #provis_step => 5,
# max number of URLs to be provisioned # Max number of URLs to be provisioned
# optional, default is 100 # optional, default is 100
#provisioning => 100, #provisioning => 100,
# length of the modify/delete token # Length of the modify/delete token
# optional, default is 32 # optional, default is 32
#token_length => 32, #token_length => 32,
# max file size, in octets # Max file size, in octets
# you can write it 100*1024*1024 # You can write it 100*1024*1024
# optional, no default # optional, no default
#max_file_size => 104857600, #max_file_size => 104857600,
# if you want to have piwik statistics, provide a piwik image tracker # If you want to have piwik statistics, provide a piwik image tracker
# only the image tracker is allowed, no javascript # Only the image tracker is allowed, no javascript
# optional, no default # optional, no default
#piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1', #piwik_img => 'https://piwik.example.org/piwik.php?idsite=1&amp;rec=1',
# broadcast_message which will displayed on the index page # Broadcast_message which will displayed on the index page
# optional, no default # optional, no default
#broadcast_message => 'Maintenance', #broadcast_message => 'Maintenance',
# default time limit for files # Default time limit for files
# valid values are 0, 1, 7, 30 and 365 # Valid values are 0, 1, 7, 30 and 365
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#default_delay => 0, #default_delay => 0,
# number of days after which the images will be deleted, even if they were uploaded with "no delay" (or value superior to max_delay) # 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 # A warning message will be displayed on homepage
# optional, default is 0 (no limit) # optional, default is 0 (no limit)
#max_delay => 0, #max_delay => 0,
# size thresholds: if you want to define max delays for different sizes of file # Size thresholds: if you want to define max delays for different sizes of file
# the keys are size in Bytes, you can't have 10*1000*10000 as key # The keys are size in Bytes, you can't have 10*1000*10000 as key
# if a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above) # If a file is smaller than the smallest configured size, it will have a expiration delay of max_delay (see above)
# optional, default is using max_delay (see above) for all sizes # optional, default is using max_delay (see above) for all sizes
#delay_for_size => { #delay_for_size => {
# 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above) # 10000000 => 90, # between 10MB and 50MB => max is 90 days, less than 10MB => max is max_delay (see above)
@ -91,18 +92,54 @@
# optional, defaut is / # optional, defaut is /
#prefix => '/', #prefix => '/',
# array of authorized domains for API calls. # Array of authorized domains for API calls.
# if you want to authorize everyone to use the API: ['*'] # If you want to authorize everyone to use the API: ['*']
# optional, no domains allowed by default # optional, no domains allowed by default
#allowed_domains => ['http://1.example.com', 'http://2.example.com'], #allowed_domains => ['http://1.example.com', 'http://2.example.com'],
# if set, the shortened URLs will use this domain # If set, the shortened URLs will use this domain
# optional # optional
#fixed_domain => 'example.org', #fixed_domain => 'example.org',
# Define a path to the upload directory, where the uploaded files will be stored
# You can define it relative to lufi directory or set an absolute path
# Remember that it has to be in a directory writable by Lufi user
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# Allow to add a password on files, asked before allowing to download files
# optional, default is 0
allow_pwd_on_files => 1,
# Force all files to be in "Burn after reading mode"
# optional, default is 0
#force_burn_after_reading => 0,
# If set, the files' URLs will always use this domain
# optional, no default
#fixed_domain => 'example.org',
# Abuse reasons
# Set an integer in the abuse field of a file in the database and it will not be downloadable anymore
# The reason will be displayed to the downloader, according to the reasons you will configure here.
# optional, no default
#abuse => {
# 0 => 'Copyright infringment',
# 1 => 'Illegal content',
#},
abuse => {
0 => 'Copyright infringment',
1 => 'Illegal content',
},
###############
# Mail settings
###############
# Mail configuration # Mail configuration
# See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES # See https://metacpan.org/pod/Mojolicious::Plugin::Mail#EXAMPLES
# Optional, default to sendmail method with no arguments # optional, default to sendmail method with no arguments
#mail => { #mail => {
# # Valid values are 'sendmail' and 'smtp' # # Valid values are 'sendmail' and 'smtp'
# how => 'smtp', # how => 'smtp',
@ -110,23 +147,27 @@
#}, #},
# Email sender address # Email sender address
# Optional, default to no-reply@lufi.io # optional, default to no-reply@lufi.io
#mail_sender => 'no-reply@lufi.io', #mail_sender => 'no-reply@lufi.io',
# choose what database you want to use #############
# valid choices are sqlite, postgresql and mysql (all lowercase) # DB settings
#############
# Choose what database you want to use
# Valid choices are sqlite, postgresql and mysql (all lowercase)
# optional, default is sqlite # optional, default is sqlite
#dbtype => 'sqlite', #dbtype => 'sqlite',
# SQLite ONLY - only used if dbtype is set to sqlite # SQLite ONLY - only used if dbtype is set to sqlite
# define a path to the SQLite database # Define a path to the SQLite database
# you can define it relative to lufi directory or set an absolute path # You can define it relative to lufi directory or set an absolute path
# remember that it has to be in a directory writable by Lufi user # Remember that it has to be in a directory writable by Lufi user
# optional, default is lufi.db # optional, default is lufi.db
db_path => 'sqlite.db', db_path => 'sqlite.db',
# PostgreSQL ONLY - only used if dbtype is set to postgresql # PostgreSQL ONLY - only used if dbtype is set to postgresql
# these are the credentials to access the PostgreSQL database # These are the credentials to access the PostgreSQL database
# mandatory if you choosed postgresql as dbtype # mandatory if you choosed postgresql as dbtype
#pgdb => { #pgdb => {
# database => 'lufi', # database => 'lufi',
@ -141,7 +182,7 @@
#}, #},
# MySQL ONLY - only used if dbtype is set to mysql # MySQL ONLY - only used if dbtype is set to mysql
# these are the credentials to access the MySQL database # These are the credentials to access the MySQL database
# mandatory if you choosed mysql as dbtype # mandatory if you choosed mysql as dbtype
#mysqldb => { #mysqldb => {
# database => 'lufi', # database => 'lufi',
@ -155,55 +196,50 @@
# #max_connections => 5, # #max_connections => 5,
#}, #},
# define a path to the upload directory, where the uploaded files will be stored #############################################
# you can define it relative to lufi directory or set an absolute path # LDAP settings (authentication and features)
# remember that it has to be in a directory writable by Lufi user #############################################
# DO NOT CHANGE THIS IF FILES HAVE BEEN ALREADY UPLOADED: THEY WILL NOT BE DOWNLOADABLE ANYMORE
# optional, default is 'files'
#upload_dir => 'files',
# set `ldap` if you want that only authenticated users can upload files # Set `ldap` if you want that only authenticated users can upload files
# please note that everybody can still download files # Please note that everybody can still download files
# optional, no default # optional, no default
#ldap => { uri => 'ldap://rroemhild-test-openldap', user_tree => 'ou=people,dc=planetexpress,dc=com', bind_dn => 'cn=admin,dc=planetexpress,dc=com', bind_pwd => 'GoodNewsEveryone', user_attr => 'uid', user_filter => '' }, #ldap => { uri => 'ldap://rroemhild-test-openldap', user_tree => 'ou=people,dc=planetexpress,dc=com', bind_dn => 'cn=admin,dc=planetexpress,dc=com', bind_pwd => 'GoodNewsEveryone', user_attr => 'uid', user_filter => '' },
# set `htpasswd` if you want to use an htpasswd file instead of ldap # If you've set ldap above, the session will last `session_duration` seconds before
# see 'man htpasswd' to know how to create such file
#htpasswd => 't/lstu.passwd',
# if you've set ldap above, the session will last `session_duration` seconds before
# the user needs to reauthenticate # the user needs to reauthenticate
# optional, default is 3600 # optional, default is 3600
#session_duration => 3600, #session_duration => 3600,
# allow to add a password on files, asked before allowing to download files # If you use `ldap` for authentication, you can map some attributes from LDAP to be able to access them in Lufi
# optional, default is 0 # Those attributes will be accessible with:
allow_pwd_on_files => 1, # $c->current_user->{lufi_attribute_name} in Lufi backend files (all that is in `lib` directory)
# <%= $self->current_user->{lufi_attribute_name} %> in templates files (in `themes` directory)
#
# Define the attributes like this: `lufi_attribute_name => 'LDAP_attribute_name'`
# Note that you cant use `username` as a Lufi attribute name: this name is reserved and will contain the login of the user
#ldap_map_attr => {
# displayname => 'cn',
# mail => 'mail'
#},
# force all files to be in "Burn after reading mode" #########################
# optional, default is 0 # Htpasswd authentication
#force_burn_after_reading => 0, #########################
# if set, the files' URLs will always use this domain # Set `htpasswd` if you want to use an htpasswd file instead of ldap
# optional, no default # See 'man htpasswd' to know how to create such file
#fixed_domain => 'example.org', #htpasswd => 't/lstu.passwd',
# abuse reasons #######################
# set an integer in the abuse field of a file in the database and it will not be downloadable anymore # HTTP Headers settings
# the reason will be displayed to the downloader, according to the reasons you will configure here. #######################
# optional, no default
abuse => {
0 => 'Copyright infringment',
1 => 'Illegal content',
},
# Content-Security-Policy header that will be sent by Lufi # Content-Security-Policy header that will be sent by Lufi
# Set to '' to disable CSP header # Set to '' to disable CSP header
# https://content-security-policy.com/ provides a good documentation about CSP. # 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. # 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'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'" # optional, default is "base-uri 'self'; connect-src 'self' ws://YOUR_HOST; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# the default value is good for `default` and `milligram` themes #csp => "",
#csp => "base-uri 'self'; connect-src 'self'; default-src 'none'; font-src 'self'; form-action 'self'; frame-ancestors 'none'; img-src 'self' blob:; media-src blob:; script-src 'self' 'unsafe-inline' 'unsafe-eval'; style-src 'self' 'unsafe-inline'"
# X-Frame-Options header that will be sent by Lufi # X-Frame-Options header that will be sent by Lufi
# Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/' # Valid values are: 'DENY', 'SAMEORIGIN', 'ALLOW-FROM https://example.com/'
@ -230,24 +266,24 @@
# Lufi cron jobs settings # Lufi cron jobs settings
######################### #########################
# number of days senders' IP addresses are kept in database # Number of days senders' IP addresses are kept in database
# after that delay, they will be deleted from database (used with script/lufi cron cleanbdd) # After that delay, they will be deleted from database (used with script/lufi cron cleanbdd)
# optional, default is 365 # optional, default is 365
#keep_ip_during => 365, #keep_ip_during => 365,
# max size of the files directory, in octets # Max size of the files directory, in octets
# used by script/lufi cron watch to trigger an action # Used by script/lufi cron watch to trigger an action
# optional, no default # optional, no default
#max_total_size => 10*1024*1024*1024, #max_total_size => 10*1024*1024*1024,
# default action when files directory is over max_total_size (used with script/lufi cron watch) # Default action when files directory is over max_total_size (used with script/lufi cron watch)
# valid values are 'warn', 'stop-upload' and 'delete' # Valid values are 'warn', 'stop-upload' and 'delete'
# please, see readme # Please, see README.md
# optional, default is 'warn' # optional, default is 'warn'
#policy_when_full => 'warn', #policy_when_full => 'warn',
# images which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task # Files which are not viewed since delete_no_longer_viewed_files days will be deleted by the cron cleanfiles task
# if delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted # If delete_no_longer_viewed_files is not set, the no longer viewed files will NOT be deleted
# optional, no default # optional, no default
#delete_no_longer_viewed_files => 90, #delete_no_longer_viewed_files => 90,
}; };

View File

@ -22,6 +22,7 @@ my $msg = to_json {
"delay" => "0", "delay" => "0",
"del_at_first_view" => 1, "del_at_first_view" => 1,
"id" => undef, "id" => undef,
"zipped" => 0,
"i" => 0 "i" => 0
}; };
my $encrypted = '"{\\"iv\\":\\"2RGAviAeYybBqcLCmnqlgA==\\",\\"v\\":1,\\"iter\\":10000,\\"ks\\":128,\\"ts\\":64,\\"mode\\":\\"ccm\\",\\"adata\\":\\"\\",\\"cipher\\":\\"aes\\",\\"salt\\":\\"1dvKtbZ8hxA=\\",\\"ct\\":\\"w9wDZCwNSyH/yL7q1GW5fPSdi+w=\\"}"'; my $encrypted = '"{\\"iv\\":\\"2RGAviAeYybBqcLCmnqlgA==\\",\\"v\\":1,\\"iter\\":10000,\\"ks\\":128,\\"ts\\":64,\\"mode\\":\\"ccm\\",\\"adata\\":\\"\\",\\"cipher\\":\\"aes\\",\\"salt\\":\\"1dvKtbZ8hxA=\\",\\"ct\\":\\"w9wDZCwNSyH/yL7q1GW5fPSdi+w=\\"}"';
@ -33,7 +34,7 @@ $encrypted_rgx =~ s@(\{|\})@\\$1@g;
BEGIN { BEGIN {
use lib 'lib'; use lib 'lib';
$m = Mojolicious->new; $m = Mojolicious->new;
$cfile = Mojo::File->new($Bin, '..', 'lutim.conf'); $cfile = Mojo::File->new($Bin, '..', 'lufi.conf');
if (defined $ENV{MOJO_CONFIG}) { if (defined $ENV{MOJO_CONFIG}) {
$cfile = Mojo::File->new($ENV{MOJO_CONFIG}); $cfile = Mojo::File->new($ENV{MOJO_CONFIG});
unless (-e $cfile->to_abs) { unless (-e $cfile->to_abs) {

View File

@ -1,4 +1,6 @@
# ButterflyOfFire <butterflyoffire@protonmail.com>, 2018. #zanata # ButterflyOfFire <butterflyoffire@protonmail.com>, 2018. #zanata
# ButterflyOfFire <butterflyoffire@protonmail.com>, 2019. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -6,8 +8,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-31 09:02+0000\n" "PO-Revision-Date: 2019-08-04 05:33+0000\n"
"Last-Translator: ButterflyOfFire <butterflyoffire@protonmail.com>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Language: ar\n" "Language: ar\n"
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "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"
@ -16,11 +18,35 @@ msgstr ""
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 أيام" msgstr "%1 أيام"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr "أرسل إليك %1 ملفات"
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr "لقد استخدم %1 دعوتك ليرسل لك ملفات:"
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr "%A %d %B %Y على %T"
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "(الحجم الأقصى: XXX)" msgstr "(الحجم الأقصى: XXX)"
@ -28,7 +54,7 @@ msgstr "(الحجم الأقصى: XXX)"
msgid "1 year" msgid "1 year"
msgstr "سنة واحدة" msgstr "سنة واحدة"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 ساعة" msgstr "24 ساعة"
@ -36,23 +62,15 @@ msgstr "24 ساعة"
msgid ":" msgid ":"
msgstr ":" msgstr ":"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "إلغاء" msgstr "إلغاء"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "عن البرنامج" msgstr "عن البرنامج"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "إضافة كلمة سرية إلى الملف" msgstr "إضافة كلمة سرية إلى الملف"
@ -62,7 +80,17 @@ msgid ""
"prohibited." "prohibited."
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr "متأكد أنك تريد حذف كافة الدعوات المختارة؟"
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -75,7 +103,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "العودة إلى الصفحة الرئيسة" msgstr "العودة إلى الصفحة الرئيسة"
@ -83,7 +111,7 @@ msgstr "العودة إلى الصفحة الرئيسة"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "رمز CSRF خاطئ!" msgstr "رمز CSRF خاطئ!"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "رمز CSRF خاطئ." msgstr "رمز CSRF خاطئ."
@ -91,11 +119,15 @@ msgstr "رمز CSRF خاطئ."
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "اضغط لتحديث الصفحة و إعادة التنزيل." msgstr "اضغط لتحديث الصفحة و إعادة التنزيل."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr "اضغط على الربط التالي قصد تحميل ملفات على لوفي :"
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "اضغط لفتح متصفح الملفات" msgstr "اضغط لفتح متصفح الملفات"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "إغلاق" msgstr "إغلاق"
@ -103,31 +135,47 @@ msgstr "إغلاق"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "عناوين البريد الإلكترونية مُقسّمة بفاصلة" msgstr "عناوين البريد الإلكترونية مُقسّمة بفاصلة"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr "جارٍ ضغط ملف zip..."
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "نسخ كافة الروابط إلى الحافظة" msgstr "نسخ كافة الروابط إلى الحافظة"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "انسخ إلى الحافظة" msgstr "انسخ إلى الحافظة"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "لا يمكن حذف الملف. إنك لم تقم بتسجيل الدخول." msgstr "لا يمكن حذف الملف. إنك لم تقم بتسجيل الدخول."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "" msgstr "لا يمكن العثور على الملفات. متأكد مٍن الرابط؟"
#: themes/default/templates/files.html.ep:28 #: themes/default/templates/files.html.ep:28
msgid "Counter" msgid "Counter"
msgstr "العداد" msgstr "العداد"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr "أنشئ في"
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr "حذف"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "هل تريد أن يُحذَف الملف عند أول تنزيل؟" msgstr "هل تريد أن يُحذَف الملف عند أول تنزيل؟"
@ -135,7 +183,7 @@ msgstr "هل تريد أن يُحذَف الملف عند أول تنزيل؟"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "حذف الملفات التي تم اختيارها" msgstr "حذف الملفات التي تم اختيارها"
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "رابط الحذف" msgstr "رابط الحذف"
@ -145,7 +193,7 @@ msgid ""
"the download ends after the expiration, he will be able to get the file." "the download ends after the expiration, he will be able to get the file."
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "تنزيل" msgstr "تنزيل"
@ -153,7 +201,7 @@ msgstr "تنزيل"
msgid "Download aborted." msgid "Download aborted."
msgstr "لقد ألغِيَ التنزيل." msgstr "لقد ألغِيَ التنزيل."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "رابط التنزيل" msgstr "رابط التنزيل"
@ -166,10 +214,14 @@ msgid ""
"delete the file whenever you want." "delete the file whenever you want."
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "قم بوضع الملفات هنا" msgstr "قم بوضع الملفات هنا"
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr "عنوان البريد الإلكتروني لضيفك"
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "مضمون الرسالة الإلكترونية" msgstr "مضمون الرسالة الإلكترونية"
@ -182,35 +234,39 @@ msgstr "موضوع الرسالة الإلكترونية"
msgid "Emails" msgid "Emails"
msgstr "عناوين البريد الإلكترونية" msgstr "عناوين البريد الإلكترونية"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "تعمية الجزء XX1 مِن XX2" msgstr "تعمية الجزء XX1 مِن XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "خطأ: لقد كان الملف موجودا بالفعل و لكن تم حذفه." msgstr "خطأ: لقد كان الملف موجودا بالفعل و لكن تم حذفه."
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "خطأ: لم يتم إرسال الملف كاملا." msgstr "خطأ: لم يتم إرسال الملف كاملا."
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "خطأ: غير قادر على العثور على الملف. هل أنت متأكد من العنوان؟" msgstr "خطأ: غير قادر على العثور على الملف. هل أنت متأكد من العنوان؟"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "تاريخ نهاية الصلاحية:" msgstr "تاريخ نهاية الصلاحية:"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr "تنتهي صلاحيتها في"
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "تنتهي صلاحيته في" msgstr "تنتهي صلاحيته في"
#: themes/default/templates/files.html.ep:12 #: themes/default/templates/files.html.ep:12
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "تصدير بيانات مساحة التخزين المحلية" msgstr ""
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "تم حذف الملف" msgstr "تم حذف الملف"
@ -218,23 +274,45 @@ msgstr "تم حذف الملف"
msgid "File name" msgid "File name"
msgstr "اسم الملف" msgstr "اسم الملف"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr "الملفات"
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "تم حذف الملفات عند أول تنزيل" msgstr "تم حذف الملفات عند أول تنزيل"
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr "تم إرسال الملف في"
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr ""
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "تحصّل على الملف" msgstr "تحصّل على الملف"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
"com/ldidry/lufi\" class=\"classic\">Github mirror</a>" "com/ldidry/lufi\" class=\"classic\">Github mirror</a>"
msgstr "" msgstr ""
"تحصّل على الشيفرة المصدرية من <a href=\"https://framagit.org/luc/lufi\" "
"class=\"classic\">المستودع الرسمي</a> أو على <a href=\"https://github.com/" #: themes/default/templates/invitations/my_invitations.html.ep:24
"ldidry/lufi\" class=\"classic\">المستودع المرآة على غيت هب</a>" msgid "Guest mail"
msgstr "البريد الإلكتروني للضيف"
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr "سلام %1,"
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr "سلام،"
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
@ -244,11 +322,15 @@ msgstr "السلام،\\n\\nها هي بعض الملفات التي أحببت
msgid "Here's some files" msgid "Here's some files"
msgstr "ها هي بعض الملفات" msgstr "ها هي بعض الملفات"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr "اخف الدعوات المخفية"
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "اضغط على Enter، ثم Ctrl+C لنسخ جميع روابط التحميل" msgstr "اضغط على Enter، ثم Ctrl+C لنسخ جميع روابط التحميل"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "اضغط على Enter، ثم Ctrl+C لنسخ رابط التحميل" msgstr "اضغط على Enter، ثم Ctrl+C لنسخ رابط التحميل"
@ -256,7 +338,11 @@ msgstr "اضغط على Enter، ثم Ctrl+C لنسخ رابط التحميل"
msgid "How does it work?" msgid "How does it work?"
msgstr "كيف يعمل؟" msgstr "كيف يعمل؟"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "كيف يمكنني تثبيت البرنامج على خادومي؟" msgstr "كيف يمكنني تثبيت البرنامج على خادومي؟"
@ -278,9 +364,9 @@ msgstr ""
#: themes/default/templates/files.html.ep:14 #: themes/default/templates/files.html.ep:14
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "استيراد بيانات مساحة التخزين المحلية" msgstr ""
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "هام: مزيد من المعلومات عن التأخير" msgstr "هام: مزيد من المعلومات عن التأخير"
@ -288,6 +374,24 @@ msgstr "هام: مزيد من المعلومات عن التأخير"
msgid "Information about delays" msgid "Information about delays"
msgstr "معلومات حول التأخير" msgstr "معلومات حول التأخير"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr ""
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr ""
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr "أدع ضيفا"
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -298,7 +402,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "الجافا سكريبت غير مفعل. ليس بإمكانك استخدام لوفي Lufi." msgstr "الجافا سكريبت غير مفعل. ليس بإمكانك استخدام لوفي Lufi."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "اللغة" msgstr "اللغة"
@ -306,7 +410,7 @@ msgstr "اللغة"
msgid "Login" msgid "Login"
msgstr "تسجيل الدخول" msgstr "تسجيل الدخول"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "الخروج" msgstr "الخروج"
@ -319,16 +423,29 @@ msgstr ""
msgid "Mail" msgid "Mail"
msgstr "البريد" msgstr "البريد"
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "ملفاتي" msgstr "ملفاتي"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr "دعواتي"
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr "اسم الملف المضغوط zip"
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "لا توجد مساحة كافية متوفرة على السيرفر لاستضافة الملف (الحجم: %1)." msgstr "لا توجد مساحة كافية متوفرة على السيرفر لاستضافة الملف (الحجم: %1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "دون تاريخ لنهاية الصلاحية" msgstr "دون تاريخ لنهاية الصلاحية"
@ -339,7 +456,7 @@ msgid ""
"this list." "this list."
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "الكلمة السرية" msgstr "الكلمة السرية"
@ -354,7 +471,7 @@ msgid ""
"decrypt all parts before you can get it." "decrypt all parts before you can get it."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -368,19 +485,39 @@ msgstr "الخصوصية"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "تطهير الملفات منتهية الصلاحية من مساحة التخزين المحلية" msgstr "تطهير الملفات منتهية الصلاحية من مساحة التخزين المحلية"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr "تحياتي،"
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr "تحياتي."
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "الإبلاغ عن ملف" msgstr "الإبلاغ عن ملف"
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr "أعد إرسال رسالة الدعوة"
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr ""
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
msgstr "تعني الأعمدة باللون الأحمر انتهاء صلاحية الملفات وأنها لم تعد متوفرة." msgstr "تعني الأعمدة باللون الأحمر انتهاء صلاحية الملفات وأنها لم تعد متوفرة."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "إرسال كافة الروابط عبر البريد الإلكتروني" msgstr "إرسال كافة الروابط عبر البريد الإلكتروني"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr "ابعث الدعوة"
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "إرسال عبر هذا الخادوم" msgstr "إرسال عبر هذا الخادوم"
@ -389,7 +526,7 @@ msgstr "إرسال عبر هذا الخادوم"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "إرسال باستخدام برنامج البريد الخاص بك" msgstr "إرسال باستخدام برنامج البريد الخاص بك"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -400,18 +537,47 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "شارك ملفاتك بخصوصية تامة على %1" msgstr "شارك ملفاتك بخصوصية تامة على %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr "أظهر الدعوات المخفية"
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr "أظهر محتوى الملف المضغوط zip"
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "تسجيل الدخول" msgstr "تسجيل الدخول"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "عذراً، التحميل معطل حاليا. يرجى إعادة المحاولة لاحقًا." msgstr "عذراً، التحميل معطل حاليا. يرجى إعادة المحاولة لاحقًا."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "عذرًا ، التحميل معطل." msgstr "عذرًا ، التحميل معطل."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr "المعذرة، إنّ دعوتك منتهية الصلاحية أو تم حذفها."
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr ""
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -436,7 +602,12 @@ msgstr "لا يمكن أن يُترك مضمون الرسالة فارغًا."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "لا يمكن أن يُترك موضوع الرسالة فارغًا." msgstr "لا يمكن أن يُترك موضوع الرسالة فارغًا."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr ""
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "لقد تم حذف الملف مِن قبلُ" msgstr "لقد تم حذف الملف مِن قبلُ"
@ -453,10 +624,43 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "عناوين البريد الإلكترونية التالية غير صحيحة: %1" msgstr "عناوين البريد الإلكترونية التالية غير صحيحة: %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr ""
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr ""
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "لقد تم نسخ الرابط أو الروابط إلى الحافظة" msgstr "لقد تم نسخ الرابط أو الروابط إلى الحافظة"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "لقد تم إرسال الرسالة الإلكترونية." msgstr "لقد تم إرسال الرسالة الإلكترونية."
@ -464,23 +668,29 @@ msgstr "لقد تم إرسال الرسالة الإلكترونية."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "لقد تم تعطيل الملف من طرف المشرفين. الرجاء الإتصال بهم لمعرفة السبب." msgstr "لقد تم تعطيل الملف من طرف المشرفين. الرجاء الإتصال بهم لمعرفة السبب."
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr ""
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr ""
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -488,40 +698,52 @@ msgid ""
"following limitations:" "following limitations:"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr "الرابط"
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "تعذر نسخ كافة الروابط إلى الحافظة" msgstr "تعذر نسخ كافة الروابط إلى الحافظة"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
msgstr "" msgstr ""
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "لا يمكن جلب عداد %1. إن الرمز غير صالح." msgstr "لا يمكن جلب عداد %1. إن الرمز غير صالح."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "لا يمكن جلب عداد %1. إنك لم تقم بتسجيل الدخول." msgstr "لا يمكن جلب عداد %1. إنك لم تقم بتسجيل الدخول."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "إرسال ملفات" msgstr "إرسال ملفات"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr ""
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "أرسِل بتاريخ" msgstr "أرسِل بتاريخ"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "الملفات المُرسَلة" msgstr "الملفات المُرسَلة"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "خطأ في اتصال ويب سوكيت" msgstr "خطأ في اتصال ويب سوكيت"
@ -533,6 +755,16 @@ msgstr "ماذا نعني بـ لوفي Lufi؟"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "من قام بتطوير هذا البرنامج؟" msgstr "من قام بتطوير هذا البرنامج؟"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -543,7 +775,7 @@ msgstr ""
#: lib/Lufi/Controller/Mail.pm:42 #: lib/Lufi/Controller/Mail.pm:42
msgid "You can't add URLs that are not related to this instance." msgid "You can't add URLs that are not related to this instance."
msgstr "لا يمكنك إضافة روابط غير متعلقة بمثيل الخادوم هذا." msgstr ""
#: themes/default/templates/about.html.ep:8 #: themes/default/templates/about.html.ep:8
msgid "" msgid ""
@ -560,8 +792,6 @@ msgid ""
"You don't seem to have a key in your URL. You won't be able to decrypt the " "You don't seem to have a key in your URL. You won't be able to decrypt the "
"file. Download canceled." "file. Download canceled."
msgstr "" msgstr ""
"يبدو أنّ رابطك لا يحتوي على مفتاح. لذا لن يكون بإمكانك فك تشفير الملف. جارٍ "
"إلغاء التنزيل."
#: themes/default/templates/partial/render.js.ep:7 #: themes/default/templates/partial/render.js.ep:7
msgid "" msgid ""
@ -571,7 +801,7 @@ msgstr ""
"لقد حاولتَ ترك هذه الصفحة. سيتم إلغاء تنزيل الملف الذي أنت بصدد تنزيله. هل " "لقد حاولتَ ترك هذه الصفحة. سيتم إلغاء تنزيل الملف الذي أنت بصدد تنزيله. هل "
"أنت متأكد؟" "أنت متأكد؟"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -587,19 +817,19 @@ msgstr "لقد تم تسجيل خروجك بنجاح."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "يجب إدخال عناوين للبريد الإلكتروني." msgstr "يجب إدخال عناوين للبريد الإلكتروني."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
#, fuzzy
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "لا يحتوي متصفحك على قدر كافٍ من الإنتروبيا لإنشاء مفتاح تشفير قوي." msgstr "لا يحتوي متصفحك على قدر كافٍ من الإنتروبيا لإنشاء مفتاح تشفير قوي."
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "الملف كبير جدًا: %1 (الحد الأقصى المسموح به للحجم هو: %2)" msgstr "الملف كبير جدًا: %1 (الحد الأقصى المسموح به للحجم هو: %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "الكلمة السرية غير صالحة. يرجى تحديث الصفحة لإعادة المحاولة." msgstr "الكلمة السرية غير صالحة. يرجى تحديث الصفحة لإعادة المحاولة."
@ -617,6 +847,10 @@ msgstr ""
msgid "deadline: " msgid "deadline: "
msgstr "آخر أجل: " msgstr "آخر أجل: "
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr "منتهية صلاحيتها في XXX"
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -631,6 +865,11 @@ msgstr ""
msgid "no time limit" msgid "no time limit"
msgstr "بلا حدود" msgstr "بلا حدود"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "أو" msgstr "أو"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr ""

View File

@ -4,7 +4,8 @@
# FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR.
# xd <xdrudis@tinet.cat>, 2017. # xd <xdrudis@tinet.cat>, 2017.
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Quentí <quentinantonin@free.fr>, 2018. #zanata # Quentí, 2018. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -12,8 +13,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-28 06:24+0000\n" "PO-Revision-Date: 2019-04-19 04:55+0000\n"
"Last-Translator: Quentí <quentinantonin@free.fr>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Language-Team: català; valencià <>\n" "Language-Team: català; valencià <>\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n"
"X-Generator: Zanata 4.6.2\n" "X-Generator: Zanata 4.6.2\n"
@ -21,11 +22,35 @@ msgstr ""
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 dies" msgstr "%1 dies"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr ""
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr ""
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "(mida max: XXX)" msgstr "(mida max: XXX)"
@ -33,7 +58,7 @@ msgstr "(mida max: XXX)"
msgid "1 year" msgid "1 year"
msgstr "1 any" msgstr "1 any"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 hores" msgstr "24 hores"
@ -41,27 +66,15 @@ msgstr "24 hores"
msgid ":" msgid ":"
msgstr ":" msgstr ":"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"Un agraïment amb la foto d'un gatet a <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> o "
"a <a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"també fa goig ;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Avorta" msgstr "Avorta"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "Quant a" msgstr "Quant a"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "Afegir una contrasenya al(s) fitxer(s)" msgstr "Afegir una contrasenya al(s) fitxer(s)"
@ -71,7 +84,17 @@ msgid ""
"prohibited." "prohibited."
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -89,7 +112,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Demanem la part XX1 de %1 del fitxer" msgstr "Demanem la part XX1 de %1 del fitxer"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Retorna a la pàgina d'inici" msgstr "Retorna a la pàgina d'inici"
@ -97,7 +120,7 @@ msgstr "Retorna a la pàgina d'inici"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Mal testimoni CSRF!" msgstr "Mal testimoni CSRF!"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "Token CSRF incorrect." msgstr "Token CSRF incorrect."
@ -105,11 +128,15 @@ msgstr "Token CSRF incorrect."
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "Premeu aquí per tal de refrescar la pàgina i reiniciar la descàrrega" msgstr "Premeu aquí per tal de refrescar la pàgina i reiniciar la descàrrega"
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr ""
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Premeu per obrir la selecció de fitxer." msgstr "Premeu per obrir la selecció de fitxer."
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Tanca" msgstr "Tanca"
@ -117,23 +144,27 @@ msgstr "Tanca"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Adreces de correu electrònic separades per comes" msgstr "Adreces de correu electrònic separades per comes"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr ""
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Copia tots els enllaços al porta-retalls" msgstr "Copia tots els enllaços al porta-retalls"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copia al porta-retalls" msgstr "Copia al porta-retalls"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "No es pot esborrar el fitxer. No esteu autenticat." msgstr "No es pot esborrar el fitxer. No esteu autenticat."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "No es troba el fitxer. Esteu segur de la URL i el testimoni?" msgstr "No es troba el fitxer. Esteu segur de la URL i el testimoni?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "No trobo el fitxer. Esteu segurs de la URL?" msgstr "No trobo el fitxer. Esteu segurs de la URL?"
@ -141,7 +172,19 @@ msgstr "No trobo el fitxer. Esteu segurs de la URL?"
msgid "Counter" msgid "Counter"
msgstr "Comptador" msgstr "Comptador"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr ""
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Eliminar-lo a la primera descàrrega?" msgstr "Eliminar-lo a la primera descàrrega?"
@ -149,7 +192,7 @@ msgstr "Eliminar-lo a la primera descàrrega?"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "Suprimir els fitxers seleccionats" msgstr "Suprimir els fitxers seleccionats"
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Enllaç per a eliminació" msgstr "Enllaç per a eliminació"
@ -162,7 +205,7 @@ msgstr ""
"l'expiració i la descàrrega acaba després de l'expiració, encara podrà " "l'expiració i la descàrrega acaba després de l'expiració, encara podrà "
"obtenir el fitxer." "obtenir el fitxer."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Descàrrega" msgstr "Descàrrega"
@ -170,7 +213,7 @@ msgstr "Descàrrega"
msgid "Download aborted." msgid "Download aborted."
msgstr "Descàrrega avortada." msgstr "Descàrrega avortada."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Enllaç per a descàrrega" msgstr "Enllaç per a descàrrega"
@ -189,10 +232,14 @@ msgstr ""
"enllaç per a l'eliminació, que us permet eliminar el fitxer del servidor " "enllaç per a l'eliminació, que us permet eliminar el fitxer del servidor "
"quan vulgueu. " "quan vulgueu. "
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "Deixeu anar aquí fitxers." msgstr "Deixeu anar aquí fitxers."
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr ""
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Cos del correu electrònic" msgstr "Cos del correu electrònic"
@ -205,26 +252,30 @@ msgstr "Assumpte del correu electrònic"
msgid "Emails" msgid "Emails"
msgstr "correus electrònics" msgstr "correus electrònics"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "S'està xifrant la part XX1 de XX2" msgstr "S'està xifrant la part XX1 de XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Error: el fitxer existia però va ser eliminat." msgstr "Error: el fitxer existia però va ser eliminat."
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Error: el fitxer no s'ha enviat del tot." msgstr "Error: el fitxer no s'ha enviat del tot."
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "Error: no trobo el fitxer. Esteu segur de la URL ?" msgstr "Error: no trobo el fitxer. Esteu segur de la URL ?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Expiració:" msgstr "Expiració:"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr ""
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Expira el" msgstr "Expira el"
@ -233,7 +284,7 @@ msgstr "Expira el"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Exporta dades a l'emmagatzematge local" msgstr "Exporta dades a l'emmagatzematge local"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "Fitxer eliminat" msgstr "Fitxer eliminat"
@ -241,15 +292,27 @@ msgstr "Fitxer eliminat"
msgid "File name" msgid "File name"
msgstr "Nom de fitxer" msgstr "Nom de fitxer"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr ""
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "Fitxers suprimits a la primera descàrrega" msgstr "Fitxers suprimits a la primera descàrrega"
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr ""
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Obté el fitxer" msgstr "Obté el fitxer"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -259,6 +322,19 @@ msgstr ""
"\"classic\">repositori oficial</a> o a la seva <a href=\"https://github.com/" "\"classic\">repositori oficial</a> o a la seva <a href=\"https://github.com/"
"ldidry/lufi\" class=\"classic\">rèplica a Github</a>" "ldidry/lufi\" class=\"classic\">rèplica a Github</a>"
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr ""
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr ""
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "Hola,\\n\\nVe't aquí uns fitxers que vull compartir amb tu:" msgstr "Hola,\\n\\nVe't aquí uns fitxers que vull compartir amb tu:"
@ -267,12 +343,16 @@ msgstr "Hola,\\n\\nVe't aquí uns fitxers que vull compartir amb tu:"
msgid "Here's some files" msgid "Here's some files"
msgstr "Ve't aquí uns fitxers" msgstr "Ve't aquí uns fitxers"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr ""
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "" msgstr ""
"Prem Retorn, i després Ctrl+C per copiar tots els enllaços de descàrrega" "Prem Retorn, i després Ctrl+C per copiar tots els enllaços de descàrrega"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "Prem Retorn, i després Ctrl+C per copiar l'enllaç de descàrrega" msgstr "Prem Retorn, i després Ctrl+C per copiar l'enllaç de descàrrega"
@ -280,7 +360,11 @@ msgstr "Prem Retorn, i després Ctrl+C per copiar l'enllaç de descàrrega"
msgid "How does it work?" msgid "How does it work?"
msgstr "Com funciona?" msgstr "Com funciona?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "Com instal·lo el programari al meu servidor?" msgstr "Com instal·lo el programari al meu servidor?"
@ -305,7 +389,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Importar dades de l'emmagatzematge local" msgstr "Importar dades de l'emmagatzematge local"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Importat: més informació sobre moratòries" msgstr "Importat: més informació sobre moratòries"
@ -313,6 +397,24 @@ msgstr "Importat: més informació sobre moratòries"
msgid "Information about delays" msgid "Information about delays"
msgstr "Informació sobre moratòries" msgstr "Informació sobre moratòries"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr ""
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr ""
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr ""
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -323,7 +425,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Teniu el javascript deactivat. No podreu usar Lufi." msgstr "Teniu el javascript deactivat. No podreu usar Lufi."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "Llengua" msgstr "Llengua"
@ -331,7 +433,7 @@ msgstr "Llengua"
msgid "Login" msgid "Login"
msgstr "Entrada" msgstr "Entrada"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Sortida" msgstr "Sortida"
@ -343,16 +445,29 @@ msgstr "Lufi és programari lliure d'allotjament de fitxers."
msgid "Mail" msgid "Mail"
msgstr "Mail" msgstr "Mail"
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "Els meus fitxers" msgstr "Els meus fitxers"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr ""
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "No hi ha prou espai al servidor per a aquest fitxer (mida: %1)" msgstr "No hi ha prou espai al servidor per a aquest fitxer (mida: %1)"
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Sense moratòria d'expiració" msgstr "Sense moratòria d'expiració"
@ -366,7 +481,7 @@ msgstr ""
"desa en emmagatzematge local: si netegeu l'emmagatzematge local perdreu " "desa en emmagatzematge local: si netegeu l'emmagatzematge local perdreu "
"aquesta llista." "aquesta llista."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Contrasenya" msgstr "Contrasenya"
@ -383,7 +498,7 @@ msgstr ""
"Si us plau, espereu mentre obtenim el fitxer. Abans que el tingueu " "Si us plau, espereu mentre obtenim el fitxer. Abans que el tingueu "
"disponible primer cal descarregar i desxifrar tots els trossos." "disponible primer cal descarregar i desxifrar tots els trossos."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -397,10 +512,26 @@ msgstr "Privacitat"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Netegeu els fitxers expirats de l'emmagatzematge local." msgstr "Netegeu els fitxers expirats de l'emmagatzematge local."
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr ""
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "Senyalar un fitxer" msgstr "Senyalar un fitxer"
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr ""
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
@ -408,10 +539,14 @@ msgstr ""
"Les files en vermell indiquen que els fitxers han expirat i ja no són " "Les files en vermell indiquen que els fitxers han expirat i ja no són "
"disponibles." "disponibles."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Envia tots els enllaços per correu electrònic" msgstr "Envia tots els enllaços per correu electrònic"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr ""
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Envia amb aquest servidor" msgstr "Envia amb aquest servidor"
@ -420,7 +555,7 @@ msgstr "Envia amb aquest servidor"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Envia amb el vostre propi programa de correu" msgstr "Envia amb el vostre propi programa de correu"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -433,20 +568,49 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Compartiu fitxers amb total privacitat a %1" msgstr "Compartiu fitxers amb total privacitat a %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr ""
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Autenticació" msgstr "Autenticació"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "" msgstr ""
"Disculpeu, les pujades estan actualment desactivades. Si us plau proveu-ho " "Disculpeu, les pujades estan actualment desactivades. Si us plau proveu-ho "
"més tard." "més tard."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "Disculpeu, les pujades estan deshabilitades" msgstr "Disculpeu, les pujades estan deshabilitades"
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr ""
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr ""
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -475,7 +639,12 @@ msgstr "El cos del correu no pot estar buit."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "L'assumpte dle correu no pot estar buit." msgstr "L'assumpte dle correu no pot estar buit."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr ""
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "El fitxer ja ha estat esborrat" msgstr "El fitxer ja ha estat esborrat"
@ -493,10 +662,43 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "Les següents adreces de correu electrònic no són vàlides: %1" msgstr "Les següents adreces de correu electrònic no són vàlides: %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr ""
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr ""
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "L'enllaç/ els enllaços ja estan copiats al portaretalls" msgstr "L'enllaç/ els enllaços ja estan copiats al portaretalls"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "El correu ja està enviat." msgstr "El correu ja està enviat."
@ -504,17 +706,12 @@ msgstr "El correu ja està enviat."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"L'autor original (i per ara l'únic) és <a href=\"https://fiat-tux.fr\" class=" "L'autor original (i per ara l'únic) és <a href=\"https://fiat-tux.fr\" class="
"\"classic\">Luc Didry</a>. Si voleu fer una contribució podeu fer-ho via <a " "\"classic\">Luc Didry</a>."
"href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> o via "
"<a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</a>."
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -522,13 +719,22 @@ msgstr ""
"El servidor no ha pogut trobar el registre del fitxer per afegir-hi el tros " "El servidor no ha pogut trobar el registre del fitxer per afegir-hi el tros "
"del fitxer. Si us plau, contacteu l'administrador." "del fitxer. Si us plau, contacteu l'administrador."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
"Aquest fitxer es estat desactivat pels administrators. Contacteu-los per " "Aquest fitxer es estat desactivat pels administrators. Contacteu-los per "
"saber perque." "saber perque."
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr ""
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr ""
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -539,12 +745,20 @@ msgstr ""
"moratòria d'expiració del fitxer serà el mínim de l'escollida i aquestes " "moratòria d'expiració del fitxer serà el mínim de l'escollida i aquestes "
"limitacions:" "limitacions:"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr ""
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "No s'han pogut copiar l'enllaç o els enllaços al porta-retalls." msgstr "No s'han pogut copiar l'enllaç o els enllaços al porta-retalls."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -553,28 +767,32 @@ msgstr ""
"del teu emmagatzematge local." "del teu emmagatzematge local."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "No he pogut obtenir el comptador de %1. El testimoni no és vàlid." msgstr "No he pogut obtenir el comptador de %1. El testimoni no és vàlid."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "No he pogut obtenir el comptador de %1. No esteu autenticat." msgstr "No he pogut obtenir el comptador de %1. No esteu autenticat."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Pujar fitxers" msgstr "Pujar fitxers"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr ""
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Pujat a les" msgstr "Pujat a les"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "Fitxers pujats" msgstr "Fitxers pujats"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Error de comunicacions del websocket" msgstr "Error de comunicacions del websocket"
@ -586,6 +804,16 @@ msgstr "Què és Lufi?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "Qui va escriure aquest programa?" msgstr "Qui va escriure aquest programa?"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -625,7 +853,7 @@ msgstr ""
"Heu intentat deixar aquesta pàgina. Es canceŀlarà la descàrrega. N'esteu " "Heu intentat deixar aquesta pàgina. Es canceŀlarà la descàrrega. N'esteu "
"segur?" "segur?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -640,18 +868,19 @@ msgstr "Heu sortit correctament."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "Heu de donar l'adreça de correu electrònic." msgstr "Heu de donar l'adreça de correu electrònic."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "El fitxer és massa gran: %1 (mida màxima admesa: %2)" msgstr "El fitxer és massa gran: %1 (mida màxima admesa: %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "" msgstr ""
"La vostra contrasenya es incorrecta. Torneu cargar la pàgina per provar de " "La vostra contrasenya es incorrecta. Torneu cargar la pàgina per provar de "
@ -671,6 +900,10 @@ msgstr "entre %1 i %2, el fitxer es mantindrà per sempre al servidor."
msgid "deadline: " msgid "deadline: "
msgstr "termini:" msgstr "termini:"
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr ""
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -685,6 +918,11 @@ msgstr "a partir de %1, el fitxer es mantindrà per sempre al servidor."
msgid "no time limit" msgid "no time limit"
msgstr "no hi ha límit de temps" msgstr "no hi ha límit de temps"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "o" msgstr "o"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr ""

File diff suppressed because it is too large Load Diff

View File

@ -1,4 +1,6 @@
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Armando <armando@noplanman.ch>, 2019. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -6,7 +8,7 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-28 01:53+0000\n" "PO-Revision-Date: 2019-08-04 05:31+0000\n"
"Last-Translator: Luc Didry <luc@framasoft.org>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Language-Team: English\n" "Language-Team: English\n"
"Language: en\n" "Language: en\n"
@ -15,11 +17,35 @@ msgstr ""
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 days" msgstr "%1 days"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr "%1 invites you to send him/her files"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr "%1 invites you to send him/her files through Lufi."
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr "%1 sent you files"
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr "%1 used your invitation to send you files:"
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr "%A %d %B %Y at %T"
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "(max size: XXX)" msgstr "(max size: XXX)"
@ -27,7 +53,7 @@ msgstr "(max size: XXX)"
msgid "1 year" msgid "1 year"
msgstr "1 year" msgstr "1 year"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 hours" msgstr "24 hours"
@ -35,27 +61,15 @@ msgstr "24 hours"
msgid ":" msgid ":"
msgstr ":" msgstr ":"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Abort" msgstr "Abort"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "About" msgstr "About"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "Add a password to file(s)" msgstr "Add a password to file(s)"
@ -67,7 +81,19 @@ msgstr ""
"Adding URLs not related to this Lufi instance to the mail body or subject is " "Adding URLs not related to this Lufi instance to the mail body or subject is "
"prohibited." "prohibited."
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr "Are you sure you want to delete the selected invitations?"
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -84,7 +110,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Asking for file part XX1 of %1" msgstr "Asking for file part XX1 of %1"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Back to homepage" msgstr "Back to homepage"
@ -92,7 +118,7 @@ msgstr "Back to homepage"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Bad CSRF token!" msgstr "Bad CSRF token!"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "Bad CSRF token." msgstr "Bad CSRF token."
@ -100,11 +126,15 @@ msgstr "Bad CSRF token."
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "Click here to refresh the page and restart the download." msgstr "Click here to refresh the page and restart the download."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr "Click on the following URL to upload files on Lufi:"
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Click to open the file browser" msgstr "Click to open the file browser"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Close" msgstr "Close"
@ -112,23 +142,27 @@ msgstr "Close"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Comma-separated email addresses" msgstr "Comma-separated email addresses"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr "Compressing zip file…"
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Copy all links to clipboard" msgstr "Copy all links to clipboard"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copy to clipboard" msgstr "Copy to clipboard"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "Could not delete the file. You are not authenticated." msgstr "Could not delete the file. You are not authenticated."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "Could not find the file. Are you sure of the URL and the token?" msgstr "Could not find the file. Are you sure of the URL and the token?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "Could not find the file. Are you sure of the URL?" msgstr "Could not find the file. Are you sure of the URL?"
@ -136,7 +170,19 @@ msgstr "Could not find the file. Are you sure of the URL?"
msgid "Counter" msgid "Counter"
msgstr "Counter" msgstr "Counter"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr "Create a zip archive with the files before uploading?"
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr "Created at"
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr "Delete"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Delete at first download?" msgstr "Delete at first download?"
@ -144,7 +190,7 @@ msgstr "Delete at first download?"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "Delete selected files" msgstr "Delete selected files"
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Deletion link" msgstr "Deletion link"
@ -156,7 +202,7 @@ msgstr ""
"Don't worry: if a user begins to download the file before the expiration and " "Don't worry: if a user begins to download the file before the expiration and "
"the download ends after the expiration, he will be able to get the file." "the download ends after the expiration, he will be able to get the file."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Download" msgstr "Download"
@ -164,7 +210,7 @@ msgstr "Download"
msgid "Download aborted." msgid "Download aborted."
msgstr "Download aborted." msgstr "Download aborted."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Download link" msgstr "Download link"
@ -182,10 +228,14 @@ msgstr ""
"people you want to share the file with and a deletion link, allowing you to " "people you want to share the file with and a deletion link, allowing you to "
"delete the file whenever you want." "delete the file whenever you want."
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "Drop files here" msgstr "Drop files here"
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr "Email address of your guest"
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Email body" msgstr "Email body"
@ -198,26 +248,30 @@ msgstr "Email subject"
msgid "Emails" msgid "Emails"
msgstr "Emails" msgstr "Emails"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "Encrypting part XX1 of XX2" msgstr "Encrypting part XX1 of XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Error: the file existed but was deleted." msgstr "Error: the file existed but was deleted."
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Error: the file has not been sent entirely." msgstr "Error: the file has not been sent entirely."
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "Error: unable to find the file. Are you sure of your URL?" msgstr "Error: unable to find the file. Are you sure of your URL?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Expiration:" msgstr "Expiration:"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr "Expire at"
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Expires at" msgstr "Expires at"
@ -226,7 +280,7 @@ msgstr "Expires at"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Export localStorage data" msgstr "Export localStorage data"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "File deleted" msgstr "File deleted"
@ -234,15 +288,27 @@ msgstr "File deleted"
msgid "File name" msgid "File name"
msgstr "File name" msgstr "File name"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr "Files"
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "Files deleted at first download" msgstr "Files deleted at first download"
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr "Files sent at"
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr "Files sent in invitation XX1 by XX2"
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Get the file" msgstr "Get the file"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -252,6 +318,19 @@ msgstr ""
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
"com/ldidry/lufi\" class=\"classic\">Github mirror</a>" "com/ldidry/lufi\" class=\"classic\">Github mirror</a>"
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr "Guest mail"
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr "Hello %1,"
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr "Hello,"
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "Hello,\\n\\nHere's some files I want to share with you:\\n" msgstr "Hello,\\n\\nHere's some files I want to share with you:\\n"
@ -260,11 +339,15 @@ msgstr "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgid "Here's some files" msgid "Here's some files"
msgstr "Here's some files" msgstr "Here's some files"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr "Hide hidden invitations"
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "Hit Enter, then Ctrl+C to copy all the download links" msgstr "Hit Enter, then Ctrl+C to copy all the download links"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "Hit Enter, then Ctrl+C to copy the download link" msgstr "Hit Enter, then Ctrl+C to copy the download link"
@ -272,7 +355,11 @@ msgstr "Hit Enter, then Ctrl+C to copy the download link"
msgid "How does it work?" msgid "How does it work?"
msgstr "How does it work?" msgstr "How does it work?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr "How many days would you like the invitation to be valid?"
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "How to install the software on my server?" msgstr "How to install the software on my server?"
@ -296,7 +383,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Import localStorage data" msgstr "Import localStorage data"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Important: more information on delays" msgstr "Important: more information on delays"
@ -304,6 +391,24 @@ msgstr "Important: more information on delays"
msgid "Information about delays" msgid "Information about delays"
msgstr "Information about delays" msgstr "Information about delays"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr "Invert selection"
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr "Invitation resent to %1.<br> URL: %2"
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr "Invitation sent to %1.<br> URL: %2"
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr "Invite a guest"
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -314,7 +419,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Javascript is disabled. You won't be able to use Lufi." msgstr "Javascript is disabled. You won't be able to use Lufi."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "Language" msgstr "Language"
@ -322,7 +427,7 @@ msgstr "Language"
msgid "Login" msgid "Login"
msgstr "Login" msgstr "Login"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Logout" msgstr "Logout"
@ -334,16 +439,30 @@ msgstr "Lufi is a free (as in free speech) file hosting software."
msgid "Mail" msgid "Mail"
msgstr "Mail" msgstr "Mail"
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "My files" msgstr "My files"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr "My invitations"
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
"NB: this list includes the list of files that have already been sent to you."
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr "Name of the zip file"
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "No enough space available on the server for this file (size: %1)." msgstr "No enough space available on the server for this file (size: %1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "No expiration delay" msgstr "No expiration delay"
@ -357,7 +476,7 @@ msgstr ""
"stored in localStorage: if you delete your localStorage data, you'll lose " "stored in localStorage: if you delete your localStorage data, you'll lose "
"this list." "this list."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
@ -374,7 +493,7 @@ msgstr ""
"Please wait while we are getting your file. We first need to download and " "Please wait while we are getting your file. We first need to download and "
"decrypt all parts before you can get it." "decrypt all parts before you can get it."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -390,20 +509,40 @@ msgstr "Privacy"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Purge expired files from localStorage" msgstr "Purge expired files from localStorage"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr "Regards,"
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr "Regards."
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "Report file" msgstr "Report file"
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr "Resend invitation mail"
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr "Rows in purple mean that the invitations have expired."
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
msgstr "" msgstr ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Send all links by email" msgstr "Send all links by email"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr "Send the invitation"
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Send with this server" msgstr "Send with this server"
@ -412,7 +551,7 @@ msgstr "Send with this server"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Send with your own mail software" msgstr "Send with your own mail software"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -425,18 +564,50 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Share your files in total privacy on %1" msgstr "Share your files in total privacy on %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr "Show hidden invitations"
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr "Show zip content"
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Signin" msgstr "Signin"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "Sorry, the uploading is currently disabled. Please try again later." msgstr "Sorry, the uploading is currently disabled. Please try again later."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "Sorry, uploading is disabled." msgstr "Sorry, uploading is disabled."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr "Sorry, your invitation has expired or has been deleted."
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr "The URLs of your files have been sent by email to %1."
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -465,7 +636,12 @@ msgstr "The email body can't be empty."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "The email subject can't be empty." msgstr "The email subject can't be empty."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr "The expiration delay (%1) is not between 1 and %2 days."
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "The file has already been deleted" msgstr "The file has already been deleted"
@ -482,10 +658,46 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "The following email addresses are not valid: %1" msgstr "The following email addresses are not valid: %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr "The guest email address (%1) is unvalid."
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr "The invitation %1 has been deleted."
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr "The invitation mail will be sent from your email address (%1)."
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "The link(s) has been copied to your clipboard" msgstr "The link(s) has been copied to your clipboard"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr "The link(s) of your file(s) will automatically be sent by mail to %1."
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "The mail has been sent." msgstr "The mail has been sent."
@ -493,18 +705,12 @@ msgstr "The mail has been sent."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -512,12 +718,21 @@ msgstr ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr "This invitation is normally hidden"
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr "This invitation is valid until %1."
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -528,12 +743,20 @@ msgstr ""
"delay of your file will be the minimum between what you choose and the " "delay of your file will be the minimum between what you choose and the "
"following limitations:" "following limitations:"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr "Toggle visibility"
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr "URL"
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "Unable to copy the link(s) to your clipboard" msgstr "Unable to copy the link(s) to your clipboard"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -542,28 +765,32 @@ msgstr ""
"from your localStorage." "from your localStorage."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "Unable to get counter for %1. The token is invalid." msgstr "Unable to get counter for %1. The token is invalid."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "Unable to get counter for %1. You are not authenticated." msgstr "Unable to get counter for %1. You are not authenticated."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Upload files" msgstr "Upload files"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr "Upload generated zip file"
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Uploaded at" msgstr "Uploaded at"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "Uploaded files" msgstr "Uploaded files"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Websocket communication error" msgstr "Websocket communication error"
@ -575,6 +802,18 @@ msgstr "What is Lufi?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "Who wrote this software?" msgstr "Who wrote this software?"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr "XXX file has been added to upload queue."
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -613,7 +852,7 @@ msgstr ""
"You have attempted to leave this page. The download will be canceled. Are " "You have attempted to leave this page. The download will be canceled. Are "
"you sure?" "you sure?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -629,20 +868,22 @@ msgstr "You have been successfully logged out."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "You must give email addresses." msgstr "You must give email addresses."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "Your file is too big: %1 (maximum size allowed: %2)" msgstr "Your file is too big: %1 (maximum size allowed: %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "Your password is not valid. Please refresh the page to retry." msgstr "Your password is not valid. Please refresh the page to retry."
@ -660,6 +901,10 @@ msgstr "between %1 and %2, the file will be kept forever."
msgid "deadline: " msgid "deadline: "
msgstr "deadline: " msgstr "deadline: "
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr "expires on XXX"
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -674,6 +919,11 @@ msgstr "for %1 and more, the file will be kept forever."
msgid "no time limit" msgid "no time limit"
msgstr "no time limit" msgstr "no time limit"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "or" msgstr "or"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr "— %1 (%2), that will expire on %3"

View File

@ -3,6 +3,7 @@
# This file is distributed under the same license as the Lufi package. # This file is distributed under the same license as the Lufi package.
# Luc Didry <luc@didry.org>, 2015. # Luc Didry <luc@didry.org>, 2015.
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -10,20 +11,44 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-28 01:59+0000\n" "PO-Revision-Date: 2019-08-04 05:33+0000\n"
"Language-Team: \n" "Language-Team: \n"
"X-Generator: Zanata 4.6.2\n" "X-Generator: Zanata 4.6.2\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: fr\n" "Language: fr\n"
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 jours" msgstr "%1 jours"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr "%1 vous invite à lui envoyer des fichiers"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr "%1 vous invite à lui envoyer des fichiers via Lufi."
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr "%1 vous a envoyé des fichiers"
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr "%1 a utilisé votre invitation pour vous envoyer des fichiers :"
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr "%A %d %B %Y à %T"
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "(taille max: XXX)" msgstr "(taille max: XXX)"
@ -31,7 +56,7 @@ msgstr "(taille max: XXX)"
msgid "1 year" msgid "1 year"
msgstr "1 an" msgstr "1 an"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 heures" msgstr "24 heures"
@ -39,27 +64,15 @@ msgstr "24 heures"
msgid ":" msgid ":"
msgstr " :" msgstr " :"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"Un merci avec une photo de chaton sur <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> ou "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"fait aussi laffaire ;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Abandonner" msgstr "Abandonner"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "À propos" msgstr "À propos"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "Ajouter un mot de passe au(x) fichier(s)" msgstr "Ajouter un mot de passe au(x) fichier(s)"
@ -71,7 +84,19 @@ msgstr ""
"Lajout dURL non liées à cette instance Lufi au corps ou au sujet du mail " "Lajout dURL non liées à cette instance Lufi au corps ou au sujet du mail "
"est interdit." "est interdit."
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr "Êtes-vous sûr·e de vouloir supprimer les invitations sélectionnées ?"
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
"Êtes-vous sûr·e de vouloir renvoyer le courriel dinvitation pour les "
"invitations sélectionnées ?"
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -89,7 +114,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Demande de récupération du fragment de fichier XX1 sur %1" msgstr "Demande de récupération du fragment de fichier XX1 sur %1"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Retour à la page daccueil" msgstr "Retour à la page daccueil"
@ -97,7 +122,7 @@ msgstr "Retour à la page daccueil"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Mauvais jeton CSRF !" msgstr "Mauvais jeton CSRF !"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "Jeton CSRF invalide." msgstr "Jeton CSRF invalide."
@ -105,11 +130,15 @@ msgstr "Jeton CSRF invalide."
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "Cliquez ici pour rafraîchir la page et redémarrer le téléchargement." msgstr "Cliquez ici pour rafraîchir la page et redémarrer le téléchargement."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr "Cliquez sur lURL suivante pour envoyer des fichiers sur Lufi :"
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Cliquez pour ouvrir le navigateur de fichiers" msgstr "Cliquez pour ouvrir le navigateur de fichiers"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Fermer" msgstr "Fermer"
@ -117,25 +146,29 @@ msgstr "Fermer"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Adresses mails séparées par des virgules" msgstr "Adresses mails séparées par des virgules"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr "Compression du fichier zip…"
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Copier tous les liens dans le presse-papier" msgstr "Copier tous les liens dans le presse-papier"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier" msgstr "Copier dans le presse-papier"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "Impossible de supprimer le fichier. Vous nêtes pas connecté·e." msgstr "Impossible de supprimer le fichier. Vous nêtes pas connecté·e."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
"Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL et le jeton " "Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL et le jeton "
"sont les bons ?" "sont les bons ?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "" msgstr ""
"Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL est la " "Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL est la "
@ -145,7 +178,19 @@ msgstr ""
msgid "Counter" msgid "Counter"
msgstr "Compteur" msgstr "Compteur"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr "Créer une archive zip avec les fichiers avant lenvoi ?"
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr "Créée le "
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr "Supprimer"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Supprimer après le premier téléchargement ?" msgstr "Supprimer après le premier téléchargement ?"
@ -153,7 +198,7 @@ msgstr "Supprimer après le premier téléchargement ?"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "Supprimer les fichiers sélectionnés" msgstr "Supprimer les fichiers sélectionnés"
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Lien de suppression" msgstr "Lien de suppression"
@ -166,7 +211,7 @@ msgstr ""
"avant son expiration et que le téléchargement se termine après lexpiration, " "avant son expiration et que le téléchargement se termine après lexpiration, "
"lutilisateur pourra quand même récupérer le fichier." "lutilisateur pourra quand même récupérer le fichier."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Télécharger" msgstr "Télécharger"
@ -174,7 +219,7 @@ msgstr "Télécharger"
msgid "Download aborted." msgid "Download aborted."
msgstr "Téléchargement abandonné." msgstr "Téléchargement abandonné."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Lien de téléchargement" msgstr "Lien de téléchargement"
@ -192,10 +237,14 @@ msgstr ""
"lien de téléchargement et un lien pour supprimer le fichier quand vous le " "lien de téléchargement et un lien pour supprimer le fichier quand vous le "
"souhaitez." "souhaitez."
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "Glissez vos fichiers ici" msgstr "Glissez vos fichiers ici"
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr "Adresse de courriel de votre invité·e"
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Corps du mail" msgstr "Corps du mail"
@ -208,27 +257,31 @@ msgstr "Sujet du mail"
msgid "Emails" msgid "Emails"
msgstr "Mails" msgstr "Mails"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "Chiffrement du fragment XX1 sur XX2" msgstr "Chiffrement du fragment XX1 sur XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Erreur : le fichier existait mais a été supprimé" msgstr "Erreur : le fichier existait mais a été supprimé"
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Erreur : le fichier na pas été envoyé dans son intégralité" msgstr "Erreur : le fichier na pas été envoyé dans son intégralité"
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "" msgstr ""
"Erreur : impossible de retrouver le fichier. Êtes-vous sûr(e) de lURL ?" "Erreur : impossible de retrouver le fichier. Êtes-vous sûr(e) de lURL ?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Expiration :" msgstr "Expiration :"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr "Expire le"
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Expire le" msgstr "Expire le"
@ -237,7 +290,7 @@ msgstr "Expire le"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Exporter les données localStorage" msgstr "Exporter les données localStorage"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "Fichier supprimé" msgstr "Fichier supprimé"
@ -245,15 +298,27 @@ msgstr "Fichier supprimé"
msgid "File name" msgid "File name"
msgstr "Nom du fichier" msgstr "Nom du fichier"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr "Fichiers"
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "Fichiers supprimés au premier téléchargement" msgstr "Fichiers supprimés au premier téléchargement"
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr "Fichiers envoyés le"
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr "Fichiers envoyés via linvitation XX1 par XX2"
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Récupérer le fichier" msgstr "Récupérer le fichier"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -263,6 +328,19 @@ msgstr ""
"\"classic\">le dépôt officiel</a> ou sur son <a href=\"https://github.com/" "\"classic\">le dépôt officiel</a> ou sur son <a href=\"https://github.com/"
"ldidry/lufi\" class=\"classic\">miroir Github</a>." "ldidry/lufi\" class=\"classic\">miroir Github</a>."
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr "Courriel de linvité·e"
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr "Bonjour %1,"
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr "Bonjour,"
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "" msgstr ""
@ -272,13 +350,17 @@ msgstr ""
msgid "Here's some files" msgid "Here's some files"
msgstr "Voici quelques fichiers" msgstr "Voici quelques fichiers"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr "Ne pas afficher les invitations cachées"
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "" msgstr ""
"Appuyez sur la touche Entrée puis faites Ctrl+C pour copier tous les liens " "Appuyez sur la touche Entrée puis faites Ctrl+C pour copier tous les liens "
"de téléchargement" "de téléchargement"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "" msgstr ""
"Appuyez sur la touche Entrée puis faites Ctrl+C pour copier le lien de " "Appuyez sur la touche Entrée puis faites Ctrl+C pour copier le lien de "
@ -288,7 +370,12 @@ msgstr ""
msgid "How does it work?" msgid "How does it work?"
msgstr "Comment ça marche ?" msgstr "Comment ça marche ?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
"Pendant combien de jours souhaitez-vous que votre invitation soit valide ?"
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "Comment installer le logiciel sur mon serveur ?" msgstr "Comment installer le logiciel sur mon serveur ?"
@ -312,7 +399,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Importer des données localStorage" msgstr "Importer des données localStorage"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Important : plus dinformations sur les délais" msgstr "Important : plus dinformations sur les délais"
@ -320,6 +407,24 @@ msgstr "Important : plus dinformations sur les délais"
msgid "Information about delays" msgid "Information about delays"
msgstr "Information sur les délais" msgstr "Information sur les délais"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr "Inverser la sélection"
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr "Invitation renvoyée à %1 :<br> URL : %2"
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr "Invitation envoyée à %1 :<br> URL : %2"
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr "Inviter quelquun"
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -331,7 +436,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Javascript est désactivé. Lufi ne fonctionnera pas." msgstr "Javascript est désactivé. Lufi ne fonctionnera pas."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "Langue" msgstr "Langue"
@ -339,7 +444,7 @@ msgstr "Langue"
msgid "Login" msgid "Login"
msgstr "Identifiant" msgstr "Identifiant"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Déconnexion" msgstr "Déconnexion"
@ -351,18 +456,32 @@ msgstr "Lufi est un logiciel libre dhébergement de fichiers."
msgid "Mail" msgid "Mail"
msgstr "Mail" msgstr "Mail"
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "Mes fichiers" msgstr "Mes fichiers"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr "Mes invitations"
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
"NB : cette liste inclue la liste des fichiers qui vous a déjà été envoyée."
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr "Nom du fichier zip"
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "" msgstr ""
"Espace disque insuffisant sur le serveur pour ce fichier (taille du fichier :" "Espace disque insuffisant sur le serveur pour ce fichier (taille du fichier :"
" %1)." " %1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Pas de délai dexpiration" msgstr "Pas de délai dexpiration"
@ -376,7 +495,7 @@ msgstr ""
"informations sont stockées en localStorage : si vous supprimez vos données " "informations sont stockées en localStorage : si vous supprimez vos données "
"localStorage, vous perdrez ces informations." "localStorage, vous perdrez ces informations."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
@ -394,7 +513,7 @@ msgstr ""
"dabord récupérer et déchiffrer tous les fragments avant que vous puissiez " "dabord récupérer et déchiffrer tous les fragments avant que vous puissiez "
"le télécharger." "le télécharger."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -410,10 +529,26 @@ msgstr "Confidentialité"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Supprimer du localStorage les fichiers expirés" msgstr "Supprimer du localStorage les fichiers expirés"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr "Cordialement,"
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr "Cordialement."
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "Signaler un fichier" msgstr "Signaler un fichier"
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr "Renvoyer le courriel dinvitation"
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr "Les lignes en violet indiquent que les invitations ont expiré."
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
@ -421,10 +556,14 @@ msgstr ""
"Les lignes en rouge indiquent que le fichier a expiré et nest plus " "Les lignes en rouge indiquent que le fichier a expiré et nest plus "
"disponible." "disponible."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Envoyer tous les liens par mail" msgstr "Envoyer tous les liens par mail"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr "Envoyer linvitation"
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Envoyer avec ce serveur" msgstr "Envoyer avec ce serveur"
@ -433,7 +572,7 @@ msgstr "Envoyer avec ce serveur"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Envoyer avec votre propre logiciel de mail" msgstr "Envoyer avec votre propre logiciel de mail"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -446,20 +585,52 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Partagez vos fichiers en toute confidentialité sur %1" msgstr "Partagez vos fichiers en toute confidentialité sur %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr "Afficher les invitations cachées"
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr "Afficher le contenu du fichier zip"
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Connexion" msgstr "Connexion"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
"Désolé, linvitation nexiste pas. Êtes-vous sûr·e dêtre sur la bonne URL ?"
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "" msgstr ""
"Désolé, lenvoi de fichier est actuellement désactivé. Veuillez réessayer " "Désolé, lenvoi de fichier est actuellement désactivé. Veuillez réessayer "
"plus tard." "plus tard."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "Désolé, lenvoi de fichier est désactivé." msgstr "Désolé, lenvoi de fichier est désactivé."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr "Désolé, votre invitation a expiré ou a été supprimée."
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
"Désolé, votre invitation a expiré ou a été supprimée. Veuillez contacter %1 "
"pour obtenir une nouvelle invitation."
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr "Les URL de vos fichiers ont été envoyées par courriel à %1."
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -488,7 +659,12 @@ msgstr "Le corps du mail ne peut être vide."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "Le sujet du mail ne peut être vide." msgstr "Le sujet du mail ne peut être vide."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr "Le délai dexpiration (%1) nest pas compris entre 1 et %2 jours."
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "Le fichier a déjà été supprimé" msgstr "Le fichier a déjà été supprimé"
@ -506,10 +682,49 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "Les adresses mail suivantes ne sont pas valides : %1" msgstr "Les adresses mail suivantes ne sont pas valides : %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr "Ladresse courriel de linvité·e (%1) est invalide."
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
"Linvitation %1 ne peut pas être renvoyée : %2 a déjà envoyé des fichiers."
"<br>Veuillez créer une nouvelle invitation."
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr "Linvitation %1 a été supprimée."
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
"Le courriel dinvitation sera envoyé de votre adresse de courriel (%1)."
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "Le(s) lien(s) a/ont été copié dans votre presse-papier" msgstr "Le(s) lien(s) a/ont été copié dans votre presse-papier"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
"Les liens de vos fichiers seront automatiquement envoyés par courriel à %1 "
"(%2)"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
"Les liens de vos fichiers seront automatiquement envoyés par courriel à %1."
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "Le mail a été envoyé." msgstr "Le mail a été envoyé."
@ -517,18 +732,12 @@ msgstr "Le mail a été envoyé."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"Lauteur originel (et pour linstant, le seul) est <a href=\"https://fiat-" "Lauteur originel (et pour linstant, le seul) est <a href=\"https://fiat-"
"tux.fr\" class=\"classic\">Luc Didry</a>. Si vous avez envie de le " "tux.fr\" class=\"classic\">Luc Didry</a>."
"supporter, vous pouvez le faire via <a href=\"https://www.tipeee.com/fiat-"
"tux\" class=\"classic\">Tipeee</a> ou via <a href=\"https://liberapay.com/"
"sky/\" class=\"classic\">Liberapay</a>."
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -536,13 +745,22 @@ msgstr ""
"Le serveur a été incapable de retrouver lenregistrement du fichier auquel " "Le serveur a été incapable de retrouver lenregistrement du fichier auquel "
"ajouter votre fragment de fichier. Veuillez contacter ladministrateur." "ajouter votre fragment de fichier. Veuillez contacter ladministrateur."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
"The fichier a été désactivé par les administrateurs ou administratrices. " "The fichier a été désactivé par les administrateurs ou administratrices. "
"Veuillez les contacter pour savoir pourquoi." "Veuillez les contacter pour savoir pourquoi."
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr "Cette invitation est normalement cachée"
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr "Cette invitation est valide jusquau %1."
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -553,12 +771,20 @@ msgstr ""
"dexpiration de votre fichier sera le minimum entre ce que vous avez choisi " "dexpiration de votre fichier sera le minimum entre ce que vous avez choisi "
"et les limites suivantes :" "et les limites suivantes :"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr "Inverser la visibilité"
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr "URL"
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "Impossible de copier le(s) lien(s) dans votre presse-papier" msgstr "Impossible de copier le(s) lien(s) dans votre presse-papier"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -567,29 +793,33 @@ msgstr ""
"être supprimé de votre localStorage." "être supprimé de votre localStorage."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "Impossible de récupérer le compteur pour %1. Le jeton est invalide." msgstr "Impossible de récupérer le compteur pour %1. Le jeton est invalide."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "" msgstr ""
"Impossible de récupérer le compteur pour %1. Vous nêtes pas connecté·e." "Impossible de récupérer le compteur pour %1. Vous nêtes pas connecté·e."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Envoyer des fichiers" msgstr "Envoyer des fichiers"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr "Envoyer le fichier zip généré"
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Envoyé le" msgstr "Envoyé le"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "Fichiers envoyés" msgstr "Fichiers envoyés"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Erreur de communication WebSocket" msgstr "Erreur de communication WebSocket"
@ -601,6 +831,18 @@ msgstr "Quest-ce que Lufi ?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "Qui a écrit ce logiciel ?" msgstr "Qui a écrit ce logiciel ?"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr "Le fichier XXX a été ajouté à la file denvoi."
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
"Vous pouvez inviter une personne à vous envoyer des fichiers via cette "
"instance Lufi même si cette personne ny a pas de compte."
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -640,7 +882,7 @@ msgstr ""
"Vous essayez de quitter la page. Le téléchargement sera annulé. Êtes-vous " "Vous essayez de quitter la page. Le téléchargement sera annulé. Êtes-vous "
"sûr(e) ?" "sûr(e) ?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -655,22 +897,23 @@ msgstr "Vous avez été déconnecté·e avec succès."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "Vous devez envoyer des adresses mail." msgstr "Vous devez envoyer des adresses mail."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
"Votre navigateur na pas assez dentropie pour générer une clé de " "Votre navigateur na pas assez dentropie pour générer une clé de "
"chiffrement forte. Veuillez attendre (il est préférable que vous fassiez " "chiffrement forte. Veuillez attendre (il est préférable que vous fassiez "
"quelque chose sur votre ordinateur en attendant)." "quelque chose sur votre ordinateur en attendant)."
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "" msgstr ""
"Votre fichier est trop volumineux : %1 (la taille maximum autorisée est %2)" "Votre fichier est trop volumineux : %1 (la taille maximum autorisée est %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "" msgstr ""
"Votre mot de passe est invalide. Veuillez rafraîchir la page pour réessayer." "Votre mot de passe est invalide. Veuillez rafraîchir la page pour réessayer."
@ -689,6 +932,10 @@ msgstr "entre %1 et %2, le fichier sera conservé indéfiniment ;"
msgid "deadline: " msgid "deadline: "
msgstr "dernier délai pour télécharger : " msgstr "dernier délai pour télécharger : "
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr "expire le XXX"
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -703,6 +950,11 @@ msgstr "pour %1 et plus, le fichier sera conservé indéfiniment."
msgid "no time limit" msgid "no time limit"
msgstr "Pas de délai dexpiration" msgstr "Pas de délai dexpiration"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "ou" msgstr "ou"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr "— %1 (%2), qui expirera le %3"

View File

@ -3,6 +3,7 @@
# This file is distributed under the same license as the Lufi package. # This file is distributed under the same license as the Lufi package.
# Luc Didry <luc@didry.org>, 2015. # Luc Didry <luc@didry.org>, 2015.
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -10,20 +11,44 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-28 01:58+0000\n" "PO-Revision-Date: 2019-08-04 05:34+0000\n"
"Language-Team: \n" "Language-Team: \n"
"X-Generator: Zanata 4.6.2\n" "X-Generator: Zanata 4.6.2\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: fr_FR\n" "Language: fr_FR\n"
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 jours" msgstr "%1 jours"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr "%1 vous invite à lui envoyer des fichiers"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr "%1 vous invite à lui envoyer des fichiers via Lufi."
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr "%1 vous a envoyé des fichiers"
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr "%1 a utilisé votre invitation pour vous envoyer des fichiers :"
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr "%A %d %B %Y à %T"
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "(taille max: XXX)" msgstr "(taille max: XXX)"
@ -31,7 +56,7 @@ msgstr "(taille max: XXX)"
msgid "1 year" msgid "1 year"
msgstr "1 an" msgstr "1 an"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 heures" msgstr "24 heures"
@ -39,27 +64,15 @@ msgstr "24 heures"
msgid ":" msgid ":"
msgstr " :" msgstr " :"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"Un merci avec une photo de chaton sur <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> ou "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"fait aussi laffaire ;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Abandonner" msgstr "Abandonner"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "À propos" msgstr "À propos"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "Ajouter un mot de passe au(x) fichier(s)" msgstr "Ajouter un mot de passe au(x) fichier(s)"
@ -71,7 +84,19 @@ msgstr ""
"Lajout dURL non liées à cette instance Lufi au corps ou au sujet du mail " "Lajout dURL non liées à cette instance Lufi au corps ou au sujet du mail "
"est interdit." "est interdit."
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr "Êtes-vous sûr·e de vouloir supprimer les invitations sélectionnées ?"
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
"Êtes-vous sûr·e de vouloir renvoyer le courriel dinvitation pour les "
"invitations sélectionnées ?"
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -89,7 +114,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Demande de récupération du fragment de fichier XX1 sur %1" msgstr "Demande de récupération du fragment de fichier XX1 sur %1"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Retour à la page daccueil" msgstr "Retour à la page daccueil"
@ -97,7 +122,7 @@ msgstr "Retour à la page daccueil"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Mauvais jeton CSRF !" msgstr "Mauvais jeton CSRF !"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "Jeton CSRF invalide." msgstr "Jeton CSRF invalide."
@ -105,11 +130,15 @@ msgstr "Jeton CSRF invalide."
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "Cliquez ici pour rafraîchir la page et redémarrer le téléchargement." msgstr "Cliquez ici pour rafraîchir la page et redémarrer le téléchargement."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr "Cliquez sur lURL suivante pour envoyer des fichiers sur Lufi :"
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Cliquez pour ouvrir le navigateur de fichiers" msgstr "Cliquez pour ouvrir le navigateur de fichiers"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Fermer" msgstr "Fermer"
@ -117,25 +146,29 @@ msgstr "Fermer"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Adresses mails séparées par des virgules" msgstr "Adresses mails séparées par des virgules"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr "Compression du fichier zip…"
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Copier tous les liens dans le presse-papier" msgstr "Copier tous les liens dans le presse-papier"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copier dans le presse-papier" msgstr "Copier dans le presse-papier"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "Impossible de supprimer le fichier. Vous nêtes pas connecté·e." msgstr "Impossible de supprimer le fichier. Vous nêtes pas connecté·e."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
"Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL et le jeton " "Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL et le jeton "
"sont les bons ?" "sont les bons ?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "" msgstr ""
"Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL est la " "Impossible de retrouver le fichier. Êtes-vous sûr(e) que lURL est la "
@ -145,7 +178,19 @@ msgstr ""
msgid "Counter" msgid "Counter"
msgstr "Compteur" msgstr "Compteur"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr "Créer une archive zip avec les fichiers avant lenvoi ?"
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr "Créée le "
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr "Supprimer"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Supprimer après le premier téléchargement ?" msgstr "Supprimer après le premier téléchargement ?"
@ -153,7 +198,7 @@ msgstr "Supprimer après le premier téléchargement ?"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "Supprimer les fichiers sélectionnés" msgstr "Supprimer les fichiers sélectionnés"
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Lien de suppression" msgstr "Lien de suppression"
@ -166,7 +211,7 @@ msgstr ""
"avant son expiration et que le téléchargement se termine après lexpiration, " "avant son expiration et que le téléchargement se termine après lexpiration, "
"lutilisateur pourra quand même récupérer le fichier." "lutilisateur pourra quand même récupérer le fichier."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Télécharger" msgstr "Télécharger"
@ -174,7 +219,7 @@ msgstr "Télécharger"
msgid "Download aborted." msgid "Download aborted."
msgstr "Téléchargement abandonné." msgstr "Téléchargement abandonné."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Lien de téléchargement" msgstr "Lien de téléchargement"
@ -192,10 +237,14 @@ msgstr ""
"lien de téléchargement et un lien pour supprimer le fichier quand vous le " "lien de téléchargement et un lien pour supprimer le fichier quand vous le "
"souhaitez." "souhaitez."
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "Glissez vos fichiers ici" msgstr "Glissez vos fichiers ici"
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr "Adresse de courriel de votre invité·e"
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Corps du mail" msgstr "Corps du mail"
@ -208,27 +257,31 @@ msgstr "Sujet du mail"
msgid "Emails" msgid "Emails"
msgstr "Mails" msgstr "Mails"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "Chiffrement du fragment XX1 sur XX2" msgstr "Chiffrement du fragment XX1 sur XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Erreur : le fichier existait mais a été supprimé" msgstr "Erreur : le fichier existait mais a été supprimé"
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Erreur : le fichier na pas été envoyé dans son intégralité" msgstr "Erreur : le fichier na pas été envoyé dans son intégralité"
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "" msgstr ""
"Erreur : impossible de retrouver le fichier. Êtes-vous sûr(e) de lURL ?" "Erreur : impossible de retrouver le fichier. Êtes-vous sûr(e) de lURL ?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Expiration :" msgstr "Expiration :"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr "Expire le"
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Expire le" msgstr "Expire le"
@ -237,7 +290,7 @@ msgstr "Expire le"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Exporter les données localStorage" msgstr "Exporter les données localStorage"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "Fichier supprimé" msgstr "Fichier supprimé"
@ -245,15 +298,27 @@ msgstr "Fichier supprimé"
msgid "File name" msgid "File name"
msgstr "Nom du fichier" msgstr "Nom du fichier"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr "Fichiers"
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "Fichiers supprimés au premier téléchargement" msgstr "Fichiers supprimés au premier téléchargement"
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr "Fichiers envoyés le"
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr "Fichiers envoyés via linvitation XX1 par XX2"
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Récupérer le fichier" msgstr "Récupérer le fichier"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -263,6 +328,19 @@ msgstr ""
"\"classic\">le dépôt officiel</a> ou sur son <a href=\"https://github.com/" "\"classic\">le dépôt officiel</a> ou sur son <a href=\"https://github.com/"
"ldidry/lufi\" class=\"classic\">miroir Github</a>." "ldidry/lufi\" class=\"classic\">miroir Github</a>."
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr "Courriel de linvité·e"
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr "Bonjour %1,"
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr "Bonjour,"
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "" msgstr ""
@ -272,13 +350,17 @@ msgstr ""
msgid "Here's some files" msgid "Here's some files"
msgstr "Voici quelques fichiers" msgstr "Voici quelques fichiers"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr "Ne pas afficher les invitations cachées"
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "" msgstr ""
"Appuyez sur la touche Entrée puis faites Ctrl+C pour copier tous les liens " "Appuyez sur la touche Entrée puis faites Ctrl+C pour copier tous les liens "
"de téléchargement" "de téléchargement"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "" msgstr ""
"Appuyez sur la touche Entrée puis faites Ctrl+C pour copier le lien de " "Appuyez sur la touche Entrée puis faites Ctrl+C pour copier le lien de "
@ -288,7 +370,12 @@ msgstr ""
msgid "How does it work?" msgid "How does it work?"
msgstr "Comment ça marche ?" msgstr "Comment ça marche ?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
"Pendant combien de jours souhaitez-vous que votre invitation soit valide ?"
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "Comment installer le logiciel sur mon serveur ?" msgstr "Comment installer le logiciel sur mon serveur ?"
@ -312,7 +399,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Importer des données localStorage" msgstr "Importer des données localStorage"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Important : plus dinformations sur les délais" msgstr "Important : plus dinformations sur les délais"
@ -320,6 +407,24 @@ msgstr "Important : plus dinformations sur les délais"
msgid "Information about delays" msgid "Information about delays"
msgstr "Information sur les délais" msgstr "Information sur les délais"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr "Inverser la sélection"
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr "Invitation renvoyée à %1 :<br> URL : %2"
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr "Invitation envoyée à %1 :<br> URL : %2"
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr "Inviter quelquun"
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -331,7 +436,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Javascript est désactivé. Lufi ne fonctionnera pas." msgstr "Javascript est désactivé. Lufi ne fonctionnera pas."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "Langue" msgstr "Langue"
@ -339,7 +444,7 @@ msgstr "Langue"
msgid "Login" msgid "Login"
msgstr "Identifiant" msgstr "Identifiant"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Déconnexion" msgstr "Déconnexion"
@ -351,18 +456,32 @@ msgstr "Lufi est un logiciel libre dhébergement de fichiers."
msgid "Mail" msgid "Mail"
msgstr "Mail" msgstr "Mail"
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "Mes fichiers" msgstr "Mes fichiers"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr "Mes invitations"
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
"NB : cette liste inclue la liste des fichiers qui vous a déjà été envoyée."
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr "Nom du fichier zip"
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "" msgstr ""
"Espace disque insuffisant sur le serveur pour ce fichier (taille du fichier :" "Espace disque insuffisant sur le serveur pour ce fichier (taille du fichier :"
" %1)." " %1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Pas de délai dexpiration" msgstr "Pas de délai dexpiration"
@ -376,7 +495,7 @@ msgstr ""
"informations sont stockées en localStorage : si vous supprimez vos données " "informations sont stockées en localStorage : si vous supprimez vos données "
"localStorage, vous perdrez ces informations." "localStorage, vous perdrez ces informations."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Mot de passe" msgstr "Mot de passe"
@ -394,7 +513,7 @@ msgstr ""
"dabord récupérer et déchiffrer tous les fragments avant que vous puissiez " "dabord récupérer et déchiffrer tous les fragments avant que vous puissiez "
"le télécharger." "le télécharger."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -410,10 +529,26 @@ msgstr "Confidentialité"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Supprimer du localStorage les fichiers expirés" msgstr "Supprimer du localStorage les fichiers expirés"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr "Cordialement,"
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr "Cordialement."
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "Signaler un fichier" msgstr "Signaler un fichier"
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr "Renvoyer le courriel dinvitation"
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr "Les lignes en violet indiquent que les invitations ont expiré."
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
@ -421,10 +556,14 @@ msgstr ""
"Les lignes en rouge indiquent que le fichier a expiré et nest plus " "Les lignes en rouge indiquent que le fichier a expiré et nest plus "
"disponible." "disponible."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Envoyer tous les liens par mail" msgstr "Envoyer tous les liens par mail"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr "Envoyer linvitation"
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Envoyer avec ce serveur" msgstr "Envoyer avec ce serveur"
@ -433,7 +572,7 @@ msgstr "Envoyer avec ce serveur"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Envoyer avec votre propre logiciel de mail" msgstr "Envoyer avec votre propre logiciel de mail"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -446,20 +585,52 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Partagez vos fichiers en toute confidentialité sur %1" msgstr "Partagez vos fichiers en toute confidentialité sur %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr "Afficher les invitations cachées"
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr "Afficher le contenu du fichier zip"
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Connexion" msgstr "Connexion"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
"Désolé, linvitation nexiste pas. Êtes-vous sûr·e dêtre sur la bonne URL ?"
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "" msgstr ""
"Désolé, lenvoi de fichier est actuellement désactivé. Veuillez réessayer " "Désolé, lenvoi de fichier est actuellement désactivé. Veuillez réessayer "
"plus tard." "plus tard."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "Désolé, lenvoi de fichier est désactivé." msgstr "Désolé, lenvoi de fichier est désactivé."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr "Désolé, votre invitation a expiré ou a été supprimée."
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
"Désolé, votre invitation a expiré ou a été supprimée. Veuillez contacter %1 "
"pour obtenir une nouvelle invitation."
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr "Les URL de vos fichiers ont été envoyées par courriel à %1."
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -488,7 +659,12 @@ msgstr "Le corps du mail ne peut être vide."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "Le sujet du mail ne peut être vide." msgstr "Le sujet du mail ne peut être vide."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr "Le délai dexpiration (%1) nest pas compris entre 1 et %2 jours."
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "Le fichier a déjà été supprimé" msgstr "Le fichier a déjà été supprimé"
@ -506,10 +682,49 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "Les adresses mail suivantes ne sont pas valides : %1" msgstr "Les adresses mail suivantes ne sont pas valides : %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr "Ladresse courriel de linvité·e (%1) est invalide."
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
"Linvitation %1 ne peut pas être renvoyée : %2 a déjà envoyé des fichiers."
"<br>Veuillez créer une nouvelle invitation."
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr "Linvitation %1 a été supprimée."
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
"Le courriel dinvitation sera envoyé de votre adresse de courriel (%1)."
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "Le(s) lien(s) a/ont été copié dans votre presse-papier" msgstr "Le(s) lien(s) a/ont été copié dans votre presse-papier"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
"Les liens de vos fichiers seront automatiquement envoyés par courriel à %1 "
"(%2)"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
"Les liens de vos fichiers seront automatiquement envoyés par courriel à %1."
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "Le mail a été envoyé." msgstr "Le mail a été envoyé."
@ -517,18 +732,12 @@ msgstr "Le mail a été envoyé."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"Lauteur originel (et pour linstant, le seul) est <a href=\"https://fiat-" "Lauteur originel (et pour linstant, le seul) est <a href=\"https://fiat-"
"tux.fr\" class=\"classic\">Luc Didry</a>. Si vous avez envie de le " "tux.fr\" class=\"classic\">Luc Didry</a>."
"supporter, vous pouvez le faire via <a href=\"https://www.tipeee.com/fiat-"
"tux\" class=\"classic\">Tipeee</a> ou via <a href=\"https://liberapay.com/"
"sky/\" class=\"classic\">Liberapay</a>."
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -536,13 +745,22 @@ msgstr ""
"Le serveur a été incapable de retrouver lenregistrement du fichier auquel " "Le serveur a été incapable de retrouver lenregistrement du fichier auquel "
"ajouter votre fragment de fichier. Veuillez contacter ladministrateur." "ajouter votre fragment de fichier. Veuillez contacter ladministrateur."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
"The fichier a été désactivé par les administrateurs ou administratrices. " "The fichier a été désactivé par les administrateurs ou administratrices. "
"Veuillez les contacter pour savoir pourquoi." "Veuillez les contacter pour savoir pourquoi."
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr "Cette invitation est normalement cachée"
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr "Cette invitation est valide jusquau %1."
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -553,12 +771,20 @@ msgstr ""
"dexpiration de votre fichier sera le minimum entre ce que vous avez choisi " "dexpiration de votre fichier sera le minimum entre ce que vous avez choisi "
"et les limites suivantes :" "et les limites suivantes :"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr "Inverser la visibilité"
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr "URL"
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "Impossible de copier le(s) lien(s) dans votre presse-papier" msgstr "Impossible de copier le(s) lien(s) dans votre presse-papier"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -567,29 +793,33 @@ msgstr ""
"être supprimé de votre localStorage." "être supprimé de votre localStorage."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "Impossible de récupérer le compteur pour %1. Le jeton est invalide." msgstr "Impossible de récupérer le compteur pour %1. Le jeton est invalide."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "" msgstr ""
"Impossible de récupérer le compteur pour %1. Vous nêtes pas connecté·e." "Impossible de récupérer le compteur pour %1. Vous nêtes pas connecté·e."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Envoyer des fichiers" msgstr "Envoyer des fichiers"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr "Envoyer le fichier zip généré"
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Envoyé le" msgstr "Envoyé le"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "Fichiers envoyés" msgstr "Fichiers envoyés"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Erreur de communication WebSocket" msgstr "Erreur de communication WebSocket"
@ -601,6 +831,18 @@ msgstr "Quest-ce que Lufi ?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "Qui a écrit ce logiciel ?" msgstr "Qui a écrit ce logiciel ?"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr "Le fichier XXX a été ajouté à la file denvoi."
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
"Vous pouvez inviter une personne à vous envoyer des fichiers via cette "
"instance Lufi même si cette personne ny a pas de compte."
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -640,7 +882,7 @@ msgstr ""
"Vous essayez de quitter la page. Le téléchargement sera annulé. Êtes-vous " "Vous essayez de quitter la page. Le téléchargement sera annulé. Êtes-vous "
"sûr(e) ?" "sûr(e) ?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -655,22 +897,23 @@ msgstr "Vous avez été déconnecté·e avec succès."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "Vous devez envoyer des adresses mail." msgstr "Vous devez envoyer des adresses mail."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
"Votre navigateur na pas assez dentropie pour générer une clé de " "Votre navigateur na pas assez dentropie pour générer une clé de "
"chiffrement forte. Veuillez attendre (il est préférable que vous fassiez " "chiffrement forte. Veuillez attendre (il est préférable que vous fassiez "
"quelque chose sur votre ordinateur en attendant)." "quelque chose sur votre ordinateur en attendant)."
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "" msgstr ""
"Votre fichier est trop volumineux : %1 (la taille maximum autorisée est %2)" "Votre fichier est trop volumineux : %1 (la taille maximum autorisée est %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "" msgstr ""
"Votre mot de passe est invalide. Veuillez rafraîchir la page pour réessayer." "Votre mot de passe est invalide. Veuillez rafraîchir la page pour réessayer."
@ -689,6 +932,10 @@ msgstr "entre %1 et %2, le fichier sera conservé indéfiniment ;"
msgid "deadline: " msgid "deadline: "
msgstr "dernier délai pour télécharger : " msgstr "dernier délai pour télécharger : "
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr "expire le XXX"
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -703,6 +950,11 @@ msgstr "pour %1 et plus, le fichier sera conservé indéfiniment."
msgid "no time limit" msgid "no time limit"
msgstr "Pas de délai dexpiration" msgstr "Pas de délai dexpiration"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "ou" msgstr "ou"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr "— %1 (%2), qui expirera le %3"

View File

@ -3,7 +3,7 @@
# This file is distributed under the same license as the Lufi package. # This file is distributed under the same license as the Lufi package.
# Luc Didry <luc@didry.org>, 2015. # Luc Didry <luc@didry.org>, 2015.
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Paolo Mauri <paolo@paolomauri.it>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -11,28 +11,52 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-12-06 11:40+0000\n" "PO-Revision-Date: 2019-04-19 04:58+0000\n"
"Language-Team: \n" "Language-Team: \n"
"X-Generator: Zanata 4.6.2\n" "X-Generator: Zanata 4.6.2\n"
"Last-Translator: Paolo Mauri <paolo@paolomauri.it>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: it\n" "Language: it\n"
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 giorni" msgstr "%1 giorni"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr ""
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr ""
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "(dimensione massima:XXX)" msgstr ""
#: themes/default/templates/index.html.ep:5 #: themes/default/templates/index.html.ep:5
msgid "1 year" msgid "1 year"
msgstr "1 anno" msgstr "1 anno"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 ore" msgstr "24 ore"
@ -40,39 +64,35 @@ msgstr "24 ore"
msgid ":" msgid ":"
msgstr "A :" msgstr "A :"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"Un grazie con una foto di un gattino sur <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> o "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"è forte;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Annulla" msgstr "Annulla"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "A proposito" msgstr "A proposito"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "Aggiungi una password al file" msgstr ""
#: themes/default/templates/mail.html.ep:16 #: themes/default/templates/mail.html.ep:16
msgid "" msgid ""
"Adding URLs not related to this Lufi instance to the mail body or subject is " "Adding URLs not related to this Lufi instance to the mail body or subject is "
"prohibited." "prohibited."
msgstr "" msgstr ""
"Non è possibile aggiungere un URL non relativo a questa istanza di Lufi nel "
"testo o nel soggetto della mail."
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -89,7 +109,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Recupero della porzione del file XX1 su %1" msgstr "Recupero della porzione del file XX1 su %1"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Ritorna all'homepage" msgstr "Ritorna all'homepage"
@ -97,19 +117,23 @@ msgstr "Ritorna all'homepage"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Token CSRF errato!" msgstr "Token CSRF errato!"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "Token CSRF errato." msgstr ""
#: themes/default/templates/partial/render.js.ep:5 #: themes/default/templates/partial/render.js.ep:5
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "Click qui per aggiornare la pagina e ricominciare il download." msgstr "Click qui per aggiornare la pagina e ricominciare il download."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr ""
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Click per aprire il file browser" msgstr "Click per aprire il file browser"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Chiudi" msgstr "Chiudi"
@ -117,24 +141,28 @@ msgstr "Chiudi"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Indirizzi email separati da virgole" msgstr "Indirizzi email separati da virgole"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr ""
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Copiare tutti i link negli appunti" msgstr "Copiare tutti i link negli appunti"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copiare negli appunti" msgstr "Copiare negli appunti"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "Impossibile cancellare il file. Non siete autenticati." msgstr "Impossibile cancellare il file. Non siete autenticati."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
"Impossibile trovare il file. Sei sicuro che URL e token siano corretti ?" "Impossibile trovare il file. Sei sicuro che URL e token siano corretti ?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "Impossibile trovare il file. Sei sicuro che l'URL sia corretto?" msgstr "Impossibile trovare il file. Sei sicuro che l'URL sia corretto?"
@ -142,15 +170,27 @@ msgstr "Impossibile trovare il file. Sei sicuro che l'URL sia corretto?"
msgid "Counter" msgid "Counter"
msgstr "Contatore" msgstr "Contatore"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr ""
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Cancellare al primo download?" msgstr "Cancellare al primo download?"
#: themes/default/templates/files.html.ep:18 #: themes/default/templates/files.html.ep:18
msgid "Delete selected files" msgid "Delete selected files"
msgstr "Cancellare i file selezionati" msgstr ""
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Link per l'eliminazione" msgstr "Link per l'eliminazione"
@ -163,7 +203,7 @@ msgstr ""
"scadenza ed il download terminasse dopo la scadenza, potrebbe ottenere il " "scadenza ed il download terminasse dopo la scadenza, potrebbe ottenere il "
"file." "file."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Download" msgstr "Download"
@ -171,7 +211,7 @@ msgstr "Download"
msgid "Download aborted." msgid "Download aborted."
msgstr "Download annullato." msgstr "Download annullato."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Link per il download" msgstr "Link per il download"
@ -188,10 +228,14 @@ msgstr ""
"Otterrete 2 link per ogni file : uno per il download ed uno per eliminare il " "Otterrete 2 link per ogni file : uno per il download ed uno per eliminare il "
"file quando vorrete." "file quando vorrete."
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "Lasciare i file qui" msgstr "Lasciare i file qui"
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr ""
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Corpo dell'email" msgstr "Corpo dell'email"
@ -204,26 +248,30 @@ msgstr "Oggetto dell'email"
msgid "Emails" msgid "Emails"
msgstr "Email" msgstr "Email"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "Cifratura della parte XX1 di XX2" msgstr "Cifratura della parte XX1 di XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Errore: il file esisteva ma è stato eliminato" msgstr "Errore: il file esisteva ma è stato eliminato"
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Errore: il file non è stato inviato completamente" msgstr "Errore: il file non è stato inviato completamente"
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "Errore: impossibile trovare il file. Sei certo dell'URL ?" msgstr "Errore: impossibile trovare il file. Sei certo dell'URL ?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Scadenza:" msgstr "Scadenza:"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr ""
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Scadrà il" msgstr "Scadrà il"
@ -232,7 +280,7 @@ msgstr "Scadrà il"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Esportare i dati del localStorage" msgstr "Esportare i dati del localStorage"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "File cancellato" msgstr "File cancellato"
@ -240,15 +288,27 @@ msgstr "File cancellato"
msgid "File name" msgid "File name"
msgstr "Nome del file" msgstr "Nome del file"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr ""
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "File cancellati al primo download" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr ""
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Ottenere il file" msgstr "Ottenere il file"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -258,6 +318,19 @@ msgstr ""
"class=\"classic\">le dépôt officiel</a> ou sur son <a href=\"https://" "class=\"classic\">le dépôt officiel</a> ou sur son <a href=\"https://"
"github.com/ldidry/lufi\" class=\"classic\">miroir Github</a>." "github.com/ldidry/lufi\" class=\"classic\">miroir Github</a>."
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr ""
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr ""
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "Buongiorno,\\n\\necco qualche file che vorrei condividere con te:\\n" msgstr "Buongiorno,\\n\\necco qualche file che vorrei condividere con te:\\n"
@ -266,11 +339,15 @@ msgstr "Buongiorno,\\n\\necco qualche file che vorrei condividere con te:\\n"
msgid "Here's some files" msgid "Here's some files"
msgstr "Ecco qualche file" msgstr "Ecco qualche file"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr ""
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "Premere Enter, poi Ctrl+C per copiare tutti i link di download" msgstr "Premere Enter, poi Ctrl+C per copiare tutti i link di download"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "Premere Enter, poi Ctrl+C per copiare il link di download" msgstr "Premere Enter, poi Ctrl+C per copiare il link di download"
@ -278,7 +355,11 @@ msgstr "Premere Enter, poi Ctrl+C per copiare il link di download"
msgid "How does it work?" msgid "How does it work?"
msgstr "Come funziona?" msgstr "Come funziona?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "Come installare il software sul mio server ?" msgstr "Come installare il software sul mio server ?"
@ -303,7 +384,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Importare i dati del localStorage" msgstr "Importare i dati del localStorage"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Importante : più informazioni sulle scadenze" msgstr "Importante : più informazioni sulle scadenze"
@ -311,6 +392,24 @@ msgstr "Importante : più informazioni sulle scadenze"
msgid "Information about delays" msgid "Information about delays"
msgstr "Informazione sulle scadenze" msgstr "Informazione sulle scadenze"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr ""
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr ""
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr ""
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -320,15 +419,15 @@ msgstr "Sembra che la chiave nel tuo URL sia errata. Controllare il tuo URL."
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Javascript è disattivato. Lufi non può funzionare." msgstr "Javascript è disattivato. Lufi non può funzionare."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "Lingua" msgstr ""
#: themes/default/templates/login.html.ep:15 #: themes/default/templates/login.html.ep:15
msgid "Login" msgid "Login"
msgstr "Login" msgstr "Login"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Logout" msgstr "Logout"
@ -338,19 +437,32 @@ msgstr "Lufi è un software libero di file hosting."
#: themes/default/templates/files.html.ep:33 #: themes/default/templates/files.html.ep:33
msgid "Mail" msgid "Mail"
msgstr "Email" msgstr ""
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "I miei file" msgstr "I miei file"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr ""
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "" msgstr ""
"Spazio disco insufficiente sul server per questo file (dimensione: %1)." "Spazio disco insufficiente sul server per questo file (dimensione: %1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Nessun ritardo per la scadenza" msgstr "Nessun ritardo per la scadenza"
@ -364,7 +476,7 @@ msgstr ""
"sono memorizzate nel localStorage: se cancellaste i dati dal vostro " "sono memorizzate nel localStorage: se cancellaste i dati dal vostro "
"localStorage, perdereste questa lista." "localStorage, perdereste questa lista."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Password" msgstr "Password"
@ -381,13 +493,11 @@ msgstr ""
"Attendere mentre otteniamo il vostro file. Dobbiamo prima scaricare e " "Attendere mentre otteniamo il vostro file. Dobbiamo prima scaricare e "
"decifrare tutte le parti prima che possiate averlo." "decifrare tutte le parti prima che possiate averlo."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
msgstr "" msgstr ""
"Controlla le tue credenziali o il corretto accesso a questo servizio: "
"impossibile l'autenticazione."
#: themes/default/templates/about.html.ep:5 #: themes/default/templates/about.html.ep:5
msgid "Privacy" msgid "Privacy"
@ -397,20 +507,39 @@ msgstr "Riservatezza"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Eliminare dal localStorage i file scaduti" msgstr "Eliminare dal localStorage i file scaduti"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr ""
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "Report file" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr ""
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
msgstr "" msgstr ""
"Le righe rosse indicano che i file sono scaduti e non sono più disponibili."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Inviare tutti i link tramite email" msgstr "Inviare tutti i link tramite email"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr ""
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Inviare tramite questo server" msgstr "Inviare tramite questo server"
@ -419,7 +548,7 @@ msgstr "Inviare tramite questo server"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Inviare tramite il vostro programma di posta" msgstr "Inviare tramite il vostro programma di posta"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -432,33 +561,58 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Condividi tutti i file in totale riservatezza su %1" msgstr "Condividi tutti i file in totale riservatezza su %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr ""
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Autenticazione" msgstr "Autenticazione"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "L'invio del file è attualemente disattivato. Riprovare più tardi." msgstr "L'invio del file è attualemente disattivato. Riprovare più tardi."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "L'invio del file è attualemente disattivato." msgstr "L'invio del file è attualemente disattivato."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr ""
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr ""
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
"(what kind of file it is: video, text, etc.)." "(what kind of file it is: video, text, etc.)."
msgstr "" msgstr ""
"Solo l'amministratore può visualizzare il nome del file, la sua dimensione e "
"i mimetype (che tipo di file è: video, testo, ecc...)."
#: lib/Lufi/Controller/Mail.pm:53 #: lib/Lufi/Controller/Mail.pm:53
msgid "" msgid ""
"The body of the mail must contain at least one URL pointing to a file hosted " "The body of the mail must contain at least one URL pointing to a file hosted "
"on this instance." "on this instance."
msgstr "" msgstr ""
"Il testo della mail deve contenere almeno un URL che reindirizza ad un file "
"ospitato in questa istanza."
#: themes/default/templates/partial/files.js.ep:11 #: themes/default/templates/partial/files.js.ep:11
msgid "The data has been successfully imported." msgid "The data has been successfully imported."
@ -472,7 +626,12 @@ msgstr "Il corpo dell'email non può essere vuoto."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "Il soggetto dell'email non può essere vuoto." msgstr "Il soggetto dell'email non può essere vuoto."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr ""
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "Il file è già stato cancellato" msgstr "Il file è già stato cancellato"
@ -489,10 +648,43 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "I seguenti indirizzi email non sono validi: %1" msgstr "I seguenti indirizzi email non sono validi: %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr ""
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr ""
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "I link sono stati copiati negli appunti" msgstr "I link sono stati copiati negli appunti"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "Email inviata." msgstr "Email inviata."
@ -500,18 +692,12 @@ msgstr "Email inviata."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"L'autore ( e per ora l'unico) è <a href=\"https://fiat-tux.fr\" class=" "L'autore ( e per ora l'unico) è <a href=\"https://fiat-tux.fr\" class="
"\"classic\">Luc Didry</a>. Se aveste voglia di aiutarlo, potreste farlo " "\"classic\">Luc Didry</a>."
"tramite <a href=\"https://www.tipeee.com/fiat-tux\" class="
"\"classic\">Tipeee</a> ou via <a href=\"https://liberapay.com/sky/\" class="
"\"classic\">Liberapay</a>."
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -519,12 +705,19 @@ msgstr ""
"Il server non è stato in grado di trovare il file record a cui aggiungere la " "Il server non è stato in grado di trovare il file record a cui aggiungere la "
"vostra porzione di file. Prego contattare l'amministratore." "vostra porzione di file. Prego contattare l'amministratore."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
"Questi file sono stati cancellati dall'amministratore. Contattalo per sapere "
"il motivo." #: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr ""
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr ""
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
@ -536,12 +729,20 @@ msgstr ""
"data di scadenza del tuo file sarà la minore tra quella scelta e queste " "data di scadenza del tuo file sarà la minore tra quella scelta e queste "
"limitazioni:" "limitazioni:"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr ""
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "Impossibile copiare i link negli appunti" msgstr "Impossibile copiare i link negli appunti"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -550,28 +751,32 @@ msgstr ""
"eliminato dal tuo localStorage." "eliminato dal tuo localStorage."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "Impossibile recuperare il contatore per %1. Il token non è valido." msgstr "Impossibile recuperare il contatore per %1. Il token non è valido."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "Impossibile recuperare il contatore per %1. Non sei autenticato." msgstr "Impossibile recuperare il contatore per %1. Non sei autenticato."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Invio dei file" msgstr "Invio dei file"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr ""
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Invio il" msgstr "Invio il"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "File inviati" msgstr "File inviati"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Errore di comunicazione WebSocket" msgstr "Errore di comunicazione WebSocket"
@ -583,6 +788,16 @@ msgstr "Cos'è Lufi ?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "Chi ha scritto questo software?" msgstr "Chi ha scritto questo software?"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -594,7 +809,6 @@ msgstr ""
#: lib/Lufi/Controller/Mail.pm:42 #: lib/Lufi/Controller/Mail.pm:42
msgid "You can't add URLs that are not related to this instance." msgid "You can't add URLs that are not related to this instance."
msgstr "" msgstr ""
"Non è possibile aggiungere URL che non sono relativi a questa istanza."
#: themes/default/templates/about.html.ep:8 #: themes/default/templates/about.html.ep:8
msgid "" msgid ""
@ -622,7 +836,7 @@ msgstr ""
"Hai cercato di uscire da questa pagina. Il download sarà cancellato. Sei " "Hai cercato di uscire da questa pagina. Il download sarà cancellato. Sei "
"sicuro?" "sicuro?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -637,24 +851,22 @@ msgstr "Logout avvenuto con successo."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "Devi fornire gli indirizzi email." msgstr "Devi fornire gli indirizzi email."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
"Il tuo browser non ha abbastanza entropia per generare una chiave "
"crittografica forte. Attendi (puoi fare altre cose al computer mentre "
"attendi)"
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "" msgstr ""
"Il vostro file è troppo grande : %1 (la dimensione massima permessa è %2)" "Il vostro file è troppo grande : %1 (la dimensione massima permessa è %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "La tua password non è valida. Ricarica la pagina e riprova." msgstr ""
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:20 #: themes/default/templates/delays.html.ep:20
@ -670,6 +882,10 @@ msgstr "tra %1 e %2, il file sarà conservato per sempre;"
msgid "deadline: " msgid "deadline: "
msgstr "scadenza: " msgstr "scadenza: "
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr ""
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -684,6 +900,11 @@ msgstr "per %1 e più, il file sarà conservato per sempre."
msgid "no time limit" msgid "no time limit"
msgstr "nessuna limitazione temporale" msgstr "nessuna limitazione temporale"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "o" msgstr "o"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr ""

View File

@ -17,11 +17,35 @@ msgstr ""
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr ""
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr ""
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "" msgstr ""
@ -29,7 +53,7 @@ msgstr ""
msgid "1 year" msgid "1 year"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "" msgstr ""
@ -37,19 +61,15 @@ msgstr ""
msgid ":" msgid ":"
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:16
msgid "A thank you with a photo of kitten on <a href=\"https://framasphere.org/people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or <a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> is cool too ;-)"
msgstr ""
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "" msgstr ""
#: themes/default/templates/layouts/default.html.ep:49 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "" msgstr ""
@ -57,7 +77,15 @@ msgstr ""
msgid "Adding URLs not related to this Lufi instance to the mail body or subject is prohibited." msgid "Adding URLs not related to this Lufi instance to the mail body or subject is prohibited."
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:4
msgid "Are you sure you want to resend the invitation mail for the selected invitations?"
msgstr ""
#: themes/default/templates/about.html.ep:17
msgid "As Lufi is a free software licensed under of the terms of the <a href=\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can install it on you own server. Have a look on the <a href=\"https://framagit.org/luc/lufi/wikis/home\" class=\"classic\">Wiki</a> for the procedure." msgid "As Lufi is a free software licensed under of the terms of the <a href=\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can install it on you own server. Have a look on the <a href=\"https://framagit.org/luc/lufi/wikis/home\" class=\"classic\">Wiki</a> for the procedure."
msgstr "" msgstr ""
@ -66,7 +94,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "" msgstr ""
@ -74,7 +102,7 @@ msgstr ""
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "" msgstr ""
@ -82,11 +110,15 @@ msgstr ""
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr ""
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "" msgstr ""
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "" msgstr ""
@ -94,23 +126,27 @@ msgstr ""
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr ""
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "" msgstr ""
@ -118,7 +154,19 @@ msgstr ""
msgid "Counter" msgid "Counter"
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr ""
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "" msgstr ""
@ -126,7 +174,7 @@ msgstr ""
msgid "Delete selected files" msgid "Delete selected files"
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "" msgstr ""
@ -134,7 +182,7 @@ msgstr ""
msgid "Don't worry: if a user begins to download the file before the expiration and the download ends after the expiration, he will be able to get the file." msgid "Don't worry: if a user begins to download the file before the expiration and the download ends after the expiration, he will be able to get the file."
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "" msgstr ""
@ -142,7 +190,7 @@ msgstr ""
msgid "Download aborted." msgid "Download aborted."
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "" msgstr ""
@ -150,10 +198,14 @@ msgstr ""
msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want." msgid "Drag and drop files in the appropriate area or use the traditional way to send files and the files will be chunked, encrypted and sent to the server. You will get two links per file: a download link, that you give to the people you want to share the file with and a deletion link, allowing you to delete the file whenever you want."
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "" msgstr ""
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr ""
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "" msgstr ""
@ -166,26 +218,30 @@ msgstr ""
msgid "Emails" msgid "Emails"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr ""
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "" msgstr ""
@ -194,7 +250,7 @@ msgstr ""
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "" msgstr ""
@ -202,18 +258,43 @@ msgstr ""
msgid "File name" msgid "File name"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr ""
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr ""
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=\"classic\">the official repository</a> or on its <a href=\"https://github.com/ldidry/lufi\" class=\"classic\">Github mirror</a>" msgid "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=\"classic\">the official repository</a> or on its <a href=\"https://github.com/ldidry/lufi\" class=\"classic\">Github mirror</a>"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr ""
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr ""
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "" msgstr ""
@ -222,11 +303,15 @@ msgstr ""
msgid "Here's some files" msgid "Here's some files"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr ""
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "" msgstr ""
@ -234,7 +319,11 @@ msgstr ""
msgid "How does it work?" msgid "How does it work?"
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "" msgstr ""
@ -254,7 +343,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "" msgstr ""
@ -262,6 +351,24 @@ msgstr ""
msgid "Information about delays" msgid "Information about delays"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr ""
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr ""
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr ""
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "It seems that the key in your URL is incorrect. Please, verify your URL." msgid "It seems that the key in your URL is incorrect. Please, verify your URL."
msgstr "" msgstr ""
@ -270,7 +377,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "" msgstr ""
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:42 themes/default/templates/layouts/default.html.ep:69 themes/default/templates/layouts/default.html.ep:71 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "" msgstr ""
@ -278,7 +385,7 @@ msgstr ""
msgid "Login" msgid "Login"
msgstr "" msgstr ""
#: themes/default/templates/layouts/default.html.ep:54 themes/default/templates/layouts/default.html.ep:80 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "" msgstr ""
@ -290,16 +397,28 @@ msgstr ""
msgid "Mail" msgid "Mail"
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:63 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr ""
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid "NB: this list includes the list of files that have already been sent to you."
msgstr ""
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "" msgstr ""
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "" msgstr ""
@ -307,7 +426,7 @@ msgstr ""
msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list." msgid "Only the files sent with this browser will be listed here. This list is stored in localStorage: if you delete your localStorage data, you'll lose this list."
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "" msgstr ""
@ -320,7 +439,7 @@ msgstr ""
msgid "Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it." msgid "Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "Please, check your credentials or your right to access this service: unable to authenticate." msgid "Please, check your credentials or your right to access this service: unable to authenticate."
msgstr "" msgstr ""
@ -332,18 +451,38 @@ msgstr ""
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "" msgstr ""
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:60 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr ""
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr ""
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "Rows in red mean that the files have expired and are no longer available." msgid "Rows in red mean that the files have expired and are no longer available."
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "" msgstr ""
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr ""
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "" msgstr ""
@ -352,7 +491,7 @@ msgstr ""
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move." msgid "Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move."
msgstr "" msgstr ""
@ -361,18 +500,44 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "" msgstr ""
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:65 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr ""
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid "Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "" msgstr ""
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr ""
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid "Sorry, your invitation has expired or has been deleted. Please contact %1 to have another invitation."
msgstr ""
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr ""
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "The administrator can only see the file's name, its size and its mimetype (what kind of file it is: video, text, etc.)." msgid "The administrator can only see the file's name, its size and its mimetype (what kind of file it is: video, text, etc.)."
msgstr "" msgstr ""
@ -393,7 +558,12 @@ msgstr ""
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr ""
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "" msgstr ""
@ -406,62 +576,113 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr ""
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid "The invitation %1 cant be resent: %2 has already sent files.<br>Please create a new invitation."
msgstr ""
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr ""
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "" msgstr ""
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid "The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" class=\"classic\">Luc Didry</a>. If you want to support him, you can do it via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</a>." msgid "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" class=\"classic\">Luc Didry</a>."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator." msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator."
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "This file has been deactivated by the admins. Contact them to know why." msgid "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr ""
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr ""
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:" msgid "This server sets limitations according to the file size. The expiration delay of your file will be the minimum between what you choose and the following limitations:"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr ""
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "" msgstr ""
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage."
msgstr "" msgstr ""
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "" msgstr ""
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "" msgstr ""
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr ""
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "" msgstr ""
@ -473,6 +694,14 @@ msgstr ""
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:30
msgid "You can invite someone to send you files through this Lufi instance even if they dont have an account on it."
msgstr ""
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "You can see the list of your files by clicking on the \"My files\" link at the top right of this page." msgid "You can see the list of your files by clicking on the \"My files\" link at the top right of this page."
msgstr "" msgstr ""
@ -493,7 +722,7 @@ msgstr ""
msgid "You have attempted to leave this page. The download will be canceled. Are you sure?" msgid "You have attempted to leave this page. The download will be canceled. Are you sure?"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "You have attempted to leave this page. The upload will be canceled. Are you sure?" msgid "You have attempted to leave this page. The upload will be canceled. Are you sure?"
msgstr "" msgstr ""
@ -505,16 +734,16 @@ msgstr ""
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "Your browser has not enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)." msgid "Your browser does not have enough entropy to generate a strong encryption key. Please wait (it's better if you do things on your computer while waiting)."
msgstr "" msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "" msgstr ""
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "" msgstr ""
@ -532,6 +761,10 @@ msgstr ""
msgid "deadline: " msgid "deadline: "
msgstr "" msgstr ""
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr ""
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -546,6 +779,11 @@ msgstr ""
msgid "no time limit" msgid "no time limit"
msgstr "" msgstr ""
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "" msgstr ""
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr ""

View File

@ -1,4 +1,5 @@
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -6,8 +7,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-28 01:56+0000\n" "PO-Revision-Date: 2019-04-19 04:57+0000\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Language-Team: Dutch\n" "Language-Team: Dutch\n"
"Language: nl\n" "Language: nl\n"
"X-Generator: Zanata 4.6.2\n" "X-Generator: Zanata 4.6.2\n"
@ -15,11 +16,35 @@ msgstr ""
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 dagen" msgstr "%1 dagen"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr ""
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr ""
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "" msgstr ""
@ -27,7 +52,7 @@ msgstr ""
msgid "1 year" msgid "1 year"
msgstr "1 jaar" msgstr "1 jaar"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 uur" msgstr "24 uur"
@ -35,27 +60,15 @@ msgstr "24 uur"
msgid ":" msgid ":"
msgstr ":" msgstr ":"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"Een bedankt foto met een katje op <a href=\"https://framasphere.org/people/"
"b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> of <a "
"href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> is "
"ook goed ;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Annuleren" msgstr "Annuleren"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "Over" msgstr "Over"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "" msgstr ""
@ -65,7 +78,17 @@ msgid ""
"prohibited." "prohibited."
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -83,7 +106,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Deel XX1 van %1 wordt opgehaald" msgstr "Deel XX1 van %1 wordt opgehaald"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Terug naar home" msgstr "Terug naar home"
@ -91,7 +114,7 @@ msgstr "Terug naar home"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Verkeerde CSRF token!" msgstr "Verkeerde CSRF token!"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "" msgstr ""
@ -99,11 +122,15 @@ msgstr ""
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "Klik hier om de pagina te verversen en opnieuw te downloaden." msgstr "Klik hier om de pagina te verversen en opnieuw te downloaden."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr ""
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Klik voor bestandbrowser" msgstr "Klik voor bestandbrowser"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Sluiten" msgstr "Sluiten"
@ -111,23 +138,27 @@ msgstr "Sluiten"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Komma gescheiden email adressen" msgstr "Komma gescheiden email adressen"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr ""
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Kopieer alle links naar klembord" msgstr "Kopieer alle links naar klembord"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Kopieer naar klembord" msgstr "Kopieer naar klembord"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "Kan het bestand niet verwijderen. Je bent niet geautoriseerd." msgstr "Kan het bestand niet verwijderen. Je bent niet geautoriseerd."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "Kan het bestand niet vinden. Klopt de URL en token wel?" msgstr "Kan het bestand niet vinden. Klopt de URL en token wel?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "Kan het bestand niet vinden. Klopt de URL?" msgstr "Kan het bestand niet vinden. Klopt de URL?"
@ -135,7 +166,19 @@ msgstr "Kan het bestand niet vinden. Klopt de URL?"
msgid "Counter" msgid "Counter"
msgstr "Teller" msgstr "Teller"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr ""
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Verwijder na eerste download?" msgstr "Verwijder na eerste download?"
@ -143,7 +186,7 @@ msgstr "Verwijder na eerste download?"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Verwijderingslink" msgstr "Verwijderingslink"
@ -155,7 +198,7 @@ msgstr ""
"Geen zorgen: als een gebruiker de download start voor de vervaldatum, dan " "Geen zorgen: als een gebruiker de download start voor de vervaldatum, dan "
"zal die het bestand kunnen binnenhalen." "zal die het bestand kunnen binnenhalen."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Download" msgstr "Download"
@ -163,7 +206,7 @@ msgstr "Download"
msgid "Download aborted." msgid "Download aborted."
msgstr "Download geannuleerd." msgstr "Download geannuleerd."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Download link" msgstr "Download link"
@ -181,10 +224,14 @@ msgstr ""
"waarmee je het bestand wilt delen en een verwijderings link, waarmee je het " "waarmee je het bestand wilt delen en een verwijderings link, waarmee je het "
"bestand kan verwijderen wanneer je dat wilt." "bestand kan verwijderen wanneer je dat wilt."
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "Sleep bestand(en) naar dit venster" msgstr "Sleep bestand(en) naar dit venster"
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr ""
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Email inhoud" msgstr "Email inhoud"
@ -197,26 +244,30 @@ msgstr "Onderwerp"
msgid "Emails" msgid "Emails"
msgstr "Emails" msgstr "Emails"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "Encrypten deel XX1 van XX2 " msgstr "Encrypten deel XX1 van XX2 "
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Fout: het bestand bestond wel maar is verwijderd." msgstr "Fout: het bestand bestond wel maar is verwijderd."
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Fout: het bestand is niet volledig opgestuurd." msgstr "Fout: het bestand is niet volledig opgestuurd."
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "Fout: kan het bestand niet vinden. Is de URL juist?" msgstr "Fout: kan het bestand niet vinden. Is de URL juist?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Vervaldatum:" msgstr "Vervaldatum:"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr ""
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Vervalt op" msgstr "Vervalt op"
@ -225,7 +276,7 @@ msgstr "Vervalt op"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Exporteer opgeslagen data" msgstr "Exporteer opgeslagen data"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "Bestand verwijderd" msgstr "Bestand verwijderd"
@ -233,15 +284,27 @@ msgstr "Bestand verwijderd"
msgid "File name" msgid "File name"
msgstr "Bestandsnaam" msgstr "Bestandsnaam"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr ""
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr ""
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Download bestand" msgstr "Download bestand"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -251,6 +314,19 @@ msgstr ""
"\"classic\">de officiële repository</a> of op <a href=\"https://github.com/" "\"classic\">de officiële repository</a> of op <a href=\"https://github.com/"
"ldidry/lufi\" class=\"classic\">Github mirror</a>" "ldidry/lufi\" class=\"classic\">Github mirror</a>"
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr ""
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr ""
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "Hallo,\\n\\nHier zijn enkele bestanden die ik met je wil delen:\\n\\n" msgstr "Hallo,\\n\\nHier zijn enkele bestanden die ik met je wil delen:\\n\\n"
@ -259,11 +335,15 @@ msgstr "Hallo,\\n\\nHier zijn enkele bestanden die ik met je wil delen:\\n\\n"
msgid "Here's some files" msgid "Here's some files"
msgstr "Hier zijn enkele bestanden" msgstr "Hier zijn enkele bestanden"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr ""
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "Druk Enter, vervolgens CTRL+C om alle download links te kopieeren" msgstr "Druk Enter, vervolgens CTRL+C om alle download links te kopieeren"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "Druk Enter, vervolgens CTRL+C om de download link te kopieeren" msgstr "Druk Enter, vervolgens CTRL+C om de download link te kopieeren"
@ -271,7 +351,11 @@ msgstr "Druk Enter, vervolgens CTRL+C om de download link te kopieeren"
msgid "How does it work?" msgid "How does it work?"
msgstr "Hoe werkt het?" msgstr "Hoe werkt het?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "Hoe installeer ik de software op mijn server?" msgstr "Hoe installeer ik de software op mijn server?"
@ -297,7 +381,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Importeer opgeslagen data" msgstr "Importeer opgeslagen data"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Belangrijk: meer informatie over uitstel" msgstr "Belangrijk: meer informatie over uitstel"
@ -305,6 +389,24 @@ msgstr "Belangrijk: meer informatie over uitstel"
msgid "Information about delays" msgid "Information about delays"
msgstr "Informatie over uitstel" msgstr "Informatie over uitstel"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr ""
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr ""
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr ""
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -315,7 +417,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Javascript is uitgeschakeld. Je kan geen gebruik maken van Lufi." msgstr "Javascript is uitgeschakeld. Je kan geen gebruik maken van Lufi."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "" msgstr ""
@ -323,7 +425,7 @@ msgstr ""
msgid "Login" msgid "Login"
msgstr "Login" msgstr "Login"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Logout" msgstr "Logout"
@ -335,16 +437,29 @@ msgstr "Lufi is een gratis bestand hosting software."
msgid "Mail" msgid "Mail"
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "Mijn bestanden" msgstr "Mijn bestanden"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr ""
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "Geen genoeg ruimte op de server voor deze bestand (grootte: %1)." msgstr "Geen genoeg ruimte op de server voor deze bestand (grootte: %1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Geen verloop uitstel" msgstr "Geen verloop uitstel"
@ -358,7 +473,7 @@ msgstr ""
"Deze lijst is opgeslagen: als je opgeslagen data verwijderd, zal je deze " "Deze lijst is opgeslagen: als je opgeslagen data verwijderd, zal je deze "
"lijst verlizen." "lijst verlizen."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Wachtwoord" msgstr "Wachtwoord"
@ -375,7 +490,7 @@ msgstr ""
"Een ogenblik geduld, we pakken je bestand er bij. We moeten alle delen " "Een ogenblik geduld, we pakken je bestand er bij. We moeten alle delen "
"downloaden en decrypten voordat je het kan downloaden." "downloaden en decrypten voordat je het kan downloaden."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -389,19 +504,39 @@ msgstr "Privacy"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Verwijder verlopen data" msgstr "Verwijder verlopen data"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr ""
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr ""
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
msgstr "Rode rijen betekenen dat deze bestanden verlopen en verwijderd zijn." msgstr "Rode rijen betekenen dat deze bestanden verlopen en verwijderd zijn."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Verstuur alle links via mail" msgstr "Verstuur alle links via mail"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr ""
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Verstuur via deze server" msgstr "Verstuur via deze server"
@ -410,7 +545,7 @@ msgstr "Verstuur via deze server"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Verstuur via eigen mail software" msgstr "Verstuur via eigen mail software"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -421,19 +556,48 @@ msgstr "Versturen deel XX1 van XX2. Een ogenblik geduld..."
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Deel je bestanden met volledige privacy op %1" msgstr "Deel je bestanden met volledige privacy op %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr ""
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Inloggen" msgstr "Inloggen"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "" msgstr ""
"Sorry, uploaden is momenteel uitgeschakeld. Probeer het later nogmaals." "Sorry, uploaden is momenteel uitgeschakeld. Probeer het later nogmaals."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "SOrry, uploaden is uitgeschakeld." msgstr "SOrry, uploaden is uitgeschakeld."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr ""
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr ""
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -460,7 +624,12 @@ msgstr "Mail inhoud kan niet leeg zijn."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "Onderwerp kan niet leeg zijn." msgstr "Onderwerp kan niet leeg zijn."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr ""
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "Bestand is reeds verwijderd" msgstr "Bestand is reeds verwijderd"
@ -477,10 +646,43 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "Volgende email adressen zijn niet geldig: %1" msgstr "Volgende email adressen zijn niet geldig: %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr ""
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr ""
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "De link is gekopieerd naar je klembord" msgstr "De link is gekopieerd naar je klembord"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "Email is verzonden." msgstr "Email is verzonden."
@ -488,17 +690,12 @@ msgstr "Email is verzonden."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"De oorspronkelijke auteur is <a href=\"https://fiat-tux.fr\" class=" "De oorspronkelijke auteur is <a href=\"https://fiat-tux.fr\" class="
"\"classic\">Luc Didry</a>. Als je hem wilt ondersteunen, dan kan dat via <a " "\"classic\">Luc Didry</a>."
"href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> of via "
"<a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</a>."
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -506,11 +703,20 @@ msgstr ""
"Server kon een deel van het bestand niet vinden. Neem contact op met " "Server kon een deel van het bestand niet vinden. Neem contact op met "
"beheerder." "beheerder."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr ""
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr ""
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -521,12 +727,20 @@ msgstr ""
"vervaldatum van uw bestand zal het minimum zijn tussen wat u kiest en de " "vervaldatum van uw bestand zal het minimum zijn tussen wat u kiest en de "
"volgende beperkingen:" "volgende beperkingen:"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr ""
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "Kan de link(s) niet naar je klembord kopieeren" msgstr "Kan de link(s) niet naar je klembord kopieeren"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -535,28 +749,32 @@ msgstr ""
"worden van opgeslagen data." "worden van opgeslagen data."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "Kan geen teller verkrijgen voor %1. De token is ongeldig." msgstr "Kan geen teller verkrijgen voor %1. De token is ongeldig."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "Kan geen teller verkrijgen voor %1. Je bent niet geauthenticeerd." msgstr "Kan geen teller verkrijgen voor %1. Je bent niet geauthenticeerd."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Upload bestanden" msgstr "Upload bestanden"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr ""
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Geupload op" msgstr "Geupload op"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "Geuploade bestanden" msgstr "Geuploade bestanden"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Websocket communicatie fout" msgstr "Websocket communicatie fout"
@ -568,6 +786,16 @@ msgstr "Wat is Lufi?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "Wie heeft deze software geschreven?" msgstr "Wie heeft deze software geschreven?"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -606,7 +834,7 @@ msgid ""
msgstr "" msgstr ""
"Je verlaat deze pagina. Download zal geannuleerd worden. Weet je het zeker?" "Je verlaat deze pagina. Download zal geannuleerd worden. Weet je het zeker?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -621,18 +849,19 @@ msgstr "Je bent succesvol uitgelogd."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "Je moet een mail adres opgeven." msgstr "Je moet een mail adres opgeven."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "Je bestand is te groot: %1 (max: %2)" msgstr "Je bestand is te groot: %1 (max: %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "" msgstr ""
@ -650,6 +879,10 @@ msgstr "tussen %1 en %2, bestand zal voor altijd bewaard worden."
msgid "deadline: " msgid "deadline: "
msgstr "deadline: " msgstr "deadline: "
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr ""
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -664,6 +897,11 @@ msgstr "voor %1 en meer, bestand zal voor altijd bewaard worden."
msgid "no time limit" msgid "no time limit"
msgstr "geen tijdslimiet" msgstr "geen tijdslimiet"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "of" msgstr "of"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr ""

View File

@ -5,6 +5,8 @@
# Cédric VALMARY <cvalmary@yahoo.fr>, 2016. # Cédric VALMARY <cvalmary@yahoo.fr>, 2016.
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Quentí, 2018. #zanata # Quentí, 2018. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
# Quentí, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -12,8 +14,8 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-28 06:34+0000\n" "PO-Revision-Date: 2019-08-04 05:34+0000\n"
"Last-Translator: Quentí <quentinantonin@free.fr>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Language-Team: Tot en òc (totenoc.eu)\n" "Language-Team: Tot en òc (totenoc.eu)\n"
"Language: oc\n" "Language: oc\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
@ -21,11 +23,35 @@ msgstr ""
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 jorns" msgstr "%1 jorns"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr "%1 vos convida a li mandar de fichièrs"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr "%1 vos convida a li mandar de fichièrs per Lufi"
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr "%1 vos mandèt de fichièrs"
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr "%1 utilizèt vòstra invitacion per vos mandar de fichièrs :"
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr "%A %d %B %Y a %T"
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "(talha max : XXX)" msgstr "(talha max : XXX)"
@ -33,7 +59,7 @@ msgstr "(talha max : XXX)"
msgid "1 year" msgid "1 year"
msgstr "1 an" msgstr "1 an"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 oras" msgstr "24 oras"
@ -41,27 +67,15 @@ msgstr "24 oras"
msgid ":" msgid ":"
msgstr ":" msgstr ":"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"Un mercé amb una fotografia de caton sus <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> o "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"conven tanben ;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Anullar" msgstr "Anullar"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "A prepaus" msgstr "A prepaus"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "Apondre un senhal al(s) fichièr(s)" msgstr "Apondre un senhal al(s) fichièr(s)"
@ -73,7 +87,19 @@ msgstr ""
"Ajustar dURL pas ligadas a aquesta instància pel còr o subjècte dun " "Ajustar dURL pas ligadas a aquesta instància pel còr o subjècte dun "
"corrièl es defendut." "corrièl es defendut."
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr "Volètz vertadièrament suprimir linvitacion seleccionada ?"
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
"Volètz vertadièrament tornar mandar lo corrièl dinvitacion per las "
"invitacions seleccionadas ?"
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -91,7 +117,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Demanda del tròç XX1 sus %1 del fichièr" msgstr "Demanda del tròç XX1 sus %1 del fichièr"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Tornar a la pagina dacuèlh" msgstr "Tornar a la pagina dacuèlh"
@ -99,7 +125,7 @@ msgstr "Tornar a la pagina dacuèlh"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Marrit geton CSRF!" msgstr "Marrit geton CSRF!"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "Marrit geton CSRF." msgstr "Marrit geton CSRF."
@ -108,11 +134,15 @@ msgid "Click here to refresh the page and restart the download."
msgstr "" msgstr ""
"Clicatz aquí per actualizar la pagina e tornar començar lo telecargament." "Clicatz aquí per actualizar la pagina e tornar començar lo telecargament."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr "Clicatz lURL seguenta per mandar de fichièrs sus Lufi :"
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Clicatz per dobrir lo navigador de fichièr" msgstr "Clicatz per dobrir lo navigador de fichièr"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Tampar" msgstr "Tampar"
@ -120,25 +150,29 @@ msgstr "Tampar"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Adreças de corrièl separadas per de virgulas" msgstr "Adreças de corrièl separadas per de virgulas"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr "Compression del fichièr zip…"
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Copiar totes los ligams al quicha-papièrs" msgstr "Copiar totes los ligams al quicha-papièrs"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copiar al quicha-papièrs" msgstr "Copiar al quicha-papièrs"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "Impossible de suprimir lo fichièr. Sètz pas connectat-ada." msgstr "Impossible de suprimir lo fichièr. Sètz pas connectat-ada."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
"Impossible de trobar lo fichièr. Sètz segur-a que lURL e lo geton son " "Impossible de trobar lo fichièr. Sètz segur-a que lURL e lo geton son "
"bons ?" "bons ?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "Impossible de trobar lo fichièr. Sètz segur-a que lURL es bona?" msgstr "Impossible de trobar lo fichièr. Sètz segur-a que lURL es bona?"
@ -146,7 +180,19 @@ msgstr "Impossible de trobar lo fichièr. Sètz segur-a que lURL es bona?"
msgid "Counter" msgid "Counter"
msgstr "Comptador" msgstr "Comptador"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr "Crear un archiu zip amb los fichièr abans lo mandadís ?"
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr "Creada lo"
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr "Suprimir"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Suprimir aprèp lo primièr telecargament?" msgstr "Suprimir aprèp lo primièr telecargament?"
@ -154,7 +200,7 @@ msgstr "Suprimir aprèp lo primièr telecargament?"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "Suprimir los fichièrs seleccionats" msgstr "Suprimir los fichièrs seleccionats"
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Ligam de supression" msgstr "Ligam de supression"
@ -167,7 +213,7 @@ msgstr ""
"abans son expiracion e que lo telecargament sacaba aprèp lexpiracion, " "abans son expiracion e que lo telecargament sacaba aprèp lexpiracion, "
"utilizaire poirà recuperar lo fichièr." "utilizaire poirà recuperar lo fichièr."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Telecargar" msgstr "Telecargar"
@ -175,7 +221,7 @@ msgstr "Telecargar"
msgid "Download aborted." msgid "Download aborted."
msgstr "Telecargament abandonat." msgstr "Telecargament abandonat."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Ligam de telecargament" msgstr "Ligam de telecargament"
@ -192,10 +238,14 @@ msgstr ""
"chifrats e mandats al servidor. Recuperaretz dos ligams per fichièr:un " "chifrats e mandats al servidor. Recuperaretz dos ligams per fichièr:un "
"ligam de telecargament e un ligam per suprimir lo fichièr quand o volètz." "ligam de telecargament e un ligam per suprimir lo fichièr quand o volètz."
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "Lisatz vòstres fichièrs aquí" msgstr "Lisatz vòstres fichièrs aquí"
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr "Adreça electronica de vòstre convidat"
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Còs del corrièl" msgstr "Còs del corrièl"
@ -208,26 +258,30 @@ msgstr "Subjècte del corrièl"
msgid "Emails" msgid "Emails"
msgstr "Corrièl" msgstr "Corrièl"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "Chiframent del tròç XX1 sus XX2" msgstr "Chiframent del tròç XX1 sus XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Error: lo fichièr existissiá mas es estat suprimit" msgstr "Error: lo fichièr existissiá mas es estat suprimit"
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Error: lo fichièr es pas estat mandat completament" msgstr "Error: lo fichièr es pas estat mandat completament"
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "Error: impossible de trobar lo fichièr. Sètz segur-a de lURL?" msgstr "Error: impossible de trobar lo fichièr. Sètz segur-a de lURL?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Expiracion:" msgstr "Expiracion:"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr "Expira lo"
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Expira lo" msgstr "Expira lo"
@ -236,7 +290,7 @@ msgstr "Expira lo"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Exportar las donadas localStorage" msgstr "Exportar las donadas localStorage"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "Fichièr suprimit" msgstr "Fichièr suprimit"
@ -244,15 +298,27 @@ msgstr "Fichièr suprimit"
msgid "File name" msgid "File name"
msgstr "Nom del fichièr" msgstr "Nom del fichièr"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr "Fichièrs"
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "Fichièr suprimit al primièr telecargament" msgstr "Fichièr suprimit al primièr telecargament"
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr "Fichièrs mandats a"
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr "Fichièrs mandats dins linvitacion XX1 per XX2"
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Recuperar lo fichièr" msgstr "Recuperar lo fichièr"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -262,6 +328,19 @@ msgstr ""
"\"classic\">depaus oficial</a> o sus son <a href=\"https://github.com/ldidry/" "\"classic\">depaus oficial</a> o sus son <a href=\"https://github.com/ldidry/"
"lufi\" class=\"classic\">miralh Github</a>." "lufi\" class=\"classic\">miralh Github</a>."
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr "Corrièl del convidat"
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr "Adiu %1,"
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr "Adiu,"
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "Bonjorn,\\n\\nVaquí qualques fichièrs que desiri partejar amb tu:\\n" msgstr "Bonjorn,\\n\\nVaquí qualques fichièrs que desiri partejar amb tu:\\n"
@ -270,13 +349,17 @@ msgstr "Bonjorn,\\n\\nVaquí qualques fichièrs que desiri partejar amb tu:\\
msgid "Here's some files" msgid "Here's some files"
msgstr "Vaquí qualques fichièrs" msgstr "Vaquí qualques fichièrs"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr "Amagar las invitacions amagadas"
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "" msgstr ""
"Quichatz Entrada puèi fasètz Ctrl+C per copiar totes los ligams per " "Quichatz Entrada puèi fasètz Ctrl+C per copiar totes los ligams per "
"telecargar" "telecargar"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "" msgstr ""
"Quichatz Entrada puèi fasètz Ctrl+C per copiar lo ligam per telecargar" "Quichatz Entrada puèi fasètz Ctrl+C per copiar lo ligam per telecargar"
@ -285,7 +368,11 @@ msgstr ""
msgid "How does it work?" msgid "How does it work?"
msgstr "Cossí aquò fonciona?" msgstr "Cossí aquò fonciona?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr "Quant de jorns volriatz que linvitacion siá valida ?"
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "Cossí installar lo logicial sus mon servidor?" msgstr "Cossí installar lo logicial sus mon servidor?"
@ -310,7 +397,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Importar las donadas localStorage" msgstr "Importar las donadas localStorage"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Important:mai dinformacions suls relambis" msgstr "Important:mai dinformacions suls relambis"
@ -318,6 +405,24 @@ msgstr "Important:mai dinformacions suls relambis"
msgid "Information about delays" msgid "Information about delays"
msgstr "Informacion suls relambis" msgstr "Informacion suls relambis"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr "Invertir la seleccion"
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr "Invitacion mandada tornamai a %1.<br> URL : %2"
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr "Invitacion mandada a %1.<br> URL : %2"
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr "Convidar qualquun"
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -329,7 +434,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Javascript es desactivat. Lufi foncionarà pas." msgstr "Javascript es desactivat. Lufi foncionarà pas."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "Lenga" msgstr "Lenga"
@ -337,7 +442,7 @@ msgstr "Lenga"
msgid "Login" msgid "Login"
msgstr "Identificant" msgstr "Identificant"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Desconnexion" msgstr "Desconnexion"
@ -349,18 +454,33 @@ msgstr "Lufi es un logicial liure dalbèrgament de fichièrs."
msgid "Mail" msgid "Mail"
msgstr "Corrièl" msgstr "Corrièl"
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "Mos fichièrs" msgstr "Mos fichièrs"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr "Mas invitacions"
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
"NB : aquesta lista inclutz la lista dels fichièrs que vos son estats mandats."
""
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr "Nom del fichièr zip"
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "" msgstr ""
"Espaci disc insufisent sul servidor per aqueste fichièr (talha del fichièr:" "Espaci disc insufisent sul servidor per aqueste fichièr (talha del fichièr:"
"\"%1)." "\"%1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Pas cap de relambi dexpiracion" msgstr "Pas cap de relambi dexpiracion"
@ -374,7 +494,7 @@ msgstr ""
"informacions son gardadas en localStorage:se suprimissètz vòstras donadas " "informacions son gardadas en localStorage:se suprimissètz vòstras donadas "
"localStorage, perdretz aquelas informacions." "localStorage, perdretz aquelas informacions."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Senhal" msgstr "Senhal"
@ -392,7 +512,7 @@ msgstr ""
"primièr recuperar e deschifrar totes los tròces abans que poscatz o " "primièr recuperar e deschifrar totes los tròces abans que poscatz o "
"telecargar." "telecargar."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -408,20 +528,40 @@ msgstr "Confidencialitat"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Suprimir del localStorage los fichièrs expirats" msgstr "Suprimir del localStorage los fichièrs expirats"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr "Coralament,"
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr "Coralament."
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "Senhalar un fichièr" msgstr "Senhalar un fichièr"
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr "Tornar mandar lo corrièl dinvitacion"
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr "Las linhas en violet representan las invitacions expiradas."
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
msgstr "" msgstr ""
"Las linhas en roge indican que lo fichièr a expirat e es pas mai disponible." "Las linhas en roge indican que lo fichièr a expirat e es pas mai disponible."
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Mandar totes los ligams per corrièl" msgstr "Mandar totes los ligams per corrièl"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr "Mandar linvitacion"
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Mandar amb aqueste servidor" msgstr "Mandar amb aqueste servidor"
@ -430,7 +570,7 @@ msgstr "Mandar amb aqueste servidor"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Mandar amb vòstre pròpri logicial de corrièl" msgstr "Mandar amb vòstre pròpri logicial de corrièl"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -443,20 +583,51 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Partejatz vòstres fichièrs en tota confidencialitat sus %1" msgstr "Partejatz vòstres fichièrs en tota confidencialitat sus %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr "Far veire las invitacions amagadas"
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr "Mostrar lo contengut del zip"
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Connexion" msgstr "Connexion"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr "O planhèm, linvitacion existís pas. Avètz utilizat la bona URL ?"
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "" msgstr ""
"O planhèm, la foncion per mandar de fichièr es desactivada pel moment. " "O planhèm, la foncion per mandar de fichièr es desactivada pel moment. "
"Mercés de tornar ensajar mai tard." "Mercés de tornar ensajar mai tard."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "O planhèm, la foncion per mandar de fichièr es desactivada." msgstr "O planhèm, la foncion per mandar de fichièr es desactivada."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr "O planhèm, vòstra invitacion a expirada o es estada suprimida."
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
"O planhèm, vòstra invitacion a expirada o es estada suprimida. Contactatz %1 "
"per naver una autra."
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr "Las URL de vòstres fichièrs son estadas mandadas per corrièl a %1."
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -485,7 +656,12 @@ msgstr "Lo contengut del corrièl pòt pas èsser void."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "Lo subjècte del corrièl pòt pas èsser void." msgstr "Lo subjècte del corrièl pòt pas èsser void."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr "Lo relambi dexpiracion (%1) es pas entre 1 e %2 jorns."
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "Lo fichièr es ja estat suprimit" msgstr "Lo fichièr es ja estat suprimit"
@ -503,10 +679,49 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "Las adreças de corrièl seguentas son pas validas: %1" msgstr "Las adreças de corrièl seguentas son pas validas: %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr "Ladreça del convida (%1) es pas valida."
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
"Linvitacion %1 pòt pas èsser tornada manda : %2 mandèt ja de fichièrs."
"<br>Volgatz crear una nòva invitacion."
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr "Linvitacion %1 es estada suprimida."
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr "Lo messatge dinvitacion serà mandat a vòstra adreça electronica (%1)"
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "Lo(s) ligam(s) es/son estat(s) copiat(s) al quicha-papièrs" msgstr "Lo(s) ligam(s) es/son estat(s) copiat(s) al quicha-papièrs"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
"Los ligams de vòstre(s) fichièr(s) seràn automaticament mandats per corrièl "
"a %1 (%2)"
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
"Los ligams de vòstre(s) fichièr(s) seràn automaticament mandats per corrièl "
"a %1."
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "Lo corrièl es estat mandat." msgstr "Lo corrièl es estat mandat."
@ -514,18 +729,12 @@ msgstr "Lo corrièl es estat mandat."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"Lautor original (e pel moment, lo sol) es <a href=\"https://fiat-tux.fr\" " "Lautor original (e pel moment, lo sol) es <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. Savètz enveja de lo sostenir, podètz o far " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"o via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</a>."
""
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -534,13 +743,22 @@ msgstr ""
"que li cal ajustar vòstre tròç de fichièr. Mercés de contactar " "que li cal ajustar vòstre tròç de fichièr. Mercés de contactar "
"ladministrator." "ladministrator."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
"Aqueste fichièr es estat desactivat pels administrators. Contactatz-los per " "Aqueste fichièr es estat desactivat pels administrators. Contactatz-los per "
"saber perque." "saber perque."
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr "Aquesta invitacion es normalament amagada"
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr "Linvitacion es valida fins al %1."
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -551,12 +769,20 @@ msgstr ""
"relambi dexpiracion de vòstre fichièr serà lo minimum entre çò quavètz " "relambi dexpiracion de vòstre fichièr serà lo minimum entre çò quavètz "
"causit e los limits seguents:" "causit e los limits seguents:"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr "Bascular la visibilitat"
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr "URL"
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "Impossible de copiar lo(s) ligams(s) al quicha-papièrs" msgstr "Impossible de copiar lo(s) ligams(s) al quicha-papièrs"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -565,28 +791,32 @@ msgstr ""
"levat de vòstre localStorage." "levat de vòstre localStorage."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "Impossible de recuperar lo comptador per %1. Lo geton es invalid." msgstr "Impossible de recuperar lo comptador per %1. Lo geton es invalid."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "Impossible de recuperar lo comptador per %1. Sètz pas connectat·ada." msgstr "Impossible de recuperar lo comptador per %1. Sètz pas connectat·ada."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Mandar de fichièrs" msgstr "Mandar de fichièrs"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr "Mandar lo fichièr zip generat"
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Mandat lo" msgstr "Mandat lo"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "Fichièrs mandats" msgstr "Fichièrs mandats"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Error de comunicacion WebSocket" msgstr "Error de comunicacion WebSocket"
@ -598,6 +828,18 @@ msgstr "Ques aquò Lufi?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "Qual escriguèt aqueste logicial?" msgstr "Qual escriguèt aqueste logicial?"
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr "XXX fichièrs son estats ajustats a la fila de mandadís"
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
"Podètz convidar qualquun per que vos mande de fichièrs per aquesta "
"instància Lufi encara quajan pas de compte sus aquela daquí."
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -637,7 +879,7 @@ msgstr ""
"Ensajatz de partir de la pagina. Lo telecargament serà anullat. Sètz segur-" "Ensajatz de partir de la pagina. Lo telecargament serà anullat. Sètz segur-"
"a?" "a?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -652,22 +894,23 @@ msgstr "Sètz ben estat desconnectat."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "Vos cal donar dadreças." msgstr "Vos cal donar dadreças."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
"Vòstre navigador a pas pro dentropia per generar una clau de chiframent " "Vòstre navigador a pas pro dentropia per generar una clau de chiframent "
"fòrta. Mercés desperar (es de bon far de realizar de causas a lordenador " "fòrta. Mercés desperar (es de bon far de realizar de causas a lordenador "
"daquel temps)." "daquel temps)."
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "" msgstr ""
"Vòstre fichièr es tròp voluminós:%1 (la talha maximum autorizada es %2)" "Vòstre fichièr es tròp voluminós:%1 (la talha maximum autorizada es %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "" msgstr ""
"Lo senhal es pas valid. Mercés dactualizar la pagina e ensajar tornamai." "Lo senhal es pas valid. Mercés dactualizar la pagina e ensajar tornamai."
@ -686,6 +929,10 @@ msgstr "entre %1 e %2, lo fichièr serà gardat per totjorn. ;"
msgid "deadline: " msgid "deadline: "
msgstr "darrièr relambi per telecargar:" msgstr "darrièr relambi per telecargar:"
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr "expira lo XXX"
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -700,6 +947,11 @@ msgstr "per %1 e mai, lo fichièr serà gardat per totjorn."
msgid "no time limit" msgid "no time limit"
msgstr "Pas cap de relambi dexpiracion" msgstr "Pas cap de relambi dexpiracion"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "o" msgstr "o"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr "— %1 (%2), quexpirarà lo %3"

View File

@ -4,6 +4,7 @@
# Luc Didry <luc@didry.org>, 2015. # Luc Didry <luc@didry.org>, 2015.
# Jéssica Da Cunha <dacunhajessica@hotmail.com>, 2017. # Jéssica Da Cunha <dacunhajessica@hotmail.com>, 2017.
# Luc Didry <luc@framasoft.org>, 2018. #zanata # Luc Didry <luc@framasoft.org>, 2018. #zanata
# Luc Didry <luc@framasoft.org>, 2019. #zanata
msgid "" msgid ""
msgstr "" msgstr ""
"Project-Id-Version: PACKAGE VERSION\n" "Project-Id-Version: PACKAGE VERSION\n"
@ -11,20 +12,44 @@ msgstr ""
"MIME-Version: 1.0\n" "MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n" "Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n" "Content-Transfer-Encoding: 8bit\n"
"PO-Revision-Date: 2018-10-28 01:57+0000\n" "PO-Revision-Date: 2019-04-19 04:58+0000\n"
"Language-Team: \n" "Language-Team: \n"
"X-Generator: Zanata 4.6.2\n" "X-Generator: Zanata 4.6.2\n"
"Last-Translator: Copied by Zanata <copied-by-zanata@zanata.org>\n" "Last-Translator: Luc Didry <luc@framasoft.org>\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n"
"Language: pt\n" "Language: pt\n"
#. ($delay) #. ($delay)
#. (max_delay) #. (max_delay)
#: themes/default/templates/index.html.ep:47 themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:57 #: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66
msgid "%1 days" msgid "%1 days"
msgstr "%1 dias" msgstr "%1 dias"
#: themes/default/templates/partial/index.js.ep:26 #. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:2
msgid "%1 invites you to send him/her files"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:6
msgid "%1 invites you to send him/her files through Lufi."
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:4
msgid "%1 sent you files"
msgstr ""
#. (stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:8
msgid "%1 used your invitation to send you files:"
msgstr ""
#: lib/Lufi/Controller/Invitation.pm:159 lib/Lufi/Controller/Invitation.pm:84 themes/default/templates/invitations/my_invitations.html.ep:51 themes/default/templates/invitations/my_invitations.html.ep:52 themes/default/templates/invitations/my_invitations.html.ep:53 themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "%A %d %B %Y at %T"
msgstr ""
#: themes/default/templates/partial/index.js.ep:27
msgid "(max size: XXX)" msgid "(max size: XXX)"
msgstr "" msgstr ""
@ -32,7 +57,7 @@ msgstr ""
msgid "1 year" msgid "1 year"
msgstr "1 ano" msgstr "1 ano"
#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:56 #: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65
msgid "24 hours" msgid "24 hours"
msgstr "24 horas" msgstr "24 horas"
@ -40,27 +65,15 @@ msgstr "24 horas"
msgid ":" msgid ":"
msgstr " :" msgstr " :"
#: themes/default/templates/about.html.ep:16
msgid ""
"A thank you with a photo of kitten on <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> or "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> "
"is cool too ;-)"
msgstr ""
"Um obrigado com a foto de um gatinho no <a href=\"https://framasphere.org/"
"people/b13eb6b0beac0131e7e32a0000053625\" class=\"classic\">Diaspora*</a> ou "
"<a href=\"https://framapiaf.org/@framasky\" class=\"classic\">Mastodon</a> é "
"também porreiro ;-)"
#: themes/default/templates/render.html.ep:42 #: themes/default/templates/render.html.ep:42
msgid "Abort" msgid "Abort"
msgstr "Interromper" msgstr "Interromper"
#: themes/default/templates/layouts/default.html.ep:48 themes/default/templates/layouts/default.html.ep:76 #: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86
msgid "About" msgid "About"
msgstr "Sobre" msgstr "Sobre"
#: themes/default/templates/index.html.ep:88 #: themes/default/templates/index.html.ep:107
msgid "Add a password to file(s)" msgid "Add a password to file(s)"
msgstr "" msgstr ""
@ -70,7 +83,17 @@ msgid ""
"prohibited." "prohibited."
msgstr "" msgstr ""
#: themes/default/templates/about.html.ep:18 #: themes/default/templates/partial/invitations.js.ep:3
msgid "Are you sure you want to delete the selected invitations?"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:4
msgid ""
"Are you sure you want to resend the invitation mail for the selected "
"invitations?"
msgstr ""
#: themes/default/templates/about.html.ep:17
msgid "" msgid ""
"As Lufi is a free software licensed under of the terms of the <a href=" "As Lufi is a free software licensed under of the terms of the <a href="
"\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can " "\"https://gnu.org/licenses/agpl.html\" class=\"classic\">AGPLv3</a>, you can "
@ -88,7 +111,7 @@ msgstr ""
msgid "Asking for file part XX1 of %1" msgid "Asking for file part XX1 of %1"
msgstr "Pedido de recuperação de um fragmento do ficheiro XX1 de %1" msgstr "Pedido de recuperação de um fragmento do ficheiro XX1 de %1"
#: themes/default/templates/about.html.ep:21 #: themes/default/templates/about.html.ep:20
msgid "Back to homepage" msgid "Back to homepage"
msgstr "Voltar à página inicial" msgstr "Voltar à página inicial"
@ -96,7 +119,7 @@ msgstr "Voltar à página inicial"
msgid "Bad CSRF token!" msgid "Bad CSRF token!"
msgstr "Símbolo errado CSRF !" msgstr "Símbolo errado CSRF !"
#: lib/Lufi/Controller/Auth.pm:22 lib/Lufi/Controller/Auth.pm:39 #: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49
msgid "Bad CSRF token." msgid "Bad CSRF token."
msgstr "" msgstr ""
@ -104,11 +127,15 @@ msgstr ""
msgid "Click here to refresh the page and restart the download." msgid "Click here to refresh the page and restart the download."
msgstr "Clique aqui para atualizar a página e começar o download." msgstr "Clique aqui para atualizar a página e começar o download."
#: themes/default/templates/index.html.ep:98 #: themes/default/templates/invitations/invite.mail.ep:8
msgid "Click on the following URL to upload files on Lufi:"
msgstr ""
#: themes/default/templates/index.html.ep:126
msgid "Click to open the file browser" msgid "Click to open the file browser"
msgstr "Clique para abrir o navegador de ficheiros" msgstr "Clique para abrir o navegador de ficheiros"
#: themes/default/templates/delays.html.ep:38 #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80
msgid "Close" msgid "Close"
msgstr "Fechar" msgstr "Fechar"
@ -116,25 +143,29 @@ msgstr "Fechar"
msgid "Comma-separated email addresses" msgid "Comma-separated email addresses"
msgstr "Os e-mails devem ser separados por vírgulas" msgstr "Os e-mails devem ser separados por vírgulas"
#: themes/default/templates/partial/index.js.ep:14 #: themes/default/templates/index.html.ep:140
msgid "Compressing zip file…"
msgstr ""
#: themes/default/templates/partial/index.js.ep:15
msgid "Copy all links to clipboard" msgid "Copy all links to clipboard"
msgstr "Copiar todos os links para a área de transferência" msgstr "Copiar todos os links para a área de transferência"
#: themes/default/templates/partial/index.js.ep:17 #: themes/default/templates/partial/index.js.ep:18
msgid "Copy to clipboard" msgid "Copy to clipboard"
msgstr "Copiar para a área de transferência" msgstr "Copiar para a área de transferência"
#: lib/Lufi/Controller/Files.pm:460 #: lib/Lufi/Controller/Files.pm:507
msgid "Could not delete the file. You are not authenticated." msgid "Could not delete the file. You are not authenticated."
msgstr "Impossível apagar o ficheiro. Não está conectado." msgstr "Impossível apagar o ficheiro. Não está conectado."
#: lib/Lufi/Controller/Files.pm:442 #: lib/Lufi/Controller/Files.pm:489
msgid "Could not find the file. Are you sure of the URL and the token?" msgid "Could not find the file. Are you sure of the URL and the token?"
msgstr "" msgstr ""
"Impossível encontrar o ficheiro.Tem a certeza que o URL e os símbolos estão " "Impossível encontrar o ficheiro.Tem a certeza que o URL e os símbolos estão "
"corretos?" "corretos?"
#: lib/Lufi/Controller/Files.pm:353 #: lib/Lufi/Controller/Files.pm:400
msgid "Could not find the file. Are you sure of the URL?" msgid "Could not find the file. Are you sure of the URL?"
msgstr "" msgstr ""
"Impossível encontar o ficheiro. Tem a certeza de que o URL está correto?" "Impossível encontar o ficheiro. Tem a certeza de que o URL está correto?"
@ -143,7 +174,19 @@ msgstr ""
msgid "Counter" msgid "Counter"
msgstr "Contador" msgstr "Contador"
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:81 #: themes/default/templates/index.html.ep:100
msgid "Create a zip archive with the files before uploading?"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:26
msgid "Created at"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:14
msgid "Delete"
msgstr ""
#: themes/default/templates/files.html.ep:29 themes/default/templates/index.html.ep:90
msgid "Delete at first download?" msgid "Delete at first download?"
msgstr "Apagar após o primeiro download?" msgstr "Apagar após o primeiro download?"
@ -151,7 +194,7 @@ msgstr "Apagar após o primeiro download?"
msgid "Delete selected files" msgid "Delete selected files"
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:18 #: themes/default/templates/files.html.ep:32 themes/default/templates/partial/index.js.ep:19
msgid "Deletion link" msgid "Deletion link"
msgstr "Eliminar o link" msgstr "Eliminar o link"
@ -164,7 +207,7 @@ msgstr ""
"sua expiração e que o descarregamento acaba após a sua expiração, o " "sua expiração e que o descarregamento acaba após a sua expiração, o "
"utilizador pode ainda assim recuperar o ficheiro." "utilizador pode ainda assim recuperar o ficheiro."
#: themes/default/templates/partial/index.js.ep:20 themes/default/templates/render.html.ep:28 #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28
msgid "Download" msgid "Download"
msgstr "Download" msgstr "Download"
@ -172,7 +215,7 @@ msgstr "Download"
msgid "Download aborted." msgid "Download aborted."
msgstr "Download interrompido." msgstr "Download interrompido."
#: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:19 #: themes/default/templates/files.html.ep:27 themes/default/templates/partial/index.js.ep:20
msgid "Download link" msgid "Download link"
msgstr "Link para o download" msgstr "Link para o download"
@ -189,10 +232,14 @@ msgstr ""
"enviados ao servidor. Vai receber dois links por ficheiro: um é de download " "enviados ao servidor. Vai receber dois links por ficheiro: um é de download "
"e o outro para poder apagar o ficheiro quando quiser." "e o outro para poder apagar o ficheiro quando quiser."
#: themes/default/templates/index.html.ep:94 #: themes/default/templates/index.html.ep:122
msgid "Drop files here" msgid "Drop files here"
msgstr "" msgstr ""
#: themes/default/templates/invitations/invite.html.ep:40
msgid "Email address of your guest"
msgstr ""
#: themes/default/templates/mail.html.ep:39 #: themes/default/templates/mail.html.ep:39
msgid "Email body" msgid "Email body"
msgstr "Conteúdo do e-mail" msgstr "Conteúdo do e-mail"
@ -205,26 +252,30 @@ msgstr "Assunto do e-mail"
msgid "Emails" msgid "Emails"
msgstr "E-mails" msgstr "E-mails"
#: themes/default/templates/partial/index.js.ep:21 #: themes/default/templates/partial/index.js.ep:22
msgid "Encrypting part XX1 of XX2" msgid "Encrypting part XX1 of XX2"
msgstr "Codificação do fragmento XX1 de XX2" msgstr "Codificação do fragmento XX1 de XX2"
#: lib/Lufi/Controller/Files.pm:242 #: lib/Lufi/Controller/Files.pm:289
msgid "Error: the file existed but was deleted." msgid "Error: the file existed but was deleted."
msgstr "Erro: o ficheiro existia mas foi apagado." msgstr "Erro: o ficheiro existia mas foi apagado."
#: lib/Lufi/Controller/Files.pm:322 #: lib/Lufi/Controller/Files.pm:369
msgid "Error: the file has not been sent entirely." msgid "Error: the file has not been sent entirely."
msgstr "Erro: o ficheiro não foi enviado na totalidade." msgstr "Erro: o ficheiro não foi enviado na totalidade."
#: lib/Lufi/Controller/Files.pm:332 #: lib/Lufi/Controller/Files.pm:379
msgid "Error: unable to find the file. Are you sure of your URL?" msgid "Error: unable to find the file. Are you sure of your URL?"
msgstr "Erro: impossível encontrar o ficheiro. Tem a certeza do URL?" msgstr "Erro: impossível encontrar o ficheiro. Tem a certeza do URL?"
#: themes/default/templates/partial/index.js.ep:22 #: themes/default/templates/partial/index.js.ep:23
msgid "Expiration:" msgid "Expiration:"
msgstr "Expiração:" msgstr "Expiração:"
#: themes/default/templates/invitations/my_invitations.html.ep:27
msgid "Expire at"
msgstr ""
#: themes/default/templates/files.html.ep:31 #: themes/default/templates/files.html.ep:31
msgid "Expires at" msgid "Expires at"
msgstr "Expira no" msgstr "Expira no"
@ -233,7 +284,7 @@ msgstr "Expira no"
msgid "Export localStorage data" msgid "Export localStorage data"
msgstr "Exportar os dados localStorage" msgstr "Exportar os dados localStorage"
#: lib/Lufi/Controller/Files.pm:424 #: lib/Lufi/Controller/Files.pm:471
msgid "File deleted" msgid "File deleted"
msgstr "Ficheiro apagado" msgstr "Ficheiro apagado"
@ -241,15 +292,27 @@ msgstr "Ficheiro apagado"
msgid "File name" msgid "File name"
msgstr "Nome do ficheiro" msgstr "Nome do ficheiro"
#: themes/default/templates/index.html.ep:71 #: themes/default/templates/invitations/my_invitations.html.ep:61
msgid "Files"
msgstr ""
#: themes/default/templates/index.html.ep:80
msgid "Files deleted at first download" msgid "Files deleted at first download"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:28
msgid "Files sent at"
msgstr ""
#: themes/default/templates/partial/invitations.js.ep:8
msgid "Files sent in invitation XX1 by XX2"
msgstr ""
#: themes/default/templates/partial/render.js.ep:8 #: themes/default/templates/partial/render.js.ep:8
msgid "Get the file" msgid "Get the file"
msgstr "Recuperar o ficheiro" msgstr "Recuperar o ficheiro"
#: themes/default/templates/about.html.ep:19 #: themes/default/templates/about.html.ep:18
msgid "" msgid ""
"Get the source code on <a href=\"https://framagit.org/luc/lufi\" class=" "Get the source code on <a href=\"https://framagit.org/luc/lufi\" class="
"\"classic\">the official repository</a> or on its <a href=\"https://github." "\"classic\">the official repository</a> or on its <a href=\"https://github."
@ -259,6 +322,19 @@ msgstr ""
"\"classic\">o depósito oficial</a> ou então <a href=\"https://github.com/" "\"classic\">o depósito oficial</a> ou então <a href=\"https://github.com/"
"ldidry/lufi\" class=\"classic\">réplicas Github</a>." "ldidry/lufi\" class=\"classic\">réplicas Github</a>."
#: themes/default/templates/invitations/my_invitations.html.ep:24
msgid "Guest mail"
msgstr ""
#. (ucfirst(stash('invitation')
#: themes/default/templates/invitations/notification_files_sent.mail.ep:6
msgid "Hello %1,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:4
msgid "Hello,"
msgstr ""
#: themes/default/templates/partial/mail.js.ep:35 #: themes/default/templates/partial/mail.js.ep:35
msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" msgid "Hello,\\n\\nHere's some files I want to share with you:\\n"
msgstr "" msgstr ""
@ -268,12 +344,16 @@ msgstr ""
msgid "Here's some files" msgid "Here's some files"
msgstr "Aqui estão alguns ficheiros" msgstr "Aqui estão alguns ficheiros"
#: themes/default/templates/partial/index.js.ep:24 #: themes/default/templates/partial/invitations.js.ep:7
msgid "Hide hidden invitations"
msgstr ""
#: themes/default/templates/partial/index.js.ep:25
msgid "Hit Enter, then Ctrl+C to copy all the download links" msgid "Hit Enter, then Ctrl+C to copy all the download links"
msgstr "" msgstr ""
"Clique no Enter e depois Ctrl+C para copiar todos os links de download" "Clique no Enter e depois Ctrl+C para copiar todos os links de download"
#: themes/default/templates/partial/index.js.ep:23 #: themes/default/templates/partial/index.js.ep:24
msgid "Hit Enter, then Ctrl+C to copy the download link" msgid "Hit Enter, then Ctrl+C to copy the download link"
msgstr "Clique no Enter e depois Ctrl+C para copiar o link de download" msgstr "Clique no Enter e depois Ctrl+C para copiar o link de download"
@ -281,7 +361,11 @@ msgstr "Clique no Enter e depois Ctrl+C para copiar o link de download"
msgid "How does it work?" msgid "How does it work?"
msgstr "Como funciona?" msgstr "Como funciona?"
#: themes/default/templates/about.html.ep:17 #: themes/default/templates/invitations/invite.html.ep:46
msgid "How many days would you like the invitation to be valid?"
msgstr ""
#: themes/default/templates/about.html.ep:16
msgid "How to install the software on my server?" msgid "How to install the software on my server?"
msgstr "" msgstr ""
@ -305,7 +389,7 @@ msgstr ""
msgid "Import localStorage data" msgid "Import localStorage data"
msgstr "Importar os dados localStorage" msgstr "Importar os dados localStorage"
#: themes/default/templates/index.html.ep:44 #: themes/default/templates/index.html.ep:53
msgid "Important: more information on delays" msgid "Important: more information on delays"
msgstr "Importante: mais informações sobre os prazos" msgstr "Importante: mais informações sobre os prazos"
@ -313,6 +397,24 @@ msgstr "Importante: mais informações sobre os prazos"
msgid "Information about delays" msgid "Information about delays"
msgstr "Informação sobre os prazos" msgstr "Informação sobre os prazos"
#: themes/default/templates/invitations/my_invitations.html.ep:12
msgid "Invert selection"
msgstr ""
#. ($i->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:171
msgid "Invitation resent to %1.<br> URL: %2"
msgstr ""
#. ($invitation->guest_mail, $url)
#: lib/Lufi/Controller/Invitation.pm:87
msgid "Invitation sent to %1.<br> URL: %2"
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:27 themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:69
msgid "Invite a guest"
msgstr ""
#: themes/default/templates/partial/render.js.ep:6 #: themes/default/templates/partial/render.js.ep:6
msgid "" msgid ""
"It seems that the key in your URL is incorrect. Please, verify your URL." "It seems that the key in your URL is incorrect. Please, verify your URL."
@ -323,7 +425,7 @@ msgstr ""
msgid "Javascript is disabled. You won't be able to use Lufi." msgid "Javascript is disabled. You won't be able to use Lufi."
msgstr "Javascript está desativado. Lufi não funcionará." msgstr "Javascript está desativado. Lufi não funcionará."
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:68 #: themes/default/templates/layouts/default.html.ep:44 themes/default/templates/layouts/default.html.ep:46 themes/default/templates/layouts/default.html.ep:77 themes/default/templates/layouts/default.html.ep:79
msgid "Language" msgid "Language"
msgstr "" msgstr ""
@ -331,7 +433,7 @@ msgstr ""
msgid "Login" msgid "Login"
msgstr "Utilizador" msgstr "Utilizador"
#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:78 #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91
msgid "Logout" msgid "Logout"
msgstr "Encerrar sessão" msgstr "Encerrar sessão"
@ -345,17 +447,30 @@ msgstr ""
msgid "Mail" msgid "Mail"
msgstr "" msgstr ""
#: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:62 #: themes/default/templates/files.html.ep:3 themes/default/templates/layouts/default.html.ep:34 themes/default/templates/layouts/default.html.ep:67
msgid "My files" msgid "My files"
msgstr "Meus ficheiros" msgstr "Meus ficheiros"
#: themes/default/templates/invitations/my_invitations.html.ep:5 themes/default/templates/layouts/default.html.ep:37 themes/default/templates/layouts/default.html.ep:70
msgid "My invitations"
msgstr ""
#: themes/default/templates/invitations/notification_files_sent.mail.ep:17
msgid ""
"NB: this list includes the list of files that have already been sent to you."
msgstr ""
#: themes/default/templates/index.html.ep:115
msgid "Name of the zip file"
msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:79 #: lib/Lufi/Controller/Files.pm:108
msgid "No enough space available on the server for this file (size: %1)." msgid "No enough space available on the server for this file (size: %1)."
msgstr "" msgstr ""
"O servidor não tem espaço suficiente para este ficheiro (tamanho: %1)." "O servidor não tem espaço suficiente para este ficheiro (tamanho: %1)."
#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:27 #: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28
msgid "No expiration delay" msgid "No expiration delay"
msgstr "Não tem prazo de expiração" msgstr "Não tem prazo de expiração"
@ -369,7 +484,7 @@ msgstr ""
"informações são armazenadas no localStorage : se apagar os seus dados no " "informações são armazenadas no localStorage : se apagar os seus dados no "
"LocalStorage, poedrá perder essa informação." "LocalStorage, poedrá perder essa informação."
#: themes/default/templates/index.html.ep:87 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26
msgid "Password" msgid "Password"
msgstr "Palavra-passe" msgstr "Palavra-passe"
@ -387,7 +502,7 @@ msgstr ""
"recuperar e descodificar todos os fragmentos e depois poderá descarregar o " "recuperar e descodificar todos os fragmentos e depois poderá descarregar o "
"ficheiro." "ficheiro."
#: lib/Lufi/Controller/Auth.pm:28 #: lib/Lufi/Controller/Auth.pm:38
msgid "" msgid ""
"Please, check your credentials or your right to access this service: unable " "Please, check your credentials or your right to access this service: unable "
"to authenticate." "to authenticate."
@ -401,10 +516,26 @@ msgstr "Privacidade"
msgid "Purge expired files from localStorage" msgid "Purge expired files from localStorage"
msgstr "Apagar do localStorage os ficheiros expirados" msgstr "Apagar do localStorage os ficheiros expirados"
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:59 #: themes/default/templates/invitations/notification_files_sent.mail.ep:20
msgid "Regards,"
msgstr ""
#: themes/default/templates/invitations/invite.mail.ep:15
msgid "Regards."
msgstr ""
#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64
msgid "Report file" msgid "Report file"
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:15
msgid "Resend invitation mail"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:9
msgid "Rows in purple mean that the invitations have expired."
msgstr ""
#: themes/default/templates/files.html.ep:9 #: themes/default/templates/files.html.ep:9
msgid "" msgid ""
"Rows in red mean that the files have expired and are no longer available." "Rows in red mean that the files have expired and are no longer available."
@ -412,10 +543,14 @@ msgstr ""
"As linhas a vermelho indicam que o ficheiro expirou e já não está disponível." "As linhas a vermelho indicam que o ficheiro expirou e já não está disponível."
"" ""
#: themes/default/templates/partial/index.js.ep:25 #: themes/default/templates/partial/index.js.ep:26
msgid "Send all links by email" msgid "Send all links by email"
msgstr "Enviar todos os links por e-mail" msgstr "Enviar todos os links por e-mail"
#: themes/default/templates/invitations/invite.html.ep:50
msgid "Send the invitation"
msgstr ""
#: themes/default/templates/mail.html.ep:46 #: themes/default/templates/mail.html.ep:46
msgid "Send with this server" msgid "Send with this server"
msgstr "Enviar com este servidor" msgstr "Enviar com este servidor"
@ -424,7 +559,7 @@ msgstr "Enviar com este servidor"
msgid "Send with your own mail software" msgid "Send with your own mail software"
msgstr "Enviar com o seu e-mail pessoal" msgstr "Enviar com o seu e-mail pessoal"
#: themes/default/templates/partial/index.js.ep:28 #: themes/default/templates/partial/index.js.ep:29
msgid "" msgid ""
"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "Sending part XX1 of XX2. Please, be patient, the progress bar can take a "
"while to move." "while to move."
@ -437,19 +572,48 @@ msgstr ""
msgid "Share your files in total privacy on %1" msgid "Share your files in total privacy on %1"
msgstr "Partilhe os seus ficheiros com toda a privacidade em %1" msgstr "Partilhe os seus ficheiros com toda a privacidade em %1"
#: themes/default/templates/layouts/default.html.ep:36 themes/default/templates/layouts/default.html.ep:64 themes/default/templates/login.html.ep:27 themes/default/templates/logout.html.ep:17 #: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9
msgid "Show hidden invitations"
msgstr ""
#: themes/default/templates/partial/render.js.ep:11
msgid "Show zip content"
msgstr ""
#: themes/default/templates/layouts/default.html.ep:40 themes/default/templates/layouts/default.html.ep:73 themes/default/templates/login.html.ep:28 themes/default/templates/logout.html.ep:17
msgid "Signin" msgid "Signin"
msgstr "Conexão" msgstr "Conexão"
#: themes/default/templates/index.html.ep:37 #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16
msgid ""
"Sorry, the invitation doesnt exist. Are you sure you are on the right URL?"
msgstr ""
#: themes/default/templates/index.html.ep:46
msgid "Sorry, the uploading is currently disabled. Please try again later." msgid "Sorry, the uploading is currently disabled. Please try again later."
msgstr "" msgstr ""
"Desculpe, o envio do ficheiro está atualmente desativado. Tente mais tarde." "Desculpe, o envio do ficheiro está atualmente desativado. Tente mais tarde."
#: lib/Lufi/Controller/Files.pm:53 #: lib/Lufi/Controller/Files.pm:82
msgid "Sorry, uploading is disabled." msgid "Sorry, uploading is disabled."
msgstr "Desculpe, o envio do ficheiro está desativado." msgstr "Desculpe, o envio do ficheiro está desativado."
#: themes/default/templates/invitations/exception.html.ep:7
msgid "Sorry, your invitation has expired or has been deleted."
msgstr ""
#. ($invit->ldap_user_mail)
#: lib/Lufi/Controller/Files.pm:122
msgid ""
"Sorry, your invitation has expired or has been deleted. Please contact %1 to "
"have another invitation."
msgstr ""
#. ($invitation->ldap_user_mail)
#: lib/Lufi/Controller/Invitation.pm:276
msgid "The URLs of your files have been sent by email to %1."
msgstr ""
#: themes/default/templates/about.html.ep:7 #: themes/default/templates/about.html.ep:7
msgid "" msgid ""
"The administrator can only see the file's name, its size and its mimetype " "The administrator can only see the file's name, its size and its mimetype "
@ -476,7 +640,12 @@ msgstr "A mensagem do e-mail não pode estar vazia."
msgid "The email subject can't be empty." msgid "The email subject can't be empty."
msgstr "O assunto do e-mail não pode estar vazio." msgstr "O assunto do e-mail não pode estar vazio."
#: lib/Lufi/Controller/Files.pm:421 #. ($expire_at, $max_expire_at)
#: lib/Lufi/Controller/Invitation.pm:51
msgid "The expiration delay (%1) is not between 1 and %2 days."
msgstr ""
#: lib/Lufi/Controller/Files.pm:468
msgid "The file has already been deleted" msgid "The file has already been deleted"
msgstr "O ficheiro já foi apagado" msgstr "O ficheiro já foi apagado"
@ -493,10 +662,43 @@ msgstr ""
msgid "The following email addresses are not valid: %1" msgid "The following email addresses are not valid: %1"
msgstr "Os e-mails seguintes não são válidos: %1" msgstr "Os e-mails seguintes não são válidos: %1"
#: themes/default/templates/partial/index.js.ep:15 #. ($guest_mail)
#: lib/Lufi/Controller/Invitation.pm:48
msgid "The guest email address (%1) is unvalid."
msgstr ""
#. ($i->token, $i->guest_mail)
#: lib/Lufi/Controller/Invitation.pm:150
msgid ""
"The invitation %1 cant be resent: %2 has already sent files.<br>Please "
"create a new invitation."
msgstr ""
#. ($i->token)
#: lib/Lufi/Controller/Invitation.pm:130
msgid "The invitation %1 has been deleted."
msgstr ""
#. (stash('user_mail')
#: themes/default/templates/invitations/invite.html.ep:34
msgid "The invitation mail will be send from your email address (%1)."
msgstr ""
#: themes/default/templates/partial/index.js.ep:16
msgid "The link(s) has been copied to your clipboard" msgid "The link(s) has been copied to your clipboard"
msgstr "O(s) link(s) foi/foram copiados para a área de transferência" msgstr "O(s) link(s) foi/foram copiados para a área de transferência"
#. (stash('invitation')
#: themes/default/templates/index.html.ep:30
msgid ""
"The link(s) of your file(s) will automatically be sent by mail to %1 (%2)"
msgstr ""
#. (stash('ldap_user')
#: themes/default/templates/invitations/invite.mail.ep:11
msgid "The links of your file(s) will automatically be sent by mail to %1."
msgstr ""
#: lib/Lufi/Controller/Mail.pm:97 #: lib/Lufi/Controller/Mail.pm:97
msgid "The mail has been sent." msgid "The mail has been sent."
msgstr "O e-mail foi enviado." msgstr "O e-mail foi enviado."
@ -504,17 +706,12 @@ msgstr "O e-mail foi enviado."
#: themes/default/templates/about.html.ep:15 #: themes/default/templates/about.html.ep:15
msgid "" msgid ""
"The original (and only for now) author is <a href=\"https://fiat-tux.fr\" " "The original (and only for now) author is <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. If you want to support him, you can do it " "class=\"classic\">Luc Didry</a>."
"via <a href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> "
"or via <a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</"
"a>."
msgstr "" msgstr ""
"O autor original (e por agora, o único) é <a href=\"https://fiat-tux.fr\" " "O autor original (e por agora, o único) é <a href=\"https://fiat-tux.fr\" "
"class=\"classic\">Luc Didry</a>. Se o desejar apoiar pode fazer-lo via <a " "class=\"classic\">Luc Didry</a>."
"href=\"https://www.tipeee.com/fiat-tux\" class=\"classic\">Tipeee</a> ou via "
"<a href=\"https://liberapay.com/sky/\" class=\"classic\">Liberapay</a>."
#: lib/Lufi/Controller/Files.pm:189 #: lib/Lufi/Controller/Files.pm:236
msgid "" msgid ""
"The server was unable to find the file record to add your file part to. " "The server was unable to find the file record to add your file part to. "
"Please, contact the administrator." "Please, contact the administrator."
@ -522,11 +719,20 @@ msgstr ""
"O servidor foi incapaz de encontrar o registo do ficheiro no qual devia-se " "O servidor foi incapaz de encontrar o registo do ficheiro no qual devia-se "
"juntar o fragmento do seu ficheiro. Contacte o administrador." "juntar o fragmento do seu ficheiro. Contacte o administrador."
#: lib/Lufi/Controller/Files.pm:248 #: lib/Lufi/Controller/Files.pm:295
msgid "" msgid ""
"This file has been deactivated by the admins. Contact them to know why." "This file has been deactivated by the admins. Contact them to know why."
msgstr "" msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6
msgid "This invitation is normally hidden"
msgstr ""
#. (stash('expires')
#: themes/default/templates/invitations/invite.mail.ep:13
msgid "This invitation is valid until %1."
msgstr ""
#: themes/default/templates/delays.html.ep:10 #: themes/default/templates/delays.html.ep:10
msgid "" msgid ""
"This server sets limitations according to the file size. The expiration " "This server sets limitations according to the file size. The expiration "
@ -537,12 +743,20 @@ msgstr ""
"expiração dos seu ficheiro sera o minimo entre o que você escolheu e os " "expiração dos seu ficheiro sera o minimo entre o que você escolheu e os "
"limites seguintes:" "limites seguintes:"
#: themes/default/templates/partial/index.js.ep:16 #: themes/default/templates/invitations/my_invitations.html.ep:16
msgid "Toggle visibility"
msgstr ""
#: themes/default/templates/invitations/my_invitations.html.ep:25
msgid "URL"
msgstr ""
#: themes/default/templates/partial/index.js.ep:17
msgid "Unable to copy the link(s) to your clipboard" msgid "Unable to copy the link(s) to your clipboard"
msgstr "Impossível copiar o(s) link(s) na sua área de transferência" msgstr "Impossível copiar o(s) link(s) na sua área de transferência"
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:392 #: lib/Lufi/Controller/Files.pm:439
msgid "" msgid ""
"Unable to get counter for %1. The file does not exists. It will be removed " "Unable to get counter for %1. The file does not exists. It will be removed "
"from your localStorage." "from your localStorage."
@ -551,28 +765,32 @@ msgstr ""
"apagar a sua localStorage." "apagar a sua localStorage."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:382 #: lib/Lufi/Controller/Files.pm:429
msgid "Unable to get counter for %1. The token is invalid." msgid "Unable to get counter for %1. The token is invalid."
msgstr "Impossível recuperar o contador para %1. O símbolo é inválido." msgstr "Impossível recuperar o contador para %1. O símbolo é inválido."
#. ($short) #. ($short)
#: lib/Lufi/Controller/Files.pm:402 #: lib/Lufi/Controller/Files.pm:449
msgid "Unable to get counter for %1. You are not authenticated." msgid "Unable to get counter for %1. You are not authenticated."
msgstr "Impossível recuperar o contador para %1. Não está conectado." msgstr "Impossível recuperar o contador para %1. Não está conectado."
#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:61 #: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66
msgid "Upload files" msgid "Upload files"
msgstr "Enviar os ficheiros" msgstr "Enviar os ficheiros"
#: themes/default/templates/index.html.ep:145
msgid "Upload generated zip file"
msgstr ""
#: themes/default/templates/files.html.ep:30 #: themes/default/templates/files.html.ep:30
msgid "Uploaded at" msgid "Uploaded at"
msgstr "Enviar a" msgstr "Enviar a"
#: themes/default/templates/index.html.ep:103 #: themes/default/templates/index.html.ep:153
msgid "Uploaded files" msgid "Uploaded files"
msgstr "Ficheiros enviados" msgstr "Ficheiros enviados"
#: themes/default/templates/partial/index.js.ep:29 #: themes/default/templates/partial/index.js.ep:30
msgid "Websocket communication error" msgid "Websocket communication error"
msgstr "Erro de comunicação com WebSocket" msgstr "Erro de comunicação com WebSocket"
@ -584,6 +802,16 @@ msgstr "O que é o Lufi?"
msgid "Who wrote this software?" msgid "Who wrote this software?"
msgstr "" msgstr ""
#: themes/default/templates/partial/index.js.ep:13
msgid "XXX file has been added to upload queue."
msgstr ""
#: themes/default/templates/invitations/invite.html.ep:30
msgid ""
"You can invite someone to send you files through this Lufi instance even if "
"they dont have an account on it."
msgstr ""
#: themes/default/templates/about.html.ep:11 #: themes/default/templates/about.html.ep:11
msgid "" msgid ""
"You can see the list of your files by clicking on the \"My files\" link at " "You can see the list of your files by clicking on the \"My files\" link at "
@ -620,7 +848,7 @@ msgid ""
"you sure?" "you sure?"
msgstr "Está a tentar sair da página. O download será anulado. Tem a certeza?" msgstr "Está a tentar sair da página. O download será anulado. Tem a certeza?"
#: themes/default/templates/partial/index.js.ep:13 #: themes/default/templates/partial/index.js.ep:14
msgid "" msgid ""
"You have attempted to leave this page. The upload will be canceled. Are you " "You have attempted to leave this page. The upload will be canceled. Are you "
"sure?" "sure?"
@ -634,19 +862,20 @@ msgstr "Foi desconectado com sucesso."
msgid "You must give email addresses." msgid "You must give email addresses."
msgstr "Deve escrever os e-mails." msgstr "Deve escrever os e-mails."
#: themes/default/templates/index.html.ep:29 #: themes/default/templates/index.html.ep:38
msgid "" msgid ""
"Your browser has not enough entropy to generate a strong encryption key. " "Your browser does not have enough entropy to generate a strong encryption "
"Please wait (it's better if you do things on your computer while waiting)." "key. Please wait (it's better if you do things on your computer while "
"waiting)."
msgstr "" msgstr ""
#. (format_bytes($json->{size}) #. (format_bytes($json->{size})
#: lib/Lufi/Controller/Files.pm:66 #: lib/Lufi/Controller/Files.pm:95
msgid "Your file is too big: %1 (maximum size allowed: %2)" msgid "Your file is too big: %1 (maximum size allowed: %2)"
msgstr "" msgstr ""
"O seu ficheiro é grande de mais: %1 (o tamanho máximo autorizado é de %2)" "O seu ficheiro é grande de mais: %1 (o tamanho máximo autorizado é de %2)"
#: lib/Lufi/Controller/Files.pm:304 #: lib/Lufi/Controller/Files.pm:351
msgid "Your password is not valid. Please refresh the page to retry." msgid "Your password is not valid. Please refresh the page to retry."
msgstr "" msgstr ""
@ -664,6 +893,10 @@ msgstr "entre %1 e %2, o ficheiro será conservado por um tempo indeterminado."
msgid "deadline: " msgid "deadline: "
msgstr "Data-limite: " msgstr "Data-limite: "
#: themes/default/templates/partial/invitations.js.ep:5
msgid "expires on XXX"
msgstr ""
#. (format_bytes($keys[$i]) #. (format_bytes($keys[$i])
#: themes/default/templates/delays.html.ep:26 #: themes/default/templates/delays.html.ep:26
msgid "for %1 and more, the file will be kept %2 day(s)" msgid "for %1 and more, the file will be kept %2 day(s)"
@ -679,6 +912,11 @@ msgstr ""
msgid "no time limit" msgid "no time limit"
msgstr "Não tem limite de expiração" msgstr "Não tem limite de expiração"
#: themes/default/templates/index.html.ep:96 #: themes/default/templates/index.html.ep:124
msgid "or" msgid "or"
msgstr "ou" msgstr "ou"
#. ($e->{name}, format_bytes($e->{size})
#: themes/default/templates/invitations/notification_files_sent.mail.ep:12
msgid "— %1 (%2), that will expire on %3"
msgstr ""

View File

@ -140,6 +140,89 @@ nav .btn-flat {
nav .btn-flat:focus { nav .btn-flat:focus {
background-color: rgba(0,0,0,0.1) !important; background-color: rgba(0,0,0,0.1) !important;
} }
/* pulse animation from Materialize CSS 1.0.0 */
button.pulse {
margin-left: 1em;
}
.pulse {
overflow: initial;
position: relative;
}
.pulse::before {
content: '';
display: block;
position: absolute;
width: 100%;
height: 100%;
top: 0;
left: 0;
background-color: inherit;
border-radius: inherit;
-webkit-transition: opacity .3s, -webkit-transform .3s;
transition: opacity .3s, -webkit-transform .3s;
transition: opacity .3s, transform .3s;
transition: opacity .3s, transform .3s, -webkit-transform .3s;
-webkit-animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;
animation: pulse-animation 1s cubic-bezier(0.24, 0, 0.38, 1) infinite;
z-index: -1;
}
@-webkit-keyframes pulse-animation {
0% {
opacity: 1;
-webkit-transform: scale(1);
transform: scale(1);
}
50% {
opacity: 0;
-webkit-transform: scale(1.5);
transform: scale(1.5);
}
100% {
opacity: 0;
-webkit-transform: scale(1.5);
transform: scale(1.5);
}
}
@keyframes pulse-animation {
0% {
opacity: 1;
-webkit-transform: scale(1);
transform: scale(1);
}
50% {
opacity: 0;
-webkit-transform: scale(1.5);
transform: scale(1.5);
}
100% {
opacity: 0;
-webkit-transform: scale(1.5);
transform: scale(1.5);
}
}
.margin-bottom-35 {
margin-bottom: 35px;
}
.toast.teal.accent-3,
.toast.red.accent-2 {
color: black;
}
.offscreen {
clip-path: inset(100%);
clip: rect(1px 1px 1px 1px); /* IE 6/7 */
clip: rect(1px, 1px, 1px, 1px);
height: 1px;
overflow: hidden;
position: absolute;
white-space: nowrap; /* added line */
width: 1px;
}
.small-h1 {
font-size: 2.2rem;
}
.white-background { .white-background {
background-color: #FFF; background-color: #FFF;
} }

File diff suppressed because it is too large Load Diff

15
themes/default/public/js/jszip.min.js vendored Normal file

File diff suppressed because one or more lines are too long

View File

@ -106,6 +106,7 @@ function spawnWebsocket(pa) {
} }
var innerHTML = ['<p><a href="', blobURL, '" class="btn btn-primary" download="', escapeHtml(data.name), '">', i18n.download, '</a></p>']; var innerHTML = ['<p><a href="', blobURL, '" class="btn btn-primary" download="', escapeHtml(data.name), '">', i18n.download, '</a></p>'];
var isZip = ($('#filesize').attr('data-zipped') === 'true');
if (data.type.match(/^image\//) !== null) { if (data.type.match(/^image\//) !== null) {
innerHTML.push('<img id="render-image" class="responsive-img" alt="', escapeHtml(data.name), '" src="', blobURL, '">'); innerHTML.push('<img id="render-image" class="responsive-img" alt="', escapeHtml(data.name), '" src="', blobURL, '">');
} else if (data.type.match(/^video\//) !== null) { } else if (data.type.match(/^video\//) !== null) {
@ -116,9 +117,45 @@ function spawnWebsocket(pa) {
innerHTML.push('<audio class="responsive-video" controls>', innerHTML.push('<audio class="responsive-video" controls>',
'<source src="', blobURL, '" type="', data.type, '">', '<source src="', blobURL, '" type="', data.type, '">',
'</audio>'); '</audio>');
} else if (isZip) {
innerHTML.push('<p><a class="btn btn-primary" id="showZipContent">', i18n.showZipContent, '</a></p>');
} }
pbd.html(innerHTML.join('')); pbd.html(innerHTML.join(''));
if (isZip) {
$('#showZipContent').click(function() {
JSZip.loadAsync(blob)
.then(function (zip) {
var innerHTML = ['<h3>Zip content:</h3><ul>'];
zip.forEach(function (relativePath, zipEntry) {
innerHTML.push(
'<li>',
zipEntry.name,
' (', filesize(zipEntry._data.uncompressedSize, {base: 10}), ') ',
'<a href="#" download="', zipEntry.name, '" class="download-zip-content" title="', i18n.download, '">',
'<i class="mdi-file-file-download"></i>',
'</a>',
'</li>'
);
});
innerHTML.push('</ul>');
pbd.append(innerHTML.join(''));
$('.download-zip-content').click(function(e) {
e.preventDefault();
var t = $(this);
var filename = t.attr('download');
zip.files[filename].async('blob').then(function(blob) {
t.unbind('click');
t.attr('href', URL.createObjectURL(blob));
t[0].click();
});
})
$('#showZipContent').hide();
$('#showZipContent').unbind('click');
});
});
}
if ($('#file_pwd').length === 1) { if ($('#file_pwd').length === 1) {
window.ws.send('{"ended":true, "file_pwd": "'+$('#file_pwd').val()+'"}'); window.ws.send('{"ended":true, "file_pwd": "'+$('#file_pwd').val()+'"}');
} else { } else {

View File

@ -0,0 +1,194 @@
function invertSelection(e) {
e.preventDefault();
$('#myInvitations input[type="checkbox"]').each(function () {
var el = $(this);
var tr = el.parent().parent();
if (!tr.hasClass('hide')) {
el.click();
}
})
}
function toggleHidden(e) {
e.preventDefault();
if ($('#myInvitations').attr('data-visibility') === 'hidden') {
$('#toggleHidden').text(i18n.hideText);
$('tr[data-visibility="0"]').removeClass('hide');
$('#myInvitations').attr('data-visibility', 'shown');
} else {
$('#toggleHidden').text(i18n.showText);
$('tr[data-visibility="0"]').addClass('hide');
$('tr[data-visibility="0"] input[type="checkbox"]').each(function() {
var el = $(this);
if (el.attr('data-checked') === 'data-checked') {
$('tr[data-visibility="0"] input[type="checkbox"]').click();
}
});
$('#myInvitations').attr('data-visibility', 'hidden');
}
}
function deleteInvit(e) {
e.preventDefault();
if (confirm(i18n.confirmDeleteInvit)) {
var tokens = selectChecked();
$.ajax({
url: deleteURL,
method: 'POST',
data: {
tokens: tokens
},
success: function(data, textStatus, jqXHR) {
if (data.success) {
data.tokens.forEach(function(t) {
Materialize.toast(t.msg, 6000, 'teal accent-3');
$('#row-' + t.token).remove();
});
disableButtons();
} else {
Materialize.toast(data.msg, 10000, 'red accent-2');
}
}
});
}
}
function resendMail(e) {
e.preventDefault();
if (confirm(i18n.confirmResendMail)) {
var tokens = selectChecked();
$.ajax({
url: resendURL,
method: 'POST',
data: {
tokens: tokens
},
success: function(data, textStatus, jqXHR) {
data.success.forEach(function(s) {
Materialize.toast(s.msg, 6000, 'teal accent-3');
$('#expire-' + s.token).text(s.expires)
$('#' + s.token).click();
});
data.failures.forEach(function(msg) {
Materialize.toast(msg, 10000, 'red accent-2');
});
}
});
}
}
function toggleVisibility(e) {
e.preventDefault();
var tokens = selectChecked();
$.ajax({
url: toggleURL,
method: 'POST',
data: {
tokens: tokens
},
success: function(data, textStatus, jqXHR) {
if (data.success) {
data.tokens.forEach(function(t) {
var row = $('#row-' + t.token)
if (t.show) {
row.attr('data-visibility', 1);
row.removeClass('hide');
$('#row-' + t.token + ' > td:first i').remove();
} else {
row.attr('data-visibility', 0);
if ($('#myInvitations').attr('data-visibility') === 'hidden') {
row.addClass('hide');
}
$('#row-' + t.token + ' > td:first').append(i18n.hiddenMark);
}
$('#' + t.token).click();
});
disableButtons();
} else {
Materialize.toast(data.msg, 10000, 'red accent-2');
}
}
});
}
function selectChecked() {
var tokens = [];
$('#myInvitations input[type="checkbox"][data-checked="data-checked"]').each(function() {
tokens.push($(this).attr('id'));
});
return tokens;
}
function handleCheckboxClic() {
var el = $(this);
if (el.attr('data-checked') === 'data-checked') {
el.attr('data-checked', null);
} else {
el.attr('data-checked', 'data-checked');
}
if ($('#myInvitations input[type="checkbox"][data-checked="data-checked"]').length !== 0) {
$('#deleteInvit').removeClass('disabled');
$('#deleteInvit').attr('disabled', null);
$('#resendMail').removeClass('disabled');
$('#resendMail').attr('disabled', null);
$('#toggleVisibility').removeClass('disabled');
$('#toggleVisibility').attr('disabled', null);
} else {
disableButtons();
}
}
function disableButtons() {
$('#deleteInvit').addClass('disabled');
$('#deleteInvit').attr('disabled', 'disabled');
$('#resendMail').addClass('disabled');
$('#resendMail').attr('disabled', 'disabled');
$('#toggleVisibility').addClass('disabled');
$('#toggleVisibility').attr('disabled', 'disabled');
}
function fillModal() {
var el = $(this);
$('#files-info h1').text('');
$('#files-ul').html('');
var token = el.attr('data-token');
var guest = el.attr('data-guest');
$('#files-info h1').text(
i18n.listFiles.replace('XX1', token)
.replace('XX2', guest)
);
var files = JSON.parse(el.attr('data-files'));
var content = [];
for (i = 0; i < files.length; i++) {
var f = files[i];
var expires = i18n.expiration.replace('XXX',
moment.unix(f.delay * 86400 + f.created_at).locale(window.navigator.language).format('LLLL')
);
content.push(
'<li>— ',
'<a href="', f.url, '">',
f.name,
'</a> (',
filesize(f.size),
', ',
expires,
')',
'</li>',
);
}
$('#files-ul').html(content.join(''));
}
$(document).ready(function(){
$('.modal-trigger').leanModal();
$('.modal-trigger').on('click', fillModal);
$('#invertSelection').on('click', invertSelection);
$('#toggleHidden').on('click', toggleHidden);
$('#deleteInvit').on('click', deleteInvit);
$('#resendMail').on('click', resendMail);
$('#toggleVisibility').on('click', toggleVisibility);
$('#myInvitations input[type="checkbox"]').on('click', handleCheckboxClic);
});

View File

@ -1,10 +1,18 @@
// vim:set sw=4 ts=4 sts=4 ft=javascript expandtab: // vim:set sw=4 ts=4 sts=4 ft=javascript expandtab:
// total file counter
window.fc = 0; window.fc = 0;
// Cancelled files indexes
window.cancelled = [];
// Set websocket // Set websocket
window.ws = spawnWebsocket(0, function() {return null;}); window.ws = spawnWebsocket(0, function() {return null;});
// Use slice of 2MB // Use slice of 2MB
window.sliceLength = 2000000; window.sliceLength = 2000000;
// Global zip objects for currently created zip file
window.zip = null;
window.zipSize = 0;
// Init the list of files (used by LDAP invitation feature)
window.filesURLs = [];
// Copy a link to clipboard // Copy a link to clipboard
function copyToClipboard(txt) { function copyToClipboard(txt) {
@ -74,11 +82,9 @@ function addItem(name, url, size, del_at_first_view, created_at, delay, short, t
function destroyBlock(el) { function destroyBlock(el) {
$(el).parents('li').remove(); $(el).parents('li').remove();
var a = $('.link-input'); if ($('.link-input').length === 0) {
var l = $('#results li');
if (a.length === 0) {
$('#misc').empty(); $('#misc').empty();
if (l.length === 0) { if ($('#results li').length === 0 && window.fileList === null) {
$('#results').hide(); $('#results').hide();
} }
} else { } else {
@ -86,6 +92,98 @@ function destroyBlock(el) {
} }
} }
// When clicking on del at first view checkbox
function firstViewClicking() {
if ($('#first-view').attr('data-checked') && $('#first-view').attr('data-checked') === 'data-checked') {
$('#first-view').attr('data-checked', null);
} else {
$('#first-view').attr('data-checked', 'data-checked');
}
}
// When clicking on zip checkbox
function zipClicking () {
if ($('#zip-files').attr('data-checked') && $('#zip-files').attr('data-checked') === 'data-checked') {
window.zipSize = 0;
window.zip = null;
$('#zip-files').attr('data-checked', null);
$('#zipname').val('documents.zip');
$('#zipname-input').addClass('hide');
$('#zipping').addClass('hide');
$('#files').removeClass('m6').addClass('m12');
$('#zip-parts').html('');
$('#delete-day').attr('disabled', null);
$('#first-view').attr('disabled', null);
} else {
$('#zip-files').attr('data-checked', 'data-checked');
$('#zipname-input').removeClass('hide');
$('#zip-size').text(filesize(window.zipSize));
}
}
// Get the zip file name
function getZipname() {
var zipname = $('#zipname').val();
if (zipname === '') {
zipname = 'documents.zip';
}
if (!zipname.endsWith('.zip')) {
if (zipname.endsWith('.')) {
zipname += 'zip';
} else {
zipname += '.zip';
}
}
return escapeHtml(zipname);
}
// Update the zip name
function updateZipname() {
$('#zip-name').text(getZipname());
}
// Create blob from zip
function uploadZip(e) {
e.preventDefault();
var delay = $('#delete-day');
var del_at_first_view = $('#first-view');
$('#zip-files').attr('disabled', 'disabled');
$('#file-browser-button').attr('disabled', 'disabled');
$('#file-browser-span').addClass('disabled');
$('#uploadZip').addClass('hide');
$('#zip-parts').text('');
$('#zip-compressing').removeClass('hide');
window.zip.generateAsync({type:"blob"})
.then(function(zipFile) {
// if $('#zipping') is hidden, the zipping has been aborted
if (!$('#zipping').hasClass('hide')) {
window.zip = null;
$('#zipping').addClass('hide');
$('#files').removeClass('m6').addClass('m12');
$('#zipname-input').addClass('hide');
$('#zip-compressing').addClass('hide');
$('#uploadZip').removeClass('hide');
$('#results').show();
$('#zip-files').attr('disabled', null);
var zipname = getZipname();
var file = new File([zipFile], zipname, {type: 'application/zip'});
Materialize.toast(i18n.enqueued.replace('XXX', zipname), 3000, 'teal accent-3');
if (window.fileList === undefined || window.fileList === null) {
window.fileList = [file];
uploadFile(0, delay.val(), del_at_first_view.is(':checked'));
} else {
window.fileList.push(file);
}
}
$('#file-browser-button').attr('disabled', null);
$('#file-browser-span').removeClass('disabled');
});
}
// Update the mail link // Update the mail link
function updateMailLink() { function updateMailLink() {
var a = $('.link-input'); var a = $('.link-input');
@ -98,26 +196,76 @@ function updateMailLink() {
$('#mailto').attr('href', u); $('#mailto').attr('href', u);
} }
// [Invitation feature] Send URLs of files to server
function sendFilesURLs() {
if (window.filesURLs.length > 0) {
$.ajax({
url: sendFilesURLsURL,
method: 'POST',
dataType: 'json',
data: {
urls: window.filesURLs
},
success: function(data, textStatus, jqXHR) {
if (data.success) {
Materialize.toast(data.msg, 6000, 'teal accent-3');
} else {
Materialize.toast(data.msg, 10000, 'red accent-2');
}
}
});
}
}
// Start uploading the files (called from <input> and from drop zone) // Start uploading the files (called from <input> and from drop zone)
function handleFiles(f) { function handleFiles(f) {
var go = true;
if (window.fileList === undefined || window.fileList === null) {
window.fileList = Array.prototype.slice.call(f);
} else {
go = false;
window.fileList = window.fileList.concat(Array.prototype.slice.call(f));
}
var r = $('#results');
r.show();
var delay = $('#delete-day'); var delay = $('#delete-day');
var zip_files = $('#zip-files');
var del_at_first_view = $('#first-view'); var del_at_first_view = $('#first-view');
delay.attr('disabled', 'disabled'); delay.attr('disabled', 'disabled');
del_at_first_view.attr('disabled', 'disabled'); del_at_first_view.attr('disabled', 'disabled');
if (go) { if (zip_files.is(':checked')) {
uploadFile(0, delay.val(), del_at_first_view.is(':checked')); if (window.zip === null) {
window.zip = new JSZip();
}
$('#zipping').removeClass('hide');
$('#files').removeClass('m12').addClass('m6');
for (var i = 0; i < f.length; i++) {
var element = f.item(i);
var filename = element.name;
var origname = filename;
var counter = 0;
while (typeof(window.zip.files[filename]) !== 'undefined') {
counter += 1;
filename = origname.substring(0, origname.lastIndexOf('.')) + '_(' + counter + ')' + origname.substring(origname.lastIndexOf('.'));
}
window.zip.file(filename, element);
window.zipSize += element.size;
$('#zip-size').text(filesize(window.zipSize));
$('#zip-parts').append([
'<li>',
'— ', filename, ' (', filesize(element.size), ')',
'</li>'
].join(''));
}
} else {
if (window.fileList === undefined || window.fileList === null) {
window.fileList = Array.prototype.slice.call(f);
for (var i = 0; i < window.fileList.length; i++) {
var file = window.fileList[i];
Materialize.toast(i18n.enqueued.replace('XXX', escapeHtml(file.name)), 3000, 'teal accent-3');
}
window.nbFiles = window.fileList.length;
$('#results').show();
uploadFile(0, delay.val(), del_at_first_view.is(':checked'));
} else {
window.fileList = window.fileList.concat(Array.prototype.slice.call(f));
}
} }
} }
@ -165,196 +313,276 @@ function uploadFile(i, delay, del_at_first_view) {
r.prepend(w); r.prepend(w);
$('#destroy-'+window.fc).on('click', function(event) { $('#destroy-'+window.fc).on('click', function(event) {
event.preventDefault(); event.preventDefault();
destroyBlock(this) window.cancelled.push(i);
destroyBlock(this);
}); });
sliceAndUpload(randomkey, i, parts, 0, delay, del_at_first_view, null); sliceAndUpload(randomkey, i, parts, 0, delay, del_at_first_view, null, null);
} }
// Get a slice of file and send it // Get a slice of file and send it
function sliceAndUpload(randomkey, i, parts, j, delay, del_at_first_view, short) { function sliceAndUpload(randomkey, i, parts, j, delay, del_at_first_view, short, mod_token) {
var file = window.fileList[i]; if (mod_token !== null && window.cancelled.includes(i)) {
var slice = file.slice(j * window.sliceLength, (j + 1) * window.sliceLength, file.type); var data = JSON.stringify({
var fr = new FileReader();
fr.onloadend = function() {
var sl = $('#parts-'+window.fc);
// Get the binary result, different result in IE browsers (see default.html.ep line 27:48)
if (isIE == true){
var bin = fr.content;
} else {
var bin = fr.result;
}
// Transform it in base64
var b = window.btoa(bin);
// Encrypt it
sl.html(i18n.encrypting.replace(/XX1(.*)XX2/, (j+1)+'$1'+parts));
var encrypted = sjcl.encrypt(randomkey, b);
// Prepare json
var data = {
// number of parts
total: parts,
// part X of total
part: j,
size: file.size,
name: file.name,
type: file.type,
delay: delay,
del_at_first_view: del_at_first_view,
id: short, id: short,
// number of the sent file in the queue mod_token: mod_token,
cancel: true,
i: i i: i
}; })+'XXMOJOXXuseless';
if ($('#file_pwd').length === 1) {
var pwd = $('#file_pwd').val();
if (pwd !== undefined && pwd !== null && pwd !== '') {
data['file_pwd'] = $('#file_pwd').val();
}
}
data = JSON.stringify(data);
console.log('sending slice '+(j + 1)+'/'+parts+' of file '+file.name);
sl.html(i18n.sending.replace(/XX1(.*)XX2/, (j+1)+'$1'+parts));
// Verify that we have a websocket and send json // Verify that we have a websocket and send json
if (window.ws.readyState === 3) { if (window.ws.readyState === 3) {
window.ws = spawnWebsocket(0, function() { window.ws = spawnWebsocket(0, function() {
window.ws.send(data+'XXMOJOXX'+JSON.stringify(encrypted)); window.ws.send(data);
}); });
} else { } else {
window.ws.onclose = function() { window.ws.onclose = function() {
console.log('Websocket closed, waiting 10sec.'); console.log('Websocket closed, waiting 10sec.');
window.ws = spawnWebsocket(0, function() { window.ws = spawnWebsocket(0, function() {return null;});
console.log('sending again slice '+(j + 1)+'/'+parts+' of file '+file.name);
window.ws.send(data+'XXMOJOXX'+JSON.stringify(encrypted));
});
}; };
window.ws.onerror = function() { window.ws.onerror = function() {
console.log('Error on Websocket, waiting 10sec.'); console.log('Error on Websocket, waiting 10sec.');
window.ws = spawnWebsocket(0, function() { window.ws = spawnWebsocket(0, function() {return null;});
console.log('sending again slice '+(j + 1)+'/'+parts+' of file '+file.name);
window.ws.send(data+'XXMOJOXX'+JSON.stringify(encrypted));
});
}; };
window.ws.send(data+'XXMOJOXX'+JSON.stringify(encrypted)); window.ws.send(data);
} }
} else {
var file = window.fileList[i];
var slice = file.slice(j * window.sliceLength, (j + 1) * window.sliceLength, file.type);
var fr = new FileReader();
fr.onloadend = function() {
var sl = $('#parts-'+window.fc);
// Get the binary result, different result in IE browsers (see default.html.ep line 27:48)
if (isIE == true){
var bin = fr.content;
} else {
var bin = fr.result;
}
// Transform it in base64
var b = window.btoa(bin);
// Encrypt it
sl.html(i18n.encrypting.replace(/XX1(.*)XX2/, (j+1)+'$1'+parts));
var encrypted = sjcl.encrypt(randomkey, b);
// Prepare json
var data = {
// number of parts
total: parts,
// part X of total
part: j,
size: file.size,
name: file.name,
type: file.type,
delay: delay,
del_at_first_view: del_at_first_view,
zipped: $('#zip-files').is(':checked'),
id: short,
// number of the sent file in the queue
i: i
};
if ($('#file_pwd').length === 1) {
var pwd = $('#file_pwd').val();
if (pwd !== undefined && pwd !== null && pwd !== '') {
data['file_pwd'] = $('#file_pwd').val();
}
}
data = JSON.stringify(data)+'XXMOJOXX'+JSON.stringify(encrypted);;
console.log('sending slice '+(j + 1)+'/'+parts+' of file '+file.name);
sl.html(i18n.sending.replace(/XX1(.*)XX2/, (j+1)+'$1'+parts));
// Verify that we have a websocket and send json
if (window.ws.readyState === 3) {
window.ws = spawnWebsocket(0, function() {
window.ws.send(data);
});
} else {
window.ws.onclose = function() {
console.log('Websocket closed, waiting 10sec.');
window.ws = spawnWebsocket(0, function() {
console.log('sending again slice '+(j + 1)+'/'+parts+' of file '+file.name);
window.ws.send(data);
});
};
window.ws.onerror = function() {
console.log('Error on Websocket, waiting 10sec.');
window.ws = spawnWebsocket(0, function() {
console.log('sending again slice '+(j + 1)+'/'+parts+' of file '+file.name);
window.ws.send(data);
});
};
window.ws.send(data);
}
}
fr.readAsBinaryString(slice);
} }
fr.readAsBinaryString(slice);
} }
// Update the progress bar // Update the progress bar
function updateProgressBar(data) { function updateProgressBar(data) {
var i = data.i; if (typeof(data.action) !== 'undefined' && data.action === 'cancel') {
var sent_delay = data.sent_delay; if (data.success) {
var del_at_first_view = data.del_at_first_view; console.log('Upload successfully cancelled');
if (data.success) {
var j = data.j;
var delay = data.delay;
var parts = data.parts;
var short = data.short;
var created_at = data.created_at;
console.log('getting response for slice '+(j + 1)+'/'+parts+' of file '+data.name+' ('+data.duration+' sec)');
var dp = $('#progress-'+window.fc);
var key = dp.attr('data-key');
if (j + 1 === parts) {
//
window.ws.onclose = function() {
console.log('Connection is closed.');
};
window.ws.onerror = function() {
console.log('Error on WebSocket connection but file has been fully send, so we don\'t care.');
}
$('#parts-'+window.fc).remove();
var n = $('#name-'+window.fc);
var s = $('#size-'+window.fc);
var d = $('<div>');
var url = baseURL+'r/'+short+'#'+key;
var del_url = actionURL+'d/'+short+'/'+data.token;
var links = encodeURIComponent('["'+short+'"]');
var limit = (delay === 0) ? i18n.noLimit : i18n.expiration+' '+moment.unix(delay * 86400 + created_at).locale(window.navigator.language).format('LLLL');
n.html(n.html()+' '+s.html()+' <a href="'+actionURL+'m?links='+links+'"><i class="mdi-communication-email"></i></a><br>'+limit);
d.html(['<div class="card-action">',
'<div class="input-field">',
'<span class="prefix big-prefix">',
'<a href="', url, '" target="_blank">',
'<i class="mdi-file-file-download small" title="', i18n.dlText, '"></i>',
'</a>',
'<a href="#" id="copyurl-', window.fc, '" title="', i18n.cpText, '">',
'<i class="mdi-content-content-copy small"></i>',
'</a>',
'</span>',
'<input id="', short, '" class="form-control link-input white-background" value="', url, '" readonly="" type="text">',
'<label class="active" for="', short, '">', i18n.dlText, '</label>',
'</div>',
'<div class="input-field">',
'<a href="', del_url, '" target="_blank" class="prefix big-prefix">',
'<i class="mdi-action-delete small" title="', i18n.delText, '"></i>',
'</a>',
'<input id="delete-', short, '" class="form-control white-background" value="', del_url, '" readonly="" type="text">',
'<label class="active" for="delete-', short, '">', i18n.delText, '</label>',
'</div>',
'</div>'].join(''));
s.remove();
var p2 = dp.parent();
var p1 = p2.parent();
p2.remove();
p1.append(d);
$('#copyurl-'+window.fc).on('click', function(e) {
e.preventDefault();
copyToClipboard(url);
});
$("input[type='text']").on("click", function () {
$(this).select();
});
// Add copy all and mailto buttons
var misc = $('#misc');
if (misc.html() === '') {
misc.html('<a href="#" id="copyall" class="btn btn-info">'+i18n.copyAll+'</a> <a id="mailto" href="'+actionURL+'m?links='+links+'" class="btn btn-info">'+i18n.mailTo+'</a>');
$('#copyall').on('click', copyAllToClipboard);
} else {
updateMailLink();
}
// Add the file to localStorage
addItem(data.name, url, data.size, del_at_first_view, created_at, delay, data.short, data.token);
// Upload next file
window.fc++;
i++;
if (i < window.fileList.length) {
uploadFile(i, sent_delay, del_at_first_view);
} else {
// We have finished
window.fileList = null;
window.onbeforeunload = null;
$('#delete-day').attr('disabled', null);
$('#first-view').attr('disabled', null);
}
} else { } else {
j++; console.log('Upload cancellation failed: ' + data.msg);
// Update progress bar }
var percent = Math.round(100 * j/parts);
dp.removeClass();
dp.addClass('determinate');
dp.addClass('width-'+percent);
dp.attr('aria-valuenow', percent);
// Encrypt and upload next slice // Remove the cancelled index
sliceAndUpload(key, i, parts, j, delay, del_at_first_view, short); window.cancelled.splice(window.cancelled.indexOf(window.fc), 1);
// Upload next file
window.fc++;
data.i++;
if (data.i < window.fileList.length) {
uploadFile(data.i, $('#delete-day').val(), $('#first-view').is(':checked'));
} else {
// We have finished
window.cancelled = [];
window.fileList = null;
window.onbeforeunload = null;
$('#delete-day').attr('disabled', null);
$('#first-view').attr('disabled', null);
if ($('#zip-files').is(':checked') && window.zip === null) {
$('label[for="zip-files"]').click();
}
}
if ($('#results li').length === 0 && window.fileList === null) {
$('#results').hide();
} }
} else { } else {
addAlertOnFile(data.msg, i, delay, del_at_first_view); var i = data.i;
var sent_delay = data.sent_delay;
var del_at_first_view = data.del_at_first_view;
if (data.success) {
var j = data.j;
var delay = data.delay;
var parts = data.parts;
var short = data.short;
var created_at = data.created_at;
console.log('getting response for slice '+(j + 1)+'/'+parts+' of file '+data.name+' ('+data.duration+' sec)');
var dp = $('#progress-'+window.fc);
var key = dp.attr('data-key');
if (j + 1 === parts) {
//
window.ws.onclose = function() {
console.log('Connection is closed.');
};
window.ws.onerror = function() {
console.log('Error on WebSocket connection but file has been fully send, so we don\'t care.');
}
$('#parts-'+window.fc).remove();
var n = $('#name-'+window.fc);
var s = $('#size-'+window.fc);
var d = $('<div>');
var url = baseURL+'r/'+short+'#'+key;
var del_url = actionURL+'d/'+short+'/'+data.token;
var links = encodeURIComponent('["'+short+'"]');
var limit = (delay === 0) ? i18n.noLimit : i18n.expiration+' '+moment.unix(delay * 86400 + created_at).locale(window.navigator.language).format('LLLL');
if (!isGuest) {
n.html(n.html()+' '+s.html()+' <a href="'+actionURL+'m?links='+links+'"><i class="mdi-communication-email"></i></a><br>'+limit);
d.html(['<div class="card-action">',
'<div class="input-field">',
'<span class="prefix big-prefix">',
'<a href="', url, '" target="_blank">',
'<i class="mdi-file-file-download small" title="', i18n.dlText, '"></i>',
'</a>',
'<a href="#" id="copyurl-', window.fc, '" title="', i18n.cpText, '">',
'<i class="mdi-content-content-copy small"></i>',
'</a>',
'</span>',
'<input id="', short, '" class="form-control link-input white-background" value="', url, '" readonly="" type="text">',
'<label class="active" for="', short, '">', i18n.dlText, '</label>',
'</div>',
'<div class="input-field">',
'<a href="', del_url, '" target="_blank" class="prefix big-prefix">',
'<i class="mdi-action-delete small" title="', i18n.delText, '"></i>',
'</a>',
'<input id="delete-', short, '" class="form-control white-background" value="', del_url, '" readonly="" type="text">',
'<label class="active" for="delete-', short, '">', i18n.delText, '</label>',
'</div>',
'</div>'].join(''));
} else {
n.html(n.html()+' '+s.html());
}
s.remove();
var p2 = dp.parent();
var p1 = p2.parent();
p2.remove();
p1.append(d);
$('#copyurl-'+window.fc).on('click', function(e) {
e.preventDefault();
copyToClipboard(url);
});
$("input[type='text']").on("click", function () {
$(this).select();
});
// Add copy all and mailto buttons
var misc = $('#misc');
if (misc.html() === '' && !isGuest) {
misc.html('<a href="#" id="copyall" class="btn btn-info">'+i18n.copyAll+'</a> <a id="mailto" href="'+actionURL+'m?links='+links+'" class="btn btn-info">'+i18n.mailTo+'</a>');
$('#copyall').on('click', copyAllToClipboard);
} else {
updateMailLink();
}
// Add the file to localStorage
if (!isGuest) {
addItem(data.name, url, data.size, del_at_first_view, created_at, delay, data.short, data.token);
}
if (isGuest && short !== null) {
window.filesURLs.push(JSON.stringify({ name: data.name, short: data.short, url: url, size: data.size, created_at: created_at, delay: delay, token: data.token }));
}
// Upload next file
window.fc++;
i++;
if (i < window.fileList.length) {
uploadFile(i, sent_delay, del_at_first_view);
} else {
// We have finished
window.fileList = null;
window.onbeforeunload = null;
$('#delete-day').attr('disabled', null);
$('#first-view').attr('disabled', null);
if ($('#zip-files').is(':checked') && window.zip === null) {
$('label[for="zip-files"]').click();
}
if (isGuest) {
sendFilesURLs();
}
}
if ($('#results li').length === 0 && window.fileList === null) {
$('#results').hide();
}
} else {
j++;
// Update progress bar
var percent = Math.round(100 * j/parts);
dp.removeClass();
dp.addClass('determinate');
dp.addClass('width-'+percent);
dp.attr('aria-valuenow', percent);
// Encrypt and upload next slice
sliceAndUpload(key, i, parts, j, delay, del_at_first_view, short, data.token);
}
} else {
addAlertOnFile(data.msg, i, delay, del_at_first_view);
if (isGuest) {
sendFilesURLs();
}
}
} }
} }
@ -381,6 +609,7 @@ function addAlertOnFile(msg, i, sent_delay, del_at_first_view) {
} else { } else {
// We have finished // We have finished
window.onbeforeunload = null; window.onbeforeunload = null;
$('#zip-files').attr('disabled', null);
$('#delete-day').attr('disabled', null); $('#delete-day').attr('disabled', null);
$('#first-view').attr('disabled', null); $('#first-view').attr('disabled', null);
} }
@ -442,7 +671,10 @@ function bindDropZone() {
} }
// When it's ready // When it's ready
$(document).ready(function(){ $(document).ready(function() {
$('#zip-files').prop('checked', false);
$('#first-view').prop('checked', false);
$('#zipname').val('documents.zip');
if (!sjcl.random.isReady(10)) { if (!sjcl.random.isReady(10)) {
var loop = setInterval(function() { var loop = setInterval(function() {
if (!sjcl.random.isReady(10)) { if (!sjcl.random.isReady(10)) {
@ -459,11 +691,17 @@ $(document).ready(function(){
if (maxSize > 0) { if (maxSize > 0) {
$('#max-file-size').text(i18n.maxSize.replace('XXX', filesize(maxSize))); $('#max-file-size').text(i18n.maxSize.replace('XXX', filesize(maxSize)));
} }
$('label[for="first-view"]').on('click', function(){ $('label[for="first-view"]').on('click', firstViewClicking);
if ($('#first-view').attr('data-checked') && $('#first-view').attr('data-checked') === 'data-checked') { $('label[for="zip-files"]').on('click', zipClicking);
$('#first-view').attr('data-checked', null); $('#zipname').on('input', updateZipname);
} else { $('#uploadZip').on('click', uploadZip);
$('#first-view').attr('data-checked', 'data-checked'); $('#reset-zipping').on('click', function() {
} window.zip = null;
$('label[for="zip-files"]').click();
$('#zip-files').attr('disabled', null);
$('#zip-compressing').addClass('hide');
$('#file-browser-button').attr('disabled', null);
$('#file-browser-span').removeClass('disabled');
$('#files').removeClass('m6').addClass('m12');
}); });
}); });

View File

@ -12,8 +12,7 @@
<h3><%= l('How to report an illegal file?') %></h3> <h3><%= l('How to report an illegal file?') %></h3>
<p><%== l('Please contact the administrator: %1', config('contact')) %></p> <p><%== l('Please contact the administrator: %1', config('contact')) %></p>
<h3><%= l('Who wrote this software?') %></h3> <h3><%= l('Who wrote this software?') %></h3>
<p><%== l('The original (and only for now) author is <a href="https://fiat-tux.fr" class="classic">Luc Didry</a>. If you want to support him, you can do it via <a href="https://www.tipeee.com/fiat-tux" class="classic">Tipeee</a> or via <a href="https://liberapay.com/sky/" class="classic">Liberapay</a>.') %><br> <p><%== l('The original (and only for now) author is <a href="https://fiat-tux.fr" class="classic">Luc Didry</a>.') %><br>
<%== l('A thank you with a photo of kitten on <a href="https://framasphere.org/people/b13eb6b0beac0131e7e32a0000053625" class="classic">Diaspora*</a> or <a href="https://framapiaf.org/@framasky" class="classic">Mastodon</a> is cool too ;-)') %></p>
<h3><%= l('How to install the software on my server?') %></h3> <h3><%= l('How to install the software on my server?') %></h3>
<p><%== l('As Lufi is a free software licensed under of the terms of the <a href="https://gnu.org/licenses/agpl.html" class="classic">AGPLv3</a>, you can install it on you own server. Have a look on the <a href="https://framagit.org/luc/lufi/wikis/home" class="classic">Wiki</a> for the procedure.') %><br> <p><%== l('As Lufi is a free software licensed under of the terms of the <a href="https://gnu.org/licenses/agpl.html" class="classic">AGPLv3</a>, you can install it on you own server. Have a look on the <a href="https://framagit.org/luc/lufi/wikis/home" class="classic">Wiki</a> for the procedure.') %><br>
<%== l('Get the source code on <a href="https://framagit.org/luc/lufi" class="classic">the official repository</a> or on its <a href="https://github.com/ldidry/lufi" class="classic">Github mirror</a>') %> <%== l('Get the source code on <a href="https://framagit.org/luc/lufi" class="classic">the official repository</a> or on its <a href="https://github.com/ldidry/lufi" class="classic">Github mirror</a>') %>

View File

@ -22,11 +22,20 @@
</div> </div>
</div> </div>
</div> </div>
% }
% if (stash('invitation')) {
<div class="col s12">
<div class="card blue">
<div class="card-content white-text">
<strong><%= l('The link(s) of your file(s) will automatically be sent by mail to %1 (%2)', stash('invitation')->ldap_user, stash('invitation')->ldap_user_mail) %></strong>
</div>
</div>
</div>
% } % }
<div class="col s12 hiddendiv" id="not-enough-entropy"> <div class="col s12 hiddendiv" id="not-enough-entropy">
<div class="card pink"> <div class="card pink">
<div class="card-content white-text"> <div class="card-content white-text">
<strong><%= l('Your browser has not enough entropy to generate a strong encryption key. Please wait (it\'s better if you do things on your computer while waiting).') %></strong> <strong><%= l('Your browser does not have enough entropy to generate a strong encryption key. Please wait (it\'s better if you do things on your computer while waiting).') %></strong>
</div> </div>
</div> </div>
</div> </div>
@ -71,33 +80,74 @@
<%= l('Files deleted at first download') %> <%= l('Files deleted at first download') %>
</p> </p>
% } % }
<p class="col s12 m6 text-left<%= ' hiddendiv' if $self->config('force_burn_after_reading') %>"> <p class="col s12 m6 text-left<%= ' hiddendiv' if (config('force_burn_after_reading') || stash('invitation')) %>">
<input <input
type="checkbox" type="checkbox"
id="first-view" id="first-view"
data-checked="<%= 'data-checked' if $self->config('force_burn_after_reading') %>" data-checked="<%= 'data-checked' if config('force_burn_after_reading') %>"
<%= 'disabled="disabled"' if $self->config('force_burn_after_reading') %> <%= 'disabled="disabled"' if config('force_burn_after_reading') %>
> >
<label for="first-view"><%= l('Delete at first download?') %></label> <label for="first-view"><%= l('Delete at first download?') %></label>
</p> </p>
</div> </div>
% if (config('allow_pwd_on_files')) { <div class="input-field">
<div class="col s12 m12"> <p class="col s12 m6 text-left">
<input
type="checkbox"
id="zip-files"
data-checked=""
>
<label for="zip-files"><%= l('Create a zip archive with the files before uploading?') %></label>
</p>
</div>
% if (config('allow_pwd_on_files') && (!stash('invitation'))) {
<div class="col s12 m6">
<div class="input-field"> <div class="input-field">
<input type="password" id="file_pwd" placeholder="<%= l('Password') %>" class="validate" autocomplete="off"> <input type="password" id="file_pwd" placeholder="<%= l('Password') %>" class="validate" autocomplete="off">
<label for="file_pwd"><%= l('Add a password to file(s)') %></label> <label for="file_pwd"><%= l('Add a password to file(s)') %></label>
</div> </div>
</div> </div>
% } % }
<div class="col s12 m12 hide" id="zipname-input">
<div class="col s12 m6">
<div class="input-field">
<input type="text" id="zipname" placeholder="documents.zip" value="documents.zip" class="validate">
<label for="zipname"><%= l('Name of the zip file') %></label>
</div>
</div>
</div>
</form> </form>
<div id="files"> <div class="row">
<h2><%= l('Drop files here') %></h2> <div id="files" class="col s12 m12">
<p id="max-file-size"></p> <h2><%= l('Drop files here') %></h2>
<p><small><%= l('or') %></small></p> <p id="max-file-size"></p>
<label> <p><small><%= l('or') %></small></p>
<span id="file-browser-span" class="btn disabled waves-effect waves-light"><%= l('Click to open the file browser') %></span> <label>
<input type="file" id="file-browser-button" multiple disabled> <span id="file-browser-span" class="btn disabled waves-effect waves-light"><%= l('Click to open the file browser') %></span>
</label> <input type="file" id="file-browser-button" multiple disabled>
</label>
</div>
<div id="zipping" class="col s12 m6 hide">
<div class="card">
<div>
<a href="#" id="reset-zipping">
<i class="right mdi-navigation-close small"></i>
</a>
<div class="card-content">
<span class="card-title" id="zip-name">documents.zip</span> (<span id="zip-size"></span>)
<p id="zip-compressing" class="hide">
<button class="btn-floating pulse"><i class="mdi-content-archive"></i></button>
<%= l('Compressing zip file…') %>
</p>
<ul id="zip-parts">
</ul>
<div class="right-align">
<a href="#" id="uploadZip" class="btn waves-effect waves-light"><%= l('Upload generated zip file') %></a>
</div>
</div>
</div>
</div>
</div>
</div> </div>
<div id="results"> <div id="results">
<h2><%= l('Uploaded files') %></h2> <h2><%= l('Uploaded files') %></h2>
@ -106,9 +156,14 @@
</ul> </ul>
</div> </div>
%= include 'delays' %= include 'delays'
% if (defined stash('invitation')) {
%= javascript '/partial/index.js?token=' . stash('invitation')->token
% } else {
%= javascript '/partial/index.js' %= javascript '/partial/index.js'
% }
%= javascript '/js/sjcl.js' %= javascript '/js/sjcl.js'
%= javascript '/js/moment-with-locales.min.js' %= javascript '/js/moment-with-locales.min.js'
%= javascript '/js/filesize.min.js' %= javascript '/js/filesize.min.js'
%= javascript '/js/jszip.min.js'
%= javascript '/js/lufi-up.js' %= javascript '/js/lufi-up.js'
% } % }

View File

@ -0,0 +1,20 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% if (stash('expired_or_deleted_invitation')) {
<div class="col s12">
<div class="card pink">
<div class="card-content white-text">
<strong><%= l('Sorry, your invitation has expired or has been deleted.') %></strong>
</div>
</div>
</div>
% }
% if (stash('invitation_not_found')) {
<div class="col s12">
<div class="card pink">
<div class="card-content white-text">
<strong><%= l('Sorry, the invitation doesnt exist. Are you sure you are on the right URL?') %></strong>
</div>
</div>
</div>
% }

View File

@ -0,0 +1,51 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% if (scalar(@{$self->stash('fails')})) {
<div class="col s12">
<div class="card pink">
<div class="card-content white-text">
% for my $msg (@{$self->stash('fails')}) {
<strong><%= $msg %></strong>
% }
</div>
</div>
</div>
% }
% if (scalar(@{$self->stash('success')})) {
<div class="col s12">
<div class="card blue">
<div class="card-content white-text">
% for my $msg (@{$self->stash('success')}) {
<strong><%== $msg %></strong>
% }
</div>
</div>
</div>
% }
<form class="row" method="post">
<h1><%= l('Invite a guest') %></h1>
<div class="margin-bottom-35">
<p>
<%= l('You can invite someone to send you files through this Lufi instance even if they dont have an account on it.') %>
</p>
% if (stash('send_with_user_email')) {
<p>
<%= l('The invitation mail will be send from your email address (%1).', stash('user_mail')) %>
</p>
% }
</div>
<div class="input-field">
<label for="guest_mail">
<%= l('Email address of your guest') %>
</label>
<input id="guest_mail" name="guest_mail" type="email" placeholder="nami@example.org" required>
</div>
<div class="input-field">
<label for="expire_at">
<%= l('How many days would you like the invitation to be valid?') %>
</label>
<input id="expire_at" name="expire_at" type="number" min="1" max="<%= stash('max_expire_at') %>" step="1" value="<%= stash('max_expire_at') %>" required>
</div>
<button class="btn waves-effect waves-light" type="submit"><%= l('Send the invitation') %></button>
</form>

View File

@ -0,0 +1,15 @@
% # vim:set sw=4 ts=4 sts=4 ft=mail.epl expandtab:
% stash subject => l('%1 invites you to send him/her files', stash('ldap_user'));
%= l('Hello,')
%= l('%1 invites you to send him/her files through Lufi.', stash('ldap_user'))
%= l('Click on the following URL to upload files on Lufi:')
%== stash('url')
%= l('The links of your file(s) will automatically be sent by mail to %1.', stash('ldap_user'))
%= l('This invitation is valid until %1.', stash('expires'))
%= l('Regards.')

View File

@ -0,0 +1,87 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% use Number::Bytes::Human qw(format_bytes);
% my $lang = $self->get_date_lang();
<h2><%= l('My invitations') %></h2>
<hr>
<p>
<%= l('Rows in purple mean that the invitations have expired.') %>
</p>
<div class="invitations-buttons">
<a href="#" id="invertSelection" class="btn left-mg cyan"><%= l('Invert selection') %></a>
<a href="#" id="toggleHidden" class="btn left-mg cyan"><%= l('Show hidden invitations') %></a>
<a href="#" id="deleteInvit" class="btn left-mg cyan disabled" disabled><%= l('Delete') %></a>
<a href="#" id="resendMail" class="btn left-mg cyan disabled" disabled><%= l('Resend invitation mail') %></a>
<a href="#" id="toggleVisibility" class="btn left-mg cyan disabled" disabled><%= l('Toggle visibility') %></a>
</div>
<div>
<table class="responsive-table highlight">
<thead>
<tr>
<th class="center-align">&nbsp;</th>
<th class="center-align"><%= l('Guest mail') %></th>
<th class="center-align"><%= l('URL') %></th>
<th class="center-align"><%= l('Created at') %></th>
<th class="center-align"><%= l('Expire at') %></th>
<th class="center-align"><%= l('Files sent at') %></th>
<th class="center-align">&nbsp;</th>
</tr>
</thead>
<tbody id="myInvitations" data-visibility="hidden">
% my $time = time;
% $invitations->each(sub {
% my ($e, $num) = @_;
% return if $e->deleted;
% my $class = '';
% $class = 'purple lighten-4' unless $e->is_valid;
% $class .= ' hide' unless $e->show_in_list;
<tr id="row-<%= $e->token %>" class="<%= $class %>" data-visibility="<%= ($e->show_in_list) ? 1 : 0 %>">
<td>
<input type="checkbox" id="<%= $e->token %>" data-checked="">
<label for="<%= $e->token %>" hidden></label>
% unless ($e->show_in_list) {
<i class="mdi-navigation-cancel" title="<%= l('This invitation is normally hidden') %>"></i>
% }
</td>
<td><%= $e->guest_mail %></td>
<td><%= url_for('guest', token => $e->token)->to_abs %></td>
<td><%= $lang->time2str(l('%A %d %B %Y at %T'), $e->created_at) %></td>
<td id="expire-<%= $e->token %>"><%= $lang->time2str(l('%A %d %B %Y at %T'), $e->expire_at) %></td>
<td><%= $lang->time2str(l('%A %d %B %Y at %T'), $e->files_sent_at) if $e->files_sent_at %></td>
<td>
% if ($e->files) {
<a href="#files-info"
data-files="<%= $e->files %>"
data-token="<%= $e->token %>"
data-guest="<%= $e->guest_mail %>"
class="btn left-mg cyan waves-effect waves-light modal-trigger prefix">
<%= l('Files') %>
</a>
% }
</td>
</tr>
% });
</tbody>
</table>
</div>
<div id="files-info" class="modal">
<div class="modal-content">
<h1 class="small-h1"></h1>
<div class="text-left">
<ul id="files-ul">
</ul>
</div>
</div>
<div class="modal-footer">
<a href="#!" class="modal-action modal-close waves-effect waves-green btn-flat"><%= l('Close') %></a>
</div>
</div>
%= javascript '/partial/invitations.js'
%= javascript '/js/lufi-list-invitations.js'
%= javascript '/js/moment-with-locales.min.js'
%= javascript '/js/filesize.min.js'

View File

@ -0,0 +1,22 @@
% # vim:set sw=4 ts=4 sts=4 ft=mail.epl expandtab:
% use Number::Bytes::Human qw(format_bytes);
% my $lang = $self->get_date_lang();
% stash subject => l('%1 sent you files', stash('invitation')->guest_mail);
%= l('Hello %1,', ucfirst(stash('invitation')->ldap_user))
%= l('%1 used your invitation to send you files:', stash('invitation')->guest_mail)
% stash('files')->each(sub {
% my ($e, $num) = @_;
%= l('— %1 (%2), that will expire on %3', $e->{name}, format_bytes($e->{size}), $lang->time2str(l('%A %d %B %Y at %T'), $e->{created_at} + $e->{delay} * 86400))
%= ' '.$e->{url}
% });
% if (config('invitations')->{'save_files_url_in_db'} && stash('already_notified')) {
%= l('NB: this list includes the list of files that have already been sent to you.')
% }
%= l('Regards,')
--
Lufi

View File

@ -32,6 +32,10 @@
% if ((!defined(config('ldap')) && !defined(config('htpasswd'))) || is_user_authenticated()) { % if ((!defined(config('ldap')) && !defined(config('htpasswd'))) || is_user_authenticated()) {
<li<%== ' class="active"' if (current_route eq 'index') %>><a href="<%= url_for('/') %>"><%= l('Upload files') %></a></li> <li<%== ' class="active"' if (current_route eq 'index') %>><a href="<%= url_for('/') %>"><%= l('Upload files') %></a></li>
<li<%== ' class="active"' if (current_route eq 'files') %>><a href="<%= url_for('/files') %>"><%= l('My files') %></a></li> <li<%== ' class="active"' if (current_route eq 'files') %>><a href="<%= url_for('/files') %>"><%= l('My files') %></a></li>
% if (defined config('ldap') && defined config('invitations')) {
<li<%== ' class="active"' if (current_route eq 'invite') %>><a href="<%= url_for('/invite') %>"><%= l('Invite a guest') %></a></li>
<li<%== ' class="active"' if (current_route eq 'invite/list') %>><a href="<%= url_for('/invite/list') %>"><%= l('My invitations') %></a></li>
% }
% } else { % } else {
<li><a href="<%= url_for('/login') %>"><%= l('Signin') %></a></li> <li><a href="<%= url_for('/login') %>"><%= l('Signin') %></a></li>
% } % }
@ -61,6 +65,10 @@
% if ((!defined(config('ldap')) && !defined(config('htpasswd'))) || is_user_authenticated()) { % if ((!defined(config('ldap')) && !defined(config('htpasswd'))) || is_user_authenticated()) {
<li<%== ' class="active"' if (current_route eq 'index') %>><a href="<%= url_for('/') %>"><%= l('Upload files') %></a></li> <li<%== ' class="active"' if (current_route eq 'index') %>><a href="<%= url_for('/') %>"><%= l('Upload files') %></a></li>
<li<%== ' class="active"' if (current_route eq 'files') %>><a href="<%= url_for('/files') %>"><%= l('My files') %></a></li> <li<%== ' class="active"' if (current_route eq 'files') %>><a href="<%= url_for('/files') %>"><%= l('My files') %></a></li>
% if (defined config('ldap') && defined config('invitations')) {
<li<%== ' class="active"' if (current_route eq 'invite') %>><a href="<%= url_for('/invite') %>"><%= l('Invite a guest') %></a></li>
<li<%== ' class="active"' if (current_route eq 'invite/list') %>><a href="<%= url_for('/invite/list') %>"><%= l('My invitations') %></a></li>
% }
% } else { % } else {
<li><a href="<%= url_for('/login') %>"><%= l('Signin') %></a></li> <li><a href="<%= url_for('/login') %>"><%= l('Signin') %></a></li>
% } % }
@ -77,7 +85,12 @@
</li> </li>
<li<%== ' class="active"' if (current_route eq 'about') %>><a href="<%= url_for('/about') %>"><%= l('About') %></a></li> <li<%== ' class="active"' if (current_route eq 'about') %>><a href="<%= url_for('/about') %>"><%= l('About') %></a></li>
% if ((defined(config('ldap')) || defined(config('htpasswd'))) && is_user_authenticated()) { % if ((defined(config('ldap')) || defined(config('htpasswd'))) && is_user_authenticated()) {
<li><a href="<%= url_for('/logout') %>"><%= l('Logout') %></a></li> <li>
<form action="<%= url_for('/logout') %>" method="POST">
%= csrf_field
<button class="btn-flat" type="submit"><%= l('Logout') %></button>
</form>
</li>
% } % }
</ul> </ul>
</div> </div>

View File

@ -22,6 +22,7 @@
</div> </div>
</div> </div>
%= csrf_field %= csrf_field
<input name="redirect" value="<%= stash('redirect') %>" type="hidden">
<div class="col s8 m8 offset-s2 offset-m2"> <div class="col s8 m8 offset-s2 offset-m2">
<button class="btn waves-effect waves-light" type="submit" name="action"> <button class="btn waves-effect waves-light" type="submit" name="action">
<%= l('Signin') %> <%= l('Signin') %>

View File

@ -10,6 +10,7 @@ var baseURL = '<%= url_for('/')->to_abs() %>';
% } % }
var actionURL = '<%= url_for('/')->to_abs() %>'; var actionURL = '<%= url_for('/')->to_abs() %>';
var i18n = { var i18n = {
enqueued: '<%= l('XXX file has been added to upload queue.') %>',
confirmExit: '<%= l('You have attempted to leave this page. The upload will be canceled. Are you sure?') %>', confirmExit: '<%= l('You have attempted to leave this page. The upload will be canceled. Are you sure?') %>',
copyAll: '<%= l('Copy all links to clipboard') %>', copyAll: '<%= l('Copy all links to clipboard') %>',
copySuccess: '<%= l('The link(s) has been copied to your clipboard') %>', copySuccess: '<%= l('The link(s) has been copied to your clipboard') %>',
@ -29,3 +30,10 @@ var i18n = {
wsProblem: '<%= l('Websocket communication error') %>', wsProblem: '<%= l('Websocket communication error') %>',
}; };
var maxSize = <%= config('max_file_size') || 0 %>; var maxSize = <%= config('max_file_size') || 0 %>;
% if (stash('token')) {
var isGuest = true;
var sendFilesURLsURL = '<%= url_for('guest_send_mail', token => stash('token'))->to_abs() %>';
% } else {
var isGuest = false;
% }

View File

@ -0,0 +1,14 @@
% # vim:set sts=4 sw=4 ts=4 ft=javascript expandtab:
var i18n = {
confirmDeleteInvit: '<%= l('Are you sure you want to delete the selected invitations?') %>',
confirmResendMail: '<%= l('Are you sure you want to resend the invitation mail for the selected invitations?') %>',
expiration: '<%= l('expires on XXX') %>',
hiddenMark: '<i class="mdi-navigation-cancel" title="<%= l('This invitation is normally hidden') %>"></i>',
hideText: '<%= l('Hide hidden invitations') %>',
listFiles: '<%= l('Files sent in invitation XX1 by XX2') %>',
showText: '<%= l('Show hidden invitations') %>'
};
var deleteURL = '<%= url_for('invite_list_delete') %>';
var resendURL = '<%= url_for('invite_list_resend') %>';
var toggleURL = '<%= url_for('invite_list_visibility') %>';

View File

@ -1,11 +1,12 @@
% # vim:set sts=4 sw=4 ts=4 ft=javascript expandtab: % # vim:set sts=4 sw=4 ts=4 ft=javascript expandtab:
var ws_url = '<%= url_for('download')->to_abs().stash('file') %>'; var ws_url = '<%= url_for('download')->to_abs().stash('file') %>';
var i18n = { var i18n = {
aborted1: '<%= l('Download aborted.') %>', aborted1: '<%= l('Download aborted.') %>',
aborted2: '<%= l('Click here to refresh the page and restart the download.') %>', aborted2: '<%= l('Click here to refresh the page and restart the download.') %>',
badkey: '<%= l('It seems that the key in your URL is incorrect. Please, verify your URL.') %>', badkey: '<%= l('It seems that the key in your URL is incorrect. Please, verify your URL.') %>',
confirmExit: '<%= l('You have attempted to leave this page. The download will be canceled. Are you sure?') %>', confirmExit: '<%= l('You have attempted to leave this page. The download will be canceled. Are you sure?') %>',
download: '<%= l('Get the file') %>', download: '<%= l('Get the file') %>',
loading: '<%= l('Asking for file part XX1 of %1', stash('nbslices')) %>', loading: '<%= l('Asking for file part XX1 of %1', stash('nbslices')) %>',
nokey: '<%= l('You don\'t seem to have a key in your URL. You won\'t be able to decrypt the file. Download canceled.') %>', nokey: '<%= l('You don\'t seem to have a key in your URL. You won\'t be able to decrypt the file. Download canceled.') %>',
showZipContent: '<%= l('Show zip content') %>'
} }

View File

@ -29,7 +29,7 @@
</div> </div>
% } % }
<div class="file-progress col s12<%= (stash('file_pwd')) ? ' hide' : '' %>"> <div class="file-progress col s12<%= (stash('file_pwd')) ? ' hide' : '' %>">
<p id="filesize" data-filesize="<%= stash('f')->filesize %>"></p> <p id="filesize" data-filesize="<%= stash('f')->filesize %>" data-zipped="<%= (stash('f')->zipped) ? 'true' : 'false' %>"></p>
<p id="please-wait"><%= l('Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it.') %></p> <p id="please-wait"><%= l('Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it.') %></p>
<p id="loading"></p> <p id="loading"></p>
<div class="progress" id="pbd"> <div class="progress" id="pbd">
@ -44,6 +44,7 @@
%= javascript '/partial/render.js?nbslices='.stash('f')->nbslices.'&file='.stash('f')->short %= javascript '/partial/render.js?nbslices='.stash('f')->nbslices.'&file='.stash('f')->short
%= javascript '/js/filesize.min.js' %= javascript '/js/filesize.min.js'
%= javascript '/js/sjcl.js' %= javascript '/js/sjcl.js'
%= javascript '/js/jszip.min.js'
%= javascript '/js/lufi-down.js' %= javascript '/js/lufi-down.js'
% } % }
% } % }

View File

@ -27,3 +27,23 @@ CREATE TABLE IF NOT EXISTS slices (
-- 1 down -- 1 down
DROP TABLE slices; DROP TABLE slices;
DROP TABLE files; DROP TABLE files;
-- 2 up
ALTER TABLE files ADD COLUMN zipped boolean default false;
-- 2 down
ALTER TABLE files DROP COLUMN zipped;
-- 3 up
CREATE TABLE IF NOT EXISTS invitations (
token varchar(255) PRIMARY KEY,
ldap_user varchar(255),
ldap_user_mail varchar(255),
guest_mail varchar(255),
created_at integer,
expire_at integer,
files_sent_at integer,
expend_expire_at integer,
files text,
show_in_list boolean,
deleted boolean
);
-- 3 down
DROP TABLE invitations;

View File

@ -30,3 +30,23 @@ DROP TABLE files;
ALTER TABLE files ADD COLUMN abuse integer; ALTER TABLE files ADD COLUMN abuse integer;
-- 2 down -- 2 down
ALTER TABLE files DROP COLUMN abuse; ALTER TABLE files DROP COLUMN abuse;
-- 3 up
ALTER TABLE files ADD COLUMN zipped boolean default false;
-- 3 down
ALTER TABLE files DROP COLUMN zipped;
-- 4 up
CREATE TABLE IF NOT EXISTS invitations (
token text PRIMARY KEY,
ldap_user text,
ldap_user_mail text,
guest_mail text,
created_at integer,
expire_at integer,
files_sent_at integer,
expend_expire_at integer,
files text,
show_in_list boolean,
deleted boolean
);
-- 4 down
DROP TABLE invitations;

View File

@ -52,3 +52,45 @@ BEGIN TRANSACTION;
DROP TABLE files; DROP TABLE files;
ALTER TABLE files_backup RENAME TO files; ALTER TABLE files_backup RENAME TO files;
COMMIT; COMMIT;
-- 3 up
ALTER TABLE files ADD COLUMN zipped INTEGER;
-- 3 down
BEGIN TRANSACTION;
CREATE TABLE files_backup (
short TEXT PRIMARY KEY,
deleted INTEGER,
mediatype TEXT,
filename TEXT,
filesize INTEGER,
counter INTEGER,
delete_at_first_view INTEGER,
delete_at_day INTEGER,
created_at INTEGER,
created_by TEXT,
last_access_at INTEGER,
mod_token TEXT,
nbslices INTEGER,
complete INTEGER,
passwd TEXT,
abuse INTEGER
);
INSERT INTO files_backup SELECT short, deleted, mediatype, filename, filesize, counter, delete_at_first_view, delete_at_day, created_at, created_by, last_access_at, mod_token, nbslices, complete, passwd, abuse FROM files;
DROP TABLE files;
ALTER TABLE files_backup RENAME TO files;
COMMIT;
-- 4 up
CREATE TABLE IF NOT EXISTS invitations (
token TEXT PRIMARY KEY,
ldap_user TEXT,
ldap_user_mail TEXT,
guest_mail TEXT,
created_at INTEGER,
expire_at INTEGER,
files_sent_at INTEGER,
expend_expire_at INTEGER,
files TEXT,
show_in_list INTEGER,
deleted INTEGER
);
-- 4 down
DROP TABLE invitations;