Merged changes with upstream
This commit is contained in:
commit
99a270e952
2
AUTHORS
2
AUTHORS
@ -13,6 +13,7 @@ Thank you!
|
||||
* Alex Camelio
|
||||
* Bernhard Keller
|
||||
* Caleb Forbes Davis V
|
||||
* Corey Farwell
|
||||
* Chris Moylan
|
||||
* Christopher Allan Webber
|
||||
* Daniel Neel
|
||||
@ -27,6 +28,7 @@ Thank you!
|
||||
* Nathan Yergler
|
||||
* Odin Hørthe Omdal
|
||||
* Osama Khalid
|
||||
* Pablo J. Urbano Santos
|
||||
* Rasmus Larsson
|
||||
* Sam Kleinman
|
||||
* Sebastian Spaeth
|
||||
|
5
MANIFEST.in
Normal file
5
MANIFEST.in
Normal file
@ -0,0 +1,5 @@
|
||||
recursive-include mediagoblin/templates *.html
|
||||
recursive-include mediagoblin/static *.js *.css *.png *.svg
|
||||
recursive-include mediagoblin/tests *.ini
|
||||
recursive-include docs *.rst *.html
|
||||
|
17
README
17
README
@ -8,19 +8,18 @@ What is GNU MediaGoblin?
|
||||
* Initially, a place to store all your photos that’s as awesome as, if
|
||||
not more awesome than, existing network services (Flickr, SmugMug,
|
||||
Picasa, etc)
|
||||
* Later, a place for all sorts of media, such as video, music, etc hosting.
|
||||
* Federated with OStatus!
|
||||
* Customizable!
|
||||
* A place for people to collaborate and show off original and derived
|
||||
creations. Free, as in freedom. We’re a GNU project in the making,
|
||||
afterall.
|
||||
creations. Free, as in freedom. We’re a GNU project after all.
|
||||
* Later, a place for all sorts of media, such as video, music, etc hosting.
|
||||
* Later, federated with OStatus!
|
||||
|
||||
|
||||
Is it ready for me to use?
|
||||
==========================
|
||||
|
||||
Not yet! We're working on it and we hope to have a usable system by
|
||||
September / October 2011.
|
||||
Yes! But with caveats. The software is usable and there are instances
|
||||
running, but it's still in its early stages.
|
||||
|
||||
|
||||
Can I help/hang out/participate/whisper sweet nothings in your ear?
|
||||
@ -33,9 +32,9 @@ hang out, see `our Join page <http://mediagoblin.org/join/>`_
|
||||
Where is the documentation?
|
||||
===========================
|
||||
|
||||
The beginnings of a user manual is located in the ``docs/`` directory
|
||||
in HTML, Texinfo, and source (Restructured Text) forms. It's also
|
||||
available online at http://docs.mediagoblin.org/ in HTML form.
|
||||
The beginnings of a site administration manual is located in the ``docs/``
|
||||
directory in HTML, Texinfo, and source (Restructured Text) forms. It's
|
||||
also available online at http://docs.mediagoblin.org/ in HTML form.
|
||||
|
||||
Contributor/developer documentation as well as documentation on the
|
||||
project processes and infrastructure is located on
|
||||
|
@ -4,9 +4,12 @@
|
||||
[jinja2: mediagoblin/templates/**.html]
|
||||
# Extract jinja templates (html)
|
||||
encoding = utf-8
|
||||
extensions = jinja2.ext.autoescape
|
||||
|
||||
[jinja2: mediagoblin/templates/**.txt]
|
||||
# Extract jinja templates (text)
|
||||
encoding = utf-8
|
||||
extensions = jinja2.ext.autoescape
|
||||
|
||||
# # Extraction from JavaScript files
|
||||
# [javascript: mediagoblin/static/js/**.js]
|
||||
|
48
devtools/update_translations.sh
Executable file
48
devtools/update_translations.sh
Executable file
@ -0,0 +1,48 @@
|
||||
#!/bin/bash
|
||||
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011 Free Software Foundation, Inc
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
# exit if anything fails
|
||||
set -e
|
||||
|
||||
echo "==> checking out master"
|
||||
git checkout master
|
||||
|
||||
echo "==> pulling git master"
|
||||
git pull
|
||||
|
||||
echo "==> pulling present translations"
|
||||
./bin/tx pull -a
|
||||
git add mediagoblin/i18n/
|
||||
git commit -m "Committing present MediaGoblin translations before pushing extracted messages"
|
||||
|
||||
echo "==> Extracting translations"
|
||||
./bin/pybabel extract -F babel.ini -o mediagoblin/i18n/en/LC_MESSAGES/mediagoblin.po .
|
||||
|
||||
echo "==> Pushing extracted translations to Transifex"
|
||||
./bin/tx push -s
|
||||
|
||||
# gets the new strings added to all files
|
||||
echo "==> Re-Pulling translations from Transifex"
|
||||
./bin/tx pull -a
|
||||
|
||||
echo "==> Compiling .mo files"
|
||||
./bin/pybabel compile -D mediagoblin -d mediagoblin/i18n/
|
||||
|
||||
echo "==> Committing to git"
|
||||
git add mediagoblin/i18n/
|
||||
git commit -m "Committing extracted and compiled translations"
|
@ -1,39 +0,0 @@
|
||||
{#
|
||||
default/layout.html
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Sphinx layout template for the default theme.
|
||||
|
||||
:copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
#}
|
||||
{% extends "basic/layout.html" %}
|
||||
|
||||
{% if theme_collapsiblesidebar|tobool %}
|
||||
{% set script_files = script_files + ['_static/sidebar.js'] %}
|
||||
{% endif %}
|
||||
|
||||
{%- block footer %}
|
||||
<div class="footer">
|
||||
<div>
|
||||
{% trans path=pathto('copyright'), copyright=copyright|e %}© <a href="{{ path }}">Copyright</a> {{ copyright }}.{% endtrans %}
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
|
||||
</div>
|
||||
<a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/"><img alt="Creative Commons License" style="border-width:0" src="http://i.creativecommons.org/l/by-sa/3.0/88x31.png" /></a><br /><span xmlns:dc="http://purl.org/dc/elements/1.1/" href="http://purl.org/dc/dcmitype/Text" property="dc:title" rel="dc:type">{{ shorttitle|e }}</span> by <a xmlns:cc="http://creativecommons.org/ns#" href="http://bluesock.org/~willg/" property="cc:attributionName" rel="cc:attributionURL">Will Kahn-Greene</a> is licensed under a <a rel="license" href="http://creativecommons.org/licenses/by-sa/3.0/">Creative Commons Attribution-ShareAlike 3.0 Unported License</a>.<br />
|
||||
</div>
|
||||
|
||||
<script type="text/javascript">
|
||||
var _gaq = _gaq || [];
|
||||
_gaq.push(['_setAccount', 'UA-163840-8']);
|
||||
_gaq.push(['_trackPageview']);
|
||||
|
||||
(function() {
|
||||
var ga = document.createElement('script'); ga.type = 'text/javascript'; ga.async = true;
|
||||
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
|
||||
var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(ga, s);
|
||||
})();
|
||||
</script>
|
||||
{%- endblock %}
|
@ -1,299 +0,0 @@
|
||||
/*
|
||||
* default.css_t
|
||||
* ~~~~~~~~~~~~~
|
||||
*
|
||||
* Sphinx stylesheet -- default theme.
|
||||
*
|
||||
* :copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
|
||||
* :license: BSD, see LICENSE for details.
|
||||
*
|
||||
*/
|
||||
|
||||
@import url("basic.css");
|
||||
|
||||
/* -- page layout ----------------------------------------------------------- */
|
||||
|
||||
body {
|
||||
font-family: {{ theme_bodyfont }};
|
||||
font-size: 100%;
|
||||
background-color: {{ theme_footerbgcolor }};
|
||||
color: #000;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.document {
|
||||
background-color: {{ theme_sidebarbgcolor }};
|
||||
}
|
||||
|
||||
div.documentwrapper {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.bodywrapper {
|
||||
margin: 0 0 0 230px;
|
||||
}
|
||||
|
||||
div.body {
|
||||
background-color: {{ theme_bgcolor }};
|
||||
color: {{ theme_textcolor }};
|
||||
padding: 0 20px 30px 20px;
|
||||
}
|
||||
|
||||
{%- if theme_rightsidebar|tobool %}
|
||||
div.bodywrapper {
|
||||
margin: 0 230px 0 0;
|
||||
}
|
||||
{%- endif %}
|
||||
|
||||
div.footer {
|
||||
color: {{ theme_footertextcolor }};
|
||||
width: 100%;
|
||||
padding: 9px 0 9px 0;
|
||||
text-align: center;
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
div.footer a {
|
||||
color: {{ theme_footertextcolor }};
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
div.related {
|
||||
background-color: {{ theme_relbarbgcolor }};
|
||||
line-height: 30px;
|
||||
color: {{ theme_relbartextcolor }};
|
||||
}
|
||||
|
||||
div.related a {
|
||||
color: {{ theme_relbarlinkcolor }};
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
{%- if theme_stickysidebar|tobool %}
|
||||
top: 30px;
|
||||
bottom: 0;
|
||||
margin: 0;
|
||||
position: fixed;
|
||||
overflow: auto;
|
||||
height: auto;
|
||||
{%- endif %}
|
||||
{%- if theme_rightsidebar|tobool %}
|
||||
float: right;
|
||||
{%- if theme_stickysidebar|tobool %}
|
||||
right: 0;
|
||||
{%- endif %}
|
||||
{%- endif %}
|
||||
}
|
||||
|
||||
{%- if theme_stickysidebar|tobool %}
|
||||
/* this is nice, but it it leads to hidden headings when jumping
|
||||
to an anchor */
|
||||
/*
|
||||
div.related {
|
||||
position: fixed;
|
||||
}
|
||||
|
||||
div.documentwrapper {
|
||||
margin-top: 30px;
|
||||
}
|
||||
*/
|
||||
{%- endif %}
|
||||
|
||||
div.sphinxsidebar h3 {
|
||||
font-family: {{ theme_headfont }};
|
||||
color: {{ theme_sidebartextcolor }};
|
||||
font-size: 1.4em;
|
||||
font-weight: normal;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar h3 a {
|
||||
color: {{ theme_sidebartextcolor }};
|
||||
}
|
||||
|
||||
div.sphinxsidebar h4 {
|
||||
font-family: {{ theme_headfont }};
|
||||
color: {{ theme_sidebartextcolor }};
|
||||
font-size: 1.3em;
|
||||
font-weight: normal;
|
||||
margin: 5px 0 0 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.sphinxsidebar p {
|
||||
color: {{ theme_sidebartextcolor }};
|
||||
}
|
||||
|
||||
div.sphinxsidebar p.topless {
|
||||
margin: 5px 10px 10px 10px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
margin: 10px;
|
||||
padding: 0;
|
||||
color: {{ theme_sidebartextcolor }};
|
||||
}
|
||||
|
||||
div.sphinxsidebar a {
|
||||
color: {{ theme_sidebarlinkcolor }};
|
||||
}
|
||||
|
||||
div.sphinxsidebar input {
|
||||
border: 1px solid {{ theme_sidebarlinkcolor }};
|
||||
font-family: sans-serif;
|
||||
font-size: 1em;
|
||||
}
|
||||
|
||||
|
||||
/* -- hyperlink styles ------------------------------------------------------ */
|
||||
|
||||
a {
|
||||
color: {{ theme_linkcolor }};
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: {{ theme_visitedlinkcolor }};
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a:hover {
|
||||
text-decoration: underline;
|
||||
}
|
||||
|
||||
{% if theme_externalrefs|tobool %}
|
||||
a.external {
|
||||
text-decoration: none;
|
||||
border-bottom: 1px dashed {{ theme_linkcolor }};
|
||||
}
|
||||
|
||||
a.external:hover {
|
||||
text-decoration: none;
|
||||
border-bottom: none;
|
||||
}
|
||||
{% endif %}
|
||||
|
||||
/* -- body styles ----------------------------------------------------------- */
|
||||
|
||||
div.body h1,
|
||||
div.body h2,
|
||||
div.body h3,
|
||||
div.body h4,
|
||||
div.body h5,
|
||||
div.body h6 {
|
||||
font-family: {{ theme_headfont }};
|
||||
background-color: {{ theme_headbgcolor }};
|
||||
font-weight: normal;
|
||||
color: {{ theme_headtextcolor }};
|
||||
border-bottom: 1px solid #ccc;
|
||||
margin: 20px -20px 10px -20px;
|
||||
padding: 3px 0 3px 10px;
|
||||
}
|
||||
|
||||
div.body h1 { margin-top: 0; font-size: 200%; }
|
||||
div.body h2 { font-size: 160%; }
|
||||
div.body h3 { font-size: 140%; }
|
||||
div.body h4 { font-size: 120%; }
|
||||
div.body h5 { font-size: 110%; }
|
||||
div.body h6 { font-size: 100%; }
|
||||
|
||||
a.headerlink {
|
||||
color: {{ theme_headlinkcolor }};
|
||||
font-size: 0.8em;
|
||||
padding: 0 4px 0 4px;
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
a.headerlink:hover {
|
||||
background-color: {{ theme_headlinkcolor }};
|
||||
color: white;
|
||||
}
|
||||
|
||||
div.body p, div.body dd, div.body li {
|
||||
text-align: justify;
|
||||
line-height: 130%;
|
||||
}
|
||||
|
||||
div.admonition p.admonition-title + p {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
div.admonition p {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.admonition pre {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.admonition ul, div.admonition ol {
|
||||
margin-bottom: 5px;
|
||||
}
|
||||
|
||||
div.note {
|
||||
background-color: #eee;
|
||||
border: 1px solid #ccc;
|
||||
}
|
||||
|
||||
div.seealso {
|
||||
background-color: #ffc;
|
||||
border: 1px solid #ff6;
|
||||
}
|
||||
|
||||
div.topic {
|
||||
background-color: #eee;
|
||||
}
|
||||
|
||||
div.warning {
|
||||
background-color: #ffe4e4;
|
||||
border: 1px solid #f66;
|
||||
}
|
||||
|
||||
p.admonition-title {
|
||||
display: inline;
|
||||
}
|
||||
|
||||
p.admonition-title:after {
|
||||
content: ":";
|
||||
}
|
||||
|
||||
pre {
|
||||
padding: 5px;
|
||||
background-color: {{ theme_codebgcolor }};
|
||||
color: {{ theme_codetextcolor }};
|
||||
line-height: 120%;
|
||||
border: 1px solid #ac9;
|
||||
border-left: none;
|
||||
border-right: none;
|
||||
}
|
||||
|
||||
tt {
|
||||
background-color: #ecf0f3;
|
||||
padding: 0 1px 0 1px;
|
||||
font-size: 0.95em;
|
||||
}
|
||||
|
||||
th {
|
||||
background-color: #ede;
|
||||
}
|
||||
|
||||
.warning tt {
|
||||
background: #efc2c2;
|
||||
}
|
||||
|
||||
.note tt {
|
||||
background: #d6d6d6;
|
||||
}
|
||||
|
||||
.viewcode-back {
|
||||
font-family: {{ theme_bodyfont }};
|
||||
}
|
||||
|
||||
div.viewcode-block:target {
|
||||
background-color: #f4debf;
|
||||
border-top: 1px solid #ac9;
|
||||
border-bottom: 1px solid #ac9;
|
||||
}
|
@ -1,31 +0,0 @@
|
||||
[theme]
|
||||
inherit = basic
|
||||
stylesheet = default.css
|
||||
pygments_style = sphinx
|
||||
|
||||
[options]
|
||||
rightsidebar = false
|
||||
stickysidebar = false
|
||||
collapsiblesidebar = false
|
||||
externalrefs = false
|
||||
|
||||
footerbgcolor = #b11818
|
||||
footertextcolor = #ffffff
|
||||
sidebarbgcolor = #6a0000
|
||||
sidebartextcolor = #ffffff
|
||||
sidebarlinkcolor = #98dbcc
|
||||
relbarbgcolor = #b11818
|
||||
relbartextcolor = #ffffff
|
||||
relbarlinkcolor = #ffffff
|
||||
bgcolor = #ffffff
|
||||
textcolor = #000000
|
||||
headbgcolor = #fdeded
|
||||
headtextcolor = #20435c
|
||||
headlinkcolor = #c60f0f
|
||||
linkcolor = #355f7c
|
||||
visitedlinkcolor = #355f7c
|
||||
codebgcolor = #eeffcc
|
||||
codetextcolor = #333333
|
||||
|
||||
bodyfont = sans-serif
|
||||
headfont = 'Trebuchet MS', sans-serif
|
@ -28,7 +28,7 @@ sys.path.insert(0, os.path.abspath('.'))
|
||||
extensions = ["mgext.youcanhelp"]
|
||||
|
||||
# Add any paths that contain templates here, relative to this directory.
|
||||
templates_path = ['_templates']
|
||||
templates_path = ['source/_templates']
|
||||
|
||||
# The suffix of source filenames.
|
||||
source_suffix = '.rst'
|
||||
@ -48,9 +48,9 @@ copyright = u'2011, Free Software Foundation, Inc and contributors'
|
||||
# built documents.
|
||||
#
|
||||
# The short X.Y version.
|
||||
version = '0.0.5'
|
||||
version = '0.3.0'
|
||||
# The full version, including alpha/beta/rc tags.
|
||||
release = '0.0.5'
|
||||
release = '0.3.0-dev'
|
||||
|
||||
# The language for content autogenerated by Sphinx. Refer to documentation
|
||||
# for a list of supported languages.
|
||||
@ -91,7 +91,8 @@ pygments_style = 'sphinx'
|
||||
|
||||
# The theme to use for HTML and HTML Help pages. See the documentation for
|
||||
# a list of builtin themes.
|
||||
html_theme = 'default'
|
||||
# html_theme = 'default'
|
||||
html_theme = 'mg'
|
||||
|
||||
# Theme options are theme-specific and customize the look and feel of a theme
|
||||
# further. For a list of options available for each theme, see the
|
||||
@ -99,7 +100,7 @@ html_theme = 'default'
|
||||
#html_theme_options = {}
|
||||
|
||||
# Add any paths that contain custom themes here, relative to this directory.
|
||||
#html_theme_path = []
|
||||
html_theme_path = ['themes']
|
||||
|
||||
# The name for this set of Sphinx documents. If None, it defaults to
|
||||
# "<project> v<release> documentation".
|
||||
@ -110,7 +111,7 @@ html_theme = 'default'
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top
|
||||
# of the sidebar.
|
||||
#html_logo = None
|
||||
html_logo = 'logo_docs.png'
|
||||
|
||||
# The name of an image file (within the static path) to use as favicon of the
|
||||
# docs. This file should be a Windows icon file (.ico) being 16x16 or 32x32
|
||||
|
@ -19,13 +19,13 @@ mediagoblin.ini
|
||||
tweak settings for MediaGoblin, you'll usually tweak them here.
|
||||
|
||||
paste.ini
|
||||
This is primarily a server configuration file, on the python side
|
||||
(specifically, on the wsgi side, via `paste deploy
|
||||
This is primarily a server configuration file, on the Python side
|
||||
(specifically, on the WSGI side, via `paste deploy
|
||||
<http://pythonpaste.org/deploy/>`_ / `paste script
|
||||
<http://pythonpaste.org/script/>`_). It also sets up some
|
||||
middleware that you can mostly ignore, except to configure
|
||||
sessions... more on that later. If you are adding a different
|
||||
python server other than fastcgi / plain http, you might configure
|
||||
Python server other than fastcgi / plain HTTP, you might configure
|
||||
it here. You probably won't need to change this file very much.
|
||||
|
||||
|
||||
@ -47,19 +47,23 @@ Let's assume you're doing the virtualenv setup described elsewhere in this
|
||||
manual, and you need to make local tweaks to the config files. How do you do
|
||||
that? Let's see.
|
||||
|
||||
To make changes to mediagoblin.ini:
|
||||
To make changes to mediagoblin.ini ::
|
||||
|
||||
cp mediagoblin.ini mediagoblin_local.ini
|
||||
cp mediagoblin.ini mediagoblin_local.ini
|
||||
|
||||
To make changes to paste.ini:
|
||||
cp paste.ini paste_local.ini
|
||||
To make changes to paste.ini ::
|
||||
|
||||
cp paste.ini paste_local.ini
|
||||
|
||||
From here you should be able to make direct adjustments to the files,
|
||||
and most of the commands described elsewhere in this manual will "notice"
|
||||
your local config files and use those instead of the non-local version.
|
||||
|
||||
(Note that all commands provide a way to pass in a specific config
|
||||
file also, usually by a -cf flag.)
|
||||
.. note::
|
||||
|
||||
Note that all commands provide a way to pass in a specific config
|
||||
file also, usually by a ``-cf`` flag.
|
||||
|
||||
|
||||
Common changes
|
||||
==============
|
||||
@ -69,9 +73,9 @@ Enabling email notifications
|
||||
|
||||
You'll almost certainly want to enable sending emails. By default,
|
||||
MediaGoblin doesn't really do this... for the sake of developer
|
||||
convenience, it runs in "email debug mode". Change this:
|
||||
convenience, it runs in "email debug mode". Change this::
|
||||
|
||||
email_debug_mode = false
|
||||
email_debug_mode = false
|
||||
|
||||
You can (and should) change the "from" email address by setting
|
||||
``email_sender_address``.
|
||||
@ -82,21 +86,21 @@ If you have more custom SMTP settings, you also have the following
|
||||
options at your disposal, which are all optional, and do exactly what
|
||||
they sound like.
|
||||
|
||||
- email_smtp_host
|
||||
- email_smtp_port
|
||||
- email_smtp_user
|
||||
- email_smtp_pass
|
||||
- email_smtp_host
|
||||
- email_smtp_port
|
||||
- email_smtp_user
|
||||
- email_smtp_pass
|
||||
|
||||
All other configuration changes
|
||||
-------------------------------
|
||||
|
||||
To be perfectly honest, there are quite a few options and I'm not
|
||||
going to be able to get to documanting them all in time for 0.1.0.
|
||||
To be perfectly honest, there are quite a few options and we haven't had
|
||||
time to document them all
|
||||
|
||||
So here's a cop-out section saying that if you get into trouble, hop
|
||||
onto IRC and we'll help you out:
|
||||
onto IRC and we'll help you out::
|
||||
|
||||
#mediagoblin on irc.freenode.net
|
||||
#mediagoblin on irc.freenode.net
|
||||
|
||||
Celery
|
||||
======
|
||||
|
@ -11,9 +11,11 @@ it simple with some assumptions and use a setup that combines
|
||||
mediagoblin + virtualenv + fastcgi + nginx on a .deb or .rpm based
|
||||
GNU/Linux distro.
|
||||
|
||||
Note: these tools are for administrators wanting to deploy a fresh
|
||||
install. If instead you want to join in as a contributor, see our
|
||||
`Hacking HOWTO <http://wiki.mediagoblin.org/HackingHowto>`_ instead.
|
||||
.. note::
|
||||
|
||||
These tools are for site administrators wanting to deploy a fresh
|
||||
install. If instead you want to join in as a contributor, see our
|
||||
`Hacking HOWTO <http://wiki.mediagoblin.org/HackingHowto>`_ instead.
|
||||
|
||||
Prepare System
|
||||
--------------
|
||||
@ -33,12 +35,15 @@ MediaGoblin has the following core dependencies:
|
||||
On a DEB-based system (e.g Debian, gNewSense, Trisquel, Ubuntu, and
|
||||
derivatives) issue the following command: ::
|
||||
|
||||
sudo apt-get install mongodb git-core python python-dev python-lxml python-imaging python-virtualenv
|
||||
sudo apt-get install mongodb git-core python python-dev python-lxml \
|
||||
python-imaging python-virtualenv
|
||||
|
||||
On a RPM-based system (e.g. Fedora, RedHat, and derivatives) issue the
|
||||
following command: ::
|
||||
|
||||
yum install mongodb-server python-paste-deploy python-paste-script git-core python python-devel python-lxml python-imaging python-virtualenv
|
||||
yum install mongodb-server python-paste-deploy python-paste-script \
|
||||
git-core python python-devel python-lxml python-imaging \
|
||||
python-virtualenv
|
||||
|
||||
Configure MongoDB
|
||||
~~~~~~~~~~~~~~~~~
|
||||
@ -46,10 +51,11 @@ Configure MongoDB
|
||||
After installing MongoDB some preliminary database configuration may
|
||||
be necessary.
|
||||
|
||||
Ensure that MongoDB `journaling <http://www.mongodb.org/display/DOCS/Journaling>`_
|
||||
is enabled. Journaling is enabled by default in version 2.0 and later
|
||||
64-bit MongoDB instances. Check your deployment, and consider enabling
|
||||
journaling if you're running 32-bit systems or earlier version.
|
||||
Ensure that MongoDB `journaling
|
||||
<http://www.mongodb.org/display/DOCS/Journaling>`_ is enabled. Journaling
|
||||
is enabled by default in version 2.0 and later 64-bit MongoDB instances.
|
||||
Check your deployment, and consider enabling journaling if you're running
|
||||
32-bit systems or earlier version.
|
||||
|
||||
.. warning::
|
||||
|
||||
@ -77,41 +83,42 @@ create "system account" or dedicated service user. Ensure that it is
|
||||
not possible to log in to your system with as this user.
|
||||
|
||||
You should create a working directory for MediaGoblin. This document
|
||||
assumes your local git repository will be located at ``/srv/mediagoblin.example.org/mediagoblin/``
|
||||
for this documentation. Substitute your prefer ed local deployment path
|
||||
as needed.
|
||||
assumes your local git repository will be located at
|
||||
``/srv/mediagoblin.example.org/mediagoblin/`` for this documentation.
|
||||
Substitute your prefer ed local deployment path as needed.
|
||||
|
||||
This document assumes that all operations are performed as this
|
||||
user. To drop privileges to this user, run the following command: ::
|
||||
|
||||
su - [mediagoblin]
|
||||
|
||||
su - [mediagoblin]``
|
||||
|
||||
Where, "``[mediagoblin]`` is the username of the system user that will
|
||||
Where, "``[mediagoblin]``" is the username of the system user that will
|
||||
run MediaGoblin.
|
||||
|
||||
Install MediaGoblin and Virtualenv
|
||||
----------------------------------
|
||||
|
||||
As of |version|, MediaGoblin has a rapid development pace. As a result
|
||||
the following instructions recommend installing from the ``master``
|
||||
branch of the git repository. Eventually production deployments will
|
||||
want to transition to running from more consistent releases.
|
||||
.. note::
|
||||
|
||||
As of |version|, MediaGoblin has a rapid development pace. As a result
|
||||
the following instructions recommend installing from the ``master``
|
||||
branch of the git repository. Eventually production deployments will
|
||||
want to transition to running from more consistent releases.
|
||||
|
||||
Issue the following commands, to create and change the working
|
||||
directory. Modify these commands to reflect your own environment: ::
|
||||
directory. Modify these commands to reflect your own environment::
|
||||
|
||||
mkdir -p /srv/mediagoblin.example.org/
|
||||
cd /srv/mediagoblin.example.org/
|
||||
mkdir -p /srv/mediagoblin.example.org/
|
||||
cd /srv/mediagoblin.example.org/
|
||||
|
||||
Clone the MediaGoblin repository: ::
|
||||
Clone the MediaGoblin repository::
|
||||
|
||||
git clone git://gitorious.org/mediagoblin/mediagoblin.git
|
||||
git clone git://gitorious.org/mediagoblin/mediagoblin.git
|
||||
|
||||
And setup the in-package virtualenv: ::
|
||||
And setup the in-package virtualenv::
|
||||
|
||||
cd mediagoblin
|
||||
virtualenv . && ./bin/python setup.py develop
|
||||
cd mediagoblin
|
||||
virtualenv . && ./bin/python setup.py develop
|
||||
|
||||
.. note::
|
||||
|
||||
@ -127,11 +134,16 @@ more reliable and considerably easier to configure and illustrate. If
|
||||
you're familiar with Python packaging you may consider deploying with
|
||||
your preferred the method.
|
||||
|
||||
Assuming you are going to deploy with FastCGI, you should also install
|
||||
flup::
|
||||
|
||||
./bin/easy_install flup
|
||||
|
||||
This concludes the initial configuration of the development
|
||||
environment. In the future, if at any point you want update your
|
||||
codebase, you should also run: ::
|
||||
codebase, you should also run::
|
||||
|
||||
./bin/python setup.py develop --upgrade && ./bin/gmg migrate.
|
||||
./bin/python setup.py develop --upgrade && ./bin/gmg migrate.
|
||||
|
||||
Deploy MediaGoblin Services
|
||||
---------------------------
|
||||
@ -140,9 +152,9 @@ Test the Server
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
At this point MediaGoblin should be properly installed. You can
|
||||
test the deployment with the following command: ::
|
||||
test the deployment with the following command::
|
||||
|
||||
./lazyserver.sh --server-name=broadcast
|
||||
./lazyserver.sh --server-name=broadcast
|
||||
|
||||
You should be able to connect to the machine on port 6543 in your
|
||||
browser to confirm that the service is operable.
|
||||
@ -151,7 +163,7 @@ Connect the Webserver to MediaGoblin with FastCGI
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes how to configure MediaGoblin to work via
|
||||
fastcgi. Our configuration example will use nginx, however, you may
|
||||
FastCGI. Our configuration example will use nginx, however, you may
|
||||
use any webserver of your choice as long as it supports the FastCGI
|
||||
protocol. If you do not already have a web server, consider nginx, as
|
||||
the configuration files may be more clear than the
|
||||
@ -161,94 +173,85 @@ Create a configuration file at
|
||||
``/srv/mediagoblin.example.org/nginx.conf`` and create a symbolic link
|
||||
into a directory that will be included in your ``nginx`` configuration
|
||||
(e.g. "``/etc/nginx/sites-enabled`` or ``/etc/nginx/conf.d``) with
|
||||
one of the following commands (as the root user:) ::
|
||||
one of the following commands (as the root user)::
|
||||
|
||||
ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/conf.d/
|
||||
ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/sites-enabled/
|
||||
ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/conf.d/
|
||||
ln -s /srv/mediagoblin.example.org/nginx.conf /etc/nginx/sites-enabled/
|
||||
|
||||
Modify these commands and locations depending on your preferences and
|
||||
the existing configuration of your nginx instance. The contents of
|
||||
this ``nginx.conf`` file should be modeled on the following: ::
|
||||
this ``nginx.conf`` file should be modeled on the following::
|
||||
|
||||
server {
|
||||
#################################################
|
||||
# Stock useful config options, but ignore them :)
|
||||
#################################################
|
||||
include /etc/nginx/mime.types;
|
||||
server {
|
||||
#################################################
|
||||
# Stock useful config options, but ignore them :)
|
||||
#################################################
|
||||
include /etc/nginx/mime.types;
|
||||
|
||||
autoindex off;
|
||||
default_type application/octet-stream;
|
||||
sendfile on;
|
||||
autoindex off;
|
||||
default_type application/octet-stream;
|
||||
sendfile on;
|
||||
|
||||
# Gzip
|
||||
gzip on;
|
||||
gzip_min_length 1024;
|
||||
gzip_buffers 4 32k;
|
||||
gzip_types text/plain text/html application/x-javascript text/javascript text/xml text/css;
|
||||
# Gzip
|
||||
gzip on;
|
||||
gzip_min_length 1024;
|
||||
gzip_buffers 4 32k;
|
||||
gzip_types text/plain text/html application/x-javascript text/javascript text/xml text/css;
|
||||
|
||||
#####################################
|
||||
# Mounting MediaGoblin stuff
|
||||
# This is the section you should read
|
||||
#####################################
|
||||
#####################################
|
||||
# Mounting MediaGoblin stuff
|
||||
# This is the section you should read
|
||||
#####################################
|
||||
|
||||
server_name mediagoblin.example.org www.mediagoblin.example.org;
|
||||
access_log /var/log/nginx/mediagoblin.example.access.log;
|
||||
error_log /var/log/nginx/mediagoblin.example.error.log;
|
||||
# Change this to update the upload size limit for your users
|
||||
client_max_body_size 8m;
|
||||
|
||||
# MediaGoblin's stock static files: CSS, JS, etc.
|
||||
location /mgoblin_static/ {
|
||||
alias /srv/mediagoblin.example.org/mediagoblin/static/;
|
||||
}
|
||||
server_name mediagoblin.example.org www.mediagoblin.example.org;
|
||||
access_log /var/log/nginx/mediagoblin.example.access.log;
|
||||
error_log /var/log/nginx/mediagoblin.example.error.log;
|
||||
|
||||
# Instance specific media:
|
||||
location /mgoblin_media/ {
|
||||
alias /srv/mediagoblin.example.org/mediagoblin/user_dev/media/public/;
|
||||
}
|
||||
|
||||
# Mounting MediaGoblin itself via fastcgi.
|
||||
location / {
|
||||
fastcgi_pass 127.0.0.1:26543;
|
||||
include /etc/nginx/fastcgi_params;
|
||||
}
|
||||
# MediaGoblin's stock static files: CSS, JS, etc.
|
||||
location /mgoblin_static/ {
|
||||
alias /srv/mediagoblin.example.org/mediagoblin/mediagoblin/static/;
|
||||
}
|
||||
|
||||
# Instance specific media:
|
||||
location /mgoblin_media/ {
|
||||
alias /srv/mediagoblin.example.org/mediagoblin/user_dev/media/public/;
|
||||
}
|
||||
|
||||
# Mounting MediaGoblin itself via FastCGI.
|
||||
location / {
|
||||
fastcgi_pass 127.0.0.1:26543;
|
||||
include /etc/nginx/fastcgi_params;
|
||||
|
||||
# our understanding vs nginx's handling of script_name vs
|
||||
# path_info don't match :)
|
||||
fastcgi_param PATH_INFO $fastcgi_script_name;
|
||||
fastcgi_param SCRIPT_NAME "";
|
||||
}
|
||||
}
|
||||
|
||||
Now, nginx instance is configured to serve the MediaGoblin
|
||||
application. Perform a quick test to ensure that this configuration
|
||||
works. Restart nginx so it picks up your changes, with a command that
|
||||
resembles one of the following (as the root user:) ::
|
||||
resembles one of the following (as the root user)::
|
||||
|
||||
sudo /etc/init.d/nginx restart
|
||||
sudo /etc/rc.d/nginx restart
|
||||
sudo /etc/init.d/nginx restart
|
||||
sudo /etc/rc.d/nginx restart
|
||||
|
||||
Now start MediaGoblin. Use the following command sequence as an
|
||||
example: ::
|
||||
example::
|
||||
|
||||
cd /srv/mediagoblin.example.org/mediagoblin/
|
||||
./lazyserver.sh --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
|
||||
cd /srv/mediagoblin.example.org/mediagoblin/
|
||||
./lazyserver.sh --server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
|
||||
|
||||
Visit the site you've set up in your browser by visiting
|
||||
<http://mediagobilin.example.org>. You should see MediaGoblin!
|
||||
|
||||
Production MediaGoblin Deployments with Paste
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
The instance configured with ``lazyserver`` is not ideal for a
|
||||
production MediaGoblin deployment. Ideally, you should be able to use
|
||||
a a control script (i.e. init script.) to launch and restart the
|
||||
MediaGoblin process.
|
||||
|
||||
Use the following command as the basis for such a script: ::
|
||||
|
||||
CELERY_ALWAYS_EAGER=true \
|
||||
/srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
|
||||
/srv/mediagoblin.example.org/mediagoblin/paste.ini \
|
||||
--pid-file=/tmp/mediagoblin.pid \
|
||||
--server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543 \
|
||||
|
||||
.. note::
|
||||
|
||||
The above configuration places MediaGoblin in "always eager" mode
|
||||
with Celery. This is fine for development and smaller
|
||||
deployments. However, if you're getting into the really large
|
||||
deployment category, consider reading the section of this manual on
|
||||
Celery.
|
||||
The configuration described above is sufficient for development and
|
||||
smaller deployments. However, for larger production deployments
|
||||
with larger processing requirements, see the
|
||||
":doc:`production-deployments`" documentation.
|
||||
|
@ -5,14 +5,14 @@ Foreword
|
||||
About the MediaGoblin Manual
|
||||
============================
|
||||
|
||||
This is the user manual for MediaGoblin. It covers how to set up and
|
||||
configure MediaGoblin and the kind of information that someone running
|
||||
MediaGoblin would need to know.
|
||||
This is the site administrator manual for MediaGoblin. It covers how
|
||||
to set up and configure MediaGoblin and the kind of information that
|
||||
someone running MediaGoblin would need to know.
|
||||
|
||||
We have other documentation at:
|
||||
|
||||
* http://mediagoblin.org/join/ for general "join us" information
|
||||
* http://wiki.mediagoblin.org/ for our contributor-focused wiki
|
||||
* http://wiki.mediagoblin.org/ for our contributor/developer-focused wiki
|
||||
|
||||
|
||||
Improving the MediaGobiin Manual
|
||||
|
@ -14,7 +14,9 @@ Table of Contents:
|
||||
foreword
|
||||
about
|
||||
deploying
|
||||
production-deployments
|
||||
configuration
|
||||
media-types
|
||||
help
|
||||
theming
|
||||
codebase
|
||||
|
34
docs/source/media-types.rst
Normal file
34
docs/source/media-types.rst
Normal file
@ -0,0 +1,34 @@
|
||||
.. _media-types-chapter:
|
||||
|
||||
====================
|
||||
Enabling Media Types
|
||||
====================
|
||||
|
||||
In the future, there will be all sorts of media types you can enable,
|
||||
but in the meanwhile there's only one additional media type: video.
|
||||
|
||||
First, you should probably read ":doc:`configuration`" to make sure
|
||||
you know how to modify the mediagoblin config file.
|
||||
|
||||
Video
|
||||
=====
|
||||
|
||||
To enable video, first install gstreamer and the python-gstreamer
|
||||
bindings (as well as whatever gstremaer extensions you want,
|
||||
good/bad/ugly). On Debianoid systems::
|
||||
|
||||
sudo apt-get install python-gst0.10
|
||||
|
||||
Next, modify (and possibly copy over from ``mediagoblin.ini``) your
|
||||
``mediagoblin_local.ini``. Uncomment this line in the ``[mediagoblin]``
|
||||
section::
|
||||
|
||||
media_types = mediagoblin.media_types.image, mediagoblin.media_types.video
|
||||
|
||||
Now you should be able to submit videos, and mediagoblin should
|
||||
transcode them.
|
||||
|
||||
Note that you almost certainly want to separate Celery from the normal
|
||||
paste process or your users will probably find that their connections
|
||||
time out as the video transcodes. To set that up, check out the
|
||||
":doc:`production-deployments`" section of this manual.
|
81
docs/source/production-deployments.rst
Normal file
81
docs/source/production-deployments.rst
Normal file
@ -0,0 +1,81 @@
|
||||
=========================================
|
||||
Considerations for Production Deployments
|
||||
=========================================
|
||||
|
||||
This document contains a number of suggestions for deploying
|
||||
MediaGoblin in actual production environments. Consider
|
||||
":doc:`deploying`" for a basic overview of how to deploy MediaGoblin.
|
||||
|
||||
Deploy with Paste
|
||||
-----------------
|
||||
|
||||
The instance configured with ``./lazyserver.sh`` is not ideal for a
|
||||
production MediaGoblin deployment. Ideally, you should be able to use
|
||||
an "init" or "control" script to launch and restart the MediaGoblin
|
||||
process.
|
||||
|
||||
Use the following command as the basis for such a script: ::
|
||||
|
||||
CELERY_ALWAYS_EAGER=true \
|
||||
/srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
|
||||
/srv/mediagoblin.example.org/mediagoblin/paste.ini \
|
||||
--pid-file=/var/run/mediagoblin.pid \
|
||||
--server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
|
||||
|
||||
The above configuration places MediaGoblin in "always eager" mode
|
||||
with Celery, this means that submissions of content will be processed
|
||||
synchronously, and the user will advance to the next page only after
|
||||
processing is complete. If we take Celery out of "always eager mode,"
|
||||
the user will be able to immediately return to the MediaGoblin site
|
||||
while processing is ongoing. In these cases, use the following command
|
||||
as the basis for your script: ::
|
||||
|
||||
CELERY_ALWAYS_EAGER=false \
|
||||
/srv/mediagoblin.example.org/mediagoblin/bin/paster serve \
|
||||
/srv/mediagoblin.example.org/mediagoblin/paste.ini \
|
||||
--pid-file=/var/run/mediagoblin.pid \
|
||||
--server-name=fcgi fcgi_host=127.0.0.1 fcgi_port=26543
|
||||
|
||||
Separate Celery
|
||||
---------------
|
||||
|
||||
While the ``./lazyserer.sh`` configuration provides an efficient way to
|
||||
start using a MediaGoblin instance, it is not suitable for production
|
||||
deployments for several reasons:
|
||||
|
||||
In nearly every scenario, work on the Celery queue will need to
|
||||
balance with the demands of other processes, and cannot proceed
|
||||
synchronously. This is a particularly relevant problem if you use
|
||||
MediaGoblin to host video content. Processing with Celery ought to be
|
||||
operationally separate from the MediaGoblin application itself, this
|
||||
simplifies management and support better workload distribution.
|
||||
|
||||
Basically, if you're doing anything beyond a trivial workload, such as
|
||||
image hosting for a small set of users, or have limited media types
|
||||
such as "ASCII art" or icon sharing, you will need to run ``celeryd``
|
||||
as a separate process.
|
||||
|
||||
Build an :ref:`init script <init-script>` around the following
|
||||
command::
|
||||
|
||||
CELERY_CONFIG_MODULE=mediagoblin.init.celery.from_celery ./bin/celeryd
|
||||
|
||||
Modify your existing MediaGoblin and application init scripts, if
|
||||
necessary, to prevent them from starting their own ``celeryd``
|
||||
processes.
|
||||
|
||||
.. _init-script:
|
||||
|
||||
Use an Init Script
|
||||
------------------
|
||||
|
||||
Look in your system's ``/etc/init.d/`` or ``/etc/rc.d/`` directory for
|
||||
examples of how to build scripts that will start, stop, and restart
|
||||
MediaGoblin and Celery. These scripts will vary by
|
||||
distribution/operating system. In the future, MediaGoblin will provide
|
||||
example scripts as examples.
|
||||
|
||||
.. TODO insert init script here
|
||||
.. TODO are additional concerns ?
|
||||
.. Other Concerns
|
||||
.. --------------
|
29
docs/source/themes/mg/layout.html
Normal file
29
docs/source/themes/mg/layout.html
Normal file
@ -0,0 +1,29 @@
|
||||
{#
|
||||
default/layout.html
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
Sphinx layout template for the default theme.
|
||||
|
||||
:copyright: Copyright 2007-2010 by the Sphinx team, see AUTHORS.
|
||||
:license: BSD, see LICENSE for details.
|
||||
#}
|
||||
{% extends "basic/layout.html" %}
|
||||
|
||||
{% if theme_collapsiblesidebar|tobool %}
|
||||
{% set script_files = script_files + ['_static/sidebar.js'] %}
|
||||
{% endif %}
|
||||
|
||||
{%- block footer %}
|
||||
<div class="footer">
|
||||
<div>
|
||||
|
||||
MediaGoblin documentation released into the public domain via <a href="http://creativecommons.org/publicdomain/zero/1.0/">CC0</a>.
|
||||
|
||||
{%- if last_updated %}
|
||||
{% trans last_updated=last_updated|e %}Last updated on {{ last_updated }}.{% endtrans %}
|
||||
{%- endif %}
|
||||
|
||||
{% trans sphinx_version=sphinx_version|e %}Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> {{ sphinx_version }}.{% endtrans %}
|
||||
</div>
|
||||
</div>
|
||||
{%- endblock %}
|
BIN
docs/source/themes/mg/static/fonts/Lato-Bold.ttf
Normal file
BIN
docs/source/themes/mg/static/fonts/Lato-Bold.ttf
Normal file
Binary file not shown.
BIN
docs/source/themes/mg/static/fonts/Lato-BoldItalic.ttf
Normal file
BIN
docs/source/themes/mg/static/fonts/Lato-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
docs/source/themes/mg/static/fonts/Lato-Italic.ttf
Normal file
BIN
docs/source/themes/mg/static/fonts/Lato-Italic.ttf
Normal file
Binary file not shown.
BIN
docs/source/themes/mg/static/fonts/Lato-Regular.ttf
Normal file
BIN
docs/source/themes/mg/static/fonts/Lato-Regular.ttf
Normal file
Binary file not shown.
97
docs/source/themes/mg/static/fonts/OFL_1.1.txt
Normal file
97
docs/source/themes/mg/static/fonts/OFL_1.1.txt
Normal file
@ -0,0 +1,97 @@
|
||||
Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
|
||||
with Reserved Font Name <Reserved Font Name>.
|
||||
Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
|
||||
with Reserved Font Name <additional Reserved Font Name>.
|
||||
Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
BIN
docs/source/themes/mg/static/logo_docs.png
Normal file
BIN
docs/source/themes/mg/static/logo_docs.png
Normal file
Binary file not shown.
After Width: | Height: | Size: 6.5 KiB |
161
docs/source/themes/mg/static/mg.css
Normal file
161
docs/source/themes/mg/static/mg.css
Normal file
@ -0,0 +1,161 @@
|
||||
/*
|
||||
|
||||
MediaGoblin theme - MediaGoblin-style Sphinx documentation theme
|
||||
|
||||
Written in 2012 by Jef van Schendel <mail@jefvanschendel.nl>
|
||||
|
||||
To the extent possible under law, the author(s) have dedicated all copyright and related and neighboring rights to this software to the public domain worldwide. This software is distributed without any warranty.
|
||||
|
||||
You should have received a copy of the CC0 Public Domain Dedication along with this software. If not, see <http://creativecommons.org/publicdomain/zero/1.0/>.
|
||||
|
||||
*/
|
||||
|
||||
@import url("basic.css");
|
||||
|
||||
/* text fonts and styles */
|
||||
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: normal;
|
||||
font-weight: 700;
|
||||
src: local('Lato Bold'), local('Lato-Bold'), url('fonts/Lato-Bold.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: italic;
|
||||
font-weight: 400;
|
||||
src: local('Lato Italic'), local('Lato-Italic'), url('fonts/Lato-Italic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: italic;
|
||||
font-weight: 700;
|
||||
src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url('fonts/Lato-BoldItalic.ttf') format('truetype');
|
||||
}
|
||||
@font-face {
|
||||
font-family: 'Lato';
|
||||
font-style: normal;
|
||||
font-weight: 400;
|
||||
src: local('Lato Regular'), local('Lato-Regular'), url('fonts/Lato-Regular.ttf') format('truetype');
|
||||
}
|
||||
|
||||
body {
|
||||
font: 16px 'Lato',Helvetica,Arial,sans-serif;
|
||||
background-color: #FCFCFC;
|
||||
color: #3C3C3C;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
h1, h2, h3, h4, h5, h6 {
|
||||
border-bottom: 1px solid #CCCCCC;
|
||||
background: none;
|
||||
color: black;
|
||||
font-weight: bold;
|
||||
padding-bottom: 0.17em;
|
||||
padding-top: 0.5em;
|
||||
}
|
||||
|
||||
h1 {
|
||||
font-size: 1.875em;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 1.375em;
|
||||
}
|
||||
|
||||
h3, h4, h5, h6 {
|
||||
font-size: 1.125em;
|
||||
}
|
||||
|
||||
p {
|
||||
font-weight: normal;
|
||||
margin: 0.4em 0 0.5em;
|
||||
}
|
||||
|
||||
a {
|
||||
color: #499776;
|
||||
}
|
||||
|
||||
a:visited {
|
||||
color: #2A5744;
|
||||
}
|
||||
|
||||
a:active {
|
||||
color: #65D1A3;
|
||||
}
|
||||
|
||||
h1 a, h2 a, h3 a, h4 a, h5 a, h6 a {
|
||||
text-decoration: none;
|
||||
}
|
||||
|
||||
div.topic, pre {
|
||||
background-color: #F1F1F1;
|
||||
border: 1px dashed #ccc;
|
||||
color: black;
|
||||
line-height: 1.1em;
|
||||
padding: 1em;
|
||||
}
|
||||
|
||||
code, tt {
|
||||
font: 14px monospace,"Courier New";
|
||||
background-color: #FFFFDD;
|
||||
border: thin solid #bbb;
|
||||
padding-left: 5px;
|
||||
padding-right: 5px;
|
||||
}
|
||||
|
||||
pre {
|
||||
font: 14px monospace,"Courier New";
|
||||
}
|
||||
|
||||
div.related a, div.related a:visited, div.related a:active {
|
||||
color: #86D4B1;
|
||||
}
|
||||
|
||||
/* layout */
|
||||
|
||||
div.documentwrapper {
|
||||
float: left;
|
||||
width: 100%;
|
||||
}
|
||||
|
||||
div.bodywrapper {
|
||||
margin: 0 0 0 270px;
|
||||
}
|
||||
|
||||
div.body {
|
||||
padding: 0 20px 30px 20px;
|
||||
}
|
||||
|
||||
div.footer {
|
||||
width: 100%;
|
||||
padding: 9px 0 9px 0;
|
||||
text-align: center;
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
div.sphinxsidebar {
|
||||
width: 240px;
|
||||
}
|
||||
|
||||
div.sphinxsidebarwrapper {
|
||||
padding: 10px 5px 0 30px;
|
||||
}
|
||||
|
||||
div.sphinxsidebar ul {
|
||||
margin: 10px 10px 10px 0;
|
||||
padding: 0;
|
||||
}
|
||||
|
||||
div.related {
|
||||
line-height: 30px;
|
||||
font-size: 90%;
|
||||
width: 100%;
|
||||
background-color: #161616;
|
||||
color: #C3C3C3;
|
||||
}
|
||||
|
||||
p.logo {
|
||||
margin-top: 30px;
|
||||
}
|
5
docs/source/themes/mg/theme.conf
Normal file
5
docs/source/themes/mg/theme.conf
Normal file
@ -0,0 +1,5 @@
|
||||
[theme]
|
||||
inherit = basic
|
||||
stylesheet = mg.css
|
||||
pygments_style = sphinx
|
||||
|
@ -1,447 +0,0 @@
|
||||
/*
|
||||
960 Grid System ~ Core CSS.
|
||||
Learn more ~ http://960.gs/
|
||||
|
||||
Licensed under GPL and MIT.
|
||||
*/
|
||||
|
||||
/*
|
||||
Forces backgrounds to span full width,
|
||||
even if there is horizontal scrolling.
|
||||
Increase this if your layout is wider.
|
||||
|
||||
Note: IE6 works fine without this fix.
|
||||
*/
|
||||
|
||||
body {
|
||||
min-width: 960px;
|
||||
}
|
||||
|
||||
/* Container
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.container_16 {
|
||||
margin-left: auto;
|
||||
margin-right: auto;
|
||||
width: 960px;
|
||||
}
|
||||
|
||||
/* Grid >> Global
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.grid_1,
|
||||
.grid_2,
|
||||
.grid_3,
|
||||
.grid_4,
|
||||
.grid_5,
|
||||
.grid_6,
|
||||
.grid_7,
|
||||
.grid_8,
|
||||
.grid_9,
|
||||
.grid_10,
|
||||
.grid_11,
|
||||
.grid_12,
|
||||
.grid_13,
|
||||
.grid_14,
|
||||
.grid_15,
|
||||
.grid_16 {
|
||||
display: inline;
|
||||
float: left;
|
||||
position: relative;
|
||||
margin-left: 10px;
|
||||
margin-right: 10px;
|
||||
}
|
||||
|
||||
.push_1, .pull_1,
|
||||
.push_2, .pull_2,
|
||||
.push_3, .pull_3,
|
||||
.push_4, .pull_4,
|
||||
.push_5, .pull_5,
|
||||
.push_6, .pull_6,
|
||||
.push_7, .pull_7,
|
||||
.push_8, .pull_8,
|
||||
.push_9, .pull_9,
|
||||
.push_10, .pull_10,
|
||||
.push_11, .pull_11,
|
||||
.push_12, .pull_12,
|
||||
.push_13, .pull_13,
|
||||
.push_14, .pull_14,
|
||||
.push_15, .pull_15,
|
||||
.push_16, .pull_16 {
|
||||
position: relative;
|
||||
}
|
||||
|
||||
/* Grid >> Children (Alpha ~ First, Omega ~ Last)
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.alpha {
|
||||
margin-left: 0;
|
||||
}
|
||||
|
||||
.omega {
|
||||
margin-right: 0;
|
||||
}
|
||||
|
||||
/* Grid >> 16 Columns
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.container_16 .grid_1 {
|
||||
width: 40px;
|
||||
}
|
||||
|
||||
.container_16 .grid_2 {
|
||||
width: 100px;
|
||||
}
|
||||
|
||||
.container_16 .grid_3 {
|
||||
width: 160px;
|
||||
}
|
||||
|
||||
.container_16 .grid_4 {
|
||||
width: 220px;
|
||||
}
|
||||
|
||||
.container_16 .grid_5 {
|
||||
width: 280px;
|
||||
}
|
||||
|
||||
.container_16 .grid_6 {
|
||||
width: 340px;
|
||||
}
|
||||
|
||||
.container_16 .grid_7 {
|
||||
width: 400px;
|
||||
}
|
||||
|
||||
.container_16 .grid_8 {
|
||||
width: 460px;
|
||||
}
|
||||
|
||||
.container_16 .grid_9 {
|
||||
width: 520px;
|
||||
}
|
||||
|
||||
.container_16 .grid_10 {
|
||||
width: 580px;
|
||||
}
|
||||
|
||||
.container_16 .grid_11 {
|
||||
width: 640px;
|
||||
}
|
||||
|
||||
.container_16 .grid_12 {
|
||||
width: 700px;
|
||||
}
|
||||
|
||||
.container_16 .grid_13 {
|
||||
width: 760px;
|
||||
}
|
||||
|
||||
.container_16 .grid_14 {
|
||||
width: 820px;
|
||||
}
|
||||
|
||||
.container_16 .grid_15 {
|
||||
width: 880px;
|
||||
}
|
||||
|
||||
.container_16 .grid_16 {
|
||||
width: 940px;
|
||||
}
|
||||
|
||||
/* Prefix Extra Space >> 16 Columns
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.container_16 .prefix_1 {
|
||||
padding-left: 60px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_2 {
|
||||
padding-left: 120px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_3 {
|
||||
padding-left: 180px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_4 {
|
||||
padding-left: 240px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_5 {
|
||||
padding-left: 300px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_6 {
|
||||
padding-left: 360px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_7 {
|
||||
padding-left: 420px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_8 {
|
||||
padding-left: 480px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_9 {
|
||||
padding-left: 540px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_10 {
|
||||
padding-left: 600px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_11 {
|
||||
padding-left: 660px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_12 {
|
||||
padding-left: 720px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_13 {
|
||||
padding-left: 780px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_14 {
|
||||
padding-left: 840px;
|
||||
}
|
||||
|
||||
.container_16 .prefix_15 {
|
||||
padding-left: 900px;
|
||||
}
|
||||
|
||||
/* Suffix Extra Space >> 16 Columns
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.container_16 .suffix_1 {
|
||||
padding-right: 60px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_2 {
|
||||
padding-right: 120px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_3 {
|
||||
padding-right: 180px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_4 {
|
||||
padding-right: 240px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_5 {
|
||||
padding-right: 300px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_6 {
|
||||
padding-right: 360px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_7 {
|
||||
padding-right: 420px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_8 {
|
||||
padding-right: 480px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_9 {
|
||||
padding-right: 540px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_10 {
|
||||
padding-right: 600px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_11 {
|
||||
padding-right: 660px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_12 {
|
||||
padding-right: 720px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_13 {
|
||||
padding-right: 780px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_14 {
|
||||
padding-right: 840px;
|
||||
}
|
||||
|
||||
.container_16 .suffix_15 {
|
||||
padding-right: 900px;
|
||||
}
|
||||
|
||||
/* Push Space >> 16 Columns
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.container_16 .push_1 {
|
||||
left: 60px;
|
||||
}
|
||||
|
||||
.container_16 .push_2 {
|
||||
left: 120px;
|
||||
}
|
||||
|
||||
.container_16 .push_3 {
|
||||
left: 180px;
|
||||
}
|
||||
|
||||
.container_16 .push_4 {
|
||||
left: 240px;
|
||||
}
|
||||
|
||||
.container_16 .push_5 {
|
||||
left: 300px;
|
||||
}
|
||||
|
||||
.container_16 .push_6 {
|
||||
left: 360px;
|
||||
}
|
||||
|
||||
.container_16 .push_7 {
|
||||
left: 420px;
|
||||
}
|
||||
|
||||
.container_16 .push_8 {
|
||||
left: 480px;
|
||||
}
|
||||
|
||||
.container_16 .push_9 {
|
||||
left: 540px;
|
||||
}
|
||||
|
||||
.container_16 .push_10 {
|
||||
left: 600px;
|
||||
}
|
||||
|
||||
.container_16 .push_11 {
|
||||
left: 660px;
|
||||
}
|
||||
|
||||
.container_16 .push_12 {
|
||||
left: 720px;
|
||||
}
|
||||
|
||||
.container_16 .push_13 {
|
||||
left: 780px;
|
||||
}
|
||||
|
||||
.container_16 .push_14 {
|
||||
left: 840px;
|
||||
}
|
||||
|
||||
.container_16 .push_15 {
|
||||
left: 900px;
|
||||
}
|
||||
|
||||
/* Pull Space >> 16 Columns
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
.container_16 .pull_1 {
|
||||
left: -60px;
|
||||
}
|
||||
|
||||
.container_16 .pull_2 {
|
||||
left: -120px;
|
||||
}
|
||||
|
||||
.container_16 .pull_3 {
|
||||
left: -180px;
|
||||
}
|
||||
|
||||
.container_16 .pull_4 {
|
||||
left: -240px;
|
||||
}
|
||||
|
||||
.container_16 .pull_5 {
|
||||
left: -300px;
|
||||
}
|
||||
|
||||
.container_16 .pull_6 {
|
||||
left: -360px;
|
||||
}
|
||||
|
||||
.container_16 .pull_7 {
|
||||
left: -420px;
|
||||
}
|
||||
|
||||
.container_16 .pull_8 {
|
||||
left: -480px;
|
||||
}
|
||||
|
||||
.container_16 .pull_9 {
|
||||
left: -540px;
|
||||
}
|
||||
|
||||
.container_16 .pull_10 {
|
||||
left: -600px;
|
||||
}
|
||||
|
||||
.container_16 .pull_11 {
|
||||
left: -660px;
|
||||
}
|
||||
|
||||
.container_16 .pull_12 {
|
||||
left: -720px;
|
||||
}
|
||||
|
||||
.container_16 .pull_13 {
|
||||
left: -780px;
|
||||
}
|
||||
|
||||
.container_16 .pull_14 {
|
||||
left: -840px;
|
||||
}
|
||||
|
||||
.container_16 .pull_15 {
|
||||
left: -900px;
|
||||
}
|
||||
|
||||
/* `Clear Floated Elements
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
/* http://sonspring.com/journal/clearing-floats */
|
||||
|
||||
.clear {
|
||||
clear: both;
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/* http://www.yuiblog.com/blog/2010/09/27/clearfix-reloaded-overflowhidden-demystified */
|
||||
|
||||
.clearfix:before,
|
||||
.clearfix:after,
|
||||
.container_16:before,
|
||||
.container_16:after {
|
||||
content: '.';
|
||||
display: block;
|
||||
overflow: hidden;
|
||||
visibility: hidden;
|
||||
font-size: 0;
|
||||
line-height: 0;
|
||||
width: 0;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
.clearfix:after,
|
||||
.container_16:after {
|
||||
clear: both;
|
||||
}
|
||||
|
||||
/*
|
||||
The following zoom:1 rule is specifically for IE6 + IE7.
|
||||
Move to separate stylesheet if invalid CSS is a problem.
|
||||
*/
|
||||
|
||||
.clearfix,
|
||||
.container_16 {
|
||||
zoom: 1;
|
||||
}
|
@ -1,54 +0,0 @@
|
||||
===============
|
||||
960 GRID SYSTEM
|
||||
===============
|
||||
|
||||
Created by Nathan Smith. See the official site for more info: http://960.gs/
|
||||
|
||||
============================================================================
|
||||
|
||||
To install the Adobe Fireworks extension, simply double-click the *.mxp file
|
||||
included in the /fireworks_extension directory. If you are running Windows 7
|
||||
you will need admin permissions in order to install this extension properly.
|
||||
|
||||
============================================================================
|
||||
|
||||
Thank you for downloading the 960 Grid System. I hope it helps to streamline
|
||||
web development workflow. Enclosed in the bundle are printable sketch sheets
|
||||
and template files for Adobe Fireworks and Photoshop, OmniGraffle and Visio.
|
||||
|
||||
Also included is a lightweight CSS file, which contains the grid dimensions.
|
||||
To use this file, simply include the 960.css in the <head> of the HTML page.
|
||||
You may also use the reset.css and text.css files, or opt to leave them out.
|
||||
Here is an example of the XHTML code necessary to incorporate the CSS files:
|
||||
|
||||
<head>
|
||||
<link rel="stylesheet" type="text/css" media="all" href="css/reset.css" />
|
||||
<link rel="stylesheet" type="text/css" media="all" href="css/text.css" />
|
||||
<link rel="stylesheet" type="text/css" media="all" href="css/960.css" />
|
||||
</head>
|
||||
|
||||
It is worth noting that these styles do not automatically make up a finished
|
||||
site design. They are simply a starting point, ideally for rapid prototyping
|
||||
or as a basis for creating your own designs. You should not feel constrained
|
||||
by the way I have built the initial code. If you disagree with how something
|
||||
has been done, feel free to revise it for the needs of your particular site.
|
||||
|
||||
The files in the 960 Grid System are free of charge, licensed under MIT/GPL.
|
||||
|
||||
============================================================================
|
||||
|
||||
Note that if you are building a site in a language which reads from right to
|
||||
left, use the CSS files that end in "_rtl.css" instead. Denote the language:
|
||||
|
||||
<html lang="..." dir="rtl">
|
||||
|
||||
Be sure to replace "..." with the appropriate two-letter abbreviation of the
|
||||
language you are using. Example: lang="he" for Hebrew, lang="ar" for Arabic.
|
||||
|
||||
============================================================================
|
||||
|
||||
GPL license:
|
||||
http://www.gnu.org/licenses/gpl.html
|
||||
|
||||
MIT license:
|
||||
http://www.opensource.org/licenses/mit-license.php
|
@ -1,202 +0,0 @@
|
||||
/* `XHTML, HTML4, HTML5 Reset
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
a,
|
||||
abbr,
|
||||
acronym,
|
||||
address,
|
||||
applet,
|
||||
article,
|
||||
aside,
|
||||
audio,
|
||||
b,
|
||||
big,
|
||||
blockquote,
|
||||
body,
|
||||
canvas,
|
||||
caption,
|
||||
center,
|
||||
cite,
|
||||
code,
|
||||
dd,
|
||||
del,
|
||||
details,
|
||||
dfn,
|
||||
dialog,
|
||||
div,
|
||||
dl,
|
||||
dt,
|
||||
em,
|
||||
embed,
|
||||
fieldset,
|
||||
figcaption,
|
||||
figure,
|
||||
font,
|
||||
footer,
|
||||
form,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
header,
|
||||
hgroup,
|
||||
hr,
|
||||
html,
|
||||
i,
|
||||
iframe,
|
||||
img,
|
||||
ins,
|
||||
kbd,
|
||||
label,
|
||||
legend,
|
||||
li,
|
||||
mark,
|
||||
menu,
|
||||
meter,
|
||||
nav,
|
||||
object,
|
||||
ol,
|
||||
output,
|
||||
p,
|
||||
pre,
|
||||
progress,
|
||||
q,
|
||||
rp,
|
||||
rt,
|
||||
ruby,
|
||||
s,
|
||||
samp,
|
||||
section,
|
||||
small,
|
||||
span,
|
||||
strike,
|
||||
strong,
|
||||
sub,
|
||||
summary,
|
||||
sup,
|
||||
table,
|
||||
tbody,
|
||||
td,
|
||||
tfoot,
|
||||
th,
|
||||
thead,
|
||||
time,
|
||||
tr,
|
||||
tt,
|
||||
u,
|
||||
ul,
|
||||
var,
|
||||
video,
|
||||
xmp {
|
||||
border: 0;
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
font-size: 100%;
|
||||
}
|
||||
|
||||
html,
|
||||
body {
|
||||
height: 100%;
|
||||
}
|
||||
|
||||
article,
|
||||
aside,
|
||||
details,
|
||||
figcaption,
|
||||
figure,
|
||||
footer,
|
||||
header,
|
||||
hgroup,
|
||||
menu,
|
||||
nav,
|
||||
section {
|
||||
/*
|
||||
Override the default (display: inline) for
|
||||
browsers that do not recognize HTML5 tags.
|
||||
|
||||
IE8 (and lower) requires a shiv:
|
||||
http://ejohn.org/blog/html5-shiv
|
||||
*/
|
||||
display: block;
|
||||
}
|
||||
|
||||
b,
|
||||
strong {
|
||||
/*
|
||||
Makes browsers agree.
|
||||
IE + Opera = font-weight: bold.
|
||||
Gecko + WebKit = font-weight: bolder.
|
||||
*/
|
||||
font-weight: bold;
|
||||
}
|
||||
|
||||
img {
|
||||
color: transparent;
|
||||
font-size: 0;
|
||||
vertical-align: middle;
|
||||
/*
|
||||
For IE.
|
||||
http://css-tricks.com/ie-fix-bicubic-scaling-for-images
|
||||
*/
|
||||
-ms-interpolation-mode: bicubic;
|
||||
}
|
||||
|
||||
li {
|
||||
/*
|
||||
For IE6 + IE7.
|
||||
*/
|
||||
display: list-item;
|
||||
}
|
||||
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
||||
th,
|
||||
td,
|
||||
caption {
|
||||
font-weight: normal;
|
||||
vertical-align: top;
|
||||
text-align: left;
|
||||
}
|
||||
|
||||
q {
|
||||
quotes: none;
|
||||
}
|
||||
|
||||
q:before,
|
||||
q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup,
|
||||
small {
|
||||
font-size: 75%;
|
||||
}
|
||||
|
||||
sub,
|
||||
sup {
|
||||
line-height: 0;
|
||||
position: relative;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
|
||||
sub {
|
||||
bottom: -0.25em;
|
||||
}
|
||||
|
||||
sup {
|
||||
top: -0.5em;
|
||||
}
|
||||
|
||||
svg {
|
||||
/*
|
||||
For IE9.
|
||||
*/
|
||||
overflow: hidden;
|
||||
}
|
@ -1,86 +0,0 @@
|
||||
/*
|
||||
960 Grid System ~ Text CSS.
|
||||
Learn more ~ http://960.gs/
|
||||
|
||||
Licensed under GPL and MIT.
|
||||
*/
|
||||
|
||||
/* `Basic HTML
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
body {
|
||||
font: 13px/1.5 'Helvetica Neue', Arial, 'Liberation Sans', FreeSans, sans-serif;
|
||||
}
|
||||
|
||||
pre,
|
||||
code {
|
||||
font-family: 'DejaVu Sans Mono', Monaco, Consolas, monospace;
|
||||
}
|
||||
|
||||
hr {
|
||||
border: 0 #ccc solid;
|
||||
border-top-width: 1px;
|
||||
clear: both;
|
||||
height: 0;
|
||||
}
|
||||
|
||||
/* `Headings
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
h1 {
|
||||
font-size: 25px;
|
||||
}
|
||||
|
||||
h2 {
|
||||
font-size: 23px;
|
||||
}
|
||||
|
||||
h3 {
|
||||
font-size: 21px;
|
||||
}
|
||||
|
||||
h4 {
|
||||
font-size: 19px;
|
||||
}
|
||||
|
||||
h5 {
|
||||
font-size: 17px;
|
||||
}
|
||||
|
||||
h6 {
|
||||
font-size: 15px;
|
||||
}
|
||||
|
||||
/* `Spacing
|
||||
----------------------------------------------------------------------------------------------------*/
|
||||
|
||||
ol {
|
||||
list-style: decimal;
|
||||
}
|
||||
|
||||
ul {
|
||||
list-style: disc;
|
||||
}
|
||||
|
||||
li {
|
||||
margin-left: 30px;
|
||||
}
|
||||
|
||||
p,
|
||||
dl,
|
||||
hr,
|
||||
h1,
|
||||
h2,
|
||||
h3,
|
||||
h4,
|
||||
h5,
|
||||
h6,
|
||||
ol,
|
||||
ul,
|
||||
pre,
|
||||
table,
|
||||
address,
|
||||
fieldset,
|
||||
figure {
|
||||
margin-bottom: 20px;
|
||||
}
|
3
extlib/html5shiv/html5shiv.js
vendored
Normal file
3
extlib/html5shiv/html5shiv.js
vendored
Normal file
@ -0,0 +1,3 @@
|
||||
// HTML5 Shiv v3 | @jon_neal @afarkas @rem | MIT/GPL2 Licensed
|
||||
// Uncompressed source: https://github.com/aFarkas/html5shiv
|
||||
(function(a,b){var c=function(a){return a.innerHTML="<x-element></x-element>",a.childNodes.length===1}(b.createElement("a")),d=function(a,b,c){return b.appendChild(a),(c=(c?c(a):a.currentStyle).display)&&b.removeChild(a)&&c==="block"}(b.createElement("nav"),b.documentElement,a.getComputedStyle),e={elements:"abbr article aside audio bdi canvas data datalist details figcaption figure footer header hgroup mark meter nav output progress section summary time video".split(" "),shivDocument:function(a){a=a||b;if(a.documentShived)return;a.documentShived=!0;var f=a.createElement,g=a.createDocumentFragment,h=a.getElementsByTagName("head")[0],i=function(a){f(a)};c||(e.elements.join(" ").replace(/\w+/g,i),a.createElement=function(a){var b=f(a);return b.canHaveChildren&&e.shivDocument(b.document),b},a.createDocumentFragment=function(){return e.shivDocument(g())});if(!d&&h){var j=f("div");j.innerHTML=["x<style>","article,aside,details,figcaption,figure,footer,header,hgroup,nav,section{display:block}","audio{display:none}","canvas,video{display:inline-block;*display:inline;*zoom:1}","[hidden]{display:none}audio[controls]{display:inline-block;*display:inline;*zoom:1}","mark{background:#FF0;color:#000}","</style>"].join(""),h.insertBefore(j.lastChild,h.firstChild)}return a}};e.shivDocument(b),a.html5=e})(this,document)
|
4
extlib/inconsolata/INFO.txt
Normal file
4
extlib/inconsolata/INFO.txt
Normal file
@ -0,0 +1,4 @@
|
||||
Inconsolata
|
||||
-----------
|
||||
|
||||
This font is found at http://www.levien.com/type/myfonts/inconsolata.html
|
BIN
extlib/inconsolata/Inconsolata.otf
Normal file
BIN
extlib/inconsolata/Inconsolata.otf
Normal file
Binary file not shown.
1088
extlib/inconsolata/Inconsolata.pfa
Normal file
1088
extlib/inconsolata/Inconsolata.pfa
Normal file
File diff suppressed because it is too large
Load Diff
5730
extlib/inconsolata/Inconsolata.sfd
Normal file
5730
extlib/inconsolata/Inconsolata.sfd
Normal file
File diff suppressed because it is too large
Load Diff
97
extlib/inconsolata/OFL_1.1.txt
Normal file
97
extlib/inconsolata/OFL_1.1.txt
Normal file
@ -0,0 +1,97 @@
|
||||
Copyright (c) <dates>, <Copyright Holder> (<URL|email>),
|
||||
with Reserved Font Name <Reserved Font Name>.
|
||||
Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>),
|
||||
with Reserved Font Name <additional Reserved Font Name>.
|
||||
Copyright (c) <dates>, <additional Copyright Holder> (<URL|email>).
|
||||
|
||||
This Font Software is licensed under the SIL Open Font License, Version 1.1.
|
||||
This license is copied below, and is also available with a FAQ at:
|
||||
http://scripts.sil.org/OFL
|
||||
|
||||
|
||||
-----------------------------------------------------------
|
||||
SIL OPEN FONT LICENSE Version 1.1 - 26 February 2007
|
||||
-----------------------------------------------------------
|
||||
|
||||
PREAMBLE
|
||||
The goals of the Open Font License (OFL) are to stimulate worldwide
|
||||
development of collaborative font projects, to support the font creation
|
||||
efforts of academic and linguistic communities, and to provide a free and
|
||||
open framework in which fonts may be shared and improved in partnership
|
||||
with others.
|
||||
|
||||
The OFL allows the licensed fonts to be used, studied, modified and
|
||||
redistributed freely as long as they are not sold by themselves. The
|
||||
fonts, including any derivative works, can be bundled, embedded,
|
||||
redistributed and/or sold with any software provided that any reserved
|
||||
names are not used by derivative works. The fonts and derivatives,
|
||||
however, cannot be released under any other type of license. The
|
||||
requirement for fonts to remain under this license does not apply
|
||||
to any document created using the fonts or their derivatives.
|
||||
|
||||
DEFINITIONS
|
||||
"Font Software" refers to the set of files released by the Copyright
|
||||
Holder(s) under this license and clearly marked as such. This may
|
||||
include source files, build scripts and documentation.
|
||||
|
||||
"Reserved Font Name" refers to any names specified as such after the
|
||||
copyright statement(s).
|
||||
|
||||
"Original Version" refers to the collection of Font Software components as
|
||||
distributed by the Copyright Holder(s).
|
||||
|
||||
"Modified Version" refers to any derivative made by adding to, deleting,
|
||||
or substituting -- in part or in whole -- any of the components of the
|
||||
Original Version, by changing formats or by porting the Font Software to a
|
||||
new environment.
|
||||
|
||||
"Author" refers to any designer, engineer, programmer, technical
|
||||
writer or other person who contributed to the Font Software.
|
||||
|
||||
PERMISSION & CONDITIONS
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of the Font Software, to use, study, copy, merge, embed, modify,
|
||||
redistribute, and sell modified and unmodified copies of the Font
|
||||
Software, subject to the following conditions:
|
||||
|
||||
1) Neither the Font Software nor any of its individual components,
|
||||
in Original or Modified Versions, may be sold by itself.
|
||||
|
||||
2) Original or Modified Versions of the Font Software may be bundled,
|
||||
redistributed and/or sold with any software, provided that each copy
|
||||
contains the above copyright notice and this license. These can be
|
||||
included either as stand-alone text files, human-readable headers or
|
||||
in the appropriate machine-readable metadata fields within text or
|
||||
binary files as long as those fields can be easily viewed by the user.
|
||||
|
||||
3) No Modified Version of the Font Software may use the Reserved Font
|
||||
Name(s) unless explicit written permission is granted by the corresponding
|
||||
Copyright Holder. This restriction only applies to the primary font name as
|
||||
presented to the users.
|
||||
|
||||
4) The name(s) of the Copyright Holder(s) or the Author(s) of the Font
|
||||
Software shall not be used to promote, endorse or advertise any
|
||||
Modified Version, except to acknowledge the contribution(s) of the
|
||||
Copyright Holder(s) and the Author(s) or with their explicit written
|
||||
permission.
|
||||
|
||||
5) The Font Software, modified or unmodified, in part or in whole,
|
||||
must be distributed entirely under this license, and must not be
|
||||
distributed under any other license. The requirement for fonts to
|
||||
remain under this license does not apply to any document created
|
||||
using the Font Software.
|
||||
|
||||
TERMINATION
|
||||
This license becomes null and void if any of the above conditions are
|
||||
not met.
|
||||
|
||||
DISCLAIMER
|
||||
THE FONT SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO ANY WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT
|
||||
OF COPYRIGHT, PATENT, TRADEMARK, OR OTHER RIGHT. IN NO EVENT SHALL THE
|
||||
COPYRIGHT HOLDER BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
|
||||
INCLUDING ANY GENERAL, SPECIAL, INDIRECT, INCIDENTAL, OR CONSEQUENTIAL
|
||||
DAMAGES, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
|
||||
FROM, OUT OF THE USE OR INABILITY TO USE THE FONT SOFTWARE OR FROM
|
||||
OTHER DEALINGS IN THE FONT SOFTWARE.
|
BIN
extlib/inconsolata/textest.pdf
Normal file
BIN
extlib/inconsolata/textest.pdf
Normal file
Binary file not shown.
20
extlib/jquery/MIT.txt
Normal file
20
extlib/jquery/MIT.txt
Normal file
@ -0,0 +1,20 @@
|
||||
Copyright (c) <year> <copyright holders>
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
"Software"), to deal in the Software without restriction, including
|
||||
without limitation the rights to use, copy, modify, merge, publish,
|
||||
distribute, sublicense, and/or sell copies of the Software, and to
|
||||
permit persons to whom the Software is furnished to do so, subject to
|
||||
the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be
|
||||
included in all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
|
||||
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
|
||||
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
|
||||
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
|
||||
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
|
||||
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
4
extlib/jquery/jquery.js
vendored
Normal file
4
extlib/jquery/jquery.js
vendored
Normal file
File diff suppressed because one or more lines are too long
49
extlib/reset/reset.css
Normal file
49
extlib/reset/reset.css
Normal file
@ -0,0 +1,49 @@
|
||||
/* http://meyerweb.com/eric/tools/css/reset/
|
||||
v2.0 | 20110126
|
||||
License: none (public domain)
|
||||
*/
|
||||
|
||||
html, body, div, span, applet, object, iframe,
|
||||
h1, h2, h3, h4, h5, h6, p, blockquote, pre,
|
||||
a, abbr, acronym, address, big, cite, code,
|
||||
del, dfn, em, img, ins, kbd, q, s, samp,
|
||||
small, strike, strong, sub, sup, tt, var,
|
||||
b, u, i, center,
|
||||
dl, dt, dd, ol, ul, li,
|
||||
fieldset, form, label, legend,
|
||||
table, caption, tbody, tfoot, thead, tr, th, td,
|
||||
article, aside, canvas, details, embed,
|
||||
figure, figcaption, footer, header, hgroup,
|
||||
menu, nav, output, ruby, section, summary,
|
||||
time, mark, audio, video {
|
||||
margin: 0;
|
||||
padding: 0;
|
||||
border: 0;
|
||||
font-size: 100%;
|
||||
font: inherit;
|
||||
vertical-align: baseline;
|
||||
}
|
||||
/* HTML5 display-role reset for older browsers */
|
||||
article, aside, details, figcaption, figure,
|
||||
footer, header, hgroup, menu, nav, section {
|
||||
display: block;
|
||||
}
|
||||
body {
|
||||
line-height: 1;
|
||||
}
|
||||
ol, ul {
|
||||
list-style: none;
|
||||
}
|
||||
blockquote, q {
|
||||
quotes: none;
|
||||
}
|
||||
blockquote:before, blockquote:after,
|
||||
q:before, q:after {
|
||||
content: '';
|
||||
content: none;
|
||||
}
|
||||
table {
|
||||
border-collapse: collapse;
|
||||
border-spacing: 0;
|
||||
}
|
||||
|
@ -16,13 +16,17 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
#
|
||||
# This runs Mediagoblin using Paste with Celery set to always eager mode.
|
||||
#
|
||||
|
||||
if [ "$1" = "-h" ]
|
||||
then
|
||||
echo "$0 [-h] [-c paste.ini] [ARGS_to_paster ...]"
|
||||
echo ""
|
||||
echo " For example:"
|
||||
echo " $0 -c fcgi.ini port_number=23371"
|
||||
echo " or: $0 --server-name=fcgi"
|
||||
echo " or: $0 --server-name=fcgi --log-file=paste.log"
|
||||
echo ""
|
||||
echo " The configfile defaults to paste_local.ini,"
|
||||
echo " if that is readable, otherwise paste.ini."
|
||||
|
@ -1,3 +1,6 @@
|
||||
# If you want to make changes to this file, first copy it to
|
||||
# mediagoblin_local.ini, then make the changes there.
|
||||
|
||||
[mediagoblin]
|
||||
direct_remote_path = /mgoblin_static/
|
||||
email_sender_address = "notice@mediagoblin.example.org"
|
||||
@ -8,6 +11,9 @@ email_debug_mode = true
|
||||
# Set to false to disable registrations
|
||||
allow_registration = true
|
||||
|
||||
## Uncomment this to turn on video or enable other media types
|
||||
# media_types = mediagoblin.media_types.image, mediagoblin.media_types.video
|
||||
|
||||
## Uncomment this to put some user-overriding templates here
|
||||
#local_templates = %(here)s/user_dev/templates/
|
||||
|
||||
|
@ -14,4 +14,13 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
__version__ = "0.0.5"
|
||||
# valid version formats:
|
||||
# * x.y - final release
|
||||
# * x.ya1 - alpha 1
|
||||
# * x.yb1 - beta 1
|
||||
# * x.yrc1 - release candidate 1
|
||||
# * x.y.dev - dev
|
||||
|
||||
# see http://www.python.org/dev/peps/pep-0386/
|
||||
|
||||
__version__ = "0.3.0.dev"
|
||||
|
@ -20,7 +20,7 @@ import urllib
|
||||
import routes
|
||||
from webob import Request, exc
|
||||
|
||||
from mediagoblin import routing, middleware
|
||||
from mediagoblin import routing, meddleware
|
||||
from mediagoblin.tools import common, translate, template
|
||||
from mediagoblin.tools.response import render_404
|
||||
from mediagoblin.tools import request as mg_request
|
||||
@ -63,7 +63,7 @@ class MediaGoblinApp(object):
|
||||
|
||||
# Get the template environment
|
||||
self.template_loader = get_jinja_loader(
|
||||
app_config.get('user_template_path'))
|
||||
app_config.get('local_templates'))
|
||||
|
||||
# Set up storage systems
|
||||
self.public_store, self.queue_store = setup_storage()
|
||||
@ -94,26 +94,19 @@ class MediaGoblinApp(object):
|
||||
# object.
|
||||
#######################################################
|
||||
|
||||
setup_globals(app = self)
|
||||
setup_globals(app=self)
|
||||
|
||||
# Workbench *currently* only used by celery, so this only
|
||||
# matters in always eager mode :)
|
||||
setup_workbench()
|
||||
|
||||
# instantiate application middleware
|
||||
self.middleware = [common.import_component(m)(self)
|
||||
for m in middleware.ENABLED_MIDDLEWARE]
|
||||
|
||||
# instantiate application meddleware
|
||||
self.meddleware = [common.import_component(m)(self)
|
||||
for m in meddleware.ENABLED_MEDDLEWARE]
|
||||
|
||||
def __call__(self, environ, start_response):
|
||||
request = Request(environ)
|
||||
|
||||
# pass the request through our middleware classes
|
||||
for m in self.middleware:
|
||||
response = m.process_request(request)
|
||||
if response is not None:
|
||||
return response(environ, start_response)
|
||||
|
||||
## Routing / controller loading stuff
|
||||
path_info = request.path_info
|
||||
route_match = self.routing.match(path_info)
|
||||
@ -129,6 +122,11 @@ class MediaGoblinApp(object):
|
||||
# The other option would be:
|
||||
# request.full_path = environ["SCRIPT_URL"]
|
||||
|
||||
# Fix up environ for urlgen
|
||||
# See bug: https://bitbucket.org/bbangert/routes/issue/55/cache_hostinfo-breaks-on-https-off
|
||||
if environ.get('HTTPS', '').lower() == 'off':
|
||||
environ.pop('HTTPS')
|
||||
|
||||
## Attach utilities to the request object
|
||||
request.matchdict = route_match
|
||||
request.urlgen = routes.URLGenerator(self.routing, environ)
|
||||
@ -165,13 +163,20 @@ class MediaGoblinApp(object):
|
||||
return render_404(request)(environ, start_response)
|
||||
|
||||
controller = common.import_component(route_match['controller'])
|
||||
|
||||
# pass the request through our meddleware classes
|
||||
for m in self.meddleware:
|
||||
response = m.process_request(request, controller)
|
||||
if response is not None:
|
||||
return response(environ, start_response)
|
||||
|
||||
request.start_response = start_response
|
||||
|
||||
# get the response from the controller
|
||||
response = controller(request)
|
||||
|
||||
# pass the response through the middleware
|
||||
for m in self.middleware[::-1]:
|
||||
# pass the response through the meddleware
|
||||
for m in self.meddleware[::-1]:
|
||||
m.process_response(request, response)
|
||||
|
||||
return response(environ, start_response)
|
||||
|
@ -29,15 +29,7 @@ class RegistrationForm(wtforms.Form):
|
||||
password = wtforms.PasswordField(
|
||||
_('Password'),
|
||||
[wtforms.validators.Required(),
|
||||
wtforms.validators.Length(min=6, max=30),
|
||||
wtforms.validators.EqualTo(
|
||||
'confirm_password',
|
||||
_('Passwords must match.'))])
|
||||
confirm_password = wtforms.PasswordField(
|
||||
_('Confirm password'),
|
||||
[wtforms.validators.Required()],
|
||||
description=_(
|
||||
u"Type it again here to make sure there are no spelling mistakes."))
|
||||
wtforms.validators.Length(min=6, max=30)])
|
||||
email = wtforms.TextField(
|
||||
_('Email address'),
|
||||
[wtforms.validators.Required(),
|
||||
@ -59,9 +51,10 @@ class ForgotPassForm(wtforms.Form):
|
||||
'Username or email',
|
||||
[wtforms.validators.Required()])
|
||||
|
||||
def validate_username(form,field):
|
||||
if not (re.match(r'^\w+$',field.data) or
|
||||
re.match(r'^.+@[^.].*\.[a-z]{2,10}$',field.data, re.IGNORECASE)):
|
||||
def validate_username(form, field):
|
||||
if not (re.match(r'^\w+$', field.data) or
|
||||
re.match(r'^.+@[^.].*\.[a-z]{2,10}$', field.data,
|
||||
re.IGNORECASE)):
|
||||
raise wtforms.ValidationError(u'Incorrect input')
|
||||
|
||||
|
||||
@ -69,17 +62,10 @@ class ChangePassForm(wtforms.Form):
|
||||
password = wtforms.PasswordField(
|
||||
'Password',
|
||||
[wtforms.validators.Required(),
|
||||
wtforms.validators.Length(min=6, max=30),
|
||||
wtforms.validators.EqualTo(
|
||||
'confirm_password',
|
||||
'Passwords must match.')])
|
||||
confirm_password = wtforms.PasswordField(
|
||||
'Confirm password',
|
||||
[wtforms.validators.Required()])
|
||||
wtforms.validators.Length(min=6, max=30)])
|
||||
userid = wtforms.HiddenField(
|
||||
'',
|
||||
[wtforms.validators.Required()])
|
||||
token = wtforms.HiddenField(
|
||||
'',
|
||||
[wtforms.validators.Required()])
|
||||
|
||||
|
@ -94,6 +94,7 @@ EMAIL_VERIFICATION_TEMPLATE = (
|
||||
u"http://{host}{uri}?"
|
||||
u"userid={userid}&token={verification_key}")
|
||||
|
||||
|
||||
def send_verification_email(user, request):
|
||||
"""
|
||||
Send the verification email to users to activate their accounts.
|
||||
@ -104,17 +105,17 @@ def send_verification_email(user, request):
|
||||
"""
|
||||
rendered_email = render_template(
|
||||
request, 'mediagoblin/auth/verification_email.txt',
|
||||
{'username': user['username'],
|
||||
{'username': user.username,
|
||||
'verification_url': EMAIL_VERIFICATION_TEMPLATE.format(
|
||||
host=request.host,
|
||||
uri=request.urlgen('mediagoblin.auth.verify_email'),
|
||||
userid=unicode(user['_id']),
|
||||
verification_key=user['verification_key'])})
|
||||
userid=unicode(user._id),
|
||||
verification_key=user.verification_key)})
|
||||
|
||||
# TODO: There is no error handling in place
|
||||
send_email(
|
||||
mg_globals.app_config['email_sender_address'],
|
||||
[user['email']],
|
||||
[user.email],
|
||||
# TODO
|
||||
# Due to the distributed nature of GNU MediaGoblin, we should
|
||||
# find a way to send some additional information about the
|
||||
@ -128,6 +129,7 @@ EMAIL_FP_VERIFICATION_TEMPLATE = (
|
||||
u"http://{host}{uri}?"
|
||||
u"userid={userid}&token={fp_verification_key}")
|
||||
|
||||
|
||||
def send_fp_verification_email(user, request):
|
||||
"""
|
||||
Send the verification email to users to change their password.
|
||||
@ -138,17 +140,16 @@ def send_fp_verification_email(user, request):
|
||||
"""
|
||||
rendered_email = render_template(
|
||||
request, 'mediagoblin/auth/fp_verification_email.txt',
|
||||
{'username': user['username'],
|
||||
{'username': user.username,
|
||||
'verification_url': EMAIL_FP_VERIFICATION_TEMPLATE.format(
|
||||
host=request.host,
|
||||
uri=request.urlgen('mediagoblin.auth.verify_forgot_password'),
|
||||
userid=unicode(user['_id']),
|
||||
fp_verification_key=user['fp_verification_key'])})
|
||||
userid=unicode(user._id),
|
||||
fp_verification_key=user.fp_verification_key)})
|
||||
|
||||
# TODO: There is no error handling in place
|
||||
send_email(
|
||||
mg_globals.app_config['email_sender_address'],
|
||||
[user['email']],
|
||||
[user.email],
|
||||
'GNU MediaGoblin - Change forgotten password!',
|
||||
rendered_email)
|
||||
|
||||
|
@ -33,13 +33,6 @@ auth_routes = [
|
||||
controller='mediagoblin.views:simple_template_render'),
|
||||
Route('mediagoblin.auth.forgot_password', '/forgot_password/',
|
||||
controller='mediagoblin.auth.views:forgot_password'),
|
||||
Route('mediagoblin.auth.verify_forgot_password', '/forgot_password/verify/',
|
||||
controller='mediagoblin.auth.views:verify_forgot_password'),
|
||||
Route('mediagoblin.auth.fp_changed_success',
|
||||
'/forgot_password/changed_success/',
|
||||
template='mediagoblin/auth/fp_changed_success.html',
|
||||
controller='mediagoblin.views:simple_template_render'),
|
||||
Route('mediagoblin.auth.fp_email_sent',
|
||||
'/forgot_password/email_sent/',
|
||||
template='mediagoblin/auth/fp_email_sent.html',
|
||||
controller='mediagoblin.views:simple_template_render')]
|
||||
Route('mediagoblin.auth.verify_forgot_password',
|
||||
'/forgot_password/verify/',
|
||||
controller='mediagoblin.auth.views:verify_forgot_password')]
|
||||
|
@ -74,20 +74,21 @@ def register(request):
|
||||
extra_validation_passes = False
|
||||
if users_with_email:
|
||||
register_form.email.errors.append(
|
||||
_(u'Sorry, that email address has already been taken.'))
|
||||
_(u'Sorry, a user with that email address already exists.'))
|
||||
extra_validation_passes = False
|
||||
|
||||
if extra_validation_passes:
|
||||
# Create the user
|
||||
user = request.db.User()
|
||||
user['username'] = username
|
||||
user['email'] = email
|
||||
user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(
|
||||
user.username = username
|
||||
user.email = email
|
||||
user.pw_hash = auth_lib.bcrypt_gen_password_hash(
|
||||
request.POST['password'])
|
||||
user.verification_key = unicode(uuid.uuid4())
|
||||
user.save(validate=True)
|
||||
|
||||
# log the user in
|
||||
request.session['user_id'] = unicode(user['_id'])
|
||||
request.session['user_id'] = unicode(user._id)
|
||||
request.session.save()
|
||||
|
||||
# send verification email
|
||||
@ -98,7 +99,7 @@ def register(request):
|
||||
# message waiting for them to verify their email
|
||||
return redirect(
|
||||
request, 'mediagoblin.user_pages.user_home',
|
||||
user=user['username'])
|
||||
user=user.username)
|
||||
|
||||
return render_to_response(
|
||||
request,
|
||||
@ -122,7 +123,7 @@ def login(request):
|
||||
|
||||
if user and user.check_login(request.POST['password']):
|
||||
# set up login in session
|
||||
request.session['user_id'] = unicode(user['_id'])
|
||||
request.session['user_id'] = unicode(user._id)
|
||||
request.session.save()
|
||||
|
||||
if request.POST.get('next'):
|
||||
@ -160,16 +161,16 @@ def verify_email(request):
|
||||
you are lucky :)
|
||||
"""
|
||||
# If we don't have userid and token parameters, we can't do anything; 404
|
||||
if not request.GET.has_key('userid') or not request.GET.has_key('token'):
|
||||
if not 'userid' in request.GET or not 'token' in request.GET:
|
||||
return render_404(request)
|
||||
|
||||
user = request.db.User.find_one(
|
||||
{'_id': ObjectId(unicode(request.GET['userid']))})
|
||||
|
||||
if user and user['verification_key'] == unicode(request.GET['token']):
|
||||
user[u'status'] = u'active'
|
||||
user[u'email_verified'] = True
|
||||
user[u'verification_key'] = None
|
||||
if user and user.verification_key == unicode(request.GET['token']):
|
||||
user.status = u'active'
|
||||
user.email_verified = True
|
||||
user.verification_key = None
|
||||
|
||||
user.save()
|
||||
|
||||
@ -186,7 +187,7 @@ def verify_email(request):
|
||||
|
||||
return redirect(
|
||||
request, 'mediagoblin.user_pages.user_home',
|
||||
user=user['username'])
|
||||
user=user.username)
|
||||
|
||||
|
||||
def resend_activation(request):
|
||||
@ -195,9 +196,26 @@ def resend_activation(request):
|
||||
|
||||
Resend the activation email.
|
||||
"""
|
||||
request.user[u'verification_key'] = unicode(uuid.uuid4())
|
||||
request.user.save()
|
||||
|
||||
if request.user is None:
|
||||
messages.add_message(
|
||||
request,
|
||||
messages.ERROR,
|
||||
_('You must be logged in so we know who to send the email to!'))
|
||||
|
||||
return redirect(request, 'mediagoblin.auth.login')
|
||||
|
||||
if request.user.email_verified:
|
||||
messages.add_message(
|
||||
request,
|
||||
messages.ERROR,
|
||||
_("You've already verified your email address!"))
|
||||
|
||||
return redirect(request, "mediagoblin.user_pages.user_home", user=request.user['username'])
|
||||
|
||||
request.user.verification_key = unicode(uuid.uuid4())
|
||||
request.user.save()
|
||||
|
||||
email_debug_message(request)
|
||||
send_verification_email(request.user, request)
|
||||
|
||||
@ -207,23 +225,19 @@ def resend_activation(request):
|
||||
_('Resent your verification email.'))
|
||||
return redirect(
|
||||
request, 'mediagoblin.user_pages.user_home',
|
||||
user=request.user['username'])
|
||||
user=request.user.username)
|
||||
|
||||
|
||||
def forgot_password(request):
|
||||
"""
|
||||
Forgot password view
|
||||
|
||||
Sends an email whit an url to renew forgoten password
|
||||
Sends an email with an url to renew forgotten password
|
||||
"""
|
||||
fp_form = auth_forms.ForgotPassForm(request.POST)
|
||||
|
||||
if request.method == 'POST' and fp_form.validate():
|
||||
|
||||
# Here, so it doesn't depend on the actual mail being sent
|
||||
# and thus doesn't reveal, wether mail was sent.
|
||||
email_debug_message(request)
|
||||
|
||||
# '$or' not available till mongodb 1.5.3
|
||||
user = request.db.User.find_one(
|
||||
{'username': request.POST['username']})
|
||||
@ -232,13 +246,21 @@ def forgot_password(request):
|
||||
{'email': request.POST['username']})
|
||||
|
||||
if user:
|
||||
if user['email_verified'] and user['status'] == 'active':
|
||||
user[u'fp_verification_key'] = unicode(uuid.uuid4())
|
||||
user[u'fp_token_expire'] = datetime.datetime.now() + \
|
||||
if user.email_verified and user.status == 'active':
|
||||
user.fp_verification_key = unicode(uuid.uuid4())
|
||||
user.fp_token_expire = datetime.datetime.now() + \
|
||||
datetime.timedelta(days=10)
|
||||
user.save()
|
||||
|
||||
send_fp_verification_email(user, request)
|
||||
|
||||
messages.add_message(
|
||||
request,
|
||||
messages.INFO,
|
||||
_("An email has been sent with instructions on how to "
|
||||
"change your password."))
|
||||
email_debug_message(request)
|
||||
|
||||
else:
|
||||
# special case... we can't send the email because the
|
||||
# username is inactive / hasn't verified their email
|
||||
@ -251,11 +273,14 @@ def forgot_password(request):
|
||||
|
||||
return redirect(
|
||||
request, 'mediagoblin.user_pages.user_home',
|
||||
user=user['username'])
|
||||
|
||||
|
||||
# do not reveal whether or not there is a matching user, just move along
|
||||
return redirect(request, 'mediagoblin.auth.fp_email_sent')
|
||||
user=user.username)
|
||||
return redirect(request, 'mediagoblin.auth.login')
|
||||
else:
|
||||
messages.add_message(
|
||||
request,
|
||||
messages.WARNING,
|
||||
_("Couldn't find someone with that username or email."))
|
||||
return redirect(request, 'mediagoblin.auth.forgot_password')
|
||||
|
||||
return render_to_response(
|
||||
request,
|
||||
@ -285,21 +310,25 @@ def verify_forgot_password(request):
|
||||
return render_404(request)
|
||||
|
||||
# check if we have a real user and correct token
|
||||
if ((user and user['fp_verification_key'] and
|
||||
user['fp_verification_key'] == unicode(formdata_token) and
|
||||
datetime.datetime.now() < user['fp_token_expire']
|
||||
and user['email_verified'] and user['status'] == 'active')):
|
||||
if ((user and user.fp_verification_key and
|
||||
user.fp_verification_key == unicode(formdata_token) and
|
||||
datetime.datetime.now() < user.fp_token_expire
|
||||
and user.email_verified and user.status == 'active')):
|
||||
|
||||
cp_form = auth_forms.ChangePassForm(formdata_vars)
|
||||
|
||||
if request.method == 'POST' and cp_form.validate():
|
||||
user[u'pw_hash'] = auth_lib.bcrypt_gen_password_hash(
|
||||
user.pw_hash = auth_lib.bcrypt_gen_password_hash(
|
||||
request.POST['password'])
|
||||
user[u'fp_verification_key'] = None
|
||||
user[u'fp_token_expire'] = None
|
||||
user.fp_verification_key = None
|
||||
user.fp_token_expire = None
|
||||
user.save()
|
||||
|
||||
return redirect(request, 'mediagoblin.auth.fp_changed_success')
|
||||
messages.add_message(
|
||||
request,
|
||||
messages.INFO,
|
||||
_("You can now log in using your new password."))
|
||||
return redirect(request, 'mediagoblin.auth.login')
|
||||
else:
|
||||
return render_to_response(
|
||||
request,
|
||||
@ -328,6 +357,6 @@ def _process_for_token(request):
|
||||
formdata = {
|
||||
'vars': formdata_vars,
|
||||
'has_userid_and_token':
|
||||
formdata_vars.has_key('userid') and formdata_vars.has_key('token')}
|
||||
'userid' in formdata_vars and 'token' in formdata_vars}
|
||||
|
||||
return formdata
|
||||
|
@ -1,14 +1,18 @@
|
||||
[mediagoblin]
|
||||
# HTML title of the pages
|
||||
html_title = string(default="GNU MediaGoblin")
|
||||
|
||||
# Enabled media types
|
||||
media_types = string_list(default=list("mediagoblin.media_types.image"))
|
||||
|
||||
# database stuff
|
||||
db_host = string()
|
||||
db_name = string(default="mediagoblin")
|
||||
db_port = integer()
|
||||
|
||||
|
||||
# Where temporary files used in processing and etc are kept
|
||||
workbench_path = string(default="%(here)s/user_dev/media/workbench")
|
||||
|
||||
|
||||
# Where mediagoblin-builtin static assets are kept
|
||||
direct_remote_path = string(default="/mgoblin_static/")
|
||||
|
||||
@ -24,9 +28,11 @@ email_smtp_pass = string(default=None)
|
||||
allow_registration = boolean(default=True)
|
||||
|
||||
# tag parsing
|
||||
tags_delimiter = string(default=",")
|
||||
tags_max_length = integer(default=50)
|
||||
|
||||
# Whether comments are ascending or descending
|
||||
comments_ascending = boolean(default=True)
|
||||
|
||||
# By default not set, but you might want something like:
|
||||
# "%(here)s/user_dev/templates/"
|
||||
local_templates = string()
|
||||
@ -44,6 +50,7 @@ allow_attachments = boolean(default=False)
|
||||
# Cookie stuff
|
||||
csrf_cookie_name = string(default='mediagoblin_csrftoken')
|
||||
|
||||
|
||||
[storage:publicstore]
|
||||
storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage")
|
||||
base_dir = string(default="%(here)s/user_dev/media/public")
|
||||
@ -54,6 +61,11 @@ storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage
|
||||
base_dir = string(default="%(here)s/user_dev/media/queue")
|
||||
|
||||
|
||||
# Should we keep the original file?
|
||||
[media_type:mediagoblin.media_types.video]
|
||||
keep_original = boolean(default=False)
|
||||
|
||||
|
||||
[beaker.cache]
|
||||
type = string(default="file")
|
||||
data_dir = string(default="%(here)s/user_dev/beaker/cache/data")
|
||||
|
@ -23,7 +23,7 @@ Database Abstraction/Wrapper Layer
|
||||
pymongo. Read beow for why, but note that nobody is actually doing
|
||||
this and there's no proof that we'll ever support more than
|
||||
MongoDB... it would be a huge amount of work to do so.
|
||||
|
||||
|
||||
If you really want to prove that possible, jump on IRC and talk to
|
||||
us about making such a branch. In the meanwhile, it doesn't hurt to
|
||||
have things as they are... if it ever makes it hard for us to
|
||||
|
92
mediagoblin/db/mixin.py
Normal file
92
mediagoblin/db/mixin.py
Normal file
@ -0,0 +1,92 @@
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011,2012 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""
|
||||
This module contains some Mixin classes for the db objects.
|
||||
|
||||
A bunch of functions on the db objects are really more like
|
||||
"utility functions": They could live outside the classes
|
||||
and be called "by hand" passing the appropiate reference.
|
||||
They usually only use the public API of the object and
|
||||
rarely use database related stuff.
|
||||
|
||||
These functions now live here and get "mixed in" into the
|
||||
real objects.
|
||||
"""
|
||||
|
||||
from mediagoblin.auth import lib as auth_lib
|
||||
from mediagoblin.tools import common
|
||||
|
||||
|
||||
class UserMixin(object):
|
||||
def check_login(self, password):
|
||||
"""
|
||||
See if a user can login with this password
|
||||
"""
|
||||
return auth_lib.bcrypt_check_password(
|
||||
password, self.pw_hash)
|
||||
|
||||
|
||||
class MediaEntryMixin(object):
|
||||
def get_display_media(self, media_map,
|
||||
fetch_order=common.DISPLAY_IMAGE_FETCHING_ORDER):
|
||||
"""
|
||||
Find the best media for display.
|
||||
|
||||
Args:
|
||||
- media_map: a dict like
|
||||
{u'image_size': [u'dir1', u'dir2', u'image.jpg']}
|
||||
- fetch_order: the order we should try fetching images in
|
||||
|
||||
Returns:
|
||||
(media_size, media_path)
|
||||
"""
|
||||
media_sizes = media_map.keys()
|
||||
|
||||
for media_size in common.DISPLAY_IMAGE_FETCHING_ORDER:
|
||||
if media_size in media_sizes:
|
||||
return media_map[media_size]
|
||||
|
||||
def main_mediafile(self):
|
||||
pass
|
||||
|
||||
def url_for_self(self, urlgen, **extra_args):
|
||||
"""
|
||||
Generate an appropriate url for ourselves
|
||||
|
||||
Use a slug if we have one, else use our '_id'.
|
||||
"""
|
||||
uploader = self.get_uploader
|
||||
|
||||
if self.get('slug'):
|
||||
return urlgen(
|
||||
'mediagoblin.user_pages.media_home',
|
||||
user=uploader.username,
|
||||
media=self.slug,
|
||||
**extra_args)
|
||||
else:
|
||||
return urlgen(
|
||||
'mediagoblin.user_pages.media_home',
|
||||
user=uploader.username,
|
||||
media=unicode(self._id),
|
||||
**extra_args)
|
||||
|
||||
def get_fail_exception(self):
|
||||
"""
|
||||
Get the exception that's appropriate for this error
|
||||
"""
|
||||
if self['fail_error']:
|
||||
return common.import_component(self['fail_error'])
|
@ -1,6 +1,5 @@
|
||||
{#
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011 Free Software Foundation, Inc
|
||||
# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
@ -14,14 +13,3 @@
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#}
|
||||
{% extends "mediagoblin/base.html" %}
|
||||
|
||||
{% block mediagoblin_content %}
|
||||
<p>
|
||||
{% trans -%}
|
||||
Your password has been changed. Try to log in now.
|
||||
{%- endtrans %}
|
||||
</p>
|
||||
{% endblock %}
|
||||
|
@ -93,8 +93,9 @@ MEDIAENTRY_INDEXES = {
|
||||
('created', DESCENDING)]},
|
||||
|
||||
'state_uploader_tags_created': {
|
||||
# Indexing on processed?, media uploader, associated tags, and timestamp
|
||||
# Used for showing media items matching a tag search, most recent first.
|
||||
# Indexing on processed?, media uploader, associated tags, and
|
||||
# timestamp Used for showing media items matching a tag
|
||||
# search, most recent first.
|
||||
'index': [('state', ASCENDING),
|
||||
('uploader', ASCENDING),
|
||||
('tags.slug', DESCENDING),
|
@ -14,7 +14,7 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
from mediagoblin.db.util import RegisterMigration
|
||||
from mediagoblin.db.mongo.util import RegisterMigration
|
||||
from mediagoblin.tools.text import cleaned_markdown_conversion
|
||||
|
||||
|
||||
@ -100,3 +100,11 @@ def user_add_forgot_password_token_and_expires(database):
|
||||
"""
|
||||
add_table_field(database, 'users', 'fp_verification_key', None)
|
||||
add_table_field(database, 'users', 'fp_token_expire', None)
|
||||
|
||||
|
||||
@RegisterMigration(7)
|
||||
def media_type_image_to_multimedia_type_image(database):
|
||||
database['media_entries'].update(
|
||||
{'media_type': 'image'},
|
||||
{'$set': {'media_type': 'mediagoblin.media_types.image'}},
|
||||
multi=True)
|
78
mediagoblin/db/mongo/open.py
Normal file
78
mediagoblin/db/mongo/open.py
Normal file
@ -0,0 +1,78 @@
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import pymongo
|
||||
import mongokit
|
||||
from paste.deploy.converters import asint
|
||||
from mediagoblin.db.mongo import models
|
||||
from mediagoblin.db.mongo.util import MigrationManager
|
||||
|
||||
|
||||
def connect_database_from_config(app_config, use_pymongo=False):
|
||||
"""
|
||||
Connect to the main database, take config from app_config
|
||||
|
||||
Optionally use pymongo instead of mongokit for the connection.
|
||||
"""
|
||||
port = app_config.get('db_port')
|
||||
if port:
|
||||
port = asint(port)
|
||||
|
||||
if use_pymongo:
|
||||
connection = pymongo.Connection(
|
||||
app_config.get('db_host'), port)
|
||||
else:
|
||||
connection = mongokit.Connection(
|
||||
app_config.get('db_host'), port)
|
||||
return connection
|
||||
|
||||
|
||||
def setup_connection_and_db_from_config(app_config, use_pymongo=False):
|
||||
"""
|
||||
Setup connection and database from config.
|
||||
|
||||
Optionally use pymongo instead of mongokit.
|
||||
"""
|
||||
connection = connect_database_from_config(app_config, use_pymongo)
|
||||
database_path = app_config['db_name']
|
||||
db = connection[database_path]
|
||||
|
||||
if not use_pymongo:
|
||||
models.register_models(connection)
|
||||
|
||||
return (connection, db)
|
||||
|
||||
|
||||
def check_db_migrations_current(db):
|
||||
# This MUST be imported so as to set up the appropriate migrations!
|
||||
from mediagoblin.db.mongo import migrations
|
||||
|
||||
# Init the migration number if necessary
|
||||
migration_manager = MigrationManager(db)
|
||||
migration_manager.install_migration_version_if_missing()
|
||||
|
||||
# Tiny hack to warn user if our migration is out of date
|
||||
if not migration_manager.database_at_latest_migration():
|
||||
db_migration_num = migration_manager.database_current_migration()
|
||||
latest_migration_num = migration_manager.latest_migration()
|
||||
if db_migration_num < latest_migration_num:
|
||||
print (
|
||||
"*WARNING:* Your migrations are out of date, "
|
||||
"maybe run ./bin/gmg migrate?")
|
||||
elif db_migration_num > latest_migration_num:
|
||||
print (
|
||||
"*WARNING:* Your migrations are out of date... "
|
||||
"in fact they appear to be from the future?!")
|
292
mediagoblin/db/mongo/util.py
Normal file
292
mediagoblin/db/mongo/util.py
Normal file
@ -0,0 +1,292 @@
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
# the Free Software Foundation, either version 3 of the License, or
|
||||
# (at your option) any later version.
|
||||
#
|
||||
# This program is distributed in the hope that it will be useful,
|
||||
# but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
# GNU Affero General Public License for more details.
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""
|
||||
Utilities for database operations.
|
||||
|
||||
Some note on migration and indexing tools:
|
||||
|
||||
We store information about what the state of the database is in the
|
||||
'mediagoblin' document of the 'app_metadata' collection. Keys in that
|
||||
document relevant to here:
|
||||
|
||||
- 'migration_number': The integer representing the current state of
|
||||
the migrations
|
||||
"""
|
||||
|
||||
import copy
|
||||
|
||||
# Imports that other modules might use
|
||||
from pymongo import ASCENDING, DESCENDING
|
||||
from pymongo.errors import InvalidId
|
||||
from mongokit import ObjectId
|
||||
|
||||
from mediagoblin.db.mongo.indexes import ACTIVE_INDEXES, DEPRECATED_INDEXES
|
||||
|
||||
|
||||
################
|
||||
# Indexing tools
|
||||
################
|
||||
|
||||
|
||||
def add_new_indexes(database, active_indexes=ACTIVE_INDEXES):
|
||||
"""
|
||||
Add any new indexes to the database.
|
||||
|
||||
Args:
|
||||
- database: pymongo or mongokit database instance.
|
||||
- active_indexes: indexes to possibly add in the pattern of:
|
||||
{'collection_name': {
|
||||
'identifier': {
|
||||
'index': [index_foo_goes_here],
|
||||
'unique': True}}
|
||||
where 'index' is the index to add and all other options are
|
||||
arguments for collection.create_index.
|
||||
|
||||
Returns:
|
||||
A list of indexes added in form ('collection', 'index_name')
|
||||
"""
|
||||
indexes_added = []
|
||||
|
||||
for collection_name, indexes in active_indexes.iteritems():
|
||||
collection = database[collection_name]
|
||||
collection_indexes = collection.index_information().keys()
|
||||
|
||||
for index_name, index_data in indexes.iteritems():
|
||||
if not index_name in collection_indexes:
|
||||
# Get a copy actually so we don't modify the actual
|
||||
# structure
|
||||
index_data = copy.copy(index_data)
|
||||
index = index_data.pop('index')
|
||||
collection.create_index(
|
||||
index, name=index_name, **index_data)
|
||||
|
||||
indexes_added.append((collection_name, index_name))
|
||||
|
||||
return indexes_added
|
||||
|
||||
|
||||
def remove_deprecated_indexes(database, deprecated_indexes=DEPRECATED_INDEXES):
|
||||
"""
|
||||
Remove any deprecated indexes from the database.
|
||||
|
||||
Args:
|
||||
- database: pymongo or mongokit database instance.
|
||||
- deprecated_indexes: the indexes to deprecate in the pattern of:
|
||||
{'collection_name': {
|
||||
'identifier': {
|
||||
'index': [index_foo_goes_here],
|
||||
'unique': True}}
|
||||
|
||||
(... although we really only need the 'identifier' here, as the
|
||||
rest of the information isn't used in this case. But it's kept
|
||||
around so we can remember what it was)
|
||||
|
||||
Returns:
|
||||
A list of indexes removed in form ('collection', 'index_name')
|
||||
"""
|
||||
indexes_removed = []
|
||||
|
||||
for collection_name, indexes in deprecated_indexes.iteritems():
|
||||
collection = database[collection_name]
|
||||
collection_indexes = collection.index_information().keys()
|
||||
|
||||
for index_name, index_data in indexes.iteritems():
|
||||
if index_name in collection_indexes:
|
||||
collection.drop_index(index_name)
|
||||
|
||||
indexes_removed.append((collection_name, index_name))
|
||||
|
||||
return indexes_removed
|
||||
|
||||
|
||||
#################
|
||||
# Migration tools
|
||||
#################
|
||||
|
||||
# The default migration registry...
|
||||
#
|
||||
# Don't set this yourself! RegisterMigration will automatically fill
|
||||
# this with stuff via decorating methods in migrations.py
|
||||
|
||||
class MissingCurrentMigration(Exception):
|
||||
pass
|
||||
|
||||
|
||||
MIGRATIONS = {}
|
||||
|
||||
|
||||
class RegisterMigration(object):
|
||||
"""
|
||||
Tool for registering migrations
|
||||
|
||||
Call like:
|
||||
|
||||
@RegisterMigration(33)
|
||||
def update_dwarves(database):
|
||||
[...]
|
||||
|
||||
This will register your migration with the default migration
|
||||
registry. Alternately, to specify a very specific
|
||||
migration_registry, you can pass in that as the second argument.
|
||||
|
||||
Note, the number of your migration should NEVER be 0 or less than
|
||||
0. 0 is the default "no migrations" state!
|
||||
"""
|
||||
def __init__(self, migration_number, migration_registry=MIGRATIONS):
|
||||
assert migration_number > 0, "Migration number must be > 0!"
|
||||
assert migration_number not in migration_registry, \
|
||||
"Duplicate migration numbers detected! That's not allowed!"
|
||||
|
||||
self.migration_number = migration_number
|
||||
self.migration_registry = migration_registry
|
||||
|
||||
def __call__(self, migration):
|
||||
self.migration_registry[self.migration_number] = migration
|
||||
return migration
|
||||
|
||||
|
||||
class MigrationManager(object):
|
||||
"""
|
||||
Migration handling tool.
|
||||
|
||||
Takes information about a database, lets you update the database
|
||||
to the latest migrations, etc.
|
||||
"""
|
||||
def __init__(self, database, migration_registry=MIGRATIONS):
|
||||
"""
|
||||
Args:
|
||||
- database: database we're going to migrate
|
||||
- migration_registry: where we should find all migrations to
|
||||
run
|
||||
"""
|
||||
self.database = database
|
||||
self.migration_registry = migration_registry
|
||||
self._sorted_migrations = None
|
||||
|
||||
def _ensure_current_migration_record(self):
|
||||
"""
|
||||
If there isn't a database[u'app_metadata'] mediagoblin entry
|
||||
with the 'current_migration', throw an error.
|
||||
"""
|
||||
if self.database_current_migration() is None:
|
||||
raise MissingCurrentMigration(
|
||||
"Tried to call function which requires "
|
||||
"'current_migration' set in database")
|
||||
|
||||
@property
|
||||
def sorted_migrations(self):
|
||||
"""
|
||||
Sort migrations if necessary and store in self._sorted_migrations
|
||||
"""
|
||||
if not self._sorted_migrations:
|
||||
self._sorted_migrations = sorted(
|
||||
self.migration_registry.items(),
|
||||
# sort on the key... the migration number
|
||||
key=lambda migration_tuple: migration_tuple[0])
|
||||
|
||||
return self._sorted_migrations
|
||||
|
||||
def latest_migration(self):
|
||||
"""
|
||||
Return a migration number for the latest migration, or 0 if
|
||||
there are no migrations.
|
||||
"""
|
||||
if self.sorted_migrations:
|
||||
return self.sorted_migrations[-1][0]
|
||||
else:
|
||||
# If no migrations have been set, we start at 0.
|
||||
return 0
|
||||
|
||||
def set_current_migration(self, migration_number):
|
||||
"""
|
||||
Set the migration in the database to migration_number
|
||||
"""
|
||||
# Add the mediagoblin migration if necessary
|
||||
self.database[u'app_metadata'].update(
|
||||
{u'_id': u'mediagoblin'},
|
||||
{u'$set': {u'current_migration': migration_number}},
|
||||
upsert=True)
|
||||
|
||||
def install_migration_version_if_missing(self):
|
||||
"""
|
||||
Sets the migration to the latest version if no migration
|
||||
version at all is set.
|
||||
"""
|
||||
mgoblin_metadata = self.database[u'app_metadata'].find_one(
|
||||
{u'_id': u'mediagoblin'})
|
||||
if not mgoblin_metadata:
|
||||
latest_migration = self.latest_migration()
|
||||
self.set_current_migration(latest_migration)
|
||||
|
||||
def database_current_migration(self):
|
||||
"""
|
||||
Return the current migration in the database.
|
||||
"""
|
||||
mgoblin_metadata = self.database[u'app_metadata'].find_one(
|
||||
{u'_id': u'mediagoblin'})
|
||||
if not mgoblin_metadata:
|
||||
return None
|
||||
else:
|
||||
return mgoblin_metadata[u'current_migration']
|
||||
|
||||
def database_at_latest_migration(self):
|
||||
"""
|
||||
See if the database is at the latest migration.
|
||||
Returns a boolean.
|
||||
"""
|
||||
current_migration = self.database_current_migration()
|
||||
return current_migration == self.latest_migration()
|
||||
|
||||
def migrations_to_run(self):
|
||||
"""
|
||||
Get a list of migrations to run still, if any.
|
||||
|
||||
Note that calling this will set your migration version to the
|
||||
latest version if it isn't installed to anything yet!
|
||||
"""
|
||||
self._ensure_current_migration_record()
|
||||
|
||||
db_current_migration = self.database_current_migration()
|
||||
|
||||
return [
|
||||
(migration_number, migration_func)
|
||||
for migration_number, migration_func in self.sorted_migrations
|
||||
if migration_number > db_current_migration]
|
||||
|
||||
def migrate_new(self, pre_callback=None, post_callback=None):
|
||||
"""
|
||||
Run all migrations.
|
||||
|
||||
Includes two optional args:
|
||||
- pre_callback: if called, this is a callback on something to
|
||||
run pre-migration. Takes (migration_number, migration_func)
|
||||
as arguments
|
||||
- pre_callback: if called, this is a callback on something to
|
||||
run post-migration. Takes (migration_number, migration_func)
|
||||
as arguments
|
||||
"""
|
||||
# If we aren't set to any version number, presume we're at the
|
||||
# latest (which means we'll do nothing here...)
|
||||
self.install_migration_version_if_missing()
|
||||
|
||||
for migration_number, migration_func in self.migrations_to_run():
|
||||
if pre_callback:
|
||||
pre_callback(migration_number, migration_func)
|
||||
migration_func(self.database)
|
||||
self.set_current_migration(migration_number)
|
||||
if post_callback:
|
||||
post_callback(migration_number, migration_func)
|
@ -14,42 +14,5 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
import pymongo
|
||||
import mongokit
|
||||
from paste.deploy.converters import asint
|
||||
from mediagoblin.db import models
|
||||
|
||||
|
||||
def connect_database_from_config(app_config, use_pymongo=False):
|
||||
"""
|
||||
Connect to the main database, take config from app_config
|
||||
|
||||
Optionally use pymongo instead of mongokit for the connection.
|
||||
"""
|
||||
port = app_config.get('db_port')
|
||||
if port:
|
||||
port = asint(port)
|
||||
|
||||
if use_pymongo:
|
||||
connection = pymongo.Connection(
|
||||
app_config.get('db_host'), port)
|
||||
else:
|
||||
connection = mongokit.Connection(
|
||||
app_config.get('db_host'), port)
|
||||
return connection
|
||||
|
||||
|
||||
def setup_connection_and_db_from_config(app_config, use_pymongo=False):
|
||||
"""
|
||||
Setup connection and database from config.
|
||||
|
||||
Optionally use pymongo instead of mongokit.
|
||||
"""
|
||||
connection = connect_database_from_config(app_config, use_pymongo)
|
||||
database_path = app_config['db_name']
|
||||
db = connection[database_path]
|
||||
|
||||
if not use_pymongo:
|
||||
models.register_models(connection)
|
||||
|
||||
return (connection, db)
|
||||
from mediagoblin.db.mongo.open import \
|
||||
setup_connection_and_db_from_config, check_db_migrations_current
|
||||
|
@ -1,6 +1,5 @@
|
||||
{#
|
||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||
# Copyright (C) 2011 Free Software Foundation, Inc
|
||||
# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
|
||||
#
|
||||
# This program is free software: you can redistribute it and/or modify
|
||||
# it under the terms of the GNU Affero General Public License as published by
|
||||
@ -14,15 +13,3 @@
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
#}
|
||||
{% extends "mediagoblin/base.html" %}
|
||||
|
||||
{% block mediagoblin_content %}
|
||||
<p>
|
||||
{% trans -%}
|
||||
Check your inbox. We sent an email with a URL for changing your password.
|
||||
{%- endtrans %}
|
||||
</p>
|
||||
|
||||
{% endblock %}
|
||||
|
38
mediagoblin/db/sql/base.py
Normal file
38
mediagoblin/db/sql/base.py
Normal file
@ -0,0 +1,38 @@
|
||||
from sqlalchemy.orm import scoped_session, sessionmaker, object_session
|
||||
|
||||
|
||||
Session = scoped_session(sessionmaker())
|
||||
|
||||
|
||||
def _fix_query_dict(query_dict):
|
||||
if '_id' in query_dict:
|
||||
query_dict['id'] = query_dict.pop('_id')
|
||||
|
||||
|
||||
class GMGTableBase(object):
|
||||
query = Session.query_property()
|
||||
|
||||
@classmethod
|
||||
def find(cls, query_dict={}):
|
||||
_fix_query_dict(query_dict)
|
||||
return cls.query.filter_by(**query_dict)
|
||||
|
||||
@classmethod
|
||||
def find_one(cls, query_dict={}):
|
||||
_fix_query_dict(query_dict)
|
||||
return cls.query.filter_by(**query_dict).first()
|
||||
|
||||
@classmethod
|
||||
def one(cls, query_dict):
|
||||
return cls.find(query_dict).one()
|
||||
|
||||
def get(self, key):
|
||||
return getattr(self, key)
|
||||
|
||||
def save(self, validate = True):
|
||||
assert validate
|
||||
sess = object_session(self)
|
||||
if sess is None:
|
||||
sess = Session()
|
||||
sess.add(self)
|
||||
sess.commit()
|
151
mediagoblin/db/sql/convert.py
Normal file
151
mediagoblin/db/sql/convert.py
Normal file
@ -0,0 +1,151 @@
|
||||
from mediagoblin.init import setup_global_and_app_config, setup_database
|
||||
from mediagoblin.db.mongo.util import ObjectId
|
||||
|
||||
from mediagoblin.db.sql.models import (Base, User, MediaEntry, MediaComment,
|
||||
Tag, MediaTag, MediaFile)
|
||||
from mediagoblin.db.sql.open import setup_connection_and_db_from_config as \
|
||||
sql_connect
|
||||
from mediagoblin.db.mongo.open import setup_connection_and_db_from_config as \
|
||||
mongo_connect
|
||||
from mediagoblin.db.sql.base import Session
|
||||
|
||||
|
||||
obj_id_table = dict()
|
||||
|
||||
def add_obj_ids(entry, new_entry):
|
||||
global obj_id_table
|
||||
print "%r -> %r" % (entry._id, new_entry.id)
|
||||
obj_id_table[entry._id] = new_entry.id
|
||||
|
||||
|
||||
def copy_attrs(entry, new_entry, attr_list):
|
||||
for a in attr_list:
|
||||
val = entry[a]
|
||||
setattr(new_entry, a, val)
|
||||
|
||||
def copy_reference_attr(entry, new_entry, ref_attr):
|
||||
val = entry[ref_attr]
|
||||
val = obj_id_table[val]
|
||||
setattr(new_entry, ref_attr, val)
|
||||
|
||||
|
||||
def convert_users(mk_db):
|
||||
session = Session()
|
||||
|
||||
for entry in mk_db.User.find():
|
||||
print entry.username
|
||||
|
||||
new_entry = User()
|
||||
copy_attrs(entry, new_entry,
|
||||
('username', 'email', 'created', 'pw_hash', 'email_verified',
|
||||
'status', 'verification_key', 'is_admin', 'url',
|
||||
'bio', 'bio_html',
|
||||
'fp_verification_key', 'fp_token_expire',))
|
||||
# new_entry.fp_verification_expire = entry.fp_token_expire
|
||||
|
||||
session.add(new_entry)
|
||||
session.flush()
|
||||
add_obj_ids(entry, new_entry)
|
||||
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
|
||||
def convert_media_entries(mk_db):
|
||||
session = Session()
|
||||
|
||||
for entry in mk_db.MediaEntry.find():
|
||||
print repr(entry.title)
|
||||
|
||||
new_entry = MediaEntry()
|
||||
copy_attrs(entry, new_entry,
|
||||
('title', 'slug', 'created',
|
||||
'description', 'description_html',
|
||||
'media_type', 'state',
|
||||
'fail_error',
|
||||
'queued_task_id',))
|
||||
copy_reference_attr(entry, new_entry, "uploader")
|
||||
|
||||
session.add(new_entry)
|
||||
session.flush()
|
||||
add_obj_ids(entry, new_entry)
|
||||
|
||||
for key, value in entry.media_files.iteritems():
|
||||
new_file = MediaFile(name=key, file_path=value)
|
||||
new_file.media_entry = new_entry.id
|
||||
Session.add(new_file)
|
||||
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
|
||||
def convert_media_tags(mk_db):
|
||||
session = Session()
|
||||
session.autoflush = False
|
||||
|
||||
for media in mk_db.MediaEntry.find():
|
||||
print repr(media.title)
|
||||
|
||||
for otag in media.tags:
|
||||
print " ", repr((otag["slug"], otag["name"]))
|
||||
|
||||
nslug = session.query(Tag).filter_by(slug=otag["slug"]).first()
|
||||
print " ", repr(nslug)
|
||||
if nslug is None:
|
||||
nslug = Tag(slug=otag["slug"])
|
||||
session.add(nslug)
|
||||
session.flush()
|
||||
print " ", repr(nslug), nslug.id
|
||||
|
||||
ntag = MediaTag()
|
||||
ntag.tag = nslug.id
|
||||
ntag.name = otag["name"]
|
||||
ntag.media_entry = obj_id_table[media._id]
|
||||
session.add(ntag)
|
||||
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
|
||||
def convert_media_comments(mk_db):
|
||||
session = Session()
|
||||
|
||||
for entry in mk_db.MediaComment.find():
|
||||
print repr(entry.content)
|
||||
|
||||
new_entry = MediaComment()
|
||||
copy_attrs(entry, new_entry,
|
||||
('created',
|
||||
'content', 'content_html',))
|
||||
copy_reference_attr(entry, new_entry, "media_entry")
|
||||
copy_reference_attr(entry, new_entry, "author")
|
||||
|
||||
session.add(new_entry)
|
||||
session.flush()
|
||||
add_obj_ids(entry, new_entry)
|
||||
|
||||
session.commit()
|
||||
session.close()
|
||||
|
||||
|
||||
def main():
|
||||
global_config, app_config = setup_global_and_app_config("mediagoblin.ini")
|
||||
|
||||
sql_conn, sql_db = sql_connect({'sql_engine': 'sqlite:///mediagoblin.db'})
|
||||
|
||||
mk_conn, mk_db = mongo_connect(app_config)
|
||||
|
||||
Base.metadata.create_all(sql_db.engine)
|
||||
|
||||
convert_users(mk_db)
|
||||
Session.remove()
|
||||
convert_media_entries(mk_db)
|
||||
Session.remove()
|
||||
convert_media_tags(mk_db)
|
||||
Session.remove()
|
||||
convert_media_comments(mk_db)
|
||||
Session.remove()
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
main()
|
18
mediagoblin/db/sql/extratypes.py
Normal file
18
mediagoblin/db/sql/extratypes.py
Normal file
@ -0,0 +1,18 @@
|
||||
from sqlalchemy.types import TypeDecorator, Unicode
|
||||
|
||||
|
||||
class PathTupleWithSlashes(TypeDecorator):
|
||||
"Represents a Tuple of strings as a slash separated string."
|
||||
|
||||
impl = Unicode
|
||||
|
||||
def process_bind_param(self, value, dialect):
|
||||
if value is not None:
|
||||
assert len(value), "Does not support empty lists"
|
||||
value = '/'.join(value)
|
||||
return value
|
||||
|
||||
def process_result_value(self, value, dialect):
|
||||
if value is not None:
|
||||
value = tuple(value.split('/'))
|
||||
return value
|
153
mediagoblin/db/sql/models.py
Normal file
153
mediagoblin/db/sql/models.py
Normal file
@ -0,0 +1,153 @@
|
||||
import datetime
|
||||
|
||||
from sqlalchemy.ext.declarative import declarative_base
|
||||
from sqlalchemy import (
|
||||
Column, Integer, Unicode, UnicodeText, DateTime, Boolean, ForeignKey,
|
||||
UniqueConstraint)
|
||||
from sqlalchemy.orm import relationship
|
||||
from sqlalchemy.orm.collections import attribute_mapped_collection
|
||||
from sqlalchemy.ext.associationproxy import association_proxy
|
||||
|
||||
from mediagoblin.db.sql.extratypes import PathTupleWithSlashes
|
||||
from mediagoblin.db.sql.base import GMGTableBase
|
||||
from mediagoblin.db.mixin import UserMixin, MediaEntryMixin
|
||||
|
||||
|
||||
Base = declarative_base(cls=GMGTableBase)
|
||||
|
||||
|
||||
class SimpleFieldAlias(object):
|
||||
"""An alias for any field"""
|
||||
def __init__(self, fieldname):
|
||||
self.fieldname = fieldname
|
||||
|
||||
def __get__(self, instance, cls):
|
||||
return getattr(instance, self.fieldname)
|
||||
|
||||
def __set__(self, instance, val):
|
||||
setattr(instance, self.fieldname, val)
|
||||
|
||||
|
||||
class User(Base, UserMixin):
|
||||
__tablename__ = "users"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
username = Column(Unicode, nullable=False, unique=True)
|
||||
email = Column(Unicode, nullable=False)
|
||||
created = Column(DateTime, nullable=False, default=datetime.datetime.now)
|
||||
pw_hash = Column(Unicode, nullable=False)
|
||||
email_verified = Column(Boolean)
|
||||
status = Column(Unicode, default=u"needs_email_verification", nullable=False)
|
||||
verification_key = Column(Unicode)
|
||||
is_admin = Column(Boolean, default=False, nullable=False)
|
||||
url = Column(Unicode)
|
||||
bio = Column(UnicodeText) # ??
|
||||
bio_html = Column(UnicodeText) # ??
|
||||
fp_verification_key = Column(Unicode)
|
||||
fp_token_expire = Column(DateTime)
|
||||
|
||||
## TODO
|
||||
# plugin data would be in a separate model
|
||||
|
||||
_id = SimpleFieldAlias("id")
|
||||
|
||||
|
||||
class MediaEntry(Base, MediaEntryMixin):
|
||||
__tablename__ = "media_entries"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
uploader = Column(Integer, ForeignKey('users.id'), nullable=False)
|
||||
title = Column(Unicode, nullable=False)
|
||||
slug = Column(Unicode, nullable=False)
|
||||
created = Column(DateTime, nullable=False, default=datetime.datetime.now)
|
||||
description = Column(UnicodeText) # ??
|
||||
description_html = Column(UnicodeText) # ??
|
||||
media_type = Column(Unicode, nullable=False)
|
||||
state = Column(Unicode, nullable=False) # or use sqlalchemy.types.Enum?
|
||||
|
||||
fail_error = Column(Unicode)
|
||||
fail_metadata = Column(UnicodeText)
|
||||
|
||||
queued_media_file = Column(PathTupleWithSlashes)
|
||||
|
||||
queued_task_id = Column(Unicode)
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint('uploader', 'slug'),
|
||||
{})
|
||||
|
||||
get_uploader = relationship(User)
|
||||
|
||||
media_files_helper = relationship("MediaFile",
|
||||
collection_class=attribute_mapped_collection("name"),
|
||||
cascade="all, delete-orphan"
|
||||
)
|
||||
media_files = association_proxy('media_files_helper', 'file_path',
|
||||
creator=lambda k,v: MediaFile(name=k, file_path=v)
|
||||
)
|
||||
|
||||
## TODO
|
||||
# media_data
|
||||
# attachment_files
|
||||
# fail_error
|
||||
|
||||
|
||||
class MediaFile(Base):
|
||||
__tablename__ = "mediafiles"
|
||||
|
||||
media_entry = Column(
|
||||
Integer, ForeignKey(MediaEntry.id),
|
||||
nullable=False, primary_key=True)
|
||||
name = Column(Unicode, primary_key=True)
|
||||
file_path = Column(PathTupleWithSlashes)
|
||||
|
||||
def __repr__(self):
|
||||
return "<MediaFile %s: %r>" % (self.name, self.file_path)
|
||||
|
||||
|
||||
class Tag(Base):
|
||||
__tablename__ = "tags"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
slug = Column(Unicode, nullable=False, unique=True)
|
||||
|
||||
|
||||
class MediaTag(Base):
|
||||
__tablename__ = "media_tags"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
tag = Column(Integer, ForeignKey('tags.id'), nullable=False)
|
||||
name = Column(Unicode)
|
||||
media_entry = Column(
|
||||
Integer, ForeignKey('media_entries.id'),
|
||||
nullable=False)
|
||||
# created = Column(DateTime, nullable=False, default=datetime.datetime.now)
|
||||
|
||||
__table_args__ = (
|
||||
UniqueConstraint('tag', 'media_entry'),
|
||||
{})
|
||||
|
||||
|
||||
class MediaComment(Base):
|
||||
__tablename__ = "media_comments"
|
||||
|
||||
id = Column(Integer, primary_key=True)
|
||||
media_entry = Column(
|
||||
Integer, ForeignKey('media_entries.id'), nullable=False)
|
||||
author = Column(Integer, ForeignKey('users.id'), nullable=False)
|
||||
created = Column(DateTime, nullable=False, default=datetime.datetime.now)
|
||||
content = Column(UnicodeText, nullable=False)
|
||||
content_html = Column(UnicodeText)
|
||||
|
||||
get_author = relationship(User)
|
||||
|
||||
|
||||
def show_table_init():
|
||||
from sqlalchemy import create_engine
|
||||
engine = create_engine('sqlite:///:memory:', echo=True)
|
||||
|
||||
Base.metadata.create_all(engine)
|
||||
|
||||
|
||||
if __name__ == '__main__':
|
||||
show_table_init()
|
33
mediagoblin/db/sql/open.py
Normal file
33
mediagoblin/db/sql/open.py
Normal file
@ -0,0 +1,33 @@
|
||||
from sqlalchemy import create_engine
|
||||
|
||||
from mediagoblin.db.sql.base import Session
|
||||
from mediagoblin.db.sql.models import Base
|
||||
|
||||
|
||||
class DatabaseMaster(object):
|
||||
def __init__(self, engine):
|
||||
self.engine = engine
|
||||
|
||||
for k,v in Base._decl_class_registry.iteritems():
|
||||
setattr(self, k, v)
|
||||
|
||||
def commit(self):
|
||||
Session.commit()
|
||||
|
||||
def save(self, obj):
|
||||
Session.add(obj)
|
||||
Session.flush()
|
||||
|
||||
def reset_after_request(self):
|
||||
Session.remove()
|
||||
|
||||
|
||||
def setup_connection_and_db_from_config(app_config):
|
||||
engine = create_engine(app_config['sql_engine'], echo=True)
|
||||
Session.configure(bind=engine)
|
||||
|
||||
return "dummy conn", DatabaseMaster(engine)
|
||||
|
||||
|
||||
def check_db_migrations_current(db):
|
||||
pass
|
@ -14,278 +14,5 @@
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
"""
|
||||
Utilities for database operations.
|
||||
|
||||
Some note on migration and indexing tools:
|
||||
|
||||
We store information about what the state of the database is in the
|
||||
'mediagoblin' document of the 'app_metadata' collection. Keys in that
|
||||
document relevant to here:
|
||||
|
||||
- 'migration_number': The integer representing the current state of
|
||||
the migrations
|
||||
"""
|
||||
|
||||
import copy
|
||||
|
||||
# Imports that other modules might use
|
||||
from pymongo import ASCENDING, DESCENDING
|
||||
from pymongo.errors import InvalidId
|
||||
from mongokit import ObjectId
|
||||
|
||||
from mediagoblin.db.indexes import ACTIVE_INDEXES, DEPRECATED_INDEXES
|
||||
|
||||
|
||||
################
|
||||
# Indexing tools
|
||||
################
|
||||
|
||||
|
||||
def add_new_indexes(database, active_indexes=ACTIVE_INDEXES):
|
||||
"""
|
||||
Add any new indexes to the database.
|
||||
|
||||
Args:
|
||||
- database: pymongo or mongokit database instance.
|
||||
- active_indexes: indexes to possibly add in the pattern of:
|
||||
{'collection_name': {
|
||||
'identifier': {
|
||||
'index': [index_foo_goes_here],
|
||||
'unique': True}}
|
||||
where 'index' is the index to add and all other options are
|
||||
arguments for collection.create_index.
|
||||
|
||||
Returns:
|
||||
A list of indexes added in form ('collection', 'index_name')
|
||||
"""
|
||||
indexes_added = []
|
||||
|
||||
for collection_name, indexes in active_indexes.iteritems():
|
||||
collection = database[collection_name]
|
||||
collection_indexes = collection.index_information().keys()
|
||||
|
||||
for index_name, index_data in indexes.iteritems():
|
||||
if not index_name in collection_indexes:
|
||||
# Get a copy actually so we don't modify the actual
|
||||
# structure
|
||||
index_data = copy.copy(index_data)
|
||||
index = index_data.pop('index')
|
||||
collection.create_index(
|
||||
index, name=index_name, **index_data)
|
||||
|
||||
indexes_added.append((collection_name, index_name))
|
||||
|
||||
return indexes_added
|
||||
|
||||
|
||||
def remove_deprecated_indexes(database, deprecated_indexes=DEPRECATED_INDEXES):
|
||||
"""
|
||||
Remove any deprecated indexes from the database.
|
||||
|
||||
Args:
|
||||
- database: pymongo or mongokit database instance.
|
||||
- deprecated_indexes: the indexes to deprecate in the pattern of:
|
||||
{'collection_name': {
|
||||
'identifier': {
|
||||
'index': [index_foo_goes_here],
|
||||
'unique': True}}
|
||||
|
||||
(... although we really only need the 'identifier' here, as the
|
||||
rest of the information isn't used in this case. But it's kept
|
||||
around so we can remember what it was)
|
||||
|
||||
Returns:
|
||||
A list of indexes removed in form ('collection', 'index_name')
|
||||
"""
|
||||
indexes_removed = []
|
||||
|
||||
for collection_name, indexes in deprecated_indexes.iteritems():
|
||||
collection = database[collection_name]
|
||||
collection_indexes = collection.index_information().keys()
|
||||
|
||||
for index_name, index_data in indexes.iteritems():
|
||||
if index_name in collection_indexes:
|
||||
collection.drop_index(index_name)
|
||||
|
||||
indexes_removed.append((collection_name, index_name))
|
||||
|
||||
return indexes_removed
|
||||
|
||||
|
||||
#################
|
||||
# Migration tools
|
||||
#################
|
||||
|
||||
# The default migration registry...
|
||||
#
|
||||
# Don't set this yourself! RegisterMigration will automatically fill
|
||||
# this with stuff via decorating methods in migrations.py
|
||||
|
||||
class MissingCurrentMigration(Exception): pass
|
||||
|
||||
|
||||
MIGRATIONS = {}
|
||||
|
||||
|
||||
class RegisterMigration(object):
|
||||
"""
|
||||
Tool for registering migrations
|
||||
|
||||
Call like:
|
||||
|
||||
@RegisterMigration(33)
|
||||
def update_dwarves(database):
|
||||
[...]
|
||||
|
||||
This will register your migration with the default migration
|
||||
registry. Alternately, to specify a very specific
|
||||
migration_registry, you can pass in that as the second argument.
|
||||
|
||||
Note, the number of your migration should NEVER be 0 or less than
|
||||
0. 0 is the default "no migrations" state!
|
||||
"""
|
||||
def __init__(self, migration_number, migration_registry=MIGRATIONS):
|
||||
assert migration_number > 0, "Migration number must be > 0!"
|
||||
assert not migration_registry.has_key(migration_number), \
|
||||
"Duplicate migration numbers detected! That's not allowed!"
|
||||
|
||||
self.migration_number = migration_number
|
||||
self.migration_registry = migration_registry
|
||||
|
||||
def __call__(self, migration):
|
||||
self.migration_registry[self.migration_number] = migration
|
||||
return migration
|
||||
|
||||
|
||||
class MigrationManager(object):
|
||||
"""
|
||||
Migration handling tool.
|
||||
|
||||
Takes information about a database, lets you update the database
|
||||
to the latest migrations, etc.
|
||||
"""
|
||||
def __init__(self, database, migration_registry=MIGRATIONS):
|
||||
"""
|
||||
Args:
|
||||
- database: database we're going to migrate
|
||||
- migration_registry: where we should find all migrations to
|
||||
run
|
||||
"""
|
||||
self.database = database
|
||||
self.migration_registry = migration_registry
|
||||
self._sorted_migrations = None
|
||||
|
||||
def _ensure_current_migration_record(self):
|
||||
"""
|
||||
If there isn't a database[u'app_metadata'] mediagoblin entry
|
||||
with the 'current_migration', throw an error.
|
||||
"""
|
||||
if self.database_current_migration() is None:
|
||||
raise MissingCurrentMigration(
|
||||
"Tried to call function which requires "
|
||||
"'current_migration' set in database")
|
||||
|
||||
@property
|
||||
def sorted_migrations(self):
|
||||
"""
|
||||
Sort migrations if necessary and store in self._sorted_migrations
|
||||
"""
|
||||
if not self._sorted_migrations:
|
||||
self._sorted_migrations = sorted(
|
||||
self.migration_registry.items(),
|
||||
# sort on the key... the migration number
|
||||
key=lambda migration_tuple: migration_tuple[0])
|
||||
|
||||
return self._sorted_migrations
|
||||
|
||||
def latest_migration(self):
|
||||
"""
|
||||
Return a migration number for the latest migration, or 0 if
|
||||
there are no migrations.
|
||||
"""
|
||||
if self.sorted_migrations:
|
||||
return self.sorted_migrations[-1][0]
|
||||
else:
|
||||
# If no migrations have been set, we start at 0.
|
||||
return 0
|
||||
|
||||
def set_current_migration(self, migration_number):
|
||||
"""
|
||||
Set the migration in the database to migration_number
|
||||
"""
|
||||
# Add the mediagoblin migration if necessary
|
||||
self.database[u'app_metadata'].update(
|
||||
{u'_id': u'mediagoblin'},
|
||||
{u'$set': {u'current_migration': migration_number}},
|
||||
upsert=True)
|
||||
|
||||
def install_migration_version_if_missing(self):
|
||||
"""
|
||||
Sets the migration to the latest version if no migration
|
||||
version at all is set.
|
||||
"""
|
||||
mgoblin_metadata = self.database[u'app_metadata'].find_one(
|
||||
{u'_id': u'mediagoblin'})
|
||||
if not mgoblin_metadata:
|
||||
latest_migration = self.latest_migration()
|
||||
self.set_current_migration(latest_migration)
|
||||
|
||||
def database_current_migration(self):
|
||||
"""
|
||||
Return the current migration in the database.
|
||||
"""
|
||||
mgoblin_metadata = self.database[u'app_metadata'].find_one(
|
||||
{u'_id': u'mediagoblin'})
|
||||
if not mgoblin_metadata:
|
||||
return None
|
||||
else:
|
||||
return mgoblin_metadata[u'current_migration']
|
||||
|
||||
def database_at_latest_migration(self):
|
||||
"""
|
||||
See if the database is at the latest migration.
|
||||
Returns a boolean.
|
||||
"""
|
||||
current_migration = self.database_current_migration()
|
||||
return current_migration == self.latest_migration()
|
||||
|
||||
def migrations_to_run(self):
|
||||
"""
|
||||
Get a list of migrations to run still, if any.
|
||||
|
||||
Note that calling this will set your migration version to the
|
||||
latest version if it isn't installed to anything yet!
|
||||
"""
|
||||
self._ensure_current_migration_record()
|
||||
|
||||
db_current_migration = self.database_current_migration()
|
||||
|
||||
return [
|
||||
(migration_number, migration_func)
|
||||
for migration_number, migration_func in self.sorted_migrations
|
||||
if migration_number > db_current_migration]
|
||||
|
||||
def migrate_new(self, pre_callback=None, post_callback=None):
|
||||
"""
|
||||
Run all migrations.
|
||||
|
||||
Includes two optional args:
|
||||
- pre_callback: if called, this is a callback on something to
|
||||
run pre-migration. Takes (migration_number, migration_func)
|
||||
as arguments
|
||||
- pre_callback: if called, this is a callback on something to
|
||||
run post-migration. Takes (migration_number, migration_func)
|
||||
as arguments
|
||||
"""
|
||||
# If we aren't set to any version number, presume we're at the
|
||||
# latest (which means we'll do nothing here...)
|
||||
self.install_migration_version_if_missing()
|
||||
|
||||
for migration_number, migration_func in self.migrations_to_run():
|
||||
if pre_callback:
|
||||
pre_callback(migration_number, migration_func)
|
||||
migration_func(self.database)
|
||||
self.set_current_migration(migration_number)
|
||||
if post_callback:
|
||||
post_callback(migration_number, migration_func)
|
||||
from mediagoblin.db.mongo.util import (ObjectId, InvalidId,
|
||||
DESCENDING)
|
||||
|
@ -40,7 +40,7 @@ def require_active_login(controller):
|
||||
request.user.get('status') == u'needs_email_verification':
|
||||
return redirect(
|
||||
request, 'mediagoblin.user_pages.user_home',
|
||||
user=request.user['username'])
|
||||
user=request.user.username)
|
||||
elif not request.user or request.user.get('status') != u'active':
|
||||
return exc.HTTPFound(
|
||||
location="%s?next=%s" % (
|
||||
@ -57,10 +57,10 @@ def user_may_delete_media(controller):
|
||||
Require user ownership of the MediaEntry to delete.
|
||||
"""
|
||||
def wrapper(request, *args, **kwargs):
|
||||
uploader = request.db.MediaEntry.find_one(
|
||||
{'_id': ObjectId(request.matchdict['media'])}).uploader()
|
||||
if not (request.user['is_admin'] or
|
||||
request.user['_id'] == uploader['_id']):
|
||||
uploader_id = request.db.MediaEntry.find_one(
|
||||
{'_id': ObjectId(request.matchdict['media'])}).uploader
|
||||
if not (request.user.is_admin or
|
||||
request.user._id == uploader_id):
|
||||
return exc.HTTPForbidden()
|
||||
|
||||
return controller(request, *args, **kwargs)
|
||||
@ -95,11 +95,10 @@ def get_user_media_entry(controller):
|
||||
|
||||
if not user:
|
||||
return render_404(request)
|
||||
|
||||
media = request.db.MediaEntry.find_one(
|
||||
{'slug': request.matchdict['media'],
|
||||
'state': 'processed',
|
||||
'uploader': user['_id']})
|
||||
'uploader': user._id})
|
||||
|
||||
# no media via slug? Grab it via ObjectId
|
||||
if not media:
|
||||
@ -107,7 +106,7 @@ def get_user_media_entry(controller):
|
||||
media = request.db.MediaEntry.find_one(
|
||||
{'_id': ObjectId(request.matchdict['media']),
|
||||
'state': 'processed',
|
||||
'uploader': user['_id']})
|
||||
'uploader': user._id})
|
||||
except InvalidId:
|
||||
return render_404(request)
|
||||
|
||||
@ -119,6 +118,7 @@ def get_user_media_entry(controller):
|
||||
|
||||
return _make_safe(wrapper, controller)
|
||||
|
||||
|
||||
def get_media_entry_by_id(controller):
|
||||
"""
|
||||
Pass in a MediaEntry based off of a url component
|
||||
@ -138,4 +138,3 @@ def get_media_entry_by_id(controller):
|
||||
return controller(request, media=media, *args, **kwargs)
|
||||
|
||||
return _make_safe(wrapper, controller)
|
||||
|
||||
|
@ -13,5 +13,3 @@
|
||||
#
|
||||
# You should have received a copy of the GNU Affero General Public License
|
||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||
|
||||
|
||||
|
@ -24,15 +24,21 @@ class EditForm(wtforms.Form):
|
||||
title = wtforms.TextField(
|
||||
_('Title'),
|
||||
[wtforms.validators.Length(min=0, max=500)])
|
||||
description = wtforms.TextAreaField('Description of this work')
|
||||
description = wtforms.TextAreaField(
|
||||
_('Description of this work'),
|
||||
description=_("""You can use
|
||||
<a href="http://daringfireball.net/projects/markdown/basics">
|
||||
Markdown</a> for formatting."""))
|
||||
tags = wtforms.TextField(
|
||||
_('Tags'),
|
||||
[tag_length_validator])
|
||||
[tag_length_validator],
|
||||
description=_(
|
||||
"Separate tags by commas."))
|
||||
slug = wtforms.TextField(
|
||||
_('Slug'),
|
||||
[wtforms.validators.Required(message=_("The slug can't be empty"))],
|
||||
description=_(
|
||||
"The title part of this media's URL. "
|
||||
"The title part of this media's address. "
|
||||
"You usually don't need to change this."))
|
||||
license = wtforms.SelectField(
|
||||
_('License'),
|
||||
@ -41,11 +47,27 @@ class EditForm(wtforms.Form):
|
||||
class EditProfileForm(wtforms.Form):
|
||||
bio = wtforms.TextAreaField(
|
||||
_('Bio'),
|
||||
[wtforms.validators.Length(min=0, max=500)])
|
||||
[wtforms.validators.Length(min=0, max=500)],
|
||||
description=_("""You can use
|
||||
<a href="http://daringfireball.net/projects/markdown/basics">
|
||||
Markdown</a> for formatting."""))
|
||||
url = wtforms.TextField(
|
||||
_('Website'),
|
||||
[wtforms.validators.Optional(),
|
||||
wtforms.validators.URL(message='Improperly formed URL')])
|
||||
wtforms.validators.URL(message="""This address contains errors""")])
|
||||
|
||||
|
||||
class EditAccountForm(wtforms.Form):
|
||||
old_password = wtforms.PasswordField(
|
||||
_('Old password'),
|
||||
[wtforms.validators.Required()],
|
||||
description=_(
|
||||
"Enter your old password to prove you own this account."))
|
||||
new_password = wtforms.PasswordField(
|
||||
_('New password'),
|
||||
[wtforms.validators.Required(),
|
||||
wtforms.validators.Length(min=6, max=30)],
|
||||
id="password")
|
||||
|
||||
|
||||
class EditAttachmentsForm(wtforms.Form):
|
||||
|
@ -17,8 +17,8 @@
|
||||
|
||||
def may_edit_media(request, media):
|
||||
"""Check, if the request's user may edit the media details"""
|
||||
if media['uploader'] == request.user['_id']:
|
||||
if media.uploader == request.user._id:
|
||||
return True
|
||||
if request.user['is_admin']:
|
||||
if request.user.is_admin:
|
||||
return True
|
||||
return False
|
||||
|
@ -20,4 +20,7 @@ from routes.route import Route
|
||||
edit_routes = [
|
||||
# Media editing view handled in user_pages/routing.py
|
||||
Route('mediagoblin.edit.profile', '/profile/',
|
||||
controller="mediagoblin.edit.views:edit_profile")]
|
||||
controller="mediagoblin.edit.views:edit_profile"),
|
||||
Route('mediagoblin.edit.account', '/account/',
|
||||
controller="mediagoblin.edit.views:edit_account")
|
||||
]
|
||||
|
@ -26,6 +26,7 @@ from werkzeug.utils import secure_filename
|
||||
from mediagoblin import messages
|
||||
from mediagoblin import mg_globals
|
||||
|
||||
from mediagoblin.auth import lib as auth_lib
|
||||
from mediagoblin.edit import forms
|
||||
from mediagoblin.edit.lib import may_edit_media
|
||||
from mediagoblin.decorators import require_active_login, get_user_media_entry
|
||||
@ -43,11 +44,11 @@ def edit_media(request, media):
|
||||
return exc.HTTPForbidden()
|
||||
|
||||
defaults = dict(
|
||||
title=media['title'],
|
||||
slug=media['slug'],
|
||||
description=media['description'],
|
||||
tags=media_tags_as_string(media['tags']),
|
||||
license=media['license'])
|
||||
title=media.title,
|
||||
slug=media.slug,
|
||||
description=media.description,
|
||||
tags=media_tags_as_string(media.tags))
|
||||
license=media.license)
|
||||
|
||||
form = forms.EditForm(
|
||||
request.POST,
|
||||
@ -58,33 +59,34 @@ def edit_media(request, media):
|
||||
# and userid.
|
||||
existing_user_slug_entries = request.db.MediaEntry.find(
|
||||
{'slug': request.POST['slug'],
|
||||
'uploader': media['uploader'],
|
||||
'_id': {'$ne': media['_id']}}).count()
|
||||
'uploader': media.uploader,
|
||||
'_id': {'$ne': media._id}}).count()
|
||||
|
||||
if existing_user_slug_entries:
|
||||
form.slug.errors.append(
|
||||
_(u'An entry with that slug already exists for this user.'))
|
||||
else:
|
||||
media['title'] = unicode(request.POST['title'])
|
||||
media['description'] = unicode(request.POST.get('description'))
|
||||
media.title = unicode(request.POST['title'])
|
||||
media.description = unicode(request.POST.get('description'))
|
||||
media['tags'] = convert_to_tag_list_of_dicts(
|
||||
request.POST.get('tags'))
|
||||
|
||||
media['description_html'] = cleaned_markdown_conversion(
|
||||
media['description'])
|
||||
media.description_html = cleaned_markdown_conversion(
|
||||
media.description)
|
||||
|
||||
media['license'] = (
|
||||
media.license = (
|
||||
unicode(request.POST.get('license'))
|
||||
or '')
|
||||
|
||||
media['slug'] = unicode(request.POST['slug'])
|
||||
media.slug = unicode(request.POST['slug'])
|
||||
|
||||
media.save()
|
||||
|
||||
return exc.HTTPFound(
|
||||
location=media.url_for_self(request.urlgen))
|
||||
|
||||
if request.user['is_admin'] \
|
||||
and media['uploader'] != request.user['_id'] \
|
||||
if request.user.is_admin \
|
||||
and media.uploader != request.user._id \
|
||||
and request.method != 'POST':
|
||||
messages.add_message(
|
||||
request, messages.WARNING,
|
||||
@ -110,7 +112,7 @@ def edit_attachments(request, media):
|
||||
|
||||
attachment_public_filepath \
|
||||
= mg_globals.public_store.get_unique_filepath(
|
||||
['media_entries', unicode(media['_id']), 'attachment',
|
||||
['media_entries', unicode(media._id), 'attachment',
|
||||
secure_filename(request.POST['attachment_file'].filename)])
|
||||
|
||||
attachment_public_file = mg_globals.public_store.get_file(
|
||||
@ -126,7 +128,7 @@ def edit_attachments(request, media):
|
||||
name=request.POST['attachment_name'] \
|
||||
or request.POST['attachment_file'].filename,
|
||||
filepath=attachment_public_filepath,
|
||||
created=datetime.utcnow()
|
||||
created=datetime.utcnow(),
|
||||
))
|
||||
|
||||
media.save()
|
||||
@ -152,7 +154,7 @@ def edit_attachments(request, media):
|
||||
def edit_profile(request):
|
||||
# admins may edit any user profile given a username in the querystring
|
||||
edit_username = request.GET.get('username')
|
||||
if request.user['is_admin'] and request.user['username'] != edit_username:
|
||||
if request.user.is_admin and request.user.username != edit_username:
|
||||
user = request.db.User.find_one({'username': edit_username})
|
||||
# No need to warn again if admin just submitted an edited profile
|
||||
if request.method != 'POST':
|
||||
@ -167,22 +169,64 @@ def edit_profile(request):
|
||||
bio=user.get('bio'))
|
||||
|
||||
if request.method == 'POST' and form.validate():
|
||||
user['url'] = unicode(request.POST['url'])
|
||||
user['bio'] = unicode(request.POST['bio'])
|
||||
user.url = unicode(request.POST['url'])
|
||||
user.bio = unicode(request.POST['bio'])
|
||||
|
||||
user['bio_html'] = cleaned_markdown_conversion(user['bio'])
|
||||
user.bio_html = cleaned_markdown_conversion(user.bio)
|
||||
|
||||
user.save()
|
||||
user.save()
|
||||
|
||||
messages.add_message(request,
|
||||
messages.SUCCESS,
|
||||
'Profile edited!')
|
||||
return redirect(request,
|
||||
'mediagoblin.user_pages.user_home',
|
||||
user=edit_username)
|
||||
messages.add_message(request,
|
||||
messages.SUCCESS,
|
||||
_("Profile changes saved"))
|
||||
return redirect(request,
|
||||
'mediagoblin.user_pages.user_home',
|
||||
user=user['username'])
|
||||
|
||||
return render_to_response(
|
||||
request,
|
||||
'mediagoblin/edit/edit_profile.html',
|
||||
{'user': user,
|
||||
'form': form})
|
||||
|
||||
|
||||
@require_active_login
|
||||
def edit_account(request):
|
||||
edit_username = request.GET.get('username')
|
||||
user = request.user
|
||||
|
||||
form = forms.EditAccountForm(request.POST)
|
||||
|
||||
if request.method == 'POST' and form.validate():
|
||||
password_matches = auth_lib.bcrypt_check_password(
|
||||
request.POST['old_password'],
|
||||
user.pw_hash)
|
||||
|
||||
if (request.POST['old_password'] or request.POST['new_password']) and not \
|
||||
password_matches:
|
||||
form.old_password.errors.append(_('Wrong password'))
|
||||
|
||||
return render_to_response(
|
||||
request,
|
||||
'mediagoblin/edit/edit_account.html',
|
||||
{'user': user,
|
||||
'form': form})
|
||||
|
||||
if password_matches:
|
||||
user.pw_hash = auth_lib.bcrypt_gen_password_hash(
|
||||
request.POST['new_password'])
|
||||
|
||||
user.save()
|
||||
|
||||
messages.add_message(request,
|
||||
messages.SUCCESS,
|
||||
_("Account settings saved"))
|
||||
return redirect(request,
|
||||
'mediagoblin.user_pages.user_home',
|
||||
user=user.username)
|
||||
|
||||
return render_to_response(
|
||||
request,
|
||||
'mediagoblin/edit/edit_account.html',
|
||||
{'user': user,
|
||||
'form': form})
|
||||
|
@ -29,7 +29,7 @@ SUBCOMMAND_MAP = {
|
||||
'setup': 'mediagoblin.gmg_commands.migrate:migrate_parser_setup',
|
||||
'func': 'mediagoblin.gmg_commands.migrate:migrate',
|
||||
'help': 'Apply all unapplied bulk migrations to the database'},
|
||||
'adduser':{
|
||||
'adduser': {
|
||||
'setup': 'mediagoblin.gmg_commands.users:adduser_parser_setup',
|
||||
'func': 'mediagoblin.gmg_commands.users:adduser',
|
||||
'help': 'Creates an user'},
|
||||
@ -68,7 +68,7 @@ def main_cli():
|
||||
|
||||
subparsers = parser.add_subparsers(help='sub-command help')
|
||||
for command_name, command_struct in SUBCOMMAND_MAP.iteritems():
|
||||
if command_struct.has_key('help'):
|
||||
if 'help' in command_struct:
|
||||
subparser = subparsers.add_parser(
|
||||
command_name, help=command_struct['help'])
|
||||
else:
|
||||
@ -94,4 +94,3 @@ def main_cli():
|
||||
|
||||
if __name__ == '__main__':
|
||||
main_cli()
|
||||
|
||||
|
@ -16,7 +16,6 @@
|
||||
|
||||
from mediagoblin import mg_globals
|
||||
from mediagoblin.db.open import setup_connection_and_db_from_config
|
||||
from mediagoblin.init.config import read_mediagoblin_config
|
||||
from mediagoblin.storage.filestorage import BasicFileStorage
|
||||
from mediagoblin.init import setup_storage, setup_global_and_app_config
|
||||
|
||||
@ -65,10 +64,10 @@ def _import_media(db, args):
|
||||
queue_cache = BasicFileStorage(
|
||||
args._cache_path['queue'])
|
||||
|
||||
for entry in db.media_entries.find():
|
||||
for name, path in entry['media_files'].items():
|
||||
for entry in db.MediaEntry.find():
|
||||
for name, path in entry.media_files.items():
|
||||
_log.info('Importing: {0} - {1}'.format(
|
||||
entry['title'],
|
||||
entry.title,
|
||||
name))
|
||||
|
||||
media_file = mg_globals.public_store.get_file(path, mode='wb')
|
||||
@ -88,7 +87,7 @@ def _import_database(db, args):
|
||||
args.mongorestore_path,
|
||||
'-d', db.name,
|
||||
os.path.join(args._cache_path['database'], db.name)])
|
||||
|
||||
|
||||
p.wait()
|
||||
|
||||
_log.info('...Database imported')
|
||||
@ -108,7 +107,7 @@ def env_import(args):
|
||||
|
||||
global_config, app_config = setup_global_and_app_config(args.conf_file)
|
||||
connection, db = setup_connection_and_db_from_config(
|
||||
app_config, use_pymongo=True)
|
||||
app_config)
|
||||
|
||||
tf = tarfile.open(
|
||||
args.tar_file,
|
||||
@ -207,15 +206,17 @@ def _export_media(db, args):
|
||||
queue_cache = BasicFileStorage(
|
||||
args._cache_path['queue'])
|
||||
|
||||
for entry in db.media_entries.find():
|
||||
for name, path in entry['media_files'].items():
|
||||
_log.info('Exporting {0} - {1}'.format(
|
||||
entry['title'],
|
||||
for entry in db.MediaEntry.find():
|
||||
for name, path in entry.media_files.items():
|
||||
_log.info(u'Exporting {0} - {1}'.format(
|
||||
entry.title,
|
||||
name))
|
||||
|
||||
mc_file = media_cache.get_file(path, mode='wb')
|
||||
mc_file.write(
|
||||
mg_globals.public_store.get_file(path, mode='rb').read())
|
||||
try:
|
||||
mc_file = media_cache.get_file(path, mode='wb')
|
||||
mc_file.write(
|
||||
mg_globals.public_store.get_file(path, mode='rb').read())
|
||||
except Exception as e:
|
||||
_log.error('Failed: {0}'.format(e))
|
||||
|
||||
_log.info('...Media exported')
|
||||
|
||||
@ -226,7 +227,8 @@ def env_export(args):
|
||||
'''
|
||||
if args.cache_path:
|
||||
if os.path.exists(args.cache_path):
|
||||
_log.error('The cache directory must not exist before you run this script')
|
||||
_log.error('The cache directory must not exist '
|
||||
'before you run this script')
|
||||
_log.error('Cache directory: {0}'.format(args.cache_path))
|
||||
|
||||
return False
|
||||
@ -242,9 +244,9 @@ def env_export(args):
|
||||
globa_config, app_config = setup_global_and_app_config(args.conf_file)
|
||||
|
||||
setup_storage()
|
||||
|
||||
|
||||
connection, db = setup_connection_and_db_from_config(
|
||||
app_config, use_pymongo=True)
|
||||
app_config)
|
||||
|
||||
_export_database(db, args)
|
||||
|
||||
|
@ -16,12 +16,12 @@
|
||||
|
||||
import sys
|
||||
|
||||
from mediagoblin.db import util as db_util
|
||||
from mediagoblin.db.mongo import util as db_util
|
||||
from mediagoblin.db.open import setup_connection_and_db_from_config
|
||||
from mediagoblin.init.config import read_mediagoblin_config
|
||||
from mediagoblin.init import setup_global_and_app_config
|
||||
|
||||
# This MUST be imported so as to set up the appropriate migrations!
|
||||
from mediagoblin.db import migrations
|
||||
from mediagoblin.db.mongo import migrations
|
||||
|
||||
|
||||
def migrate_parser_setup(subparser):
|
||||
@ -41,9 +41,9 @@ def _print_finished_migration(migration_number, migration_func):
|
||||
|
||||
|
||||
def migrate(args):
|
||||
config, validation_result = read_mediagoblin_config(args.conf_file)
|
||||
global_config, app_config = setup_global_and_app_config(args.conf_file)
|
||||
connection, db = setup_connection_and_db_from_config(
|
||||
config['mediagoblin'], use_pymongo=True)
|
||||
app_config, use_pymongo=True)
|
||||
migration_manager = db_util.MigrationManager(db)
|
||||
|
||||
# Clear old indexes
|
||||
@ -53,13 +53,13 @@ def migrate(args):
|
||||
for collection, index_name in removed_indexes:
|
||||
print "Removed index '%s' in collection '%s'" % (
|
||||
index_name, collection)
|
||||
|
||||
|
||||
# Migrate
|
||||
print "\n== Applying migrations... =="
|
||||
migration_manager.migrate_new(
|
||||
pre_callback=_print_started_migration,
|
||||
post_callback=_print_finished_migration)
|
||||
|
||||
|
||||
# Add new indexes
|
||||
print "\n== Adding new indexes... =="
|
||||
new_indexes = db_util.add_new_indexes(db)
|
||||
|
@ -18,27 +18,30 @@ from mediagoblin.gmg_commands import util as commands_util
|
||||
from mediagoblin.auth import lib as auth_lib
|
||||
from mediagoblin import mg_globals
|
||||
|
||||
|
||||
def adduser_parser_setup(subparser):
|
||||
subparser.add_argument(
|
||||
'username',
|
||||
'--username','-u',
|
||||
help="Username used to login")
|
||||
subparser.add_argument(
|
||||
'password',
|
||||
help="Your supersecret word to login")
|
||||
'--password','-p',
|
||||
help="Your supersecret word to login, beware of storing it in bash history")
|
||||
subparser.add_argument(
|
||||
'email',
|
||||
help="Email to recieve notifications")
|
||||
'--email','-e',
|
||||
help="Email to receive notifications")
|
||||
|
||||
|
||||
def adduser(args):
|
||||
#TODO: Lets trust admins this do not validate Emails :)
|
||||
commands_util.setup_app(args)
|
||||
|
||||
args.username = commands_util.prompt_if_not_set(args.username, "Username:")
|
||||
args.password = commands_util.prompt_if_not_set(args.password, "Password:",True)
|
||||
args.email = commands_util.prompt_if_not_set(args.email, "Email:")
|
||||
|
||||
db = mg_globals.database
|
||||
users_with_username = \
|
||||
db.User.find({
|
||||
'username': args.username.lower()
|
||||
'username': args.username.lower(),
|
||||
}).count()
|
||||
|
||||
if users_with_username:
|
||||
@ -47,11 +50,11 @@ def adduser(args):
|
||||
else:
|
||||
# Create the user
|
||||
entry = db.User()
|
||||
entry['username'] = unicode(args.username.lower())
|
||||
entry['email'] = unicode(args.email)
|
||||
entry['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password)
|
||||
entry['status'] = u'active'
|
||||
entry['email_verified'] = True
|
||||
entry.username = unicode(args.username.lower())
|
||||
entry.email = unicode(args.email)
|
||||
entry.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
|
||||
entry.status = u'active'
|
||||
entry.email_verified = True
|
||||
entry.save(validate=True)
|
||||
|
||||
print "User created (and email marked as verified)"
|
||||
@ -68,9 +71,9 @@ def makeadmin(args):
|
||||
|
||||
db = mg_globals.database
|
||||
|
||||
user = db.User.one({'username':unicode(args.username.lower())})
|
||||
user = db.User.one({'username': unicode(args.username.lower())})
|
||||
if user:
|
||||
user['is_admin'] = True
|
||||
user.is_admin = True
|
||||
user.save()
|
||||
print 'The user is now Admin'
|
||||
else:
|
||||
@ -91,11 +94,10 @@ def changepw(args):
|
||||
|
||||
db = mg_globals.database
|
||||
|
||||
user = db.User.one({'username':unicode(args.username.lower())})
|
||||
user = db.User.one({'username': unicode(args.username.lower())})
|
||||
if user:
|
||||
user['pw_hash'] = auth_lib.bcrypt_gen_password_hash(args.password)
|
||||
user.pw_hash = auth_lib.bcrypt_gen_password_hash(args.password)
|
||||
user.save()
|
||||
print 'Password successfully changed'
|
||||
else:
|
||||
print 'The user doesn\'t exist'
|
||||
|
||||
|
@ -16,6 +16,7 @@
|
||||
|
||||
|
||||
from mediagoblin import app
|
||||
import getpass
|
||||
|
||||
|
||||
def setup_app(args):
|
||||
@ -25,3 +26,15 @@ def setup_app(args):
|
||||
mgoblin_app = app.MediaGoblinApp(args.conf_file)
|
||||
|
||||
return mgoblin_app
|
||||
|
||||
def prompt_if_not_set(variable, text, password=False):
|
||||
"""
|
||||
Checks if the variable is None and prompt for a value if it is
|
||||
"""
|
||||
if variable is None:
|
||||
if not password:
|
||||
variable=raw_input(text + u' ')
|
||||
else:
|
||||
variable=getpass.getpass(text + u' ')
|
||||
|
||||
return variable
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -21,27 +21,19 @@ msgstr ""
|
||||
"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 && n%100<=99 ? 4 : 5\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "اسم المستخدم"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "كلمة السر"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "يجب أن تتطابق كلمتا السر."
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "أكّد كلمة السر"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr "اكتبها مرة أخرى هنا للتأكد من عدم وجود أخطاء إملائية."
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "عنوان البريد الإلكتروني"
|
||||
|
||||
@ -54,10 +46,10 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "عذرًا، لقد اختار مستخدم آخر هذا الاسم."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "عفوًا، هذا العنوان البريدي مستخدم."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
@ -65,15 +57,28 @@ msgstr ""
|
||||
"تم التحقق من بريدك الإلكتروني. يمكنك الآن الولوج، وتحرير ملفك الشخصي، ونشر "
|
||||
"الصور!"
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "مفتاح التحقق أو معرف المستخدم خاطئ"
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "أعدنا إرسال رسالة التحقق."
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
@ -81,74 +86,127 @@ msgstr ""
|
||||
"تعذر إرسال رسالة استعادة كلمة السر لأن اسم المستخدم معطل أو لأننا لم نتحقق "
|
||||
"من بريدك الإلكتروني."
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "العنوان"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "وصف هذا العمل."
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "الوسوم"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr "المسار"
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "لا يمكن ترك المسار فارغًا"
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
"الجزء الذي يمثل عنوان الملف في المسار. لا حاجة إلى تغيير محتوى هذه الخانة "
|
||||
"عادةً."
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "السيرة"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "الموقع الإلكتروني"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "يوجد ملف آخر بهذا المسار لدى هذى المستخدم."
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr "أنت تحرّر وسائط مستخدم آخر. كن حذرًا أثناء العملية."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "أنت تحرّر ملف مستخدم آخر. كن حذرًا أثناء العملية."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "الملف"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "وصف هذا العمل."
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "يجب أن تضع ملفًا."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "لا يبدو أن هذا الملف صورة!"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "يا سلام! نُشرَت!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "صورة قزم مرتبك"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr "ويحي!"
|
||||
|
||||
@ -163,33 +221,30 @@ msgid ""
|
||||
msgstr ""
|
||||
"إن كنت متأكدًا من صحة العنوان فربما تكون الصفحة التي تريدها نُقلت أو حُذفت."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "صورة قزم مرتبك"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "غنو ميدياغوبلن"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "شعار ميدياغوبلن"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "أرسل وسائط"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr "أضف وسائط"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "أكّد بريدك"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "لِج"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -199,81 +254,53 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "مرحبًا بكم يا محبي الوسائط! ميدياغوبلن هو..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "المكان الأنسب لوسائطك!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
msgstr "مكان يجتمع فيه الناس ليتعاونوا ويعرضوا إبداعاتهم الأصلية والمقتبسة!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr "مشروع حر، فنحن أحد مشاريع <a href=\"http://gnu.org\">غنو</a>."
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr "مشروع يحاول جعل عالمنا أفضل عن طريق اللامركزية (قريبًا!)."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
"جاهز للتمدد. (سيُضاف دعم أنساق كثيرة من الوسائط قريبًا، كما سندعم الفيديو!)."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">أنشئ حسابًا مجانيًا</a>\n"
|
||||
" أو\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">ركّب ميدياغوبلن على خادومك الخاص</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr "أحدث الوسائط"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr "أدخل كلمة سرك الجديدة"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr "أدخل اسم المستخدم أو بريدك الإلكتروني"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
msgstr "لقد غُيرت كلمة سرك. جرّب الولوج الآن."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
msgstr "تفقد بريدك الإلكتروني. لقد أرسلنا رسالة بها وصلة لتغيير كلمة سرك."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
@ -300,27 +327,23 @@ msgstr ""
|
||||
msgid "Logging in failed!"
|
||||
msgstr "فشل الولوج!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "ألا تملك حسابًا بعد؟"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "أنشئ حسابًا هنا!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr "أنسيت كلمة سرك؟"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr "غيّرها!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "أنشئ حسابًا!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr "أنشئ"
|
||||
|
||||
@ -352,36 +375,114 @@ msgid "Cancel"
|
||||
msgstr "ألغِ"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "احفظ التغييرات"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "تحرير ملف %(username)s الشخصي"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "الوسائط الموسومة ب"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "انشر وسائطك"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "أرسل"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "وسائط <a href=\"%(user_url)s\">%(username)s</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "عذرًا، تعذر العثور على مستخدم بهذا الاسم."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -413,35 +514,45 @@ msgstr "لا توجد وسائط تحت المعالجة"
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "فشلت معالجة هذه الملفات:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "ملف %(username)s الشخصي"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "عذرًا، تعذر العثور على مستخدم بهذا الاسم."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr "يجب التحقق من البريد الإلكتروني"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr "أوشكنا على الانتهاء! ما زال حسابك بحاجة إلى التفعيل."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr "ستصلك رسالة إلكترونية خلال لحظات بها التعليمات."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "إن لم تصل."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "أعد إرسال رسالة التحقق"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
msgstr "سجّل أحدهم حسابًا بهذا الاسم، ولكننا بانتظار التفعيل حتى الآن."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -450,40 +561,36 @@ msgstr ""
|
||||
"إن كنت أنت ذلك الشخص لكنك فقدت رسالة التحقق، يمكنك <a "
|
||||
"href=\"%(login_url)s\">الولوج</a> وإعادة إرسالها."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "ملف %(username)s الشخصي"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr "هذه زاوية لتخبر الآخرين فيها عن نفسك."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "حرِّر الملف الشخصي"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "لم يعبئ هذا العضو بيانات ملفه بعد."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "أظهِر كل وسائط %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr "هنا ستظهر وسائطك، ولكن يبدو أنك لم تضف شيئًا بعد."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr "أضف وسائط"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr "لا يبدو أنه توجد أي وسائط هنا حتى الآن..."
|
||||
|
||||
@ -495,31 +602,57 @@ msgstr ""
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr "الأحدث"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr "الأقدم"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "علِّق"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr "أنا متأكد من رغبتي بحذف هذا العمل"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr "أنت على وشك حذف وسائط مستخدم آخر. كن حذرًا أثناء العملية."
|
||||
|
||||
|
Binary file not shown.
@ -1,15 +1,16 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
# Al fred <devaleitzer@aim.com>, 2011.
|
||||
# <devaleitzer@aim.com>, 2011.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -19,27 +20,19 @@ msgstr ""
|
||||
"Language: ca\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Aquest tipus de fitxer no és vàlid."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "Nom d'usuari"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "Contrasenya"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "Les contrasenyes han de coincidir"
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirmeu la contrasenya"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "Adreça electrònica"
|
||||
|
||||
@ -52,10 +45,10 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Lamentablement aquest usuari ja existeix."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Disculpeu, aquesta adreça electrònica ja s'està utilitzant."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
@ -63,87 +56,155 @@ msgstr ""
|
||||
"Ja s'ha verificat la vostra adreça electrònica. Ara podeu entrar, editar el "
|
||||
"vostre perfil i penjar imatge!"
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr ""
|
||||
"La clau de verificació o la identificació de l'usuari no són correctes."
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "Torna'm a enviar el correu de verificació"
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "Títol"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetes"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "Biografia"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "Lloc web"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr "Esteu editant fitxers d'un altre usuari. Aneu amb compte."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "Esteu editant el perfil d'un usuari. Aneu amb compte"
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Aquest tipus de fitxer no és vàlid."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "Fitxer"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "Heu d'escollir un fitxer."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "El fitxer no és una imatge"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "Visca! S'ha enviat!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Imatge de la pantalla 404, el goblin no sap què fer..."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr "Ups!"
|
||||
|
||||
@ -159,33 +220,30 @@ msgstr ""
|
||||
"Si esteu convençut que l'adreça és correcta, pot ser que la pàgina que "
|
||||
"cerqueu s'hagi canviat d'ubicació o s'hagi eliminat."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "Logo de mediagoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "Envia fitxers"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr "Tots els fitxers"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "verifiqueu el correu electrònic"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Entra"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -195,85 +253,52 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "Ei, fanàtic multimèdia! MediaGoblin és..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "El lloc fitxer pels teus fitxers!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"Un lloc en el qual les persones poden col·laborar i mostrar les seves "
|
||||
"creacions originals o obres derivades."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
"Amb l'objectiu de fer del món un lloc millor a través de la "
|
||||
"descentralització i (eventualment, aviat disponible!) La federació!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
"Construït per l'ampliació. (Múltiples tipus de fitxers en breu amb el "
|
||||
"programari, incloent el suport de vídeo!)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
"Desenvolupat per persones com vostè. ( <a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\"> Podeu ajudar a millorar "
|
||||
"aquest programari!</a> )"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
@ -294,27 +319,23 @@ msgstr ""
|
||||
msgid "Logging in failed!"
|
||||
msgstr "Inici de sessió ha fallat!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "Encara no teniu un compte?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "Creeu-ne un aquí!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "Creeu un compte!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr "Crea"
|
||||
|
||||
@ -346,36 +367,114 @@ msgid "Cancel"
|
||||
msgstr "Cancel·la"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "Desa els canvis"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Etiquetat amb:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Envieu els vostres fitxers"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Envia"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Lamentablement no s'ha trobat l'usuari que cercàveu."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -397,7 +496,7 @@ msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
|
||||
msgid "Media in-processing"
|
||||
msgstr ""
|
||||
msgstr "S'està processant el fitxer"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
||||
msgid "No media in-processing"
|
||||
@ -405,37 +504,49 @@ msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "No s'han pogut penjar els següents fitxers:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Lamentablement no s'ha trobat l'usuari que cercàveu."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr ""
|
||||
msgstr "Cal que verifiqueu l'adreça electrònica"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr ""
|
||||
msgstr "Gairebé esteu! Tan sols falta que activeu el vostre compte"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr "Us hauria d'arribar un correu amb les instruccions per a fer-ho."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr ""
|
||||
msgstr "Per si no hi fos:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Torna'm a enviar el correu de verificació"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
msgstr ""
|
||||
"Algú ja ha registrat un compte amb aquest nom d'usuari, però encara l'ha "
|
||||
"d'activar."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -444,76 +555,98 @@ msgstr ""
|
||||
"Si siu aqeust usuari però heu perdut el correu de verificació, podeu <a "
|
||||
"href=\"%(login_url)s\">entrar</a> i tornar-lo a enviar."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "Edita el perfil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "Aquest usuari encara no ha escrit res al seu perfil."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "View all of %(username)s's media"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||
msgid "feed icon"
|
||||
msgstr ""
|
||||
msgstr "Icona RSS"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "Comentari"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
|
Binary file not shown.
@ -1,12 +1,14 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
# <benjamin@lebsanft.org>, 2011.
|
||||
# <cwebber@dustycloud.org>, 2011.
|
||||
# Elrond <elrond+mediagoblin.org@samba-tng.org>, 2011.
|
||||
# <jakob.kramer@gmx.de>, 2011.
|
||||
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
|
||||
# Jan-Christoph Borchardt <jan@unhosted.org>, 2011.
|
||||
# <kyoo@kyoo.ch>, 2011.
|
||||
# <mediagoblin.org@samba-tng.org>, 2011.
|
||||
# Rafael Maguiña <rafael.maguina@gmail.com>, 2011.
|
||||
@ -15,8 +17,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: German (http://www.transifex.net/projects/p/mediagoblin/team/de/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -26,134 +28,193 @@ msgstr ""
|
||||
"Language: de\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Die Datei stimmt nicht mit dem gewählten Medientyp überein."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "Benutzername"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "Passwort"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "Passwörter müssen übereinstimmen."
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "Passwort wiederholen"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr "Hier nochmal eintragen, um Tippfehler zu verhindern."
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "Email-Adresse"
|
||||
msgstr "E-Mail-Adresse"
|
||||
|
||||
#: mediagoblin/auth/views.py:55
|
||||
msgid "Sorry, registration is disabled on this instance."
|
||||
msgstr "Registrierung ist auf dieser Instanz leider deaktiviert."
|
||||
msgstr "Das Registrieren ist auf dieser Instanz leider deaktiviert."
|
||||
|
||||
#: mediagoblin/auth/views.py:73
|
||||
msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Leider gibt es bereits einen Benutzer mit diesem Namen."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Tut und Leid, aber diese Email-Adresse wird bereits verwendet."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr "Leider gibt es bereits einen Benutzer mit dieser E-Mail-Adresse."
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
msgstr ""
|
||||
"Deine Email-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein "
|
||||
"Deine E-Mail-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein "
|
||||
"Profil bearbeiten und Bilder hochladen!"
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "Der Bestätigungssschlüssel oder die Nutzernummer ist falsch."
|
||||
msgstr "Der Bestätigungsschlüssel oder die Nutzernummer ist falsch."
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr "Du musst angemeldet sein, damit wir wissen, wer die Email bekommt."
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr "Deine E-Mail-Adresse wurde bereits bestätigt."
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "Bestätigungs-Email wurde erneut versandt."
|
||||
msgstr "Bestätigungs-E-Mail wurde erneut versandt."
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
"Konnte Email zur Wiederherstellung des Passworts nicht senden, weil dein "
|
||||
"Benutzername inaktiv oder deine Email-Adresse noch nicht verifiziert ist."
|
||||
"E-Mail zur Wiederherstellung des Passworts konnte nicht gesendet werden, "
|
||||
"weil dein Benutzername inaktiv oder deine E-Mail-Adresse noch nicht "
|
||||
"verifiziert ist."
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "Titel"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Beschreibung des Werkes"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "Markierungen"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr "Kurztitel"
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "Bitte gib einen Kurztitel ein"
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
"Der Titelteil der Medienadresse. Normalerweise muss hier nichts geändert "
|
||||
"werden."
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "Biographie"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "Webseite"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr "Altes Passwort"
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "Diesen Kurztitel hast du bereits vergeben."
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr "Du bearbeitest die Medien eines Anderen. Bitte sei vorsichtig."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "Du bearbeitest das Profil eines Anderen. Bitte sei vorsichtig."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Die Datei stimmt nicht mit dem gewählten Medientyp überein."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr "Falsches Passwort"
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "Datei"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Beschreibung des Werkes"
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "Du musst eine Datei angeben."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "Diese Datei scheint kein Bild zu sein!"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "Yeeeaaah! Geschafft!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Bild eines angespannten Goblins"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr "Hoppla!"
|
||||
|
||||
@ -169,33 +230,30 @@ msgstr ""
|
||||
"Wenn du sicher bist, dass die Adresse stimmt, wurde die Seite eventuell "
|
||||
"verschoben oder gelöscht."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Bild eines angespannten Goblins"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "MediaGoblin-Logo"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "Medien hochladen"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr "Medien hinzufügen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "Bitte bestätige deine Email-Adresse!"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr "Bitte bestätige deine E-Mail-Adresse!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr "Abmelden"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Anmelden"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -207,93 +265,57 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr "Entdecke"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "Hallo Medien-Liebhaber! MediaGoblin ist …"
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr "Hallo du, willkommen auf dieser MediaGoblin-Seite!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
"Diese Seite läuft mit <a href=\"http://mediagoblin.org\">MediaGoblin</a>, "
|
||||
"einer großartigen Software für Medienhosting."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "Der perfekte Platz für deine Medien!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"Ein Platz für Zusammenarbeit und um Originale und abgeleitete Werke zu "
|
||||
"präsentieren!"
|
||||
"Melde dich mit deinem MediaGoblin-Konto an, um eigene Medien hinzuzufügen, "
|
||||
"zu kommentieren, Favoriten zu speichern und mehr."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr ""
|
||||
"Frei, wie in Freiheit. (Wir sind schließlich ein <a "
|
||||
"href=\"http://gnu.org\">GNU</a>-Projekt.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr "Hast du noch keinen? Das geht ganz einfach!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
"Weltverbesserer durch Dezentralisierung und (hoffentlich bald!) unabhängige "
|
||||
"Kommunikation!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
"Gebaut für Erweiterungen. (Bald mit Unterstützung für verschiedene "
|
||||
"Medientypen inklusive Videos!)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
"Betrieben von Leuten wie dir. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">Du kannst uns dabei helfen, "
|
||||
"die Software zu verbessern!</a>)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr "Neugierig dich uns anzuschliessen?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Gratis ein Konto einrichten</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">MediaGoblin auf deinem eigenen Server einrichten</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr "Neuste Medien"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr "Neues Passwort eingeben"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr "Benutzername oder Email-Adresse eingeben"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
msgstr "Dein Passwort wurde geändert. Versuche dich jetzt einzuloggen."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
"Prüfe deinen Posteingang. Wir haben dir eine Email geschickt mit einer URL, "
|
||||
"um dein Passwort zu ändern."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr "Passwort wiederherstellen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr "Anleitung senden"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
@ -314,33 +336,29 @@ msgstr ""
|
||||
"\n"
|
||||
"%(verification_url)s\n"
|
||||
"\n"
|
||||
"Wenn du denkst, dass das ein Fehler ist, ignoriere einfach diese Email und bleib ein glücklicher Goblin!"
|
||||
"Wenn du denkst, dass das ein Fehler ist, ignoriere einfach diese E-Mail und bleib ein glücklicher Goblin!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:30
|
||||
msgid "Logging in failed!"
|
||||
msgstr "Anmeldevorgang fehlgeschlagen!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "Hast du noch kein Konto?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "Registriere dich hier!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr "Passwort vergessen?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr "Wechsle es!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "Neues Konto registrieren!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr "Registrieren"
|
||||
|
||||
@ -356,7 +374,7 @@ msgid ""
|
||||
msgstr ""
|
||||
"Hallo %(username)s,\n"
|
||||
"\n"
|
||||
"um dein Konto bei GNU MediaGoblin zu aktivieren, musst du folgende Adresse in einem Webbrowser öffnen:\n"
|
||||
"um dein Konto bei GNU MediaGoblin zu aktivieren, musst du folgende Adresse in deinem Webbrowser öffnen:\n"
|
||||
"\n"
|
||||
"%(verification_url)s"
|
||||
|
||||
@ -371,36 +389,114 @@ msgid "Cancel"
|
||||
msgstr "Abbrechen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "Änderungen speichern"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "%(username)ss Profil bearbeiten"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Medien markiert mit:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr "Medien markiert mit: %(tag_name)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr "Original"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Medien hochladen"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Bestätigen"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr "%(username)ss Medien"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "<a href=\"%(user_url)s\">%(username)s</a>s Medien"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Dieser Benutzer wurde leider nicht gefunden."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr "Bearbeiten"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr "Löschen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr "bei"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -434,31 +530,41 @@ msgstr "Keine Medien in Bearbeitung"
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "Die folgenden Uploads sind fehlgeschlagen:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
msgid "Email verification needed"
|
||||
msgstr "Email-Bestätigung benötigt"
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "%(username)ss Profil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Dieser Benutzer konnte leider nicht gefunden werden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr "E-Mail-Bestätigung benötigt"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr "Fast fertig! Dein Konto muss noch freigeschaltet werden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
"Gleich solltest du eine Email bekommen, die dir sagt, was du noch machen "
|
||||
"musst."
|
||||
"Gleich solltest du eine E-Mail erhalten, die dir erklärt, was du noch machen"
|
||||
" musst."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "Wenn sie nicht ankommt:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Bestätigung erneut senden"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
@ -466,7 +572,7 @@ msgstr ""
|
||||
"Jemand hat bereits ein Konto mit diesem Benutzernamen registriert, aber es "
|
||||
"muss noch aktiviert werden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -476,40 +582,36 @@ msgstr ""
|
||||
" kannst du dich <a href=\"%(login_url)s\">anmelden</a> und sie erneut "
|
||||
"senden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "%(username)ss Profil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr "Hier kannst du Anderen etwas über dich erzählen."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "Profil bearbeiten"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "Dieser Benutzer hat (noch) keine Daten in seinem Profil."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "Alle Medien von %(username)s anschauen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr "Hier erscheinen deine Medien. Sobald du etwas hochgeladen hast."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr "Medien hinzufügen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr "Scheinbar gibt es hier noch nichts …"
|
||||
|
||||
@ -521,31 +623,59 @@ msgstr "Feed-Symbol"
|
||||
msgid "Atom feed"
|
||||
msgstr "Atom-Feed"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr "Neuere"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr "Ältere"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "Kommentar"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr "Zu Seite:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr "Ja, wirklich löschen"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr "Ohh, der Kommentar war leer."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr "Dein Kommentar wurde gesendet!"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr "Du hast das Medium gelöscht."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
"Das Medium wurde nicht gelöscht. Du musst ankreuzen, dass du es wirklich "
|
||||
"löschen möchtest."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr "Du versuchst Medien eines anderen Nutzers zu löschen. Sei vorsichtig."
|
||||
|
||||
|
@ -1,14 +1,14 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2011.
|
||||
# FIRST AUTHOR <EMAIL@ADDRESS>, 2012.
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: PROJECT VERSION\n"
|
||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\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"
|
||||
@ -17,27 +17,19 @@ msgstr ""
|
||||
"Content-Transfer-Encoding: 8bit\n"
|
||||
"Generated-By: Babel 0.9.6\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr ""
|
||||
|
||||
@ -50,94 +42,164 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your "
|
||||
"profile, and submit images!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid "An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or "
|
||||
"your account's email address has not been verified."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
msgid "The title part of this media's URL. You usually don't need to change this."
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr ""
|
||||
|
||||
@ -151,33 +213,30 @@ msgid ""
|
||||
"has been moved or deleted."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -187,78 +246,55 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, "
|
||||
"an extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you"
|
||||
" can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project,"
|
||||
" after all.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the "
|
||||
"software, including video support!)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve "
|
||||
"this software!</a>)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a "
|
||||
"free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" "
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an "
|
||||
"account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" "
|
||||
"href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on "
|
||||
"your own server</a>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid "Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
@ -279,27 +315,23 @@ msgstr ""
|
||||
msgid "Logging in failed!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
|
||||
@ -325,35 +357,113 @@ msgid "Cancel"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> "
|
||||
"for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
@ -385,74 +495,80 @@ msgstr ""
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid "An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to"
|
||||
" be activated."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can "
|
||||
"<a href=\"%(login_url)s\">log in</a> and resend it."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr ""
|
||||
|
||||
@ -464,31 +580,57 @@ msgstr ""
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
@ -10,8 +10,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -21,27 +21,19 @@ msgstr ""
|
||||
"Language: eo\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "La provizita dosiero ne konformas al la informtipo."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "Uzantnomo"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "Pasvorto"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "Pasvortoj devas esti egalaj."
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "Retajpu pasvorton"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr "Retajpu ĝin por certigi, ke ne okazis mistajpoj."
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "Retpoŝtadreso"
|
||||
|
||||
@ -54,10 +46,10 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Bedaŭrinde, uzanto kun tiu nomo jam ekzistas."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Tiu retpoŝtadreso jam estas uzata."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr "Ni bedaŭras, sed konto kun tiu retpoŝtadreso jam ekzistas."
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
@ -65,15 +57,28 @@ msgstr ""
|
||||
"Via retpoŝtadreso estas konfirmita. Vi povas nun ensaluti, redakti vian "
|
||||
"profilon, kaj alŝuti bildojn!"
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "La kontrol-kodo aŭ la uzantonomo ne estas korekta"
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr "Vi devas esti ensalutita, por ke ni sciu, al kiu sendi la retleteron!"
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr "Vi jam konfirmis vian retpoŝtadreson!"
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "Resendi vian kontrol-mesaĝon."
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
@ -81,74 +86,127 @@ msgstr ""
|
||||
"Ni ne povas sendi pasvortsavan retleteron, ĉar aŭ via konto estas neaktiva, "
|
||||
"aŭ ĝia retpoŝtadreso ne estis konfirmita."
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "Titolo"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Priskribo de ĉi tiu verko"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "Etikedoj"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr "La distingiga adresparto"
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "La distingiga adresparto ne povas esti malplena"
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
"La parto de la dosieradreso, bazita sur la dosiertitolo. Ordinare ne necesas"
|
||||
" ĝin ŝanĝi."
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "Bio"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "Retejo"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr "La malnova pasvorto"
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "Ĉi tiu uzanto jam havas dosieron kun tiu distingiga adresparto."
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr "Vi priredaktas dosieron de alia uzanto. Agu singardeme."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "Vi redaktas profilon de alia uzanto. Agu singardeme."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "La provizita dosiero ne konformas al la informtipo."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr "Malĝusta pasvorto"
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "Dosiero"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Priskribo de ĉi tiu verko"
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "Vi devas provizi dosieron."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "La dosiero ŝajnas ne esti bildo!"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "Hura! Alŝutitas!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Bildo de 404-koboldo penŝvitanta."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr "Oj!"
|
||||
|
||||
@ -164,33 +222,30 @@ msgstr ""
|
||||
"Se vi estas certa, ke la adreso estas ĝusta, eble la serĉata de vi paĝo "
|
||||
"estis movita aŭ forigita."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Bildo de 404-koboldo penŝvitanta."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "Emblemo de MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "Alŝuti aŭd-vid-dosieron"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr "Aldoni dosieron"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "konfirmu vian retpoŝtadreson! "
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr "Konfirmu viecon de la retpoŝtadreso!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr "elsaluti"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Ensaluti"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -200,93 +255,60 @@ msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
msgstr "Ĉirkaŭrigardi"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "Saluton, artemulo! MediaGoblin estas…"
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr "Saluton, kaj bonvenon al ĉi tiu MediaGoblina retpaĝaro!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
"Ĉi tiu retpaĝaro funkcias per <a "
|
||||
"href=\"http://mediagoblin.org\">MediaGoblin</a>, eksterordinare bonega "
|
||||
"programaro por gastigado de aŭd‐vid‐dosieroj."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "La perfekta loko por viaj aŭd-vid-dosieroj!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"Loko, kie homoj povas kunlabori, kaj elmeti originalajn kreaĵojn kaj "
|
||||
"derivaĵojn!"
|
||||
"Por aldoni viajn proprajn dosierojn, fari al vi liston de la plej plaĉaj, "
|
||||
"ks, vi povas ensaluti je via MediaGoblina konto."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr ""
|
||||
"Libera verko. (Ni ja estas projekto de <a href=\"http://gnu.org\">GNU</a>.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr "Ĉu vi ankoraŭ ne havas tian? Ne malĝoju!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
"Celanta plibonigi la mondon per sencentreco kaj (iam, baldaŭ!) federateco!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
"Kreita por etendado. (Baldaŭ en la programo aperos subteno de pluraj "
|
||||
"informspecoj, inkluzive de filmoj!)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
"Vivanta per homoj kiel vi. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">Vi povas helpi al ni "
|
||||
"plibonigi la programon!</a>)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr "Ĉu vi deziregas aliĝi nin?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Kreu senpagan"
|
||||
" konton</a>⏎ aŭ⏎ <a class=\"header_submit\" "
|
||||
"href=\"http://wiki.mediagoblin.org/HackingHowto\">Kreu senpagan konton</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr "Plej nove aldonitaj dosieroj"
|
||||
msgstr "Laste aldonitaj dosieroj"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr "Enigu vian novan pasvorton"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr "Enigu vian salutnomon aŭ retpoŝtadreson"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
msgstr "Via pasvorto estis ŝanĝita. Nun provu ensaluti."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
"Kontrolu vian retleterujon. Ni sendis retleteron kun retadreso por ŝanĝo de "
|
||||
"via pasvorto."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr "Ekhavo de nova pasvorto"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr "Sendi instrukcion"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
@ -313,27 +335,23 @@ msgstr ""
|
||||
msgid "Logging in failed!"
|
||||
msgstr "Ensaluto malsukcesis!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "Ĉu ankoraŭ sen konto?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "Kreu ĝin ĉi tie!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr "Ĉu vi forgesis vian pasvorton?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr "Ŝanĝu ĝin!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "Kreu konton!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr "Krei"
|
||||
|
||||
@ -364,36 +382,114 @@ msgid "Cancel"
|
||||
msgstr "Nuligi"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "Konservi ŝanĝojn"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "Redaktado de l’profilo de %(username)s'"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Dosieroj markitaj per:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr "Dosieroj kun etikedo: %(tag_name)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr "Originalo"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Alŝutu vian aŭd-vid-dosieron"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Alŝuti"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr "Dosieroj de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "Dosieroj de <a href=\"%(user_url)s\">%(username)s</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Uzanto ne trovita."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr "Ŝanĝi"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr "Forigi"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr "je"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -427,30 +523,40 @@ msgstr "Neniu dosieroj preparatas"
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "Preparado de ĉi tiuj alŝutaĵoj malsukcesis:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Profilo de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Uzanto ne trovita."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr "Necesas konfirmo de retpoŝtadreso"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr "Preskaŭ finite! Restas nur validigi vian konton."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
"Post kelkaj momentoj devas veni retletero kun instrukcio pri kiel tion fari."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "Se tio ne okazas:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Resendi kontrolmesaĝon"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
@ -458,7 +564,7 @@ msgstr ""
|
||||
"Iu registris konton kun tiu ĉi uzantonomo, sed ĝi devas ankoraŭ esti "
|
||||
"aktivigita."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -467,41 +573,37 @@ msgstr ""
|
||||
"Se vi estas tiu sed vi perdis vian kontrolmesaĝon, vi povas <a "
|
||||
"href=\"%(login_url)s\">ensaluti</a> kaj resendi ĝin."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Profilo de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr "Jen estas spaceto por rakonti pri vi al aliaj."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "Redakti profilon"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "Ĉi tiu uzanto ne jam aldonis informojn pri si."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "Rigardi ĉiujn dosierojn de %(username)s'"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
"Ĝuste ĉi tie aperos viaj dosieroj, sed vi ŝajne ankoraŭ nenion alŝutis."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr "Aldoni dosieron"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr "Ĉi tie ŝajne estas ankoraŭ neniuj dosieroj…"
|
||||
|
||||
@ -513,31 +615,59 @@ msgstr "flusimbolo"
|
||||
msgid "Atom feed"
|
||||
msgstr "Atom-a informfluo"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr "Plinovaj"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr "Malplinovaj"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "Komento"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr "Iri al paĝo:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr "Mi estas certa, ke mi volas forigi ĉi tion"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr "Oj, via komento estis malplena."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr "Via komento estis afiŝita!"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr "Vi forigis la dosieron."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
"La dosiero ne estis forigita, ĉar vi ne konfirmis vian certecon per la "
|
||||
"markilo."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr "Vi estas forigonta dosieron de alia uzanto. Estu singardema."
|
||||
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
@ -10,12 +10,13 @@
|
||||
# <juangsub@gmail.com>, 2011.
|
||||
# <juanma@kde.org.ar>, 2011.
|
||||
# Mario Rodriguez <msrodriguez00@gmail.com>, 2011.
|
||||
# <mu@member.fsf.org>, 2011.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mediagoblin/team/es/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -25,28 +26,19 @@ msgstr ""
|
||||
"Language: es\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Archivo inválido para el formato seleccionado."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "Nombre de usuario"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "Contraseña"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "Las contraseñas deben coincidir."
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "Confirma tu contraseña"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr ""
|
||||
"Escriba de nuevo aquí para asegurarse de que no hay faltas de ortografía."
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "Dirección de correo electrónico"
|
||||
|
||||
@ -59,10 +51,10 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Lo sentimos, ya existe un usuario con ese nombre."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Lo sentimos, esa dirección de correo electrónico ya ha sido tomada."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr "Lo sentimos, ya existe un usuario con esa dirección de email."
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
@ -70,16 +62,31 @@ msgstr ""
|
||||
"Tu dirección de correo electrónico ha sido verificada. ¡Ahora puedes "
|
||||
"ingresar, editar tu perfil, y enviar imágenes!"
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr ""
|
||||
"La clave de verificación o la identificación de usuario son incorrectas"
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
"¡Debes iniciar sesión para que podamos saber a quién le enviamos el correo "
|
||||
"electrónico!"
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr "¡Ya has verificado tu dirección de correo!"
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "Se reenvió tu correo electrónico de verificación."
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
@ -88,76 +95,129 @@ msgstr ""
|
||||
"porque su nombre de usuario está inactivo o la dirección de su cuenta de "
|
||||
"correo electrónico no ha sido verificada."
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "Título"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Descripción de esta obra"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "Etiquetas"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr "Ficha"
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "La ficha no puede estar vacía"
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
"La parte del título de la URL de este contenido. Normalmente no necesitas "
|
||||
"cambiar esto."
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "Bio"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "Sitio web"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr "Vieja contraseña"
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "Una entrada con esa ficha ya existe para este usuario."
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr "Estás editando el contenido de otro usuario. Proceder con precaución."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "Estás editando un perfil de usuario. Proceder con precaución."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Archivo inválido para el formato seleccionado."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr "Contraseña incorrecta"
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "Archivo"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Descripción de esta obra"
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "Debes proporcionar un archivo."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "¡El archivo no parece ser una imagen!"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "¡Woohoo! ¡Enviado!"
|
||||
msgstr "¡Yujú! ¡Enviado!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Imagen de 404 goblin estresándose"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr "Ups!"
|
||||
msgstr "¡Ups!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:24
|
||||
msgid "There doesn't seem to be a page at this address. Sorry!"
|
||||
@ -171,33 +231,30 @@ msgstr ""
|
||||
"Si estás seguro que la dirección es correcta, puede ser que la pagina haya "
|
||||
"sido movida o borrada."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Imagen de 404 goblin estresándose"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "Logo de MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "Enviar contenido"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr "Añadir contenido"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "¡Verifica tu correo electrónico!"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr "¡Verifica tu email!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr "Cerrar sesión"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Conectarse"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -209,93 +266,58 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr "Explorar"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "¡Hola, amante de los contenidos! MediaGoblin es ..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr "Hola, ¡bienvenido a este sitio de MediaGoblin!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
"Este sitio está montado con <a "
|
||||
"href=\"http://mediagoblin.org\">MediaGoblin</a>, un programa libre buenísimo"
|
||||
" para gestionar contenido multimedia."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "¡El lugar ideal para tus contenidos!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"¡Un lugar para colaborar y exhibir tus creaciones originales y derivadas!"
|
||||
"Para añadir tus propios contenidos, dejar comentarios, guardar tus favoritos"
|
||||
" y más, puedes iniciar sesión con tu cuenta de MediaGoblin."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr ""
|
||||
"Libre, como en la libertad. (Somos parte del proyecto <a "
|
||||
"href=\"http://gnu.org\">GNU</a> después de todo.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr "¿Aún no tienes una? ¡Es fácil!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
"Queriendo hacer del mundo un mejor lugar a través de la descentralización y "
|
||||
"(eventualmente, muy pronto!) la federalización!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
"Pensado para ser extensible. (Prontamente soporte para multiples formatos, "
|
||||
"incluyendo video!)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
"Impulsado por gente como vos. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\"> Vos podés ayudarnos a "
|
||||
"mejorar este programa</a>)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr "Te gustaría unirte a nosotros?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Crea una "
|
||||
"cuenta gratuita</a> o <a class=\"header_submit\" "
|
||||
"href=\"http://wiki.mediagoblin.org/HackingHowto\">Establece MediaGoblin en "
|
||||
"tu propio servidor</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr "El contenido más reciente"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr "Ingrese su nueva contraseña"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr "Introduzca su nombre de usuario o correo electrónico"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
msgstr "Se cambió tu contraseña. Intenta iniciar sesión ahora."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
"Revisa tu bandeja de entrada. Te enviamos un correo electrónico con una URL "
|
||||
"para cambiar tu contraseña."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr "Recuperar contraseña"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr "Enviar instrucciones"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
@ -310,36 +332,35 @@ msgid ""
|
||||
"If you think this is an error, just ignore this email and continue being\n"
|
||||
"a happy goblin!"
|
||||
msgstr ""
|
||||
"Hola %(username)s , para cambiar su contraseña de GNU MediaGoblin, abra la "
|
||||
"siguiente URL en su navegador: %(verification_url)s Si usted piensa que "
|
||||
"esto es un error, simplemente ignore este mensaje y siga siendo un duende "
|
||||
"feliz!"
|
||||
"Hola %(username)s,\n"
|
||||
"\n"
|
||||
"Para cambiar tu contraseña de GNU MediaGoblin, abre la siguiente URL en un navegador:\n"
|
||||
"\n"
|
||||
"%(verification_url)s \n"
|
||||
"\n"
|
||||
"Si piensas que esto es un error, simplemente ignora este mensaje y sigue siendo un trasgo feliz."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:30
|
||||
msgid "Logging in failed!"
|
||||
msgstr "¡Falló el inicio de sesión!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "¿No tienes una cuenta?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "¡Crea una aquí!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr "¿Olvidaste tu contraseña?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr "Cambiarlo!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "¡Crea una cuenta!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr "Crear"
|
||||
|
||||
@ -362,7 +383,7 @@ msgstr ""
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(media_title)s"
|
||||
msgstr "Edición %(media_title)s "
|
||||
msgstr "Editando %(media_title)s "
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||
@ -370,41 +391,119 @@ msgid "Cancel"
|
||||
msgstr "Cancelar"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "Guardar cambios"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "Editando el perfil de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Contenido etiquetado con:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr "Contenido etiquetado con: %(tag_name)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr "Original"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Envía tu contenido"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Enviar"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr "Contenidos de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "Contenido de <a href=\"%(user_url)s\">%(username)s</a>'s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Lo sentimos, no se encontró ese usuario."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr "Editar"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr "Borrar"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr "en"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
msgid "Really delete %(title)s?"
|
||||
msgstr "Realmente deseas eliminar %(title)s ?"
|
||||
msgstr "¿Realmente deseas eliminar %(title)s?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||
msgid "Delete Permanently"
|
||||
@ -433,31 +532,41 @@ msgstr "No hay contenido siendo procesado."
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "Estos archivos no pudieron ser procesados:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Perfil de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Lo sentimos, no se encontró ese usuario."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr "Es necesario un correo electrónico de verificación"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr "Casi terminas! Solo falta activar la cuenta."
|
||||
msgstr "¡Casi hemos terminado! Solo falta activar la cuenta."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
"En unos momentos te debería llegar un correo electrónico con las "
|
||||
"instrucciones para hacerlo."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "En caso de que no:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Reenviar correo electrónico de verificación"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
@ -465,7 +574,7 @@ msgstr ""
|
||||
"Alguien ya registró una cuenta con ese nombre de usuario, pero todavía no "
|
||||
"fue activada."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -474,41 +583,37 @@ msgstr ""
|
||||
"Si tú eres esa persona, pero has perdido tu correo electrónico de "
|
||||
"verificación, puedes <a href=\"%(login_url)s\">acceder</a> y reenviarlo."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Perfil de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr "Aquí hay un lugar para que le cuentes a los demás sobre tí."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "Editar perfil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "Este usuario (todavia) no ha completado su perfil."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "Ver todo el contenido de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
"Aquí es donde tú contenido estará, pero parece que aún no has agregado nada."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr "Añadir contenido"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr "Parece que aún no hay ningún contenido aquí..."
|
||||
|
||||
@ -520,31 +625,57 @@ msgstr "ícono feed"
|
||||
msgid "Atom feed"
|
||||
msgstr "Atom feed"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr "Recientes"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr "Antiguas"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "Comentario"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr "Ir a la página:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr "Estoy seguro de que quiero borrar esto"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr "Ups, tu comentario estaba vacío."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr "¡Tu comentario ha sido publicado!"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr "Eliminaste el contenido"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr "El contenido no se eliminó porque no marcaste que estabas seguro."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"Estás a punto de eliminar un contenido de otro usuario. Proceder con "
|
||||
|
Binary file not shown.
@ -3,6 +3,8 @@
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
# <a5565930@nepwk.com>, 2011.
|
||||
# <chesuidayeur@yahoo.fr>, 2011.
|
||||
# <joehillen@gmail.com>, 2011.
|
||||
# <marktraceur@gmail.com>, 2011.
|
||||
# <maxineb@members.fsf.org>, 2011.
|
||||
@ -12,9 +14,9 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"POT-Creation-Date: 2011-12-04 10:24-0600\n"
|
||||
"PO-Revision-Date: 2011-12-29 17:39+0000\n"
|
||||
"Last-Translator: ianux <a5565930@nepwk.com>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -23,6 +25,10 @@ msgstr ""
|
||||
"Language: fr\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Le fichier envoyé ne correspond pas au type de média."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
msgid "Username"
|
||||
msgstr "Nom d'utilisateur"
|
||||
@ -42,7 +48,7 @@ msgstr "Confirmer le mot de passe"
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr ""
|
||||
"Tapez-le à nouveau ici pour vous assurer qu'il n'ya pas de fautes "
|
||||
"Tapez-le à nouveau ici pour vous assurer qu'il n'y a pas de fautes "
|
||||
"d'orthographe."
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
@ -58,8 +64,8 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Un utilisateur existe déjà avec ce nom, désolé."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Désolé, cette adresse courriel a déjà été prise."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr "Désolé, il existe déjà un utilisateur ayant cette adresse e-mail."
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
msgid ""
|
||||
@ -73,15 +79,26 @@ msgstr ""
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "La clé de vérification ou le nom d'utilisateur est incorrect."
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:203
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
"Vous devez être authentifié afin que nous sachions à qui envoyer l'e-mail !"
|
||||
|
||||
#: mediagoblin/auth/views.py:211
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr "Votre adresse e-mail a déjà été vérifiée !"
|
||||
|
||||
#: mediagoblin/auth/views.py:224
|
||||
msgid "Resent your verification email."
|
||||
msgstr "E-mail de vérification renvoyé."
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:265
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
"Impossible d'envoyer un email de récupération de mot de passe : votre compte"
|
||||
" est inactif ou bien l'email de votre compte n'a pas été vérifiée."
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
@ -91,46 +108,68 @@ msgstr "Titre"
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
|
||||
msgid "Seperate tags by commas."
|
||||
msgstr "Séparez les tags par des virgules."
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
msgid "Slug"
|
||||
msgstr "Légende"
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:34
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "La légende ne peut pas être laissée vide."
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:35
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
msgstr ""
|
||||
"Le nom de ce media dans l'URL. Vous n'avez normalement pas besoin de le "
|
||||
"changer"
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:42
|
||||
msgid "Bio"
|
||||
msgstr "Bio"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:45
|
||||
msgid "Website"
|
||||
msgstr "Site web"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:49
|
||||
msgid "Old password"
|
||||
msgstr "Ancien mot de passe."
|
||||
|
||||
#: mediagoblin/edit/forms.py:52
|
||||
msgid "New Password"
|
||||
msgstr "Nouveau mot de passe"
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "Une entrée existe déjà pour cet utilisateur avec la même légende."
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"Vous vous apprêtez à modifier le média d'un autre utilisateur. Veuillez "
|
||||
"prendre garde."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr ""
|
||||
"Vous vous apprêtez à modifier le profil d'un utilisateur. Veuillez prendre "
|
||||
"garde."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Invalide fichier donné pour le type de média."
|
||||
#: mediagoblin/edit/views.py:171
|
||||
msgid "Wrong password"
|
||||
msgstr "Mauvais mot de passe"
|
||||
|
||||
#: mediagoblin/edit/views.py:192
|
||||
msgid "Profile edited!"
|
||||
msgstr "Profile mis à jour !"
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:65
|
||||
msgid "Could not find any file extension in \"{filename}\""
|
||||
msgstr "Impossible d'extraire une extension de fichier de \"{nomfichier}\""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
@ -138,27 +177,27 @@ msgstr "Fichier"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
msgstr "Descriptif pour ce travail"
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "You must provide a file."
|
||||
msgstr "Il vous faut fournir un fichier."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "Ce fichier ne semble pas être une image !"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:127
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "Youhou, c'est envoyé !"
|
||||
|
||||
#: mediagoblin/submit/views.py:133
|
||||
msgid "Invalid file type."
|
||||
msgstr "Type de fichier invalide."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
msgid "Oops!"
|
||||
msgstr "Zut!"
|
||||
msgstr "Zut !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:24
|
||||
msgid "There doesn't seem to be a page at this address. Sorry!"
|
||||
msgstr "Il ne semble pas être une page à cette adresse. Désolé!"
|
||||
msgstr "Il ne semble pas y avoir de page à cette adresse. Désolé !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:26
|
||||
msgid ""
|
||||
@ -166,128 +205,113 @@ msgid ""
|
||||
" been moved or deleted."
|
||||
msgstr ""
|
||||
"Si vous êtes sûr que l'adresse est correcte, peut-être la page que vous "
|
||||
"recherchez a été déplacé ou supprimé."
|
||||
"recherchez a été déplacée ou supprimée."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Image de 404 gobelin stresser"
|
||||
msgstr "Image de 404 gobelin angoissé"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:49
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "Logo MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
#: mediagoblin/templates/mediagoblin/base.html:54
|
||||
msgid "Submit media"
|
||||
msgstr "Soumettre un média"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "vérifiez votre adresse e-mail !"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:65
|
||||
msgid "Verify your email!"
|
||||
msgstr "Vérifiez votre adresse e-mail !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:72
|
||||
msgid "log out"
|
||||
msgstr "déconnexion"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:75
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "S'identifier"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:91
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
msgstr ""
|
||||
"Propulsé par <a href=\"http://mediagoblin.org\">MediaGoblin</a> , un <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> de projet"
|
||||
"Propulsé par <a href=\"http://mediagoblin.org\">MediaGoblin</a> , un projet "
|
||||
"<a href=\"http://gnu.org/\">GNU</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
msgstr "Explorer"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "Salut à tous, amateur de médias! MediaGoblin est ..."
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr "Bonjour, et bienvenu sur ce site MediaGoblin !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
"Ce site fait tourner <a href=\"http://mediagoblin.org\">MediaGoblin</a>, un "
|
||||
"logiciel d'hébergement de média extraordinairement génial."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "L'endroit idéal pour vos médias!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"Un lieu pour les personnes de collaborer et de montrer des créations "
|
||||
"originales et dérivées!"
|
||||
"Ajoutez vos propres medias, commentez ceux des autres, sauvegardez vos "
|
||||
"préférés et plus encore ! Faites tout cela depuis votre compte MediaGoblin."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr ""
|
||||
"Logiciel libre. (Nous sommes une <a href=\"http://gnu.org\">GNU</a> projet, "
|
||||
"après tout.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr "Vous n'en avez pas ? C'est facile !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
"Visant à rendre le monde meilleur grâce à la décentralisation et "
|
||||
"(éventuellement, venir bientôt!) fédération!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
"Construit pour l'extensibilité. (Plusieurs types de médias à venir au "
|
||||
"logiciel, y compris le support vidéo!)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
"Propulsé par des gens comme vous. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">Vous pouvez nous aider à "
|
||||
"améliorer ce logiciel!</a>)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Créez un compte sur ce site</a>\n"
|
||||
" ou\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Déployez MediaGoblin sur votre propre serveur</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:44
|
||||
msgid "Most recent media"
|
||||
msgstr ""
|
||||
msgstr "Tout derniers media"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr ""
|
||||
msgstr "Entrez un nouveau mot de passe"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr ""
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Soumettre"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr "Récupérer le mot de passe"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr "Envoyer les instructions"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
msgstr ""
|
||||
"Votre mot de passe a été changé. Essayez maintenant de vous identifier."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
msgstr ""
|
||||
"Verifiez votre boîte de réception. Nous vous avons envoyé un email avec une "
|
||||
"URL vous permettant de changer votre mot de passe."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
@ -302,30 +326,35 @@ msgid ""
|
||||
"If you think this is an error, just ignore this email and continue being\n"
|
||||
"a happy goblin!"
|
||||
msgstr ""
|
||||
"Bonjour %(username)s,\n"
|
||||
"\n"
|
||||
"Pour changer votre mot de passe GNU MediaGoblin, ouvrez l'URL suivante dans \n"
|
||||
"votre navigateur internet :\n"
|
||||
"\n"
|
||||
"%(verification_url)s\n"
|
||||
"\n"
|
||||
"Si vous pensez qu'il s'agit d'une erreur, ignorez simplement cet email et restez\n"
|
||||
"un goblin heureux !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:30
|
||||
msgid "Logging in failed!"
|
||||
msgstr "Connexion a échoué!"
|
||||
msgstr "La connexion a échoué!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "Pas encore de compte?"
|
||||
msgstr "Pas encore de compte ?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "Créez-en un ici!"
|
||||
msgstr "Créez-en un ici !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr ""
|
||||
msgstr "Vous avez oublié votre mot de passe ?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
msgid "Create an account!"
|
||||
msgstr "Créer un compte!"
|
||||
msgstr "Créer un compte !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
msgid "Create"
|
||||
@ -367,27 +396,54 @@ msgstr "Enregistrer les modifications"
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "Modification du profil de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Média comportant les tags suivants :"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr "Médias taggés avec : %(tag_name)s "
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
|
||||
msgid "Original"
|
||||
msgstr "Original"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Soumettez ce média"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Soumettre"
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr "Medias de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "Médias de <a href=\"%(user_url)s\">%(username)s</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Impossible de trouver cet utilisateur, désolé."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
|
||||
#, python-format
|
||||
msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
|
||||
msgstr "Par <a href=\"%(user_url)s\">%(username)s</a> le %(date)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
|
||||
msgid "Post a comment"
|
||||
msgstr "Poster un commentaire"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
|
||||
msgid "at"
|
||||
msgstr "à"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
|
||||
msgid "Post comment!"
|
||||
msgstr "Poster le commentaire !"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
|
||||
msgid "Edit"
|
||||
msgstr "Éditer"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
|
||||
msgid "Delete"
|
||||
msgstr "Effacer"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -396,7 +452,7 @@ msgstr "Voulez-vous vraiment supprimer %(title)s ?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||
msgid "Delete Permanently"
|
||||
msgstr ""
|
||||
msgstr "Supprimer définitivement"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||
msgid "Media processing panel"
|
||||
@ -419,33 +475,43 @@ msgstr "Aucun média en transformation"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "Ces ajouts n'etaient pas processé:"
|
||||
msgstr "Le traitement de ces ajouts a échoué :"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "profil de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Impossible de trouver cet utilisateur, désolé."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr "Vérification d'email nécessaire"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr "Presque fini! Votre compte a encore besoin d'être activé."
|
||||
msgstr "Presque fini ! Votre compte a encore besoin d'être activé."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
"Un e-mail devrait vous parvenir dans quelques instants ; il vous indiquera "
|
||||
"comment procéder."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "Si la vérification n'est pas arrivée à bon port :"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Renvoyer l'e-mail de vérification"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
@ -453,7 +519,7 @@ msgstr ""
|
||||
"Quelqu'un a enregistré un compte avec ce nom, mais il doit encore être "
|
||||
"activé."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -463,48 +529,43 @@ msgstr ""
|
||||
"vérification, vous pouvez vous <a href=\"%(login_url)s\">identifier</a> et "
|
||||
"le renvoyer."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "profil de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr "Voici un endroit pour parler aux autres de vous-même."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
|
||||
msgid "Edit profile"
|
||||
msgstr "Modifier le profil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "Cet utilisateur n'a pas rempli leur profil (encore)."
|
||||
msgstr "Cet utilisateur n'a pas (encore) rempli son profil."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "Voir tous les médias de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
"C'est là où vos médias apparaît, mais vous ne semblez pas avoir quoi que ce "
|
||||
"soit encore ajouté."
|
||||
"C'est là où vos médias apparaîssent, mais vous ne semblez pas avoir encore "
|
||||
"ajouté quoi que ce soit."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
|
||||
msgid "Add media"
|
||||
msgstr "Ajouter des médias"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr "Il ne semble pas être un média encore là ..."
|
||||
msgstr "Il ne semble pas y avoir de média là, pour l'instant ..."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||
msgid "feed icon"
|
||||
msgstr "icon de flux"
|
||||
msgstr "icone de flux"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
||||
msgid "Atom feed"
|
||||
@ -512,11 +573,23 @@ msgstr "flux Atom"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr ""
|
||||
msgstr "Nouveaux"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr ""
|
||||
msgstr "Anciens"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
|
||||
msgid "Go to page:"
|
||||
msgstr "Aller à la page :"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "Tagged with"
|
||||
msgstr "Taggé avec"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "and"
|
||||
msgstr "et"
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
@ -524,17 +597,27 @@ msgstr "Commentaire"
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr ""
|
||||
msgstr "Je suis sûr de vouloir supprimer cela"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr "Oups, votre commentaire était vide."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr "Votre commentaire a été posté !"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr "Vous avez supprimé le media."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
"Ce media n'a pas été supprimé car vous n'avez pas confirmer que vous étiez "
|
||||
"sur."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"Vous êtes sur le point de supprimer des médias d'un autre utilisateur. "
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -19,27 +19,19 @@ msgstr ""
|
||||
"Language: ia\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "Nomine de usator"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "Contrasigno"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "Adresse de e-posta"
|
||||
|
||||
@ -52,95 +44,163 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "Titulo"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "Sito web"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr ""
|
||||
|
||||
@ -154,33 +214,30 @@ msgid ""
|
||||
" been moved or deleted."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Initiar session"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -190,76 +247,52 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
@ -280,27 +313,23 @@ msgstr ""
|
||||
msgid "Logging in failed!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "Crear un conto!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
|
||||
@ -326,35 +355,113 @@ msgid "Cancel"
|
||||
msgstr "Cancellar"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
@ -387,75 +494,81 @@ msgstr ""
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Profilo de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
"href=\"%(login_url)s\">log in</a> and resend it."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Profilo de %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr ""
|
||||
|
||||
@ -467,31 +580,57 @@ msgstr ""
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "Commento"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
|
Binary file not shown.
@ -1,15 +1,16 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
# <pikappa469@alice.it>, 2011.
|
||||
# <robi@nunnisoft.ch>, 2011.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -19,27 +20,19 @@ msgstr ""
|
||||
"Language: it\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "documento non valido come tipo multimediale."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "Nome utente"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "Password"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "Le password devono coincidere"
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "Conferma password"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr "Scrivilo ancora qui per assicurarti che non ci siano errori"
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "Indirizzo email"
|
||||
|
||||
@ -52,10 +45,10 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Spiacente, esiste già un utente con quel nome"
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Spiacente, quell'indirizzo email è già stato preso."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr "Siamo spiacenti, un utente con quell'indirizzo email esiste già."
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
@ -63,88 +56,159 @@ msgstr ""
|
||||
"Il tuo indirizzo email è stato verificato. Puoi ora fare login, modificare "
|
||||
"il tuo profilo, e inserire immagini!"
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "La chiave di verifica o l'id utente è sbagliato"
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
"Devi entrare col tuo profilo così possiamo sapere a chi inviare l'email!"
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr "Hai già verificato il tuo indirizzo email!"
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "Rispedisci email di verifica"
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
"Impossibile inviare l'email di recupero password perchè il tuo nome utente è"
|
||||
" inattivo o il tuo account email non è stato verificato."
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "Titolo"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Descrizione di questo lavoro"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "Tags"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "Bio"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "Sito web"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr "Password vecchia"
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"Stai modificando documenti multimediale di un altro utente. Procedi con "
|
||||
"attenzione."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "Stai modificando il profilo di un utente. Procedi con attenzione."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "documento non valido come tipo multimediale."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr "Password errata"
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "Documento"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Descrizione di questo lavoro"
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "Devi specificare un documento."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "Il documento non sembra essere un'immagine!"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "Evviva! "
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Immagine di 404 folletti che stressano"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr "Oops!"
|
||||
|
||||
@ -160,33 +224,30 @@ msgstr ""
|
||||
"Se sei sicuro che l'indirizzo è corretto, forse la pagina che stai cercando "
|
||||
"è stata spostata o cancellata."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Immagine di 404 folletti che stressano"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "MediaGoblin logo"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "Inoltra file multimediale"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr "Aggiungi documenti multimediali"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "verifica il tuo indirizzo email!"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr "Verifica la tua email!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr "disconnettiti"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Accedi"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -198,86 +259,59 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr "Esplora"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "Ciao, amante del multimedia! MediaGoblin è..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr "Ciao, benvenuto a questo sito MediaGoblin!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
"questo sito sta utilizzando <a "
|
||||
"href=\"http://mediagoblin.org\">Mediagoblin</a>, un ottimo programma di "
|
||||
"media hosting."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "Il posto perfetto per i tuoi documenti multimediali!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"Un posto per collaborare con altri e mostrare le proprie creazioni originali"
|
||||
" e derivate!"
|
||||
"Per aggiungere i tuoi file, scrivere commenti, salvare i tuoi preferiti e "
|
||||
"altro, devi entrare col tuo profilo MediaGoblin."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr ""
|
||||
"Libero, come in libertà. (Siamo un progetto <a "
|
||||
"href=\"http://gnu.org\">GNU</a>, dopotutto.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr "Non ne hai già uno? E' semplice!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
"Con l'obbiettivo di rendere il mondo un posto migliore attraverso la "
|
||||
"decentrelizzazione e (finalmente, presto!) federazione!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
"Fatto per estensibilità. (Numerosi tipi multimediali saranno presto aggiunti"
|
||||
" al programma, incluso il supporto video!)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr "Eccitato di unirti a noi?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr "Documenti multimediali più recenti"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr "Inserisci la tua nuova password"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr "Inserisci il tuo nome utente o email"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr "Recupera Password"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr "Invia istruzioni"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
msgid ""
|
||||
@ -291,32 +325,36 @@ msgid ""
|
||||
"If you think this is an error, just ignore this email and continue being\n"
|
||||
"a happy goblin!"
|
||||
msgstr ""
|
||||
"Ciao %(username)s,\n"
|
||||
"per cambiare la tua password MediaGoblin apri il seguente URL\n"
|
||||
"nel tuo web browser:\n"
|
||||
"\n"
|
||||
"%(verification_url)s\n"
|
||||
"\n"
|
||||
"Se pensi che sia un errore, ignora semplicemente questa email e continua ad essere \n"
|
||||
"un goblin felice!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:30
|
||||
msgid "Logging in failed!"
|
||||
msgstr "Accesso fallito!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "Non hai ancora un account?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "Creane uno qui!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr "Hai dimenticato la password?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "Crea un account!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr "Crea"
|
||||
|
||||
@ -347,36 +385,114 @@ msgid "Cancel"
|
||||
msgstr "Annulla"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "Salva i cambiamenti"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "Stai modificando il profilo di %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Media taggata con:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr "file taggato con:%(tag_name)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr "Originale"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Inoltra documento multimediale"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Conferma"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr "file di %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "Documenti multimediali di <a href=\"%(user_url)s\">%(username)s</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Mi dispiace, utente non trovato"
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr "Modifica"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr "Elimina"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr "a"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -408,30 +524,40 @@ msgstr "Nessun documento multimediale in elaborazione"
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "L'elaborazione di questi upload è fallita:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "profilo di %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Mi dispiace, utente non trovato"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr "è necessario verificare email"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr "Quasi finito! Il tuo account deve ancora essere attivato."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
"In breve dovresti ricevere un email contenente istruzioni su come fare."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "Nel caso non fosse:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Rispedisci email di verifica"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
@ -439,7 +565,7 @@ msgstr ""
|
||||
"Qualcuno ha registrato un account con questo nome utente, ma deve ancora "
|
||||
"essere attivato."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -448,30 +574,29 @@ msgstr ""
|
||||
"Se sei quella persona ma hai perso l'email di verifica, puoi <a "
|
||||
"href=\"%(login_url)s\">accedere</a> e rispedirlo."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "profilo di %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr "Ecco un posto dove raccontare agli altri di te."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "Modifica profilo"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "Questo utente non ha (ancora) compilato il proprio profilo."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "Visualizza tutti i file multimediali di %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
@ -479,11 +604,8 @@ msgstr ""
|
||||
"Questo è dove i tuoi documenti multimediali appariranno, ma sembra che tu "
|
||||
"non abbia ancora aggiunto niente."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr "Aggiungi documenti multimediali"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr "Non sembra ci sia ancora nessun documento multimediali qui.."
|
||||
|
||||
@ -495,31 +617,58 @@ msgstr "feed icon"
|
||||
msgid "Atom feed"
|
||||
msgstr "Atom feed"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr "Più nuovo"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr "Più vecchio"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "Commento"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr "Vai alla pagina:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr "Sono sicuro di volerlo cancellare"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr "Oops, il tuo commento era vuoto."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr "Il tuo commento è stato aggiunto!"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr "Hai cancellato il file"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
"Il file non è stato eliminato perchè non hai confermato di essere sicuro."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"Stai cancellando un documento multimediale di un altro utente. Procedi con "
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -19,27 +19,19 @@ msgstr ""
|
||||
"Language: ja\n"
|
||||
"Plural-Forms: nplurals=1; plural=0\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "ユーザネーム"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "パスワード"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "パスワードが一致している必要があります。"
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "パスワードを確認"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "メールアドレス"
|
||||
|
||||
@ -52,95 +44,163 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "申し訳ありませんが、その名前を持つユーザーがすでに存在しています。"
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
msgstr "メアドが確認されています。これで、ログインしてプロファイルを編集し、画像を提出することができます!"
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "検証キーまたはユーザーIDが間違っています"
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "検証メールを再送しました。"
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "タイトル"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "タグ"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr "スラグ"
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "スラグは必要です。"
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "自己紹介"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "URL"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "そのスラグを持つエントリは、このユーザーは既に存在します。"
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr "あなたは、他のユーザーのメディアを編集しています。ご注意ください。"
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "あなたは、他のユーザーのプロファイルを編集しています。ご注意ください。"
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "ファイル"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "ファイルを提供する必要があります。"
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "ファイルが画像ではないようです!"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "投稿終了!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr ""
|
||||
|
||||
@ -154,33 +214,30 @@ msgid ""
|
||||
" been moved or deleted."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "コンテンツを投稿"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "メアドを確認してください!"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "ログイン"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -190,76 +247,52 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
@ -280,27 +313,23 @@ msgstr ""
|
||||
msgid "Logging in failed!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "まだアカウントを持っていませんか?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "ここで作成!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "アカウントを作成!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
|
||||
@ -331,36 +360,114 @@ msgid "Cancel"
|
||||
msgstr "キャンセル"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "投稿する"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "%(username)sさんのプロフィールを編集中"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "タグ付けされたコンテンツ:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "コンテンツを投稿"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "送信"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "<a href=\"%(user_url)s\">%(username)s</a>さんのコンテンツ"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "申し訳ありませんが、そのユーザーは見つかりませんでした。"
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -392,75 +499,81 @@ msgstr ""
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "%(username)sさんのプロフィール"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "申し訳ありませんが、そのユーザーは見つかりませんでした。"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr "メールは、その方法の指示でいくつかの瞬間に到着します。"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "到着しない場合は、"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "確認メールを再送信"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
"href=\"%(login_url)s\">log in</a> and resend it."
|
||||
msgstr "あなたの確認メールを紛失した場合、<a href=\"%(login_url)s\">ログイン</a>して再送できます。"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "%(username)sさんのプロフィール"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "プロフィールを編集"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "%(username)sさんのコンテンツをすべて見る"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr ""
|
||||
|
||||
@ -472,31 +585,57 @@ msgstr ""
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
|
||||
|
Binary file not shown.
@ -3,14 +3,14 @@
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
# <mail@jefvanschendel.nl>, 2011.
|
||||
# <mail@jefvanschendel.nl>, 2011, 2012.
|
||||
msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"POT-Creation-Date: 2011-12-04 10:24-0600\n"
|
||||
"PO-Revision-Date: 2012-01-04 18:42+0000\n"
|
||||
"Last-Translator: schendje <mail@jefvanschendel.nl>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
@ -19,6 +19,10 @@ msgstr ""
|
||||
"Language: nl\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Verkeerd bestandsformaat voor mediatype opgegeven."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
msgid "Username"
|
||||
msgstr "Gebruikersnaam"
|
||||
@ -37,7 +41,7 @@ msgstr "Bevestig wachtwoord"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr ""
|
||||
msgstr "Typ het hier nog een keer om spelfouten te voorkomen."
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
msgid "Email address"
|
||||
@ -52,8 +56,8 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Sorry, er bestaat al een gebruiker met die naam."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Sorry, dat e-mailadres is al ingenomen."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr "Sorry, een gebruiker met dat e-mailadres bestaat al."
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
msgid ""
|
||||
@ -67,15 +71,27 @@ msgstr ""
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "De verificatie sleutel of gebruikers-ID is onjuist"
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:203
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
"Je moet ingelogd zijn, anders weten we niet waar we de e-mail naartoe moeten"
|
||||
" sturen!"
|
||||
|
||||
#: mediagoblin/auth/views.py:211
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr "Je hebt je e-mailadres al geverifieerd!"
|
||||
|
||||
#: mediagoblin/auth/views.py:224
|
||||
msgid "Resent your verification email."
|
||||
msgstr "Verificatie e-mail opnieuw opgestuurd."
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:265
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
"Email kon niet verstuurd worden omdat je gebruikersnaam inactief is of omdat"
|
||||
" je e-mailadres nog niet geverifieerd is."
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
@ -85,45 +101,67 @@ msgstr "Titel"
|
||||
msgid "Tags"
|
||||
msgstr "Etiket"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
msgid "Slug"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
msgid "The slug can't be empty"
|
||||
msgstr ""
|
||||
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:34
|
||||
msgid "Seperate tags by commas."
|
||||
msgstr "Scheidt labels met komma's."
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
msgid "Slug"
|
||||
msgstr "Slug"
|
||||
|
||||
#: mediagoblin/edit/forms.py:34
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "De slug kan niet leeg zijn"
|
||||
|
||||
#: mediagoblin/edit/forms.py:35
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
msgstr ""
|
||||
"Het titeldeel van het adres van deze media. Meestal hoef je dit niet aan te "
|
||||
"passen."
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:42
|
||||
msgid "Bio"
|
||||
msgstr "Bio"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:45
|
||||
msgid "Website"
|
||||
msgstr "Website"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr ""
|
||||
#: mediagoblin/edit/forms.py:49
|
||||
msgid "Old password"
|
||||
msgstr "Oud wachtwoord"
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/forms.py:52
|
||||
msgid "New Password"
|
||||
msgstr "Nieuw wachtwoord"
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "Er bestaat al een met die slug voor deze gebruiker."
|
||||
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"U bent de media van een andere gebruiker aan het aanpassen. Ga voorzichtig "
|
||||
"te werk."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr ""
|
||||
"U bent een gebruikersprofiel aan het aanpassen. Ga voorzichtig te werk."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr ""
|
||||
#: mediagoblin/edit/views.py:171
|
||||
msgid "Wrong password"
|
||||
msgstr "Verkeerd wachtwoord"
|
||||
|
||||
#: mediagoblin/edit/views.py:192
|
||||
msgid "Profile edited!"
|
||||
msgstr "Profiel aangepast!"
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:65
|
||||
msgid "Could not find any file extension in \"{filename}\""
|
||||
msgstr "Kon geen bestandsformaat voor \"{filename}\" vinden"
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
@ -131,141 +169,141 @@ msgstr "Bestand"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr ""
|
||||
msgstr "Beschrijving van dit werk"
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "You must provide a file."
|
||||
msgstr "U moet een bestand aangeven."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "Het lijkt erop dat dit bestand geen afbeelding is!"
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:127
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "Mooizo! Toegevoegd!"
|
||||
|
||||
#: mediagoblin/submit/views.py:133
|
||||
msgid "Invalid file type."
|
||||
msgstr "Ongeldig bestandstype"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
msgid "Oops!"
|
||||
msgstr ""
|
||||
msgstr "Oeps!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:24
|
||||
msgid "There doesn't seem to be a page at this address. Sorry!"
|
||||
msgstr ""
|
||||
msgstr "Het lijkt erop dat er geen pagina bestaat op dit adres. Sorry!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:26
|
||||
msgid ""
|
||||
"If you're sure the address is correct, maybe the page you're looking for has"
|
||||
" been moved or deleted."
|
||||
msgstr ""
|
||||
"Als je zeker weet dat het adres klopt is de pagina misschien verplaatst of "
|
||||
"verwijderd."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr ""
|
||||
msgstr "Afbeelding van de 404 goblin onder stress"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:49
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr ""
|
||||
msgstr "MediaGoblin logo"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
#: mediagoblin/templates/mediagoblin/base.html:54
|
||||
msgid "Submit media"
|
||||
msgstr "Voeg media toe"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "Controleer uw e-mail!"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:65
|
||||
msgid "Verify your email!"
|
||||
msgstr "Verifieer je e-mailadres!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:72
|
||||
msgid "log out"
|
||||
msgstr "uitloggen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:75
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Inloggen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:91
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
msgstr ""
|
||||
"Aangedreven door <a "
|
||||
"href=\"http://mediagoblin.org\">MediaGoblin</a> , een <a "
|
||||
"href=\"http://gnu.org/\">GNU-project</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||
msgid "Explore"
|
||||
msgstr ""
|
||||
msgstr "Verkennen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr "Hoi, welkom op deze MediaGoblin website!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
"Deze website draait <a href=\"http://mediagoblin.org\">MediaGoblin</a>, een "
|
||||
"buitengewoon goed stuk software voor mediahosting."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"Om je eigen media toe te voegen, berichten te plaatsen, favorieten op te "
|
||||
"slaan en meer, kun je inloggen met je MediaGoblin account."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr ""
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr "Heb je er nog geen? Het is heel eenvoudig!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Creëer een account op deze website</a>\n"
|
||||
" of\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Gebruik MediaGoblin op je eigen server</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:44
|
||||
msgid "Most recent media"
|
||||
msgstr ""
|
||||
msgstr "Nieuwste media"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr ""
|
||||
msgstr "Voer je nieuwe wachtwoord in"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr ""
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:33
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Voeg toe"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr "Wachtwoord herstellen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr "Stuur instructies"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
msgstr ""
|
||||
msgstr "Je wachtwoord is veranderd. Probeer om opnieuw in te loggen."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
msgstr ""
|
||||
"Check je inbox. Er is een e-mail verstuurd waarmee je je wachtwoord kunt "
|
||||
"veranderen."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
@ -280,26 +318,29 @@ msgid ""
|
||||
"If you think this is an error, just ignore this email and continue being\n"
|
||||
"a happy goblin!"
|
||||
msgstr ""
|
||||
"Hoi %(username)s,\n"
|
||||
"\n"
|
||||
"Om je wachtwoord voor GNU MediaGoblin te veranderen, moet je dit adres in je webbrowser openen:\n"
|
||||
"\n"
|
||||
"%(verification_url)s\n"
|
||||
"\n"
|
||||
"Als je denkt dat dit niet klopt, kun je deze e-mail gewoon negeren."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:30
|
||||
msgid "Logging in failed!"
|
||||
msgstr ""
|
||||
msgstr "Inloggen is mislukt!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "Heeft u nog geen account?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "Maak er hier een!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr ""
|
||||
msgstr "Wachtwoord vergeten?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
msgid "Create an account!"
|
||||
@ -307,7 +348,7 @@ msgstr "Maak een account aan!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
msgid "Create"
|
||||
msgstr ""
|
||||
msgstr "Creëer"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/verification_email.txt:19
|
||||
#, python-format
|
||||
@ -342,89 +383,128 @@ msgstr "Wijzigingen opslaan"
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "Het profiel aanpassen van %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Media met het etiket:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr "Media met het label: %(tag_name)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:19
|
||||
msgid "Original"
|
||||
msgstr "Origineel"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Voeg media toe"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Voeg toe"
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr "Media van %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "Media van <a href=\"%(user_url)s\"> %(username)s </a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Sorry, die gebruiker kon niet worden gevonden."
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:57
|
||||
#, python-format
|
||||
msgid "By <a href=\"%(user_url)s\">%(username)s</a> on %(date)s"
|
||||
msgstr "Door <a href=\"%(user_url)s\">%(username)s</a> op %(date)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:67
|
||||
msgid "Post a comment"
|
||||
msgstr "Plaats een bericht"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:85
|
||||
msgid "at"
|
||||
msgstr "op"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:102
|
||||
msgid "Post comment!"
|
||||
msgstr "Plaats bericht!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:124
|
||||
msgid "Edit"
|
||||
msgstr "Pas aan"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:130
|
||||
msgid "Delete"
|
||||
msgstr "Verwijderen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
msgid "Really delete %(title)s?"
|
||||
msgstr ""
|
||||
msgstr "Zeker weten dat je %(title)s wil verwijderen?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||
msgid "Delete Permanently"
|
||||
msgstr ""
|
||||
msgstr "Permanent verwijderen"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||
msgid "Media processing panel"
|
||||
msgstr ""
|
||||
msgstr "Mediaverwerkingspaneel"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:25
|
||||
msgid ""
|
||||
"You can track the state of media being processed for your gallery here."
|
||||
msgstr ""
|
||||
msgstr "Hier kun je de status zien van de media die verwerkt worden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
|
||||
msgid "Media in-processing"
|
||||
msgstr ""
|
||||
msgstr "Media te verwerken"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
||||
msgid "No media in-processing"
|
||||
msgstr ""
|
||||
msgstr "Geen media om te verwerken"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr ""
|
||||
msgstr "Deze toevoegingen konden niet verwerkt worden:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Profiel van %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Sorry, die gebruiker kon niet worden gevonden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr ""
|
||||
msgstr "Emailverificatie is nodig"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr ""
|
||||
msgstr "Bijna klaar! Je account moet nog geactiveerd worden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr ""
|
||||
"Een e-mail zou in een paar ogenblikken aan moeten komen met instructies "
|
||||
"hiertoe."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "Zoniet:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Stuur de verificatie e-mail opnieuw op."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
msgstr ""
|
||||
"Iemand heeft een account met deze gebruikersnaam gemaakt, maar hij moet nog "
|
||||
"geactiveerd worden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -433,58 +513,67 @@ msgstr ""
|
||||
"Als u die persoon bent, maar de verificatie e-mail verloren hebt, kunt u <a "
|
||||
"href=\"%(login_url)s\">inloggen</a> en hem nogmaals verzenden."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "Profiel van %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr ""
|
||||
msgstr "Hier is een plekje om anderen over jezelf te vertellen."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:119
|
||||
msgid "Edit profile"
|
||||
msgstr "Profiel aanpassen."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:107
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr ""
|
||||
msgstr "Deze gebruiker heeft zijn of haar profiel (nog) niet ingevuld."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:133
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "Bekijk alle media van %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:146
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr ""
|
||||
"Dit is waar je nieuwe media zal verschijnen, maar het lijkt erop dat je nog "
|
||||
"niets heb toegevoegd."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:152
|
||||
msgid "Add media"
|
||||
msgstr ""
|
||||
msgstr "Voeg media toe"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:158
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr ""
|
||||
msgstr "Het lijkt erop dat er nog geen media is."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||
msgid "feed icon"
|
||||
msgstr ""
|
||||
msgstr "feed icoon"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
||||
msgid "Atom feed"
|
||||
msgstr ""
|
||||
msgstr "Atom feed"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr ""
|
||||
msgstr "Nieuwer"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr ""
|
||||
msgstr "Ouder"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:50
|
||||
msgid "Go to page:"
|
||||
msgstr "Ga naar pagina:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "Tagged with"
|
||||
msgstr "Gelabeld met"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "and"
|
||||
msgstr "en"
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
@ -492,18 +581,29 @@ msgstr "Commentaar"
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr ""
|
||||
msgstr "Ik weet zeker dat ik dit wil verwijderen."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr "Oeps, je bericht was leeg."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
msgstr ""
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr "Je bericht is geplaatst!"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr "Je hebt deze media verwijderd."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
"Deze media was niet verwijderd omdat je niet hebt aangegeven dat je het "
|
||||
"zeker weet."
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"Je staat op het punt de media van iemand anders te verwijderen. Pas op."
|
||||
|
||||
|
||||
|
Binary file not shown.
@ -1,5 +1,5 @@
|
||||
# Translations template for PROJECT.
|
||||
# Copyright (C) 2011 ORGANIZATION
|
||||
# Copyright (C) 2012 ORGANIZATION
|
||||
# This file is distributed under the same license as the PROJECT project.
|
||||
#
|
||||
# Translators:
|
||||
@ -8,8 +8,8 @@ msgid ""
|
||||
msgstr ""
|
||||
"Project-Id-Version: GNU MediaGoblin\n"
|
||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||
"POT-Creation-Date: 2011-11-01 23:14-0500\n"
|
||||
"PO-Revision-Date: 2011-11-02 04:13+0000\n"
|
||||
"POT-Creation-Date: 2012-01-07 13:47-0600\n"
|
||||
"PO-Revision-Date: 2012-01-07 19:44+0000\n"
|
||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
@ -19,27 +19,19 @@ msgstr ""
|
||||
"Language: nn_NO\n"
|
||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||
#: mediagoblin/processing.py:143
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Ugyldig fil for mediatypen."
|
||||
|
||||
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:41
|
||||
msgid "Username"
|
||||
msgstr "Brukarnamn"
|
||||
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:45
|
||||
msgid "Password"
|
||||
msgstr "Passord"
|
||||
|
||||
#: mediagoblin/auth/forms.py:35
|
||||
msgid "Passwords must match."
|
||||
msgstr "Passorda må vera like."
|
||||
|
||||
#: mediagoblin/auth/forms.py:37
|
||||
msgid "Confirm password"
|
||||
msgstr "Gjenta passord"
|
||||
|
||||
#: mediagoblin/auth/forms.py:39
|
||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||
msgstr "Skriv passordet omatt for å unngå stavefeil."
|
||||
|
||||
#: mediagoblin/auth/forms.py:42
|
||||
#: mediagoblin/auth/forms.py:34
|
||||
msgid "Email address"
|
||||
msgstr "Epost"
|
||||
|
||||
@ -52,10 +44,10 @@ msgid "Sorry, a user with that name already exists."
|
||||
msgstr "Ein konto med dette brukarnamnet finst allereide."
|
||||
|
||||
#: mediagoblin/auth/views.py:77
|
||||
msgid "Sorry, that email address has already been taken."
|
||||
msgstr "Den epostadressa er allereide teken."
|
||||
msgid "Sorry, a user with that email address already exists."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:179
|
||||
#: mediagoblin/auth/views.py:180
|
||||
msgid ""
|
||||
"Your email address has been verified. You may now login, edit your profile, "
|
||||
"and submit images!"
|
||||
@ -63,87 +55,155 @@ msgstr ""
|
||||
"Kontoen din er stadfesta. Du kan no logga inn, endra profilen din og lasta "
|
||||
"opp filer."
|
||||
|
||||
#: mediagoblin/auth/views.py:185
|
||||
#: mediagoblin/auth/views.py:186
|
||||
msgid "The verification key or user id is incorrect"
|
||||
msgstr "Stadfestingsnykelen eller brukar-ID-en din er feil."
|
||||
|
||||
#: mediagoblin/auth/views.py:207
|
||||
#: mediagoblin/auth/views.py:204
|
||||
msgid "You must be logged in so we know who to send the email to!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:212
|
||||
msgid "You've already verified your email address!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:225
|
||||
msgid "Resent your verification email."
|
||||
msgstr "Send ein ny stadfestingsepost."
|
||||
|
||||
#: mediagoblin/auth/views.py:248
|
||||
#: mediagoblin/auth/views.py:260
|
||||
msgid ""
|
||||
"An email has been sent with instructions on how to change your password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:270
|
||||
msgid ""
|
||||
"Could not send password recovery email as your username is inactive or your "
|
||||
"account's email address has not been verified."
|
||||
msgstr ""
|
||||
"Kunne ikkje senda epost. Brukarnamnet ditt er inaktivt eller uverifisert."
|
||||
|
||||
#: mediagoblin/auth/views.py:282
|
||||
msgid "Couldn't find someone with that username or email."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/auth/views.py:330
|
||||
msgid "You can now log in using your new password."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:24 mediagoblin/submit/forms.py:27
|
||||
msgid "Title"
|
||||
msgstr "Tittel"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:27 mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Skildring av mediefila"
|
||||
|
||||
#: mediagoblin/edit/forms.py:28 mediagoblin/submit/forms.py:31
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:32 mediagoblin/submit/forms.py:35
|
||||
msgid "Tags"
|
||||
msgstr "Merkelappar"
|
||||
|
||||
#: mediagoblin/edit/forms.py:31
|
||||
#: mediagoblin/edit/forms.py:34 mediagoblin/submit/forms.py:37
|
||||
msgid "Separate tags by commas."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:37
|
||||
msgid "Slug"
|
||||
msgstr "Nettnamn"
|
||||
|
||||
#: mediagoblin/edit/forms.py:32
|
||||
#: mediagoblin/edit/forms.py:38
|
||||
msgid "The slug can't be empty"
|
||||
msgstr "Nettnamnet kan ikkje vera tomt"
|
||||
|
||||
#: mediagoblin/edit/forms.py:33
|
||||
#: mediagoblin/edit/forms.py:39
|
||||
msgid ""
|
||||
"The title part of this media's URL. You usually don't need to change this."
|
||||
msgstr "Nettnamnet (adressetittel) for mediefila di. Trengst ikkje endrast."
|
||||
"The title part of this media's address. You usually don't need to change "
|
||||
"this."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:40
|
||||
#: mediagoblin/edit/forms.py:46
|
||||
msgid "Bio"
|
||||
msgstr "Presentasjon"
|
||||
|
||||
#: mediagoblin/edit/forms.py:43
|
||||
#: mediagoblin/edit/forms.py:48
|
||||
msgid ""
|
||||
"You can use\n"
|
||||
" <a href=\"http://daringfireball.net/projects/markdown/basics\">\n"
|
||||
" Markdown</a> for formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:53
|
||||
msgid "Website"
|
||||
msgstr "Heimeside"
|
||||
|
||||
#: mediagoblin/edit/views.py:64
|
||||
#: mediagoblin/edit/forms.py:60
|
||||
msgid "Old password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:62
|
||||
msgid "Enter your old password to prove you own this account."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/forms.py:65
|
||||
msgid "New password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:65
|
||||
msgid "An entry with that slug already exists for this user."
|
||||
msgstr "Eit innlegg med denne adressetittelen finst allereie."
|
||||
|
||||
#: mediagoblin/edit/views.py:85
|
||||
#: mediagoblin/edit/views.py:86
|
||||
msgid "You are editing another user's media. Proceed with caution."
|
||||
msgstr "Trå varsamt, du endrar nokon andre sine mediefiler."
|
||||
|
||||
#: mediagoblin/edit/views.py:155
|
||||
#: mediagoblin/edit/views.py:156
|
||||
msgid "You are editing a user's profile. Proceed with caution."
|
||||
msgstr "Trå varsamt, du endrar nokon andre sin profil."
|
||||
|
||||
#: mediagoblin/process_media/errors.py:44
|
||||
msgid "Invalid file given for media type."
|
||||
msgstr "Ugyldig fil for mediatypen."
|
||||
#: mediagoblin/edit/views.py:174
|
||||
msgid "Profile changes saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:200
|
||||
msgid "Wrong password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/edit/views.py:216
|
||||
msgid "Account settings saved"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:77
|
||||
msgid "Could not extract any file extension from \"{filename}\""
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/media_types/__init__.py:88
|
||||
msgid "Sorry, I don't support that file type :("
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/submit/forms.py:25
|
||||
msgid "File"
|
||||
msgstr "Fil"
|
||||
|
||||
#: mediagoblin/submit/forms.py:30
|
||||
msgid "Description of this work"
|
||||
msgstr "Skildring av mediefila"
|
||||
|
||||
#: mediagoblin/submit/views.py:46
|
||||
#: mediagoblin/submit/views.py:50
|
||||
msgid "You must provide a file."
|
||||
msgstr "Du må velja ei fil."
|
||||
|
||||
#: mediagoblin/submit/views.py:49
|
||||
msgid "The file doesn't seem to be an image!"
|
||||
msgstr "Fila verkar ikkje å vera ei gyldig biletefil."
|
||||
|
||||
#: mediagoblin/submit/views.py:121
|
||||
#: mediagoblin/submit/views.py:128
|
||||
msgid "Woohoo! Submitted!"
|
||||
msgstr "Johoo! Opplasta!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||
#: mediagoblin/templates/mediagoblin/404.html:22
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Bilete av stressa 404-tusse."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:23
|
||||
msgid "Oops!"
|
||||
msgstr "Oops."
|
||||
|
||||
@ -159,33 +219,30 @@ msgstr ""
|
||||
"Er du sikker på at adressa er korrekt, so er sida truleg flytta eller "
|
||||
"sletta."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||
msgid "Image of 404 goblin stressing out"
|
||||
msgstr "Bilete av stressa 404-tusse."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||
msgid "GNU MediaGoblin"
|
||||
msgstr "GNU MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||
#: mediagoblin/templates/mediagoblin/base.html:48
|
||||
msgid "MediaGoblin logo"
|
||||
msgstr "MediaGoblin"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||
msgid "Submit media"
|
||||
msgstr "Last opp"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:53
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:157
|
||||
msgid "Add media"
|
||||
msgstr "Legg til mediefiler"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||
msgid "verify your email!"
|
||||
msgstr "Stadfest epostadressa di"
|
||||
#: mediagoblin/templates/mediagoblin/base.html:64
|
||||
msgid "Verify your email!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||
#: mediagoblin/templates/mediagoblin/base.html:71
|
||||
msgid "log out"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:74
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||
msgid "Log in"
|
||||
msgstr "Logg inn"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||
#: mediagoblin/templates/mediagoblin/base.html:86
|
||||
msgid ""
|
||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||
"href=\"http://gnu.org/\">GNU</a> project"
|
||||
@ -197,91 +254,53 @@ msgstr ""
|
||||
msgid "Explore"
|
||||
msgstr "Utforsk"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||
msgid "Hi there, media lover! MediaGoblin is..."
|
||||
msgstr "Hei der mediaentusiast, MediaGoblin..."
|
||||
#: mediagoblin/templates/mediagoblin/root.html:26
|
||||
msgid "Hi there, welcome to this MediaGoblin site!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:28
|
||||
msgid ""
|
||||
"This site is running <a href=\"http://mediagoblin.org\">MediaGoblin</a>, an "
|
||||
"extraordinarily great piece of media hosting software."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||
msgid "The perfect place for your media!"
|
||||
msgstr "Er ein perfekt plass for mediet ditt!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||
msgid ""
|
||||
"A place for people to collaborate and show off original and derived "
|
||||
"creations!"
|
||||
"To add your own media, place comments, save your favourites and more, you "
|
||||
"can log in with your MediaGoblin account."
|
||||
msgstr ""
|
||||
"Er ein plass for folk å samarbeida og visa fram sjølvlaga og vidarebygde "
|
||||
"verk."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||
msgid ""
|
||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||
"after all.)"
|
||||
msgstr "Fri som i fridom (me er eit <a href=\"http://gnu.org\">GNU</a>-prosjekt)."
|
||||
msgid "Don't have one yet? It's easy!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||
msgid ""
|
||||
"Aiming to make the world a better place through decentralization and "
|
||||
"(eventually, coming soon!) federation!"
|
||||
msgstr ""
|
||||
"Arbeidar for å gjera verda ein betre stad gjennom desentralisering og (til "
|
||||
"slutt, kjem snart!) federering, enkelt forklart deling og sending av "
|
||||
"mediefiler og kommentarar over fleire nettstader."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||
msgid ""
|
||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||
" including video support!)"
|
||||
msgstr "Bygd for utviding (fleire medietypar kjem snart, m.a. video)."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||
msgid ""
|
||||
"Powered by people like you. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||
" software!</a>)"
|
||||
msgstr ""
|
||||
"Driven av folk som deg. (<a "
|
||||
"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjelpa med å forbetra"
|
||||
" MediaGoblin</a>)"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||
msgid "Excited to join us?"
|
||||
msgstr "Lyst til å bli med oss?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:39
|
||||
#, python-format
|
||||
msgid ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Create a free account</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
"<a class=\"button_action_highlight\" href=\"%(register_url)s\">Create an account at this site</a>\n"
|
||||
" or\n"
|
||||
" <a class=\"button_action\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||
msgstr ""
|
||||
"<a class=\"header_submit_highlight\" href=\"%(register_url)s\">Opprett ein "
|
||||
"gratis konto</a> eller <a class=\"header_submit\" "
|
||||
"href=\"http://wiki.mediagoblin.org/HackingHowto\">installer MediaGoblin på "
|
||||
"eigen tenar</a>"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||
#: mediagoblin/templates/mediagoblin/root.html:40
|
||||
msgid "Most recent media"
|
||||
msgstr "Nyaste mediefiler"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:29
|
||||
msgid "Enter your new password"
|
||||
msgstr "Fyll inn passord"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:29
|
||||
msgid "Enter your username or email"
|
||||
msgstr "Fyll inn brukarnamn eller epost"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_changed_success.html:22
|
||||
msgid "Your password has been changed. Try to log in now."
|
||||
msgstr "Passordet endra. Prøv å logga inn no."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_email_sent.html:22
|
||||
msgid ""
|
||||
"Check your inbox. We sent an email with a URL for changing your password."
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:32
|
||||
msgid "Set your new password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:35
|
||||
msgid "Set password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||
msgid "Recover password"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:30
|
||||
msgid "Send instructions"
|
||||
msgstr ""
|
||||
"Sjekk innboksen din. Me har sendt deg ein epost med ei netadresse for "
|
||||
"passordendring."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/fp_verification_email.txt:19
|
||||
#, python-format
|
||||
@ -308,27 +327,23 @@ msgstr ""
|
||||
msgid "Logging in failed!"
|
||||
msgstr "Innlogging feila"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:43
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:35
|
||||
msgid "Don't have an account yet?"
|
||||
msgstr "Har du ingen konto?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:46
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:36
|
||||
msgid "Create one here!"
|
||||
msgstr "Lag ein!"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:49
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||
msgid "Forgot your password?"
|
||||
msgstr "Gløymd passordet?"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/login.html:52
|
||||
msgid "Change it!"
|
||||
msgstr "Endra"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:32
|
||||
msgid "Create an account!"
|
||||
msgstr "Lag ein konto."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:31
|
||||
#: mediagoblin/templates/mediagoblin/auth/register.html:36
|
||||
msgid "Create"
|
||||
msgstr "Opprett"
|
||||
|
||||
@ -359,36 +374,114 @@ msgid "Cancel"
|
||||
msgstr "Bryt av"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:40
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||
msgid "Save changes"
|
||||
msgstr "Lagra"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_account.html:34
|
||||
#, python-format
|
||||
msgid "Changing %(username)s's account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||
#, python-format
|
||||
msgid "Editing %(username)s's profile"
|
||||
msgstr "Endrar profilen til %(username)s"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||
msgid "Media tagged with:"
|
||||
msgstr "Merkelappar:"
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:30
|
||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:35
|
||||
#, python-format
|
||||
msgid "Media tagged with: %(tag_name)s"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/ascii.html:34
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:46
|
||||
msgid "Original"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:33
|
||||
msgid ""
|
||||
"Sorry, this video will not work because \n"
|
||||
"\t your web browser does not support HTML5 \n"
|
||||
"\t video."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/media_displays/video.html:36
|
||||
msgid ""
|
||||
"You can get a modern web browser that \n"
|
||||
"\t can play this video at <a href=\"http://getfirefox.com\">\n"
|
||||
"\t http://getfirefox.com</a>!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||
msgid "Submit yer media"
|
||||
msgstr "Last opp"
|
||||
msgid "Add your media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/submit/start.html:30
|
||||
msgid "Submit"
|
||||
msgstr "Send"
|
||||
msgid "Add"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:30
|
||||
#, python-format
|
||||
msgid "%(username)s's media"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:37
|
||||
#, python-format
|
||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||
msgstr "<a href=\"%(user_url)s\">%(username)s</a> sine mediefiler"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Fann ingen slik brukar"
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:60
|
||||
#, python-format
|
||||
msgid "Added on %(date)s."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:69
|
||||
msgid "Edit"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:73
|
||||
msgid "Delete"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:79
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:81
|
||||
#, python-format
|
||||
msgid "%(comment_count)s comments"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:83
|
||||
msgid "No comments yet."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:91
|
||||
msgid "Add one"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:100
|
||||
msgid ""
|
||||
"Type your comment here. You can use <a "
|
||||
"href=\"http://daringfireball.net/projects/markdown/basics\">Markdown</a> for"
|
||||
" formatting."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:104
|
||||
msgid "Add this comment"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:126
|
||||
msgid "at"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media.html:141
|
||||
#, python-format
|
||||
msgid "<p>❖ Browsing media by <a href=\"%(user_url)s\">%(username)s</a></p>"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||
#, python-format
|
||||
@ -420,35 +513,45 @@ msgstr "Ingen media under handsaming"
|
||||
msgid "These uploads failed to process:"
|
||||
msgstr "Klarte ikkje handsama desse opplasta filene:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:31
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:89
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "%(username)s sin profil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:43
|
||||
msgid "Sorry, no such user found."
|
||||
msgstr "Fann ingen slik brukar"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:50
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:70
|
||||
msgid "Email verification needed"
|
||||
msgstr "Epostverifisering trengst."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:53
|
||||
msgid "Almost done! Your account still needs to be activated."
|
||||
msgstr "Nesten ferdig. Du treng berre aktivera kontoen."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:58
|
||||
msgid ""
|
||||
"An email should arrive in a few moments with instructions on how to do so."
|
||||
msgstr "Ein epost med instruksjonar kjem straks."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
msgid "In case it doesn't:"
|
||||
msgstr "I tilfelle det ikkje skjer:"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:65
|
||||
msgid "Resend verification email"
|
||||
msgstr "Send ein ny epost"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:73
|
||||
msgid ""
|
||||
"Someone has registered an account with this username, but it still has to be"
|
||||
" activated."
|
||||
msgstr "Dette brukarnamnet finst allereie, men det er ikkje aktivert."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:79
|
||||
#, python-format
|
||||
msgid ""
|
||||
"If you are that person but you've lost your verification email, you can <a "
|
||||
@ -457,40 +560,36 @@ msgstr ""
|
||||
"Viss dette er deg, kan du <a href=\"%(login_url)s\">logga inn</a> for å få "
|
||||
"tilsendt ny epost med stadfestingslenkje."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||
#, python-format
|
||||
msgid "%(username)s's profile"
|
||||
msgstr "%(username)s sin profil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
msgid "Here's a spot to tell others about yourself."
|
||||
msgstr "Her kan du fortelja om deg sjølv."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:101
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:118
|
||||
msgid "Edit profile"
|
||||
msgstr "Endra profil"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:106
|
||||
msgid "This user hasn't filled in their profile (yet)."
|
||||
msgstr "Brukaren har ikkje fylt ut profilen sin (enno)."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:125
|
||||
msgid "Change account settings"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:138
|
||||
#, python-format
|
||||
msgid "View all of %(username)s's media"
|
||||
msgstr "Sjå alle %(username)s sine mediefiler"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:151
|
||||
msgid ""
|
||||
"This is where your media will appear, but you don't seem to have added "
|
||||
"anything yet."
|
||||
msgstr "Her kjem mediefilene dine. Ser ikkje ut til at du har lagt til noko."
|
||||
msgstr "Her kjem mediefilene dine."
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||
msgid "Add media"
|
||||
msgstr "Legg til mediefiler"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:163
|
||||
#: mediagoblin/templates/mediagoblin/utils/object_gallery.html:72
|
||||
msgid "There doesn't seem to be any media here yet..."
|
||||
msgstr "Ser ikkje ut til at det finst nokon mediefiler her nett no."
|
||||
|
||||
@ -502,31 +601,57 @@ msgstr " "
|
||||
msgid "Atom feed"
|
||||
msgstr "Atom-kjelde"
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||
msgid "Newer"
|
||||
msgstr "Nyare"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:39
|
||||
msgid "← Newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||
msgid "Older"
|
||||
msgstr "Eldre"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:45
|
||||
msgid "Older →"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:24
|
||||
msgid "Comment"
|
||||
msgstr "Innspel"
|
||||
#: mediagoblin/templates/mediagoblin/utils/pagination.html:48
|
||||
msgid "Go to page:"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:27
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:32
|
||||
msgid "newer"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:38
|
||||
#: mediagoblin/templates/mediagoblin/utils/prev_next.html:43
|
||||
msgid "older"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:20
|
||||
msgid "View more media tagged with"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/templates/mediagoblin/utils/tags.html:25
|
||||
msgid "or"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/forms.py:30
|
||||
msgid "I am sure I want to delete this"
|
||||
msgstr "Eg er sikker eg vil sletta dette"
|
||||
|
||||
#: mediagoblin/user_pages/views.py:142
|
||||
msgid "Empty comments are not allowed."
|
||||
#: mediagoblin/user_pages/views.py:155
|
||||
msgid "Oops, your comment was empty."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:148
|
||||
msgid "Comment posted!"
|
||||
#: mediagoblin/user_pages/views.py:161
|
||||
msgid "Your comment has been posted!"
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:181
|
||||
#: mediagoblin/user_pages/views.py:183
|
||||
msgid "You deleted the media."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:190
|
||||
msgid "The media was not deleted because you didn't check that you were sure."
|
||||
msgstr ""
|
||||
|
||||
#: mediagoblin/user_pages/views.py:198
|
||||
msgid "You are about to delete another user's media. Proceed with caution."
|
||||
msgstr ""
|
||||
"Du er i ferd med å sletta ein annan brukar sine mediefiler. Trå varsamt."
|
||||
|
Binary file not shown.
Some files were not shown because too many files have changed in this diff Show More
Loading…
x
Reference in New Issue
Block a user