Merge remote-tracking branch 'refs/remotes/upstream/master' into 569-application-middleware
Conflicts: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html
This commit is contained in:
commit
6bfbe02426
2
AUTHORS
2
AUTHORS
@ -24,11 +24,13 @@ Thank you!
|
|||||||
* Karen Rustad
|
* Karen Rustad
|
||||||
* Mark Holmquist
|
* Mark Holmquist
|
||||||
* Matt Lee
|
* Matt Lee
|
||||||
|
* Nathan Yergler
|
||||||
* Odin Hørthe Omdal
|
* Odin Hørthe Omdal
|
||||||
* Osama Khalid
|
* Osama Khalid
|
||||||
* Rasmus Larsson
|
* Rasmus Larsson
|
||||||
* Sam Kleinman
|
* Sam Kleinman
|
||||||
* Sebastian Spaeth
|
* Sebastian Spaeth
|
||||||
|
* Shawn Khan
|
||||||
* Will Kahn-Greene
|
* Will Kahn-Greene
|
||||||
|
|
||||||
If you think your name should be on this list, let us know!
|
If you think your name should be on this list, let us know!
|
||||||
|
20
extlib/960.gs/MIT.txt
Normal file
20
extlib/960.gs/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.
|
BIN
extlib/lato/Lato-Bold.ttf
Normal file
BIN
extlib/lato/Lato-Bold.ttf
Normal file
Binary file not shown.
BIN
extlib/lato/Lato-BoldItalic.ttf
Normal file
BIN
extlib/lato/Lato-BoldItalic.ttf
Normal file
Binary file not shown.
BIN
extlib/lato/Lato-Italic.ttf
Normal file
BIN
extlib/lato/Lato-Italic.ttf
Normal file
Binary file not shown.
BIN
extlib/lato/Lato-Regular.ttf
Normal file
BIN
extlib/lato/Lato-Regular.ttf
Normal file
Binary file not shown.
97
extlib/lato/OFL_1.1.txt
Normal file
97
extlib/lato/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.
|
@ -25,7 +25,7 @@ from mediagoblin.mg_globals import setup_globals
|
|||||||
from mediagoblin.init.celery import setup_celery_from_config
|
from mediagoblin.init.celery import setup_celery_from_config
|
||||||
from mediagoblin.init import (get_jinja_loader, get_staticdirector,
|
from mediagoblin.init import (get_jinja_loader, get_staticdirector,
|
||||||
setup_global_and_app_config, setup_workbench, setup_database,
|
setup_global_and_app_config, setup_workbench, setup_database,
|
||||||
setup_storage)
|
setup_storage, setup_beaker_cache)
|
||||||
|
|
||||||
|
|
||||||
class MediaGoblinApp(object):
|
class MediaGoblinApp(object):
|
||||||
@ -71,6 +71,9 @@ class MediaGoblinApp(object):
|
|||||||
# set up staticdirector tool
|
# set up staticdirector tool
|
||||||
self.staticdirector = get_staticdirector(app_config)
|
self.staticdirector = get_staticdirector(app_config)
|
||||||
|
|
||||||
|
# set up caching
|
||||||
|
self.cache = setup_beaker_cache()
|
||||||
|
|
||||||
# Setup celery, if appropriate
|
# Setup celery, if appropriate
|
||||||
if setup_celery and not app_config.get('celery_setup_elsewhere'):
|
if setup_celery and not app_config.get('celery_setup_elsewhere'):
|
||||||
if os.environ.get('CELERY_ALWAYS_EAGER'):
|
if os.environ.get('CELERY_ALWAYS_EAGER'):
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import wtforms
|
import wtforms
|
||||||
|
import re
|
||||||
|
|
||||||
from mediagoblin.util import fake_ugettext_passthrough as _
|
from mediagoblin.util import fake_ugettext_passthrough as _
|
||||||
|
|
||||||
@ -24,18 +25,14 @@ class RegistrationForm(wtforms.Form):
|
|||||||
_('Username'),
|
_('Username'),
|
||||||
[wtforms.validators.Required(),
|
[wtforms.validators.Required(),
|
||||||
wtforms.validators.Length(min=3, max=30),
|
wtforms.validators.Length(min=3, max=30),
|
||||||
wtforms.validators.Regexp(r'^\w+$')],
|
wtforms.validators.Regexp(r'^\w+$')])
|
||||||
description=_(
|
|
||||||
u"This is the name other users will identify you with."))
|
|
||||||
password = wtforms.PasswordField(
|
password = wtforms.PasswordField(
|
||||||
_('Password'),
|
_('Password'),
|
||||||
[wtforms.validators.Required(),
|
[wtforms.validators.Required(),
|
||||||
wtforms.validators.Length(min=6, max=30),
|
wtforms.validators.Length(min=6, max=30),
|
||||||
wtforms.validators.EqualTo(
|
wtforms.validators.EqualTo(
|
||||||
'confirm_password',
|
'confirm_password',
|
||||||
_('Passwords must match.'))],
|
_('Passwords must match.'))])
|
||||||
description=_(
|
|
||||||
u"Try to use a strong password!"))
|
|
||||||
confirm_password = wtforms.PasswordField(
|
confirm_password = wtforms.PasswordField(
|
||||||
_('Confirm password'),
|
_('Confirm password'),
|
||||||
[wtforms.validators.Required()],
|
[wtforms.validators.Required()],
|
||||||
@ -44,9 +41,7 @@ class RegistrationForm(wtforms.Form):
|
|||||||
email = wtforms.TextField(
|
email = wtforms.TextField(
|
||||||
_('Email address'),
|
_('Email address'),
|
||||||
[wtforms.validators.Required(),
|
[wtforms.validators.Required(),
|
||||||
wtforms.validators.Email()],
|
wtforms.validators.Email()])
|
||||||
description=_(
|
|
||||||
u"Your email will never be published."))
|
|
||||||
|
|
||||||
|
|
||||||
class LoginForm(wtforms.Form):
|
class LoginForm(wtforms.Form):
|
||||||
@ -57,3 +52,34 @@ class LoginForm(wtforms.Form):
|
|||||||
password = wtforms.PasswordField(
|
password = wtforms.PasswordField(
|
||||||
_('Password'),
|
_('Password'),
|
||||||
[wtforms.validators.Required()])
|
[wtforms.validators.Required()])
|
||||||
|
|
||||||
|
|
||||||
|
class ForgotPassForm(wtforms.Form):
|
||||||
|
username = wtforms.TextField(
|
||||||
|
'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)):
|
||||||
|
raise wtforms.ValidationError(u'Incorrect input')
|
||||||
|
|
||||||
|
|
||||||
|
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()])
|
||||||
|
userid = wtforms.HiddenField(
|
||||||
|
'',
|
||||||
|
[wtforms.validators.Required()])
|
||||||
|
token = wtforms.HiddenField(
|
||||||
|
'',
|
||||||
|
[wtforms.validators.Required()])
|
||||||
|
|
||||||
|
@ -47,7 +47,7 @@ def bcrypt_check_password(raw_pass, stored_hash, extra_salt=None):
|
|||||||
# number (thx to zooko on this advice, which I hopefully
|
# number (thx to zooko on this advice, which I hopefully
|
||||||
# incorporated right.)
|
# incorporated right.)
|
||||||
#
|
#
|
||||||
# See also:
|
# See also:
|
||||||
rand_salt = bcrypt.gensalt(5)
|
rand_salt = bcrypt.gensalt(5)
|
||||||
randplus_stored_hash = bcrypt.hashpw(stored_hash, rand_salt)
|
randplus_stored_hash = bcrypt.hashpw(stored_hash, rand_salt)
|
||||||
randplus_hashed_pass = bcrypt.hashpw(hashed_pass, rand_salt)
|
randplus_hashed_pass = bcrypt.hashpw(hashed_pass, rand_salt)
|
||||||
@ -99,7 +99,7 @@ def send_verification_email(user, request):
|
|||||||
|
|
||||||
Args:
|
Args:
|
||||||
- user: a user object
|
- user: a user object
|
||||||
- request: the request
|
- request: the request
|
||||||
"""
|
"""
|
||||||
rendered_email = render_template(
|
rendered_email = render_template(
|
||||||
request, 'mediagoblin/auth/verification_email.txt',
|
request, 'mediagoblin/auth/verification_email.txt',
|
||||||
@ -116,8 +116,38 @@ def send_verification_email(user, request):
|
|||||||
[user['email']],
|
[user['email']],
|
||||||
# TODO
|
# TODO
|
||||||
# Due to the distributed nature of GNU MediaGoblin, we should
|
# Due to the distributed nature of GNU MediaGoblin, we should
|
||||||
# find a way to send some additional information about the
|
# find a way to send some additional information about the
|
||||||
# specific GNU MediaGoblin instance in the subject line. For
|
# specific GNU MediaGoblin instance in the subject line. For
|
||||||
# example "GNU MediaGoblin @ Wandborg - [...]".
|
# example "GNU MediaGoblin @ Wandborg - [...]".
|
||||||
'GNU MediaGoblin - Verify your email!',
|
'GNU MediaGoblin - Verify your email!',
|
||||||
rendered_email)
|
rendered_email)
|
||||||
|
|
||||||
|
|
||||||
|
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.
|
||||||
|
|
||||||
|
Args:
|
||||||
|
- user: a user object
|
||||||
|
- request: the request
|
||||||
|
"""
|
||||||
|
rendered_email = render_template(
|
||||||
|
request, 'mediagoblin/auth/fp_verification_email.txt',
|
||||||
|
{'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'])})
|
||||||
|
|
||||||
|
# TODO: There is no error handling in place
|
||||||
|
send_email(
|
||||||
|
mg_globals.app_config['email_sender_address'],
|
||||||
|
[user['email']],
|
||||||
|
'GNU MediaGoblin - Change forgotten password!',
|
||||||
|
rendered_email)
|
||||||
|
|
||||||
|
@ -30,4 +30,16 @@ auth_routes = [
|
|||||||
Route('mediagoblin.auth.resend_verification_success',
|
Route('mediagoblin.auth.resend_verification_success',
|
||||||
'/resend_verification_success/',
|
'/resend_verification_success/',
|
||||||
template='mediagoblin/auth/resent_verification_email.html',
|
template='mediagoblin/auth/resent_verification_email.html',
|
||||||
|
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')]
|
controller='mediagoblin.views:simple_template_render')]
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import uuid
|
import uuid
|
||||||
|
import datetime
|
||||||
|
|
||||||
from webob import exc
|
from webob import exc
|
||||||
|
|
||||||
@ -22,10 +23,11 @@ from mediagoblin import messages
|
|||||||
from mediagoblin import mg_globals
|
from mediagoblin import mg_globals
|
||||||
from mediagoblin.util import render_to_response, redirect, render_404
|
from mediagoblin.util import render_to_response, redirect, render_404
|
||||||
from mediagoblin.util import pass_to_ugettext as _
|
from mediagoblin.util import pass_to_ugettext as _
|
||||||
from mediagoblin.db.util import ObjectId
|
from mediagoblin.db.util import ObjectId, InvalidId
|
||||||
from mediagoblin.auth import lib as auth_lib
|
from mediagoblin.auth import lib as auth_lib
|
||||||
from mediagoblin.auth import forms as auth_forms
|
from mediagoblin.auth import forms as auth_forms
|
||||||
from mediagoblin.auth.lib import send_verification_email
|
from mediagoblin.auth.lib import send_verification_email, \
|
||||||
|
send_fp_verification_email
|
||||||
|
|
||||||
|
|
||||||
def register(request):
|
def register(request):
|
||||||
@ -151,9 +153,12 @@ def verify_email(request):
|
|||||||
{'_id': ObjectId(unicode(request.GET['userid']))})
|
{'_id': ObjectId(unicode(request.GET['userid']))})
|
||||||
|
|
||||||
if user and user['verification_key'] == unicode(request.GET['token']):
|
if user and user['verification_key'] == unicode(request.GET['token']):
|
||||||
user['status'] = u'active'
|
user[u'status'] = u'active'
|
||||||
user['email_verified'] = True
|
user[u'email_verified'] = True
|
||||||
|
user[u'verification_key'] = None
|
||||||
|
|
||||||
user.save()
|
user.save()
|
||||||
|
|
||||||
messages.add_message(
|
messages.add_message(
|
||||||
request,
|
request,
|
||||||
messages.SUCCESS,
|
messages.SUCCESS,
|
||||||
@ -176,7 +181,7 @@ def resend_activation(request):
|
|||||||
|
|
||||||
Resend the activation email.
|
Resend the activation email.
|
||||||
"""
|
"""
|
||||||
request.user['verification_key'] = unicode(uuid.uuid4())
|
request.user[u'verification_key'] = unicode(uuid.uuid4())
|
||||||
request.user.save()
|
request.user.save()
|
||||||
|
|
||||||
send_verification_email(request.user, request)
|
send_verification_email(request.user, request)
|
||||||
@ -188,3 +193,121 @@ def resend_activation(request):
|
|||||||
return redirect(
|
return redirect(
|
||||||
request, 'mediagoblin.user_pages.user_home',
|
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
|
||||||
|
"""
|
||||||
|
fp_form = auth_forms.ForgotPassForm(request.POST)
|
||||||
|
|
||||||
|
if request.method == 'POST' and fp_form.validate():
|
||||||
|
# '$or' not available till mongodb 1.5.3
|
||||||
|
user = request.db.User.find_one(
|
||||||
|
{'username': request.POST['username']})
|
||||||
|
if not user:
|
||||||
|
user = request.db.User.find_one(
|
||||||
|
{'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() + \
|
||||||
|
datetime.timedelta(days=10)
|
||||||
|
user.save()
|
||||||
|
|
||||||
|
send_fp_verification_email(user, request)
|
||||||
|
else:
|
||||||
|
# special case... we can't send the email because the
|
||||||
|
# username is inactive / hasn't verified their email
|
||||||
|
messages.add_message(
|
||||||
|
request,
|
||||||
|
messages.WARNING,
|
||||||
|
_("Could not send password recovery email as "
|
||||||
|
"your username is inactive or your account's "
|
||||||
|
"email address has not been verified."))
|
||||||
|
|
||||||
|
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')
|
||||||
|
|
||||||
|
return render_to_response(
|
||||||
|
request,
|
||||||
|
'mediagoblin/auth/forgot_password.html',
|
||||||
|
{'fp_form': fp_form})
|
||||||
|
|
||||||
|
|
||||||
|
def verify_forgot_password(request):
|
||||||
|
"""
|
||||||
|
Check the forgot-password verification and possibly let the user
|
||||||
|
change their password because of it.
|
||||||
|
"""
|
||||||
|
# get form data variables, and specifically check for presence of token
|
||||||
|
formdata = _process_for_token(request)
|
||||||
|
if not formdata['has_userid_and_token']:
|
||||||
|
return render_404(request)
|
||||||
|
|
||||||
|
formdata_token = formdata['vars']['token']
|
||||||
|
formdata_userid = formdata['vars']['userid']
|
||||||
|
formdata_vars = formdata['vars']
|
||||||
|
|
||||||
|
# check if it's a valid Id
|
||||||
|
try:
|
||||||
|
user = request.db.User.find_one(
|
||||||
|
{'_id': ObjectId(unicode(formdata_userid))})
|
||||||
|
except InvalidId:
|
||||||
|
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')):
|
||||||
|
|
||||||
|
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(
|
||||||
|
request.POST['password'])
|
||||||
|
user[u'fp_verification_key'] = None
|
||||||
|
user[u'fp_token_expire'] = None
|
||||||
|
user.save()
|
||||||
|
|
||||||
|
return redirect(request, 'mediagoblin.auth.fp_changed_success')
|
||||||
|
else:
|
||||||
|
return render_to_response(
|
||||||
|
request,
|
||||||
|
'mediagoblin/auth/change_fp.html',
|
||||||
|
{'cp_form': cp_form})
|
||||||
|
|
||||||
|
# in case there is a valid id but no user whit that id in the db
|
||||||
|
# or the token expired
|
||||||
|
else:
|
||||||
|
return render_404(request)
|
||||||
|
|
||||||
|
|
||||||
|
def _process_for_token(request):
|
||||||
|
"""
|
||||||
|
Checks for tokens in formdata without prior knowledge of request method
|
||||||
|
|
||||||
|
For now, returns whether the userid and token formdata variables exist, and
|
||||||
|
the formdata variables in a hash. Perhaps an object is warranted?
|
||||||
|
"""
|
||||||
|
# retrieve the formdata variables
|
||||||
|
if request.method == 'GET':
|
||||||
|
formdata_vars = request.GET
|
||||||
|
else:
|
||||||
|
formdata_vars = request.POST
|
||||||
|
|
||||||
|
formdata = {
|
||||||
|
'vars': formdata_vars,
|
||||||
|
'has_userid_and_token':
|
||||||
|
formdata_vars.has_key('userid') and formdata_vars.has_key('token')}
|
||||||
|
|
||||||
|
return formdata
|
||||||
|
@ -46,13 +46,21 @@ secret_key = string(default="Something Super Duper Secrit!")
|
|||||||
csrf_cookie_name = string(default='mediagoblin_nonce')
|
csrf_cookie_name = string(default='mediagoblin_nonce')
|
||||||
|
|
||||||
[storage:publicstore]
|
[storage:publicstore]
|
||||||
|
storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage")
|
||||||
base_dir = string(default="%(here)s/user_dev/media/public")
|
base_dir = string(default="%(here)s/user_dev/media/public")
|
||||||
base_url = string(default="/mgoblin_media/")
|
base_url = string(default="/mgoblin_media/")
|
||||||
|
|
||||||
[storage:queuestore]
|
[storage:queuestore]
|
||||||
|
storage_class = string(default="mediagoblin.storage.filestorage:BasicFileStorage")
|
||||||
base_dir = string(default="%(here)s/user_dev/media/queue")
|
base_dir = string(default="%(here)s/user_dev/media/queue")
|
||||||
|
|
||||||
|
|
||||||
|
[beaker.cache]
|
||||||
|
type = string(default="file")
|
||||||
|
data_dir = string(default="%(here)s/user_dev/beaker/cache/data")
|
||||||
|
lock_dir = string(default="%(here)s/user_dev/beaker/cache/lock")
|
||||||
|
|
||||||
|
|
||||||
[celery]
|
[celery]
|
||||||
# known booleans
|
# known booleans
|
||||||
celery_result_persistent = boolean()
|
celery_result_persistent = boolean()
|
||||||
|
@ -92,3 +92,18 @@ def mediaentry_add_fail_error_and_metadata(database):
|
|||||||
{'fail_metadata': {'$exists': False}},
|
{'fail_metadata': {'$exists': False}},
|
||||||
{'$set': {'fail_metadata': {}}},
|
{'$set': {'fail_metadata': {}}},
|
||||||
multi=True)
|
multi=True)
|
||||||
|
|
||||||
|
|
||||||
|
@RegisterMigration(6)
|
||||||
|
def user_add_forgot_password_token_and_expires(database):
|
||||||
|
"""
|
||||||
|
Add token and expiration fields to help recover forgotten passwords
|
||||||
|
"""
|
||||||
|
database['users'].update(
|
||||||
|
{'fp_verification_key': {'$exists': False}},
|
||||||
|
{'$set': {'fp_verification_key': None}},
|
||||||
|
multi=True)
|
||||||
|
database['users'].update(
|
||||||
|
{'fp_token_expire': {'$exists': False}},
|
||||||
|
{'$set': {'fp_token_expire': None}},
|
||||||
|
multi=True)
|
||||||
|
@ -78,6 +78,8 @@ class User(Document):
|
|||||||
'url' : unicode,
|
'url' : unicode,
|
||||||
'bio' : unicode, # May contain markdown
|
'bio' : unicode, # May contain markdown
|
||||||
'bio_html': unicode, # May contain plaintext, or HTML
|
'bio_html': unicode, # May contain plaintext, or HTML
|
||||||
|
'fp_verification_key': unicode, # forgotten password verification key
|
||||||
|
'fp_token_expire': datetime.datetime
|
||||||
}
|
}
|
||||||
|
|
||||||
required_fields = ['username', 'created', 'pw_hash', 'email']
|
required_fields = ['username', 'created', 'pw_hash', 'email']
|
||||||
|
@ -25,13 +25,17 @@ class EditForm(wtforms.Form):
|
|||||||
title = wtforms.TextField(
|
title = wtforms.TextField(
|
||||||
_('Title'),
|
_('Title'),
|
||||||
[wtforms.validators.Length(min=0, max=500)])
|
[wtforms.validators.Length(min=0, max=500)])
|
||||||
slug = wtforms.TextField(
|
|
||||||
_('Slug'),
|
|
||||||
[wtforms.validators.Required(message=_("The slug can't be empty"))])
|
|
||||||
description = wtforms.TextAreaField('Description of this work')
|
description = wtforms.TextAreaField('Description of this work')
|
||||||
tags = wtforms.TextField(
|
tags = wtforms.TextField(
|
||||||
_('Tags'),
|
_('Tags'),
|
||||||
[tag_length_validator])
|
[tag_length_validator])
|
||||||
|
slug = wtforms.TextField(
|
||||||
|
_('Slug'),
|
||||||
|
[wtforms.validators.Required(message=_("The slug can't be empty"))],
|
||||||
|
description=_(
|
||||||
|
"The title part of this media's URL. "
|
||||||
|
"You usually don't need to change this."))
|
||||||
|
|
||||||
|
|
||||||
class EditProfileForm(wtforms.Form):
|
class EditProfileForm(wtforms.Form):
|
||||||
bio = wtforms.TextAreaField(
|
bio = wtforms.TextAreaField(
|
||||||
@ -42,6 +46,7 @@ class EditProfileForm(wtforms.Form):
|
|||||||
[wtforms.validators.Optional(),
|
[wtforms.validators.Optional(),
|
||||||
wtforms.validators.URL(message='Improperly formed URL')])
|
wtforms.validators.URL(message='Improperly formed URL')])
|
||||||
|
|
||||||
|
|
||||||
class EditAttachmentsForm(wtforms.Form):
|
class EditAttachmentsForm(wtforms.Form):
|
||||||
attachment_name = wtforms.TextField(
|
attachment_name = wtforms.TextField(
|
||||||
'Title')
|
'Title')
|
||||||
|
@ -46,9 +46,6 @@ def edit_media(request, media):
|
|||||||
description=media['description'],
|
description=media['description'],
|
||||||
tags=media_tags_as_string(media['tags']))
|
tags=media_tags_as_string(media['tags']))
|
||||||
|
|
||||||
if len(media['attachment_files']):
|
|
||||||
defaults['attachment_name'] = media['attachment_files'][0]['name']
|
|
||||||
|
|
||||||
form = forms.EditForm(
|
form = forms.EditForm(
|
||||||
request.POST,
|
request.POST,
|
||||||
**defaults)
|
**defaults)
|
||||||
@ -73,19 +70,11 @@ def edit_media(request, media):
|
|||||||
media['description_html'] = cleaned_markdown_conversion(
|
media['description_html'] = cleaned_markdown_conversion(
|
||||||
media['description'])
|
media['description'])
|
||||||
|
|
||||||
if 'attachment_name' in request.POST:
|
|
||||||
media['attachment_files'][0]['name'] = \
|
|
||||||
request.POST['attachment_name']
|
|
||||||
|
|
||||||
if 'attachment_delete' in request.POST \
|
|
||||||
and 'y' == request.POST['attachment_delete']:
|
|
||||||
del media['attachment_files'][0]
|
|
||||||
|
|
||||||
media['slug'] = unicode(request.POST['slug'])
|
media['slug'] = unicode(request.POST['slug'])
|
||||||
media.save()
|
media.save()
|
||||||
|
|
||||||
return redirect(request, "mediagoblin.user_pages.media_home",
|
return exc.HTTPFound(
|
||||||
user=media.uploader()['username'], media=media['slug'])
|
location=media.url_for_self(request.urlgen))
|
||||||
|
|
||||||
if request.user['is_admin'] \
|
if request.user['is_admin'] \
|
||||||
and media['uploader'] != request.user['_id'] \
|
and media['uploader'] != request.user['_id'] \
|
||||||
@ -141,9 +130,8 @@ def edit_attachments(request, media):
|
|||||||
% (request.POST['attachment_name']
|
% (request.POST['attachment_name']
|
||||||
or request.POST['attachment_file'].filename))
|
or request.POST['attachment_file'].filename))
|
||||||
|
|
||||||
return redirect(request, 'mediagoblin.user_pages.media_home',
|
return exc.HTTPFound(
|
||||||
user=media.uploader()['username'],
|
location=media.url_for_self(request.urlgen))
|
||||||
media=media['slug'])
|
|
||||||
return render_to_response(
|
return render_to_response(
|
||||||
request,
|
request,
|
||||||
'mediagoblin/edit/attachments.html',
|
'mediagoblin/edit/attachments.html',
|
||||||
|
@ -17,7 +17,7 @@
|
|||||||
from mediagoblin import mg_globals
|
from mediagoblin import mg_globals
|
||||||
from mediagoblin.db.open import setup_connection_and_db_from_config
|
from mediagoblin.db.open import setup_connection_and_db_from_config
|
||||||
from mediagoblin.init.config import read_mediagoblin_config
|
from mediagoblin.init.config import read_mediagoblin_config
|
||||||
from mediagoblin.storage import BasicFileStorage
|
from mediagoblin.storage.filestorage import BasicFileStorage
|
||||||
from mediagoblin.init import setup_storage, setup_global_and_app_config
|
from mediagoblin.init import setup_storage, setup_global_and_app_config
|
||||||
|
|
||||||
import shutil
|
import shutil
|
||||||
@ -27,8 +27,13 @@ import subprocess
|
|||||||
import os.path
|
import os.path
|
||||||
import os
|
import os
|
||||||
import sys
|
import sys
|
||||||
|
import logging
|
||||||
from contextlib import closing
|
from contextlib import closing
|
||||||
|
|
||||||
|
_log = logging.getLogger('gmg.import_export')
|
||||||
|
logging.basicConfig()
|
||||||
|
_log.setLevel(logging.INFO)
|
||||||
|
|
||||||
|
|
||||||
def import_export_parse_setup(subparser):
|
def import_export_parse_setup(subparser):
|
||||||
# TODO: Add default
|
# TODO: Add default
|
||||||
@ -49,12 +54,12 @@ def import_export_parse_setup(subparser):
|
|||||||
|
|
||||||
|
|
||||||
def _import_media(db, args):
|
def _import_media(db, args):
|
||||||
"""
|
'''
|
||||||
Import media files
|
Import media files
|
||||||
|
|
||||||
Must be called after _import_database()
|
Must be called after _import_database()
|
||||||
"""
|
'''
|
||||||
print "\n== Importing media ==\n"
|
_log.info('-> Importing media...')
|
||||||
|
|
||||||
media_cache = BasicFileStorage(
|
media_cache = BasicFileStorage(
|
||||||
args._cache_path['media'])
|
args._cache_path['media'])
|
||||||
@ -65,18 +70,22 @@ def _import_media(db, args):
|
|||||||
|
|
||||||
for entry in db.media_entries.find():
|
for entry in db.media_entries.find():
|
||||||
for name, path in entry['media_files'].items():
|
for name, path in entry['media_files'].items():
|
||||||
|
_log.info('Importing: {0} - {1}'.format(
|
||||||
|
entry['title'],
|
||||||
|
name))
|
||||||
|
|
||||||
media_file = mg_globals.public_store.get_file(path, mode='wb')
|
media_file = mg_globals.public_store.get_file(path, mode='wb')
|
||||||
media_file.write(
|
media_file.write(
|
||||||
media_cache.get_file(path, mode='rb').read())
|
media_cache.get_file(path, mode='rb').read())
|
||||||
|
|
||||||
print "\n== Media imported ==\n"
|
_log.info('...Media imported')
|
||||||
|
|
||||||
|
|
||||||
def _import_database(db, args):
|
def _import_database(db, args):
|
||||||
"""
|
'''
|
||||||
Restore mongo database from ___.bson files
|
Restore mongo database from ___.bson files
|
||||||
"""
|
'''
|
||||||
print "\n== Importing database ==\n"
|
_log.info('-> Importing database...')
|
||||||
|
|
||||||
p = subprocess.Popen([
|
p = subprocess.Popen([
|
||||||
args.mongorestore_path,
|
args.mongorestore_path,
|
||||||
@ -85,13 +94,13 @@ def _import_database(db, args):
|
|||||||
|
|
||||||
p.wait()
|
p.wait()
|
||||||
|
|
||||||
print "\n== Database imported ==\n"
|
_log.info('...Database imported')
|
||||||
|
|
||||||
|
|
||||||
def env_import(args):
|
def env_import(args):
|
||||||
"""
|
'''
|
||||||
Restore mongo database and media files from a tar archive
|
Restore mongo database and media files from a tar archive
|
||||||
"""
|
'''
|
||||||
if not args.cache_path:
|
if not args.cache_path:
|
||||||
args.cache_path = tempfile.mkdtemp()
|
args.cache_path = tempfile.mkdtemp()
|
||||||
|
|
||||||
@ -100,9 +109,9 @@ def env_import(args):
|
|||||||
# Creates mg_globals.public_store and mg_globals.queue_store
|
# Creates mg_globals.public_store and mg_globals.queue_store
|
||||||
setup_storage()
|
setup_storage()
|
||||||
|
|
||||||
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(
|
connection, db = setup_connection_and_db_from_config(
|
||||||
config['mediagoblin'], use_pymongo=True)
|
app_config, use_pymongo=True)
|
||||||
|
|
||||||
tf = tarfile.open(
|
tf = tarfile.open(
|
||||||
args.tar_file,
|
args.tar_file,
|
||||||
@ -123,9 +132,9 @@ def env_import(args):
|
|||||||
|
|
||||||
|
|
||||||
def _setup_paths(args):
|
def _setup_paths(args):
|
||||||
"""
|
'''
|
||||||
Populate ``args`` variable with cache subpaths
|
Populate ``args`` variable with cache subpaths
|
||||||
"""
|
'''
|
||||||
args._cache_path = dict()
|
args._cache_path = dict()
|
||||||
PATH_MAP = {
|
PATH_MAP = {
|
||||||
'media': 'media',
|
'media': 'media',
|
||||||
@ -139,10 +148,10 @@ def _setup_paths(args):
|
|||||||
|
|
||||||
|
|
||||||
def _create_archive(args):
|
def _create_archive(args):
|
||||||
"""
|
'''
|
||||||
Create the tar archive
|
Create the tar archive
|
||||||
"""
|
'''
|
||||||
print "\n== Compressing to archive ==\n"
|
_log.info('-> Compressing to archive')
|
||||||
|
|
||||||
tf = tarfile.open(
|
tf = tarfile.open(
|
||||||
args.tar_file,
|
args.tar_file,
|
||||||
@ -151,27 +160,27 @@ def _create_archive(args):
|
|||||||
with closing(tf):
|
with closing(tf):
|
||||||
tf.add(args.cache_path, 'mediagoblin-data/')
|
tf.add(args.cache_path, 'mediagoblin-data/')
|
||||||
|
|
||||||
print "\n== Archiving done ==\n"
|
_log.info('...Archiving done')
|
||||||
|
|
||||||
|
|
||||||
def _clean(args):
|
def _clean(args):
|
||||||
"""
|
'''
|
||||||
Remove cache directory
|
Remove cache directory
|
||||||
"""
|
'''
|
||||||
shutil.rmtree(args.cache_path)
|
shutil.rmtree(args.cache_path)
|
||||||
|
|
||||||
|
|
||||||
def _export_check(args):
|
def _export_check(args):
|
||||||
"""
|
'''
|
||||||
Run security checks for export command
|
Run security checks for export command
|
||||||
"""
|
'''
|
||||||
if os.path.exists(args.tar_file):
|
if os.path.exists(args.tar_file):
|
||||||
overwrite = raw_input(
|
overwrite = raw_input(
|
||||||
'The output file already exists. '
|
'The output file already exists. '
|
||||||
'Are you **SURE** you want to overwrite it? '
|
'Are you **SURE** you want to overwrite it? '
|
||||||
'(yes/no)> ')
|
'(yes/no)> ')
|
||||||
if not overwrite == 'yes':
|
if not overwrite == 'yes':
|
||||||
print "Aborting."
|
print 'Aborting.'
|
||||||
|
|
||||||
return False
|
return False
|
||||||
|
|
||||||
@ -179,12 +188,7 @@ def _export_check(args):
|
|||||||
|
|
||||||
|
|
||||||
def _export_database(db, args):
|
def _export_database(db, args):
|
||||||
print "\n== Exporting database ==\n"
|
_log.info('-> Exporting database...')
|
||||||
|
|
||||||
command = '{mongodump_path} -d {database} -o {mongodump_cache}'.format(
|
|
||||||
mongodump_path=args.mongodump_path,
|
|
||||||
database=db.name,
|
|
||||||
mongodump_cache=args._cache_path['database'])
|
|
||||||
|
|
||||||
p = subprocess.Popen([
|
p = subprocess.Popen([
|
||||||
args.mongodump_path,
|
args.mongodump_path,
|
||||||
@ -193,11 +197,11 @@ def _export_database(db, args):
|
|||||||
|
|
||||||
p.wait()
|
p.wait()
|
||||||
|
|
||||||
print "\n== Database exported ==\n"
|
_log.info('...Database exported')
|
||||||
|
|
||||||
|
|
||||||
def _export_media(db, args):
|
def _export_media(db, args):
|
||||||
print "\n== Exporting media ==\n"
|
_log.info('-> Exporting media...')
|
||||||
|
|
||||||
media_cache = BasicFileStorage(
|
media_cache = BasicFileStorage(
|
||||||
args._cache_path['media'])
|
args._cache_path['media'])
|
||||||
@ -208,21 +212,25 @@ def _export_media(db, args):
|
|||||||
|
|
||||||
for entry in db.media_entries.find():
|
for entry in db.media_entries.find():
|
||||||
for name, path in entry['media_files'].items():
|
for name, path in entry['media_files'].items():
|
||||||
|
_log.info('Exporting {0} - {1}'.format(
|
||||||
|
entry['title'],
|
||||||
|
name))
|
||||||
|
|
||||||
mc_file = media_cache.get_file(path, mode='wb')
|
mc_file = media_cache.get_file(path, mode='wb')
|
||||||
mc_file.write(
|
mc_file.write(
|
||||||
mg_globals.public_store.get_file(path, mode='rb').read())
|
mg_globals.public_store.get_file(path, mode='rb').read())
|
||||||
|
|
||||||
print "\n== Media exported ==\n"
|
_log.info('...Media exported')
|
||||||
|
|
||||||
|
|
||||||
def env_export(args):
|
def env_export(args):
|
||||||
"""
|
'''
|
||||||
Export database and media files to a tar archive
|
Export database and media files to a tar archive
|
||||||
"""
|
'''
|
||||||
if args.cache_path:
|
if args.cache_path:
|
||||||
if os.path.exists(args.cache_path):
|
if os.path.exists(args.cache_path):
|
||||||
print 'The cache directory must not exist before you run this script'
|
_log.error('The cache directory must not exist before you run this script')
|
||||||
print 'Cache directory: ', args.cache_path
|
_log.error('Cache directory: {0}'.format(args.cache_path))
|
||||||
|
|
||||||
return False
|
return False
|
||||||
else:
|
else:
|
||||||
@ -231,15 +239,15 @@ def env_export(args):
|
|||||||
args = _setup_paths(args)
|
args = _setup_paths(args)
|
||||||
|
|
||||||
if not _export_check(args):
|
if not _export_check(args):
|
||||||
print "\n== Checks did not pass, exiting ==\n"
|
_log.error('Checks did not pass, exiting')
|
||||||
sys.exit(0)
|
sys.exit(0)
|
||||||
|
|
||||||
setup_global_and_app_config(args.conf_file)
|
globa_config, app_config = setup_global_and_app_config(args.conf_file)
|
||||||
setup_storage()
|
|
||||||
|
|
||||||
config, validation_result = read_mediagoblin_config(args.conf_file)
|
setup_storage()
|
||||||
|
|
||||||
connection, db = setup_connection_and_db_from_config(
|
connection, db = setup_connection_and_db_from_config(
|
||||||
config['mediagoblin'], use_pymongo=True)
|
app_config, use_pymongo=True)
|
||||||
|
|
||||||
_export_database(db, args)
|
_export_database(db, args)
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,15 +2,16 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# Majid Al-Dharrab <majid@aldharrab.com>, 2011.
|
# Majid Al-Dharrab <majid@aldharrab.com>, 2011.
|
||||||
# <osamak@gnu.org>, 2011.
|
|
||||||
# <Omar.w.kh@gmail.com>, 2011.
|
# <Omar.w.kh@gmail.com>, 2011.
|
||||||
|
# <osamak@gnu.org>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -20,103 +21,102 @@ msgstr ""
|
|||||||
"Language: ar\n"
|
"Language: ar\n"
|
||||||
"Plural-Forms: nplurals=6; plural=n==0 ? 0 : n==1 ? 1 : n==2 ? 2 : n%100>=3 && n%100<=10 ? 3 : n%100>=11 && n%100<=99 ? 4 : 5\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:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "اسم المستخدم"
|
msgstr "اسم المستخدم"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "كلمة المرور"
|
msgstr "كلمة السر"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "يجب أن تتطابق كلمتا المرور."
|
msgstr "يجب أن تتطابق كلمتا السر."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "تأكيد كلمة المرور"
|
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:42
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "عنوان البريد الإلكتروني"
|
msgstr "عنوان البريد الإلكتروني"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "عفوًا، التسجيل غير متاح هنا."
|
msgstr "عفوًا، التسجيل غير متاح هنا."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "عذرا، مستخدم بهذا الاسم موجود فعلا."
|
msgstr "عذرًا، لقد اختار مستخدم آخر هذا الاسم."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "عفوًا، هذا العنوان البريدي مستخدم."
|
msgstr "عفوًا، هذا العنوان البريدي مستخدم."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"تم التحقق من بريدك الإلكتروني. يمكنك الآن الولوج، تحرير ملفك، وإرسال الصور!"
|
"تم التحقق من بريدك الإلكتروني. يمكنك الآن الولوج، وتحرير ملفك الشخصي، ونشر "
|
||||||
|
"الصور!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "مفتاح التحقق أو معرف المستخدم خاطئ"
|
msgstr "مفتاح التحقق أو معرف المستخدم خاطئ"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "أعيد إرسال رسالة التحقق."
|
msgstr "أعدنا إرسال رسالة التحقق."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "العنوان"
|
msgstr "العنوان"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "الوسوم"
|
msgstr "الوسوم"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "السيرة"
|
msgstr "السيرة"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "الموقع الإلكتروني"
|
msgstr "الموقع الإلكتروني"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -126,11 +126,15 @@ msgstr ""
|
|||||||
|
|
||||||
#: mediagoblin/submit/forms.py:25
|
#: mediagoblin/submit/forms.py:25
|
||||||
msgid "File"
|
msgid "File"
|
||||||
|
msgstr "الملف"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr ""
|
msgstr "يجب أن تضع ملفًا."
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:50
|
#: mediagoblin/submit/views.py:50
|
||||||
msgid "The file doesn't seem to be an image!"
|
msgid "The file doesn't seem to be an image!"
|
||||||
@ -138,7 +142,7 @@ msgstr "لا يبدو أن هذا الملف صورة!"
|
|||||||
|
|
||||||
#: mediagoblin/submit/views.py:122
|
#: mediagoblin/submit/views.py:122
|
||||||
msgid "Woohoo! Submitted!"
|
msgid "Woohoo! Submitted!"
|
||||||
msgstr ""
|
msgstr "يا سلام! نُشرَت!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||||
msgid "Oops!"
|
msgid "Oops!"
|
||||||
@ -146,13 +150,14 @@ msgstr ""
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:24
|
#: mediagoblin/templates/mediagoblin/404.html:24
|
||||||
msgid "There doesn't seem to be a page at this address. Sorry!"
|
msgid "There doesn't seem to be a page at this address. Sorry!"
|
||||||
msgstr ""
|
msgstr "يبدو أنه لا توجد صفحة في العنوان. عذرًا!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:26
|
#: mediagoblin/templates/mediagoblin/404.html:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you're sure the address is correct, maybe the page you're looking for has"
|
"If you're sure the address is correct, maybe the page you're looking for has"
|
||||||
" been moved or deleted."
|
" been moved or deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"إن كنت متأكدًا من صحة العنوان فربما تكون الصفحة التي تريدها نُقلت أو حُذفت."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||||
msgid "Image of 404 goblin stressing out"
|
msgid "Image of 404 goblin stressing out"
|
||||||
@ -172,13 +177,13 @@ msgstr "أرسل وسائط"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||||
msgid "verify your email!"
|
msgid "verify your email!"
|
||||||
msgstr "أكد بريدك"
|
msgstr "أكّد بريدك"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:26
|
#: mediagoblin/templates/mediagoblin/auth/login.html:26
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:34
|
#: mediagoblin/templates/mediagoblin/auth/login.html:34
|
||||||
msgid "Log in"
|
msgid "Log in"
|
||||||
msgstr "لُج"
|
msgstr "لِج"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:89
|
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -186,9 +191,13 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr "مرحبا بكم يا محبوا الوسائط! ميدياغوبلن هو..."
|
msgstr "مرحبًا بكم يا محبي الوسائط! ميدياغوبلن هو..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||||
msgid "The perfect place for your media!"
|
msgid "The perfect place for your media!"
|
||||||
@ -204,19 +213,20 @@ msgstr "مكان يجتمع فيه الناس ليتعاونوا ويعرضوا
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||||
"after all.)"
|
"after all.)"
|
||||||
msgstr ""
|
msgstr "مشروع حر، فنحن أحد مشاريع <a href=\"http://gnu.org\">غنو</a>."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||||
msgid ""
|
msgid ""
|
||||||
"Aiming to make the world a better place through decentralization and "
|
"Aiming to make the world a better place through decentralization and "
|
||||||
"(eventually, coming soon!) federation!"
|
"(eventually, coming soon!) federation!"
|
||||||
msgstr ""
|
msgstr "مشروع يحاول جعل عالمنا أفضل عن طريق اللامركزية (قريبًا!)."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||||
msgid ""
|
msgid ""
|
||||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||||
" including video support!)"
|
" including video support!)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"جاهز للتمدد. (سيُضاف دعم أنساق كثيرة من الوسائط قريبًا، كما سندعم الفيديو!)."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -225,21 +235,76 @@ msgid ""
|
|||||||
" software!</a>)"
|
" software!</a>)"
|
||||||
msgstr ""
|
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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "فشل الولوج!"
|
msgstr "فشل الولوج!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||||
msgid "Don't have an account yet?"
|
msgid "Don't have an account yet?"
|
||||||
msgstr "ألا تملك حسابا؟"
|
msgstr "ألا تملك حسابًا بعد؟"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "أنشئ حسابا هنا!"
|
msgstr "أنشئ حسابًا هنا!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "أنشئ حسابا!"
|
msgstr "أنشئ حسابًا!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
@ -255,36 +320,36 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"%(verification_url)s"
|
"%(verification_url)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"أهلا %(username)s،\n"
|
"أهلًا يا %(username)s،\n"
|
||||||
"\n"
|
"\n"
|
||||||
"لتفعيل حسابك في غنو ميدياغوبلن، افتح الرابط التالي\n"
|
"افتح الرابط التالي\n"
|
||||||
"في متصفحك:\n"
|
"في متصفحك لتفعيل حسابك في غنو ميدياغوبلن:\n"
|
||||||
"\n"
|
"\n"
|
||||||
"%(verification_url)s"
|
"%(verification_url)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:29
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:29
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Editing %(media_title)s"
|
msgid "Editing %(media_title)s"
|
||||||
msgstr "تعديل %(media_title)s"
|
msgstr "تحرير %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "ألغِ"
|
msgstr "ألغِ"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "احفظ التغييرات"
|
msgstr "احفظ التغييرات"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Editing %(username)s's profile"
|
msgid "Editing %(username)s's profile"
|
||||||
msgstr "تعديل ملف %(username)s"
|
msgstr "تحرير ملف %(username)s الشخصي"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||||
msgid "Media tagged with:"
|
msgid "Media tagged with:"
|
||||||
msgstr "الوسائط الموسومة بـ:"
|
msgstr "الوسائط الموسومة ب"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||||
msgid "Submit yer media"
|
msgid "Submit yer media"
|
||||||
@ -302,17 +367,15 @@ msgstr "وسائط <a href=\"%(user_url)s\">%(username)s</a>"
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||||
msgid "Sorry, no such user found."
|
msgid "Sorry, no such user found."
|
||||||
msgstr "عذرا، لا يوجد مستخدم مماثل"
|
msgstr "عذرًا، تعذر العثور على مستخدم بهذا الاسم."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -343,7 +406,7 @@ msgstr "يجب التحقق من البريد الإلكتروني"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||||
msgid "Almost done! Your account still needs to be activated."
|
msgid "Almost done! Your account still needs to be activated."
|
||||||
msgstr "انتهينا تقريبا! لا زال حسابك يحتاج إلى التفعيل."
|
msgstr "أوشكنا على الانتهاء! ما زال حسابك بحاجة إلى التفعيل."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -376,7 +439,7 @@ msgstr ""
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(username)s's profile"
|
msgid "%(username)s's profile"
|
||||||
msgstr "ملف %(username)s's"
|
msgstr "ملف %(username)s الشخصي"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||||
msgid "Here's a spot to tell others about yourself."
|
msgid "Here's a spot to tell others about yourself."
|
||||||
@ -385,7 +448,7 @@ msgstr "هذه زاوية لتخبر الآخرين فيها عن نفسك."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:90
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||||
msgid "Edit profile"
|
msgid "Edit profile"
|
||||||
msgstr "عدل الملف"
|
msgstr "حرِّر الملف الشخصي"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||||
msgid "This user hasn't filled in their profile (yet)."
|
msgid "This user hasn't filled in their profile (yet)."
|
||||||
@ -394,7 +457,7 @@ msgstr ""
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "View all of %(username)s's media"
|
msgid "View all of %(username)s's media"
|
||||||
msgstr "اعرض كل وسائط %(username)s"
|
msgstr "أظهِر كل وسائط %(username)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -408,7 +471,7 @@ msgstr "أضف وسائط"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||||
msgid "There doesn't seem to be any media here yet..."
|
msgid "There doesn't seem to be any media here yet..."
|
||||||
msgstr "لا يبدو أنه يوجد أي وسائط هنا حتى الآن..."
|
msgstr "لا يبدو أنه توجد أي وسائط هنا حتى الآن..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||||
msgid "feed icon"
|
msgid "feed icon"
|
||||||
@ -418,11 +481,23 @@ msgstr ""
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
msgid "Comment"
|
msgid "Newer"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
|
msgid "Comment"
|
||||||
|
msgstr "علِّق"
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,18 +2,20 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
# Rafael Maguiña <rafael.maguina@gmail.com>, 2011.
|
# Translators:
|
||||||
# <benjamin@lebsanft.org>, 2011.
|
# <benjamin@lebsanft.org>, 2011.
|
||||||
# <mediagoblin.org@samba-tng.org>, 2011.
|
|
||||||
# Elrond <elrond+mediagoblin.org@samba-tng.org>, 2011.
|
|
||||||
# <cwebber@dustycloud.org>, 2011.
|
# <cwebber@dustycloud.org>, 2011.
|
||||||
|
# Elrond <elrond+mediagoblin.org@samba-tng.org>, 2011.
|
||||||
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
|
# Jan-Christoph Borchardt <JanCBorchardt@fsfe.org>, 2011.
|
||||||
|
# <mediagoblin.org@samba-tng.org>, 2011.
|
||||||
|
# Rafael Maguiña <rafael.maguina@gmail.com>, 2011.
|
||||||
|
# Vinzenz Vietzke <vinz@fedoraproject.org>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: German (http://www.transifex.net/projects/p/mediagoblin/team/de/)\n"
|
"Language-Team: German (http://www.transifex.net/projects/p/mediagoblin/team/de/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -23,55 +25,43 @@ msgstr ""
|
|||||||
"Language: de\n"
|
"Language: de\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Benutzername"
|
msgstr "Benutzername"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Passwort"
|
msgstr "Passwort"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Passwörter müssen übereinstimmen."
|
msgstr "Passwörter müssen übereinstimmen."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Passwort wiederholen"
|
msgstr "Passwort wiederholen"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr "Hier nochmal eintragen, um Tippfehler zu verhindern."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Email-Adresse"
|
msgstr "Email-Adresse"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Registrierung ist auf dieser Instanz leider deaktiviert."
|
msgstr "Registrierung ist auf dieser Instanz leider deaktiviert."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Leider gibt es bereits einen Benutzer mit diesem Namen."
|
msgstr "Leider gibt es bereits einen Benutzer mit diesem Namen."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Tut und Leid, aber diese Email-Adresse wird bereits verwendet."
|
msgstr "Tut und Leid, aber diese Email-Adresse wird bereits verwendet."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -79,48 +69,60 @@ msgstr ""
|
|||||||
"Deine Email-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein "
|
"Deine Email-Adresse wurde bestätigt. Du kannst dich nun anmelden, Dein "
|
||||||
"Profil bearbeiten und Bilder hochladen!"
|
"Profil bearbeiten und Bilder hochladen!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "Der Bestätigungssschlüssel oder die Nutzernummer ist falsch."
|
msgstr "Der Bestätigungssschlüssel oder die Nutzernummer ist falsch."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Bestätigungs-Email wurde erneut versandt."
|
msgstr "Bestätigungs-Email wurde erneut versandt."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Kurztitel"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "Bitte gib einen Kurztitel ein"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Markierungen"
|
msgstr "Markierungen"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "Kurztitel"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "Bitte gib einen Kurztitel ein"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
"Der Titelteil der Medienadresse. Normalerweise muss hier nichts geändert "
|
||||||
|
"werden."
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Biographie"
|
msgstr "Biographie"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Webseite"
|
msgstr "Webseite"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "Diesen Kurztitel hast du bereits vergeben."
|
msgstr "Diesen Kurztitel hast du bereits vergeben."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "Du bearbeitest die Medien eines Anderen. Bitte sei vorsichtig."
|
msgstr "Du bearbeitest die Medien eines Anderen. Bitte sei vorsichtig."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Du bearbeitest das Profil eines Anderen. Bitte sei vorsichtig."
|
msgstr "Du bearbeitest das Profil eines Anderen. Bitte sei vorsichtig."
|
||||||
|
|
||||||
@ -132,6 +134,10 @@ msgstr "Die Datei stimmt nicht mit dem gewählten Medientyp überein."
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Datei"
|
msgstr "Datei"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr "Beschreibung des Werkes"
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Du musst eine Datei angeben."
|
msgstr "Du musst eine Datei angeben."
|
||||||
@ -191,6 +197,12 @@ msgid ""
|
|||||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Läuft mit <a href=\"http://mediagoblin.org/\">MediaGoblin</a>, einem <a "
|
||||||
|
"href=\"http://gnu.org/\">GNU</a>-Projekt"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
@ -242,6 +254,53 @@ msgstr ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">Du kannst uns dabei helfen, "
|
"href=\"http://mediagoblin.org/pages/join.html\">Du kannst uns dabei helfen, "
|
||||||
"die Software zu verbessern!</a>)"
|
"die Software zu verbessern!</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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "Anmeldevorgang fehlgeschlagen!"
|
msgstr "Anmeldevorgang fehlgeschlagen!"
|
||||||
@ -254,13 +313,21 @@ msgstr "Hast du noch kein Konto?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Registriere dich!"
|
msgstr "Registriere dich!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Neues Konto registrieren!"
|
msgstr "Neues Konto registrieren!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr "Erstellen"
|
msgstr "Registrieren"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/verification_email.txt:19
|
#: mediagoblin/templates/mediagoblin/auth/verification_email.txt:19
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -284,12 +351,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "%(media_title)s bearbeiten"
|
msgstr "%(media_title)s bearbeiten"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Abbrechen"
|
msgstr "Abbrechen"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Änderungen speichern"
|
msgstr "Änderungen speichern"
|
||||||
|
|
||||||
@ -323,13 +390,11 @@ msgstr "Dieser Benutzer wurde leider nicht gefunden."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "%(title)s wirklich löschen?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
msgstr "Dauerhaft löschen."
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
msgid "Media processing panel"
|
msgid "Media processing panel"
|
||||||
@ -403,7 +468,7 @@ msgstr "%(username)ss Profil"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||||
msgid "Here's a spot to tell others about yourself."
|
msgid "Here's a spot to tell others about yourself."
|
||||||
msgstr "Hier kannst du Anderen etwas über dich zu erzählen."
|
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:90
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||||
@ -441,12 +506,24 @@ msgstr "Feed-Symbol"
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "Atom-Feed"
|
msgstr "Atom-Feed"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr "Neuere"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr "Ältere"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Kommentar"
|
msgstr "Kommentar"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: 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:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr "Du versuchst Medien eines anderen Nutzers zu löschen. Sei vorsichtig."
|
||||||
|
|
||||||
|
|
||||||
|
@ -8,7 +8,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: PROJECT VERSION\n"
|
"Project-Id-Version: PROJECT VERSION\n"
|
||||||
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
"Report-Msgid-Bugs-To: EMAIL@ADDRESS\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n"
|
||||||
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
"Last-Translator: FULL NAME <EMAIL@ADDRESS>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
@ -17,102 +17,99 @@ msgstr ""
|
|||||||
"Content-Transfer-Encoding: 8bit\n"
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
"Generated-By: Babel 0.9.6\n"
|
"Generated-By: Babel 0.9.6\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your "
|
"Your email address has been verified. You may now login, edit your "
|
||||||
"profile, and submit images!"
|
"profile, and submit images!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or "
|
||||||
|
"your account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid "The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -124,6 +121,10 @@ msgstr ""
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -182,6 +183,10 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -221,6 +226,55 @@ msgid ""
|
|||||||
"this software!</a>)"
|
"this software!</a>)"
|
||||||
msgstr ""
|
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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -233,6 +287,14 @@ msgstr ""
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -258,12 +320,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -299,10 +361,8 @@ msgstr ""
|
|||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -404,11 +464,23 @@ msgstr ""
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,15 +2,16 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <deletesoftware@yandex.ru>, 2011.
|
# <deletesoftware@yandex.ru>, 2011.
|
||||||
# <john_w1954@fastmail.fm>, 2011.
|
|
||||||
# Fernando Inocencio <faigos@gmail.com>, 2011.
|
# Fernando Inocencio <faigos@gmail.com>, 2011.
|
||||||
|
# <john_w1954@fastmail.fm>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -20,55 +21,43 @@ msgstr ""
|
|||||||
"Language: eo\n"
|
"Language: eo\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Uzantnomo"
|
msgstr "Uzantnomo"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Pasvorto"
|
msgstr "Pasvorto"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Pasvortoj devas esti egalaj."
|
msgstr "Pasvortoj devas esti egalaj."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Retajpu pasvorton"
|
msgstr "Retajpu pasvorton"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr "Retajpu ĝin por certigi, ke ne okazis mistajpoj."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Retpoŝtadreso"
|
msgstr "Retpoŝtadreso"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Bedaŭrinde, registrado estas malaktivigita en tiu ĉi instalaĵo."
|
msgstr "Bedaŭrinde, registrado estas malaktivigita en tiu ĉi instalaĵo."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Bedaŭrinde, uzanto kun tiu nomo jam ekzistas."
|
msgstr "Bedaŭrinde, uzanto kun tiu nomo jam ekzistas."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Tiu retpoŝtadreso jam estas uzata."
|
msgstr "Tiu retpoŝtadreso jam estas uzata."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -76,59 +65,75 @@ msgstr ""
|
|||||||
"Via retpoŝtadreso estas konfirmita. Vi povas nun ensaluti, redakti vian "
|
"Via retpoŝtadreso estas konfirmita. Vi povas nun ensaluti, redakti vian "
|
||||||
"profilon, kaj alŝuti bildojn!"
|
"profilon, kaj alŝuti bildojn!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "La kontrol-kodo aŭ la uzantonomo ne estas korekta"
|
msgstr "La kontrol-kodo aŭ la uzantonomo ne estas korekta"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Resendi vian kontrol-mesaĝon."
|
msgstr "Resendi vian kontrol-mesaĝon."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titolo"
|
msgstr "Titolo"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "La distingiga adresparto"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "La distingiga adresparto ne povas esti malplena"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Etikedoj"
|
msgstr "Etikedoj"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "La distingiga adresparto"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "La distingiga adresparto ne povas esti malplena"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. 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:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Bio"
|
msgstr "Bio"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Retejo"
|
msgstr "Retejo"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "Ĉi tiu uzanto jam havas dosieron kun tiu distingiga adresparto."
|
msgstr "Ĉi tiu uzanto jam havas dosieron kun tiu distingiga adresparto."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "Vi priredaktas dosieron de alia uzanto. Agu singardeme."
|
msgstr "Vi priredaktas dosieron de alia uzanto. Agu singardeme."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Vi redaktas profilon de alia uzanto. Agu singardeme."
|
msgstr "Vi redaktas profilon de alia uzanto. Agu singardeme."
|
||||||
|
|
||||||
#: mediagoblin/process_media/errors.py:44
|
#: mediagoblin/process_media/errors.py:44
|
||||||
msgid "Invalid file given for media type."
|
msgid "Invalid file given for media type."
|
||||||
msgstr ""
|
msgstr "La provizita dosiero ne konformas al la informtipo."
|
||||||
|
|
||||||
#: mediagoblin/submit/forms.py:25
|
#: mediagoblin/submit/forms.py:25
|
||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Dosiero"
|
msgstr "Dosiero"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr "Priskribo de ĉi tiu verko"
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Vi devas provizi dosieron."
|
msgstr "Vi devas provizi dosieron."
|
||||||
@ -143,11 +148,11 @@ msgstr "Hura! Alŝutitas!"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||||
msgid "Oops!"
|
msgid "Oops!"
|
||||||
msgstr ""
|
msgstr "Oj!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:24
|
#: mediagoblin/templates/mediagoblin/404.html:24
|
||||||
msgid "There doesn't seem to be a page at this address. Sorry!"
|
msgid "There doesn't seem to be a page at this address. Sorry!"
|
||||||
msgstr ""
|
msgstr "Verŝajne ĉe ĉi tiu adreso ne estas paĝo. Ni bedaŭras!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:26
|
#: mediagoblin/templates/mediagoblin/404.html:26
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -159,7 +164,7 @@ msgstr ""
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||||
msgid "Image of 404 goblin stressing out"
|
msgid "Image of 404 goblin stressing out"
|
||||||
msgstr ""
|
msgstr "Bildo de 404-koboldo penŝvitanta."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||||
msgid "GNU MediaGoblin"
|
msgid "GNU MediaGoblin"
|
||||||
@ -188,10 +193,16 @@ msgid ""
|
|||||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Funkcias per <a href=\"http://mediagoblin.org\">MediaGoblin</a>, unu el la "
|
||||||
|
"<a href=\"http://gnu.org/\">projektoj de GNU</a>"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr ""
|
msgstr "Saluton, artemulo! MediaGoblin estas…"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||||
msgid "The perfect place for your media!"
|
msgid "The perfect place for your media!"
|
||||||
@ -202,26 +213,30 @@ msgid ""
|
|||||||
"A place for people to collaborate and show off original and derived "
|
"A place for people to collaborate and show off original and derived "
|
||||||
"creations!"
|
"creations!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Loko, kie homoj povas kunlabori, kaj elmeti originalajn kreaĵojn kaj "
|
||||||
|
"derivaĵojn!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||||
"after all.)"
|
"after all.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Libera verko. (Ni ja estas projekto de <a "
|
"Libera verko. (Ni ja estas projekto de <a href=\"http://gnu.org\">GNU</a>.)"
|
||||||
"href=\"http://gnu.org\">GNU</a>.)"
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||||
msgid ""
|
msgid ""
|
||||||
"Aiming to make the world a better place through decentralization and "
|
"Aiming to make the world a better place through decentralization and "
|
||||||
"(eventually, coming soon!) federation!"
|
"(eventually, coming soon!) federation!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Celanta plibonigi la mondon per sencentreco kaj (iam, baldaŭ!) federateco!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||||
msgid ""
|
msgid ""
|
||||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||||
" including video support!)"
|
" including video support!)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Kreita por etendado. (Baldaŭ en la programo aperos subteno de pluraj "
|
||||||
|
"informspecoj, inkluzive de filmoj!)"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -229,6 +244,63 @@ msgid ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||||
" software!</a>)"
|
" software!</a>)"
|
||||||
msgstr ""
|
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 ""
|
||||||
|
|
||||||
|
#: 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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr "Plej nove aldonitaj dosieroj"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr "Enigu vian novan pasvorton"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
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 ""
|
||||||
|
|
||||||
|
#: 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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
"Saluton, %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"por ŝanĝi vian pasvorton ĉe GNUa MediaGoblin, sekvu la jenan retadreson per via TTT-legilo:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"Se vi pensas, ke ĉi tiu retletero estas sendita erare, simple ignoru ĝin kaj plu restu feliĉa koboldo!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
@ -242,6 +314,14 @@ msgstr "Ĉu ankoraŭ sen konto?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Kreu ĝin ĉi tie!"
|
msgstr "Kreu ĝin ĉi tie!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr "Ĉu vi forgesis vian pasvorton?"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr "Ŝanĝu ĝin!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Kreu konton!"
|
msgstr "Kreu konton!"
|
||||||
@ -272,12 +352,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Priredaktado de %(media_title)s"
|
msgstr "Priredaktado de %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Nuligi"
|
msgstr "Nuligi"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Konservi ŝanĝojn"
|
msgstr "Konservi ŝanĝojn"
|
||||||
|
|
||||||
@ -311,34 +391,34 @@ msgstr "Uzanto ne trovita."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "Ĉu efektive forigi %(title)s?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
msgstr "Forigi senrevene"
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
msgid "Media processing panel"
|
msgid "Media processing panel"
|
||||||
msgstr ""
|
msgstr "Kontrolejo pri dosierpreparado."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:25
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:25
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can track the state of media being processed for your gallery here."
|
"You can track the state of media being processed for your gallery here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Ĉi tie vi povas informiĝi pri la stato de preparado de dosieroj por via "
|
||||||
|
"galerio."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
|
||||||
msgid "Media in-processing"
|
msgid "Media in-processing"
|
||||||
msgstr ""
|
msgstr "Dosieroj preparataj"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
||||||
msgid "No media in-processing"
|
msgid "No media in-processing"
|
||||||
msgstr ""
|
msgstr "Neniu dosieroj preparatas"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
||||||
msgid "These uploads failed to process:"
|
msgid "These uploads failed to process:"
|
||||||
msgstr ""
|
msgstr "Preparado de ĉi tiuj alŝutaĵoj malsukcesis:"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||||
@ -347,7 +427,7 @@ msgstr "Necesas konfirmo de retpoŝtadreso"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||||
msgid "Almost done! Your account still needs to be activated."
|
msgid "Almost done! Your account still needs to be activated."
|
||||||
msgstr ""
|
msgstr "Preskaŭ finite! Restas nur validigi vian konton."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -368,6 +448,8 @@ msgid ""
|
|||||||
"Someone has registered an account with this username, but it still has to be"
|
"Someone has registered an account with this username, but it still has to be"
|
||||||
" activated."
|
" activated."
|
||||||
msgstr ""
|
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:68
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -394,7 +476,7 @@ msgstr "Redakti profilon"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||||
msgid "This user hasn't filled in their profile (yet)."
|
msgid "This user hasn't filled in their profile (yet)."
|
||||||
msgstr ""
|
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:122
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -406,6 +488,7 @@ msgid ""
|
|||||||
"This is where your media will appear, but you don't seem to have added "
|
"This is where your media will appear, but you don't seem to have added "
|
||||||
"anything yet."
|
"anything yet."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Ĝuste ĉi tie aperos viaj dosieroj, sed vi ŝajne ankoraŭ nenion alŝutis."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||||
msgid "Add media"
|
msgid "Add media"
|
||||||
@ -421,14 +504,26 @@ msgstr "flusimbolo"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr ""
|
msgstr "Atom-a informfluo"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr "Plinovaj"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr "Malplinovaj"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Komento"
|
msgstr "Komento"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: 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:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr "Vi estas forigonta dosieron de alia uzanto. Estu singardema."
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,15 +2,18 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <ekenbrand@hotmail.com>, 2011.
|
# <ekenbrand@hotmail.com>, 2011.
|
||||||
# <juangsub@gmail.com>, 2011.
|
|
||||||
# <jacobo@gnu.org>, 2011.
|
# <jacobo@gnu.org>, 2011.
|
||||||
|
# Javier Di Mauro <javierdimauro@gmail.com>, 2011.
|
||||||
|
# <juangsub@gmail.com>, 2011.
|
||||||
|
# Mario Rodriguez <msrodriguez00@gmail.com>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mediagoblin/team/es/)\n"
|
"Language-Team: Spanish (Castilian) (http://www.transifex.net/projects/p/mediagoblin/team/es/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -20,120 +23,127 @@ msgstr ""
|
|||||||
"Language: es\n"
|
"Language: es\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Nombre de Usuario"
|
msgstr "Nombre de Usuario"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Contraseña"
|
msgstr "Contraseña"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Las contraseñas deben coincidir."
|
msgstr "Las contraseñas deben coincidir."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Confirme su contraseña"
|
msgstr "Confirma tu contraseña"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Escriba de nuevo aquí para asegurarse de que no hay faltas de ortografía."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Dirección de correo electrónico"
|
msgstr "Dirección de correo electrónico"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Lo sentimos, la registración está deshabilitado en este momento."
|
msgstr "Lo sentimos, la registración está deshabilitado en este momento."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Lo sentimos, ya existe un usuario con ese nombre."
|
msgstr "Lo sentimos, ya existe un usuario con ese nombre."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Lo sentimos, su dirección de correo electrónico ya ha sido tomada."
|
msgstr "Lo sentimos, esa dirección de correo electrónico ya ha sido tomada."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Su dirección de correo electrónico ha sido verificada. ¡Ahora puede "
|
"Tu dirección de correo electrónico ha sido verificada. ¡Ahora puedes "
|
||||||
"ingresar, editar su perfil, y enviar imágenes!"
|
"ingresar, editar tu perfil, y enviar imágenes!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"La clave de verificación o la identificación de usuario son incorrectas"
|
"La clave de verificación o la identificación de usuario son incorrectas"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Reenvíe su correo electrónico de verificación."
|
msgstr "Se reenvió tu correo electrónico de verificación."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
"No se pudo enviar un correo electrónico de recuperación de contraseñas "
|
||||||
|
"porque su nombre de usuario está inactivo o la dirección de su cuenta de "
|
||||||
|
"correo electrónico no ha sido verificada."
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Título"
|
msgstr "Título"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Ficha"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "La ficha no puede estar vacía"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Etiquetas"
|
msgstr "Etiquetas"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "Ficha"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "La ficha no puede estar vacía"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. 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:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Bio"
|
msgstr "Bio"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Sitio web"
|
msgstr "Sitio web"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "Una entrada con esa ficha ya existe para este usuario."
|
msgstr "Una entrada con esa ficha ya existe para este usuario."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr "Estás editando el contenido de otro usuario. Proceder con precaución."
|
||||||
"Usted está editando el contenido de otro usuario. Proceder con precaución."
|
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Usted está editando un perfil de usuario. Proceder con precaución."
|
msgstr "Estás editando un perfil de usuario. Proceder con precaución."
|
||||||
|
|
||||||
#: mediagoblin/process_media/errors.py:44
|
#: mediagoblin/process_media/errors.py:44
|
||||||
msgid "Invalid file given for media type."
|
msgid "Invalid file given for media type."
|
||||||
msgstr "Archivo inálido para el formato seleccionado."
|
msgstr "Archivo inválido para el formato seleccionado."
|
||||||
|
|
||||||
#: mediagoblin/submit/forms.py:25
|
#: mediagoblin/submit/forms.py:25
|
||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Archivo"
|
msgstr "Archivo"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr "Descripción de esta obra"
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Usted debe proporcionar un archivo."
|
msgstr "Debes proporcionar un archivo."
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:50
|
#: mediagoblin/submit/views.py:50
|
||||||
msgid "The file doesn't seem to be an image!"
|
msgid "The file doesn't seem to be an image!"
|
||||||
@ -156,12 +166,12 @@ msgid ""
|
|||||||
"If you're sure the address is correct, maybe the page you're looking for has"
|
"If you're sure the address is correct, maybe the page you're looking for has"
|
||||||
" been moved or deleted."
|
" been moved or deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si estas seguro que la dirección es correcta, puede ser que la pagina halla "
|
"Si estás seguro que la dirección es correcta, puede ser que la pagina haya "
|
||||||
"sido movida o borrada."
|
"sido movida o borrada."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||||
msgid "Image of 404 goblin stressing out"
|
msgid "Image of 404 goblin stressing out"
|
||||||
msgstr "404 el goblin esta estresado"
|
msgstr "Imagen de 404 goblin estresándose"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||||
msgid "GNU MediaGoblin"
|
msgid "GNU MediaGoblin"
|
||||||
@ -177,7 +187,7 @@ msgstr "Enviar contenido"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||||
msgid "verify your email!"
|
msgid "verify your email!"
|
||||||
msgstr "Verifique su correo electrónico"
|
msgstr "Verifica tu correo electrónico!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:26
|
#: mediagoblin/templates/mediagoblin/auth/login.html:26
|
||||||
@ -190,21 +200,27 @@ msgid ""
|
|||||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Potenciado por <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr "Explorar"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr "Hola, amante de los medios de comunicación! MediaGoblin es ..."
|
msgstr "Hola, amante de los contenidos! MediaGoblin es ..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||||
msgid "The perfect place for your media!"
|
msgid "The perfect place for your media!"
|
||||||
msgstr "El lugar ideal para tus cosas!"
|
msgstr "El lugar ideal para tus contenidos!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||||
msgid ""
|
msgid ""
|
||||||
"A place for people to collaborate and show off original and derived "
|
"A place for people to collaborate and show off original and derived "
|
||||||
"creations!"
|
"creations!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Un lugar para colaborar y exhibir tus creaciones orignales y derivadas"
|
"Un lugar para colaborar y exhibir tus creaciones orignales y derivadas!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -220,7 +236,7 @@ msgid ""
|
|||||||
"(eventually, coming soon!) federation!"
|
"(eventually, coming soon!) federation!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Queriendo hacer del mundo un mejor lugar a través de la descentralización y "
|
"Queriendo hacer del mundo un mejor lugar a través de la descentralización y "
|
||||||
"(eventualmente!) la federalización!"
|
"(eventualmente, muy pronto!) la federalización!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -240,9 +256,60 @@ msgstr ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\"> Vos podés ayudarnos a "
|
"href=\"http://mediagoblin.org/pages/join.html\"> Vos podés ayudarnos a "
|
||||||
"mejorar este programa</a>)"
|
"mejorar este programa</a>)"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||||
|
msgid "Excited to join us?"
|
||||||
|
msgstr "Te emociona trabajar con 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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr "El contenido más reciente"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr "Ingrese su nueva contraseña"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
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 ""
|
||||||
|
|
||||||
|
#: 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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"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 lal "
|
||||||
|
"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!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "Fallo el inicio de sesión!"
|
msgstr "Falló el inicio de sesión!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||||
msgid "Don't have an account yet?"
|
msgid "Don't have an account yet?"
|
||||||
@ -252,6 +319,14 @@ msgstr "¿No tienes una cuenta?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "¡Crea una aquí!"
|
msgstr "¡Crea una aquí!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr "¿Olvidaste tu contraseña?"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr "Cambiarlo!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "¡Crea una cuenta!"
|
msgstr "¡Crea una cuenta!"
|
||||||
@ -270,8 +345,11 @@ msgid ""
|
|||||||
"\n"
|
"\n"
|
||||||
"%(verification_url)s"
|
"%(verification_url)s"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Hola %(username)s , para activar su cuenta GNU MediaGoblin, abra la "
|
"Hola %(username)s,\n"
|
||||||
"siguiente URL en su navegador: %(verification_url)s "
|
"\n"
|
||||||
|
"para activar tu cuenta de GNU MediaGoblin, abre la siguiente URL en tu navegador:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s "
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:29
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:29
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -279,14 +357,14 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Edición %(media_title)s "
|
msgstr "Edición %(media_title)s "
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Salvar cambios"
|
msgstr "Guardar cambios"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:29
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -299,7 +377,7 @@ msgstr "Contenido etiquetado con:"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||||
msgid "Submit yer media"
|
msgid "Submit yer media"
|
||||||
msgstr "Envíe su contenido"
|
msgstr "Envía tu contenido"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/submit/start.html:29
|
#: mediagoblin/templates/mediagoblin/submit/start.html:29
|
||||||
msgid "Submit"
|
msgid "Submit"
|
||||||
@ -313,18 +391,16 @@ 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/gallery.html:52
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||||
msgid "Sorry, no such user found."
|
msgid "Sorry, no such user found."
|
||||||
msgstr "Lo sentimos, no se ha encontrado ese usuario."
|
msgstr "Lo sentimos, no se encontró ese usuario."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "Realmente deseas eliminar %(title)s ?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
msgstr "Eliminar permanentemente"
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
msgid "Media processing panel"
|
msgid "Media processing panel"
|
||||||
@ -362,8 +438,8 @@ msgstr "Casi terminas! Solo falta activar la cuenta."
|
|||||||
msgid ""
|
msgid ""
|
||||||
"An email should arrive in a few moments with instructions on how to do so."
|
"An email should arrive in a few moments with instructions on how to do so."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Un e-mail debería llegar en unos momentos con las instrucciones para "
|
"En unos momentos te debería llegar un correo electrónico con las "
|
||||||
"hacerlo."
|
"instrucciones para hacerlo."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||||
msgid "In case it doesn't:"
|
msgid "In case it doesn't:"
|
||||||
@ -387,13 +463,13 @@ msgid ""
|
|||||||
"If you are that person but you've lost your verification email, you can <a "
|
"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."
|
"href=\"%(login_url)s\">log in</a> and resend it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Si usted es esa persona, pero ha perdido su correo electrónico de "
|
"Si tú eres esa persona, pero has perdido tu correo electrónico de "
|
||||||
"verificación, puede <a href=\"%(login_url)s\">acceder</a> y reenviarlo."
|
"verificación, puedes <a href=\"%(login_url)s\">acceder</a> y reenviarlo."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "%(username)s's profile"
|
msgid "%(username)s's profile"
|
||||||
msgstr "Perfil de %(username)s's"
|
msgstr "Perfil de %(username)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||||
msgid "Here's a spot to tell others about yourself."
|
msgid "Here's a spot to tell others about yourself."
|
||||||
@ -411,15 +487,14 @@ msgstr "Este usuario (todavia) no ha completado su perfil."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "View all of %(username)s's media"
|
msgid "View all of %(username)s's media"
|
||||||
msgstr "Ver todo el contenido de %(username)s's "
|
msgstr "Ver todo el contenido de %(username)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||||
msgid ""
|
msgid ""
|
||||||
"This is where your media will appear, but you don't seem to have added "
|
"This is where your media will appear, but you don't seem to have added "
|
||||||
"anything yet."
|
"anything yet."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Aquí es donde tú contenido estará, pero parece que no haz agregado contenido"
|
"Aquí es donde tú contenido estará, pero parece que aún no has agregado nada."
|
||||||
" todavia."
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||||
msgid "Add media"
|
msgid "Add media"
|
||||||
@ -427,7 +502,7 @@ msgstr "Añadir contenido"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||||
msgid "There doesn't seem to be any media here yet..."
|
msgid "There doesn't seem to be any media here yet..."
|
||||||
msgstr "Parece que no hay ningún contenido aquí todavia..."
|
msgstr "Parece que aún no hay ningún contenido aquí..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||||
msgid "feed icon"
|
msgid "feed icon"
|
||||||
@ -437,12 +512,26 @@ msgstr "ícono feed"
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "Atom feed"
|
msgstr "Atom feed"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr "Recientes"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr "Antiguas"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Comentario"
|
msgstr "Comentario"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: 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:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Estás a punto de eliminar un contenido de otro usuario. Proceder con "
|
||||||
|
"precaución."
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,16 +2,18 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
# <maxineb@members.fsf.org>, 2011.
|
# Translators:
|
||||||
|
# <joehillen@gmail.com>, 2011.
|
||||||
# <marktraceur@gmail.com>, 2011.
|
# <marktraceur@gmail.com>, 2011.
|
||||||
# Valentin Villenave <valentin@villenave.net>, 2011.
|
# <maxineb@members.fsf.org>, 2011.
|
||||||
# <transifex@wandborg.se>, 2011.
|
# <transifex@wandborg.se>, 2011.
|
||||||
|
# Valentin Villenave <valentin@villenave.net>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -21,55 +23,45 @@ msgstr ""
|
|||||||
"Language: fr\n"
|
"Language: fr\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Nom d'utilisateur"
|
msgstr "Nom d'utilisateur"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Mot de passe"
|
msgstr "Mot de passe"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Les mots de passe doivent correspondre."
|
msgstr "Les mots de passe doivent correspondre."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Confirmer le mot de passe"
|
msgstr "Confirmer le mot de passe"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Tapez-le à nouveau ici pour vous assurer qu'il n'ya pas de fautes "
|
||||||
|
"d'orthographe."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Adresse e-mail"
|
msgstr "Adresse e-mail"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "L'inscription n'est pas activée sur ce serveur, désolé."
|
msgstr "L'inscription n'est pas activée sur ce serveur, désolé."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Un utilisateur existe déjà avec ce nom, désolé."
|
msgstr "Un utilisateur existe déjà avec ce nom, désolé."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Désolé, cette adresse courriel a déjà été prise."
|
msgstr "Désolé, cette adresse courriel a déjà été prise."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -77,50 +69,60 @@ msgstr ""
|
|||||||
"Votre adresse e-mail a bien été vérifiée. Vous pouvez maintenant vous "
|
"Votre adresse e-mail a bien été vérifiée. Vous pouvez maintenant vous "
|
||||||
"identifier, modifier votre profil, et soumettre des images !"
|
"identifier, modifier votre profil, et soumettre des images !"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "La clé de vérification ou le nom d'utilisateur est incorrect."
|
msgstr "La clé de vérification ou le nom d'utilisateur est incorrect."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "E-mail de vérification renvoyé."
|
msgstr "E-mail de vérification renvoyé."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titre"
|
msgstr "Titre"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Légende"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "La légende ne peut pas être laissée vide."
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "Légende"
|
||||||
|
|
||||||
|
#: 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:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Bio"
|
msgstr "Bio"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Site web"
|
msgstr "Site web"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
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."
|
msgstr "Une entrée existe déjà pour cet utilisateur avec la même légende."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous vous apprêtez à modifier le média d'un autre utilisateur. Veuillez "
|
"Vous vous apprêtez à modifier le média d'un autre utilisateur. Veuillez "
|
||||||
"prendre garde."
|
"prendre garde."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Vous vous apprêtez à modifier le profil d'un utilisateur. Veuillez prendre "
|
"Vous vous apprêtez à modifier le profil d'un utilisateur. Veuillez prendre "
|
||||||
@ -128,12 +130,16 @@ msgstr ""
|
|||||||
|
|
||||||
#: mediagoblin/process_media/errors.py:44
|
#: mediagoblin/process_media/errors.py:44
|
||||||
msgid "Invalid file given for media type."
|
msgid "Invalid file given for media type."
|
||||||
msgstr ""
|
msgstr "Invalide fichier donné pour le type de média."
|
||||||
|
|
||||||
#: mediagoblin/submit/forms.py:25
|
#: mediagoblin/submit/forms.py:25
|
||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fichier"
|
msgstr "Fichier"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Il vous faut fournir un fichier."
|
msgstr "Il vous faut fournir un fichier."
|
||||||
@ -148,21 +154,23 @@ msgstr "Youhou, c'est envoyé !"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||||
msgid "Oops!"
|
msgid "Oops!"
|
||||||
msgstr ""
|
msgstr "Zut!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:24
|
#: mediagoblin/templates/mediagoblin/404.html:24
|
||||||
msgid "There doesn't seem to be a page at this address. Sorry!"
|
msgid "There doesn't seem to be a page at this address. Sorry!"
|
||||||
msgstr ""
|
msgstr "Il ne semble pas être une page à cette adresse. Désolé!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:26
|
#: mediagoblin/templates/mediagoblin/404.html:26
|
||||||
msgid ""
|
msgid ""
|
||||||
"If you're sure the address is correct, maybe the page you're looking for has"
|
"If you're sure the address is correct, maybe the page you're looking for has"
|
||||||
" been moved or deleted."
|
" been moved or deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Si vous êtes sûr que l'adresse est correcte, peut-être la page que vous "
|
||||||
|
"recherchez a été déplacé ou supprimé."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||||
msgid "Image of 404 goblin stressing out"
|
msgid "Image of 404 goblin stressing out"
|
||||||
msgstr ""
|
msgstr "Image de 404 gobelin stresser"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:22
|
#: mediagoblin/templates/mediagoblin/base.html:22
|
||||||
msgid "GNU MediaGoblin"
|
msgid "GNU MediaGoblin"
|
||||||
@ -170,7 +178,7 @@ msgstr "GNU MediaGoblin"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:47
|
#: mediagoblin/templates/mediagoblin/base.html:47
|
||||||
msgid "MediaGoblin logo"
|
msgid "MediaGoblin logo"
|
||||||
msgstr ""
|
msgstr "Logo MediaGoblin"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||||
msgid "Submit media"
|
msgid "Submit media"
|
||||||
@ -191,38 +199,52 @@ msgid ""
|
|||||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Propulsé par <a href=\"http://mediagoblin.org\">MediaGoblin</a> , un <a "
|
||||||
|
"href=\"http://gnu.org/\">GNU</a> de projet"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr ""
|
msgstr "Salut à tous, amateur de médias! MediaGoblin est ..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||||
msgid "The perfect place for your media!"
|
msgid "The perfect place for your media!"
|
||||||
msgstr ""
|
msgstr "L'endroit idéal pour vos médias!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:30
|
#: mediagoblin/templates/mediagoblin/root.html:30
|
||||||
msgid ""
|
msgid ""
|
||||||
"A place for people to collaborate and show off original and derived "
|
"A place for people to collaborate and show off original and derived "
|
||||||
"creations!"
|
"creations!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Un lieu pour les personnes de collaborer et de montrer des créations "
|
||||||
|
"originales et dérivées!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||||
msgid ""
|
msgid ""
|
||||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||||
"after all.)"
|
"after all.)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Logiciel libre. (Nous sommes une <a href=\"http://gnu.org\">GNU</a> projet, "
|
||||||
|
"après tout.)"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||||
msgid ""
|
msgid ""
|
||||||
"Aiming to make the world a better place through decentralization and "
|
"Aiming to make the world a better place through decentralization and "
|
||||||
"(eventually, coming soon!) federation!"
|
"(eventually, coming soon!) federation!"
|
||||||
msgstr ""
|
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
|
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||||
msgid ""
|
msgid ""
|
||||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||||
" including video support!)"
|
" including video support!)"
|
||||||
msgstr ""
|
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
|
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -230,26 +252,84 @@ msgid ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
"href=\"http://mediagoblin.org/pages/join.html\">You can help us improve this"
|
||||||
" software!</a>)"
|
" software!</a>)"
|
||||||
msgstr ""
|
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"
|
||||||
|
" or\n"
|
||||||
|
" <a class=\"header_submit\" href=\"http://wiki.mediagoblin.org/HackingHowto\">Set up MediaGoblin on your own server</a>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr ""
|
msgstr "Connexion a échoué!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||||
msgid "Don't have an account yet?"
|
msgid "Don't have an account yet?"
|
||||||
msgstr "Pas encore de compte ?"
|
msgstr "Pas encore de compte?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Créez-en un ici !"
|
msgstr "Créez-en un ici!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Créer un compte !"
|
msgstr "Créer un compte!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
msgstr ""
|
msgstr "Créer"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/verification_email.txt:19
|
#: mediagoblin/templates/mediagoblin/auth/verification_email.txt:19
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -273,12 +353,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Modification de %(media_title)s"
|
msgstr "Modification de %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuler"
|
msgstr "Annuler"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Enregistrer les modifications"
|
msgstr "Enregistrer les modifications"
|
||||||
|
|
||||||
@ -312,43 +392,43 @@ msgstr "Impossible de trouver cet utilisateur, désolé."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "Voulez-vous vraiment supprimer %(title)s ?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
msgid "Media processing panel"
|
msgid "Media processing panel"
|
||||||
msgstr ""
|
msgstr "Panneau pour le traitement des médias"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:25
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:25
|
||||||
msgid ""
|
msgid ""
|
||||||
"You can track the state of media being processed for your gallery here."
|
"You can track the state of media being processed for your gallery here."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Vous pouvez suivre l'état des médias en cours de traitement pour votre "
|
||||||
|
"galerie ici."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
|
||||||
msgid "Media in-processing"
|
msgid "Media in-processing"
|
||||||
msgstr ""
|
msgstr "Médias en transformation"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
||||||
msgid "No media in-processing"
|
msgid "No media in-processing"
|
||||||
msgstr ""
|
msgstr "Aucun média en transformation"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
||||||
msgid "These uploads failed to process:"
|
msgid "These uploads failed to process:"
|
||||||
msgstr ""
|
msgstr "Ces ajouts n'etaient pas processé:"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||||
msgid "Email verification needed"
|
msgid "Email verification needed"
|
||||||
msgstr ""
|
msgstr "Vérification d'email nécessaire"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||||
msgid "Almost done! Your account still needs to be activated."
|
msgid "Almost done! Your account still needs to be activated."
|
||||||
msgstr ""
|
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:47
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -370,6 +450,8 @@ msgid ""
|
|||||||
"Someone has registered an account with this username, but it still has to be"
|
"Someone has registered an account with this username, but it still has to be"
|
||||||
" activated."
|
" activated."
|
||||||
msgstr ""
|
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:68
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -388,7 +470,7 @@ msgstr "profil de %(username)s"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:85
|
||||||
msgid "Here's a spot to tell others about yourself."
|
msgid "Here's a spot to tell others about yourself."
|
||||||
msgstr ""
|
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:90
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:108
|
||||||
@ -397,7 +479,7 @@ msgstr "Modifier le profil"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||||
msgid "This user hasn't filled in their profile (yet)."
|
msgid "This user hasn't filled in their profile (yet)."
|
||||||
msgstr ""
|
msgstr "Cet utilisateur n'a pas rempli leur profil (encore)."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -409,29 +491,45 @@ msgid ""
|
|||||||
"This is where your media will appear, but you don't seem to have added "
|
"This is where your media will appear, but you don't seem to have added "
|
||||||
"anything yet."
|
"anything yet."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"C'est là où vos médias apparaît, mais vous ne semblez pas avoir quoi que ce "
|
||||||
|
"soit encore ajouté."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||||
msgid "Add media"
|
msgid "Add media"
|
||||||
msgstr ""
|
msgstr "Ajouter des médias"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||||
msgid "There doesn't seem to be any media here yet..."
|
msgid "There doesn't seem to be any media here yet..."
|
||||||
msgstr ""
|
msgstr "Il ne semble pas être un média encore là ..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||||
msgid "feed icon"
|
msgid "feed icon"
|
||||||
msgstr ""
|
msgstr "icon de flux"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
|
msgstr "flux Atom"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Commentaire"
|
msgstr "Commentaire"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "I am sure I want to delete this"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
|
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. "
|
||||||
|
"Procédez avec prudence."
|
||||||
|
|
||||||
|
|
||||||
|
BIN
mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
Normal file
BIN
mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.mo
Normal file
Binary file not shown.
520
mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
Normal file
520
mediagoblin/i18n/it/LC_MESSAGES/mediagoblin.po
Normal file
@ -0,0 +1,520 @@
|
|||||||
|
# Translations template for PROJECT.
|
||||||
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
|
#
|
||||||
|
# Translators:
|
||||||
|
# <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-09-25 20:26-0500\n"
|
||||||
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
|
"MIME-Version: 1.0\n"
|
||||||
|
"Content-Type: text/plain; charset=UTF-8\n"
|
||||||
|
"Content-Transfer-Encoding: 8bit\n"
|
||||||
|
"Generated-By: Babel 0.9.6\n"
|
||||||
|
"Language: it\n"
|
||||||
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
|
msgid "Username"
|
||||||
|
msgstr "Nome utente"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
|
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
|
||||||
|
msgid "Email address"
|
||||||
|
msgstr "Indirizzo email"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:42
|
||||||
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
|
msgstr "Spiacente, registrazione è disabilitata su questa istanza"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:60
|
||||||
|
msgid "Sorry, a user with that name already exists."
|
||||||
|
msgstr "Spiacente, esiste già un utente con quel nome"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:64
|
||||||
|
msgid "Sorry, that email address has already been taken."
|
||||||
|
msgstr "Spiacente, quell'indirizzo email è già stato preso."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:165
|
||||||
|
msgid ""
|
||||||
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
|
"and submit images!"
|
||||||
|
msgstr ""
|
||||||
|
"Il tuo indirizzo email è stato verificato. Puoi ora fare login, modificare "
|
||||||
|
"il tuo profilo, e inserire immagini!"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:171
|
||||||
|
msgid "The verification key or user id is incorrect"
|
||||||
|
msgstr "La chiave di verifica o l'id utente è sbagliato"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:192
|
||||||
|
msgid "Resent your verification email."
|
||||||
|
msgstr "Rispedisci email di verifica"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
|
msgid "Title"
|
||||||
|
msgstr "Titolo"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
|
msgid "Tags"
|
||||||
|
msgstr "Tags"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
|
msgid "Bio"
|
||||||
|
msgstr "Bio"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:45
|
||||||
|
msgid "Website"
|
||||||
|
msgstr "Sito web"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/views.py:63
|
||||||
|
msgid "An entry with that slug already exists for this user."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/views.py:84
|
||||||
|
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:154
|
||||||
|
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/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:47
|
||||||
|
msgid "You must provide a file."
|
||||||
|
msgstr "Devi specificare un documento."
|
||||||
|
|
||||||
|
#: mediagoblin/submit/views.py:50
|
||||||
|
msgid "The file doesn't seem to be an image!"
|
||||||
|
msgstr "Il documento non sembra essere un'immagine!"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/views.py:122
|
||||||
|
msgid "Woohoo! Submitted!"
|
||||||
|
msgstr "Evviva! "
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||||
|
msgid "Oops!"
|
||||||
|
msgstr "Oops!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/404.html:24
|
||||||
|
msgid "There doesn't seem to be a page at this address. Sorry!"
|
||||||
|
msgstr "Non sembra esserci una pagina a questo indirizzo. Spiacente!"
|
||||||
|
|
||||||
|
#: 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 ""
|
||||||
|
"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
|
||||||
|
msgid "MediaGoblin logo"
|
||||||
|
msgstr "MediaGoblin logo"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||||
|
msgid "Submit media"
|
||||||
|
msgstr "Inoltra file multimediale"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||||
|
msgid "verify your email!"
|
||||||
|
msgstr "verifica il tuo indirizzo email!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:26
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:34
|
||||||
|
msgid "Log in"
|
||||||
|
msgstr "Accedi"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/base.html:89
|
||||||
|
msgid ""
|
||||||
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
|
msgstr ""
|
||||||
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, un progetto "
|
||||||
|
"<a href=\"http://gnu.org/\">GNU</a>"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
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: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!"
|
||||||
|
msgstr ""
|
||||||
|
"Un posto per collaborare con altri e mostrare le proprie creazioni originali"
|
||||||
|
" e derivate!"
|
||||||
|
|
||||||
|
#: 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.)"
|
||||||
|
|
||||||
|
#: 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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr "Documenti multimediali più recenti"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr "Inserisci la tua nuova password"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
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."
|
||||||
|
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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
|
msgid "Logging in failed!"
|
||||||
|
msgstr "Accesso fallito!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||||
|
msgid "Don't have an account yet?"
|
||||||
|
msgstr "Non hai ancora un account?"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||||
|
msgid "Create one here!"
|
||||||
|
msgstr "Creane uno qui!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr "Hai dimenticato la password?"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
|
msgid "Create an account!"
|
||||||
|
msgstr "Crea un account!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
||||||
|
msgid "Create"
|
||||||
|
msgstr "Crea"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to activate your GNU MediaGoblin account, open the following URL in\n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s"
|
||||||
|
msgstr ""
|
||||||
|
"Ciao %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"per attivare il tuo account GNU MediaGoblin, apri il seguente URL nel tuo navigatore web.\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:29
|
||||||
|
#, python-format
|
||||||
|
msgid "Editing %(media_title)s"
|
||||||
|
msgstr "Stai modificando %(media_title)s"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
|
msgid "Cancel"
|
||||||
|
msgstr "Annulla"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
|
msgid "Save changes"
|
||||||
|
msgstr "Salva i cambiamenti"
|
||||||
|
|
||||||
|
#: 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/submit/start.html:26
|
||||||
|
msgid "Submit yer media"
|
||||||
|
msgstr "Inoltra documento multimediale"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/submit/start.html:29
|
||||||
|
msgid "Submit"
|
||||||
|
msgstr "Conferma"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||||
|
#, 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_confirm_delete.html:30
|
||||||
|
#, python-format
|
||||||
|
msgid "Really delete %(title)s?"
|
||||||
|
msgstr "Vuoi davvero cancellare %(title)s?"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
|
msgid "Delete Permanently"
|
||||||
|
msgstr "Cancella permanentemente"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
|
msgid "Media processing panel"
|
||||||
|
msgstr "Pannello di elaborazione media"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:25
|
||||||
|
msgid ""
|
||||||
|
"You can track the state of media being processed for your gallery here."
|
||||||
|
msgstr "Puoi seguire lo stato dell'elaborazione per la tua galleria qui."
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:28
|
||||||
|
msgid "Media in-processing"
|
||||||
|
msgstr "Media in elaborazione"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
||||||
|
msgid "No media in-processing"
|
||||||
|
msgstr "Nessun documento multimediale in elaborazione"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
||||||
|
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
|
||||||
|
msgid "Email verification needed"
|
||||||
|
msgstr "è necessario verificare email"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||||
|
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
|
||||||
|
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
|
||||||
|
msgid "In case it doesn't:"
|
||||||
|
msgstr "Nel caso non fosse:"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||||
|
msgid "Resend verification email"
|
||||||
|
msgstr "Rispedisci email di verifica"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||||
|
msgid ""
|
||||||
|
"Someone has registered an account with this username, but it still has to be"
|
||||||
|
" activated."
|
||||||
|
msgstr ""
|
||||||
|
"Qualcuno ha registrato un account con questo nome utente, ma deve ancora "
|
||||||
|
"essere attivato."
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||||
|
#, 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 ""
|
||||||
|
"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
|
||||||
|
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
|
||||||
|
msgid "Edit profile"
|
||||||
|
msgstr "Modifica profilo"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:96
|
||||||
|
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
|
||||||
|
#, 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
|
||||||
|
msgid ""
|
||||||
|
"This is where your media will appear, but you don't seem to have added "
|
||||||
|
"anything yet."
|
||||||
|
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
|
||||||
|
msgid "There doesn't seem to be any media here yet..."
|
||||||
|
msgstr "Non sembra ci sia ancora nessun documento multimediali qui.."
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||||
|
msgid "feed icon"
|
||||||
|
msgstr "feed icon"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
||||||
|
msgid "Atom feed"
|
||||||
|
msgstr "Atom feed"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr "Più nuovo"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr "Più vecchio"
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
|
msgid "Comment"
|
||||||
|
msgstr "Commento"
|
||||||
|
|
||||||
|
#: 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:175
|
||||||
|
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 "
|
||||||
|
"attenzione."
|
||||||
|
|
||||||
|
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <averym@gmail.com>, 2011.
|
# <averym@gmail.com>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,102 +19,100 @@ msgstr ""
|
|||||||
"Language: ja\n"
|
"Language: ja\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0\n"
|
"Plural-Forms: nplurals=1; plural=0\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "ユーザネーム"
|
msgstr "ユーザネーム"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "パスワード"
|
msgstr "パスワード"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "パスワードが一致している必要があります。"
|
msgstr "パスワードが一致している必要があります。"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "パスワードを確認"
|
msgstr "パスワードを確認"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "メールアドレス"
|
msgstr "メールアドレス"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "申し訳ありませんが、このインスタンスで登録は無効になっています。"
|
msgstr "申し訳ありませんが、このインスタンスで登録は無効になっています。"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "申し訳ありませんが、その名前を持つユーザーがすでに存在しています。"
|
msgstr "申し訳ありませんが、その名前を持つユーザーがすでに存在しています。"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
msgstr "メアドが確認されています。これで、ログインしてプロファイルを編集し、画像を提出することができます!"
|
msgstr "メアドが確認されています。これで、ログインしてプロファイルを編集し、画像を提出することができます!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "検証キーまたはユーザーIDが間違っています"
|
msgstr "検証キーまたはユーザーIDが間違っています"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "検証メールを再送しました。"
|
msgstr "検証メールを再送しました。"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "タイトル"
|
msgstr "タイトル"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "スラグ"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "スラグは必要です。"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "タグ"
|
msgstr "タグ"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "スラグ"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "スラグは必要です。"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "自己紹介"
|
msgstr "自己紹介"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "URL"
|
msgstr "URL"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "そのスラグを持つエントリは、このユーザーは既に存在します。"
|
msgstr "そのスラグを持つエントリは、このユーザーは既に存在します。"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "あなたは、他のユーザーのメディアを編集しています。ご注意ください。"
|
msgstr "あなたは、他のユーザーのメディアを編集しています。ご注意ください。"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "あなたは、他のユーザーのプロファイルを編集しています。ご注意ください。"
|
msgstr "あなたは、他のユーザーのプロファイルを編集しています。ご注意ください。"
|
||||||
|
|
||||||
@ -125,6 +124,10 @@ msgstr ""
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "ファイル"
|
msgstr "ファイル"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "ファイルを提供する必要があります。"
|
msgstr "ファイルを提供する必要があります。"
|
||||||
@ -183,6 +186,10 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -222,6 +229,53 @@ msgid ""
|
|||||||
" software!</a>)"
|
" software!</a>)"
|
||||||
msgstr ""
|
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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -234,6 +288,14 @@ msgstr "まだアカウントを持っていませんか?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "ここで作成!"
|
msgstr "ここで作成!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "アカウントを作成!"
|
msgstr "アカウントを作成!"
|
||||||
@ -264,12 +326,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "%(media_title)sを編集中"
|
msgstr "%(media_title)sを編集中"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "キャンセル"
|
msgstr "キャンセル"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "投稿する"
|
msgstr "投稿する"
|
||||||
|
|
||||||
@ -305,10 +367,8 @@ msgstr "申し訳ありませんが、そのユーザーは見つかりません
|
|||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -412,11 +472,23 @@ msgstr ""
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <mail@jefvanschendel.nl>, 2011.
|
# <mail@jefvanschendel.nl>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,55 +19,43 @@ msgstr ""
|
|||||||
"Language: nl\n"
|
"Language: nl\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Gebruikersnaam"
|
msgstr "Gebruikersnaam"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Wachtwoord"
|
msgstr "Wachtwoord"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Wachtwoorden moeten overeenkomen."
|
msgstr "Wachtwoorden moeten overeenkomen."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Bevestig wachtwoord"
|
msgstr "Bevestig wachtwoord"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "E-mail adres"
|
msgstr "E-mail adres"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Sorry, registratie is uitgeschakeld op deze instantie."
|
msgstr "Sorry, registratie is uitgeschakeld op deze instantie."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Sorry, er bestaat al een gebruiker met die naam."
|
msgstr "Sorry, er bestaat al een gebruiker met die naam."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Sorry, dat e-mailadres is al ingenomen."
|
msgstr "Sorry, dat e-mailadres is al ingenomen."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -74,50 +63,60 @@ msgstr ""
|
|||||||
"Uw e-mailadres is geverifieerd. U kunt nu inloggen, uw profiel bewerken, en "
|
"Uw e-mailadres is geverifieerd. U kunt nu inloggen, uw profiel bewerken, en "
|
||||||
"afbeeldingen toevoegen!"
|
"afbeeldingen toevoegen!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "De verificatie sleutel of gebruikers-ID is onjuist"
|
msgstr "De verificatie sleutel of gebruikers-ID is onjuist"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Verificatie e-mail opnieuw opgestuurd."
|
msgstr "Verificatie e-mail opnieuw opgestuurd."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Etiket"
|
msgstr "Etiket"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Bio"
|
msgstr "Bio"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Website"
|
msgstr "Website"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"U bent de media van een andere gebruiker aan het aanpassen. Ga voorzichtig "
|
"U bent de media van een andere gebruiker aan het aanpassen. Ga voorzichtig "
|
||||||
"te werk."
|
"te werk."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"U bent een gebruikersprofiel aan het aanpassen. Ga voorzichtig te werk."
|
"U bent een gebruikersprofiel aan het aanpassen. Ga voorzichtig te werk."
|
||||||
@ -130,6 +129,10 @@ msgstr ""
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Bestand"
|
msgstr "Bestand"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "U moet een bestand aangeven."
|
msgstr "U moet een bestand aangeven."
|
||||||
@ -188,6 +191,10 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -227,6 +234,53 @@ msgid ""
|
|||||||
" software!</a>)"
|
" software!</a>)"
|
||||||
msgstr ""
|
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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -239,6 +293,14 @@ msgstr "Heeft u nog geen account?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Maak er hier een!"
|
msgstr "Maak er hier een!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Maak een account aan!"
|
msgstr "Maak een account aan!"
|
||||||
@ -266,12 +328,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "%(media_title)s aanpassen"
|
msgstr "%(media_title)s aanpassen"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Annuleren"
|
msgstr "Annuleren"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Wijzigingen opslaan"
|
msgstr "Wijzigingen opslaan"
|
||||||
|
|
||||||
@ -307,10 +369,8 @@ msgstr "Sorry, die gebruiker kon niet worden gevonden."
|
|||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -418,11 +478,23 @@ msgstr ""
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Commentaar"
|
msgstr "Commentaar"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <odin.omdal@gmail.com>, 2011.
|
# <odin.omdal@gmail.com>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,55 +19,43 @@ msgstr ""
|
|||||||
"Language: nn_NO\n"
|
"Language: nn_NO\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Brukarnamn"
|
msgstr "Brukarnamn"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Passord"
|
msgstr "Passord"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Passorda må vera like."
|
msgstr "Passorda må vera like."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Gjenta passord"
|
msgstr "Gjenta passord"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "E-postadresse"
|
msgstr "E-postadresse"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Registrering er slege av. Orsak."
|
msgstr "Registrering er slege av. Orsak."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Ein konto med dette brukarnamnet finst allereide."
|
msgstr "Ein konto med dette brukarnamnet finst allereide."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Den epostadressa er allereide teken."
|
msgstr "Den epostadressa er allereide teken."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -74,48 +63,58 @@ msgstr ""
|
|||||||
"E-postadressa di, og dimed kontoen din er stadfesta. Du kan no logga inn, "
|
"E-postadressa di, og dimed kontoen din er stadfesta. Du kan no logga inn, "
|
||||||
"endra profilen din og lasta opp filer."
|
"endra profilen din og lasta opp filer."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "Stadfestingsnykelen eller brukar-ID-en din er feil."
|
msgstr "Stadfestingsnykelen eller brukar-ID-en din er feil."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Send ein ny stadfestingsepost."
|
msgstr "Send ein ny stadfestingsepost."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Tittel"
|
msgstr "Tittel"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Adressetittel"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "Adressetittelen kan ikkje vera tom"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Merkelappar"
|
msgstr "Merkelappar"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "Adressetittel"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "Adressetittelen kan ikkje vera tom"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Presentasjon"
|
msgstr "Presentasjon"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Heimeside"
|
msgstr "Heimeside"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "Eit innlegg med denne adressetittelen finst allereie."
|
msgstr "Eit innlegg med denne adressetittelen finst allereie."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "Ver forsiktig, du redigerer ein annan konto sitt innlegg."
|
msgstr "Ver forsiktig, du redigerer ein annan konto sitt innlegg."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Ver forsiktig, du redigerer ein annan konto sin profil."
|
msgstr "Ver forsiktig, du redigerer ein annan konto sin profil."
|
||||||
|
|
||||||
@ -127,6 +126,10 @@ msgstr "Ugyldig fil for mediatypen."
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fil"
|
msgstr "Fil"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Du må velja ei fil."
|
msgstr "Du må velja ei fil."
|
||||||
@ -186,6 +189,10 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr "Hei der mediaentusiast, MediaGoblin..."
|
msgstr "Hei der mediaentusiast, MediaGoblin..."
|
||||||
@ -232,6 +239,53 @@ msgstr ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjelpa med å forbetra"
|
"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjelpa med å forbetra"
|
||||||
" MediaGoblin</a>)"
|
" MediaGoblin</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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "Innlogging feila"
|
msgstr "Innlogging feila"
|
||||||
@ -244,6 +298,14 @@ msgstr "Har du ingen konto?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Lag ein!"
|
msgstr "Lag ein!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Lag ein konto."
|
msgstr "Lag ein konto."
|
||||||
@ -274,12 +336,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Redigerer %(media_title)s"
|
msgstr "Redigerer %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Avbryt"
|
msgstr "Avbryt"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Lagra"
|
msgstr "Lagra"
|
||||||
|
|
||||||
@ -315,10 +377,8 @@ msgstr "Fann ingen slik brukar"
|
|||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -424,11 +484,23 @@ msgstr " "
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "Atom-kjelde"
|
msgstr "Atom-kjelde"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Innspel"
|
msgstr "Innspel"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <snd.noise@gmail.com>, 2011.
|
# <snd.noise@gmail.com>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/mediagoblin/team/pt_BR/)\n"
|
"Language-Team: Portuguese (Brazilian) (http://www.transifex.net/projects/p/mediagoblin/team/pt_BR/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,55 +19,43 @@ msgstr ""
|
|||||||
"Language: pt_BR\n"
|
"Language: pt_BR\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n > 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Nome de Usuário"
|
msgstr "Nome de Usuário"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Senha"
|
msgstr "Senha"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Senhas devem ser iguais."
|
msgstr "Senhas devem ser iguais."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Confirmar senha"
|
msgstr "Confirmar senha"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Endereço de email"
|
msgstr "Endereço de email"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Desculpa, o registro está desativado neste momento."
|
msgstr "Desculpa, o registro está desativado neste momento."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Desculpe, um usuário com este nome já existe."
|
msgstr "Desculpe, um usuário com este nome já existe."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -74,48 +63,58 @@ msgstr ""
|
|||||||
"O seu endereço de e-mail foi verificado. Você pode agora fazer login, editar"
|
"O seu endereço de e-mail foi verificado. Você pode agora fazer login, editar"
|
||||||
" seu perfil, e enviar imagens!"
|
" seu perfil, e enviar imagens!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "A chave de verificação ou nome usuário estão incorretos."
|
msgstr "A chave de verificação ou nome usuário estão incorretos."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "O email de verificação foi reenviado."
|
msgstr "O email de verificação foi reenviado."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Título"
|
msgstr "Título"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Tags"
|
msgstr "Tags"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Biográfia"
|
msgstr "Biográfia"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Website"
|
msgstr "Website"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -127,6 +126,10 @@ msgstr ""
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Arquivo"
|
msgstr "Arquivo"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Você deve fornecer um arquivo."
|
msgstr "Você deve fornecer um arquivo."
|
||||||
@ -185,6 +188,10 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -224,6 +231,53 @@ msgid ""
|
|||||||
" software!</a>)"
|
" software!</a>)"
|
||||||
msgstr ""
|
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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -236,6 +290,14 @@ msgstr "Ainda não tem conta?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Crie uma aqui!"
|
msgstr "Crie uma aqui!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Criar uma conta!"
|
msgstr "Criar uma conta!"
|
||||||
@ -266,12 +328,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Editando %(media_title)s"
|
msgstr "Editando %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Cancelar"
|
msgstr "Cancelar"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Salvar mudanças"
|
msgstr "Salvar mudanças"
|
||||||
|
|
||||||
@ -307,10 +369,8 @@ msgstr "Desculpe, tal usuário não encontrado."
|
|||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -416,11 +476,23 @@ msgstr ""
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <gapop@hotmail.com>, 2011.
|
# <gapop@hotmail.com>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,107 +19,109 @@ msgstr ""
|
|||||||
"Language: ro\n"
|
"Language: ro\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
|
"Plural-Forms: nplurals=3; plural=(n==1?0:(((n%100>19)||((n%100==0)&&(n!=0)))?2:1))\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Nume de utilizator"
|
msgstr "Nume de utilizator"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Parolă"
|
msgstr "Parolă"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Parolele trebuie să fie identice."
|
msgstr "Parolele trebuie să fie identice."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Reintroduceți parola"
|
msgstr "Reintrodu parola"
|
||||||
|
|
||||||
|
#: mediagoblin/auth/forms.py:39
|
||||||
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
|
msgstr "Introdu parola din nou pentru verificare."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Adresa de e-mail"
|
msgstr "Adresa de e-mail"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Ne pare rău, dar înscrierile sunt dezactivate pe această instanță."
|
msgstr "Ne pare rău, dar înscrierile sunt dezactivate pe acest server."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Ne pare rău, există deja un utilizator cu același nume."
|
msgstr "Ne pare rău, există deja un utilizator cu același nume."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Ne pare rău, această adresă de e-mail este deja rezervată."
|
msgstr "Ne pare rău, această adresă de e-mail este deja rezervată."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Adresa dvs. de e-mail a fost confirmată. Puteți să vă autentificați, să vă "
|
"Adresa ta de e-mail a fost confirmată. Poți să te autentifici, să îți "
|
||||||
"modificați profilul și să trimiteți imagini!"
|
"completezi profilul și să trimiți imagini!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "Cheie de verificare sau user ID incorect."
|
msgstr "Cheie de verificare sau user ID incorect."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "E-mail-ul de verificare a fost retrimis."
|
msgstr "E-mail-ul de verificare a fost retrimis."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
"E-mailul pentru recuperarea parolei nu a putut fi trimis deoarece contul tău"
|
||||||
|
" e inactiv sau adresa ta de e-mail nu a fost confirmată."
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titlu"
|
msgstr "Titlu"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Identificator"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "Identificatorul nu poate să lipsească"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Etichete"
|
msgstr "Etichete"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "Identificator"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "Identificatorul nu poate să lipsească"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
"Partea din adresa acestui fișier corespunzătoare titlului. De regulă nu "
|
||||||
|
"trebuie modificată."
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Biografie"
|
msgstr "Biografie"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Sit Web"
|
msgstr "Sit Web"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Există deja un entry cu același identificator pentru acest utilizator."
|
"Există deja un entry cu același identificator pentru acest utilizator."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "Editați fișierul unui alt utilizator. Se recomandă prudență."
|
msgstr "Editezi fișierul unui alt utilizator. Se recomandă prudență."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Editați profilul unui utilizator. Se recomandă prudență."
|
msgstr "Editezi profilul unui utilizator. Se recomandă prudență."
|
||||||
|
|
||||||
#: mediagoblin/process_media/errors.py:44
|
#: mediagoblin/process_media/errors.py:44
|
||||||
msgid "Invalid file given for media type."
|
msgid "Invalid file given for media type."
|
||||||
@ -128,9 +131,13 @@ msgstr "Formatul fișierului nu corespunde cu tipul de media selectat."
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fișier"
|
msgstr "Fișier"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr "Descrierea acestui fișier"
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Trebuie să selectați un fișier."
|
msgstr "Trebuie să selectezi un fișier."
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:50
|
#: mediagoblin/submit/views.py:50
|
||||||
msgid "The file doesn't seem to be an image!"
|
msgid "The file doesn't seem to be an image!"
|
||||||
@ -153,8 +160,8 @@ msgid ""
|
|||||||
"If you're sure the address is correct, maybe the page you're looking for has"
|
"If you're sure the address is correct, maybe the page you're looking for has"
|
||||||
" been moved or deleted."
|
" been moved or deleted."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dacă sunteți sigur că adresa este coresctă, poate că pagina pe care o "
|
"Dacă ești sigur că adresa este corectă, poate că pagina pe care o cauți a "
|
||||||
"căutați a fost mutată sau ștearsă."
|
"fost mutată sau ștearsă."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:32
|
#: mediagoblin/templates/mediagoblin/404.html:32
|
||||||
msgid "Image of 404 goblin stressing out"
|
msgid "Image of 404 goblin stressing out"
|
||||||
@ -170,11 +177,11 @@ msgstr "logo MediaGoblin"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:52
|
#: mediagoblin/templates/mediagoblin/base.html:52
|
||||||
msgid "Submit media"
|
msgid "Submit media"
|
||||||
msgstr "Transmiteți un fișier media"
|
msgstr "Transmite un fișier media"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:63
|
#: mediagoblin/templates/mediagoblin/base.html:63
|
||||||
msgid "verify your email!"
|
msgid "verify your email!"
|
||||||
msgstr "verificați e-mail-ul!"
|
msgstr "verifică e-mail-ul!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/base.html:73
|
#: mediagoblin/templates/mediagoblin/base.html:73
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:26
|
#: mediagoblin/templates/mediagoblin/auth/login.html:26
|
||||||
@ -187,6 +194,12 @@ msgid ""
|
|||||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Construit cu <a href=\"http://mediagoblin.org\">MediaGoblin</a>, un proiect "
|
||||||
|
"<a href=\"http://gnu.org/\">GNU</a>"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr "Explorează"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
@ -225,7 +238,7 @@ msgid ""
|
|||||||
" including video support!)"
|
" including video support!)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Proiectat să fie extensibil. (Software-ul va avea în curând suport pentru "
|
"Proiectat să fie extensibil. (Software-ul va avea în curând suport pentru "
|
||||||
"multiple formate de media, inclusiv pentru video!)"
|
"mai multe formate de media, inclusiv pentru video!)"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -237,21 +250,83 @@ msgstr ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">Ne poți ajuta să îmbunătățim"
|
"href=\"http://mediagoblin.org/pages/join.html\">Ne poți ajuta să îmbunătățim"
|
||||||
" acest software!</a>)"
|
" acest software!</a>)"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:38
|
||||||
|
msgid "Excited to join us?"
|
||||||
|
msgstr "Vrei să ni te alături?"
|
||||||
|
|
||||||
|
#: 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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr "Cele mai recente fișiere"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr "Introdu noua parolă"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
msgstr "Introdu numele de utilizator sau adresa de e-mail"
|
||||||
|
|
||||||
|
#: 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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
"Bună, %(username)s\n"
|
||||||
|
"\n"
|
||||||
|
"Pentru a modifica parola ta la GNU MediaGoblin, accesează adresa următoare:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"Dacă ai primit acest mesaj din greșeală, ignoră-l și fii mai departe un elf fericit!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "Autentificare eșuată!"
|
msgstr "Autentificare eșuată!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
#: mediagoblin/templates/mediagoblin/auth/login.html:42
|
||||||
msgid "Don't have an account yet?"
|
msgid "Don't have an account yet?"
|
||||||
msgstr "Nu aveți un cont?"
|
msgstr "Nu ai un cont?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
#: mediagoblin/templates/mediagoblin/auth/login.html:45
|
||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Creați-l aici!"
|
msgstr "Creează-l aici!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr "Ai uitat parola?"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr "Schimb-o!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Creați un cont!"
|
msgstr "Creează un cont!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
#: mediagoblin/templates/mediagoblin/auth/register.html:30
|
||||||
msgid "Create"
|
msgid "Create"
|
||||||
@ -269,7 +344,7 @@ msgid ""
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
"Bună, %(username)s,\n"
|
"Bună, %(username)s,\n"
|
||||||
"\n"
|
"\n"
|
||||||
"pentru activarea contului tău GNU MediaGoblin, accesează adresa următoare:\n"
|
"pentru activarea contului tău la GNU MediaGoblin, accesează adresa următoare:\n"
|
||||||
"\n"
|
"\n"
|
||||||
"%(verification_url)s"
|
"%(verification_url)s"
|
||||||
|
|
||||||
@ -279,12 +354,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Editare %(media_title)s"
|
msgstr "Editare %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Anulare"
|
msgstr "Anulare"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Salvează modificările"
|
msgstr "Salvează modificările"
|
||||||
|
|
||||||
@ -318,13 +393,11 @@ msgstr "Ne pare rău, nu am găsit utilizatorul căutat."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "Sigur dorești să ștergi %(title)s?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
msgstr "Șterge definitiv"
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
msgid "Media processing panel"
|
msgid "Media processing panel"
|
||||||
@ -350,7 +423,7 @@ msgstr "Aceste fișiere nu au putut fi procesate:"
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||||
msgid "Email verification needed"
|
msgid "Email verification needed"
|
||||||
msgstr "Este necesară verificarea adresei de e-mail"
|
msgstr "Este necesară confirmarea adresei de e-mail"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||||
msgid "Almost done! Your account still needs to be activated."
|
msgid "Almost done! Your account still needs to be activated."
|
||||||
@ -359,11 +432,11 @@ msgstr "Aproape gata! Mai trebuie doar să activezi contul."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||||
msgid ""
|
msgid ""
|
||||||
"An email should arrive in a few moments with instructions on how to do so."
|
"An email should arrive in a few moments with instructions on how to do so."
|
||||||
msgstr "Veți primi în scurt timp un mesaj prin e-mail cu instrucțiuni."
|
msgstr "Vei primi în scurt timp un mesaj prin e-mail cu instrucțiuni."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:51
|
||||||
msgid "In case it doesn't:"
|
msgid "In case it doesn't:"
|
||||||
msgstr "Dacă nu primiți mesajul:"
|
msgstr "Dacă nu primești mesajul:"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||||
msgid "Resend verification email"
|
msgid "Resend verification email"
|
||||||
@ -383,9 +456,8 @@ msgid ""
|
|||||||
"If you are that person but you've lost your verification email, you can <a "
|
"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."
|
"href=\"%(login_url)s\">log in</a> and resend it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Dacă dvs. sunteți persoana respectivă și nu mai aveți e-mail-ul de "
|
"Dacă tu ești persoana respectivă și nu mai ai e-mail-ul de verificare, poți "
|
||||||
"verificare, puteți să vă <a href=\"%(login_url)s\">autentificați</a> pentru "
|
"să te <a href=\"%(login_url)s\">autentifici</a> pentru a-l retrimite."
|
||||||
"a-l retrimite."
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -408,7 +480,7 @@ msgstr "Acest utilizator nu și-a completat (încă) profilul."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:122
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "View all of %(username)s's media"
|
msgid "View all of %(username)s's media"
|
||||||
msgstr "Toate fișierele media ale lui %(username)s"
|
msgstr "Vezi toate fișierele media ale lui %(username)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:135
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -434,12 +506,26 @@ msgstr "icon feed"
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "feed Atom"
|
msgstr "feed Atom"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr "Mai noi"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr "Mai vechi"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Scrie un comentariu"
|
msgstr "Scrie un comentariu"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr "Sunt sigur că doresc să șterg"
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Urmează să ștergi fișierele media ale unui alt utilizator. Se recomandă "
|
||||||
|
"prudență."
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <deletesoftware@yandex.ru>, 2011.
|
# <deletesoftware@yandex.ru>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,55 +19,43 @@ msgstr ""
|
|||||||
"Language: ru\n"
|
"Language: ru\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Логин"
|
msgstr "Логин"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Пароль"
|
msgstr "Пароль"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Пароли должны совпадать."
|
msgstr "Пароли должны совпадать."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Подтвердите пароль"
|
msgstr "Подтвердите пароль"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr "Наберите его ещё раз здесь, чтобы избежать опечаток."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "Адрес электронной почты"
|
msgstr "Адрес электронной почты"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Извините, на этом разделе регистрация запрещена."
|
msgstr "Извините, на этом разделе регистрация запрещена."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Извините, пользователь с этим именем уже зарегистрирован."
|
msgstr "Извините, пользователь с этим именем уже зарегистрирован."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Извините, этот адрес электнонной почты уже занят."
|
msgstr "Извините, этот адрес электронной почты уже занят."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -74,49 +63,61 @@ msgstr ""
|
|||||||
"Адрес вашей электронной потвержден. Вы теперь можете войти и начать "
|
"Адрес вашей электронной потвержден. Вы теперь можете войти и начать "
|
||||||
"редактировать свой профиль и загружать новые изображения!"
|
"редактировать свой профиль и загружать новые изображения!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "Неверный ключ проверки или идентификатор пользователя"
|
msgstr "Неверный ключ проверки или идентификатор пользователя"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Переслать сообщение с подтверждением аккаунта."
|
msgstr "Переслать сообщение с подтверждением аккаунта."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Название"
|
msgstr "Название"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Отличительная часть адреса"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "Отличительная часть адреса необходима"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Метки"
|
msgstr "Метки"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
msgid "Bio"
|
msgid "Slug"
|
||||||
msgstr "Биограаия"
|
msgstr "Отличительная часть адреса"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "Отличительная часть адреса необходима"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
"Часть адреса этого файла, производная от его названия. Её обычно не нужно "
|
||||||
|
"изменять."
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
|
msgid "Bio"
|
||||||
|
msgstr "Биография"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Сайт"
|
msgstr "Сайт"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"У этого пользователя уже есть файл с такой отличительной частью адреса."
|
"У этого пользователя уже есть файл с такой отличительной частью адреса."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "Вы редактируете файлы другого пользователя. Будьте осторожны."
|
msgstr "Вы редактируете файлы другого пользователя. Будьте осторожны."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Вы редактируете профиль пользователя. Будьте осторожны."
|
msgstr "Вы редактируете профиль пользователя. Будьте осторожны."
|
||||||
|
|
||||||
@ -128,6 +129,10 @@ msgstr "Неправильный формат файла."
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Файл"
|
msgstr "Файл"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr "Описание этого произведения"
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Вы должны загрузить файл."
|
msgstr "Вы должны загрузить файл."
|
||||||
@ -186,9 +191,13 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr "Привет, любитель мультимедиа! Mediagoblin это..."
|
msgstr "Привет, любитель мультимедиа! MediaGoblin…"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||||
msgid "The perfect place for your media!"
|
msgid "The perfect place for your media!"
|
||||||
@ -206,7 +215,7 @@ msgstr ""
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
"Free, as in freedom. (We’re a <a href=\"http://gnu.org\">GNU</a> project, "
|
||||||
"after all.)"
|
"after all.)"
|
||||||
msgstr ""
|
msgstr "Свободное ПО. (Мы же проект <a href=\"http://gnu.org\">GNU</a>.)"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:32
|
#: mediagoblin/templates/mediagoblin/root.html:32
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -221,6 +230,8 @@ msgid ""
|
|||||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||||
" including video support!)"
|
" including video support!)"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Рассчитан на расширяемость. (В программе скоро должна появиться поддержка "
|
||||||
|
"других видов мультимедиа, таких как видео!)"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -232,6 +243,53 @@ msgstr ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">Ты можешь помочь сделать это"
|
"href=\"http://mediagoblin.org/pages/join.html\">Ты можешь помочь сделать это"
|
||||||
" ПО лучше!</a>)"
|
" ПО лучше!</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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr "Самые новые файлы"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr "Введите свой новый пароль"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "Авторизация неуспешна!"
|
msgstr "Авторизация неуспешна!"
|
||||||
@ -244,6 +302,14 @@ msgstr "Ещё нету аккаунта?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Создайте здесь!"
|
msgstr "Создайте здесь!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr "Забыли свой пароль?"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr "Смените его!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Создать аккаунт!"
|
msgstr "Создать аккаунт!"
|
||||||
@ -274,12 +340,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Редактирование %(media_title)s"
|
msgstr "Редактирование %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Отменить"
|
msgstr "Отменить"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Сохранить изменения"
|
msgstr "Сохранить изменения"
|
||||||
|
|
||||||
@ -303,7 +369,7 @@ msgstr "Подтвердить"
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||||
msgstr ""
|
msgstr "Файлы пользователя <a href=\"%(user_url)s\">%(username)s</a>"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||||
@ -313,13 +379,11 @@ msgstr "Извините, но такой пользователь не найд
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "Действительно удалить %(title)s?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
msgstr "Удалить безвозвратно"
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
msgid "Media processing panel"
|
msgid "Media processing panel"
|
||||||
@ -346,11 +410,11 @@ msgstr "Обработка этих файлов вызвала ошибку:"
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:39
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:59
|
||||||
msgid "Email verification needed"
|
msgid "Email verification needed"
|
||||||
msgstr "Нужно подтверджение почтового адреса"
|
msgstr "Нужно подтверждение почтового адреса"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||||
msgid "Almost done! Your account still needs to be activated."
|
msgid "Almost done! Your account still needs to be activated."
|
||||||
msgstr "Почти закончили! Теперь надо активизировать ваш аккаунт."
|
msgstr "Почти закончили! Теперь надо активировать ваш аккаунт."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -365,13 +429,13 @@ msgstr "А если нет, то:"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:54
|
||||||
msgid "Resend verification email"
|
msgid "Resend verification email"
|
||||||
msgstr "Повторно отправить подверждение на адрес электнонной почты"
|
msgstr "Повторно отправить подверждение на адрес электронной почты"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:62
|
||||||
msgid ""
|
msgid ""
|
||||||
"Someone has registered an account with this username, but it still has to be"
|
"Someone has registered an account with this username, but it still has to be"
|
||||||
" activated."
|
" activated."
|
||||||
msgstr "Кто-то создал аккаунт с этим именем, но его еще надо активизировать."
|
msgstr "Кто‐то создал аккаунт с этим именем, но его еще надо активировать."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:68
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -379,8 +443,8 @@ msgid ""
|
|||||||
"If you are that person but you've lost your verification email, you can <a "
|
"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."
|
"href=\"%(login_url)s\">log in</a> and resend it."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Если это были вы, и если вы потеряли сообщение с подтвердлением аккаунта, то"
|
"Если это были вы, и если вы потеряли сообщение для подтверждения аккаунта, "
|
||||||
" вы можете <a href=\"%(login_url)s\">войти</a> и отпраыить его повторно."
|
"то вы можете <a href=\"%(login_url)s\">войти</a> и отправить его повторно."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:78
|
||||||
#, python-format
|
#, python-format
|
||||||
@ -409,7 +473,7 @@ msgstr "Смотреть все файлы %(username)s"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"This is where your media will appear, but you don't seem to have added "
|
"This is where your media will appear, but you don't seem to have added "
|
||||||
"anything yet."
|
"anything yet."
|
||||||
msgstr "Ваши файлы появятся здесь, кодга вы их добавите."
|
msgstr "Ваши файлы появятся здесь, когда вы их добавите."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||||
msgid "Add media"
|
msgid "Add media"
|
||||||
@ -417,22 +481,34 @@ msgstr "Добавить файлы"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||||
msgid "There doesn't seem to be any media here yet..."
|
msgid "There doesn't seem to be any media here yet..."
|
||||||
msgstr "Пока что тут файлов нет..."
|
msgstr "Пока что тут файлов нет…"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||||
msgid "feed icon"
|
msgid "feed icon"
|
||||||
msgstr ""
|
msgstr "значок ленты"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:23
|
||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "лента в формате Atom"
|
msgstr "лента в формате Atom"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr "Более новые"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr "Более старые"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Комментарий"
|
msgstr "Комментарий"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr "Я уверен, что хочу удалить это"
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr "Вы на пороге удаления файла другого пользователя. Будьте осторожны."
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# Jure Repinc <jlp@holodeck1.com>, 2011.
|
# Jure Repinc <jlp@holodeck1.com>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,55 +19,43 @@ msgstr ""
|
|||||||
"Language: sl\n"
|
"Language: sl\n"
|
||||||
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
|
"Plural-Forms: nplurals=4; plural=(n%100==1 ? 0 : n%100==2 ? 1 : n%100==3 || n%100==4 ? 2 : 3)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Uporabniško ime"
|
msgstr "Uporabniško ime"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Geslo"
|
msgstr "Geslo"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Gesli morata biti enaki."
|
msgstr "Gesli morata biti enaki."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Potrdite geslo"
|
msgstr "Potrdite geslo"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "E-poštni naslov"
|
msgstr "E-poštni naslov"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Oprostite, prijava za ta izvod ni omogočena."
|
msgstr "Oprostite, prijava za ta izvod ni omogočena."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "Oprostite, uporabnik s tem imenom že obstaja."
|
msgstr "Oprostite, uporabnik s tem imenom že obstaja."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Oprostite, ta e-poštni naslov je že v uporabi."
|
msgstr "Oprostite, ta e-poštni naslov je že v uporabi."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -74,48 +63,58 @@ msgstr ""
|
|||||||
"Vaš e-poštni naslov je bil potrjen. Sedaj se lahko prijavite, uredite svoj "
|
"Vaš e-poštni naslov je bil potrjen. Sedaj se lahko prijavite, uredite svoj "
|
||||||
"profil in pošljete slike."
|
"profil in pošljete slike."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "Potrditveni ključ ali uporabniška identifikacija je napačna"
|
msgstr "Potrditveni ključ ali uporabniška identifikacija je napačna"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Ponovno pošiljanje potrditvene e-pošte."
|
msgstr "Ponovno pošiljanje potrditvene e-pošte."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Naslov"
|
msgstr "Naslov"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Oznaka"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "Oznaka ne sme biti prazna"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Oznake"
|
msgstr "Oznake"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "Oznaka"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "Oznaka ne sme biti prazna"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Biografija"
|
msgstr "Biografija"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Spletna stran"
|
msgstr "Spletna stran"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "Vnos s to oznako za tega uporabnika že obstaja."
|
msgstr "Vnos s to oznako za tega uporabnika že obstaja."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "Urejate vsebino drugega uporabnika. Nadaljujte pazljivo."
|
msgstr "Urejate vsebino drugega uporabnika. Nadaljujte pazljivo."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Urejate uporabniški profil. Nadaljujte pazljivo."
|
msgstr "Urejate uporabniški profil. Nadaljujte pazljivo."
|
||||||
|
|
||||||
@ -127,6 +126,10 @@ msgstr "Za vrsto vsebine je bila podana napačna datoteka."
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Datoteka"
|
msgstr "Datoteka"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Podati morate datoteko."
|
msgstr "Podati morate datoteko."
|
||||||
@ -187,6 +190,10 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr "Pozdravljen, ljubitelj večpredstavnostnih vsebin! MediaGoblin je ..."
|
msgstr "Pozdravljen, ljubitelj večpredstavnostnih vsebin! MediaGoblin je ..."
|
||||||
@ -235,6 +242,53 @@ msgstr ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">Pri izboljševanju nam lahko "
|
"href=\"http://mediagoblin.org/pages/join.html\">Pri izboljševanju nam lahko "
|
||||||
"pomagate tudi vi.</a>)"
|
"pomagate tudi vi.</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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "Prijava ni uspela."
|
msgstr "Prijava ni uspela."
|
||||||
@ -247,6 +301,14 @@ msgstr "Še nimate računa?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Ustvarite si ga."
|
msgstr "Ustvarite si ga."
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Ustvarite račun."
|
msgstr "Ustvarite račun."
|
||||||
@ -278,12 +340,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Urejanje %(media_title)s"
|
msgstr "Urejanje %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Prekliči"
|
msgstr "Prekliči"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Shrani spremembe"
|
msgstr "Shrani spremembe"
|
||||||
|
|
||||||
@ -319,10 +381,8 @@ msgstr "Oprostite, tega uporabnika ni bilo moč najti."
|
|||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -430,11 +490,23 @@ msgstr "Ikona vira"
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "Ikona Atom"
|
msgstr "Ikona Atom"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Komentar"
|
msgstr "Komentar"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,12 +2,13 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: Serbian (http://www.transifex.net/projects/p/mediagoblin/team/sr/)\n"
|
"Language-Team: Serbian (http://www.transifex.net/projects/p/mediagoblin/team/sr/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -17,102 +18,100 @@ msgstr ""
|
|||||||
"Language: sr\n"
|
"Language: sr\n"
|
||||||
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
"Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -124,6 +123,10 @@ msgstr ""
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -182,6 +185,10 @@ msgid ""
|
|||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -221,6 +228,53 @@ msgid ""
|
|||||||
" software!</a>)"
|
" software!</a>)"
|
||||||
msgstr ""
|
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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -233,6 +287,14 @@ msgstr ""
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
@ -258,12 +320,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
@ -299,10 +361,8 @@ msgstr ""
|
|||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -406,11 +466,23 @@ msgstr ""
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,14 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <transifex@wandborg.se>, 2011.
|
# <transifex@wandborg.se>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: Swedish (http://www.transifex.net/projects/p/mediagoblin/team/sv/)\n"
|
"Language-Team: Swedish (http://www.transifex.net/projects/p/mediagoblin/team/sv/)\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,55 +19,43 @@ msgstr ""
|
|||||||
"Language: sv\n"
|
"Language: sv\n"
|
||||||
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
"Plural-Forms: nplurals=2; plural=(n != 1)\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "Användarnamn"
|
msgstr "Användarnamn"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "Lösenord"
|
msgstr "Lösenord"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "Lösenorden måste vara identiska."
|
msgstr "Lösenorden måste vara identiska."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "Bekräfta lösenord"
|
msgstr "Bekräfta lösenord"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr "Skriv in det igen för att undvika stavfel."
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "E-postadress"
|
msgstr "E-postadress"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "Vi beklagar, registreringen är avtängd på den här instansen."
|
msgstr "Vi beklagar, registreringen är avtängd på den här instansen."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "En användare med det användarnamnet finns redan."
|
msgstr "En användare med det användarnamnet finns redan."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "Den e-postadressen är redan tagen."
|
msgstr "Den e-postadressen är redan tagen."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
@ -74,48 +63,58 @@ msgstr ""
|
|||||||
"Din e-postadress är verifierad. Du kan nu logga in, redigera din profil och "
|
"Din e-postadress är verifierad. Du kan nu logga in, redigera din profil och "
|
||||||
"ladda upp filer!"
|
"ladda upp filer!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "Verifieringsnyckeln eller användar-IDt är fel."
|
msgstr "Verifieringsnyckeln eller användar-IDt är fel."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "Skickade ett nytt verifierings-email."
|
msgstr "Skickade ett nytt verifierings-email."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "Titel"
|
msgstr "Titel"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "Sökvägsnamn"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "Sökvägsnamnet kan inte vara tomt"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "Taggar"
|
msgstr "Taggar"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
|
msgid "Slug"
|
||||||
|
msgstr "Sökvägsnamn"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "Sökvägsnamnet kan inte vara tomt"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr "Sökvägstitlen för din media. Du brukar inte behöva ändra denna."
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
msgid "Bio"
|
msgid "Bio"
|
||||||
msgstr "Presentation"
|
msgstr "Presentation"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "Hemsida"
|
msgstr "Hemsida"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "Ett inlägg med det sökvägsnamnet existerar redan."
|
msgstr "Ett inlägg med det sökvägsnamnet existerar redan."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "Var försiktig, du redigerar någon annans inlägg."
|
msgstr "Var försiktig, du redigerar någon annans inlägg."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "Var försiktig, du redigerar en annan användares profil."
|
msgstr "Var försiktig, du redigerar en annan användares profil."
|
||||||
|
|
||||||
@ -127,6 +126,10 @@ msgstr "Ogiltig fil för mediatypen."
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "Fil"
|
msgstr "Fil"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr "Beskrivning av verket"
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "Du måste ange en fil"
|
msgstr "Du måste ange en fil"
|
||||||
@ -186,6 +189,12 @@ msgid ""
|
|||||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"Drivs av <a href=\"http://mediagoblin.org\">MediaGoblin</a>, ett <a "
|
||||||
|
"href=\"http://gnu.org/\">GNU</a>-projekt"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
@ -240,6 +249,53 @@ msgstr ""
|
|||||||
"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjälpa os forbättra "
|
"href=\"http://mediagoblin.org/pages/join.html\">Du kan hjälpa os forbättra "
|
||||||
"MediaGoblin!</a>)"
|
"MediaGoblin!</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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "Inloggning misslyckades!"
|
msgstr "Inloggning misslyckades!"
|
||||||
@ -252,6 +308,14 @@ msgstr "Har du inget konto?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "Skapa ett!"
|
msgstr "Skapa ett!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "Skapa ett konto!"
|
msgstr "Skapa ett konto!"
|
||||||
@ -282,12 +346,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "Redigerar %(media_title)s"
|
msgstr "Redigerar %(media_title)s"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "Avbryt"
|
msgstr "Avbryt"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "Spara"
|
msgstr "Spara"
|
||||||
|
|
||||||
@ -321,13 +385,11 @@ msgstr "Finns ingen sådan användare ännu."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "Vill du verkligen radera %(title)s?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
msgstr "Radera permanent"
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
msgid "Media processing panel"
|
msgid "Media processing panel"
|
||||||
@ -438,12 +500,24 @@ msgstr "feed-ikon"
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "Atom-feed"
|
msgstr "Atom-feed"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr "Nyare"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr "Äldre"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "Kommentar"
|
msgstr "Kommentar"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
|
msgid "I am sure I want to delete this"
|
||||||
|
msgstr "Jag är säker på att jag vill radera detta"
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
msgstr ""
|
msgstr "Du tänker radera en annan användares media. Var försiktig."
|
||||||
|
|
||||||
|
|
||||||
|
Binary file not shown.
@ -2,13 +2,15 @@
|
|||||||
# Copyright (C) 2011 ORGANIZATION
|
# Copyright (C) 2011 ORGANIZATION
|
||||||
# This file is distributed under the same license as the PROJECT project.
|
# This file is distributed under the same license as the PROJECT project.
|
||||||
#
|
#
|
||||||
|
# Translators:
|
||||||
# <chc@citi.sinica.edu.tw>, 2011.
|
# <chc@citi.sinica.edu.tw>, 2011.
|
||||||
|
# Harry Chen <harryhow@gmail.com>, 2011.
|
||||||
msgid ""
|
msgid ""
|
||||||
msgstr ""
|
msgstr ""
|
||||||
"Project-Id-Version: GNU MediaGoblin\n"
|
"Project-Id-Version: GNU MediaGoblin\n"
|
||||||
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
"Report-Msgid-Bugs-To: http://bugs.foocorp.net/projects/mediagoblin/issues\n"
|
||||||
"POT-Creation-Date: 2011-08-30 22:51-0500\n"
|
"POT-Creation-Date: 2011-09-25 20:26-0500\n"
|
||||||
"PO-Revision-Date: 2011-08-31 03:51+0000\n"
|
"PO-Revision-Date: 2011-09-26 01:25+0000\n"
|
||||||
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
"Last-Translator: cwebber <cwebber@dustycloud.org>\n"
|
||||||
"Language-Team: LANGUAGE <LL@li.org>\n"
|
"Language-Team: LANGUAGE <LL@li.org>\n"
|
||||||
"MIME-Version: 1.0\n"
|
"MIME-Version: 1.0\n"
|
||||||
@ -18,102 +20,100 @@ msgstr ""
|
|||||||
"Language: zh_TW\n"
|
"Language: zh_TW\n"
|
||||||
"Plural-Forms: nplurals=1; plural=0\n"
|
"Plural-Forms: nplurals=1; plural=0\n"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:24 mediagoblin/auth/forms.py:54
|
#: mediagoblin/auth/forms.py:25 mediagoblin/auth/forms.py:49
|
||||||
msgid "Username"
|
msgid "Username"
|
||||||
msgstr "使用者名稱"
|
msgstr "使用者名稱"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:28
|
#: mediagoblin/auth/forms.py:30 mediagoblin/auth/forms.py:53
|
||||||
msgid "This is the name other users will identify you with."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:31 mediagoblin/auth/forms.py:58
|
|
||||||
msgid "Password"
|
msgid "Password"
|
||||||
msgstr "密碼"
|
msgstr "密碼"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:36
|
#: mediagoblin/auth/forms.py:35
|
||||||
msgid "Passwords must match."
|
msgid "Passwords must match."
|
||||||
msgstr "密碼必須一致"
|
msgstr "密碼必須一致"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:37
|
#: mediagoblin/auth/forms.py:37
|
||||||
msgid "Try to use a strong password!"
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:40
|
|
||||||
msgid "Confirm password"
|
msgid "Confirm password"
|
||||||
msgstr "確認密碼"
|
msgstr "確認密碼"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:42
|
#: mediagoblin/auth/forms.py:39
|
||||||
msgid "Type it again here to make sure there are no spelling mistakes."
|
msgid "Type it again here to make sure there are no spelling mistakes."
|
||||||
msgstr ""
|
msgstr "再輸入一次,確定你沒有打錯字。"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:45
|
#: mediagoblin/auth/forms.py:42
|
||||||
msgid "Email address"
|
msgid "Email address"
|
||||||
msgstr "電子郵件位置"
|
msgstr "電子郵件位置"
|
||||||
|
|
||||||
#: mediagoblin/auth/forms.py:48
|
#: mediagoblin/auth/views.py:42
|
||||||
msgid "Your email will never be published."
|
|
||||||
msgstr ""
|
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:40
|
|
||||||
msgid "Sorry, registration is disabled on this instance."
|
msgid "Sorry, registration is disabled on this instance."
|
||||||
msgstr "抱歉, 這個項目已經被暫停註冊."
|
msgstr "抱歉, 這個項目已經被暫停註冊."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:58
|
#: mediagoblin/auth/views.py:60
|
||||||
msgid "Sorry, a user with that name already exists."
|
msgid "Sorry, a user with that name already exists."
|
||||||
msgstr "抱歉, 這個使用者名稱已經存在."
|
msgstr "抱歉, 這個使用者名稱已經存在."
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:62
|
#: mediagoblin/auth/views.py:64
|
||||||
msgid "Sorry, that email address has already been taken."
|
msgid "Sorry, that email address has already been taken."
|
||||||
msgstr "抱歉,這個電子郵件已經被其他人使用了。"
|
msgstr "抱歉,這個電子郵件已經被其他人使用了。"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:160
|
#: mediagoblin/auth/views.py:165
|
||||||
msgid ""
|
msgid ""
|
||||||
"Your email address has been verified. You may now login, edit your profile, "
|
"Your email address has been verified. You may now login, edit your profile, "
|
||||||
"and submit images!"
|
"and submit images!"
|
||||||
msgstr "你的電子郵件位址已被認證. 你現在就可以登入, 編輯你的個人檔案而且遞交照片!"
|
msgstr "你的電子郵件位址已被認證. 你現在就可以登入, 編輯你的個人檔案而且遞交照片!"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:166
|
#: mediagoblin/auth/views.py:171
|
||||||
msgid "The verification key or user id is incorrect"
|
msgid "The verification key or user id is incorrect"
|
||||||
msgstr "認證碼或是使用者帳號錯誤"
|
msgstr "認證碼或是使用者帳號錯誤"
|
||||||
|
|
||||||
#: mediagoblin/auth/views.py:187
|
#: mediagoblin/auth/views.py:192
|
||||||
#: mediagoblin/templates/mediagoblin/auth/resent_verification_email.html:22
|
|
||||||
msgid "Resent your verification email."
|
msgid "Resent your verification email."
|
||||||
msgstr "重送認證信."
|
msgstr "重送認證信."
|
||||||
|
|
||||||
|
#: mediagoblin/auth/views.py:228
|
||||||
|
msgid ""
|
||||||
|
"Could not send password recovery email as your username is inactive or your "
|
||||||
|
"account's email address has not been verified."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
#: mediagoblin/edit/forms.py:26 mediagoblin/submit/forms.py:27
|
||||||
msgid "Title"
|
msgid "Title"
|
||||||
msgstr "稱謂"
|
msgstr "標題"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:29
|
#: mediagoblin/edit/forms.py:30 mediagoblin/submit/forms.py:32
|
||||||
msgid "Slug"
|
|
||||||
msgstr "自訂字串"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:30
|
|
||||||
msgid "The slug can't be empty"
|
|
||||||
msgstr "自訂字串不能空白"
|
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:33 mediagoblin/submit/forms.py:31
|
|
||||||
msgid "Tags"
|
msgid "Tags"
|
||||||
msgstr "標籤"
|
msgstr "標籤"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:38
|
#: mediagoblin/edit/forms.py:33
|
||||||
msgid "Bio"
|
msgid "Slug"
|
||||||
msgstr "自傳"
|
msgstr "自訂字串"
|
||||||
|
|
||||||
#: mediagoblin/edit/forms.py:41
|
#: mediagoblin/edit/forms.py:34
|
||||||
|
msgid "The slug can't be empty"
|
||||||
|
msgstr "自訂字串不能空白"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:35
|
||||||
|
msgid ""
|
||||||
|
"The title part of this media's URL. You usually don't need to change this."
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:42
|
||||||
|
msgid "Bio"
|
||||||
|
msgstr "自我介紹"
|
||||||
|
|
||||||
|
#: mediagoblin/edit/forms.py:45
|
||||||
msgid "Website"
|
msgid "Website"
|
||||||
msgstr "網站"
|
msgstr "網站"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:66
|
#: mediagoblin/edit/views.py:63
|
||||||
msgid "An entry with that slug already exists for this user."
|
msgid "An entry with that slug already exists for this user."
|
||||||
msgstr "這個自訂字串已經被其他人用了"
|
msgstr "這個自訂字串已經被其他人用了"
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:95
|
#: mediagoblin/edit/views.py:84
|
||||||
msgid "You are editing another user's media. Proceed with caution."
|
msgid "You are editing another user's media. Proceed with caution."
|
||||||
msgstr "你正在編輯他人的媒體檔案. 請謹慎處理."
|
msgstr "你正在編輯他人的媒體檔案. 請謹慎處理."
|
||||||
|
|
||||||
#: mediagoblin/edit/views.py:166
|
#: mediagoblin/edit/views.py:154
|
||||||
msgid "You are editing a user's profile. Proceed with caution."
|
msgid "You are editing a user's profile. Proceed with caution."
|
||||||
msgstr "你正在編輯一位用戶的檔案. 請謹慎處理."
|
msgstr "你正在編輯一位用戶的檔案. 請謹慎處理."
|
||||||
|
|
||||||
@ -125,6 +125,10 @@ msgstr "指定錯誤的媒體類別!"
|
|||||||
msgid "File"
|
msgid "File"
|
||||||
msgstr "檔案"
|
msgstr "檔案"
|
||||||
|
|
||||||
|
#: mediagoblin/submit/forms.py:30
|
||||||
|
msgid "Description of this work"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/submit/views.py:47
|
#: mediagoblin/submit/views.py:47
|
||||||
msgid "You must provide a file."
|
msgid "You must provide a file."
|
||||||
msgstr "你必須提供一個檔案"
|
msgstr "你必須提供一個檔案"
|
||||||
@ -135,7 +139,7 @@ msgstr "檔案似乎不是一個圖片喔!"
|
|||||||
|
|
||||||
#: mediagoblin/submit/views.py:122
|
#: mediagoblin/submit/views.py:122
|
||||||
msgid "Woohoo! Submitted!"
|
msgid "Woohoo! Submitted!"
|
||||||
msgstr "呼嚕! 送出去了!"
|
msgstr "呼呼! 送出去嚕!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/404.html:21
|
#: mediagoblin/templates/mediagoblin/404.html:21
|
||||||
msgid "Oops!"
|
msgid "Oops!"
|
||||||
@ -182,10 +186,16 @@ msgid ""
|
|||||||
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
"Powered by <a href=\"http://mediagoblin.org\">MediaGoblin</a>, a <a "
|
||||||
"href=\"http://gnu.org/\">GNU</a> project"
|
"href=\"http://gnu.org/\">GNU</a> project"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
"由 <a href=\"http://mediagoblin.org\">MediaGoblin</a>製作, 它是一個 <a "
|
||||||
|
"href=\"http://gnu.org/\">GNU</a> 專案"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:24
|
||||||
|
msgid "Explore"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:27
|
#: mediagoblin/templates/mediagoblin/root.html:27
|
||||||
msgid "Hi there, media lover! MediaGoblin is..."
|
msgid "Hi there, media lover! MediaGoblin is..."
|
||||||
msgstr "嗨!媒體愛好者!MediaGoblin是..."
|
msgstr "嗨!多媒體檔案愛好者!MediaGoblin是..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:29
|
#: mediagoblin/templates/mediagoblin/root.html:29
|
||||||
msgid "The perfect place for your media!"
|
msgid "The perfect place for your media!"
|
||||||
@ -195,7 +205,7 @@ msgstr "你的媒體檔案的最佳所在!"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"A place for people to collaborate and show off original and derived "
|
"A place for people to collaborate and show off original and derived "
|
||||||
"creations!"
|
"creations!"
|
||||||
msgstr "這是一個地方,可以讓人們協同且展示他們的創作或是衍生作品!"
|
msgstr "這是一個可以讓人們共同展示他們的創作、衍生作品的地方!"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:31
|
#: mediagoblin/templates/mediagoblin/root.html:31
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -207,13 +217,13 @@ msgstr "免費但是我們更重視自由 (畢竟我們是個 <a href=\"http://g
|
|||||||
msgid ""
|
msgid ""
|
||||||
"Aiming to make the world a better place through decentralization and "
|
"Aiming to make the world a better place through decentralization and "
|
||||||
"(eventually, coming soon!) federation!"
|
"(eventually, coming soon!) federation!"
|
||||||
msgstr "目的是要透過分散式且自由的方式讓這個世界更美好!(終究,很快就會到來的!)"
|
msgstr "目的是要透過分散式且自由的方式讓這個世界更美好!(總有一天,它很快會到來的!)"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:33
|
#: mediagoblin/templates/mediagoblin/root.html:33
|
||||||
msgid ""
|
msgid ""
|
||||||
"Built for extensibility. (Multiple media types coming soon to the software,"
|
"Built for extensibility. (Multiple media types coming soon to the software,"
|
||||||
" including video support!)"
|
" including video support!)"
|
||||||
msgstr "天生的擴充性. (軟體將支援多種多媒體格式, 也支援影音檔案!)"
|
msgstr "天生的擴充性。(軟體將支援多種多媒體格式, 也支援影音檔案!)"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/root.html:34
|
#: mediagoblin/templates/mediagoblin/root.html:34
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -224,6 +234,53 @@ msgstr ""
|
|||||||
"由像你一樣的人們製作 (<a "
|
"由像你一樣的人們製作 (<a "
|
||||||
"href=\"http://mediagoblin.org/pages/join.html\">你可以幫我們改進軟體!</a>)"
|
"href=\"http://mediagoblin.org/pages/join.html\">你可以幫我們改進軟體!</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>"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/root.html:53
|
||||||
|
msgid "Most recent media"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/change_fp.html:27
|
||||||
|
msgid "Enter your new password"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/forgot_password.html:27
|
||||||
|
msgid "Enter your username or email"
|
||||||
|
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/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/fp_verification_email.txt:19
|
||||||
|
#, python-format
|
||||||
|
msgid ""
|
||||||
|
"Hi %(username)s,\n"
|
||||||
|
"\n"
|
||||||
|
"to change your GNU MediaGoblin password, open the following URL in \n"
|
||||||
|
"your web browser:\n"
|
||||||
|
"\n"
|
||||||
|
"%(verification_url)s\n"
|
||||||
|
"\n"
|
||||||
|
"If you think this is an error, just ignore this email and continue being\n"
|
||||||
|
"a happy goblin!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
#: mediagoblin/templates/mediagoblin/auth/login.html:29
|
||||||
msgid "Logging in failed!"
|
msgid "Logging in failed!"
|
||||||
msgstr "登入失敗!"
|
msgstr "登入失敗!"
|
||||||
@ -236,6 +293,14 @@ msgstr "還沒有帳號嗎?"
|
|||||||
msgid "Create one here!"
|
msgid "Create one here!"
|
||||||
msgstr "在這裡建立一個吧!"
|
msgstr "在這裡建立一個吧!"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:48
|
||||||
|
msgid "Forgot your password?"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/auth/login.html:51
|
||||||
|
msgid "Change it!"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
#: mediagoblin/templates/mediagoblin/auth/register.html:27
|
||||||
msgid "Create an account!"
|
msgid "Create an account!"
|
||||||
msgstr "建立一個帳號!"
|
msgstr "建立一個帳號!"
|
||||||
@ -266,12 +331,12 @@ msgid "Editing %(media_title)s"
|
|||||||
msgstr "編輯 %(media_title)s 中"
|
msgstr "編輯 %(media_title)s 中"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:36
|
||||||
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:49
|
||||||
msgid "Cancel"
|
msgid "Cancel"
|
||||||
msgstr "取消"
|
msgstr "取消"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
#: mediagoblin/templates/mediagoblin/edit/edit.html:37
|
||||||
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
#: mediagoblin/templates/mediagoblin/edit/edit_profile.html:35
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:44
|
|
||||||
msgid "Save changes"
|
msgid "Save changes"
|
||||||
msgstr "儲存變更"
|
msgstr "儲存變更"
|
||||||
|
|
||||||
@ -282,7 +347,7 @@ msgstr "編輯 %(username)s'的檔案中"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
#: mediagoblin/templates/mediagoblin/listings/tag.html:31
|
||||||
msgid "Media tagged with:"
|
msgid "Media tagged with:"
|
||||||
msgstr "媒體被標籤為:"
|
msgstr "媒體檔案被標籤為:"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
#: mediagoblin/templates/mediagoblin/submit/start.html:26
|
||||||
msgid "Submit yer media"
|
msgid "Submit yer media"
|
||||||
@ -295,7 +360,7 @@ msgstr "送出"
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:32
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
msgid "<a href=\"%(user_url)s\">%(username)s</a>'s media"
|
||||||
msgstr "<a href=\"%(user_url)s\">%(username)s</a>的媒體"
|
msgstr "<a href=\"%(user_url)s\">%(username)s</a>的媒體檔案"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
#: mediagoblin/templates/mediagoblin/user_pages/gallery.html:52
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:32
|
||||||
@ -305,12 +370,10 @@ msgstr "抱歉,找不到這個使用者."
|
|||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:30
|
||||||
#, python-format
|
#, python-format
|
||||||
msgid "Really delete %(title)s?"
|
msgid "Really delete %(title)s?"
|
||||||
msgstr ""
|
msgstr "真的要刪除 %(title)s?"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:36
|
#: mediagoblin/templates/mediagoblin/user_pages/media_confirm_delete.html:50
|
||||||
msgid ""
|
msgid "Delete Permanently"
|
||||||
"If you choose yes, the media entry will be deleted "
|
|
||||||
"<strong>permanently.</strong>"
|
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:22
|
||||||
@ -328,7 +391,7 @@ msgstr "媒體處理中"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:46
|
||||||
msgid "No media in-processing"
|
msgid "No media in-processing"
|
||||||
msgstr "沒有媒體正在處理"
|
msgstr "沒有正在處理中的媒體"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
#: mediagoblin/templates/mediagoblin/user_pages/processing_panel.html:50
|
||||||
msgid "These uploads failed to process:"
|
msgid "These uploads failed to process:"
|
||||||
@ -341,7 +404,7 @@ msgstr "需要認證電子郵件"
|
|||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:42
|
||||||
msgid "Almost done! Your account still needs to be activated."
|
msgid "Almost done! Your account still needs to be activated."
|
||||||
msgstr "幾乎完成了!你的帳號仍然需要被啟用。"
|
msgstr "幾乎完成了!但你的帳號仍然需要被啟用。"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:47
|
||||||
msgid ""
|
msgid ""
|
||||||
@ -396,15 +459,15 @@ msgstr "查看%(username)s的全部媒體檔案"
|
|||||||
msgid ""
|
msgid ""
|
||||||
"This is where your media will appear, but you don't seem to have added "
|
"This is where your media will appear, but you don't seem to have added "
|
||||||
"anything yet."
|
"anything yet."
|
||||||
msgstr "這個地方是你的媒體會出現的地方,但是你似乎還沒有加入東西。"
|
msgstr "這個地方是你的媒體檔案會出現的地方,但是你似乎還沒有加入任何東西。"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:141
|
||||||
msgid "Add media"
|
msgid "Add media"
|
||||||
msgstr "新增媒體"
|
msgstr "新增媒體檔案"
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
#: mediagoblin/templates/mediagoblin/user_pages/user.html:147
|
||||||
msgid "There doesn't seem to be any media here yet..."
|
msgid "There doesn't seem to be any media here yet..."
|
||||||
msgstr "似乎還沒有任何的媒體..."
|
msgstr "似乎還沒有任何的媒體檔案..."
|
||||||
|
|
||||||
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
#: mediagoblin/templates/mediagoblin/utils/feed_link.html:21
|
||||||
msgid "feed icon"
|
msgid "feed icon"
|
||||||
@ -414,12 +477,24 @@ msgstr "feed圖示"
|
|||||||
msgid "Atom feed"
|
msgid "Atom feed"
|
||||||
msgstr "Atom feed"
|
msgstr "Atom feed"
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:40
|
||||||
|
msgid "Newer"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/templates/mediagoblin/utils/pagination.html:46
|
||||||
|
msgid "Older"
|
||||||
|
msgstr ""
|
||||||
|
|
||||||
#: mediagoblin/user_pages/forms.py:24
|
#: mediagoblin/user_pages/forms.py:24
|
||||||
msgid "Comment"
|
msgid "Comment"
|
||||||
msgstr "評論"
|
msgstr "評論"
|
||||||
|
|
||||||
#: mediagoblin/user_pages/views.py:176
|
#: mediagoblin/user_pages/forms.py:30
|
||||||
msgid "You are about to delete another user's media. Proceed with caution."
|
msgid "I am sure I want to delete this"
|
||||||
msgstr ""
|
msgstr ""
|
||||||
|
|
||||||
|
#: mediagoblin/user_pages/views.py:175
|
||||||
|
msgid "You are about to delete another user's media. Proceed with caution."
|
||||||
|
msgstr "你在刪除其他人的媒體檔案。請小心處理喔。"
|
||||||
|
|
||||||
|
|
||||||
|
@ -14,7 +14,10 @@
|
|||||||
# You should have received a copy of the GNU Affero General Public License
|
# 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/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
|
from beaker.cache import CacheManager
|
||||||
|
from beaker.util import parse_cache_config_options
|
||||||
import jinja2
|
import jinja2
|
||||||
|
|
||||||
from mediagoblin import staticdirect
|
from mediagoblin import staticdirect
|
||||||
from mediagoblin.init.config import (
|
from mediagoblin.init.config import (
|
||||||
read_mediagoblin_config, generate_validation_report)
|
read_mediagoblin_config, generate_validation_report)
|
||||||
@ -135,3 +138,16 @@ def setup_workbench():
|
|||||||
workbench_manager = WorkbenchManager(app_config['workbench_path'])
|
workbench_manager = WorkbenchManager(app_config['workbench_path'])
|
||||||
|
|
||||||
setup_globals(workbench_manager = workbench_manager)
|
setup_globals(workbench_manager = workbench_manager)
|
||||||
|
|
||||||
|
|
||||||
|
def setup_beaker_cache():
|
||||||
|
"""
|
||||||
|
Setup the Beaker Cache manager.
|
||||||
|
"""
|
||||||
|
cache_config = mg_globals.global_config['beaker.cache']
|
||||||
|
cache_config = dict(
|
||||||
|
[(u'cache.%s' % key, value)
|
||||||
|
for key, value in cache_config.iteritems()])
|
||||||
|
cache = CacheManager(**parse_cache_config_options(cache_config))
|
||||||
|
setup_globals(cache=cache)
|
||||||
|
return cache
|
||||||
|
@ -31,6 +31,9 @@ db_connection = None
|
|||||||
# mongokit.Connection
|
# mongokit.Connection
|
||||||
database = None
|
database = None
|
||||||
|
|
||||||
|
# beaker's cache manager
|
||||||
|
cache = None
|
||||||
|
|
||||||
# should be the same as the
|
# should be the same as the
|
||||||
public_store = None
|
public_store = None
|
||||||
queue_store = None
|
queue_store = None
|
||||||
|
@ -16,7 +16,6 @@
|
|||||||
|
|
||||||
import Image
|
import Image
|
||||||
|
|
||||||
from contextlib import contextmanager
|
|
||||||
from celery.task import Task
|
from celery.task import Task
|
||||||
from celery import registry
|
from celery import registry
|
||||||
|
|
||||||
@ -36,14 +35,6 @@ def create_pub_filepath(entry, filename):
|
|||||||
filename])
|
filename])
|
||||||
|
|
||||||
|
|
||||||
@contextmanager
|
|
||||||
def closing(callback):
|
|
||||||
try:
|
|
||||||
yield callback
|
|
||||||
finally:
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
################################
|
################################
|
||||||
# Media processing initial steps
|
# Media processing initial steps
|
||||||
################################
|
################################
|
||||||
@ -66,7 +57,7 @@ class ProcessMedia(Task):
|
|||||||
except BaseProcessingFail, exc:
|
except BaseProcessingFail, exc:
|
||||||
mark_entry_failed(entry[u'_id'], exc)
|
mark_entry_failed(entry[u'_id'], exc)
|
||||||
return
|
return
|
||||||
|
|
||||||
entry['state'] = u'processed'
|
entry['state'] = u'processed'
|
||||||
entry.save()
|
entry.save()
|
||||||
|
|
||||||
@ -144,7 +135,7 @@ def process_image(entry):
|
|||||||
thumb_filepath = create_pub_filepath(entry, 'thumbnail.jpg')
|
thumb_filepath = create_pub_filepath(entry, 'thumbnail.jpg')
|
||||||
thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
|
thumb_file = mgg.public_store.get_file(thumb_filepath, 'w')
|
||||||
|
|
||||||
with closing(thumb_file):
|
with thumb_file:
|
||||||
thumb.save(thumb_file, "JPEG", quality=90)
|
thumb.save(thumb_file, "JPEG", quality=90)
|
||||||
|
|
||||||
# If the size of the original file exceeds the specified size of a `medium`
|
# If the size of the original file exceeds the specified size of a `medium`
|
||||||
@ -162,7 +153,7 @@ def process_image(entry):
|
|||||||
medium_filepath = create_pub_filepath(entry, 'medium.jpg')
|
medium_filepath = create_pub_filepath(entry, 'medium.jpg')
|
||||||
medium_file = mgg.public_store.get_file(medium_filepath, 'w')
|
medium_file = mgg.public_store.get_file(medium_filepath, 'w')
|
||||||
|
|
||||||
with closing(medium_file):
|
with medium_file:
|
||||||
medium.save(medium_file, "JPEG", quality=90)
|
medium.save(medium_file, "JPEG", quality=90)
|
||||||
medium_processed = True
|
medium_processed = True
|
||||||
|
|
||||||
@ -172,8 +163,8 @@ def process_image(entry):
|
|||||||
|
|
||||||
with queued_file:
|
with queued_file:
|
||||||
original_filepath = create_pub_filepath(entry, queued_filepath[-1])
|
original_filepath = create_pub_filepath(entry, queued_filepath[-1])
|
||||||
|
|
||||||
with closing(mgg.public_store.get_file(original_filepath, 'wb')) as original_file:
|
with mgg.public_store.get_file(original_filepath, 'wb') as original_file:
|
||||||
original_file.write(queued_file.read())
|
original_file.write(queued_file.read())
|
||||||
|
|
||||||
mgg.queue_store.delete_file(queued_filepath)
|
mgg.queue_store.delete_file(queued_filepath)
|
||||||
|
@ -4,25 +4,25 @@
|
|||||||
font-family: 'Lato';
|
font-family: 'Lato';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
src: local('Lato Bold'), local('Lato-Bold'), url('http://themes.googleusercontent.com/static/fonts/lato/v1/wkfQbvfT_02e2IWO3yYueQ.woff') format('woff');
|
src: local('Lato Bold'), local('Lato-Bold'), url('../fonts/Lato-Bold.ttf') format('truetype');
|
||||||
}
|
}
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Lato';
|
font-family: 'Lato';
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
src: local('Lato Italic'), local('Lato-Italic'), url('http://themes.googleusercontent.com/static/fonts/lato/v1/oUan5VrEkpzIazlUe5ieaA.woff') format('woff');
|
src: local('Lato Italic'), local('Lato-Italic'), url('../fonts/Lato-Italic.ttf') format('truetype');
|
||||||
}
|
}
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Lato';
|
font-family: 'Lato';
|
||||||
font-style: italic;
|
font-style: italic;
|
||||||
font-weight: 700;
|
font-weight: 700;
|
||||||
src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url('http://themes.googleusercontent.com/static/fonts/lato/v1/HkF_qI1x_noxlxhrhMQYED8E0i7KZn-EPnyo3HZu7kw.woff') format('woff');
|
src: local('Lato Bold Italic'), local('Lato-BoldItalic'), url('../fonts/Lato-BoldItalic.ttf') format('truetype');
|
||||||
}
|
}
|
||||||
@font-face {
|
@font-face {
|
||||||
font-family: 'Lato';
|
font-family: 'Lato';
|
||||||
font-style: normal;
|
font-style: normal;
|
||||||
font-weight: 400;
|
font-weight: 400;
|
||||||
src: local('Lato Regular'), local('Lato-Regular'), url('http://themes.googleusercontent.com/static/fonts/lato/v1/9k-RPmcnxYEPm8CNFsH2gg.woff') format('woff');
|
src: local('Lato Regular'), local('Lato-Regular'), url('../fonts/Lato-Regular.woff') format('truetype');
|
||||||
}
|
}
|
||||||
|
|
||||||
body {
|
body {
|
||||||
@ -141,7 +141,7 @@ background-image: -moz-linear-gradient(center top , rgb(134, 212, 177), rgb(109,
|
|||||||
|
|
||||||
/* common website elements */
|
/* common website elements */
|
||||||
|
|
||||||
.button {
|
.button, .cancel_link {
|
||||||
height: 32px;
|
height: 32px;
|
||||||
min-width: 99px;
|
min-width: 99px;
|
||||||
background-color: #86d4b1;
|
background-color: #86d4b1;
|
||||||
@ -165,6 +165,16 @@ background-image: -moz-linear-gradient(center top , rgb(134, 212, 177), rgb(109,
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
.cancel_link {
|
||||||
|
background-color: #aaa;
|
||||||
|
background-image: -webkit-gradient(linear, left top, left bottom, from(##D2D2D2), to(#aaa));
|
||||||
|
background-image: -webkit-linear-gradient(top, #D2D2D2, #aaa);
|
||||||
|
background-image: -moz-linear-gradient(top, #D2D2D2, #aaa);
|
||||||
|
background-image: -ms-linear-gradient(top, #D2D2D2, #aaa);
|
||||||
|
background-image: -o-linear-gradient(top, #D2D2D2, #aaa);
|
||||||
|
background-image: linear-gradient(top, #D2D2D2, #aaa);
|
||||||
|
}
|
||||||
|
|
||||||
.pagination{
|
.pagination{
|
||||||
text-align: center;
|
text-align: center;
|
||||||
}
|
}
|
||||||
@ -355,3 +365,11 @@ table.media_panel th {
|
|||||||
font-weight: bold;
|
font-weight: bold;
|
||||||
padding-bottom: 4px;
|
padding-bottom: 4px;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
/* Delete panel */
|
||||||
|
|
||||||
|
.delete_checkbox_box {
|
||||||
|
margin-top: 10px;
|
||||||
|
margin-left: 10px;
|
||||||
|
}
|
||||||
|
1
mediagoblin/static/fonts/Lato-Bold.ttf
Symbolic link
1
mediagoblin/static/fonts/Lato-Bold.ttf
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../extlib/lato/Lato-Bold.ttf
|
1
mediagoblin/static/fonts/Lato-BoldItalic.ttf
Symbolic link
1
mediagoblin/static/fonts/Lato-BoldItalic.ttf
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../extlib/lato/Lato-BoldItalic.ttf
|
1
mediagoblin/static/fonts/Lato-Italic.ttf
Symbolic link
1
mediagoblin/static/fonts/Lato-Italic.ttf
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../extlib/lato/Lato-Italic.ttf
|
1
mediagoblin/static/fonts/Lato-Regular.ttf
Symbolic link
1
mediagoblin/static/fonts/Lato-Regular.ttf
Symbolic link
@ -0,0 +1 @@
|
|||||||
|
../../../extlib/lato/Lato-Regular.ttf
|
@ -1,541 +0,0 @@
|
|||||||
# 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 os
|
|
||||||
import shutil
|
|
||||||
import urlparse
|
|
||||||
import uuid
|
|
||||||
import cloudfiles
|
|
||||||
import mimetypes
|
|
||||||
import tempfile
|
|
||||||
|
|
||||||
from werkzeug.utils import secure_filename
|
|
||||||
|
|
||||||
from mediagoblin import util
|
|
||||||
|
|
||||||
########
|
|
||||||
# Errors
|
|
||||||
########
|
|
||||||
|
|
||||||
|
|
||||||
class Error(Exception):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class InvalidFilepath(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class NoWebServing(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
class NotImplementedError(Error):
|
|
||||||
pass
|
|
||||||
|
|
||||||
|
|
||||||
###############################################
|
|
||||||
# Storage interface & basic file implementation
|
|
||||||
###############################################
|
|
||||||
|
|
||||||
class StorageInterface(object):
|
|
||||||
"""
|
|
||||||
Interface for the storage API.
|
|
||||||
|
|
||||||
This interface doesn't actually provide behavior, but it defines
|
|
||||||
what kind of storage patterns subclasses should provide.
|
|
||||||
|
|
||||||
It is important to note that the storage API idea of a "filepath"
|
|
||||||
is actually like ['dir1', 'dir2', 'file.jpg'], so keep that in
|
|
||||||
mind while reading method documentation.
|
|
||||||
|
|
||||||
You should set up your __init__ method with whatever keyword
|
|
||||||
arguments are appropriate to your storage system, but you should
|
|
||||||
also passively accept all extraneous keyword arguments like:
|
|
||||||
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
pass
|
|
||||||
|
|
||||||
See BasicFileStorage as a simple implementation of the
|
|
||||||
StorageInterface.
|
|
||||||
"""
|
|
||||||
|
|
||||||
# Whether this file store is on the local filesystem.
|
|
||||||
local_storage = False
|
|
||||||
|
|
||||||
def __raise_not_implemented(self):
|
|
||||||
"""
|
|
||||||
Raise a warning about some component not implemented by a
|
|
||||||
subclass of this interface.
|
|
||||||
"""
|
|
||||||
raise NotImplementedError(
|
|
||||||
"This feature not implemented in this storage API implementation.")
|
|
||||||
|
|
||||||
def file_exists(self, filepath):
|
|
||||||
"""
|
|
||||||
Return a boolean asserting whether or not file at filepath
|
|
||||||
exists in our storage system.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
True / False depending on whether file exists or not.
|
|
||||||
"""
|
|
||||||
# Subclasses should override this method.
|
|
||||||
self.__raise_not_implemented()
|
|
||||||
|
|
||||||
def get_file(self, filepath, mode='r'):
|
|
||||||
"""
|
|
||||||
Return a file-like object for reading/writing from this filepath.
|
|
||||||
|
|
||||||
Should create directories, buckets, whatever, as necessary.
|
|
||||||
"""
|
|
||||||
# Subclasses should override this method.
|
|
||||||
self.__raise_not_implemented()
|
|
||||||
|
|
||||||
def delete_file(self, filepath):
|
|
||||||
"""
|
|
||||||
Delete or dereference the file at filepath.
|
|
||||||
|
|
||||||
This might need to delete directories, buckets, whatever, for
|
|
||||||
cleanliness. (Be sure to avoid race conditions on that though)
|
|
||||||
"""
|
|
||||||
# Subclasses should override this method.
|
|
||||||
self.__raise_not_implemented()
|
|
||||||
|
|
||||||
def file_url(self, filepath):
|
|
||||||
"""
|
|
||||||
Get the URL for this file. This assumes our storage has been
|
|
||||||
mounted with some kind of URL which makes this possible.
|
|
||||||
"""
|
|
||||||
# Subclasses should override this method.
|
|
||||||
self.__raise_not_implemented()
|
|
||||||
|
|
||||||
def get_unique_filepath(self, filepath):
|
|
||||||
"""
|
|
||||||
If a filename at filepath already exists, generate a new name.
|
|
||||||
|
|
||||||
Eg, if the filename doesn't exist:
|
|
||||||
>>> storage_handler.get_unique_filename(['dir1', 'dir2', 'fname.jpg'])
|
|
||||||
[u'dir1', u'dir2', u'fname.jpg']
|
|
||||||
|
|
||||||
But if a file does exist, let's get one back with at uuid tacked on:
|
|
||||||
>>> storage_handler.get_unique_filename(['dir1', 'dir2', 'fname.jpg'])
|
|
||||||
[u'dir1', u'dir2', u'd02c3571-dd62-4479-9d62-9e3012dada29-fname.jpg']
|
|
||||||
"""
|
|
||||||
# Make sure we have a clean filepath to start with, since
|
|
||||||
# we'll be possibly tacking on stuff to the filename.
|
|
||||||
filepath = clean_listy_filepath(filepath)
|
|
||||||
|
|
||||||
if self.file_exists(filepath):
|
|
||||||
return filepath[:-1] + ["%s-%s" % (uuid.uuid4(), filepath[-1])]
|
|
||||||
else:
|
|
||||||
return filepath
|
|
||||||
|
|
||||||
def get_local_path(self, filepath):
|
|
||||||
"""
|
|
||||||
If this is a local_storage implementation, give us a link to
|
|
||||||
the local filesystem reference to this file.
|
|
||||||
|
|
||||||
>>> storage_handler.get_local_path(['foo', 'bar', 'baz.jpg'])
|
|
||||||
u'/path/to/mounting/foo/bar/baz.jpg'
|
|
||||||
"""
|
|
||||||
# Subclasses should override this method, if applicable.
|
|
||||||
self.__raise_not_implemented()
|
|
||||||
|
|
||||||
def copy_locally(self, filepath, dest_path):
|
|
||||||
"""
|
|
||||||
Copy this file locally.
|
|
||||||
|
|
||||||
A basic working method for this is provided that should
|
|
||||||
function both for local_storage systems and remote storge
|
|
||||||
systems, but if more efficient systems for copying locally
|
|
||||||
apply to your system, override this method with something more
|
|
||||||
appropriate.
|
|
||||||
"""
|
|
||||||
if self.local_storage:
|
|
||||||
shutil.copy(
|
|
||||||
self.get_local_path(filepath), dest_path)
|
|
||||||
else:
|
|
||||||
with self.get_file(filepath, 'rb') as source_file:
|
|
||||||
with file(dest_path, 'wb') as dest_file:
|
|
||||||
dest_file.write(source_file.read())
|
|
||||||
|
|
||||||
|
|
||||||
class BasicFileStorage(StorageInterface):
|
|
||||||
"""
|
|
||||||
Basic local filesystem implementation of storage API
|
|
||||||
"""
|
|
||||||
|
|
||||||
local_storage = True
|
|
||||||
|
|
||||||
def __init__(self, base_dir, base_url=None, **kwargs):
|
|
||||||
"""
|
|
||||||
Keyword arguments:
|
|
||||||
- base_dir: Base directory things will be served out of. MUST
|
|
||||||
be an absolute path.
|
|
||||||
- base_url: URL files will be served from
|
|
||||||
"""
|
|
||||||
self.base_dir = base_dir
|
|
||||||
self.base_url = base_url
|
|
||||||
|
|
||||||
def _resolve_filepath(self, filepath):
|
|
||||||
"""
|
|
||||||
Transform the given filepath into a local filesystem filepath.
|
|
||||||
"""
|
|
||||||
return os.path.join(
|
|
||||||
self.base_dir, *clean_listy_filepath(filepath))
|
|
||||||
|
|
||||||
def file_exists(self, filepath):
|
|
||||||
return os.path.exists(self._resolve_filepath(filepath))
|
|
||||||
|
|
||||||
def get_file(self, filepath, mode='r'):
|
|
||||||
# Make directories if necessary
|
|
||||||
if len(filepath) > 1:
|
|
||||||
directory = self._resolve_filepath(filepath[:-1])
|
|
||||||
if not os.path.exists(directory):
|
|
||||||
os.makedirs(directory)
|
|
||||||
|
|
||||||
# Grab and return the file in the mode specified
|
|
||||||
return open(self._resolve_filepath(filepath), mode)
|
|
||||||
|
|
||||||
def delete_file(self, filepath):
|
|
||||||
# TODO: Also delete unused directories if empty (safely, with
|
|
||||||
# checks to avoid race conditions).
|
|
||||||
os.remove(self._resolve_filepath(filepath))
|
|
||||||
|
|
||||||
def file_url(self, filepath):
|
|
||||||
if not self.base_url:
|
|
||||||
raise NoWebServing(
|
|
||||||
"base_url not set, cannot provide file urls")
|
|
||||||
|
|
||||||
return urlparse.urljoin(
|
|
||||||
self.base_url,
|
|
||||||
'/'.join(clean_listy_filepath(filepath)))
|
|
||||||
|
|
||||||
def get_local_path(self, filepath):
|
|
||||||
return self._resolve_filepath(filepath)
|
|
||||||
|
|
||||||
|
|
||||||
# ----------------------------------------------------
|
|
||||||
# OpenStack/Rackspace Cloud's Swift/CloudFiles support
|
|
||||||
# ----------------------------------------------------
|
|
||||||
|
|
||||||
class CloudFilesStorage(StorageInterface):
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
self.param_container = kwargs.get('cloudfiles_container')
|
|
||||||
self.param_user = kwargs.get('cloudfiles_user')
|
|
||||||
self.param_api_key = kwargs.get('cloudfiles_api_key')
|
|
||||||
self.param_host = kwargs.get('cloudfiles_host')
|
|
||||||
self.param_use_servicenet = kwargs.get('cloudfiles_use_servicenet')
|
|
||||||
|
|
||||||
if not self.param_host:
|
|
||||||
print('No CloudFiles host URL specified, '
|
|
||||||
'defaulting to Rackspace US')
|
|
||||||
|
|
||||||
self.connection = cloudfiles.get_connection(
|
|
||||||
username=self.param_user,
|
|
||||||
api_key=self.param_api_key,
|
|
||||||
servicenet=True if self.param_use_servicenet == 'true' or \
|
|
||||||
self.param_use_servicenet == True else False)
|
|
||||||
|
|
||||||
if not self.param_container == \
|
|
||||||
self.connection.get_container(self.param_container):
|
|
||||||
self.container = self.connection.create_container(
|
|
||||||
self.param_container)
|
|
||||||
self.container.make_public(
|
|
||||||
ttl=60 * 60 * 2)
|
|
||||||
else:
|
|
||||||
self.container = self.connection.get_container(
|
|
||||||
self.param_container)
|
|
||||||
|
|
||||||
self.container_uri = self.container.public_uri()
|
|
||||||
|
|
||||||
def _resolve_filepath(self, filepath):
|
|
||||||
return '/'.join(
|
|
||||||
clean_listy_filepath(filepath))
|
|
||||||
|
|
||||||
def file_exists(self, filepath):
|
|
||||||
try:
|
|
||||||
object = self.container.get_object(
|
|
||||||
self._resolve_filepath(filepath))
|
|
||||||
return True
|
|
||||||
except cloudfiles.errors.NoSuchObject:
|
|
||||||
return False
|
|
||||||
|
|
||||||
def get_file(self, filepath, *args, **kwargs):
|
|
||||||
"""
|
|
||||||
- Doesn't care about the "mode" argument
|
|
||||||
"""
|
|
||||||
try:
|
|
||||||
obj = self.container.get_object(
|
|
||||||
self._resolve_filepath(filepath))
|
|
||||||
except cloudfiles.errors.NoSuchObject:
|
|
||||||
obj = self.container.create_object(
|
|
||||||
self._resolve_filepath(filepath))
|
|
||||||
|
|
||||||
mimetype = mimetypes.guess_type(
|
|
||||||
filepath[-1])
|
|
||||||
|
|
||||||
if mimetype:
|
|
||||||
obj.content_type = mimetype[0]
|
|
||||||
|
|
||||||
return StorageObjectWrapper(obj, *args, **kwargs)
|
|
||||||
|
|
||||||
def delete_file(self, filepath):
|
|
||||||
# TODO: Also delete unused directories if empty (safely, with
|
|
||||||
# checks to avoid race conditions).
|
|
||||||
self.container.delete_object(
|
|
||||||
self._resolve_filepath(filepath))
|
|
||||||
|
|
||||||
def file_url(self, filepath):
|
|
||||||
return '/'.join([
|
|
||||||
self.container_uri,
|
|
||||||
self._resolve_filepath(filepath)])
|
|
||||||
|
|
||||||
|
|
||||||
class StorageObjectWrapper():
|
|
||||||
"""
|
|
||||||
Wrapper for python-cloudfiles's cloudfiles.storage_object.Object
|
|
||||||
used to circumvent the mystic `medium.jpg` corruption issue, where
|
|
||||||
we had both python-cloudfiles and PIL doing buffering on both
|
|
||||||
ends and that breaking things.
|
|
||||||
|
|
||||||
This wrapper currently meets mediagoblin's needs for a public_store
|
|
||||||
file-like object.
|
|
||||||
"""
|
|
||||||
def __init__(self, storage_object, *args, **kwargs):
|
|
||||||
self.storage_object = storage_object
|
|
||||||
|
|
||||||
def read(self, *args, **kwargs):
|
|
||||||
return self.storage_object.read(*args, **kwargs)
|
|
||||||
|
|
||||||
def write(self, data, *args, **kwargs):
|
|
||||||
if self.storage_object.size and type(data) == str:
|
|
||||||
data = self.read() + data
|
|
||||||
|
|
||||||
self.storage_object.write(data, *args, **kwargs)
|
|
||||||
|
|
||||||
|
|
||||||
# ------------
|
|
||||||
# MountStorage
|
|
||||||
# ------------
|
|
||||||
|
|
||||||
class MountStorage(StorageInterface):
|
|
||||||
"""
|
|
||||||
Experimental "Mount" virtual Storage Interface
|
|
||||||
|
|
||||||
This isn't an interface to some real storage, instead it's a
|
|
||||||
redirecting interface, that redirects requests to other
|
|
||||||
"StorageInterface"s.
|
|
||||||
|
|
||||||
For example, say you have the paths:
|
|
||||||
|
|
||||||
1. ['user_data', 'cwebber', 'avatar.jpg']
|
|
||||||
2. ['user_data', 'elrond', 'avatar.jpg']
|
|
||||||
3. ['media_entries', '34352f304c3f4d0ad8ad0f043522b6f2', 'thumb.jpg']
|
|
||||||
|
|
||||||
You could mount media_entries under CloudFileStorage and user_data
|
|
||||||
under BasicFileStorage. Then 1 would be passed to
|
|
||||||
BasicFileStorage under the path ['cwebber', 'avatar.jpg'] and 3
|
|
||||||
would be passed to CloudFileStorage under
|
|
||||||
['34352f304c3f4d0ad8ad0f043522b6f2', 'thumb.jpg'].
|
|
||||||
|
|
||||||
In other words, this is kind of like mounting /home/ and /etc/
|
|
||||||
under different filesystems on your operating system... but with
|
|
||||||
mediagoblin filestorages :)
|
|
||||||
|
|
||||||
To set this up, you currently need to call the mount() method with
|
|
||||||
the target path and a backend, that shall be available under that
|
|
||||||
target path. You have to mount things in a sensible order,
|
|
||||||
especially you can't mount ["a", "b"] before ["a"].
|
|
||||||
"""
|
|
||||||
def __init__(self, **kwargs):
|
|
||||||
self.mounttab = {}
|
|
||||||
|
|
||||||
def mount(self, dirpath, backend):
|
|
||||||
"""
|
|
||||||
Mount a new backend under dirpath
|
|
||||||
"""
|
|
||||||
new_ent = clean_listy_filepath(dirpath)
|
|
||||||
|
|
||||||
print "Mounting:", repr(new_ent)
|
|
||||||
already, rem_1, table, rem_2 = self._resolve_to_backend(new_ent, True)
|
|
||||||
print "===", repr(already), repr(rem_1), repr(rem_2), len(table)
|
|
||||||
|
|
||||||
assert (len(rem_2) > 0) or (None not in table), \
|
|
||||||
"That path is already mounted"
|
|
||||||
assert (len(rem_2) > 0) or (len(table)==0), \
|
|
||||||
"A longer path is already mounted here"
|
|
||||||
|
|
||||||
for part in rem_2:
|
|
||||||
table[part] = {}
|
|
||||||
table = table[part]
|
|
||||||
table[None] = backend
|
|
||||||
|
|
||||||
def _resolve_to_backend(self, filepath, extra_info = False):
|
|
||||||
"""
|
|
||||||
extra_info = True is for internal use!
|
|
||||||
|
|
||||||
Normally, returns the backend and the filepath inside that backend.
|
|
||||||
|
|
||||||
With extra_info = True it returns the last directory node and the
|
|
||||||
remaining filepath from there in addition.
|
|
||||||
"""
|
|
||||||
table = self.mounttab
|
|
||||||
filepath = filepath[:]
|
|
||||||
res_fp = None
|
|
||||||
while True:
|
|
||||||
new_be = table.get(None)
|
|
||||||
if (new_be is not None) or res_fp is None:
|
|
||||||
res_be = new_be
|
|
||||||
res_fp = filepath[:]
|
|
||||||
res_extra = (table, filepath[:])
|
|
||||||
# print "... New res: %r, %r, %r" % (res_be, res_fp, res_extra)
|
|
||||||
if len(filepath) == 0:
|
|
||||||
break
|
|
||||||
query = filepath.pop(0)
|
|
||||||
entry = table.get(query)
|
|
||||||
if entry is not None:
|
|
||||||
table = entry
|
|
||||||
res_extra = (table, filepath[:])
|
|
||||||
else:
|
|
||||||
break
|
|
||||||
if extra_info:
|
|
||||||
return (res_be, res_fp) + res_extra
|
|
||||||
else:
|
|
||||||
return (res_be, res_fp)
|
|
||||||
|
|
||||||
def resolve_to_backend(self, filepath):
|
|
||||||
backend, filepath = self._resolve_to_backend(filepath)
|
|
||||||
if backend is None:
|
|
||||||
raise Error("Path not mounted")
|
|
||||||
return backend, filepath
|
|
||||||
|
|
||||||
def __repr__(self, table = None, indent = []):
|
|
||||||
res = []
|
|
||||||
if table is None:
|
|
||||||
res.append("MountStorage<")
|
|
||||||
table = self.mounttab
|
|
||||||
v = table.get(None)
|
|
||||||
if v:
|
|
||||||
res.append(" " * len(indent) + repr(indent) + ": " + repr(v))
|
|
||||||
for k, v in table.iteritems():
|
|
||||||
if k == None:
|
|
||||||
continue
|
|
||||||
res.append(" " * len(indent) + repr(k) + ":")
|
|
||||||
res += self.__repr__(v, indent + [k])
|
|
||||||
if table is self.mounttab:
|
|
||||||
res.append(">")
|
|
||||||
return "\n".join(res)
|
|
||||||
else:
|
|
||||||
return res
|
|
||||||
|
|
||||||
def file_exists(self, filepath):
|
|
||||||
backend, filepath = self.resolve_to_backend(filepath)
|
|
||||||
return backend.file_exists(filepath)
|
|
||||||
|
|
||||||
def get_file(self, filepath, mode='r'):
|
|
||||||
backend, filepath = self.resolve_to_backend(filepath)
|
|
||||||
return backend.get_file(filepath, mode)
|
|
||||||
|
|
||||||
def delete_file(self, filepath):
|
|
||||||
backend, filepath = self.resolve_to_backend(filepath)
|
|
||||||
return backend.delete_file(filepath)
|
|
||||||
|
|
||||||
def file_url(self, filepath):
|
|
||||||
backend, filepath = self.resolve_to_backend(filepath)
|
|
||||||
return backend.file_url(filepath)
|
|
||||||
|
|
||||||
def get_local_path(self, filepath):
|
|
||||||
backend, filepath = self.resolve_to_backend(filepath)
|
|
||||||
return backend.get_local_path(filepath)
|
|
||||||
|
|
||||||
def copy_locally(self, filepath, dest_path):
|
|
||||||
"""
|
|
||||||
Need to override copy_locally, because the local_storage
|
|
||||||
attribute is not correct.
|
|
||||||
"""
|
|
||||||
backend, filepath = self.resolve_to_backend(filepath)
|
|
||||||
backend.copy_locally(filepath, dest_path)
|
|
||||||
|
|
||||||
|
|
||||||
###########
|
|
||||||
# Utilities
|
|
||||||
###########
|
|
||||||
|
|
||||||
def clean_listy_filepath(listy_filepath):
|
|
||||||
"""
|
|
||||||
Take a listy filepath (like ['dir1', 'dir2', 'filename.jpg']) and
|
|
||||||
clean out any nastiness from it.
|
|
||||||
|
|
||||||
|
|
||||||
>>> clean_listy_filepath([u'/dir1/', u'foo/../nasty', u'linooks.jpg'])
|
|
||||||
[u'dir1', u'foo_.._nasty', u'linooks.jpg']
|
|
||||||
|
|
||||||
Args:
|
|
||||||
- listy_filepath: a list of filepath components, mediagoblin
|
|
||||||
storage API style.
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
A cleaned list of unicode objects.
|
|
||||||
"""
|
|
||||||
cleaned_filepath = [
|
|
||||||
unicode(secure_filename(filepath))
|
|
||||||
for filepath in listy_filepath]
|
|
||||||
|
|
||||||
if u'' in cleaned_filepath:
|
|
||||||
raise InvalidFilepath(
|
|
||||||
"A filename component could not be resolved into a usable name.")
|
|
||||||
|
|
||||||
return cleaned_filepath
|
|
||||||
|
|
||||||
|
|
||||||
def storage_system_from_config(config_section):
|
|
||||||
"""
|
|
||||||
Utility for setting up a storage system from a config section.
|
|
||||||
|
|
||||||
Note that a special argument may be passed in to
|
|
||||||
the config_section which is "storage_class" which will provide an
|
|
||||||
import path to a storage system. This defaults to
|
|
||||||
"mediagoblin.storage:BasicFileStorage" if otherwise undefined.
|
|
||||||
|
|
||||||
Arguments:
|
|
||||||
- config_section: dictionary of config parameters
|
|
||||||
|
|
||||||
Returns:
|
|
||||||
An instantiated storage system.
|
|
||||||
|
|
||||||
Example:
|
|
||||||
storage_system_from_config(
|
|
||||||
{'base_url': '/media/',
|
|
||||||
'base_dir': '/var/whatever/media/'})
|
|
||||||
|
|
||||||
Will return:
|
|
||||||
BasicFileStorage(
|
|
||||||
base_url='/media/',
|
|
||||||
base_dir='/var/whatever/media')
|
|
||||||
"""
|
|
||||||
# This construct is needed, because dict(config) does
|
|
||||||
# not replace the variables in the config items.
|
|
||||||
config_params = dict(config_section.iteritems())
|
|
||||||
|
|
||||||
if 'storage_class' in config_params:
|
|
||||||
storage_class = config_params['storage_class']
|
|
||||||
config_params.pop('storage_class')
|
|
||||||
else:
|
|
||||||
storage_class = "mediagoblin.storage:BasicFileStorage"
|
|
||||||
|
|
||||||
storage_class = util.import_component(storage_class)
|
|
||||||
return storage_class(**config_params)
|
|
240
mediagoblin/storage/__init__.py
Normal file
240
mediagoblin/storage/__init__.py
Normal file
@ -0,0 +1,240 @@
|
|||||||
|
# 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 os
|
||||||
|
import shutil
|
||||||
|
import urlparse
|
||||||
|
import uuid
|
||||||
|
|
||||||
|
from werkzeug.utils import secure_filename
|
||||||
|
|
||||||
|
from mediagoblin import util
|
||||||
|
|
||||||
|
########
|
||||||
|
# Errors
|
||||||
|
########
|
||||||
|
|
||||||
|
|
||||||
|
class Error(Exception):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class InvalidFilepath(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class NoWebServing(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
class NotImplementedError(Error):
|
||||||
|
pass
|
||||||
|
|
||||||
|
|
||||||
|
###############################################
|
||||||
|
# Storage interface & basic file implementation
|
||||||
|
###############################################
|
||||||
|
|
||||||
|
class StorageInterface(object):
|
||||||
|
"""
|
||||||
|
Interface for the storage API.
|
||||||
|
|
||||||
|
This interface doesn't actually provide behavior, but it defines
|
||||||
|
what kind of storage patterns subclasses should provide.
|
||||||
|
|
||||||
|
It is important to note that the storage API idea of a "filepath"
|
||||||
|
is actually like ['dir1', 'dir2', 'file.jpg'], so keep that in
|
||||||
|
mind while reading method documentation.
|
||||||
|
|
||||||
|
You should set up your __init__ method with whatever keyword
|
||||||
|
arguments are appropriate to your storage system, but you should
|
||||||
|
also passively accept all extraneous keyword arguments like:
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
pass
|
||||||
|
|
||||||
|
See BasicFileStorage as a simple implementation of the
|
||||||
|
StorageInterface.
|
||||||
|
"""
|
||||||
|
|
||||||
|
# Whether this file store is on the local filesystem.
|
||||||
|
local_storage = False
|
||||||
|
|
||||||
|
def __raise_not_implemented(self):
|
||||||
|
"""
|
||||||
|
Raise a warning about some component not implemented by a
|
||||||
|
subclass of this interface.
|
||||||
|
"""
|
||||||
|
raise NotImplementedError(
|
||||||
|
"This feature not implemented in this storage API implementation.")
|
||||||
|
|
||||||
|
def file_exists(self, filepath):
|
||||||
|
"""
|
||||||
|
Return a boolean asserting whether or not file at filepath
|
||||||
|
exists in our storage system.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
True / False depending on whether file exists or not.
|
||||||
|
"""
|
||||||
|
# Subclasses should override this method.
|
||||||
|
self.__raise_not_implemented()
|
||||||
|
|
||||||
|
def get_file(self, filepath, mode='r'):
|
||||||
|
"""
|
||||||
|
Return a file-like object for reading/writing from this filepath.
|
||||||
|
|
||||||
|
Should create directories, buckets, whatever, as necessary.
|
||||||
|
"""
|
||||||
|
# Subclasses should override this method.
|
||||||
|
self.__raise_not_implemented()
|
||||||
|
|
||||||
|
def delete_file(self, filepath):
|
||||||
|
"""
|
||||||
|
Delete or dereference the file at filepath.
|
||||||
|
|
||||||
|
This might need to delete directories, buckets, whatever, for
|
||||||
|
cleanliness. (Be sure to avoid race conditions on that though)
|
||||||
|
"""
|
||||||
|
# Subclasses should override this method.
|
||||||
|
self.__raise_not_implemented()
|
||||||
|
|
||||||
|
def file_url(self, filepath):
|
||||||
|
"""
|
||||||
|
Get the URL for this file. This assumes our storage has been
|
||||||
|
mounted with some kind of URL which makes this possible.
|
||||||
|
"""
|
||||||
|
# Subclasses should override this method.
|
||||||
|
self.__raise_not_implemented()
|
||||||
|
|
||||||
|
def get_unique_filepath(self, filepath):
|
||||||
|
"""
|
||||||
|
If a filename at filepath already exists, generate a new name.
|
||||||
|
|
||||||
|
Eg, if the filename doesn't exist:
|
||||||
|
>>> storage_handler.get_unique_filename(['dir1', 'dir2', 'fname.jpg'])
|
||||||
|
[u'dir1', u'dir2', u'fname.jpg']
|
||||||
|
|
||||||
|
But if a file does exist, let's get one back with at uuid tacked on:
|
||||||
|
>>> storage_handler.get_unique_filename(['dir1', 'dir2', 'fname.jpg'])
|
||||||
|
[u'dir1', u'dir2', u'd02c3571-dd62-4479-9d62-9e3012dada29-fname.jpg']
|
||||||
|
"""
|
||||||
|
# Make sure we have a clean filepath to start with, since
|
||||||
|
# we'll be possibly tacking on stuff to the filename.
|
||||||
|
filepath = clean_listy_filepath(filepath)
|
||||||
|
|
||||||
|
if self.file_exists(filepath):
|
||||||
|
return filepath[:-1] + ["%s-%s" % (uuid.uuid4(), filepath[-1])]
|
||||||
|
else:
|
||||||
|
return filepath
|
||||||
|
|
||||||
|
def get_local_path(self, filepath):
|
||||||
|
"""
|
||||||
|
If this is a local_storage implementation, give us a link to
|
||||||
|
the local filesystem reference to this file.
|
||||||
|
|
||||||
|
>>> storage_handler.get_local_path(['foo', 'bar', 'baz.jpg'])
|
||||||
|
u'/path/to/mounting/foo/bar/baz.jpg'
|
||||||
|
"""
|
||||||
|
# Subclasses should override this method, if applicable.
|
||||||
|
self.__raise_not_implemented()
|
||||||
|
|
||||||
|
def copy_locally(self, filepath, dest_path):
|
||||||
|
"""
|
||||||
|
Copy this file locally.
|
||||||
|
|
||||||
|
A basic working method for this is provided that should
|
||||||
|
function both for local_storage systems and remote storge
|
||||||
|
systems, but if more efficient systems for copying locally
|
||||||
|
apply to your system, override this method with something more
|
||||||
|
appropriate.
|
||||||
|
"""
|
||||||
|
if self.local_storage:
|
||||||
|
shutil.copy(
|
||||||
|
self.get_local_path(filepath), dest_path)
|
||||||
|
else:
|
||||||
|
with self.get_file(filepath, 'rb') as source_file:
|
||||||
|
with file(dest_path, 'wb') as dest_file:
|
||||||
|
dest_file.write(source_file.read())
|
||||||
|
|
||||||
|
|
||||||
|
###########
|
||||||
|
# Utilities
|
||||||
|
###########
|
||||||
|
|
||||||
|
def clean_listy_filepath(listy_filepath):
|
||||||
|
"""
|
||||||
|
Take a listy filepath (like ['dir1', 'dir2', 'filename.jpg']) and
|
||||||
|
clean out any nastiness from it.
|
||||||
|
|
||||||
|
|
||||||
|
>>> clean_listy_filepath([u'/dir1/', u'foo/../nasty', u'linooks.jpg'])
|
||||||
|
[u'dir1', u'foo_.._nasty', u'linooks.jpg']
|
||||||
|
|
||||||
|
Args:
|
||||||
|
- listy_filepath: a list of filepath components, mediagoblin
|
||||||
|
storage API style.
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
A cleaned list of unicode objects.
|
||||||
|
"""
|
||||||
|
cleaned_filepath = [
|
||||||
|
unicode(secure_filename(filepath))
|
||||||
|
for filepath in listy_filepath]
|
||||||
|
|
||||||
|
if u'' in cleaned_filepath:
|
||||||
|
raise InvalidFilepath(
|
||||||
|
"A filename component could not be resolved into a usable name.")
|
||||||
|
|
||||||
|
return cleaned_filepath
|
||||||
|
|
||||||
|
|
||||||
|
def storage_system_from_config(config_section):
|
||||||
|
"""
|
||||||
|
Utility for setting up a storage system from a config section.
|
||||||
|
|
||||||
|
Note that a special argument may be passed in to
|
||||||
|
the config_section which is "storage_class" which will provide an
|
||||||
|
import path to a storage system. This defaults to
|
||||||
|
"mediagoblin.storage:BasicFileStorage" if otherwise undefined.
|
||||||
|
|
||||||
|
Arguments:
|
||||||
|
- config_section: dictionary of config parameters
|
||||||
|
|
||||||
|
Returns:
|
||||||
|
An instantiated storage system.
|
||||||
|
|
||||||
|
Example:
|
||||||
|
storage_system_from_config(
|
||||||
|
{'base_url': '/media/',
|
||||||
|
'base_dir': '/var/whatever/media/'})
|
||||||
|
|
||||||
|
Will return:
|
||||||
|
BasicFileStorage(
|
||||||
|
base_url='/media/',
|
||||||
|
base_dir='/var/whatever/media')
|
||||||
|
"""
|
||||||
|
# This construct is needed, because dict(config) does
|
||||||
|
# not replace the variables in the config items.
|
||||||
|
config_params = dict(config_section.iteritems())
|
||||||
|
|
||||||
|
if 'storage_class' in config_params:
|
||||||
|
storage_class = config_params['storage_class']
|
||||||
|
config_params.pop('storage_class')
|
||||||
|
else:
|
||||||
|
storage_class = 'mediagoblin.storage.filestorage:BasicFileStorage'
|
||||||
|
|
||||||
|
storage_class = util.import_component(storage_class)
|
||||||
|
return storage_class(**config_params)
|
156
mediagoblin/storage/cloudfiles.py
Normal file
156
mediagoblin/storage/cloudfiles.py
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
# 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/>.
|
||||||
|
|
||||||
|
'''
|
||||||
|
Make it so that ``import cloudfiles`` does not pick THIS file, but the
|
||||||
|
python-cloudfiles one.
|
||||||
|
|
||||||
|
http://docs.python.org/whatsnew/2.5.html#pep-328-absolute-and-relative-imports
|
||||||
|
'''
|
||||||
|
from __future__ import absolute_import
|
||||||
|
|
||||||
|
from mediagoblin.storage import StorageInterface, clean_listy_filepath
|
||||||
|
|
||||||
|
import cloudfiles
|
||||||
|
import mimetypes
|
||||||
|
|
||||||
|
class CloudFilesStorage(StorageInterface):
|
||||||
|
'''
|
||||||
|
OpenStack/Rackspace Cloud's Swift/CloudFiles support
|
||||||
|
'''
|
||||||
|
|
||||||
|
local_storage = False
|
||||||
|
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
self.param_container = kwargs.get('cloudfiles_container')
|
||||||
|
self.param_user = kwargs.get('cloudfiles_user')
|
||||||
|
self.param_api_key = kwargs.get('cloudfiles_api_key')
|
||||||
|
self.param_host = kwargs.get('cloudfiles_host')
|
||||||
|
self.param_use_servicenet = kwargs.get('cloudfiles_use_servicenet')
|
||||||
|
|
||||||
|
if not self.param_host:
|
||||||
|
print('No CloudFiles host URL specified, '
|
||||||
|
'defaulting to Rackspace US')
|
||||||
|
|
||||||
|
self.connection = cloudfiles.get_connection(
|
||||||
|
username=self.param_user,
|
||||||
|
api_key=self.param_api_key,
|
||||||
|
servicenet=True if self.param_use_servicenet == 'true' or \
|
||||||
|
self.param_use_servicenet == True else False)
|
||||||
|
|
||||||
|
if not self.param_container == \
|
||||||
|
self.connection.get_container(self.param_container):
|
||||||
|
self.container = self.connection.create_container(
|
||||||
|
self.param_container)
|
||||||
|
self.container.make_public(
|
||||||
|
ttl=60 * 60 * 2)
|
||||||
|
else:
|
||||||
|
self.container = self.connection.get_container(
|
||||||
|
self.param_container)
|
||||||
|
|
||||||
|
self.container_uri = self.container.public_uri()
|
||||||
|
|
||||||
|
def _resolve_filepath(self, filepath):
|
||||||
|
return '/'.join(
|
||||||
|
clean_listy_filepath(filepath))
|
||||||
|
|
||||||
|
def file_exists(self, filepath):
|
||||||
|
try:
|
||||||
|
object = self.container.get_object(
|
||||||
|
self._resolve_filepath(filepath))
|
||||||
|
return True
|
||||||
|
except cloudfiles.errors.NoSuchObject:
|
||||||
|
return False
|
||||||
|
|
||||||
|
def get_file(self, filepath, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
- Doesn't care about the "mode" argument
|
||||||
|
"""
|
||||||
|
try:
|
||||||
|
obj = self.container.get_object(
|
||||||
|
self._resolve_filepath(filepath))
|
||||||
|
except cloudfiles.errors.NoSuchObject:
|
||||||
|
obj = self.container.create_object(
|
||||||
|
self._resolve_filepath(filepath))
|
||||||
|
|
||||||
|
mimetype = mimetypes.guess_type(
|
||||||
|
filepath[-1])
|
||||||
|
|
||||||
|
if mimetype:
|
||||||
|
obj.content_type = mimetype[0]
|
||||||
|
|
||||||
|
return CloudFilesStorageObjectWrapper(obj, *args, **kwargs)
|
||||||
|
|
||||||
|
def delete_file(self, filepath):
|
||||||
|
# TODO: Also delete unused directories if empty (safely, with
|
||||||
|
# checks to avoid race conditions).
|
||||||
|
self.container.delete_object(
|
||||||
|
self._resolve_filepath(filepath))
|
||||||
|
|
||||||
|
def file_url(self, filepath):
|
||||||
|
return '/'.join([
|
||||||
|
self.container_uri,
|
||||||
|
self._resolve_filepath(filepath)])
|
||||||
|
|
||||||
|
|
||||||
|
class CloudFilesStorageObjectWrapper():
|
||||||
|
"""
|
||||||
|
Wrapper for python-cloudfiles's cloudfiles.storage_object.Object
|
||||||
|
used to circumvent the mystic `medium.jpg` corruption issue, where
|
||||||
|
we had both python-cloudfiles and PIL doing buffering on both
|
||||||
|
ends and that breaking things.
|
||||||
|
|
||||||
|
This wrapper currently meets mediagoblin's needs for a public_store
|
||||||
|
file-like object.
|
||||||
|
"""
|
||||||
|
def __init__(self, storage_object, *args, **kwargs):
|
||||||
|
self.storage_object = storage_object
|
||||||
|
|
||||||
|
def read(self, *args, **kwargs):
|
||||||
|
return self.storage_object.read(*args, **kwargs)
|
||||||
|
|
||||||
|
def write(self, data, *args, **kwargs):
|
||||||
|
"""
|
||||||
|
write data to the cloudfiles storage object
|
||||||
|
|
||||||
|
The original motivation for this wrapper is to ensure
|
||||||
|
that buffered writing to a cloudfiles storage object does not overwrite
|
||||||
|
any preexisting data.
|
||||||
|
|
||||||
|
Currently this method does not support any write modes except "append".
|
||||||
|
However if we should need it it would be easy implement.
|
||||||
|
"""
|
||||||
|
if self.storage_object.size and type(data) == str:
|
||||||
|
data = self.read() + data
|
||||||
|
|
||||||
|
self.storage_object.write(data, *args, **kwargs)
|
||||||
|
|
||||||
|
def close(self):
|
||||||
|
pass
|
||||||
|
|
||||||
|
def __enter__(self):
|
||||||
|
"""
|
||||||
|
Context Manager API implementation
|
||||||
|
http://docs.python.org/library/stdtypes.html#context-manager-types
|
||||||
|
"""
|
||||||
|
return self
|
||||||
|
|
||||||
|
def __exit__(self, *exc_info):
|
||||||
|
"""
|
||||||
|
Context Manger API implementation
|
||||||
|
see self.__enter__()
|
||||||
|
"""
|
||||||
|
self.close()
|
78
mediagoblin/storage/filestorage.py
Normal file
78
mediagoblin/storage/filestorage.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/>.
|
||||||
|
|
||||||
|
from mediagoblin.storage import (
|
||||||
|
StorageInterface,
|
||||||
|
clean_listy_filepath,
|
||||||
|
NoWebServing)
|
||||||
|
|
||||||
|
import os
|
||||||
|
import urlparse
|
||||||
|
|
||||||
|
|
||||||
|
class BasicFileStorage(StorageInterface):
|
||||||
|
"""
|
||||||
|
Basic local filesystem implementation of storage API
|
||||||
|
"""
|
||||||
|
|
||||||
|
local_storage = True
|
||||||
|
|
||||||
|
def __init__(self, base_dir, base_url=None, **kwargs):
|
||||||
|
"""
|
||||||
|
Keyword arguments:
|
||||||
|
- base_dir: Base directory things will be served out of. MUST
|
||||||
|
be an absolute path.
|
||||||
|
- base_url: URL files will be served from
|
||||||
|
"""
|
||||||
|
self.base_dir = base_dir
|
||||||
|
self.base_url = base_url
|
||||||
|
|
||||||
|
def _resolve_filepath(self, filepath):
|
||||||
|
"""
|
||||||
|
Transform the given filepath into a local filesystem filepath.
|
||||||
|
"""
|
||||||
|
return os.path.join(
|
||||||
|
self.base_dir, *clean_listy_filepath(filepath))
|
||||||
|
|
||||||
|
def file_exists(self, filepath):
|
||||||
|
return os.path.exists(self._resolve_filepath(filepath))
|
||||||
|
|
||||||
|
def get_file(self, filepath, mode='r'):
|
||||||
|
# Make directories if necessary
|
||||||
|
if len(filepath) > 1:
|
||||||
|
directory = self._resolve_filepath(filepath[:-1])
|
||||||
|
if not os.path.exists(directory):
|
||||||
|
os.makedirs(directory)
|
||||||
|
|
||||||
|
# Grab and return the file in the mode specified
|
||||||
|
return open(self._resolve_filepath(filepath), mode)
|
||||||
|
|
||||||
|
def delete_file(self, filepath):
|
||||||
|
# TODO: Also delete unused directories if empty (safely, with
|
||||||
|
# checks to avoid race conditions).
|
||||||
|
os.remove(self._resolve_filepath(filepath))
|
||||||
|
|
||||||
|
def file_url(self, filepath):
|
||||||
|
if not self.base_url:
|
||||||
|
raise NoWebServing(
|
||||||
|
"base_url not set, cannot provide file urls")
|
||||||
|
|
||||||
|
return urlparse.urljoin(
|
||||||
|
self.base_url,
|
||||||
|
'/'.join(clean_listy_filepath(filepath)))
|
||||||
|
|
||||||
|
def get_local_path(self, filepath):
|
||||||
|
return self._resolve_filepath(filepath)
|
156
mediagoblin/storage/mountstorage.py
Normal file
156
mediagoblin/storage/mountstorage.py
Normal file
@ -0,0 +1,156 @@
|
|||||||
|
# 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/>.
|
||||||
|
|
||||||
|
from medigoblin.storage import StorageInterface, clean_listy_filepath
|
||||||
|
|
||||||
|
|
||||||
|
class MountStorage(StorageInterface):
|
||||||
|
"""
|
||||||
|
Experimental "Mount" virtual Storage Interface
|
||||||
|
|
||||||
|
This isn't an interface to some real storage, instead it's a
|
||||||
|
redirecting interface, that redirects requests to other
|
||||||
|
"StorageInterface"s.
|
||||||
|
|
||||||
|
For example, say you have the paths:
|
||||||
|
|
||||||
|
1. ['user_data', 'cwebber', 'avatar.jpg']
|
||||||
|
2. ['user_data', 'elrond', 'avatar.jpg']
|
||||||
|
3. ['media_entries', '34352f304c3f4d0ad8ad0f043522b6f2', 'thumb.jpg']
|
||||||
|
|
||||||
|
You could mount media_entries under CloudFileStorage and user_data
|
||||||
|
under BasicFileStorage. Then 1 would be passed to
|
||||||
|
BasicFileStorage under the path ['cwebber', 'avatar.jpg'] and 3
|
||||||
|
would be passed to CloudFileStorage under
|
||||||
|
['34352f304c3f4d0ad8ad0f043522b6f2', 'thumb.jpg'].
|
||||||
|
|
||||||
|
In other words, this is kind of like mounting /home/ and /etc/
|
||||||
|
under different filesystems on your operating system... but with
|
||||||
|
mediagoblin filestorages :)
|
||||||
|
|
||||||
|
To set this up, you currently need to call the mount() method with
|
||||||
|
the target path and a backend, that shall be available under that
|
||||||
|
target path. You have to mount things in a sensible order,
|
||||||
|
especially you can't mount ["a", "b"] before ["a"].
|
||||||
|
"""
|
||||||
|
def __init__(self, **kwargs):
|
||||||
|
self.mounttab = {}
|
||||||
|
|
||||||
|
def mount(self, dirpath, backend):
|
||||||
|
"""
|
||||||
|
Mount a new backend under dirpath
|
||||||
|
"""
|
||||||
|
new_ent = clean_listy_filepath(dirpath)
|
||||||
|
|
||||||
|
print "Mounting:", repr(new_ent)
|
||||||
|
already, rem_1, table, rem_2 = self._resolve_to_backend(new_ent, True)
|
||||||
|
print "===", repr(already), repr(rem_1), repr(rem_2), len(table)
|
||||||
|
|
||||||
|
assert (len(rem_2) > 0) or (None not in table), \
|
||||||
|
"That path is already mounted"
|
||||||
|
assert (len(rem_2) > 0) or (len(table) == 0), \
|
||||||
|
"A longer path is already mounted here"
|
||||||
|
|
||||||
|
for part in rem_2:
|
||||||
|
table[part] = {}
|
||||||
|
table = table[part]
|
||||||
|
table[None] = backend
|
||||||
|
|
||||||
|
def _resolve_to_backend(self, filepath, extra_info=False):
|
||||||
|
"""
|
||||||
|
extra_info = True is for internal use!
|
||||||
|
|
||||||
|
Normally, returns the backend and the filepath inside that backend.
|
||||||
|
|
||||||
|
With extra_info = True it returns the last directory node and the
|
||||||
|
remaining filepath from there in addition.
|
||||||
|
"""
|
||||||
|
table = self.mounttab
|
||||||
|
filepath = filepath[:]
|
||||||
|
res_fp = None
|
||||||
|
while True:
|
||||||
|
new_be = table.get(None)
|
||||||
|
if (new_be is not None) or res_fp is None:
|
||||||
|
res_be = new_be
|
||||||
|
res_fp = filepath[:]
|
||||||
|
res_extra = (table, filepath[:])
|
||||||
|
# print "... New res: %r, %r, %r" % (res_be, res_fp, res_extra)
|
||||||
|
if len(filepath) == 0:
|
||||||
|
break
|
||||||
|
query = filepath.pop(0)
|
||||||
|
entry = table.get(query)
|
||||||
|
if entry is not None:
|
||||||
|
table = entry
|
||||||
|
res_extra = (table, filepath[:])
|
||||||
|
else:
|
||||||
|
break
|
||||||
|
if extra_info:
|
||||||
|
return (res_be, res_fp) + res_extra
|
||||||
|
else:
|
||||||
|
return (res_be, res_fp)
|
||||||
|
|
||||||
|
def resolve_to_backend(self, filepath):
|
||||||
|
backend, filepath = self._resolve_to_backend(filepath)
|
||||||
|
if backend is None:
|
||||||
|
raise Error("Path not mounted")
|
||||||
|
return backend, filepath
|
||||||
|
|
||||||
|
def __repr__(self, table=None, indent=[]):
|
||||||
|
res = []
|
||||||
|
if table is None:
|
||||||
|
res.append("MountStorage<")
|
||||||
|
table = self.mounttab
|
||||||
|
v = table.get(None)
|
||||||
|
if v:
|
||||||
|
res.append(" " * len(indent) + repr(indent) + ": " + repr(v))
|
||||||
|
for k, v in table.iteritems():
|
||||||
|
if k == None:
|
||||||
|
continue
|
||||||
|
res.append(" " * len(indent) + repr(k) + ":")
|
||||||
|
res += self.__repr__(v, indent + [k])
|
||||||
|
if table is self.mounttab:
|
||||||
|
res.append(">")
|
||||||
|
return "\n".join(res)
|
||||||
|
else:
|
||||||
|
return res
|
||||||
|
|
||||||
|
def file_exists(self, filepath):
|
||||||
|
backend, filepath = self.resolve_to_backend(filepath)
|
||||||
|
return backend.file_exists(filepath)
|
||||||
|
|
||||||
|
def get_file(self, filepath, mode='r'):
|
||||||
|
backend, filepath = self.resolve_to_backend(filepath)
|
||||||
|
return backend.get_file(filepath, mode)
|
||||||
|
|
||||||
|
def delete_file(self, filepath):
|
||||||
|
backend, filepath = self.resolve_to_backend(filepath)
|
||||||
|
return backend.delete_file(filepath)
|
||||||
|
|
||||||
|
def file_url(self, filepath):
|
||||||
|
backend, filepath = self.resolve_to_backend(filepath)
|
||||||
|
return backend.file_url(filepath)
|
||||||
|
|
||||||
|
def get_local_path(self, filepath):
|
||||||
|
backend, filepath = self.resolve_to_backend(filepath)
|
||||||
|
return backend.get_local_path(filepath)
|
||||||
|
|
||||||
|
def copy_locally(self, filepath, dest_path):
|
||||||
|
"""
|
||||||
|
Need to override copy_locally, because the local_storage
|
||||||
|
attribute is not correct.
|
||||||
|
"""
|
||||||
|
backend, filepath = self.resolve_to_backend(filepath)
|
||||||
|
backend.copy_locally(filepath, dest_path)
|
@ -26,7 +26,8 @@ class SubmitStartForm(wtforms.Form):
|
|||||||
title = wtforms.TextField(
|
title = wtforms.TextField(
|
||||||
_('Title'),
|
_('Title'),
|
||||||
[wtforms.validators.Length(min=0, max=500)])
|
[wtforms.validators.Length(min=0, max=500)])
|
||||||
description = wtforms.TextAreaField('Description of this work')
|
description = wtforms.TextAreaField(
|
||||||
|
_('Description of this work'))
|
||||||
tags = wtforms.TextField(
|
tags = wtforms.TextField(
|
||||||
_('Tags'),
|
_('Tags'),
|
||||||
[tag_length_validator])
|
[tag_length_validator])
|
||||||
|
37
mediagoblin/templates/mediagoblin/auth/change_fp.html
Normal file
37
mediagoblin/templates/mediagoblin/auth/change_fp.html
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{#
|
||||||
|
# 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/>.
|
||||||
|
#}
|
||||||
|
{% extends "mediagoblin/base.html" %}
|
||||||
|
|
||||||
|
{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
|
||||||
|
|
||||||
|
{% block mediagoblin_content %}
|
||||||
|
|
||||||
|
<form action="{{ request.urlgen('mediagoblin.auth.verify_forgot_password') }}"
|
||||||
|
method="POST" enctype="multipart/form-data">
|
||||||
|
<div class="grid_6 prefix_1 suffix_1 form_box">
|
||||||
|
<h1>{% trans %}Enter your new password{% endtrans %}</h1>
|
||||||
|
|
||||||
|
{{ wtforms_util.render_divs(cp_form) }}
|
||||||
|
<div class="form_submit_buttons">
|
||||||
|
<input type="submit" value="submit" class="button"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
|
37
mediagoblin/templates/mediagoblin/auth/forgot_password.html
Normal file
37
mediagoblin/templates/mediagoblin/auth/forgot_password.html
Normal file
@ -0,0 +1,37 @@
|
|||||||
|
{#
|
||||||
|
# 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/>.
|
||||||
|
#}
|
||||||
|
{% extends "mediagoblin/base.html" %}
|
||||||
|
|
||||||
|
{% import "/mediagoblin/utils/wtforms.html" as wtforms_util %}
|
||||||
|
|
||||||
|
{% block mediagoblin_content %}
|
||||||
|
|
||||||
|
<form action="{{ request.urlgen('mediagoblin.auth.forgot_password') }}"
|
||||||
|
method="POST" enctype="multipart/form-data">
|
||||||
|
<div class="grid_6 prefix_1 suffix_1 form_box">
|
||||||
|
<h1>{% trans %}Enter your username or email{% endtrans %}</h1>
|
||||||
|
|
||||||
|
{{ wtforms_util.render_divs(fp_form) }}
|
||||||
|
<div class="form_submit_buttons">
|
||||||
|
<input type="submit" value="submit" class="button"/>
|
||||||
|
</div>
|
||||||
|
|
||||||
|
</div>
|
||||||
|
</form>
|
||||||
|
{% endblock %}
|
||||||
|
|
@ -1,6 +1,6 @@
|
|||||||
{#
|
{#
|
||||||
# GNU MediaGoblin -- federated, autonomous media hosting
|
# GNU MediaGoblin -- federated, autonomous media hosting
|
||||||
# Copyright (C) 2011 MediaGoblin contributors. See AUTHORS.
|
# Copyright (C) 2011 Free Software Foundation, Inc
|
||||||
#
|
#
|
||||||
# This program is free software: you can redistribute it and/or modify
|
# 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
|
# it under the terms of the GNU Affero General Public License as published by
|
||||||
@ -19,6 +19,9 @@
|
|||||||
|
|
||||||
{% block mediagoblin_content %}
|
{% block mediagoblin_content %}
|
||||||
<p>
|
<p>
|
||||||
{% trans %}Resent your verification email.{% endtrans %}
|
{% trans -%}
|
||||||
|
Your password has been changed. Try to log in now.
|
||||||
|
{%- endtrans %}
|
||||||
</p>
|
</p>
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
|
28
mediagoblin/templates/mediagoblin/auth/fp_email_sent.html
Normal file
28
mediagoblin/templates/mediagoblin/auth/fp_email_sent.html
Normal file
@ -0,0 +1,28 @@
|
|||||||
|
{#
|
||||||
|
# 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/>.
|
||||||
|
#}
|
||||||
|
{% 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 %}
|
||||||
|
|
@ -0,0 +1,30 @@
|
|||||||
|
{#
|
||||||
|
# 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/>.
|
||||||
|
#}
|
||||||
|
|
||||||
|
{% trans username=username, verification_url=verification_url|safe -%}
|
||||||
|
Hi {{ username }},
|
||||||
|
|
||||||
|
to change your GNU MediaGoblin password, open the following URL in
|
||||||
|
your web browser:
|
||||||
|
|
||||||
|
{{ verification_url }}
|
||||||
|
|
||||||
|
If you think this is an error, just ignore this email and continue being
|
||||||
|
a happy goblin!
|
||||||
|
{%- endtrans %}
|
||||||
|
|
@ -45,6 +45,12 @@
|
|||||||
<a href="{{ request.urlgen('mediagoblin.auth.register') }}">
|
<a href="{{ request.urlgen('mediagoblin.auth.register') }}">
|
||||||
{%- trans %}Create one here!{% endtrans %}</a>
|
{%- trans %}Create one here!{% endtrans %}</a>
|
||||||
</p>
|
</p>
|
||||||
|
<p>
|
||||||
|
{% trans %}Forgot your password?{% endtrans %}
|
||||||
|
<br />
|
||||||
|
<a href="{{ request.urlgen('mediagoblin.auth.forgot_password') }}">
|
||||||
|
{%- trans %}Change it!{% endtrans %}</a>
|
||||||
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
</form>
|
</form>
|
||||||
|
@ -21,7 +21,7 @@
|
|||||||
|
|
||||||
{% block mediagoblin_content %}
|
{% block mediagoblin_content %}
|
||||||
{% if request.user %}
|
{% if request.user %}
|
||||||
<h1>Explore</h1>
|
<h1>{% trans %}Explore{% endtrans %}</h1>
|
||||||
{% else %}
|
{% else %}
|
||||||
<div class="grid_11 alpha">
|
<div class="grid_11 alpha">
|
||||||
<h1>{% trans %}Hi there, media lover! MediaGoblin is...{% endtrans %}</h1>
|
<h1>{% trans %}Hi there, media lover! MediaGoblin is...{% endtrans %}</h1>
|
||||||
@ -35,9 +35,12 @@
|
|||||||
</ul>
|
</ul>
|
||||||
|
|
||||||
{% if allow_registration %}
|
{% if allow_registration %}
|
||||||
<p>Excited to join us? To add your own media, make collections and save favorites...<p>
|
<p>{% trans %}Excited to join us?{% endtrans %}<p>
|
||||||
<a class="header_submit_highlight" href="{{ request.urlgen('mediagoblin.auth.register') }}">Create a free account</a> or
|
{% trans register_url=request.urlgen('mediagoblin.auth.register') -%}
|
||||||
<a class="header_submit" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a>
|
<a class="header_submit_highlight" href="{{ register_url }}">Create a free account</a>
|
||||||
|
or
|
||||||
|
<a class="header_submit" href="http://wiki.mediagoblin.org/HackingHowto">Set up MediaGoblin on your own server</a>
|
||||||
|
{%- endtrans %}
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
|
||||||
@ -47,6 +50,6 @@
|
|||||||
|
|
||||||
<div class="clear"></div>
|
<div class="clear"></div>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<h2>Most recent media</h2>
|
<h2>{% trans %}Most recent media{% endtrans %}</h2>
|
||||||
{{ object_gallery(request, media_entries, pagination) }}
|
{{ object_gallery(request, media_entries, pagination) }}
|
||||||
{% endblock %}
|
{% endblock %}
|
||||||
|
@ -31,17 +31,23 @@
|
|||||||
Really delete {{ title }}?
|
Really delete {{ title }}?
|
||||||
{%- endtrans %}
|
{%- endtrans %}
|
||||||
</h1>
|
</h1>
|
||||||
<p>
|
|
||||||
<em>
|
|
||||||
{%- trans -%}
|
|
||||||
If you choose yes, the media entry will be deleted <strong>permanently.</strong>
|
|
||||||
{%- endtrans %}
|
|
||||||
</em>
|
|
||||||
</p>
|
|
||||||
|
|
||||||
{{ wtforms_util.render_divs(form) }}
|
<div style="text-align: center;" >
|
||||||
|
<img src="{{ request.app.public_store.file_url(
|
||||||
|
media['media_files']['thumb']) }}" />
|
||||||
|
</div>
|
||||||
|
|
||||||
|
<br />
|
||||||
|
|
||||||
|
<p class="delete_checkbox_box">
|
||||||
|
{{ form.confirm }}
|
||||||
|
{{ _(form.confirm.label.text) }}
|
||||||
|
</p>
|
||||||
|
|
||||||
<div class="form_submit_buttons">
|
<div class="form_submit_buttons">
|
||||||
<input type="submit" value="{% trans %}Save changes{% endtrans %}" class="button" />
|
{# TODO: This isn't a button really... might do unexpected things :) #}
|
||||||
|
<a class="cancel_link" href="{{ media.url_for_self(request.urlgen) }}">{% trans %}Cancel{% endtrans %}</a>
|
||||||
|
<input type="submit" value="{% trans %}Delete Permanently{% endtrans %}" class="button" />
|
||||||
{{ csrf_token }}
|
{{ csrf_token }}
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -33,15 +33,18 @@
|
|||||||
<div class="pagination">
|
<div class="pagination">
|
||||||
<p>
|
<p>
|
||||||
{% if pagination.has_prev %}
|
{% if pagination.has_prev %}
|
||||||
<a href="{{ pagination.get_page_url_explicit(
|
{% set prev_url = pagination.get_page_url_explicit(
|
||||||
base_url, get_params,
|
base_url, get_params,
|
||||||
pagination.page - 1) }}"><img class="pagination_arrow" src="/mgoblin_static/images/pagination_left.png" alt="Previous page" />Newer</a>
|
pagination.page - 1) %}
|
||||||
|
<a href="{{ prev_url }}"><img class="pagination_arrow" src="{{ request.staticdirect('/images/pagination_left.png') }}" alt="Previous page" /></a>
|
||||||
|
<a href="{{ prev_url }}">{% trans %}Newer{% endtrans %}</a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{% if pagination.has_next %}
|
{% if pagination.has_next %}
|
||||||
<a href="{{ pagination.get_page_url_explicit(
|
{% set next_url = pagination.get_page_url_explicit(
|
||||||
base_url, get_params,
|
base_url, get_params,
|
||||||
pagination.page + 1) }}">Older<img class="pagination_arrow" src="/mgoblin_static/images/pagination_right.png" alt="Next page" />
|
pagination.page + 1) %}
|
||||||
</a>
|
<a href="{{ next_url }}">{% trans %}Older{% endtrans %}</a>
|
||||||
|
<a href="{{ next_url }}"><img class="pagination_arrow" src="{{ request.staticdirect('/images/pagination_right.png') }}" alt="Next page" /></a>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
<br />
|
<br />
|
||||||
Go to page:
|
Go to page:
|
||||||
|
@ -25,23 +25,23 @@
|
|||||||
{# There are no previous entries for the very first media entry #}
|
{# There are no previous entries for the very first media entry #}
|
||||||
{% if prev_entry_url %}
|
{% if prev_entry_url %}
|
||||||
<a class="navigation_button navigation_left" href="{{ prev_entry_url }}">
|
<a class="navigation_button navigation_left" href="{{ prev_entry_url }}">
|
||||||
<img src="/mgoblin_static/images/navigation_left.png" alt="Previous image" />
|
<img src="{{ request.staticdirect('/images/navigation_left.png') }}" alt="Previous image" />
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{# This is the first entry. display greyed-out 'previous' image #}
|
{# This is the first entry. display greyed-out 'previous' image #}
|
||||||
<p class="navigation_button navigation_left">
|
<p class="navigation_button navigation_left">
|
||||||
<img src="/mgoblin_static/images/navigation_end.png" alt="No previous images" />
|
<img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No previous images" />
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
{# Likewise, this could be the very last media entry #}
|
{# Likewise, this could be the very last media entry #}
|
||||||
{% if next_entry_url %}
|
{% if next_entry_url %}
|
||||||
<a class="navigation_button" href="{{ next_entry_url }}">
|
<a class="navigation_button" href="{{ next_entry_url }}">
|
||||||
<img src="/mgoblin_static/images/navigation_right.png" alt="Next image" />
|
<img src="{{ request.staticdirect('/images/navigation_right.png') }}" alt="Next image" />
|
||||||
</a>
|
</a>
|
||||||
{% else %}
|
{% else %}
|
||||||
{# This is the last entry. display greyed-out 'next' image #}
|
{# This is the last entry. display greyed-out 'next' image #}
|
||||||
<p class="navigation_button">
|
<p class="navigation_button">
|
||||||
<img src="/mgoblin_static/images/navigation_end.png" alt="No following images" />
|
<img src="{{ request.staticdirect('/images/navigation_end.png') }}" alt="No following images" />
|
||||||
</p>
|
</p>
|
||||||
{% endif %}
|
{% endif %}
|
||||||
</div>
|
</div>
|
||||||
|
@ -15,6 +15,7 @@
|
|||||||
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
# along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
|
|
||||||
import urlparse
|
import urlparse
|
||||||
|
import datetime
|
||||||
|
|
||||||
from nose.tools import assert_equal
|
from nose.tools import assert_equal
|
||||||
|
|
||||||
@ -237,6 +238,93 @@ def test_register_views(test_app):
|
|||||||
|
|
||||||
## TODO: Also check for double instances of an email address?
|
## TODO: Also check for double instances of an email address?
|
||||||
|
|
||||||
|
### Oops, forgot the password
|
||||||
|
# -------------------
|
||||||
|
util.clear_test_template_context()
|
||||||
|
response = test_app.post(
|
||||||
|
'/auth/forgot_password/',
|
||||||
|
{'username': 'happygirl'})
|
||||||
|
response.follow()
|
||||||
|
|
||||||
|
## Did we redirect to the proper page? Use the right template?
|
||||||
|
assert_equal(
|
||||||
|
urlparse.urlsplit(response.location)[2],
|
||||||
|
'/auth/forgot_password/email_sent/')
|
||||||
|
assert util.TEMPLATE_TEST_CONTEXT.has_key(
|
||||||
|
'mediagoblin/auth/fp_email_sent.html')
|
||||||
|
|
||||||
|
## Make sure link to change password is sent by email
|
||||||
|
assert len(util.EMAIL_TEST_INBOX) == 1
|
||||||
|
message = util.EMAIL_TEST_INBOX.pop()
|
||||||
|
assert message['To'] == 'happygrrl@example.org'
|
||||||
|
email_context = util.TEMPLATE_TEST_CONTEXT[
|
||||||
|
'mediagoblin/auth/fp_verification_email.txt']
|
||||||
|
#TODO - change the name of verification_url to something forgot-password-ish
|
||||||
|
assert email_context['verification_url'] in message.get_payload(decode=True)
|
||||||
|
|
||||||
|
path = urlparse.urlsplit(email_context['verification_url'])[2]
|
||||||
|
get_params = urlparse.urlsplit(email_context['verification_url'])[3]
|
||||||
|
assert path == u'/auth/forgot_password/verify/'
|
||||||
|
parsed_get_params = urlparse.parse_qs(get_params)
|
||||||
|
|
||||||
|
# user should have matching parameters
|
||||||
|
new_user = mg_globals.database.User.find_one({'username': 'happygirl'})
|
||||||
|
assert parsed_get_params['userid'] == [unicode(new_user['_id'])]
|
||||||
|
assert parsed_get_params['token'] == [new_user['fp_verification_key']]
|
||||||
|
|
||||||
|
### The forgotten password token should be set to expire in ~ 10 days
|
||||||
|
# A few ticks have expired so there are only 9 full days left...
|
||||||
|
assert (new_user['fp_token_expire'] - datetime.datetime.now()).days == 9
|
||||||
|
|
||||||
|
## Try using a bs password-changing verification key, shouldn't work
|
||||||
|
util.clear_test_template_context()
|
||||||
|
response = test_app.get(
|
||||||
|
"/auth/forgot_password/verify/?userid=%s&token=total_bs" % unicode(
|
||||||
|
new_user['_id']), status=400)
|
||||||
|
assert response.status == '400 Bad Request'
|
||||||
|
|
||||||
|
## Try using an expired token to change password, shouldn't work
|
||||||
|
util.clear_test_template_context()
|
||||||
|
real_token_expiration = new_user['fp_token_expire']
|
||||||
|
new_user['fp_token_expire'] = datetime.datetime.now()
|
||||||
|
new_user.save()
|
||||||
|
response = test_app.get("%s?%s" % (path, get_params), status=400)
|
||||||
|
assert response.status == '400 Bad Request'
|
||||||
|
new_user['fp_token_expire'] = real_token_expiration
|
||||||
|
new_user.save()
|
||||||
|
|
||||||
|
## Verify step 1 of password-change works -- can see form to change password
|
||||||
|
util.clear_test_template_context()
|
||||||
|
response = test_app.get("%s?%s" % (path, get_params))
|
||||||
|
assert util.TEMPLATE_TEST_CONTEXT.has_key('mediagoblin/auth/change_fp.html')
|
||||||
|
|
||||||
|
## Verify step 2.1 of password-change works -- report success to user
|
||||||
|
util.clear_test_template_context()
|
||||||
|
response = test_app.post(
|
||||||
|
'/auth/forgot_password/verify/', {
|
||||||
|
'userid': parsed_get_params['userid'],
|
||||||
|
'password': 'iamveryveryhappy',
|
||||||
|
'confirm_password': 'iamveryveryhappy',
|
||||||
|
'token': parsed_get_params['token']})
|
||||||
|
response.follow()
|
||||||
|
assert util.TEMPLATE_TEST_CONTEXT.has_key(
|
||||||
|
'mediagoblin/auth/fp_changed_success.html')
|
||||||
|
|
||||||
|
## Verify step 2.2 of password-change works -- login w/ new password success
|
||||||
|
util.clear_test_template_context()
|
||||||
|
response = test_app.post(
|
||||||
|
'/auth/login/', {
|
||||||
|
'username': u'happygirl',
|
||||||
|
'password': 'iamveryveryhappy'})
|
||||||
|
|
||||||
|
# User should be redirected
|
||||||
|
response.follow()
|
||||||
|
assert_equal(
|
||||||
|
urlparse.urlsplit(response.location)[2],
|
||||||
|
'/')
|
||||||
|
assert util.TEMPLATE_TEST_CONTEXT.has_key(
|
||||||
|
'mediagoblin/root.html')
|
||||||
|
|
||||||
|
|
||||||
@setup_fresh_app
|
@setup_fresh_app
|
||||||
def test_authentication_views(test_app):
|
def test_authentication_views(test_app):
|
||||||
|
52
mediagoblin/tests/test_cache.py
Normal file
52
mediagoblin/tests/test_cache.py
Normal file
@ -0,0 +1,52 @@
|
|||||||
|
# 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/>.
|
||||||
|
|
||||||
|
|
||||||
|
from mediagoblin.tests.tools import setup_fresh_app
|
||||||
|
from mediagoblin import mg_globals
|
||||||
|
|
||||||
|
|
||||||
|
DATA_TO_CACHE = {
|
||||||
|
'herp': 'derp',
|
||||||
|
'lol': 'cats'}
|
||||||
|
|
||||||
|
|
||||||
|
def _get_some_data(key):
|
||||||
|
"""
|
||||||
|
Stuid function that makes use of some caching.
|
||||||
|
"""
|
||||||
|
some_data_cache = mg_globals.cache.get_cache('sum_data')
|
||||||
|
if some_data_cache.has_key(key):
|
||||||
|
return some_data_cache.get(key)
|
||||||
|
|
||||||
|
value = DATA_TO_CACHE.get(key)
|
||||||
|
some_data_cache.put(key, value)
|
||||||
|
return value
|
||||||
|
|
||||||
|
|
||||||
|
@setup_fresh_app
|
||||||
|
def test_cache_working(test_app):
|
||||||
|
some_data_cache = mg_globals.cache.get_cache('sum_data')
|
||||||
|
assert not some_data_cache.has_key('herp')
|
||||||
|
assert _get_some_data('herp') == 'derp'
|
||||||
|
assert some_data_cache.get('herp') == 'derp'
|
||||||
|
# should get the same value again
|
||||||
|
assert _get_some_data('herp') == 'derp'
|
||||||
|
|
||||||
|
# now we force-change it, but the function should use the cached
|
||||||
|
# version
|
||||||
|
some_data_cache.put('herp', 'pred')
|
||||||
|
assert _get_some_data('herp') == 'pred'
|
@ -19,5 +19,9 @@ base_url = /mgoblin_media/
|
|||||||
[storage:queuestore]
|
[storage:queuestore]
|
||||||
base_dir = %(here)s/test_user_dev/media/queue
|
base_dir = %(here)s/test_user_dev/media/queue
|
||||||
|
|
||||||
|
[beaker.cache]
|
||||||
|
data_dir = %(here)s/test_user_dev/beaker/cache/data
|
||||||
|
lock_dir = %(here)s/test_user_dev/beaker/cache/lock
|
||||||
|
|
||||||
[celery]
|
[celery]
|
||||||
celery_always_eager = true
|
celery_always_eager = true
|
||||||
|
@ -52,7 +52,7 @@ class FakeStorageSystem():
|
|||||||
self.foobie = foobie
|
self.foobie = foobie
|
||||||
self.blech = blech
|
self.blech = blech
|
||||||
|
|
||||||
class FakeRemoteStorage(storage.BasicFileStorage):
|
class FakeRemoteStorage(storage.filestorage.BasicFileStorage):
|
||||||
# Theoretically despite this, all the methods should work but it
|
# Theoretically despite this, all the methods should work but it
|
||||||
# should force copying to the workbench
|
# should force copying to the workbench
|
||||||
local_storage = False
|
local_storage = False
|
||||||
@ -66,7 +66,7 @@ def test_storage_system_from_config():
|
|||||||
'garbage_arg': 'trash'})
|
'garbage_arg': 'trash'})
|
||||||
assert this_storage.base_url == 'http://example.org/moodia/'
|
assert this_storage.base_url == 'http://example.org/moodia/'
|
||||||
assert this_storage.base_dir == '/tmp/'
|
assert this_storage.base_dir == '/tmp/'
|
||||||
assert this_storage.__class__ is storage.BasicFileStorage
|
assert this_storage.__class__ is storage.filestorage.BasicFileStorage
|
||||||
|
|
||||||
this_storage = storage.storage_system_from_config(
|
this_storage = storage.storage_system_from_config(
|
||||||
{'foobie': 'eiboof',
|
{'foobie': 'eiboof',
|
||||||
@ -88,7 +88,7 @@ def get_tmp_filestorage(mount_url=None, fake_remote=False):
|
|||||||
if fake_remote:
|
if fake_remote:
|
||||||
this_storage = FakeRemoteStorage(tmpdir, mount_url)
|
this_storage = FakeRemoteStorage(tmpdir, mount_url)
|
||||||
else:
|
else:
|
||||||
this_storage = storage.BasicFileStorage(tmpdir, mount_url)
|
this_storage = storage.filestorage.BasicFileStorage(tmpdir, mount_url)
|
||||||
return tmpdir, this_storage
|
return tmpdir, this_storage
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,7 +178,8 @@ class TestSubmission:
|
|||||||
# No work: user=media.uploader().username,
|
# No work: user=media.uploader().username,
|
||||||
user=self.test_user['username'],
|
user=self.test_user['username'],
|
||||||
media=media['_id']),
|
media=media['_id']),
|
||||||
{'confirm': 'False'})
|
# no value means no confirm
|
||||||
|
{})
|
||||||
|
|
||||||
response.follow()
|
response.follow()
|
||||||
|
|
||||||
@ -197,7 +198,7 @@ class TestSubmission:
|
|||||||
# No work: user=media.uploader().username,
|
# No work: user=media.uploader().username,
|
||||||
user=self.test_user['username'],
|
user=self.test_user['username'],
|
||||||
media=media['_id']),
|
media=media['_id']),
|
||||||
{'confirm': 'True'})
|
{'confirm': 'y'})
|
||||||
|
|
||||||
response.follow()
|
response.follow()
|
||||||
|
|
||||||
|
@ -26,7 +26,5 @@ class MediaCommentForm(wtforms.Form):
|
|||||||
|
|
||||||
|
|
||||||
class ConfirmDeleteForm(wtforms.Form):
|
class ConfirmDeleteForm(wtforms.Form):
|
||||||
confirm = wtforms.RadioField('Confirm',
|
confirm = wtforms.BooleanField(
|
||||||
default='False',
|
_('I am sure I want to delete this'))
|
||||||
choices=[('False', 'No, I made a mistake!'),
|
|
||||||
('True', 'Yes, delete it!')])
|
|
||||||
|
@ -154,7 +154,7 @@ def media_confirm_delete(request, media):
|
|||||||
form = user_forms.ConfirmDeleteForm(request.POST)
|
form = user_forms.ConfirmDeleteForm(request.POST)
|
||||||
|
|
||||||
if request.method == 'POST' and form.validate():
|
if request.method == 'POST' and form.validate():
|
||||||
if request.POST.get('confirm') == 'True':
|
if form.confirm.data is True:
|
||||||
username = media.uploader()['username']
|
username = media.uploader()['username']
|
||||||
|
|
||||||
# Delete all files on the public storage
|
# Delete all files on the public storage
|
||||||
@ -165,9 +165,8 @@ def media_confirm_delete(request, media):
|
|||||||
return redirect(request, "mediagoblin.user_pages.user_home",
|
return redirect(request, "mediagoblin.user_pages.user_home",
|
||||||
user=username)
|
user=username)
|
||||||
else:
|
else:
|
||||||
return redirect(request, "mediagoblin.user_pages.media_home",
|
return exc.HTTPFound(
|
||||||
user=media.uploader()['username'],
|
location=media.url_for_self(request.urlgen))
|
||||||
media=media['slug'])
|
|
||||||
|
|
||||||
if ((request.user[u'is_admin'] and
|
if ((request.user[u'is_admin'] and
|
||||||
request.user[u'_id'] != media.uploader()[u'_id'])):
|
request.user[u'_id'] != media.uploader()[u'_id'])):
|
||||||
|
@ -692,7 +692,7 @@ def delete_media_files(media):
|
|||||||
Arguments:
|
Arguments:
|
||||||
- media: A MediaEntry document
|
- media: A MediaEntry document
|
||||||
"""
|
"""
|
||||||
for handle, listpath in media['media_files'].items():
|
for listpath in media['media_files'].itervalues():
|
||||||
mg_globals.public_store.delete_file(
|
mg_globals.public_store.delete_file(
|
||||||
listpath)
|
listpath)
|
||||||
|
|
||||||
|
Loading…
x
Reference in New Issue
Block a user