From 5b43702d641c4a80ff8cf480bfe8383b5672543c Mon Sep 17 00:00:00 2001 From: Luc Didry Date: Jun 02 2020 19:44:06 +0000 Subject: 🔀 — Merge branch 'development' of framagit.org:fiat-tux/hat-softwares/lufi --- diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index d68ee6a..e7fb929 100644 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -58,6 +58,8 @@ variables: services: - name: rroemhild/test-openldap alias: rroemhild-test-openldap + - name: swiftstack/picoswiftstack + alias: swiftstack-picoswiftstack .pg_template: &pg_definition <<: *tests_template needs: @@ -67,6 +69,8 @@ variables: alias: postgres - name: rroemhild/test-openldap alias: rroemhild-test-openldap + - name: swiftstack/picoswiftstack + alias: swiftstack-picoswiftstack .mysql_template: &mysql_definition <<: *tests_template needs: @@ -76,6 +80,8 @@ variables: alias: mariadb - name: rroemhild/test-openldap alias: rroemhild-test-openldap + - name: swiftstack/picoswiftstack + alias: swiftstack-picoswiftstack ### Publish tag changelog and create a toot ## diff --git a/AUTHORS.md b/AUTHORS.md index 09a575e..79011b5 100644 --- a/AUTHORS.md +++ b/AUTHORS.md @@ -30,6 +30,7 @@ - TECH'advantage, https://www.tech-advantage.com/ (paid for LDAP invitations feature) - pi2 (typo) - Rain (bugfix) +- Nicolas Constant (notifications) ## Vulnerabilities / bug hunters 🐛 diff --git a/CHANGELOG b/CHANGELOG index 72ef946..da507bb 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,11 @@ Revision history for Lufi ?.??.? ????-??-?? + - Notifications when uploading and downloading files (#181) + - Use Weblate instead of Zanata for translations (https://weblate.framasoft.org/projects/lufi/development/) + - Add config API endpoint (#183) + - Show latest tag and commit of the instance in about page and config API endpoint (#174) + - Add support for Swift object storage (EXPERIMENTAL) 0.04.6 2019-11-07 - Now can send large files (>2Gio) while using a DB other than SQLite (#165) diff --git a/Makefile b/Makefile index dfc3dc9..5071551 100644 --- a/Makefile +++ b/Makefile @@ -1,5 +1,6 @@ EXTRACTDIR=-D lib -D themes/default/templates POT=themes/default/lib/Lufi/I18N/lufi.pot +ENPO=themes/default/lib/Lufi/I18N/en.po XGETTEXT=carton exec local/bin/xgettext.pl -u CARTON=carton exec REAL_LUFI=script/application @@ -7,18 +8,10 @@ LUFI=script/lufi locales: $(XGETTEXT) $(EXTRACTDIR) -o $(POT) 2>/dev/null - -push-locales: locales - zanata-cli -q -B push --errors --project-version `git branch | grep \* | cut -d ' ' -f2-` - -pull-locales: - zanata-cli -q -B pull --min-doc-percent 50 --project-version `git branch | grep \* | cut -d ' ' -f2-` - -stats-locales: - zanata-cli -q stats --project-version `git branch | grep \* | cut -d ' ' -f2-` + $(XGETTEXT) $(EXTRACTDIR) -o $(ENPO) 2>/dev/null podcheck: - podchecker lib/Lufi/DB/File.pm lib/Lufi/DB/Slice.pm + podchecker lib/Lufi/DB/File.pm lib/Lufi/DB/Slice.pm lib/Lufi/DB/Invitation.pm cover: PERL5OPT='-Ilib/' HARNESS_PERL_SWITCHES='-MDevel::Cover' $(CARTON) cover --ignore_re '^local' @@ -37,6 +30,14 @@ ldap: ldapdev: ldap dev +swift: + sudo docker run -d --rm -p 8080:8080 --hostname="picoswiftstack" --name="picoswiftstack" swiftstack/picoswiftstack; exit 0 + @echo "Sleeping 20 seconds to let picoswiftstack start" + @sleep 20 + sudo docker exec picoswiftstack get_auth + +swiftdev: swift dev + devlog: multitail log/development.log diff --git a/cpanfile b/cpanfile index b6909da..ca248b3 100644 --- a/cpanfile +++ b/cpanfile @@ -6,9 +6,9 @@ requires 'Mojolicious::Plugin::Mail'; requires 'Mojolicious::Plugin::GzipStatic'; requires 'Mojolicious::Plugin::StaticCache'; requires 'Mojolicious::Plugin::CSPHeader', '>= 0.06'; -requires 'Mojolicious::Plugin::FiatTux::Helpers', '== 0.10', url => 'https://framagit.org/fiat-tux/mojolicious/mojolicious-plugin-fiattux-helpers/-/archive/0.10/mojolicious-plugin-fiattux-helpers-0.10.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::Helpers', '== 0.12', url => 'https://framagit.org/fiat-tux/mojolicious/fiat-tux/mojolicious-plugin-fiattux-helpers/-/archive/0.12/mojolicious-plugin-fiattux-helpers-0.12.tar.gz'; +requires 'Mojolicious::Plugin::FiatTux::GrantAccess', '== 0.07', url => 'https://framagit.org/fiat-tux/mojolicious/fiat-tux/mojolicious-plugin-fiattux-grantaccess/-/archive/0.07/mojolicious-plugin-fiattux-grantaccess-0.07.tar.gz'; +requires 'Mojolicious::Plugin::FiatTux::Themes', '== 0.02', url => 'https://framagit.org/fiat-tux/mojolicious/fiat-tux/mojolicious-plugin-fiattux-themes/-/archive/0.02/mojolicious-plugin-fiattux-themes-0.02.tar.gz'; requires 'Filesys::DiskUsage'; requires 'Switch'; requires 'Locale::Maketext'; @@ -55,3 +55,6 @@ feature 'mysql', 'MySQL support' => sub { requires 'Mojo::mysql'; requires 'Mojolicious::Plugin::PgURLHelper'; }; +feature 'swift-storage', 'Openstack Swift object storage support' => sub { + requires 'Net::OpenStack::Swift'; +}; diff --git a/cpanfile.snapshot b/cpanfile.snapshot index bfe4c0a..2a082c5 100644 --- a/cpanfile.snapshot +++ b/cpanfile.snapshot @@ -9,6 +9,23 @@ DISTRIBUTIONS Digest::SHA 2 ExtUtils::MakeMaker 0 MIME::Base64 0 + App-Rad-1.05 + pathname: G/GA/GARU/App-Rad-1.05.tar.gz + provides: + App::Rad 1.05 + App::Rad::Config undef + App::Rad::Exclude 0.01 + App::Rad::Help 0.03 + App::Rad::Include 0.01 + requirements: + Attribute::Handlers 0 + B::Deparse 0 + Carp 0 + ExtUtils::MakeMaker 0 + File::Temp 0 + FindBin 0 + Getopt::Long 2.36 + Test::More 0 Authen-SASL-2.16 pathname: G/GB/GBARR/Authen-SASL-2.16.tar.gz provides: @@ -39,6 +56,24 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 Test::More 0 deprecate 0.03 + B-Hooks-EndOfScope-0.24 + pathname: E/ET/ETHER/B-Hooks-EndOfScope-0.24.tar.gz + provides: + B::Hooks::EndOfScope 0.24 + B::Hooks::EndOfScope::PP 0.24 + B::Hooks::EndOfScope::XS 0.24 + requirements: + ExtUtils::MakeMaker 0 + Hash::Util::FieldHash 0 + Module::Implementation 0.05 + Scalar::Util 0 + Sub::Exporter::Progressive 0.001006 + Text::ParseWords 0 + Tie::Hash 0 + Variable::Magic 0.48 + perl 5.006001 + strict 0 + warnings 0 Canary-Stability-2013 pathname: M/ML/MLEHMANN/Canary-Stability-2013.tar.gz provides: @@ -60,10 +95,16 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - Class-Method-Modifiers-2.12 - pathname: E/ET/ETHER/Class-Method-Modifiers-2.12.tar.gz + Class-Accessor-Lite-0.08 + pathname: K/KA/KAZUHO/Class-Accessor-Lite-0.08.tar.gz provides: - Class::Method::Modifiers 2.12 + Class::Accessor::Lite 0.08 + requirements: + ExtUtils::MakeMaker 6.36 + Class-Method-Modifiers-2.13 + pathname: E/ET/ETHER/Class-Method-Modifiers-2.13.tar.gz + provides: + Class::Method::Modifiers 2.13 requirements: B 0 Carp 0 @@ -101,14 +142,22 @@ DISTRIBUTIONS ExtUtils::MakeMaker 6.30 Math::BigInt 1.997 Test::More 0.90 - Cpanel-JSON-XS-4.12 - pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.12.tar.gz + Cpanel-JSON-XS-4.19 + pathname: R/RU/RURBAN/Cpanel-JSON-XS-4.19.tar.gz provides: - Cpanel::JSON::XS 4.12 + Cpanel::JSON::XS 4.19 Cpanel::JSON::XS::Type undef requirements: + Carp 0 + Config 0 + Encode 1.9801 + Exporter 0 ExtUtils::MakeMaker 0 Pod::Text 2.08 + XSLoader 0 + overload 0 + strict 0 + warnings 0 Crypt-PasswdMD5-1.40 pathname: R/RS/RSAVAGE/Crypt-PasswdMD5-1.40.tgz provides: @@ -135,25 +184,25 @@ DISTRIBUTIONS ExtUtils::MakeMaker 6.30 Test::Fatal 0 Test::More 0 - DBD-Pg-3.8.1 - pathname: T/TU/TURNSTEP/DBD-Pg-3.8.1.tar.gz + DBD-Pg-3.10.5 + pathname: T/TU/TURNSTEP/DBD-Pg-3.10.5.tar.gz provides: - Bundle::DBD::Pg v3.8.1 - DBD::Pg v3.8.1 + Bundle::DBD::Pg v3.10.5 + DBD::Pg v3.10.5 requirements: DBI 1.614 ExtUtils::MakeMaker 6.11 Test::More 0.88 Time::HiRes 0 version 0 - DBD-SQLite-1.62 - pathname: I/IS/ISHIGAKI/DBD-SQLite-1.62.tar.gz + DBD-SQLite-1.64 + pathname: I/IS/ISHIGAKI/DBD-SQLite-1.64.tar.gz provides: - DBD::SQLite 1.62 + DBD::SQLite 1.64 DBD::SQLite::Constants undef DBD::SQLite::GetInfo undef - DBD::SQLite::VirtualTable 1.62 - DBD::SQLite::VirtualTable::Cursor 1.62 + DBD::SQLite::VirtualTable 1.64 + DBD::SQLite::VirtualTable::Cursor 1.64 DBD::SQLite::VirtualTable::FileContent undef DBD::SQLite::VirtualTable::FileContent::Cursor undef DBD::SQLite::VirtualTable::PerlData undef @@ -162,8 +211,7 @@ DISTRIBUTIONS DBI 1.57 ExtUtils::MakeMaker 0 File::Spec 0.82 - Test::Builder 0.86 - Test::More 0.47 + Test::More 0.88 Tie::Hash 0 perl 5.006 DBD-mysql-4.050 @@ -181,8 +229,8 @@ DISTRIBUTIONS Devel::CheckLib 1.09 ExtUtils::MakeMaker 0 perl 5.008001 - DBI-1.642 - pathname: T/TI/TIMB/DBI-1.642.tar.gz + DBI-1.643 + pathname: T/TI/TIMB/DBI-1.643.tar.gz provides: Bundle::DBI 12.008696 DBD::DBM 0.08 @@ -238,7 +286,7 @@ DISTRIBUTIONS DBD::Sponge::dr 12.010003 DBD::Sponge::st 12.010003 DBDI 12.015129 - DBI 1.642 + DBI 1.643 DBI::Const::GetInfo::ANSI 2.008697 DBI::Const::GetInfo::ODBC 2.011374 DBI::Const::GetInfoReturn 2.008697 @@ -278,11 +326,11 @@ DISTRIBUTIONS DBI::SQL::Nano::Table_ 1.015544 DBI::Util::CacheMemory 0.010315 DBI::Util::_accessor 0.009479 - DBI::common 1.642 + DBI::common 1.643 requirements: ExtUtils::MakeMaker 6.48 Test::Simple 0.90 - perl 5.008 + perl 5.008001 Data-Entropy-0.007 pathname: Z/ZE/ZEFRAM/Data-Entropy-0.007.tar.gz provides: @@ -356,10 +404,40 @@ DISTRIBUTIONS Data::Validate::Domain 0 Data::Validate::IP 0 ExtUtils::MakeMaker 0 - Devel-CheckLib-1.13 - pathname: M/MA/MATTN/Devel-CheckLib-1.13.tar.gz + Data-Validator-1.07 + pathname: G/GF/GFUJI/Data-Validator-1.07.tar.gz provides: - Devel::CheckLib 1.13 + Data::Validator 1.07 + Data::Validator::Role::AllowExtra undef + Data::Validator::Role::Croak undef + Data::Validator::Role::Method undef + Data::Validator::Role::NoRestricted undef + Data::Validator::Role::NoThrow undef + Data::Validator::Role::Sequenced undef + Data::Validator::Role::SmartSequenced undef + Data::Validator::Role::StrictSequenced undef + requirements: + ExtUtils::MakeMaker 6.59 + Module::Build 0.38 + Mouse 0.93 + perl 5.008001 + Devel-CheckCompiler-0.07 + pathname: S/SY/SYOHEX/Devel-CheckCompiler-0.07.tar.gz + provides: + Devel::AssertC99 undef + Devel::CheckCompiler 0.07 + requirements: + Exporter 0 + ExtUtils::CBuilder 0 + File::Temp 0 + Module::Build::Tiny 0.035 + Test::More 0.98 + parent 0 + perl 5.008001 + Devel-CheckLib-1.14 + pathname: M/MA/MATTN/Devel-CheckLib-1.14.tar.gz + provides: + Devel::CheckLib 1.14 requirements: Exporter 0 ExtUtils::MakeMaker 0 @@ -425,14 +503,13 @@ DISTRIBUTIONS HTML::Entities 3.69 Storable 0 Test::More 0 - Devel-GlobalDestruction-0.14 - pathname: H/HA/HAARG/Devel-GlobalDestruction-0.14.tar.gz + Devel-PPPort-3.58 + pathname: A/AT/ATOOMIC/Devel-PPPort-3.58.tar.gz provides: - Devel::GlobalDestruction 0.14 + Devel::PPPort 3.58 requirements: ExtUtils::MakeMaker 0 - Sub::Exporter::Progressive 0.001011 - perl 5.006 + FindBin 0 Digest-HMAC-1.03 pathname: G/GA/GAAS/Digest-HMAC-1.03.tar.gz provides: @@ -444,10 +521,22 @@ DISTRIBUTIONS Digest::SHA 1 ExtUtils::MakeMaker 0 perl 5.004 - EV-4.27 - pathname: M/ML/MLEHMANN/EV-4.27.tar.gz + Dist-CheckConflicts-0.11 + pathname: D/DO/DOY/Dist-CheckConflicts-0.11.tar.gz provides: - EV 4.27 + Dist::CheckConflicts 0.11 + requirements: + Carp 0 + Exporter 0 + ExtUtils::MakeMaker 6.30 + Module::Runtime 0.009 + base 0 + strict 0 + warnings 0 + EV-4.33 + pathname: M/ML/MLEHMANN/EV-4.33.tar.gz + provides: + EV 4.33 EV::MakeMaker undef requirements: Canary::Stability 0 @@ -474,6 +563,43 @@ DISTRIBUTIONS Scalar::Util 0 Test::More 0 perl 5.006 + Encode-3.05 + pathname: D/DA/DANKOGAI/Encode-3.05.tar.gz + provides: + Encode 3.05 + Encode::Alias 2.24 + Encode::Byte 2.04 + Encode::CJKConstants 2.02 + Encode::CN 2.03 + Encode::CN::HZ 2.10 + Encode::Config 2.05 + Encode::EBCDIC 2.02 + Encode::Encoder 2.03 + Encode::Encoding 2.08 + Encode::GSM0338 2.07 + Encode::Guess 2.08 + Encode::Internal 3.05 + Encode::JP 2.04 + Encode::JP::H2Z 2.02 + Encode::JP::JIS7 2.08 + Encode::KR 2.03 + Encode::KR::2022_KR 2.04 + Encode::MIME::Header 2.28 + Encode::MIME::Header::ISO_2022_JP 1.09 + Encode::MIME::Name 1.03 + Encode::Symbol 2.02 + Encode::TW 2.03 + Encode::UTF_EBCDIC 3.05 + Encode::Unicode 2.18 + Encode::Unicode::UTF7 2.10 + Encode::XS 3.05 + Encode::utf8 3.05 + encoding 2.22 + requirements: + Exporter 5.57 + ExtUtils::MakeMaker 0 + Storable 0 + parent 0.221 Encode-Locale-1.05 pathname: G/GA/GAAS/Encode-Locale-1.05.tar.gz provides: @@ -569,6 +695,27 @@ DISTRIBUTIONS Test::More 0 Test::Warn 0 perl 5.006 + Furl-3.13 + pathname: T/TO/TOKUHIROM/Furl-3.13.tar.gz + provides: + Furl 3.13 + Furl::ConnectionCache undef + Furl::HTTP 3.13 + Furl::Headers undef + Furl::Request undef + Furl::Response undef + Furl::ZlibStream undef + requirements: + Class::Accessor::Lite 0 + Encode 0 + HTTP::Parser::XS 0.11 + MIME::Base64 0 + Module::Build::Tiny 0.035 + Mozilla::CA 0 + Scalar::Util 0 + Socket 0 + Time::HiRes 0 + perl 5.008001 HTML-Parser-3.72 pathname: G/GA/GAAS/HTML-Parser-3.72.tar.gz provides: @@ -590,27 +737,25 @@ DISTRIBUTIONS HTML::Tagset 3.20 requirements: ExtUtils::MakeMaker 0 - HTTP-Cookies-6.04 - pathname: O/OA/OALDERS/HTTP-Cookies-6.04.tar.gz + HTTP-Cookies-6.08 + pathname: O/OA/OALDERS/HTTP-Cookies-6.08.tar.gz provides: - HTTP::Cookies 6.04 - HTTP::Cookies::Microsoft 6.04 - HTTP::Cookies::Netscape 6.04 + HTTP::Cookies 6.08 + HTTP::Cookies::Microsoft 6.08 + HTTP::Cookies::Netscape 6.08 requirements: Carp 0 ExtUtils::MakeMaker 0 HTTP::Date 6 HTTP::Headers::Util 6 HTTP::Request 0 - Time::Local 0 locale 0 perl 5.008001 strict 0 - vars 0 - HTTP-Daemon-6.05 - pathname: E/ET/ETHER/HTTP-Daemon-6.05.tar.gz + HTTP-Daemon-6.06 + pathname: O/OA/OALDERS/HTTP-Daemon-6.06.tar.gz provides: - HTTP::Daemon 6.05 + HTTP::Daemon 6.06 requirements: Carp 0 ExtUtils::MakeMaker 0 @@ -626,14 +771,17 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 - HTTP-Date-6.02 - pathname: G/GA/GAAS/HTTP-Date-6.02.tar.gz + HTTP-Date-6.05 + pathname: O/OA/OALDERS/HTTP-Date-6.05.tar.gz provides: - HTTP::Date 6.02 + HTTP::Date 6.05 requirements: + Exporter 0 ExtUtils::MakeMaker 0 - Time::Local 0 + Time::Local 1.28 + Time::Zone 0 perl 5.006002 + strict 0 HTTP-Lite-2.44 pathname: N/NE/NEILB/HTTP-Lite-2.44.tar.gz provides: @@ -645,23 +793,23 @@ DISTRIBUTIONS perl 5.005 strict 0 warnings 0 - HTTP-Message-6.18 - pathname: O/OA/OALDERS/HTTP-Message-6.18.tar.gz - provides: - HTTP::Config 6.18 - HTTP::Headers 6.18 - HTTP::Headers::Auth 6.18 - HTTP::Headers::ETag 6.18 - HTTP::Headers::Util 6.18 - HTTP::Message 6.18 - HTTP::Request 6.18 - HTTP::Request::Common 6.18 - HTTP::Response 6.18 - HTTP::Status 6.18 + HTTP-Message-6.22 + pathname: O/OA/OALDERS/HTTP-Message-6.22.tar.gz + provides: + HTTP::Config 6.22 + HTTP::Headers 6.22 + HTTP::Headers::Auth 6.22 + HTTP::Headers::ETag 6.22 + HTTP::Headers::Util 6.22 + HTTP::Message 6.22 + HTTP::Request 6.22 + HTTP::Request::Common 6.22 + HTTP::Response 6.22 + HTTP::Status 6.22 requirements: Carp 0 Compress::Raw::Zlib 0 - Encode 2.21 + Encode 3.01 Encode::Locale 1 Exporter 5.57 ExtUtils::MakeMaker 0 @@ -691,6 +839,14 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 HTTP::Headers 6 perl 5.008001 + HTTP-Parser-XS-0.17 + pathname: K/KA/KAZUHO/HTTP-Parser-XS-0.17.tar.gz + provides: + HTTP::Parser::XS 0.17 + HTTP::Parser::XS::PP undef + requirements: + ExtUtils::MakeMaker 6.36 + Test::More 0.96 Hash-Merge-0.300 pathname: R/RE/REHSACK/Hash-Merge-0.300.tar.gz provides: @@ -709,17 +865,17 @@ DISTRIBUTIONS Encode 2.10 Exporter 5.57 ExtUtils::MakeMaker 6.30 - IO-Socket-SSL-2.066 - pathname: S/SU/SULLR/IO-Socket-SSL-2.066.tar.gz + IO-Socket-SSL-2.068 + pathname: S/SU/SULLR/IO-Socket-SSL-2.068.tar.gz provides: - IO::Socket::SSL 2.066 + IO::Socket::SSL 2.068 IO::Socket::SSL::Intercept 2.056 - IO::Socket::SSL::OCSP_Cache 2.066 - IO::Socket::SSL::OCSP_Resolver 2.066 + IO::Socket::SSL::OCSP_Cache 2.068 + IO::Socket::SSL::OCSP_Resolver 2.068 IO::Socket::SSL::PublicSuffix undef - IO::Socket::SSL::SSL_Context 2.066 - IO::Socket::SSL::SSL_HANDLE 2.066 - IO::Socket::SSL::Session_Cache 2.066 + IO::Socket::SSL::SSL_Context 2.068 + IO::Socket::SSL::SSL_HANDLE 2.068 + IO::Socket::SSL::Session_Cache 2.068 IO::Socket::SSL::Utils 2.014 requirements: ExtUtils::MakeMaker 0 @@ -740,10 +896,10 @@ DISTRIBUTIONS Socket 1.94 Test::More 0.88 constant 1.03 - ISO-639_1-0.03 - pathname: L/LD/LDIDRY/ISO-639_1-0.03.tar.gz + ISO-639_1-0.04 + pathname: L/LD/LDIDRY/ISO-639_1-0.04.tar.gz provides: - ISO::639_1 0.03 + ISO::639_1 0.04 requirements: Module::Build::Tiny 0.035 perl 5.008001 @@ -795,6 +951,18 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 6.30 Locale::Maketext 1.17 + Log-Minimal-0.19 + pathname: K/KA/KAZEBURO/Log-Minimal-0.19.tar.gz + provides: + Log::Minimal 0.19 + requirements: + CPAN::Meta 0 + CPAN::Meta::Prereqs 0 + Data::Dumper 0 + ExtUtils::CBuilder 0 + Module::Build 0.38 + Scalar::Util 0 + Term::ANSIColor 0 MIME-Charset-1.012.2 pathname: N/NE/NEZUMI/MIME-Charset-1.012.2.tar.gz provides: @@ -816,14 +984,14 @@ DISTRIBUTIONS MIME::Base64 2.13 MIME::Charset v1.10.1 Test::More 0 - MIME-Lite-3.030 - pathname: R/RJ/RJBS/MIME-Lite-3.030.tar.gz - provides: - MIME::Lite 3.030 - MIME::Lite::IO_Handle 3.030 - MIME::Lite::IO_Scalar 3.030 - MIME::Lite::IO_ScalarArray 3.030 - MIME::Lite::SMTP 3.030 + MIME-Lite-3.031 + pathname: R/RJ/RJBS/MIME-Lite-3.031.tar.gz + provides: + MIME::Lite 3.031 + MIME::Lite::IO_Handle 3.031 + MIME::Lite::IO_Scalar 3.031 + MIME::Lite::IO_ScalarArray 3.031 + MIME::Lite::SMTP 3.031 MailTool undef requirements: Email::Date::Format 1.000 @@ -883,28 +1051,28 @@ DISTRIBUTIONS Net::Domain 1.05 Net::SMTP 1.03 Test::More 0 - Module-Build-0.4229 - pathname: L/LE/LEONT/Module-Build-0.4229.tar.gz - provides: - Module::Build 0.4229 - Module::Build::Base 0.4229 - Module::Build::Compat 0.4229 - Module::Build::Config 0.4229 - Module::Build::Cookbook 0.4229 - Module::Build::Dumper 0.4229 - Module::Build::Notes 0.4229 - Module::Build::PPMMaker 0.4229 - Module::Build::Platform::Default 0.4229 - Module::Build::Platform::MacOS 0.4229 - Module::Build::Platform::Unix 0.4229 - Module::Build::Platform::VMS 0.4229 - Module::Build::Platform::VOS 0.4229 - Module::Build::Platform::Windows 0.4229 - Module::Build::Platform::aix 0.4229 - Module::Build::Platform::cygwin 0.4229 - Module::Build::Platform::darwin 0.4229 - Module::Build::Platform::os2 0.4229 - Module::Build::PodParser 0.4229 + Module-Build-0.4231 + pathname: L/LE/LEONT/Module-Build-0.4231.tar.gz + provides: + Module::Build 0.4231 + Module::Build::Base 0.4231 + Module::Build::Compat 0.4231 + Module::Build::Config 0.4231 + Module::Build::Cookbook 0.4231 + Module::Build::Dumper 0.4231 + Module::Build::Notes 0.4231 + Module::Build::PPMMaker 0.4231 + Module::Build::Platform::Default 0.4231 + Module::Build::Platform::MacOS 0.4231 + Module::Build::Platform::Unix 0.4231 + Module::Build::Platform::VMS 0.4231 + Module::Build::Platform::VOS 0.4231 + Module::Build::Platform::Windows 0.4231 + Module::Build::Platform::aix 0.4231 + Module::Build::Platform::cygwin 0.4231 + Module::Build::Platform::darwin 0.4231 + Module::Build::Platform::os2 0.4231 + Module::Build::PodParser 0.4231 requirements: CPAN::Meta 2.142060 Cwd 0 @@ -954,6 +1122,32 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 + Module-Build-XSUtil-0.19 + pathname: H/HI/HIDEAKIO/Module-Build-XSUtil-0.19.tar.gz + provides: + Module::Build::XSUtil 0.19 + requirements: + Devel::CheckCompiler 0 + Devel::PPPort 0 + Exporter 0 + ExtUtils::CBuilder 0 + File::Basename 0 + File::Path 0 + Module::Build 0.4005 + XSLoader 0 + parent 0 + perl 5.008001 + Module-Implementation-0.09 + pathname: D/DR/DROLSKY/Module-Implementation-0.09.tar.gz + provides: + Module::Implementation 0.09 + requirements: + Carp 0 + ExtUtils::MakeMaker 0 + Module::Runtime 0.012 + Try::Tiny 0 + strict 0 + warnings 0 Module-Install-1.19 pathname: E/ET/ETHER/Module-Install-1.19.tar.gz provides: @@ -1033,10 +1227,10 @@ DISTRIBUTIONS Text::ParseWords 0 perl 5.008001 version 0 - Mojo-Pg-4.15 - pathname: S/SR/SRI/Mojo-Pg-4.15.tar.gz + Mojo-Pg-4.18 + pathname: S/SR/SRI/Mojo-Pg-4.18.tar.gz provides: - Mojo::Pg 4.15 + Mojo::Pg 4.18 Mojo::Pg::Database undef Mojo::Pg::Migrations undef Mojo::Pg::PubSub undef @@ -1044,23 +1238,23 @@ DISTRIBUTIONS Mojo::Pg::Transaction undef SQL::Abstract::Pg undef requirements: - DBD::Pg 3.005001 + DBD::Pg 3.007004 ExtUtils::MakeMaker 0 Mojolicious 8.03 SQL::Abstract 1.86 perl 5.010001 - Mojo-SQLite-3.002 - pathname: D/DB/DBOOK/Mojo-SQLite-3.002.tar.gz + Mojo-SQLite-3.003 + pathname: D/DB/DBOOK/Mojo-SQLite-3.003.tar.gz provides: - Mojo::SQLite 3.002 - Mojo::SQLite::Database 3.002 - Mojo::SQLite::Migrations 3.002 - Mojo::SQLite::PubSub 3.002 - Mojo::SQLite::Results 3.002 - Mojo::SQLite::Transaction 3.002 + Mojo::SQLite 3.003 + Mojo::SQLite::Database 3.003 + Mojo::SQLite::Migrations 3.003 + Mojo::SQLite::PubSub 3.003 + Mojo::SQLite::Results 3.003 + Mojo::SQLite::Transaction 3.003 requirements: Carp 0 - DBD::SQLite 1.54 + DBD::SQLite 1.64 DBI 1.627 File::Spec::Functions 0 File::Temp 0 @@ -1072,13 +1266,13 @@ DISTRIBUTIONS URI::db 0.15 URI::file 4.21 perl 5.010001 - Mojo-mysql-1.16 - pathname: T/TE/TEKKI/Mojo-mysql-1.16.tar.gz + Mojo-mysql-1.18 + pathname: T/TE/TEKKI/Mojo-mysql-1.18.tar.gz provides: Blog undef Blog::Controller::Posts undef Blog::Model::Posts undef - Mojo::mysql 1.16 + Mojo::mysql 1.18 Mojo::mysql::Database undef Mojo::mysql::Migrations undef Mojo::mysql::PubSub undef @@ -1091,8 +1285,8 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 Mojolicious 8.03 SQL::Abstract 1.86 - Mojolicious-8.22 - pathname: S/SR/SRI/Mojolicious-8.22.tar.gz + Mojolicious-8.40 + pathname: S/SR/SRI/Mojolicious-8.40.tar.gz provides: Mojo undef Mojo::Asset undef @@ -1161,7 +1355,7 @@ DISTRIBUTIONS Mojo::UserAgent::Transactor undef Mojo::Util undef Mojo::WebSocket undef - Mojolicious 8.22 + Mojolicious 8.40 Mojolicious::Command undef Mojolicious::Command::Author::cpanify undef Mojolicious::Command::Author::generate undef @@ -1277,36 +1471,73 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 Mojolicious 7.33 - Moo-2.003004 - pathname: H/HA/HAARG/Moo-2.003004.tar.gz + Moo-2.004000 + pathname: H/HA/HAARG/Moo-2.004000.tar.gz provides: Method::Generate::Accessor undef Method::Generate::BuildAll undef Method::Generate::Constructor undef Method::Generate::DemolishAll undef - Moo 2.003004 + Moo 2.004000 Moo::HandleMoose undef Moo::HandleMoose::FakeConstructor undef Moo::HandleMoose::FakeMetaClass undef Moo::HandleMoose::_TypeMap undef Moo::Object undef - Moo::Role 2.003004 + Moo::Role 2.004000 Moo::_Utils undef Moo::_mro undef Moo::_strictures undef Moo::sification undef oo undef requirements: - Class::Method::Modifiers 1.1 - Devel::GlobalDestruction 0.11 + Class::Method::Modifiers 1.10 Exporter 5.57 ExtUtils::MakeMaker 0 Module::Runtime 0.014 - Role::Tiny 2.000004 - Scalar::Util 0 - Sub::Defer 2.003001 - Sub::Quote 2.003001 + Role::Tiny 2.001004 + Scalar::Util 1.00 + Sub::Defer 2.006006 + Sub::Quote 2.006006 perl 5.006 + Mouse-v2.5.10 + pathname: S/SK/SKAJI/Mouse-v2.5.10.tar.gz + provides: + Mouse v2.5.10 + Mouse::Exporter undef + Mouse::Meta::Attribute undef + Mouse::Meta::Class undef + Mouse::Meta::Method undef + Mouse::Meta::Method::Accessor undef + Mouse::Meta::Method::Constructor undef + Mouse::Meta::Method::Delegation undef + Mouse::Meta::Method::Destructor undef + Mouse::Meta::Module undef + Mouse::Meta::Role undef + Mouse::Meta::Role::Application undef + Mouse::Meta::Role::Application::RoleSummation undef + Mouse::Meta::Role::Composite undef + Mouse::Meta::Role::Method undef + Mouse::Meta::TypeConstraint undef + Mouse::Object undef + Mouse::PurePerl undef + Mouse::Role v2.5.10 + Mouse::Spec v2.5.10 + Mouse::TypeRegistry undef + Mouse::Util v2.5.10 + Mouse::Util::MetaRole undef + Mouse::Util::TypeConstraints undef + Squirrel undef + Squirrel::Role undef + Test::Mouse undef + ouse undef + requirements: + ExtUtils::CBuilder 0 + Module::Build 0.4005 + Module::Build::XSUtil 0.19 + Scalar::Util 1.14 + XSLoader 0.02 + perl 5.008005 Mozilla-CA-20180117 pathname: A/AB/ABH/Mozilla-CA-20180117.tar.gz provides: @@ -1315,10 +1546,10 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 Test 0 perl 5.006 - Net-DNS-1.20 - pathname: N/NL/NLNETLABS/Net-DNS-1.20.tar.gz + Net-DNS-1.23 + pathname: N/NL/NLNETLABS/Net-DNS-1.23.tar.gz provides: - Net::DNS 1.20 + Net::DNS 1.23 Net::DNS::Domain 1726 Net::DNS::DomainName 1605 Net::DNS::DomainName1035 1605 @@ -1327,32 +1558,31 @@ DISTRIBUTIONS Net::DNS::Mailbox 1605 Net::DNS::Mailbox1035 1605 Net::DNS::Mailbox2535 1605 - Net::DNS::Nameserver 1692 - Net::DNS::Packet 1714 - Net::DNS::Parameters 1729 + Net::DNS::Nameserver 1761 + Net::DNS::Packet 1761 + Net::DNS::Parameters 1761 Net::DNS::Question 1726 - Net::DNS::RR 1726 + Net::DNS::RR 1762 Net::DNS::RR::A 1597 Net::DNS::RR::AAAA 1597 Net::DNS::RR::AFSDB 1597 - Net::DNS::RR::APL 1597 - Net::DNS::RR::APL::Item 1597 - Net::DNS::RR::CAA 1597 + Net::DNS::RR::APL 1741 + Net::DNS::RR::APL::Item 1741 + Net::DNS::RR::CAA 1771 Net::DNS::RR::CDNSKEY 1586 Net::DNS::RR::CDS 1586 - Net::DNS::RR::CERT 1729 + Net::DNS::RR::CERT 1773 Net::DNS::RR::CNAME 1597 - Net::DNS::RR::CSYNC 1597 + Net::DNS::RR::CSYNC 1741 Net::DNS::RR::DHCID 1597 - Net::DNS::RR::DLV 1528 Net::DNS::RR::DNAME 1597 - Net::DNS::RR::DNSKEY 1729 - Net::DNS::RR::DS 1729 + Net::DNS::RR::DNSKEY 1773 + Net::DNS::RR::DS 1774 Net::DNS::RR::EUI48 1597 Net::DNS::RR::EUI64 1597 Net::DNS::RR::GPOS 1528 Net::DNS::RR::HINFO 1597 - Net::DNS::RR::HIP 1597 + Net::DNS::RR::HIP 1749 Net::DNS::RR::IPSECKEY 1718 Net::DNS::RR::ISDN 1597 Net::DNS::RR::KEY 1528 @@ -1369,53 +1599,54 @@ DISTRIBUTIONS Net::DNS::RR::NAPTR 1597 Net::DNS::RR::NID 1597 Net::DNS::RR::NS 1597 - Net::DNS::RR::NSEC 1696 - Net::DNS::RR::NSEC3 1726 - Net::DNS::RR::NSEC3PARAM 1597 + Net::DNS::RR::NSEC 1749 + Net::DNS::RR::NSEC3 1749 + Net::DNS::RR::NSEC3PARAM 1741 Net::DNS::RR::NULL 1528 Net::DNS::RR::OPENPGPKEY 1597 - Net::DNS::RR::OPT 1717 - Net::DNS::RR::OPT::CHAIN 1717 - Net::DNS::RR::OPT::CLIENT_SUBNET 1717 - Net::DNS::RR::OPT::COOKIE 1717 - Net::DNS::RR::OPT::DAU 1717 - Net::DNS::RR::OPT::DHU 1717 - Net::DNS::RR::OPT::EXPIRE 1717 - Net::DNS::RR::OPT::KEY_TAG 1717 - Net::DNS::RR::OPT::N3U 1717 - Net::DNS::RR::OPT::PADDING 1717 - Net::DNS::RR::OPT::TCP_KEEPALIVE 1717 + Net::DNS::RR::OPT 1773 + Net::DNS::RR::OPT::CHAIN 1773 + Net::DNS::RR::OPT::CLIENT_SUBNET 1773 + Net::DNS::RR::OPT::COOKIE 1773 + Net::DNS::RR::OPT::DAU 1773 + Net::DNS::RR::OPT::DHU 1773 + Net::DNS::RR::OPT::EXPIRE 1773 + Net::DNS::RR::OPT::KEY_TAG 1773 + Net::DNS::RR::OPT::N3U 1773 + Net::DNS::RR::OPT::PADDING 1773 + Net::DNS::RR::OPT::TCP_KEEPALIVE 1773 Net::DNS::RR::PTR 1597 Net::DNS::RR::PX 1597 Net::DNS::RR::RP 1597 - Net::DNS::RR::RRSIG 1729 + Net::DNS::RR::RRSIG 1754 Net::DNS::RR::RT 1597 - Net::DNS::RR::SIG 1729 - Net::DNS::RR::SMIMEA 1597 + Net::DNS::RR::SIG 1754 + Net::DNS::RR::SMIMEA 1741 Net::DNS::RR::SOA 1597 Net::DNS::RR::SPF 1593 Net::DNS::RR::SRV 1597 - Net::DNS::RR::SSHFP 1597 + Net::DNS::RR::SSHFP 1741 Net::DNS::RR::TKEY 1528 - Net::DNS::RR::TLSA 1597 - Net::DNS::RR::TSIG 1726 + Net::DNS::RR::TLSA 1741 + Net::DNS::RR::TSIG 1774 Net::DNS::RR::TXT 1597 Net::DNS::RR::URI 1597 Net::DNS::RR::X25 1597 - Net::DNS::Resolver 1726 - Net::DNS::Resolver::Base 1727 + Net::DNS::RR::ZONEMD 1771 + Net::DNS::Resolver 1740 + Net::DNS::Resolver::Base 1771 Net::DNS::Resolver::MSWin32 1568 - Net::DNS::Resolver::Recurse 1737 + Net::DNS::Resolver::Recurse 1748 Net::DNS::Resolver::UNIX 1573 Net::DNS::Resolver::android 1568 Net::DNS::Resolver::cygwin 1719 Net::DNS::Resolver::os2 1568 Net::DNS::Resolver::os390 1719 - Net::DNS::Text 1726 - Net::DNS::Update 1726 - Net::DNS::ZoneFile 1709 - Net::DNS::ZoneFile::Generator 1709 - Net::DNS::ZoneFile::Text 1709 + Net::DNS::Text 1762 + Net::DNS::Update 1774 + Net::DNS::ZoneFile 1769 + Net::DNS::ZoneFile::Generator 1769 + Net::DNS::ZoneFile::Text 1769 requirements: Digest::HMAC 1.03 Digest::MD5 2.13 @@ -1458,6 +1689,31 @@ DISTRIBUTIONS strict 0 vars 0 warnings 0 + Net-OpenStack-Swift-0.15 + pathname: M/MA/MASAKYST/Net-OpenStack-Swift-0.15.tar.gz + provides: + Net::OpenStack::Swift 0.15 + Net::OpenStack::Swift::InnerKeystone::Base undef + Net::OpenStack::Swift::InnerKeystone::V1_0 undef + Net::OpenStack::Swift::InnerKeystone::V2_0 undef + Net::OpenStack::Swift::InnerKeystone::V3_0 undef + Net::OpenStack::Swift::Util undef + requirements: + App::Rad 0 + Data::Validator 0 + Furl 0 + IO::Socket::SSL 0 + JSON 0 + Log::Minimal 0 + Module::Build::Tiny 0.035 + Mouse 0 + Parallel::Fork::BossWorkerAsync 0 + Path::Tiny 0 + Sys::CPU 0 + Text::ASCIITable 0 + URI::Escape 0 + namespace::clean 0 + perl 5.010_001 Net-SSLeay-1.88 pathname: C/CH/CHRISN/Net-SSLeay-1.88.tar.gz provides: @@ -1489,6 +1745,44 @@ DISTRIBUTIONS ExtUtils::MakeMaker 0 POSIX 0 Test::More 0 + Package-Stash-0.38 + pathname: E/ET/ETHER/Package-Stash-0.38.tar.gz + provides: + Package::Stash 0.38 + Package::Stash::PP 0.38 + requirements: + B 0 + Carp 0 + Config 0 + Dist::CheckConflicts 0.02 + ExtUtils::MakeMaker 0 + File::Spec 0 + Getopt::Long 0 + Module::Implementation 0.06 + Package::Stash::XS 0.26 + Scalar::Util 0 + Symbol 0 + Text::ParseWords 0 + constant 0 + perl 5.008001 + strict 0 + warnings 0 + Package-Stash-XS-0.29 + pathname: E/ET/ETHER/Package-Stash-XS-0.29.tar.gz + provides: + Package::Stash::XS 0.29 + requirements: + ExtUtils::MakeMaker 0 + XSLoader 0 + perl 5.008001 + strict 0 + warnings 0 + Parallel-Fork-BossWorkerAsync-0.09 + pathname: J/JV/JVANNUCCI/Parallel-Fork-BossWorkerAsync-0.09.tar.gz + provides: + Parallel::Fork::BossWorkerAsync 0.09 + requirements: + ExtUtils::MakeMaker 0 Params-Classify-0.015 pathname: Z/ZE/ZEFRAM/Params-Classify-0.015.tar.gz provides: @@ -1502,11 +1796,37 @@ DISTRIBUTIONS perl 5.006001 strict 0 warnings 0 - Role-Tiny-2.000006 - pathname: H/HA/HAARG/Role-Tiny-2.000006.tar.gz + Path-Tiny-0.112 + pathname: D/DA/DAGOLDEN/Path-Tiny-0.112.tar.gz + provides: + Path::Tiny 0.112 + Path::Tiny::Error 0.112 + requirements: + Carp 0 + Cwd 0 + Digest 1.03 + Digest::SHA 5.45 + Encode 0 + Exporter 5.57 + ExtUtils::MakeMaker 6.17 + Fcntl 0 + File::Copy 0 + File::Glob 0 + File::Path 2.07 + File::Spec 0.86 + File::Temp 0.19 + File::stat 0 + constant 0 + overload 0 + perl 5.008001 + strict 0 + warnings 0 + warnings::register 0 + Role-Tiny-2.001004 + pathname: H/HA/HAARG/Role-Tiny-2.001004.tar.gz provides: - Role::Tiny 2.000006 - Role::Tiny::With 2.000006 + Role::Tiny 2.001004 + Role::Tiny::With 2.001004 requirements: Exporter 5.57 perl 5.006 @@ -1533,11 +1853,11 @@ DISTRIBUTIONS Sub::Exporter::Progressive 0.001013 requirements: ExtUtils::MakeMaker 0 - Sub-Quote-2.006003 - pathname: H/HA/HAARG/Sub-Quote-2.006003.tar.gz + Sub-Quote-2.006006 + pathname: H/HA/HAARG/Sub-Quote-2.006006.tar.gz provides: - Sub::Defer 2.006003 - Sub::Quote 2.006003 + Sub::Defer 2.006006 + Sub::Quote 2.006006 requirements: ExtUtils::MakeMaker 0 Scalar::Util 0 @@ -1563,6 +1883,12 @@ DISTRIBUTIONS Text::Balanced 2 if 0 perl 5.005 + Sys-CPU-0.52 + pathname: M/MK/MKODERER/Sys-CPU-0.52.tar.gz + provides: + Sys::CPU 0.52 + requirements: + ExtUtils::MakeMaker 0 Term-ProgressBar-2.22 pathname: M/MA/MANWAR/Term-ProgressBar-2.22.tar.gz provides: @@ -1626,10 +1952,10 @@ DISTRIBUTIONS Test::Builder 0.13 Test::Builder::Tester 1.02 perl 5.006 - Test-Warnings-0.026 - pathname: E/ET/ETHER/Test-Warnings-0.026.tar.gz + Test-Warnings-0.030 + pathname: E/ET/ETHER/Test-Warnings-0.030.tar.gz provides: - Test::Warnings 0.026 + Test::Warnings 0.030 requirements: Carp 0 Exporter 0 @@ -1639,6 +1965,16 @@ DISTRIBUTIONS perl 5.006 strict 0 warnings 0 + Text-ASCIITable-0.22 + pathname: L/LU/LUNATIC/Text-ASCIITable-0.22.tar.gz + provides: + Text::ASCIITable 0.22 + Text::ASCIITable::Wrap 0.2 + requirements: + Carp 0 + Encode 0 + List::Util 0 + perl v5.6.0 Text-Soundex-3.05 pathname: R/RJ/RJBS/Text-Soundex-3.05.tar.gz provides: @@ -1646,8 +1982,19 @@ DISTRIBUTIONS requirements: ExtUtils::MakeMaker 0 if 0 - TimeDate-2.30 - pathname: G/GB/GBARR/TimeDate-2.30.tar.gz + Time-Local-1.30 + pathname: D/DR/DROLSKY/Time-Local-1.30.tar.gz + provides: + Time::Local 1.30 + requirements: + Carp 0 + Exporter 0 + ExtUtils::MakeMaker 0 + constant 0 + parent 0 + strict 0 + TimeDate-2.32 + pathname: A/AT/ATOOMIC/TimeDate-2.32.tar.gz provides: Date::Format 2.24 Date::Format::Generic 2.24 @@ -1672,6 +2019,7 @@ DISTRIBUTIONS Date::Language::Icelandic 1.01 Date::Language::Italian 1.01 Date::Language::Norwegian 1.01 + Date::Language::Occitan 1.04 Date::Language::Oromo 0.99 Date::Language::Romanian 1.01 Date::Language::Russian 1.01 @@ -1685,8 +2033,9 @@ DISTRIBUTIONS Date::Language::TigrinyaEritrean 1.00 Date::Language::TigrinyaEthiopian 1.00 Date::Language::Turkish 1.0 - Date::Parse 2.30 + Date::Parse 2.32 Time::Zone 2.24 + TimeDate 1.21 requirements: ExtUtils::MakeMaker 0 Try-Tiny-0.30 @@ -1834,6 +2183,25 @@ DISTRIBUTIONS URI 1.40 URI::Nested 0.10 perl 5.008001 + Variable-Magic-0.62 + pathname: V/VP/VPIT/Variable-Magic-0.62.tar.gz + provides: + Variable::Magic 0.62 + requirements: + Carp 0 + Config 0 + Exporter 0 + ExtUtils::MakeMaker 0 + IO::Handle 0 + IO::Select 0 + IPC::Open3 0 + POSIX 0 + Socket 0 + Test::More 0 + XSLoader 0 + base 0 + lib 0 + perl 5.008 WWW-RobotRules-6.02 pathname: G/GA/GAAS/WWW-RobotRules-6.02.tar.gz provides: @@ -1860,38 +2228,38 @@ DISTRIBUTIONS perl 5.008001 strict 0 warnings 0 - common-sense-3.74 - pathname: M/ML/MLEHMANN/common-sense-3.74.tar.gz - provides: - common::sense 3.74 - requirements: - ExtUtils::MakeMaker 0 - libwww-perl-6.39 - pathname: O/OA/OALDERS/libwww-perl-6.39.tar.gz - provides: - LWP 6.39 - LWP::Authen::Basic 6.39 - LWP::Authen::Digest 6.39 - LWP::Authen::Ntlm 6.39 - LWP::ConnCache 6.39 - LWP::Debug 6.39 - LWP::Debug::TraceHTTP 6.39 - LWP::DebugFile 6.39 - LWP::MemberMixin 6.39 - LWP::Protocol 6.39 - LWP::Protocol::cpan 6.39 - LWP::Protocol::data 6.39 - LWP::Protocol::file 6.39 - LWP::Protocol::ftp 6.39 - LWP::Protocol::gopher 6.39 - LWP::Protocol::http 6.39 - LWP::Protocol::loopback 6.39 - LWP::Protocol::mailto 6.39 - LWP::Protocol::nntp 6.39 - LWP::Protocol::nogo 6.39 - LWP::RobotUA 6.39 - LWP::Simple 6.39 - LWP::UserAgent 6.39 + common-sense-3.75 + pathname: M/ML/MLEHMANN/common-sense-3.75.tar.gz + provides: + common::sense 3.75 + requirements: + ExtUtils::MakeMaker 0 + libwww-perl-6.44 + pathname: O/OA/OALDERS/libwww-perl-6.44.tar.gz + provides: + LWP 6.44 + LWP::Authen::Basic 6.44 + LWP::Authen::Digest 6.44 + LWP::Authen::Ntlm 6.44 + LWP::ConnCache 6.44 + LWP::Debug 6.44 + LWP::Debug::TraceHTTP 6.44 + LWP::DebugFile 6.44 + LWP::MemberMixin 6.44 + LWP::Protocol 6.44 + LWP::Protocol::cpan 6.44 + LWP::Protocol::data 6.44 + LWP::Protocol::file 6.44 + LWP::Protocol::ftp 6.44 + LWP::Protocol::gopher 6.44 + LWP::Protocol::http 6.44 + LWP::Protocol::loopback 6.44 + LWP::Protocol::mailto 6.44 + LWP::Protocol::nntp 6.44 + LWP::Protocol::nogo 6.44 + LWP::RobotUA 6.44 + LWP::Simple 6.44 + LWP::UserAgent 6.44 libwww::perl undef requirements: CPAN::Meta::Requirements 2.120620 @@ -1928,6 +2296,15 @@ DISTRIBUTIONS perl 5.008001 strict 0 warnings 0 + namespace-clean-0.27 + pathname: R/RI/RIBASUSHI/namespace-clean-0.27.tar.gz + provides: + namespace::clean 0.27 + requirements: + B::Hooks::EndOfScope 0.12 + ExtUtils::MakeMaker 0 + Package::Stash 0.23 + perl 5.008001 perl-ldap-0.66 pathname: M/MA/MARSCHAP/perl-ldap-0.66.tar.gz provides: diff --git a/lib/Lufi.pm b/lib/Lufi.pm index ffadf77..4f961f3 100644 --- a/lib/Lufi.pm +++ b/lib/Lufi.pm @@ -66,6 +66,12 @@ sub startup { # Helpers $self->plugin('Lufi::Plugin::Helpers'); + # Now helpers has been loaded, time to check Swift container + if ($config->{swift}) { + $self->check_swift_container(); + $self->log->info('EXPERIMENTAL Using Swift object storage'); + } + # Recurrent task Mojo::IOLoop->recurring(2 => sub { my $loop = shift; @@ -74,8 +80,10 @@ sub startup { }); # Create directory if needed - mkdir($self->config('upload_dir'), 0700) unless (-d $self->config('upload_dir')); - die ('The upload directory ('.$self->config('upload_dir').') is not writable') unless (-w $self->config('upload_dir')); + if (!defined($config->{swift})) { + mkdir($self->config('upload_dir'), 0700) unless (-d $self->config('upload_dir')); + die ('The upload directory ('.$self->config('upload_dir').') is not writable') unless (-w $self->config('upload_dir')); + } # Configure sessions my $sessions = Mojolicious::Sessions->new; @@ -159,6 +167,11 @@ sub startup { ->to('Misc#about') ->name('about'); + # About config API endpoint + $r->get('/about/config') + ->to('Misc#config_infos') + ->name('config'); + # Generated js files $r->get('/partial/:file') ->to('Misc#js_files') diff --git a/lib/Lufi/Command/copyFilesToSwift.pm b/lib/Lufi/Command/copyFilesToSwift.pm new file mode 100644 index 0000000..860538e --- /dev/null +++ b/lib/Lufi/Command/copyFilesToSwift.pm @@ -0,0 +1,72 @@ +package Lufi::Command::copyFilesToSwift; +use Mojo::Base 'Mojolicious::Command'; +use File::Spec; +use Term::ProgressBar; + +has description => 'Copy files from filesystem to Swift object storage'; +has usage => sub { shift->extract_usage }; + +sub run { + my $c = shift; + + if ($c->app->config('swift')) { + $c->app->check_swift_container(); + my @dirs = glob(File::Spec->catdir($c->app->config('upload_dir'), '*')); + + unless (scalar(@dirs)) { + say sprintf('The configured upload_dir (%s) seems to be empty. Is `upload_dir` configured in lufi.conf?', $c->app->config('upload_dir')); + exit 1; + } + say sprintf('%d folders to upload to Swift (can\'t say how many files, or the total size, sorry). This can take some time.', scalar(@dirs)); + print 'Do you want to continue? [Y/n] '; + my $confirm = ; + + if ($confirm =~ m/yes|y/i) { + my $progress = Term::ProgressBar->new({ count => scalar(@dirs), ETA => 'linear', name => 'Copying to Swift'}); + for my $dir (@dirs) { + my @files = glob(File::Spec->catfile($dir, '*')); + for my $file (@files) { + my ($volume, $directories, $filename) = File::Spec->splitpath($file); + my @file_dirs = File::Spec->splitdir($directories); + my $short = ($file_dirs[-1] ne '') ? $file_dirs[-1] : $file_dirs[-2]; + my $path = File::Spec->catfile($short, $filename); + + open my $fh, '<', $file or die sprintf('Unable to open file %s: %s', $file, $!); + + $c->app->swift->put_object( + container_name => $c->app->config('swift')->{container}, + object_name => $path, + content_length => -s $file, + content => $fh + ); + close $fh; + } + $progress->update(); + } + say sprintf('The copy to Swift object storage has ended. You can test Lufi, then delete `%s` directory', $c->app->config('upload_dir')); + } else { + say 'You want to stop. No problem.'; + } + } else { + say 'You didn\'t configure `swift` in your config file. Exiting.'; + exit 1; + } +} + +=encoding utf8 + +=head1 NAME + +Lufi::Command::copyFilesToSwift Copy files from filesystem to Swift object storage + +=head1 SYNOPSIS + + Usage: script/lufi copyFilesToSwift + + This command needs you to: + - set `upload_dir` in your config file (otherwise, it will use the default path, `files` to copy files from) + - configure `swift` with correct informations in your config file + +=cut + +1; diff --git a/lib/Lufi/Command/sqliteToOtherDB.pm b/lib/Lufi/Command/sqliteToOtherDB.pm index 4c39ff3..0811357 100644 --- a/lib/Lufi/Command/sqliteToOtherDB.pm +++ b/lib/Lufi/Command/sqliteToOtherDB.pm @@ -1,5 +1,6 @@ package Lufi::Command::sqliteToOtherDB; use Mojo::Base 'Mojolicious::Command'; +use Lufi::DB::BreakingChange; use Lufi::DB::File; use Lufi::DB::Slice; use Lufi::DB::Invitation; @@ -9,7 +10,7 @@ use Term::ProgressBar; use Lufi::DefaultConfig qw($default_config); has description => 'Migrate the records from a SQLite db to the currently configured database'; -has usage => sub { shift->extract_usage }; +has usage => sub { shift->extract_usage }; sub run { my $c = shift; @@ -36,8 +37,9 @@ sub run { my $files = $sqlite->db->select('files', undef)->hashes; my $slices = $sqlite->db->select('slices', undef)->hashes; my $invitations = $sqlite->db->select('invitations', undef)->hashes; + my $changes = $sqlite->db->select('breakingchanges', undef)->hashes; - my $progress = Term::ProgressBar->new({count => $files->size + $slices->size + $invitations->size}); + my $progress = Term::ProgressBar->new({count => $files->size + $slices->size + $invitations->size + $changes->size}); $files->each(sub { my ($file, $num) = @_; @@ -69,7 +71,6 @@ sub run { Lufi::DB::Slice->new(app => $c->app) ->short($slice->{short}) ->j($slice->{j}) - ->path($slice->{path}) ->write(); $progress->update(); @@ -92,13 +93,22 @@ sub run { ->write(); $progress->update(); }); + $changes->each(sub { + my ($change, $num) = @_; + + Lufi::DB::BreakingChange->new(app => $c->app) + ->change($change->{change}) + ->ack($change->{ack}) + ->write(); + $progress->update(); + }); } =encoding utf8 =head1 NAME -Lufi::Command::cron::sqliteToOtherDB Migrate the records from a SQLite db to the currently configured database +Lufi::Command::sqliteToOtherDB Migrate the records from a SQLite db to the currently configured database =head1 SYNOPSIS diff --git a/lib/Lufi/Command/theme.pm b/lib/Lufi/Command/theme.pm index 185e5d5..5d7ad57 100644 --- a/lib/Lufi/Command/theme.pm +++ b/lib/Lufi/Command/theme.pm @@ -2,7 +2,7 @@ package Lufi::Command::theme; use Mojo::Base 'Mojolicious::Commands'; use FindBin qw($Bin); -use File::Spec qw(catfile cat dir); +use File::Spec qw(catfile catdir); use File::Path qw(make_path); has description => 'Create new theme skeleton.'; diff --git a/lib/Lufi/Controller/Files.pm b/lib/Lufi/Controller/Files.pm index 71b8c34..af31c6b 100644 --- a/lib/Lufi/Controller/Files.pm +++ b/lib/Lufi/Controller/Files.pm @@ -100,7 +100,8 @@ sub upload { } } # Check that we have enough space (multiplying by 2 since it's encrypted, it takes more place that the original file) - if ($json->{part} == 0 && ($json->{size} * 2) >= dfportable($c->config('upload_dir'))->{bavail}) { + # Only check if using filesystem, not Swift storage + if (!defined($c->config('swift')) && $json->{part} == 0 && ($json->{size} * 2) >= dfportable($c->config('upload_dir'))->{bavail}) { $stop = 1; return $ws->send(decode('UTF-8', encode_json( { @@ -190,19 +191,12 @@ sub upload { # If we already have a part, it's a resend because the websocket has been broken # In this case, we don't need to rewrite the file unless ($f->slices->grep(sub { $_->j == $json->{part} })->size) { - # Create directory - my $dir = catdir($c->config('upload_dir'), $f->short); - mkdir($dir, 0700) unless (-d $dir); - # Create slice file - my $file = catfile($dir, $json->{part}.'.part'); my $s = Lufi::DB::Slice->new( app => $c->app, short => $f->short, - j => $json->{part}, - path => $file - ); - Mojo::File->new($file)->spurt($text); + j => $json->{part} + )->store($text); push @{$f->slices}, $s; $s->write; @@ -327,7 +321,7 @@ sub download { # Get the slice my $e = $f->slices->[$num]; - my $text = Mojo::File->new($e->path)->slurp; + my $text = $e->retrieve(); my ($json2) = split('XXMOJOXX', $text, 2); $json2 = decode 'UTF-8', $json2; diff --git a/lib/Lufi/Controller/Misc.pm b/lib/Lufi/Controller/Misc.pm index d28791b..be2b9a1 100644 --- a/lib/Lufi/Controller/Misc.pm +++ b/lib/Lufi/Controller/Misc.pm @@ -2,6 +2,7 @@ package Lufi::Controller::Misc; use Mojo::Base 'Mojolicious::Controller'; use Mojo::File; +use Mojo::JSON qw(true false); use Mojo::URL; use Lufi::DB::File; @@ -31,7 +32,34 @@ sub change_lang { } sub about { - shift->render(template => 'about'); + my $c = shift; + + $c->render( + template => 'about', + version => $c->git_version + ); +} + +sub config_infos { + my $c = shift; + + $c->render( + json => { + report => $c->config('report'), + instance_name => $c->config('instance_name'), + max_file_size => $c->config('max_file_size'), + broadcast_message => $c->config('broadcast_message'), + default_delay => $c->config('default_delay'), + max_delay => $c->config('max_delay'), + delay_for_size => $c->config('delay_for_size'), + allow_pwd_on_files => $c->config('allow_pwd_on_files'), + force_burn_after_reading => $c->config('force_burn_after_reading'), + keep_ip_during => $c->config('keep_ip_during'), + stop_upload => (-f 'stop-upload' || -f 'stop-upload.manual') ? true : false, + need_authentication => (defined($c->config('ldap')) || defined($c->config('htpasswd'))) ? true : false, + version => $c->git_version + } + ); } sub js_files { diff --git a/lib/Lufi/DB/File.pm b/lib/Lufi/DB/File.pm index e0c562c..0635bd0 100644 --- a/lib/Lufi/DB/File.pm +++ b/lib/Lufi/DB/File.pm @@ -148,13 +148,37 @@ sub delete { $c->slices->each(sub { my ($e, $num) = @_; - unlink $e->path; + $e->delete_file(); }); - rmdir Mojo::File->new($c->app->config('upload_dir'), $c->short); - $c->deleted(1); + $c->delete_path + ->deleted(1) + ->write; - $c->write; + return $c; +} + +=head2 delete_path + +=over 1 + +=item B : C<$c-Edelete_path()> + +=item B : none + +=item B : delete the directory of the slices on filesystem or Swift object storage +=item B : the db accessor object + +=back + +=cut + +sub delete_path { + my $c = shift; + + if (!defined($c->app->config('swift'))) { + rmdir Mojo::File->new($c->app->config('upload_dir'), $c->short); + } return $c; } diff --git a/lib/Lufi/DB/Slice.pm b/lib/Lufi/DB/Slice.pm index 932ac5e..e877953 100644 --- a/lib/Lufi/DB/Slice.pm +++ b/lib/Lufi/DB/Slice.pm @@ -1,14 +1,17 @@ # vim:set sw=4 ts=4 sts=4 ft=perl expandtab: package Lufi::DB::Slice; use Mojo::Base -base; +use Encode 'encode'; +use File::Spec::Functions; use Mojo::Collection 'c'; has 'short'; has 'j'; -has 'path'; has 'record' => 0; has 'app'; +=encoding utf8 + =head1 NAME Lufi::DB::Slice - DB abstraction layer for Lufi file @@ -28,8 +31,6 @@ Have a look at Lufi::DB::Slice::SQLite's code: it's simple and may be more under =item B : integer -=item B : string - =item B : A mojolicious object =back @@ -96,15 +97,121 @@ sub write { my $c = shift; if ($c->record) { - $c->app->dbi->db->query('UPDATE slices SET short = ?, j = ?, path = ? WHERE short = ? AND j = ?', $c->short, $c->j, $c->path, $c->short, $c->j); + $c->app->dbi->db->query('UPDATE slices SET short = ?, j = ? WHERE short = ? AND j = ?', $c->short, $c->j, $c->short, $c->j); } else { - $c->app->dbi->db->query('INSERT INTO slices (short, j, path) VALUES (?, ?, ?)', $c->short, $c->j, $c->path); + $c->app->dbi->db->query('INSERT INTO slices (short, j) VALUES (?, ?)', $c->short, $c->j); $c->record(1); } return $c; } +=head2 store + +=over 1 + +=item B : C<$c-Estore($text)> + +=item B : a scalar value + +=item B : will store the content to the object's path, either on filesystem or on Swift object storage + +=item B : the db accessor object + +=back + +=cut + +sub store { + my $c = shift; + my $text = shift; + + if ($c->app->config('swift')) { + $c->app->swift->put_object( + container_name => $c->app->config('swift')->{container}, + object_name => $c->get_path(), + content_length => length(Encode::encode_utf8($text)), + content => Encode::encode_utf8($text) + ); + } else { + # Create directory + my $dir = catfile($c->app->config('upload_dir'), $c->short); + mkdir($dir, 0700) unless (-d $dir); + + # Write file + my $file = catfile($c->app->config('upload_dir'), $c->get_path()); + Mojo::File->new($file)->spurt($text); + } + + return $c; +} + +=head2 retrieve + +=over 1 + +=item B : C<$c-Eretrieve> + +=item B : none + +=item B : get file from storage, either filesystem or Swift object storage + +=item B : the data from the file + +=back + +=cut + +sub retrieve { + my $c = shift; + my $upload = shift; + + if ($c->app->config('swift')) { + my $file; + $c->app->swift->get_object( + container_name => $c->app->config('swift')->{container}, + object_name => $c->get_path(), + write_code => sub { + my ($status, $message, $headers, $chunk) = @_; + $file .= $chunk; + } + ); + return Encode::decode_utf8($file); + } else { + my $file = catfile($c->app->config('upload_dir'), $c->get_path()); + return Mojo::File->new($file)->slurp; + } +} +=head2 delete_file + +=over 1 + +=item B : C<$c-Edelete_file()> + +=item B : none + +=item B : delete the file on filesystem or Swift object storage + +=item B : the db accessor object + +=back + +=cut + +sub delete_file { + my $c = shift; + + if ($c->app->config('swift')) { + $c->app->swift->delete_object({ + container_name => $c->app->config('swift')->{container}, + object_name => $c->get_path() + }); + } else { + my $file = catfile($c->app->config('upload_dir'), $c->get_path()); + unlink $file or warn sprintf('Could not unlink %s: %s', $file, $!); + } + return $c; +} =head2 get_slices_of_file =over 1 @@ -147,7 +254,7 @@ sub get_slices_of_file { =item B : none -=item B : delete all file records from database unconditionnally +=item B : delete all slices records from database unconditionnally =item B : nothing @@ -161,6 +268,50 @@ sub delete_all { $c->app->dbi->db->delete('slices'); } +=head2 path + +=over 1 + +=item B : C<$c-Epath()> + +=item B : non + +=item B : format the path of the file, relative to the directory of the Swift object storage + +=item B : the path of the file + +=back + +=cut + +sub get_path { + my $c = shift; + + return catfile($c->short, sprintf('%d.part', $c->j)); +} + +=head2 count + +=over 1 + +=item B : C<$c-Ecount()> + +=item B : none + +=item B : get count of slices records from database + +=item B : integer + +=back + +=cut + +sub count { + my $c = shift; + + return $c->app->dbi->db->query('SELECT count(*) AS count FROM slices')->hashes->first->{count}; +} + =head2 _slurp =over 1 @@ -195,7 +346,6 @@ sub _slurp { if ($slice) { $c->short($slice->{short}); $c->j($slice->{j}); - $c->path($slice->{path}); $c->record(1); } diff --git a/lib/Lufi/DB/Slice/Mysql.pm b/lib/Lufi/DB/Slice/Mysql.pm index cb55ed0..390a53a 100644 --- a/lib/Lufi/DB/Slice/Mysql.pm +++ b/lib/Lufi/DB/Slice/Mysql.pm @@ -7,6 +7,8 @@ sub new { $c = $c->SUPER::new(@_); + $c = $c->_slurp if defined $c->record; + return $c; } diff --git a/lib/Lufi/DB/Slice/Pg.pm b/lib/Lufi/DB/Slice/Pg.pm index defdf27..9b03ca7 100644 --- a/lib/Lufi/DB/Slice/Pg.pm +++ b/lib/Lufi/DB/Slice/Pg.pm @@ -7,6 +7,8 @@ sub new { $c = $c->SUPER::new(@_); + $c = $c->_slurp if defined $c->record; + return $c; } diff --git a/lib/Lufi/Plugin/Helpers.pm b/lib/Lufi/Plugin/Helpers.pm index b06fda0..293fb05 100644 --- a/lib/Lufi/Plugin/Helpers.pm +++ b/lib/Lufi/Plugin/Helpers.pm @@ -69,14 +69,15 @@ sub register { $app->helper(create_invitation_token => \&_create_invitation_token); $app->helper(is_guest => \&_is_guest); $app->helper(get_date_lang => \&_get_date_lang); + $app->helper(git_version => \&_git_version); } sub _pg { my $c = shift; - my $pgdb = $c->config('pgdb'); - my $port = (defined $pgdb->{port}) ? $pgdb->{port}: 5432; - my $addr = $c->pg_url({ + my $pgdb = $c->config('pgdb'); + my $port = (defined $pgdb->{port}) ? $pgdb->{port}: 5432; + my $addr = $c->pg_url({ host => $pgdb->{host}, port => $port, database => $pgdb->{database}, user => $pgdb->{user}, pwd => $pgdb->{pwd} }); state $pg = Mojo::Pg->new($addr); @@ -85,11 +86,11 @@ sub _pg { } sub _mysql { - my $c = shift; + my $c = shift; - my $mysqldb = $c->config('mysqldb'); - my $port = (defined $mysqldb->{port}) ? $mysqldb->{port}: 3306; - my $addr = $c->pg_url({ + my $mysqldb = $c->config('mysqldb'); + my $port = (defined $mysqldb->{port}) ? $mysqldb->{port}: 3306; + my $addr = $c->pg_url({ host => $mysqldb->{host}, port => $port, database => $mysqldb->{database}, user => $mysqldb->{user}, pwd => $mysqldb->{pwd} }); $addr =~ s/postgresql/mysql/; @@ -123,7 +124,7 @@ sub _provisioning { } sub _get_empty { - my $c = shift; + my $c = shift; my $ldfile = Lufi::DB::File->new(app => $c->app)->get_empty; @@ -219,7 +220,7 @@ my %date_langs = ( ); sub _get_date_lang { - my $c = shift; + my $c = shift; my $l = $c->languages(); @@ -231,4 +232,18 @@ sub _get_date_lang { return Date::Language->new('English'); } +sub _git_version { + my $c = shift; + + my $last_tag = `git describe --abbrev=0`; + my $last_commit = `git rev-parse HEAD`; + chomp $last_tag; + chomp $last_commit; + + return { + tag => $last_tag, + commit => $last_commit + } +} + 1; diff --git a/lib/Mounter.pm b/lib/Mounter.pm index 5408e0b..19b6dd4 100644 --- a/lib/Mounter.pm +++ b/lib/Mounter.pm @@ -27,6 +27,9 @@ sub startup { # Compress static assets $self->plugin('GzipStatic'); + # Fiat Tux helpers + $self->plugin('FiatTux::Helpers'); + # Headers $self->plugin('Lufi::Plugin::Headers'); diff --git a/lufi.conf.template b/lufi.conf.template index c60cdf9..b7fd9fe 100644 --- a/lufi.conf.template +++ b/lufi.conf.template @@ -99,14 +99,30 @@ # Array of authorized domains for API calls. # If you want to authorize everyone to use the API: ['*'] # 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'], # 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', + #upload_dir => 'files', + + #!!!!!!!!!!!!!!! + # EXPERIMENTAL ! + #!!!!!!!!!!!!!!! + # You can store files on Swift object storage (https://en.wikipedia.org/wiki/OpenStack#Swift) instead of filesystem + # Please read https://metacpan.org/pod/Net::OpenStack::Swift#SYNOPSIS to know how to configure this setting + # IMPORTANT: add a `container` key in it, to let Lufi know which container to use. This is not a regular Net::OpenStack::Swift setting, but Lufi need it. + # EXPERIMENTAL: if the upload or download of files are stucked, reload Lufi and create a cron task to reload Lufi once a day + # You can copy Lufi files to Swift object storage by launching the command `carton exec script/lufi copyFilesToSwift` (can take a long time) + # optional, no default + #swift => { + # auth_url => 'https://auth-endpoint-url/v2.0', + # user => 'userid', + # password => 'password', + # tenant_name => 'project_id', + # container => 'lufi' + #}, # Allow to add a password on files, asked before allowing to download files # optional, default is 0 diff --git a/t/mysql.conf b/t/mysql.conf index 68f9bdb..51a2d80 100644 --- a/t/mysql.conf +++ b/t/mysql.conf @@ -32,6 +32,10 @@ # optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT #secrets => ['fdjsofjoihrei'], + # Name of the instance, displayed next to the logo + # optional, default is Lufi + #instance_name => 'Lufi', + # Choose a theme. See the available themes in `themes` directory # Optional, default is 'default' #theme => 'default', @@ -97,10 +101,6 @@ # optional, no domains allowed by default #allowed_domains => ['http://1.example.com', 'http://2.example.com'], - # If set, the shortened URLs will use this domain - # optional - #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 @@ -108,6 +108,12 @@ # optional, default is 'files' #upload_dir => 'files', + # You can store files on Swift object storage (https://en.wikipedia.org/wiki/OpenStack#Swift) instead of filesystem + # Please read https://metacpan.org/pod/Net::OpenStack::Swift#SYNOPSIS to know how to configure this setting + # IMPORTANT: add a `container` key in it, to let Lufi know which container to use. This is not a regular Net::OpenStack::Swift setting, but Lufi need it. + # optional, no default + #swift => { auth_url => 'http://swiftstack-picoswiftstack:8080/auth/v1.0', user => 'test', password => 'test', container => 'lufi', auth_version => '1.0' }, + # Allow to add a password on files, asked before allowing to download files # optional, default is 0 allow_pwd_on_files => 1, @@ -228,11 +234,47 @@ # # Define the attributes like this: `lufi_attribute_name => 'LDAP_attribute_name'` # Note that you can’t use `username` as a Lufi attribute name: this name is reserved and will contain the login of the user + # optional, no default #ldap_map_attr => { # displayname => 'cn', # mail => 'mail' #}, + # 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 can’t 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 invitation’s expiration delay unless you + # # set this option to 1. + # # optional, default is 0 (disabled) + # extend_invitation_expiration_on_resend => 0, + #}, + ######################### # Htpasswd authentication ######################### diff --git a/t/postgresql.conf b/t/postgresql.conf index 702da4a..0ac7cfe 100644 --- a/t/postgresql.conf +++ b/t/postgresql.conf @@ -32,6 +32,10 @@ # optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT #secrets => ['fdjsofjoihrei'], + # Name of the instance, displayed next to the logo + # optional, default is Lufi + #instance_name => 'Lufi', + # Choose a theme. See the available themes in `themes` directory # Optional, default is 'default' #theme => 'default', @@ -97,10 +101,6 @@ # optional, no domains allowed by default #allowed_domains => ['http://1.example.com', 'http://2.example.com'], - # If set, the shortened URLs will use this domain - # optional - #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 @@ -108,6 +108,12 @@ # optional, default is 'files' #upload_dir => 'files', + # You can store files on Swift object storage (https://en.wikipedia.org/wiki/OpenStack#Swift) instead of filesystem + # Please read https://metacpan.org/pod/Net::OpenStack::Swift#SYNOPSIS to know how to configure this setting + # IMPORTANT: add a `container` key in it, to let Lufi know which container to use. This is not a regular Net::OpenStack::Swift setting, but Lufi need it. + # optional, no default + #swift => { auth_url => 'http://swiftstack-picoswiftstack:8080/auth/v1.0', user => 'test', password => 'test', container => 'lufi', auth_version => '1.0' }, + # Allow to add a password on files, asked before allowing to download files # optional, default is 0 allow_pwd_on_files => 1, @@ -172,6 +178,7 @@ #port => 5432, user => 'lufi', pwd => 'lufi_pwd' + # # https://mojolicious.org/perldoc/Mojo/Pg#max_connections # # optional, default is 1 # #max_connections => 1, }, @@ -212,11 +219,47 @@ # # Define the attributes like this: `lufi_attribute_name => 'LDAP_attribute_name'` # Note that you can’t use `username` as a Lufi attribute name: this name is reserved and will contain the login of the user + # optional, no default #ldap_map_attr => { # displayname => 'cn', # mail => 'mail' #}, + # 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 can’t 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 invitation’s expiration delay unless you + # # set this option to 1. + # # optional, default is 0 (disabled) + # extend_invitation_expiration_on_resend => 0, + #}, + ######################### # Htpasswd authentication ######################### diff --git a/t/sqlite.conf b/t/sqlite.conf index fb1b55e..bebca16 100644 --- a/t/sqlite.conf +++ b/t/sqlite.conf @@ -32,6 +32,10 @@ # optional, default is ['fdjsofjoihrei'], PLEASE, CHANGE IT #secrets => ['fdjsofjoihrei'], + # Name of the instance, displayed next to the logo + # optional, default is Lufi + #instance_name => 'Lufi', + # Choose a theme. See the available themes in `themes` directory # Optional, default is 'default' #theme => 'default', @@ -97,10 +101,6 @@ # optional, no domains allowed by default #allowed_domains => ['http://1.example.com', 'http://2.example.com'], - # If set, the shortened URLs will use this domain - # optional - #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 @@ -108,6 +108,12 @@ # optional, default is 'files' #upload_dir => 'files', + # You can store files on Swift object storage (https://en.wikipedia.org/wiki/OpenStack#Swift) instead of filesystem + # Please read https://metacpan.org/pod/Net::OpenStack::Swift#SYNOPSIS to know how to configure this setting + # IMPORTANT: add a `container` key in it, to let Lufi know which container to use. This is not a regular Net::OpenStack::Swift setting, but Lufi need it. + # optional, no default + #swift => { auth_url => 'http://swiftstack-picoswiftstack:8080/auth/v1.0', user => 'test', password => 'test', container => 'lufi', auth_version => '1.0' }, + # Allow to add a password on files, asked before allowing to download files # optional, default is 0 allow_pwd_on_files => 1, @@ -217,11 +223,47 @@ # # Define the attributes like this: `lufi_attribute_name => 'LDAP_attribute_name'` # Note that you can’t use `username` as a Lufi attribute name: this name is reserved and will contain the login of the user + # optional, no default #ldap_map_attr => { # displayname => 'cn', # mail => 'mail' #}, + # 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 can’t 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 invitation’s expiration delay unless you + # # set this option to 1. + # # optional, default is 0 (disabled) + # extend_invitation_expiration_on_resend => 0, + #}, + ######################### # Htpasswd authentication ######################### diff --git a/t/test.t b/t/test.t index 4b4dedb..5d0da45 100644 --- a/t/test.t +++ b/t/test.t @@ -1,7 +1,7 @@ # vim:set sw=4 ts=4 sts=4 ft=perl expandtab: use Mojo::Base -strict; use Mojo::File; -use Mojo::JSON qw(to_json from_json true); +use Mojo::JSON qw(to_json from_json true false); use Mojolicious; use Test::More; @@ -13,18 +13,19 @@ use FindBin qw($Bin); my ($m, $cfile, $config_orig, $config_file, $config_content); -my $msg = to_json { +my $msg = Encode::encode_utf8(to_json { "total" => 1, "part" => 0, "size" => 7, - "name" => "foobar.txt", + "name" => "foobarĂ©.txt", "type" => "text/plain", "delay" => "0", "del_at_first_view" => 1, "id" => undef, "zipped" => 0, "i" => 0 -}; +}); +my $filename_test = Encode::encode_utf8('foobarĂ©'); 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_rgx = $encrypted; $encrypted_rgx =~ s@\\@\\\\@g; @@ -77,6 +78,9 @@ BEGIN { Lufi::DB::Slice->new(app => $m)->delete_all; Lufi::DB::File->new(app => $m)->delete_all; +$config_file = Mojo::File->new($cfile->to_abs->to_string); +$config_orig = $config_file->slurp; + my $t = Test::Mojo->new('Lufi'); ## Wait for short generation @@ -87,24 +91,60 @@ $t->get_ok('/') ->status_is(200) ->content_like(qr@Lufi@i); +test_infos_api(false); test_upload_file(); test_download_file(); ## Test htpasswd switch_to_htpasswd(); +test_infos_api(true); auth_test_suite('luc', 'toto'); restore_config(); ## Test LDAP switch_to_ldap(); +test_infos_api(true); auth_test_suite('zoidberg', 'zoidberg'); restore_config(); +## Test Swift object storage +switch_to_swift(); +test_upload_file(); +test_download_file(); +restore_config(); + done_testing(); ###### ### Functions ## +sub test_infos_api { + my $auth = shift; + + $t->get_ok('/about/config') + ->status_is(200) + ->json_has( + '/allow_pwd_on_files', '/need_authentication', '/max_delay', + '/instance_name', '/broadcast_message', '/max_file_size', + '/keep_ip_during', '/report', '/stop_upload', + '/delay_for_size', '/default_delay', '/force_burn_after_reading' + ) + ->json_is( + '/allow_pwd_on_files' => 1, + '/need_authentication' => $auth, + '/max_delay' => 0, + '/instance_name' => 'Lufi', + '/broadcast_message' => undef, + '/max_file_size' => undef, + '/keep_ip_during' => 365, + '/report' => 'mailto:report@example.com', + '/stop_upload' => false, + '/delay_for_size' => undef, + '/default_delay' => 0, + '/force_burn_after_reading' => 0 + ); +} + sub test_upload_file { $t->websocket_ok('/upload/') ->send_ok($msg.'XXMOJOXX'.$encrypted) @@ -115,7 +155,7 @@ sub test_upload_file { ->message_like(qr@"duration":\d+@) ->message_like(qr@"i":0@) ->message_like(qr@"j":0@) - ->message_like(qr@"name":"foobar\.txt"@) + ->message_like(qr@"name":"$filename_test\.txt"@) ->message_like(qr@"parts":1@) ->message_like(qr@"sent_delay":0@) ->message_like(qr@"short":"[^"]+"@) @@ -153,7 +193,7 @@ sub test_download_file { ->message_like(qr@"id":null@) ->message_like(qr@"del_at_first_view":1@) ->message_like(qr@"delay":"0"@) - ->message_like(qr@"name":"foobar\.txt"@) + ->message_like(qr@"name":"$filename_test\.txt"@) ->message_like(qr@"size":7@) ->message_like(qr@"type":"text\\/plain"@) ->message_like(qr@XXMOJOXX@) @@ -233,9 +273,7 @@ sub restore_config { } sub switch_to_htpasswd { - $config_file = Mojo::File->new($cfile->to_abs->to_string); - $config_content = $config_file->slurp; - $config_orig = $config_content; + $config_content = $config_orig; $config_content =~ s/#?htpasswd.*/htpasswd => 't\/lufi.passwd',/gm; $config_file->spurt($config_content); @@ -261,3 +299,17 @@ sub switch_to_ldap { ## Wait for short generation sleep 5; } + +sub switch_to_swift { + $config_content = $config_orig; + $config_content =~ s/^( +)#?swift => \{ auth_url/$1swift => { auth_url/gm; + $config_file->spurt($config_content); + + Lufi::DB::Slice->new(app => $m)->delete_all; + Lufi::DB::File->new(app => $m)->delete_all; + + $t = Test::Mojo->new('Lufi'); + + ## Wait for short generation + sleep 5; +} diff --git a/themes/default/lib/Lufi/I18N/ar.po b/themes/default/lib/Lufi/I18N/ar.po index da590fc..e418b1c 100644 --- a/themes/default/lib/Lufi/I18N/ar.po +++ b/themes/default/lib/Lufi/I18N/ar.po @@ -5,16 +5,17 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-05-30 12:24+0000\n" +"Last-Translator: ButterflyOfFire \n" +"Language-Team: Arabic \n" +"Language: ar\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-08-09 08:47+0000\n" -"Last-Translator: ButterflyOfFire \n" -"Language: ar\n" "Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 " "&& n%100<=10 ? 3 : n%100>=11 ? 4 : 5;\n" -"X-Generator: Zanata 4.6.2\n" -"Language-Team: Arabic\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -78,7 +79,7 @@ msgstr "Ű„Ű¶Ű§ÙŰ© ÙƒÙ„Ù…Ű© ŰłŰ±ÙŠŰ© Ű„Ù„Ù‰ Ű§Ù„Ù…Ù„Ù" msgid "" "Adding URLs not related to this Lufi instance to the mail body or subject is " "prohibited." -msgstr "" +msgstr "ÙŠÙŰ­ŰžŰ± Ű„Ű¶Ű§ÙŰ© ۱ۧۚ۷ ŰșÙŠŰ± Ù…Ű±ŰȘۚ۷ ŰšŰłÙŠŰ±ÙŰ± Lufi Ù‡Ű°Ű§ في Ù†Ű” Ű§Ù„ŰšŰ±ÙŠŰŻ ŰŁÙˆ في Ű§Ù„Ù…ÙˆŰ¶ÙˆŰč." #: themes/default/templates/partial/invitations.js.ep:3 msgid "Are you sure you want to delete the selected invitations?" @@ -101,7 +102,7 @@ msgstr "" #. (stash('nbslices') #: themes/default/templates/partial/render.js.ep:9 msgid "Asking for file part XX1 of %1" -msgstr "Ű·Ù„Űš Ű§Ù„ŰŹŰČŰĄ XX1 مِن %1 " +msgstr "Ű·Ù„Űš Ű§Ù„ŰŹŰČŰĄ XX1 مِن %1" #: themes/default/templates/about.html.ep:20 msgid "Back to homepage" @@ -137,7 +138,7 @@ msgstr "ŰčÙ†Ű§ÙˆÙŠÙ† Ű§Ù„ŰšŰ±ÙŠŰŻ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠŰ© Ù…ÙÙ‚ŰłÙ‘Ù…Ű© ŰšÙŰ§Ű” #: themes/default/templates/index.html.ep:140 msgid "Compressing zip file
" -msgstr "ŰŹŰ§Ű±Ù ۶ŰșŰ· ملف zip..." +msgstr "ŰŹŰ§Ű±Ù ۶ŰșŰ· ملف zip
" #: themes/default/templates/partial/index.js.ep:15 msgid "Copy all links to clipboard" @@ -192,6 +193,8 @@ 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 "" +"Ù„Ű§ ŰȘقلق: ۄ۰ۧ ۚۯۣ Ű§Ù„Ù…ŰłŰȘŰźŰŻÙ… في ŰȘنŰČيل Ű§Ù„Ù…Ù„Ù Ù‚ŰšÙ„ Ű§Ù†ŰȘÙ‡Ű§ŰĄ Ű”Ù„Ű§Ű­ÙŠŰȘه ÙˆŰ§Ù†ŰȘهŰȘ ŰčÙ…Ù„ÙŠŰ© " +"Ű§Ù„ŰȘنŰČيل ŰšŰčŰŻ Ű§Ù†ŰȘÙ‡Ű§ŰĄ Ű”Ù„Ű§Ű­ÙŠŰȘه ی ÙŰłÙŠŰȘمكن من Ű§Ù„Ű­Ű”ÙˆÙ„ Űčلى Ű§Ù„Ù…Ù„Ù." #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28 msgid "Download" @@ -213,6 +216,9 @@ msgid "" "people you want to share the file with and a deletion link, allowing you to " "delete the file whenever you want." msgstr "" +"ۧ۳ۭۚ Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Ű„Ù„Ù‰ Ű§Ù„Ű­Ù‚Ù„ Ű§Ù„Ù…ŰźŰ”Ű” Ù„Ű°Ù„Ùƒ ŰŁÙˆ Ű­ŰŻŰŻ Ù…Ù„ÙÙ‹Ű§ ŰšŰ·Ű±ÙŠÙ‚Ű© ÙƒÙ„Ű§ŰłÙŠÙƒÙŠŰ© ÙˆŰłÙŠŰȘم Ù‚Ű” " +"Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Ű„Ù„Ù‰ ŰŁŰŹŰČۧۥ Ù…ŰŽÙŰ±Ű© ÙˆŰ„Ű±ŰłŰ§Ù„Ù‡Ű§ Ű„Ù„Ù‰ Ű§Ù„ŰźŰ§ŰŻÙ…. ŰłŰȘŰ­Ű”Ù„ Űčلى Ű±ÙˆŰ§ŰšŰ· لكل ملف: ۱ۧۚ۷ " +"للŰȘنŰČيل ÙˆŰ±Ű§ŰšŰ· Ù„Ű­Ű°Ù Ű§Ù„Ù…Ù„Ù ŰčÙ†ŰŻ Ű§Ù„Ű­Ű§ŰŹŰ© Ù„Ű°Ù„Ùƒ." #: themes/default/templates/index.html.ep:122 msgid "Drop files here" @@ -264,7 +270,7 @@ msgstr "ŰȘنŰȘهي Ű”Ù„Ű§Ű­ÙŠŰȘه في" #: themes/default/templates/files.html.ep:12 msgid "Export localStorage data" -msgstr "" +msgstr "ŰȘŰ”ŰŻÙŠŰ± ŰšÙŠŰ§Ù†Ű§ŰȘ localStorage" #: lib/Lufi/Controller/Files.pm:471 msgid "File deleted" @@ -288,7 +294,7 @@ msgstr "ŰȘم Ű„Ű±ŰłŰ§Ù„ Ű§Ù„Ù…Ù„Ù في" #: themes/default/templates/partial/invitations.js.ep:8 msgid "Files sent in invitation XX1 by XX2" -msgstr "" +msgstr "Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Ű§Ù„Ù…Ű±ŰłÙ„Ű© في Ű§Ù„ŰŻŰčÙˆŰ© XX1 ŰšÙˆŰ§ŰłŰ·Ű© XX2" #: themes/default/templates/partial/render.js.ep:8 msgid "Get the file" @@ -364,7 +370,7 @@ msgstr "" #: themes/default/templates/files.html.ep:14 msgid "Import localStorage data" -msgstr "" +msgstr "ۧ۳ŰȘÙŠŰ±Ű§ŰŻ ŰšÙŠŰ§Ù†Ű§ŰȘ localStorage" #: themes/default/templates/index.html.ep:53 msgid "Important: more information on delays" @@ -376,7 +382,7 @@ msgstr "مŰčÙ„ÙˆÙ…Ű§ŰȘ Ű­ÙˆÙ„ Ű§Ù„ŰȘŰŁŰźÙŠŰ±" #: themes/default/templates/files.html.ep:18 themes/default/templates/invitations/my_invitations.html.ep:12 msgid "Invert selection" -msgstr "" +msgstr "ŰčÙƒŰł Ű§Ù„Ű§ŰźŰȘÙŠŰ§Ű±" #. ($i->guest_mail, $url) #: lib/Lufi/Controller/Invitation.pm:171 @@ -426,6 +432,13 @@ msgid "" "one.\\nDo you want to import those informations?\\n\\nPlease note that this " "is the only time that we will ask you this." msgstr "" +"Lufi Ù…Ű€Ű§ŰźŰ±Ű§ ŰșÙŠŰ± Ű·Ű±ÙŠÙ‚Ù‡ ŰȘŰźŰČين مŰčÙ„ÙˆÙ…Ű§ŰȘ Ű§Ù„Ù…Ù„ÙŰ§ŰȘ\\n" +"\\n" +"لم يŰȘم Ű§Ù„ŰčŰ«ÙˆŰ± Űčلى Ù…Ù„ÙŰ§ŰȘ في موقŰč Ű§Ù„ŰȘŰźŰČين Ű§Ù„Ù…Ű­Ù„ÙŠ Ű§Ù„ŰŹŰŻÙŠŰŻ ÙˆÙ„ÙƒÙ†Ù†Ű§ ÙˆŰŹŰŻÙ†Ű§ Ù…Ù„ÙŰ§ŰȘ في " +"Ű§Ù„Ù…ÙˆÙ‚Űč Ű§Ù„Ù‚ŰŻÙŠÙ….\\n" +"هل ŰȘŰ±ÙŠŰŻ ۧ۳ŰȘÙŠŰ±Ű§ŰŻ ŰȘلك Ű§Ù„Ù…ŰčÙ„ÙˆÙ…Ű§ŰȘ۟\\n" +"\\n" +"ÙŠŰ±ŰŹÙ‰ Ù…Ù„Ű§Ű­ŰžŰ© ŰŁÙ† Ù‡Ű°Ù‡ هي Ű§Ù„Ù…Ű±Ű© Ű§Ù„ÙˆŰ­ÙŠŰŻŰ© Ű§Ù„ŰȘي ŰłÙ†Ű·Ù„Űš ÙÙŠÙ‡Ű§ منك Ű°Ù„Ùƒ." #: themes/default/templates/files.html.ep:34 msgid "Mail" @@ -463,6 +476,8 @@ msgid "" "stored in localStorage: if you delete your localStorage data, you'll lose " "this list." msgstr "" +"ŰłÙŠŰȘم ۳۱ۯ Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Ű§Ù„Ù…Ű±ŰłÙ„Ű© ۚۧ۳ŰȘŰźŰŻŰ§Ù… Ù‡Ű°Ű§ Ű§Ù„Ù…ŰȘŰ”ÙŰ­ ÙÙ‚Ű· Ù‡Ù†Ű§. يŰȘم ŰȘŰźŰČين Ù‡Ű°Ù‡ Ű§Ù„Ù‚Ű§ŰŠÙ…Ű© " +"في Ű§Ù„ŰȘŰźŰČين Ű§Ù„Ù…Ű­Ù„ÙŠ: ۄ۰ۧ قمŰȘ ŰšŰ­Ű°Ù ŰšÙŠŰ§Ù†Ű§ŰȘ Ű§Ù„ŰȘŰźŰČين Ű§Ù„Ù…Ű­Ù„ÙŠŰ© ی ÙŰłŰȘÙÙ‚ŰŻ Ù‡Ű°Ù‡ Ű§Ù„Ù‚Ű§ŰŠÙ…Ű©." #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" @@ -486,6 +501,8 @@ msgid "" "Please, check your credentials or your right to access this service: unable " "to authenticate." msgstr "" +"من ÙŰ¶Ù„Ùƒ ی ŰȘŰ­Ù‚Ù‚ من ŰšÙŠÙ†Ű§ŰȘك ŰŁÙˆ Ű­Ù‚Ùƒ في Ű§Ù„ÙˆŰ”ÙˆÙ„ Ű„Ù„Ù‰ Ù‡Ű°Ù‡ Ű§Ù„ŰźŰŻÙ…Ű©: ŰșÙŠŰ± Ù‚Ű§ŰŻŰ± Űčلى " +"Ű§Ù„ŰȘŰ­Ù‚Ù‚." #: themes/default/templates/about.html.ep:5 msgid "Privacy" @@ -541,6 +558,8 @@ msgid "" "Sending part XX1 of XX2. Please, be patient, the progress bar can take a " "while to move." msgstr "" +"Ű„Ű±ŰłŰ§Ù„ Ű§Ù„ŰŹŰČŰĄ XX1 من XX2. ÙŠŰ±ŰŹÙ‰ Ű§Ù„ŰȘŰ­Ù„ÙŠ ŰšŰ§Ù„Ű”ŰšŰ± ی Ù‚ŰŻ ÙŠŰłŰȘŰșŰ±Ù‚ ŰŽŰ±ÙŠŰ· Ű§Ù„ŰȘÙ‚ŰŻÙ… ŰšŰč۶ Ű§Ù„ÙˆÙ‚ŰȘ " +"للŰȘŰ­Ű±Ùƒ." #. (url_for('/') #: themes/default/templates/partial/mail.js.ep:48 @@ -553,7 +572,7 @@ msgstr "ŰŁŰžÙ‡Ű± Ű§Ù„ŰŻŰčÙˆŰ§ŰȘ Ű§Ù„Ù…ŰźÙÙŠŰ©" #: themes/default/templates/partial/render.js.ep:11 msgid "Show zip content" -msgstr "ŰŁŰžÙ‡Ű± Ù…Ű­ŰȘوى Ű§Ù„Ù…Ù„Ù Ű§Ù„Ù…Ű¶ŰșÙˆŰ· zip" +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" @@ -603,6 +622,8 @@ msgid "" "The body of the mail must contain at least one URL pointing to a file hosted " "on this instance." msgstr "" +"ÙŠŰŹŰš ŰŁÙ† ÙŠŰ­ŰȘوي Ù†Ű” Ű§Ù„ŰšŰ±ÙŠŰŻ Űčلى ۱ۧۚ۷ ÙˆŰ§Ű­ŰŻ Űčلى Ű§Ù„ŰŁÙ‚Ù„ ÙŠŰŽÙŠŰ± Ű„Ù„Ù‰ ملف Ù…ŰłŰȘŰ¶Ű§Ù Űčلى Ù‡Ű°Ű§ " +"Ű§Ù„ŰłÙŠŰ±ÙŰ±." #: themes/default/templates/partial/files.js.ep:11 msgid "The data has been successfully imported." @@ -619,7 +640,7 @@ msgstr "Ù„Ű§ يمكن ŰŁÙ† يُŰȘŰ±Ùƒ Ù…ÙˆŰ¶ÙˆŰč Ű§Ù„Ű±ŰłŰ§Ù„Ű© ÙŰ§Ű±ŰșÙ‹Ű§." #. ($expire_at, $max_expire_at) #: lib/Lufi/Controller/Invitation.pm:51 msgid "The expiration delay (%1) is not between 1 and %2 days." -msgstr "" +msgstr "Ù…ŰŻŰ© Ű§Ù†ŰȘÙ‡Ű§ŰĄ Ű§Ù„Ű”Ù„Ű§Ű­ÙŠŰ© (%1) Ù„ÙŠŰł ŰšÙŠÙ† 1 و %2 ŰŁÙŠŰ§Ù…." #: lib/Lufi/Controller/Files.pm:468 msgid "The file has already been deleted" @@ -649,6 +670,8 @@ msgid "" "The invitation %1 can’t be resent: %2 has already sent files.
Please " "create a new invitation." msgstr "" +"Ù„Ű§ يمكن Ű„Űčۧۯ۩ Ű„Ű±ŰłŰ§Ù„ Ű§Ù„ŰŻŰčÙˆŰ© %1: Ù„Ù‚ŰŻ ŰŁŰ±ŰłÙ„ %2 Ù…Ù„ÙŰ§ŰȘ ŰšŰ§Ù„ÙŰčل.
Ű§Ù„Ű±ŰŹŰ§ŰĄ Ű„Ù†ŰŽŰ§ŰĄ " +"ŰŻŰčÙˆŰ© ŰŹŰŻÙŠŰŻŰ©." #. ($i->token) #: lib/Lufi/Controller/Invitation.pm:130 @@ -658,7 +681,7 @@ msgstr "Ù„Ù‚ŰŻ ŰȘم Ű­Ű°Ù Ű§Ù„ŰŻŰčÙˆŰ© %1." #. (stash('user_mail') #: themes/default/templates/invitations/invite.html.ep:34 msgid "The invitation mail will be send from your email address (%1)." -msgstr "" +msgstr "ŰłÙŠŰȘم Ű„Ű±ŰłŰ§Ù„ ŰšŰ±ÙŠŰŻ Ű§Ù„ŰŻŰčÙˆŰ© من ŰčÙ†ÙˆŰ§Ù† ŰšŰ±ÙŠŰŻÙƒ Ű§Ù„Ű„Ù„ÙƒŰȘŰ±ÙˆÙ†ÙŠ (%1)." #: themes/default/templates/partial/index.js.ep:16 msgid "The link(s) has been copied to your clipboard" @@ -668,12 +691,13 @@ msgstr "Ù„Ù‚ŰŻ ŰȘم Ù†ŰłŰź Ű§Ù„Ű±Ű§ŰšŰ· ŰŁÙˆ Ű§Ù„Ű±ÙˆŰ§ŰšŰ· Ű„Ù„Ù‰ Ű§Ù„Ű­Ű§ÙŰž #: 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 "" +msgstr "ŰłÙŠŰȘم Ű„Ű±ŰłŰ§Ù„ Ű§Ù„Ű±Ű§ŰšŰ· (Ű§Ù„Ű±ÙˆŰ§ŰšŰ·) Ù„Ù…Ù„ÙŰ§ŰȘك ŰȘÙ„Ù‚Ű§ŰŠÙŠÙ‹Ű§ Űčن Ű·Ű±ÙŠÙ‚ Ű§Ù„ŰšŰ±ÙŠŰŻ Ű„Ù„Ù‰ %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 "" +"ŰłÙŠŰȘم Ű„Ű±ŰłŰ§Ù„ Ű§Ù„Ű§Ű±ŰȘۚۧ۷ (Ű§Ù„Ű§Ű±ŰȘۚۧ۷ۧŰȘ) Ù„Ù…Ù„ÙŰ§ŰȘك ŰȘÙ„Ù‚Ű§ŰŠÙŠÙ‹Ű§ Űčن Ű·Ű±ÙŠÙ‚ Ű§Ù„ŰšŰ±ÙŠŰŻ Ű„Ù„Ù‰ %1." #: lib/Lufi/Controller/Mail.pm:97 msgid "The mail has been sent." @@ -692,6 +716,8 @@ msgid "" "The server was unable to find the file record to add your file part to. " "Please, contact the administrator." msgstr "" +"لم يŰȘمكن Ű§Ù„ŰźŰ§ŰŻÙ… من Ű§Ù„ŰčŰ«ÙˆŰ± Űčلى ŰłŰŹÙ„ Ű§Ù„Ù…Ù„Ù Ù„Ű„Ű¶Ű§ÙŰ© ŰŹŰČŰĄ ملفك Ű„Ù„ÙŠÙ‡. من ÙŰ¶Ù„ÙƒŰŒ ŰȘÙˆŰ§Ű”Ù„ " +"ŰšŰ§Ù„Ù…ŰłŰ€ÙˆÙ„." #: lib/Lufi/Controller/Files.pm:295 msgid "" @@ -705,7 +731,7 @@ msgstr "Ű§Ù„ŰŻŰčÙˆŰ© Ù…ŰźÙÙŠŰ© ŰšŰŽÙƒÙ„ ŰčŰ§ŰŻÙŠ" #. (stash('expires') #: themes/default/templates/invitations/invite.mail.ep:13 msgid "This invitation is valid until %1." -msgstr "" +msgstr "Ù‡Ű°Ù‡ Ű§Ù„ŰŻŰčÙˆŰ© Ű”Ű§Ù„Ű­Ű© Ű„Ù„Ù‰ ŰșŰ§ÙŠŰ© %1." #: themes/default/templates/delays.html.ep:10 msgid "" @@ -713,10 +739,12 @@ msgid "" "delay of your file will be the minimum between what you choose and the " "following limitations:" msgstr "" +"ÙŠŰ¶Űč Ù‡Ű°Ű§ Ű§Ù„ŰźŰ§ŰŻÙ… Ù‚ÙŠÙˆŰŻÙ‹Ű§ ÙˆÙÙ‚Ù‹Ű§ Ù„Ű­ŰŹÙ… Ű§Ù„Ù…Ù„Ù. ŰłÙŠÙƒÙˆÙ† ŰȘŰŁŰźÙŠŰ± Ű§Ù†ŰȘÙ‡Ű§ŰĄ Ű”Ù„Ű§Ű­ÙŠŰ© ملفك هو " +"Ű§Ù„Ű­ŰŻ Ű§Ù„ŰŁŰŻÙ†Ù‰ ŰšÙŠÙ† Ù…Ű§ ŰȘŰźŰȘŰ§Ű±Ù‡ ÙˆŰ§Ù„Ù‚ÙŠÙˆŰŻ Ű§Ù„ŰȘŰ§Ù„ÙŠŰ©:" #: themes/default/templates/invitations/my_invitations.html.ep:16 msgid "Toggle visibility" -msgstr "" +msgstr "ŰȘŰšŰŻÙŠÙ„ Ű§Ù„Ű±Ű€ÙŠŰ©" #: themes/default/templates/invitations/my_invitations.html.ep:25 msgid "URL" @@ -732,6 +760,7 @@ msgid "" "Unable to get counter for %1. The file does not exists. It will be removed " "from your localStorage." msgstr "" +"ŰȘŰčŰ°Ù‘Ű± Ű§Ù„Ű­Ű”ÙˆÙ„ Űčلى Űčۯۧۯ لـ %1. Ű§Ù„Ù…Ù„Ù ŰșÙŠŰ± Ù…ÙˆŰŹÙˆŰŻ. ŰłŰȘŰȘم Ű„ŰČŰ§Ù„ŰȘه من localStorage." #. ($short) #: lib/Lufi/Controller/Files.pm:429 @@ -780,6 +809,8 @@ msgid "" "You can invite someone to send you files through this Lufi instance even if " "they don’t have an account on it." msgstr "" +"يمكنك ŰŻŰčÙˆŰ© ێ۟۔ Ù…Ű§ Ù„Ű„Ű±ŰłŰ§Ù„ Ű§Ù„Ù…Ù„ÙŰ§ŰȘ Ű„Ù„ÙŠÙƒ من ŰźÙ„Ű§Ù„ ŰłÙŠŰ±ÙŰ± Lufi Ù‡Ű°Ű§ Ű­ŰȘى ۄ۰ۧ لم يكن " +"Ù„ŰŻÙŠÙ‡ ۭ۳ۧۚ Űčليه." #: themes/default/templates/about.html.ep:11 msgid "" @@ -791,7 +822,7 @@ msgstr "" #: lib/Lufi/Controller/Mail.pm:42 msgid "You can't add URLs that are not related to this instance." -msgstr "" +msgstr "Ù„Ű§ يمكنك Ű„Ű¶Ű§ÙŰ© Ű±ÙˆŰ§ŰšŰ· ŰșÙŠŰ± Ù…Ű±ŰȘۚ۷۩ ŰšÙ‡Ű°Ű§ Ű§Ù„ŰłÙŠŰ±ÙŰ±." #: themes/default/templates/about.html.ep:8 msgid "" @@ -808,6 +839,8 @@ msgid "" "You don't seem to have a key in your URL. You won't be able to decrypt the " "file. Download canceled." msgstr "" +"ÙŠŰšŰŻÙˆ ŰŁÙ†Ùƒ Ù„Ű§ ŰȘملك مفŰȘŰ§Ű­Ù‹Ű§ في Ű§Ù„Ű±Ű§ŰšŰ· Ű§Ù„ŰźŰ§Ű” ŰšÙƒ. لن ŰȘŰȘمكن من فك ŰȘŰŽÙÙŠŰ± Ű§Ù„Ù…Ù„Ù. ŰȘم " +"Ű„Ù„Űșۧۥ Ű§Ù„ŰȘنŰČيل." #: themes/default/templates/partial/render.js.ep:7 msgid "" @@ -851,17 +884,17 @@ msgstr "Ű§Ù„ÙƒÙ„Ù…Ű© Ű§Ù„ŰłŰ±ÙŠŰ© ŰșÙŠŰ± Ű”Ű§Ù„Ű­Ű©. ÙŠŰ±ŰŹÙ‰ ŰȘŰ­ŰŻÙŠŰ« Ű§Ù„Ű” #: themes/default/templates/partial/render.js.ep:12 msgid "Zip content:" -msgstr "" +msgstr "Ù…Ű­ŰȘوى ملف Zip Ű§Ù„Ù…Ű¶ŰșÙˆŰ·:" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:20 msgid "between %1 and %2, the file will be kept %3 day(s)." -msgstr "" +msgstr "ŰšÙŠÙ† %1 و %2ی ŰłÙŠŰȘم Ű§Ù„Ű§Ű­ŰȘÙŰ§Űž ŰšŰ§Ù„Ù…Ù„Ù %1 يوم (ŰŁÙŠŰ§Ù…)." #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:22 msgid "between %1 and %2, the file will be kept forever." -msgstr "" +msgstr "ŰšÙŠÙ† %1 و%2 ی ŰłÙŠŰȘم Ű§Ù„Ű§Ű­ŰȘÙŰ§Űž ŰšŰ§Ù„Ù…Ù„Ù Ű„Ù„Ù‰ Ű§Ù„ŰŁŰšŰŻ." #: themes/default/templates/partial/mail.js.ep:42 msgid "deadline: " @@ -874,12 +907,12 @@ msgstr "منŰȘÙ‡ÙŠŰ© Ű”Ù„Ű§Ű­ÙŠŰȘÙ‡Ű§ في XXX" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:26 msgid "for %1 and more, the file will be kept %2 day(s)" -msgstr "" +msgstr "ل%1 ÙˆŰ§Ù„Ù…ŰČÙŠŰŻ ی ŰłÙŠŰȘم Ű§Ù„Ű§Ű­ŰȘÙŰ§Űž ŰšŰ§Ù„Ù…Ù„Ù %2 يوم (ŰŁÙŠŰ§Ù…)" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:28 msgid "for %1 and more, the file will be kept forever." -msgstr "" +msgstr "ل%1 ÙˆŰ§Ù„Ù…ŰČÙŠŰŻ ی ŰłÙŠŰȘم Ű§Ù„Ű§Ű­ŰȘÙŰ§Űž ŰšŰ§Ù„Ù…Ù„Ù Ű„Ù„Ù‰ Ű§Ù„ŰŁŰšŰŻ." #: themes/default/templates/index.html.ep:3 msgid "no time limit" @@ -892,4 +925,41 @@ 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 "— %1 (%2)ی ŰłŰȘنŰȘهي Ű”Ù„Ű§Ű­ÙŠŰȘه في %3" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" msgstr "" +"Ű§Ű­Ű”Ù„ Űčلي Ű§Ù„ÙƒÙˆŰŻ من Ű§Ù„Ù…ŰłŰȘÙˆŰŻŰč Ű§Ù„Ű±ŰłÙ…ÙŠ Ű§Ùˆ من Github " + +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "ŰȘم Ű±ÙŰč Ű§Ù„Ù…Ù„Ù" + +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "ŰȘم ŰȘنŰČيل Ű§Ù„Ù…Ù„Ù" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Lufi هو ŰšŰ±Ù†Ű§Ù…ŰŹ ۭ۱ Ù…Ű±ŰźŰ” ŰšÙ…ÙˆŰŹŰš ŰŽŰ±ÙˆŰ· AGPLv3 يمكنك ŰȘŰ«ŰšÙŠŰȘه Űčلى ŰźŰ§ŰŻÙ…Ùƒ Ű§Ù„ŰźŰ§Ű”. Ű„Ù„Ù‚ÙŠ Ù†ŰžŰ±Ű© " +"Űčلى Ű§Ù„ÙˆÙŠÙƒÙŠ للŰȘŰčŰ±Ù‘Ù Űčلى ÙƒÙŠÙÙŠŰ© Ű§Ù„Ù‚ÙŠŰ§Ù… ŰšŰ°Ù„Ùƒ." + +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "Ű§Ù„Ű„Ű”ŰŻŰ§Ű±" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "۹۟۱ ŰčÙ„Ű§Ù…Ű© Űčلى Ù…Ű«ÙŠÙ„ Ű§Ù„ŰźŰ§ŰŻÙ… Ù‡Ű°Ű§: %1" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "۹۟۱ Ù…Ű±Ű§ŰŹŰčŰ© Űčلى Ù…Ű«ÙŠÙ„ Ű§Ù„ŰźŰ§ŰŻÙ… Ù‡Ű°Ű§: %1" diff --git a/themes/default/lib/Lufi/I18N/ca.po b/themes/default/lib/Lufi/I18N/ca.po index 2e2406a..4b3c6b8 100644 --- a/themes/default/lib/Lufi/I18N/ca.po +++ b/themes/default/lib/Lufi/I18N/ca.po @@ -10,15 +10,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 18:29+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: Catalan \n" +"Language: ca\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-04-19 04:55+0000\n" -"Last-Translator: Luc Didry \n" -"Language-Team: catalĂ ; valenciĂ  <>\n" -"Plural-Forms: nplurals=2; plural=(n != 1);\n" -"X-Generator: Zanata 4.6.2\n" -"Language: ca\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -126,7 +127,7 @@ msgstr "Token CSRF incorrect." #: themes/default/templates/partial/render.js.ep:5 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/invitations/invite.mail.ep:8 msgid "Click on the following URL to upload files on Lufi:" @@ -134,7 +135,7 @@ msgstr "" #: themes/default/templates/index.html.ep:126 msgid "Click to open the file browser" -msgstr "Premeu per obrir la selecciĂł de fitxer." +msgstr "Premeu per obrir el navegador de fitxers" #: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80 msgid "Close" @@ -230,11 +231,11 @@ msgstr "" "servidor. Obtindreu dos enllaços per a cada fitxer: un enllaç per a la " "descĂ rrega, que doneu a la gent amb qui voleu compartir el fitxer, i un " "enllaç per a l'eliminaciĂł, que us permet eliminar el fitxer del servidor " -"quan vulgueu. " +"quan vulgueu." #: themes/default/templates/index.html.ep:122 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" @@ -337,7 +338,10 @@ msgstr "" #: themes/default/templates/partial/mail.js.ep:35 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" +"\\n" +"Ve't aquĂ­ uns fitxers que vull compartir amb tu:\\n" #: themes/default/templates/mail.html.ep:35 msgid "Here's some files" @@ -473,7 +477,7 @@ msgstr "" #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:108 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:28 msgid "No expiration delay" @@ -518,7 +522,7 @@ msgstr "Privacitat" #: themes/default/templates/files.html.ep:13 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/invitations/notification_files_sent.mail.ep:20 msgid "Regards," @@ -569,7 +573,7 @@ msgid "" "while to move." msgstr "" "S'estĂ  enviant el tros XX1 de XX2. Si us plau, paciĂšncia; la barra de " -"progrĂ©s pot trigar una mica a bellugar-se. " +"progrĂ©s pot trigar una mica a bellugar-se." #. (url_for('/') #: themes/default/templates/partial/mail.js.ep:48 @@ -601,7 +605,7 @@ msgstr "" #: lib/Lufi/Controller/Files.pm:82 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." @@ -624,8 +628,8 @@ 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 "" -"L'administrador nomĂ©s pot veure el nom del fitxer, la seva mida i el seu\n" -"mimetype (quina mena de fitxer Ă©s: vĂ­deo, text, etc.)" +"L'administrador nomĂ©s pot veure el nom del fitxer, la seva mida i el seu " +"mimetype (quina mena de fitxer Ă©s: vĂ­deo, text, etc.)." #: lib/Lufi/Controller/Mail.pm:53 msgid "" @@ -763,7 +767,7 @@ msgstr "" #: themes/default/templates/partial/index.js.ep:17 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) #: lib/Lufi/Controller/Files.pm:439 @@ -910,7 +914,7 @@ msgstr "entre %1 i %2, el fitxer es mantindrĂ  per sempre al servidor." #: themes/default/templates/partial/mail.js.ep:42 msgid "deadline: " -msgstr "termini:" +msgstr "termini: " #: themes/default/templates/partial/invitations.js.ep:5 msgid "expires on XXX" @@ -919,7 +923,7 @@ msgstr "" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:26 msgid "for %1 and more, the file will be kept %2 day(s)" -msgstr "a partir de %1, el fitxer es mantindrĂ  %2 dia/es al servidor " +msgstr "a partir de %1, el fitxer es mantindrĂ  %2 dia/es al servidor" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:28 @@ -938,3 +942,20 @@ msgstr "o" #: themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "— %1 (%2), that will expire on %3" msgstr "" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Obteniu el codi font al repositori oficial o a la seva rĂšplica a " +"Github" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Com que Lufi Ă©s programari lliure, autoritzat sota els termes de l’AGPLv3, el podeu " +"instal·lar al vostre propi servidor. Pel que fa a com fer-ho, feu un cop " +"d'ull al Wiki." diff --git a/themes/default/lib/Lufi/I18N/de.po b/themes/default/lib/Lufi/I18N/de.po index 7b3d6a1..a6a7fb3 100644 --- a/themes/default/lib/Lufi/I18N/de.po +++ b/themes/default/lib/Lufi/I18N/de.po @@ -5,15 +5,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 18:29+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: German \n" +"Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-08-14 04:09+0000\n" -"Last-Translator: Copied by Zanata \n" -"Language-Team: German\n" -"Language: de\n" -"X-Generator: Zanata 4.6.2\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -149,7 +150,7 @@ msgstr "Kommagetrennte E-Mail-Adressen" #: themes/default/templates/index.html.ep:140 msgid "Compressing zip file
" -msgstr "Komprimierung der Zip-Datei..." +msgstr "Komprimierung der Zip-Datei
" #: themes/default/templates/partial/index.js.ep:15 msgid "Copy all links to clipboard" @@ -312,7 +313,7 @@ msgstr "Dateien gesendet am" #: themes/default/templates/partial/invitations.js.ep:8 msgid "Files sent in invitation XX1 by XX2" -msgstr "Dateien, die in der Einladung XX1 von XX2 gesendet wurden." +msgstr "Dateien, die in der Einladung XX1 von XX2 gesendet wurden" #: themes/default/templates/partial/render.js.ep:8 msgid "Get the file" @@ -325,8 +326,8 @@ msgid "" "com/ldidry/lufi\" class=\"classic\">Github mirror" msgstr "" "Holen Sie sich den Quellcode vom offiziellen Repository oder von dessen Github mirror." +"class=\"classic\">offiziellen Repository oder von dessen Github mirror" #: themes/default/templates/invitations/my_invitations.html.ep:24 msgid "Guest mail" @@ -457,10 +458,13 @@ msgid "" "is the only time that we will ask you this." msgstr "" "Die Art und Weise wie Lufi Datei-Informationen speichert, wurde kĂŒrzlich " -"geĂ€ndert.\\n\\n Am neuen localStorage-Speicherort konnten keine Dateien " -"gefunden werden, allerdings wurden Dateien am alten Speicherort gefunden." -"\\nWollen Sie diese Informationen importieren?\\nBitte beachten Sie, dass " -"diese Meldung nur ein einziges Mal angezeigt wird." +"geĂ€ndert.\\n" +"\\n" +"Am neuen localStorage-Speicherort konnten keine Dateien gefunden werden, " +"allerdings wurden Dateien am alten Speicherort gefunden.\\n" +"Wollen Sie diese Informationen importieren?\\n" +"\\n" +"Bitte beachten Sie, dass diese Meldung nur ein einziges Mal angezeigt wird." #: themes/default/templates/files.html.ep:34 msgid "Mail" @@ -720,14 +724,14 @@ msgstr "Die Einladungsmail wird von Ihrer E-Mail-Adresse (%1) gesendet." #: themes/default/templates/partial/index.js.ep:16 msgid "The link(s) has been copied to your clipboard" -msgstr "Die Links wurden in die Zwischenablage kopiert." +msgstr "Die Links wurden in die Zwischenablage kopiert" #. (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 "" -"Die Links Ihrer Dateien werden automatisch per E-Mail an %1 (%2) gesendet." +"Die Links Ihrer Dateien werden automatisch per E-Mail an %1 (%2) gesendet" #. (stash('ldap_user') #: themes/default/templates/invitations/invite.mail.ep:11 @@ -947,7 +951,7 @@ msgstr "zwischen %1 und %2, wird die Datei fĂŒr immer aufbewahrt." #: themes/default/templates/partial/mail.js.ep:42 msgid "deadline: " -msgstr "Frist:" +msgstr "Frist: " #: themes/default/templates/partial/invitations.js.ep:5 msgid "expires on XXX" @@ -956,7 +960,7 @@ msgstr "LĂ€uft ab am XXX" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:26 msgid "for %1 and more, the file will be kept %2 day(s)" -msgstr "fĂŒr %1 und mehr, wird die Datei %2 Tag(e) aufbewahrt." +msgstr "fĂŒr %1 und mehr, wird die Datei %2 Tag(e) aufbewahrt" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:28 @@ -975,3 +979,21 @@ msgstr "oder" #: themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "— %1 (%2), that will expire on %3" msgstr "— %1 (%2), lĂ€uft ab am %3" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Holen Sie sich den Quellcode vom offiziellen Repository oder von " +"dessen Github " +"mirror" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Da es sich bei Lufi um eine freie Software handelt, die unter den edingungen " +"der AGPLv3 lizenziert ist, können Sie sie auf Ihrem eigenen Server " +"installieren. Werfen Sie einen Blick auf die Wiki fĂŒr das " +"Verfahren." diff --git a/themes/default/lib/Lufi/I18N/en.po b/themes/default/lib/Lufi/I18N/en.po index 7a144ef..384ee9e 100644 --- a/themes/default/lib/Lufi/I18N/en.po +++ b/themes/default/lib/Lufi/I18N/en.po @@ -45,7 +45,7 @@ msgstr "%1 used your invitation to send you files:" msgid "%A %d %B %Y at %T" msgstr "%A %d %B %Y at %T" -#: themes/default/templates/partial/index.js.ep:27 +#: themes/default/templates/partial/index.js.ep:28 msgid "(max size: XXX)" msgstr "(max size: XXX)" @@ -74,43 +74,27 @@ msgid "Add a password to file(s)" msgstr "Add a password to file(s)" #: themes/default/templates/mail.html.ep:16 -msgid "" -"Adding URLs not related to this Lufi instance to the mail body or subject is " -"prohibited." -msgstr "" -"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 "Adding URLs not related to this Lufi instance to the mail body or subject is prohibited." #: 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?" +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 "" -"As Lufi is a free software licensed under of the terms of the AGPLv3, you can " -"install it on you own server. Have a look on the Wiki for the procedure." -msgstr "" -"As Lufi is a free software licensed under of the terms of the AGPLv3, you can " -"install it on you own server. Have a look on the Wiki for the procedure." +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." #. (stash('nbslices') -#: themes/default/templates/partial/render.js.ep:9 +#: themes/default/templates/partial/render.js.ep:10 msgid "Asking for file part XX1 of %1" msgstr "Asking for file part XX1 of %1" -#: themes/default/templates/about.html.ep:20 +#: themes/default/templates/about.html.ep:23 msgid "Back to homepage" msgstr "Back to homepage" @@ -154,15 +138,15 @@ msgstr "Copy all links to clipboard" msgid "Copy to clipboard" msgstr "Copy to clipboard" -#: lib/Lufi/Controller/Files.pm:507 +#: lib/Lufi/Controller/Files.pm:502 msgid "Could not delete the file. You are not authenticated." msgstr "Could not delete the file. You are not authenticated." -#: lib/Lufi/Controller/Files.pm:489 +#: lib/Lufi/Controller/Files.pm:484 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?" -#: lib/Lufi/Controller/Files.pm:400 +#: lib/Lufi/Controller/Files.pm:395 msgid "Could not find the file. Are you sure of the URL?" msgstr "Could not find the file. Are you sure of the URL?" @@ -195,12 +179,8 @@ msgid "Deletion link" msgstr "Deletion link" #: themes/default/templates/delays.html.ep:8 -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 "" -"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 "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." #: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28 msgid "Download" @@ -215,18 +195,8 @@ msgid "Download link" msgstr "Download link" #: themes/default/templates/about.html.ep:10 -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 "" -"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 "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." #: themes/default/templates/index.html.ep:122 msgid "Drop files here" @@ -252,15 +222,15 @@ msgstr "Emails" msgid "Encrypting part XX1 of XX2" msgstr "Encrypting part XX1 of XX2" -#: lib/Lufi/Controller/Files.pm:289 +#: lib/Lufi/Controller/Files.pm:284 msgid "Error: the file existed but was deleted." msgstr "Error: the file existed but was deleted." -#: lib/Lufi/Controller/Files.pm:369 +#: lib/Lufi/Controller/Files.pm:364 msgid "Error: the file has not been sent entirely." msgstr "Error: the file has not been sent entirely." -#: lib/Lufi/Controller/Files.pm:379 +#: lib/Lufi/Controller/Files.pm:374 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?" @@ -280,14 +250,22 @@ msgstr "Expires at" msgid "Export localStorage data" msgstr "Export localStorage data" -#: lib/Lufi/Controller/Files.pm:471 +#: lib/Lufi/Controller/Files.pm:466 msgid "File deleted" msgstr "File deleted" +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "File downloaded" + #: themes/default/templates/files.html.ep:27 msgid "File name" msgstr "File name" +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "File uploaded" + #: themes/default/templates/invitations/my_invitations.html.ep:61 msgid "Files" msgstr "Files" @@ -309,14 +287,8 @@ msgid "Get the file" msgstr "Get the file" #: themes/default/templates/about.html.ep:18 -msgid "" -"Get the source code on the official repository or on its Github mirror" -msgstr "" -"Get the source code on the official repository or on its Github mirror" +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "Get the source code on the official repository or on its Github mirror" #: themes/default/templates/invitations/my_invitations.html.ep:24 msgid "Guest mail" @@ -343,11 +315,11 @@ msgstr "Here's some files" msgid "Hide hidden invitations" msgstr "Hide hidden invitations" -#: themes/default/templates/partial/index.js.ep:25 +#: themes/default/templates/partial/index.js.ep:26 msgid "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:24 +#: themes/default/templates/partial/index.js.ep:25 msgid "Hit Enter, then Ctrl+C to copy the download link" msgstr "Hit Enter, then Ctrl+C to copy the download link" @@ -372,12 +344,8 @@ msgid "If you choose a delay, the file will be deleted after that delay." msgstr "If you choose a delay, the file will be deleted after that delay." #: themes/default/templates/mail.html.ep:15 -msgid "" -"If you send the mail from this server, the links will be sent to the server, " -"which may lower your privacy protection." -msgstr "" -"If you send the mail from this server, the links will be sent to the server, " -"which may lower your privacy protection." +msgid "If you send the mail from this server, the links will be sent to the server, which may lower your privacy protection." +msgstr "If you send the mail from this server, the links will be sent to the server, which may lower your privacy protection." #: themes/default/templates/files.html.ep:14 msgid "Import localStorage data" @@ -410,10 +378,8 @@ msgid "Invite a guest" msgstr "Invite a guest" #: themes/default/templates/partial/render.js.ep:6 -msgid "" -"It seems that the key in your URL is incorrect. Please, verify your URL." -msgstr "" -"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 "It seems that the key in your URL is incorrect. Please, verify your URL." #: themes/default/templates/index.html.ep:12 msgid "Javascript is disabled. You won't be able to use Lufi." @@ -423,6 +389,16 @@ msgstr "Javascript is disabled. You won't be able to use Lufi." msgid "Language" msgstr "Language" +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "Latest commit of this instance: %1" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "Latest tag of this instance: %1" + #: themes/default/templates/login.html.ep:15 msgid "Login" msgstr "Login" @@ -436,16 +412,8 @@ msgid "Lufi is a free (as in free speech) file hosting software." msgstr "Lufi is a free (as in free speech) file hosting software." #: themes/default/templates/partial/files.js.ep:12 -msgid "" -"Lufi recently changed its way to store files information.\\n\\nNo files have " -"been found in the new localStorage location but we found files in the old " -"one.\\nDo you want to import those informations?\\n\\nPlease note that this " -"is the only time that we will ask you this." -msgstr "" -"Lufi recently changed its way to store files information.\\n\\nNo files have " -"been found in the new localStorage location but we found files in the old " -"one.\\nDo you want to import those informations?\\n\\nPlease note that this " -"is the only time that we will ask you this." +msgid "Lufi recently changed its way to store files information.\\n\\nNo files have been found in the new localStorage location but we found files in the old one.\\nDo you want to import those informations?\\n\\nPlease note that this is the only time that we will ask you this." +msgstr "Lufi recently changed its way to store files information.\\n\\nNo files have been found in the new localStorage location but we found files in the old one.\\nDo you want to import those informations?\\n\\nPlease note that this is the only time that we will ask you this." #: themes/default/templates/files.html.ep:34 msgid "Mail" @@ -460,33 +428,25 @@ 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." +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}) -#: lib/Lufi/Controller/Files.pm:108 +#: lib/Lufi/Controller/Files.pm:109 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)." -#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28 +#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:29 msgid "No expiration delay" msgstr "No expiration delay" #: themes/default/templates/files.html.ep:8 -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 "" -"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 "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." #: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 msgid "Password" @@ -498,20 +458,12 @@ msgid "Please contact the administrator: %1" msgstr "Please contact the administrator: %1" #: themes/default/templates/render.html.ep:33 -msgid "" -"Please wait while we are getting your file. We first need to download and " -"decrypt all parts before you can get it." -msgstr "" -"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 "Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it." #: lib/Lufi/Controller/Auth.pm:38 -msgid "" -"Please, check your credentials or your right to access this service: unable " -"to authenticate." -msgstr "" -"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 "Please, check your credentials or your right to access this service: unable to authenticate." #: themes/default/templates/about.html.ep:5 msgid "Privacy" @@ -542,12 +494,10 @@ 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 -msgid "" -"Rows in red mean that the files have expired and are no longer available." -msgstr "" -"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 "Rows in red mean that the files have expired and are no longer available." -#: themes/default/templates/partial/index.js.ep:26 +#: themes/default/templates/partial/index.js.ep:27 msgid "Send all links by email" msgstr "Send all links by email" @@ -563,13 +513,9 @@ msgstr "Send with this server" msgid "Send with your own mail software" msgstr "Send with your own mail software" -#: 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." -msgstr "" -"Sending part XX1 of XX2. Please, be patient, the progress bar can take a " -"while to move." +#: themes/default/templates/partial/index.js.ep:30 +msgid "Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move." +msgstr "Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move." #. (url_for('/') #: themes/default/templates/partial/mail.js.ep:48 @@ -580,7 +526,7 @@ msgstr "Share your files in total privacy on %1" msgid "Show hidden invitations" msgstr "Show hidden invitations" -#: themes/default/templates/partial/render.js.ep:11 +#: themes/default/templates/partial/render.js.ep:12 msgid "Show zip content" msgstr "Show zip content" @@ -589,10 +535,8 @@ msgid "Signin" msgstr "Signin" #: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16 -msgid "" -"Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" -msgstr "" -"Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" +msgid "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" +msgstr "Sorry, the invitation doesn’t 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." @@ -607,13 +551,9 @@ 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." +#: lib/Lufi/Controller/Files.pm:123 +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 @@ -621,20 +561,12 @@ 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 -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 "" -"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 "The administrator can only see the file's name, its size and its mimetype (what kind of file it is: video, text, etc.)." #: lib/Lufi/Controller/Mail.pm:53 -msgid "" -"The body of the mail must contain at least one URL pointing to a file hosted " -"on this instance." -msgstr "" -"The body of the mail must contain at least one URL pointing to a file hosted " -"on this instance." +msgid "The body of the mail must contain at least one URL pointing to a file hosted on this instance." +msgstr "The body of the mail must contain at least one URL pointing to a file hosted on this instance." #: themes/default/templates/partial/files.js.ep:11 msgid "The data has been successfully imported." @@ -653,17 +585,13 @@ msgstr "The email subject can't be empty." 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 +#: lib/Lufi/Controller/Files.pm:463 msgid "The file has already been deleted" msgstr "The file has already been deleted" #: themes/default/templates/about.html.ep:6 -msgid "" -"The files uploaded on a Lufi instance are encrypted before the upload to the " -"server: the administrator of the server can not see the file's content." -msgstr "" -"The files uploaded on a Lufi instance are encrypted before the upload to the " -"server: the administrator of the server can not see the file's content." +msgid "The files uploaded on a Lufi instance are encrypted before the upload to the server: the administrator of the server can not see the file's content." +msgstr "The files uploaded on a Lufi instance are encrypted before the upload to the server: the administrator of the server can not see the file's content." #. (join(', ', @bad) #: lib/Lufi/Controller/Mail.pm:68 @@ -677,12 +605,8 @@ msgstr "The guest email address (%1) is unvalid." #. ($i->token, $i->guest_mail) #: lib/Lufi/Controller/Invitation.pm:150 -msgid "" -"The invitation %1 can’t be resent: %2 has already sent files.
Please " -"create a new invitation." -msgstr "" -"The invitation %1 can’t be resent: %2 has already sent files.
Please " -"create a new invitation." +msgid "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." +msgstr "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." #. ($i->token) #: lib/Lufi/Controller/Invitation.pm:130 @@ -700,10 +624,8 @@ 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)" +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 @@ -715,26 +637,16 @@ msgid "The mail has been sent." msgstr "The mail has been sent." #: themes/default/templates/about.html.ep:15 -msgid "" -"The original (and only for now) author is Luc Didry." -msgstr "" -"The original (and only for now) author is Luc Didry." +msgid "The original (and only for now) author is Luc Didry." +msgstr "The original (and only for now) author is Luc Didry." -#: 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." -msgstr "" -"The server was unable to find the file record to add your file part to. " -"Please, contact the administrator." +#: lib/Lufi/Controller/Files.pm:231 +msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator." +msgstr "The server was unable to find the file record to add your file part to. Please, contact the administrator." -#: lib/Lufi/Controller/Files.pm:295 -msgid "" -"This file has been deactivated by the admins. Contact them to know why." -msgstr "" -"This file has been deactivated by the admins. Contact them to know why." +#: lib/Lufi/Controller/Files.pm:290 +msgid "This file has been deactivated by the admins. Contact them to know why." +msgstr "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" @@ -746,14 +658,8 @@ msgid "This invitation is valid until %1." msgstr "This invitation is valid until %1." #: 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:" -msgstr "" -"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 "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:" #: themes/default/templates/invitations/my_invitations.html.ep:16 msgid "Toggle visibility" @@ -768,21 +674,17 @@ msgid "Unable to copy the link(s) to your clipboard" msgstr "Unable to copy the link(s) to your clipboard" #. ($short) -#: 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." -msgstr "" -"Unable to get counter for %1. The file does not exists. It will be removed " -"from your localStorage." +#: lib/Lufi/Controller/Files.pm:434 +msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." +msgstr "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." #. ($short) -#: lib/Lufi/Controller/Files.pm:429 +#: lib/Lufi/Controller/Files.pm:424 msgid "Unable to get counter for %1. The token is invalid." msgstr "Unable to get counter for %1. The token is invalid." #. ($short) -#: lib/Lufi/Controller/Files.pm:449 +#: lib/Lufi/Controller/Files.pm:444 msgid "Unable to get counter for %1. You are not authenticated." msgstr "Unable to get counter for %1. You are not authenticated." @@ -802,7 +704,11 @@ msgstr "Uploaded at" msgid "Uploaded files" msgstr "Uploaded files" -#: themes/default/templates/partial/index.js.ep:30 +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "Version" + +#: themes/default/templates/partial/index.js.ep:31 msgid "Websocket communication error" msgstr "Websocket communication error" @@ -819,58 +725,32 @@ 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 don’t have an account on it." -msgstr "" -"You can invite someone to send you files through this Lufi instance even if " -"they don’t have an account on it." +msgid "You can invite someone to send you files through this Lufi instance even if they don’t have an account on it." +msgstr "You can invite someone to send you files through this Lufi instance even if they don’t have an account on it." #: 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." -msgstr "" -"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 "You can see the list of your files by clicking on the \"My files\" link at the top right of this page." #: lib/Lufi/Controller/Mail.pm:42 msgid "You can't add URLs that are not related to this instance." msgstr "You can't add URLs that are not related to this instance." #: themes/default/templates/about.html.ep:8 -msgid "" -"You don't need to register yourself to upload files but be aware that, for " -"legal reasons, your IP address will be stored when you send a file. Don't " -"panic, this is normally the case for all sites on which you send files." -msgstr "" -"You don't need to register yourself to upload files but be aware that, for " -"legal reasons, your IP address will be stored when you send a file. Don't " -"panic, this is normally the case for all sites on which you send files." +msgid "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." +msgstr "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." -#: themes/default/templates/partial/render.js.ep:10 -msgid "" -"You don't seem to have a key in your URL. You won't be able to decrypt the " -"file. Download canceled." -msgstr "" -"You don't seem to have a key in your URL. You won't be able to decrypt the " -"file. Download canceled." +#: themes/default/templates/partial/render.js.ep:11 +msgid "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." +msgstr "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." #: themes/default/templates/partial/render.js.ep:7 -msgid "" -"You have attempted to leave this page. The download will be canceled. Are " -"you sure?" -msgstr "" -"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 "You have attempted to leave this page. The download will be canceled. Are you sure?" #: themes/default/templates/partial/index.js.ep:14 -msgid "" -"You have attempted to leave this page. The upload will be canceled. Are you " -"sure?" -msgstr "" -"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 "You have attempted to leave this page. The upload will be canceled. Are you sure?" #: themes/default/templates/logout.html.ep:14 msgid "You have been successfully logged out." @@ -881,25 +761,19 @@ msgid "You must give email addresses." msgstr "You must give email addresses." #: themes/default/templates/index.html.ep:38 -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 "" -"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)." +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 "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)." #. (format_bytes($json->{size}) #: lib/Lufi/Controller/Files.pm:95 msgid "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:351 +#: lib/Lufi/Controller/Files.pm:346 msgid "Your password is not valid. Please refresh the page to retry." msgstr "Your password is not valid. Please refresh the page to retry." -#: themes/default/templates/partial/render.js.ep:12 +#: themes/default/templates/partial/render.js.ep:13 msgid "Zip content:" msgstr "Zip content:" diff --git a/themes/default/lib/Lufi/I18N/es.po b/themes/default/lib/Lufi/I18N/es.po new file mode 100644 index 0000000..35d53c1 --- /dev/null +++ b/themes/default/lib/Lufi/I18N/es.po @@ -0,0 +1,933 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-05-22 08:24+0000\n" +"Last-Translator: Berto Te \n" +"Language-Team: Spanish \n" +"Language: es\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.11.2\n" + +#. ($delay) +#. (max_delay) +#: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66 +msgid "%1 days" +msgstr "%1 dĂ­as" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:2 +msgid "%1 invites you to send him/her files" +msgstr "%1 te invita a enviarle sus archivos" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:6 +msgid "%1 invites you to send him/her files through Lufi." +msgstr "%1 te invita a enviarle sus archivos a travĂ©s de Lufi." + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:4 +msgid "%1 sent you files" +msgstr "%1 te enviĂł archivos" + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:8 +msgid "%1 used your invitation to send you files:" +msgstr "%1 usĂł tu invitaciĂłn para enviarte archivos:" + +#: 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 en %T" + +#: themes/default/templates/partial/index.js.ep:27 +msgid "(max size: XXX)" +msgstr "(tamaño mĂĄximo: XXX)" + +#: themes/default/templates/index.html.ep:5 +msgid "1 year" +msgstr "1 año" + +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65 +msgid "24 hours" +msgstr "24 horas" + +#: themes/default/templates/partial/mail.js.ep:40 +msgid ":" +msgstr ":" + +#: themes/default/templates/render.html.ep:42 +msgid "Abort" +msgstr "aborto" + +#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86 +msgid "About" +msgstr "Acerca de" + +#: themes/default/templates/index.html.ep:107 +msgid "Add a password to file(s)" +msgstr "Agregue una contraseña a los archivos" + +#: themes/default/templates/mail.html.ep:16 +msgid "Adding URLs not related to this Lufi instance to the mail body or subject is prohibited." +msgstr "" +"EstĂĄ prohibido agregar URLs no relacionadas con esta instancia de Lufi al " +"cuerpo o asunto del correo." + +#: themes/default/templates/partial/invitations.js.ep:3 +msgid "Are you sure you want to delete the selected invitations?" +msgstr "ÂżEstĂĄs seguro de que deseas eliminar las invitaciones seleccionadas?" + +#: themes/default/templates/partial/invitations.js.ep:4 +msgid "Are you sure you want to resend the invitation mail for the selected invitations?" +msgstr "" +"ÂżEstĂĄ seguro de que desea reenviar el correo de invitaciĂłn para las " +"invitaciones seleccionadas?" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Como Lufi es un software gratuito con licencia bajo los tĂ©rminos de laAGPLv3, " +"puedes instalarlo en tu propio servidor. Echa un vistazo a la Wiki para " +"el procedimiento." + +#. (stash('nbslices') +#: themes/default/templates/partial/render.js.ep:9 +msgid "Asking for file part XX1 of %1" +msgstr "Pidiendo archivo parte XX1 de %1" + +#: themes/default/templates/about.html.ep:20 +msgid "Back to homepage" +msgstr "Volver a la pĂĄgina de inicio" + +#: lib/Lufi/Controller/Mail.pm:25 +msgid "Bad CSRF token!" +msgstr "ÂĄToken CSRF incorrecto!" + +#: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49 +msgid "Bad CSRF token." +msgstr "Token CSRF incorrecto." + +#: themes/default/templates/partial/render.js.ep:5 +msgid "Click here to refresh the page and restart the download." +msgstr "Haga clic aquĂ­ para actualizar la pĂĄgina y reiniciar la descarga." + +#: themes/default/templates/invitations/invite.mail.ep:8 +msgid "Click on the following URL to upload files on Lufi:" +msgstr "Haga clic en la siguiente URL para cargar archivos en Lufi:" + +#: themes/default/templates/index.html.ep:126 +msgid "Click to open the file browser" +msgstr "Haga clic para abrir el navegador de archivos" + +#: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80 +msgid "Close" +msgstr "Cerrar" + +#: themes/default/templates/mail.html.ep:23 +msgid "Comma-separated email addresses" +msgstr "Direcciones de correo electrĂłnico separadas por comas" + +#: themes/default/templates/index.html.ep:140 +msgid "Compressing zip file
" +msgstr "Comprimiendo el archivo zip 
" + +#: themes/default/templates/partial/index.js.ep:15 +msgid "Copy all links to clipboard" +msgstr "Copie todos los enlaces al portapapeles" + +#: themes/default/templates/partial/index.js.ep:18 +msgid "Copy to clipboard" +msgstr "Copiar al portapapeles" + +#: lib/Lufi/Controller/Files.pm:507 +msgid "Could not delete the file. You are not authenticated." +msgstr "No se pudo eliminar el archivo. No estĂĄs autenticado." + +#: lib/Lufi/Controller/Files.pm:489 +msgid "Could not find the file. Are you sure of the URL and the token?" +msgstr "No se pudo encontrar el archivo. ÂżEstĂĄs seguro de la URL y el token?" + +#: lib/Lufi/Controller/Files.pm:400 +msgid "Could not find the file. Are you sure of the URL?" +msgstr "No se pudo encontrar el archivo. ÂżEstĂĄs seguro de la URL?" + +#: themes/default/templates/files.html.ep:29 +msgid "Counter" +msgstr "contador" + +#: themes/default/templates/index.html.ep:100 +msgid "Create a zip archive with the files before uploading?" +msgstr "ÂżCrear un archivo zip con los archivos antes de subir?" + +#: themes/default/templates/invitations/my_invitations.html.ep:26 +msgid "Created at" +msgstr "Creado en" + +#: themes/default/templates/invitations/my_invitations.html.ep:14 +msgid "Delete" +msgstr "Eliminar" + +#: themes/default/templates/files.html.ep:30 themes/default/templates/index.html.ep:90 +msgid "Delete at first download?" +msgstr "ÂżEliminar en la primera descarga?" + +#: themes/default/templates/files.html.ep:19 +msgid "Delete selected files" +msgstr "Eliminar archivos seleccionados" + +#: themes/default/templates/files.html.ep:33 themes/default/templates/partial/index.js.ep:19 +msgid "Deletion link" +msgstr "Enlace de borrado" + +#: themes/default/templates/delays.html.ep:8 +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 "" +"No se preocupe: si un usuario comienza a descargar el archivo antes del " +"vencimiento y la descarga finaliza despuĂ©s del vencimiento, podrĂĄ obtener el " +"archivo." + +#: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28 +msgid "Download" +msgstr "Descargar" + +#: themes/default/templates/partial/render.js.ep:4 +msgid "Download aborted." +msgstr "Descarga abortada." + +#: themes/default/templates/files.html.ep:28 themes/default/templates/partial/index.js.ep:20 +msgid "Download link" +msgstr "Enlace de descarga" + +#: themes/default/templates/about.html.ep:10 +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 "" +"Arrastre y suelte archivos en el ĂĄrea apropiada o use la forma tradicional " +"de enviar archivos y los archivos se fragmentarĂĄn, cifrarĂĄn y enviarĂĄn al " +"servidor. ObtendrĂĄ dos enlaces por archivo: un enlace de descarga, que le da " +"a las personas con las que desea compartir el archivo y un enlace de " +"eliminaciĂłn, que le permite eliminar el archivo cuando lo desee." + +#: themes/default/templates/index.html.ep:122 +msgid "Drop files here" +msgstr "Suelta archivos aquĂ­" + +#: themes/default/templates/invitations/invite.html.ep:40 +msgid "Email address of your guest" +msgstr "DirecciĂłn de correo electrĂłnico de su invitado" + +#: themes/default/templates/mail.html.ep:39 +msgid "Email body" +msgstr "Cuerpo del correo electronico" + +#: themes/default/templates/mail.html.ep:31 +msgid "Email subject" +msgstr "Asunto del email" + +#: themes/default/templates/mail.html.ep:25 themes/default/templates/mail.html.ep:27 +msgid "Emails" +msgstr "Correos electrĂłnicos" + +#: themes/default/templates/partial/index.js.ep:22 +msgid "Encrypting part XX1 of XX2" +msgstr "Cifrando parte XX1 de XX2" + +#: lib/Lufi/Controller/Files.pm:289 +msgid "Error: the file existed but was deleted." +msgstr "Error: el archivo existĂ­a pero fue eliminado." + +#: lib/Lufi/Controller/Files.pm:369 +msgid "Error: the file has not been sent entirely." +msgstr "Error: el archivo no se ha enviado por completo." + +#: lib/Lufi/Controller/Files.pm:379 +msgid "Error: unable to find the file. Are you sure of your URL?" +msgstr "Error: no se puede encontrar el archivo. ÂżEstĂĄs seguro de tu URL?" + +#: themes/default/templates/partial/index.js.ep:23 +msgid "Expiration:" +msgstr "Vencimiento:" + +#: themes/default/templates/invitations/my_invitations.html.ep:27 +msgid "Expire at" +msgstr "Caduca a las" + +#: themes/default/templates/files.html.ep:32 +msgid "Expires at" +msgstr "Caduca a las" + +#: themes/default/templates/files.html.ep:12 +msgid "Export localStorage data" +msgstr "Exportar datos de almacenamiento local" + +#: lib/Lufi/Controller/Files.pm:471 +msgid "File deleted" +msgstr "Archivo eliminado" + +#: themes/default/templates/files.html.ep:27 +msgid "File name" +msgstr "Nombre del archivo" + +#: themes/default/templates/invitations/my_invitations.html.ep:61 +msgid "Files" +msgstr "Archivos" + +#: themes/default/templates/index.html.ep:80 +msgid "Files deleted at first download" +msgstr "Archivos eliminados en la primera descarga" + +#: themes/default/templates/invitations/my_invitations.html.ep:28 +msgid "Files sent at" +msgstr "Archivos enviados a" + +#: themes/default/templates/partial/invitations.js.ep:8 +msgid "Files sent in invitation XX1 by XX2" +msgstr "Archivos enviados en la invitaciĂłn XX1 por XX2" + +#: themes/default/templates/partial/render.js.ep:8 +msgid "Get the file" +msgstr "ObtĂ©n el archivo" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Obtenga el cĂłdigo fuente en el repositorio oficialo en suGithub mirror" + +#: themes/default/templates/invitations/my_invitations.html.ep:24 +msgid "Guest mail" +msgstr "Correo de invitado" + +#. (ucfirst(stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:6 +msgid "Hello %1," +msgstr "Hola %1" + +#: themes/default/templates/invitations/invite.mail.ep:4 +msgid "Hello," +msgstr "Hola," + +#: themes/default/templates/partial/mail.js.ep:35 +msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" +msgstr "" +"Hola,\\n" +"\\n" +" AquĂ­ hay algunos archivos que quiero compartir contigo:\\n" + +#: themes/default/templates/mail.html.ep:35 +msgid "Here's some files" +msgstr "AquĂ­ hay algunos archivos" + +#: themes/default/templates/partial/invitations.js.ep:7 +msgid "Hide hidden invitations" +msgstr "Ocultar invitaciones ocultas" + +#: themes/default/templates/partial/index.js.ep:25 +msgid "Hit Enter, then Ctrl+C to copy all the download links" +msgstr "" +"Presiona Enter, luego Ctrl + C para copiar todos los enlaces de descarga" + +#: themes/default/templates/partial/index.js.ep:24 +msgid "Hit Enter, then Ctrl+C to copy the download link" +msgstr "Presiona Enter, luego Ctrl+C para copiar el enlace de descarga" + +#: themes/default/templates/about.html.ep:9 +msgid "How does it work?" +msgstr "ÂżComo funciona?" + +#: themes/default/templates/invitations/invite.html.ep:46 +msgid "How many days would you like the invitation to be valid?" +msgstr "ÂżCuĂĄntos dĂ­as desea que la invitaciĂłn sea vĂĄlida?" + +#: themes/default/templates/about.html.ep:16 +msgid "How to install the software on my server?" +msgstr "ÂżCĂłmo instalar el software en mi servidor?" + +#: themes/default/templates/about.html.ep:12 +msgid "How to report an illegal file?" +msgstr "ÂżCĂłmo denunciar un archivo ilegal?" + +#: themes/default/templates/delays.html.ep:7 +msgid "If you choose a delay, the file will be deleted after that delay." +msgstr "Si elige un retraso, el archivo se eliminarĂĄ despuĂ©s de ese retraso." + +#: themes/default/templates/mail.html.ep:15 +msgid "If you send the mail from this server, the links will be sent to the server, which may lower your privacy protection." +msgstr "" +"Si envĂ­a el correo desde este servidor, los enlaces se enviarĂĄn al servidor, " +"lo que puede reducir su protecciĂłn de privacidad." + +#: themes/default/templates/files.html.ep:14 +msgid "Import localStorage data" +msgstr "Importar datos de almacenamiento local" + +#: themes/default/templates/index.html.ep:53 +msgid "Important: more information on delays" +msgstr "Importante: mĂĄs informaciĂłn sobre retrasos" + +#: themes/default/templates/delays.html.ep:5 +msgid "Information about delays" +msgstr "InformaciĂłn sobre retrasos" + +#: themes/default/templates/files.html.ep:18 themes/default/templates/invitations/my_invitations.html.ep:12 +msgid "Invert selection" +msgstr "Invertir selecciĂłn" + +#. ($i->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:171 +msgid "Invitation resent to %1.
URL: %2" +msgstr "InvitaciĂłn reenviada a %1.
URL: %2" + +#. ($invitation->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:87 +msgid "Invitation sent to %1.
URL: %2" +msgstr "InvitaciĂłn enviada a%1.
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 "Invitar a alguien" + +#: themes/default/templates/partial/render.js.ep:6 +msgid "It seems that the key in your URL is incorrect. Please, verify your URL." +msgstr "" +"Parece que la clave en su URL es incorrecta. Por favor, verifique su URL." + +#: themes/default/templates/index.html.ep:12 +msgid "Javascript is disabled. You won't be able to use Lufi." +msgstr "Javascript estĂĄ deshabilitado. No podrĂĄs usar Lufi." + +#: 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" +msgstr "Idioma" + +#: themes/default/templates/login.html.ep:15 +msgid "Login" +msgstr "Iniciar sesiĂłn" + +#: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91 +msgid "Logout" +msgstr "Cerrar sesiĂłn" + +#: themes/default/templates/about.html.ep:4 +msgid "Lufi is a free (as in free speech) file hosting software." +msgstr "" +"Lufi es un software de alojamiento de archivos libre (como en la libertad de " +"expresiĂłn)." + +#: themes/default/templates/partial/files.js.ep:12 +msgid "Lufi recently changed its way to store files information.\\n\\nNo files have been found in the new localStorage location but we found files in the old one.\\nDo you want to import those informations?\\n\\nPlease note that this is the only time that we will ask you this." +msgstr "" +"Lufi cambiĂł recientemente su forma de almacenar informaciĂłn de archivos. \\n" +" \\n" +"No se han encontrado archivos en la nueva ubicaciĂłn de almacenamiento local, " +"pero encontramos archivos en la anterior. \\n" +" ÂżDesea importar esas informaciones? \\n" +"\\n" +" Tenga en cuenta que esta es la solo tiempo que te preguntaremos esto." + +#: themes/default/templates/files.html.ep:34 +msgid "Mail" +msgstr "Correo" + +#: 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" +msgstr "Mis archivos" + +#: 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 "Mis invitaciones" + +#: 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: esta lista incluye la lista de archivos que ya le han enviado." + +#: themes/default/templates/index.html.ep:115 +msgid "Name of the zip file" +msgstr "Nombre del archivo zip" + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:108 +msgid "No enough space available on the server for this file (size: %1)." +msgstr "" +"No hay suficiente espacio disponible en el servidor para este archivo (size: " +"%1)." + +#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28 +msgid "No expiration delay" +msgstr "Sin retraso de vencimiento" + +#: themes/default/templates/files.html.ep:8 +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 "" +"AquĂ­ solo se enumerarĂĄn los archivos enviados con este navegador. Esta lista " +"se almacena en localStorage: si elimina sus datos de localStorage, perderĂĄ " +"esta lista." + +#: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +msgid "Password" +msgstr "Contraseña" + +#. (config('contact') +#: themes/default/templates/about.html.ep:13 +msgid "Please contact the administrator: %1" +msgstr "Por favor, pĂłngase en contacto con el administrador: %1" + +#: themes/default/templates/render.html.ep:33 +msgid "Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it." +msgstr "" +"Espere mientras recibimos su archivo. Primero necesitamos descargar y " +"descifrar todas las partes antes de que pueda obtenerlo." + +#: lib/Lufi/Controller/Auth.pm:38 +msgid "Please, check your credentials or your right to access this service: unable to authenticate." +msgstr "" +"Por favor, verifique sus credenciales o su derecho a acceder a este servicio:" +" no se puede autenticar." + +#: themes/default/templates/about.html.ep:5 +msgid "Privacy" +msgstr "Confidencialidad" + +#: themes/default/templates/files.html.ep:13 +msgid "Purge expired files from localStorage" +msgstr "urgar archivos caducados de localStorage" + +#: themes/default/templates/invitations/notification_files_sent.mail.ep:20 +msgid "Regards," +msgstr "Saludos," + +#: themes/default/templates/invitations/invite.mail.ep:15 +msgid "Regards." +msgstr "Saludos." + +#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64 +msgid "Report file" +msgstr "Archivo de informe" + +#: themes/default/templates/invitations/my_invitations.html.ep:15 +msgid "Resend invitation mail" +msgstr "Reenviar correo de invitaciĂłn" + +#: themes/default/templates/invitations/my_invitations.html.ep:9 +msgid "Rows in purple mean that the invitations have expired." +msgstr "Las filas en pĂșrpura significan que las invitaciones han expirado." + +#: themes/default/templates/files.html.ep:9 +msgid "Rows in red mean that the files have expired and are no longer available." +msgstr "" +"Las filas en rojo significan que los archivos han caducado y ya no estĂĄn " +"disponibles." + +#: themes/default/templates/partial/index.js.ep:26 +msgid "Send all links by email" +msgstr "Enviar todos los enlaces por correo electrĂłnico" + +#: themes/default/templates/invitations/invite.html.ep:50 +msgid "Send the invitation" +msgstr "Enviar la invitaciĂłn" + +#: themes/default/templates/mail.html.ep:46 +msgid "Send with this server" +msgstr "Enviar con este servidor" + +#: themes/default/templates/mail.html.ep:47 +msgid "Send with your own mail software" +msgstr "EnvĂ­e con su propio software de correo" + +#: 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." +msgstr "" +"Enviando la parte XX1 de XX2. Por favor, sea paciente, la barra de progreso " +"puede tardar un poco en moverse." + +#. (url_for('/') +#: themes/default/templates/partial/mail.js.ep:48 +msgid "Share your files in total privacy on %1" +msgstr "Comparte tus archivos con total privacidad en %1" + +#: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9 +msgid "Show hidden invitations" +msgstr "Mostrar invitaciones ocultas" + +#: themes/default/templates/partial/render.js.ep:11 +msgid "Show zip content" +msgstr "Mostrar contenido 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" +msgstr "Registrarse" + +#: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16 +msgid "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" +msgstr "" +"Lo sentimos, la invitaciĂłn no existe. ÂżEstĂĄs seguro de que estĂĄs en la URL " +"correcta?" + +#: themes/default/templates/index.html.ep:46 +msgid "Sorry, the uploading is currently disabled. Please try again later." +msgstr "" +"Lo sentimos, la carga estĂĄ actualmente deshabilitada. Por favor, intĂ©ntelo " +"de nuevo mĂĄs tarde." + +#: lib/Lufi/Controller/Files.pm:82 +msgid "Sorry, uploading is disabled." +msgstr "Lo sentimos, la carga estĂĄ deshabilitada." + +#: themes/default/templates/invitations/exception.html.ep:7 +msgid "Sorry, your invitation has expired or has been deleted." +msgstr "Lo sentimos, tu invitaciĂłn ha caducado o ha sido eliminada." + +#. ($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 "" +"Lo sentimos, tu invitaciĂłn ha caducado o ha sido eliminada. PĂłngase en " +"contacto con% 1 para recibir otra invitaciĂłn." + +#. ($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 sus archivos se han enviado por correo electrĂłnico a% 1." + +#: 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.)." +msgstr "" +"El administrador solo puede ver el nombre del archivo, su tamaño y su tipo " +"MIME (quĂ© tipo de archivo es: video, texto, etc.)." + +#: lib/Lufi/Controller/Mail.pm:53 +msgid "The body of the mail must contain at least one URL pointing to a file hosted on this instance." +msgstr "" +"El cuerpo del correo debe contener al menos una URL que apunte a un archivo " +"alojado en esta instancia." + +#: themes/default/templates/partial/files.js.ep:11 +msgid "The data has been successfully imported." +msgstr "Los datos se han importado correctamente." + +#: lib/Lufi/Controller/Mail.pm:73 +msgid "The email body can't be empty." +msgstr "El cuerpo del correo electrĂłnico no puede estar vacĂ­o." + +#: lib/Lufi/Controller/Mail.pm:72 +msgid "The email subject can't be empty." +msgstr "El asunto del correo electrĂłnico no puede estar vacĂ­o." + +#. ($expire_at, $max_expire_at) +#: lib/Lufi/Controller/Invitation.pm:51 +msgid "The expiration delay (%1) is not between 1 and %2 days." +msgstr "El retraso de vencimiento (% 1) no estĂĄ entre 1 y% 2 dĂ­as." + +#: lib/Lufi/Controller/Files.pm:468 +msgid "The file has already been deleted" +msgstr "El archivo ya ha sido eliminado" + +#: themes/default/templates/about.html.ep:6 +msgid "The files uploaded on a Lufi instance are encrypted before the upload to the server: the administrator of the server can not see the file's content." +msgstr "" +"Los archivos cargados en una instancia de Lufi se cifran antes de cargarlos " +"en el servidor: el administrador del servidor no puede ver el contenido del " +"archivo." + +#. (join(', ', @bad) +#: lib/Lufi/Controller/Mail.pm:68 +msgid "The following email addresses are not valid: %1" +msgstr "Las siguientes direcciones de correo electrĂłnico no son vĂĄlidas: %1" + +#. ($guest_mail) +#: lib/Lufi/Controller/Invitation.pm:48 +msgid "The guest email address (%1) is unvalid." +msgstr "La direcciĂłn de correo electrĂłnico del invitado (%1) no es vĂĄlida." + +#. ($i->token, $i->guest_mail) +#: lib/Lufi/Controller/Invitation.pm:150 +msgid "The invitation %1 can’t be resent: %2 has already sent files.
Please create a new invitation." +msgstr "" +"La invitaciĂłn %1 no se puede reenviar: %2 ya ha enviado archivos.
Cree " +"una nueva invitaciĂłn." + +#. ($i->token) +#: lib/Lufi/Controller/Invitation.pm:130 +msgid "The invitation %1 has been deleted." +msgstr "La invitaciĂłn %1 ha sido eliminada." + +#. (stash('user_mail') +#: themes/default/templates/invitations/invite.html.ep:34 +msgid "The invitation mail will be send from your email address (%1)." +msgstr "" +"El correo de invitaciĂłn se enviarĂĄ desde su direcciĂłn de correo electrĂłnico " +"(%1)." + +#: themes/default/templates/partial/index.js.ep:16 +msgid "The link(s) has been copied to your clipboard" +msgstr "Los enlaces han sido copiados a su portapapeles" + +#. (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 enlaces de sus archivos se enviarĂĄn automĂĄticamente por correo 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 enlaces de sus archivos se enviarĂĄn automĂĄticamente por correo a %1." + +#: lib/Lufi/Controller/Mail.pm:97 +msgid "The mail has been sent." +msgstr "El correo ha sido enviado." + +#: themes/default/templates/about.html.ep:15 +msgid "The original (and only for now) author is Luc Didry." +msgstr "" +"El autor original (y solo por ahora) es Luc Didry." + +#: 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." +msgstr "" +"El servidor no pudo encontrar el registro de archivo para agregar su parte " +"de archivo. Por favor, contacte al administrador." + +#: lib/Lufi/Controller/Files.pm:295 +msgid "This file has been deactivated by the admins. Contact them to know why." +msgstr "" +"Este archivo ha sido desactivado por los administradores. ContĂĄctalos para " +"saber por quĂ©." + +#: themes/default/templates/invitations/my_invitations.html.ep:46 themes/default/templates/partial/invitations.js.ep:6 +msgid "This invitation is normally hidden" +msgstr "Esta invitaciĂłn normalmente estĂĄ oculta" + +#. (stash('expires') +#: themes/default/templates/invitations/invite.mail.ep:13 +msgid "This invitation is valid until %1." +msgstr "Esta invitaciĂłn es vĂĄlida hasta %1." + +#: 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:" +msgstr "" +"Este servidor establece limitaciones de acuerdo con el tamaño del archivo. " +"El retraso de vencimiento de su archivo serĂĄ el mĂ­nimo entre lo que elija y " +"las siguientes limitaciones:" + +#: themes/default/templates/invitations/my_invitations.html.ep:16 +msgid "Toggle visibility" +msgstr "Alternar visibilidad" + +#: 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" +msgstr "No se pueden copiar los enlaces a su portapapeles" + +#. ($short) +#: 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." +msgstr "" +"No se puede obtener el contador de %1. El archivo no existe. Se eliminarĂĄ de " +"su almacenamiento local." + +#. ($short) +#: lib/Lufi/Controller/Files.pm:429 +msgid "Unable to get counter for %1. The token is invalid." +msgstr "No se puede obtener el contador de% 1. El token no es vĂĄlido." + +#. ($short) +#: lib/Lufi/Controller/Files.pm:449 +msgid "Unable to get counter for %1. You are not authenticated." +msgstr "No se puede obtener el contador de% 1. No estĂĄs autenticado." + +#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66 +msgid "Upload files" +msgstr "Subir archivos" + +#: themes/default/templates/index.html.ep:145 +msgid "Upload generated zip file" +msgstr "Subir archivo zip generado" + +#: themes/default/templates/files.html.ep:31 +msgid "Uploaded at" +msgstr "Subido a" + +#: themes/default/templates/index.html.ep:153 +msgid "Uploaded files" +msgstr "Archivos subidos" + +#: themes/default/templates/partial/index.js.ep:30 +msgid "Websocket communication error" +msgstr "Error de comunicaciĂłn de Websocket" + +#: themes/default/templates/about.html.ep:3 +msgid "What is Lufi?" +msgstr "ÂżQuĂ© es lufi?" + +#: themes/default/templates/about.html.ep:14 +msgid "Who wrote this software?" +msgstr "ÂżQuiĂ©n escribiĂł este software?" + +#: themes/default/templates/partial/index.js.ep:13 +msgid "XXX file has been added to upload queue." +msgstr "Se ha agregado el archivo XXX para cargar la cola." + +#: themes/default/templates/invitations/invite.html.ep:30 +msgid "You can invite someone to send you files through this Lufi instance even if they don’t have an account on it." +msgstr "" +"Puede invitar a alguien a enviarle archivos a travĂ©s de esta instancia de " +"Lufi incluso si no tienen una cuenta en Ă©l." + +#: 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." +msgstr "" +"Puede ver la lista de sus archivos haciendo clic en el enlace \"Mis " +"archivos\" en la parte superior derecha de esta pĂĄgina." + +#: lib/Lufi/Controller/Mail.pm:42 +msgid "You can't add URLs that are not related to this instance." +msgstr "No puede agregar URL que no estĂ©n relacionadas con esta instancia." + +#: themes/default/templates/about.html.ep:8 +msgid "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." +msgstr "" +"No necesita registrarse para cargar archivos, pero tenga en cuenta que, por " +"razones legales, su direcciĂłn IP se almacenarĂĄ cuando envĂ­e un archivo. No " +"entre en pĂĄnico, este suele ser el caso para todos los sitios en los que " +"envĂ­a archivos." + +#: themes/default/templates/partial/render.js.ep:10 +msgid "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." +msgstr "" +"Parece que no tienes una clave en tu URL. No podrĂĄs descifrar el archivo. " +"Descarga cancelada." + +#: themes/default/templates/partial/render.js.ep:7 +msgid "You have attempted to leave this page. The download will be canceled. Are you sure?" +msgstr "" +"Has intentado salir de esta pĂĄgina. La descarga serĂĄ cancelada. ÂżEstĂĄs " +"seguro?" + +#: themes/default/templates/partial/index.js.ep:14 +msgid "You have attempted to leave this page. The upload will be canceled. Are you sure?" +msgstr "" +"Has intentado salir de esta pĂĄgina. La carga serĂĄ cancelada. ÂżEstĂĄs seguro?" + +#: themes/default/templates/logout.html.ep:14 +msgid "You have been successfully logged out." +msgstr "Ha sido desconectado exitosamente." + +#: lib/Lufi/Controller/Mail.pm:71 +msgid "You must give email addresses." +msgstr "Debes dar direcciones de correo electrĂłnico." + +#: themes/default/templates/index.html.ep:38 +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 "" +"Su navegador no tiene suficiente entropĂ­a para generar una clave de cifrado " +"segura. Espere (es mejor si hace cosas en su computadora mientras espera)." + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:95 +msgid "Your file is too big: %1 (maximum size allowed: %2)" +msgstr "Su archivo es demasiado grande: %1 (tamaño mĂĄximo permitido :%2)" + +#: lib/Lufi/Controller/Files.pm:351 +msgid "Your password is not valid. Please refresh the page to retry." +msgstr "" +"Su contraseña no es valida Actualice la pĂĄgina para volver a intentarlo." + +#: themes/default/templates/partial/render.js.ep:12 +msgid "Zip content:" +msgstr "Contenido zip:" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:20 +msgid "between %1 and %2, the file will be kept %3 day(s)." +msgstr "entre %1 y %2, el archivo se mantendrĂĄ% 3 dĂ­a (s)." + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:22 +msgid "between %1 and %2, the file will be kept forever." +msgstr "entre %1 y %2, el archivo se mantendrĂĄ para siempre." + +#: themes/default/templates/partial/mail.js.ep:42 +msgid "deadline: " +msgstr "Último plazo para descargar: " + +#: themes/default/templates/partial/invitations.js.ep:5 +msgid "expires on XXX" +msgstr "caduca el XXX" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:26 +msgid "for %1 and more, the file will be kept %2 day(s)" +msgstr "para %1 y mĂĄs, el archivo se mantendrĂĄ %2 dĂ­a(s)" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:28 +msgid "for %1 and more, the file will be kept forever." +msgstr "para %1 y mĂĄs, el archivo se mantendrĂĄ para siempre." + +#: themes/default/templates/index.html.ep:3 +msgid "no time limit" +msgstr "Sin lĂ­mite de tiempo" + +#: themes/default/templates/index.html.ep:124 +msgid "or" +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), que caducarĂĄ en %3" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Obtenga el cĂłdigo fuente en el repositorio oficial o en su Github mirror" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Como Lufi es un software gratuito con licencia bajo los tĂ©rminos de la AGPLv3, " +"puedes instalarlo en tu propio servidor. Echa un vistazo a la Wiki para el procedimiento." + +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "Archivo enviado" + +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "Archivo descargado" + +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "VersiĂłn" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "Última etiqueta de esta instancia: %1" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "Última confirmaciĂłn de esta instancia: %1" diff --git a/themes/default/lib/Lufi/I18N/fr.po b/themes/default/lib/Lufi/I18N/fr.po index 32f2d43..f8b3ed3 100644 --- a/themes/default/lib/Lufi/I18N/fr.po +++ b/themes/default/lib/Lufi/I18N/fr.po @@ -8,15 +8,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 11:51+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: French \n" +"Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-10-10 08:58+0000\n" -"Language-Team: \n" -"X-Generator: Zanata 4.6.2\n" -"Last-Translator: Luc Didry \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: fr\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -50,7 +51,7 @@ msgstr "%A %d %B %Y Ă  %T" #: themes/default/templates/partial/index.js.ep:27 msgid "(max size: XXX)" -msgstr "(taille max: XXX)" +msgstr "(taille max : XXX)" #: themes/default/templates/index.html.ep:5 msgid "1 year" @@ -184,7 +185,7 @@ msgstr "CrĂ©er une archive zip avec les fichiers avant l’envoi ?" #: themes/default/templates/invitations/my_invitations.html.ep:26 msgid "Created at" -msgstr "CrĂ©Ă©e le " +msgstr "CrĂ©Ă©e le" #: themes/default/templates/invitations/my_invitations.html.ep:14 msgid "Delete" @@ -263,11 +264,11 @@ msgstr "Chiffrement du fragment XX1 sur XX2" #: lib/Lufi/Controller/Files.pm:289 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:369 msgid "Error: the file has not been sent entirely." -msgstr "Erreur : le fichier n’a pas Ă©tĂ© envoyĂ© dans son intĂ©gralitĂ©" +msgstr "Erreur : le fichier n’a pas Ă©tĂ© envoyĂ© dans son intĂ©gralitĂ©." #: lib/Lufi/Controller/Files.pm:379 msgid "Error: unable to find the file. Are you sure of your URL?" @@ -326,7 +327,7 @@ msgid "" msgstr "" "RĂ©cupĂ©rez le code source sur le dĂ©pĂŽt officiel ou sur son miroir Github." +"ldidry/lufi\" class=\"classic\">miroir Github" #: themes/default/templates/invitations/my_invitations.html.ep:24 msgid "Guest mail" @@ -440,6 +441,16 @@ msgstr "Javascript est dĂ©sactivĂ©. Lufi ne fonctionnera pas." msgid "Language" msgstr "Langue" +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "Dernier commit de cette instance : %1" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "DerniĂšre Ă©tiquette de cette instance : %1" + #: themes/default/templates/login.html.ep:15 msgid "Login" msgstr "Identifiant" @@ -832,6 +843,10 @@ msgstr "EnvoyĂ© le" msgid "Uploaded files" msgstr "Fichiers envoyĂ©s" +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "Version" + #: themes/default/templates/partial/index.js.ep:30 msgid "Websocket communication error" msgstr "Erreur de communication WebSocket" @@ -938,12 +953,12 @@ msgstr "Contenu de l’archive zip :" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:20 msgid "between %1 and %2, the file will be kept %3 day(s)." -msgstr "entre %1 et %2, le fichier sera conservĂ© %3 jour(s) ;" +msgstr "entre %1 et %2, le fichier sera conservĂ© %3 jour(s)." #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:22 msgid "between %1 and %2, the file will be kept forever." -msgstr "entre %1 et %2, le fichier sera conservĂ© indĂ©finiment ;" +msgstr "entre %1 et %2, le fichier sera conservĂ© indĂ©finiment." #: themes/default/templates/partial/mail.js.ep:42 msgid "deadline: " @@ -956,7 +971,7 @@ msgstr "expire le XXX" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:26 msgid "for %1 and more, the file will be kept %2 day(s)" -msgstr "pour %1 et plus, le fichier sera conservĂ© %2 jour(s)." +msgstr "pour %1 et plus, le fichier sera conservĂ© %2 jour(s)" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:28 @@ -975,3 +990,27 @@ msgstr "ou" #: 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" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"RĂ©cupĂ©rez le code source sur le dĂ©pĂŽt officiel ou sur son miroir Github" + +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "Fichier envoyĂ©" + +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "Fichier tĂ©lĂ©chargĂ©" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Comme Lufi est un logiciel libre soumis aux termes de la license AGPLv3, vous " +"pouvez l’installer sur votre propre serveur. Veuillez consulter le Wiki pour voir la procĂ©dure." diff --git a/themes/default/lib/Lufi/I18N/fr_FR.po b/themes/default/lib/Lufi/I18N/fr_FR.po index f12cdef..abe1be8 100644 --- a/themes/default/lib/Lufi/I18N/fr_FR.po +++ b/themes/default/lib/Lufi/I18N/fr_FR.po @@ -8,15 +8,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 11:51+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: French (France) \n" +"Language: fr_FR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-10-10 08:58+0000\n" -"Language-Team: \n" -"X-Generator: Zanata 4.6.2\n" -"Last-Translator: Luc Didry \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: fr_FR\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -50,7 +51,7 @@ msgstr "%A %d %B %Y Ă  %T" #: themes/default/templates/partial/index.js.ep:27 msgid "(max size: XXX)" -msgstr "(taille max: XXX)" +msgstr "(taille max : XXX)" #: themes/default/templates/index.html.ep:5 msgid "1 year" @@ -184,7 +185,7 @@ msgstr "CrĂ©er une archive zip avec les fichiers avant l’envoi ?" #: themes/default/templates/invitations/my_invitations.html.ep:26 msgid "Created at" -msgstr "CrĂ©Ă©e le " +msgstr "CrĂ©Ă©e le" #: themes/default/templates/invitations/my_invitations.html.ep:14 msgid "Delete" @@ -263,11 +264,11 @@ msgstr "Chiffrement du fragment XX1 sur XX2" #: lib/Lufi/Controller/Files.pm:289 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:369 msgid "Error: the file has not been sent entirely." -msgstr "Erreur : le fichier n’a pas Ă©tĂ© envoyĂ© dans son intĂ©gralitĂ©" +msgstr "Erreur : le fichier n’a pas Ă©tĂ© envoyĂ© dans son intĂ©gralitĂ©." #: lib/Lufi/Controller/Files.pm:379 msgid "Error: unable to find the file. Are you sure of your URL?" @@ -326,7 +327,7 @@ msgid "" msgstr "" "RĂ©cupĂ©rez le code source sur le dĂ©pĂŽt officiel ou sur son miroir Github." +"ldidry/lufi\" class=\"classic\">miroir Github" #: themes/default/templates/invitations/my_invitations.html.ep:24 msgid "Guest mail" @@ -938,12 +939,12 @@ msgstr "Contenu de l’archive zip :" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:20 msgid "between %1 and %2, the file will be kept %3 day(s)." -msgstr "entre %1 et %2, le fichier sera conservĂ© %3 jour(s) ;" +msgstr "entre %1 et %2, le fichier sera conservĂ© %3 jour(s)." #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:22 msgid "between %1 and %2, the file will be kept forever." -msgstr "entre %1 et %2, le fichier sera conservĂ© indĂ©finiment ;" +msgstr "entre %1 et %2, le fichier sera conservĂ© indĂ©finiment." #: themes/default/templates/partial/mail.js.ep:42 msgid "deadline: " @@ -956,7 +957,7 @@ msgstr "expire le XXX" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:26 msgid "for %1 and more, the file will be kept %2 day(s)" -msgstr "pour %1 et plus, le fichier sera conservĂ© %2 jour(s)." +msgstr "pour %1 et plus, le fichier sera conservĂ© %2 jour(s)" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:28 @@ -975,3 +976,27 @@ msgstr "ou" #: 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" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"RĂ©cupĂ©rez le code source sur le dĂ©pĂŽt officiel ou sur son miroir Github" + +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "Fichier envoyĂ©" + +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "Fichier tĂ©lĂ©chargĂ©" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Comme Lufi est un logiciel libre soumis aux termes de la license AGPLv3, vous " +"pouvez l’installer sur votre propre serveur. Veuillez consulter le Wiki pour voir la procĂ©dure." diff --git a/themes/default/lib/Lufi/I18N/it.po b/themes/default/lib/Lufi/I18N/it.po index fe694fd..c8e6206 100644 --- a/themes/default/lib/Lufi/I18N/it.po +++ b/themes/default/lib/Lufi/I18N/it.po @@ -8,15 +8,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 18:29+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: Italian \n" +"Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-04-19 04:58+0000\n" -"Language-Team: \n" -"X-Generator: Zanata 4.6.2\n" -"Last-Translator: Luc Didry \n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: it\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -428,6 +429,7 @@ msgid "Login" msgstr "Login" #: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91 +#, fuzzy msgid "Logout" msgstr "Logout" @@ -883,12 +885,12 @@ msgstr "" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:20 msgid "between %1 and %2, the file will be kept %3 day(s)." -msgstr "tra %1 e %2, il file sarĂ  conservato %3 giorno(i);" +msgstr "tra %1 e %2, il file sarĂ  conservato %3 giorno(i)." #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:22 msgid "between %1 and %2, the file will be kept forever." -msgstr "tra %1 e %2, il file sarĂ  conservato per sempre;" +msgstr "tra %1 e %2, il file sarĂ  conservato per sempre." #: themes/default/templates/partial/mail.js.ep:42 msgid "deadline: " @@ -920,3 +922,19 @@ msgstr "o" #: themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "— %1 (%2), that will expire on %3" msgstr "" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"PoichĂ© Lufi Ăš un software libero soggetto ai termini della licenza AGPLv3, potete " +"installarlo sul vostro server. Si consulti Wiki per " +"vedere la procedura." + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Ottenere il codice sorgente sul repository ufficiale o sul suo mirror Github" diff --git a/themes/default/lib/Lufi/I18N/lufi.pot b/themes/default/lib/Lufi/I18N/lufi.pot index 0a3ec3b..2d76014 100644 --- a/themes/default/lib/Lufi/I18N/lufi.pot +++ b/themes/default/lib/Lufi/I18N/lufi.pot @@ -45,7 +45,7 @@ msgstr "" msgid "%A %d %B %Y at %T" msgstr "" -#: themes/default/templates/partial/index.js.ep:27 +#: themes/default/templates/partial/index.js.ep:28 msgid "(max size: XXX)" msgstr "" @@ -86,15 +86,15 @@ msgid "Are you sure you want to resend the invitation mail for the selected invi msgstr "" #: themes/default/templates/about.html.ep:17 -msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." msgstr "" #. (stash('nbslices') -#: themes/default/templates/partial/render.js.ep:9 +#: themes/default/templates/partial/render.js.ep:10 msgid "Asking for file part XX1 of %1" msgstr "" -#: themes/default/templates/about.html.ep:20 +#: themes/default/templates/about.html.ep:23 msgid "Back to homepage" msgstr "" @@ -138,15 +138,15 @@ msgstr "" msgid "Copy to clipboard" msgstr "" -#: lib/Lufi/Controller/Files.pm:507 +#: lib/Lufi/Controller/Files.pm:502 msgid "Could not delete the file. You are not authenticated." msgstr "" -#: lib/Lufi/Controller/Files.pm:489 +#: lib/Lufi/Controller/Files.pm:484 msgid "Could not find the file. Are you sure of the URL and the token?" msgstr "" -#: lib/Lufi/Controller/Files.pm:400 +#: lib/Lufi/Controller/Files.pm:395 msgid "Could not find the file. Are you sure of the URL?" msgstr "" @@ -222,15 +222,15 @@ msgstr "" msgid "Encrypting part XX1 of XX2" msgstr "" -#: lib/Lufi/Controller/Files.pm:289 +#: lib/Lufi/Controller/Files.pm:284 msgid "Error: the file existed but was deleted." msgstr "" -#: lib/Lufi/Controller/Files.pm:369 +#: lib/Lufi/Controller/Files.pm:364 msgid "Error: the file has not been sent entirely." msgstr "" -#: lib/Lufi/Controller/Files.pm:379 +#: lib/Lufi/Controller/Files.pm:374 msgid "Error: unable to find the file. Are you sure of your URL?" msgstr "" @@ -250,14 +250,22 @@ msgstr "" msgid "Export localStorage data" msgstr "" -#: lib/Lufi/Controller/Files.pm:471 +#: lib/Lufi/Controller/Files.pm:466 msgid "File deleted" msgstr "" +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "" + #: themes/default/templates/files.html.ep:27 msgid "File name" msgstr "" +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "" + #: themes/default/templates/invitations/my_invitations.html.ep:61 msgid "Files" msgstr "" @@ -279,7 +287,7 @@ msgid "Get the file" msgstr "" #: themes/default/templates/about.html.ep:18 -msgid "Get the source code on the official repository or on its Github mirror" +msgid "Get the source code on the official repository or on its Github mirror" msgstr "" #: themes/default/templates/invitations/my_invitations.html.ep:24 @@ -307,11 +315,11 @@ msgstr "" msgid "Hide hidden invitations" msgstr "" -#: themes/default/templates/partial/index.js.ep:25 +#: themes/default/templates/partial/index.js.ep:26 msgid "Hit Enter, then Ctrl+C to copy all the download links" msgstr "" -#: themes/default/templates/partial/index.js.ep:24 +#: themes/default/templates/partial/index.js.ep:25 msgid "Hit Enter, then Ctrl+C to copy the download link" msgstr "" @@ -381,6 +389,16 @@ msgstr "" msgid "Language" msgstr "" +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "" + #: themes/default/templates/login.html.ep:15 msgid "Login" msgstr "" @@ -418,11 +436,11 @@ msgid "Name of the zip file" msgstr "" #. (format_bytes($json->{size}) -#: lib/Lufi/Controller/Files.pm:108 +#: lib/Lufi/Controller/Files.pm:109 msgid "No enough space available on the server for this file (size: %1)." msgstr "" -#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28 +#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:29 msgid "No expiration delay" msgstr "" @@ -479,7 +497,7 @@ msgstr "" msgid "Rows in red mean that the files have expired and are no longer available." msgstr "" -#: themes/default/templates/partial/index.js.ep:26 +#: themes/default/templates/partial/index.js.ep:27 msgid "Send all links by email" msgstr "" @@ -495,7 +513,7 @@ msgstr "" msgid "Send with your own mail software" msgstr "" -#: themes/default/templates/partial/index.js.ep:29 +#: themes/default/templates/partial/index.js.ep:30 msgid "Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move." msgstr "" @@ -508,7 +526,7 @@ msgstr "" msgid "Show hidden invitations" msgstr "" -#: themes/default/templates/partial/render.js.ep:11 +#: themes/default/templates/partial/render.js.ep:12 msgid "Show zip content" msgstr "" @@ -533,7 +551,7 @@ msgid "Sorry, your invitation has expired or has been deleted." msgstr "" #. ($invit->ldap_user_mail) -#: lib/Lufi/Controller/Files.pm:122 +#: lib/Lufi/Controller/Files.pm:123 msgid "Sorry, your invitation has expired or has been deleted. Please contact %1 to have another invitation." msgstr "" @@ -567,7 +585,7 @@ msgstr "" msgid "The expiration delay (%1) is not between 1 and %2 days." msgstr "" -#: lib/Lufi/Controller/Files.pm:468 +#: lib/Lufi/Controller/Files.pm:463 msgid "The file has already been deleted" msgstr "" @@ -622,11 +640,11 @@ msgstr "" msgid "The original (and only for now) author is Luc Didry." msgstr "" -#: lib/Lufi/Controller/Files.pm:236 +#: lib/Lufi/Controller/Files.pm:231 msgid "The server was unable to find the file record to add your file part to. Please, contact the administrator." msgstr "" -#: lib/Lufi/Controller/Files.pm:295 +#: lib/Lufi/Controller/Files.pm:290 msgid "This file has been deactivated by the admins. Contact them to know why." msgstr "" @@ -656,17 +674,17 @@ msgid "Unable to copy the link(s) to your clipboard" msgstr "" #. ($short) -#: lib/Lufi/Controller/Files.pm:439 +#: lib/Lufi/Controller/Files.pm:434 msgid "Unable to get counter for %1. The file does not exists. It will be removed from your localStorage." msgstr "" #. ($short) -#: lib/Lufi/Controller/Files.pm:429 +#: lib/Lufi/Controller/Files.pm:424 msgid "Unable to get counter for %1. The token is invalid." msgstr "" #. ($short) -#: lib/Lufi/Controller/Files.pm:449 +#: lib/Lufi/Controller/Files.pm:444 msgid "Unable to get counter for %1. You are not authenticated." msgstr "" @@ -686,7 +704,11 @@ msgstr "" msgid "Uploaded files" msgstr "" -#: themes/default/templates/partial/index.js.ep:30 +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "" + +#: themes/default/templates/partial/index.js.ep:31 msgid "Websocket communication error" msgstr "" @@ -718,7 +740,7 @@ msgstr "" msgid "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." msgstr "" -#: themes/default/templates/partial/render.js.ep:10 +#: themes/default/templates/partial/render.js.ep:11 msgid "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." msgstr "" @@ -747,11 +769,11 @@ msgstr "" msgid "Your file is too big: %1 (maximum size allowed: %2)" msgstr "" -#: lib/Lufi/Controller/Files.pm:351 +#: lib/Lufi/Controller/Files.pm:346 msgid "Your password is not valid. Please refresh the page to retry." msgstr "" -#: themes/default/templates/partial/render.js.ep:12 +#: themes/default/templates/partial/render.js.ep:13 msgid "Zip content:" msgstr "" diff --git a/themes/default/lib/Lufi/I18N/nl.po b/themes/default/lib/Lufi/I18N/nl.po index b52bbc2..89b03fd 100644 --- a/themes/default/lib/Lufi/I18N/nl.po +++ b/themes/default/lib/Lufi/I18N/nl.po @@ -4,15 +4,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 18:29+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: Dutch \n" +"Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-04-19 04:57+0000\n" -"Last-Translator: Luc Didry \n" -"Language-Team: Dutch\n" -"Language: nl\n" -"X-Generator: Zanata 4.6.2\n" -"Plural-Forms: nplurals=2; plural=(n != 1)\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -246,7 +247,7 @@ msgstr "Emails" #: themes/default/templates/partial/index.js.ep:22 msgid "Encrypting part XX1 of XX2" -msgstr "Encrypten deel XX1 van XX2 " +msgstr "Encrypten deel XX1 van XX2" #: lib/Lufi/Controller/Files.pm:289 msgid "Error: the file existed but was deleted." @@ -329,7 +330,10 @@ msgstr "" #: themes/default/templates/partial/mail.js.ep:35 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" +"\\n" +"Hier zijn enkele bestanden die ik met je wil delen:\\n" #: themes/default/templates/mail.html.ep:35 msgid "Here's some files" @@ -847,7 +851,7 @@ msgid "" "You have attempted to leave this page. The upload will be canceled. Are you " "sure?" msgstr "" -"Je verlaat deze pagina. Upload zal geannuleerd worden. Weet je het zeker? " +"Je verlaat deze pagina. Upload zal geannuleerd worden. Weet je het zeker?" #: themes/default/templates/logout.html.ep:14 msgid "You have been successfully logged out." @@ -917,3 +921,19 @@ msgstr "of" #: themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "— %1 (%2), that will expire on %3" msgstr "" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Krijg de broncode op de officiĂ«le repository of op Github mirror" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Aangezien Lufi een gratis software id die gelicentieerd staat onder de " +"voorwaarden van AGPLv3, kan je het installeren op je eigen server. Bekijk Wiki voor de procedure." diff --git a/themes/default/lib/Lufi/I18N/oc.po b/themes/default/lib/Lufi/I18N/oc.po index c0904c7..8055a01 100644 --- a/themes/default/lib/Lufi/I18N/oc.po +++ b/themes/default/lib/Lufi/I18N/oc.po @@ -11,15 +11,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-05-22 08:24+0000\n" +"Last-Translator: Quentin PAGÈS \n" +"Language-Team: Occitan \n" +"Language: oc\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-10-11 05:26+0000\n" -"Last-Translator: QuentĂ­\n" -"Language-Team: Tot en ĂČc (totenoc.eu)\n" -"Language: oc\n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"X-Generator: Zanata 4.6.2\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -35,7 +36,7 @@ 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" +msgstr "%1 vos convida a li mandar de fichiĂšrs per Lufi." #. (stash('invitation') #: themes/default/templates/invitations/notification_files_sent.mail.ep:4 @@ -264,11 +265,11 @@ msgstr "Chiframent del trĂČç XX1 sus XX2" #: lib/Lufi/Controller/Files.pm:289 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:369 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:379 msgid "Error: unable to find the file. Are you sure of your URL?" @@ -326,7 +327,7 @@ msgid "" msgstr "" "Recuperatz lo cĂČdi font sul depaus oficial o sus son miralh Github." +"lufi\" class=\"classic\">miralh Github" #: themes/default/templates/invitations/my_invitations.html.ep:24 msgid "Guest mail" @@ -714,7 +715,7 @@ msgstr "L’invitacion %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 d’invitacion serĂ  mandat a vĂČstra adreça electronica (%1)" +msgstr "Lo messatge d’invitacion 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" @@ -843,7 +844,7 @@ 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" +msgstr "XXX fichiĂšrs son estats ajustats a la fila de mandadĂ­s." #: themes/default/templates/invitations/invite.html.ep:30 msgid "" @@ -935,16 +936,16 @@ msgstr "Contengut ZIP :" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:20 msgid "between %1 and %2, the file will be kept %3 day(s)." -msgstr "entre %1 e %2, lo fichiĂšr serĂ  gardat %3 jorn(s) ;" +msgstr "entre %1 e %2, lo fichiĂšr serĂ  gardat %3 jorn(s)." #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:22 msgid "between %1 and %2, the file will be kept forever." -msgstr "entre %1 e %2, lo fichiĂšr serĂ  gardat per totjorn. ;" +msgstr "entre %1 e %2, lo fichiĂšr serĂ  gardat per totjorn." #: themes/default/templates/partial/mail.js.ep:42 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" @@ -953,7 +954,7 @@ msgstr "expira lo XXX" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:26 msgid "for %1 and more, the file will be kept %2 day(s)" -msgstr "per %1 e mai, lo fichiĂšr serĂ  gardat %2 jorn(s)." +msgstr "per %1 e mai, lo fichiĂšr serĂ  gardat %2 jorn(s)" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:28 @@ -972,3 +973,41 @@ msgstr "o" #: themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "— %1 (%2), that will expire on %3" msgstr "— %1 (%2), qu’expirarĂ  lo %3" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Recuperatz lo cĂČdi font sul depaus oficial o sus son miralh Github" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Ja que Lufi es un logicial liure somĂ©s als tĂšrmes de la licĂ©ncia AGPLv3, podĂštz l’" +"installar sus vĂČstre prĂČpri servidor. MercĂ©s de consultar lo Wiki per veire la procedura." + +#: themes/default/templates/partial/index.js.ep:24 +msgid "File uploaded" +msgstr "FichiĂšr mandat" + +#: themes/default/templates/partial/render.js.ep:9 +msgid "File downloaded" +msgstr "FichiĂšr telecargat" + +#: themes/default/templates/about.html.ep:20 +msgid "Version" +msgstr "Version" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:21 +msgid "Latest tag of this instance: %1" +msgstr "DarriĂšra etiqueta d’aquesta instĂ ncia : %1" + +#. (sprintf('%s', stash('version') +#: themes/default/templates/about.html.ep:22 +msgid "Latest commit of this instance: %1" +msgstr "DarriĂšr commit d’aquesta instĂ ncia : %1" diff --git a/themes/default/lib/Lufi/I18N/pt.po b/themes/default/lib/Lufi/I18N/pt.po index 63bf1dd..702a654 100644 --- a/themes/default/lib/Lufi/I18N/pt.po +++ b/themes/default/lib/Lufi/I18N/pt.po @@ -9,15 +9,16 @@ msgid "" msgstr "" "Project-Id-Version: PACKAGE VERSION\n" "POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 18:29+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: Portuguese \n" +"Language: pt\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" -"PO-Revision-Date: 2019-04-19 04:58+0000\n" -"Language-Team: \n" -"X-Generator: Zanata 4.6.2\n" -"Last-Translator: Luc Didry \n" -"Plural-Forms: nplurals=2; plural=(n > 1);\n" -"Language: pt\n" +"Plural-Forms: nplurals=2; plural=n > 1;\n" +"X-Generator: Weblate 3.11.2\n" #. ($delay) #. (max_delay) @@ -894,7 +895,7 @@ msgstr "" #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:20 msgid "between %1 and %2, the file will be kept %3 day(s)." -msgstr "entre %1 e %2, o ficheiro serĂĄ conservado %3 dia(s) ;" +msgstr "entre %1 e %2, o ficheiro serĂĄ conservado %3 dia(s)." #. (format_bytes($keys[$i]) #: themes/default/templates/delays.html.ep:22 @@ -932,3 +933,19 @@ msgstr "ou" #: themes/default/templates/invitations/notification_files_sent.mail.ep:12 msgid "— %1 (%2), that will expire on %3" msgstr "" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"Recupere o cĂłdigo-fonte no o depĂłsito oficial ou entĂŁo rĂ©plicas Github" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Como Lufi Ă© um programa livre sob os termos da licença AGPLv3, pode instalar-lo no " +"seu prĂłrpio servidor. Para saber mais clique aqui Wiki para " +"ver o procedimento." diff --git a/themes/default/lib/Lufi/I18N/sv.po b/themes/default/lib/Lufi/I18N/sv.po new file mode 100644 index 0000000..7990fe2 --- /dev/null +++ b/themes/default/lib/Lufi/I18N/sv.po @@ -0,0 +1,861 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n" +"PO-Revision-Date: 2020-03-22 18:28+0000\n" +"Last-Translator: Luc Didry \n" +"Language-Team: Swedish \n" +"Language: sv\n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" +"Plural-Forms: nplurals=2; plural=n != 1;\n" +"X-Generator: Weblate 3.11.2\n" + +#. ($delay) +#. (max_delay) +#: themes/default/templates/index.html.ep:56 themes/default/templates/index.html.ep:65 themes/default/templates/index.html.ep:66 +msgid "%1 days" +msgstr "%1 dagar" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:2 +msgid "%1 invites you to send him/her files" +msgstr "%1 bjuder in dig att skicka filer till honom eller henne" + +#. (stash('ldap_user') +#: themes/default/templates/invitations/invite.mail.ep:6 +msgid "%1 invites you to send him/her files through Lufi." +msgstr "%1 bjuder in dig att skicka filer till honom eller henne via Lufi." + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:4 +msgid "%1 sent you files" +msgstr "% har skickat filer till dig" + +#. (stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:8 +msgid "%1 used your invitation to send you files:" +msgstr "%1 utnyttjade din inbjudan för att skicka filer till dig:" + +#: 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 klockan %T" + +#: themes/default/templates/partial/index.js.ep:27 +msgid "(max size: XXX)" +msgstr "(största tillĂ„tna storlek: XXX)" + +#: themes/default/templates/index.html.ep:5 +msgid "1 year" +msgstr "1 Ă„r" + +#: themes/default/templates/index.html.ep:4 themes/default/templates/index.html.ep:65 +msgid "24 hours" +msgstr "24 timmar" + +#: themes/default/templates/partial/mail.js.ep:40 +msgid ":" +msgstr ":" + +#: themes/default/templates/render.html.ep:42 +msgid "Abort" +msgstr "Avbryt" + +#: themes/default/templates/layouts/default.html.ep:53 themes/default/templates/layouts/default.html.ep:86 +msgid "About" +msgstr "Om" + +#: themes/default/templates/index.html.ep:107 +msgid "Add a password to file(s)" +msgstr "Lösenordsskydda filerna" + +#: themes/default/templates/mail.html.ep:16 +msgid "Adding URLs not related to this Lufi instance to the mail body or subject is prohibited." +msgstr "" +"Det Ă€r inte tillĂ„tet att infoga lĂ€nkar i Ă€mnesraden eller meddelandet som " +"inte gĂ„r till den hĂ€r Lufi-instansen." + +#: themes/default/templates/partial/invitations.js.ep:3 +msgid "Are you sure you want to delete the selected invitations?" +msgstr "Är du sĂ€ker pĂ„ att du vill radera de markerade inbjudningarna?" + +#: themes/default/templates/partial/invitations.js.ep:4 +msgid "Are you sure you want to resend the invitation mail for the selected invitations?" +msgstr "Är du sĂ€ker pĂ„ att du vill skicka ut de markerade inbjudningarna igen?" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Du kan installera Lufi pĂ„ din egen server eftersom det Ă€r en fri mjukvara " +"publicerad under licensen AGPLv3. Ta en titt pĂ„ wikin för att se hur." + +#. (stash('nbslices') +#: themes/default/templates/partial/render.js.ep:9 +msgid "Asking for file part XX1 of %1" +msgstr "FrĂ„gar efter del XX1 av filen %1" + +#: themes/default/templates/about.html.ep:20 +msgid "Back to homepage" +msgstr "Tillbaka till hemsidan" + +#: lib/Lufi/Controller/Mail.pm:25 +msgid "Bad CSRF token!" +msgstr "Ogiltig CSRF-token!" + +#: lib/Lufi/Controller/Auth.pm:27 lib/Lufi/Controller/Auth.pm:49 +msgid "Bad CSRF token." +msgstr "Ogiltig CSRF-token." + +#: themes/default/templates/partial/render.js.ep:5 +msgid "Click here to refresh the page and restart the download." +msgstr "Klicka hĂ€r för att uppdatera sidan och starta om nerladdningen." + +#: themes/default/templates/invitations/invite.mail.ep:8 +msgid "Click on the following URL to upload files on Lufi:" +msgstr "Klicka pĂ„ följande lĂ€nk för att ladda upp filer till Lufi:" + +#: themes/default/templates/index.html.ep:126 +msgid "Click to open the file browser" +msgstr "Klicka för att öppna filhanteraren" + +#: themes/default/templates/delays.html.ep:38 themes/default/templates/invitations/my_invitations.html.ep:80 +msgid "Close" +msgstr "StĂ€ng" + +#: themes/default/templates/mail.html.ep:23 +msgid "Comma-separated email addresses" +msgstr "E-postadresser Ă„tskilda av kommatecken" + +#: themes/default/templates/index.html.ep:140 +msgid "Compressing zip file
" +msgstr "Komprimerar ZIP-arkiv 
" + +#: themes/default/templates/partial/index.js.ep:15 +msgid "Copy all links to clipboard" +msgstr "Kopiera alla lĂ€nkar till urklipp" + +#: themes/default/templates/partial/index.js.ep:18 +msgid "Copy to clipboard" +msgstr "Kopiera till urklipp" + +#: lib/Lufi/Controller/Files.pm:507 +msgid "Could not delete the file. You are not authenticated." +msgstr "Kunde inte radera filen. Du Ă€r inte behörig." + +#: lib/Lufi/Controller/Files.pm:489 +msgid "Could not find the file. Are you sure of the URL and the token?" +msgstr "Kunde inte hitta filen. Är du sĂ€ker pĂ„ att det Ă€r rĂ€tt lĂ€nk och token?" + +#: lib/Lufi/Controller/Files.pm:400 +msgid "Could not find the file. Are you sure of the URL?" +msgstr "Kunde inte hitta filen. Är du sĂ€ker pĂ„ att det Ă€r rĂ€tt lĂ€nk?" + +#: themes/default/templates/files.html.ep:29 +msgid "Counter" +msgstr "RĂ€knare" + +#: themes/default/templates/index.html.ep:100 +msgid "Create a zip archive with the files before uploading?" +msgstr "Vill du skapa göra filerna till ett ZIP-arkiv innan de laddas upp?" + +#: themes/default/templates/invitations/my_invitations.html.ep:26 +msgid "Created at" +msgstr "Skapad" + +#: themes/default/templates/invitations/my_invitations.html.ep:14 +msgid "Delete" +msgstr "Radera" + +#: themes/default/templates/files.html.ep:30 themes/default/templates/index.html.ep:90 +msgid "Delete at first download?" +msgstr "Radera efter första nerladdningen" + +#: themes/default/templates/files.html.ep:19 +msgid "Delete selected files" +msgstr "Radera markerade filer" + +#: themes/default/templates/files.html.ep:33 themes/default/templates/partial/index.js.ep:19 +msgid "Deletion link" +msgstr "LĂ€nk för radering" + +#: themes/default/templates/delays.html.ep:8 +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 "" +"Oroa dig inte! Om en anvĂ€ndare börjar ladda ner en fil innan dess " +"utgĂ„ngsdatum kommer hela filen kunna laddas ner, Ă€ven om den skulle gĂ„ ut " +"under tiden." + +#: themes/default/templates/partial/index.js.ep:21 themes/default/templates/render.html.ep:28 +msgid "Download" +msgstr "Ladda ner" + +#: themes/default/templates/partial/render.js.ep:4 +msgid "Download aborted." +msgstr "Nerladdning avbruten." + +#: themes/default/templates/files.html.ep:28 themes/default/templates/partial/index.js.ep:20 +msgid "Download link" +msgstr "NerladdningslĂ€nk" + +#: themes/default/templates/about.html.ep:10 +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 "" +"Drag och slĂ€pp filerna pĂ„ ytan eller skicka dem pĂ„ det traditionella viset, " +"sĂ„ kommer de buntas ihop, krypteras och skickas till servern. Du kommer fĂ„ " +"tvĂ„ lĂ€nkar per fil: en nerladdningslĂ€nk att ge till dem du vill dela filen " +"med och en lĂ€nk för att radera filen, sĂ„ att du kan ta bort den nĂ€r du vill." + +#: themes/default/templates/index.html.ep:122 +msgid "Drop files here" +msgstr "SlĂ€pp filer hĂ€r" + +#: themes/default/templates/invitations/invite.html.ep:40 +msgid "Email address of your guest" +msgstr "E-postadress till din gĂ€st" + +#: themes/default/templates/mail.html.ep:39 +msgid "Email body" +msgstr "E-postmeddelande" + +#: themes/default/templates/mail.html.ep:31 +msgid "Email subject" +msgstr "Ämnesrad för e-post" + +#: themes/default/templates/mail.html.ep:25 themes/default/templates/mail.html.ep:27 +msgid "Emails" +msgstr "E-postmeddelanden" + +#: themes/default/templates/partial/index.js.ep:22 +msgid "Encrypting part XX1 of XX2" +msgstr "Krypterar del XX1 av XX1" + +#: lib/Lufi/Controller/Files.pm:289 +msgid "Error: the file existed but was deleted." +msgstr "Fel: filen fanns men har raderats nu." + +#: lib/Lufi/Controller/Files.pm:369 +msgid "Error: the file has not been sent entirely." +msgstr "Fel: hela filen har inte överförts." + +#: lib/Lufi/Controller/Files.pm:379 +msgid "Error: unable to find the file. Are you sure of your URL?" +msgstr "Fel: kunde inte hitta filen. Är du sĂ€ker pĂ„ att du har rĂ€tt lĂ€nk?" + +#: themes/default/templates/partial/index.js.ep:23 +msgid "Expiration:" +msgstr "GĂ„r ut:" + +#: themes/default/templates/invitations/my_invitations.html.ep:27 +msgid "Expire at" +msgstr "Förfaller" + +#: themes/default/templates/files.html.ep:32 +msgid "Expires at" +msgstr "Förfaller" + +#: themes/default/templates/files.html.ep:12 +msgid "Export localStorage data" +msgstr "Exportera localStorage-data" + +#: lib/Lufi/Controller/Files.pm:471 +msgid "File deleted" +msgstr "Fil raderad" + +#: themes/default/templates/files.html.ep:27 +msgid "File name" +msgstr "Filnamn" + +#: themes/default/templates/invitations/my_invitations.html.ep:61 +msgid "Files" +msgstr "Filer" + +#: themes/default/templates/index.html.ep:80 +msgid "Files deleted at first download" +msgstr "Filer raderade efter första nerladdning" + +#: themes/default/templates/invitations/my_invitations.html.ep:28 +msgid "Files sent at" +msgstr "Filer skickade" + +#: themes/default/templates/partial/invitations.js.ep:8 +msgid "Files sent in invitation XX1 by XX2" +msgstr "Filer skickade i inbjudan XX1 av XX2" + +#: themes/default/templates/partial/render.js.ep:8 +msgid "Get the file" +msgstr "HĂ€mta filen" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"HĂ€mta kĂ€llkoden frĂ„n det officiella arkivet eller frĂ„n spegelsidan pĂ„ Github" + +#: themes/default/templates/invitations/my_invitations.html.ep:24 +msgid "Guest mail" +msgstr "E-postadress till gĂ€st" + +#. (ucfirst(stash('invitation') +#: themes/default/templates/invitations/notification_files_sent.mail.ep:6 +msgid "Hello %1," +msgstr "Hej %1," + +#: themes/default/templates/invitations/invite.mail.ep:4 +msgid "Hello," +msgstr "Hej," + +#: themes/default/templates/partial/mail.js.ep:35 +msgid "Hello,\\n\\nHere's some files I want to share with you:\\n" +msgstr "" +"Hej,\\n" +"\\n" +"HĂ€r Ă€r nĂ„gra filer jag vill dela med dig:\\n" + +#: themes/default/templates/mail.html.ep:35 +msgid "Here's some files" +msgstr "HĂ€r Ă€r nĂ„gra filer" + +#: themes/default/templates/partial/invitations.js.ep:7 +msgid "Hide hidden invitations" +msgstr "Visa inte dolda inbjudningar" + +#: themes/default/templates/partial/index.js.ep:25 +msgid "Hit Enter, then Ctrl+C to copy all the download links" +msgstr "" +"Tryck Enter och sedan Crtl+C för att kopiera samtliga nerladdningslĂ€nkar" + +#: themes/default/templates/partial/index.js.ep:24 +msgid "Hit Enter, then Ctrl+C to copy the download link" +msgstr "Tryck Enter och sedan Crtl+C för att kopiera nerladdningslĂ€nken" + +#: themes/default/templates/about.html.ep:9 +msgid "How does it work?" +msgstr "Hur fungerar det?" + +#: themes/default/templates/invitations/invite.html.ep:46 +msgid "How many days would you like the invitation to be valid?" +msgstr "Hur mĂ„nga dagar vill du att inbjudningen ska gĂ€lla?" + +#: themes/default/templates/about.html.ep:16 +msgid "How to install the software on my server?" +msgstr "Hur kan jag installera den hĂ€r mjukvaran pĂ„ min server?" + +#: themes/default/templates/about.html.ep:12 +msgid "How to report an illegal file?" +msgstr "Kan jag anmĂ€la en olaglig fil?" + +#: themes/default/templates/delays.html.ep:7 +msgid "If you choose a delay, the file will be deleted after that delay." +msgstr "Om du anger en fördröjning kommer filen raderas nĂ€r den tiden gĂ„tt ut." + +#: themes/default/templates/mail.html.ep:15 +msgid "If you send the mail from this server, the links will be sent to the server, which may lower your privacy protection." +msgstr "" +"Om du skickar meddelandet frĂ„n den hĂ€r servern mĂ„ste lĂ€nkarna skickas till " +"servern, vilket kan försĂ€mra skyddet av din identitet." + +#: themes/default/templates/files.html.ep:14 +msgid "Import localStorage data" +msgstr "Importera localStorage-data" + +#: themes/default/templates/index.html.ep:53 +msgid "Important: more information on delays" +msgstr "Viktigt: mer information om fördröjningar" + +#: themes/default/templates/delays.html.ep:5 +msgid "Information about delays" +msgstr "Information om fördröjningar" + +#: themes/default/templates/files.html.ep:18 themes/default/templates/invitations/my_invitations.html.ep:12 +msgid "Invert selection" +msgstr "OmvĂ€nt val" + +#. ($i->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:171 +msgid "Invitation resent to %1.
URL: %2" +msgstr "Inbjudan har skickats till %1 igen.
LĂ€nk: %2" + +#. ($invitation->guest_mail, $url) +#: lib/Lufi/Controller/Invitation.pm:87 +msgid "Invitation sent to %1.
URL: %2" +msgstr "Inbjudan har skickats till %1.
LĂ€nk: %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 "Bjud in en gĂ€st" + +#: themes/default/templates/partial/render.js.ep:6 +msgid "It seems that the key in your URL is incorrect. Please, verify your URL." +msgstr "" +"Det verkar som att nyckeln i adressen Ă€r ogiltig. Kontrollera gĂ€rna din lĂ€nk." + +#: themes/default/templates/index.html.ep:12 +msgid "Javascript is disabled. You won't be able to use Lufi." +msgstr "Javascript Ă€r inte pĂ„slaget, sĂ„ du kommer inte kunna anvĂ€nda Lufi." + +#: 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" +msgstr "SprĂ„k" + +#: themes/default/templates/login.html.ep:15 +msgid "Login" +msgstr "Logga in" + +#: themes/default/templates/layouts/default.html.ep:58 themes/default/templates/layouts/default.html.ep:91 +msgid "Logout" +msgstr "Logga ut" + +#: themes/default/templates/about.html.ep:4 +msgid "Lufi is a free (as in free speech) file hosting software." +msgstr "Lufi Ă€r en fri (som i frihet) mjukvara för att dela filer." + +#: themes/default/templates/partial/files.js.ep:12 +msgid "Lufi recently changed its way to store files information.\\n\\nNo files have been found in the new localStorage location but we found files in the old one.\\nDo you want to import those informations?\\n\\nPlease note that this is the only time that we will ask you this." +msgstr "" + +#: themes/default/templates/files.html.ep:34 +msgid "Mail" +msgstr "E-post" + +#: 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" +msgstr "Mina filer" + +#: 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 "Mina inbjudningar" + +#: 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-arkivets namn" + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:108 +msgid "No enough space available on the server for this file (size: %1)." +msgstr "" +"Servern har inte tillrĂ€ckligt med ledigt utrymme för den hĂ€r filen (storlek: " +"%1)." + +#: themes/default/templates/partial/files.js.ep:10 themes/default/templates/partial/index.js.ep:28 +msgid "No expiration delay" +msgstr "Ingen utgĂ„ngsfördröjning" + +#: themes/default/templates/files.html.ep:8 +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 "" + +#: themes/default/templates/index.html.ep:106 themes/default/templates/login.html.ep:21 themes/default/templates/render.html.ep:26 +msgid "Password" +msgstr "Lösenord" + +#. (config('contact') +#: themes/default/templates/about.html.ep:13 +msgid "Please contact the administrator: %1" +msgstr "Kontakta gĂ€rna administratören: %1" + +#: themes/default/templates/render.html.ep:33 +msgid "Please wait while we are getting your file. We first need to download and decrypt all parts before you can get it." +msgstr "" + +#: lib/Lufi/Controller/Auth.pm:38 +msgid "Please, check your credentials or your right to access this service: unable to authenticate." +msgstr "" + +#: themes/default/templates/about.html.ep:5 +msgid "Privacy" +msgstr "Personuppgiftsskydd" + +#: themes/default/templates/files.html.ep:13 +msgid "Purge expired files from localStorage" +msgstr "Ta bort gamla filer frĂ„n localStorage" + +#: themes/default/templates/invitations/notification_files_sent.mail.ep:20 +msgid "Regards," +msgstr "Med vĂ€nliga hĂ€lsningar," + +#: themes/default/templates/invitations/invite.mail.ep:15 +msgid "Regards." +msgstr "Med vĂ€nliga hĂ€lsningar." + +#: themes/default/templates/layouts/default.html.ep:31 themes/default/templates/layouts/default.html.ep:64 +msgid "Report file" +msgstr "AnmĂ€l fil" + +#: themes/default/templates/invitations/my_invitations.html.ep:15 +msgid "Resend invitation mail" +msgstr "Skicka inbjudning igen" + +#: themes/default/templates/invitations/my_invitations.html.ep:9 +msgid "Rows in purple mean that the invitations have expired." +msgstr "Lila rad betyder att inbjudningen har gĂ„tt ut." + +#: themes/default/templates/files.html.ep:9 +msgid "Rows in red mean that the files have expired and are no longer available." +msgstr "" +"Röd rad betyder att filen har gĂ„tt ut och inte finns tillgĂ€nglig lĂ€ngre." + +#: themes/default/templates/partial/index.js.ep:26 +msgid "Send all links by email" +msgstr "Skicka alla lĂ€nkar via e-post" + +#: themes/default/templates/invitations/invite.html.ep:50 +msgid "Send the invitation" +msgstr "Skicka inbjudningen" + +#: themes/default/templates/mail.html.ep:46 +msgid "Send with this server" +msgstr "Skicka frĂ„n den hĂ€r servern" + +#: themes/default/templates/mail.html.ep:47 +msgid "Send with your own mail software" +msgstr "Skicka frĂ„n din egen e-posttjĂ€nst" + +#: 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." +msgstr "" +"Överför del XX1 av XX2. Det kan ta en stund innan statsindikatorn börjar " +"röra sig." + +#. (url_for('/') +#: themes/default/templates/partial/mail.js.ep:48 +msgid "Share your files in total privacy on %1" +msgstr "Dela dina filer helt skyddat med %1" + +#: themes/default/templates/invitations/my_invitations.html.ep:13 themes/default/templates/partial/invitations.js.ep:9 +msgid "Show hidden invitations" +msgstr "Visa dolda inbjudningar" + +#: themes/default/templates/partial/render.js.ep:11 +msgid "Show zip content" +msgstr "Visa ZIP-arkivets innehĂ„ll" + +#: 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" +msgstr "Logga in" + +#: lib/Lufi/Controller/Invitation.pm:283 themes/default/templates/invitations/exception.html.ep:16 +msgid "Sorry, the invitation doesn’t exist. Are you sure you are on the right URL?" +msgstr "" +"Den hĂ€r inbjudan existerar tyvĂ€rr inte. Är du sĂ€ker pĂ„ att du har kommit " +"till rĂ€tt adress?" + +#: themes/default/templates/index.html.ep:46 +msgid "Sorry, the uploading is currently disabled. Please try again later." +msgstr "Uppladdning Ă€r inte tillĂ„tet för tillfĂ€llet. Försök gĂ€rna igen senare." + +#: lib/Lufi/Controller/Files.pm:82 +msgid "Sorry, uploading is disabled." +msgstr "Det gĂ„r tyvĂ€rr inte att ladda upp för tillfĂ€llet." + +#: themes/default/templates/invitations/exception.html.ep:7 +msgid "Sorry, your invitation has expired or has been deleted." +msgstr "Din inbjudan har antingen gĂ„tt ut eller raderats." + +#. ($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 "" +"Din inbjudan har dessvĂ€rre gĂ„tt ut eller raderats. Du kan kontakta %1 för " +"att fĂ„ en ny inbjudan." + +#. ($invitation->ldap_user_mail) +#: lib/Lufi/Controller/Invitation.pm:276 +msgid "The URLs of your files have been sent by email to %1." +msgstr "LĂ€nken till dina filer har skickats med e-post till %1." + +#: 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.)." +msgstr "" +"Administratören kan endast se filens namn, storlek och mime-typ (om det Ă€r " +"en video, textfil eller nĂ„got annat)." + +#: lib/Lufi/Controller/Mail.pm:53 +msgid "The body of the mail must contain at least one URL pointing to a file hosted on this instance." +msgstr "" +"E-postmeddelandet mĂ„ste innehĂ„lla minst en lĂ€nk till en fil som lagras pĂ„ " +"den hĂ€r instansen." + +#: themes/default/templates/partial/files.js.ep:11 +msgid "The data has been successfully imported." +msgstr "All data har importerats." + +#: lib/Lufi/Controller/Mail.pm:73 +msgid "The email body can't be empty." +msgstr "E-postmeddelandet fĂ„r inte lĂ€mnas tomt." + +#: lib/Lufi/Controller/Mail.pm:72 +msgid "The email subject can't be empty." +msgstr "Ämnesraden fĂ„r inte lĂ€mnas tom." + +#. ($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" +msgstr "Filen har redan raderats" + +#: themes/default/templates/about.html.ep:6 +msgid "The files uploaded on a Lufi instance are encrypted before the upload to the server: the administrator of the server can not see the file's content." +msgstr "" +"Filerna krypteras innan de laddas upp till Lufi-serveren. DĂ€rför kan inte " +"ens serverns administratör se filens innehĂ„ll." + +#. (join(', ', @bad) +#: lib/Lufi/Controller/Mail.pm:68 +msgid "The following email addresses are not valid: %1" +msgstr "Följande e-postadresser Ă€r inte giltiga: %1" + +#. ($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 can’t be resent: %2 has already sent files.
Please create a new invitation." +msgstr "" + +#. ($i->token) +#: lib/Lufi/Controller/Invitation.pm:130 +msgid "The invitation %1 has been deleted." +msgstr "Inbjudan %1 har raderats." + +#. (stash('user_mail') +#: themes/default/templates/invitations/invite.html.ep:34 +msgid "The invitation mail will be send from your email address (%1)." +msgstr "Inbjudan kommer skickas frĂ„n din e-postadress (%1)." + +#: themes/default/templates/partial/index.js.ep:16 +msgid "The link(s) has been copied to your clipboard" +msgstr "LĂ€nkarna har kopierats till urklipp" + +#. (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 "" +"LĂ€nkarna till dina filer kommer skickas per e-post till %1 (%2) automatiskt" + +#. (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 "LĂ€nkarna till dina filer kommer skickas till %1 automatiskt." + +#: lib/Lufi/Controller/Mail.pm:97 +msgid "The mail has been sent." +msgstr "E-postmeddelandet har skickats." + +#: themes/default/templates/about.html.ep:15 +msgid "The original (and only for now) author is Luc Didry." +msgstr "" + +#: 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." +msgstr "" + +#: lib/Lufi/Controller/Files.pm:295 +msgid "This file has been deactivated by the admins. Contact them to know why." +msgstr "" +"Den hĂ€r filen har avaktiverats av administratörerna. Kontakta dem för att fĂ„ " +"veta anledningen." + +#: 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 "Den hĂ€r inbjudan Ă€r giltig tills %1." + +#: 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:" +msgstr "" + +#: 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 "LĂ€nk" + +#: themes/default/templates/partial/index.js.ep:17 +msgid "Unable to copy the link(s) to your clipboard" +msgstr "Kunde inte kopiera lĂ€nkarna till urklipp" + +#. ($short) +#: 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." +msgstr "" +"Kunde inte hĂ€mta rĂ€knaren för %1 eftersom filen inte existerar. Den kommer " +"tas bort frĂ„n ditt localStorage." + +#. ($short) +#: lib/Lufi/Controller/Files.pm:429 +msgid "Unable to get counter for %1. The token is invalid." +msgstr "Kunde inte ladda in rĂ€knaren för %1. Ogiltig token." + +#. ($short) +#: lib/Lufi/Controller/Files.pm:449 +msgid "Unable to get counter for %1. You are not authenticated." +msgstr "Kunde inte ladda in rĂ€knaren för %1. Du Ă€r inte behörig." + +#: themes/default/templates/layouts/default.html.ep:33 themes/default/templates/layouts/default.html.ep:66 +msgid "Upload files" +msgstr "Ladda upp filer" + +#: themes/default/templates/index.html.ep:145 +msgid "Upload generated zip file" +msgstr "Ladda upp det genererade ZIP-arkivet" + +#: themes/default/templates/files.html.ep:31 +msgid "Uploaded at" +msgstr "Uppladdad" + +#: themes/default/templates/index.html.ep:153 +msgid "Uploaded files" +msgstr "Uppladdade filer" + +#: themes/default/templates/partial/index.js.ep:30 +msgid "Websocket communication error" +msgstr "Kommunikationsfel (websocket)" + +#: themes/default/templates/about.html.ep:3 +msgid "What is Lufi?" +msgstr "Vad Ă€r Lufi?" + +#: themes/default/templates/about.html.ep:14 +msgid "Who wrote this software?" +msgstr "Vem skrev den hĂ€r mjukvaran?" + +#: themes/default/templates/partial/index.js.ep:13 +msgid "XXX file has been added to upload queue." +msgstr "Filen XXX har lagts till i uppladdningskön." + +#: themes/default/templates/invitations/invite.html.ep:30 +msgid "You can invite someone to send you files through this Lufi instance even if they don’t have an account on it." +msgstr "" + +#: 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." +msgstr "" +"Du kan se en lista över dina filer genom att klicka pĂ„ lĂ€nken ”Mina filer” " +"lĂ€ngst upp till höger pĂ„ den hĂ€r sidan." + +#: lib/Lufi/Controller/Mail.pm:42 +msgid "You can't add URLs that are not related to this instance." +msgstr "Du kan inte lĂ€gga in lĂ€nkar som inte gĂ„r till den hĂ€r instansen." + +#: themes/default/templates/about.html.ep:8 +msgid "You don't need to register yourself to upload files but be aware that, for legal reasons, your IP address will be stored when you send a file. Don't panic, this is normally the case for all sites on which you send files." +msgstr "" + +#: themes/default/templates/partial/render.js.ep:10 +msgid "You don't seem to have a key in your URL. You won't be able to decrypt the file. Download canceled." +msgstr "" + +#: themes/default/templates/partial/render.js.ep:7 +msgid "You have attempted to leave this page. The download will be canceled. Are you sure?" +msgstr "" + +#: themes/default/templates/partial/index.js.ep:14 +msgid "You have attempted to leave this page. The upload will be canceled. Are you sure?" +msgstr "" + +#: themes/default/templates/logout.html.ep:14 +msgid "You have been successfully logged out." +msgstr "Du har loggats ut." + +#: lib/Lufi/Controller/Mail.pm:71 +msgid "You must give email addresses." +msgstr "Du mĂ„ste uppge en e-postadress." + +#: themes/default/templates/index.html.ep:38 +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 "" + +#. (format_bytes($json->{size}) +#: lib/Lufi/Controller/Files.pm:95 +msgid "Your file is too big: %1 (maximum size allowed: %2)" +msgstr "" + +#: lib/Lufi/Controller/Files.pm:351 +msgid "Your password is not valid. Please refresh the page to retry." +msgstr "" + +#: themes/default/templates/partial/render.js.ep:12 +msgid "Zip content:" +msgstr "" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:20 +msgid "between %1 and %2, the file will be kept %3 day(s)." +msgstr "" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:22 +msgid "between %1 and %2, the file will be kept forever." +msgstr "" + +#: themes/default/templates/partial/mail.js.ep:42 +msgid "deadline: " +msgstr "" + +#: themes/default/templates/partial/invitations.js.ep:5 +msgid "expires on XXX" +msgstr "GĂ„r ut den XXX" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:26 +msgid "for %1 and more, the file will be kept %2 day(s)" +msgstr "" + +#. (format_bytes($keys[$i]) +#: themes/default/templates/delays.html.ep:28 +msgid "for %1 and more, the file will be kept forever." +msgstr "" + +#: themes/default/templates/index.html.ep:3 +msgid "no time limit" +msgstr "ingen tidsbegrĂ€nsning" + +#: themes/default/templates/index.html.ep:124 +msgid "or" +msgstr "eller" + +#. ($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), som gĂ„r ut den %3" + +#: themes/default/templates/about.html.ep:18 +msgid "Get the source code on the official repository or on its Github mirror" +msgstr "" +"HĂ€mta kĂ€llkoden frĂ„n det officiella arkivet eller frĂ„n spegelsidan pĂ„ Github" + +#: themes/default/templates/about.html.ep:17 +msgid "As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure." +msgstr "" +"Du kan installera Lufi pĂ„ din egen server eftersom det Ă€r en fri mjukvara " +"publicerad under licensen AGPLv3. Ta en titt pĂ„ wikin för att " +"se hur." diff --git a/themes/default/public/css/lufi.css b/themes/default/public/css/lufi.css index 2a6e250..477ffd9 100644 --- a/themes/default/public/css/lufi.css +++ b/themes/default/public/css/lufi.css @@ -1,3 +1,6 @@ +body { + background-color: #ffffff; +} #files { border: 2px dashed #BBB; border-radius: 5px; diff --git a/themes/default/public/js/lufi-down.js b/themes/default/public/js/lufi-down.js index 4108df9..54d0c87 100644 --- a/themes/default/public/js/lufi-down.js +++ b/themes/default/public/js/lufi-down.js @@ -95,6 +95,7 @@ function spawnWebsocket(pa) { if (data.part + 1 === data.total) { var blob = new Blob(a, {type: data.type}); + notify(i18n.fileDownloaded, data.name); $('#please-wait').remove(); $('#loading').remove(); diff --git a/themes/default/public/js/lufi-notifications.js b/themes/default/public/js/lufi-notifications.js new file mode 100644 index 0000000..d198df6 --- /dev/null +++ b/themes/default/public/js/lufi-notifications.js @@ -0,0 +1,26 @@ +function notify(title, body) { + if (!Notification) { + console.log("This browser does not support desktop notification, cannot send following message: "+title+" "+body); + return; + } + + if (Notification.permission !== "granted") { + Notification.requestPermission(); + } else { + let options = { + body: body, + icon: '/img/lufi196.png' + }; + let n = new Notification(title, options); + } +} + +document.addEventListener('DOMContentLoaded', function () { + if (!Notification) { + return; + } + + if (Notification.permission !== "granted") { + Notification.requestPermission(); + } +}); diff --git a/themes/default/public/js/lufi-up.js b/themes/default/public/js/lufi-up.js index e7ae260..8776fde 100644 --- a/themes/default/public/js/lufi-up.js +++ b/themes/default/public/js/lufi-up.js @@ -477,6 +477,8 @@ function updateProgressBar(data) { console.log('Error on WebSocket connection but file has been fully send, so we don\'t care.'); } + notify(i18n.fileUploaded, data.name); + $('#parts-'+window.fc).remove(); var n = $('#name-'+window.fc); var s = $('#size-'+window.fc); diff --git a/themes/default/templates/about.html.ep b/themes/default/templates/about.html.ep index 7d172d0..bf491d5 100644 --- a/themes/default/templates/about.html.ep +++ b/themes/default/templates/about.html.ep @@ -14,8 +14,11 @@

