Use .po files for i18n + add spanish translation

This commit is contained in:
Luc Didry
2015-08-02 00:54:26 +02:00
parent f1c096fd68
commit 339cdf39b2
18 changed files with 1265 additions and 286 deletions

8
.tx/config Normal file
View File

@@ -0,0 +1,8 @@
[main]
host = https://www.transifex.com
[lutim.enpo]
source_file = lib/Lutim/I18N/en.po
source_lang = en
type = PO
file_filter = lib/Lutim/I18N/<lang>.po

View File

@@ -1,5 +1,9 @@
Revision history for Lutim
0.7 2015-08-02
- Use .po files for internationalization
- Add spanish translation (thx to Laura Arjona Reina)
0.6 2014-10-03
- Add OpenGraph tags in social page (ex-twitter page)
- Update README.md

12
Makefile Normal file
View File

@@ -0,0 +1,12 @@
EXTRACTFILES=utilities/locales_files.txt
EN=lib/Lutim/I18N/en.po
XGETTEXT=carton exec local/bin/xgettext.pl
CARTON=carton exec
LUTIM=script/lutim
locales:
$(XGETTEXT) -f $(EXTRACTFILES) -o $(EN)
tx push -s
dev:
$(CARTON) morbo $(LUTIM) --listen http://0.0.0.0:3000

View File

@@ -278,16 +278,11 @@ And restart Shutter if it was running.
Of course, this plugin is configured for the official instance of Lutim (<http://lut.im>), feel free to edit it for your own instance.
## Internationalization
Lutim comes with English and French languages. It will choose the language to display from the browser's settings.
Lutim comes with English, French and Spanish languages. It will choose the language to display from the browser's settings.
If you want to add more languages, for example German:
```shell
cd lib/Lutim/I18N
cp en.pm de.pm
vim de.pm
```
There is a [project on Transifex](https://www.transifex.com/projects/p/lutim/) if you want to help translating Lutim. There is also the `templates/manifest.webapp.ep` file which contains multiple languages sentences.
There's just a few sentences, so it will be quick to translate. Please consider to send me you language file in order to help the other users :smile:.
Thank you :smile:
## Others projects dependancies
Lutim is written in Perl with the [Mojolicious](http://mojolicio.us) framework, uses the [Twitter bootstrap](http://getbootstrap.com) framework to look not too ugly, [JQuery](http://jquery.com) and [JQuery File Uploader](https://github.com/danielm/uploader/) (slightly modified) to add some modernity, [Raphaël](http://raphaeljs.com/) and [morris.js](http://www.oesmith.co.uk/morris.js/) for stats graphs and [freezeframe.js](http://freezeframe.chrisantonellis.com/) (slightly modified) to be able to freeze animated gifs in twitter card.
@@ -303,3 +298,4 @@ Licenses for the icons fonts are in `public/font/LICENSE.txt`.
* Jean-Christophe Bach (<https://github.com/jcb>)
* Florian Bigard, aka Chocobozzz (<https://github.com/Chocobozzz>)
* Sandro CAZZANIGA, aka Kharec (<http://sandrocazzaniga.fr>), [@Kharec](https://twitter.com/Kharec)
* Laura Arjona Reina (<https://wiki.debian.org/LauraArjona>), spanish translation

View File

@@ -53,7 +53,7 @@ sub startup {
unless ( -f $path && -r _ ) {
$c->app->log->error("Cannot read file [$path]. error [$!]");
$c->flash(
msg => $c->l('image_not_found')
msg => $c->l('Unable to find the image: it has been deleted.')
);
return 500;
}
@@ -146,7 +146,7 @@ sub startup {
if (-f 'stop-upload' || -f 'stop-upload.manual') {
$c->stash(
stop_upload => $c->l('stop_upload', $config->{contact})
stop_upload => $c->l('Uploading is currently disabled, please try later or contact the administrator (%1).', $config->{contact})
);
return 1;
}

View File

@@ -70,7 +70,7 @@ sub modify {
my $image = $images[0];
my $msg;
if ($image->mod_token() ne $token || $token eq '') {
$msg = $c->l('invalid_token');
$msg = $c->l('The delete token is invalid.');
} else {
$c->app->log->info('[MODIFICATION] someone modify '.$image->filename.' with token method (path: '.$image->path.')');
@@ -78,7 +78,7 @@ sub modify {
delete_at_day => ($c->param('delete-day') && $c->param('delete-day') <= $c->max_delay) ? $c->param('delete-day') : $c->max_delay,
delete_at_first_view => ($c->param('first-view')) ? 1 : 0,
);
$msg = $c->l('image_delay_modified');
$msg = $c->l('The image\'s delay has been successfully modified');
if (defined($c->param('format')) && $c->param('format') eq 'json') {
return $c->render(
json => {
@@ -112,7 +112,7 @@ sub modify {
$c->app->log->info('[UNSUCCESSFUL] someone tried to modify '.$short.' but it does\'nt exist.');
# Image never existed
my $msg = $c->l('image_mod_not_found', $short);
my $msg = $c->l('Unable to find the image %1.', $short);
if (defined($c->param('format')) && $c->param('format') eq 'json') {
return $c->render(
json => {
@@ -139,15 +139,15 @@ sub delete {
my $image = $images[0];
my $msg;
if ($image->mod_token() ne $token || $token eq '') {
$msg = $c->l('invalid_token');
$msg = $c->l('The delete token is invalid.');
} elsif ($image->enabled() == 0) {
$msg = $c->l('already_deleted', $image->filename);
$msg = $c->l('The image %1 has already been deleted.', $image->filename);
} else {
$c->app->log->info('[DELETION] someone made '.$image->filename.' removed with token method (path: '.$image->path.')');
$c->delete_image($image);
$c->flash(
success => $c->l('image_deleted', $image->filename)
success => $c->l('The image %1 has been successfully deleted', $image->filename)
);
return $c->redirect_to('/');
}
@@ -191,7 +191,7 @@ sub add {
);
$c->app->{wait_for_it}->{$ip} = time;
} elsif ($tx->res->is_limit_exceeded) {
my $msg = $c->l('file_too_big', $tx->res->max_message_size);
my $msg = $c->l('The file exceed the size limit (%1)', $tx->res->max_message_size);
if (defined($c->param('format')) && $c->param('format') eq 'json') {
return $c->render(
json => {
@@ -208,7 +208,7 @@ sub add {
return $c->redirect_to('/');
}
} else {
my $msg = $c->l('download_error');
my $msg = $c->l('An error occured while downloading the image.');
$c->app->log->warn('[DOWNLOAD ERROR]'.$c->dumper($tx->error));
if (defined($c->param('format')) && $c->param('format') eq 'json') {
return $c->render(
@@ -227,7 +227,7 @@ sub add {
}
}
} else {
my $msg = $c->l('no_valid_url');
my $msg = $c->l('The URL is not valid.');
if (defined($c->param('format')) && $c->param('format') eq 'json') {
return $c->render(
json => {
@@ -258,7 +258,7 @@ sub add {
mkdir('files', 0700) unless (-d 'files');
if ($c->req->is_limit_exceeded) {
$msg = $c->l('file_too_big', $c->req->max_message_size);
$msg = $c->l('The file exceed the size limit (%1)', $c->req->max_message_size);
if (defined($c->param('format')) && $c->param('format') eq 'json') {
return $c->render(
json => {
@@ -325,12 +325,12 @@ sub add {
$short .= '/'.$key if (defined($key));
} else {
# Houston, we have a problem
$msg = $c->l('no_more_short', $c->config->{contact});
$msg = $c->l('There is no more available URL. Retry or contact the administrator. %1', $c->config->{contact});
}
}
LutimModel->commit;
} else {
$msg = $c->l('no_valid_file', $upload->filename);
$msg = $c->l('The file %1 is not an image.', $upload->filename);
}
if (defined($c->param('format')) && $c->param('format') eq 'json') {
@@ -409,7 +409,7 @@ sub short {
# Warn user
$c->flash(
msg => $c->l('image_not_found')
msg => $c->l('Unable to find the image: it has been deleted.')
);
return $c->redirect_to('/');
}
@@ -455,7 +455,7 @@ sub short {
$c->delete_image($images[0]);
$c->flash(
msg => $c->l('image_not_found')
msg => $c->l('Unable to find the image: it has been deleted.')
);
return $c->redirect_to('/');
} else {
@@ -499,7 +499,7 @@ sub short {
# Warn user
$c->flash(
msg => $c->l('image_not_found')
msg => $c->l('Unable to find the image: it has been deleted.')
);
return $c->redirect_to('/');
} else {

12
lib/Lutim/I18N.pm Normal file
View File

@@ -0,0 +1,12 @@
package Lutim::I18N;
use base 'Locale::Maketext';
use File::Basename qw/dirname/;
use Locale::Maketext::Lexicon {
_auto => 1,
_decode => 1,
_style => 'gettext',
'*' => [Gettext => dirname(__FILE__) . '/I18N/*.po']
};
1;

View File

@@ -1,97 +0,0 @@
package Lutim::I18N::en;
use Mojo::Base 'Lutim::I18N';
my $inf_body = <<EOF;
<h4>What is Lutim?</h4>
<p>Lutim is a free (as in free beer) and anonymous image hosting service. It's also the name of the free (as in free speech) software which provides this service.</p>
<p>The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed.</p>
<h4>How does it work?</h4>
<p>Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you three URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want.</p>
<p>You can, optionally, request that the image(s) posted on Lutim to be deleted at first view (or download) or after the delay selected from those proposed.</p>
<h4>Is it really free (as in free beer)?</h4>
<p>Yes, it is! On the other side, if you want to support the developer, you can do it via <a href="https://flattr.com/submit/auto?user_id=_SKy_&amp;url=[_1]&amp;title=Lutim&amp;category=software">Flattr</a> or with <a href="bitcoin:1K3n4MXNRSMHk28oTfXEvDunWFthePvd8v?label=lutim">BitCoin</a>.</p>
<h4>Is it really anonymous?</h4>
<p>Yes, it is! On the other side, for legal reasons, your IP address will be stored when you send an image. Don't panic, it is normally the case of all sites on which you send files!</p>
<p>The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year).</p>
<p>If the files are deleted if you ask it while posting it, their SHA512 footprint are retained.</p>
<h4>Who owns rights on images uploaded on Lutim?</h4>
<p>Only the uploader! (well, only if he's the only owner of the images' rights before the upload)</p>
<p>Unlike many image sharing services, you don't give rights on uploaded images.</p>
<h4>How to report an image?</h4>
<p>Please contact the administrator: [_2]</p>
<h4>How do you pronounce Lutim?</h4>
<p>Juste like you pronounce the French word <a href="https://fr.wikipedia.org/wiki/Lutin">lutin</a> (/ly.tɛ̃/).</p>
<h4>What about the software which provides the service?</h4>
<p>The Lutim software is a <a href="http://en.wikipedia.org/wiki/Free_software">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL</a> to see what you can do.</p>
<p>For more details, see the <a href="https://github.com/ldidry/lutim">Github</a> page of the project.</p>
<h4>Main developers</h4>
<ul>
<li>Luc Didry, aka Sky (<a href="http://www.fiat-tux.fr">http://www.fiat-tux.fr</a>), core developer, \@framasky on <a href="https://twitter.com/framasky">Twitter</a>, or on <a href="https://framasphere.org/public/framasky">Diaspora*</a></li>
<li>Dattaz (<a href="http://dattaz.fr">http://dattaz.fr</a>), webapp developer, <a href="https://twitter.com/dat_taz">\@dat_taz</a></li>
</ul>
<h4>Contributors</h4>
<ul>
<li>Jean-Bernard Marcon, aka Goofy (<a href="https://github.com/goofy-bz">https://github.com/goofy-bz</a>)</li>
<li>Jean-Christophe Bach (<a href="https://github.com/jcb">https://github.com/jcb</a>)</li>
<li>Florian Bigard, aka Chocobozzz (<a href="https://github.com/Chocobozzz">https://github.com/Chocobozzz</a>)</li>
<li>Sandro CAZZANIGA, aka Kharec (<a href="http://sandrocazzaniga.fr">http://sandrocazzaniga.fr</a>), <a href="https://twitter.com/Kharec">\@Kharec</a></li>
</ul>
EOF
our %Lexicon = (
'homepage' => 'Homepage',
'license' => 'License:',
'fork-me' => 'Fork me on Github !',
'share-twitter' => 'Share on Twitter',
'informations' => 'Informations',
'informations-body' => $inf_body,
'view-link' => 'View link',
'download-link' => 'Download link',
'share-link' => 'Link for share on social networks',
'tweet_it' => 'Tweet it!',
'share_it' => 'Share it!',
'delete-link' => 'Deletion link',
'some-bad' => 'Something bad happened',
'delete-first' => 'Delete at first view?',
'delete-day' => 'Delete after 24 hours?',
'upload_image' => 'Send an image',
'image-only' => 'Only images are allowed',
'go' => 'Let\'s go!',
'drag-n-drop' => 'Drag & drop images here',
'or' => '-or-',
'file-browser' => 'Click to open the file browser',
'image_not_found' => 'Unable to find the image: it has been deleted.',
'no_more_short' => 'There is no more available URL. Retry or contact the administrator. [_1]',
'no_valid_file' => 'The file [_1] is not an image.',
'file_too_big' => 'The file exceed the size limit ([_1])',
'no_time_limit' => 'No time limit',
'24_hours' => '24 hours',
'7_days' => '7 days',
'30_days' => '30 days',
'1_year' => 'One year',
'pushed-images' => ' sent images on this instance from beginning.',
'graph-data-once-a-day' => 'The graph\'s datas are not updated in real-time.',
'lutim-stats' => 'Lutim\'s statistics',
'back-to-index' => 'Back to homepage',
'stop_upload' => 'Uploading is currently disabled, please try later or contact the administrator ([_1]).',
'download_error' => 'An error occured while downloading the image.',
'no_valid_url' => 'The URL is not valid.',
'image_url' => 'Image URL',
'upload_image_url' => 'Upload an image with its URL',
'delay_0' => 'no time limit',
'delay_1' => '24 hours',
'delay_days' => '[_1] days',
'delay_365' => '1 year',
'max_delay' => 'Warning! The maximum time limit for an image is [_1] day(s), even if you choose "no time limit".',
'crypt_image' => 'Encrypt the image (Lutim does not keep the key).',
'always_encrypt' => 'The images are encrypted on the server (Lutim does not keep the key).',
'image_deleted' => 'The image [_1] has been successfully deleted',
'invalid_token' => 'The delete token is invalid.',
'already_deleted' => 'The image [_1] has already been deleted.',
'install_as_webapp' => 'Install webapp',
'image_delay_modified' => 'The image\'s delay has been successfully modified',
'image_mod_not_found' => 'Unable to find the image [_1].',
'modify_image_error' => 'Error while trying to modify the image.',
);
1;

329
lib/Lutim/I18N/en.po Normal file
View File

@@ -0,0 +1,329 @@
# 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 <EMAIL@ADDRESS>, YEAR.
#
#, fuzzy
msgid ""
msgstr ""
"Project-Id-Version: PACKAGE VERSION\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
"Language-Team: LANGUAGE <LL@li.org>\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=CHARSET\n"
"Content-Transfer-Encoding: 8bit\n"
#. ($delay)
#. (config('max_delay')
#: templates/index.html.ep:134 templates/index.html.ep:143 templates/index.html.ep:144 templates/index.html.ep:255 templates/index.html.ep:264 templates/index.html.ep:265 templates/index.html.ep:36 templates/index.html.ep:45 templates/index.html.ep:46 templates/index.html.ep:88 templates/index.html.ep:97 templates/index.html.ep:98
msgid "%1 days"
msgstr ""
#. ($total)
#: templates/stats.html.ep:2
msgid "%1 sent images on this instance from beginning."
msgstr ""
#: templates/index.html.ep:164
msgid "-or-"
msgstr ""
#: templates/index.html.ep:5
msgid "1 year"
msgstr ""
#: templates/index.html.ep:143 templates/index.html.ep:264 templates/index.html.ep:4 templates/index.html.ep:45 templates/index.html.ep:97
msgid "24 hours"
msgstr ""
#: lib/Lutim/Controller.pm:211
msgid "An error occured while downloading the image."
msgstr ""
#: templates/about.html.ep:39 templates/stats.html.ep:13
msgid "Back to homepage"
msgstr ""
#: templates/index.html.ep:167 templates/index.html.ep:168
msgid "Click to open the file browser"
msgstr ""
#: templates/about.html.ep:30
msgid "Contributors"
msgstr ""
#: templates/index.html.ep:109 templates/index.html.ep:155 templates/index.html.ep:273 templates/index.html.ep:57
msgid "Delete at first view?"
msgstr ""
#: templates/index.html.ep:249 templates/index.html.ep:26
msgid "Deletion link"
msgstr ""
#: templates/index.html.ep:24 templates/index.html.ep:245
msgid "Download link"
msgstr ""
#: templates/index.html.ep:163
msgid "Drag & drop images here"
msgstr ""
#: templates/about.html.ep:7
msgid "Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want."
msgstr ""
#: templates/index.html.ep:112 templates/index.html.ep:158 templates/index.html.ep:60
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr ""
#: templates/index.html.ep:230
msgid "Error while trying to modify the image."
msgstr ""
#: templates/stats.html.ep:9
msgid "Evolution of total files"
msgstr ""
#: templates/about.html.ep:24
msgid "For more details, see the <a href=\"https://git.framasoft.org/luc/lutim\">homepage of the project</a>."
msgstr ""
#: templates/layouts/default.html.ep:50
msgid "Fork me!"
msgstr ""
#: templates/layouts/default.html.ep:45
msgid "Homepage"
msgstr ""
#: templates/about.html.ep:20
msgid "How do you pronounce Lutim?"
msgstr ""
#: templates/about.html.ep:6
msgid "How does it work?"
msgstr ""
#: templates/about.html.ep:18
msgid "How to report an image?"
msgstr ""
#: templates/about.html.ep:14
msgid "If the files are deleted if you ask it while posting it, their SHA512 footprint are retained."
msgstr ""
#: templates/index.html.ep:122 templates/index.html.ep:177
msgid "Image URL"
msgstr ""
#: templates/layouts/default.html.ep:49
msgid "Informations"
msgstr ""
#: templates/layouts/default.html.ep:54
msgid "Install webapp"
msgstr ""
#: templates/about.html.ep:11
msgid "Is it really anonymous?"
msgstr ""
#: templates/about.html.ep:9
msgid "Is it really free (as in free beer)?"
msgstr ""
#: templates/about.html.ep:21
msgid "Juste like you pronounce the French word <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr ""
#: templates/index.html.ep:125 templates/index.html.ep:180 templates/index.html.ep:275 templates/index.html.ep:63
msgid "Let's go!"
msgstr ""
#: templates/layouts/default.html.ep:48
msgid "License:"
msgstr ""
#: templates/index.html.ep:247 templates/index.html.ep:25
msgid "Link for share on social networks"
msgstr ""
#: templates/about.html.ep:4
msgid "Lutim is a free (as in free beer) and anonymous image hosting service. It's also the name of the free (as in free speech) software which provides this service."
msgstr ""
#: templates/about.html.ep:25
msgid "Main developers"
msgstr ""
#: templates/index.html.ep:124 templates/index.html.ep:172
msgid "Only images are allowed"
msgstr ""
#: templates/about.html.ep:16
msgid "Only the uploader! (well, only if he's the only owner of the images' rights before the upload)"
msgstr ""
#: templates/about.html.ep:19
msgid "Please contact the administrator: %1"
msgstr ""
#: templates/index.html.ep:117
msgid "Send an image"
msgstr ""
#: templates/index.html.ep:212
msgid "Share it!"
msgstr ""
#: templates/layouts/default.html.ep:51
msgid "Share on Twitter"
msgstr ""
#: templates/index.html.ep:278 templates/index.html.ep:77
msgid "Something bad happened"
msgstr ""
#: templates/about.html.ep:13
msgid "The IP address of the image's sender is retained for a delay which depends of the administrator's choice (for the official instance, which is located in France, it's one year)."
msgstr ""
#: templates/about.html.ep:23
msgid "The Lutim software is a <a href=\"http://en.wikipedia.org/wiki/Free_software\">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> to see what you can do."
msgstr ""
#: lib/Lutim/Controller.pm:230
msgid "The URL is not valid."
msgstr ""
#: lib/Lutim/Controller.pm:142 lib/Lutim/Controller.pm:73
msgid "The delete token is invalid."
msgstr ""
#. ($upload->filename)
#: lib/Lutim/Controller.pm:333
msgid "The file %1 is not an image."
msgstr ""
#. ($max_file_size)
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#: lib/Lutim/Controller.pm:194 lib/Lutim/Controller.pm:261 templates/index.html.ep:308
msgid "The file exceed the size limit (%1)"
msgstr ""
#: templates/stats.html.ep:11
msgid "The graph's datas are not updated in real-time."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller.pm:144
msgid "The image %1 has already been deleted."
msgstr ""
#. ($image->filename)
#: lib/Lutim/Controller.pm:150
msgid "The image %1 has been successfully deleted"
msgstr ""
#: lib/Lutim/Controller.pm:81
msgid "The image's delay has been successfully modified"
msgstr ""
#: templates/index.html.ep:9
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr ""
#: templates/about.html.ep:5
msgid "The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed."
msgstr ""
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:328
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr ""
#: templates/index.html.ep:20 templates/index.html.ep:210
msgid "Tweet it!"
msgstr ""
#. ($short)
#: lib/Lutim/Controller.pm:115
msgid "Unable to find the image %1."
msgstr ""
#: lib/Lutim.pm:56 lib/Lutim/Controller.pm:412 lib/Lutim/Controller.pm:458 lib/Lutim/Controller.pm:502
msgid "Unable to find the image: it has been deleted."
msgstr ""
#: templates/about.html.ep:17
msgid "Unlike many image sharing services, you don't give us rights on uploaded images."
msgstr ""
#: templates/index.html.ep:121 templates/index.html.ep:175
msgid "Upload an image with its URL"
msgstr ""
#: templates/stats.html.ep:6
msgid "Uploaded files by days"
msgstr ""
#. ($config->{contact})
#: lib/Lutim.pm:149
msgid "Uploading is currently disabled, please try later or contact the administrator (%1)."
msgstr ""
#: templates/index.html.ep:23 templates/index.html.ep:243
msgid "View link"
msgstr ""
#: templates/about.html.ep:22
msgid "What about the software which provides the service?"
msgstr ""
#: templates/about.html.ep:3
msgid "What is Lutim?"
msgstr ""
#: templates/about.html.ep:15
msgid "Who owns rights on images uploaded on Lutim?"
msgstr ""
#: templates/about.html.ep:12
msgid "Yes, it is! On the other side, for legal reasons, your IP address will be stored when you send an image. Don't panic, it is normally the case of all sites on which you send files!"
msgstr ""
#. (url_for('index')
#: templates/about.html.ep:10
msgid "Yes, it is! On the other side, if you want to support the developer, you can do it via <a href=\"https://flattr.com/submit/auto?user_id=_SKy_&amp;url=%1&amp;title=Lutim&amp;category=software\">Flattr</a> or with <a href=\"bitcoin:1JCEtmx9pyzWfitMQj2pKAk8GNgyix7RmA?label=lutim\">BitCoin</a>."
msgstr ""
#: templates/about.html.ep:8
msgid "You can, optionally, request that the image(s) posted on Lutim to be deleted at first view (or download) or after the delay selected from those proposed."
msgstr ""
#: templates/about.html.ep:27
msgid "and on"
msgstr ""
#: templates/about.html.ep:27
msgid "core developer"
msgstr ""
#: templates/index.html.ep:3
msgid "no time limit"
msgstr ""
#: templates/about.html.ep:27
msgid "on"
msgstr ""
#: templates/about.html.ep:36
msgid "spanish translation"
msgstr ""
#: templates/about.html.ep:28
msgid "webapp developer"
msgstr ""

383
lib/Lutim/I18N/es.po Normal file
View File

@@ -0,0 +1,383 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Luc Didry <luc@didry.org>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Lutim\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2015-08-01 22:20+0000\n"
"Last-Translator: Luc Didry <luc@didry.org>\n"
"Language-Team: Spanish (http://www.transifex.com/projects/p/lutim/language/es/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: es\n"
"Plural-Forms: nplurals=2; plural=(n != 1);\n"
#. ($delay)
#. (config('max_delay')
#: templates/index.html.ep:134 templates/index.html.ep:143
#: templates/index.html.ep:144 templates/index.html.ep:255
#: templates/index.html.ep:264 templates/index.html.ep:265
#: templates/index.html.ep:36 templates/index.html.ep:45
#: templates/index.html.ep:46 templates/index.html.ep:88
#: templates/index.html.ep:97 templates/index.html.ep:98
msgid "%1 days"
msgstr "%1 días"
#. ($total)
#: templates/stats.html.ep:2
msgid "%1 sent images on this instance from beginning."
msgstr "%1 imágenes enviadas a esta instancia desde el inicio."
#: templates/index.html.ep:164
msgid "-or-"
msgstr "-o-"
#: templates/index.html.ep:5
msgid "1 year"
msgstr "1 año"
#: templates/index.html.ep:143 templates/index.html.ep:264
#: templates/index.html.ep:4 templates/index.html.ep:45
#: templates/index.html.ep:97
msgid "24 hours"
msgstr "24 horas"
#: lib/Lutim/Controller.pm:211
msgid "An error occured while downloading the image."
msgstr "Ha ocurrido un error al descargar la imagen."
#: templates/about.html.ep:39 templates/stats.html.ep:13
msgid "Back to homepage"
msgstr "Volver a la página inicial"
#: templates/index.html.ep:167 templates/index.html.ep:168
msgid "Click to open the file browser"
msgstr "Clic para abrir el explorador de archivos"
#: templates/about.html.ep:30
msgid "Contributors"
msgstr "Contribuidores"
#: templates/index.html.ep:109 templates/index.html.ep:155
#: templates/index.html.ep:273 templates/index.html.ep:57
msgid "Delete at first view?"
msgstr "¿Borrar en la primera vista?"
#: templates/index.html.ep:249 templates/index.html.ep:26
msgid "Deletion link"
msgstr "Enlace para borrar"
#: templates/index.html.ep:24 templates/index.html.ep:245
msgid "Download link"
msgstr "Enlace de descarga"
#: templates/index.html.ep:163
msgid "Drag & drop images here"
msgstr "Arrastre y suelte imágenes aquí"
#: templates/about.html.ep:7
msgid ""
"Drag and drop an image in the appropriate area or use the traditional way to"
" send files and Lutim will provide you four URLs. One to view the image, an "
"other to directly download it, one you can use on social networks and a last"
" to delete the image when you want."
msgstr "Arrastre y suelte una imagen en el área apropiada, o use el método tradicional para enviar ficheros, y Lutim proporcionará cuatro URL. Una para ver la imagen, otra para descargarla directamente, una que upede usar en redes sociales, y una última para borrar la imagen cuando lo desee."
#: templates/index.html.ep:112 templates/index.html.ep:158
#: templates/index.html.ep:60
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Cifrar la imagen (Lutim no guarda la clave)."
#: templates/index.html.ep:230
msgid "Error while trying to modify the image."
msgstr "Error al intentar modificar la imagen."
#: templates/stats.html.ep:9
msgid "Evolution of total files"
msgstr "Evolución de archivos en total"
#: templates/about.html.ep:24
msgid ""
"For more details, see the <a "
"href=\"https://git.framasoft.org/luc/lutim\">homepage of the project</a>."
msgstr "Para más detalles, vea la <a href=\"https://git.framasoft.org/luc/lutim\">página del proyecto</a>."
#: templates/layouts/default.html.ep:50
msgid "Fork me!"
msgstr "Clóname !"
#: templates/layouts/default.html.ep:45
msgid "Homepage"
msgstr "Página inicial"
#: templates/about.html.ep:20
msgid "How do you pronounce Lutim?"
msgstr "¿Cómo se pronuncia Lutim?"
#: templates/about.html.ep:6
msgid "How does it work?"
msgstr "¿Cómo funciona?"
#: templates/about.html.ep:18
msgid "How to report an image?"
msgstr "¿Cómo informar sobre una imagen?"
#: templates/about.html.ep:14
msgid ""
"If the files are deleted if you ask it while posting it, their SHA512 "
"footprint are retained."
msgstr "Si los ficheros se borran por haberlo solicitado al enviarlos, se retiene su huella digital SHA512."
#: templates/index.html.ep:122 templates/index.html.ep:177
msgid "Image URL"
msgstr "URL de la imagen"
#: templates/layouts/default.html.ep:49
msgid "Informations"
msgstr "Informaciones"
#: templates/layouts/default.html.ep:54
msgid "Install webapp"
msgstr "Instalar webapp"
#: templates/about.html.ep:11
msgid "Is it really anonymous?"
msgstr "¿Es realmente anónimo?"
#: templates/about.html.ep:9
msgid "Is it really free (as in free beer)?"
msgstr "¿Es realmente gratis?"
#: templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a "
"href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr "Tal y como se pronuncia la palabra francesa <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
#: templates/index.html.ep:125 templates/index.html.ep:180
#: templates/index.html.ep:275 templates/index.html.ep:63
msgid "Let's go!"
msgstr "¡Vamos allá!"
#: templates/layouts/default.html.ep:48
msgid "License:"
msgstr "Licencia:"
#: templates/index.html.ep:247 templates/index.html.ep:25
msgid "Link for share on social networks"
msgstr "Enlace para compartir en redes sociales"
#: templates/about.html.ep:4
msgid ""
"Lutim is a free (as in free beer) and anonymous image hosting service. It's "
"also the name of the free (as in free speech) software which provides this "
"service."
msgstr "Lutim es un servicio de alojamiento de imágenes anónimo y gratuito. También es el nombre del software libre que proporciona este servicio."
#: templates/about.html.ep:25
msgid "Main developers"
msgstr "Desarrolladores principales"
#: templates/index.html.ep:124 templates/index.html.ep:172
msgid "Only images are allowed"
msgstr "Sólo se admiten imágenes"
#: templates/about.html.ep:16
msgid ""
"Only the uploader! (well, only if he's the only owner of the images' rights "
"before the upload)"
msgstr "¡Sólo el usuario! (bueno, sólo si él/ela es el único titular de los derechos de las imágenes antes de subirlas)"
#: templates/about.html.ep:19
msgid "Please contact the administrator: %1"
msgstr "Por favor, contacte con el administrador: %1"
#: templates/index.html.ep:117
msgid "Send an image"
msgstr "Enviar una imagen"
#: templates/index.html.ep:212
msgid "Share it!"
msgstr "¡Compártelo!"
#: templates/layouts/default.html.ep:51
msgid "Share on Twitter"
msgstr "Compartir en Twitter"
#: templates/index.html.ep:278 templates/index.html.ep:77
msgid "Something bad happened"
msgstr "Algo malo ha pasado"
#: templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
"of the administrator's choice (for the official instance, which is located "
"in France, it's one year)."
msgstr "La dirección IP del remitente de la imagen se retiene durante un tiempo, que depende de lo que elija el administrador (para la instancia oficial, que está localizada en Francia, es un año)."
#: templates/about.html.ep:23
msgid ""
"The Lutim software is a <a "
"href=\"http://en.wikipedia.org/wiki/Free_software\">free software</a>, which"
" allows you to download and install it on you own server. Have a look at the"
" <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> to see what"
" you can do."
msgstr "El software Lutim es <a href=\"http://es.wikipedia.org/wiki/Software_libre\">software libre</a>, lo que le permite descargarlo e instalarlo en su propio servidor. Eche un vistazo a la licencia <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> para ver qué puede hacer."
#: lib/Lutim/Controller.pm:230
msgid "The URL is not valid."
msgstr "La URL no es válida."
#: lib/Lutim/Controller.pm:142 lib/Lutim/Controller.pm:73
msgid "The delete token is invalid."
msgstr "El código de borrado no es válido."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:333
msgid "The file %1 is not an image."
msgstr "El archivo %1 no es una imagen."
#. ($max_file_size)
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#: lib/Lutim/Controller.pm:194 lib/Lutim/Controller.pm:261
#: templates/index.html.ep:308
msgid "The file exceed the size limit (%1)"
msgstr "El archivo supera el límite de tamaño (%1)"
#: templates/stats.html.ep:11
msgid "The graph's datas are not updated in real-time."
msgstr "Los datos del gráfico no se actualizan en tiempo real."
#. ($image->filename)
#: lib/Lutim/Controller.pm:144
msgid "The image %1 has already been deleted."
msgstr "La imagen %1 ya se ha borrado."
#. ($image->filename)
#: lib/Lutim/Controller.pm:150
msgid "The image %1 has been successfully deleted"
msgstr "La imagen %1 se ha borrado correctamente"
#: lib/Lutim/Controller.pm:81
msgid "The image's delay has been successfully modified"
msgstr "Se ha modificado correctamente el tiempo de la imagen"
#: templates/index.html.ep:9
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr "Las imágenes se cifran en el servidor (Lutim no guarda la clave)."
#: templates/about.html.ep:5
msgid ""
"The images you post on Lutim can be stored indefinitely or be deleted at "
"first view or after a delay selected from those proposed."
msgstr "Las imágenes publicadas en Lutim pueden almacenarse indefinidamente o borrarse con la primera vista o tras un tiempo seleccionado de entre varios propuestos."
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:328
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr "No más URL disponibles. Inténtelo de nuevo o contacte con el administrador. %1"
#: templates/index.html.ep:20 templates/index.html.ep:210
msgid "Tweet it!"
msgstr "¡Tuitéalo!"
#. ($short)
#: lib/Lutim/Controller.pm:115
msgid "Unable to find the image %1."
msgstr "No se ha podido encontrar la imagen %1."
#: lib/Lutim.pm:56 lib/Lutim/Controller.pm:412 lib/Lutim/Controller.pm:458
#: lib/Lutim/Controller.pm:502
msgid "Unable to find the image: it has been deleted."
msgstr "No se ha podido encontrar la imagen: ha sido borrada."
#: templates/about.html.ep:17
msgid ""
"Unlike many image sharing services, you don't give us rights on uploaded "
"images."
msgstr "A diferencia de muchos servicios de compartición de imágenes, usted no cede los derechos de las imágenes que sube."
#: templates/index.html.ep:121 templates/index.html.ep:175
msgid "Upload an image with its URL"
msgstr "Subir una imagen con la URL"
#: templates/stats.html.ep:6
msgid "Uploaded files by days"
msgstr "Archivos enviados por día"
#. ($config->{contact})
#: lib/Lutim.pm:149
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
msgstr "La carga está deshabilitada en estos momentos, por favor inténtelo más tarde o contacte con el administrador (%1)."
#: templates/index.html.ep:23 templates/index.html.ep:243
msgid "View link"
msgstr "Enlace de visualización"
#: templates/about.html.ep:22
msgid "What about the software which provides the service?"
msgstr "¿Y qué hay sobre el software que proporciona el servicio?"
#: templates/about.html.ep:3
msgid "What is Lutim?"
msgstr "¿Qué es Lutim?"
#: templates/about.html.ep:15
msgid "Who owns rights on images uploaded on Lutim?"
msgstr "¿Quién posee los derechos de las imágenes que se suben a Lutim?"
#: templates/about.html.ep:12
msgid ""
"Yes, it is! On the other side, for legal reasons, your IP address will be "
"stored when you send an image. Don't panic, it is normally the case of all "
"sites on which you send files!"
msgstr "¡Sí, lo es! Por otro lado, por razones legales, se almacena la dirección IP cuando se envía una imagen. Que no cunda el pánico, ¡es el caso habitual para todos los sitios a los cuales se envían ficheros!"
#. (url_for('index')
#: templates/about.html.ep:10
msgid ""
"Yes, it is! On the other side, if you want to support the developer, you can"
" do it via <a "
"href=\"https://flattr.com/submit/auto?user_id=_SKy_&amp;url=%1&amp;title=Lutim&amp;category=software\">Flattr</a>"
" or with <a "
"href=\"bitcoin:1JCEtmx9pyzWfitMQj2pKAk8GNgyix7RmA?label=lutim\">BitCoin</a>."
msgstr "¡Sí, lo es! Por otro lado, si quiere ayudar a apoyar al desarrollador, puede hacerlo vía <a href=\"https://flattr.com/submit/auto?user_id=_SKy_&amp;url=%1&amp;title=Lutim&amp;category=software\">Flattr</a> o con <a href=\"bitcoin:1JCEtmx9pyzWfitMQj2pKAk8GNgyix7RmA?label=lutim\">BitCoin</a>."
#: templates/about.html.ep:8
msgid ""
"You can, optionally, request that the image(s) posted on Lutim to be deleted"
" at first view (or download) or after the delay selected from those "
"proposed."
msgstr "Puede, opcionalmente, solicitar que la imagen publicada en Lutim se elimine con la primera vista (o descarga) o tras un tiempo seleccionado de entre varios propuestos."
#: templates/about.html.ep:27
msgid "and on"
msgstr "y en"
#: templates/about.html.ep:27
msgid "core developer"
msgstr "desarrollador principal"
#: templates/index.html.ep:3
msgid "no time limit"
msgstr "Sin tiempo límite"
#: templates/about.html.ep:27
msgid "on"
msgstr "en"
#: templates/about.html.ep:36
msgid "spanish translation"
msgstr "traducción al español"
#: templates/about.html.ep:28
msgid "webapp developer"
msgstr "webapp desarrollador"

View File

@@ -1,97 +0,0 @@
package Lutim::I18N::fr;
use Mojo::Base 'Lutim::I18N';
my $inf_body = <<EOF;
<h4>Quest-ce que Lutim ?</h4>
<p>Lutim est un service gratuit et anonyme dhébergement dimages. Il sagit aussi du nom du logiciel (libre) qui fournit ce service.</p>
<p>Les images déposées sur Lutim peuvent être stockées indéfiniment, ou seffacer dès le premier affichage ou au bout du délai choisi parmi ceux proposés.</p>
<h4>Comment ça marche ?</h4>
<p>Faites glisser des images dans la zone prévue à cet effet ou sélectionnez un fichier de façon classique et Lutim vous fournira troie URLs en retour. Une pour afficher limage, une autre pour la télécharger directement, une pour l'utiliser sur les réseaux sociaux et une dernière pour supprimer votre image quand vous le souhaitez.</p>
<p>Vous pouvez, de façon facultative, demander à ce que la ou les images déposées sur Lutim soient supprimées après leur premier affichage (ou téléchargement) ou au bout d'un délai choisi parmi ceux proposés.</p>
<h4>Cest vraiment gratuit ?</h4>
<p>Oui, ça lest ! Par contre, si vous avez envie de soutenir le développeur, vous pouvez faire un microdon avec <a href="https://flattr.com/submit/auto?user_id=_SKy_&amp;url=[_1]&amp;title=Lutim&amp;category=software">Flattr</a> ou en <a href="bitcoin:1K3n4MXNRSMHk28oTfXEvDunWFthePvd8v?label=lutim">BitCoin</a>.</p>
<h4>Cest vraiment anonyme ?</h4>
<p>Oui, ça lest ! Par contre, pour des raisons légales, votre adresse IP sera enregistrée lorsque vous enverrez une image. Ne vous affolez pas, cest de toute façon normalement le cas de tous les sites sur lesquels vous envoyez des fichiers !</p>
<p>LIP de la personne ayant déposé limage est stockée pendant un délai dépendant de l'administrateur de l'instance (pour l'instance officielle, dont le serveur est en France, c'est un délai d'un an).</p>
<p>Si les fichiers sont bien supprimés si vous en avez exprimé le choix, leur empreinte SHA512 est toutefois conservée.</p>
<h4>Qui possède des droits sur les images envoyées sur Lutim ?</h4>
<p>Seulement l'envoyeur ! (enfin, seulement s'il possède des droits exclusifs sur les images avant de les envoyer)</p>
<p>Au contraire de la majorité des services de partages d'image, vous ne cédez aucun droit sur les images envoyées.</p>
<h4>Comment peut-on faire pour signaler une image ?</h4>
<p>Veuillez contacter ladministrateur : [_2]</p>
<h4>Comment doit-on prononcer Lutim ?</h4>
<p>Comme on prononce <a href="https://fr.wikipedia.org/wiki/Lutin">lutin</a> !</p>
<h4>Et à propos du logiciel qui fournit le service ?</h4>
<p>Le logiciel Lutim est un <a href="https://fr.wikipedia.org/wiki/Logiciel_libre">logiciel libre</a>, ce qui vous permet de le télécharger et de linstaller sur votre propre serveur. Jetez un coup dœil à l<a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL</a> pour voir quels sont vos droits.</p>
<p>Pour plus de détails, consultez la page <a href="https://github.com/ldidry/lutim">Github</a> du projet.</p>
<h4>Développeurs de l'application</h4>
<ul>
<li>Luc Didry, aka Sky (<a href="http://www.fiat-tux.fr">http://www.fiat-tux.fr</a>), développeur principal, \@framasky sur <a href="https://twitter.com/framasky">Twitter</a> ou sur <a href="https://framasphere.org/public/framasky">Diaspora*</a></li>
<li>Dattaz (<a href="http://dattaz.fr">http://dattaz.fr</a>), développeur de la webapp, <a href="https://twitter.com/dat_taz">\@dat_taz</a></li>
</ul>
<h4>Contributeurs</h4>
<ul>
<li>Jean-Bernard Marcon, aka Goofy (<a href="https://github.com/goofy-bz">https://github.com/goofy-bz</a>)</li>
<li>Jean-Christophe Bach (<a href="https://github.com/jcb">https://github.com/jcb</a>)</li>
<li>Florian Bigard, aka Chocobozzz (<a href="https://github.com/Chocobozzz">https://github.com/Chocobozzz</a>)</li>
<li>Sandro CAZZANIGA, aka Kharec (<a href="http://sandrocazzaniga.fr">http://sandrocazzaniga.fr</a>), <a href="https://twitter.com/Kharec">\@Kharec</a></li>
</ul>
EOF
our %Lexicon = (
'homepage' => 'Accueil',
'license' => 'Licence :',
'fork-me' => 'Fork me on Github',
'share-twitter' => 'Partager sur Twitter',
'informations' => 'Informations',
'informations-body' => $inf_body,
'view-link' => 'Lien d\'affichage',
'download-link' => 'Lien de téléchargement',
'share-link' => 'Lien pour partager sur les réseaux sociaux',
'tweet_it' => 'Tweetez !',
'share_it' => 'Partagez !',
'delete-link' => 'Lien de suppression',
'some-bad' => 'Un problème est survenu',
'delete-first' => 'Supprimer au premier accès ?',
'delete-day' => 'Supprimer après 24 heures ?',
'upload_image' => 'Envoyez une image',
'image-only' => 'Seules les images sont acceptées',
'go' => 'Allons-y !',
'drag-n-drop' => 'Déposez vos images ici',
'or' => '-ou-',
'file-browser' => 'Cliquez pour utiliser le navigateur de fichier',
'image_not_found' => 'Impossible de trouver l\'image : elle a été supprimée.',
'no_more_short' => 'Il n\'y a plus d\'URL disponible. Veuillez réessayer ou contactez l\'administrateur. [_1].',
'no_valid_file' => 'Le fichier [_1] n\'est pas une image.',
'file_too_big' => 'Le fichier dépasse la limite de taille ([_1])',
'no_time_limit' => 'Pas de limitation de durée',
'24_hours' => '24 heures',
'7_days' => '7 jours',
'30_days' => '30 jours',
'1_year' => 'Un an',
'pushed-images' => ' images envoyées sur cette instance depuis le début.',
'graph-data-once-a-day' => 'Les données du graphique ne sont pas mises à jour en temps réél.',
'lutim-stats' => 'Statistiques de Lutim',
'back-to-index' => 'Retour à la page d\'accueil',
'stop_upload' => 'L\'envoi d\'images est actuellement désactivé, veuillez réessayer plus tard ou contacter l\'administrateur ([_1]).',
'download_error' => 'Une erreur est survenue lors du téléchargement de l\'image.',
'no_valid_url' => 'l\'URL n\'est pas valide.',
'image_url' => 'URL de l\'image',
'upload_image_url' => 'Déposer une image par son URL',
'delay_0' => 'pas de limitation de durée',
'delay_1' => '24 heures',
'delay_days' => '[_1] jours',
'delay_365' => '1 an',
'max_delay' => 'Attention ! Le délai maximal de rétention d\'une image est de [_1] jour(s), même si vous choisissez « pas de limitation de durée ».',
'crypt_image' => 'Chiffrer l\'image (Lutim ne stocke pas la clé).',
'always_encrypt' => 'Les images sont chiffrées sur le serveur (Lutim ne stocke pas la clé).',
'image_deleted' => 'L\'image [_1] a été supprimée avec succès.',
'invalid_token' => 'Le jeton de suppression est invalide.',
'already_deleted' => 'L\'image [_1] a déjà été supprimée.',
'install_as_webapp' => 'Installer la webapp',
'image_delay_modified' => 'Le délai de l\'image a été modifié avec succès.',
'image_mod_not_found' => 'Impossible de trouver l\'image [_1].',
'modify_image_error' => 'Une erreur est survenue lors de la tentative de modification de l\'image.',
);
1;

383
lib/Lutim/I18N/fr.po Normal file
View File

@@ -0,0 +1,383 @@
# SOME DESCRIPTIVE TITLE.
# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER
# This file is distributed under the same license as the PACKAGE package.
#
# Translators:
# Luc Didry <luc@didry.org>, 2015
msgid ""
msgstr ""
"Project-Id-Version: Lutim\n"
"POT-Creation-Date: YEAR-MO-DA HO:MI+ZONE\n"
"PO-Revision-Date: 2015-08-01 22:16+0000\n"
"Last-Translator: Luc Didry <luc@didry.org>\n"
"Language-Team: French (http://www.transifex.com/projects/p/lutim/language/fr/)\n"
"MIME-Version: 1.0\n"
"Content-Type: text/plain; charset=UTF-8\n"
"Content-Transfer-Encoding: 8bit\n"
"Language: fr\n"
"Plural-Forms: nplurals=2; plural=(n > 1);\n"
#. ($delay)
#. (config('max_delay')
#: templates/index.html.ep:134 templates/index.html.ep:143
#: templates/index.html.ep:144 templates/index.html.ep:255
#: templates/index.html.ep:264 templates/index.html.ep:265
#: templates/index.html.ep:36 templates/index.html.ep:45
#: templates/index.html.ep:46 templates/index.html.ep:88
#: templates/index.html.ep:97 templates/index.html.ep:98
msgid "%1 days"
msgstr "%1 jours"
#. ($total)
#: templates/stats.html.ep:2
msgid "%1 sent images on this instance from beginning."
msgstr "%1 images envoyées sur cette instance depuis le début."
#: templates/index.html.ep:164
msgid "-or-"
msgstr "-ou-"
#: templates/index.html.ep:5
msgid "1 year"
msgstr "1 an"
#: templates/index.html.ep:143 templates/index.html.ep:264
#: templates/index.html.ep:4 templates/index.html.ep:45
#: templates/index.html.ep:97
msgid "24 hours"
msgstr "24 heures"
#: lib/Lutim/Controller.pm:211
msgid "An error occured while downloading the image."
msgstr "Une erreur est survenue lors du téléchargement de l'image."
#: templates/about.html.ep:39 templates/stats.html.ep:13
msgid "Back to homepage"
msgstr "Retour à la page d'accueil"
#: templates/index.html.ep:167 templates/index.html.ep:168
msgid "Click to open the file browser"
msgstr "Cliquez pour utiliser le navigateur de fichier"
#: templates/about.html.ep:30
msgid "Contributors"
msgstr "Contributeurs"
#: templates/index.html.ep:109 templates/index.html.ep:155
#: templates/index.html.ep:273 templates/index.html.ep:57
msgid "Delete at first view?"
msgstr "Supprimer au premier accès ?"
#: templates/index.html.ep:249 templates/index.html.ep:26
msgid "Deletion link"
msgstr "Lien de suppression"
#: templates/index.html.ep:24 templates/index.html.ep:245
msgid "Download link"
msgstr "Lien de téléchargement"
#: templates/index.html.ep:163
msgid "Drag & drop images here"
msgstr "Déposez vos images ici"
#: templates/about.html.ep:7
msgid ""
"Drag and drop an image in the appropriate area or use the traditional way to"
" send files and Lutim will provide you four URLs. One to view the image, an "
"other to directly download it, one you can use on social networks and a last"
" to delete the image when you want."
msgstr "Faites glisser des images dans la zone prévue à cet effet ou sélectionnez un fichier de façon classique et Lutim vous fournira quatre URLs en retour. Une pour afficher limage, une autre pour la télécharger directement, une pour l'utiliser sur les réseaux sociaux et une dernière pour supprimer votre image quand vous le souhaitez"
#: templates/index.html.ep:112 templates/index.html.ep:158
#: templates/index.html.ep:60
msgid "Encrypt the image (Lutim does not keep the key)."
msgstr "Chiffrer l'image (Lutim ne stocke pas la clé)."
#: templates/index.html.ep:230
msgid "Error while trying to modify the image."
msgstr "Une erreur est survenue lors de la tentative de modification de l'image."
#: templates/stats.html.ep:9
msgid "Evolution of total files"
msgstr "Évolution du nombre total de fichiers"
#: templates/about.html.ep:24
msgid ""
"For more details, see the <a "
"href=\"https://git.framasoft.org/luc/lutim\">homepage of the project</a>."
msgstr "Pour plus de détails, consultez la page <a href=\"https://git.framasoft.org/luc/lutim\">Github</a> du projet."
#: templates/layouts/default.html.ep:50
msgid "Fork me!"
msgstr "Créez un fork !"
#: templates/layouts/default.html.ep:45
msgid "Homepage"
msgstr "Accueil"
#: templates/about.html.ep:20
msgid "How do you pronounce Lutim?"
msgstr "Comment doit-on prononcer Lutim ?"
#: templates/about.html.ep:6
msgid "How does it work?"
msgstr "Comment ça marche ?"
#: templates/about.html.ep:18
msgid "How to report an image?"
msgstr "Comment peut-on faire pour signaler une image ?"
#: templates/about.html.ep:14
msgid ""
"If the files are deleted if you ask it while posting it, their SHA512 "
"footprint are retained."
msgstr "Si les fichiers sont bien supprimés si vous en avez exprimé le choix, leur empreinte SHA512 est toutefois conservée."
#: templates/index.html.ep:122 templates/index.html.ep:177
msgid "Image URL"
msgstr "URL de l'image"
#: templates/layouts/default.html.ep:49
msgid "Informations"
msgstr "Informations"
#: templates/layouts/default.html.ep:54
msgid "Install webapp"
msgstr "Installer la webapp"
#: templates/about.html.ep:11
msgid "Is it really anonymous?"
msgstr "Cest vraiment anonyme ?"
#: templates/about.html.ep:9
msgid "Is it really free (as in free beer)?"
msgstr "Cest vraiment gratuit ?"
#: templates/about.html.ep:21
msgid ""
"Juste like you pronounce the French word <a "
"href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
msgstr "Comme on prononce <a href=\"https://fr.wikipedia.org/wiki/Lutin\">lutin</a> (/ly.tɛ̃/)."
#: templates/index.html.ep:125 templates/index.html.ep:180
#: templates/index.html.ep:275 templates/index.html.ep:63
msgid "Let's go!"
msgstr "Allons-y !"
#: templates/layouts/default.html.ep:48
msgid "License:"
msgstr "Licence :"
#: templates/index.html.ep:247 templates/index.html.ep:25
msgid "Link for share on social networks"
msgstr "Lien pour partager sur les réseaux sociaux"
#: templates/about.html.ep:4
msgid ""
"Lutim is a free (as in free beer) and anonymous image hosting service. It's "
"also the name of the free (as in free speech) software which provides this "
"service."
msgstr "Lutim est un service gratuit et anonyme dhébergement dimages. Il sagit aussi du nom du logiciel (libre) qui fournit ce service."
#: templates/about.html.ep:25
msgid "Main developers"
msgstr "Développeurs de l'application"
#: templates/index.html.ep:124 templates/index.html.ep:172
msgid "Only images are allowed"
msgstr "Seules les images sont acceptées"
#: templates/about.html.ep:16
msgid ""
"Only the uploader! (well, only if he's the only owner of the images' rights "
"before the upload)"
msgstr "Seulement l'envoyeur ! (enfin, seulement s'il possède des droits exclusifs sur les images avant de les envoyer)"
#: templates/about.html.ep:19
msgid "Please contact the administrator: %1"
msgstr "Veuillez contacter ladministrateur : %1"
#: templates/index.html.ep:117
msgid "Send an image"
msgstr "Envoyer une image"
#: templates/index.html.ep:212
msgid "Share it!"
msgstr "Partagez !"
#: templates/layouts/default.html.ep:51
msgid "Share on Twitter"
msgstr "Partager sur Twitter"
#: templates/index.html.ep:278 templates/index.html.ep:77
msgid "Something bad happened"
msgstr "Un problème est survenu"
#: templates/about.html.ep:13
msgid ""
"The IP address of the image's sender is retained for a delay which depends "
"of the administrator's choice (for the official instance, which is located "
"in France, it's one year)."
msgstr "LIP de la personne ayant déposé limage est stockée pendant un délai dépendant de l'administrateur de l'instance (pour l'instance officielle, dont le serveur est en France, c'est un délai\n d'un an)."
#: templates/about.html.ep:23
msgid ""
"The Lutim software is a <a "
"href=\"http://en.wikipedia.org/wiki/Free_software\">free software</a>, which"
" allows you to download and install it on you own server. Have a look at the"
" <a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> to see what"
" you can do."
msgstr "Le logiciel Lutim est un <a href=\"https://fr.wikipedia.org/wiki/Logiciel_libre\">logiciel libre</a>, ce qui vous permet de le télécharger et de linstaller sur votre propre serveur. Jetez un coup dœil à l<a href=\"https://www.gnu.org/licenses/agpl-3.0.html\">AGPL</a> pour voir quels sont vos droits"
#: lib/Lutim/Controller.pm:230
msgid "The URL is not valid."
msgstr "L'URL n'est pas valide."
#: lib/Lutim/Controller.pm:142 lib/Lutim/Controller.pm:73
msgid "The delete token is invalid."
msgstr "Le jeton de suppression est invalide."
#. ($upload->filename)
#: lib/Lutim/Controller.pm:333
msgid "The file %1 is not an image."
msgstr "Le fichier %1 n'est pas une image."
#. ($max_file_size)
#. ($tx->res->max_message_size)
#. ($c->req->max_message_size)
#: lib/Lutim/Controller.pm:194 lib/Lutim/Controller.pm:261
#: templates/index.html.ep:308
msgid "The file exceed the size limit (%1)"
msgstr "Le fichier dépasse la limite de taille (%1)"
#: templates/stats.html.ep:11
msgid "The graph's datas are not updated in real-time."
msgstr "Les données du graphique ne sont pas mises à jour en temps réél."
#. ($image->filename)
#: lib/Lutim/Controller.pm:144
msgid "The image %1 has already been deleted."
msgstr "L'image %1 a déjà été supprimée."
#. ($image->filename)
#: lib/Lutim/Controller.pm:150
msgid "The image %1 has been successfully deleted"
msgstr "L'image %1 a été supprimée avec succès."
#: lib/Lutim/Controller.pm:81
msgid "The image's delay has been successfully modified"
msgstr "Le délai de l'image a été modifié avec succès."
#: templates/index.html.ep:9
msgid "The images are encrypted on the server (Lutim does not keep the key)."
msgstr "Les images sont chiffrées sur le serveur (Lutim ne stocke pas la clé)."
#: templates/about.html.ep:5
msgid ""
"The images you post on Lutim can be stored indefinitely or be deleted at "
"first view or after a delay selected from those proposed."
msgstr "Les images déposées sur Lutim peuvent être stockées indéfiniment, ou seffacer dès le premier affichage ou au bout du délai choisi parmi ceux proposés."
#. ($c->config->{contact})
#: lib/Lutim/Controller.pm:328
msgid "There is no more available URL. Retry or contact the administrator. %1"
msgstr "Il n'y a plus d'URL disponible. Veuillez réessayer ou contacter l'administrateur. %1."
#: templates/index.html.ep:20 templates/index.html.ep:210
msgid "Tweet it!"
msgstr "Tweetez !"
#. ($short)
#: lib/Lutim/Controller.pm:115
msgid "Unable to find the image %1."
msgstr "Impossible de trouver l'image %1."
#: lib/Lutim.pm:56 lib/Lutim/Controller.pm:412 lib/Lutim/Controller.pm:458
#: lib/Lutim/Controller.pm:502
msgid "Unable to find the image: it has been deleted."
msgstr "Impossible de trouver l'image : elle a été supprimée."
#: templates/about.html.ep:17
msgid ""
"Unlike many image sharing services, you don't give us rights on uploaded "
"images."
msgstr "Au contraire de la majorité des services de partages d'image, vous ne nous cédez aucun droit sur les images envoyées."
#: templates/index.html.ep:121 templates/index.html.ep:175
msgid "Upload an image with its URL"
msgstr "Déposer une image par son URL"
#: templates/stats.html.ep:6
msgid "Uploaded files by days"
msgstr "Fichiers envoyés, par jour"
#. ($config->{contact})
#: lib/Lutim.pm:149
msgid ""
"Uploading is currently disabled, please try later or contact the "
"administrator (%1)."
msgstr "L'envoi d'images est actuellement désactivé, veuillez réessayer plus tard ou contacter l'administrateur (%1)."
#: templates/index.html.ep:23 templates/index.html.ep:243
msgid "View link"
msgstr "Lien d'affichage"
#: templates/about.html.ep:22
msgid "What about the software which provides the service?"
msgstr "Et à propos du logiciel qui fournit le service ?"
#: templates/about.html.ep:3
msgid "What is Lutim?"
msgstr "Quest-ce que Lutim ?"
#: templates/about.html.ep:15
msgid "Who owns rights on images uploaded on Lutim?"
msgstr "Qui possède des droits sur les images envoyées sur Lutim ?"
#: templates/about.html.ep:12
msgid ""
"Yes, it is! On the other side, for legal reasons, your IP address will be "
"stored when you send an image. Don't panic, it is normally the case of all "
"sites on which you send files!"
msgstr "Oui, ça lest ! Par contre, pour des raisons légales, votre adresse IP sera enregistrée lorsque vous enverrez une image. Ne vous affolez pas, cest de toute façon normalement le cas de tous les sites sur lesquels vous envoyez des fichiers !"
#. (url_for('index')
#: templates/about.html.ep:10
msgid ""
"Yes, it is! On the other side, if you want to support the developer, you can"
" do it via <a "
"href=\"https://flattr.com/submit/auto?user_id=_SKy_&amp;url=%1&amp;title=Lutim&amp;category=software\">Flattr</a>"
" or with <a "
"href=\"bitcoin:1JCEtmx9pyzWfitMQj2pKAk8GNgyix7RmA?label=lutim\">BitCoin</a>."
msgstr "Oui, ça lest ! Par contre, si vous avez envie de soutenir le développeur, vous pouvez faire un microdon avec <a href=\"https://flattr.com/submit/auto?user_id=_SKy_&amp;url=%1&amp;title=Lutim&amp;category=software\">Flattr</a> ou en <a href=\"bitcoin:1JCEtmx9pyzWfitMQj2pKAk8GNgyix7RmA?label=lutim\">BitCoin</a>."
#: templates/about.html.ep:8
msgid ""
"You can, optionally, request that the image(s) posted on Lutim to be deleted"
" at first view (or download) or after the delay selected from those "
"proposed."
msgstr "Vous pouvez, de façon facultative, demander à ce que la ou les images déposées sur Lutim soient supprimées après leur premier affichage (ou téléchargement) ou au bout d'un délai choisi parmi ceux proposés."
#: templates/about.html.ep:27
msgid "and on"
msgstr "et sur"
#: templates/about.html.ep:27
msgid "core developer"
msgstr "développeur principal"
#: templates/index.html.ep:3
msgid "no time limit"
msgstr "Pas de limitation de durée"
#: templates/about.html.ep:27
msgid "on"
msgstr "sur"
#: templates/about.html.ep:36
msgid "spanish translation"
msgstr "traduction espagnole"
#: templates/about.html.ep:28
msgid "webapp developer"
msgstr "développeur de la webapp"

View File

@@ -1,5 +1,40 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
<div>
<%==l 'informations-body', url_for('/')->to_abs(), config('contact') %>
<%= link_to url_for('index') => ( class => "btn btn-primary btn-lg" ) => begin %><%=l 'back-to-index' %><% end%>
<h4><%= l('What is Lutim?')%></h4>
<p><%= l('Lutim is a free (as in free beer) and anonymous image hosting service. It\'s also the name of the free (as in free speech) software which provides this service.') %></p>
<p><%= l('The images you post on Lutim can be stored indefinitely or be deleted at first view or after a delay selected from those proposed.') %></p>
<h4><%= l('How does it work?') %></h4>
<p><%= l('Drag and drop an image in the appropriate area or use the traditional way to send files and Lutim will provide you four URLs. One to view the image, an other to directly download it, one you can use on social networks and a last to delete the image when you want.') %></p>
<p><%= l('You can, optionally, request that the image(s) posted on Lutim to be deleted at first view (or download) or after the delay selected from those proposed.') %></p>
<h4><%= l('Is it really free (as in free beer)?') %></h4>
<p><%== l('Yes, it is! On the other side, if you want to support the developer, you can do it via <a href="https://flattr.com/submit/auto?user_id=_SKy_&amp;url=%1&amp;title=Lutim&amp;category=software">Flattr</a> or with <a href="bitcoin:1JCEtmx9pyzWfitMQj2pKAk8GNgyix7RmA?label=lutim">BitCoin</a>.', url_for('index')->to_abs()) %></p>
<h4><%= l('Is it really anonymous?') %></h4>
<p><%= l('Yes, it is! On the other side, for legal reasons, your IP address will be stored when you send an image. Don\'t panic, it is normally the case of all sites on which you send files!') %></p>
<p><%= l('The IP address of the image\'s sender is retained for a delay which depends of the administrator\'s choice (for the official instance, which is located in France, it\'s one year).') %></p>
<p><%= l('If the files are deleted if you ask it while posting it, their SHA512 footprint are retained.') %></p>
<h4><%= l('Who owns rights on images uploaded on Lutim?') %></h4>
<p><%= l('Only the uploader! (well, only if he\'s the only owner of the images\' rights before the upload)') %></p>
<p><%= l('Unlike many image sharing services, you don\'t give us rights on uploaded images.') %></p>
<h4><%= l('How to report an image?') %></h4>
<p><%= l('Please contact the administrator: %1') %></p>
<h4><%= l('How do you pronounce Lutim?') %></h4>
<p><%== l('Juste like you pronounce the French word <a href="https://fr.wikipedia.org/wiki/Lutin">lutin</a> (/ly.tɛ̃/).') %></p>
<h4><%= l('What about the software which provides the service?') %></h4>
<p><%== l('The Lutim software is a <a href="http://en.wikipedia.org/wiki/Free_software">free software</a>, which allows you to download and install it on you own server. Have a look at the <a href="https://www.gnu.org/licenses/agpl-3.0.html">AGPL</a> to see what you can do.') %></p>
<p><%== l('For more details, see the <a href="https://git.framasoft.org/luc/lutim">homepage of the project</a>.') %></p>
<h4><%= l('Main developers') %></h4>
<ul>
<li>Luc Didry, aka Sky (<a href="https://fiat-tux.fr">https://fiat-tux.fr</a>), <%= l('core developer') %>, @framasky <%= l('on') %> <a href="https://framasphere.org/people/b13eb6b0beac0131e7e32a0000053625">Diaspora*</a> <%= l('and on') %> <a href="https://twitter.com/framasky">Twitter</a></li>
<li>Dattaz (<a href="http://dattaz.fr">http://dattaz.fr</a>), <%= l('webapp developer') %>, <a href="https://twitter.com/dat_taz">@dat_taz</a></li>
</ul>
<h4><%= l('Contributors') %></h4>
<ul>
<li>Jean-Bernard Marcon, aka Goofy (<a href="https://github.com/goofy-bz">https://github.com/goofy-bz</a>)</li>
<li>Jean-Christophe Bach (<a href="https://github.com/jcb">https://github.com/jcb</a>)</li>
<li>Florian Bigard, aka Chocobozzz (<a href="https://github.com/Chocobozzz">https://github.com/Chocobozzz</a>)</li>
<li>Sandro CAZZANIGA, aka Kharec (<a href="http://sandrocazzaniga.fr">http://sandrocazzaniga.fr</a>), <a href="https://twitter.com/Kharec">@Kharec</a></li>
<li>Laura Arjona Reina (<a href="https://wiki.debian.org/LauraArjona">https://wiki.debian.org/LauraArjona</a>), <%= l('spanish translation') %>
</ul>
<%= link_to url_for('index') => ( class => "btn btn-primary btn-lg" ) => begin %><%= l('Back to homepage') %><% end%>
</div>

View File

@@ -1,7 +1,12 @@
% # vim:set sw=4 ts=4 sts=4 ft=html.epl expandtab:
% my %d = (
% delay_0 => l('no time limit'),
% delay_1 => l('24 hours'),
% delay_365 => l('1 year')
% );
<div class="messages">
% if (config('always_encrypt')) {
<p><%=l 'always_encrypt' %></p>
<p><%= l('The images are encrypted on the server (Lutim does not keep the key).') %></p>
% }
% if (defined(stash('short'))) {
<div class="alert alert-success">
@@ -12,13 +17,13 @@
% # Display image informations
% my $url = url_for('/')->to_abs().stash('short');
<strong><%= stash('filename') %></strong>
&nbsp;&nbsp;&nbsp;<a target="_blank" class="btn btn-default btn-primary btn-xs" href="https://twitter.com/share?url=<%= $url %>?t"><%=l 'tweet_it' %></a>
&nbsp;&nbsp;&nbsp;<a target="_blank" class="btn btn-default btn-primary btn-xs" href="https://twitter.com/share?url=<%= $url %>?t"><%= l('Tweet it!') %></a>
<ul class="list-unstyled">
% my $delete_url = url_for('delete', {short => stash('real_short'), token => stash('token')})->to_abs();
<li><i class="icon icon-eye" title =" <%= l 'view-link' %>"></i> <%= link_to $url => begin %> <%= $url %> <%= end %></li>
<li><i class="icon icon-download" title =" <%= l 'download-link' %>"></i> <%= link_to $url.'?dl' => begin %> <%= $url.'?dl' %> <%= end %></li>
<li><i class="icon icon-share" title =" <%= l 'share-link' %>"></i> <%= link_to $url.'?t' => begin %> <%= $url.'?t' %> <%= end %></li>
<li><i class="icon icon-trash" title =" <%= l 'delete-link' %>"></i> <%= link_to $delete_url => begin %> <%= $delete_url %> <%= end %></li>
<li><i class="icon icon-eye" title =" <%= l('View link') %>"></i> <%= link_to $url => begin %> <%= $url %> <%= end %></li>
<li><i class="icon icon-download" title =" <%= l('Download link') %>"></i> <%= link_to $url.'?dl' => begin %> <%= $url.'?dl' %> <%= end %></li>
<li><i class="icon icon-share" title =" <%= l('Link for share on social networks') %>"></i> <%= link_to $url.'?t' => begin %> <%= $url.'?t' %> <%= end %></li>
<li><i class="icon icon-trash" title =" <%= l('Deletion link') %>"></i> <%= link_to $delete_url => begin %> <%= $delete_url %> <%= end %></li>
</ul>
</div>
% # Delay modification form
@@ -28,7 +33,7 @@
<input name="image_url" type="hidden" value="<%= $url %>">
<select name="delete-day" class="form-control">
% for my $delay (qw/0 1 7 30 365/) {
% my $text = ($delay == 7 || $delay == 30) ? l('delay_days', $delay) : l("delay_$delay");
% my $text = ($delay == 7 || $delay == 30) ? l('%1 days', $delay) : $d{'delay_'.$delay};
% if (config('max_delay')) {
% if ($delay) {
% if ($delay < config('max_delay')) {
@@ -37,8 +42,8 @@
<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>
% last;
% } else {
% my $text = ($delay == 1) ? l('delay_1') : l('delay_days', $delay);
<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%=l('delay_days', config('max_delay')) %></option>
% my $text = ($delay == 1) ? l('24 hours') : l('%1 days', $delay);
<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%= l('%1 days', config('max_delay')) %></option>
% last;
% }
% }
@@ -49,13 +54,13 @@
</select>
<div class="checkbox">
<label>
<input type="checkbox" name="first-view"> <%=l 'delete-first' %>
<input type="checkbox" name="first-view"> <%= l('Delete at first view?') %>
</label>
<label <%== (config('always_encrypt')) ? 'class="always-encrypt"' : '' %>>
<input type="checkbox" name="crypt"> <%=l 'crypt_image' %>
<input type="checkbox" name="crypt"> <%= l('Encrypt the image (Lutim does not keep the key).') %>
</label>
</div>
<%= submit_button l('go'), class => 'btn btn-sm btn-default btn-primary', id => 'submitbutton' %>
<%= submit_button l('Let\'s go!'), class => 'btn btn-sm btn-default btn-primary', id => 'submitbutton' %>
</div>
</form>
</div>
@@ -69,7 +74,7 @@
% if (defined(flash('msg'))) {
<div class="alert alert-danger">
<button type="button" class="close jsonly" data-dismiss="alert" aria-hidden="true">&times;</button>
<strong><%=l 'some-bad' %></strong><br>
<strong><%= l('Something bad happened') %></strong><br>
<%= flash('filename') %> <%= flash('msg') %>
</div>
% }
@@ -80,7 +85,7 @@
<div class="form-group form-inline">
<select name="delete-day" class="form-control">
% for my $delay (qw/0 1 7 30 365/) {
% my $text = ($delay == 7 || $delay == 30) ? l('delay_days', $delay) : l("delay_$delay");
% my $text = ($delay == 7 || $delay == 30) ? l('%1 days', $delay) : $d{'delay_'.$delay};
% if (config('max_delay')) {
% if ($delay) {
% if ($delay < config('max_delay')) {
@@ -89,8 +94,8 @@
<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>
% last;
% } else {
% my $text = ($delay == 1) ? l('delay_1') : l('delay_days', $delay);
<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%=l('delay_days', config('max_delay')) %></option>
% my $text = ($delay == 1) ? l('24 hours') : l('%1 days', $delay);
<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%= l('%1 days', config('max_delay')) %></option>
% last;
% }
% }
@@ -101,23 +106,23 @@
</select>
<div class="checkbox">
<label>
<input type="checkbox" name="first-view"> <%=l 'delete-first' %>
<input type="checkbox" name="first-view"> <%= l('Delete at first view?') %>
</label>
<label <%== (config('always_encrypt')) ? 'class="always-encrypt"' : '' %>>
<input type="checkbox" name="crypt"> <%=l 'crypt_image' %>
<input type="checkbox" name="crypt"> <%= l('Encrypt the image (Lutim does not keep the key).') %>
</label>
</div>
</div>
<div class="form-group">
<label for="lutim-file"><%=l 'upload_image' %></label>
<label for="lutim-file"><%= l('Send an image') %></label>
<input type="file" name="file" id="lutim-file" accept="image/*">
</div>
<div class="form-group">
<label for="lutim-file-url"><%=l 'upload_image_url' %></label>
<input type="url" name="lutim-file-url" placeholder="<%=l 'image_url' %>">
<label for="lutim-file-url"><%= l('Upload an image with its URL') %></label>
<input type="url" name="lutim-file-url" placeholder="<%= l('Image URL') %>">
</div>
<p class="help-block"><%=l 'image-only' %></p>
<%= submit_button l('go'), class => 'btn btn-default btn-primary', id => 'submitbutton' %>
<p class="help-block"><%= l('Only images are allowed') %></p>
<%= submit_button l('Let\'s go!'), class => 'btn btn-default btn-primary', id => 'submitbutton' %>
</form>
</noscript>
@@ -126,7 +131,7 @@
<div class="form-group form-inline">
<select id="delete-day" class="form-control">
% for my $delay (qw/0 1 7 30 365/) {
% my $text = ($delay == 7 || $delay == 30) ? l('delay_days', $delay) : l("delay_$delay");
% my $text = ($delay == 7 || $delay == 30) ? l('%1 days', $delay) : $d{'delay_'.$delay};
% if (config('max_delay')) {
% if ($delay) {
% if ($delay < config('max_delay')) {
@@ -135,8 +140,8 @@
<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>
% last;
% } else {
% my $text = ($delay == 1) ? l('delay_1') : l('delay_days', $delay);
<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%=l('delay_days', config('max_delay')) %></option>
% my $text = ($delay == 1) ? l('24 hours') : l('%1 days', $delay);
<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%= l('%1 days', config('max_delay')) %></option>
% last;
% }
% }
@@ -147,32 +152,32 @@
</select>
<div class="checkbox">
<label>
<input type="checkbox" id="first-view"> <%=l 'delete-first' %>
<input type="checkbox" id="first-view"> <%= l('Delete at first view?') %>
</label>
<label <%== (config('always_encrypt')) ? 'class="always-encrypt"' : '' %>>
<input type="checkbox" id="crypt"> <%=l 'crypt_image' %>
<input type="checkbox" id="crypt"> <%= l('Encrypt the image (Lutim does not keep the key).') %>
</label>
</div>
</div>
<div id="drag-and-drop-zone" class="uploader">
<div><%=l 'drag-n-drop' %></div>
<div class="or"><%=l 'or' %></div>
<div><%= l('Drag & drop images here') %></div>
<div class="or"><%= l('-or-') %></div>
<div class="browser">
<label>
<span><%=l 'file-browser' %></span>
<input type="file" name="files[]" multiple="multiple" title='<%=l 'file-browser' %>' accept="image/*">
<span><%= l('Click to open the file browser') %></span>
<input type="file" name="files[]" multiple="multiple" title='<%= l('Click to open the file browser') %>' accept="image/*">
</label>
</div>
</div>
<p class="help-block"><%=l 'image-only' %></p>
<p class="help-block"><%= l('Only images are allowed') %></p>
<form class="form-horizontal" role="form" method="POST" action="<%== url_for('add') %>">
<div class="form-group">
<span class="col-sm-3 col-xs-12"><span class="hidden-spin" style="font-size:200%; display:none;" > <i class="icon-spinner animate-spin pull-right"></i></span><label for="lutim-file-url" class="control-label pull-right"><%=l 'upload_image_url' %></label></span>
<span class="col-sm-3 col-xs-12"><span class="hidden-spin" style="font-size:200%; display:none;" > <i class="icon-spinner animate-spin pull-right"></i></span><label for="lutim-file-url" class="control-label pull-right"><%= l('Upload an image with its URL') %></label></span>
<div class="col-sm-9 col-xs-12">
<input type="url" name="lutim-file-url" class="form-control" id="lutim-file-url" placeholder="<%=l 'image_url' %>">
<input type="url" name="lutim-file-url" class="form-control" id="lutim-file-url" placeholder="<%= l('Image URL') %>">
</div>
</div>
<a href="#" class="btn btn-default btn-primary pull-right" id="file-url-button"><%=l 'go' %></a>
<a href="#" class="btn btn-default btn-primary pull-right" id="file-url-button"><%= l('Let\'s go!') %></a>
</form>
</div>
<!-- /D&D Zone -->
@@ -202,9 +207,9 @@
});
}
function tw_url(url) {
var btn = '&nbsp;&nbsp;&nbsp;<a target="_blank" class="btn btn-default btn-primary btn-xs" href="https://twitter.com/share?url=<%== url_for('index')->to_abs() %>'+url+'?t"><%=l 'tweet_it' %></a>';
var btn = '&nbsp;&nbsp;&nbsp;<a title="<%= l('Tweet it!') %>" target="_blank" href="https://twitter.com/share?url=<%== url_for('index')->to_abs() %>'+url+'?t"><span class="icon icon-twitter"></span></a>';
if (navigator.mozSetMessageHandler !== undefined) {
btn = btn+'&nbsp;&nbsp;&nbsp;<a target="_blank" class="btn btn-default btn-primary btn-xs" href="" onclick="share(\'<%== url_for('index')->to_abs() %>'+url+'?t\');return false;"><%=l 'share_it' %></a>';
btn = btn+'&nbsp;&nbsp;&nbsp;<a title="<%= l('Share it!') %>" target="_blank" href="" onclick="share(\'<%== url_for('index')->to_abs() %>'+url+'?t\');return false;"><span class="icon icon-share"></span></a>';
}
return btn
}
@@ -222,7 +227,7 @@
alert(data.msg);
},
error: function() {
alert('<%=l 'modify_image_error' %>');
alert('<%= l('Error while trying to modify the image.') %>');
}
});
}
@@ -235,19 +240,19 @@
+msg.filename
+'</strong>'
+tw_url(msg.short)
+'<ul class="list-unstyled"><li><i class="icon icon-eye" title="<%=l 'view-link' %>"></i>&nbsp;'
+'<ul class="list-unstyled"><li><i class="icon icon-eye" title="<%= l('View link') %>"></i>&nbsp;'
+link(msg.short, '')
+'</li><li><i class="icon icon-download" title="<%=l 'download-link' %>"></i>&nbsp;'
+'</li><li><i class="icon icon-download" title="<%= l('Download link') %>"></i>&nbsp;'
+link(msg.short, 'dl')
+'</li><li><i class="icon icon-share" title="<%=l 'share-link' %>"></i>&nbsp;'
+'</li><li><i class="icon icon-share" title="<%= l('Link for share on social networks') %>"></i>&nbsp;'
+link(msg.short, 't')
+'</li><li><i class="icon icon-trash" title="<%=l 'delete-link' %>"></i>&nbsp;'
+'</li><li><i class="icon icon-trash" title="<%= l('Deletion link') %>"></i>&nbsp;'
+link(msg.real_short, '', msg.token)
+'</li></ul><form class="form" role="form" method="POST" action="'
+link(msg.real_short, '', msg.token, true)
+'"><div class="form-group form-inline"><select id="day-'+msg.real_short+'" name="delete-day" class="form-control">'
% for my $delay (qw/0 1 7 30 365/) {
% my $text = ($delay == 7 || $delay == 30) ? l('delay_days', $delay) : l("delay_$delay");
% my $text = ($delay == 7 || $delay == 30) ? l('%1 days', $delay) : $d{'delay_'.$delay};
% if (config('max_delay')) {
% if ($delay) {
% if ($delay < config('max_delay')) {
@@ -256,8 +261,8 @@
+'<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>'
% last;
% } else {
% my $text = ($delay == 1) ? l('delay_1') : l('delay_days', $delay);
+'<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%=l('delay_days', config('max_delay')) %></option>'
% my $text = ($delay == 1) ? l('24 hours') : l('%1 days', $delay);
+'<option value="<%= config('max_delay') %>" <%== is_selected(config('max_delay')) %>><%= l('%1 days', config('max_delay')) %></option>'
% last;
% }
% }
@@ -265,12 +270,12 @@
+'<option value="<%= $delay %>" <%== is_selected($delay) %>><%= $text %></option>'
% }
% }
+'</select>&nbsp;<div class="checkbox"><label><input id="first-view-'+msg.real_short+'" type="checkbox" name="first-view"> <%=l 'delete-first' %></label>'
+'</select>&nbsp;<div class="checkbox"><label><input id="first-view-'+msg.real_short+'" type="checkbox" name="first-view"> <%= l('Delete at first view?') %></label>'
+'</div>&nbsp;'
+'<a href="#" onclick="modify(\''+link(msg.real_short, '', msg.token, true)+'\', \''+msg.real_short+'\');return false;" class="btn btn-sm btn-default btn-primary"><%=l 'go' %></a></div></form>'
+'<a href="#" onclick="modify(\''+link(msg.real_short, '', msg.token, true)+'\', \''+msg.real_short+'\');return false;" class="btn btn-sm btn-default btn-primary"><%= l('Let\'s go!') %></a></div></form>'
+'</div>';
} else {
return '<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button><strong><%=l 'some-bad' %></strong><br>'
return '<div class="alert alert-danger"><button type="button" class="close" data-dismiss="alert" aria-hidden="true">&times;</button><strong><%= l('Something bad happened') %></strong><br>'
+msg.filename
+"<br>"
+msg.msg
@@ -300,7 +305,7 @@
$(".messages").append(build_message(false, ''));
},
onFileSizeError: function(file){
$(".messages").append(build_message(false, { filename: file.name, msg: '<%= l('file_too_big', $max_file_size) %>'}));
$(".messages").append(build_message(false, { filename: file.name, msg: '<%= l('The file exceed the size limit (%1)', $max_file_size) %>'}));
}
});
}

View File

@@ -42,16 +42,16 @@
<div class="pull-left hidden-xs logo">
<img src="<%= url_for('/') %>img/Lutim_small.png" alt="Lutim logo">
</div>
<a class="link_nocol" href="<%= url_for('/') %>" title="<%=l 'homepage' %>"><h1 class="hennypenny">Let's Upload That Image!</h1></a>
<a class="link_nocol" href="<%= url_for('/') %>" title="<%= l('Homepage') %>"><h1 class="hennypenny">Let's Upload That Image!</h1></a>
<p>
&copy; 2014 <%= link_to 'http://www.fiat-tux.fr' => begin %>Luc Didry<% end %> — 
<%=l 'license' %> <%= link_to 'https://www.gnu.org/licenses/agpl-3.0.html' => begin %>AGPL<% end %> — 
<%= link_to url_for('about') => begin %><%=l 'informations' %><% end %> — 
<%= link_to 'https://github.com/ldidry/lutim' => (title => l 'fork-me') => begin %><i class="lead icon icon-github-circled"></i><% end %> 
<%= link_to $twitter_url => (title => l 'share-twitter') => begin %><i class="lead icon icon-twitter"></i><% end %> 
<%= l('License:') %> <%= link_to 'https://www.gnu.org/licenses/agpl-3.0.html' => begin %>AGPL<% end %> — 
<%= link_to url_for('about') => begin %><%= l('Informations') %><% end %> — 
<%= link_to 'https://github.com/ldidry/lutim' => (title => l('Fork me!')) => begin %><i class="lead icon icon-github-circled"></i><% end %> 
<%= link_to $twitter_url => (title => l('Share on Twitter')) => begin %><i class="lead icon icon-twitter"></i><% end %> 
<%= link_to 'https://flattr.com/submit/auto?user_id=_SKy_&url='.$url.'&title=Lutim&category=software' => (title => 'Flattr this') => begin %><i class="lead icon icon-flattr"></i><% end %> 
<%= link_to 'bitcoin:1K3n4MXNRSMHk28oTfXEvDunWFthePvd8v?label=lutim' => (title => 'Give Bitcoins') => begin %><i class="lead icon icon-bitcoin"></i><% end %> 
<a class="btn btn-default btn-xs" href="#" id="install-app"><img src="<%= url_for('/') %>img/rocket.png" alt="mozilla rocket logo"> <%=l 'install_as_webapp' %></a>
<a class="btn btn-default btn-xs" href="#" id="install-app"><img src="<%= url_for('/') %>img/rocket.png" alt="mozilla rocket logo"> <%= l('Install webapp') %></a>
</p>
</div>
</div>

View File

@@ -1,7 +1,7 @@
{
"name": "Lutim",
"description": "Lets Upload That Image!\n\nThis is a simple image sharing app which use <%= url_for('/')->to_abs %> for storing the images. Once you have uploaded an image, you'll be provided differents links:\n a view link, which points directly to the image\n a download link, which force the download of the image\n a twitter link, which you can share on twitter : the image will natively appeared in twitter\n a delete link, which allows you to delete the image anytime you want\n\nThe image is stored on <%= url_for('/')->to_abs %> for a delay which you can define.\n\nThe particularity of Lutim is that the image is encrypted and its usage is as most anonymous as possible. See the information page (<%= url_for('about')->to_abs %>) for more details.\nLicense: AGPLv3 (https://www.gnu.org/licenses/agpl-3.0.html)",
"launch_path": "<%= url_for('/') %>",
"description": "Let's Upload That Image!\n\nThis is a simple image sharing app which use <%= url_for('index')->to_abs %> for storing the images. Once you have uploaded an image, you'll be provided differents links:\n a view link, which points directly to the image\n a download link, which force the download of the image\n a twitter link, which you can share on twitter : the image will natively appeared in twitter\n a delete link, which allows you to delete the image anytime you want\n\nThe image is stored on <%= url_for('index')->to_abs %> for a delay which you can define.\n\nThe particularity of Lutim is that the image is encrypted and its usage is as most anonymous as possible. See the information page (<%= url_for('about')->to_abs %>) for more details.\nLicense: AGPLv3 (https://www.gnu.org/licenses/agpl-3.0.html)",
"launch_path": "<%= url_for('index') %>",
"icons": {
"32": "<%= url_for('/img/lutim32.png') %>",
"60": "<%= url_for('/img/lutim60.png') %>",
@@ -17,7 +17,7 @@
"default_locale": "en",
"locales": {
"fr": {
"description": "Envoyons cette image !\n\nCeci est une application de partage simple d'images qui utilise <%= url_for('/')->to_abs %> pour enregistrer les images. Une fois que vous avez envoyé une image, vous obtiendrez différents liens :\n un lien de visualisation, qui pointe directement sur l'image\n un lien de téléchargement, qui force le téléchargement de l'image\n un lien twitter, que vous pouvez partager sur twitter : l'image apparaîtra nativement dans twitter\n un lien de suppression, qui vous permet de supprimer l'image quand vous le souhaitez\n\nL'image est conservée sur <%= url_for('/')->to_abs %> pour un délai que vous pouvez définir.\n\nLa particularité de Lutim est que l'image est chiffrée et que son usage est aussi anonyme que possible. Voir la page d'information (<%= url_for('about')->to_abs %>) pour plus de détails.\nLicence : AGPLv3 (https://www.gnu.org/licenses/agpl-3.0.html)"
"description": "Envoyons cette image !\n\nCeci est une application de partage simple d'images qui utilise <%= url_for('index')->to_abs %> pour enregistrer les images. Une fois que vous avez envoyé une image, vous obtiendrez différents liens :\n un lien de visualisation, qui pointe directement sur l'image\n un lien de téléchargement, qui force le téléchargement de l'image\n un lien twitter, que vous pouvez partager sur twitter : l'image apparaîtra nativement dans twitter\n un lien de suppression, qui vous permet de supprimer l'image quand vous le souhaitez\n\nL'image est conservée sur <%= url_for('index')->to_abs %> pour un délai que vous pouvez définir.\n\nLa particularité de Lutim est que l'image est chiffrée et que son usage est aussi anonyme que possible. Voir la page d'information (<%= url_for('about')->to_abs %>) pour plus de détails.\nLicence : AGPLv3 (https://www.gnu.org/licenses/agpl-3.0.html)"
}
},
"activities": {
@@ -25,7 +25,7 @@
"filters": {
"type": [ "image/*"]
},
"href": "<%= url_for('/') %>",
"href": "<%= url_for('index') %>",
"disposition": "window"
}
},

View File

@@ -1,13 +1,13 @@
% # vim:set sts=4 sw=4 ts=4 ft=html.epl expandtab:
<h4><%= $total %><%=l 'pushed-images' %></h4>
<h4><%= l('%1 sent images on this instance from beginning.', $total) %></h4>
<hr>
%= include 'data'
<h4>Uploaded files by days</h4>
<h4><%= l('Uploaded files by days') %></h4>
<div id="evol-holder"></div>
<hr>
<h4>Evolution of total files</h4>
<h4><%= l('Evolution of total files') %></h4>
<div id="total-holder"></div>
<p><small><%=l 'graph-data-once-a-day' %></small></p>
<p><small><%= l('The graph\'s datas are not updated in real-time.') %></small></p>
<%= link_to url_for('index') => ( class => "btn btn-primary btn-lg" ) => begin %><%=l 'back-to-index' %><% end%>
<%= link_to url_for('index') => ( class => "btn btn-primary btn-lg" ) => begin %><%= l('Back to homepage') %><% end%>

View File

@@ -0,0 +1,6 @@
templates/about.html.ep
templates/index.html.ep
templates/stats.html.ep
templates/layouts/default.html.ep
lib/Lutim.pm
lib/Lutim/Controller.pm