<%= l('Who wrote this software?') %>

<%== l('The original (and only for now) author is Luc Didry.') %>

<%= l('How to install the software on my server?') %>

-

<%== l('As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure.') %>
- <%== l('Get the source code on the official repository or on its Github mirror') %> +

<%== l('As Lufi is a free software licensed under of the terms of the AGPLv3, you can install it on you own server. Have a look on the Wiki for the procedure.') %>
+ <%== l('Get the source code on the official repository or on its Github mirror') %>

+

<%= l('Version') %>

+

<%== l('Latest tag of this instance: %1', sprintf('%s', stash('version')->{tag}, stash('version')->{tag})) %>

+

<%== l('Latest commit of this instance: %1', sprintf('%s', stash('version')->{commit}, stash('version')->{commit})) %>

<%= link_to url_for('/') => ( class => "btn waves-effect waves-light cyan" ) => begin %><%= l('Back to homepage') %><% end%>

diff --git a/themes/default/templates/index.html.ep b/themes/default/templates/index.html.ep index 9f498c2..6409f78 100644 --- a/themes/default/templates/index.html.ep +++ b/themes/default/templates/index.html.ep @@ -165,5 +165,6 @@ %= javascript '/js/moment-with-locales.min.js' %= javascript '/js/filesize.min.js' %= javascript '/js/jszip.min.js' +%= javascript '/js/lufi-notifications.js' %= javascript '/js/lufi-up.js' % } diff --git a/themes/default/templates/partial/index.js.ep b/themes/default/templates/partial/index.js.ep index 6fc6d76..241d371 100644 --- a/themes/default/templates/partial/index.js.ep +++ b/themes/default/templates/partial/index.js.ep @@ -10,24 +10,25 @@ var baseURL = '<%= url_for('/')->to_abs() %>'; % } var actionURL = '<%= url_for('/')->to_abs() %>'; 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?') %>', - copyAll: '<%= l('Copy all links to clipboard') %>', - copySuccess: '<%= l('The link(s) has been copied to your clipboard') %>', - copyFail: '<%= l('Unable to copy the link(s) to your clipboard') %>', - cpText: '<%= l('Copy to clipboard') %>', - delText: '<%= l('Deletion link') %>', - dlText: '<%= l('Download link') %>', - download: '<%= l('Download') %>', - encrypting: '<%= l('Encrypting part XX1 of XX2') %>', - expiration: '<%= l('Expiration:') %>', - hit: '<%= l('Hit Enter, then Ctrl+C to copy the download link') %>', - hits: '<%= l('Hit Enter, then Ctrl+C to copy all the download links') %>', - mailTo: '<%= l('Send all links by email') %>', - maxSize: '<%= l('(max size: XXX)') %>', - noLimit: '<%= l('No expiration delay') %>', - sending: '<%= l('Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move.') %>', - wsProblem: '<%= l('Websocket communication error') %>', + 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?') %>', + copyAll: '<%= l('Copy all links to clipboard') %>', + copySuccess: '<%= l('The link(s) has been copied to your clipboard') %>', + copyFail: '<%= l('Unable to copy the link(s) to your clipboard') %>', + cpText: '<%= l('Copy to clipboard') %>', + delText: '<%= l('Deletion link') %>', + dlText: '<%= l('Download link') %>', + download: '<%= l('Download') %>', + encrypting: '<%= l('Encrypting part XX1 of XX2') %>', + expiration: '<%= l('Expiration:') %>', + fileUploaded: '<%= l('File uploaded') %>', + hit: '<%= l('Hit Enter, then Ctrl+C to copy the download link') %>', + hits: '<%= l('Hit Enter, then Ctrl+C to copy all the download links') %>', + mailTo: '<%= l('Send all links by email') %>', + maxSize: '<%= l('(max size: XXX)') %>', + noLimit: '<%= l('No expiration delay') %>', + sending: '<%= l('Sending part XX1 of XX2. Please, be patient, the progress bar can take a while to move.') %>', + wsProblem: '<%= l('Websocket communication error') %>', }; var maxSize = <%= config('max_file_size') || 0 %>; diff --git a/themes/default/templates/partial/render.js.ep b/themes/default/templates/partial/render.js.ep index 174438a..4ca1131 100644 --- a/themes/default/templates/partial/render.js.ep +++ b/themes/default/templates/partial/render.js.ep @@ -6,6 +6,7 @@ var i18n = { 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?') %>', download: '<%= l('Get the file') %>', + fileDownloaded: '<%= l('File downloaded') %>', 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.') %>', showZipContent: '<%= l('Show zip content') %>', diff --git a/themes/default/templates/render.html.ep b/themes/default/templates/render.html.ep index 4c06596..9deb809 100644 --- a/themes/default/templates/render.html.ep +++ b/themes/default/templates/render.html.ep @@ -45,6 +45,7 @@ %= javascript '/js/filesize.min.js' %= javascript '/js/sjcl.js' %= javascript '/js/jszip.min.js' +%= javascript '/js/lufi-notifications.js' %= javascript '/js/lufi-down.js' % } % } diff --git a/utilities/migrations/mysql.sql b/utilities/migrations/mysql.sql index e9a8ebb..31a3237 100644 --- a/utilities/migrations/mysql.sql +++ b/utilities/migrations/mysql.sql @@ -51,3 +51,7 @@ DROP TABLE invitations; ALTER TABLE files MODIFY filesize bigint; -- 4 down ALTER TABLE files MODIFY filesize integer; +-- 5 up +ALTER TABLE slices MODIFY path varchar(255); +-- 5 down +ALTER TABLE slices MODIFY path varchar(255) unique NOT NULL; diff --git a/utilities/migrations/pg.sql b/utilities/migrations/pg.sql index 28c8c03..8083c23 100644 --- a/utilities/migrations/pg.sql +++ b/utilities/migrations/pg.sql @@ -54,3 +54,9 @@ DROP TABLE invitations; ALTER TABLE files ALTER COLUMN filesize TYPE bigint; -- 5 down ALTER TABLE files ALTER COLUMN filesize TYPE integer; +-- 6 up +ALTER TABLE slices ALTER COLUMN path DROP NOT NULL; +ALTER TABLE slices DROP CONSTRAINT slices_path_key; +-- 6 down +ALTER TABLE slices ADD CONSTRAINT slices_path_key UNIQUE (path) ; +ALTER TABLE slices ALTER COLUMN path SET NOT NULL; diff --git a/zanata.xml b/zanata.xml deleted file mode 100644 index 705e60f..0000000 --- a/zanata.xml +++ /dev/null @@ -1,8 +0,0 @@ - - - https://trad.framasoft.org/ - lufi - gettext - themes/default/lib/Lufi/I18N/ - themes/default/lib/Lufi/I18N/ -